Diff

Differences From Artifact [10a12a5f74]:

To Artifact [10dff3188d]:


2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071

2072
2073
2074
2075
2076
2077
2078
	port = 22;		       /* default ssh port */
    ssh->savedport = port;

    /*
     * Try to find host.
     */
    logeventf(ssh, "Looking up host \"%s\"", host);
    addr = name_lookup(host, port, realhost);
    if ((err = sk_addr_error(addr)) != NULL)
	return err;

    /*
     * Open socket.
     */
    {
	char addrbuf[100];
	sk_getaddr(addr, addrbuf, 100);
	logeventf(ssh, "Connecting to %s port %d", addrbuf, port);
    }
    ssh->fn = &fn_table;
    ssh->s = new_connection(addr, *realhost, port, 0, 1, nodelay, (Plug) ssh);

    if ((err = sk_socket_error(ssh->s)) != NULL) {
	ssh->s = NULL;
	return err;
    }

    return NULL;
}







|












|
>







2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
	port = 22;		       /* default ssh port */
    ssh->savedport = port;

    /*
     * Try to find host.
     */
    logeventf(ssh, "Looking up host \"%s\"", host);
    addr = name_lookup(host, port, realhost, &ssh->cfg);
    if ((err = sk_addr_error(addr)) != NULL)
	return err;

    /*
     * Open socket.
     */
    {
	char addrbuf[100];
	sk_getaddr(addr, addrbuf, 100);
	logeventf(ssh, "Connecting to %s port %d", addrbuf, port);
    }
    ssh->fn = &fn_table;
    ssh->s = new_connection(addr, *realhost, port,
			    0, 1, nodelay, (Plug) ssh, &ssh->cfg);
    if ((err = sk_socket_error(ssh->s)) != NULL) {
	ssh->s = NULL;
	return err;
    }

    return NULL;
}
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
		    logeventf(ssh, "Service lookup failed for source"
			      " port \"%s\"", sports);
		}
	    }
	    if (sport && dport) {
		if (type == 'L') {
		    pfd_addforward(host, dport, *saddr ? saddr : NULL,
				   sport, ssh, ssh->cfg.lport_acceptall);
		    logeventf(ssh, "Local port %.*s%.*s%.*s%.*s%d%.*s"
			      " forwarding to %s:%.*s%.*s%d%.*s",
			      (int)(*saddr?strlen(saddr):0), *saddr?saddr:NULL,
			      (int)(*saddr?1:0), ":",
			      (int)(sserv ? strlen(sports) : 0), sports,
			      sserv, "(", sport, sserv, ")",
			      host,







|







3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
		    logeventf(ssh, "Service lookup failed for source"
			      " port \"%s\"", sports);
		}
	    }
	    if (sport && dport) {
		if (type == 'L') {
		    pfd_addforward(host, dport, *saddr ? saddr : NULL,
				   sport, ssh, &ssh->cfg);
		    logeventf(ssh, "Local port %.*s%.*s%.*s%.*s%d%.*s"
			      " forwarding to %s:%.*s%.*s%d%.*s",
			      (int)(*saddr?strlen(saddr):0), *saddr?saddr:NULL,
			      (int)(*saddr?1:0), ":",
			      (int)(sserv ? strlen(sports) : 0), sports,
			      sserv, "(", sport, sserv, ")",
			      host,
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
				PKT_INT, GET_32BIT(ssh->pktin.body), PKT_END);
		    logevent("Rejected X11 connect request");
		} else {
		    c = smalloc(sizeof(struct ssh_channel));
		    c->ssh = ssh;

		    if (x11_init(&c->u.x11.s, ssh->cfg.x11_display, c,
				 ssh->x11auth, NULL, -1) != NULL) {
			logevent("opening X11 forward connection failed");
			sfree(c);
			send_packet(ssh, SSH1_MSG_CHANNEL_OPEN_FAILURE,
				    PKT_INT, GET_32BIT(ssh->pktin.body),
				    PKT_END);
		    } else {
			logevent







|







3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
				PKT_INT, GET_32BIT(ssh->pktin.body), PKT_END);
		    logevent("Rejected X11 connect request");
		} else {
		    c = smalloc(sizeof(struct ssh_channel));
		    c->ssh = ssh;

		    if (x11_init(&c->u.x11.s, ssh->cfg.x11_display, c,
				 ssh->x11auth, NULL, -1, &ssh->cfg) != NULL) {
			logevent("opening X11 forward connection failed");
			sfree(c);
			send_packet(ssh, SSH1_MSG_CHANNEL_OPEN_FAILURE,
				    PKT_INT, GET_32BIT(ssh->pktin.body),
				    PKT_END);
		    } else {
			logevent
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
		    logevent(buf);
                    send_packet(ssh, SSH1_MSG_CHANNEL_OPEN_FAILURE,
                                PKT_INT, GET_32BIT(ssh->pktin.body), PKT_END);
		} else {
		    sprintf(buf, "Received remote port open request for %s:%d",
			    host, port);
		    logevent(buf);
		    e = pfd_newconnect(&c->u.pfd.s, host, port, c);
		    if (e != NULL) {
			char buf[256];
			sprintf(buf, "Port open failed: %s", e);
			logevent(buf);
			sfree(c);
			send_packet(ssh, SSH1_MSG_CHANNEL_OPEN_FAILURE,
				    PKT_INT, GET_32BIT(ssh->pktin.body),







|







3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
		    logevent(buf);
                    send_packet(ssh, SSH1_MSG_CHANNEL_OPEN_FAILURE,
                                PKT_INT, GET_32BIT(ssh->pktin.body), PKT_END);
		} else {
		    sprintf(buf, "Received remote port open request for %s:%d",
			    host, port);
		    logevent(buf);
		    e = pfd_newconnect(&c->u.pfd.s, host, port, c, &ssh->cfg);
		    if (e != NULL) {
			char buf[256];
			sprintf(buf, "Port open failed: %s", e);
			logevent(buf);
			sfree(c);
			send_packet(ssh, SSH1_MSG_CHANNEL_OPEN_FAILURE,
				    PKT_INT, GET_32BIT(ssh->pktin.body),
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
		    logeventf(ssh, "Service lookup failed for source"
			      " port \"%s\"", sports);
		}
	    }
	    if (sport && dport) {
		if (type == 'L') {
		    pfd_addforward(host, dport, *saddr ? saddr : NULL,
				   sport, ssh, ssh->cfg.lport_acceptall);
		    logeventf(ssh, "Local port %.*s%.*s%.*s%.*s%d%.*s"
			      " forwarding to %s:%.*s%.*s%d%.*s",
			      (int)(*saddr?strlen(saddr):0), *saddr?saddr:NULL,
			      (int)(*saddr?1:0), ":",
			      (int)(sserv ? strlen(sports) : 0), sports,
			      sserv, "(", sport, sserv, ")",
			      host,







|







5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
		    logeventf(ssh, "Service lookup failed for source"
			      " port \"%s\"", sports);
		}
	    }
	    if (sport && dport) {
		if (type == 'L') {
		    pfd_addforward(host, dport, *saddr ? saddr : NULL,
				   sport, ssh, &ssh->cfg);
		    logeventf(ssh, "Local port %.*s%.*s%.*s%.*s%d%.*s"
			      " forwarding to %s:%.*s%.*s%d%.*s",
			      (int)(*saddr?strlen(saddr):0), *saddr?saddr:NULL,
			      (int)(*saddr?1:0), ":",
			      (int)(sserv ? strlen(sports) : 0), sports,
			      sserv, "(", sport, sserv, ")",
			      host,
5742
5743
5744
5745
5746
5747
5748
5749

5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
		    char *addrstr = smalloc(peeraddrlen+1);
		    memcpy(addrstr, peeraddr, peeraddrlen);
		    peeraddr[peeraddrlen] = '\0';

		    if (!ssh->X11_fwd_enabled)
			error = "X11 forwarding is not enabled";
		    else if (x11_init(&c->u.x11.s, ssh->cfg.x11_display, c,
				      ssh->x11auth, addrstr, port) != NULL) {

			error = "Unable to open an X11 connection";
		    } else {
			c->type = CHAN_X11;
		    }

		    sfree(addrstr);
		} else if (typelen == 15 &&
			   !memcmp(type, "forwarded-tcpip", 15)) {
		    struct ssh_rportfwd pf, *realpf;
		    char *dummy;
		    int dummylen;
		    ssh2_pkt_getstring(ssh, &dummy, &dummylen);/* skip address */
		    pf.sport = ssh2_pkt_getuint32(ssh);
		    realpf = find234(ssh->rportfwds, &pf, NULL);
		    if (realpf == NULL) {
			error = "Remote port is not recognised";
		    } else {
			char *e = pfd_newconnect(&c->u.pfd.s, realpf->dhost,
						 realpf->dport, c);
			logeventf(ssh, "Received remote port open request"
				  " for %s:%d", realpf->dhost, realpf->dport);
			if (e != NULL) {
			    logeventf(ssh, "Port open failed: %s", e);
			    error = "Port open failed";
			} else {
			    logevent("Forwarded port opened successfully");







|
>


















|







5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
		    char *addrstr = smalloc(peeraddrlen+1);
		    memcpy(addrstr, peeraddr, peeraddrlen);
		    peeraddr[peeraddrlen] = '\0';

		    if (!ssh->X11_fwd_enabled)
			error = "X11 forwarding is not enabled";
		    else if (x11_init(&c->u.x11.s, ssh->cfg.x11_display, c,
				      ssh->x11auth, addrstr, port,
				      &ssh->cfg) != NULL) {
			error = "Unable to open an X11 connection";
		    } else {
			c->type = CHAN_X11;
		    }

		    sfree(addrstr);
		} else if (typelen == 15 &&
			   !memcmp(type, "forwarded-tcpip", 15)) {
		    struct ssh_rportfwd pf, *realpf;
		    char *dummy;
		    int dummylen;
		    ssh2_pkt_getstring(ssh, &dummy, &dummylen);/* skip address */
		    pf.sport = ssh2_pkt_getuint32(ssh);
		    realpf = find234(ssh->rportfwds, &pf, NULL);
		    if (realpf == NULL) {
			error = "Remote port is not recognised";
		    } else {
			char *e = pfd_newconnect(&c->u.pfd.s, realpf->dhost,
						 realpf->dport, c, &ssh->cfg);
			logeventf(ssh, "Received remote port open request"
				  " for %s:%d", realpf->dhost, realpf->dport);
			if (e != NULL) {
			    logeventf(ssh, "Port open failed: %s", e);
			    error = "Port open failed";
			} else {
			    logevent("Forwarded port opened successfully");