From libssh2-devel-bounces@cool.haxx.se  Sun Dec 13 20:16:34 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBDJFfle001579;
	Sun, 13 Dec 2009 20:15:43 +0100
Received: from mail-ew0-f210.google.com (mail-ew0-f210.google.com
	[209.85.219.210])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBDJFdUM001540
	for <libssh2-devel@cool.haxx.se>; Sun, 13 Dec 2009 20:15:39 +0100
Received: by ewy2 with SMTP id 2so2272938ewy.7
	for <libssh2-devel@cool.haxx.se>; Sun, 13 Dec 2009 11:15:35 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:received:received:subject:from:to:in-reply-to
	:references:content-type:date:message-id:mime-version:x-mailer
	:content-transfer-encoding;
	bh=UY13dK2xZXXlvgzXpXn4kXoHXVyM5WyjWrteB8xraCM=;
	b=rEQdTfoMq30H23mTOV2wIIT4KflzcSdCOdAxfFoI7OkDDyb0eRyoakPmbpwMJmVnO8
	CfHLylrsgCYaI47qNVV2LoSjxV3zOdWxUQQXOszO6NJqcTX/h4lgnVzqzJ658wbBr50X
	cqE/aqZX4zLhkOuhc8wk6tmylBEQholaNYBis=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=subject:from:to:in-reply-to:references:content-type:date:message-id
	:mime-version:x-mailer:content-transfer-encoding;
	b=he/tGs31qOQeff1FplFAe1JNN8DHeAQGLA5o4CkHvxhlEaHuOJxgf0+vIqkv3rRPHP
	gbiD9RIJHR9yUdGJXjq2Hx7rJpcdmGWxm4SwF9giE1gTuqgUc/jG8ueJ0h6pRY+JZObv
	Vm18PzsT3aaPsWiyH6kNixmo9DjjEmo8pjD6A=
Received: by 10.213.110.210 with SMTP id o18mr4629990ebp.13.1260731731790;
	Sun, 13 Dec 2009 11:15:31 -0800 (PST)
Received: from ?192.168.0.13? (lns-bzn-46-82-253-198-13.adsl.proxad.net
	[82.253.198.13])
	by mx.google.com with ESMTPS id 28sm6915450eyg.12.2009.12.13.11.15.29
	(version=SSLv3 cipher=RC4-MD5); Sun, 13 Dec 2009 11:15:30 -0800 (PST)
Subject: Re: libssh2 error: Would block starting up channel
From: Samuel ROZE <samuel.roze@gmail.com>
To: libssh2 development <libssh2-devel@cool.haxx.se>
In-Reply-To: <alpine.DEB.2.00.0912131947160.7214@tvnag.unkk.fr>
References: <1260713295.2959.7.camel@samuel-laptop>
	<alpine.DEB.2.00.0912131947160.7214@tvnag.unkk.fr>
Date: Sun, 13 Dec 2009 20:15:28 +0100
Message-ID: <1260731728.2959.15.camel@samuel-laptop>
Mime-Version: 1.0
X-Mailer: Evolution 2.28.1 
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

TGUgZGltYW5jaGUgMTMgZMOpY2VtYnJlIDIwMDkgw6AgMTk6NDkgKzAxMDAsIERhbmllbCBTdGVu
YmVyZyBhIMOpY3JpdCA6Cj4gV2VsbCwgeW91IGNvdWxkIHN0YXJ0IHdpdGggZXhwbGFpbmluZyBh
IGxvdCBtb3JlIGFib3V0IHlvdXIgY29kZS4gVGhhdCBlcnJvciAKPiBoYXBwZW5zIGJlY2F1c2Ug
b3RoZXJ3aXNlIGl0IHdvdWxkIGJsb2NrLCBhcyBpdCBzYXlzLiBUaGF0J3Mgbm9ybWFsbHkgbm90
IGEgCj4gcHJvYmxlbS4KCldoYXQgaXQgd291bGQgYmxvY2sgPwoKTXkgY29kZSBpcyBzbyBzaW1w
bHk6IEkgaGF2ZSBhbiBvcGVuZWQgU1NIMiBjaGFubmVsIGFuZCwgd2hlbiBteSB1c2VyCndhbnQs
IEkgaGF2ZSB0byB0cmFuc2ZlciBmaWxlcyAoU0NQIGRvZXNuJ3Qgd29yay4uLikgc28gSSB1c2Ug
U0ZUUCB3aGlsZQpteSBjaGFubmVsIGlzIGNvbm5lY3RlZCBhbmQuLi4gdGhpcyBlcnJvciBhcHBl
bmRzICEKCk1heWJlIEkgZG9uJ3QgaGF2ZSB0byB1c2UgbGlic3NoMl9zZnRwX2luaXQgYnV0IEkg
Y2FuIHVzZSBteSBvcGVuZWQKY2hhbm5lbCA/IFRoYXQgbWF5IHNvbHZlIHRoYXQgcHJvYmxlbSA/
Cgo+IEFsc28sIGl0IHNlZW1zIHRoYXQgbGluZSBpcyBxdWl0ZSBmYXIgYXdheSBmcm9tIGxpbmUg
NTAzIGluIGN1cnJlbnQgZ2l0IHdoaWNoIAo+IGdpdmVzIG1lIHRoZSBpbXByZXNzaW9uIHlvdSdy
ZSB1c2luZy9sb29raW5nIGluIGEgcmF0aGVyIG9sZCBsaWJzc2gyIHZlcnNpb24uIAo+IENhbiB0
aGF0IGJlIHRoZSBjYXNlPwoKVmVyc2lvbiAxLjIuMSAoU2VwdGVtYmVyIDI4LCAyMDA5KQooaW4g
TkVXUykKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwps
aWJzc2gyLWRldmVsIGh0dHA6Ly9jb29sLmhheHguc2UvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZv
L2xpYnNzaDItZGV2ZWwK

From libssh2-devel-bounces@cool.haxx.se  Sun Dec 13 23:17:30 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBDMFS9q002191;
	Sun, 13 Dec 2009 23:15:35 +0100
Received: from giant.haxx.se (giant.haxx.se [83.168.254.42])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBDMFQFb002178
	for <libssh2-devel@cool.haxx.se>; Sun, 13 Dec 2009 23:15:26 +0100
Date: Sun, 13 Dec 2009 23:15:26 +0100 (CET)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: libssh2 error: Would block starting up channel
In-Reply-To: <1260731728.2959.15.camel@samuel-laptop>
Message-ID: <alpine.DEB.2.00.0912132308480.7214@tvnag.unkk.fr>
References: <1260713295.2959.7.camel@samuel-laptop>
	<alpine.DEB.2.00.0912131947160.7214@tvnag.unkk.fr>
	<1260731728.2959.15.camel@samuel-laptop>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Sun, 13 Dec 2009, Samuel ROZE wrote:

>> Well, you could start with explaining a lot more about your code. That 
>> error happens because otherwise it would block, as it says. That's normally 
>> not a problem.
>
> What it would block ?

Did you try to read the docs? Is it really that bad?

The calls are blocking or non-blocking, and non-blocking ones can return 
LIBSSH2_ERROR_EAGAIN when they would otherwise block on a socket operation.

> My code is so simply: I have an opened SSH2 channel and, when my user want, 
> I have to transfer files (SCP doesn't work...) so I use SFTP while my 
> channel is connected and... this error appends !

It'll be much easier for us if you can show us a small application that 
repeats the problem.

> Maybe I don't have to use libssh2_sftp_init but I can use my opened channel 
> ? That may solve that problem ?

I don't understand. If you want SFTP, you need libssh2_sftp_init.

>> Also, it seems that line is quite far away from line 503 in current git 
>> which gives me the impression you're using/looking in a rather old libssh2 
>> version. Can that be the case?
>
> Version 1.2.1 (September 28, 2009)

Nope. There's no such error on src/sftp.c line 503 or even near it in that 
version either. In 1.2.1 the libssh2_error() call is on line 562, which is 
exactly where it still is in current git.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Dec 14 12:13:23 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBEBD9nw032389;
	Mon, 14 Dec 2009 12:13:18 +0100
Received: from mail-bw0-f226.google.com (mail-bw0-f226.google.com
	[209.85.218.226])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBEBD80Z032368
	for <libssh2-devel@cool.haxx.se>; Mon, 14 Dec 2009 12:13:08 +0100
Received: by bwz26 with SMTP id 26so2104398bwz.7
	for <libssh2-devel@cool.haxx.se>; Mon, 14 Dec 2009 03:13:03 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:mime-version:sender:received:from:date
	:x-google-sender-auth:message-id:subject:to:content-type;
	bh=ocq8ZpbQqu24ZCyQKWj06THjjTD3prcDw3Ay3bBs0l0=;
	b=OFGkeC4L7TezFwjmQ+vl9Qdzcz1uHoNort/79oqgAJ76QftUedsSwUnDB3Bdz6XxJp
	JARNIRI/jR3Ql6mLj+hMJL90Y5P2skUQc4WxHQIQb8r04zIZY7ffvypBsEU+x2gD1V/I
	y+OmFyYJx836KJvx9d6U5iZeVTUjBz6mnaatU=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=mime-version:sender:from:date:x-google-sender-auth:message-id
	:subject:to:content-type;
	b=LgjhbK/pjldSE69mn0FlwKwAlERqmBkrr1Abn+478+DKV3wreh6rH2O4jJkOxpQpFu
	RL7cUcDKuSyRGVdivkSLSRGl9u+z46s47GL9y0xaNE46lC/WYWcIlGITHCcmJ9bANtPT
	2ls02qE+iuZ7W8JnIikd2Rl00aoK8kqTqtszA=
MIME-Version: 1.0
Received: by 10.204.174.197 with SMTP id u5mr825962bkz.50.1260789183334; Mon, 
	14 Dec 2009 03:13:03 -0800 (PST)
From: Steven Van Ingelgem <steven@vaningelgem.be>
Date: Mon, 14 Dec 2009 12:12:43 +0100
X-Google-Sender-Auth: 5bcd76a39da610e6
Message-ID: <5862ce3f0912140312j59ea7f3dm520464c759f29da6@mail.gmail.com>
Subject: Warnings during building
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============1129501370=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============1129501370==
Content-Type: multipart/alternative; boundary=00032555567a68c945047aae5bd0

--00032555567a68c945047aae5bd0
Content-Type: text/plain; charset=UTF-8

Mac OSX, gcc 4.0.1

[ 19%] Building C object
externals/libssh2/CMakeFiles/ssh2.dir/src/openssl.c.o
/Users/steven/Src/server_monitor/externals/libssh2/src/openssl.c:212:
warning: unused parameter 'enc'
/Users/steven/Src/server_monitor/externals/libssh2/src/openssl.c:324:
warning: unused parameter 'session'


Grtz,
Steven

--00032555567a68c945047aae5bd0
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Mac OSX, gcc 4.0.1<br><br>[ 19%] Building C object externals/libssh2/CMakeF=
iles/ssh2.dir/src/openssl.c.o<br>/Users/steven/Src/server_monitor/externals=
/libssh2/src/openssl.c:212: warning: unused parameter &#39;enc&#39;<br>/Use=
rs/steven/Src/server_monitor/externals/libssh2/src/openssl.c:324: warning: =
unused parameter &#39;session&#39;<br>

<br><br>Grtz,<br>Steven<br>

--00032555567a68c945047aae5bd0--

--===============1129501370==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============1129501370==--

From libssh2-devel-bounces@cool.haxx.se  Mon Dec 14 13:06:15 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBEC69nK008389;
	Mon, 14 Dec 2009 13:06:13 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBEC68LV008382
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Mon, 14 Dec 2009 13:06:08 +0100
Received: from mocca.josefsson.org (c80-216-24-211.bredband.comhem.se
	[80.216.24.211]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBEC67P6024120
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Mon, 14 Dec 2009 13:06:08 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Warnings during building
References: <5862ce3f0912140312j59ea7f3dm520464c759f29da6@mail.gmail.com>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091214:libssh2-devel@cool.haxx.se::xbEB3lrSVy8j+ZEK:9jzO
Date: Mon, 14 Dec 2009 13:06:07 +0100
In-Reply-To: <5862ce3f0912140312j59ea7f3dm520464c759f29da6@mail.gmail.com>
	(Steven Van Ingelgem's message of "Mon, 14 Dec 2009 12:12:43 +0100")
Message-ID: <873a3dvjyo.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Steven Van Ingelgem <steven@vaningelgem.be> writes:

> Mac OSX, gcc 4.0.1
>
> [ 19%] Building C object
> externals/libssh2/CMakeFiles/ssh2.dir/src/openssl.c.o
> /Users/steven/Src/server_monitor/externals/libssh2/src/openssl.c:212:
> warning: unused parameter 'enc'
> /Users/steven/Src/server_monitor/externals/libssh2/src/openssl.c:324:
> warning: unused parameter 'session'

Those are harmless.  There are a bunch of ways to fix these warnings,
I've seen this usage:

static int
aes_ctr_init(EVP_CIPHER_CTX *ctx, const unsigned char *key,
	     const unsigned char *iv, int enc) /* init key */
{
  (void) enc;

And of course there are GCC attributes too.  How do people feel about
adding the above way to resolve unused parameter warnings?  I don't
really like it (it is a hack), and it isn't guaranteed to work in
general, but it does appear to solve the problem right now.

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Dec 14 13:08:39 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBEC8SvP009234;
	Mon, 14 Dec 2009 13:08:29 +0100
Received: from giant.haxx.se (giant.haxx.se [83.168.254.42])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBEC8RZm009228
	for <libssh2-devel@cool.haxx.se>; Mon, 14 Dec 2009 13:08:27 +0100
Date: Mon, 14 Dec 2009 13:08:27 +0100 (CET)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Warnings during building
In-Reply-To: <873a3dvjyo.fsf@mocca.josefsson.org>
Message-ID: <alpine.DEB.2.00.0912141307010.17665@tvnag.unkk.fr>
References: <5862ce3f0912140312j59ea7f3dm520464c759f29da6@mail.gmail.com>
	<873a3dvjyo.fsf@mocca.josefsson.org>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Mon, 14 Dec 2009, Simon Josefsson wrote:

>  (void) enc;
>
> And of course there are GCC attributes too.  How do people feel about adding 
> the above way to resolve unused parameter warnings?  I don't really like it 
> (it is a hack), and it isn't guaranteed to work in general, but it does 
> appear to solve the problem right now.

While perhaps not guaranteed, we use that approach in libcurl and I'm not 
aware of any existing compiler that doesn't support it...

To do it _really_ portable, I figure we should use a macro as UNUSED(enc) and 
then we let preprocessor magic decide the best way for the particular compiler 
used.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Dec 14 14:04:51 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBED4Ytv015578;
	Mon, 14 Dec 2009 14:04:41 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBED4Wnx015542
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Mon, 14 Dec 2009 14:04:32 +0100
Received: from mocca.josefsson.org (c80-216-24-211.bredband.comhem.se
	[80.216.24.211]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBED4Vf3025402
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Mon, 14 Dec 2009 14:04:32 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Warnings during building
References: <5862ce3f0912140312j59ea7f3dm520464c759f29da6@mail.gmail.com>
	<873a3dvjyo.fsf@mocca.josefsson.org>
	<alpine.DEB.2.00.0912141307010.17665@tvnag.unkk.fr>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091214:libssh2-devel@cool.haxx.se::Cq3A3D75LLywKC2a:WhMk
Date: Mon, 14 Dec 2009 14:04:31 +0100
In-Reply-To: <alpine.DEB.2.00.0912141307010.17665@tvnag.unkk.fr> (Daniel
	Stenberg's message of "Mon, 14 Dec 2009 13:08:27 +0100 (CET)")
Message-ID: <87zl5lso4g.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daniel Stenberg <daniel@haxx.se> writes:

> On Mon, 14 Dec 2009, Simon Josefsson wrote:
>
>>  (void) enc;
>>
>> And of course there are GCC attributes too.  How do people feel
>> about adding the above way to resolve unused parameter warnings?  I
>> don't really like it (it is a hack), and it isn't guaranteed to work
>> in general, but it does appear to solve the problem right now.
>
> While perhaps not guaranteed, we use that approach in libcurl and I'm
> not aware of any existing compiler that doesn't support it...

I take that as a +0.5 then.

> To do it _really_ portable, I figure we should use a macro as
> UNUSED(enc) and then we let preprocessor magic decide the best way for
> the particular compiler used.

Assuming that is even possible -- I could imagine some compilers will
want the change in the prototype, some in the function body, some in the
function definition, and so on...

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Dec 14 14:12:58 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBEDCqCs020040;
	Mon, 14 Dec 2009 14:12:54 +0100
Received: from mail-ew0-f210.google.com (mail-ew0-f210.google.com
	[209.85.219.210])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBEDCqDj019949
	for <libssh2-devel@cool.haxx.se>; Mon, 14 Dec 2009 14:12:52 +0100
Received: by ewy2 with SMTP id 2so2952178ewy.7
	for <libssh2-devel@cool.haxx.se>; Mon, 14 Dec 2009 05:12:47 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=googlemail.com; s=gamma;
	h=domainkey-signature:mime-version:sender:received:in-reply-to
	:references:date:x-google-sender-auth:message-id:subject:from:to
	:content-type; bh=JGmDK4dix9b2tx8kU2+ityKZmjSsCZOgGTVrFfoDrVE=;
	b=UOpVOVsvIxi9JqFJrlS7BQ2T+FiFdYsHrmUlhZqw7Abl+miCPrmHIgylex0yGeHRBg
	V8XqW9VOLH6b7Dz6Au0PI9J19smxASL932wlLmrxr8AQSzfqA4XMBWTgD4GVKAAAWh4l
	dNkMKT1ZLzFllvn9A2nNOvkqeLGqSww5IQgSQ=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma;
	h=mime-version:sender:in-reply-to:references:date
	:x-google-sender-auth:message-id:subject:from:to:content-type;
	b=DfEwWSVWPwJuBQMkROKmUeb6tzSFE4+Zlf/uw6C0kf6cRfZMgPgjUD+3GsLwqjbfBC
	AdTDFPISV1X4zKlLx9ghpcXjRgRpYqUVgAmIRFX9H4zGWOt/Q7MnNuSHHnQGWzJzdUqe
	DIrQoY5FAzjXwQCw5O6yKOz0L7iGv1x3YiH6U=
MIME-Version: 1.0
Received: by 10.213.2.70 with SMTP id 6mr3509512ebi.25.1260796366994; Mon, 14 
	Dec 2009 05:12:46 -0800 (PST)
In-Reply-To: <87zl5lso4g.fsf@mocca.josefsson.org>
References: <5862ce3f0912140312j59ea7f3dm520464c759f29da6@mail.gmail.com>
	<873a3dvjyo.fsf@mocca.josefsson.org>
	<alpine.DEB.2.00.0912141307010.17665@tvnag.unkk.fr>
	<87zl5lso4g.fsf@mocca.josefsson.org>
Date: Mon, 14 Dec 2009 13:12:46 +0000
X-Google-Sender-Auth: 545a45078478c0ec
Message-ID: <9c3275a90912140512s24c738e3ia1d2a7a7b1123197@mail.gmail.com>
Subject: Re: Warnings during building
From: Alexander Lamaison <swish@lammy.co.uk>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

2009/12/14 Simon Josefsson <simon@josefsson.org>:
> Daniel Stenberg <daniel@haxx.se> writes:
>
>> On Mon, 14 Dec 2009, Simon Josefsson wrote:
>>
>> To do it _really_ portable, I figure we should use a macro as
>> UNUSED(enc) and then we let preprocessor magic decide the best way for
>> the particular compiler used.
>
> Assuming that is even possible -- I could imagine some compilers will
> want the change in the prototype, some in the function body, some in the
> function definition, and so on...

Are we perhaps overthinking this? :-P

That said, I thought the accepted way to deal with unreferenced
parameters was to comment them out.

Alex
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Dec 14 15:51:55 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBEEpiWX016639;
	Mon, 14 Dec 2009 15:51:51 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBEEpggo016636
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Mon, 14 Dec 2009 15:51:43 +0100
Received: from mocca.josefsson.org (c80-216-24-211.bredband.comhem.se
	[80.216.24.211]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBEEpfY9028199
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Mon, 14 Dec 2009 15:51:43 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Warnings during building
References: <5862ce3f0912140312j59ea7f3dm520464c759f29da6@mail.gmail.com>
	<873a3dvjyo.fsf@mocca.josefsson.org>
	<alpine.DEB.2.00.0912141307010.17665@tvnag.unkk.fr>
	<87zl5lso4g.fsf@mocca.josefsson.org>
	<9c3275a90912140512s24c738e3ia1d2a7a7b1123197@mail.gmail.com>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091214:libssh2-devel@cool.haxx.se::DFq1ofs81zTsR9Tt:lvYd
Date: Mon, 14 Dec 2009 15:51:41 +0100
In-Reply-To: <9c3275a90912140512s24c738e3ia1d2a7a7b1123197@mail.gmail.com>
	(Alexander Lamaison's message of "Mon, 14 Dec 2009 13:12:46 +0000")
Message-ID: <87ws0pr4le.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Alexander Lamaison <swish@lammy.co.uk> writes:

> 2009/12/14 Simon Josefsson <simon@josefsson.org>:
>> Daniel Stenberg <daniel@haxx.se> writes:
>>
>>> On Mon, 14 Dec 2009, Simon Josefsson wrote:
>>>
>>> To do it _really_ portable, I figure we should use a macro as
>>> UNUSED(enc) and then we let preprocessor magic decide the best way for
>>> the particular compiler used.
>>
>> Assuming that is even possible -- I could imagine some compilers will
>> want the change in the prototype, some in the function body, some in the
>> function definition, and so on...
>
> Are we perhaps overthinking this? :-P

Any solution that solves the problem is welcome.  Right now we have one
concrete suggestion: to mark the unused variables with (void) in the
function body.

> That said, I thought the accepted way to deal with unreferenced
> parameters was to comment them out.

That doesn't always work where the required parameters in the prototype
is determined somewhere else than where it is implemented (which happens
when you have multiple backends implementing the same generic
interface).

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Dec 14 15:52:24 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBEEqM3d016803;
	Mon, 14 Dec 2009 15:52:23 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBEEqLcO016786
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Mon, 14 Dec 2009 15:52:21 +0100
Received: from mocca.josefsson.org (c80-216-24-211.bredband.comhem.se
	[80.216.24.211]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBEEqKiK028212
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Mon, 14 Dec 2009 15:52:21 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Warnings during building
References: <5862ce3f0912140312j59ea7f3dm520464c759f29da6@mail.gmail.com>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091214:libssh2-devel@cool.haxx.se::33y4o+T/n93/Jqxp:2swt
Date: Mon, 14 Dec 2009 15:52:20 +0100
In-Reply-To: <5862ce3f0912140312j59ea7f3dm520464c759f29da6@mail.gmail.com>
	(Steven Van Ingelgem's message of "Mon, 14 Dec 2009 12:12:43 +0100")
Message-ID: <87skbdr4kb.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Steven, I have pushed a patch that should fix the problem.  Please let
us know if it works for you.

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Dec 14 23:41:36 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBEMfKxp024706;
	Mon, 14 Dec 2009 23:41:29 +0100
Received: from mail.intersystems.com (mail.intersys.COM [198.133.74.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBEMfHCe024676
	for <libssh2-devel@cool.haxx.se>; Mon, 14 Dec 2009 23:41:17 +0100
X-InterSystems: Sent from InterSystems
X-InterSystems: Sent from InterSystems
From: Dave McCaldon <davem@intersystems.com>
Subject: Login failure with libssh2-1.2.2 and SuSE Enterprise 10 Linux
Date: Mon, 14 Dec 2009 17:41:11 -0500
Message-Id: <0F7C65B8-54C6-4B57-BE38-0C28B20813CF@intersystems.com>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Mime-Version: 1.0 (Apple Message framework v1077)
X-Mailer: Apple Mail (2.1077)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============1905928963=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se


--===============1905928963==
Content-Type: multipart/alternative; boundary=Apple-Mail-245--944570038


--Apple-Mail-245--944570038
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=us-ascii

I'm trying to debug a connectivity problem when connecting to a Linux =
box (SuSE Enterprise 10, kernel 2.6.16.54) with libssh2.

This works ok with OpenSSH, running with -v -v -v reports the =
server/protocol version as:

Remote protocol version 1.99, remote software version OpenSSH_4.2

With libssh2, I'm getting a login failure (which is incorrectly reported =
as a failure to exchange encryption keys because of the =
libssh2_userauth_password() bug I've previously reported).  Using the =
trace, I can see that the we're getting back packet type '51' in other =
words SSH_MSG_USERAUTH_FAILURE.

I've attached the trace log, but the interesting part is this:

[libssh2] 1.220928 Userauth: Attempting to login using password =
authentication
=3D> libssh2_transport_write plain (53 bytes)
0000: 32 00 00 00 05 64 61 76 65 6d 00 00 00 0e 73 73 2....davem....ss
0010: 68 2d 63 6f 6e 6e 65 63 74 69 6f 6e 00 00 00 08 h-connection....
0020: 70 61 73 73 77 6f 72 64 00 00 00 00 08 50 41 53 password.....PAS
0030: 53 57 4f 52 44                                  SWORD
=3D> libssh2_transport_write send() (84 bytes)
0000: 03 ee 0a db 97 e2 db 8d 93 3f a9 91 57 d8 6a 02 .........?..W.j.
0010: 18 20 c3 21 6f c8 7e 9c b0 cf 38 ab 47 46 a2 e1 . .!o.~...8.GF..
0020: 61 64 07 f3 9a 2f d1 91 8a 1c eb 11 54 5d df 86 ad.../......T]..
0030: 0c 56 d0 aa 22 3d e6 10 e2 18 93 46 f6 dc 64 09 .V.."=3D.....F..d.
0040: 05 cf 55 21 3a 01 88 ee 29 40 ec 53 7c 1d 15 06 ..U!:...)@.S|...
0050: bb 50 46 8c                                     .PF.
[libssh2] 1.221385 Transport: Looking for packet of type: 52
[libssh2] 1.221388 Transport: Looking for packet of type: 51
[libssh2] 1.221391 Transport: Looking for packet of type: 60
[libssh2] 1.264376 Transport: Looking for packet of type: 52
[libssh2] 1.264405 Transport: Looking for packet of type: 51
[libssh2] 1.264410 Transport: Looking for packet of type: 60
=3D> libssh2_transport_read() raw (68 bytes)
0000: f3 86 b0 b7 6f 3f 2a 73 5e cd b6 5c bb 6b 8d cc ....o?*s^..\.k..
0010: 0d 0e b6 89 e6 e6 a9 f5 00 5c 9d 41 ff e6 c6 02 .........\.A....
0020: 64 4c 31 ec 9a 4a a4 35 b3 fd 70 c2 0a c0 d3 83 dL1..J.5..p.....
0030: 4a 3f 8f eb e3 d9 96 5a d8 59 ea 82 43 94 21 54 J?.....Z.Y..C.!T
0040: 58 f3 c1 6e                                     X..n
=3D> libssh2_transport_read() plain (36 bytes)
0000: 33 00 00 00 1e 70 75 62 6c 69 63 6b 65 79 2c 6b 3....publickey,k
0010: 65 79 62 6f 61 72 64 2d 69 6e 74 65 72 61 63 74 eyboard-interact
0020: 69 76 65 00                                     ive.
[libssh2] 1.264919 Transport: Packet type 51 received, length=3D36
[libssh2] 1.264925 Transport: Looking for packet of type: 52
[libssh2] 1.264929 Transport: Looking for packet of type: 51
ERROR: Failed with -37, "Unable to exchange encryption keys" at =
Session.cpp:243,0


Note that the -37 error is a red herring (see my =
libssh2_userauth_password() patch), with my patch it correctly reports =
LIBSSH2_ERROR_AUTHORIZATION_FAILED.

Any thoughts on where to start debugging this?



--Apple-Mail-245--944570038
Content-Type: multipart/mixed;
	boundary=Apple-Mail-246--944570038


--Apple-Mail-246--944570038
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=us-ascii

<html><head></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">I'm =
trying to debug a connectivity problem when connecting to a Linux box =
(SuSE Enterprise 10, kernel 2.6.16.54) with =
libssh2.<div><br></div><div>This works ok with OpenSSH, running with -v =
-v -v reports the server/protocol version =
as:</div><div><br></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">Remote protocol version 1.99, remote software =
version OpenSSH_4.2</span></font></div><div><br></div><div>With libssh2, =
I'm getting a login failure (which is incorrectly reported as a failure =
to exchange encryption keys because of =
the&nbsp;libssh2_userauth_password() bug I've previously reported). =
&nbsp;Using the trace, I can see that the we're getting back packet type =
'51' in other words =
SSH_MSG_USERAUTH_FAILURE.</div><div><br></div><div>I've attached the =
trace log, but the interesting part is =
this:</div><div><br></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">[libssh2] 1.220928 Userauth: Attempting to =
login using password authentication<br>=3D&gt; libssh2_transport_write =
plain (53 bytes)<br>0000: 32 00 00 00 05 64 61 76 65 6d 00 00 00 0e 73 =
73 2....davem....ss<br>0010: 68 2d 63 6f 6e 6e 65 63 74 69 6f 6e 00 00 =
00 08 h-connection....<br>0020: 70 61 73 73 77 6f 72 64 00 00 00 00 08 =
50 41 53 password.....PAS<br>0030: 53 57 4f 52 44 &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp;SWORD<br>=3D&gt; libssh2_transport_write =
send() (84 bytes)<br>0000: 03 ee 0a db 97 e2 db 8d 93 3f a9 91 57 d8 6a =
02 .........?..W.j.<br>0010: 18 20 c3 21 6f c8 7e 9c b0 cf 38 ab 47 46 =
a2 e1 . .!o.~...8.GF..<br>0020: 61 64 07 f3 9a 2f d1 91 8a 1c eb 11 54 =
5d df 86 ad.../......T]..<br>0030: 0c 56 d0 aa 22 3d e6 10 e2 18 93 46 =
f6 dc 64 09 .V.."=3D.....F..d.<br>0040: 05 cf 55 21 3a 01 88 ee 29 40 ec =
53 7c 1d 15 06 ..U!:...)@.S|...<br>0050: bb 50 46 8c &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .PF.<br>[libssh2] 1.221385 =
Transport: Looking for packet of type: 52<br>[libssh2] 1.221388 =
Transport: Looking for packet of type: 51<br>[libssh2] 1.221391 =
Transport: Looking for packet of type: 60<br>[libssh2] 1.264376 =
Transport: Looking for packet of type: 52<br>[libssh2] 1.264405 =
Transport: Looking for packet of type: 51<br>[libssh2] 1.264410 =
Transport: Looking for packet of type: 60<br>=3D&gt; =
libssh2_transport_read() raw (68 bytes)<br>0000: f3 86 b0 b7 6f 3f 2a 73 =
5e cd b6 5c bb 6b 8d cc ....o?*s^..\.k..<br>0010: 0d 0e b6 89 e6 e6 a9 =
f5 00 5c 9d 41 ff e6 c6 02 .........\.A....<br>0020: 64 4c 31 ec 9a 4a =
a4 35 b3 fd 70 c2 0a c0 d3 83 dL1..J.5..p.....<br>0030: 4a 3f 8f eb e3 =
d9 96 5a d8 59 ea 82 43 94 21 54 J?.....Z.Y..C.!T<br>0040: 58 f3 c1 6e =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; X..n<br>=3D&gt; =
libssh2_transport_read() plain (36 bytes)<br>0000: 33 00 00 00 1e 70 75 =
62 6c 69 63 6b 65 79 2c 6b 3....publickey,k<br>0010: 65 79 62 6f 61 72 =
64 2d 69 6e 74 65 72 61 63 74 eyboard-interact<br>0020: 69 76 65 00 =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
ive.<br>[libssh2] 1.264919 Transport: Packet type 51 received, =
length=3D36<br>[libssh2] 1.264925 Transport: Looking for packet of type: =
52<br>[libssh2] 1.264929 Transport: Looking for packet of type: =
51<br>ERROR: Failed with -37, "Unable to exchange encryption keys" at =
Session.cpp:243,0<br></span></font><br></div><div><br></div><div>Note =
that the -37 error is a red herring (see =
my&nbsp;libssh2_userauth_password() patch), with my patch it correctly =
reports&nbsp;LIBSSH2_ERROR_AUTHORIZATION_FAILED.</div><div><br></div><div>=
Any thoughts on where to start debugging =
this?</div><div><br></div><div><br></div><div></div></body></html>=

--Apple-Mail-246--944570038
Content-Disposition: attachment;
	filename=libssh2-fail.txt
Content-Type: text/plain;
	name="libssh2-fail.txt"
Content-Transfer-Encoding: quoted-printable

[libssh2] 0.889776 Transport: session_startup for socket 3
[libssh2] 0.889827 Transport: Sending Banner: =
SSH-2.0-libssh2_1.2.2-20091124
[libssh2] 0.889887 Failure Event: -37 - Failed getting banner
[libssh2] 0.937202 Transport: Received Banner: SSH-1.99-OpenSSH_4.2
[libssh2] 0.937595 Key Ex: Sent KEX: =
diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hell=
man-group1-sha1
[libssh2] 0.937699 Key Ex: Sent HOSTKEY: ssh-rsa,ssh-dss
[libssh2] 0.937736 Key Ex: Sent CRYPT_CS: =
aes128-ctr,aes192-ctr,aes256-ctr,aes256-cbc,rijndael-cbc@lysator.liu.se,ae=
s192-cbc,aes128-cbc,blowfish-cbc,arcfour128,arcfour,cast128-cbc,3des-cbc
[libssh2] 0.937747 Key Ex: Sent CRYPT_SC: =
aes128-ctr,aes192-ctr,aes256-ctr,aes256-cbc,rijndael-cbc@lysator.liu.se,ae=
s192-cbc,aes128-cbc,blowfish-cbc,arcfour128,arcfour,cast128-cbc,3des-cbc
[libssh2] 0.937752 Key Ex: Sent MAC_CS: =
hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96,hmac-ripemd160,hmac-ripemd160@=
openssh.com
[libssh2] 0.937758 Key Ex: Sent MAC_SC: =
hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96,hmac-ripemd160,hmac-ripemd160@=
openssh.com
[libssh2] 0.937830 Key Ex: Sent COMP_CS: none
[libssh2] 0.937837 Key Ex: Sent COMP_SC: none
[libssh2] 0.937902 Key Ex: Sent LANG_CS:=20
[libssh2] 0.937907 Key Ex: Sent LANG_SC:=20
=3D> libssh2_transport_write plain (636 bytes)
0000: 14 1f 1a ec 7d 7a 0d 64 1b 8c fd 20 1b 7f 5d 0a ....}z.d... .].
0010: 0e 00 00 00 59 64 69 66 66 69 65 2d 68 65 6c 6c ....Ydiffie-hell
0020: 6d 61 6e 2d 67 72 6f 75 70 31 34 2d 73 68 61 31 man-group14-sha1
0030: 2c 64 69 66 66 69 65 2d 68 65 6c 6c 6d 61 6e 2d ,diffie-hellman-
0040: 67 72 6f 75 70 2d 65 78 63 68 61 6e 67 65 2d 73 group-exchange-s
0050: 68 61 31 2c 64 69 66 66 69 65 2d 68 65 6c 6c 6d ha1,diffie-hellm
0060: 61 6e 2d 67 72 6f 75 70 31 2d 73 68 61 31 00 00 an-group1-sha1..
0070: 00 0f 73 73 68 2d 72 73 61 2c 73 73 68 2d 64 73 ..ssh-rsa,ssh-ds
0080: 73 00 00 00 92 61 65 73 31 32 38 2d 63 74 72 2c s....aes128-ctr,
0090: 61 65 73 31 39 32 2d 63 74 72 2c 61 65 73 32 35 aes192-ctr,aes25
00a0: 36 2d 63 74 72 2c 61 65 73 32 35 36 2d 63 62 63 6-ctr,aes256-cbc
00b0: 2c 72 69 6a 6e 64 61 65 6c 2d 63 62 63 40 6c 79 ,rijndael-cbc@ly
00c0: 73 61 74 6f 72 2e 6c 69 75 2e 73 65 2c 61 65 73 sator.liu.se,aes
00d0: 31 39 32 2d 63 62 63 2c 61 65 73 31 32 38 2d 63 192-cbc,aes128-c
00e0: 62 63 2c 62 6c 6f 77 66 69 73 68 2d 63 62 63 2c bc,blowfish-cbc,
00f0: 61 72 63 66 6f 75 72 31 32 38 2c 61 72 63 66 6f arcfour128,arcfo
0100: 75 72 2c 63 61 73 74 31 32 38 2d 63 62 63 2c 33 ur,cast128-cbc,3
0110: 64 65 73 2d 63 62 63 00 00 00 92 61 65 73 31 32 des-cbc....aes12
0120: 38 2d 63 74 72 2c 61 65 73 31 39 32 2d 63 74 72 8-ctr,aes192-ctr
0130: 2c 61 65 73 32 35 36 2d 63 74 72 2c 61 65 73 32 ,aes256-ctr,aes2
0140: 35 36 2d 63 62 63 2c 72 69 6a 6e 64 61 65 6c 2d 56-cbc,rijndael-
0150: 63 62 63 40 6c 79 73 61 74 6f 72 2e 6c 69 75 2e cbc@lysator.liu.
0160: 73 65 2c 61 65 73 31 39 32 2d 63 62 63 2c 61 65 se,aes192-cbc,ae
0170: 73 31 32 38 2d 63 62 63 2c 62 6c 6f 77 66 69 73 s128-cbc,blowfis
0180: 68 2d 63 62 63 2c 61 72 63 66 6f 75 72 31 32 38 h-cbc,arcfour128
0190: 2c 61 72 63 66 6f 75 72 2c 63 61 73 74 31 32 38 ,arcfour,cast128
01a0: 2d 63 62 63 2c 33 64 65 73 2d 63 62 63 00 00 00 -cbc,3des-cbc...
01b0: 55 68 6d 61 63 2d 73 68 61 31 2c 68 6d 61 63 2d Uhmac-sha1,hmac-
01c0: 73 68 61 31 2d 39 36 2c 68 6d 61 63 2d 6d 64 35 sha1-96,hmac-md5
01d0: 2c 68 6d 61 63 2d 6d 64 35 2d 39 36 2c 68 6d 61 ,hmac-md5-96,hma
01e0: 63 2d 72 69 70 65 6d 64 31 36 30 2c 68 6d 61 63 c-ripemd160,hmac
01f0: 2d 72 69 70 65 6d 64 31 36 30 40 6f 70 65 6e 73 -ripemd160@opens
0200: 73 68 2e 63 6f 6d 00 00 00 55 68 6d 61 63 2d 73 sh.com...Uhmac-s
0210: 68 61 31 2c 68 6d 61 63 2d 73 68 61 31 2d 39 36 ha1,hmac-sha1-96
0220: 2c 68 6d 61 63 2d 6d 64 35 2c 68 6d 61 63 2d 6d ,hmac-md5,hmac-m
0230: 64 35 2d 39 36 2c 68 6d 61 63 2d 72 69 70 65 6d d5-96,hmac-ripem
0240: 64 31 36 30 2c 68 6d 61 63 2d 72 69 70 65 6d 64 d160,hmac-ripemd
0250: 31 36 30 40 6f 70 65 6e 73 73 68 2e 63 6f 6d 00 160@openssh.com.
0260: 00 00 04 6e 6f 6e 65 00 00 00 04 6e 6f 6e 65 00 ...none....none.
0270: 00 00 00 00 00 00 00 00 00 00 00 00             ............
=3D> libssh2_transport_write send() (648 bytes)
0000: 00 00 02 84 07 14 1f 1a ec 7d 7a 0d 64 1b 8c fd .........}z.d...
0010: 20 1b 7f 5d 0a 0e 00 00 00 59 64 69 66 66 69 65  .].....Ydiffie
0020: 2d 68 65 6c 6c 6d 61 6e 2d 67 72 6f 75 70 31 34 -hellman-group14
0030: 2d 73 68 61 31 2c 64 69 66 66 69 65 2d 68 65 6c -sha1,diffie-hel
0040: 6c 6d 61 6e 2d 67 72 6f 75 70 2d 65 78 63 68 61 lman-group-excha
0050: 6e 67 65 2d 73 68 61 31 2c 64 69 66 66 69 65 2d nge-sha1,diffie-
0060: 68 65 6c 6c 6d 61 6e 2d 67 72 6f 75 70 31 2d 73 hellman-group1-s
0070: 68 61 31 00 00 00 0f 73 73 68 2d 72 73 61 2c 73 ha1....ssh-rsa,s
0080: 73 68 2d 64 73 73 00 00 00 92 61 65 73 31 32 38 sh-dss....aes128
0090: 2d 63 74 72 2c 61 65 73 31 39 32 2d 63 74 72 2c -ctr,aes192-ctr,
00a0: 61 65 73 32 35 36 2d 63 74 72 2c 61 65 73 32 35 aes256-ctr,aes25
00b0: 36 2d 63 62 63 2c 72 69 6a 6e 64 61 65 6c 2d 63 6-cbc,rijndael-c
00c0: 62 63 40 6c 79 73 61 74 6f 72 2e 6c 69 75 2e 73 bc@lysator.liu.s
00d0: 65 2c 61 65 73 31 39 32 2d 63 62 63 2c 61 65 73 e,aes192-cbc,aes
00e0: 31 32 38 2d 63 62 63 2c 62 6c 6f 77 66 69 73 68 128-cbc,blowfish
00f0: 2d 63 62 63 2c 61 72 63 66 6f 75 72 31 32 38 2c -cbc,arcfour128,
0100: 61 72 63 66 6f 75 72 2c 63 61 73 74 31 32 38 2d arcfour,cast128-
0110: 63 62 63 2c 33 64 65 73 2d 63 62 63 00 00 00 92 cbc,3des-cbc....
0120: 61 65 73 31 32 38 2d 63 74 72 2c 61 65 73 31 39 aes128-ctr,aes19
0130: 32 2d 63 74 72 2c 61 65 73 32 35 36 2d 63 74 72 2-ctr,aes256-ctr
0140: 2c 61 65 73 32 35 36 2d 63 62 63 2c 72 69 6a 6e ,aes256-cbc,rijn
0150: 64 61 65 6c 2d 63 62 63 40 6c 79 73 61 74 6f 72 dael-cbc@lysator
0160: 2e 6c 69 75 2e 73 65 2c 61 65 73 31 39 32 2d 63 .liu.se,aes192-c
0170: 62 63 2c 61 65 73 31 32 38 2d 63 62 63 2c 62 6c bc,aes128-cbc,bl
0180: 6f 77 66 69 73 68 2d 63 62 63 2c 61 72 63 66 6f owfish-cbc,arcfo
0190: 75 72 31 32 38 2c 61 72 63 66 6f 75 72 2c 63 61 ur128,arcfour,ca
01a0: 73 74 31 32 38 2d 63 62 63 2c 33 64 65 73 2d 63 st128-cbc,3des-c
01b0: 62 63 00 00 00 55 68 6d 61 63 2d 73 68 61 31 2c bc...Uhmac-sha1,
01c0: 68 6d 61 63 2d 73 68 61 31 2d 39 36 2c 68 6d 61 hmac-sha1-96,hma
01d0: 63 2d 6d 64 35 2c 68 6d 61 63 2d 6d 64 35 2d 39 c-md5,hmac-md5-9
01e0: 36 2c 68 6d 61 63 2d 72 69 70 65 6d 64 31 36 30 6,hmac-ripemd160
01f0: 2c 68 6d 61 63 2d 72 69 70 65 6d 64 31 36 30 40 ,hmac-ripemd160@
0200: 6f 70 65 6e 73 73 68 2e 63 6f 6d 00 00 00 55 68 openssh.com...Uh
0210: 6d 61 63 2d 73 68 61 31 2c 68 6d 61 63 2d 73 68 mac-sha1,hmac-sh
0220: 61 31 2d 39 36 2c 68 6d 61 63 2d 6d 64 35 2c 68 a1-96,hmac-md5,h
0230: 6d 61 63 2d 6d 64 35 2d 39 36 2c 68 6d 61 63 2d mac-md5-96,hmac-
0240: 72 69 70 65 6d 64 31 36 30 2c 68 6d 61 63 2d 72 ripemd160,hmac-r
0250: 69 70 65 6d 64 31 36 30 40 6f 70 65 6e 73 73 68 ipemd160@openssh
0260: 2e 63 6f 6d 00 00 00 04 6e 6f 6e 65 00 00 00 04 .com....none....
0270: 6e 6f 6e 65 00 00 00 00 00 00 00 00 00 00 00 00 none............
0280: 00 da 73 91 7b b1 37 2e                         ..s.{.7.
[libssh2] 0.952535 Transport: Looking for packet of type: 20
[libssh2] 0.952611 Failure Event: -37 - Unable to exchange encryption =
keys
=3D> libssh2_transport_read() raw (704 bytes)
0000: 00 00 02 bc 07 14 be d0 af fc ac fd aa 69 fb 9b .............i..
0010: 39 3a e5 25 ba c6 00 00 00 59 64 69 66 66 69 65 9:.%.....Ydiffie
0020: 2d 68 65 6c 6c 6d 61 6e 2d 67 72 6f 75 70 2d 65 -hellman-group-e
0030: 78 63 68 61 6e 67 65 2d 73 68 61 31 2c 64 69 66 xchange-sha1,dif
0040: 66 69 65 2d 68 65 6c 6c 6d 61 6e 2d 67 72 6f 75 fie-hellman-grou
0050: 70 31 34 2d 73 68 61 31 2c 64 69 66 66 69 65 2d p14-sha1,diffie-
0060: 68 65 6c 6c 6d 61 6e 2d 67 72 6f 75 70 31 2d 73 hellman-group1-s
0070: 68 61 31 00 00 00 0f 73 73 68 2d 72 73 61 2c 73 ha1....ssh-rsa,s
0080: 73 68 2d 64 73 73 00 00 00 9d 61 65 73 31 32 38 sh-dss....aes128
0090: 2d 63 62 63 2c 33 64 65 73 2d 63 62 63 2c 62 6c -cbc,3des-cbc,bl
00a0: 6f 77 66 69 73 68 2d 63 62 63 2c 63 61 73 74 31 owfish-cbc,cast1
00b0: 32 38 2d 63 62 63 2c 61 72 63 66 6f 75 72 31 32 28-cbc,arcfour12
00c0: 38 2c 61 72 63 66 6f 75 72 32 35 36 2c 61 72 63 8,arcfour256,arc
00d0: 66 6f 75 72 2c 61 65 73 31 39 32 2d 63 62 63 2c four,aes192-cbc,
00e0: 61 65 73 32 35 36 2d 63 62 63 2c 72 69 6a 6e 64 aes256-cbc,rijnd
00f0: 61 65 6c 2d 63 62 63 40 6c 79 73 61 74 6f 72 2e ael-cbc@lysator.
0100: 6c 69 75 2e 73 65 2c 61 65 73 31 32 38 2d 63 74 liu.se,aes128-ct
0110: 72 2c 61 65 73 31 39 32 2d 63 74 72 2c 61 65 73 r,aes192-ctr,aes
0120: 32 35 36 2d 63 74 72 00 00 00 9d 61 65 73 31 32 256-ctr....aes12
0130: 38 2d 63 62 63 2c 33 64 65 73 2d 63 62 63 2c 62 8-cbc,3des-cbc,b
0140: 6c 6f 77 66 69 73 68 2d 63 62 63 2c 63 61 73 74 lowfish-cbc,cast
0150: 31 32 38 2d 63 62 63 2c 61 72 63 66 6f 75 72 31 128-cbc,arcfour1
0160: 32 38 2c 61 72 63 66 6f 75 72 32 35 36 2c 61 72 28,arcfour256,ar
0170: 63 66 6f 75 72 2c 61 65 73 31 39 32 2d 63 62 63 cfour,aes192-cbc
0180: 2c 61 65 73 32 35 36 2d 63 62 63 2c 72 69 6a 6e ,aes256-cbc,rijn
0190: 64 61 65 6c 2d 63 62 63 40 6c 79 73 61 74 6f 72 dael-cbc@lysator
01a0: 2e 6c 69 75 2e 73 65 2c 61 65 73 31 32 38 2d 63 .liu.se,aes128-c
01b0: 74 72 2c 61 65 73 31 39 32 2d 63 74 72 2c 61 65 tr,aes192-ctr,ae
01c0: 73 32 35 36 2d 63 74 72 00 00 00 55 68 6d 61 63 s256-ctr...Uhmac
01d0: 2d 6d 64 35 2c 68 6d 61 63 2d 73 68 61 31 2c 68 -md5,hmac-sha1,h
01e0: 6d 61 63 2d 72 69 70 65 6d 64 31 36 30 2c 68 6d mac-ripemd160,hm
01f0: 61 63 2d 72 69 70 65 6d 64 31 36 30 40 6f 70 65 ac-ripemd160@ope
0200: 6e 73 73 68 2e 63 6f 6d 2c 68 6d 61 63 2d 73 68 nssh.com,hmac-sh
0210: 61 31 2d 39 36 2c 68 6d 61 63 2d 6d 64 35 2d 39 a1-96,hmac-md5-9
0220: 36 00 00 00 55 68 6d 61 63 2d 6d 64 35 2c 68 6d 6...Uhmac-md5,hm
0230: 61 63 2d 73 68 61 31 2c 68 6d 61 63 2d 72 69 70 ac-sha1,hmac-rip
0240: 65 6d 64 31 36 30 2c 68 6d 61 63 2d 72 69 70 65 emd160,hmac-ripe
0250: 6d 64 31 36 30 40 6f 70 65 6e 73 73 68 2e 63 6f md160@openssh.co
0260: 6d 2c 68 6d 61 63 2d 73 68 61 31 2d 39 36 2c 68 m,hmac-sha1-96,h
0270: 6d 61 63 2d 6d 64 35 2d 39 36 00 00 00 15 6e 6f mac-md5-96....no
0280: 6e 65 2c 7a 6c 69 62 40 6f 70 65 6e 73 73 68 2e ne,zlib@openssh.
0290: 63 6f 6d 00 00 00 15 6e 6f 6e 65 2c 7a 6c 69 62 com....none,zlib
02a0: 40 6f 70 65 6e 73 73 68 2e 63 6f 6d 00 00 00 00 @openssh.com....
02b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
=3D> libssh2_transport_read() plain (692 bytes)
0000: 14 be d0 af fc ac fd aa 69 fb 9b 39 3a e5 25 ba ........i..9:.%.
0010: c6 00 00 00 59 64 69 66 66 69 65 2d 68 65 6c 6c ....Ydiffie-hell
0020: 6d 61 6e 2d 67 72 6f 75 70 2d 65 78 63 68 61 6e man-group-exchan
0030: 67 65 2d 73 68 61 31 2c 64 69 66 66 69 65 2d 68 ge-sha1,diffie-h
0040: 65 6c 6c 6d 61 6e 2d 67 72 6f 75 70 31 34 2d 73 ellman-group14-s
0050: 68 61 31 2c 64 69 66 66 69 65 2d 68 65 6c 6c 6d ha1,diffie-hellm
0060: 61 6e 2d 67 72 6f 75 70 31 2d 73 68 61 31 00 00 an-group1-sha1..
0070: 00 0f 73 73 68 2d 72 73 61 2c 73 73 68 2d 64 73 ..ssh-rsa,ssh-ds
0080: 73 00 00 00 9d 61 65 73 31 32 38 2d 63 62 63 2c s....aes128-cbc,
0090: 33 64 65 73 2d 63 62 63 2c 62 6c 6f 77 66 69 73 3des-cbc,blowfis
00a0: 68 2d 63 62 63 2c 63 61 73 74 31 32 38 2d 63 62 h-cbc,cast128-cb
00b0: 63 2c 61 72 63 66 6f 75 72 31 32 38 2c 61 72 63 c,arcfour128,arc
00c0: 66 6f 75 72 32 35 36 2c 61 72 63 66 6f 75 72 2c four256,arcfour,
00d0: 61 65 73 31 39 32 2d 63 62 63 2c 61 65 73 32 35 aes192-cbc,aes25
00e0: 36 2d 63 62 63 2c 72 69 6a 6e 64 61 65 6c 2d 63 6-cbc,rijndael-c
00f0: 62 63 40 6c 79 73 61 74 6f 72 2e 6c 69 75 2e 73 bc@lysator.liu.s
0100: 65 2c 61 65 73 31 32 38 2d 63 74 72 2c 61 65 73 e,aes128-ctr,aes
0110: 31 39 32 2d 63 74 72 2c 61 65 73 32 35 36 2d 63 192-ctr,aes256-c
0120: 74 72 00 00 00 9d 61 65 73 31 32 38 2d 63 62 63 tr....aes128-cbc
0130: 2c 33 64 65 73 2d 63 62 63 2c 62 6c 6f 77 66 69 ,3des-cbc,blowfi
0140: 73 68 2d 63 62 63 2c 63 61 73 74 31 32 38 2d 63 sh-cbc,cast128-c
0150: 62 63 2c 61 72 63 66 6f 75 72 31 32 38 2c 61 72 bc,arcfour128,ar
0160: 63 66 6f 75 72 32 35 36 2c 61 72 63 66 6f 75 72 cfour256,arcfour
0170: 2c 61 65 73 31 39 32 2d 63 62 63 2c 61 65 73 32 ,aes192-cbc,aes2
0180: 35 36 2d 63 62 63 2c 72 69 6a 6e 64 61 65 6c 2d 56-cbc,rijndael-
0190: 63 62 63 40 6c 79 73 61 74 6f 72 2e 6c 69 75 2e cbc@lysator.liu.
01a0: 73 65 2c 61 65 73 31 32 38 2d 63 74 72 2c 61 65 se,aes128-ctr,ae
01b0: 73 31 39 32 2d 63 74 72 2c 61 65 73 32 35 36 2d s192-ctr,aes256-
01c0: 63 74 72 00 00 00 55 68 6d 61 63 2d 6d 64 35 2c ctr...Uhmac-md5,
01d0: 68 6d 61 63 2d 73 68 61 31 2c 68 6d 61 63 2d 72 hmac-sha1,hmac-r
01e0: 69 70 65 6d 64 31 36 30 2c 68 6d 61 63 2d 72 69 ipemd160,hmac-ri
01f0: 70 65 6d 64 31 36 30 40 6f 70 65 6e 73 73 68 2e pemd160@openssh.
0200: 63 6f 6d 2c 68 6d 61 63 2d 73 68 61 31 2d 39 36 com,hmac-sha1-96
0210: 2c 68 6d 61 63 2d 6d 64 35 2d 39 36 00 00 00 55 ,hmac-md5-96...U
0220: 68 6d 61 63 2d 6d 64 35 2c 68 6d 61 63 2d 73 68 hmac-md5,hmac-sh
0230: 61 31 2c 68 6d 61 63 2d 72 69 70 65 6d 64 31 36 a1,hmac-ripemd16
0240: 30 2c 68 6d 61 63 2d 72 69 70 65 6d 64 31 36 30 0,hmac-ripemd160
0250: 40 6f 70 65 6e 73 73 68 2e 63 6f 6d 2c 68 6d 61 @openssh.com,hma
0260: 63 2d 73 68 61 31 2d 39 36 2c 68 6d 61 63 2d 6d c-sha1-96,hmac-m
0270: 64 35 2d 39 36 00 00 00 15 6e 6f 6e 65 2c 7a 6c d5-96....none,zl
0280: 69 62 40 6f 70 65 6e 73 73 68 2e 63 6f 6d 00 00 ib@openssh.com..
0290: 00 15 6e 6f 6e 65 2c 7a 6c 69 62 40 6f 70 65 6e ..none,zlib@open
02a0: 73 73 68 2e 63 6f 6d 00 00 00 00 00 00 00 00 00 ssh.com.........
02b0: 00 00 00 00                                     ....
[libssh2] 0.987475 Transport: Packet type 20 received, length=3D692
[libssh2] 0.987487 Transport: Looking for packet of type: 20
[libssh2] 0.987504 Key Ex: Agreed on KEX method: =
diffie-hellman-group14-sha1
[libssh2] 0.987507 Key Ex: Agreed on HOSTKEY method: ssh-rsa
[libssh2] 0.987510 Key Ex: Agreed on CRYPT_CS method: aes128-ctr
[libssh2] 0.987513 Key Ex: Agreed on CRYPT_SC method: aes128-ctr
[libssh2] 0.987515 Key Ex: Agreed on MAC_CS method: hmac-sha1
[libssh2] 0.987779 Key Ex: Agreed on MAC_SC method: hmac-sha1
[libssh2] 0.987786 Key Ex: Agreed on COMP_CS method: none
[libssh2] 0.987789 Key Ex: Agreed on COMP_SC method: none
[libssh2] 0.987791 Key Ex: Agreed on LANG_CS method:
[libssh2] 0.987793 Key Ex: Agreed on LANG_SC method:
[libssh2] 0.987803 Key Ex: Initiating Diffie-Hellman Group14 Key =
Exchange
[libssh2] 0.991437 Key Ex: Sending KEX packet 30
=3D> libssh2_transport_write plain (261 bytes)
0000: 1e 00 00 01 00 2b 66 bd 1d d3 93 89 67 27 2e 24 .....+f.....g'.$
0010: 50 c6 2a 75 10 ee 1f df 9d 86 ba 33 76 34 d9 9e P.*u.......3v4..
0020: 01 e7 f7 4b 9e e7 a6 b1 3e b0 18 79 91 f9 9c 79 ...K....>..y...y
0030: 4e a1 0f cc dc b0 6e 54 42 df 89 8a 3a 3a a0 6a N.....nTB...::.j
0040: 6f 43 f9 0c 9e 74 0b 19 d3 36 3c 19 9c d7 1c 83 oC...t...6<.....
0050: 62 3c d4 df a3 75 a2 72 f4 8a 8f f0 7c b7 73 73 b<...u.r....|.ss
0060: c3 5f 93 93 35 0d 66 1a 4a 6c 9e 02 22 12 02 d0 ._..5.f.Jl.."...
0070: 74 3c bc 87 41 f2 1a 2b 25 23 b0 73 84 f1 a9 a2 t<..A..+%#.s....
0080: 43 5d 2f d9 dd 48 9c 54 6e 47 45 2d 7c ab 65 41 C]/..H.TnGE-|.eA
0090: 6f ab 77 18 dd c0 74 cd a9 44 da 4a 7a 4b 4e f3 o.w...t..D.JzKN.
00a0: bc db 49 e6 a9 23 b8 a7 67 60 69 c5 da dd f7 d7 ..I..#..g`i.....
00b0: 68 58 33 dd 10 22 71 5f ec c0 24 97 84 96 63 37 hX3.."q_..$...c7
00c0: 1a 6e d6 be 17 08 07 a1 4c 4e dc 09 bf 33 c7 3e .n......LN...3.>
00d0: 1e f9 de df dc 9b 3e 71 f6 18 30 80 83 91 69 71 ......>q..0...iq
00e0: 3b db e4 4a b3 db 0b 5a c1 ae a3 59 b6 d2 3e 6a ;..J...Z...Y..>j
00f0: 53 71 66 52 97 5c ed 09 23 f4 c6 7d 83 3c e2 6d SqfR.\..#..}.<.m
0100: a5 c5 dc a8 f3                                  .....
=3D> libssh2_transport_write send() (272 bytes)
0000: 00 00 01 0c 06 1e 00 00 01 00 2b 66 bd 1d d3 93 ..........+f....
0010: 89 67 27 2e 24 50 c6 2a 75 10 ee 1f df 9d 86 ba .g'.$P.*u.......
0020: 33 76 34 d9 9e 01 e7 f7 4b 9e e7 a6 b1 3e b0 18 3v4.....K....>..
0030: 79 91 f9 9c 79 4e a1 0f cc dc b0 6e 54 42 df 89 y...yN.....nTB..
0040: 8a 3a 3a a0 6a 6f 43 f9 0c 9e 74 0b 19 d3 36 3c .::.joC...t...6<
0050: 19 9c d7 1c 83 62 3c d4 df a3 75 a2 72 f4 8a 8f .....b<...u.r...
0060: f0 7c b7 73 73 c3 5f 93 93 35 0d 66 1a 4a 6c 9e .|.ss._..5.f.Jl.
0070: 02 22 12 02 d0 74 3c bc 87 41 f2 1a 2b 25 23 b0 ."...t<..A..+%#.
0080: 73 84 f1 a9 a2 43 5d 2f d9 dd 48 9c 54 6e 47 45 s....C]/..H.TnGE
0090: 2d 7c ab 65 41 6f ab 77 18 dd c0 74 cd a9 44 da -|.eAo.w...t..D.
00a0: 4a 7a 4b 4e f3 bc db 49 e6 a9 23 b8 a7 67 60 69 JzKN...I..#..g`i
00b0: c5 da dd f7 d7 68 58 33 dd 10 22 71 5f ec c0 24 .....hX3.."q_..$
00c0: 97 84 96 63 37 1a 6e d6 be 17 08 07 a1 4c 4e dc ...c7.n......LN.
00d0: 09 bf 33 c7 3e 1e f9 de df dc 9b 3e 71 f6 18 30 ..3.>......>q..0
00e0: 80 83 91 69 71 3b db e4 4a b3 db 0b 5a c1 ae a3 ...iq;..J...Z...
00f0: 59 b6 d2 3e 6a 53 71 66 52 97 5c ed 09 23 f4 c6 Y..>jSqfR.\..#..
0100: 7d 83 3c e2 6d a5 c5 dc a8 f3 c1 f4 ce d7 7c d1 }.<.m.........|.
[libssh2] 0.999137 Transport: Looking for packet of type: 31
[libssh2] 0.999217 Failure Event: -37 - Unable to exchange encryption =
keys
=3D> libssh2_transport_read() raw (592 bytes)
0000: 00 00 02 3c 09 1f 00 00 00 95 00 00 00 07 73 73 ...<..........ss
0010: 68 2d 72 73 61 00 00 00 01 23 00 00 00 81 00 aa h-rsa....#......
0020: c4 91 23 18 7d 39 9b 09 30 40 8a 00 15 50 b2 2d ..#.}9..0@...P.-
0030: 18 65 b1 46 b3 bd 85 f4 42 a1 f2 ec 57 90 86 bb .e.F....B...W...
0040: c4 15 d2 37 69 f7 4c c2 8f 46 65 2e b0 6d db 88 ...7i.L..Fe..m..
0050: 34 4f ec 3a 99 8c 66 42 d1 62 4d 35 2c 25 8a c2 4O.:..fB.bM5,%..
0060: 4a 55 b8 08 47 10 3b 11 22 e8 c7 a7 67 f1 a4 70 JU..G.;."...g..p
0070: 88 7c 5c a1 ae a8 61 1d fe 28 5a 42 f6 13 a1 f0 .|\...a..(ZB....
0080: 30 55 91 fd 6d ea ac 5a f0 64 f5 04 5b 18 6c 18 0U..m..Z.d..[.l.
0090: 02 e1 71 58 84 c5 a8 e1 30 6a 58 c5 04 48 0d 00 ..qX....0jX..H..
00a0: 00 01 01 00 f5 3c 20 2d d0 c1 51 94 0b 7c 6a 00 .....< -..Q..|j.
00b0: 22 76 7c 9d 67 1a 5f ab 38 62 28 32 cf 50 f6 fd "v|.g._.8b(2.P..
00c0: 32 41 db 00 e0 42 dd db 9c 50 27 5f 02 c6 49 e0 2A...B...P'_..I.
00d0: 36 6f d5 e7 3e b4 45 22 31 39 cb 1d dd 55 91 e4 6o..>.E"19...U..
00e0: b6 4f 87 25 83 b5 e8 2a 60 9d bd 71 72 95 35 7b .O.%...*`..qr.5{
00f0: 4f ff 0d bf 16 8b 95 e4 83 8a 53 55 99 06 83 9b O.........SU....
0100: 63 d8 9a 96 36 8a 1b bd c0 38 25 1f 48 a4 af 5d c...6....8%.H..]
0110: f4 cb 6b 2f 78 eb f2 68 ed d5 4b cc cf 52 8e 63 ..k/x..h..K..R.c
0120: 38 3c d2 8e e0 1a f0 81 07 a0 03 7a e3 31 4e 41 8<.........z.1NA
0130: 16 2e 05 07 53 5c 57 e6 ca 59 b0 2c d5 79 b3 49 ....S\W..Y.,.y.I
0140: c8 ca ad 6a 0a 51 c8 d4 08 aa e1 67 f0 5b ba 1b ...j.Q.....g.[..
0150: 04 8a 50 83 4c 90 53 ea a8 3c af a2 34 2d a8 89 ..P.L.S..<..4-..
0160: 93 3c 6a 63 ba d2 18 ec da e7 e5 1d 18 15 67 18 .<jc..........g.
0170: d2 d5 92 c4 2e 70 e6 86 dd 78 33 e4 2f b1 de 1d .....p...x3./...
0180: 7d 96 16 1f 26 f9 51 eb fd ae 3c 01 42 72 6e 5d }...&.Q...<.Brn]
0190: c0 ee 55 99 e6 12 7e 12 cb c1 e1 bc bc d2 79 52 ..U...~.......yR
01a0: d2 3e 45 f1 00 00 00 8f 00 00 00 07 73 73 68 2d .>E.........ssh-
01b0: 72 73 61 00 00 00 80 9d 15 53 9b c8 32 f5 44 15 rsa......S..2.D.
01c0: b9 59 fb a0 23 6a 85 d1 90 63 6e e6 0d 13 8a b3 .Y..#j...cn.....
01d0: 1b 7c cb bb 5e eb b3 1a 6c 0d 04 a4 32 05 ad da .|..^...l...2...
01e0: 62 37 00 37 39 ab 5d 11 da 63 10 0c c5 34 2c 8a b7.79.]..c...4,.
01f0: 97 91 26 39 aa c2 66 32 b3 69 45 7a 70 97 88 90 ..&9..f2.iEzp...
0200: 10 f1 16 d8 23 f4 55 83 3a f5 7b 24 96 70 1d 77 ....#.U.:.{$.p.w
0210: cb e9 50 22 2b a0 20 0d 2d 82 96 a5 ff 5e 62 2d ..P"+. .-....^b-
0220: 95 f3 93 e2 f5 f3 15 0f fd a2 20 70 84 e6 ac 9d .......... p....
0230: 20 b7 80 03 8d e1 d2 00 00 00 00 00 00 00 00 00  ...............
0240: 00 00 00 0c 0a 15 00 00 00 00 00 00 00 00 00 00 ................
=3D> libssh2_transport_read() plain (562 bytes)
0000: 1f 00 00 00 95 00 00 00 07 73 73 68 2d 72 73 61 .........ssh-rsa
0010: 00 00 00 01 23 00 00 00 81 00 aa c4 91 23 18 7d ....#........#.}
0020: 39 9b 09 30 40 8a 00 15 50 b2 2d 18 65 b1 46 b3 9..0@...P.-.e.F.
0030: bd 85 f4 42 a1 f2 ec 57 90 86 bb c4 15 d2 37 69 ...B...W......7i
0040: f7 4c c2 8f 46 65 2e b0 6d db 88 34 4f ec 3a 99 .L..Fe..m..4O.:.
0050: 8c 66 42 d1 62 4d 35 2c 25 8a c2 4a 55 b8 08 47 .fB.bM5,%..JU..G
0060: 10 3b 11 22 e8 c7 a7 67 f1 a4 70 88 7c 5c a1 ae .;."...g..p.|\..
0070: a8 61 1d fe 28 5a 42 f6 13 a1 f0 30 55 91 fd 6d .a..(ZB....0U..m
0080: ea ac 5a f0 64 f5 04 5b 18 6c 18 02 e1 71 58 84 ..Z.d..[.l...qX.
0090: c5 a8 e1 30 6a 58 c5 04 48 0d 00 00 01 01 00 f5 ...0jX..H.......
00a0: 3c 20 2d d0 c1 51 94 0b 7c 6a 00 22 76 7c 9d 67 < -..Q..|j."v|.g
00b0: 1a 5f ab 38 62 28 32 cf 50 f6 fd 32 41 db 00 e0 ._.8b(2.P..2A...
00c0: 42 dd db 9c 50 27 5f 02 c6 49 e0 36 6f d5 e7 3e B...P'_..I.6o..>
00d0: b4 45 22 31 39 cb 1d dd 55 91 e4 b6 4f 87 25 83 .E"19...U...O.%.
00e0: b5 e8 2a 60 9d bd 71 72 95 35 7b 4f ff 0d bf 16 ..*`..qr.5{O....
00f0: 8b 95 e4 83 8a 53 55 99 06 83 9b 63 d8 9a 96 36 .....SU....c...6
0100: 8a 1b bd c0 38 25 1f 48 a4 af 5d f4 cb 6b 2f 78 ....8%.H..]..k/x
0110: eb f2 68 ed d5 4b cc cf 52 8e 63 38 3c d2 8e e0 ..h..K..R.c8<...
0120: 1a f0 81 07 a0 03 7a e3 31 4e 41 16 2e 05 07 53 ......z.1NA....S
0130: 5c 57 e6 ca 59 b0 2c d5 79 b3 49 c8 ca ad 6a 0a \W..Y.,.y.I...j.
0140: 51 c8 d4 08 aa e1 67 f0 5b ba 1b 04 8a 50 83 4c Q.....g.[....P.L
0150: 90 53 ea a8 3c af a2 34 2d a8 89 93 3c 6a 63 ba .S..<..4-...<jc.
0160: d2 18 ec da e7 e5 1d 18 15 67 18 d2 d5 92 c4 2e .........g......
0170: 70 e6 86 dd 78 33 e4 2f b1 de 1d 7d 96 16 1f 26 p...x3./...}...&
0180: f9 51 eb fd ae 3c 01 42 72 6e 5d c0 ee 55 99 e6 .Q...<.Brn]..U..
0190: 12 7e 12 cb c1 e1 bc bc d2 79 52 d2 3e 45 f1 00 .~.......yR.>E..
01a0: 00 00 8f 00 00 00 07 73 73 68 2d 72 73 61 00 00 .......ssh-rsa..
01b0: 00 80 9d 15 53 9b c8 32 f5 44 15 b9 59 fb a0 23 ....S..2.D..Y..#
01c0: 6a 85 d1 90 63 6e e6 0d 13 8a b3 1b 7c cb bb 5e j...cn......|..^
01d0: eb b3 1a 6c 0d 04 a4 32 05 ad da 62 37 00 37 39 ...l...2...b7.79
01e0: ab 5d 11 da 63 10 0c c5 34 2c 8a 97 91 26 39 aa .]..c...4,...&9.
01f0: c2 66 32 b3 69 45 7a 70 97 88 90 10 f1 16 d8 23 .f2.iEzp.......#
0200: f4 55 83 3a f5 7b 24 96 70 1d 77 cb e9 50 22 2b .U.:.{$.p.w..P"+
0210: a0 20 0d 2d 82 96 a5 ff 5e 62 2d 95 f3 93 e2 f5 . .-....^b-.....
0220: f3 15 0f fd a2 20 70 84 e6 ac 9d 20 b7 80 03 8d ..... p.... ....
0230: e1 d2                                           ..
[libssh2] 1.078808 Transport: Packet type 31 received, length=3D562
[libssh2] 1.078816 Transport: Looking for packet of type: 31
[libssh2] 1.078850 Key Ex: Server's MD5 Fingerprint: =
2a:59:f2:4b:9f:25:ff:8b:9e:ec:79:93:3f:19:57:24
[libssh2] 1.079195 Key Ex: Server's SHA1 Fingerprint: =
03:fc:85:cb:1a:e2:53:bd:8d:88:89:fa:e9:92:96:d2:f8:20:ac:4d
[libssh2] 1.086047 Key Ex: Sending NEWKEYS message
=3D> libssh2_transport_write plain (1 bytes)
0000: 15                                              .
=3D> libssh2_transport_write send() (16 bytes)
0000: 00 00 00 0c 0a 15 14 bd dd ef 22 5d b3 17 9d e8 .........."]....
[libssh2] 1.086314 Transport: Looking for packet of type: 21
=3D> libssh2_transport_read() plain (1 bytes)
0000: 15                                              .
[libssh2] 1.086426 Transport: Packet type 21 received, length=3D1
[libssh2] 1.086431 Transport: Looking for packet of type: 21
[libssh2] 1.086497 Key Ex: Received NEWKEYS message
[libssh2] 1.086503 Key Ex: session_id calculated
[libssh2] 1.086558 Key Ex: Client to Server IV and Key calculated
[libssh2] 1.086595 Key Ex: Server to Client IV and Key calculated
[libssh2] 1.086602 Key Ex: Client to Server HMAC Key calculated
[libssh2] 1.086607 Key Ex: Server to Client HMAC Key calculated
[libssh2] 1.086683 Transport: Requesting userauth service
=3D> libssh2_transport_write plain (17 bytes)
0000: 05 00 00 00 0c 73 73 68 2d 75 73 65 72 61 75 74 .....ssh-useraut
0010: 68                                              h
=3D> libssh2_transport_write send() (52 bytes)
0000: b5 aa 18 de 83 7d c3 b2 9a cf 01 0b 39 6a 06 81 .....}......9j..
0010: bd b4 7b a0 9e df a4 8c a5 f6 53 37 21 90 02 03 ..{.......S7!...
0020: 60 e3 c9 be f9 c1 91 45 5a 9c ea 0e 02 80 da 86 `......EZ.......
0030: 21 4c 7b de                                     !L{.
[libssh2] 1.087915 Transport: Looking for packet of type: 6
=3D> libssh2_transport_read() raw (52 bytes)
0000: a7 d3 10 6d 40 a7 29 ab 66 bc 4d 33 18 6d 38 af ...m@.).f.M3.m8.
0010: b5 5c ee 78 40 a3 92 3a 12 25 69 d7 0d 09 77 6d .\.x@..:.%i...wm
0020: 2f 31 ee 15 90 c3 d9 a4 30 13 47 69 78 b6 ef d5 /1......0.Gix...
0030: 95 f9 b2 22                                     ..."
=3D> libssh2_transport_read() plain (17 bytes)
0000: 06 00 00 00 0c 73 73 68 2d 75 73 65 72 61 75 74 .....ssh-useraut
0010: 68                                              h
[libssh2] 1.220870 Transport: Packet type 6 received, length=3D17
[libssh2] 1.220875 Transport: Looking for packet of type: 6
Connected, hostkey=3DA2952FB4F952FFB8E9CE9739F3917542
Logging in as davem/PASSWORD
[libssh2] 1.220928 Userauth: Attempting to login using password =
authentication
=3D> libssh2_transport_write plain (53 bytes)
0000: 32 00 00 00 05 64 61 76 65 6d 00 00 00 0e 73 73 2....davem....ss
0010: 68 2d 63 6f 6e 6e 65 63 74 69 6f 6e 00 00 00 08 h-connection....
0020: 70 61 73 73 77 6f 72 64 00 00 00 00 08 50 41 53 password.....PAS
0030: 53 57 4f 52 44                                  SWORD
=3D> libssh2_transport_write send() (84 bytes)
0000: 03 ee 0a db 97 e2 db 8d 93 3f a9 91 57 d8 6a 02 .........?..W.j.
0010: 18 20 c3 21 6f c8 7e 9c b0 cf 38 ab 47 46 a2 e1 . .!o.~...8.GF..
0020: 61 64 07 f3 9a 2f d1 91 8a 1c eb 11 54 5d df 86 ad.../......T]..
0030: 0c 56 d0 aa 22 3d e6 10 e2 18 93 46 f6 dc 64 09 .V.."=3D.....F..d.
0040: 05 cf 55 21 3a 01 88 ee 29 40 ec 53 7c 1d 15 06 ..U!:...)@.S|...
0050: bb 50 46 8c                                     .PF.
[libssh2] 1.221385 Transport: Looking for packet of type: 52
[libssh2] 1.221388 Transport: Looking for packet of type: 51
[libssh2] 1.221391 Transport: Looking for packet of type: 60
[libssh2] 1.264376 Transport: Looking for packet of type: 52
[libssh2] 1.264405 Transport: Looking for packet of type: 51
[libssh2] 1.264410 Transport: Looking for packet of type: 60
=3D> libssh2_transport_read() raw (68 bytes)
0000: f3 86 b0 b7 6f 3f 2a 73 5e cd b6 5c bb 6b 8d cc ....o?*s^..\.k..
0010: 0d 0e b6 89 e6 e6 a9 f5 00 5c 9d 41 ff e6 c6 02 .........\.A....
0020: 64 4c 31 ec 9a 4a a4 35 b3 fd 70 c2 0a c0 d3 83 dL1..J.5..p.....
0030: 4a 3f 8f eb e3 d9 96 5a d8 59 ea 82 43 94 21 54 J?.....Z.Y..C.!T
0040: 58 f3 c1 6e                                     X..n
=3D> libssh2_transport_read() plain (36 bytes)
0000: 33 00 00 00 1e 70 75 62 6c 69 63 6b 65 79 2c 6b 3....publickey,k
0010: 65 79 62 6f 61 72 64 2d 69 6e 74 65 72 61 63 74 eyboard-interact
0020: 69 76 65 00                                     ive.
[libssh2] 1.264919 Transport: Packet type 51 received, length=3D36
[libssh2] 1.264925 Transport: Looking for packet of type: 52
[libssh2] 1.264929 Transport: Looking for packet of type: 51
ERROR: Failed "Unable to exchange encryption keys" at Session.cpp:243,0
[libssh2] 1.265089 Transport: Disconnecting: reason=3D11, desc=3DNormal =
Shutdown, Thank you for playing, lang=3D
=3D> libssh2_transport_write plain (51 bytes)
0000: 01 00 00 00 0b 00 00 00 26 4e 6f 72 6d 61 6c 20 ........&Normal=20
0010: 53 68 75 74 64 6f 77 6e 2c 20 54 68 61 6e 6b 20 Shutdown, Thank=20
0020: 79 6f 75 20 66 6f 72 20 70 6c 61 79 69 6e 67 00 you for playing.
0030: 00 00 00                                        ...
=3D> libssh2_transport_write send() (84 bytes)
0000: 06 67 d2 90 4e f6 60 da b1 e7 1a e4 96 68 52 cb .g..N.`......hR.
0010: 00 b7 47 01 7f 73 91 96 7b ae b5 3a 2a 06 15 bc ..G.s..{..:*...
0020: e9 fb 40 e2 13 20 e0 a5 0d 2d d9 db 5e 5d 95 e0 ..@.. ...-..^]..
0030: 4f 5f 06 33 4b e2 76 41 24 5c af 98 41 2d f7 7e O_.3K.vA$\..A-.~
0040: 18 c8 13 85 9e f1 32 01 90 5e 05 b1 16 f4 0f 80 ......2..^......
0050: b2 92 8c 50                                     ...P
[libssh2] 1.265738 Transport: Freeing session resource

--Apple-Mail-246--944570038
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
	charset=us-ascii

<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div></div></body></html>
--Apple-Mail-246--944570038--

--Apple-Mail-245--944570038--

--===============1905928963==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============1905928963==--

From libssh2-devel-bounces@cool.haxx.se  Mon Dec 14 23:45:03 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBEMj02E026148;
	Mon, 14 Dec 2009 23:45:01 +0100
Received: from giant.haxx.se (giant.haxx.se [83.168.254.42])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBEMiv8u026124
	for <libssh2-devel@cool.haxx.se>; Mon, 14 Dec 2009 23:44:57 +0100
Date: Mon, 14 Dec 2009 23:44:57 +0100 (CET)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Login failure with libssh2-1.2.2 and SuSE Enterprise 10 Linux
In-Reply-To: <0F7C65B8-54C6-4B57-BE38-0C28B20813CF@intersystems.com>
Message-ID: <alpine.DEB.2.00.0912142342300.24780@tvnag.unkk.fr>
References: <0F7C65B8-54C6-4B57-BE38-0C28B20813CF@intersystems.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Mon, 14 Dec 2009, Dave McCaldon wrote:

> => libssh2_transport_read() plain (36 bytes)
> 0000: 33 00 00 00 1e 70 75 62 6c 69 63 6b 65 79 2c 6b 3....publickey,k
> 0010: 65 79 62 6f 61 72 64 2d 69 6e 74 65 72 61 63 74 eyboard-interact
> 0020: 69 76 65 00                                     ive.
> [libssh2] 1.264919 Transport: Packet type 51 received, length=36
> [libssh2] 1.264925 Transport: Looking for packet of type: 52
> [libssh2] 1.264929 Transport: Looking for packet of type: 51

When we tracked the similar problem with the publickey auth we had lots of 
help from checking the log in the server side together with libssh2's traces, 
so I would recommend that you check those out for this as well!

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 15 00:33:50 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBENXhrp026101;
	Tue, 15 Dec 2009 00:33:48 +0100
Received: from mail.intersystems.com (mail.intersys.COM [198.133.74.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBENXg6i026081
	for <libssh2-devel@cool.haxx.se>; Tue, 15 Dec 2009 00:33:42 +0100
X-InterSystems: Sent from InterSystems
X-InterSystems: Sent from InterSystems
From: Dave McCaldon <davem@intersystems.com>
Mime-Version: 1.0 (Apple Message framework v1077)
Subject: Re: Login failure with libssh2-1.2.2 and SuSE Enterprise 10 Linux
Date: Mon, 14 Dec 2009 18:33:37 -0500
In-Reply-To: <alpine.DEB.2.00.0912142342300.24780@tvnag.unkk.fr>
To: libssh2 development <libssh2-devel@cool.haxx.se>
References: <0F7C65B8-54C6-4B57-BE38-0C28B20813CF@intersystems.com>
	<alpine.DEB.2.00.0912142342300.24780@tvnag.unkk.fr>
Message-Id: <8724E66A-DBFD-4E33-B53E-06C9998E3B28@intersystems.com>
X-Mailer: Apple Mail (2.1077)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0491643369=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se


--===============0491643369==
Content-Type: multipart/alternative; boundary=Apple-Mail-247--941424141


--Apple-Mail-247--941424141
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=us-ascii


On Dec 14, 2009, at 5:44 PM, Daniel Stenberg wrote:

> On Mon, 14 Dec 2009, Dave McCaldon wrote:
>=20
>> =3D> libssh2_transport_read() plain (36 bytes)
>> 0000: 33 00 00 00 1e 70 75 62 6c 69 63 6b 65 79 2c 6b =
3....publickey,k
>> 0010: 65 79 62 6f 61 72 64 2d 69 6e 74 65 72 61 63 74 =
eyboard-interact
>> 0020: 69 76 65 00                                     ive.
>> [libssh2] 1.264919 Transport: Packet type 51 received, length=3D36
>> [libssh2] 1.264925 Transport: Looking for packet of type: 52
>> [libssh2] 1.264929 Transport: Looking for packet of type: 51
>=20
> When we tracked the similar problem with the publickey auth we had =
lots of help from checking the log in the server side together with =
libssh2's traces, so I would recommend that you check those out for this =
as well!

I think I've found the problem.  It seems we're asking for an =
ssh-connection method "password" and this server doesn't seem to allow =
password.  Note that regular [OpenSSH] ssh asks for =
keyboard-interactive.

debug1: userauth-request for user davem service ssh-connection method =
password
debug1: attempt 0 failures 0
debug3: mm_getpwnamallow entering
debug3: mm_request_send entering: type 6
debug3: mm_getpwnamallow: waiting for MONITOR_ANS_PWNAM
debug3: mm_request_receive_expect entering: type 7
debug3: mm_request_receive entering
debug3: monitor_read: checking request 6
debug3: mm_answer_pwnamallow
debug3: mm_answer_pwnamallow: sending MONITOR_ANS_PWNAM: 1
debug3: mm_request_send entering: type 7
debug2: monitor_read: 6 used once, disabling now
debug3: mm_request_receive entering
debug2: input_userauth_request: setting up authctxt for davem
debug3: mm_start_pam entering
debug3: mm_request_send entering: type 45
debug3: mm_inform_authserv entering
debug3: mm_request_send entering: type 3
debug2: Unrecognized authentication method name: password


The application code isn't designed to be "driven" by a user, so =
keyboard-interactive didn't seem the right function to use.  The =
question is, is this just a sshd configuration problem?  Or should I be =
using libssh2_userauth_keyboard_interactive_ex() and then writing a =
callback function that simply returns the password as supplied by the =
app?

Many thanks!




--Apple-Mail-247--941424141
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=us-ascii

<html><head></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space; =
"><br><div><div>On Dec 14, 2009, at 5:44 PM, Daniel Stenberg =
wrote:</div><br class=3D"Apple-interchange-newline"><blockquote =
type=3D"cite"><div>On Mon, 14 Dec 2009, Dave McCaldon =
wrote:<br><br><blockquote type=3D"cite">=3D&gt; libssh2_transport_read() =
plain (36 bytes)<br></blockquote><blockquote type=3D"cite">0000: 33 00 =
00 00 1e 70 75 62 6c 69 63 6b 65 79 2c 6b =
3....publickey,k<br></blockquote><blockquote type=3D"cite">0010: 65 79 =
62 6f 61 72 64 2d 69 6e 74 65 72 61 63 74 =
eyboard-interact<br></blockquote><blockquote type=3D"cite">0020: 69 76 =
65 00 =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ive.<b=
r></blockquote><blockquote type=3D"cite">[libssh2] 1.264919 Transport: =
Packet type 51 received, length=3D36<br></blockquote><blockquote =
type=3D"cite">[libssh2] 1.264925 Transport: Looking for packet of type: =
52<br></blockquote><blockquote type=3D"cite">[libssh2] 1.264929 =
Transport: Looking for packet of type: 51<br></blockquote><br>When we =
tracked the similar problem with the publickey auth we had lots of help =
from checking the log in the server side together with libssh2's traces, =
so I would recommend that you check those out for this as =
well!<br></div></blockquote></div><br><div>I think I've found the =
problem. &nbsp;It seems we're asking for an ssh-connection method =
"password" and this server doesn't seem to allow password. &nbsp;Note =
that regular [OpenSSH] ssh asks for =
keyboard-interactive.</div><div><br></div><div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug1: =
userauth-request for user davem service ssh-connection method =
password</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">debug1: attempt 0 failures =
0</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">debug3: mm_getpwnamallow =
entering</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">debug3: mm_request_send entering: type =
6</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">debug3: mm_getpwnamallow: waiting for =
MONITOR_ANS_PWNAM</span></font></div><div><font class=3D"Apple-style-span"=
 face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">debug3: mm_request_receive_expect entering: =
type 7</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">debug3: mm_request_receive =
entering</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">debug3: monitor_read: checking request =
6</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">debug3: =
mm_answer_pwnamallow</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug3: =
mm_answer_pwnamallow: sending MONITOR_ANS_PWNAM: =
1</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">debug3: mm_request_send entering: type =
7</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">debug2: monitor_read: 6 used once, disabling =
now</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">debug3: mm_request_receive =
entering</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">debug2: input_userauth_request: setting up =
authctxt for davem</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug3: =
mm_start_pam entering</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug3: =
mm_request_send entering: type 45</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug3: =
mm_inform_authserv entering</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug3: =
mm_request_send entering: type 3</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug2: =
Unrecognized authentication method name: =
password</span></font></div><div><br></div><div><br></div><div>The =
application code isn't designed to be "driven" by a user, so =
keyboard-interactive didn't seem the right function to use. &nbsp;The =
question is, is this just a sshd configuration problem? &nbsp;Or should =
I be using&nbsp;libssh2_userauth_keyboard_interactive_ex() and then =
writing a callback function that simply returns the password as supplied =
by the app?</div><div><br></div><div>Many =
thanks!</div><div><br></div><div><br></div><div><br></div></div></body></h=
tml>=

--Apple-Mail-247--941424141--

--===============0491643369==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============0491643369==--

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 15 00:42:03 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBENfsbO031279;
	Tue, 15 Dec 2009 00:42:01 +0100
Received: from giant.haxx.se (giant.haxx.se [83.168.254.42])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBENfqsY031251
	for <libssh2-devel@cool.haxx.se>; Tue, 15 Dec 2009 00:41:52 +0100
Date: Tue, 15 Dec 2009 00:41:52 +0100 (CET)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Login failure with libssh2-1.2.2 and SuSE Enterprise 10 Linux
In-Reply-To: <8724E66A-DBFD-4E33-B53E-06C9998E3B28@intersystems.com>
Message-ID: <alpine.DEB.2.00.0912150038440.24780@tvnag.unkk.fr>
References: <0F7C65B8-54C6-4B57-BE38-0C28B20813CF@intersystems.com>
	<alpine.DEB.2.00.0912142342300.24780@tvnag.unkk.fr>
	<8724E66A-DBFD-4E33-B53E-06C9998E3B28@intersystems.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Mon, 14 Dec 2009, Dave McCaldon wrote:

> I think I've found the problem.  It seems we're asking for an ssh-connection 
> method "password" and this server doesn't seem to allow password.  Note that 
> regular [OpenSSH] ssh asks for keyboard-interactive.

AFAIR, regular openssh asks for many different authentications one by one. If 
configured to do so at least.

> The application code isn't designed to be "driven" by a user, so 
> keyboard-interactive didn't seem the right function to use.  The question 
> is, is this just a sshd configuration problem?  Or should I be using 
> libssh2_userauth_keyboard_interactive_ex() and then writing a callback 
> function that simply returns the password as supplied by the app?

From a program's point of view, password and keyboard-interactive really 
aren't very different. At least from what I understand after having quickly 
glanced over what the docs say (http://www.ietf.org/rfc/rfc4252.txt and 
http://www.ietf.org/rfc/rfc4256.txt). I figure your application could just as 
well try both, one at a time.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 15 01:37:59 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBF0bsaw029063;
	Tue, 15 Dec 2009 01:37:57 +0100
Received: from mail.intersystems.com (mail.intersys.COM [198.133.74.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBF0bpIq029058
	for <libssh2-devel@cool.haxx.se>; Tue, 15 Dec 2009 01:37:51 +0100
X-InterSystems: Sent from InterSystems
X-InterSystems: Sent from InterSystems
From: Dave McCaldon <davem@intersystems.com>
Mime-Version: 1.0 (Apple Message framework v1077)
Subject: Re: Login failure with libssh2-1.2.2 and SuSE Enterprise 10 Linux
Date: Mon, 14 Dec 2009 19:37:45 -0500
In-Reply-To: <alpine.DEB.2.00.0912150038440.24780@tvnag.unkk.fr>
To: libssh2 development <libssh2-devel@cool.haxx.se>
References: <0F7C65B8-54C6-4B57-BE38-0C28B20813CF@intersystems.com>
	<alpine.DEB.2.00.0912142342300.24780@tvnag.unkk.fr>
	<8724E66A-DBFD-4E33-B53E-06C9998E3B28@intersystems.com>
	<alpine.DEB.2.00.0912150038440.24780@tvnag.unkk.fr>
Message-Id: <0BA901EC-A068-49B0-9765-F4A11AEA2BB7@intersystems.com>
X-Mailer: Apple Mail (2.1077)
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============1150892595=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se


--===============1150892595==
Content-Type: multipart/alternative; boundary=Apple-Mail-248--937576247


--Apple-Mail-248--937576247
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=us-ascii


On Dec 14, 2009, at 6:41 PM, Daniel Stenberg wrote:

> On Mon, 14 Dec 2009, Dave McCaldon wrote:
>=20
>> I think I've found the problem.  It seems we're asking for an =
ssh-connection method "password" and this server doesn't seem to allow =
password.  Note that regular [OpenSSH] ssh asks for =
keyboard-interactive.
>=20
> AFAIR, regular openssh asks for many different authentications one by =
one. If configured to do so at least.

If you run regular ssh with -v, you'll see it try different methods:

debug1: Authentications that can continue: =
publickey,keyboard-interactive
debug3: start over, passed a different list =
publickey,keyboard-interactive
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /Users/davem/.ssh/identity
debug3: no such identity: /Users/davem/.ssh/identity
debug1: Trying private key: /Users/davem/.ssh/id_rsa
debug3: no such identity: /Users/davem/.ssh/id_rsa
debug1: Trying private key: /Users/davem/.ssh/id_dsa
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>
Enter passphrase for key '/Users/davem/.ssh/id_dsa':=20
debug2: no passphrase given, try next key
debug2: we did not send a packet, disable method
debug3: authmethod_lookup keyboard-interactive
debug3: remaining preferred: password
debug3: authmethod_is_enabled keyboard-interactive
debug1: Next authentication method: keyboard-interactive
debug2: userauth_kbdint
debug2: we sent a keyboard-interactive packet, wait for reply
debug2: input_userauth_info_req
debug2: input_userauth_info_req: num_prompts 1
Password:=20
debug3: packet_send2: adding 32 (len 20 padlen 12 extra_pad 64)
debug2: input_userauth_info_req
debug2: input_userauth_info_req: num_prompts 0
debug3: packet_send2: adding 48 (len 10 padlen 6 extra_pad 64)
debug1: Authentication succeeded (keyboard-interactive).


According to the RFC4252 the server is supposed to respond as follows =
(for a rejection):

5.1.  Responses to Authentication Requests

   If the server rejects the authentication request, it MUST respond
   with the following:

      byte         SSH_MSG_USERAUTH_FAILURE
      name-list    authentications that can continue
      boolean      partial success


Looking back at the libssh2 trace, I can see the server responding with:

=3D> libssh2_transport_read() plain (36 bytes)
0000: 33 00 00 00 1e 70 75 62 6c 69 63 6b 65 79 2c 6b 3....publickey,k
0010: 65 79 62 6f 61 72 64 2d 69 6e 74 65 72 61 63 74 eyboard-interact
0020: 69 76 65 00                                     ive.

However, with the current API there's no way to communicate back to the =
application that there are additional authentication methods available.  =
I suppose that I could enhance my previous patch to return =
LIBSSH2_ERROR_AUTHORIZATION_FAILED if there are no items in the =
"authentications that can continue" field, otherwise return a new error =
LIBSSH2_ERROR_AUTHORIZATION_FAILED_TRY_OTHER_METHODS which could give an =
indication to the application that it can try a different authentication =
method (although not which ones might work).


>> The application code isn't designed to be "driven" by a user, so =
keyboard-interactive didn't seem the right function to use.  The =
question is, is this just a sshd configuration problem?  Or should I be =
using libssh2_userauth_keyboard_interactive_ex() and then writing a =
callback function that simply returns the password as supplied by the =
app?
>=20
>> =46rom a program's point of view, password and keyboard-interactive =
really=20
> aren't very different. At least from what I understand after having =
quickly glanced over what the docs say =
(http://www.ietf.org/rfc/rfc4252.txt and =
http://www.ietf.org/rfc/rfc4256.txt). I figure your application could =
just as well try both, one at a time.

It looks like the key difference between password and =
keyboard-interactive is that with password you send a username and =
password and either get logged in, or rejected (once and for all).  =
However, keyboard-interactive requires that the client send the username =
first, followed by the server responding with 0 or more =
challenge-response requests.

=46rom a program point of view, keyboard-interactive is a bit more =
subtle, if you look at the SSH_MSG_USERAUTH_INFO_REQUEST structure that =
the server responds with, you can see that there is no field named =
"password".  In fact when you log in, the "Password:" prompt is from the =
server -- it could just as easily be "Mother's maiden name:".

3.2.  Information Requests

   ...

   The SSH_MSG_USERAUTH_INFO_REQUEST message is defined as follows:

      byte      SSH_MSG_USERAUTH_INFO_REQUEST
      string    name (ISO-10646 UTF-8)
      string    instruction (ISO-10646 UTF-8)
      string    language tag (as defined in [RFC-3066])
      int       num-prompts
      string    prompt[1] (ISO-10646 UTF-8)
      boolean   echo[1]
      ...
      string    prompt[num-prompts] (ISO-10646 UTF-8)
      boolean   echo[num-prompts]


The response back to the server looks like:

3.4.  Information Responses

   After obtaining the requested information from the user, the client
   MUST respond with an SSH_MSG_USERAUTH_INFO_RESPONSE message.

   The format of the SSH_MSG_USERAUTH_INFO_RESPONSE message is as
   follows:

      byte      SSH_MSG_USERAUTH_INFO_RESPONSE
      int       num-responses
      string    response[1] (ISO-10646 UTF-8)
      ...
      string    response[num-responses] (ISO-10646 UTF-8)



So I'm going to conclude that this is in fact a server configuration =
issue -- it needs to allow the "password" authentication method in order =
to be properly driven by the application. =20

Of course now I need to look at supporting keyboard-interactive in the =
app (perhaps a dictionary of challenge/response values) because I'm sure =
I'll get some push back on this.

Thanks!





--Apple-Mail-248--937576247
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=us-ascii

<html><head></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: after-white-space; =
"><br><div><div>On Dec 14, 2009, at 6:41 PM, Daniel Stenberg =
wrote:</div><br class=3D"Apple-interchange-newline"><blockquote =
type=3D"cite"><div>On Mon, 14 Dec 2009, Dave McCaldon =
wrote:<br><br><blockquote type=3D"cite">I think I've found the problem. =
&nbsp;It seems we're asking for an ssh-connection method "password" and =
this server doesn't seem to allow password. &nbsp;Note that regular =
[OpenSSH] ssh asks for keyboard-interactive.<br></blockquote><br>AFAIR, =
regular openssh asks for many different authentications one by one. If =
configured to do so at =
least.<br></div></blockquote><div><br></div><div>If you run regular ssh =
with -v, you'll see it try different =
methods:</div><div><br></div><div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">debug1: Authentications that can continue: =
publickey,keyboard-interactive</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug3: start =
over, passed a different list =
publickey,keyboard-interactive</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug3: preferred =
publickey,keyboard-interactive,password</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug3: =
authmethod_lookup publickey</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug3: remaining =
preferred: keyboard-interactive,password</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug3: =
authmethod_is_enabled publickey</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug1: Next =
authentication method: publickey</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug1: Trying =
private key: /Users/davem/.ssh/identity</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug3: no such =
identity: /Users/davem/.ssh/identity</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug1: Trying =
private key: /Users/davem/.ssh/id_rsa</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug3: no such =
identity: /Users/davem/.ssh/id_rsa</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug1: Trying =
private key: /Users/davem/.ssh/id_dsa</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug1: =
PEM_read_PrivateKey failed</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug1: read PEM =
private key done: type &lt;unknown&gt;</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">Enter passphrase =
for key '/Users/davem/.ssh/id_dsa':&nbsp;</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug2: no =
passphrase given, try next key</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug2: we did not =
send a packet, disable method</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug3: =
authmethod_lookup keyboard-interactive</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug3: remaining =
preferred: password</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug3: =
authmethod_is_enabled keyboard-interactive</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug1: Next =
authentication method: =
keyboard-interactive</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug2: =
userauth_kbdint</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">debug2: we sent a keyboard-interactive =
packet, wait for reply</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug2: =
input_userauth_info_req</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug2: =
input_userauth_info_req: num_prompts 1</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: =
12px;">Password:&nbsp;</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug3: =
packet_send2: adding 32 (len 20 padlen 12 extra_pad =
64)</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">debug2: =
input_userauth_info_req</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug2: =
input_userauth_info_req: num_prompts 0</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">debug3: =
packet_send2: adding 48 (len 10 padlen 6 extra_pad =
64)</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">debug1: Authentication succeeded =
(keyboard-interactive).</span></font></div><div><br></div><div><br></div><=
div>According to the RFC4252 the server is supposed to respond as =
follows (for a rejection):</div><div><br></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">5.1. =
&nbsp;Responses to Authentication Requests<br><br>&nbsp;&nbsp; If the =
server rejects the authentication request, it MUST =
respond<br>&nbsp;&nbsp; with the following:<br><br>&nbsp;&nbsp; &nbsp; =
&nbsp;byte &nbsp; &nbsp; &nbsp; &nbsp; =
SSH_MSG_USERAUTH_FAILURE<br>&nbsp;&nbsp; &nbsp; &nbsp;name-list &nbsp; =
&nbsp;authentications that can continue<br>&nbsp;&nbsp; &nbsp; =
&nbsp;boolean &nbsp; &nbsp; &nbsp;partial =
success<br></span></font><br></div><div><br></div><div>Looking back at =
the libssh2 trace, I can see the server responding =
with:</div></div></div><div><br></div><div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px; ">=3D&gt; =
libssh2_transport_read() plain (36 bytes)</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">0000: 33 00 00 00 =
1e 70 75 62 6c 69 63 6b 65 79 2c 6b =
3....publickey,k</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">0010: 65 79 62 6f 61 72 64 2d 69 6e 74 65 72 =
61 63 74 eyboard-interact</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">0020: 69 76 65 00 =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
ive.</span></font></div><div><br></div></div><div>However, with the =
current API there's no way to communicate back to the application that =
there are additional authentication methods available. &nbsp;I suppose =
that I could enhance my previous patch to =
return&nbsp;LIBSSH2_ERROR_AUTHORIZATION_FAILED if there are no items in =
the "authentications that can continue" field, otherwise return a new =
error&nbsp;LIBSSH2_ERROR_AUTHORIZATION_FAILED_TRY_OTHER_METHODS which =
could give an indication to the application that it can try a different =
authentication method (although not which ones might =
work).</div><div><br></div><div><br><blockquote =
type=3D"cite"><div><blockquote type=3D"cite">The application code isn't =
designed to be "driven" by a user, so keyboard-interactive didn't seem =
the right function to use. &nbsp;The question is, is this just a sshd =
configuration problem? &nbsp;Or should I be using =
libssh2_userauth_keyboard_interactive_ex() and then writing a callback =
function that simply returns the password as supplied by the =
app?<br></blockquote><br><blockquote type=3D"cite">=46rom a program's =
point of view, password and keyboard-interactive really =
<br></blockquote>aren't very different. At least from what I understand =
after having quickly glanced over what the docs say (<a =
href=3D"http://www.ietf.org/rfc/rfc4252.txt and =
http://www.ietf.org/rfc/rfc4256.txt">http://www.ietf.org/rfc/rfc4252.txt =
and http://www.ietf.org/rfc/rfc4256.txt</a>). I figure your application =
could just as well try both, one at a =
time.<br></div></blockquote></div><br><div>It looks like the key =
difference between password and keyboard-interactive is that with =
password you send a username and password and either get logged in, or =
rejected (once and for all). &nbsp;However, keyboard-interactive =
requires that the client send the username first, followed by the server =
responding with 0 or more challenge-response =
requests.</div><div><br></div><div>=46rom a program point of view, =
keyboard-interactive is a bit more subtle, if you look at =
the&nbsp;SSH_MSG_USERAUTH_INFO_REQUEST structure that the server =
responds with, you can see that there is no field named "password". =
&nbsp;In fact when you log in, the "Password:" prompt is from the server =
-- it could just as easily be "Mother's maiden =
name:".</div><div><br></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">3.2. &nbsp;Information =
Requests</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier"><br></font></div><div><span class=3D"Apple-style-span" =
style=3D"font-family: Courier; font-size: 12px; ">&nbsp;&nbsp; =
...</span></div><div><font class=3D"Apple-style-span" =
face=3D"Courier"><br></font></div><div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">&nbsp;&nbsp; The =
SSH_MSG_USERAUTH_INFO_REQUEST message is defined as =
follows:</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;"><br></span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">&nbsp;&nbsp; =
&nbsp; &nbsp;byte &nbsp; &nbsp; =
&nbsp;SSH_MSG_USERAUTH_INFO_REQUEST</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">&nbsp;&nbsp; =
&nbsp; &nbsp;string &nbsp; &nbsp;name (ISO-10646 =
UTF-8)</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">&nbsp;&nbsp; &nbsp; &nbsp;string &nbsp; =
&nbsp;instruction (ISO-10646 UTF-8)</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">&nbsp;&nbsp; =
&nbsp; &nbsp;string &nbsp; &nbsp;language tag (as defined in =
[RFC-3066])</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">&nbsp;&nbsp; &nbsp; &nbsp;int &nbsp; &nbsp; =
&nbsp; num-prompts</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">&nbsp;&nbsp; =
&nbsp; &nbsp;string &nbsp; &nbsp;prompt[1] (ISO-10646 =
UTF-8)</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">&nbsp;&nbsp; &nbsp; &nbsp;boolean &nbsp; =
echo[1]</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">&nbsp;&nbsp; &nbsp; =
&nbsp;...</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">&nbsp;&nbsp; &nbsp; &nbsp;string &nbsp; =
&nbsp;prompt[num-prompts] (ISO-10646 =
UTF-8)</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">&nbsp;&nbsp; &nbsp; &nbsp;boolean &nbsp; =
echo[num-prompts]</span></font></div><br =
class=3D"Apple-interchange-newline"><br></div><div>The response back to =
the server looks like:</div><div><br></div><div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">3.4. =
&nbsp;Information Responses</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: =
12px;"><br></span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">&nbsp;&nbsp; After obtaining the requested =
information from the user, the client</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">&nbsp;&nbsp; MUST =
respond with an SSH_MSG_USERAUTH_INFO_RESPONSE =
message.</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;"><br></span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">&nbsp;&nbsp; The =
format of the SSH_MSG_USERAUTH_INFO_RESPONSE message is =
as</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">&nbsp;&nbsp; =
follows:</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;"><br></span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">&nbsp;&nbsp; =
&nbsp; &nbsp;byte &nbsp; &nbsp; =
&nbsp;SSH_MSG_USERAUTH_INFO_RESPONSE</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">&nbsp;&nbsp; =
&nbsp; &nbsp;int &nbsp; &nbsp; &nbsp; =
num-responses</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">&nbsp;&nbsp; &nbsp; &nbsp;string &nbsp; =
&nbsp;response[1] (ISO-10646 UTF-8)</span></font></div><div><font =
class=3D"Apple-style-span" face=3D"Courier" size=3D"3"><span =
class=3D"Apple-style-span" style=3D"font-size: 12px;">&nbsp;&nbsp; =
&nbsp; &nbsp;...</span></font></div><div><font class=3D"Apple-style-span" =
face=3D"Courier" size=3D"3"><span class=3D"Apple-style-span" =
style=3D"font-size: 12px;">&nbsp;&nbsp; &nbsp; &nbsp;string &nbsp; =
&nbsp;response[num-responses] (ISO-10646 =
UTF-8)</span></font></div><div><br></div><br =
class=3D"Apple-interchange-newline"><br></div><div>So I'm going to =
conclude that this is in fact a server configuration issue -- it needs =
to allow the "password" authentication method in order to be properly =
driven by the application. &nbsp;</div><div><br></div><div>Of course now =
I need to look at supporting keyboard-interactive in the app (perhaps a =
dictionary of challenge/response values) because I'm sure I'll get some =
push back on =
this.</div><div><br></div><div>Thanks!</div><div><br></div><div><br></div>=
<div><br></div><div><br></div></body></html>=

--Apple-Mail-248--937576247--

--===============1150892595==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============1150892595==--

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 15 04:24:44 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBF3OUuu032199;
	Tue, 15 Dec 2009 04:24:37 +0100
Received: from dottedmag.net (burger.dottedmag.net [212.75.37.82])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBF3OSDs032151
	for <libssh2-devel@cool.haxx.se>; Tue, 15 Dec 2009 04:24:28 +0100
Received: from vertex.dottedmag (unknown [91.197.127.125])
	by dottedmag.net (Postfix) with ESMTPSA id A6DC08C072
	for <libssh2-devel@cool.haxx.se>; Tue, 15 Dec 2009 04:24:27 +0100 (CET)
Received: from dottedmag by vertex.dottedmag with local (Exim 4.69)
	(envelope-from <dottedmag@dottedmag.net>) id 1NKO1R-0001zy-Bb
	for libssh2-devel@cool.haxx.se; Tue, 15 Dec 2009 09:24:25 +0600
From: Mikhail Gusarov <dottedmag@dottedmag.net>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Login failure with libssh2-1.2.2 and SuSE Enterprise 10 Linux
References: <0F7C65B8-54C6-4B57-BE38-0C28B20813CF@intersystems.com>
	<alpine.DEB.2.00.0912142342300.24780@tvnag.unkk.fr>
	<8724E66A-DBFD-4E33-B53E-06C9998E3B28@intersystems.com>
	<alpine.DEB.2.00.0912150038440.24780@tvnag.unkk.fr>
	<0BA901EC-A068-49B0-9765-F4A11AEA2BB7@intersystems.com>
Date: Tue, 15 Dec 2009 09:24:18 +0600
In-Reply-To: <0BA901EC-A068-49B0-9765-F4A11AEA2BB7@intersystems.com> (Dave
	McCaldon's message of "Mon, 14 Dec 2009 19:37:45 -0500")
Message-ID: <873a3cly1p.fsf@vertex.dottedmag>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0807779867=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============0807779867==
Content-Type: multipart/signed; boundary="=-=-=";
	micalg=pgp-sha1; protocol="application/pgp-signature"

--=-=-=
Content-Transfer-Encoding: quoted-printable


Twas brillig at 19:37:45 14.12.2009 UTC-05 when davem@intersystems.com did =
gyre and gimble:

 DM> Of course now I need to look at supporting keyboard-interactive in
 DM> the app (perhaps a dictionary of challenge/response values) because
 DM> I'm sure I'll get some push back on this.

Back when to the times I added keyboard-interactive support to libssh2 I
succesfully connected to all servers exposing it only using a "neat"
trick: just response with password for every challenge :)

=2D-=20
  http://fossarchy.blogspot.com/

--=-=-=
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)

iQIcBAEBAgAGBQJLJwFiAAoJEJ0g9lA+M4iI3UcP/23prV2BFWzjqvSSqwwKjINe
UwBtiEVg4yK88yNXLDrbzx+BZB6vbBpcbPlgbqnaxDucIFasQU4EW+lXBWtB14aG
9VAFNvkN1ZSnPXTRKrRpADXigMlH2VoNo+sAA/bng7uTpUlChCPdVh/J1q5LqMW/
UamSq5RPtRpkCYD+DEkKOWxEs+Fi3nGpie3GPCaRl8N2BHQvnRtijn/iPvhqHN3r
Q+FlR1V+c2UHp0ufwBjh0Hg2LwswBWedRjvojAjn+Xm3iENWoQosUi8c0mEOlyKG
4t9xK9W8exU9qWe9dphl+JySGjmWmMHDRA7FVBnljXj7pHJKULMujrcKFTlU/DAf
Kgcgl3w8Er8lV3nkPGwGKK17R8UC8rtj3Fe4GzyHdorxPdC9lXome1Ffyz5IyvGv
EvEp0SeVi8GJYKGa7uu86suAcVmuk7rOPPLZokXmHC1rAEAv3IGdtWGCO8OQRIyJ
eQ5aUGz8zxa8Z5uNdBRNYccLM+HRgWTasK3rMipEAPr+E5NOiTsjM5BhU0e/Uzw8
Rg08IrGmLl2kxrxZ0wbLT8v32NQ8ogJXVFjDxF88wXd1QyGpjQI75kKEG/xmT6xr
i37NubZK3qexlkMoAB25Dq9V36Gyw3gl5FYrqqHIrVaY5xf4bLqTFkb5oK9hzEX6
UP2ALbnTFGSSfBP3hTx5
=yWSD
-----END PGP SIGNATURE-----
--=-=-=--

--===============0807779867==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============0807779867==--

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 15 10:36:42 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBF9aRLS017128;
	Tue, 15 Dec 2009 10:36:38 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBF9aQwl017124
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Tue, 15 Dec 2009 10:36:26 +0100
Received: from mocca.josefsson.org (c80-216-24-211.bredband.comhem.se
	[80.216.24.211]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBF9aPn4022034
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Tue, 15 Dec 2009 10:36:26 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: [PATCH] Generalized API for publickey userauth
References: <87y6leeyfp.fsf@broken.deisui.org>
	<20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091215:libssh2-devel@cool.haxx.se::xQQsElBY+IJgz4Qi:Bl+A
Date: Tue, 15 Dec 2009 10:36:24 +0100
In-Reply-To: <878wdcbdc2.fsf@broken.deisui.org> (Daiki Ueno's message of "Wed, 
	09 Dec 2009 20:23:41 +0900")
Message-ID: <87ocm0fujr.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daiki Ueno <ueno@unixuser.org> writes:

> Peter Stuge <peter@stuge.se> writes:
>
>>> - a patch which adds callback-based function for "publickey" authentication
>>>   (The existing file-based function is now implemented with the
>>>   callback-based function)
>>> 
>>> - a sample program which demonstrates authentication using ssh-agent
>>>   (To play with this, add ssh2_agent.c to noinst_PROGRAMS in
>>>   example/simple/Makefile.am, rebuild, and run it as "ssh2_agent host user")
>>
>> I think that we want to have more of ssh2_agent.c within libssh2
>> itself, I'm not sure about the callback approach.
>
> Thanks for the response.  Indeed I realized that the code to talk to
> ssh-agent is too complicated to let users write it by themselves.

However I think it would be useful to have the ability to do a
callback-based public key signing too.  One goal here would be to permit
private keys in-memory rather than on disk, to facilitate
process-separation between the process knowing the private key and doing
the signing, and the actually libssh2 code.

So I kind of liked your initial API as a "low-level" API.  Maybe libssh2
can expose it, and ALSO provide a utility function for performing
agent-style authentication that is simple to use for applications.
Thoughts?

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 15 11:31:05 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBFAUI5C019707;
	Tue, 15 Dec 2009 11:30:22 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBFAUH5v019702
	for <libssh2-devel@cool.haxx.se>; Tue, 15 Dec 2009 11:30:17 +0100
Received: (qmail 11858 invoked by uid 501); 15 Dec 2009 10:30:17 -0000
Message-ID: <20091215103017.11857.qmail@stuge.se>
Date: Tue, 15 Dec 2009 11:30:17 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: [PATCH] Generalized API for publickey userauth
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <87y6leeyfp.fsf@broken.deisui.org>
	<20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
	<87ocm0fujr.fsf@mocca.josefsson.org>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <87ocm0fujr.fsf@mocca.josefsson.org>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Simon Josefsson wrote:
> However I think it would be useful to have the ability to do a
> callback-based public key signing too.  One goal here would be to
> permit private keys in-memory rather than on disk, to facilitate
> process-separation between the process knowing the private key and
> doing the signing, and the actually libssh2 code.

You just described exactly what an SSH agent does. :)


> Thoughts?

I agree it would be nice to allow new and cool agent solutions. Just
like we discussed to potentially have SFTP be separate from (but
close to) libssh2 I think it would make sense to have a separate
development effort for agent development. It makes a lot of sense to
me because it will be a much smaller code base which is thus easier
to review and possibly certify for those with such needs.


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 15 19:43:14 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBFIgqEJ028430;
	Tue, 15 Dec 2009 19:43:00 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBFIgoE6028387
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Tue, 15 Dec 2009 19:42:50 +0100
Received: from mocca.josefsson.org (c80-216-24-211.bredband.comhem.se
	[80.216.24.211]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBFIgmFv003915
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Tue, 15 Dec 2009 19:42:50 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2-devel@cool.haxx.se
Subject: Re: [PATCH] Generalized API for publickey userauth
References: <87y6leeyfp.fsf@broken.deisui.org>
	<20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
	<87ocm0fujr.fsf@mocca.josefsson.org>
	<20091215103017.11857.qmail@stuge.se>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091215:libssh2-devel@cool.haxx.se::kTyclnr8tHJGDNwy:2M/g
Date: Tue, 15 Dec 2009 19:42:48 +0100
In-Reply-To: <20091215103017.11857.qmail@stuge.se> (Peter Stuge's message of
	"Tue, 15 Dec 2009 11:30:17 +0100")
Message-ID: <87my1khydz.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Peter Stuge <peter@stuge.se> writes:

> Simon Josefsson wrote:
>> However I think it would be useful to have the ability to do a
>> callback-based public key signing too.  One goal here would be to
>> permit private keys in-memory rather than on disk, to facilitate
>> process-separation between the process knowing the private key and
>> doing the signing, and the actually libssh2 code.
>
> You just described exactly what an SSH agent does. :)

Yeah, but there are other scenarios that fits that description too, and
being restricted to only implementing the solution through the SSH agent
protocol appears inflexible to me.

>> Thoughts?
>
> I agree it would be nice to allow new and cool agent solutions. Just
> like we discussed to potentially have SFTP be separate from (but
> close to) libssh2 I think it would make sense to have a separate
> development effort for agent development. It makes a lot of sense to
> me because it will be a much smaller code base which is thus easier
> to review and possibly certify for those with such needs.

Yup.

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 15 19:44:58 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBFIitmn031470;
	Tue, 15 Dec 2009 19:44:56 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBFIirhZ031422
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Tue, 15 Dec 2009 19:44:53 +0100
Received: from mocca.josefsson.org (c80-216-24-211.bredband.comhem.se
	[80.216.24.211]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBFIip0k003967
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Tue, 15 Dec 2009 19:44:52 +0100
X-Hashcash: 1:22:091215:libssh2-devel@cool.haxx.se::ttA3ObAZOllCW5ao:53j1
From: Simon Josefsson <simon@josefsson.org>
To: libssh2-devel@cool.haxx.se
Subject: list archive?
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
Date: Tue, 15 Dec 2009 19:44:51 +0100
Message-ID: <87iqc8hyak.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

What's up with the mailing list archive?

Following the 'Archives' link on

http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

leads to

http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

which is empty.

It would be good with stable URLs to mailing list posts, for use in
commit messages.  I'm thinking of using URLs to gmane.org because it has
been stable for many years..

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 15 19:48:43 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBFImcHY001545;
	Tue, 15 Dec 2009 19:48:41 +0100
Received: from giant.haxx.se (giant.haxx.se [83.168.254.42])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBFImb3D001540
	for <libssh2-devel@cool.haxx.se>; Tue, 15 Dec 2009 19:48:37 +0100
Date: Tue, 15 Dec 2009 19:48:37 +0100 (CET)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: list archive?
In-Reply-To: <87iqc8hyak.fsf@mocca.josefsson.org>
Message-ID: <alpine.DEB.2.00.0912151946340.20887@tvnag.unkk.fr>
References: <87iqc8hyak.fsf@mocca.josefsson.org>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Tue, 15 Dec 2009, Simon Josefsson wrote:

> Following the 'Archives' link on
>
> http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

I fixed the link now. It now points to http://www.libssh2.org/mail.cgi which 
is the main page of the list archives I host at libssh2.org. Unfortunately I 
lost a couple of months of the archive just recently so I'm far away from 
gmane.org's stability in that regard.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 15 23:43:48 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBFMhbAN015366;
	Tue, 15 Dec 2009 23:43:44 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBFMhau6015302
	for <libssh2-devel@cool.haxx.se>; Tue, 15 Dec 2009 23:43:36 +0100
Received: (qmail 1832 invoked by uid 501); 15 Dec 2009 22:43:36 -0000
Message-ID: <20091215224336.1831.qmail@stuge.se>
Date: Tue, 15 Dec 2009 23:43:36 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: Login failure with libssh2-1.2.2 and SuSE Enterprise 10 Linux
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <0F7C65B8-54C6-4B57-BE38-0C28B20813CF@intersystems.com>
	<alpine.DEB.2.00.0912142342300.24780@tvnag.unkk.fr>
	<8724E66A-DBFD-4E33-B53E-06C9998E3B28@intersystems.com>
	<alpine.DEB.2.00.0912150038440.24780@tvnag.unkk.fr>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <alpine.DEB.2.00.0912150038440.24780@tvnag.unkk.fr>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daniel Stenberg wrote:
> From a program's point of view, password and keyboard-interactive
> really aren't very different. At least from what I understand after
> having quickly glanced over what the docs say

They are logically absolutely different.

Password is just that - a password to authenticate the user.

Kbdint is absolutely arbitrary and is used to allow the server to run
any kind of dialog with the user that it wants. This can be a
password (we talked about localized prompts on IRC) but it can also
be an OTP prompt, or a digital signature challenge, or something
completely different.

It is an absurdly bad idea for applications to attempt to parse
kbdint prompts. Read RFC4256 if you think you need to support kbdint.

This is not the OpenSSH mailing list, but sshd configuration is not
completely simple. If you want PAM to do auth you may well be forced
to use kbdint.


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 15 23:56:09 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBFMu2mq022728;
	Tue, 15 Dec 2009 23:56:07 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBFMu1td022705
	for <libssh2-devel@cool.haxx.se>; Tue, 15 Dec 2009 23:56:01 +0100
Received: (qmail 3623 invoked by uid 501); 15 Dec 2009 22:56:02 -0000
Message-ID: <20091215225602.3622.qmail@stuge.se>
Date: Tue, 15 Dec 2009 23:56:02 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: Warnings during building
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <5862ce3f0912140312j59ea7f3dm520464c759f29da6@mail.gmail.com>
	<873a3dvjyo.fsf@mocca.josefsson.org>
	<alpine.DEB.2.00.0912141307010.17665@tvnag.unkk.fr>
	<87zl5lso4g.fsf@mocca.josefsson.org>
	<9c3275a90912140512s24c738e3ia1d2a7a7b1123197@mail.gmail.com>
	<87ws0pr4le.fsf@mocca.josefsson.org>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <87ws0pr4le.fsf@mocca.josefsson.org>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Simon Josefsson wrote:
> Any solution that solves the problem is welcome.  Right now we have
> one concrete suggestion: to mark the unused variables with (void)
> in the function body.

How about remove all unused parameters?


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 00:15:13 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBFNEqi1030906;
	Wed, 16 Dec 2009 00:14:54 +0100
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBFNEnrx030893
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 00:14:50 +0100
Received: from int-mx08.intmail.prod.int.phx2.redhat.com
	(int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.21])
	by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id nBFNEiAH029625
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
	Tue, 15 Dec 2009 18:14:45 -0500
Received: from vpn2-9-203.ams2.redhat.com (vpn2-9-203.ams2.redhat.com
	[10.36.9.203])
	by int-mx08.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP
	id nBFNEiE1020563; Tue, 15 Dec 2009 18:14:44 -0500
From: Kamil Dudka <kdudka@redhat.com>
To: Peter Stuge <peter@stuge.se>
Subject: Re: Warnings during building
Date: Wed, 16 Dec 2009 00:14:39 +0100
User-Agent: KMail/1.9.10
References: <5862ce3f0912140312j59ea7f3dm520464c759f29da6@mail.gmail.com>
	<87ws0pr4le.fsf@mocca.josefsson.org>
	<20091215225602.3622.qmail@stuge.se>
In-Reply-To: <20091215225602.3622.qmail@stuge.se>
MIME-Version: 1.0
Content-Disposition: inline
Message-Id: <200912160014.40095.kdudka@redhat.com>
X-Scanned-By: MIMEDefang 2.67 on 10.5.11.21
Cc: libssh2-devel@cool.haxx.se
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Tuesday 15 of December 2009 23:56:02 Peter Stuge wrote:
> Simon Josefsson wrote:
> > Any solution that solves the problem is welcome.  Right now we have
> > one concrete suggestion: to mark the unused variables with (void)
> > in the function body.
>
> How about remove all unused parameters?

I've written patches exactly for those warnings two weeks ago:

http://www.mail-archive.com/libssh2-devel@cool.haxx.se/msg00796.html

Kamil
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 00:39:39 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBFNdXE4014538;
	Wed, 16 Dec 2009 00:39:37 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBFNdVjS014527
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 00:39:31 +0100
Received: from mocca.josefsson.org (c80-216-24-211.bredband.comhem.se
	[80.216.24.211]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBFNdTG2010965
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT);
	Wed, 16 Dec 2009 00:39:31 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Warnings during building
References: <5862ce3f0912140312j59ea7f3dm520464c759f29da6@mail.gmail.com>
	<87ws0pr4le.fsf@mocca.josefsson.org>
	<20091215225602.3622.qmail@stuge.se>
	<200912160014.40095.kdudka@redhat.com>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091215:peter@stuge.se::NupdanWFaiUB/KAV:FI09
X-Hashcash: 1:22:091215:libssh2-devel@cool.haxx.se::pHWOLrRcrtBI05fl:87GO
Date: Wed, 16 Dec 2009 00:39:30 +0100
In-Reply-To: <200912160014.40095.kdudka@redhat.com> (Kamil Dudka's message of
	"Wed, 16 Dec 2009 00:14:39 +0100")
Message-ID: <87my1jeril.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
Cc: Peter Stuge <peter@stuge.se>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Kamil Dudka <kdudka@redhat.com> writes:

> On Tuesday 15 of December 2009 23:56:02 Peter Stuge wrote:
>> Simon Josefsson wrote:
>> > Any solution that solves the problem is welcome.  Right now we have
>> > one concrete suggestion: to mark the unused variables with (void)
>> > in the function body.
>>
>> How about remove all unused parameters?
>
> I've written patches exactly for those warnings two weeks ago:
>
> http://www.mail-archive.com/libssh2-devel@cool.haxx.se/msg00796.html

That patch is no longer relevant, right?  I removed the 'session'
parameter instead of ignoring it, and ignored the 'enc' parameter in the
same way you suggested.  Sorry for not catching your patch earlier.
Please check latest git.

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 00:41:39 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBFNfZ4e017775;
	Wed, 16 Dec 2009 00:41:37 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBFNfYMX017698
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 00:41:34 +0100
Received: from mocca.josefsson.org (c80-216-24-211.bredband.comhem.se
	[80.216.24.211]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBFNfX3g011019
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 00:41:34 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2-devel@cool.haxx.se
Subject: Re: Warnings during building
References: <5862ce3f0912140312j59ea7f3dm520464c759f29da6@mail.gmail.com>
	<873a3dvjyo.fsf@mocca.josefsson.org>
	<alpine.DEB.2.00.0912141307010.17665@tvnag.unkk.fr>
	<87zl5lso4g.fsf@mocca.josefsson.org>
	<9c3275a90912140512s24c738e3ia1d2a7a7b1123197@mail.gmail.com>
	<87ws0pr4le.fsf@mocca.josefsson.org>
	<20091215225602.3622.qmail@stuge.se>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091215:libssh2-devel@cool.haxx.se::C0AK4sSjwSY9bMS6:0obj
Date: Wed, 16 Dec 2009 00:41:33 +0100
In-Reply-To: <20091215225602.3622.qmail@stuge.se> (Peter Stuge's message of
	"Tue, 15 Dec 2009 23:56:02 +0100")
Message-ID: <87iqc7erf6.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Peter Stuge <peter@stuge.se> writes:

> Simon Josefsson wrote:
>> Any solution that solves the problem is welcome.  Right now we have
>> one concrete suggestion: to mark the unused variables with (void)
>> in the function body.
>
> How about remove all unused parameters?

I don't think that is possible, the function prototype for
openssl.c:aes_ctr_init is dictated by OpenSSL headers.

I did remove the other unused parameter though, so if that is possible
it is always the best solution.  But there are situations like the above
when it is not really feasible.

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 01:18:59 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBG0ImH2010800;
	Wed, 16 Dec 2009 01:18:55 +0100
Received: from ivory3.scn-net.ne.jp (ivory3.scn-net.ne.jp [219.117.176.191])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBG0Ihp4010789
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 01:18:44 +0100
Received: from ([192.168.0.187]) (envelope sender: <ueno@unixuser.org>)
	by ivory3.scn-net.ne.jp with Active!Hunter esmtp server;
	Wed, 16 Dec 2009 09:18:42 +0900
Received: Received: from well-done.deisui.org (g187018.scn-net.ne.jp
	[202.83.187.18]) (authenticated)
	by blue17.scn-net.ne.jp (unknown) with ESMTP id nBG0Ifx2004827
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 09:18:41 +0900
Received: from 221x255x76x220.ap221.ftth.ucom.ne.jp ([221.255.76.220]
	helo=chilled) by well-done.deisui.org with esmtpsa
	(TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.69)
	(envelope-from <ueno@unixuser.org>) id 1NKhbE-0007Tp-UI
	for libssh2-devel@cool.haxx.se; Wed, 16 Dec 2009 09:18:41 +0900
From: Daiki Ueno <ueno@unixuser.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: ssh-agent support
References: <87y6leeyfp.fsf@broken.deisui.org>
	<20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
Date: Wed, 16 Dec 2009 09:18:39 +0900
In-Reply-To: <878wdcbdc2.fsf@broken.deisui.org> (Daiki Ueno's message of "Wed, 
	09 Dec 2009 20:23:41 +0900")
Message-ID: <87aaxjn540.fsf_-_@broken.deisui.org>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--=-=-=

Hi!

Daiki Ueno <ueno@unixuser.org> writes:

> If it looks OK, I will try to implement it this weekend.

The task took longer than I expected ;-)
The attached is the initial implementation.

Notes:

- The API changed from the proposal after the manner of the knownhost API.
  Now the following 7 new functions added.  See the
  example/simple/ssh2_agent.c for the usage.

 LIBSSH2_AGENT *libssh2_agent_init(LIBSSH2_SESSION *session);
 int libssh2_agent_connect(LIBSSH2_AGENT *agent);
 int libssh2_agent_list_identities(LIBSSH2_AGENT *agent);
 int libssh2_agent_get_identity(LIBSSH2_AGENT *agent,
                                struct libssh2_agent_publickey **store,
                                struct libssh2_agent_publickey *prev);
 int libssh2_agent_userauth(LIBSSH2_AGENT *agent,
                            const char *username,
                            struct libssh2_agent_publickey *identity);
 int libssh2_agent_disconnect(LIBSSH2_AGENT *agent);
 int libssh2_agent_free(LIBSSH2_AGENT *agent);

- libssh2_agent_{add,del}_identity() could also be added.  It will be
  useful for testing, but it will require extension to the internal
  hostkey interface to encode DSA/RSA parameters in the agent protocol.

- Pageant support is not yet implemented but it should be easy if I take
  some code from the Putty source (putty/windows/winpgnt.c).  Is that
  OK?  The Putty License is the MIT License.

I would appreciate any comments.

Regards,
-- 
Daiki Ueno

--=-=-=
Content-Type: text/x-diff
Content-Disposition: inline;
 filename=0001-Add-callback-based-API-for-publickey-auth.patch

From 0d68e06f170781e2f54d1eb1de073e36a1dcf699 Mon Sep 17 00:00:00 2001
From: Daiki Ueno <ueno@unixuser.org>
Date: Wed, 16 Dec 2009 08:46:06 +0900
Subject: [PATCH 1/3] Add callback-based API for publickey auth.

---
 include/libssh2.h |   13 ++++
 src/userauth.c    |  179 ++++++++++++++++++++++++++++++++++++++--------------
 2 files changed, 144 insertions(+), 48 deletions(-)

diff --git a/include/libssh2.h b/include/libssh2.h
index 807f6a2..f771eca 100644
--- a/include/libssh2.h
+++ b/include/libssh2.h
@@ -178,6 +178,11 @@ typedef struct _LIBSSH2_USERAUTH_KBDINT_RESPONSE
     unsigned int length;
 } LIBSSH2_USERAUTH_KBDINT_RESPONSE;
 
+/* 'publickey' authentication callback */
+#define LIBSSH2_USERAUTH_PUBLICKEY_SIGN_FUNC(name) \
+  int name(LIBSSH2_SESSION *session, unsigned char **sig, size_t *sig_len, \
+           const unsigned char *data, size_t data_len, void **abstract)
+
 /* 'keyboard-interactive' authentication callback */
 #define LIBSSH2_USERAUTH_KBDINT_RESPONSE_FUNC(name_) \
  void name_(const char* name, int name_len, const char* instruction, \
@@ -437,6 +442,14 @@ libssh2_userauth_publickey_fromfile_ex(LIBSSH2_SESSION *session,
                                          (privatekey), (passphrase))
 
 LIBSSH2_API int
+libssh2_userauth_publickey(LIBSSH2_SESSION *session,
+                           const char *username,
+                           const unsigned char *pubkeydata,
+                           size_t pubkeydata_len,
+                           LIBSSH2_USERAUTH_PUBLICKEY_SIGN_FUNC((*sign_callback)),
+                           void **abstract);
+
+LIBSSH2_API int
 libssh2_userauth_hostbased_fromfile_ex(LIBSSH2_SESSION *session,
                                        const char *username,
                                        unsigned int username_len,
diff --git a/src/userauth.c b/src/userauth.c
index 3ee338e..6e28460 100644
--- a/src/userauth.c
+++ b/src/userauth.c
@@ -613,6 +613,45 @@ file_read_privatekey(LIBSSH2_SESSION * session,
     return 0;
 }
 
+struct privkey_file {
+    const char *filename;
+    const char *passphrase;
+};
+
+static int
+sign_fromfile(LIBSSH2_SESSION *session, unsigned char **sig, size_t *sig_len,
+              const unsigned char *data, size_t data_len, void **abstract)
+{
+    struct privkey_file *privkey_file = (struct privkey_file *) (*abstract);
+    const LIBSSH2_HOSTKEY_METHOD *privkeyobj;
+    void *hostkey_abstract;
+    struct iovec datavec;
+
+    if (file_read_privatekey(session, &privkeyobj, &hostkey_abstract,
+                             session->userauth_pblc_method,
+                             session->userauth_pblc_method_len,
+                             privkey_file->filename,
+                             privkey_file->passphrase)) {
+        return -1;
+    }
+
+    datavec.iov_base = (unsigned char *)data;
+    datavec.iov_len = data_len;
+
+    if (privkeyobj->signv(session, sig, sig_len, 1, &datavec,
+                          &hostkey_abstract)) {
+        if (privkeyobj->dtor) {
+            privkeyobj->dtor(session, abstract);
+        }
+        return -1;
+    }
+
+    if (privkeyobj->dtor) {
+        privkeyobj->dtor(session, &hostkey_abstract);
+    }
+    return 0;
+}
+
 
 
 /* userauth_hostbased_fromfile
@@ -885,19 +924,15 @@ libssh2_userauth_hostbased_fromfile_ex(LIBSSH2_SESSION *session,
 
 
 
-/*
- * userauth_publickey_fromfile
- * Authenticate using a keypair found in the named files
- */
 static int
-userauth_publickey_fromfile(LIBSSH2_SESSION *session,
-                            const char *username,
-                            unsigned int username_len,
-                            const char *publickey,
-                            const char *privatekey,
-                            const char *passphrase)
+userauth_publickey(LIBSSH2_SESSION *session,
+                   const char *username,
+                   unsigned int username_len,
+                   const unsigned char *pubkeydata,
+                   unsigned long pubkeydata_len,
+                   LIBSSH2_USERAUTH_PUBLICKEY_SIGN_FUNC((*sign_callback)),
+                   void *abstract)
 {
-    unsigned long pubkeydata_len = 0;
     unsigned char reply_codes[4] =
         { SSH_MSG_USERAUTH_SUCCESS, SSH_MSG_USERAUTH_FAILURE,
           SSH_MSG_USERAUTH_PK_OK, 0
@@ -905,17 +940,20 @@ userauth_publickey_fromfile(LIBSSH2_SESSION *session,
     int rc;
 
     if (session->userauth_pblc_state == libssh2_NB_state_idle) {
-        unsigned char *pubkeydata;
-
         /* Zero the whole thing out */
         memset(&session->userauth_pblc_packet_requirev_state, 0,
                sizeof(session->userauth_pblc_packet_requirev_state));
 
-        if (file_read_publickey(session, &session->userauth_pblc_method,
-                                &session->userauth_pblc_method_len,
-                                &pubkeydata, &pubkeydata_len,publickey)) {
+        session->userauth_pblc_method_len = _libssh2_ntohu32(pubkeydata);
+        session->userauth_pblc_method =
+            LIBSSH2_ALLOC(session, session->userauth_pblc_method_len);
+        if (!session->userauth_pblc_method) {
+            libssh2_error(session, LIBSSH2_ERROR_ALLOC,
+                          "Unable to allocate memory for public key data", 0);
             return -1;
         }
+        memcpy(session->userauth_pblc_method, pubkeydata + 4,
+               session->userauth_pblc_method_len);
 
         /*
          * 45 = packet_type(1) + username_len(4) + servicename_len(4) +
@@ -940,7 +978,6 @@ userauth_publickey_fromfile(LIBSSH2_SESSION *session,
         if (!session->userauth_pblc_packet) {
             LIBSSH2_FREE(session, session->userauth_pblc_method);
             session->userauth_pblc_method = NULL;
-            LIBSSH2_FREE(session, pubkeydata);
             return -1;
         }
 
@@ -975,7 +1012,6 @@ userauth_publickey_fromfile(LIBSSH2_SESSION *session,
         session->userauth_pblc_s += 4;
         memcpy(session->userauth_pblc_s, pubkeydata, pubkeydata_len);
         session->userauth_pblc_s += pubkeydata_len;
-        LIBSSH2_FREE(session, pubkeydata);
 
         _libssh2_debug(session, LIBSSH2_TRACE_AUTH,
                        "Attempting publickey authentication");
@@ -1003,10 +1039,7 @@ userauth_publickey_fromfile(LIBSSH2_SESSION *session,
     }
 
     if (session->userauth_pblc_state == libssh2_NB_state_sent) {
-        const LIBSSH2_HOSTKEY_METHOD *privkeyobj;
-        void *abstract;
-        unsigned char buf[5];
-        struct iovec datavec[4];
+        unsigned char *buf, *s;
         unsigned char *sig;
         unsigned long sig_len;
 
@@ -1063,43 +1096,37 @@ userauth_publickey_fromfile(LIBSSH2_SESSION *session,
         LIBSSH2_FREE(session, session->userauth_pblc_data);
         session->userauth_pblc_data = NULL;
 
-        if (file_read_privatekey(session, &privkeyobj, &abstract,
-                                 session->userauth_pblc_method,
-                                 session->userauth_pblc_method_len,
-                                 privatekey, passphrase)) {
-            LIBSSH2_FREE(session, session->userauth_pblc_method);
-            session->userauth_pblc_method = NULL;
-            LIBSSH2_FREE(session, session->userauth_pblc_packet);
-            session->userauth_pblc_packet = NULL;
-            session->userauth_pblc_state = libssh2_NB_state_idle;
-            return -1;
-        }
-
         *session->userauth_pblc_b = 0x01;
 
-        _libssh2_htonu32(buf, session->session_id_len);
-        datavec[0].iov_base = buf;
-        datavec[0].iov_len = 4;
-        datavec[1].iov_base = session->session_id;
-        datavec[1].iov_len = session->session_id_len;
-        datavec[2].iov_base = session->userauth_pblc_packet;
-        datavec[2].iov_len = session->userauth_pblc_packet_len;
+        s = buf = LIBSSH2_ALLOC(session, 4 + session->session_id_len
+                                + session->userauth_pblc_packet_len);
+        if (!buf) {
+            libssh2_error(session, LIBSSH2_ERROR_ALLOC,
+                          "Unable to allocate memory for userauth-publickey "
+                          "signed data", 0);
+            return -1;
+        }
 
-        if (privkeyobj->signv(session, &sig, &sig_len, 3, datavec, &abstract)) {
+        _libssh2_htonu32(s, session->session_id_len);
+        s += 4;
+        memcpy (s, session->session_id, session->session_id_len);
+        s += session->session_id_len;
+        memcpy (s, session->userauth_pblc_packet,
+                session->userauth_pblc_packet_len);
+        s += session->userauth_pblc_packet_len;
+
+        if (sign_callback(session, &sig, &sig_len, buf, s - buf, abstract)) {
+            LIBSSH2_FREE(session, buf);
             LIBSSH2_FREE(session, session->userauth_pblc_method);
             session->userauth_pblc_method = NULL;
             LIBSSH2_FREE(session, session->userauth_pblc_packet);
             session->userauth_pblc_packet = NULL;
-            if (privkeyobj->dtor) {
-                privkeyobj->dtor(session, &abstract);
-            }
             session->userauth_pblc_state = libssh2_NB_state_idle;
             return -1;
         }
 
-        if (privkeyobj->dtor) {
-            privkeyobj->dtor(session, &abstract);
-        }
+
+        LIBSSH2_FREE(session, buf);
 
         /*
          * If this function was restarted, pubkeydata_len might still be 0
@@ -1214,6 +1241,43 @@ userauth_publickey_fromfile(LIBSSH2_SESSION *session,
     return -1;
 }
 
+/*
+ * userauth_publickey_fromfile
+ * Authenticate using a keypair found in the named files
+ */
+static int
+userauth_publickey_fromfile(LIBSSH2_SESSION *session,
+                            const char *username,
+                            unsigned int username_len,
+                            const char *publickey,
+                            const char *privatekey,
+                            const char *passphrase)
+{
+    unsigned char *pubkeydata = NULL;
+    unsigned long pubkeydata_len = 0;
+    struct privkey_file privkey_file;
+    void *abstract = &privkey_file;
+    int rc;
+
+    privkey_file.filename = privatekey;
+    privkey_file.passphrase = passphrase;
+
+    if (session->userauth_pblc_state == libssh2_NB_state_idle) {
+        if (file_read_publickey(session, &session->userauth_pblc_method,
+                                &session->userauth_pblc_method_len,
+                                &pubkeydata, &pubkeydata_len, publickey)) {
+            return -1;
+        }
+    }
+
+    rc = userauth_publickey(session, username, username_len,
+                            pubkeydata, pubkeydata_len,
+                            sign_fromfile, &abstract);
+    LIBSSH2_FREE(session, pubkeydata);
+
+    return rc;
+}
+
 /* libssh2_userauth_publickey_fromfile_ex
  * Authenticate using a keypair found in the named files
  */
@@ -1233,6 +1297,25 @@ libssh2_userauth_publickey_fromfile_ex(LIBSSH2_SESSION *session,
     return rc;
 }
 
+/* libssh2_userauth_publickey_ex
+ * Authenticate using an external callback function
+ */
+LIBSSH2_API int
+libssh2_userauth_publickey(LIBSSH2_SESSION *session,
+                           const char *user,
+                           const unsigned char *pubkeydata,
+                           size_t pubkeydata_len,
+                           LIBSSH2_USERAUTH_PUBLICKEY_SIGN_FUNC((*sign_callback)),
+                           void **abstract)
+{
+    int rc;
+    BLOCK_ADJUST(rc, session,
+                 userauth_publickey(session, user, strlen(user),
+                                    pubkeydata, pubkeydata_len,
+                                    sign_callback, abstract));
+    return rc;
+}
+
 
 
 /*
-- 
1.6.5.4


--=-=-=
Content-Type: text/x-diff
Content-Disposition: inline; filename=0002-Add-initial-ssh-agent-API.patch

From 17ee5d33a7adb0bd18669bb0e28225dea1064d47 Mon Sep 17 00:00:00 2001
From: Daiki Ueno <ueno@unixuser.org>
Date: Wed, 16 Dec 2009 08:49:57 +0900
Subject: [PATCH 2/3] Add initial ssh-agent API.

---
 Makefile.inc      |    2 +-
 configure.ac      |    1 +
 include/libssh2.h |   93 ++++++++
 src/agent.c       |  634 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 729 insertions(+), 1 deletions(-)
 create mode 100644 src/agent.c

diff --git a/Makefile.inc b/Makefile.inc
index 53e7a51..47a6b7a 100644
--- a/Makefile.inc
+++ b/Makefile.inc
@@ -1,5 +1,5 @@
 CSOURCES = channel.c comp.c crypt.c hostkey.c kex.c mac.c misc.c \
  packet.c publickey.c scp.c session.c sftp.c userauth.c transport.c \
- version.c knownhost.c openssl.c libgcrypt.c pem.c
+ version.c knownhost.c agent.c openssl.c libgcrypt.c pem.c
 
 HHEADERS = libssh2_priv.h openssl.h libgcrypt.h transport.h channel.h comp.h mac.h misc.h
diff --git a/configure.ac b/configure.ac
index a1dbaf6..fde806f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -206,6 +206,7 @@ AC_HELP_STRING([--disable-hidden-symbols],[Leave all symbols with default visibi
 AC_CHECK_HEADERS([errno.h fcntl.h stdio.h stdlib.h unistd.h sys/uio.h])
 AC_CHECK_HEADERS([sys/select.h sys/socket.h sys/ioctl.h sys/time.h])
 AC_CHECK_HEADERS([arpa/inet.h netinet/in.h])
+AC_CHECK_HEADERS([sys/un.h])
 
 case $host in
   *-*-cygwin* | *-*-cegcc*)
diff --git a/include/libssh2.h b/include/libssh2.h
index f771eca..9be60f4 100644
--- a/include/libssh2.h
+++ b/include/libssh2.h
@@ -247,6 +247,7 @@ typedef struct _LIBSSH2_SESSION                     LIBSSH2_SESSION;
 typedef struct _LIBSSH2_CHANNEL                     LIBSSH2_CHANNEL;
 typedef struct _LIBSSH2_LISTENER                    LIBSSH2_LISTENER;
 typedef struct _LIBSSH2_KNOWNHOSTS                  LIBSSH2_KNOWNHOSTS;
+typedef struct _LIBSSH2_AGENT                       LIBSSH2_AGENT;
 
 typedef struct _LIBSSH2_POLLFD {
     unsigned char type; /* LIBSSH2_POLLFD_* below */
@@ -364,6 +365,7 @@ typedef struct _LIBSSH2_POLLFD {
 #define LIBSSH2_ERROR_BAD_USE                   -39
 #define LIBSSH2_ERROR_COMPRESS                  -40
 #define LIBSSH2_ERROR_OUT_OF_BOUNDARY           -41
+#define LIBSSH2_ERROR_AGENT_PROTOCOL            -42
 
 /* Session API */
 LIBSSH2_API LIBSSH2_SESSION *
@@ -883,6 +885,97 @@ libssh2_knownhost_get(LIBSSH2_KNOWNHOSTS *hosts,
                       struct libssh2_knownhost **store,
                       struct libssh2_knownhost *prev);
 
+#define HAVE_LIBSSH2_AGENT_API 0x010202 /* since 1.2.2 */
+
+struct libssh2_agent_publickey {
+    unsigned int magic;              /* magic stored by the library */
+    void *node;	    /* handle to the internal representation of key */
+    unsigned char *blob;           /* public key blob */
+    size_t blob_len;               /* length of the public key blob */
+    char *comment;                 /* comment in printable format */
+};
+
+/*
+ * libssh2_agent_init
+ *
+ * Init an ssh-agent handle. Returns the pointer to the handle.
+ *
+ */
+LIBSSH2_API LIBSSH2_AGENT *
+libssh2_agent_init(LIBSSH2_SESSION *session);
+
+/*
+ * libssh2_agent_connect()
+ *
+ * Connect to an ssh-agent.
+ *
+ * Returns:
+ * NULL if no ssh-agent is running, or failed to connect
+ * a pointer to a LIBSSH2_AGENT if successfully connected
+ */
+LIBSSH2_API int
+libssh2_agent_connect(LIBSSH2_AGENT *agent);
+
+/*
+ * libssh2_agent_list_identities()
+ *
+ * Request ssh-agent to list identities.
+ *
+ * Returns 0 if succeeded, or a negative value for error.
+ */
+LIBSSH2_API int
+libssh2_agent_list_identities(LIBSSH2_AGENT *agent);
+
+/*
+ * libssh2_agent_get_identity()
+ *
+ * Traverse the internal list of public keys. Pass NULL to 'prev' to get
+ * the first one. Or pass a poiner to the previously returned one to get the
+ * next.
+ *
+ * Returns:
+ * 0 if a fine public key was stored in 'store'
+ * 1 if end of public keys
+ * [negative] on errors
+ */
+LIBSSH2_API int
+libssh2_agent_get_identity(LIBSSH2_AGENT *agent,
+			   struct libssh2_agent_publickey **store,
+			   struct libssh2_agent_publickey *prev);
+
+/*
+ * libssh2_agent_userauth()
+ *
+ * Do publickey user authentication with the help of ssh-agent.
+ *
+ * Returns 0 if succeeded, or a negative value for error.
+ */
+LIBSSH2_API int
+libssh2_agent_userauth(LIBSSH2_AGENT *agent,
+		       const char *username,
+		       struct libssh2_agent_publickey *identity);
+
+/*
+ * libssh2_agent_disconnect()
+ *
+ * Close a connection to an ssh-agent.
+ *
+ * Returns:
+ * NULL if no ssh-agent is running, or failed to connect
+ * a pointer to a LIBSSH2_AGENT if successfully connected
+ */
+LIBSSH2_API int
+libssh2_agent_disconnect(LIBSSH2_AGENT *agent);
+
+/*
+ * libssh2_agent_free()
+ *
+ * Free a connection to an ssh-agent.  This function also frees the
+ * internal list of public keys.
+ */
+LIBSSH2_API int
+libssh2_agent_free(LIBSSH2_AGENT *agent);
+
 /* NOTE NOTE NOTE
    libssh2_trace() has no function in builds that aren't built with debug
    enabled
diff --git a/src/agent.c b/src/agent.c
new file mode 100644
index 0000000..9814abf
--- /dev/null
+++ b/src/agent.c
@@ -0,0 +1,634 @@
+/*
+ * Copyright (c) 2009 by Daiki Ueno
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms,
+ * with or without modification, are permitted provided
+ * that the following conditions are met:
+ *
+ *   Redistributions of source code must retain the above
+ *   copyright notice, this list of conditions and the
+ *   following disclaimer.
+ *
+ *   Redistributions in binary form must reproduce the above
+ *   copyright notice, this list of conditions and the following
+ *   disclaimer in the documentation and/or other materials
+ *   provided with the distribution.
+ *
+ *   Neither the name of the copyright holder nor the names
+ *   of any other contributors may be used to endorse or
+ *   promote products derived from this software without
+ *   specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ */
+
+#include "libssh2_priv.h"
+#include "misc.h"
+#include <errno.h>
+#ifdef HAVE_SYS_UN_H
+#include <sys/un.h>
+#endif
+
+/* Requests from client to agent for protocol 1 key operations */
+#define SSH_AGENTC_REQUEST_RSA_IDENTITIES 1
+#define SSH_AGENTC_RSA_CHALLENGE 3
+#define SSH_AGENTC_ADD_RSA_IDENTITY 7
+#define SSH_AGENTC_REMOVE_RSA_IDENTITY 8
+#define SSH_AGENTC_REMOVE_ALL_RSA_IDENTITIES 9
+#define SSH_AGENTC_ADD_RSA_ID_CONSTRAINED 24
+
+/* Requests from client to agent for protocol 2 key operations */
+#define SSH2_AGENTC_REQUEST_IDENTITIES 11
+#define SSH2_AGENTC_SIGN_REQUEST 13
+#define SSH2_AGENTC_ADD_IDENTITY 17
+#define SSH2_AGENTC_REMOVE_IDENTITY 18
+#define SSH2_AGENTC_REMOVE_ALL_IDENTITIES 19
+#define SSH2_AGENTC_ADD_ID_CONSTRAINED 25
+
+/* Key-type independent requests from client to agent */
+#define SSH_AGENTC_ADD_SMARTCARD_KEY 20
+#define SSH_AGENTC_REMOVE_SMARTCARD_KEY 21
+#define SSH_AGENTC_LOCK 22
+#define SSH_AGENTC_UNLOCK 23
+#define SSH_AGENTC_ADD_SMARTCARD_KEY_CONSTRAINED 26
+
+/* Generic replies from agent to client */
+#define SSH_AGENT_FAILURE 5
+#define SSH_AGENT_SUCCESS 6
+
+/* Replies from agent to client for protocol 1 key operations */
+#define SSH_AGENT_RSA_IDENTITIES_ANSWER 2
+#define SSH_AGENT_RSA_RESPONSE 4
+
+/* Replies from agent to client for protocol 2 key operations */
+#define SSH2_AGENT_IDENTITIES_ANSWER 12
+#define SSH2_AGENT_SIGN_RESPONSE 14
+
+/* Key constraint identifiers */
+#define SSH_AGENT_CONSTRAIN_LIFETIME 1
+#define SSH_AGENT_CONSTRAIN_CONFIRM 2
+
+typedef enum {
+    agent_NB_state_init = 0,
+    agent_NB_state_request_created,
+    agent_NB_state_request_length_sent,
+    agent_NB_state_request_sent,
+    agent_NB_state_response_length_received,
+    agent_NB_state_response_received
+} agent_nonblocking_states;
+
+typedef struct agent_transaction_ctx {
+    unsigned char *request;
+    size_t request_len;
+    unsigned char *response;
+    size_t response_len;
+    agent_nonblocking_states state;
+} *agent_transaction_ctx_t;
+
+typedef int (*agent_connect_func)(LIBSSH2_AGENT *agent);
+typedef int (*agent_transact_func)(LIBSSH2_AGENT *agent,
+                                   agent_transaction_ctx_t transctx);
+typedef int (*agent_disconnect_func)(LIBSSH2_AGENT *agent);
+
+struct agent_publickey {
+    struct list_node node;
+
+    /* this is the struct we expose externally */
+    struct libssh2_agent_publickey external;
+};
+
+struct _LIBSSH2_AGENT
+{
+    LIBSSH2_SESSION *session;  /* the session this "belongs to" */
+
+    union {
+        int fd;
+    } u;
+
+    agent_connect_func connect;
+    agent_transact_func transact;
+    agent_disconnect_func disconnect;
+
+    struct agent_transaction_ctx transctx;
+    struct agent_publickey *identity;
+    struct list_head head;              /* list of public keys */
+};
+
+static int
+agent_connect_unix(LIBSSH2_AGENT *agent)
+{
+    const char *path;
+    struct sockaddr_un sun;
+
+    path = getenv("SSH_AUTH_SOCK");
+    if (!path) {
+        return -1;
+    }
+
+    agent->u.fd = socket(PF_UNIX, SOCK_STREAM, 0);
+    if (agent->u.fd < -1) {
+        return -1;
+    }
+
+    sun.sun_family = AF_UNIX;
+    strncpy (sun.sun_path, path, sizeof sun.sun_path);
+    if (connect(agent->u.fd, (struct sockaddr*)(&sun), sizeof sun) != 0) {
+        close (agent->u.fd);
+        return -1;
+    }
+
+    return 0;
+}
+
+static int
+agent_transact_unix(LIBSSH2_AGENT *agent, agent_transaction_ctx_t transctx)
+{
+    unsigned char buf[4], *s;
+    int rc;
+
+    /* Send the length of the request */
+    if (transctx->state == agent_NB_state_request_created) {
+        _libssh2_htonu32(buf, transctx->request_len);
+        rc = send(agent->u.fd, buf, sizeof buf, 0);
+        if (rc < 0) {
+            if (errno == EAGAIN)
+                return LIBSSH2_ERROR_EAGAIN;
+            return -1;
+        }
+        transctx->state = agent_NB_state_request_length_sent;
+    }
+
+    /* Send the request body */
+    if (transctx->state == agent_NB_state_request_length_sent) {
+        rc = send(agent->u.fd, transctx->request,
+                  transctx->request_len, 0);
+        if (rc < 0) {
+            if (errno == EAGAIN)
+                return LIBSSH2_ERROR_EAGAIN;
+            return -1;
+        }
+        transctx->state = agent_NB_state_request_sent;
+    }
+
+    /* Receive the length of a response */
+    if (transctx->state == agent_NB_state_request_sent) {
+        rc = recv(agent->u.fd, buf, sizeof buf, 0);
+        if (rc < 0) {
+            if (errno == EAGAIN)
+                return LIBSSH2_ERROR_EAGAIN;
+            return -1;
+        }
+        transctx->response_len = _libssh2_ntohu32(buf);
+        s = transctx->response = LIBSSH2_ALLOC(agent->session,
+                                                  transctx->response_len);
+        if (!transctx->response) {
+            return LIBSSH2_ERROR_ALLOC;
+        }
+        transctx->state = agent_NB_state_response_length_received;
+    }
+
+    /* Receive the response body */
+    if (transctx->state == agent_NB_state_response_length_received) {
+        rc = recv(agent->u.fd, transctx->response, transctx->response_len, 0);
+        if (rc < 0) {
+            if (errno == EAGAIN)
+                return LIBSSH2_ERROR_EAGAIN;
+            return -1;
+        }
+        transctx->state = agent_NB_state_response_received;
+    }
+
+    return 0;
+}
+
+static int
+agent_disconnect_unix(LIBSSH2_AGENT *agent)
+{
+    return close(agent->u.fd);
+}
+
+static int
+agent_sign(LIBSSH2_SESSION *session, unsigned char **sig, size_t *sig_len,
+           const unsigned char *data, size_t data_len, void **abstract)
+{
+    LIBSSH2_AGENT *agent = (LIBSSH2_AGENT *) (*abstract);
+    agent_transaction_ctx_t transctx = &agent->transctx;
+    struct agent_publickey *identity = agent->identity;
+    ssize_t len = 1 + 4 + identity->external.blob_len + 4 + data_len + 4;
+    ssize_t method_len;
+    unsigned char *s;
+    int rc;
+
+    /* Create a request to sign the data */
+    if (transctx->state == agent_NB_state_init) {
+        s = transctx->request = LIBSSH2_ALLOC(session, len);
+        if (!transctx->request) {
+            return LIBSSH2_ERROR_ALLOC;
+        }
+
+        *s++ = SSH2_AGENTC_SIGN_REQUEST;
+        /* key blob */
+        _libssh2_htonu32(s, identity->external.blob_len);
+        s += 4;
+         memcpy(s, identity->external.blob, identity->external.blob_len);
+        s += identity->external.blob_len;
+        /* data */
+        _libssh2_htonu32(s, data_len);
+        s += 4;
+        memcpy(s, data, data_len);
+        s += data_len;
+        /* flags */
+        _libssh2_htonu32(s, 0);
+        s += 4;
+        transctx->request_len = s - transctx->request;
+        transctx->state = agent_NB_state_request_created;
+    }
+
+    /* Make sure to be re-called as a result of EAGAIN. */
+    if (*transctx->request != SSH2_AGENTC_SIGN_REQUEST) {
+        return LIBSSH2_ERROR_BAD_USE;
+    }
+
+    rc = agent->transact(agent, transctx);
+    if (rc) {
+        goto error;
+    }
+    LIBSSH2_FREE(session, transctx->request);
+    transctx->request = NULL;
+
+    len = transctx->response_len;
+    s = transctx->response;
+    len--;
+    if (len < 0) {
+        rc = LIBSSH2_ERROR_AGENT_PROTOCOL;
+        goto error;
+    }
+    if (*s != SSH2_AGENT_SIGN_RESPONSE) {
+        rc = LIBSSH2_ERROR_AGENT_PROTOCOL;
+        goto error;
+    }
+    s++;
+
+    /* Skip the entire length of the signature */
+    len -= 4;
+    if (len < 0) {
+        rc = LIBSSH2_ERROR_AGENT_PROTOCOL;
+        goto error;
+    }
+    s += 4;
+
+    /* Skip signing method */
+    len -= 4;
+    if (len < 0) {
+        rc = LIBSSH2_ERROR_AGENT_PROTOCOL;
+        goto error;
+    }
+    method_len = _libssh2_ntohu32(s);
+    s += 4;
+    len -= method_len;
+    if (len < 0) {
+        rc = LIBSSH2_ERROR_AGENT_PROTOCOL;
+        goto error;
+    }
+    s += method_len;
+
+    /* Read the signature */
+    len -= 4;
+    if (len < 0) {
+        rc = LIBSSH2_ERROR_AGENT_PROTOCOL;
+        goto error;
+    }
+    *sig_len = _libssh2_ntohu32(s);
+    s += 4;
+    len -= *sig_len;
+    if (len < 0) {
+        rc = LIBSSH2_ERROR_AGENT_PROTOCOL;
+        goto error;
+    }
+
+    *sig = LIBSSH2_ALLOC(session, *sig_len);
+    if (!*sig) {
+        rc = LIBSSH2_ERROR_ALLOC;
+        goto error;
+    }
+    memcpy(*sig, s, *sig_len);
+
+  error:
+    LIBSSH2_FREE(session, transctx->request);
+    transctx->request = NULL;
+
+    LIBSSH2_FREE(session, transctx->response);
+    transctx->response = NULL;
+
+    return rc;
+}
+
+static int
+agent_list_identities(LIBSSH2_AGENT *agent)
+{
+    agent_transaction_ctx_t transctx = &agent->transctx;
+    ssize_t len, num_identities;
+    unsigned char *s;
+    int rc;
+
+    /* Create a request to list identities */
+    if (transctx->state == agent_NB_state_init) {
+      unsigned char c = SSH2_AGENTC_REQUEST_IDENTITIES;
+      transctx->request = &c;
+      transctx->request_len = 1;
+      transctx->state = agent_NB_state_request_created;
+    }
+
+    /* Make sure to be re-called as a result of EAGAIN. */
+    if (*transctx->request != SSH2_AGENTC_REQUEST_IDENTITIES) {
+        return LIBSSH2_ERROR_BAD_USE;
+    }
+
+    rc = agent->transact(agent, transctx);
+    if (rc) {
+        goto error;
+    }
+    transctx->request = NULL;
+
+    len = transctx->response_len;
+    s = transctx->response;
+    len--;
+    if (len < 0) {
+        rc = LIBSSH2_ERROR_AGENT_PROTOCOL;
+        goto error;
+    }
+    if (*s != SSH2_AGENT_IDENTITIES_ANSWER) {
+        rc = LIBSSH2_ERROR_AGENT_PROTOCOL;
+        goto error;
+    }
+    s++;
+
+    /* Read the length of identities */
+    len -= 4;
+    if (len < 0) {
+        rc = LIBSSH2_ERROR_AGENT_PROTOCOL;
+        goto error;
+    }
+    num_identities = _libssh2_ntohu32(s);
+    s += 4;
+
+    while (num_identities--) {
+        struct agent_publickey *identity;
+        ssize_t comment_len;
+
+        identity = LIBSSH2_ALLOC(agent->session, sizeof *identity);
+        if (!identity) {
+            rc = LIBSSH2_ERROR_ALLOC;
+            goto error;
+        }
+
+        /* Read the length of the blob */
+        len -= 4;
+        if (len < 0) {
+            rc = LIBSSH2_ERROR_AGENT_PROTOCOL;
+            goto error;
+        }
+        identity->external.blob_len = _libssh2_ntohu32(s);
+        s += 4;
+
+        /* Read the blob */
+        len -= identity->external.blob_len;
+        if (len < 0) {
+            rc = LIBSSH2_ERROR_AGENT_PROTOCOL;
+            goto error;
+        }
+        identity->external.blob = LIBSSH2_ALLOC(agent->session,
+                                                identity->external.blob_len);
+        if (!identity->external.blob) {
+            rc = LIBSSH2_ERROR_ALLOC;
+            goto error;
+        }
+        memcpy(identity->external.blob, s, identity->external.blob_len);
+        s += identity->external.blob_len;
+
+        /* Read the length of the comment */
+        len -= 4;
+        if (len < 0) {
+            rc = LIBSSH2_ERROR_AGENT_PROTOCOL;
+            goto error;
+        }
+        comment_len = _libssh2_ntohu32(s);
+        s += 4;
+
+        /* Read the comment */
+        len -= comment_len;
+        if (len < 0) {
+            rc = LIBSSH2_ERROR_AGENT_PROTOCOL;
+            goto error;
+        }
+        identity->external.comment = LIBSSH2_ALLOC(agent->session,
+                                                   comment_len + 1);
+        if (!identity->external.comment) {
+            rc = LIBSSH2_ERROR_ALLOC;
+            goto error;
+        }
+        identity->external.comment[comment_len] = '\0';
+        memcpy(identity->external.comment, s, comment_len);
+        s += comment_len;
+
+        _libssh2_list_add(&agent->head, &identity->node);
+    }
+ error:
+    LIBSSH2_FREE(agent->session, transctx->response);
+    transctx->response = NULL;
+
+    return rc;
+}
+
+#define AGENT_PUBLICKEY_MAGIC 0x3bdefed2
+/*
+ * agent_publickey_to_external()
+ *
+ * Copies data from the internal to the external representation struct.
+ *
+ */
+static struct libssh2_agent_publickey *
+agent_publickey_to_external(struct agent_publickey *node)
+{
+    struct libssh2_agent_publickey *ext = &node->external;
+
+    ext->magic = AGENT_PUBLICKEY_MAGIC;
+    ext->node = node;
+
+    return ext;
+}
+
+/*
+ * libssh2_agent_init
+ *
+ * Init an ssh-agent handle. Returns the pointer to the handle.
+ *
+ */
+LIBSSH2_API LIBSSH2_AGENT *
+libssh2_agent_init(LIBSSH2_SESSION *session)
+{
+    LIBSSH2_AGENT *agent;
+
+    agent = LIBSSH2_ALLOC(session, sizeof *agent);
+    if (!agent) {
+        libssh2_error(session, LIBSSH2_ERROR_ALLOC,
+                      "Unable to allocate space for agent connection", 0);
+        return NULL;
+    }
+    memset(agent, 0, sizeof *agent);
+    agent->session = session;
+    agent->connect = agent_connect_unix;
+    agent->transact = agent_transact_unix;
+    agent->disconnect = agent_disconnect_unix;
+
+    return agent;
+}
+
+/*
+ * libssh2_agent_connect()
+ *
+ * Connect to an ssh-agent.
+ *
+ * Returns:
+ * NULL if no ssh-agent is running, or failed to connect
+ * a pointer to a LIBSSH2_AGENT if successfully connected
+ */
+LIBSSH2_API int
+libssh2_agent_connect(LIBSSH2_AGENT *agent)
+{
+    int rc;
+    BLOCK_ADJUST(rc, agent->session, agent->connect(agent));
+    return rc;
+}
+
+/*
+ * libssh2_agent_list_identities()
+ *
+ * Request ssh-agent to list identities.
+ *
+ * Returns 0 if succeeded, or a negative value for error.
+ */
+LIBSSH2_API int
+libssh2_agent_list_identities(LIBSSH2_AGENT *agent)
+{
+    int rc;
+
+    memset(&agent->transctx, 0, sizeof agent->transctx);
+    BLOCK_ADJUST(rc, agent->session, agent_list_identities(agent));
+    return rc;
+}
+
+/*
+ * libssh2_agent_get_identity()
+ *
+ * Traverse the internal list of public keys. Pass NULL to 'prev' to get
+ * the first one. Or pass a poiner to the previously returned one to get the
+ * next.
+ *
+ * Returns:
+ * 0 if a fine public key was stored in 'store'
+ * 1 if end of public keys
+ * [negative] on errors
+ */
+LIBSSH2_API int
+libssh2_agent_get_identity(LIBSSH2_AGENT *agent,
+                           struct libssh2_agent_publickey **ext,
+                           struct libssh2_agent_publickey *oprev)
+{
+    struct agent_publickey *node;
+    if (oprev && oprev->node) {
+        /* we have a starting point */
+        struct agent_publickey *prev = oprev->node;
+
+        /* get the next node in the list */
+        node = _libssh2_list_next(&prev->node);
+    }
+    else
+        node = _libssh2_list_first(&agent->head);
+
+    if (!node)
+        /* no (more) node */
+        return 1;
+
+    *ext = agent_publickey_to_external(node);
+
+    return 0;
+}
+
+/*
+ * libssh2_agent_userauth()
+ *
+ * Do publickey user authentication with the help of ssh-agent.
+ *
+ * Returns 0 if succeeded, or a negative value for error.
+ */
+LIBSSH2_API int
+libssh2_agent_userauth(LIBSSH2_AGENT *agent,
+                       const char *username,
+                       struct libssh2_agent_publickey *identity)
+{
+    void *abstract = agent;
+    int rc;
+
+    memset(&agent->transctx, 0, sizeof agent->transctx);
+    agent->identity = identity->node;
+    BLOCK_ADJUST(rc, agent->session,
+                 libssh2_userauth_publickey(agent->session, username,
+                                            identity->blob,
+                                            identity->blob_len,
+                                            agent_sign,
+                                            &abstract));
+    return rc;
+}
+
+/*
+ * libssh2_agent_disconnect()
+ *
+ * Close a connection to an ssh-agent.
+ *
+ * Returns:
+ * NULL if no ssh-agent is running, or failed to connect
+ * a pointer to a LIBSSH2_AGENT if successfully connected
+ */
+LIBSSH2_API int
+libssh2_agent_disconnect(LIBSSH2_AGENT *agent)
+{
+    int rc;
+    BLOCK_ADJUST(rc, agent->session, agent->disconnect(agent));
+    return rc;
+}
+
+/*
+ * libssh2_agent_free()
+ *
+ * Free a connection to an ssh-agent.  This function also frees the
+ * internal list of public keys.
+ */
+LIBSSH2_API int
+libssh2_agent_free(LIBSSH2_AGENT *agent) {
+    struct agent_publickey *node;
+    struct agent_publickey *next;
+
+    for (node = _libssh2_list_first(&agent->head); node; node = next) {
+        next = _libssh2_list_next(&node->node);
+        LIBSSH2_FREE(agent->session, node->external.blob);
+        LIBSSH2_FREE(agent->session, node->external.comment);
+        LIBSSH2_FREE(agent->session, node);
+    }
+    LIBSSH2_FREE(agent->session, agent);
+    return 0;
+}
-- 
1.6.5.4


--=-=-=
Content-Type: text/x-diff
Content-Disposition: inline;
 filename=0003-Add-an-example-to-use-ssh-agent-API.patch

From d8b53f493791f26e54f5ae22095571b0d5a5cfe1 Mon Sep 17 00:00:00 2001
From: Daiki Ueno <ueno@unixuser.org>
Date: Wed, 16 Dec 2009 08:50:25 +0900
Subject: [PATCH 3/3] Add an example to use ssh-agent API.

---
 example/simple/Makefile.am  |    2 +-
 example/simple/ssh2_agent.c |  229 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 230 insertions(+), 1 deletions(-)
 create mode 100644 example/simple/ssh2_agent.c

diff --git a/example/simple/Makefile.am b/example/simple/Makefile.am
index cfa16d9..c396fdf 100644
--- a/example/simple/Makefile.am
+++ b/example/simple/Makefile.am
@@ -8,7 +8,7 @@ noinst_PROGRAMS = ssh2 \
 		sftp_write sftp_write_nonblock \
 		sftp_mkdir sftp_mkdir_nonblock \
 		sftp_RW_nonblock \
-		sftpdir sftpdir_nonblock ssh2_exec
+		sftpdir sftpdir_nonblock ssh2_exec ssh2_agent
 
 # the examples need the $(top_builddir)/src since when building outside of the
 # source dir they still need to reach the libssh2_config.h header
diff --git a/example/simple/ssh2_agent.c b/example/simple/ssh2_agent.c
new file mode 100644
index 0000000..44335ba
--- /dev/null
+++ b/example/simple/ssh2_agent.c
@@ -0,0 +1,229 @@
+/*
+ * Sample showing how to do SSH2 connect using ssh-agent.
+ *
+ * The sample code has default values for host name, user name:
+ *
+ * "ssh2_agent host user"
+ */
+
+#include "libssh2_config.h"
+#include <libssh2.h>
+#include <libssh2_sftp.h>
+
+#ifdef HAVE_WINDOWS_H
+# include <windows.h>
+#endif
+#ifdef HAVE_WINSOCK2_H
+# include <winsock2.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+#ifdef HAVE_NETINET_IN_H
+# include <netinet/in.h>
+#endif
+# ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+# ifdef HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+
+#include <sys/types.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <sys/un.h>
+#include <stdlib.h>
+
+const char *username="username";
+
+int main(int argc, char *argv[])
+{
+    unsigned long hostaddr;
+    int sock = -1, i, j, rc;
+    struct sockaddr_in sin;
+    const char *fingerprint;
+    char *userauthlist;
+    LIBSSH2_SESSION *session;
+    LIBSSH2_CHANNEL *channel;
+    LIBSSH2_AGENT *agent = NULL;
+    struct libssh2_agent_publickey *identity, *prev_identity = NULL;
+#ifdef WIN32
+    WSADATA wsadata;
+
+    WSAStartup(MAKEWORD(2,0), &wsadata);
+#endif
+
+    if (argc > 1) {
+        hostaddr = inet_addr(argv[1]);
+    } else {
+        hostaddr = htonl(0x7F000001);
+    }
+
+    if(argc > 2) {
+        username = argv[2];
+    }
+
+    /* Ultra basic "connect to port 22 on localhost".  Your code is
+     * responsible for creating the socket establishing the connection
+     */
+    sock = socket(AF_INET, SOCK_STREAM, 0);
+    if (sock == -1) {
+        fprintf(stderr, "failed to create socket!\n");
+        rc = 1;
+        goto shutdown;
+    }
+
+    sin.sin_family = AF_INET;
+    sin.sin_port = htons(22);
+    sin.sin_addr.s_addr = hostaddr;
+    if (connect(sock, (struct sockaddr*)(&sin),
+                sizeof(struct sockaddr_in)) != 0) {
+        fprintf(stderr, "failed to connect!\n");
+        goto shutdown;
+    }
+
+    /* Create a session instance and start it up. This will trade welcome
+     * banners, exchange keys, and setup crypto, compression, and MAC layers
+     */
+    session = libssh2_session_init();
+    if (libssh2_session_startup(session, sock)) {
+        fprintf(stderr, "Failure establishing SSH session\n");
+        return 1;
+    }
+
+    /* Connect to the ssh-agent */
+    agent = libssh2_agent_init(session);
+    if (!agent) {
+        fprintf(stderr, "Failure initializing ssh-agent support\n");
+        rc = 1;
+        goto shutdown;
+    }
+    if (libssh2_agent_connect(agent)) {
+        fprintf(stderr, "Failure connecting to ssh-agent\n");
+        rc = 1;
+        goto shutdown;
+    }
+    if (libssh2_agent_list_identities(agent)) {
+        fprintf(stderr, "Failure requesting identities to ssh-agent\n");
+        rc = 1;
+        goto shutdown;
+    }
+    while (1) {
+        rc = libssh2_agent_get_identity(agent, &identity, prev_identity);
+        if (rc == 1)
+            break;
+        if (rc < 0) {
+            fprintf(stderr,
+                    "Failure obtaining identity from ssh-agent support\n");
+            rc = 1;
+            goto shutdown;
+        }
+        if (libssh2_agent_userauth(agent, username, identity)) {
+            printf("\tAuthentication with username %s and "
+                   "public key %s failed!\n",
+                   username, identity->comment);
+        } else {
+            printf("\tAuthentication with username %s and "
+                   "public key %s succeeded!\n",
+                   username, identity->comment);
+            break;
+        }
+    }
+    if (rc) {
+        fprintf(stderr, "Couldn't continue authentication\n");
+        goto shutdown;
+    }
+
+    /* At this point we havn't authenticated. The first thing to do is check
+     * the hostkey's fingerprint against our known hosts Your app may have it
+     * hard coded, may go to a file, may present it to the user, that's your
+     * call
+     */
+    fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_MD5);
+    printf("Fingerprint: ");
+    for(i = 0; i < 16; i++) {
+        printf("%02X ", (unsigned char)fingerprint[i]);
+    }
+    printf("\n");
+
+    /* check what authentication methods are available */
+    userauthlist = libssh2_userauth_list(session, username, strlen(username));
+    printf("Authentication methods: %s\n", userauthlist);
+    if (strstr(userauthlist, "publickey") == NULL) {
+        fprintf(stderr, "\"publickey\" authentication is not supported\n");
+        goto shutdown;
+    }
+
+    /* Request a shell */
+    if (!(channel = libssh2_channel_open_session(session))) {
+        fprintf(stderr, "Unable to open a session\n");
+        goto shutdown;
+    }
+
+    /* Some environment variables may be set,
+     * It's up to the server which ones it'll allow though
+     */
+    libssh2_channel_setenv(channel, "FOO", "bar");
+
+    /* Request a terminal with 'vanilla' terminal emulation
+     * See /etc/termcap for more options
+     */
+    if (libssh2_channel_request_pty(channel, "vanilla")) {
+        fprintf(stderr, "Failed requesting pty\n");
+        goto skip_shell;
+    }
+
+    /* Open a SHELL on that pty */
+    if (libssh2_channel_shell(channel)) {
+        fprintf(stderr, "Unable to request shell on allocated pty\n");
+        goto shutdown;
+    }
+
+    /* At this point the shell can be interacted with using
+     * libssh2_channel_read()
+     * libssh2_channel_read_stderr()
+     * libssh2_channel_write()
+     * libssh2_channel_write_stderr()
+     *
+     * Blocking mode may be (en|dis)abled with: libssh2_channel_set_blocking()
+     * If the server send EOF, libssh2_channel_eof() will return non-0
+     * To send EOF to the server use: libssh2_channel_send_eof()
+     * A channel can be closed with: libssh2_channel_close()
+     * A channel can be freed with: libssh2_channel_free()
+     */
+
+  skip_shell:
+    if (channel) {
+        libssh2_channel_free(channel);
+        channel = NULL;
+    }
+
+    /* Other channel types are supported via:
+     * libssh2_scp_send()
+     * libssh2_scp_recv()
+     * libssh2_channel_direct_tcpip()
+     */
+
+  shutdown:
+
+    libssh2_agent_disconnect(agent);
+    libssh2_agent_free(agent);
+
+    libssh2_session_disconnect(session,
+                               "Normal Shutdown, Thank you for playing");
+    libssh2_session_free(session);
+
+    if (sock != -1) {
+#ifdef WIN32
+        closesocket(sock);
+#else
+        close(sock);
+#endif
+    }
+
+    printf("all done!\n");
+    return rc;
+}
-- 
1.6.5.4


--=-=-=
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--=-=-=--

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 01:34:29 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBG0YOCM016227;
	Wed, 16 Dec 2009 01:34:28 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBG0YNUT016220
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 01:34:23 +0100
Received: from mocca.josefsson.org (c80-216-24-211.bredband.comhem.se
	[80.216.24.211]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBG0YMwd011918
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 01:34:24 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: ssh-agent support
References: <87y6leeyfp.fsf@broken.deisui.org>
	<20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
	<87aaxjn540.fsf_-_@broken.deisui.org>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091216:libssh2-devel@cool.haxx.se::Wzuo9nis9/QQTFAS:TWtj
Date: Wed, 16 Dec 2009 01:34:22 +0100
In-Reply-To: <87aaxjn540.fsf_-_@broken.deisui.org> (Daiki Ueno's message of
	"Wed, 16 Dec 2009 09:18:39 +0900")
Message-ID: <871viveoz5.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daiki Ueno <ueno@unixuser.org> writes:

> Hi!
>
> Daiki Ueno <ueno@unixuser.org> writes:
>
>> If it looks OK, I will try to implement it this weekend.
>
> The task took longer than I expected ;-)
> The attached is the initial implementation.

Great!  Looking over the code, it all looks fine to me.  I propose to
push the patch to be able to do further testing of it, unless anyone has
any general objection to this approach?

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 02:22:39 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBG1MUUl017884;
	Wed, 16 Dec 2009 02:22:36 +0100
Received: from mail-iw0-f196.google.com (mail-iw0-f196.google.com
	[209.85.223.196])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBG1MSJX017736
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 02:22:29 +0100
Received: by iwn34 with SMTP id 34so372887iwn.21
	for <libssh2-devel@cool.haxx.se>; Tue, 15 Dec 2009 17:22:23 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:mime-version:received:date:message-id:subject
	:from:to:content-type;
	bh=oPqHka2prsxIlG5l7UWJfhyCIMNaXP4HI5TFCf8mq28=;
	b=Z2v5AtwAJZ7LoxAGDnKqqFT9yut5dXJS+azehLAAERLvEE6oa5u9QORhHC86xt9F6i
	v7ey1G3CQaPqlXOHAqPWOKecThaihih/ONzXexo9aOGoDV+eu1QOpT2JGRF8Kx7vRj4j
	Hvx07RnAnhl73GYJIEDKauCokRTlfxcQhEpLQ=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=mime-version:date:message-id:subject:from:to:content-type;
	b=Y4bf2JivNoncx2IYwOo1aSetdUwDNGtTK4KzzM+N5hq10PuUrTtdK++alboF+jJAEu
	3VzzAOtjzbQoRB0Bdo7dnQ8I9ZAQuiAOGHsiM7l4g6GhUANegEwJ8HjmQ9jTtCvEsEkM
	YbI0dXZCEznp1QF2X08Aanr8m6OIM4nYcsCJE=
MIME-Version: 1.0
Received: by 10.231.146.2 with SMTP id f2mr316943ibv.23.1260926543787; Tue, 15 
	Dec 2009 17:22:23 -0800 (PST)
Date: Tue, 15 Dec 2009 20:22:23 -0500
Message-ID: <c5e69a270912151722sc33229fg1f178d99885177a3@mail.gmail.com>
Subject: libssh2_channel_direct_tcpip_ex
From: Me Me <decay40@gmail.com>
To: libssh2-devel@cool.haxx.se
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0688802534=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============0688802534==
Content-Type: multipart/alternative; boundary=0016e64c0616baf7ae047ace56d2

--0016e64c0616baf7ae047ace56d2
Content-Type: text/plain; charset=ISO-8859-1

Hi Everyone,

I have been at this for a while, and perhaps I am just not getting
something.  I am trying to tunnel a MySQL connection thru
libssh2_channel_direct_tcpip_ex.

SSH is running on the same box as MySQL and I can successfully login to both
separately, using libssh2 and libmysqlclient respectively.

I get a channel back from:

libssh2_channel_direct_tcpip_ex(session, "192.168.1.170", 3306, "127.0.0.1",
3306);

192.168.1.170 is the host with SSH and MySQL, and I want to map port 3306
from the server to the local machine.

I have also tried it the opposite way:

libssh2_channel_direct_tcpip_ex(session, "127.0.0.1", 3306, "192.168.1.170",
3306);

to no avail.

Once I have the channel, do I need to do anything with it?  The MySQL client
should take over from there with the communication, since it handles all the
sockets, and I should just be able to give it 127.0.0.1 and it should
connect.  Am I completely misunderstanding the way this works?

The MySQL error is : Can't connect to MySQL server on '127.0.0.1' (61)

Thanks.

D.

--0016e64c0616baf7ae047ace56d2
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Hi Everyone,<br><br>I have been at this for a while, and perhaps I am just =
not getting something.=A0 I am trying to tunnel a MySQL connection thru lib=
ssh2_channel_direct_tcpip_ex.<br><br>SSH is running on the same box as MySQ=
L and I can successfully login to both separately, using libssh2 and libmys=
qlclient respectively.<br>
<br>I get a channel back from:<br><br>libssh2_channel_direct_tcpip_ex(sessi=
on, &quot;192.168.1.170&quot;, 3306, &quot;127.0.0.1&quot;, 3306);<br><br>1=
92.168.1.170 is the host with SSH and MySQL, and I want to map port 3306 fr=
om the server to the local machine.<br>
<br>I have also tried it the opposite way:<br><br>libssh2_channel_direct_tc=
pip_ex(session, &quot;127.0.0.1&quot;, 3306, &quot;192.168.1.170&quot;, 330=
6);<br><br>to no avail.<br><br>Once I have the channel, do I need to do any=
thing with it?=A0 The MySQL client should take over from there with the com=
munication, since it handles all the sockets, and I should just be able to =
give it 127.0.0.1 and it should connect.=A0 Am I completely misunderstandin=
g the way this works?<br>
<br>The MySQL error is : Can&#39;t connect to MySQL server on &#39;127.0.0.=
1&#39; (61)<br><br>Thanks.<br><br>D.<br>

--0016e64c0616baf7ae047ace56d2--

--===============0688802534==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============0688802534==--

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 08:50:10 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBG7nxW9031622;
	Wed, 16 Dec 2009 08:50:05 +0100
Received: from giant.haxx.se (giant.haxx.se [83.168.254.42])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBG7nwlY031617
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 08:49:58 +0100
Date: Wed, 16 Dec 2009 08:49:58 +0100 (CET)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: ssh-agent support
In-Reply-To: <87aaxjn540.fsf_-_@broken.deisui.org>
Message-ID: <alpine.DEB.2.00.0912160849100.20887@tvnag.unkk.fr>
References: <87y6leeyfp.fsf@broken.deisui.org>
	<20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
	<87aaxjn540.fsf_-_@broken.deisui.org>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Wed, 16 Dec 2009, Daiki Ueno wrote:

> - Pageant support is not yet implemented but it should be easy if I take
>  some code from the Putty source (putty/windows/winpgnt.c).  Is that
>  OK?  The Putty License is the MIT License.

Yes, that's perfectly fine license wise and even project wise.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 13:55:41 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGCtUUH005212;
	Wed, 16 Dec 2009 13:55:38 +0100
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGCtSge005192
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 13:55:28 +0100
Received: from int-mx04.intmail.prod.int.phx2.redhat.com
	(int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.17])
	by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id nBGCtRQn030315
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
	Wed, 16 Dec 2009 07:55:27 -0500
Received: from dhcp-lab-205.englab.brq.redhat.com
	(dhcp-lab-205.englab.brq.redhat.com [10.34.33.205])
	by int-mx04.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP
	id nBGCtQoF005052; Wed, 16 Dec 2009 07:55:26 -0500
From: Kamil Dudka <kdudka@redhat.com>
To: Simon Josefsson <simon@josefsson.org>
Subject: Re: Warnings during building
Date: Wed, 16 Dec 2009 13:56:30 +0100
User-Agent: KMail/1.12.3 (Linux/2.6.29.5-191.fc11.x86_64; KDE/4.3.3; x86_64; ;
	)
References: <5862ce3f0912140312j59ea7f3dm520464c759f29da6@mail.gmail.com>
	<200912160014.40095.kdudka@redhat.com>
	<87my1jeril.fsf@mocca.josefsson.org>
In-Reply-To: <87my1jeril.fsf@mocca.josefsson.org>
MIME-Version: 1.0
Message-Id: <200912161356.30098.kdudka@redhat.com>
X-Scanned-By: MIMEDefang 2.67 on 10.5.11.17
Cc: Peter Stuge <peter@stuge.se>, libssh2-devel@cool.haxx.se
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

T24gV2VkIERlY2VtYmVyIDE2IDIwMDkgMDA6Mzk6MzAgU2ltb24gSm9zZWZzc29uIHdyb3RlOgo+
IFBsZWFzZSBjaGVjayBsYXRlc3QgZ2l0LgoKU3RpbGwgbm90IHBlcmZlY3QgZnJvbSBteSBwb2lu
dCBvZiB2aWV3OgoKb3BlbnNzbC5jOjM0MDogd2FybmluZzogSVNPIEMgZm9yYmlkcyBjb252ZXJz
aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgdG8gb2JqZWN0IApwb2ludGVyIHR5cGUKb3BlbnNzbC5j
OjM0MTogd2FybmluZzogSVNPIEMgZm9yYmlkcyBwYXNzaW5nIGFyZ3VtZW50IDMgb2Yg4oCYcmVh
ZF9wcml2YXRlX2tleeKAmSAKYmV0d2VlbiBmdW5jdGlvbiBwb2ludGVyIGFuZCDigJh2b2lkICri
gJkKb3BlbnNzbC5jOjM0MTogbm90ZTogZXhwZWN0ZWQg4oCYaW50ICgqKShjaGFyICosIGludCwg
IGludCwgIHZvaWQgKinigJkgYnV0IAphcmd1bWVudCBpcyBvZiB0eXBlIOKAmHZvaWQgKuKAmQpv
cGVuc3NsLmM6IEluIGZ1bmN0aW9uIOKAmF9saWJzc2gyX2RzYV9uZXdfcHJpdmF0ZeKAmToKb3Bl
bnNzbC5jOjM3MDogd2FybmluZzogdW51c2VkIHBhcmFtZXRlciDigJhzZXNzaW9u4oCZCgoKS2Ft
aWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlic3No
Mi1kZXZlbCBodHRwOi8vY29vbC5oYXh4LnNlL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9saWJz
c2gyLWRldmVsCg==

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 13:57:12 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGCv9h9005720;
	Wed, 16 Dec 2009 13:57:10 +0100
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGCv77Z005717
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 13:57:07 +0100
Received: from int-mx04.intmail.prod.int.phx2.redhat.com
	(int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.17])
	by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id nBGCv7fS003713
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
	Wed, 16 Dec 2009 07:57:08 -0500
Received: from dhcp-lab-205.englab.brq.redhat.com
	(dhcp-lab-205.englab.brq.redhat.com [10.34.33.205])
	by int-mx04.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP
	id nBGCv7JM005295; Wed, 16 Dec 2009 07:57:07 -0500
From: Kamil Dudka <kdudka@redhat.com>
To: Peter Stuge <peter@stuge.se>
Subject: Re: userauth_publickey_fromfile() fails occasionally for no reason
Date: Wed, 16 Dec 2009 13:58:10 +0100
User-Agent: KMail/1.12.3 (Linux/2.6.29.5-191.fc11.x86_64; KDE/4.3.3; x86_64; ;
	)
References: <20091206071227.2004.qmail@earth.stuge.se>
	<200912061347.11283.kdudka@redhat.com>
	<200912061437.11603.kdudka@redhat.com>
In-Reply-To: <200912061437.11603.kdudka@redhat.com>
MIME-Version: 1.0
Message-Id: <200912161358.11031.kdudka@redhat.com>
X-Scanned-By: MIMEDefang 2.67 on 10.5.11.17
Cc: libssh2-devel@cool.haxx.se
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Sun December 6 2009 14:37:11 Kamil Dudka wrote:
> On Sunday 06 of December 2009 13:47:11 Kamil Dudka wrote:
> > The OpenSSL part looks good, it ran without a single error for several
> > hours today. However the libgcrypt part still seems to be broken. It
> > fails now with probability about 50% for me, always with the following
> > error:
> >
> > SSH public key authentication failed: Would block requesting userauth
> > list
> >
> > I haven't investigated it further yet.
> 
> Attached is my follow-up.

ping

> > Kamil
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 16:09:57 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGF9lxw025397;
	Wed, 16 Dec 2009 16:09:54 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGF9jXh025392
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 16:09:45 +0100
Received: from mocca.josefsson.org (c80-216-24-211.bredband.comhem.se
	[80.216.24.211]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBGF9iXG031437
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 16:09:46 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: userauth_publickey_fromfile() fails occasionally for no reason
References: <20091206071227.2004.qmail@earth.stuge.se>
	<200912061347.11283.kdudka@redhat.com>
	<200912061437.11603.kdudka@redhat.com>
	<200912161358.11031.kdudka@redhat.com>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091216:peter@stuge.se::wYHMbHYBSRPIZ7Fc:9ZJu
X-Hashcash: 1:22:091216:libssh2-devel@cool.haxx.se::nE+d5uUN14zRfpiI:anW1
Date: Wed, 16 Dec 2009 16:09:43 +0100
In-Reply-To: <200912161358.11031.kdudka@redhat.com> (Kamil Dudka's message of
	"Wed, 16 Dec 2009 13:58:10 +0100")
Message-ID: <87r5qv551k.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Kamil Dudka <kdudka@redhat.com> writes:

> On Sun December 6 2009 14:37:11 Kamil Dudka wrote:
>> On Sunday 06 of December 2009 13:47:11 Kamil Dudka wrote:
>> > The OpenSSL part looks good, it ran without a single error for several
>> > hours today. However the libgcrypt part still seems to be broken. It
>> > fails now with probability about 50% for me, always with the following
>> > error:
>> >
>> > SSH public key authentication failed: Would block requesting userauth
>> > list
>> >
>> > I haven't investigated it further yet.
>> 
>> Attached is my follow-up.
>
> ping

I pushed your patch, please test whether what is in git now works for
both RSA and DSA.

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 16:15:39 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGFFYN0027708;
	Wed, 16 Dec 2009 16:15:37 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGFFXZt027699
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 16:15:33 +0100
Received: from mocca.josefsson.org (c80-216-24-211.bredband.comhem.se
	[80.216.24.211]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBGFFWIF031674
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 16:15:34 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Warnings during building
References: <5862ce3f0912140312j59ea7f3dm520464c759f29da6@mail.gmail.com>
	<200912160014.40095.kdudka@redhat.com>
	<87my1jeril.fsf@mocca.josefsson.org>
	<200912161356.30098.kdudka@redhat.com>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091216:peter@stuge.se::yuDgwTjSrghPeXFm:JCZ4
X-Hashcash: 1:22:091216:libssh2-devel@cool.haxx.se::+kFzYob/ALMT9W/m:JtNj
Date: Wed, 16 Dec 2009 16:15:32 +0100
In-Reply-To: <200912161356.30098.kdudka@redhat.com> (Kamil Dudka's message of
	"Wed, 16 Dec 2009 13:56:30 +0100")
Message-ID: <87ljh354rv.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

S2FtaWwgRHVka2EgPGtkdWRrYUByZWRoYXQuY29tPiB3cml0ZXM6Cgo+IE9uIFdlZCBEZWNlbWJl
ciAxNiAyMDA5IDAwOjM5OjMwIFNpbW9uIEpvc2Vmc3NvbiB3cm90ZToKPj4gUGxlYXNlIGNoZWNr
IGxhdGVzdCBnaXQuCj4KPiBTdGlsbCBub3QgcGVyZmVjdCBmcm9tIG15IHBvaW50IG9mIHZpZXc6
Cj4KPiBvcGVuc3NsLmM6MzQwOiB3YXJuaW5nOiBJU08gQyBmb3JiaWRzIGNvbnZlcnNpb24gb2Yg
ZnVuY3Rpb24gcG9pbnRlciB0byBvYmplY3QgCj4gcG9pbnRlciB0eXBlCj4gb3BlbnNzbC5jOjM0
MTogd2FybmluZzogSVNPIEMgZm9yYmlkcyBwYXNzaW5nIGFyZ3VtZW50IDMgb2Yg4oCYcmVhZF9w
cml2YXRlX2tleeKAmSAKPiBiZXR3ZWVuIGZ1bmN0aW9uIHBvaW50ZXIgYW5kIOKAmHZvaWQgKuKA
mQo+IG9wZW5zc2wuYzozNDE6IG5vdGU6IGV4cGVjdGVkIOKAmGludCAoKikoY2hhciAqLCBpbnQs
ICBpbnQsICB2b2lkICop4oCZIGJ1dCAKPiBhcmd1bWVudCBpcyBvZiB0eXBlIOKAmHZvaWQgKuKA
mQo+IG9wZW5zc2wuYzogSW4gZnVuY3Rpb24g4oCYX2xpYnNzaDJfZHNhX25ld19wcml2YXRl4oCZ
Ogo+IG9wZW5zc2wuYzozNzA6IHdhcm5pbmc6IHVudXNlZCBwYXJhbWV0ZXIg4oCYc2Vzc2lvbuKA
mQoKQmV0dGVyIG5vdz8gIEJ0dywgd2hhdCBraW5kIG9mIGNvbXBpbGVyIHdhcm5pbmcgZmxhZ3Mg
YXJlIHlvdSB1c2luZz8KCi9TaW1vbgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpsaWJzc2gyLWRldmVsIGh0dHA6Ly9jb29sLmhheHguc2UvY2dpLWJpbi9t
YWlsbWFuL2xpc3RpbmZvL2xpYnNzaDItZGV2ZWwK

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 16:38:44 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGFbosx012670;
	Wed, 16 Dec 2009 16:37:54 +0100
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGFbmqN012662
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 16:37:49 +0100
Received: from int-mx05.intmail.prod.int.phx2.redhat.com
	(int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.18])
	by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id nBGFbm8L002675
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
	Wed, 16 Dec 2009 10:37:49 -0500
Received: from dhcp-lab-205.englab.brq.redhat.com
	(dhcp-lab-205.englab.brq.redhat.com [10.34.33.205])
	by int-mx05.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP
	id nBGFbmWm027935; Wed, 16 Dec 2009 10:37:48 -0500
From: Kamil Dudka <kdudka@redhat.com>
To: Simon Josefsson <simon@josefsson.org>
Subject: Re: Warnings during building
Date: Wed, 16 Dec 2009 16:38:51 +0100
User-Agent: KMail/1.12.3 (Linux/2.6.29.5-191.fc11.x86_64; KDE/4.3.3; x86_64; ;
	)
References: <5862ce3f0912140312j59ea7f3dm520464c759f29da6@mail.gmail.com>
	<200912161356.30098.kdudka@redhat.com>
	<87ljh354rv.fsf@mocca.josefsson.org>
In-Reply-To: <87ljh354rv.fsf@mocca.josefsson.org>
MIME-Version: 1.0
Message-Id: <200912161638.51866.kdudka@redhat.com>
X-Scanned-By: MIMEDefang 2.67 on 10.5.11.18
Cc: libssh2-devel@cool.haxx.se
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Wed December 16 2009 16:15:32 Simon Josefsson wrote:
> Better now?  Btw, what kind of compiler warning flags are you using?

Yes, thanks for considering it! gcc -pedantic is sufficient for me to show
the warning. Nevertheless using void* for function pointers is always bad 
idea. I see there is the same bug in the libssh2 public interface. However
it needs to wait till next major release to not break the ABI I guess.

In general you can't rely on assumption:
	sizeof (void *) == sizeof (void (*)())

Kamil
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 16:39:55 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGFdqMO013300;
	Wed, 16 Dec 2009 16:39:54 +0100
Received: from giant.haxx.se (giant.haxx.se [83.168.254.42])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGFdp6I013294; 
	Wed, 16 Dec 2009 16:39:51 +0100
Date: Wed, 16 Dec 2009 16:39:51 +0100 (CET)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Warnings during building
In-Reply-To: <200912161638.51866.kdudka@redhat.com>
Message-ID: <alpine.DEB.2.00.0912161638490.23993@tvnag.unkk.fr>
References: <5862ce3f0912140312j59ea7f3dm520464c759f29da6@mail.gmail.com>
	<200912161356.30098.kdudka@redhat.com>
	<87ljh354rv.fsf@mocca.josefsson.org>
	<200912161638.51866.kdudka@redhat.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
Cc: Simon Josefsson <simon@josefsson.org>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Wed, 16 Dec 2009, Kamil Dudka wrote:

> Nevertheless using void* for function pointers is always bad idea. I see 
> there is the same bug in the libssh2 public interface. However it needs to 
> wait till next major release to not break the ABI I guess.

Right, that's not kosher C and I've mentioned this need to fix in the TODO 
document for the next ABI bump.

Fortunately, I believe most systems and compilers deal with this perfectly 
fine still.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 16:44:43 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGFic1j021016;
	Wed, 16 Dec 2009 16:44:40 +0100
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGFiaCj020921
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 16:44:36 +0100
Received: from int-mx02.intmail.prod.int.phx2.redhat.com
	(int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12])
	by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id nBGFiag5013490
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
	Wed, 16 Dec 2009 10:44:36 -0500
Received: from dhcp-lab-205.englab.brq.redhat.com
	(dhcp-lab-205.englab.brq.redhat.com [10.34.33.205])
	by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP
	id nBGFiaiF014147; Wed, 16 Dec 2009 10:44:36 -0500
From: Kamil Dudka <kdudka@redhat.com>
To: Simon Josefsson <simon@josefsson.org>
Subject: Re: userauth_publickey_fromfile() fails occasionally for no reason
Date: Wed, 16 Dec 2009 16:45:39 +0100
User-Agent: KMail/1.12.3 (Linux/2.6.29.5-191.fc11.x86_64; KDE/4.3.3; x86_64; ;
	)
References: <20091206071227.2004.qmail@earth.stuge.se>
	<200912161358.11031.kdudka@redhat.com>
	<87r5qv551k.fsf@mocca.josefsson.org>
In-Reply-To: <87r5qv551k.fsf@mocca.josefsson.org>
MIME-Version: 1.0
Message-Id: <200912161645.40018.kdudka@redhat.com>
X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12
Cc: libssh2-devel@cool.haxx.se
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Wed December 16 2009 16:09:43 Simon Josefsson wrote:
> Kamil Dudka <kdudka@redhat.com> writes:
> > On Sun December 6 2009 14:37:11 Kamil Dudka wrote:
> >> On Sunday 06 of December 2009 13:47:11 Kamil Dudka wrote:
> >> > The OpenSSL part looks good, it ran without a single error for several
> >> > hours today. However the libgcrypt part still seems to be broken. It
> >> > fails now with probability about 50% for me, always with the following
> >> > error:
> >> >
> >> > SSH public key authentication failed: Would block requesting userauth
> >> > list
> >> >
> >> > I haven't investigated it further yet.
> >>
> >> Attached is my follow-up.
> >
> > ping
> 
> I pushed your patch, please test whether what is in git now works for
> both RSA and DSA.

Thanks! Peter sent me the improved version of the patch based on mpi functions 
through IRC in the meantime. Unfortunately I don't have set up the testing 
framework right now. But I'll return back to the issue later this week, test 
both and report here on the list.

Kamil
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 16:47:10 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGFl65q023616;
	Wed, 16 Dec 2009 16:47:07 +0100
Received: from ivory3.scn-net.ne.jp (ivory3.scn-net.ne.jp [219.117.176.191])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBGFl3vY023558
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 16:47:04 +0100
Received: from ([192.168.0.187]) (envelope sender: <ueno@unixuser.org>)
	by ivory3.scn-net.ne.jp with Active!Hunter esmtp server;
	Thu, 17 Dec 2009 00:47:01 +0900
Received: Received: from well-done.deisui.org (g187018.scn-net.ne.jp
	[202.83.187.18]) (authenticated)
	by blue17.scn-net.ne.jp (unknown) with ESMTP id nBGFl1BZ021812
	for <libssh2-devel@cool.haxx.se>; Thu, 17 Dec 2009 00:47:01 +0900
Received: from 221x255x76x220.ap221.ftth.ucom.ne.jp ([221.255.76.220]
	helo=chilled) by well-done.deisui.org with esmtpsa
	(TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.69)
	(envelope-from <ueno@unixuser.org>) id 1NKw5d-0000ZA-24
	for libssh2-devel@cool.haxx.se; Thu, 17 Dec 2009 00:47:01 +0900
From: Daiki Ueno <ueno@unixuser.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: ssh-agent support
References: <87y6leeyfp.fsf@broken.deisui.org>
	<20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
	<87aaxjn540.fsf_-_@broken.deisui.org>
Date: Thu, 17 Dec 2009 00:46:59 +0900
In-Reply-To: <87aaxjn540.fsf_-_@broken.deisui.org> (Daiki Ueno's message of
	"Wed, 16 Dec 2009 09:18:39 +0900")
Message-ID: <87hbrqkjkc.fsf@broken.deisui.org>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--=-=-=

Daiki Ueno <ueno@unixuser.org> writes:

> The attached is the initial implementation.

Sorry, there was a bug in the sample code.  Please apply the attached
patch 0004 after the previous patch set being applied.

A couple of additional notes:

- The connection to ssh-agent can be set non-blocking.  The attached
  0005-0007 are the patch set to finish the code.

- As you know, there is libssh2_publickey.h which provides a data type
  for public keys.  The ssh-agent code uses a different, minimal data
  type for public keys (struct libssh2_agent_publickey in libssh2.h).
  What do you think about using libssh2_publickey.h instead?  I'm not
  sure if the API is still maintained.

Regards,
-- 
Daiki Ueno

--=-=-=
Content-Type: text/x-diff
Content-Disposition: inline;
 filename=0004-Fix-the-bug-traversing-identities.patch

From ab03a90272f6b9ab364d31ffb12ddddcc84fc387 Mon Sep 17 00:00:00 2001
From: Daiki Ueno <ueno@unixuser.org>
Date: Thu, 17 Dec 2009 00:11:40 +0900
Subject: [PATCH 4/7] Fix the bug traversing identities.

---
 example/simple/ssh2_agent.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/example/simple/ssh2_agent.c b/example/simple/ssh2_agent.c
index 44335ba..b6657ed 100644
--- a/example/simple/ssh2_agent.c
+++ b/example/simple/ssh2_agent.c
@@ -131,6 +131,7 @@ int main(int argc, char *argv[])
                    username, identity->comment);
             break;
         }
+	prev_identity = identity;
     }
     if (rc) {
         fprintf(stderr, "Couldn't continue authentication\n");
-- 
1.6.5.4


--=-=-=
Content-Type: text/x-diff
Content-Disposition: inline;
 filename=0005-Rename-session_nonblock-to-_libssh2_socket_nonblock.patch

From 51fe8b4bd6a3d064ec1dab32c351af11b016909e Mon Sep 17 00:00:00 2001
From: Daiki Ueno <ueno@unixuser.org>
Date: Thu, 17 Dec 2009 00:13:26 +0900
Subject: [PATCH 5/7] Rename session_nonblock() to _libssh2_socket_nonblock().

---
 src/libssh2_priv.h |    2 ++
 src/session.c      |   16 ++++++++--------
 2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/libssh2_priv.h b/src/libssh2_priv.h
index 1ba9354..dc150e2 100644
--- a/src/libssh2_priv.h
+++ b/src/libssh2_priv.h
@@ -1143,6 +1143,8 @@ ssize_t _libssh2_send(libssh2_socket_t socket, const void *buffer, size_t length
 
 int _libssh2_wait_socket(LIBSSH2_SESSION *session);
 
+int _libssh2_socket_nonblock(libssh2_socket_t sockfd, int nonblock);
+
 
 /* These started out as private return codes for the transport layer, but was
    converted to using the library-wide return codes to easy propagation of the
diff --git a/src/session.c b/src/session.c
index 28885c5..253900b 100644
--- a/src/session.c
+++ b/src/session.c
@@ -254,13 +254,13 @@ banner_send(LIBSSH2_SESSION * session)
 }
 
 /*
- * session_nonblock() sets the given socket to either blocking or
- * non-blocking mode based on the 'nonblock' boolean argument. This function
- * is copied from the libcurl sources with permission.
+ * _libssh2_socket_nonblock() sets the given socket to either blocking
+ * or non-blocking mode based on the 'nonblock' boolean argument. This
+ * function is copied from the libcurl sources with permission.
  */
-static int
-session_nonblock(libssh2_socket_t sockfd,   /* operate on this */
-                 int nonblock /* TRUE or FALSE */ )
+int
+_libssh2_socket_nonblock(libssh2_socket_t sockfd,   /* operate on this */
+                         int nonblock /* TRUE or FALSE */ )
 {
 #undef SETBLOCK
 #define SETBLOCK 0
@@ -571,7 +571,7 @@ session_startup(LIBSSH2_SESSION *session, libssh2_socket_t sock)
 
         if (session->socket_prev_blockstate) {
             /* If in blocking state chang to non-blocking */
-            session_nonblock(session->socket_fd, 1);
+            _libssh2_socket_nonblock(session->socket_fd, 1);
         }
 
         session->startup_state = libssh2_NB_state_created;
@@ -922,7 +922,7 @@ session_free(LIBSSH2_SESSION *session)
 
     if(session->socket_prev_blockstate)
         /* if the socket was previously blocking, put it back so */
-        session_nonblock(session->socket_fd, 0);
+        _libssh2_socket_nonblock(session->socket_fd, 0);
 
     if (session->server_hostkey) {
         LIBSSH2_FREE(session, session->server_hostkey);
-- 
1.6.5.4


--=-=-=
Content-Type: text/x-diff
Content-Disposition: inline;
 filename=0006-Allow-sign_callback-of-libssh2_userauth_publickey-to.patch

From e8d985878070dc497da9687d657277fda8885d4b Mon Sep 17 00:00:00 2001
From: Daiki Ueno <ueno@unixuser.org>
Date: Thu, 17 Dec 2009 00:14:49 +0900
Subject: [PATCH 6/7] Allow sign_callback of libssh2_userauth_publickey() to return EAGAIN.

---
 src/userauth.c |   27 +++++++++++++++------------
 1 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/src/userauth.c b/src/userauth.c
index 6e28460..f339c46 100644
--- a/src/userauth.c
+++ b/src/userauth.c
@@ -1039,10 +1039,6 @@ userauth_publickey(LIBSSH2_SESSION *session,
     }
 
     if (session->userauth_pblc_state == libssh2_NB_state_sent) {
-        unsigned char *buf, *s;
-        unsigned char *sig;
-        unsigned long sig_len;
-
         rc = _libssh2_packet_requirev(session, reply_codes,
                                       &session->userauth_pblc_data,
                                       &session->userauth_pblc_data_len, 0,
@@ -1097,6 +1093,13 @@ userauth_publickey(LIBSSH2_SESSION *session,
         session->userauth_pblc_data = NULL;
 
         *session->userauth_pblc_b = 0x01;
+        session->userauth_pblc_state = libssh2_NB_state_sent1;
+    }
+
+    if (session->userauth_pblc_state == libssh2_NB_state_sent1) {
+        unsigned char *buf, *s;
+        unsigned char *sig;
+        unsigned long sig_len;
 
         s = buf = LIBSSH2_ALLOC(session, 4 + session->session_id_len
                                 + session->userauth_pblc_packet_len);
@@ -1115,8 +1118,11 @@ userauth_publickey(LIBSSH2_SESSION *session,
                 session->userauth_pblc_packet_len);
         s += session->userauth_pblc_packet_len;
 
-        if (sign_callback(session, &sig, &sig_len, buf, s - buf, abstract)) {
-            LIBSSH2_FREE(session, buf);
+        rc = sign_callback(session, &sig, &sig_len, buf, s - buf, abstract);
+        LIBSSH2_FREE(session, buf);
+        if (rc == PACKET_EAGAIN) {
+            return rc;
+        } else if (rc) {
             LIBSSH2_FREE(session, session->userauth_pblc_method);
             session->userauth_pblc_method = NULL;
             LIBSSH2_FREE(session, session->userauth_pblc_packet);
@@ -1125,9 +1131,6 @@ userauth_publickey(LIBSSH2_SESSION *session,
             return -1;
         }
 
-
-        LIBSSH2_FREE(session, buf);
-
         /*
          * If this function was restarted, pubkeydata_len might still be 0
          * which will cause an unnecessary but harmless realloc here.
@@ -1182,10 +1185,10 @@ userauth_publickey(LIBSSH2_SESSION *session,
         _libssh2_debug(session, LIBSSH2_TRACE_AUTH,
                        "Attempting publickey authentication -- phase 2");
 
-        session->userauth_pblc_state = libssh2_NB_state_sent1;
+        session->userauth_pblc_state = libssh2_NB_state_sent2;
     }
 
-    if (session->userauth_pblc_state == libssh2_NB_state_sent1) {
+    if (session->userauth_pblc_state == libssh2_NB_state_sent2) {
         rc = _libssh2_transport_write(session, session->userauth_pblc_packet,
                                       session->userauth_pblc_s -
                                       session->userauth_pblc_packet);
@@ -1202,7 +1205,7 @@ userauth_publickey(LIBSSH2_SESSION *session,
         LIBSSH2_FREE(session, session->userauth_pblc_packet);
         session->userauth_pblc_packet = NULL;
 
-        session->userauth_pblc_state = libssh2_NB_state_sent2;
+        session->userauth_pblc_state = libssh2_NB_state_sent3;
     }
 
     /* PK_OK is no longer valid */
-- 
1.6.5.4


--=-=-=
Content-Type: text/x-diff
Content-Disposition: inline;
 filename=0007-Inherit-nonblocking-setting-from-session.patch

From a8884cca2183e37e8e2ded9b07420c0104f85d0b Mon Sep 17 00:00:00 2001
From: Daiki Ueno <ueno@unixuser.org>
Date: Thu, 17 Dec 2009 00:15:17 +0900
Subject: [PATCH 7/7] Inherit nonblocking setting from session.

---
 src/agent.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/src/agent.c b/src/agent.c
index 9814abf..f765d34 100644
--- a/src/agent.c
+++ b/src/agent.c
@@ -144,6 +144,11 @@ agent_connect_unix(LIBSSH2_AGENT *agent)
         return -1;
     }
 
+    /* Inherit nonblocking setting from the current session */
+    if (!libssh2_session_get_blocking(agent->session)) {
+        _libssh2_socket_nonblock(agent->u.fd, 1);
+    }
+
     sun.sun_family = AF_UNIX;
     strncpy (sun.sun_path, path, sizeof sun.sun_path);
     if (connect(agent->u.fd, (struct sockaddr*)(&sun), sizeof sun) != 0) {
-- 
1.6.5.4


--=-=-=
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--=-=-=--

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 17:02:41 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGG2Z5S001460;
	Wed, 16 Dec 2009 17:02:38 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBGG2Xoi001393
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 17:02:33 +0100
Received: (qmail 4972 invoked by uid 501); 16 Dec 2009 16:02:34 -0000
Message-ID: <20091216160234.4971.qmail@stuge.se>
Date: Wed, 16 Dec 2009 17:02:34 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: userauth_publickey_fromfile() fails occasionally for no reason
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <20091206071227.2004.qmail@earth.stuge.se>
	<200912061347.11283.kdudka@redhat.com>
	<200912061437.11603.kdudka@redhat.com>
	<200912161358.11031.kdudka@redhat.com>
	<87r5qv551k.fsf@mocca.josefsson.org>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <87r5qv551k.fsf@mocca.josefsson.org>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Simon Josefsson wrote:
> > ping
> 
> I pushed your patch, please test whether what is in git now works
> for both RSA and DSA.

So I was looking into this. The reason I didn't immediately apply the
patch to bring back the previous behavior of the libgcrypt code is
that it makes some assumptions on how r and s are stored internally
by libgcrypt and that doesn't seem as reliable as can be.


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 17:50:25 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGGoHK4008073;
	Wed, 16 Dec 2009 17:50:23 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBGGoGnj008066
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 17:50:16 +0100
Received: (qmail 11666 invoked by uid 501); 16 Dec 2009 16:50:17 -0000
Message-ID: <20091216165017.11665.qmail@stuge.se>
Date: Wed, 16 Dec 2009 17:50:17 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: libssh2_channel_direct_tcpip_ex
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <c5e69a270912151722sc33229fg1f178d99885177a3@mail.gmail.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <c5e69a270912151722sc33229fg1f178d99885177a3@mail.gmail.com>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Me Me wrote:
> I am trying to tunnel a MySQL connection thru
> libssh2_channel_direct_tcpip_ex.
..
> Once I have the channel, do I need to do anything with it?
> The MySQL client should take over from there with the
> communication, since it handles all the sockets, and I should just
> be able to give it 127.0.0.1 and it should connect.  Am I
> completely misunderstanding the way this works?

Somewhat. You need to socket(), bind(3306), listen() and accept(),
and for each connected client you then create a direct-tcpip channel.

host,port=127.0.0.1,3306 (relative the SSH server side)
shost,sport=info from the addr returned by accept()

Then you pump data between channel and socket. Lots of fun.


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 19:53:02 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGIqBcM026739;
	Wed, 16 Dec 2009 19:52:19 +0100
Received: from mail-iw0-f196.google.com (mail-iw0-f196.google.com
	[209.85.223.196])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGIq9al026644
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 19:52:09 +0100
Received: by iwn34 with SMTP id 34so931623iwn.21
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 10:52:05 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:mime-version:received:in-reply-to:references
	:date:message-id:subject:from:to:content-type;
	bh=tA39oGXGjiXUzKtpPDwJ+afhKKTtcvmbhBzlJUB9TZg=;
	b=E+5nYKq8grpRd46oHqQFW0pt/fQbFWZWxZ9fwxFRy04CURoZEBFUk2/t8l78Az2gEd
	ALobNmxznvhgzCDB0NwmEpP4fo9/gXuMJVeDj594DZeuaMOR/zR2SU0qv59j82YPz2/9
	zdlRiSbdjt1nB+Hjn0mzhjiLeKpvh7Ami+8yY=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=mime-version:in-reply-to:references:date:message-id:subject:from:to
	:content-type;
	b=Pqyj5r9ORMML6vLvqx5mVvUcEeTQICZzIRdHpARNzZRo1JMPN1/S5CPsb2w7izw/SI
	wPDCj1rNo+aWusKs/UshcLMcUp7K7t0FZdKF+MN+BN9iD1ZLRAsBrIbP43ocR8crrMWR
	fgwawnGNvUSULmzlaoFRjhh5Q0g64rS6IphcY=
MIME-Version: 1.0
Received: by 10.231.170.201 with SMTP id e9mr12584ibz.15.1260989524985; Wed, 
	16 Dec 2009 10:52:04 -0800 (PST)
In-Reply-To: <20091216165017.11665.qmail@stuge.se>
References: <c5e69a270912151722sc33229fg1f178d99885177a3@mail.gmail.com>
	<20091216165017.11665.qmail@stuge.se>
Date: Wed, 16 Dec 2009 13:52:04 -0500
Message-ID: <c5e69a270912161052k6b8c57cfqe9890f90c5822799@mail.gmail.com>
Subject: Re: libssh2_channel_direct_tcpip_ex
From: Me Me <decay40@gmail.com>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0578220507=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============0578220507==
Content-Type: multipart/alternative; boundary=005045018102b3c892047add005e

--005045018102b3c892047add005e
Content-Type: text/plain; charset=ISO-8859-1

On Wed, Dec 16, 2009 at 11:50 AM, Peter Stuge <peter@stuge.se> wrote:

> Me Me wrote:
> > I am trying to tunnel a MySQL connection thru
> > libssh2_channel_direct_tcpip_ex.
> ..
> > Once I have the channel, do I need to do anything with it?
> > The MySQL client should take over from there with the
> > communication, since it handles all the sockets, and I should just
> > be able to give it 127.0.0.1 and it should connect.  Am I
> > completely misunderstanding the way this works?
>
> Somewhat. You need to socket(), bind(3306), listen() and accept(),
> and for each connected client you then create a direct-tcpip channel.
>
> host,port=127.0.0.1,3306 (relative the SSH server side)
> shost,sport=info from the addr returned by accept()
>
> Then you pump data between channel and socket. Lots of fun.
>
>
Peter,

So does that mean I have to skip using the MySQL client library completely,
and manipulate the raw communication from the server myself, as opposed to
just connecting to a local port that is being forwarded from the server?

--005045018102b3c892047add005e
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div class=3D"gmail_quote">On Wed, Dec 16, 2009 at 11:50 AM, Peter Stuge <s=
pan dir=3D"ltr">&lt;<a href=3D"mailto:peter@stuge.se">peter@stuge.se</a>&gt=
;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"border-left: =
1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;=
">
<div class=3D"im">Me Me wrote:<br>
&gt; I am trying to tunnel a MySQL connection thru<br>
&gt; libssh2_channel_direct_tcpip_ex.<br>
</div><div class=3D"im">..<br>
&gt; Once I have the channel, do I need to do anything with it?<br>
&gt; The MySQL client should take over from there with the<br>
&gt; communication, since it handles all the sockets, and I should just<br>
&gt; be able to give it 127.0.0.1 and it should connect. =A0Am I<br>
&gt; completely misunderstanding the way this works?<br>
<br>
</div>Somewhat. You need to socket(), bind(3306), listen() and accept(),<br=
>
and for each connected client you then create a direct-tcpip channel.<br>
<br>
host,port=3D127.0.0.1,3306 (relative the SSH server side)<br>
shost,sport=3Dinfo from the addr returned by accept()<br>
<br>
Then you pump data between channel and socket. Lots of fun.<br>
<br>
</blockquote></div><br>Peter,<br><br>So does that mean I have to skip using=
 the MySQL client library completely, and manipulate the raw communication =
from the server myself, as opposed to just connecting to a local port that =
is being forwarded from the server?=A0 <br>
<br><br>

--005045018102b3c892047add005e--

--===============0578220507==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============0578220507==--

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 20:00:00 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGIxtW1029502;
	Wed, 16 Dec 2009 19:59:58 +0100
Received: from mail-iw0-f196.google.com (mail-iw0-f196.google.com
	[209.85.223.196])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGIxrCB029458
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 19:59:53 +0100
Received: by iwn34 with SMTP id 34so936958iwn.21
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 10:59:49 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:mime-version:received:in-reply-to:references
	:date:message-id:subject:from:to:content-type;
	bh=LtauF86UJ+mdDcQ41g2RpVvu92Xb16d43Xok+MKcuK0=;
	b=GQr2nvNqD71ElzBjLVWumhHkCMw+uBgOts71n+YUm0sPC6pHDzkCRtfSpiHBPAwSa4
	Aab78SZBZIRuHxjURj0Kk6Wg24WadP7fTSXtqCmrsU9/qboNMz72rVxOfDgLCF1So+zn
	ZAgShhFJx++B39Xv2usHUJVSM+qMI3yMIHzYM=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=mime-version:in-reply-to:references:date:message-id:subject:from:to
	:content-type;
	b=xKCJV8BMW+WTYS/MqKl1N7fIEocbUHHm4rfR30WL68tbuAlBwfxBcwQDspPWG/kXD6
	FmfDpLE9f+rMDiHvhiKf49IDFzeL9WjnRSGeGZjgLtMQZJGP3W9HwM7gY0U+IQkXyPqE
	y+oGEHTr9+d9r3GNHrD7uhh/TysUydz85D+RY=
MIME-Version: 1.0
Received: by 10.231.48.210 with SMTP id s18mr1376818ibf.3.1260989989017; Wed, 
	16 Dec 2009 10:59:49 -0800 (PST)
In-Reply-To: <c5e69a270912161052k6b8c57cfqe9890f90c5822799@mail.gmail.com>
References: <c5e69a270912151722sc33229fg1f178d99885177a3@mail.gmail.com>
	<20091216165017.11665.qmail@stuge.se>
	<c5e69a270912161052k6b8c57cfqe9890f90c5822799@mail.gmail.com>
Date: Wed, 16 Dec 2009 13:59:48 -0500
Message-ID: <c5e69a270912161059s269fa283q8161a7062167af5a@mail.gmail.com>
Subject: Re: libssh2_channel_direct_tcpip_ex
From: Me Me <decay40@gmail.com>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============1488746505=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============1488746505==
Content-Type: multipart/alternative; boundary=0015176f115c5c574b047add1cf7

--0015176f115c5c574b047add1cf7
Content-Type: text/plain; charset=ISO-8859-1

On Wed, Dec 16, 2009 at 1:52 PM, Me Me <decay40@gmail.com> wrote:

> On Wed, Dec 16, 2009 at 11:50 AM, Peter Stuge <peter@stuge.se> wrote:
>
>> Me Me wrote:
>> > I am trying to tunnel a MySQL connection thru
>> > libssh2_channel_direct_tcpip_ex.
>> ..
>> > Once I have the channel, do I need to do anything with it?
>> > The MySQL client should take over from there with the
>> > communication, since it handles all the sockets, and I should just
>> > be able to give it 127.0.0.1 and it should connect.  Am I
>> > completely misunderstanding the way this works?
>>
>> Somewhat. You need to socket(), bind(3306), listen() and accept(),
>> and for each connected client you then create a direct-tcpip channel.
>>
>> host,port=127.0.0.1,3306 (relative the SSH server side)
>> shost,sport=info from the addr returned by accept()
>>
>> Then you pump data between channel and socket. Lots of fun.
>>
>>
> Peter,
>
> So does that mean I have to skip using the MySQL client library completely,
> and manipulate the raw communication from the server myself, as opposed to
> just connecting to a local port that is being forwarded from the server?
>

Sorry to reply to myself, but hopefully this will clear things up:

If I run this command from the command line:

ssh -N -f -L 3306:192.168.1.170:3306 localhost

and run a program using the libmysqlclient library connecting to
127.0.0.1:3306  it works fine.  So, I guess what I am asking is there
something that is as easy as that corresponding to the direct_tcip_ex call?
I would prefer that the MySQL client library do the heavy lifiting.
Ideally, it should see the local port as just another one to communicate
over, as it does when executing the ssh command from the shell.

--0015176f115c5c574b047add1cf7
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<br><br><div class=3D"gmail_quote">On Wed, Dec 16, 2009 at 1:52 PM, Me Me <=
span dir=3D"ltr">&lt;<a href=3D"mailto:decay40@gmail.com">decay40@gmail.com=
</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"border=
-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-lef=
t: 1ex;">
<div class=3D"im"><div class=3D"gmail_quote">On Wed, Dec 16, 2009 at 11:50 =
AM, Peter Stuge <span dir=3D"ltr">&lt;<a href=3D"mailto:peter@stuge.se" tar=
get=3D"_blank">peter@stuge.se</a>&gt;</span> wrote:<br><blockquote class=3D=
"gmail_quote" style=3D"border-left: 1px solid rgb(204, 204, 204); margin: 0=
pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div>Me Me wrote:<br>
&gt; I am trying to tunnel a MySQL connection thru<br>
&gt; libssh2_channel_direct_tcpip_ex.<br>
</div><div>..<br>
&gt; Once I have the channel, do I need to do anything with it?<br>
&gt; The MySQL client should take over from there with the<br>
&gt; communication, since it handles all the sockets, and I should just<br>
&gt; be able to give it 127.0.0.1 and it should connect. =A0Am I<br>
&gt; completely misunderstanding the way this works?<br>
<br>
</div>Somewhat. You need to socket(), bind(3306), listen() and accept(),<br=
>
and for each connected client you then create a direct-tcpip channel.<br>
<br>
host,port=3D127.0.0.1,3306 (relative the SSH server side)<br>
shost,sport=3Dinfo from the addr returned by accept()<br>
<br>
Then you pump data between channel and socket. Lots of fun.<br>
<br>
</blockquote></div><br></div>Peter,<br><br>So does that mean I have to skip=
 using the MySQL client library completely, and manipulate the raw communic=
ation from the server myself, as opposed to just connecting to a local port=
 that is being forwarded from the server?=A0 <br>
</blockquote><div><br>Sorry to reply to myself, but hopefully this will cle=
ar things up:=A0 <br><br>If I run this command from the command line:<br><b=
r>ssh -N -f -L 3306:<a href=3D"http://192.168.1.170:3306">192.168.1.170:330=
6</a> localhost<br>
<br>and run a program using the libmysqlclient library connecting to <a hre=
f=3D"http://127.0.0.1:3306">127.0.0.1:3306</a>=A0 it works fine.=A0 So, I g=
uess what I am asking is there something that is as easy as that correspond=
ing to the direct_tcip_ex call?=A0 I would prefer that the MySQL client lib=
rary do the heavy lifiting.=A0 Ideally, it should see the local port as jus=
t another one to communicate over, as it does when executing the ssh comman=
d from the shell.<br>
<br><br><br><br><br><br>=A0</div></div><br>

--0015176f115c5c574b047add1cf7--

--===============1488746505==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============1488746505==--

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 16 23:26:11 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBGMQ0GP021735;
	Wed, 16 Dec 2009 23:26:07 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBGMPw3G021729
	for <libssh2-devel@cool.haxx.se>; Wed, 16 Dec 2009 23:25:58 +0100
Received: (qmail 29452 invoked by uid 501); 16 Dec 2009 22:25:59 -0000
Message-ID: <20091216222559.29451.qmail@stuge.se>
Date: Wed, 16 Dec 2009 23:25:59 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: libssh2_channel_direct_tcpip_ex
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <c5e69a270912151722sc33229fg1f178d99885177a3@mail.gmail.com>
	<20091216165017.11665.qmail@stuge.se>
	<c5e69a270912161052k6b8c57cfqe9890f90c5822799@mail.gmail.com>
	<c5e69a270912161059s269fa283q8161a7062167af5a@mail.gmail.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <c5e69a270912161059s269fa283q8161a7062167af5a@mail.gmail.com>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Me Me wrote:
> ssh -N -f -L 3306:192.168.1.170:3306 localhost
..
> is there something that is as easy as that corresponding to the
> direct_tcip_ex call?

No. In the above example ssh implements a data pump, it listens to
incoming TCP connections, and then opens an SSH channel for each
connection.

You must do the same. libssh2 helps you create the SSH channel, but
that's all it does. You have to create a TCP server socket. Read
about BSD socket programming.


> I would prefer that the MySQL client library do the heavy lifiting.
> Ideally, it should see the local port as just another one to
> communicate over, as it does when executing the ssh command from
> the shell.

It will still communicate with a TCP port, but *you* must create, and
manage, every aspect of that TCP port. Create, bind, listen, accept,
pump data. It's the most basic TCP server, you can find many examples
if you are unsure of how to do it. When done, please send a patch so
that it can be added as a libssh2 example.


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Dec 17 08:34:20 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBH7Y7pH027315;
	Thu, 17 Dec 2009 08:34:16 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBH7Y5TE027311
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Thu, 17 Dec 2009 08:34:05 +0100
Received: from mocca.josefsson.org (c80-216-24-211.bredband.comhem.se
	[80.216.24.211]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBH7Y4eg018024
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Thu, 17 Dec 2009 08:34:05 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2-devel@cool.haxx.se
Subject: Re: userauth_publickey_fromfile() fails occasionally for no reason
References: <20091206071227.2004.qmail@earth.stuge.se>
	<200912061347.11283.kdudka@redhat.com>
	<200912061437.11603.kdudka@redhat.com>
	<200912161358.11031.kdudka@redhat.com>
	<87r5qv551k.fsf@mocca.josefsson.org>
	<20091216160234.4971.qmail@stuge.se>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091217:libssh2-devel@cool.haxx.se::mq2uv12bEQnGAFy+:F+6o
Date: Thu, 17 Dec 2009 08:34:03 +0100
In-Reply-To: <20091216160234.4971.qmail@stuge.se> (Peter Stuge's message of
	"Wed, 16 Dec 2009 17:02:34 +0100")
Message-ID: <87d42e3vh0.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Peter Stuge <peter@stuge.se> writes:

> Simon Josefsson wrote:
>> > ping
>> 
>> I pushed your patch, please test whether what is in git now works
>> for both RSA and DSA.
>
> So I was looking into this. The reason I didn't immediately apply the
> patch to bring back the previous behavior of the libgcrypt code is
> that it makes some assumptions on how r and s are stored internally
> by libgcrypt and that doesn't seem as reliable as can be.

Do we have any reports that the old code didn't work?  If we don't, and
assuming the new code was broken, I don't see any reason not to revert
back to the old code meanwhile.

It would be good to improve the code to not make those assumptions, but
I'm not sure what you are referring to here.  What I think the code is
assuming is that we know exactly how the DSA S-exp outputs looks like,
which may not be ideal, but S-exp's is a fairly well-known format [1] so
the assumption doesn't seem all that strange to me.  But patches
welcome. :-)

/Simon

[1] http://people.csail.mit.edu/rivest/Sexp.txt
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Dec 17 08:49:06 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBH7msQl008774;
	Thu, 17 Dec 2009 08:48:56 +0100
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBH7mpoK008703
	for <libssh2-devel@cool.haxx.se>; Thu, 17 Dec 2009 08:48:52 +0100
Received: from int-mx01.intmail.prod.int.phx2.redhat.com
	(int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11])
	by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id nBH7mmo4003744
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
	Thu, 17 Dec 2009 02:48:48 -0500
Received: from vpn1-6-119.ams2.redhat.com (vpn1-6-119.ams2.redhat.com
	[10.36.6.119])
	by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP
	id nBH7ml4G017029; Thu, 17 Dec 2009 02:48:47 -0500
From: Kamil Dudka <kdudka@redhat.com>
To: Simon Josefsson <simon@josefsson.org>
Subject: Re: userauth_publickey_fromfile() fails occasionally for no reason
Date: Thu, 17 Dec 2009 08:48:03 +0100
User-Agent: KMail/1.9.10
References: <20091206071227.2004.qmail@earth.stuge.se>
	<20091216160234.4971.qmail@stuge.se>
	<87d42e3vh0.fsf@mocca.josefsson.org>
In-Reply-To: <87d42e3vh0.fsf@mocca.josefsson.org>
MIME-Version: 1.0
Content-Disposition: inline
Message-Id: <200912170848.04287.kdudka@redhat.com>
X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11
Cc: libssh2-devel@cool.haxx.se
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Thursday 17 of December 2009 08:34:03 Simon Josefsson wrote:
> Do we have any reports that the old code didn't work?  If we don't, and
> assuming the new code was broken, I don't see any reason not to revert
> back to the old code meanwhile.

Wait, it's other way around. The old code was broken. It used to fail
with probability about 5%. After the fix from 2009-12-06, which fixed
the OpenSSL code fairly well though, it was merely impossible to connect
with libgrcrypt. With my follow-up patch it finally worked 100% reliably.
I haven't had time to look at the new patch Peter has written, will do
ASAP.

Kamil
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Dec 17 08:55:24 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBH7tJs6012294;
	Thu, 17 Dec 2009 08:55:22 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBH7tHCh012289
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Thu, 17 Dec 2009 08:55:17 +0100
Received: from mocca.josefsson.org (c80-216-24-211.bredband.comhem.se
	[80.216.24.211]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBH7tFTj018436
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Thu, 17 Dec 2009 08:55:17 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: userauth_publickey_fromfile() fails occasionally for no reason
References: <20091206071227.2004.qmail@earth.stuge.se>
	<200912061347.11283.kdudka@redhat.com>
	<200912061437.11603.kdudka@redhat.com>
	<200912161358.11031.kdudka@redhat.com>
	<87r5qv551k.fsf@mocca.josefsson.org>
	<20091216160234.4971.qmail@stuge.se>
	<87d42e3vh0.fsf@mocca.josefsson.org>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091217:libssh2-devel@cool.haxx.se::t5eE/oCLCEQi1tfX:7apy
Date: Thu, 17 Dec 2009 08:55:15 +0100
In-Reply-To: <87d42e3vh0.fsf@mocca.josefsson.org> (Simon Josefsson's message
	of "Thu, 17 Dec 2009 08:34:03 +0100")
Message-ID: <87pr6e2fx8.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Simon Josefsson <simon@josefsson.org> writes:

> Peter Stuge <peter@stuge.se> writes:
>
>> Simon Josefsson wrote:
>>> > ping
>>> 
>>> I pushed your patch, please test whether what is in git now works
>>> for both RSA and DSA.
>>
>> So I was looking into this. The reason I didn't immediately apply the
>> patch to bring back the previous behavior of the libgcrypt code is
>> that it makes some assumptions on how r and s are stored internally
>> by libgcrypt and that doesn't seem as reliable as can be.
>
> Do we have any reports that the old code didn't work?

Oops, sorry I now see that we do. :-(  Anyway, it seems both the old code
and the new code are broken.

> It would be good to improve the code to not make those assumptions, but
> I'm not sure what you are referring to here.  What I think the code is
> assuming is that we know exactly how the DSA S-exp outputs looks like,
> which may not be ideal, but S-exp's is a fairly well-known format [1] so
> the assumption doesn't seem all that strange to me.  But patches
> welcome. :-)

This still holds though. :-) If you can get your fix into git relatively
soon, that would be good, otherwise I guess the safest is to revert back
to the old code.

Sorry for causing confusion here, I read Kamil's ping as a indication
that the patch was tested and he was looking for it to be applied, but I
guess it was a ping for further discussion instead.

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Dec 17 09:00:28 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBH80NMH014562;
	Thu, 17 Dec 2009 09:00:26 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBH80Lng014526
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Thu, 17 Dec 2009 09:00:21 +0100
Received: from mocca.josefsson.org (c80-216-24-211.bredband.comhem.se
	[80.216.24.211]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBH80Kop018534
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Thu, 17 Dec 2009 09:00:21 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: userauth_publickey_fromfile() fails occasionally for no reason
References: <20091206071227.2004.qmail@earth.stuge.se>
	<20091216160234.4971.qmail@stuge.se>
	<87d42e3vh0.fsf@mocca.josefsson.org>
	<200912170848.04287.kdudka@redhat.com>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091217:libssh2-devel@cool.haxx.se::dfD3TLTdm4XLBsom:7cwm
Date: Thu, 17 Dec 2009 09:00:19 +0100
In-Reply-To: <200912170848.04287.kdudka@redhat.com> (Kamil Dudka's message of
	"Thu, 17 Dec 2009 08:48:03 +0100")
Message-ID: <87d42e2fos.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Kamil Dudka <kdudka@redhat.com> writes:

> On Thursday 17 of December 2009 08:34:03 Simon Josefsson wrote:
>> Do we have any reports that the old code didn't work?  If we don't, and
>> assuming the new code was broken, I don't see any reason not to revert
>> back to the old code meanwhile.
>
> Wait, it's other way around. The old code was broken. It used to fail
> with probability about 5%. After the fix from 2009-12-06, which fixed
> the OpenSSL code fairly well though, it was merely impossible to connect
> with libgrcrypt.

Right, I noticed.   Sorry.

> With my follow-up patch it finally worked 100% reliably.  I haven't
> had time to look at the new patch Peter has written, will do ASAP.

Great.  So rather than having me revert the patch I pushed and cause
more confusion, let's see if you can test the new patch (post it to the
list?) and let you/Peter push that.

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Dec 17 10:09:41 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBH99VNl001064;
	Thu, 17 Dec 2009 10:09:38 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBH99TrM001060
	for <libssh2-devel@cool.haxx.se>; Thu, 17 Dec 2009 10:09:29 +0100
Received: (qmail 25209 invoked by uid 501); 17 Dec 2009 09:09:29 -0000
Message-ID: <20091217090929.25208.qmail@stuge.se>
Date: Thu, 17 Dec 2009 10:09:29 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: userauth_publickey_fromfile() fails occasionally for no reason
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <87d42e3vh0.fsf@mocca.josefsson.org>
	<200912170848.04287.kdudka@redhat.com>
	<87d42e2fos.fsf@mocca.josefsson.org>
	<20091206071227.2004.qmail@earth.stuge.se>
	<200912061347.11283.kdudka@redhat.com>
	<200912061437.11603.kdudka@redhat.com>
	<200912161358.11031.kdudka@redhat.com>
	<87r5qv551k.fsf@mocca.josefsson.org>
	<20091216160234.4971.qmail@stuge.se>
	<87d42e3vh0.fsf@mocca.josefsson.org>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="SUOF0GtieIMvvwua"
Content-Disposition: inline
In-Reply-To: <87d42e2fos.fsf@mocca.josefsson.org>
	<87d42e3vh0.fsf@mocca.josefsson.org>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se


--SUOF0GtieIMvvwua
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Simon Josefsson wrote:
> I'm not sure what you are referring to here.  What I think the code
> is assuming is that we know exactly how the DSA S-exp outputs looks
> like,

The assumption is about how the r and s integer data is stored in the
sexp (leading 0 byte) and I think it'd be better to only use the MPI
API to fetch them.


Simon Josefsson wrote:
> So rather than having me revert the patch I pushed and cause more
> confusion, let's see if you can test the new patch (post it to the
> list?) and let you/Peter push that.

*nods* Yes, no need to revert. The suggested patch is attached,
although it may apply only without Kamil's patch attached.


//Peter

--SUOF0GtieIMvvwua
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="ls2.gcdsasig.patch"

diff --git a/src/libgcrypt.c b/src/libgcrypt.c
index b06be42..819df81 100644
--- a/src/libgcrypt.c
+++ b/src/libgcrypt.c
@@ -401,6 +401,7 @@ _libssh2_dsa_sha1_sign(libssh2_dsa_ctx * dsactx,
     unsigned char zhash[SHA_DIGEST_LENGTH + 1];
     gcry_sexp_t sig_sexp;
     gcry_sexp_t data;
+    gcry_mpi_t tmpi;
     int ret;
     const char *tmp;
     size_t size;
@@ -425,40 +426,45 @@ _libssh2_dsa_sha1_sign(libssh2_dsa_ctx * dsactx,
     }
 
     memset(sig, 0, 40);
+    ret = -1;
 
 /* Extract R. */
 
     data = gcry_sexp_find_token(sig_sexp, "r", 0);
-    if (!data) {
-        ret = -1;
+    if (!data)
         goto out;
-    }
 
-    tmp = gcry_sexp_nth_data(data, 1, &size);
-    if (!tmp || size < 1 || size > 20) {
-        ret = -1;
+    tmpi = gcry_sexp_nth_mpi(data, 1, GCRYMPI_FMT_USG);
+    if (!tmpi)
         goto out;
-    }
 
-    memcpy(sig + (20 - size), tmp, size);
+    gcry_mpi_print(GCRYMPI_FMT_STD, sig, 20, &size, tmpi);
+    if (size < 1)
+        goto out;
+    else if (size < 20) {
+        memmove(sig + (20 - size), sig, size);
+        memset(sig, 0, (20 - size));
+    }
 
     gcry_sexp_release(data);
 
 /* Extract S. */
 
     data = gcry_sexp_find_token(sig_sexp, "s", 0);
-    if (!data) {
-        ret = -1;
+    if (!data)
         goto out;
-    }
 
-    tmp = gcry_sexp_nth_data(data, 1, &size);
-    if (!tmp || size < 1 || size > 20) {
-        ret = -1;
+    tmpi = gcry_sexp_nth_mpi(data, 1, GCRYMPI_FMT_USG);
+    if (!tmpi)
         goto out;
-    }
 
-    memcpy(sig + 20 + (20 - size), tmp, size);
+    gcry_mpi_print(GCRYMPI_FMT_STD, sig + 20, 20, &size, tmpi);
+    if (size < 1)
+        goto out;
+    else if (size < 20) {
+        memmove(sig + 20 + (20 - size), sig + 20, size);
+        memset(sig + 20, 0, (20 - size));
+    }
 
     ret = 0;
   out:

--SUOF0GtieIMvvwua
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--SUOF0GtieIMvvwua--

From libssh2-devel-bounces@cool.haxx.se  Thu Dec 17 10:25:20 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBH9PGu7013454;
	Thu, 17 Dec 2009 10:25:19 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBH9PFB1013449
	for <libssh2-devel@cool.haxx.se>; Thu, 17 Dec 2009 10:25:15 +0100
Received: (qmail 27281 invoked by uid 501); 17 Dec 2009 09:25:16 -0000
Message-ID: <20091217092516.27280.qmail@stuge.se>
Date: Thu, 17 Dec 2009 10:25:16 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: userauth_publickey_fromfile() fails occasionally for no reason
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <200912170848.04287.kdudka@redhat.com>
	<87d42e2fos.fsf@mocca.josefsson.org>
	<20091206071227.2004.qmail@earth.stuge.se>
	<200912061347.11283.kdudka@redhat.com>
	<200912061437.11603.kdudka@redhat.com>
	<200912161358.11031.kdudka@redhat.com>
	<87r5qv551k.fsf@mocca.josefsson.org>
	<20091216160234.4971.qmail@stuge.se>
	<87d42e3vh0.fsf@mocca.josefsson.org>
	<20091217090929.25208.qmail@stuge.se>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <20091217090929.25208.qmail@stuge.se>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Peter Stuge wrote:
> The suggested patch is attached,

I couldn't find much MPI documentation so it may not be correct at
all. :\


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Dec 17 14:06:38 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBHD6PCR028247;
	Thu, 17 Dec 2009 14:06:34 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBHD6O0M028243
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Thu, 17 Dec 2009 14:06:24 +0100
Received: from mocca.josefsson.org (c80-216-24-211.bredband.comhem.se
	[80.216.24.211]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBHD6M83025372
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Thu, 17 Dec 2009 14:06:24 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2-devel@cool.haxx.se
Subject: Re: userauth_publickey_fromfile() fails occasionally for no reason
References: <200912170848.04287.kdudka@redhat.com>
	<87d42e2fos.fsf@mocca.josefsson.org>
	<20091206071227.2004.qmail@earth.stuge.se>
	<200912061347.11283.kdudka@redhat.com>
	<200912061437.11603.kdudka@redhat.com>
	<200912161358.11031.kdudka@redhat.com>
	<87r5qv551k.fsf@mocca.josefsson.org>
	<20091216160234.4971.qmail@stuge.se>
	<87d42e3vh0.fsf@mocca.josefsson.org>
	<20091217090929.25208.qmail@stuge.se>
	<20091217092516.27280.qmail@stuge.se>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091217:libssh2-devel@cool.haxx.se::rG0umVncoqJ9ZsKC:OIW
Date: Thu, 17 Dec 2009 14:06:22 +0100
In-Reply-To: <20091217092516.27280.qmail@stuge.se> (Peter Stuge's message of
	"Thu, 17 Dec 2009 10:25:16 +0100")
Message-ID: <87y6l1wy0h.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Peter Stuge <peter@stuge.se> writes:

> Peter Stuge wrote:
>> The suggested patch is attached,
>
> I couldn't find much MPI documentation so it may not be correct at
> all. :\

Just checking, you know about the libgcrypt manual?

http://www.gnupg.org/documentation/manuals/gcrypt/

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Dec 17 14:15:24 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBHDFJQR031666;
	Thu, 17 Dec 2009 14:15:22 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBHDFHiq031661
	for <libssh2-devel@cool.haxx.se>; Thu, 17 Dec 2009 14:15:17 +0100
Received: (qmail 3116 invoked by uid 501); 17 Dec 2009 13:15:18 -0000
Message-ID: <20091217131518.3115.qmail@stuge.se>
Date: Thu, 17 Dec 2009 14:15:18 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: userauth_publickey_fromfile() fails occasionally for no reason
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <20091206071227.2004.qmail@earth.stuge.se>
	<200912061347.11283.kdudka@redhat.com>
	<200912061437.11603.kdudka@redhat.com>
	<200912161358.11031.kdudka@redhat.com>
	<87r5qv551k.fsf@mocca.josefsson.org>
	<20091216160234.4971.qmail@stuge.se>
	<87d42e3vh0.fsf@mocca.josefsson.org>
	<20091217090929.25208.qmail@stuge.se>
	<20091217092516.27280.qmail@stuge.se>
	<87y6l1wy0h.fsf@mocca.josefsson.org>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <87y6l1wy0h.fsf@mocca.josefsson.org>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Simon Josefsson wrote:
> > I couldn't find much MPI documentation so it may not be correct
> > at all. :\
> 
> Just checking, you know about the libgcrypt manual?
> 
> http://www.gnupg.org/documentation/manuals/gcrypt/

Yes. It lists functions but fairly little else.. :\

In particular, gcry_sexp_nth_mpi() doesn't describe the int mpifmt
parameter. It seems from the libgcrypt source code that this is
actually an enum gcry_mpi_format, but the manual also doesn't say how
to learn what to pass for that parameter. The sexp in question comes
from gcry_pk_sign() but that also says nothing about how MPIs are
stored in the result.. I looked at dsa.c in libgcrypt source and
guessed..


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Dec 17 16:48:13 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBHFm3sJ032092;
	Thu, 17 Dec 2009 16:48:09 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBHFm2gp032049
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Thu, 17 Dec 2009 16:48:02 +0100
Received: from mocca.josefsson.org (c80-216-24-211.bredband.comhem.se
	[80.216.24.211]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBHFm0SJ029521
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Thu, 17 Dec 2009 16:48:02 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2-devel@cool.haxx.se
Subject: Re: userauth_publickey_fromfile() fails occasionally for no reason
References: <20091206071227.2004.qmail@earth.stuge.se>
	<200912061347.11283.kdudka@redhat.com>
	<200912061437.11603.kdudka@redhat.com>
	<200912161358.11031.kdudka@redhat.com>
	<87r5qv551k.fsf@mocca.josefsson.org>
	<20091216160234.4971.qmail@stuge.se>
	<87d42e3vh0.fsf@mocca.josefsson.org>
	<20091217090929.25208.qmail@stuge.se>
	<20091217092516.27280.qmail@stuge.se>
	<87y6l1wy0h.fsf@mocca.josefsson.org>
	<20091217131518.3115.qmail@stuge.se>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091217:libssh2-devel@cool.haxx.se::Y68XOjGIuga80z25:D+RP
Date: Thu, 17 Dec 2009 16:48:00 +0100
In-Reply-To: <20091217131518.3115.qmail@stuge.se> (Peter Stuge's message of
	"Thu, 17 Dec 2009 14:15:18 +0100")
Message-ID: <87oclxsitr.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Peter Stuge <peter@stuge.se> writes:

> Simon Josefsson wrote:
>> > I couldn't find much MPI documentation so it may not be correct
>> > at all. :\
>> 
>> Just checking, you know about the libgcrypt manual?
>> 
>> http://www.gnupg.org/documentation/manuals/gcrypt/
>
> Yes. It lists functions but fairly little else.. :\
>
> In particular, gcry_sexp_nth_mpi() doesn't describe the int mpifmt
> parameter. It seems from the libgcrypt source code that this is
> actually an enum gcry_mpi_format, but the manual also doesn't say how
> to learn what to pass for that parameter. The sexp in question comes
> from gcry_pk_sign() but that also says nothing about how MPIs are
> stored in the result.. I looked at dsa.c in libgcrypt source and
> guessed..

So maybe there is no real advantage in using the mpi interface over
parsing the output from the sexp interface directly?  Or does this fix
the actual problem magicly?  If so, maybe a simpler fix to the original
sexp-parsing would also work.

But anyway, if it now works reliably, I'd say push it.

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Dec 17 17:23:59 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBHGNq1B025036;
	Thu, 17 Dec 2009 17:23:56 +0100
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBHGNovD024982
	for <libssh2-devel@cool.haxx.se>; Thu, 17 Dec 2009 17:23:51 +0100
Received: from int-mx02.intmail.prod.int.phx2.redhat.com
	(int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12])
	by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id nBHGNlsr016775
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
	Thu, 17 Dec 2009 11:23:47 -0500
Received: from dhcp-lab-205.englab.brq.redhat.com
	(dhcp-lab-205.englab.brq.redhat.com [10.34.33.205])
	by int-mx02.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP
	id nBHGNjl8019515; Thu, 17 Dec 2009 11:23:46 -0500
From: Kamil Dudka <kdudka@redhat.com>
To: Peter Stuge <peter@stuge.se>
Subject: Re: userauth_publickey_fromfile() fails occasionally for no reason
Date: Thu, 17 Dec 2009 17:24:51 +0100
User-Agent: KMail/1.12.3 (Linux/2.6.29.5-191.fc11.x86_64; KDE/4.3.3; x86_64; ;
	)
References: <87d42e3vh0.fsf@mocca.josefsson.org>
	<20091217090929.25208.qmail@stuge.se>
In-Reply-To: <20091217090929.25208.qmail@stuge.se>
MIME-Version: 1.0
Message-Id: <200912171724.51735.kdudka@redhat.com>
X-Scanned-By: MIMEDefang 2.67 on 10.5.11.12
Cc: Simon Josefsson <simon@josefsson.org>, libssh2-devel@cool.haxx.se
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Thu December 17 2009 10:09:29 Peter Stuge wrote:
> *nods* Yes, no need to revert. The suggested patch is attached,
> although it may apply only without Kamil's patch attached.

Bad news. The patch breaks it completely.

Have you tested it yourself first?

Kamil
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Dec 18 14:13:16 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBIDD176007758;
	Fri, 18 Dec 2009 14:13:10 +0100
Received: from mail18.ca.com (mail18.ca.com [155.35.46.20])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBIDCDPY007578
	for <libssh2-devel@cool.haxx.se>; Fri, 18 Dec 2009 14:12:59 +0100
Received: from INHYMS12.ca.com ([155.35.35.27]) by mail18.ca.com with
	Microsoft SMTPSVC(6.0.3790.3959); Fri, 18 Dec 2009 18:41:40 +0530
X-MimeOLE: Produced By Microsoft Exchange V6.5
Content-class: urn:content-classes:message
MIME-Version: 1.0
Subject: IPv6 Support Query 
Date: Fri, 18 Dec 2009 18:41:56 +0530
Message-ID: <AD2F648DE9801443A9F5C40F342604697BA6F6@INHYMS12.ca.com>
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
Thread-Topic: IPv6 Support Query 
Thread-Index: Acp/46zmF7NeqMewS0+GD7lLAG15RA==
From: "Kumar, Ashish" <Ashish.Kumar@ca.com>
To: <libssh2-devel@cool.haxx.se>
X-OriginalArrivalTime: 18 Dec 2009 13:11:40.0476 (UTC)
	FILETIME=[A322EFC0:01CA7FE3]
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0414128368=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

This is a multi-part message in MIME format.

--===============0414128368==
Content-class: urn:content-classes:message
Content-Type: multipart/alternative;
	boundary="----_=_NextPart_001_01CA7FE3.AD4E9EB8"

This is a multi-part message in MIME format.

------_=_NextPart_001_01CA7FE3.AD4E9EB8
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Can you please tell me if libssh2 supports IPv6 ssh ?

=20

acm-suse9:/proc # lsof -i :22

COMMAND   PID USER   FD   TYPE DEVICE SIZE NODE NAME

sshd     4972 root    3u  IPv6   7480       TCP *:ssh (LISTEN)

sshd    25032 root    4u  IPv6 287309       TCP
acm-suse9.ca.com:ssh->kumas09-xp.ca.com:dsdn (ESTABLISHED)

sshd    25348 root    4u  IPv6 288321       TCP
acm-suse9.ca.com:ssh->kumas09-xp.ca.com:gv-us (ESTABLISHED)

=20

"while ((rc =3D libssh2_userauth_password(session, username, password)) =
=3D=3D
LIBSSH2_ERROR_EAGAIN);"

=20

this method is always returning -1 .

=20

Thanks & Regards,=20
Ashish Kumar=20



=20


------_=_NextPart_001_01CA7FE3.AD4E9EB8
Content-Type: text/html;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" =
xmlns:o=3D"urn:schemas-microsoft-com:office:office" =
xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" =
xmlns=3D"http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dus-ascii">
<meta name=3DGenerator content=3D"Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
	{font-family:SimSun;
	panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
	{font-family:SimSun;
	panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:"\@SimSun";
	panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
	{font-family:Verdana;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:purple;
	text-decoration:underline;}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Calibri","sans-serif";
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
	{page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext=3D"edit">
  <o:idmap v:ext=3D"edit" data=3D"1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=3DEN-US link=3Dblue vlink=3Dpurple>

<div class=3DSection1>

<p class=3DMsoNormal>Can you please tell me if libssh2 supports IPv6 ssh =
?<o:p></o:p></p>

<p class=3DMsoNormal><o:p>&nbsp;</o:p></p>

<p class=3DMsoNormal>acm-suse9:/proc # lsof -i :22<o:p></o:p></p>

<p class=3DMsoNormal>COMMAND&nbsp;&nbsp; PID USER&nbsp;&nbsp; =
FD&nbsp;&nbsp; TYPE
DEVICE SIZE NODE NAME<o:p></o:p></p>

<p class=3DMsoNormal><span =
style=3D'background:yellow;mso-highlight:yellow'>sshd&nbsp;&nbsp;&nbsp;&n=
bsp;
4972 root&nbsp;&nbsp;&nbsp; 3u&nbsp; IPv6&nbsp;&nbsp;
7480&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TCP *:ssh =
(LISTEN)</span><o:p></o:p></p>

<p class=3DMsoNormal>sshd&nbsp;&nbsp;&nbsp; 25032 root&nbsp;&nbsp;&nbsp; =
4u&nbsp;
IPv6 287309&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TCP
acm-suse9.ca.com:ssh-&gt;kumas09-xp.ca.com:dsdn =
(ESTABLISHED)<o:p></o:p></p>

<p class=3DMsoNormal>sshd&nbsp;&nbsp;&nbsp; 25348 root&nbsp;&nbsp;&nbsp; =
4u&nbsp;
IPv6 288321&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TCP
acm-suse9.ca.com:ssh-&gt;kumas09-xp.ca.com:gv-us =
(ESTABLISHED)<o:p></o:p></p>

<p class=3DMsoNormal><o:p>&nbsp;</o:p></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Courier New";
color:blue'>&#8220;while</span><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>
((rc =3D libssh2_userauth_password(session, username, password)) =3D=3D
LIBSSH2_ERROR_EAGAIN);&#8221;<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>this
method is always returning -1 .</span><o:p></o:p></p>

<p class=3DMsoNormal><o:p>&nbsp;</o:p></p>

<p class=3DMsoNormal><b><span lang=3DEN-AU =
style=3D'font-size:10.0pt;font-family:
"Verdana","sans-serif";color:blue'>Thanks &amp; Regards,</span></b><span
style=3D'color:blue'> <br>
</span><b><span lang=3DEN-AU =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif";
color:blue'>Ashish Kumar</span></b><span style=3D'color:blue'> <br>
<br>
</span><o:p></o:p></p>

<p class=3DMsoNormal><o:p>&nbsp;</o:p></p>

</div>

</body>

</html>

------_=_NextPart_001_01CA7FE3.AD4E9EB8--

--===============0414128368==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============0414128368==--

From libssh2-devel-bounces@cool.haxx.se  Fri Dec 18 14:33:48 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBIDXhTN021841;
	Fri, 18 Dec 2009 14:33:46 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBIDXf6P021836
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Fri, 18 Dec 2009 14:33:42 +0100
Received: from mocca.josefsson.org (c80-216-24-211.bredband.comhem.se
	[80.216.24.211]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBIDXeJr024794
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Fri, 18 Dec 2009 14:33:41 +0100
X-Hashcash: 1:22:091218:libssh2-devel@cool.haxx.se::NDDEDtz2lS0e/sk0:eKTT
From: Simon Josefsson <simon@josefsson.org>
To: libssh2-devel@cool.haxx.se
Subject: move example/simple/* to example/*?
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
Date: Fri, 18 Dec 2009 14:33:39 +0100
Message-ID: <877hsk8kzw.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Is there any reason why all the examples are in example/simple?
Couldn't we move them to just example/?  Do we anticipate any
"non-simple" examples?  Even so, wouldn't it make more sense to place
the simple examples directly in example/ and the non-simple examples
(i.e., multiple files) in sub-directories of example/?

My proposal is to move the files.  Objections?

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Dec 18 15:23:48 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBIENcIm015677;
	Fri, 18 Dec 2009 15:23:45 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBIENbIC015668
	for <libssh2-devel@cool.haxx.se>; Fri, 18 Dec 2009 15:23:37 +0100
Received: (qmail 7513 invoked by uid 501); 18 Dec 2009 14:23:37 -0000
Message-ID: <20091218142337.7512.qmail@stuge.se>
Date: Fri, 18 Dec 2009 15:23:37 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: move example/simple/* to example/*?
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <877hsk8kzw.fsf@mocca.josefsson.org>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <877hsk8kzw.fsf@mocca.josefsson.org>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Simon Josefsson wrote:
> My proposal is to move the files.  Objections?

Do it!


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Dec 18 16:08:08 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBIF7qEx014535;
	Fri, 18 Dec 2009 16:07:57 +0100
Received: from mail.ambrosiasw.com (xanadu.ambrosiasw.com [74.43.255.35])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBIF7oHg014524
	for <libssh2-devel@cool.haxx.se>; Fri, 18 Dec 2009 16:07:51 +0100
Received: from localhost (localhost [127.0.0.1])
	by mail.ambrosiasw.com (Postfix) with ESMTP id 7A947E617765
	for <libssh2-devel@cool.haxx.se>; Fri, 18 Dec 2009 10:06:41 -0500 (EST)
Received: from mail.ambrosiasw.com ([127.0.0.1])
	by localhost (xanadu.ambrosiasw.com [127.0.0.1]) (amavisd-new,
	port 10024) with ESMTP id 13289-04 for <libssh2-devel@cool.haxx.se>;
	Fri, 18 Dec 2009 10:06:39 -0500 (EST)
Received: from [10.0.1.12] (cpe-69-207-182-47.rochester.res.rr.com
	[69.207.182.47])
	by mail.ambrosiasw.com (Postfix) with ESMTP id BD65FE61774D
	for <libssh2-devel@cool.haxx.se>; Fri, 18 Dec 2009 10:06:38 -0500 (EST)
From: Jeremy Knope <jerome@ambrosiasw.com>
Mime-Version: 1.0 (Apple Message framework v1077)
Subject: Re: IPv6 Support Query 
Date: Fri, 18 Dec 2009 10:07:41 -0500
In-Reply-To: <AD2F648DE9801443A9F5C40F342604697BA6F6@INHYMS12.ca.com>
To: libssh2 development <libssh2-devel@cool.haxx.se>
References: <AD2F648DE9801443A9F5C40F342604697BA6F6@INHYMS12.ca.com>
Message-Id: <4B5A315E-3EF2-4DFA-BD26-90B44EB25B6B@ambrosiasw.com>
X-Mailer: Apple Mail (2.1077)
X-Virus-Scanned: by amavisd-new at ambrosiasw.com
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============1076495938=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se


--===============1076495938==
Content-Type: multipart/alternative; boundary=Apple-Mail-8--626179438


--Apple-Mail-8--626179438
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=windows-1252

I use libssh2 just fine with both IPv6 & IPv4.  Your program is the one =
that has to establish the actual socket connection so it's up to you to =
support it in you program.
--
Jeremy Knope / Software Developer / Ambrosia Software, Inc. -- =
http://www.AmbrosiaSW.com/

On Dec 18, 2009, at 8:11 AM, Kumar, Ashish wrote:

> Can you please tell me if libssh2 supports IPv6 ssh ?
> =20
> acm-suse9:/proc # lsof -i :22
> COMMAND   PID USER   FD   TYPE DEVICE SIZE NODE NAME
> sshd     4972 root    3u  IPv6   7480       TCP *:ssh (LISTEN)
> sshd    25032 root    4u  IPv6 287309       TCP =
acm-suse9.ca.com:ssh->kumas09-xp.ca.com:dsdn (ESTABLISHED)
> sshd    25348 root    4u  IPv6 288321       TCP =
acm-suse9.ca.com:ssh->kumas09-xp.ca.com:gv-us (ESTABLISHED)
> =20
> =93while ((rc =3D libssh2_userauth_password(session, username, =
password)) =3D=3D LIBSSH2_ERROR_EAGAIN);=94
> =20
> this method is always returning -1 .
> =20
> Thanks & Regards,=20
> Ashish Kumar=20
>=20
> =20
> _______________________________________________
> libssh2-devel =
http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel


--Apple-Mail-8--626179438
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=windows-1252

<html><head><base href=3D"x-msg://252/"></head><body style=3D"word-wrap: =
break-word; -webkit-nbsp-mode: space; -webkit-line-break: =
after-white-space; ">I use libssh2 just fine with both IPv6 &amp; IPv4. =
&nbsp;Your program is the one that has to establish the actual socket =
connection so it's up to you to support it in you program.<div><div>
<span class=3D"Apple-style-span" style=3D"border-collapse: separate; =
color: rgb(0, 0, 0); font-family: Verdana; font-size: 12px; font-style: =
normal; font-variant: normal; font-weight: normal; letter-spacing: =
normal; line-height: normal; orphans: 2; text-align: auto; text-indent: =
0px; text-transform: none; white-space: normal; widows: 2; word-spacing: =
0px; -webkit-border-horizontal-spacing: 0px; =
-webkit-border-vertical-spacing: 0px; =
-webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: =
auto; -webkit-text-stroke-width: 0; "><div>--<br>Jeremy Knope / Software =
Developer / Ambrosia Software, Inc. --&nbsp;<a =
href=3D"http://www.AmbrosiaSW.com/">http://www.AmbrosiaSW.com/</a><br></di=
v></span>
</div>
<br><div><div>On Dec 18, 2009, at 8:11 AM, Kumar, Ashish wrote:</div><br =
class=3D"Apple-interchange-newline"><blockquote type=3D"cite"><span =
class=3D"Apple-style-span" style=3D"border-collapse: separate; =
font-family: Verdana; font-size: medium; font-style: normal; =
font-variant: normal; font-weight: normal; letter-spacing: normal; =
line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; =
white-space: normal; widows: 2; word-spacing: 0px; =
-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: =
0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: =
auto; -webkit-text-stroke-width: 0px; "><div lang=3D"EN-US" link=3D"blue" =
vlink=3D"purple"><div class=3D"Section1"><div style=3D"margin-top: 0in; =
margin-right: 0in; margin-bottom: 0.0001pt; margin-left: 0in; font-size: =
11pt; font-family: Calibri, sans-serif; ">Can you please tell me if =
libssh2 supports IPv6 ssh ?<o:p></o:p></div><div style=3D"margin-top: =
0in; margin-right: 0in; margin-bottom: 0.0001pt; margin-left: 0in; =
font-size: 11pt; font-family: Calibri, sans-serif; =
"><o:p>&nbsp;</o:p></div><div style=3D"margin-top: 0in; margin-right: =
0in; margin-bottom: 0.0001pt; margin-left: 0in; font-size: 11pt; =
font-family: Calibri, sans-serif; ">acm-suse9:/proc # lsof -i =
:22<o:p></o:p></div><div style=3D"margin-top: 0in; margin-right: 0in; =
margin-bottom: 0.0001pt; margin-left: 0in; font-size: 11pt; font-family: =
Calibri, sans-serif; ">COMMAND&nbsp;&nbsp; PID USER&nbsp;&nbsp; =
FD&nbsp;&nbsp; TYPE DEVICE SIZE NODE NAME<o:p></o:p></div><div =
style=3D"margin-top: 0in; margin-right: 0in; margin-bottom: 0.0001pt; =
margin-left: 0in; font-size: 11pt; font-family: Calibri, sans-serif; =
"><span style=3D"background-image: initial; background-repeat: initial; =
background-attachment: initial; -webkit-background-clip: initial; =
-webkit-background-origin: initial; background-color: yellow; =
background-position: initial initial; ">sshd&nbsp;&nbsp;&nbsp;&nbsp; =
4972 root&nbsp;&nbsp;&nbsp; 3u&nbsp; IPv6&nbsp;&nbsp; =
7480&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TCP *:ssh =
(LISTEN)</span><o:p></o:p></div><div style=3D"margin-top: 0in; =
margin-right: 0in; margin-bottom: 0.0001pt; margin-left: 0in; font-size: =
11pt; font-family: Calibri, sans-serif; ">sshd&nbsp;&nbsp;&nbsp; 25032 =
root&nbsp;&nbsp;&nbsp; 4u&nbsp; IPv6 =
287309&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TCP =
acm-suse9.ca.com:ssh-&gt;kumas09-xp.ca.com:dsdn =
(ESTABLISHED)<o:p></o:p></div><div style=3D"margin-top: 0in; =
margin-right: 0in; margin-bottom: 0.0001pt; margin-left: 0in; font-size: =
11pt; font-family: Calibri, sans-serif; ">sshd&nbsp;&nbsp;&nbsp; 25348 =
root&nbsp;&nbsp;&nbsp; 4u&nbsp; IPv6 =
288321&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TCP =
acm-suse9.ca.com:ssh-&gt;kumas09-xp.ca.com:gv-us =
(ESTABLISHED)<o:p></o:p></div><div style=3D"margin-top: 0in; =
margin-right: 0in; margin-bottom: 0.0001pt; margin-left: 0in; font-size: =
11pt; font-family: Calibri, sans-serif; "><o:p>&nbsp;</o:p></div><div =
style=3D"margin-top: 0in; margin-right: 0in; margin-bottom: 0.0001pt; =
margin-left: 0in; font-size: 11pt; font-family: Calibri, sans-serif; =
"><span style=3D"font-size: 10pt; font-family: 'Courier New'; color: =
blue; ">=93while</span><span style=3D"font-size: 10pt; font-family: =
'Courier New'; "><span class=3D"Apple-converted-space">&nbsp;</span>((rc =
=3D libssh2_userauth_password(session, username, password)) =3D=3D =
LIBSSH2_ERROR_EAGAIN);=94<o:p></o:p></span></div><div style=3D"margin-top:=
 0in; margin-right: 0in; margin-bottom: 0.0001pt; margin-left: 0in; =
font-size: 11pt; font-family: Calibri, sans-serif; "><span =
style=3D"font-size: 10pt; font-family: 'Courier New'; =
"><o:p>&nbsp;</o:p></span></div><div style=3D"margin-top: 0in; =
margin-right: 0in; margin-bottom: 0.0001pt; margin-left: 0in; font-size: =
11pt; font-family: Calibri, sans-serif; "><span style=3D"font-size: =
10pt; font-family: 'Courier New'; ">this method is always returning -1 =
.</span><o:p></o:p></div><div style=3D"margin-top: 0in; margin-right: =
0in; margin-bottom: 0.0001pt; margin-left: 0in; font-size: 11pt; =
font-family: Calibri, sans-serif; "><o:p>&nbsp;</o:p></div><div =
style=3D"margin-top: 0in; margin-right: 0in; margin-bottom: 0.0001pt; =
margin-left: 0in; font-size: 11pt; font-family: Calibri, sans-serif; =
"><b><span lang=3D"EN-AU" style=3D"font-size: 10pt; font-family: =
Verdana, sans-serif; color: blue; ">Thanks &amp; =
Regards,</span></b><span style=3D"color: blue; "><span =
class=3D"Apple-converted-space">&nbsp;</span><br></span><b><span =
lang=3D"EN-AU" style=3D"font-size: 10pt; font-family: Verdana, =
sans-serif; color: blue; ">Ashish Kumar</span></b><span style=3D"color: =
blue; "><span =
class=3D"Apple-converted-space">&nbsp;</span><br><br></span><o:p></o:p></d=
iv><div style=3D"margin-top: 0in; margin-right: 0in; margin-bottom: =
0.0001pt; margin-left: 0in; font-size: 11pt; font-family: Calibri, =
sans-serif; =
"><o:p>&nbsp;</o:p></div></div>___________________________________________=
____<br>libssh2-devel<span class=3D"Apple-converted-space">&nbsp;</span><a=
 href=3D"http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel" =
style=3D"color: blue; text-decoration: underline; =
">http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel</a><br></div>=
</span></blockquote></div><br></div></body></html>=

--Apple-Mail-8--626179438--

--===============1076495938==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============1076495938==--

From libssh2-devel-bounces@cool.haxx.se  Fri Dec 18 16:59:33 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBIFxOgO014514;
	Fri, 18 Dec 2009 16:59:30 +0100
Received: from giant.haxx.se (giant.haxx.se [83.168.254.42])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBIFxNB2014507
	for <libssh2-devel@cool.haxx.se>; Fri, 18 Dec 2009 16:59:23 +0100
Date: Fri, 18 Dec 2009 16:59:23 +0100 (CET)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: move example/simple/* to example/*?
In-Reply-To: <877hsk8kzw.fsf@mocca.josefsson.org>
Message-ID: <alpine.DEB.2.00.0912181659060.13838@tvnag.unkk.fr>
References: <877hsk8kzw.fsf@mocca.josefsson.org>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Fri, 18 Dec 2009, Simon Josefsson wrote:

> My proposal is to move the files.  Objections?

On the contrary, I agree!

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Dec 18 20:39:15 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBIJd2lX029950;
	Fri, 18 Dec 2009 20:39:10 +0100
Received: from ivory3.scn-net.ne.jp (ivory3.scn-net.ne.jp [219.117.176.191])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBIJcxZF029898
	for <libssh2-devel@cool.haxx.se>; Fri, 18 Dec 2009 20:39:00 +0100
Received: from ([192.168.0.187]) (envelope sender: <ueno@unixuser.org>)
	by ivory3.scn-net.ne.jp with Active!Hunter esmtp server;
	Sat, 19 Dec 2009 04:38:57 +0900
Received: Received: from well-done.deisui.org (g187018.scn-net.ne.jp
	[202.83.187.18]) (authenticated)
	by blue17.scn-net.ne.jp (unknown) with ESMTP id nBIJcuXm023569
	for <libssh2-devel@cool.haxx.se>; Sat, 19 Dec 2009 04:38:57 +0900
Received: from 221x255x76x220.ap221.ftth.ucom.ne.jp ([221.255.76.220]
	helo=chilled) by well-done.deisui.org with esmtpsa
	(TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.69)
	(envelope-from <ueno@unixuser.org>) id 1NLifA-0005Rh-BF
	for libssh2-devel@cool.haxx.se; Sat, 19 Dec 2009 04:38:56 +0900
From: Daiki Ueno <ueno@unixuser.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: ssh-agent support
References: <87y6leeyfp.fsf@broken.deisui.org>
	<20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
	<87aaxjn540.fsf_-_@broken.deisui.org>
	<alpine.DEB.2.00.0912160849100.20887@tvnag.unkk.fr>
Date: Sat, 19 Dec 2009 04:38:54 +0900
In-Reply-To: <alpine.DEB.2.00.0912160849100.20887@tvnag.unkk.fr> (Daniel
	Stenberg's message of "Wed, 16 Dec 2009 08:49:58 +0100 (CET)")
Message-ID: <87oclwdqcx.fsf@broken.deisui.org>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daniel Stenberg <daniel@haxx.se> writes:

>> - Pageant support is not yet implemented but it should be easy if I take
>>  some code from the Putty source (putty/windows/winpgnt.c).  Is that
>>  OK?  The Putty License is the MIT License.
>
> Yes, that's perfectly fine license wise and even project wise.

Thanks for the info, now the Pageant support is ready.  While I've
confirmed it working on my MSYS environment on KVM, I would be grateful
if someone could look at the code, since I'm not a regular Windows user.

I've put the current patchset to:
http://www.unixuser.org/~ueno/software/libssh2-agent/

Regards,
-- 
Daiki Ueno
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Dec 18 21:45:26 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBIKjGZk015550;
	Fri, 18 Dec 2009 21:45:23 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBIKjEgb015546
	for <libssh2-devel@cool.haxx.se>; Fri, 18 Dec 2009 21:45:15 +0100
Received: (qmail 4503 invoked by uid 501); 18 Dec 2009 20:45:15 -0000
Message-ID: <20091218204515.4502.qmail@stuge.se>
Date: Fri, 18 Dec 2009 21:45:15 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: ssh-agent support
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <87y6leeyfp.fsf@broken.deisui.org>
	<20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
	<87aaxjn540.fsf_-_@broken.deisui.org>
	<alpine.DEB.2.00.0912160849100.20887@tvnag.unkk.fr>
	<87oclwdqcx.fsf@broken.deisui.org>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <87oclwdqcx.fsf@broken.deisui.org>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daiki Ueno wrote:
> Thanks for the info, now the Pageant support is ready.

The code generally looks good, but which agent to use must be
transparent for libssh2 users.

Also, we may want to look at reaching the OpenSSH ssh-agent in Cygwin
from native Win32. It's a little bit of work but might be a nice
further addon. The other way around should be simple. (Pageant from
Cygwin)

I think Pageant needs to be tried automatically on win32, both with
Cygwin and MSYS. Also, maybe the HWND should be stored in
LIBSSH2_AGENT on win32?


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Sat Dec 19 03:10:37 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBJ29Qdx026168;
	Sat, 19 Dec 2009 03:09:34 +0100
Received: from ivory3.scn-net.ne.jp (ivory3.scn-net.ne.jp [219.117.176.191])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBJ29NOP026125
	for <libssh2-devel@cool.haxx.se>; Sat, 19 Dec 2009 03:09:24 +0100
Received: from ([192.168.0.187]) (envelope sender: <ueno@unixuser.org>)
	by ivory3.scn-net.ne.jp with Active!Hunter esmtp server;
	Sat, 19 Dec 2009 11:09:20 +0900
Received: Received: from well-done.deisui.org (g187018.scn-net.ne.jp
	[202.83.187.18]) (authenticated)
	by blue17.scn-net.ne.jp (unknown) with ESMTP id nBJ29JBS022360
	for <libssh2-devel@cool.haxx.se>; Sat, 19 Dec 2009 11:09:20 +0900
Received: from 221x255x76x220.ap221.ftth.ucom.ne.jp ([221.255.76.220]
	helo=chilled) by well-done.deisui.org with esmtpsa
	(TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.69)
	(envelope-from <ueno@unixuser.org>) id 1NLokx-00062I-Qh
	for libssh2-devel@cool.haxx.se; Sat, 19 Dec 2009 11:09:19 +0900
From: Daiki Ueno <ueno@unixuser.org>
To: libssh2-devel@cool.haxx.se
Subject: Re: ssh-agent support
References: <87y6leeyfp.fsf@broken.deisui.org>
	<20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
	<87aaxjn540.fsf_-_@broken.deisui.org>
	<alpine.DEB.2.00.0912160849100.20887@tvnag.unkk.fr>
	<87oclwdqcx.fsf@broken.deisui.org>
	<20091218204515.4502.qmail@stuge.se>
Date: Sat, 19 Dec 2009 11:09:18 +0900
In-Reply-To: <20091218204515.4502.qmail@stuge.se> (Peter Stuge's message of
	"Fri, 18 Dec 2009 21:45:15 +0100")
Message-ID: <87iqc3emup.fsf@broken.deisui.org>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Peter Stuge <peter@stuge.se> writes:

> Also, we may want to look at reaching the OpenSSH ssh-agent in Cygwin
> from native Win32. It's a little bit of work but might be a nice
> further addon. The other way around should be simple. (Pageant from
> Cygwin)

Perhaps I'm missing something, it seems not that easy to communicate
with Cygwin process from native Win32 through the AF_LOCAL emulation of
Cygwin.

Here is my understanding:

Cygwin maps an AF_LOCAL address (a filename) to a locally listened port
of an AF_INET socket.  It does the following steps on connect():

1. open the given file on the cygwin filesystem(?), and read the socket
   type, the port number to connect, and the random secret.
2. connect() to the port.
3. exchange the random secret
4. exchange the credentials (pid/uid/gid)

So we need: pathname conversion to the Cygwin filesystem (for 1)
and credentioals of the last Cygwin process (for 4).

I personally think it is too complicated to be supported...  Can't we
assume that Cygwin DLL is linked if a user wants to access the Cygwin
ssh-agent?

> I think Pageant needs to be tried automatically on win32, both with
> Cygwin and MSYS. Also, maybe the HWND should be stored in
> LIBSSH2_AGENT on win32?

Yes, I also thought of that, but is it safer to find HWND each time
in the case Pageant is restarted?

Regards,
-- 
Daiki Ueno
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Sat Dec 19 19:32:56 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBJIWfno022695;
	Sat, 19 Dec 2009 19:32:51 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBJIWeIu022690
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Sat, 19 Dec 2009 19:32:40 +0100
Received: from mocca.josefsson.org (c80-216-24-211.bredband.comhem.se
	[80.216.24.211]) (authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBJIWdoC030390
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Sat, 19 Dec 2009 19:32:40 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2-devel@cool.haxx.se
Subject: Re: move example/simple/* to example/*?
References: <877hsk8kzw.fsf@mocca.josefsson.org>
	<20091218142337.7512.qmail@stuge.se>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091219:libssh2-devel@cool.haxx.se::/k/wrZr//jnzdke9:2tVL
Date: Sat, 19 Dec 2009 19:32:39 +0100
In-Reply-To: <20091218142337.7512.qmail@stuge.se> (Peter Stuge's message of
	"Fri, 18 Dec 2009 15:23:37 +0100")
Message-ID: <87bphuvmpk.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daniel Stenberg <daniel@haxx.se> writes:

>> My proposal is to move the files.  Objections?
>
> On the contrary, I agree!

Peter Stuge <peter@stuge.se> writes:

> Do it!

Done!

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Dec 21 08:58:52 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBL7wFwA032559;
	Mon, 21 Dec 2009 08:58:23 +0100
Received: from mail18.ca.com (mail18.ca.com [155.35.46.20])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBL6jju8017275
	for <libssh2-devel@cool.haxx.se>; Mon, 21 Dec 2009 07:45:46 +0100
Received: from INHYMS12.ca.com ([155.35.35.27]) by mail18.ca.com with
	Microsoft SMTPSVC(6.0.3790.3959); Mon, 21 Dec 2009 12:15:38 +0530
X-MimeOLE: Produced By Microsoft Exchange V6.5
Content-class: urn:content-classes:message
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01CA8209.34700E90"
Subject: RE: IPv6 Support Query 
Date: Mon, 21 Dec 2009 12:15:36 +0530
Message-ID: <AD2F648DE9801443A9F5C40F3426046980A6DB@INHYMS12.ca.com>
In-Reply-To: <4B5A315E-3EF2-4DFA-BD26-90B44EB25B6B@ambrosiasw.com>
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
Thread-Topic: IPv6 Support Query 
Thread-Index: Acp/8/fHU0s0TMsHTvy2jP6nvUjBzQCD9ZWA
References: <AD2F648DE9801443A9F5C40F342604697BA6F6@INHYMS12.ca.com>
	<4B5A315E-3EF2-4DFA-BD26-90B44EB25B6B@ambrosiasw.com>
From: "Kumar, Ashish" <Ashish.Kumar@ca.com>
To: "libssh2 development" <libssh2-devel@cool.haxx.se>
X-OriginalArrivalTime: 21 Dec 2009 06:45:38.0330 (UTC)
	FILETIME=[34A92FA0:01CA8209]
X-Mailman-Approved-At: Mon, 21 Dec 2009 08:58:14 +0100
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

This is a multi-part message in MIME format.

------_=_NextPart_001_01CA8209.34700E90
Content-Type: multipart/alternative;
	boundary="----_=_NextPart_002_01CA8209.34700E90"


------_=_NextPart_002_01CA8209.34700E90
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Hello ,

=20

Further to my investigation , I see some issues with below method .

=20

int _libssh2_transport_read(LIBSSH2_SESSION * session)

=20

in transport.c

=20

=20

Background : I have a linux BOX with IPv4 & IPv6 stack and IPv6 address
is a local-link address . sshd on linux box is listening on port 22
having ip6 socket . Now I have used libssh2 to do ssh in my code and it
has been working fine till we identified this issue .

I have created socket using IP4 address and port 22 and I did so because
I could connect using putty as well plink using ip4 address and port-22

=20

=20

I have used "libssh2_userauth_password" method for password
authentication which in-turn calls=20

int _libssh2_transport_read(LIBSSH2_SESSION * session)

to read from socket and data is even read from socket as in the below
call nread =3D 68 .

=20

nread =3D

                _libssh2_recv(session->socket_fd, &p->buf[remainbuf],

                              PACKETBUFSIZE - remainbuf,

                              LIBSSH2_SOCKET_RECV_FLAGS(session));

=20

=20

And even below call shows the data in encrypted format=20

=20

debugdump(session, "libssh2_transport_read() raw",&p->buf[remainbuf],
nread);

=20

=20

but as a result of call to below method=20

=20

rc =3D decrypt(session, &p->buf[p->readidx], block, blocksize);

=20

"p->buf" & "block" becomes an empty string with rc =3D 0 .

=20

Although "p->init" as well as "p->buf" are empty string . Even "block"
is an empty string .

=20

Furthere there is a call to=20

=20

p->padding_length =3D block[4]; where-in Junk value is copied .

=20

Further down below operation copies junk value=20

=20

memcpy(p->wptr, &block[5], blocksize - 5);

=20

Below method further down return 51.

rc =3D fullpacket(session, encrypted);

=20

when I see in=20

=20

static int

userauth_password(LIBSSH2_SESSION *session, const char *username,

                  unsigned int username_len, const char *password,

                  unsigned int password_len,

                  LIBSSH2_PASSWD_CHANGEREQ_FUNC((*passwd_change_cb)))

=20

I see that=20

session->userauth_pswd_data[0] =3D 3

=20

in password_response:

=20

And finally there is a return of value "-1" meaning password
authentication failed .

=20

On the contrary , I am easily able to login using putty using same user
password which I have used in the code .

=20

=20

I am sorry for being bit elaborate , but please help me identifying my
issue . I am even attaching a small screen-shot for your reference .

=20

=20

Thanks

Ashish

From: libssh2-devel-bounces@cool.haxx.se
[mailto:libssh2-devel-bounces@cool.haxx.se] On Behalf Of Jeremy Knope
Sent: Friday, December 18, 2009 8:38 PM
To: libssh2 development
Subject: Re: IPv6 Support Query=20

=20

I use libssh2 just fine with both IPv6 & IPv4.  Your program is the one
that has to establish the actual socket connection so it's up to you to
support it in you program.

--
Jeremy Knope / Software Developer / Ambrosia Software, Inc. --=20
http://www.AmbrosiaSW.com/

=20

On Dec 18, 2009, at 8:11 AM, Kumar, Ashish wrote:





Can you please tell me if libssh2 supports IPv6 ssh ?

=20

acm-suse9:/proc # lsof -i :22

COMMAND   PID USER   FD   TYPE DEVICE SIZE NODE NAME

sshd     4972 root    3u  IPv6   7480       TCP *:ssh (LISTEN)

sshd    25032 root    4u  IPv6 287309       TCP
acm-suse9.ca.com:ssh->kumas09-xp.ca.com:dsdn (ESTABLISHED)

sshd    25348 root    4u  IPv6 288321       TCP
acm-suse9.ca.com:ssh->kumas09-xp.ca.com:gv-us (ESTABLISHED)

=20

"while ((rc =3D libssh2_userauth_password(session, username, password)) =
=3D=3D
LIBSSH2_ERROR_EAGAIN);"

=20

this method is always returning -1 .

=20

Thanks & Regards,=20
Ashish Kumar=20




=20

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

=20


------_=_NextPart_002_01CA8209.34700E90
Content-Type: text/html;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" =
xmlns:o=3D"urn:schemas-microsoft-com:office:office" =
xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" =
xmlns=3D"http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=3DContent-Type content=3D"text/html; =
charset=3Dus-ascii">
<meta name=3DGenerator content=3D"Microsoft Word 12 (filtered medium)">
<base href=3D"x-msg://252/">
<style>
<!--
 /* Font Definitions */
 @font-face
	{font-family:SimSun;
	panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
	{font-family:SimSun;
	panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
	{font-family:Verdana;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
	{font-family:"\@SimSun";
	panose-1:2 1 6 0 3 1 1 1 1 1;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	margin-bottom:.0001pt;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:purple;
	text-decoration:underline;}
span.apple-style-span
	{mso-style-name:apple-style-span;}
span.apple-converted-space
	{mso-style-name:apple-converted-space;}
span.EmailStyle19
	{mso-style-type:personal-reply;
	font-family:"Calibri","sans-serif";
	color:#1F497D;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-size:10.0pt;}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
	{page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext=3D"edit">
  <o:idmap v:ext=3D"edit" data=3D"1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=3DEN-US link=3Dblue vlink=3Dpurple style=3D'word-wrap: =
break-word;
-webkit-nbsp-mode: space;-webkit-line-break: after-white-space'>

<div class=3DSection1>

<p class=3DMsoNormal><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Hello ,<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Further to my investigation , I see some issues with =
below
method .<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Courier New";
color:blue'>int</span><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>
_libssh2_transport_read(LIBSSH2_SESSION * session)<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>in =
transport.c<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal><b><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>Background
: I have a linux BOX with IPv4 &amp; IPv6 stack and IPv6 address is a
local-link address . sshd on linux box is listening on port 22 having =
ip6
socket . Now I have used libssh2 to do ssh in my code and it has been =
working
fine till we identified this issue .<o:p></o:p></span></b></p>

<p class=3DMsoNormal><b><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>I
have created socket using IP4 address and port 22 and I did so because I =
could
connect using putty as well plink using ip4 address and =
port-22<o:p></o:p></span></b></p>

<p class=3DMsoNormal><b><span =
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></b></p>

<p class=3DMsoNormal><b><span =
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></b></p>

<p class=3DMsoNormal><b><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>I
have used &#8220;</span></b><span =
style=3D'font-size:10.0pt;font-family:"Courier =
New"'>libssh2_userauth_password&#8221;
method for password authentication which in-turn calls =
<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Courier New";
color:blue'>int</span><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>
_libssh2_transport_read(LIBSSH2_SESSION * session)<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>to
read from socket and data is even read from socket as in the below call =
nread =3D
68 .<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>nread =3D<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;
_libssh2_recv(session-&gt;socket_fd, =
&amp;p-&gt;buf[remainbuf],<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
PACKETBUFSIZE - remainbuf,<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Courier =
New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
LIBSSH2_SOCKET_RECV_FLAGS(session));<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>And
even below call shows the data in encrypted format =
<o:p></o:p></span></p>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Courier =
New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>debugdump(session, <span =
style=3D'color:maroon'>&quot;libssh2_transport_read()
raw&quot;</span>,&amp;p-&gt;buf[remainbuf], =
nread);<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>but as a result of call to below method =
<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>rc =3D decrypt(session, =
&amp;p-&gt;buf[p-&gt;readidx],
block, blocksize);<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>&#8220;p-&gt;buf&#8221; &amp; =
&#8220;block&#8221;
becomes an empty string with rc =3D 0 .<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Although &#8220;p-&gt;init&#8221; as well as =
&#8220;p-&gt;buf&#8221;
are empty string . Even &#8220;block&#8221; is an empty string =
.<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Furthere there is a call to =
<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>p-&gt;padding_length =3D block[4]; where-in =
Junk value
is copied .<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Further down below operation copies junk =
value <o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>memcpy(p-&gt;wptr, &amp;block[5], blocksize - =
5);<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Below method further down return =
51.<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>rc =3D fullpacket(session, =
encrypted);<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>when I see in <o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New";color:blue'>static</span><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'> <span =
style=3D'color:blue'>int<o:p></o:p></span></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>userauth_password(LIBSSH2_SESSION *session, =
<span
style=3D'color:blue'>const</span> <span style=3D'color:blue'>char</span> =
*username,<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span style=3D'color:blue'>unsigned</span> <span =
style=3D'color:blue'>int</span>
username_len, <span style=3D'color:blue'>const</span> <span =
style=3D'color:blue'>char</span>
*password,<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<span style=3D'color:blue'>unsigned</span> <span =
style=3D'color:blue'>int</span>
password_len,<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier =
New"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
LIBSSH2_PASSWD_CHANGEREQ_FUNC((*passwd_change_cb)))<o:p></o:p></span></p>=


<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>I see that <o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>session-&gt;userauth_pswd_data[0] =3D =
3<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>in password_response:<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>And finally there is a return of value =
&#8220;-1&#8221;
meaning password authentication failed .<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>On the contrary , I am easily able to login =
using
putty using same user password which I have used in the code =
.<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>I am sorry for being bit elaborate , but =
please help
me identifying my issue . I am even attaching a small screen-shot for =
your
reference .<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Thanks<o:p></o:p></span></p>

<p class=3DMsoNormal style=3D'text-autospace:none'><span =
style=3D'font-size:10.0pt;
font-family:"Courier New"'>Ashish</span><span style=3D'font-size:11.0pt;
font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p>

<div>

<div style=3D'border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt =
0in 0in 0in'>

<p class=3DMsoNormal><b><span =
style=3D'font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span>=
</b><span
style=3D'font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
libssh2-devel-bounces@cool.haxx.se =
[mailto:libssh2-devel-bounces@cool.haxx.se] <b>On
Behalf Of </b>Jeremy Knope<br>
<b>Sent:</b> Friday, December 18, 2009 8:38 PM<br>
<b>To:</b> libssh2 development<br>
<b>Subject:</b> Re: IPv6 Support Query <o:p></o:p></span></p>

</div>

</div>

<p class=3DMsoNormal><o:p>&nbsp;</o:p></p>

<p class=3DMsoNormal>I use libssh2 just fine with both IPv6 &amp; IPv4.
&nbsp;Your program is the one that has to establish the actual socket
connection so it's up to you to support it in you =
program.<o:p></o:p></p>

<div>

<div>

<div>

<p class=3DMsoNormal><span =
style=3D'font-size:9.0pt;font-family:"Verdana","sans-serif";
color:black'>--<br>
Jeremy Knope / Software Developer / Ambrosia Software, Inc. --&nbsp;<a
href=3D"http://www.AmbrosiaSW.com/">http://www.AmbrosiaSW.com/</a><o:p></=
o:p></span></p>

</div>

</div>

<p class=3DMsoNormal><o:p>&nbsp;</o:p></p>

<div>

<div>

<p class=3DMsoNormal>On Dec 18, 2009, at 8:11 AM, Kumar, Ashish =
wrote:<o:p></o:p></p>

</div>

<p class=3DMsoNormal><br>
<br>
<o:p></o:p></p>

<div>

<div>

<div>

<p class=3DMsoNormal><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif"'>Can
you please tell me if libssh2 supports IPv6 ssh ?<o:p></o:p></span></p>

</div>

<div>

<p class=3DMsoNormal><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif"'>&nbsp;<o:p>=
</o:p></span></p>

</div>

<div>

<p class=3DMsoNormal><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif"'>acm-suse9:/=
proc
# lsof -i :22<o:p></o:p></span></p>

</div>

<div>

<p class=3DMsoNormal><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif"'>COMMAND&nbs=
p;&nbsp;
PID USER&nbsp;&nbsp; FD&nbsp;&nbsp; TYPE DEVICE SIZE NODE =
NAME<o:p></o:p></span></p>

</div>

<div>

<p class=3DMsoNormal><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";
background:yellow'>sshd&nbsp;&nbsp;&nbsp;&nbsp; 4972 =
root&nbsp;&nbsp;&nbsp;
3u&nbsp; IPv6&nbsp;&nbsp; 7480&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TCP =
*:ssh
(LISTEN)</span><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif"'><o:p></o:p>=
</span></p>

</div>

<div>

<p class=3DMsoNormal><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif"'>sshd&nbsp;&=
nbsp;&nbsp;
25032 root&nbsp;&nbsp;&nbsp; 4u&nbsp; IPv6
287309&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TCP
acm-suse9.ca.com:ssh-&gt;kumas09-xp.ca.com:dsdn =
(ESTABLISHED)<o:p></o:p></span></p>

</div>

<div>

<p class=3DMsoNormal><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif"'>sshd&nbsp;&=
nbsp;&nbsp;
25348 root&nbsp;&nbsp;&nbsp; 4u&nbsp; IPv6
288321&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TCP
acm-suse9.ca.com:ssh-&gt;kumas09-xp.ca.com:gv-us =
(ESTABLISHED)<o:p></o:p></span></p>

</div>

<div>

<p class=3DMsoNormal><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif"'>&nbsp;<o:p>=
</o:p></span></p>

</div>

<div>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Courier New";
color:blue'>&#8220;while</span><span class=3Dapple-converted-space><span
style=3D'font-size:10.0pt;font-family:"Courier =
New"'>&nbsp;</span></span><span
style=3D'font-size:10.0pt;font-family:"Courier New"'>((rc =3D
libssh2_userauth_password(session, username, password)) =3D=3D
LIBSSH2_ERROR_EAGAIN);&#8221;</span><span =
style=3D'font-size:11.0pt;font-family:
"Calibri","sans-serif"'><o:p></o:p></span></p>

</div>

<div>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>&nbsp;</span><span
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif"'><o:p></o:p>=
</span></p>

</div>

<div>

<p class=3DMsoNormal><span =
style=3D'font-size:10.0pt;font-family:"Courier New"'>this
method is always returning -1 .</span><span =
style=3D'font-size:11.0pt;font-family:
"Calibri","sans-serif"'><o:p></o:p></span></p>

</div>

<div>

<p class=3DMsoNormal><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif"'>&nbsp;<o:p>=
</o:p></span></p>

</div>

<div>

<p class=3DMsoNormal><b><span lang=3DEN-AU =
style=3D'font-size:10.0pt;font-family:
"Verdana","sans-serif";color:blue'>Thanks &amp; Regards,</span></b><span
class=3Dapple-converted-space><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";
color:blue'>&nbsp;</span></span><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";
color:blue'><br>
</span><b><span lang=3DEN-AU =
style=3D'font-size:10.0pt;font-family:"Verdana","sans-serif";
color:blue'>Ashish Kumar</span></b><span =
class=3Dapple-converted-space><span
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:blue'>=
&nbsp;</span></span><span
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif";color:blue'>=
<br>
<br>
<br>
</span><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif"'><o:p></o:p>=
</span></p>

</div>

<div>

<p class=3DMsoNormal><span =
style=3D'font-size:11.0pt;font-family:"Calibri","sans-serif"'>&nbsp;<o:p>=
</o:p></span></p>

</div>

</div>

<p class=3DMsoNormal><span =
style=3D'font-size:13.5pt;font-family:"Verdana","sans-serif"'>___________=
____________________________________<br>
libssh2-devel<span class=3Dapple-converted-space>&nbsp;</span><a
href=3D"http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel">http:=
//cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel</a><o:p></o:p></spa=
n></p>

</div>

</div>

<p class=3DMsoNormal><o:p>&nbsp;</o:p></p>

</div>

</div>

</body>

</html>

------_=_NextPart_002_01CA8209.34700E90--

------_=_NextPart_001_01CA8209.34700E90
Content-Type: application/msword;
	name="Screen-Shot-ssh.doc"
Content-Transfer-Encoding: base64
Content-Description: Screen-Shot-ssh.doc
Content-Disposition: attachment;
	filename="Screen-Shot-ssh.doc"

0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAAFAAAAFgIAAAAAAAAA
EAAAGAIAAAEAAAD+////AAAAABECAAASAgAAEwIAABQCAAAVAgAA////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////s
pcEAA4AJBAAA+BK/AAAAAAAAEAAAAAAACAAACAgAAA4AYmpiauvI68gAAAAAAAAAAAAAAAAAAAAA
AAAJBBYANA4AAImiAACJogAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//w8AAAAA
AAAAAAD//w8AAAAAAAAAAAD//w8AAAAAAAAAAAAAAAAAAAAAALcAAAAAADoGAAAAAAAAOgYAAH0T
AAAAAAAAfRMAAAAAAAB9EwAAAAAAAH0TAAAAAAAAfRMAABQAAAAAAAAAAAAAAP////8AAAAAkRMA
AAAAAACREwAAAAAAAJETAAAAAAAAkRMAAAwAAACdEwAADAAAAJETAAAAAAAAdxUAAKIBAACpEwAA
AAAAAKkTAAAAAAAAqRMAAAAAAACpEwAAAAAAAKkTAAAAAAAAhBQAAAAAAACEFAAAAAAAAIQUAAAA
AAAA9hQAAAIAAAD4FAAAAAAAAPgUAAAAAAAA+BQAAAAAAAD4FAAAAAAAAPgUAAAAAAAA+BQAACQA
AAAZFwAAogIAALsZAABaAAAAHBUAABUAAAAAAAAAAAAAAAAAAAAAAAAAfRMAAAAAAACEFAAAAAAA
AAAAAAAAAAAAAAAAAAAAAACEFAAAAAAAAIQUAAAAAAAAhBQAAAAAAACEFAAAAAAAABwVAAAAAAAA
AAAAAAAAAAB9EwAAAAAAAH0TAAAAAAAAqRMAAAAAAAAAAAAAAAAAAKkTAADbAAAAMRUAABYAAAC6
FAAAAAAAALoUAAAAAAAAuhQAAAAAAACEFAAAFgAAAH0TAAAAAAAAqRMAAAAAAAB9EwAAAAAAAKkT
AAAAAAAA9hQAAAAAAAAAAAAAAAAAALoUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAhBQAAAAAAAD2FAAAAAAAAAAAAAAAAAAAuhQAAAAAAAAAAAAA
AAAAALoUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuhQAAAAAAACpEwAAAAAAAP////8AAAAAcH8noQiC
ygEAAAAAAAAAAJETAAAAAAAAmhQAABYAAAC6FAAAAAAAAAAAAAAAAAAA4hQAABQAAABHFQAAMAAA
AHcVAAAAAAAAuhQAAAAAAAAVGgAAAAAAALAUAAAKAAAAFRoAAAAAAAC6FAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAABUaAAAAAAAAAAAAAAAAAAB9EwAAAAAAALoUAAAoAAAAhBQAAAAAAACEFAAAAAAAALoU
AAAAAAAAhBQAAAAAAACEFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhBQA
AAAAAACEFAAAAAAAAIQUAAAAAAAAHBUAAAAAAAAcFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAuhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQUAAAA
AAAAhBQAAAAAAACEFAAAAAAAAHcVAAAAAAAAhBQAAAAAAACEFAAAAAAAAIQUAAAAAAAAhBQAAAAA
AAAAAAAAAAAAAP////8AAAAA/////wAAAAD/////AAAAAAAAAAAAAAAA/////wAAAAD/////AAAA
AP////8AAAAA/////wAAAAD/////AAAAAP////8AAAAA/////wAAAAD/////AAAAAP////8AAAAA
/////wAAAAD/////AAAAAP////8AAAAA/////wAAAAD/////AAAAABUaAAAAAAAAhBQAAAAAAACE
FAAAAAAAAIQUAAAAAAAAhBQAAAAAAACEFAAAAAAAAIQUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEFAAAAAAAAIQUAAAAAAAAhBQA
AAAAAAA6BgAACQwAAEMSAAA6AQAABQASAQAACQQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0BDQ0N
DQENAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAEI
AAACCAAABggAAAcIAAAICAAA9uj219MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAGFmhfBlQAACADanvhAQAVaH03OQAWaOI95ABVCAFtSAAEbkgABHUI
AQAaA2oAAAAAFmj7eeQAVQgBbUgABG5IAAR1CAEAERZo+3nkAG1IAARuSAAEdQgBAAUACAAAAQgA
AAMIAAAECAAABQgAAAYIAAAICAAA/QAAAAAAAAAAAAAAAP0AAAAAAAAAAAAAAAD9AAAAAAAAAAAA
AAAA/QAAAAAAAAAAAAAAAP0AAAAAAAAAAAAAAAD9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABjIAMZBoATpw
XwZUAB+w0C8gsOA9IbCgBSKwoAUjkKAFJJCgBSWwAAAXsNACGLDQAgyQ0AIAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
7zTRVL7oKfzsYqhToLU0k0C0fj0Fur8SYHKUwuUaYPqVh2J6QMAlyM7ON4ShZwToeIBproANNc/s
+/IJqJER+tHoUIfPD9AckiAMEYaBIxC4BGSHCMPAEQhcgn8EOPB8kQSEQCAIkB3IawT4xRdfDERi
iNK62wQrRNkhsV4RANPpm6biVfPfMALVjGETLJf7uv2G6vWLrB08wMgI/ag1Bw8wwhBh6AcCgSdB
dogwDByBwCUgOwwuhlRp1E2wAs8FSUAIBBEBRwIMnfIgSg+uKMQWgotngNL6sqkEWLSQJifNGNpe
SDMawMLJyTbICP2uZdIOEYYIQ78RCDwhskOEYeAIBC4B2WEQMaSKQv2cwIFFEkKHANGZ7PYAhy4b
JBkhgBBACCAEEAIIAYQAQgAhgBBACCAEEAJ9AYEexyD1BYWQDggBhABCACGAEEAIIAQQAggBhABC
ACGAEAgFAv8P5dEl0lrws0EAAAAASUVORK5CYIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAGoEEQASAAEACwEPAAcAAwAEAAMAAAAEAAgAAACYAAAAngAAAJ4AAACeAAAA
ngAAAJ4AAACeAAAAngAAAJ4AAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAB2
AgAAdgIAAHYCAAB2AgAAdgIAAHYCAAB2AgAAdgIAAHYCAAA2BgAANgYAADYGAAA2BgAANgYAADYG
AAA+AgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYA
ADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAA
qAAAADYGAAA2BgAAFgAAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAAuAAAADYGAAA2
BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAAGgBAABIAQAANgYAADYG
AAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYA
ADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAA
NgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2
BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYGAAA2BgAANgYAADYG
AAA2BgAANgYAADYGAAA2BgAANgYAADYGAACwAwAANgYAADIGAAAYAAAAwAMAANADAADgAwAA8AMA
AAAEAAAQBAAAIAQAADAEAABABAAAUAQAAGAEAABwBAAAgAQAAJAEAADAAwAA0AMAAOADAADwAwAA
AAQAABAEAAAyBgAAKAIAANgBAADoAQAAIAQAADAEAABABAAAUAQAAGAEAABwBAAAgAQAAJAEAADA
AwAA0AMAAOADAADwAwAAAAQAABAEAAAgBAAAMAQAAEAEAABQBAAAYAQAAHAEAACABAAAkAQAAMAD
AADQAwAA4AMAAPADAAAABAAAEAQAACAEAAAwBAAAQAQAAFAEAABgBAAAcAQAAIAEAACQBAAAwAMA
ANADAADgAwAA8AMAAAAEAAAQBAAAIAQAADAEAABABAAAUAQAAGAEAABwBAAAgAQAAJAEAADAAwAA
0AMAAOADAADwAwAAAAQAABAEAAAgBAAAMAQAAEAEAABQBAAAYAQAAHAEAACABAAAkAQAAMADAADQ
AwAA4AMAAPADAAAABAAAEAQAACAEAAAwBAAAQAQAAFAEAABgBAAAcAQAAIAEAACQBAAAOAEAAFgB
AAD4AQAACAIAABgCAABWAgAAfgIAACAAAABPSgMAUEoEAFFKAwBfSAEEbUgJBG5IBAhzSAkEdEgE
CAAAAABOAABg8f8CAE4ADBAAAF8GVAAAAAYATgBvAHIAbQBhAGwAAAAMAAAAEmQUAQEAFKTIABwA
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
4TP7ZUJvqEO+D7UVwYcGTQzCBqL6km08kC6QdnAEjZMdtMGkSVnTZq2Ttlq+WV9wp1vwPWFsLdlZ
/H1OYxfNmcvOycWLNHZmYcfWdmyhqcGzJ1MUhsb5QcY4xnzSKn914qN74OgtuN+fMCVNMME3JYGh
9RyYPIDktxzN0o2/AAAA//8DAFBLAwQUAAYACAAAACEADdGQn7YAAAAbAQAAJwAAAHRoZW1lL3Ro
ZW1lL19yZWxzL3RoZW1lTWFuYWdlci54bWwucmVsc4SPTQrCMBSE94J3CG9v07oQkSbdiNCt1AOE
5DUNNj8kUeztDa4sCC6HYb6ZabuXnckTYzLeMWiqGgg66ZVxmsFtuOyOQFIWTonZO2SwYIKObzft
FWeRSyhNJiRSKC4xmHIOJ0qTnNCKVPmArjijj1bkIqOmQci70Ej3dX2g8ZsBfMUkvWIQe9UAGZZQ
mv+z/TgaiWcvHxZd/lFBc9mFBSiixszgI5uqTATKW7q6xN8AAAD//wMAUEsBAi0AFAAGAAgAAAAh
AIKKvBP6AAAAHAIAABMAAAAAAAAAAAAAAAAAAAAAAFtDb250ZW50X1R5cGVzXS54bWxQSwECLQAU
AAYACAAAACEApdan58AAAAA2AQAACwAAAAAAAAAAAAAAAAArAQAAX3JlbHMvLnJlbHNQSwECLQAU
AAYACAAAACEAa3mWFoMAAACKAAAAHAAAAAAAAAAAAAAAAAAUAgAAdGhlbWUvdGhlbWUvdGhlbWVN
YW5hZ2VyLnhtbFBLAQItABQABgAIAAAAIQCWta3ilgYAAFAbAAAWAAAAAAAAAAAAAAAAANECAAB0
aGVtZS90aGVtZS90aGVtZTEueG1sUEsBAi0AFAAGAAgAAAAhAA3RkJ+2AAAAGwEAACcAAAAAAAAA
AAAAAAAAmwkAAHRoZW1lL3RoZW1lL19yZWxzL3RoZW1lTWFuYWdlci54bWwucmVsc1BLBQYAAAAA
BQAFAF0BAACWCgAAAAA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRh
bG9uZT0ieWVzIj8+DQo8YTpjbHJNYXAgeG1sbnM6YT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZv
cm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L21haW4iIGJnMT0ibHQxIiB0eDE9ImRrMSIgYmcyPSJs
dDIiIHR4Mj0iZGsyIiBhY2NlbnQxPSJhY2NlbnQxIiBhY2NlbnQyPSJhY2NlbnQyIiBhY2NlbnQz
PSJhY2NlbnQzIiBhY2NlbnQ0PSJhY2NlbnQ0IiBhY2NlbnQ1PSJhY2NlbnQ1IiBhY2NlbnQ2PSJh
Y2NlbnQ2IiBobGluaz0iaGxpbmsiIGZvbEhsaW5rPSJmb2xIbGluayIvPgAAAAAIAAAACwAADgAA
AAD/////AAgAAAgIAAAFAAAAAAgAAAgIAAAGAAAADwAA8DgAAAAAAAbwGAAAAAIIAAACAAAAAQAA
AAEAAAABAAAAAgAAAEAAHvEQAAAA//8AAAAA/wCAgIAA9wAAEAAPAALwkgAAABAACPAIAAAAAQAA
AAEEAAAPAAPwMAAAAA8ABPAoAAAAAQAJ8BAAAAAAAAAAAAAAAAAAAAAAAAAAAgAK8AgAAAAABAAA
BQAAAA8ABPBCAAAAEgAK8AgAAAABBAAAAA4AAFMAC/AeAAAAvwEAABAAywEAAAAA/wEAAAgABAMJ
AAAAPwMBAAEAAAAR8AQAAAABAAAAAAAAAAEAAAACAAAACgAAAAcABAAHAAAAAAABAAAAAwAAAAoA
AAAHAAQABwAAAAAACgAAAAcABAAAAAQAAAAIAAAA5QAAAAAAAAADAAAAXwZUAPMTkwDiPeQA+3nk
AAAAAAAIAAAACgAAAAAAAAABAAAA/0ABgAEAAgAAAAIAAAAAaLEDsAKwAgIAAAAAAAAAAgAAAAAA
AAACEAAAAAAAAAAIAAAAWAAAEABAAAD//wEAAAAHAFUAbgBrAG4AbwB3AG4A//8BAAgAAAAAAAAA
AAAAAP//AQAAAAAA//8AAAIA//8AAAAA//8AAAIA//8AAAAABwAAAEcekAEAAAICBgMFBAUCAwSH
KgAgAAAAgAgAAAAAAAAA/wEAAAAAAABUAGkAbQBlAHMAIABOAGUAdwAgAFIAbwBtAGEAbgAAADUe
kAECAAUFAQIBBwYCBQcAAAAAAAAAEAAAAAAAAAAAAAAAgAAAAABTAHkAbQBiAG8AbAAAADMukAEA
AAILBgQCAgICAgSHKgAgAAAAgAgAAAAAAAAA/wEAAAAAAABBAHIAaQBhAGwAAAA3LpABAAACDwUC
AgIEAwIE7wIAoHsgAEAAAAAAAAAAAJ8AAAAAAAAAQwBhAGwAaQBiAHIAaQAAADsGkAGGBwIBBgAD
AQEBAQEDAAAAAAAOCBAAAAAAAAAAAQAEAAAAAABTAGkAbQBTAHUAbgAAAItbU08AADUukAEAAAIL
BgQDBQQEAgSHKgBhAAAAgAgAAAAAAAAA/wEBAAAAAABUAGEAaABvAG0AYQAAAEEekAEAAAIEBQMF
BAYDAgTvAgCg6yAAQgAAAAAAAAAAnwAAAAAAAABDAGEAbQBiAHIAaQBhACAATQBhAHQAaAAAACIA
BADxCIgYAPDQAgAAaAEAAAAA9arcJgur3CYAAAAAAgARAAAAAQAAAAcAAAACAAEAAAAEAAOQAQAA
AAEAAAAHAAAAAgABAAAAAQAAAAAAAABxAwDwEAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACg
BaAFtAC0AIGBcjAAAAAAAAAAAAAAAAAAAAcAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAEygxEA8BAACAD8
/QEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISFgAAAAACfD/DwEIJFAAAOQEAAD///9/////f///
/3////9/////f////3////9/8xOTAAAEAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQQAAAAAAAAA
AAAAAAAAAAAAAAAQHAAABgAAAAAAAAAAAHgAAAB4AAAAAAAAAAAAAACgBQAA//8SAAAAAAAAAAAA
AAAAAAAADABBAHMAaABpAHMAaAAgAEsAdQBtAGEAcgAMAEEAcwBoAGkAcwBoACAASwB1AG0AYQBy
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+
/wAABQECAAAAAAAAAAAAAAAAAAAAAAABAAAA4IWf8vlPaBCrkQgAKyez2TAAAAB8AQAAEQAAAAEA
AACQAAAAAgAAAJgAAAADAAAApAAAAAQAAACwAAAABQAAAMgAAAAGAAAA1AAAAAcAAADgAAAACAAA
APQAAAAJAAAADAEAABIAAAAYAQAACgAAADgBAAAMAAAARAEAAA0AAABQAQAADgAAAFwBAAAPAAAA
ZAEAABAAAABsAQAAEwAAAHQBAAACAAAA5AQAAB4AAAAEAAAAAAAAAB4AAAAEAAAAAAAAAB4AAAAQ
AAAAQXNoaXNoIEt1bWFyAAAAAB4AAAAEAAAAAAAAAB4AAAAEAAAAAAAAAB4AAAAMAAAATm9ybWFs
LmRvdG0AHgAAABAAAABBc2hpc2ggS3VtYXIAAAAAHgAAAAQAAAAyAAAAHgAAABgAAABNaWNyb3Nv
ZnQgT2ZmaWNlIFdvcmQAAABAAAAAAKb3XwIAAABAAAAAAHoICwaCygFAAAAAAGbDjgiCygEDAAAA
AgAAAAMAAAABAAAAAwAAAAcAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v8AAAUBAgAA
AAAAAAAAAAAAAAAAAAAAAQAAAALVzdWcLhsQk5cIACss+a4wAAAA7AAAAAwAAAABAAAAaAAAAA8A
AABwAAAABQAAAIAAAAAGAAAAiAAAABEAAACQAAAAFwAAAJgAAAALAAAAoAAAABAAAACoAAAAEwAA
ALAAAAAWAAAAuAAAAA0AAADAAAAADAAAAM0AAAACAAAA5AQAAB4AAAAIAAAAQ0EgSW5jLgADAAAA
AQAAAAMAAAABAAAAAwAAAAcAAAADAAAAAAAMAAsAAAAAAAAACwAAAAAAAAALAAAAAAAAAAsAAAAA
AAAAHhAAAAEAAAABAAAAAAwQAAACAAAAHgAAAAYAAABUaXRsZQADAAAAAQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAF
AAAABgAAAAcAAAD+////CQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMA
AAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAA
ACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAA
MAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+
AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAAEwA
AABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAABZAAAAWgAA
AFsAAABcAAAAXQAAAF4AAABfAAAAYAAAAGEAAABiAAAAYwAAAGQAAABlAAAAZgAAAGcAAABoAAAA
aQAAAGoAAABrAAAAbAAAAG0AAABuAAAAbwAAAHAAAABxAAAAcgAAAHMAAAB0AAAAdQAAAHYAAAB3
AAAAeAAAAHkAAAB6AAAAewAAAHwAAAB9AAAAfgAAAH8AAACAAAAAgQAAAIIAAACDAAAAhAAAAIUA
AACGAAAAhwAAAIgAAACJAAAAigAAAIsAAACMAAAAjQAAAI4AAACPAAAAkAAAAJEAAACSAAAAkwAA
AJQAAACVAAAAlgAAAJcAAACYAAAAmQAAAJoAAACbAAAAnAAAAJ0AAACeAAAAnwAAAKAAAAChAAAA
ogAAAKMAAACkAAAApQAAAKYAAACnAAAAqAAAAKkAAACqAAAAqwAAAKwAAACtAAAArgAAAK8AAACw
AAAAsQAAALIAAACzAAAAtAAAALUAAAC2AAAAtwAAALgAAAC5AAAAugAAALsAAAC8AAAAvQAAAL4A
AAC/AAAAwAAAAMEAAADCAAAAwwAAAMQAAADFAAAAxgAAAMcAAADIAAAAyQAAAMoAAADLAAAAzAAA
AM0AAADOAAAAzwAAANAAAADRAAAA0gAAANMAAADUAAAA1QAAANYAAADXAAAA2AAAANkAAADaAAAA
2wAAANwAAADdAAAA3gAAAN8AAADgAAAA4QAAAOIAAADjAAAA5AAAAOUAAADmAAAA5wAAAOgAAADp
AAAA6gAAAOsAAADsAAAA7QAAAO4AAADvAAAA8AAAAPEAAADyAAAA8wAAAPQAAAD1AAAA9gAAAPcA
AAD4AAAA+QAAAPoAAAD7AAAA/AAAAP0AAAD+AAAA/wAAAAABAAABAQAAAgEAAAMBAAAEAQAABQEA
AAYBAAAHAQAACAEAAAkBAAAKAQAACwEAAAwBAAANAQAADgEAAA8BAAAQAQAAEQEAABIBAAATAQAA
FAEAABUBAAAWAQAAFwEAABgBAAAZAQAAGgEAABsBAAAcAQAAHQEAAB4BAAAfAQAAIAEAACEBAAAi
AQAAIwEAACQBAAAlAQAAJgEAACcBAAAoAQAAKQEAACoBAAArAQAALAEAAC0BAAAuAQAALwEAADAB
AAAxAQAAMgEAADMBAAA0AQAANQEAADYBAAA3AQAAOAEAADkBAAA6AQAAOwEAADwBAAA9AQAAPgEA
AD8BAABAAQAAQQEAAEIBAABDAQAARAEAAEUBAABGAQAARwEAAEgBAABJAQAASgEAAEsBAABMAQAA
TQEAAE4BAABPAQAAUAEAAFEBAABSAQAAUwEAAFQBAABVAQAAVgEAAFcBAABYAQAAWQEAAFoBAABb
AQAAXAEAAF0BAABeAQAAXwEAAGABAABhAQAAYgEAAGMBAABkAQAAZQEAAGYBAABnAQAAaAEAAGkB
AABqAQAAawEAAGwBAABtAQAAbgEAAG8BAABwAQAAcQEAAHIBAABzAQAAdAEAAHUBAAB2AQAAdwEA
AHgBAAB5AQAAegEAAHsBAAB8AQAAfQEAAH4BAAB/AQAAgAEAAIEBAACCAQAAgwEAAIQBAACFAQAA
hgEAAIcBAACIAQAAiQEAAIoBAACLAQAAjAEAAI0BAACOAQAAjwEAAJABAACRAQAAkgEAAJMBAACU
AQAAlQEAAJYBAACXAQAAmAEAAJkBAACaAQAAmwEAAJwBAACdAQAAngEAAJ8BAACgAQAAoQEAAKIB
AACjAQAApAEAAKUBAACmAQAApwEAAKgBAACpAQAAqgEAAKsBAACsAQAArQEAAK4BAACvAQAAsAEA
ALEBAACyAQAAswEAALQBAAC1AQAAtgEAALcBAAC4AQAAuQEAALoBAAC7AQAAvAEAAL0BAAC+AQAA
vwEAAMABAADBAQAAwgEAAMMBAADEAQAAxQEAAMYBAADHAQAAyAEAAMkBAADKAQAAywEAAMwBAADN
AQAAzgEAAM8BAADQAQAA0QEAANIBAADTAQAA1AEAANUBAADWAQAA1wEAANgBAADZAQAA2gEAANsB
AADcAQAA3QEAAN4BAADfAQAA4AEAAOEBAADiAQAA4wEAAOQBAADlAQAA5gEAAOcBAADoAQAA6QEA
AOoBAADrAQAA7AEAAO0BAADuAQAA7wEAAPABAADxAQAA8gEAAP7////0AQAA9QEAAPYBAAD3AQAA
+AEAAPkBAAD6AQAA+wEAAPwBAAD9AQAA/gEAAP8BAAAAAgAA/v///wICAAADAgAABAIAAAUCAAAG
AgAABwIAAAgCAAD+////CgIAAAsCAAAMAgAADQIAAA4CAAAPAgAAEAIAAP7////9/////f////3/
///9/////f///xcCAAD+/////v////7/////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////9SAG8AbwB0ACAARQBuAHQAcgB5AAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAFAf//////////AwAA
AAYJAgAAAAAAwAAAAAAAAEYAAAAAAAAAAAAAAABAITihCILKARkCAACAAAAAAAAAAEQAYQB0AGEA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK
AAIB////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAPPU
AwAAAAAAMQBUAGEAYgBsAGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAA4AAgEBAAAABgAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAADzAQAAFRoAAAAAAABXAG8AcgBkAEQAbwBjAHUAbQBlAG4AdAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgACAQIAAAAFAAAA/////wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAUAUwB1AG0AbQBhAHIAeQBJAG4AZgBv
AHIAbQBhAHQAaQBvAG4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAIB////////////////
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIAAAAQAAAAAAAABQBEAG8AYwB1
AG0AZQBuAHQAUwB1AG0AbQBhAHIAeQBJAG4AZgBvAHIAbQBhAHQAaQBvAG4AAAAAAAAAAAAAADgA
AgEEAAAA//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAgAAABAA
AAAAAAABAEMAbwBtAHAATwBiAGoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAEgACAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////AAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAP7/////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////8BAP7/AwoAAP////8GCQIAAAAAAMAAAAAA
AABGJwAAAE1pY3Jvc29mdCBPZmZpY2UgV29yZCA5Ny0yMDAzIERvY3VtZW50AAoAAABNU1dvcmRE
b2MAEAAAAFdvcmQuRG9jdW1lbnQuOAD0ObJxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==

------_=_NextPart_001_01CA8209.34700E90
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

------_=_NextPart_001_01CA8209.34700E90--

From libssh2-devel-bounces@cool.haxx.se  Mon Dec 21 10:30:10 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBL9TqV1002479;
	Mon, 21 Dec 2009 10:29:59 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBL9TpsZ002474
	for <libssh2-devel@cool.haxx.se>; Mon, 21 Dec 2009 10:29:51 +0100
Received: (qmail 27396 invoked by uid 501); 21 Dec 2009 09:29:51 -0000
Message-ID: <20091221092951.27395.qmail@stuge.se>
Date: Mon, 21 Dec 2009 10:29:51 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: IPv6 Support Query
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <AD2F648DE9801443A9F5C40F342604697BA6F6@INHYMS12.ca.com>
	<4B5A315E-3EF2-4DFA-BD26-90B44EB25B6B@ambrosiasw.com>
	<AD2F648DE9801443A9F5C40F3426046980A6DB@INHYMS12.ca.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <AD2F648DE9801443A9F5C40F3426046980A6DB@INHYMS12.ca.com>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Kumar, Ashish wrote:
> On the contrary , I am easily able to login using putty using same
> user password which I have used in the code .

Do you get any error messages on the server side when your libssh2
client is trying to log in?


> I am sorry for being bit elaborate ,

Elaborate can be good, depending on what you say. :) I didn't quite
get how the communication looked between server and client, it would
be helpful if you enable transport layer tracing in libssh2 and send
the full log to the list.


> but please help me identifying my issue . I am even attaching a
> small screen-shot for your reference .

You should keep in mind that most if not all libssh2 developers are
not primarily working on Windows platforms. Especially in open source
communities it is strongly frowned upon to use Microsoft Word
documents. (Because it is a proprietary file format, which makes it
difficult to open, and because it is an unneccessary extra step for
readers.) If you wish to send a screenshot to the mailing list then
please attach the image file as is, or upload it to a web server and
include a link to it in your message.

But the most useful information is the libssh2 trace from when you
see the problem, as well as full debug messages from the server that
your application tries to log in to. (Note that you may need to
rebuild libssh2 with debugging enabled for tracing to actually work.)

A wild guess is that your server requires keyboard-interactive
authentication and not the password method. kbdint can be used also
for passwords so it is not easy to see which method is being used
unless you look at protocol level messages or the server debug
output.


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Dec 21 10:35:45 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBL9ZeHD005112;
	Mon, 21 Dec 2009 10:35:43 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBL9ZcRr005103
	for <libssh2-devel@cool.haxx.se>; Mon, 21 Dec 2009 10:35:39 +0100
Received: (qmail 28477 invoked by uid 501); 21 Dec 2009 09:35:39 -0000
Message-ID: <20091221093539.28476.qmail@stuge.se>
Date: Mon, 21 Dec 2009 10:35:39 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: IPv6 Support Query
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <AD2F648DE9801443A9F5C40F342604697BA6F6@INHYMS12.ca.com>
	<4B5A315E-3EF2-4DFA-BD26-90B44EB25B6B@ambrosiasw.com>
	<AD2F648DE9801443A9F5C40F3426046980A6DB@INHYMS12.ca.com>
	<20091221092951.27395.qmail@stuge.se>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <20091221092951.27395.qmail@stuge.se>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Peter Stuge wrote:
> Kumar, Ashish wrote:
> > please help me identifying my issue

In any case the problem can not be an IPv6 issue with libssh2. I'm
sure that we can find out what it is though.


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Dec 21 11:43:49 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBLAhFZb014458;
	Mon, 21 Dec 2009 11:43:22 +0100
Received: from ivory3.scn-net.ne.jp (ivory3.scn-net.ne.jp [219.117.176.191])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBLAhBH1014316
	for <libssh2-devel@cool.haxx.se>; Mon, 21 Dec 2009 11:43:12 +0100
Received: from ([192.168.0.187]) (envelope sender: <ueno@unixuser.org>)
	by ivory3.scn-net.ne.jp with Active!Hunter esmtp server;
	Mon, 21 Dec 2009 19:43:08 +0900
Received: Received: from well-done.deisui.org (g187018.scn-net.ne.jp
	[202.83.187.18]) (authenticated)
	by blue17.scn-net.ne.jp (unknown) with ESMTP id nBLAh8CM005464
	for <libssh2-devel@cool.haxx.se>; Mon, 21 Dec 2009 19:43:08 +0900
Received: from 221x255x76x220.ap221.ftth.ucom.ne.jp ([221.255.76.220]
	helo=chilled) by well-done.deisui.org with esmtpsa
	(TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.69)
	(envelope-from <ueno@unixuser.org>) id 1NMfjH-0001pL-U7
	for libssh2-devel@cool.haxx.se; Mon, 21 Dec 2009 19:43:07 +0900
From: Daiki Ueno <ueno@unixuser.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: ssh-agent support
References: <87y6leeyfp.fsf@broken.deisui.org>
	<20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
	<87aaxjn540.fsf_-_@broken.deisui.org>
	<871viveoz5.fsf@mocca.josefsson.org>
Date: Mon, 21 Dec 2009 19:43:06 +0900
In-Reply-To: <871viveoz5.fsf@mocca.josefsson.org> (Simon Josefsson's message
	of "Wed, 16 Dec 2009 01:34:22 +0100")
Message-ID: <87my1chakl.fsf@broken.deisui.org>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Simon Josefsson <simon@josefsson.org> writes:

> I propose to push the patch to be able to do further testing of it,
> unless anyone has any general objection to this approach?

FWIW, I have tried to minimize the number of patches using git rebase -i
agaist the current origin/master (after the example/simple -> example
move).  Now there are only three patches orthogonal each other:

http://www.unixuser.org/~ueno/software/libssh2-agent/

So when you push the change, please consider using the newer version
instead of the one I posted to the list.  The patches on the Web may be
updated if there are conflicting changes to the repository, but I won't
do any further development until they are merged into the tree.

Regards,
-- 
Daiki Ueno
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Dec 21 12:09:25 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBLB9Im4000607;
	Mon, 21 Dec 2009 12:09:23 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBLB9Gb9000599
	for <libssh2-devel@cool.haxx.se>; Mon, 21 Dec 2009 12:09:16 +0100
Received: (qmail 14267 invoked by uid 501); 21 Dec 2009 11:09:16 -0000
Message-ID: <20091221110916.14266.qmail@stuge.se>
Date: Mon, 21 Dec 2009 12:09:16 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: ssh-agent support
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <87y6leeyfp.fsf@broken.deisui.org>
	<20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
	<87aaxjn540.fsf_-_@broken.deisui.org>
	<871viveoz5.fsf@mocca.josefsson.org>
	<87my1chakl.fsf@broken.deisui.org>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <87my1chakl.fsf@broken.deisui.org>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daiki Ueno wrote:
> FWIW, I have tried to minimize the number of patches using git
> rebase -i agaist the current origin/master (after the
> example/simple -> example move). 
> Now there are only three patches orthogonal each other:
> 
> http://www.unixuser.org/~ueno/software/libssh2-agent/

Nice!

Please check the logic in libssh2_agent_connect() ? It looks like it
will return failure if _any_ of possibly several supported backends
are not running, rather than failing when _none_ of them are
reachable? Also the comment mentions NULL, but code returns 0.

I think this can be pushed.


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Dec 21 12:21:04 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBLBKv7n006928;
	Mon, 21 Dec 2009 12:21:01 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBLBKs1Z006808
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Mon, 21 Dec 2009 12:20:56 +0100
Received: from mocca (c80-216-24-211.bredband.comhem.se [80.216.24.211])
	(authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBLBKj8r012171
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Mon, 21 Dec 2009 12:20:52 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: ssh-agent support
References: <87y6leeyfp.fsf@broken.deisui.org>
	<20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
	<87aaxjn540.fsf_-_@broken.deisui.org>
	<871viveoz5.fsf@mocca.josefsson.org>
	<87my1chakl.fsf@broken.deisui.org>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091221:libssh2-devel@cool.haxx.se::ohNY8cNnEQLYM/jB:CxAz
Date: Mon, 21 Dec 2009 12:20:43 +0100
In-Reply-To: <87my1chakl.fsf@broken.deisui.org> (Daiki Ueno's message of "Mon, 
	21 Dec 2009 19:43:06 +0900")
Message-ID: <87aaxcfu9g.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daiki Ueno <ueno@unixuser.org> writes:

> Simon Josefsson <simon@josefsson.org> writes:
>
>> I propose to push the patch to be able to do further testing of it,
>> unless anyone has any general objection to this approach?
>
> FWIW, I have tried to minimize the number of patches using git rebase -i
> agaist the current origin/master (after the example/simple -> example
> move).  Now there are only three patches orthogonal each other:
>
> http://www.unixuser.org/~ueno/software/libssh2-agent/
>
> So when you push the change, please consider using the newer version
> instead of the one I posted to the list.  The patches on the Web may be
> updated if there are conflicting changes to the repository, but I won't
> do any further development until they are merged into the tree.

I have pushed the patches now, they look standalone enough that they
(hopefully) shouldn't cause major problems with the rest of the code.

Could you write man pages for the new APIs?

Thank you!

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Dec 21 12:28:20 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBLBSF1t014502;
	Mon, 21 Dec 2009 12:28:17 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBLBSBGw014482
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Mon, 21 Dec 2009 12:28:13 +0100
Received: from mocca (c80-216-24-211.bredband.comhem.se [80.216.24.211])
	(authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBLBS63K012345
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Mon, 21 Dec 2009 12:28:10 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: ssh-agent support
References: <87y6leeyfp.fsf@broken.deisui.org>
	<20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
	<87aaxjn540.fsf_-_@broken.deisui.org>
	<871viveoz5.fsf@mocca.josefsson.org>
	<87my1chakl.fsf@broken.deisui.org>
	<87aaxcfu9g.fsf@mocca.josefsson.org>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091221:libssh2-devel@cool.haxx.se::Ju4wAWJ0yCz16cPe:KwY
Date: Mon, 21 Dec 2009 12:28:05 +0100
In-Reply-To: <87aaxcfu9g.fsf@mocca.josefsson.org> (Simon Josefsson's message
	of "Mon, 21 Dec 2009 12:20:43 +0100")
Message-ID: <876380ftx6.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX, FB_WORD1_END_DOLLAR, RDNS_DYNAMIC,
	SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

I should have said that I tried the ssh2_agent example with my OpenPGP
smartcard, and authentication worked!  So libssh2 now support smartcard
based SSH.  Cool!

However there seems to be a glitch:

jas@mocca:~/src/libssh2 master$ ./example/ssh2_agent 192.168.1.124 root
	Authentication with username root and public key cardno:000500000139 succeeded!
Fingerprint: 87 25 0B E3 95 8B 27 0F A3 4D BB 80 BE 49 3A C3 

This hangs.  The server log is:

Dec 21 12:26:49 virgo sshd[2326]: Accepted publickey for root from 192.168.1.9 port 47324 ssh2
Dec 21 12:26:49 virgo sshd[2326]: pam_unix(sshd:session): session opened for user root by (uid=0)
Dec 21 12:26:49 virgo sshd[2326]: dispatch_protocol_error: type 50 seq 6

Any ideas?

I suspect it is unrelated to the agent code though.

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Dec 21 12:32:45 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBLBWf2Q016119;
	Mon, 21 Dec 2009 12:32:43 +0100
Received: from ivory3.scn-net.ne.jp (ivory3.scn-net.ne.jp [219.117.176.191])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBLBWcSj016051
	for <libssh2-devel@cool.haxx.se>; Mon, 21 Dec 2009 12:32:39 +0100
Received: from ([192.168.0.187]) (envelope sender: <ueno@unixuser.org>)
	by ivory3.scn-net.ne.jp with Active!Hunter esmtp server;
	Mon, 21 Dec 2009 20:32:36 +0900
Received: Received: from well-done.deisui.org (g187018.scn-net.ne.jp
	[202.83.187.18]) (authenticated)
	by blue17.scn-net.ne.jp (unknown) with ESMTP id nBLBWZFF017654
	for <libssh2-devel@cool.haxx.se>; Mon, 21 Dec 2009 20:32:35 +0900
Received: from 221x255x76x220.ap221.ftth.ucom.ne.jp ([221.255.76.220]
	helo=chilled) by well-done.deisui.org with esmtpsa
	(TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.69)
	(envelope-from <ueno@unixuser.org>) id 1NMgV9-0001tL-PE
	for libssh2-devel@cool.haxx.se; Mon, 21 Dec 2009 20:32:35 +0900
From: Daiki Ueno <ueno@unixuser.org>
To: libssh2-devel@cool.haxx.se
Subject: Re: ssh-agent support
References: <87y6leeyfp.fsf@broken.deisui.org>
	<20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
	<87aaxjn540.fsf_-_@broken.deisui.org>
	<871viveoz5.fsf@mocca.josefsson.org>
	<87my1chakl.fsf@broken.deisui.org>
	<20091221110916.14266.qmail@stuge.se>
Date: Mon, 21 Dec 2009 20:32:34 +0900
In-Reply-To: <20091221110916.14266.qmail@stuge.se> (Peter Stuge's message of
	"Mon, 21 Dec 2009 12:09:16 +0100")
Message-ID: <87iqc0h8a5.fsf@broken.deisui.org>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Peter Stuge <peter@stuge.se> writes:

> Please check the logic in libssh2_agent_connect() ? It looks like it
> will return failure if _any_ of possibly several supported backends
> are not running, rather than failing when _none_ of them are
> reachable? Also the comment mentions NULL, but code returns 0.

Thanks!  Of course the comment should be:

 * Returns:
 * 0 if successfully connected to ssh-agent
 * [negative] on errors

I will post a patch for this, and the man pages for libssh2_agent_*
soon.

Regards,
-- 
Daiki Ueno
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Mon Dec 21 13:23:08 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBLCMweP018301;
	Mon, 21 Dec 2009 13:23:06 +0100
Received: from ivory3.scn-net.ne.jp (ivory3.scn-net.ne.jp [219.117.176.191])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBLCMstp018192
	for <libssh2-devel@cool.haxx.se>; Mon, 21 Dec 2009 13:22:55 +0100
Received: from ([192.168.0.187]) (envelope sender: <ueno@unixuser.org>)
	by ivory3.scn-net.ne.jp with Active!Hunter esmtp server;
	Mon, 21 Dec 2009 21:22:52 +0900
Received: Received: from well-done.deisui.org (g187018.scn-net.ne.jp
	[202.83.187.18]) (authenticated)
	by blue17.scn-net.ne.jp (unknown) with ESMTP id nBLCMniu029558
	for <libssh2-devel@cool.haxx.se>; Mon, 21 Dec 2009 21:22:51 +0900
Received: from 221x255x76x220.ap221.ftth.ucom.ne.jp ([221.255.76.220]
	helo=chilled) by well-done.deisui.org with esmtpsa
	(TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.69)
	(envelope-from <ueno@unixuser.org>) id 1NMhHl-0001xv-Eu
	for libssh2-devel@cool.haxx.se; Mon, 21 Dec 2009 21:22:49 +0900
From: Daiki Ueno <ueno@unixuser.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: ssh-agent support
References: <87y6leeyfp.fsf@broken.deisui.org>
	<20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
	<87aaxjn540.fsf_-_@broken.deisui.org>
	<871viveoz5.fsf@mocca.josefsson.org>
	<87my1chakl.fsf@broken.deisui.org>
	<87aaxcfu9g.fsf@mocca.josefsson.org>
	<876380ftx6.fsf@mocca.josefsson.org>
Date: Mon, 21 Dec 2009 21:22:48 +0900
In-Reply-To: <876380ftx6.fsf@mocca.josefsson.org> (Simon Josefsson's message
	of "Mon, 21 Dec 2009 12:28:05 +0100")
Message-ID: <87eimoh5yf.fsf@broken.deisui.org>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--=-=-=

Simon Josefsson <simon@josefsson.org> writes:

> I should have said that I tried the ssh2_agent example with my OpenPGP
> smartcard, and authentication worked!  So libssh2 now support smartcard
> based SSH.  Cool!

I should also have tried with my OpenPGP card, but good to hear!
Probably you are using gpg-agent as ssh-agent?

> However there seems to be a glitch:
>
> jas@mocca:~/src/libssh2 master$ ./example/ssh2_agent 192.168.1.124 root
> 	Authentication with username root and public key cardno:000500000139 succeeded!
> Fingerprint: 87 25 0B E3 95 8B 27 0F A3 4D BB 80 BE 49 3A C3 
>
> This hangs.

Ah, ssh2_agent seems to request userauth-list after successful
authentication - that was my mistake on cut&paste from ssh2.c.  I was
satisfied with the "succeeded!" message, sorry.

The attached patch will fix this.


--=-=-=
Content-Type: text/x-diff
Content-Disposition: inline; filename=ssh2_agent.c.diff

diff --git a/example/ssh2_agent.c b/example/ssh2_agent.c
index a8e8519..6b0c323 100644
--- a/example/ssh2_agent.c
+++ b/example/ssh2_agent.c
@@ -93,6 +93,14 @@ int main(int argc, char *argv[])
         return 1;
     }
 
+    /* check what authentication methods are available */
+    userauthlist = libssh2_userauth_list(session, username, strlen(username));
+    printf("Authentication methods: %s\n", userauthlist);
+    if (strstr(userauthlist, "publickey") == NULL) {
+        fprintf(stderr, "\"publickey\" authentication is not supported\n");
+        goto shutdown;
+    }
+
     /* Connect to the ssh-agent */
     agent = libssh2_agent_init(session);
     if (!agent) {
@@ -149,14 +157,6 @@ int main(int argc, char *argv[])
     }
     printf("\n");
 
-    /* check what authentication methods are available */
-    userauthlist = libssh2_userauth_list(session, username, strlen(username));
-    printf("Authentication methods: %s\n", userauthlist);
-    if (strstr(userauthlist, "publickey") == NULL) {
-        fprintf(stderr, "\"publickey\" authentication is not supported\n");
-        goto shutdown;
-    }
-
     /* Request a shell */
     if (!(channel = libssh2_channel_open_session(session))) {
         fprintf(stderr, "Unable to open a session\n");

--=-=-=


Regards,
-- 
Daiki Ueno

--=-=-=
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--=-=-=--

From libssh2-devel-bounces@cool.haxx.se  Mon Dec 21 14:07:44 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBLD7clj018745;
	Mon, 21 Dec 2009 14:07:42 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBLD7blj018734
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Mon, 21 Dec 2009 14:07:37 +0100
Received: from mocca (c80-216-24-211.bredband.comhem.se [80.216.24.211])
	(authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBLD7aNR014872
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Mon, 21 Dec 2009 14:07:37 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: ssh-agent support
References: <87y6leeyfp.fsf@broken.deisui.org>
	<20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
	<87aaxjn540.fsf_-_@broken.deisui.org>
	<871viveoz5.fsf@mocca.josefsson.org>
	<87my1chakl.fsf@broken.deisui.org>
	<87aaxcfu9g.fsf@mocca.josefsson.org>
	<876380ftx6.fsf@mocca.josefsson.org>
	<87eimoh5yf.fsf@broken.deisui.org>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091221:libssh2-devel@cool.haxx.se::RLp3Yz4q71/1LtdL:fR1k
Date: Mon, 21 Dec 2009 14:07:36 +0100
In-Reply-To: <87eimoh5yf.fsf@broken.deisui.org> (Daiki Ueno's message of "Mon, 
	21 Dec 2009 21:22:48 +0900")
Message-ID: <87vdg0xyp3.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_96_XX, FB_WORD1_END_DOLLAR, RDNS_DYNAMIC,
	SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daiki Ueno <ueno@unixuser.org> writes:

> Simon Josefsson <simon@josefsson.org> writes:
>
>> I should have said that I tried the ssh2_agent example with my OpenPGP
>> smartcard, and authentication worked!  So libssh2 now support smartcard
>> based SSH.  Cool!
>
> I should also have tried with my OpenPGP card, but good to hear!
> Probably you are using gpg-agent as ssh-agent?

Yes.

>> However there seems to be a glitch:
>>
>> jas@mocca:~/src/libssh2 master$ ./example/ssh2_agent 192.168.1.124 root
>> 	Authentication with username root and public key cardno:000500000139 succeeded!
>> Fingerprint: 87 25 0B E3 95 8B 27 0F A3 4D BB 80 BE 49 3A C3 
>>
>> This hangs.
>
> Ah, ssh2_agent seems to request userauth-list after successful
> authentication - that was my mistake on cut&paste from ssh2.c.  I was
> satisfied with the "succeeded!" message, sorry.
>
> The attached patch will fix this.

Thanks.  Maybe you could get commit access to libssh2 and push this
yourself?  It may make it easier for you to apply smaller fixes like
this, and to add documentation.

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 22 13:41:05 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBMCeoY9016780;
	Tue, 22 Dec 2009 13:40:59 +0100
Received: from mail18.ca.com (mail18.ca.com [155.35.46.20])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBMCemDT016565
	for <libssh2-devel@cool.haxx.se>; Tue, 22 Dec 2009 13:40:48 +0100
Received: from INHYMS12.ca.com ([155.35.35.27]) by mail18.ca.com with
	Microsoft SMTPSVC(6.0.3790.3959); Tue, 22 Dec 2009 18:10:43 +0530
X-MimeOLE: Produced By Microsoft Exchange V6.5
Content-class: urn:content-classes:message
MIME-Version: 1.0
Subject: RE: IPv6 Support Query
Date: Tue, 22 Dec 2009 18:10:41 +0530
Message-ID: <AD2F648DE9801443A9F5C40F3426046980AAFB@INHYMS12.ca.com>
In-Reply-To: <20091221093539.28476.qmail@stuge.se>
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
Thread-Topic: IPv6 Support Query
Thread-Index: AcqCIQKBbXWVuVR2Q2GWzRLUAG30OAA4oXpQ
References: <AD2F648DE9801443A9F5C40F342604697BA6F6@INHYMS12.ca.com><4B5A315E-3EF2-4DFA-BD26-90B44EB25B6B@ambrosiasw.com><AD2F648DE9801443A9F5C40F3426046980A6DB@INHYMS12.ca.com><20091221092951.27395.qmail@stuge.se>
	<20091221093539.28476.qmail@stuge.se>
From: "Kumar, Ashish" <Ashish.Kumar@ca.com>
To: "libssh2 development" <libssh2-devel@cool.haxx.se>
X-OriginalArrivalTime: 22 Dec 2009 12:40:43.0570 (UTC)
	FILETIME=[F9FC9120:01CA8303]
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Thanks Peter .

Your wild guess helped me investigate further and debug details of
libssh2 indicated that sshd_config on remote host was not configured
properly .

I have another question ....

I am interested in Proxy-SSH functionality using libssh2 .

I want to issue some commands to target host and get the results back
and have already implemented direct ssh mechanism using libssh2 library
.

I now want to use an intermediate proxy server which I will connect to
and that will in-turn issue commands to my remote host and give me
results . 

Is that possible using libssh2 ? What are the methods available to
accomplish this functionality ?

Thnaks
Ashish

libssh2-devel@cool.haxx.se

-----Original Message-----
From: libssh2-devel-bounces@cool.haxx.se
[mailto:libssh2-devel-bounces@cool.haxx.se] On Behalf Of Peter Stuge
Sent: Monday, December 21, 2009 3:06 PM
To: libssh2-devel@cool.haxx.se
Subject: Re: IPv6 Support Query

Peter Stuge wrote:
> Kumar, Ashish wrote:
> > please help me identifying my issue

In any case the problem can not be an IPv6 issue with libssh2. I'm
sure that we can find out what it is though.


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 22 13:57:42 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBMCvCog028019;
	Tue, 22 Dec 2009 13:57:16 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBMCvBG2028014
	for <libssh2-devel@cool.haxx.se>; Tue, 22 Dec 2009 13:57:11 +0100
Received: (qmail 27406 invoked by uid 501); 22 Dec 2009 12:57:12 -0000
Message-ID: <20091222125712.27405.qmail@stuge.se>
Date: Tue, 22 Dec 2009 13:57:12 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: IPv6 Support Query
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <20091221093539.28476.qmail@stuge.se>
	<AD2F648DE9801443A9F5C40F3426046980AAFB@INHYMS12.ca.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <AD2F648DE9801443A9F5C40F3426046980AAFB@INHYMS12.ca.com>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Kumar, Ashish wrote:
> Thanks Peter .
> 
> Your wild guess helped me investigate further and debug details of
> libssh2 indicated that sshd_config on remote host was not
> configured properly .

I'm glad that a solution was found.


> I now want to use an intermediate proxy server which I will connect
> to and that will in-turn issue commands to my remote host and give
> me results . 
> 
> Is that possible using libssh2 ?

libssh2 needs a socket that is connected to an SSH server. How that
socket is created, and if any proxying is done is up to you. You can
do whatever you need to get the SSH server "on the line" before you
give the socket to libssh2.

Which protocol do you want to use for communication with this proxy
server? Can you describe the overall use case in more detail? That's
neccessary for someone else to be able to give advice..


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 22 15:33:18 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBMEX9KP017942;
	Tue, 22 Dec 2009 15:33:15 +0100
Received: from mail18.ca.com (mail18.ca.com [155.35.46.20])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBMEX7E2017889
	for <libssh2-devel@cool.haxx.se>; Tue, 22 Dec 2009 15:33:07 +0100
Received: from INHYMS12.ca.com ([155.35.35.27]) by mail18.ca.com with
	Microsoft SMTPSVC(6.0.3790.3959); Tue, 22 Dec 2009 20:03:02 +0530
X-MimeOLE: Produced By Microsoft Exchange V6.5
Content-class: urn:content-classes:message
MIME-Version: 1.0
Subject: RE: IPv6 Support Query
Date: Tue, 22 Dec 2009 20:03:01 +0530
Message-ID: <AD2F648DE9801443A9F5C40F3426046980AB1F@INHYMS12.ca.com>
In-Reply-To: <20091222125712.27405.qmail@stuge.se>
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
Thread-Topic: IPv6 Support Query
Thread-Index: AcqDB0R9E5Pb4TmjS1eK6g1ZVYAvVQACtxjA
References: <20091221093539.28476.qmail@stuge.se><AD2F648DE9801443A9F5C40F3426046980AAFB@INHYMS12.ca.com>
	<20091222125712.27405.qmail@stuge.se>
From: "Kumar, Ashish" <Ashish.Kumar@ca.com>
To: "libssh2 development" <libssh2-devel@cool.haxx.se>
X-OriginalArrivalTime: 22 Dec 2009 14:33:02.0602 (UTC)
	FILETIME=[AAC33EA0:01CA8313]
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

If you know about "plink" which is a commandline putty utility , It has
one feature as below 

plink -2 root@calis1 -nc cali11:22

In this case "calis1" is the target host and "calil1" is acting as a
proxy server who has access to calis1 .This "Proxy" feature is only
supported by ssh2 protocol and not ssh1.

I am looking for similar stuff and analyzing its feasibility with
libssh2

Thanks
Ashish
-----Original Message-----
From: libssh2-devel-bounces@cool.haxx.se
[mailto:libssh2-devel-bounces@cool.haxx.se] On Behalf Of Peter Stuge
Sent: Tuesday, December 22, 2009 6:27 PM
To: libssh2-devel@cool.haxx.se
Subject: Re: IPv6 Support Query

Kumar, Ashish wrote:
> Thanks Peter .
> 
> Your wild guess helped me investigate further and debug details of
> libssh2 indicated that sshd_config on remote host was not
> configured properly .

I'm glad that a solution was found.


> I now want to use an intermediate proxy server which I will connect
> to and that will in-turn issue commands to my remote host and give
> me results . 
> 
> Is that possible using libssh2 ?

libssh2 needs a socket that is connected to an SSH server. How that
socket is created, and if any proxying is done is up to you. You can
do whatever you need to get the SSH server "on the line" before you
give the socket to libssh2.

Which protocol do you want to use for communication with this proxy
server? Can you describe the overall use case in more detail? That's
neccessary for someone else to be able to give advice..


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 22 18:49:49 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBMHnbb0024646;
	Tue, 22 Dec 2009 18:49:46 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBMHnawi024640
	for <libssh2-devel@cool.haxx.se>; Tue, 22 Dec 2009 18:49:36 +0100
Received: (qmail 31805 invoked by uid 501); 22 Dec 2009 17:49:36 -0000
Message-ID: <20091222174936.31804.qmail@stuge.se>
Date: Tue, 22 Dec 2009 18:49:36 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: IPv6 Support Query
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <20091222125712.27405.qmail@stuge.se>
	<AD2F648DE9801443A9F5C40F3426046980AB1F@INHYMS12.ca.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <AD2F648DE9801443A9F5C40F3426046980AB1F@INHYMS12.ca.com>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Kumar, Ashish wrote:
> If you know about "plink" which is a commandline putty utility , It
> has one feature as below 
> 
> plink -2 root@calis1 -nc cali11:22

Yes.


> In this case "calis1" is the target host and "calil1" is acting as
> a proxy server who has access to calis1 .

Almost. Let me clarify:

plink connects to the SSH server at calis1, and authenticates as
root. Then plink asks sshd on calis1 to open what is called a
direct-tcpip channel in SSH terminology. In this case you specify
that plink should ask sshd on calis1 to connect to the host cali11
on port 22.


> This "Proxy" feature is only supported by ssh2 protocol and not
> ssh1.

That's right. direct-tcpip channels were introduced in the SSH2 RFCs.
This feature is often called local port forwarding.


> I am looking for similar stuff and analyzing its feasibility with
> libssh2

libssh2_channel_direct_tcpip_ex() is the function call you want. You
can call this after libssh2 has authenticated successfully with a
server.

If you want to connect using libssh2 to another, internal, SSH server
via this channel then please remember that it is a separate SSH
connection and thus you must initialize a separate LIBSSH2_SESSION
for it.

The current design of libssh2 then also requires you to create a file
descriptor, e.g. using pipe(), and that you pump data between pipe
and channel. Again because of current design this can only work if
you are using non-blocking sockets.


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 23 01:21:26 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBN0LFPk002363;
	Wed, 23 Dec 2009 01:21:22 +0100
Received: from ivory3.scn-net.ne.jp (ivory3.scn-net.ne.jp [219.117.176.191])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBN0LC91002347
	for <libssh2-devel@cool.haxx.se>; Wed, 23 Dec 2009 01:21:13 +0100
Received: from ([192.168.0.187]) (envelope sender: <ueno@unixuser.org>)
	by ivory3.scn-net.ne.jp with Active!Hunter esmtp server;
	Wed, 23 Dec 2009 09:21:09 +0900
Received: Received: from well-done.deisui.org (g187018.scn-net.ne.jp
	[202.83.187.18]) (authenticated)
	by blue17.scn-net.ne.jp (unknown) with ESMTP id nBN0L9x0017368
	for <libssh2-devel@cool.haxx.se>; Wed, 23 Dec 2009 09:21:09 +0900
Received: from 221x255x76x220.ap221.ftth.ucom.ne.jp ([221.255.76.220]
	helo=chilled) by well-done.deisui.org with esmtpsa
	(TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.69)
	(envelope-from <ueno@unixuser.org>) id 1NNEyT-00056i-1S
	for libssh2-devel@cool.haxx.se; Wed, 23 Dec 2009 09:21:09 +0900
From: Daiki Ueno <ueno@unixuser.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: ssh-agent support
References: <87y6leeyfp.fsf@broken.deisui.org>
	<20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
	<87aaxjn540.fsf_-_@broken.deisui.org>
	<871viveoz5.fsf@mocca.josefsson.org>
	<87my1chakl.fsf@broken.deisui.org>
	<87aaxcfu9g.fsf@mocca.josefsson.org>
	<876380ftx6.fsf@mocca.josefsson.org>
	<87eimoh5yf.fsf@broken.deisui.org>
	<87vdg0xyp3.fsf@mocca.josefsson.org>
Date: Wed, 23 Dec 2009 09:21:07 +0900
In-Reply-To: <87vdg0xyp3.fsf@mocca.josefsson.org> (Simon Josefsson's message
	of "Mon, 21 Dec 2009 14:07:36 +0100")
Message-ID: <87vdfyh764.fsf@broken.deisui.org>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Simon Josefsson <simon@josefsson.org> writes:

> Thanks.  Maybe you could get commit access to libssh2 and push this
> yourself?  It may make it easier for you to apply smaller fixes like
> this, and to add documentation.

I just pushed the fix and the man pages.

Regards,
-- 
Daiki Ueno
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 23 05:03:08 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBN42t3b031071;
	Wed, 23 Dec 2009 05:03:03 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBN42rA3030985
	for <libssh2-devel@cool.haxx.se>; Wed, 23 Dec 2009 05:02:53 +0100
Received: (qmail 765 invoked by uid 501); 23 Dec 2009 04:02:53 -0000
Message-ID: <20091223040253.764.qmail@stuge.se>
Date: Wed, 23 Dec 2009 05:02:53 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: ssh-agent support
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
	<87aaxjn540.fsf_-_@broken.deisui.org>
	<871viveoz5.fsf@mocca.josefsson.org>
	<87my1chakl.fsf@broken.deisui.org>
	<87aaxcfu9g.fsf@mocca.josefsson.org>
	<876380ftx6.fsf@mocca.josefsson.org>
	<87eimoh5yf.fsf@broken.deisui.org>
	<87vdg0xyp3.fsf@mocca.josefsson.org>
	<87vdfyh764.fsf@broken.deisui.org>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <87vdfyh764.fsf@broken.deisui.org>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daiki Ueno wrote:
> I just pushed the fix and the man pages.

Anyone in favor of sending commit messages to this list instead of
having a separate list?


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 23 12:33:36 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBNBXOQ6007419;
	Wed, 23 Dec 2009 12:33:32 +0100
Received: from ey-out-2122.google.com (ey-out-2122.google.com [74.125.78.27])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id
	nBNBXM3E007405
	for <libssh2-devel@cool.haxx.se>; Wed, 23 Dec 2009 12:33:22 +0100
Received: by ey-out-2122.google.com with SMTP id 22so479651eye.31
	for <libssh2-devel@cool.haxx.se>; Wed, 23 Dec 2009 03:33:22 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=googlemail.com; s=gamma;
	h=domainkey-signature:mime-version:sender:received:in-reply-to
	:references:date:x-google-sender-auth:message-id:subject:from:to
	:content-type; bh=GV3pPCxMLe3VglrTTN+WjvkwolkGz9UYnGS6tecmXEc=;
	b=vlklybaOEPoiQez6YGZmsuYTy1szx3gCPIguYDuz/Yqd6xKak0oEaciyS3UqBQRqvU
	/YlSG6Ni31tIpxDOPegs4xh+CTtaOsuolV5SmNKmTBCaeVyOzpKujeGpczSOwNW0CtKL
	pPqRDKOAPTwUKvvcdJSDHX/5n9WoRpwIX1yJM=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma;
	h=mime-version:sender:in-reply-to:references:date
	:x-google-sender-auth:message-id:subject:from:to:content-type;
	b=DhJMcw5clX29DHpfYejs9g8oxzbl+HGakye7PtCfHHOPuP8kwzFPfmFfSYFDT8MrUd
	U4cpDuhkyUI1g8NAprCoLicKTs+ZnBeDXwfqj1479HPObUDP3fnw+TVg8GH9utKZUfPz
	8+CKILoKFhXTj9qj8NKX0jTZaJ2hNb7Vh6Bgg=
MIME-Version: 1.0
Received: by 10.213.0.144 with SMTP id 16mr518163ebb.38.1261568002693; Wed, 23 
	Dec 2009 03:33:22 -0800 (PST)
In-Reply-To: <20091223040253.764.qmail@stuge.se>
References: <20091208081838.9529.qmail@stuge.se>
	<87aaxjn540.fsf_-_@broken.deisui.org>
	<871viveoz5.fsf@mocca.josefsson.org>
	<87my1chakl.fsf@broken.deisui.org>
	<87aaxcfu9g.fsf@mocca.josefsson.org>
	<876380ftx6.fsf@mocca.josefsson.org>
	<87eimoh5yf.fsf@broken.deisui.org>
	<87vdg0xyp3.fsf@mocca.josefsson.org>
	<87vdfyh764.fsf@broken.deisui.org> <20091223040253.764.qmail@stuge.se>
Date: Wed, 23 Dec 2009 11:33:22 +0000
X-Google-Sender-Auth: 4244a65548efb724
Message-ID: <9c3275a90912230333h7e3af475qa950ed64048b473a@mail.gmail.com>
Subject: Re: ssh-agent support
From: Alexander Lamaison <swish@lammy.co.uk>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

2009/12/23 Peter Stuge <peter@stuge.se>:
>
> Anyone in favor of sending commit messages to this list instead of
> having a separate list?

Not really.  At the moment the traffic in this list is low and
relevant.  Commit messages will just duplicate what people have
already been talking about here.  When I want the commit messages I
just load up the git webview.  Easy.

Alex
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 23 15:20:18 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBNEK8PT015180;
	Wed, 23 Dec 2009 15:20:15 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBNEK7sL014919
	for <libssh2-devel@cool.haxx.se>; Wed, 23 Dec 2009 15:20:07 +0100
Received: (qmail 5011 invoked by uid 501); 23 Dec 2009 14:20:06 -0000
Message-ID: <20091223142006.5010.qmail@stuge.se>
Date: Wed, 23 Dec 2009 15:20:06 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: ssh-agent support
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <87aaxjn540.fsf_-_@broken.deisui.org>
	<871viveoz5.fsf@mocca.josefsson.org>
	<87my1chakl.fsf@broken.deisui.org>
	<87aaxcfu9g.fsf@mocca.josefsson.org>
	<876380ftx6.fsf@mocca.josefsson.org>
	<87eimoh5yf.fsf@broken.deisui.org>
	<87vdg0xyp3.fsf@mocca.josefsson.org>
	<87vdfyh764.fsf@broken.deisui.org>
	<20091223040253.764.qmail@stuge.se>
	<9c3275a90912230333h7e3af475qa950ed64048b473a@mail.gmail.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <9c3275a90912230333h7e3af475qa950ed64048b473a@mail.gmail.com>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Alexander Lamaison wrote:
> > Anyone in favor of sending commit messages to this list
> 
> Not really.  At the moment the traffic in this list is low and
> relevant.  Commit messages will just duplicate what people have
> already been talking about here.

People have been posting "I pushed $code now" messages lately - and
I think for good reason. I do it too. It serves as a call for
testing. (And traffic on -changes is lower than on -devel.)


> When I want the commit messages I just load up the git webview. 
> Easy.

The point is just that; web has to be pulled but email is pushed.


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 23 16:29:12 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBNFT3N3030680;
	Wed, 23 Dec 2009 16:29:10 +0100
Received: from giant.haxx.se (giant.haxx.se [83.168.254.42])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBNFT2dj030660
	for <libssh2-devel@cool.haxx.se>; Wed, 23 Dec 2009 16:29:02 +0100
Date: Wed, 23 Dec 2009 16:29:02 +0100 (CET)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: ssh-agent support
In-Reply-To: <20091223040253.764.qmail@stuge.se>
Message-ID: <alpine.DEB.2.00.0912231625540.17033@tvnag.unkk.fr>
References: <20091208081838.9529.qmail@stuge.se>
	<878wdcbdc2.fsf@broken.deisui.org>
	<87aaxjn540.fsf_-_@broken.deisui.org>
	<871viveoz5.fsf@mocca.josefsson.org>
	<87my1chakl.fsf@broken.deisui.org>
	<87aaxcfu9g.fsf@mocca.josefsson.org>
	<876380ftx6.fsf@mocca.josefsson.org>
	<87eimoh5yf.fsf@broken.deisui.org> <87vdg0xyp3.fsf@mocca.josefsson.org>
	<87vdfyh764.fsf@broken.deisui.org>
	<20091223040253.764.qmail@stuge.se>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Wed, 23 Dec 2009, Peter Stuge wrote:

> Anyone in favor of sending commit messages to this list instead of having a 
> separate list?

I don't think that's a good idea. Having a separate list for them is better as 
it allows people who care to track the commits and those who don't can easier 
select to ignore. After all, the amount of people who care tend to be rather 
small.

I would however like to see the commit mails include a diff, as shown with 
'git log/show -p' (I think) so that I can use the commit mails to review the 
changes directly in my mail client without having to visit the web interface 
or use git.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 23 17:11:35 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBNGBT6j029986;
	Wed, 23 Dec 2009 17:11:33 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBNGBRxG029975
	for <libssh2-devel@cool.haxx.se>; Wed, 23 Dec 2009 17:11:27 +0100
Received: (qmail 25657 invoked by uid 501); 23 Dec 2009 16:11:28 -0000
Message-ID: <20091223161128.25656.qmail@stuge.se>
Date: Wed, 23 Dec 2009 17:11:28 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: Commit emails to libssh2-devel
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <87aaxjn540.fsf_-_@broken.deisui.org>
	<871viveoz5.fsf@mocca.josefsson.org>
	<87my1chakl.fsf@broken.deisui.org>
	<87aaxcfu9g.fsf@mocca.josefsson.org>
	<876380ftx6.fsf@mocca.josefsson.org>
	<87eimoh5yf.fsf@broken.deisui.org>
	<87vdg0xyp3.fsf@mocca.josefsson.org>
	<87vdfyh764.fsf@broken.deisui.org>
	<20091223040253.764.qmail@stuge.se>
	<alpine.DEB.2.00.0912231625540.17033@tvnag.unkk.fr>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <alpine.DEB.2.00.0912231625540.17033@tvnag.unkk.fr>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daniel Stenberg wrote:
>> Anyone in favor of sending commit messages to this list instead of
>> having a separate list?
>
> I don't think that's a good idea. Having a separate list for them
> is better as it allows people who care to track the commits and
> those who don't can easier select to ignore.

You too missed my point: In practice, there are _already_ commit
messages on the -devel mailing list, just that they are being sent
manually - and in general I think that's a good thing!


> After all, the amount of people who care tend to be rather small.

Hm - I think that everyone on the -devel list would and should care
about code changes.


> I would however like to see the commit mails include a diff, as
> shown with 'git log/show -p' (I think)

Will look into.


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 23 17:23:10 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBNGMlcg003162;
	Wed, 23 Dec 2009 17:22:52 +0100
Received: from giant.haxx.se (giant.haxx.se [83.168.254.42])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBNGMk0r003157
	for <libssh2-devel@cool.haxx.se>; Wed, 23 Dec 2009 17:22:46 +0100
Date: Wed, 23 Dec 2009 17:22:46 +0100 (CET)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: Commit emails to libssh2-devel
In-Reply-To: <20091223161128.25656.qmail@stuge.se>
Message-ID: <alpine.DEB.2.00.0912231722120.17033@tvnag.unkk.fr>
References: <87aaxjn540.fsf_-_@broken.deisui.org>
	<871viveoz5.fsf@mocca.josefsson.org>
	<87my1chakl.fsf@broken.deisui.org>
	<87aaxcfu9g.fsf@mocca.josefsson.org>
	<876380ftx6.fsf@mocca.josefsson.org>
	<87eimoh5yf.fsf@broken.deisui.org>
	<87vdg0xyp3.fsf@mocca.josefsson.org>
	<87vdfyh764.fsf@broken.deisui.org> <20091223040253.764.qmail@stuge.se>
	<alpine.DEB.2.00.0912231625540.17033@tvnag.unkk.fr>
	<20091223161128.25656.qmail@stuge.se>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Wed, 23 Dec 2009, Peter Stuge wrote:

> You too missed my point: In practice, there are _already_ commit messages on 
> the -devel mailing list, just that they are being sent manually - and in 
> general I think that's a good thing!

I think those mails are far less frequent than the commit mails on the 
-changes list.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 23 18:53:46 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBNHra6r002235;
	Wed, 23 Dec 2009 18:53:44 +0100
Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBNHrZpS002221
	for <libssh2-devel@cool.haxx.se>; Wed, 23 Dec 2009 18:53:36 +0100
Received: from int-mx01.intmail.prod.int.phx2.redhat.com
	(int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11])
	by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id nBNHrURg019731
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK)
	for <libssh2-devel@cool.haxx.se>; Wed, 23 Dec 2009 12:53:30 -0500
Received: from vpn2-10-239.ams2.redhat.com (vpn2-10-239.ams2.redhat.com
	[10.36.10.239])
	by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP
	id nBNHrTEj027849
	for <libssh2-devel@cool.haxx.se>; Wed, 23 Dec 2009 12:53:29 -0500
From: Kamil Dudka <kdudka@redhat.com>
To: libssh2-devel@cool.haxx.se
Subject: Re: Commit emails to libssh2-devel
Date: Wed, 23 Dec 2009 18:53:19 +0100
User-Agent: KMail/1.9.10
References: <87aaxjn540.fsf_-_@broken.deisui.org>
	<20091223161128.25656.qmail@stuge.se>
	<alpine.DEB.2.00.0912231722120.17033@tvnag.unkk.fr>
In-Reply-To: <alpine.DEB.2.00.0912231722120.17033@tvnag.unkk.fr>
MIME-Version: 1.0
Content-Disposition: inline
Message-Id: <200912231853.19335.kdudka@redhat.com>
X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Wednesday 23 of December 2009 17:22:46 Daniel Stenberg wrote:
> On Wed, 23 Dec 2009, Peter Stuge wrote:
> > You too missed my point: In practice, there are _already_ commit messages
> > on the -devel mailing list, just that they are being sent manually - and
> > in general I think that's a good thing!
>
> I think those mails are far less frequent than the commit mails on the
> -changes list.

Another way to watch commits is the small RSS icon at bottom
of http://git.libssh2.org/?p=libssh2.git

Kamil
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 23 20:56:54 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBNJuiH8021442;
	Wed, 23 Dec 2009 20:56:51 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBNJuhM8021435
	for <libssh2-devel@cool.haxx.se>; Wed, 23 Dec 2009 20:56:43 +0100
Received: (qmail 3468 invoked by uid 501); 23 Dec 2009 19:56:43 -0000
Message-ID: <20091223195643.3467.qmail@stuge.se>
Date: Wed, 23 Dec 2009 20:56:43 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Server maintenance
Mail-Followup-To: libssh2-devel@cool.haxx.se
MIME-Version: 1.0
Content-Disposition: inline
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

I'm performing maintenance on the git/trac server in the coming
hours. I expect no more than a few minutes outage at the most, but
thought I'd send a notice just the same.


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Dec 24 02:32:52 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBO1WdgJ014673;
	Thu, 24 Dec 2009 02:32:47 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBO1WcQ1014663
	for <libssh2-devel@cool.haxx.se>; Thu, 24 Dec 2009 02:32:38 +0100
Received: (qmail 25502 invoked by uid 501); 24 Dec 2009 01:32:39 -0000
Message-ID: <20091224013239.25501.qmail@stuge.se>
Date: Thu, 24 Dec 2009 02:32:39 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: Include diff in commit mails
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <87aaxjn540.fsf_-_@broken.deisui.org>
	<871viveoz5.fsf@mocca.josefsson.org>
	<87my1chakl.fsf@broken.deisui.org>
	<87aaxcfu9g.fsf@mocca.josefsson.org>
	<876380ftx6.fsf@mocca.josefsson.org>
	<87eimoh5yf.fsf@broken.deisui.org>
	<87vdg0xyp3.fsf@mocca.josefsson.org>
	<87vdfyh764.fsf@broken.deisui.org>
	<20091223040253.764.qmail@stuge.se>
	<alpine.DEB.2.00.0912231625540.17033@tvnag.unkk.fr>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <alpine.DEB.2.00.0912231625540.17033@tvnag.unkk.fr>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daniel Stenberg wrote:
> I would however like to see the commit mails include a diff,

I just added it to the hook. Let's see how it looks.


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Dec 24 02:38:39 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBO1cZpC017125;
	Thu, 24 Dec 2009 02:38:37 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBO1cXdg017121
	for <libssh2-devel@cool.haxx.se>; Thu, 24 Dec 2009 02:38:33 +0100
Received: (qmail 26613 invoked by uid 501); 24 Dec 2009 01:38:34 -0000
Message-ID: <20091224013834.26612.qmail@stuge.se>
Date: Thu, 24 Dec 2009 02:38:34 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: userauth_publickey_fromfile() fails occasionally for no reason
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <87d42e3vh0.fsf@mocca.josefsson.org>
	<20091217090929.25208.qmail@stuge.se>
	<200912171724.51735.kdudka@redhat.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <200912171724.51735.kdudka@redhat.com>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Kamil Dudka wrote:
> > The suggested patch is attached,
> 
> Bad news. The patch breaks it completely.
> 
> Have you tested it yourself first?

No. I did some thorough testing now and found a stupid mistake that
aused the 100% failures. But then it starts to fail intermittently,
and with some added debug prints I found out that my idea just
doesn't work, even though it seems like the right thing to do.
gcry_sexp_nth_mpi() simply doesn't understand the data that is
returned by the sign function. The #gnupg channel was sufficiently
idle when I looked there that I just give up on this. Other parts of
the code are using the same construct of directly parsing the
signature sexp after calling gcry_sexp_nth_data() and I don't want to
spend more time now on fixing something that works. :)

Thanks for testing and helping fix the bug!

//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Dec 24 11:00:51 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBOA0Xgs008741;
	Thu, 24 Dec 2009 11:00:47 +0100
Received: from giant.haxx.se (giant.haxx.se [83.168.254.42])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBOA0VNC008704
	for <libssh2-devel@cool.haxx.se>; Thu, 24 Dec 2009 11:00:31 +0100
Date: Thu, 24 Dec 2009 11:00:31 +0100 (CET)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2-devel@cool.haxx.se
Subject: Re: libssh2 master 1b3b7b2... Add test to check if the socket is
	connected.
In-Reply-To: <20091224075007.514.qmail@earth.stuge.se>
Message-ID: <alpine.DEB.2.00.0912241056480.17033@tvnag.unkk.fr>
References: <20091224075007.514.qmail@earth.stuge.se>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Thu, 24 Dec 2009, libssh2@git.stuge.se wrote:

> +++ b/src/agent.c
> @@ -128,7 +128,7 @@ struct _LIBSSH2_AGENT
> {
>     LIBSSH2_SESSION *session;  /* the session this "belongs to" */
>
> -    int fd;
> +    int fd;                             /* -1 when not connected */

Hey,

Note that internally in libssh2 we use libssh2_socket_t and not 'int' for 
sockets so that they work better on more operating systems (like windows).

Similarly, we need a defien for "invalid sockt" as -1 is not nice to store 
there unconditionally for libssh2_socket_t. I suggest something like:

--- a/src/libssh2_priv.h
+++ b/src/libssh2_priv.h
@@ -151,8 +151,10 @@ static inline int writev(int sock, struct iovec *iov, int 
n

  #ifdef WIN32
  typedef SOCKET libssh2_socket_t;
+#define SOCKET_BAD ~0
  #else /* !WIN32 */
  typedef int libssh2_socket_t;
+#define SOCKET_BAD -1
  #endif /* WIN32 */

  /* RFC4253 section 6.1 Maximum Packet Length says:


-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Dec 24 12:04:58 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBOB4luC015775;
	Thu, 24 Dec 2009 12:04:55 +0100
Received: from ivory3.scn-net.ne.jp (ivory3.scn-net.ne.jp [219.117.176.191])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBOB4geR015629
	for <libssh2-devel@cool.haxx.se>; Thu, 24 Dec 2009 12:04:45 +0100
Received: from ([192.168.0.187]) (envelope sender: <ueno@unixuser.org>)
	by ivory3.scn-net.ne.jp with Active!Hunter esmtp server;
	Thu, 24 Dec 2009 20:04:40 +0900
Received: Received: from well-done.deisui.org (g187018.scn-net.ne.jp
	[202.83.187.18]) (authenticated)
	by blue17.scn-net.ne.jp (unknown) with ESMTP id nBOB4dQU023735
	for <libssh2-devel@cool.haxx.se>; Thu, 24 Dec 2009 20:04:40 +0900
Received: from 221x255x76x220.ap221.ftth.ucom.ne.jp ([221.255.76.220]
	helo=chilled) by well-done.deisui.org with esmtpsa
	(TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.69)
	(envelope-from <ueno@unixuser.org>) id 1NNlUl-0008Ip-M7
	for libssh2-devel@cool.haxx.se; Thu, 24 Dec 2009 20:04:39 +0900
From: Daiki Ueno <ueno@unixuser.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: libssh2 master 1b3b7b2... Add test to check if the socket is
	connected.
References: <20091224075007.514.qmail@earth.stuge.se>
	<alpine.DEB.2.00.0912241056480.17033@tvnag.unkk.fr>
Date: Thu, 24 Dec 2009 20:04:38 +0900
In-Reply-To: <alpine.DEB.2.00.0912241056480.17033@tvnag.unkk.fr> (Daniel
	Stenberg's message of "Thu, 24 Dec 2009 11:00:31 +0100 (CET)")
Message-ID: <873a301vll.fsf@broken.deisui.org>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daniel Stenberg <daniel@haxx.se> writes:

> Note that internally in libssh2 we use libssh2_socket_t and not 'int'
> for sockets so that they work better on more operating systems (like
> windows).

Thank you, I've applied the change.

BTW, related to portability (but a trifling issue), I would propose
eliminating "negative exit codes" in example/*.c.  I may be worrying
unduly since they are harmless in sample programs, but users might
cut&paste them into their production code...

Regards,
-- 
Daiki Ueno
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Dec 24 15:11:06 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBOEAs5l005178;
	Thu, 24 Dec 2009 15:11:03 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBOEAr4S005157
	for <libssh2-devel@cool.haxx.se>; Thu, 24 Dec 2009 15:10:53 +0100
Received: (qmail 11037 invoked by uid 501); 24 Dec 2009 14:10:53 -0000
Message-ID: <20091224141053.11036.qmail@stuge.se>
Date: Thu, 24 Dec 2009 15:10:53 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: libssh2 master 1b3b7b2... Add test to check if the socket is
	connected.
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <20091224075007.514.qmail@earth.stuge.se>
	<alpine.DEB.2.00.0912241056480.17033@tvnag.unkk.fr>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <alpine.DEB.2.00.0912241056480.17033@tvnag.unkk.fr>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daniel Stenberg wrote:
> Similarly, we need a defien for "invalid sockt" as -1 is not nice
> to store there unconditionally for libssh2_socket_t. I suggest
> something like:
>
> --- a/src/libssh2_priv.h
> +++ b/src/libssh2_priv.h
> @@ -151,8 +151,10 @@ static inline int writev(int sock, struct iovec *iov, 
> int n
>
>  #ifdef WIN32
>  typedef SOCKET libssh2_socket_t;
> +#define SOCKET_BAD ~0
>  #else /* !WIN32 */
>  typedef int libssh2_socket_t;
> +#define SOCKET_BAD -1
>  #endif /* WIN32 */

Windows has such a value already, by the name of INVALID_SOCKET. I
would suggest to re-use that:

#ifndef INVALID_SOCKET
#define INVALID_SOCKET -1
#endif


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Dec 24 16:30:33 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBOFUN2r021054;
	Thu, 24 Dec 2009 16:30:30 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBOFULkP021050
	for <libssh2-devel@cool.haxx.se>; Thu, 24 Dec 2009 16:30:21 +0100
Received: (qmail 24138 invoked by uid 501); 24 Dec 2009 15:30:21 -0000
Message-ID: <20091224153021.24137.qmail@stuge.se>
Date: Thu, 24 Dec 2009 16:30:21 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: IPv6 Support Query
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <20091222125712.27405.qmail@stuge.se>
	<AD2F648DE9801443A9F5C40F3426046980AB1F@INHYMS12.ca.com>
	<20091222174936.31804.qmail@stuge.se>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <20091222174936.31804.qmail@stuge.se>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Peter Stuge wrote:
> > If you know about "plink" which is a commandline putty utility ,
> > It has one feature as below 
> > 
> > plink -2 root@calis1 -nc cali11:22
..
> > I am looking for similar stuff and analyzing its feasibility with
> > libssh2
> 
> libssh2_channel_direct_tcpip_ex() is the function call you want.

Have a look at example/direct_tcpip.c in git to see how you can use
this function.


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Dec 24 20:57:01 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBOJufCh027395;
	Thu, 24 Dec 2009 20:56:49 +0100
Received: from ch3.sourceforge.net (ch3.sourceforge.net [216.34.181.60])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBOJuduM027387
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Thu, 24 Dec 2009 20:56:39 +0100
Received: from www by 665xhf1.ch3.sourceforge.com with local (Exim 4.69)
	(envelope-from <noreply@sourceforge.net>)
	id 1NNtnZ-0000W6-0q; Thu, 24 Dec 2009 19:56:37 +0000
To: noreply@sourceforge.net
From: "SourceForge.net" <noreply@sourceforge.net>
Subject: [ libssh2-Bugs-2848195 ] libssh2_scp_send_ex in libssh2 1.2 doesn't
	work
Mime-Version: 1.0
X-SourceForge-Tracker-unixname: libssh2
X-SourceForge-Tracker-trackerid: 703942
X-SourceForge-Tracker-itemid: 2848195
X-SourceForge-Tracker-itemstatus: Open
X-SourceForge-Tracker-itemassignee: bagder
X-SourceForge-Tracker-itemupdate-reason: Comment added
X-SourceForge-Tracker-itemupdate-username: nobody
Message-Id: <E1NNtnZ-0000W6-0q@665xhf1.ch3.sourceforge.com>
Date: Thu, 24 Dec 2009 19:56:37 +0000
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Bugs item #2848195, was opened at 2009-09-01 03:52
Message generated for change (Comment added) made by nobody
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=703942&aid=2848195&group_id=125852

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: SCP
Group: None
Status: Open
Resolution: Fixed
Priority: 5
Private: No
Submitted By: Nobody/Anonymous (nobody)
Assigned to: Daniel Stenberg (bagder)
Summary: libssh2_scp_send_ex  in libssh2 1.2 doesn't work

Initial Comment:
The function will file if you try to upload something to a folder which is a symlink to some other folder even if you have permission. It works properly under version 1.1. You can try this out if you upload a file large than 1 MB.

----------------------------------------------------------------------

Comment By: Nobody/Anonymous (nobody)
Date: 2009-12-24 19:56

Message:
still have problem in lastest git. december 14 2009. centos 5.3. 
problem same as amiroot

just simple running scp_write_non_blocking will hang in waiting eof

----------------------------------------------------------------------

Comment By: AMI (amiroot)
Date: 2009-10-20 07:51

Message:
The problem still exists. I tested with libssh2-1.2.2-20091020.tar.gz.

----------------------------------------------------------------------

Comment By: Daniel Stenberg (bagder)
Date: 2009-10-18 12:32

Message:
Is this still a problem in the recent git version? We've fixed several
related issues.

----------------------------------------------------------------------

Comment By: AMI (amiroot)
Date: 2009-09-15 08:15

Message:
Hi, I just recalled that I've an account :p

Sorry that i just realized that there are samples from the sources code
and I just tested with them. The problem laid down with scp_write and I
found that it's not limited to symlink but also normal directories.

Once I uploaded a file with scp_write, it will tell you sending eof
waiting for eof etc... and it quit decently. However, the size of the local
file and the remote one are different. In some case it's a few k less but
in some case it uploaded only 1/10 of the total content.

I tried the scp_write in 1.1 and it works prefect.

I can send you the file for testing in private. Thanks

----------------------------------------------------------------------

Comment By: Daniel Stenberg (bagder)
Date: 2009-09-01 20:55

Message:
Can you please clarify what "doesn't work" means more exactly?

Can you provide a test source (in C) that repeats the problem? (or does
one of the samples from example/simple suffice?)

----------------------------------------------------------------------

Comment By: Nobody/Anonymous (nobody)
Date: 2009-09-01 03:54

Message:
I'm using CentOS 5.3. I tested it under the PHP PECL package SSH2 0.11.
Thanks

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=703942&aid=2848195&group_id=125852
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Dec 25 03:20:46 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBP2KOdP019338;
	Fri, 25 Dec 2009 03:20:32 +0100
Received: from sfi-glue-1.v28.ch3.sourceforge.com (ch3.sourceforge.net
	[216.34.181.60])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBP2KL01019198
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Fri, 25 Dec 2009 03:20:22 +0100
Received: from localhost ([127.0.0.1] helo=sfi-glue-1.v28.ch3.sourceforge.com)
	by sfi-glue-1.v28.ch3.sourceforge.com with smtp (Exim 4.69)
	(envelope-from <noreply@sourceforge.net>)
	id 1NNzmt-0005Jl-WC; Fri, 25 Dec 2009 02:20:21 +0000
Received: by sfi-glue-1.v28.ch3.sourceforge.com (sSMTP sendmail emulation);
	Fri, 25 Dec 2009 02:20:19 +0000
Date: Fri, 25 Dec 2009 02:20:19 +0000
To: noreply@sourceforge.net
From: "SourceForge.net" <noreply@sourceforge.net>
Subject: [ libssh2-Bugs-2910103 ] Dangling pointer in file_read_publickey
Mime-Version: 1.0
X-SourceForge-Tracker-unixname: libssh2
X-SourceForge-Tracker-trackerid: 703942
X-SourceForge-Tracker-itemid: 2910103
X-SourceForge-Tracker-itemstatus: Closed
X-SourceForge-Tracker-itemassignee: bagder
X-SourceForge-Tracker-itemupdate-reason: Comment added
X-SourceForge-Tracker-itemupdate-username: sf-robot
Message-Id: <E1NNzmt-0005Jl-WC@sfi-glue-1.v28.ch3.sourceforge.com>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Bugs item #2910103, was opened at 2009-12-07 16:29
Message generated for change (Comment added) made by sf-robot
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=703942&aid=2910103&group_id=125852

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: None
Group: None
>Status: Closed
Resolution: Accepted
Priority: 5
Private: No
Submitted By: Nobody/Anonymous (nobody)
Assigned to: Daniel Stenberg (bagder)
Summary: Dangling pointer in file_read_publickey

Initial Comment:
Memory for public key in userauth.c:file_read_publickey() is allocated to (pubkey), then on line 548 pointer is saved to (*method), then in case of failure in libssh2_base64_decode() original pointer in (pubkey) is freed on line 562, leaving dangling pointer in (*method).  When session is closed in session.c:session_free() on line 854 it will try to free memory again which may lead to crash.  Moving '*method = pubkey' after libssh2_base64_decode in file_read_publickey could fix this problem.

----------------------------------------------------------------------

>Comment By: SourceForge Robot (sf-robot)
Date: 2009-12-25 02:20

Message:
This Tracker item was closed automatically by the system. It was
previously set to a Pending status, and the original submitter
did not respond within 14 days (the time period specified by
the administrator of this Tracker).

----------------------------------------------------------------------

Comment By: Daniel Stenberg (bagder)
Date: 2009-12-10 22:40

Message:
I can only agree. If you tell me your name I'll give you the proper credit
for having found this!

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=703942&aid=2910103&group_id=125852
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Dec 25 04:15:06 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBP3Exff031568;
	Fri, 25 Dec 2009 04:15:03 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBP3EvL3031559
	for <libssh2-devel@cool.haxx.se>; Fri, 25 Dec 2009 04:14:57 +0100
Received: (qmail 2561 invoked by uid 501); 25 Dec 2009 03:14:58 -0000
Message-ID: <20091225031458.2560.qmail@stuge.se>
Date: Fri, 25 Dec 2009 04:14:58 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: libssh2 master 63457df... Fix compiler warnings for size_t
	pointers on 32-bit Windows.
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <20091225012242.5919.qmail@earth.stuge.se>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <20091225012242.5919.qmail@earth.stuge.se>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

libssh2@git.stuge.se wrote:
> +++ b/src/userauth.c
> @@ -628,6 +628,7 @@ sign_fromfile(LIBSSH2_SESSION *session, unsigned char **sig, size_t *sig_len,
>      const LIBSSH2_HOSTKEY_METHOD *privkeyobj;
>      void *hostkey_abstract;
>      struct iovec datavec;
> +    unsigned long _sig_len;
>  
>      if (file_read_privatekey(session, &privkeyobj, &hostkey_abstract,
>                               session->userauth_pblc_method,
> @@ -640,13 +641,14 @@ sign_fromfile(LIBSSH2_SESSION *session, unsigned char **sig, size_t *sig_len,
>      datavec.iov_base = (unsigned char *)data;
>      datavec.iov_len = data_len;
>  
> -    if (privkeyobj->signv(session, sig, sig_len, 1, &datavec,
> +    if (privkeyobj->signv(session, sig, &_sig_len, 1, &datavec,
>                            &hostkey_abstract)) {
>          if (privkeyobj->dtor) {
>              privkeyobj->dtor(session, abstract);
>          }
>          return -1;
>      }
> +    *sig_len = _sig_len;

Could this have been solved with a cast?


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Dec 25 05:05:58 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBP45nxv010746;
	Fri, 25 Dec 2009 05:05:55 +0100
Received: from ivory3.scn-net.ne.jp (ivory3.scn-net.ne.jp [219.117.176.191])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBP45jVm010695
	for <libssh2-devel@cool.haxx.se>; Fri, 25 Dec 2009 05:05:47 +0100
Received: from ([192.168.0.187]) (envelope sender: <ueno@unixuser.org>)
	by ivory3.scn-net.ne.jp with Active!Hunter esmtp server;
	Fri, 25 Dec 2009 13:05:45 +0900
Received: Received: from well-done.deisui.org (g187018.scn-net.ne.jp
	[202.83.187.18]) (authenticated)
	by blue17.scn-net.ne.jp (unknown) with ESMTP id nBP45iLn013071
	for <libssh2-devel@cool.haxx.se>; Fri, 25 Dec 2009 13:05:44 +0900
Received: from 221x255x76x220.ap221.ftth.ucom.ne.jp ([221.255.76.220]
	helo=chilled) by well-done.deisui.org with esmtpsa
	(TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.69)
	(envelope-from <ueno@unixuser.org>) id 1NO1Qu-00011T-Cw
	for libssh2-devel@cool.haxx.se; Fri, 25 Dec 2009 13:05:44 +0900
From: Daiki Ueno <ueno@unixuser.org>
To: libssh2-devel@cool.haxx.se
Subject: Re: libssh2 master 63457df... Fix compiler warnings for size_t
	pointers on 32-bit Windows.
References: <20091225012242.5919.qmail@earth.stuge.se>
	<20091225031458.2560.qmail@stuge.se>
Date: Fri, 25 Dec 2009 13:05:43 +0900
In-Reply-To: <20091225031458.2560.qmail@stuge.se> (Peter Stuge's message of
	"Fri, 25 Dec 2009 04:14:58 +0100")
Message-ID: <87bphnn1ew.fsf@broken.deisui.org>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Peter Stuge <peter@stuge.se> writes:

> libssh2@git.stuge.se wrote:
>> +++ b/src/userauth.c
>> @@ -628,6 +628,7 @@ sign_fromfile(LIBSSH2_SESSION *session, unsigned char **sig, size_t *sig_len,
...
>> +    unsigned long _sig_len;
...
>> -    if (privkeyobj->signv(session, sig, sig_len, 1, &datavec,
>> +    if (privkeyobj->signv(session, sig, &_sig_len, 1, &datavec,
>>                            &hostkey_abstract)) {
>>          if (privkeyobj->dtor) {
>>              privkeyobj->dtor(session, abstract);
>>          }
>>          return -1;
>>      }
>> +    *sig_len = _sig_len;
>
> Could this have been solved with a cast?

Indeed, I was just worried about the case: sizeof(size_t) == 8 and
sizeof(unsigned long) == 4 (i.e. on Windows 64), *sig_len is not
properly initialized by the caller, then the upper(lower?) 4-bytes of
*sig_len will be unchanged.

But in the above case, the caller is userauth_publickey(), *sig_len
must be initialized properly :) Will fix soon.

Is there any recommendation on size_t/ssize_t/unsigned long usage?

Regards,
-- 
Daiki Ueno
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Dec 25 07:48:37 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBP6mPhg019115;
	Fri, 25 Dec 2009 07:48:34 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBP6mOW8019111
	for <libssh2-devel@cool.haxx.se>; Fri, 25 Dec 2009 07:48:24 +0100
Received: (qmail 30934 invoked by uid 501); 25 Dec 2009 06:48:24 -0000
Message-ID: <20091225064824.30933.qmail@stuge.se>
Date: Fri, 25 Dec 2009 07:48:24 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: libssh2 master 63457df... Fix compiler warnings for size_t
	pointers on 32-bit Windows.
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <20091225012242.5919.qmail@earth.stuge.se>
	<20091225031458.2560.qmail@stuge.se>
	<87bphnn1ew.fsf@broken.deisui.org>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <87bphnn1ew.fsf@broken.deisui.org>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daiki Ueno wrote:
> >> +    unsigned long _sig_len;
> >
> > Could this have been solved with a cast?
> 
> Indeed, I was just worried about the case: sizeof(size_t) == 8 and
> sizeof(unsigned long) == 4 (i.e. on Windows 64),

Win64 means 64 bit system, so long should also be 64 bit, right?


> Is there any recommendation on size_t/ssize_t/unsigned long usage?

I always try to use what the system APIs use. libssh2 basically
doesn't right now, I don't know why, and I think it would be nice to
improve that if possible. Windows might cause some trouble by using
other types..


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Dec 25 08:04:30 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBP74OWJ030739;
	Fri, 25 Dec 2009 08:04:28 +0100
Received: from ivory3.scn-net.ne.jp (ivory3.scn-net.ne.jp [219.117.176.191])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBP74LGe030674
	for <libssh2-devel@cool.haxx.se>; Fri, 25 Dec 2009 08:04:22 +0100
Received: from ([192.168.0.187]) (envelope sender: <ueno@unixuser.org>)
	by ivory3.scn-net.ne.jp with Active!Hunter esmtp server;
	Fri, 25 Dec 2009 16:04:20 +0900
Received: Received: from well-done.deisui.org (g187018.scn-net.ne.jp
	[202.83.187.18]) (authenticated)
	by blue17.scn-net.ne.jp (unknown) with ESMTP id nBP74Jph021776
	for <libssh2-devel@cool.haxx.se>; Fri, 25 Dec 2009 16:04:20 +0900
Received: from [192.50.74.196] (helo=xps13.localnet)
	by well-done.deisui.org with esmtpsa
	(TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.69)
	(envelope-from <ueno@unixuser.org>) id 1NO4Dj-0001DK-P3
	for libssh2-devel@cool.haxx.se; Fri, 25 Dec 2009 16:04:19 +0900
From: Daiki Ueno <ueno@unixuser.org>
To: libssh2-devel@cool.haxx.se
Subject: Re: libssh2 master 63457df... Fix compiler warnings for size_t
	pointers on 32-bit Windows.
References: <20091225012242.5919.qmail@earth.stuge.se>
	<20091225031458.2560.qmail@stuge.se>
	<87bphnn1ew.fsf@broken.deisui.org>
	<20091225064824.30933.qmail@stuge.se>
Date: Fri, 25 Dec 2009 16:04:18 +0900
In-Reply-To: <20091225064824.30933.qmail@stuge.se> (Peter Stuge's message of
	"Fri, 25 Dec 2009 07:48:24 +0100")
Message-ID: <87iqbvy1ot.fsf@broken.deisui.org>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Peter Stuge <peter@stuge.se> writes:

>> >> +    unsigned long _sig_len;
>> >
>> > Could this have been solved with a cast?
>> 
>> Indeed, I was just worried about the case: sizeof(size_t) == 8 and
>> sizeof(unsigned long) == 4 (i.e. on Windows 64),
>
> Win64 means 64 bit system, so long should also be 64 bit, right?

Not sure since I don't have that OS.  But there are some web pages tell
that long is 32 bit on the system, while long long and pointers are 64
bit:

http://wiki.wireshark.org/Development/Win64

Regards,
-- 
Daiki Ueno
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Dec 25 16:42:54 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBPFgU3W023164;
	Fri, 25 Dec 2009 16:42:38 +0100
Received: from foo.birdnet.se (qmailr@foo.birdnet.se [213.88.146.6])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with SMTP id nBPFgS8H023033
	for <libssh2-devel@cool.haxx.se>; Fri, 25 Dec 2009 16:42:28 +0100
Received: (qmail 17363 invoked by uid 501); 25 Dec 2009 15:42:28 -0000
Message-ID: <20091225154228.17362.qmail@stuge.se>
Date: Fri, 25 Dec 2009 16:42:28 +0100
From: Peter Stuge <peter@stuge.se>
To: libssh2-devel@cool.haxx.se
Subject: Re: libssh2 master 63457df... Fix compiler warnings for size_t
	pointers on 32-bit Windows.
Mail-Followup-To: libssh2-devel@cool.haxx.se
References: <20091225012242.5919.qmail@earth.stuge.se>
	<20091225031458.2560.qmail@stuge.se>
	<87bphnn1ew.fsf@broken.deisui.org>
	<20091225064824.30933.qmail@stuge.se>
	<87iqbvy1ot.fsf@broken.deisui.org>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <87iqbvy1ot.fsf@broken.deisui.org>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Daiki Ueno wrote:
> > Win64 means 64 bit system, so long should also be 64 bit, right?
> 
> Not sure since I don't have that OS.  But there are some web pages
> tell that long is 32 bit on the system, while long long and
> pointers are 64 bit:
> 
> http://wiki.wireshark.org/Development/Win64

Some good links on there:

http://blogs.msdn.com/oldnewthing/archive/2005/01/31/363790.aspx
http://www.unix.org/version2/whatsnew/lp64_wp.html

Fan-f*ing-tastic. :( Stupid Windows..


//Peter
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Dec 25 19:20:04 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBPIJs3I030882;
	Fri, 25 Dec 2009 19:20:01 +0100
Received: from giant.haxx.se (giant.haxx.se [83.168.254.42])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBPIJrLp030869
	for <libssh2-devel@cool.haxx.se>; Fri, 25 Dec 2009 19:19:53 +0100
Date: Fri, 25 Dec 2009 19:19:53 +0100 (CET)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: libssh2 master 1b3b7b2... Add test to check if the socket is
	connected.
In-Reply-To: <873a301vll.fsf@broken.deisui.org>
Message-ID: <alpine.DEB.2.00.0912251918510.17033@tvnag.unkk.fr>
References: <20091224075007.514.qmail@earth.stuge.se>
	<alpine.DEB.2.00.0912241056480.17033@tvnag.unkk.fr>
	<873a301vll.fsf@broken.deisui.org>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Thu, 24 Dec 2009, Daiki Ueno wrote:

> BTW, related to portability (but a trifling issue), I would propose 
> eliminating "negative exit codes" in example/*.c.  I may be worrying unduly 
> since they are harmless in sample programs, but users might cut&paste them 
> into their production code...

I just browsed through a few just now, but don't most of them return 0 from 
main() ?

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Fri Dec 25 19:21:47 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBPILjXg032092;
	Fri, 25 Dec 2009 19:21:46 +0100
Received: from giant.haxx.se (giant.haxx.se [83.168.254.42])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBPILhou032085
	for <libssh2-devel@cool.haxx.se>; Fri, 25 Dec 2009 19:21:43 +0100
Date: Fri, 25 Dec 2009 19:21:43 +0100 (CET)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: libssh2 master 63457df... Fix compiler warnings for size_t
	pointers on 32-bit Windows.
In-Reply-To: <20091225064824.30933.qmail@stuge.se>
Message-ID: <alpine.DEB.2.00.0912251920440.17033@tvnag.unkk.fr>
References: <20091225012242.5919.qmail@earth.stuge.se>
	<20091225031458.2560.qmail@stuge.se>
	<87bphnn1ew.fsf@broken.deisui.org>
	<20091225064824.30933.qmail@stuge.se>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Fri, 25 Dec 2009, Peter Stuge wrote:

> I always try to use what the system APIs use. libssh2 basically doesn't 
> right now, I don't know why, and I think it would be nice to improve that if 
> possible. Windows might cause some trouble by using other types..

IMO as well, we should use size_t and friends as far as possible, but APIs 
already exposed that use ints etc will be stuck with those until the day we 
decide to bump the soname.

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 29 17:14:21 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBTGE66x031581;
	Tue, 29 Dec 2009 17:14:16 +0100
Received: from mail-bw0-f226.google.com (mail-bw0-f226.google.com
	[209.85.218.226])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBTGE53X031515
	for <libssh2-devel@cool.haxx.se>; Tue, 29 Dec 2009 17:14:05 +0100
Received: by bwz26 with SMTP id 26so7665502bwz.7
	for <libssh2-devel@cool.haxx.se>; Tue, 29 Dec 2009 08:14:00 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:mime-version:received:date:message-id:subject
	:from:to:content-type;
	bh=spLzGU75TtECZBA/dU6bsdQfjQrp9uOdiq0YWiUEVqU=;
	b=xQL5yfbSpcfep82fxVWCseDEkKipxKcFG0DWhIgD1mRXWLIAlFugXQHAm2XEG56w7O
	WTX3Vr4lRnwgvfP3JZllPsjskFZomUIoANFRossp71XSMUOmiXZhr3Hpg4qxwkQKoP0c
	2qnBVJmDl0dZbK4Kr5/ntUQ5SYZdLVsg7UaKo=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=mime-version:date:message-id:subject:from:to:content-type;
	b=fq/eacG2pSjWBFrohqG3j4x16VOUc5bgd6nsLrF7h35VoQ/I9QA1uNpsf+ll8BOKqf
	MpufBldsT1gSCreV8Vz9dXBF7VTUClt0avXhcL+h6suo7J1wVXO2268CzDQ1H/JpJ+ZK
	IenaFRQLDXPomTHxHsLRf2cP6NAyuExEXH8mY=
MIME-Version: 1.0
Received: by 10.204.153.197 with SMTP id l5mr6738235bkw.109.1262103240697; 
	Tue, 29 Dec 2009 08:14:00 -0800 (PST)
Date: Tue, 29 Dec 2009 10:14:00 -0600
Message-ID: <26b41b990912290814o47390bbble95d8c585e14a461@mail.gmail.com>
Subject: libssh2 gmake check failed
From: ctf <serviceman36@gmail.com>
To: libssh2-devel@cool.haxx.se
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============1355038490=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============1355038490==
Content-Type: multipart/alternative; boundary=0015175d072a54e9b9047be04ff7

--0015175d072a54e9b9047be04ff7
Content-Type: text/plain; charset=ISO-8859-1

HPUX 11.31 itatium

gmake[2]: Leaving directory `/var/tmp/Cary/libssh2-1.2.2/tests'
gmake  check-TESTS
gmake[2]: Entering directory `/var/tmp/Cary/libssh2-1.2.2/tests'
PASS: simple
Fingerprint: A0 90 21 22 20 7A 93 7F B9 7B 52 CE FA A6 08 7F
Authentication methods: publickey,password,keyboard-interactive
        Authentication by public key failed!
FAIL: ssh2.sh
====================================================
1 of 2 tests failed
Please report to libssh2-devel@lists.sourceforge.net
====================================================
gmake[2]: *** [check-TESTS] Error 1
gmake[2]: Leaving directory `/var/tmp/Cary/libssh2-1.2.2/tests'
gmake[1]: *** [check-am] Error 2
gmake[1]: Leaving directory `/var/tmp/Cary/libssh2-1.2.2/tests'
gmake: *** [check-recursive] Error 1

if i use make i get:
Make: Must be a separator on rules line 742.  Stop.

--0015175d072a54e9b9047be04ff7
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

HPUX 11.31 itatium <br><br>gmake[2]: Leaving directory `/var/tmp/Cary/libss=
h2-1.2.2/tests&#39;<br>gmake=A0 check-TESTS<br>gmake[2]: Entering directory=
 `/var/tmp/Cary/libssh2-1.2.2/tests&#39;<br>PASS: simple<br>Fingerprint: A0=
 90 21 22 20 7A 93 7F B9 7B 52 CE FA A6 08 7F <br>
Authentication methods: publickey,password,keyboard-interactive<br>=A0=A0=
=A0=A0=A0=A0=A0 Authentication by public key failed!<br>FAIL: ssh2.sh<br>=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D<br>1 of 2 tests failed<br>Please report to <a href=3D"mailto:libssh2=
-devel@lists.sourceforge.net">libssh2-devel@lists.sourceforge.net</a><br>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D<br>gmake[2]: *** [check-TESTS] Error 1<br>gmake[2]: Leaving director=
y `/var/tmp/Cary/libssh2-1.2.2/tests&#39;<br>gmake[1]: *** [check-am] Error=
 2<br>gmake[1]: Leaving directory `/var/tmp/Cary/libssh2-1.2.2/tests&#39;<b=
r>
gmake: *** [check-recursive] Error 1<br><br>if i use make i get:<br>Make: M=
ust be a separator on rules line 742.=A0 Stop.<br>

--0015175d072a54e9b9047be04ff7--

--===============1355038490==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============1355038490==--

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 29 17:17:16 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBTGHDsh000440;
	Tue, 29 Dec 2009 17:17:14 +0100
Received: from mail-ew0-f210.google.com (mail-ew0-f210.google.com
	[209.85.219.210])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBTGHClg000395
	for <libssh2-devel@cool.haxx.se>; Tue, 29 Dec 2009 17:17:12 +0100
Received: by ewy2 with SMTP id 2so12932858ewy.7
	for <libssh2-devel@cool.haxx.se>; Tue, 29 Dec 2009 08:17:08 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:received:received:subject:from:to:in-reply-to
	:references:content-type:date:message-id:mime-version:x-mailer
	:content-transfer-encoding;
	bh=aD5ZMovVgTRvJ8vM9bWRp3r37fbWGP27xJpH/EiisZY=;
	b=nTvEzu02If+4ZZO841qpjqFBT5cR5q/7PMQLdt0duqoq5rJ2THDFriCcqiQ25T/fpr
	7wNGLzWLiiu2Vjaa2BufAB0JBUJN9kl5RreoH3QeVg3n72eYN83wm8hiQxBG5wi3dnN6
	9BenEczGG4IbYJONNQv3X97KEMZRnrDkPoyeo=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=subject:from:to:in-reply-to:references:content-type:date:message-id
	:mime-version:x-mailer:content-transfer-encoding;
	b=PSpqBGNaeuazDhNHhXHnG1ASp/2a5IzUC+fuopdPZhf7F3OaJtEE7a4Ig157NYDlio
	/1lnJuqBsiRMWJS8k5SXf0KxPgvA7r9BebSGASZy+0fI9gCS7DEp53qQspAZBrCIzmgj
	nY8T8tY6af5jzrPWGaFIv3+1S7w+RzBYGn+Os=
Received: by 10.213.96.202 with SMTP id i10mr11557825ebn.99.1262103428044;
	Tue, 29 Dec 2009 08:17:08 -0800 (PST)
Received: from ?192.168.0.13? (lns-bzn-61-82-250-123-235.adsl.proxad.net
	[82.250.123.235])
	by mx.google.com with ESMTPS id 14sm8954084ewy.15.2009.12.29.08.17.05
	(version=SSLv3 cipher=RC4-MD5); Tue, 29 Dec 2009 08:17:06 -0800 (PST)
Subject: Re: Send special characters
From: Samuel ROZE <samuel.roze@gmail.com>
To: libssh2 development <libssh2-devel@cool.haxx.se>
In-Reply-To: <20091208031013.17145.qmail@stuge.se>
References: <1260110448.7605.6.camel@samuel-laptop>
	<20091206211629.1250.qmail@stuge.se>
	<1260136849.2794.10.camel@samuel-laptop>
	<200912062316.34963.kdudka@redhat.com>
	<1260207696.2803.6.camel@samuel-laptop>
	<20091208031013.17145.qmail@stuge.se>
Date: Tue, 29 Dec 2009 17:17:04 +0100
Message-ID: <1262103424.4507.4.camel@samuel-laptop>
Mime-Version: 1.0
X-Mailer: Evolution 2.28.1 
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

QWN0dWFsbHksIHRvIGZha2UgYSBDdHJsLUMgY29tbWFuZCwgSSBqdXN0IGhhdmUgdG8gc2VuZCB0
aGUgRVRYIGxldHRlci4KKE51bWJlciAzIGluIEFTQ0lJKQoKUmVnYXJkcywKU2FtdWVsLgoKTGUg
bWFyZGkgMDggZMOpY2VtYnJlIDIwMDkgw6AgMDQ6MTAgKzAxMDAsIFBldGVyIFN0dWdlIGEgw6lj
cml0IDoKPiBTYW11ZWwgUk9aRSB3cm90ZToKPiA+IEJ1dCwgaWYgeW91IHR5cGUgInNsZWVwIDEw
OyIgYW5kIHRoZW4gbWFrZSBhIEN0cmwgKyBDLCB0aGlzIHdpbGwKPiA+IHByaW50ICJeQyIgYW5k
IHRoZW4gYWxsb3cgeW91IHRvIHR5cGUgYW5vdGhlciBjb21tYW5kIHdoaWxlCj4gPiBjYW5jZWxs
aW5nIHRoaXMgc2xlZXAgY29tbWFuZC4KPiA+IAo+ID4gSWYgSSBzZW5kIHRvIG15IHNzaDIgY2hh
bm5lbCBhbiAic2xlZXAgMTAwMDsiIGNvbW1hbmQgZm9yIGluc3RhbmNlLAo+ID4gaG93IEkgY2Fu
IHNlbmQgdGhlIF5DIGNvbW1hbmQgPwo+IAo+IEN0cmwtQyBpcyBub3QgaW50ZXJwcmV0ZWQgYnkg
dGhlIHNoZWxsLiBUaGVyZSBpcyBhIGxvdCBvZiBjb2RlCj4gZXhlY3V0aW5nIHRvIHRyYW5zbGF0
ZSBldmVyeSBrZXlwcmVzcyBiZXR3ZWVuIHRoZSB0aW1lIHlvdSBwcmVzcyB0aGUKPiBrZXksIGFu
ZCB0aGUgdGltZSBpdCByZWFjaGVzIHlvdXIgc2hlbGwuCj4gCj4gQ3RybC1DIGlzIGludGVycHJl
dGVkIGJ5IHRoZSB0ZXJtaW5hbCBoYW5kbGVyIG9uIHRoZSBzZXJ2ZXIuIEFnYWluLAo+IHBsZWFz
ZSBub3cgaW52ZXN0aWdhdGUgaG93IHRlcm1pbmFsIGVtdWxhdGlvbiBhbmQgdGVybWluYWwgaGFu
ZGxpbmcKPiB3b3JrcyBpbiBMaW51eC9VTklYLiBGb3IgQ3RybC1DLCB0aGUgaGFuZGxlciB0cmFu
c2xhdGVzIHRoZSBrZXlwcmVzcwo+IGludG8gdGhlIFBPU0lYIHNpZ25hbCBTSUdURVJNLCBhbmQg
c2VuZHMgdGhlIHNpZ25hbCB0byB0aGUgcHJvY2Vzcwo+IHRoYXQgaXMgdGhlIHNlc3Npb24gbWFz
dGVyIGZvciB0aGF0IHZpcnR1YWwgdGVybWluYWwgKHNsZWVwKSB3aGljaAo+IHdpbGwgdGhlbiBl
aXRoZXIgY2F0Y2ggdGhlIHNpZ25hbCBhbmQgZG8gc29tZXRoaW5nIGltcGxlbWVudGF0aW9uCj4g
c3BlY2lmaWMgYXMgYSByZXN1bHQsIG9yIHRoZSBkZWZhdWx0IHNpZ25hbCBoYW5kbGVyIGZvciBT
SUdURVJNIHdpbGwKPiBiZSBydW4sIHdoaWNoIGV4aXRzIHRoZSBwcm9ncmFtLiBQbGVhc2UgcmVh
ZCBtb3JlIGFib3V0IHNpZ25hbHMuCj4gCj4gU1NIMiBzdXBwb3J0cyBzZW5kaW5nIHNpZ25hbHMg
dG8gY2hhbm5lbHMsIGJ1dCB0aGlzIGlzIG5vdAo+IGltcGxlbWVudGVkIG5laXRoZXIgaW4gbGli
c3NoMiBub3IgaW4gT3BlblNTSCBzbyBpbiBwcmFjdGljZSBpdAo+IGNhbm5vdCBiZSBkb25lIGF0
IHRoaXMgdGltZS4gSSBiZWxpZXZlIHRoZXJlIGFyZSBwYXRjaGVzIGZvciBib3RoCj4gcGFja2Fn
ZXMsIGJ1dCBzbyBmYXIgdGhleSBoYXZlIG5vdCBiZWVuIG1lcmdlZC4KPiAKPiAKPiAvL1BldGVy
Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBsaWJz
c2gyLWRldmVsIGh0dHA6Ly9jb29sLmhheHguc2UvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL2xp
YnNzaDItZGV2ZWwKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpsaWJzc2gyLWRldmVsIGh0dHA6Ly9jb29sLmhheHguc2UvY2dpLWJpbi9tYWlsbWFuL2xp
c3RpbmZvL2xpYnNzaDItZGV2ZWwK

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 29 17:41:08 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBTGf4qT011249;
	Tue, 29 Dec 2009 17:41:06 +0100
Received: from mail-ew0-f210.google.com (mail-ew0-f210.google.com
	[209.85.219.210])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBTGf3Cb011058
	for <libssh2-devel@cool.haxx.se>; Tue, 29 Dec 2009 17:41:03 +0100
Received: by ewy2 with SMTP id 2so12956329ewy.7
	for <libssh2-devel@cool.haxx.se>; Tue, 29 Dec 2009 08:40:58 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:received:received:subject:from:to:content-type
	:date:message-id:mime-version:x-mailer:content-transfer-encoding;
	bh=HUB0+UuiV6yBpNaq0osxJJ1OZ0nD6RtsO4hwQekg+Ow=;
	b=Kf0KBs/miWQ53Lo+6bvkofRWiETSWwcCjLOG978ljsRUZScNH4aJVcbdvU7/7RMz1f
	56MiGAQGJOXNnwa+f5Izjv2wDKJjEqzLTM+2547fdj4qecvcmr762e4CAvThDcRyhx+h
	tGMpra7/Yb7DnhR3Xc1WCvqfwnQjPbz0MWTAM=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=subject:from:to:content-type:date:message-id:mime-version:x-mailer
	:content-transfer-encoding;
	b=dM8dQ4i0ecky2GJSQjDlD2IPs8H3reUWaRRchLMB3YtN3IJ+inVn4q41zs6NGnR5lF
	HzYJFBs/nA72cGDXwNpBzOMlWP9ffsSW00ZhUehbEu5NqqyMTtQobBM9thExGKIT5V5s
	sqVUYytRvqIlfQCfhlRmp27MIhdVv0Qj5nkAI=
Received: by 10.213.37.73 with SMTP id w9mr17973590ebd.27.1262104858785;
	Tue, 29 Dec 2009 08:40:58 -0800 (PST)
Received: from ?192.168.0.13? (lns-bzn-30-82-253-145-127.adsl.proxad.net
	[82.253.145.127])
	by mx.google.com with ESMTPS id 23sm26327304eya.43.2009.12.29.08.40.57
	(version=SSLv3 cipher=RC4-MD5); Tue, 29 Dec 2009 08:40:58 -0800 (PST)
Subject: Re-use a session for others channels
From: Samuel ROZE <samuel.roze@gmail.com>
To: libssh2-devel@cool.haxx.se
Date: Tue, 29 Dec 2009 17:40:56 +0100
Message-ID: <1262104856.4507.11.camel@samuel-laptop>
Mime-Version: 1.0
X-Mailer: Evolution 2.28.1 
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Hello,

I use libssh2 with PHP to make SSH connections. I have a problem: when I
create a connection, it works, I can create a channel, send an received
data. But, with the same connection, I can't create another channel (the
other is still alive), I've got an "Unable to request a channel from
remote host" error because the libssh2_channel_open_session function
didn't return a valid result.

Is it a limitation of libssh2 or, normally, it can be done with
libssh2 ? If it can be done, it must be a limitation of my SSH2
"plug-in" for PHP, and I'll work on this way, however, I'll work on the
libssh2 bug way. :-)

Regards,
Samuel ROZE.

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 29 20:34:21 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBTJXaqN032684;
	Tue, 29 Dec 2009 20:33:45 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBTJXYWk032639
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Tue, 29 Dec 2009 20:33:35 +0100
Received: from mocca (c80-216-24-211.bredband.comhem.se [80.216.24.211])
	(authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBTJXWjO012321
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Tue, 29 Dec 2009 20:33:34 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: libssh2 gmake check failed
References: <26b41b990912290814o47390bbble95d8c585e14a461@mail.gmail.com>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091229:libssh2-devel@cool.haxx.se::9T+uBkBz7CckFfHN:47VX
Date: Tue, 29 Dec 2009 20:33:32 +0100
In-Reply-To: <26b41b990912290814o47390bbble95d8c585e14a461@mail.gmail.com>
	(ctf's message of "Tue, 29 Dec 2009 10:14:00 -0600")
Message-ID: <87d41xpoc3.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.0 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_48_96,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

ctf <serviceman36@gmail.com> writes:

> HPUX 11.31 itatium
>
> gmake[2]: Leaving directory `/var/tmp/Cary/libssh2-1.2.2/tests'
> gmake  check-TESTS
> gmake[2]: Entering directory `/var/tmp/Cary/libssh2-1.2.2/tests'
> PASS: simple
> Fingerprint: A0 90 21 22 20 7A 93 7F B9 7B 52 CE FA A6 08 7F
> Authentication methods: publickey,password,keyboard-interactive
>         Authentication by public key failed!
> FAIL: ssh2.sh

Does this happen every time?  There is a sleep in there that may be too
short for slow machines.  Try re-running with a hot disk cache.

/Simon
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Tue Dec 29 23:25:03 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBTMOqY8031446;
	Tue, 29 Dec 2009 23:24:59 +0100
Received: from mail-bw0-f226.google.com (mail-bw0-f226.google.com
	[209.85.218.226])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBTMOo0m031435
	for <libssh2-devel@cool.haxx.se>; Tue, 29 Dec 2009 23:24:50 +0100
Received: by bwz26 with SMTP id 26so7842059bwz.7
	for <libssh2-devel@cool.haxx.se>; Tue, 29 Dec 2009 14:24:46 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:mime-version:received:in-reply-to:references
	:date:message-id:subject:from:to:content-type;
	bh=x/lDnkyL61/Kvq50D1/LITmCp+DCZ6oH9d5dJyLCPLE=;
	b=l/vVrAKExvLqjMJsA8d9THoFB/7GeFoGQGB7dJzUxW+BfP3uNq7/HtsoSImAOjYPcu
	I+aS6LYDjYai0ouU0PIcXV+lnpcvMMiNDnJY7kVVLpGpDa2ntfWZxY9h0ebXo+8kADFT
	OqCtIRrWAzFRqTc9JopnN0krWj79aqi26Ugtk=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=mime-version:in-reply-to:references:date:message-id:subject:from:to
	:content-type;
	b=AD+7xF1M8k9JZtPjp9WcQUopUYHlNgaGbqKvmUs3uw7EYBtcipM6eeJyyA/dSl9+mb
	5tw/Dv6OkrrwBXrGYwOdGvw1jU6ViZ2frKx66TKmd32HsmR8e29n0410ltKsER5w/afJ
	hNbIacP6KYrPMu/AFpsTRXHf/ZmZh1RS2eBk0=
MIME-Version: 1.0
Received: by 10.204.143.153 with SMTP id v25mr3118843bku.116.1262125486232; 
	Tue, 29 Dec 2009 14:24:46 -0800 (PST)
In-Reply-To: <87d41xpoc3.fsf@mocca.josefsson.org>
References: <26b41b990912290814o47390bbble95d8c585e14a461@mail.gmail.com>
	<87d41xpoc3.fsf@mocca.josefsson.org>
Date: Tue, 29 Dec 2009 16:24:46 -0600
Message-ID: <26b41b990912291424o1f173b23p6ca6d00ed51cae50@mail.gmail.com>
Subject: Re: libssh2 gmake check failed
From: ctf <serviceman36@gmail.com>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0387924165=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============0387924165==
Content-Type: multipart/alternative; boundary=0015175d031c44d692047be57d91

--0015175d031c44d692047be57d91
Content-Type: text/plain; charset=ISO-8859-1

yes it happens every time and it's a new server very fasr
and yes it happens every time

On Tue, Dec 29, 2009 at 1:33 PM, Simon Josefsson <simon@josefsson.org>wrote:

> ctf <serviceman36@gmail.com> writes:
>
> > HPUX 11.31 itatium
> >
> > gmake[2]: Leaving directory `/var/tmp/Cary/libssh2-1.2.2/tests'
> > gmake  check-TESTS
> > gmake[2]: Entering directory `/var/tmp/Cary/libssh2-1.2.2/tests'
> > PASS: simple
> > Fingerprint: A0 90 21 22 20 7A 93 7F B9 7B 52 CE FA A6 08 7F
> > Authentication methods: publickey,password,keyboard-interactive
> >         Authentication by public key failed!
> > FAIL: ssh2.sh
>
> Does this happen every time?  There is a sleep in there that may be too
> short for slow machines.  Try re-running with a hot disk cache.
>
> /Simon
> _______________________________________________
> libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
>

--0015175d031c44d692047be57d91
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

yes it happens every time and it&#39;s a new server very fasr<br>and yes it=
 happens every time<br><br><div class=3D"gmail_quote">On Tue, Dec 29, 2009 =
at 1:33 PM, Simon Josefsson <span dir=3D"ltr">&lt;<a href=3D"mailto:simon@j=
osefsson.org">simon@josefsson.org</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"border-left: 1px solid rgb(204, =
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class=3D"im"=
>ctf &lt;<a href=3D"mailto:serviceman36@gmail.com">serviceman36@gmail.com</=
a>&gt; writes:<br>

<br>
&gt; HPUX 11.31 itatium<br>
&gt;<br>
&gt; gmake[2]: Leaving directory `/var/tmp/Cary/libssh2-1.2.2/tests&#39;<br=
>
&gt; gmake =A0check-TESTS<br>
&gt; gmake[2]: Entering directory `/var/tmp/Cary/libssh2-1.2.2/tests&#39;<b=
r>
&gt; PASS: simple<br>
&gt; Fingerprint: A0 90 21 22 20 7A 93 7F B9 7B 52 CE FA A6 08 7F<br>
&gt; Authentication methods: publickey,password,keyboard-interactive<br>
&gt; =A0 =A0 =A0 =A0 Authentication by public key failed!<br>
&gt; FAIL: ssh2.sh<br>
<br>
</div>Does this happen every time? =A0There is a sleep in there that may be=
 too<br>
short for slow machines. =A0Try re-running with a hot disk cache.<br>
<br>
/Simon<br>
_______________________________________________<br>
libssh2-devel <a href=3D"http://cool.haxx.se/cgi-bin/mailman/listinfo/libss=
h2-devel" target=3D"_blank">http://cool.haxx.se/cgi-bin/mailman/listinfo/li=
bssh2-devel</a><br>
</blockquote></div><br>

--0015175d031c44d692047be57d91--

--===============0387924165==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============0387924165==--

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 30 07:41:04 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBU6epXj030139;
	Wed, 30 Dec 2009 07:41:00 +0100
Received: from relay-3.dnvr.twtelecom.net (relay-3.dnvr.twtelecom.net
	[64.129.67.76])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBU6em3t029964
	for <libssh2-devel@cool.haxx.se>; Wed, 30 Dec 2009 07:40:49 +0100
Received: from localhost (unknown [127.0.0.1])
	by relay-3.dnvr.twtelecom.net (Postfix) with ESMTP id 8B9456100E1
	for <libssh2-devel@cool.haxx.se>; Tue, 29 Dec 2009 23:40:43 -0700 (MST)
X-Virus-Scanned: amavisd-new at twtelecom.net
Received: from relay-3.dnvr.twtelecom.net ([127.0.0.1])
	by localhost (relay-3.dnvr.twtelecom.net [127.0.0.1]) (amavisd-new,
	port 10024)
	with ESMTP id Q0EIJEZ-F-k9 for <libssh2-devel@cool.haxx.se>;
	Tue, 29 Dec 2009 23:40:42 -0700 (MST)
Received: from univac.hallmarkins.internal (unknown [209.234.192.158])
	by relay-3.dnvr.twtelecom.net (Postfix) with ESMTP id 127816100DB
	for <libssh2-devel@cool.haxx.se>; Tue, 29 Dec 2009 23:40:41 -0700 (MST)
Received: from [172.16.5.99] ([173.12.216.185])
	(authenticated user oliver@ootbc.com)
	by univac.hallmarkins.internal (Kerio MailServer 6.7.1)
	(using TLSv1/SSLv3 with cipher AES256-SHA (256 bits))
	for libssh2-devel@cool.haxx.se; Tue, 29 Dec 2009 22:40:40 -0800
Message-ID: <4B3AF5EB.2010200@ootbc.com>
Date: Tue, 29 Dec 2009 22:40:43 -0800
From: Oliver Nelson <oliver@ootbc.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US;
	rv:1.9.1.5) Gecko/20091204 Thunderbird/3.0
MIME-Version: 1.0
To: libssh2-devel@cool.haxx.se
Subject: RE: Unable to exchange encryption keys
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

I've done some more work on this problem.  Using the released version of 1.2.2 now.  I haven't been able to get libssh2 debug mode to work for some odd reason (my fault no doubt), but I did get some debug output from my openssh server which all looked fine.  Upon further investigation, I can see that in the session object, the SHA1 and MD5 hash of the encryption key is shown correctly (based on looking at the fingerprint from another client connecting to the same host).  This seems to indicate that the key exchange is working, but libssh2_session_hostkey returns an empty string.  I get this behaviour on any host I connect to.  My test code looks like this:

	int iretval;
	unsigned long mode = 1;
	int last_socket_err = 0;
	int other_port = 0;
	fd_set read_set, write_set;
	char *ssh_addr;
	size_t len;
	int type;
	addrinfo * result = NULL;
	addrinfo hints;
	DWORD retval;

	ZeroMemory(&hints, sizeof(hints));
	hints.ai_family = AF_INET;
	hints.ai_socktype = SOCK_STREAM;
	hints.ai_protocol = IPPROTO_TCP;

	retval = getaddrinfo("173.12.216.189", "222",&hints,&result);

	SOCKET sshsock = socket(AF_INET, SOCK_STREAM, 0);
	iretval = connect(sshsock, result->ai_addr, result->ai_addrlen);

	LIBSSH2_SESSION * session = NULL;
	session = libssh2_session_init();
	
	iretval = libssh2_session_startup(session, sshsock);
	if (iretval)
		::PostQuitMessage(0);
	
	LIBSSH2_KNOWNHOSTS * hosts;
	hosts = libssh2_knownhost_init(session);

	const char* fingerprint = libssh2_session_hostkey(session,&len,&type);

Now, I could use libssh2_hostkey_hash (which returns a correct fingerprint) and do the check myself, but I think I'm supposed to call libssh2_knownhost_check which seems to want the whole key, not just the fingerprint of the key.  Is there something wrong with my code here?

NOTE: You can test against this host if you like (no need to authenticate as the problem is pre-authentication), it has ssh running on port 222 rather than 22.

OLIVER

-----

I'm connecting to an OpenSSH server (banner is SSH-2.0-OpenSSH_5.1p1
Debian-5ubuntu1).  I get this error after calling
libssh2_session_startup.  I can skip the host key verification and just
go ahead with the session just fine.  Everything works just fine from
then on.  Any clues what might be causing this?  I'm using ver
1.2.2-20091022 of the libssh2 package.  Anyone have any ideas what could
be wrong?

OLIVER



_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 30 16:44:08 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBUFhXsJ000341;
	Wed, 30 Dec 2009 16:43:41 +0100
Received: from mail-bw0-f226.google.com (mail-bw0-f226.google.com
	[209.85.218.226])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBUFhWd6032662
	for <libssh2-devel@cool.haxx.se>; Wed, 30 Dec 2009 16:43:32 +0100
Received: by bwz26 with SMTP id 26so8173051bwz.7
	for <libssh2-devel@cool.haxx.se>; Wed, 30 Dec 2009 07:43:28 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:mime-version:received:in-reply-to:references
	:date:message-id:subject:from:to:content-type;
	bh=RRgWUWTVJgwBfB9vM5OBImyTJqG9fjMM94aXKIxc2Gc=;
	b=sUBbipNGXNkSBIzLBcEjvO7pOZmkN0SL+Na80C14ijEQy/mCc84YrzOXvSwwW1xg6B
	mMgmhjURi1VG/8R6VmTqhaJEjvLV2sZjHGTVosafScq29Tf7Pi4CinlgMN1gnzPnZFA6
	hVL9hjFXczs7PcD5R95VyLFxxhQ+0tE/Lyq2U=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=mime-version:in-reply-to:references:date:message-id:subject:from:to
	:content-type;
	b=SSdMUtMXkI8f+qE5x10009W8piObyw8UojlYalMnY7XkDKevAmRjk5OO1EN6tZ2RO/
	Bxau5JDJEAmwUZd02UeREbv0+3ZZf9tKy6v5gYfQd1Cbclb56eoWVbBQleXWjYPUOZ9s
	td7/wV/Pmid8Tn/yA53VRT/xKbq8Jew/rmGcg=
MIME-Version: 1.0
Received: by 10.204.8.142 with SMTP id h14mr7651350bkh.166.1262187807126; Wed, 
	30 Dec 2009 07:43:27 -0800 (PST)
In-Reply-To: <87d41xpoc3.fsf@mocca.josefsson.org>
References: <26b41b990912290814o47390bbble95d8c585e14a461@mail.gmail.com>
	<87d41xpoc3.fsf@mocca.josefsson.org>
Date: Wed, 30 Dec 2009 09:43:26 -0600
Message-ID: <26b41b990912300743s744198fagfa4a46c67fc05e81@mail.gmail.com>
Subject: Re: libssh2 gmake check failed
From: ctf <serviceman36@gmail.com>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============2004860518=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============2004860518==
Content-Type: multipart/alternative; boundary=00151758f270e233fa047bf3fff2

--00151758f270e233fa047bf3fff2
Content-Type: text/plain; charset=ISO-8859-1

When you say try using hot disk cache do you mean
./configure --cache-file=config.cache?

On Tue, Dec 29, 2009 at 1:33 PM, Simon Josefsson <simon@josefsson.org>wrote:

> ctf <serviceman36@gmail.com> writes:
>
> > HPUX 11.31 itatium
> >
> > gmake[2]: Leaving directory `/var/tmp/Cary/libssh2-1.2.2/tests'
> > gmake  check-TESTS
> > gmake[2]: Entering directory `/var/tmp/Cary/libssh2-1.2.2/tests'
> > PASS: simple
> > Fingerprint: A0 90 21 22 20 7A 93 7F B9 7B 52 CE FA A6 08 7F
> > Authentication methods: publickey,password,keyboard-interactive
> >         Authentication by public key failed!
> > FAIL: ssh2.sh
>
> Does this happen every time?  There is a sleep in there that may be too
> short for slow machines.  Try re-running with a hot disk cache.
>
> /Simon
> _______________________________________________
> libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
>

--00151758f270e233fa047bf3fff2
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

When you say try using hot disk cache do you mean <br>./configure --cache-f=
ile=3Dconfig.cache?<br><br><div class=3D"gmail_quote">On Tue, Dec 29, 2009 =
at 1:33 PM, Simon Josefsson <span dir=3D"ltr">&lt;<a href=3D"mailto:simon@j=
osefsson.org">simon@josefsson.org</a>&gt;</span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"border-left: 1px solid rgb(204, =
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class=3D"im"=
>ctf &lt;<a href=3D"mailto:serviceman36@gmail.com">serviceman36@gmail.com</=
a>&gt; writes:<br>

<br>
&gt; HPUX 11.31 itatium<br>
&gt;<br>
&gt; gmake[2]: Leaving directory `/var/tmp/Cary/libssh2-1.2.2/tests&#39;<br=
>
&gt; gmake =A0check-TESTS<br>
&gt; gmake[2]: Entering directory `/var/tmp/Cary/libssh2-1.2.2/tests&#39;<b=
r>
&gt; PASS: simple<br>
&gt; Fingerprint: A0 90 21 22 20 7A 93 7F B9 7B 52 CE FA A6 08 7F<br>
&gt; Authentication methods: publickey,password,keyboard-interactive<br>
&gt; =A0 =A0 =A0 =A0 Authentication by public key failed!<br>
&gt; FAIL: ssh2.sh<br>
<br>
</div>Does this happen every time? =A0There is a sleep in there that may be=
 too<br>
short for slow machines. =A0Try re-running with a hot disk cache.<br>
<br>
/Simon<br>
_______________________________________________<br>
libssh2-devel <a href=3D"http://cool.haxx.se/cgi-bin/mailman/listinfo/libss=
h2-devel" target=3D"_blank">http://cool.haxx.se/cgi-bin/mailman/listinfo/li=
bssh2-devel</a><br>
</blockquote></div><br>

--00151758f270e233fa047bf3fff2--

--===============2004860518==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============2004860518==--

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 30 18:55:16 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBUHsuGg025969;
	Wed, 30 Dec 2009 18:55:04 +0100
Received: from yxa-v.extundo.com (yxa-v.extundo.com [83.241.177.39])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBUHsuhX025966
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 30 Dec 2009 18:54:56 +0100
Received: from mocca (c80-216-24-211.bredband.comhem.se [80.216.24.211])
	(authenticated bits=0)
	by yxa-v.extundo.com (8.14.3/8.14.3/Debian-5) with ESMTP id
	nBUHssrP011266
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Wed, 30 Dec 2009 18:54:56 +0100
From: Simon Josefsson <simon@josefsson.org>
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: Re: libssh2 gmake check failed
References: <26b41b990912290814o47390bbble95d8c585e14a461@mail.gmail.com>
	<87d41xpoc3.fsf@mocca.josefsson.org>
	<26b41b990912300743s744198fagfa4a46c67fc05e81@mail.gmail.com>
OpenPGP: id=B565716F; url=http://josefsson.org/key.txt
X-Hashcash: 1:22:091230:libssh2-devel@cool.haxx.se::rP54UCub0eTO9k8G:51bu
Date: Wed, 30 Dec 2009 18:54:54 +0100
In-Reply-To: <26b41b990912300743s744198fagfa4a46c67fc05e81@mail.gmail.com>
	(ctf's message of "Wed, 30 Dec 2009 09:43:26 -0600")
Message-ID: <87fx6s73f5.fsf@mocca.josefsson.org>
User-Agent: Gnus/5.110011 (No Gnus v0.11) Emacs/23.1 (gnu/linux)
MIME-Version: 1.0
X-Spam-Status: No, score=-0.0 required=5.0 tests=AWL,BAYES_00,
	DATE_IN_FUTURE_48_96,RDNS_DYNAMIC,SPF_FAIL autolearn=no version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on yxa-v.extundo.com
X-Virus-Scanned: clamav-milter 0.95.3 at yxa-v
X-Virus-Status: Clean
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

No, just normal OS disk caching.  Ok, so my first theory was wrong.  Is
this with OpenSSL or libgcrypt?

/Simon

ctf <serviceman36@gmail.com> writes:

> When you say try using hot disk cache do you mean
> ./configure --cache-file=config.cache?
>
> On Tue, Dec 29, 2009 at 1:33 PM, Simon Josefsson <simon@josefsson.org>wrote:
>
>> ctf <serviceman36@gmail.com> writes:
>>
>> > HPUX 11.31 itatium
>> >
>> > gmake[2]: Leaving directory `/var/tmp/Cary/libssh2-1.2.2/tests'
>> > gmake  check-TESTS
>> > gmake[2]: Entering directory `/var/tmp/Cary/libssh2-1.2.2/tests'
>> > PASS: simple
>> > Fingerprint: A0 90 21 22 20 7A 93 7F B9 7B 52 CE FA A6 08 7F
>> > Authentication methods: publickey,password,keyboard-interactive
>> >         Authentication by public key failed!
>> > FAIL: ssh2.sh
>>
>> Does this happen every time?  There is a sleep in there that may be too
>> short for slow machines.  Try re-running with a hot disk cache.
>>
>> /Simon
>> _______________________________________________
>> libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
>>
> _______________________________________________
> libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 30 21:33:49 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBUKXcdY012063;
	Wed, 30 Dec 2009 21:33:46 +0100
Received: from mail-bw0-f226.google.com (mail-bw0-f226.google.com
	[209.85.218.226])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBUKXbAX012008
	for <libssh2-devel@cool.haxx.se>; Wed, 30 Dec 2009 21:33:37 +0100
Received: by bwz26 with SMTP id 26so8316981bwz.7
	for <libssh2-devel@cool.haxx.se>; Wed, 30 Dec 2009 12:33:32 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;
	h=domainkey-signature:mime-version:received:in-reply-to:references
	:date:message-id:subject:from:to:content-type;
	bh=HbR182cu/77qcuxysXFMiV+SqNOX+B1TwvtpslXTriA=;
	b=j3gNOheUUc+r6oJG8A/4BgKgc1cUdLXJix4vP6h86xk5De3E5/lilQBy3ZRzEeNmNQ
	huKanDxF4kB0VmwZiXby8RFrR8ZG6uPEKNlifJU7tq3hfNvELjhmw12QiCwQ0LIfKby+
	gpLR8LsigvMzlcniYG9+oRb6aPTvLrqLSfxfQ=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma;
	h=mime-version:in-reply-to:references:date:message-id:subject:from:to
	:content-type;
	b=bQ+qGusP8GEtHXLEx1E5LteIeSM51DSGNFunFV03IZAS+JkYSIMvEuAgclGlwBafEm
	erfKraxBw52yZ5vATiDy4BKoNX+FBXLvPWMir/7ma+02GD7IiQ3LfAcTJ5rQZZvPIqdv
	E8vkhcrt0N/b7cMOX+Ejn+NcFXeVgq8zfnBJ8=
MIME-Version: 1.0
Received: by 10.204.5.66 with SMTP id 2mr7827668bku.198.1262205212531; Wed, 30 
	Dec 2009 12:33:32 -0800 (PST)
In-Reply-To: <87fx6s73f5.fsf@mocca.josefsson.org>
References: <26b41b990912290814o47390bbble95d8c585e14a461@mail.gmail.com>
	<87d41xpoc3.fsf@mocca.josefsson.org>
	<26b41b990912300743s744198fagfa4a46c67fc05e81@mail.gmail.com>
	<87fx6s73f5.fsf@mocca.josefsson.org>
Date: Wed, 30 Dec 2009 14:33:32 -0600
Message-ID: <26b41b990912301233s336066bo1343cc9efcdd8c7e@mail.gmail.com>
Subject: Re: libssh2 gmake check failed
From: ctf <serviceman36@gmail.com>
To: libssh2 development <libssh2-devel@cool.haxx.se>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0886454908=="
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

--===============0886454908==
Content-Type: multipart/alternative; boundary=00151758a4c4539dfe047bf80d71

--00151758a4c4539dfe047bf80d71
Content-Type: text/plain; charset=ISO-8859-1

I have tried both, same results for both

On Wed, Dec 30, 2009 at 11:54 AM, Simon Josefsson <simon@josefsson.org>wrote:

> No, just normal OS disk caching.  Ok, so my first theory was wrong.  Is
> this with OpenSSL or libgcrypt?
>
> /Simon
>
> ctf <serviceman36@gmail.com> writes:
>
> > When you say try using hot disk cache do you mean
> > ./configure --cache-file=config.cache?
> >
> > On Tue, Dec 29, 2009 at 1:33 PM, Simon Josefsson <simon@josefsson.org
> >wrote:
> >
> >> ctf <serviceman36@gmail.com> writes:
> >>
> >> > HPUX 11.31 itatium
> >> >
> >> > gmake[2]: Leaving directory `/var/tmp/Cary/libssh2-1.2.2/tests'
> >> > gmake  check-TESTS
> >> > gmake[2]: Entering directory `/var/tmp/Cary/libssh2-1.2.2/tests'
> >> > PASS: simple
> >> > Fingerprint: A0 90 21 22 20 7A 93 7F B9 7B 52 CE FA A6 08 7F
> >> > Authentication methods: publickey,password,keyboard-interactive
> >> >         Authentication by public key failed!
> >> > FAIL: ssh2.sh
> >>
> >> Does this happen every time?  There is a sleep in there that may be too
> >> short for slow machines.  Try re-running with a hot disk cache.
> >>
> >> /Simon
> >> _______________________________________________
> >> libssh2-devel
> http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
> >>
> > _______________________________________________
> > libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
> _______________________________________________
> libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
>

--00151758a4c4539dfe047bf80d71
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

I have tried both, same results for both<br><br><div class=3D"gmail_quote">=
On Wed, Dec 30, 2009 at 11:54 AM, Simon Josefsson <span dir=3D"ltr">&lt;<a =
href=3D"mailto:simon@josefsson.org">simon@josefsson.org</a>&gt;</span> wrot=
e:<br>
<blockquote class=3D"gmail_quote" style=3D"border-left: 1px solid rgb(204, =
204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">No, just normal O=
S disk caching. =A0Ok, so my first theory was wrong. =A0Is<br>
this with OpenSSL or libgcrypt?<br>
<font color=3D"#888888"><br>
/Simon<br>
</font><div><div></div><div class=3D"h5"><br>
ctf &lt;<a href=3D"mailto:serviceman36@gmail.com">serviceman36@gmail.com</a=
>&gt; writes:<br>
<br>
&gt; When you say try using hot disk cache do you mean<br>
&gt; ./configure --cache-file=3Dconfig.cache?<br>
&gt;<br>
&gt; On Tue, Dec 29, 2009 at 1:33 PM, Simon Josefsson &lt;<a href=3D"mailto=
:simon@josefsson.org">simon@josefsson.org</a>&gt;wrote:<br>
&gt;<br>
&gt;&gt; ctf &lt;<a href=3D"mailto:serviceman36@gmail.com">serviceman36@gma=
il.com</a>&gt; writes:<br>
&gt;&gt;<br>
&gt;&gt; &gt; HPUX 11.31 itatium<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; gmake[2]: Leaving directory `/var/tmp/Cary/libssh2-1.2.2/test=
s&#39;<br>
&gt;&gt; &gt; gmake =A0check-TESTS<br>
&gt;&gt; &gt; gmake[2]: Entering directory `/var/tmp/Cary/libssh2-1.2.2/tes=
ts&#39;<br>
&gt;&gt; &gt; PASS: simple<br>
&gt;&gt; &gt; Fingerprint: A0 90 21 22 20 7A 93 7F B9 7B 52 CE FA A6 08 7F<=
br>
&gt;&gt; &gt; Authentication methods: publickey,password,keyboard-interacti=
ve<br>
&gt;&gt; &gt; =A0 =A0 =A0 =A0 Authentication by public key failed!<br>
&gt;&gt; &gt; FAIL: ssh2.sh<br>
&gt;&gt;<br>
&gt;&gt; Does this happen every time? =A0There is a sleep in there that may=
 be too<br>
&gt;&gt; short for slow machines. =A0Try re-running with a hot disk cache.<=
br>
&gt;&gt;<br>
&gt;&gt; /Simon<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; libssh2-devel <a href=3D"http://cool.haxx.se/cgi-bin/mailman/listi=
nfo/libssh2-devel" target=3D"_blank">http://cool.haxx.se/cgi-bin/mailman/li=
stinfo/libssh2-devel</a><br>
&gt;&gt;<br>
&gt; _______________________________________________<br>
&gt; libssh2-devel <a href=3D"http://cool.haxx.se/cgi-bin/mailman/listinfo/=
libssh2-devel" target=3D"_blank">http://cool.haxx.se/cgi-bin/mailman/listin=
fo/libssh2-devel</a><br>
_______________________________________________<br>
libssh2-devel <a href=3D"http://cool.haxx.se/cgi-bin/mailman/listinfo/libss=
h2-devel" target=3D"_blank">http://cool.haxx.se/cgi-bin/mailman/listinfo/li=
bssh2-devel</a><br>
</div></div></blockquote></div><br>

--00151758a4c4539dfe047bf80d71--

--===============0886454908==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

--===============0886454908==--

From libssh2-devel-bounces@cool.haxx.se  Wed Dec 30 21:53:49 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBUKrisu026987;
	Wed, 30 Dec 2009 21:53:48 +0100
Received: from giant.haxx.se (giant.haxx.se [83.168.254.42])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBUKrhww026981
	for <libssh2-devel@cool.haxx.se>; Wed, 30 Dec 2009 21:53:43 +0100
Date: Wed, 30 Dec 2009 21:53:43 +0100 (CET)
From: Daniel Stenberg <daniel@haxx.se>
X-X-Sender: dast@giant.haxx.se
To: libssh2 development <libssh2-devel@cool.haxx.se>
Subject: RE: Unable to exchange encryption keys
In-Reply-To: <4B3AF5EB.2010200@ootbc.com>
Message-ID: <alpine.DEB.2.00.0912302147540.13065@tvnag.unkk.fr>
References: <4B3AF5EB.2010200@ootbc.com>
User-Agent: Alpine 2.00 (DEB 1167 2008-08-23)
X-fromdanielhimself: yes
MIME-Version: 1.0
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On Tue, 29 Dec 2009, Oliver Nelson wrote:

> I've done some more work on this problem.

"this problem" being the one mentioned in the subject?

> libssh2_session_hostkey returns an empty string.

I really don't see how this is related to the problem with encryption keys. 
The libssh2_session_hostkey() returns the hostkey from the negotiation. To me 
it sounds more like a bug in that specific hostkey handling. Can't you just 
set a break-point where the key is stored and see what it does?

-- 

  / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Dec 31 13:32:08 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBVCVu7c023948;
	Thu, 31 Dec 2009 13:32:02 +0100
Received: from ch3.sourceforge.net (ch3.sourceforge.net [216.34.181.60])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBVCVr9n023901
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT)
	for <libssh2-devel@cool.haxx.se>; Thu, 31 Dec 2009 13:31:54 +0100
Received: from www by 565xhf1.ch3.sourceforge.com with local (Exim 4.69)
	(envelope-from <noreply@sourceforge.net>)
	id 1NQKC0-0003NL-RB; Thu, 31 Dec 2009 12:31:52 +0000
To: noreply@sourceforge.net
From: "SourceForge.net" <noreply@sourceforge.net>
Subject: [ libssh2-Bugs-2924153 ] [cppcheck] found a few errors in example code
Mime-Version: 1.0
X-SourceForge-Tracker-unixname: libssh2
X-SourceForge-Tracker-trackerid: 703942
X-SourceForge-Tracker-itemid: 2924153
X-SourceForge-Tracker-itemstatus: Open
X-SourceForge-Tracker-itemassignee: nobody
X-SourceForge-Tracker-itemupdate-reason: Tracker Item Submitted
X-SourceForge-Tracker-itemupdate-username: ettlmartin
Message-Id: <E1NQKC0-0003NL-RB@565xhf1.ch3.sourceforge.com>
Date: Thu, 31 Dec 2009 12:31:52 +0000
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

Bugs item #2924153, was opened at 2009-12-31 12:31
Message generated for change (Tracker Item Submitted) made by ettlmartin
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=703942&aid=2924153&group_id=125852

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: misc
Group: None
Status: Open
Resolution: None
Priority: 5
Private: No
Submitted By: orbitcowboy (ettlmartin)
Assigned to: Nobody/Anonymous (nobody)
Summary: [cppcheck] found a few errors in example code

Initial Comment:


during a check with the static code analysis tool cppcheck
(http://sourceforge.net/apps/mediawiki/cppcheck/index.php?title=Main_Page)
the tool found a few resource leaks and one memory leak

Here the output of the tool

[../example/sftp_RW_nonblock.c:287]: (Error) Resource leak: tempstorage
[../example/x11.c:129]: (Error) Memory leak: temp_buff
[../example/scp_write.c:201]: (Error) Resource leak: local
[../example/sftp_write.c:203]: (Error) Resource leak: local

Please refer the attached patch that fixes the issues

Best regards

Ettl Martin


----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=703942&aid=2924153&group_id=125852
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

From libssh2-devel-bounces@cool.haxx.se  Thu Dec 31 16:01:47 2009
Return-Path: <libssh2-devel-bounces@cool.haxx.se>
Received: from giant.haxx.se (localhost.localdomain [127.0.0.1])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBVF1auK021970;
	Thu, 31 Dec 2009 16:01:44 +0100
Received: from relay-2.dnvr.twtelecom.net (relay-2.dnvr.twtelecom.net
	[64.129.67.72])
	by giant.haxx.se (8.14.3/8.14.3/Debian-9) with ESMTP id nBVF1YQG021776
	for <libssh2-devel@cool.haxx.se>; Thu, 31 Dec 2009 16:01:34 +0100
Received: from localhost (unknown [127.0.0.1])
	by relay-2.dnvr.twtelecom.net (Postfix) with ESMTP id EABF22FC05C
	for <libssh2-devel@cool.haxx.se>; Thu, 31 Dec 2009 08:01:29 -0700 (MST)
X-Virus-Scanned: amavisd-new at twtelecom.net
Received: from relay-2.dnvr.twtelecom.net ([127.0.0.1])
	by localhost (relay-2.dnvr.twtelecom.net [127.0.0.1]) (amavisd-new,
	port 10024)
	with ESMTP id SjIqO-saAyCB for <libssh2-devel@cool.haxx.se>;
	Thu, 31 Dec 2009 08:01:27 -0700 (MST)
Received: from univac.hallmarkins.internal (unknown [209.234.192.158])
	by relay-2.dnvr.twtelecom.net (Postfix) with ESMTP id CA6D52FC064
	for <libssh2-devel@cool.haxx.se>; Thu, 31 Dec 2009 08:01:27 -0700 (MST)
Received: from [172.16.5.100] ([173.12.216.185])
	(authenticated user oliver@ootbc.com)
	by univac.hallmarkins.internal (Kerio MailServer 6.7.1)
	(using TLSv1/SSLv3 with cipher AES256-SHA (256 bits))
	for libssh2-devel@cool.haxx.se; Thu, 31 Dec 2009 07:01:26 -0800
Message-ID: <4B3CBCC2.5000300@ootbc.com>
Date: Thu, 31 Dec 2009 07:01:22 -0800
From: Oliver Nelson <oliver@ootbc.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US;
	rv:1.9.1.5) Gecko/20091130 Thunderbird/3.0
MIME-Version: 1.0
To: libssh2-devel@cool.haxx.se
Subject: RE: Unable to exchange encryption keys
References: <mailman.9.1262257202.26029.libssh2-devel@cool.haxx.se>
In-Reply-To: <mailman.9.1262257202.26029.libssh2-devel@cool.haxx.se>
X-BeenThere: libssh2-devel@cool.haxx.se
X-Mailman-Version: 2.1.12
Precedence: list
Reply-To: libssh2 development <libssh2-devel@cool.haxx.se>
List-Id: libssh2 development <libssh2-devel.cool.haxx.se>
List-Unsubscribe: <http://cool.haxx.se/cgi-bin/mailman/options/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=unsubscribe>
List-Archive: <http://cool.haxx.se/pipermail/libssh2-devel>
List-Post: <mailto:libssh2-devel@cool.haxx.se>
List-Help: <mailto:libssh2-devel-request@cool.haxx.se?subject=help>
List-Subscribe: <http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel>, 
	<mailto:libssh2-devel-request@cool.haxx.se?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: libssh2-devel-bounces@cool.haxx.se
Errors-To: libssh2-devel-bounces@cool.haxx.se

On 12/31/2009 3:00 AM, libssh2-devel-request@cool.haxx.se wrote:
> On Tue, 29 Dec 2009, Oliver Nelson wrote:
>
>    
>> >  I've done some more work on this problem.(all
>>      
> "this problem" being the one mentioned in the subject?
>
> Sorry if I was unclear.  I was posting a reply to a message of my own
> from a couple of weeks before.  I meant that I got a chance to look
> some more at the problem I am having.
>
>    
>> >  libssh2_session_hostkey returns an empty string.
>>      
> I really don't see how this is related to the problem with encryption keys.
> The libssh2_session_hostkey() returns the hostkey from the negotiation. To me
> it sounds more like a bug in that specific hostkey handling. Can't you just
> set a break-point where the key is stored and see what it does?
>
>    
> I don't have a very deep understanding of how SSH works.  I was under the impression that
> receiving the "Unable to exchange encryption keys" error I am getting
> was related to the reason that libssh2_session_hostkey isn't returning
> the hostkey.  If that isn't the case, them I'm a bit lost as to what is
> wrong.  It happens to every server I try to connect to so far.
> -- / daniel.haxx.se


_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

