On Aug 10, 2013, at 11:59 PM, William Orr <w...@worrbase.com> wrote:

> 
> On Aug 4, 2013, at 2:20 AM, Andreas Schneider <a...@cryptomilk.org> wrote:
> 
>> On Tuesday 30 July 2013 09:14:59 William Orr wrote:
>>> Hi all,
>>> 
>>> I'm trying to execute a command with sudo. sudo requires that I provide it
>>> with an ask pass program or have a PTY.  Currently I have code that exec's
>>> a program on the remote end (called wshd, wshd exec's sudo), and then
>>> requests a PTY. This code returns an error reading "Channel request pty-req
>>> failed." If I request a PTY prior to exec'ing a command, wshd never gets
>>> exec'd.
>>> 
>>> What I'm trying to do here is similar to `ssh -t <hostname> sudo whoami`,
>>> which exec's sudo, but also forces allocation of a PTY.
>>> 
>>> I'm using libssh 0.5.4 on RHEL 6.1. Let me know if you need more
>>> information.
>>> 
>>> http://bpaste.net/show/118708/
>> 
>> Did you read our tutorial?
>> 
>> http://api.libssh.org/master/libssh_tutor_shell.html
>> 
>> 
>> Cheers,
>> 
>> 
>>      -- andreas
>> 
>> -- 
>> Andreas Schneider                   GPG-ID: F33E3FC6
>> www.cryptomilk.org                a...@cryptomilk.org
>> 
>> 
> 
> Thanks for the help.
> 
> Now that I've converted my code, I'm having trouble sending more data over 
> stdin. I can execute commands just fine. But the command I'm executing takes 
> binary data from stdin. When I was executing it with 
> wsh_channel_request_exec, I could send binary data to it's stdin just fine. 
> Now that I'm requesting a shell and then executing it, it gets 0s for data. 
> The data hasn't changed, nor does it seem to depend on the data I'm sending. 
> I've ensured that I'm sending non-zero data.
> 
> My code worked prior to switching to request_shell.

I found the source of the problem: libssh is sending out an extra null byte 
before writing my data to stdin. Is there any particular reason for that? This 
did not happen with exec.

My binary protocol first sends 4 bytes of message size information, and then a 
message. When sending the message size, my code will error if any more or less 
than 4 bytes is sent. Since the client is NOT erring, libssh is sending an 
extra null byte before actually sending my message. Again, this has only 
happened after I switched from using ssh_channel_request_exec to 
ssh_channel_request_shell.

Any insight would be great.

Thanks!

Reply via email to