[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [emerge/python3] portage/win32libs-sources/libssh-src: add pageant support for 0.5.2 release
From:       Patrick Spendrin <ps_ml () gmx ! de>
Date:       2012-02-01 23:38:26
Message-ID: 20120201233826.64BA5A60A6 () git ! kde ! org
[Download RAW message or body]

Git commit 5341d81f4cc71213006adb2984d1ff22c265c077 by Patrick Spendrin.
Committed on 02/02/2012 at 00:38.
Pushed by sengels into branch 'python3'.

add pageant support for 0.5.2 release

A  +489  -0    portage/win32libs-sources/libssh-src/0001-implement-support-for-putty-s-pageant.patch
 A  +130  -0    portage/win32libs-sources/libssh-src/0002-add-a-way-to-test-ssh-connections-on-windows.patch
 M  +2    -0    portage/win32libs-sources/libssh-src/libssh-src-0.5.2-20120131.py

http://commits.kde.org/emerge/5341d81f4cc71213006adb2984d1ff22c265c077

diff --git a/portage/win32libs-sources/libssh-src/0001-implement-support-for-putty-s-pageant.patch \
b/portage/win32libs-sources/libssh-src/0001-implement-support-for-putty-s-pageant.patch
 new file mode 100644
index 0000000..55ae318
--- /dev/null
+++ b/portage/win32libs-sources/libssh-src/0001-implement-support-for-putty-s-pageant.patch
 @@ -0,0 +1,489 @@
+From 3608d35c272326e5b513cda7d963752c297eb04a Mon Sep 17 00:00:00 2001
+From: Patrick Spendrin <ps_ml@gmx.de>
+Date: Wed, 1 Feb 2012 15:20:50 +0100
+Subject: [PATCH 1/2] implement support for putty's pageant
+
+---
+ include/libssh/agent.h |    2 -
+ src/CMakeLists.txt     |    6 +++
+ src/agent.c            |   74 ++++++++++++++++++++++++++++----
+ src/auth.c             |    4 --
+ src/keys.c             |    2 -
+ src/session.c          |    4 --
+ src/winpgntc.c         |  107 ++++++++++++++++++++++++++++++++++++++++++++++++
+ src/winpgntc.h         |   34 +++++++++++++++
+ 8 files changed, 211 insertions(+), 22 deletions(-)
+ create mode 100644 src/winpgntc.c
+ create mode 100644 src/winpgntc.h
+
+diff --git a/include/libssh/agent.h b/include/libssh/agent.h
+index b620b33..e877466 100644
+--- a/include/libssh/agent.h
++++ b/include/libssh/agent.h
+@@ -53,7 +53,6 @@ struct ssh_agent_struct {
+   unsigned int count;
+ };
+ 
+-#ifndef _WIN32
+ /* agent.c */
+ /**
+  * @brief Create a new ssh agent structure.
+@@ -91,7 +90,6 @@ struct ssh_public_key_struct *agent_get_first_ident(struct \
ssh_session_struct *s + ssh_string agent_sign_data(struct ssh_session_struct \
*session, +     struct ssh_buffer_struct *data,
+     struct ssh_public_key_struct *pubkey);
+-#endif
+ 
+ #endif /* __AGENT_H */
+ /* vim: set ts=2 sw=2 et cindent: */
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index e158665..ffc7a10 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -113,6 +113,12 @@ set(libssh_SRCS
+   threads.c
+   wrapper.c
+ )
++if (WIN32)
++  set(libssh_SRCS
++    ${libssh_SRCS}
++    winpgntc.c
++  )
++endif (WIN32)
+ 
+ if (WITH_SFTP)
+   set(libssh_SRCS
+diff --git a/src/agent.c b/src/agent.c
+index a457d5e..66cb6ca 100644
+--- a/src/agent.c
++++ b/src/agent.c
+@@ -34,32 +34,39 @@
+  *    the agent returns the signed data
+  */
+ 
+-#ifndef _WIN32
+-
+ #include <stdlib.h>
+ #include <errno.h>
+ #include <string.h>
+ #include <stdio.h>
+ 
++#ifdef _WIN32
++#include <winsock2.h>
++#include <windows.h>
++#else
+ #include <unistd.h>
+-
+-#ifndef _WIN32
+ #include <arpa/inet.h>
+ #endif
+ 
+ #include "libssh/agent.h"
+-#include "libssh/priv.h"
+-#include "libssh/socket.h"
+ #include "libssh/buffer.h"
+ #include "libssh/session.h"
+ #include "libssh/keys.h"
++#ifndef _WIN32
++#include "libssh/priv.h"
++#include "libssh/socket.h"
+ #include "libssh/poll.h"
+-
++#else
++#include "winpgntc.h"
++#endif
+ /* macro to check for "agent failure" message */
+ #define agent_failed(x) \
+   (((x) == SSH_AGENT_FAILURE) || ((x) == SSH_COM_AGENT2_FAILURE) || \
+    ((x) == SSH2_AGENT_FAILURE))
+ 
++#ifdef _WIN32
++#define AGENT_COPYDATA_ID 0x804e50ba   /* random goop */
++#endif
++
+ static uint32_t agent_get_u32(const void *vp) {
+   const uint8_t *p = (const uint8_t *)vp;
+   uint32_t v;
+@@ -81,6 +88,7 @@ static void agent_put_u32(void *vp, uint32_t v) {
+   p[3] = (uint8_t)v & 0xff;
+ }
+ 
++#ifndef _WIN32
+ static size_t atomicio(ssh_socket s, void *buf, size_t n, int do_read) {
+   char *b = buf;
+   size_t pos = 0;
+@@ -121,6 +129,7 @@ static size_t atomicio(ssh_socket s, void *buf, size_t n, int \
do_read) { + 
+   return pos;
+ }
++#endif
+ 
+ ssh_agent agent_new(struct ssh_session_struct *session) {
+   ssh_agent agent = NULL;
+@@ -132,16 +141,19 @@ ssh_agent agent_new(struct ssh_session_struct *session) {
+   ZERO_STRUCTP(agent);
+ 
+   agent->count = 0;
++#ifndef _WIN32
+   agent->sock = ssh_socket_new(session);
+   if (agent->sock == NULL) {
+     SAFE_FREE(agent);
+     return NULL;
+   }
++#endif
+ 
+   return agent;
+ }
+ 
+ void agent_close(struct ssh_agent_struct *agent) {
++#ifndef _WIN32
+   if (agent == NULL) {
+     return;
+   }
+@@ -149,6 +161,7 @@ void agent_close(struct ssh_agent_struct *agent) {
+   if (getenv("SSH_AUTH_SOCK")) {
+     ssh_socket_close(agent->sock);
+   }
++#endif
+ }
+ 
+ void agent_free(ssh_agent agent) {
+@@ -156,15 +169,18 @@ void agent_free(ssh_agent agent) {
+     if (agent->ident) {
+       ssh_buffer_free(agent->ident);
+     }
++#ifndef _WIN32
+     if (agent->sock) {
+       agent_close(agent);
+       ssh_socket_free(agent->sock);
+     }
++#endif
+     SAFE_FREE(agent);
+   }
+ }
+ 
+ static int agent_connect(ssh_session session) {
++#ifndef _WIN32
+   const char *auth_sock = NULL;
+ 
+   if (session == NULL || session->agent == NULL) {
+@@ -181,6 +197,9 @@ static int agent_connect(ssh_session session) {
+   }
+ 
+   return -1;
++#else
++  return 0;
++#endif
+ }
+ 
+ #if 0
+@@ -205,6 +224,7 @@ static int agent_decode_reply(struct ssh_session_struct \
*session, int type) { + 
+ static int agent_talk(struct ssh_session_struct *session,
+     struct ssh_buffer_struct *request, struct ssh_buffer_struct *reply) {
++#ifndef _WIN32
+   uint32_t len = 0;
+   uint8_t payload[1024] = {0};
+ 
+@@ -259,7 +279,39 @@ static int agent_talk(struct ssh_session_struct *session,
+     }
+     len -= n;
+   }
++#else
++  uint32_t inlen = 0, outlen = 0, i = 0;
++  uint8_t payload[1024] = {0};
++  uint8_t outload[1024] = {0};
++  uint8_t *t = outload;
++
++  inlen = buffer_get_len(request);
++  ssh_log(session, SSH_LOG_PACKET, "agent_talk - len of request: %u", inlen);
++  agent_put_u32(payload, inlen);
++
++  /* FIXME: make a clean copy here */
++  for(i = 0; i < inlen; i++) {
++    if(i == 1024) exit(1);
++    payload[i+4] = request->data[i];
++  }
+ 
++  agent_query((void*)payload, inlen + 4, &t, &outlen);
++
++  if (outlen > 256 * 1024) {
++    ssh_set_error(session, SSH_FATAL,
++        "Authentication response too long: %u", outlen);
++    return -1;
++  }
++  ssh_log(session, SSH_LOG_PACKET, "agent_talk - response length: %u", outlen);
++
++  outlen = outlen + 4;
++  /* the first 4 bytes are the size of the buffer */
++  if (buffer_add_data(reply, (t + 4), outlen) < 0) {
++    ssh_log(session, SSH_LOG_FUNCTIONS,
++        "Not enough space");
++    return -1;
++  }
++#endif
+   return 0;
+ }
+ 
+@@ -483,7 +535,7 @@ int agent_is_running(ssh_session session) {
+   if (session == NULL || session->agent == NULL) {
+     return 0;
+   }
+-
++#ifndef _WIN32
+   if (ssh_socket_is_open(session->agent->sock)) {
+     return 1;
+   } else {
+@@ -494,9 +546,11 @@ int agent_is_running(ssh_session session) {
+     }
+   }
+ 
++#else
++  if(FindWindow(TEXT("Pageant"), TEXT("Pageant")))
++    return 1;
++#endif
+   return 0;
+ }
+ 
+-#endif /* _WIN32 */
+-
+ /* vim: set ts=2 sw=2 et cindent: */
+diff --git a/src/auth.c b/src/auth.c
+index 009340f..3fbd133 100644
+--- a/src/auth.c
++++ b/src/auth.c
+@@ -812,7 +812,6 @@ error:
+   return rc;
+ }
+ 
+-#ifndef _WIN32
+ /**
+  * @brief Try to authenticate through public key with an ssh agent.
+  *
+@@ -945,7 +944,6 @@ error:
+   leave_function();
+   return rc;
+ }
+-#endif /* _WIN32 */
+ 
+ /**
+  * @brief Try to authenticate by password.
+@@ -1127,7 +1125,6 @@ int ssh_userauth_autopubkey(ssh_session session, const char \
*passphrase) { +   }
+ 
+   /* Try authentication with ssh-agent first */
+-#ifndef _WIN32
+   if (agent_is_running(session)) {
+     char *privkey_file = NULL;
+ 
+@@ -1188,7 +1185,6 @@ int ssh_userauth_autopubkey(ssh_session session, const char \
*passphrase) { +       publickey_free(pubkey);
+     } /* for each privkey */
+   } /* if agent is running */
+-#endif
+ 
+ 
+   for (it = ssh_list_get_iterator(session->identity);
+diff --git a/src/keys.c b/src/keys.c
+index de6b8f2..d6a2d9b 100644
+--- a/src/keys.c
++++ b/src/keys.c
+@@ -1125,7 +1125,6 @@ static ssh_string RSA_do_sign(const unsigned char *payload, \
int len, RSA *privke + }
+ #endif
+ 
+-#ifndef _WIN32
+ ssh_string ssh_do_sign_with_agent(ssh_session session,
+     struct ssh_buffer_struct *buf, struct ssh_public_key_struct *publickey) {
+   struct ssh_buffer_struct *sigbuf = NULL;
+@@ -1172,7 +1171,6 @@ ssh_string ssh_do_sign_with_agent(ssh_session session,
+ 
+   return signature;
+ }
+-#endif /* _WIN32 */
+ 
+ /*
+  * This function concats in a buffer the values needed to do a signature
+diff --git a/src/session.c b/src/session.c
+index 121a629..edf49a9 100644
+--- a/src/session.c
++++ b/src/session.c
+@@ -101,12 +101,10 @@ ssh_session ssh_new(void) {
+   session->ssh1 = 0;
+ #endif
+ 
+-#ifndef _WIN32
+     session->agent = agent_new(session);
+     if (session->agent == NULL) {
+       goto err;
+     }
+-#endif /* _WIN32 */
+ 
+     session->identity = ssh_list_new();
+     if (session->identity == NULL) {
+@@ -193,9 +191,7 @@ void ssh_free(ssh_session session) {
+   }
+   ssh_list_free(session->channels);
+   session->channels=NULL;
+-#ifndef _WIN32
+   agent_free(session->agent);
+-#endif /* _WIN32 */
+   if (session->client_kex.methods) {
+     for (i = 0; i < 10; i++) {
+       SAFE_FREE(session->client_kex.methods[i]);
+diff --git a/src/winpgntc.c b/src/winpgntc.c
+new file mode 100644
+index 0000000..03abad4
+--- /dev/null
++++ b/src/winpgntc.c
+@@ -0,0 +1,107 @@
++/*
++ * winpgntc.c - interact with pageant on windows
++ *
++ * This file is part of the SSH Library
++ *
++ * Copyright (c) 2012 Patrick Spendrin <ps_ml@gmx.de>
++ *
++ * The SSH Library is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU Lesser General Public License as published by
++ * the Free Software Foundation; either version 2.1 of the License, or (at your
++ * option) any later version.
++ *
++ * The SSH Library is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
++ * License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public License
++ * along with the SSH Library; see the file COPYING.  If not, write to
++ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
++ * MA 02111-1307, USA.
++ */
++
++/* This file is based on the winpgntc.c from Putty sources:
++    PuTTY is copyright 1997-2012 Simon Tatham.
++
++    Portions copyright Robert de Bath, Joris van Rantwijk, Delian Delchev, 
++    Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas Barry, Justin 
++    Bradford, Ben Harris, Malcolm Smith, Ahmad Khalifa, Markus Kuhn, Colin 
++    Watson, and CORE SDI S.A.
++
++    Permission is hereby granted, free of charge, to any person obtaining a 
++    copy of this software and associated documentation files (the "Software"), 
++    to deal in the Software without restriction, including without limitation 
++    the rights to use, copy, modify, merge, publish, distribute, sublicense, 
++    and/or sell copies of the Software, and to permit persons to whom the 
++    Software is furnished to do so, subject to the following conditions:
++
++    The above copyright notice and this permission notice shall be included in 
++    all copies or substantial portions of the Software.
++
++    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
++    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
++    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
++    SIMON TATHAM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 
++    IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 
++    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
++
++#include <stdio.h>
++#include <stdlib.h>
++
++#include "libssh/agent.h"
++
++#define AGENT_COPYDATA_ID 0x804e50ba   /* random goop */
++#define AGENT_MAX_MSGLEN  8192
++
++#define GET_32BIT(cp) \
++  (((unsigned long)(unsigned char)(cp)[0] << 24) | \
++  ((unsigned long)(unsigned char)(cp)[1] << 16) | \
++  ((unsigned long)(unsigned char)(cp)[2] << 8) | \
++  ((unsigned long)(unsigned char)(cp)[3]))
++
++int agent_query(void *in, int inlen, void **out, int *outlen)
++{
++    HWND hwnd;
++    char mapname[25];
++    HANDLE filemap;
++    unsigned char *p, *ret;
++    int id, retlen;
++    COPYDATASTRUCT cds;
++
++    *out = NULL;
++    *outlen = 0;
++
++    hwnd = FindWindow("Pageant", "Pageant");
++    if (!hwnd)
++        return 1;           /* *out == NULL, so failure */
++    sprintf(mapname, "PageantRequest%08x", (unsigned)GetCurrentThreadId());
++    filemap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,
++                                0, AGENT_MAX_MSGLEN, mapname);
++    if (filemap == NULL || filemap == INVALID_HANDLE_VALUE)
++        return 1;            /* *out == NULL, so failure */
++    p = MapViewOfFile(filemap, FILE_MAP_WRITE, 0, 0, 0);
++    memcpy(p, in, inlen);
++    cds.dwData = AGENT_COPYDATA_ID;
++    cds.cbData = 1 + strlen(mapname);
++    cds.lpData = mapname;
++
++    /*
++     * The user either passed a null callback (indicating that the
++     * query is required to be synchronous) or CreateThread failed.
++     * Either way, we need a synchronous request.
++     */
++    id = SendMessage(hwnd, WM_COPYDATA, (WPARAM) NULL, (LPARAM) &cds);
++    if (id > 0) {
++    retlen = 4 + GET_32BIT(p);
++    ret = (unsigned char *)malloc(retlen*sizeof(unsigned char));
++    if (ret) {
++        memcpy(ret, p, retlen);
++        *out = ret;
++        *outlen = retlen;
++    }
++    }
++    UnmapViewOfFile(p);
++    CloseHandle(filemap);
++    return 1;
++}
+diff --git a/src/winpgntc.h b/src/winpgntc.h
+new file mode 100644
+index 0000000..2bf3302
+--- /dev/null
++++ b/src/winpgntc.h
+@@ -0,0 +1,34 @@
++/*
++ * winpgntc.h - interact with pageant on windows
++ *
++ * This file is part of the SSH Library
++ *
++ * Copyright (c) 2012 Patrick Spendrin <ps_ml@gmx.de>
++ *
++ * The SSH Library is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU Lesser General Public License as published by
++ * the Free Software Foundation; either version 2.1 of the License, or (at your
++ * option) any later version.
++ *
++ * The SSH Library is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
++ * License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public License
++ * along with the SSH Library; see the file COPYING.  If not, write to
++ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
++ * MA 02111-1307, USA.
++ */
++
++
++#ifndef __WINPGNTC_H
++#define __WINPGNTC_H
++
++#ifdef _WIN32
++#include "libssh/agent.h"
++
++int agent_query(void *in, int inlen, void **out, int *outlen);
++
++#endif
++#endif /* __WINPGNTC_H */
+-- 
+1.7.4.msysgit.0
+
diff --git a/portage/win32libs-sources/libssh-src/0002-add-a-way-to-test-ssh-connections-on-windows.patch \
b/portage/win32libs-sources/libssh-src/0002-add-a-way-to-test-ssh-connections-on-windows.patch
 new file mode 100644
index 0000000..417bfe0
--- /dev/null
+++ b/portage/win32libs-sources/libssh-src/0002-add-a-way-to-test-ssh-connections-on-windows.patch
 @@ -0,0 +1,130 @@
+From 92e145e05a13c3035c80102e285afde662ee14a9 Mon Sep 17 00:00:00 2001
+From: Patrick Spendrin <ps_ml@gmx.de>
+Date: Wed, 1 Feb 2012 15:21:59 +0100
+Subject: [PATCH 2/2] add a way to test ssh connections on windows
+
+---
+ examples/CMakeLists.txt |    4 ++
+ examples/sample_win.c   |   95 +++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 99 insertions(+), 0 deletions(-)
+ create mode 100644 examples/sample_win.c
+
+diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
+index aeff201..bfdf07e 100644
+--- a/examples/CMakeLists.txt
++++ b/examples/CMakeLists.txt
+@@ -34,6 +34,10 @@ if (LINUX)
+         target_link_libraries(samplesshd ${LIBSSH_SHARED_LIBRARY})
+     endif (WITH_SERVER)
+ endif (LINUX)
++if (WIN32)
++    add_executable(samplessh sample_win.c ${examples_SRCS})
++    target_link_libraries(samplessh ${LIBSSH_SHARED_LIBRARY})
++endif (WIN32)
+ 
+ add_executable(exec exec.c ${examples_SRCS})
+ target_link_libraries(exec ${LIBSSH_SHARED_LIBRARY})
+diff --git a/examples/sample_win.c b/examples/sample_win.c
+new file mode 100644
+index 0000000..e29ae7f
+--- /dev/null
++++ b/examples/sample_win.c
+@@ -0,0 +1,95 @@
++/* client.c */
++/*
++Copyright 2011 Patrick Spendrin <ps_ml@gmx.de>
++
++This file is part of the SSH Library
++
++You are free to copy this file, modify it in any way, consider it being public
++domain. This does not apply to the rest of the library though, but it is
++allowed to cut-and-paste working code from this file to any license of
++program.
++The goal is to show the API in action. It's not a reference on how terminal
++clients must be made or how a client should react.
++*/
++
++#include "config.h"
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++
++#include <libssh/callbacks.h>
++#include <libssh/libssh.h>
++#include <libssh/sftp.h>
++
++#include <fcntl.h>
++
++#include "examples_common.h"
++#define MAXCMD 10
++#define snprintf _snprintf
++
++static int client(ssh_session session, char* user, char* host){
++  int auth=0;
++  char *banner;
++  int state;
++  if (ssh_options_set(session, SSH_OPTIONS_USER, user) < 0)
++    return -1;
++  if (ssh_options_set(session, SSH_OPTIONS_HOST, host) < 0)
++    return -1;
++  printf("user and server are set\n");
++  ssh_options_parse_config(session, NULL);
++
++  if(ssh_connect(session)){
++      fprintf(stderr,"Connection failed : %s\n",ssh_get_error(session));
++      return -1;
++  }
++  state=verify_knownhost(session);
++  printf("verified known host\n");
++  if (state != 0)
++    return -1;
++  printf("trying to authenticate next\n");
++  ssh_userauth_none(session, NULL);
++  printf("trying to get banner next\n");
++  banner=ssh_get_issue_banner(session);
++  if(banner){
++      printf("%s\n",banner);
++      free(banner);
++  }
++  printf("banner has been printed\n");
++  auth=authenticate_console(session);
++  if(auth != SSH_AUTH_SUCCESS){
++    return -1;
++  }
++  ssh_log(session, SSH_LOG_FUNCTIONS, "Authentication success");
++  return 0;
++}
++
++void usage() {
++}
++
++int main(int argc, char **argv){
++    ssh_session session;
++    char *user, *host;
++
++    if(argc <= 1) {
++        printf("syntax: %s user@host\n", argv[0]);
++        printf("checks whether a ssh connection can be established\n");
++        exit(1);
++    }
++
++    host = strchr(argv[1], '@') + 1;
++    user = (char*)malloc(strlen(argv[1]) - strlen(host));
++    strncpy(user, argv[1], strlen(argv[1]) - strlen(host) - 1);
++    user[strlen(argv[1]) - strlen(host) - 1] = 0;
++    printf("testing ssh authentication to %s@%s\n", user, host);
++    session = ssh_new();
++
++    client(session, user, host);
++
++    ssh_disconnect(session);
++    ssh_free(session);
++
++    ssh_finalize();
++    free(user);
++    return 0;
++}
++
+-- 
+1.7.4.msysgit.0
+
diff --git a/portage/win32libs-sources/libssh-src/libssh-src-0.5.2-20120131.py \
b/portage/win32libs-sources/libssh-src/libssh-src-0.5.2-20120131.py index \
                b9b8b43..df0c7ea 100644
--- a/portage/win32libs-sources/libssh-src/libssh-src-0.5.2-20120131.py
+++ b/portage/win32libs-sources/libssh-src/libssh-src-0.5.2-20120131.py
@@ -16,6 +16,8 @@ class subinfo(info.infoclass):
         self.targetDigests['0.5.0'] = 'ec72a2e23f97d412c465f8ba97d688679550ac18'
         self.patchToApply['0.4.7'] = [("libssh-0.4.7-20110116.diff", 1)]
         self.patchToApply['0.5.0'] = [("libssh-0.5.0-20110601.diff", 1)]
+        self.patchToApply['0.5.2'] = \
[("0001-implement-support-for-putty-s-pageant.patch", 1),  +                          \
("0002-add-a-way-to-test-ssh-connections-on-windows.patch", 1)]  
         self.svnTargets['gitHEAD'] = "git://git.libssh.org/projects/libssh.git"
         self.svnTargets['0.4'] = "git://git.libssh.org/projects/libssh.git|v0-4"


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic