[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: X11 Forwarding
[Thread Prev] | [Thread Next]
- Subject: Re: X11 Forwarding
- From: Dustin Oprea <myselfasunder@xxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Fri, 13 Sep 2013 02:49:51 -0400
- To: libssh <libssh@xxxxxxxxxx>
Thanks for that clarification, Aris. Should that change end up in MASTER, imminently? Dustin On Sep 13, 2013 2:37 AM, "Aris Adamantiadis" <aris@xxxxxxxxxxxx> wrote: > Hi Dustin, > > The decision fits in the server. If you do not issue an x11 request, the > server will not bind a local port/unix socket for X11 and the env > variable DISPLAY will not be set. > Technically this callback could be executed even if you do not request > x11, but in that case it would be perfectly acceptable to deny it > (return NULL). I guess that answers your question. > If the callback is not defined, the request will be queued in a > ssh_message queue, which is parsed by a few other synchronous calls. Do > not use that if you can. > > However I see now that it may not work if you compile libssh without > WITH_SERVER. I'll fix this for 0.6 > > Kr, > > Aris > > Le 13/09/13 08:11, Dustin Oprea a écrit : > > Where does that decision fit into the library? It only appears to be > > referenced from this one function, which is not specific to X11, and it > > looks like it only matters if the callback is defined, regardless of > > whether request_x11 has previously been called. > > > > static int *ssh_execute_client_request*(ssh_session session, ssh_message > > msg) > > { > > ssh_channel channel = NULL; > > int rc = SSH_AGAIN; > > > > * if (msg->type == SSH_REQUEST_CHANNEL_OPEN* > > * && msg->channel_request_open.type == SSH_CHANNEL_X11* > > * && ssh_callbacks_exists(session->common.callbacks, > > channel_open_request_x11_function)) {* > > channel = > > *session->common.callbacks->channel_open_request_x11_function* (session, > > msg->channel_request_open.originator, > > msg->channel_request_open.originator_port, > > session->common.callbacks->userdata); > > > > > > > > Dustin > > > > > > > > On Fri, Sep 13, 2013 at 1:46 AM, Aris Adamantiadis <aris@xxxxxxxxxxxx > > <mailto:aris@xxxxxxxxxxxx>> wrote: > > > > Hi, > > > > request_x11 is still required because that's how you tell the server > you > > wish to use X11. > > The callback you implement should return a new ssh channel from > > ssh_channel_new. This in order to keep object ownership > (ssh_channel) to > > the application. > > > > Kr, > > > > Aris > > Le 13/09/13 06:02, Dustin Oprea a écrit : > > > Does that mean that the request_x11() and/or accept_x11() no > > longer need > > > to be called? > > > > > > What am I doing inside the callback.. Just do ssh_channel_new(), > > or do I > > > do an accept_x11() and return the ssh_channel from that? > > > > > > I always appreciate your help, Aris. > > > > > > > > > On Thu, Sep 12, 2013 at 1:36 PM, Aris Adamantiadis > > <aris@xxxxxxxxxxxx <mailto:aris@xxxxxxxxxxxx> > > > <mailto:aris@xxxxxxxxxxxx <mailto:aris@xxxxxxxxxxxx>>> wrote: > > > > > > Hi Dustin, > > > > > > ssh_channel_accept_x11() is called shortly after request_x11 > > when you > > > know that you're going to receive an X11 socket. However since > > 0.6rc > > > there's a session-defined callback to handle new X11 > connections: > > > > > > /** > > > * @brief Handles an SSH new channel open X11 request. This > > happens when > > > the server > > > * sends back an X11 connection attempt. This is a client-side > API > > > * @param session current session handler > > > * @param userdata Userdata to be passed to the callback > function. > > > * @returns a valid ssh_channel handle if the request is to be > > allowed > > > * @returns NULL if the request should not be allowed > > > * @warning The channel pointer returned by this callback must > > be closed > > > by the application. > > > */ > > > typedef ssh_channel (*ssh_channel_open_request_x11_callback) > > > (ssh_session session, > > > const char * originator_address, int originator_port, > void > > > *userdata); > > > > > > struct ssh_callbacks_struct { > > > /* ... */ > > > /** This function will be called when an incoming X11 > request is > > > received. > > > */ > > > ssh_channel_open_request_x11_callback > > > channel_open_request_x11_function; > > > }; > > > > > > I tested this in an application for a client but unfortunately > > don't > > > have any example around. However it's pretty simple if you > > look at the > > > other callback-based examples (like proxy.c or samplesshd-cb.c) > > > > > > Kr, > > > > > > Aris > > > > > > Le 12/09/13 12:58, Dustin Oprea a écrit : > > > > Does someone have experience with X11 forwarding? I'm > > current fixing > > > > another anomaly, but I wanted to get my thoughts straight on > > this. > > > This > > > > is the theoretical process as it makes sense to me: > > > > > > > > 1) ssh_channel_accept_x11(). Is this done between reads on > > the client, > > > > on a separate thread,.. or where? > > > > 2) At this point, we should have a X11 channel, returned > > from the > > > accept > > > > call. > > > > 3) ssh_channel_request_pty() > > > > 4) ssh_channel_change_pty_size() > > > > 5) ssh_channel_request_x11() > > > > 6) ssh_channel_request_shell() > > > > > > > > What now? Loop over communication on the shell channel -as > well > > > as- the > > > > X11 channel? > > > > > > > > Are there any unnecessary steps, above (like the pty_size() > > call)? > > > > > > > > > > > > Thanks. This is just about the only principal function that > > isn't > > > > clearly covered by the tutorials. > > > > > > > > Dustin > > > > > > > > > > > > > > > > > > > > >
Re: X11 Forwarding | Andreas Schneider <asn@xxxxxxxxxxxxxx> |
X11 Forwarding | Dustin Oprea <myselfasunder@xxxxxxxxx> |
Re: X11 Forwarding | Aris Adamantiadis <aris@xxxxxxxxxxxx> |
Re: X11 Forwarding | Dustin Oprea <myselfasunder@xxxxxxxxx> |
Re: X11 Forwarding | Aris Adamantiadis <aris@xxxxxxxxxxxx> |
Re: X11 Forwarding | Dustin Oprea <myselfasunder@xxxxxxxxx> |
Re: X11 Forwarding | Aris Adamantiadis <aris@xxxxxxxxxxxx> |