Diff

Differences From Artifact [587760a488]:

To Artifact [50828f4f41]:


268
269
270
271
272
273
274

275
276
277
278
279
280
281
static const struct ssh_kex *kex = NULL;
static const struct ssh_signkey *hostkey = NULL;
int (*ssh_get_password)(const char *prompt, char *str, int maxlen) = NULL;

static char *savedhost;
static int savedport;
static int ssh_send_ok;


static tree234 *ssh_channels;           /* indexed by local id */
static struct ssh_channel *mainchan;   /* primary session channel */

static enum {
    SSH_STATE_PREPACKET,
    SSH_STATE_BEFORE_SIZE,







>







268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
static const struct ssh_kex *kex = NULL;
static const struct ssh_signkey *hostkey = NULL;
int (*ssh_get_password)(const char *prompt, char *str, int maxlen) = NULL;

static char *savedhost;
static int savedport;
static int ssh_send_ok;
static int ssh_echoing, ssh_editing;

static tree234 *ssh_channels;           /* indexed by local id */
static struct ssh_channel *mainchan;   /* primary session channel */

static enum {
    SSH_STATE_PREPACKET,
    SSH_STATE_BEFORE_SIZE,
1836
1837
1838
1839
1840
1841
1842

1843
1844


1845
1846
1847
1848
1849
1850
1851
        ssh_state = SSH_STATE_INTERMED;
        do { crReturnV; } while (!ispkt);
        if (pktin.type != SSH1_SMSG_SUCCESS && pktin.type != SSH1_SMSG_FAILURE) {
            bombout(("Protocol confusion"));
            crReturnV;
        } else if (pktin.type == SSH1_SMSG_FAILURE) {
            c_write("Server refused to allocate pty\r\n", 32);

        }
	logevent("Allocated pty");


    }

    if (cfg.compression) {
        send_packet(SSH1_CMSG_REQUEST_COMPRESSION, PKT_INT, 6, PKT_END);
        do { crReturnV; } while (!ispkt);
        if (pktin.type != SSH1_SMSG_SUCCESS && pktin.type != SSH1_SMSG_FAILURE) {
            bombout(("Protocol confusion"));







>


>
>







1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
        ssh_state = SSH_STATE_INTERMED;
        do { crReturnV; } while (!ispkt);
        if (pktin.type != SSH1_SMSG_SUCCESS && pktin.type != SSH1_SMSG_FAILURE) {
            bombout(("Protocol confusion"));
            crReturnV;
        } else if (pktin.type == SSH1_SMSG_FAILURE) {
            c_write("Server refused to allocate pty\r\n", 32);
            ssh_editing = ssh_echoing = 1;
        }
	logevent("Allocated pty");
    } else {
        ssh_editing = ssh_echoing = 1;
    }

    if (cfg.compression) {
        send_packet(SSH1_CMSG_REQUEST_COMPRESSION, PKT_INT, 6, PKT_END);
        do { crReturnV; } while (!ispkt);
        if (pktin.type != SSH1_SMSG_SUCCESS && pktin.type != SSH1_SMSG_FAILURE) {
            bombout(("Protocol confusion"));
1867
1868
1869
1870
1871
1872
1873

1874
1875
1876
1877
1878
1879
1880
1881
1882
1883

    ssh_state = SSH_STATE_SESSION;
    if (size_needed)
	ssh_size();
    if (eof_needed)
        ssh_special(TS_EOF);


    ssh_send_ok = 1;
    ssh_channels = newtree234(ssh_channelcmp);
    begin_session();
    while (1) {
	crReturnV;
	if (ispkt) {
	    if (pktin.type == SSH1_SMSG_STDOUT_DATA ||
                pktin.type == SSH1_SMSG_STDERR_DATA) {
		long len = GET_32BIT(pktin.body);
		from_backend(pktin.type == SSH1_SMSG_STDERR_DATA,







>


<







1871
1872
1873
1874
1875
1876
1877
1878
1879
1880

1881
1882
1883
1884
1885
1886
1887

    ssh_state = SSH_STATE_SESSION;
    if (size_needed)
	ssh_size();
    if (eof_needed)
        ssh_special(TS_EOF);

    ldisc_send(NULL, 0);               /* cause ldisc to notice changes */
    ssh_send_ok = 1;
    ssh_channels = newtree234(ssh_channelcmp);

    while (1) {
	crReturnV;
	if (ispkt) {
	    if (pktin.type == SSH1_SMSG_STDOUT_DATA ||
                pktin.type == SSH1_SMSG_STDERR_DATA) {
		long len = GET_32BIT(pktin.body);
		from_backend(pktin.type == SSH1_SMSG_STDERR_DATA,
2739
2740
2741
2742
2743
2744
2745

2746
2747
2748


2749
2750
2751
2752
2753
2754
2755

        if (pktin.type != SSH2_MSG_CHANNEL_SUCCESS) {
            if (pktin.type != SSH2_MSG_CHANNEL_FAILURE) {
                bombout(("Server got confused by pty request"));
                crReturnV;
            }
            c_write("Server refused to allocate pty\r\n", 32);

        } else {
            logevent("Allocated pty");
        }


    }

    /*
     * Start a shell or a remote command.
     */
    ssh2_pkt_init(SSH2_MSG_CHANNEL_REQUEST);
    ssh2_pkt_adduint32(mainchan->remoteid); /* recipient channel */







>



>
>







2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762

        if (pktin.type != SSH2_MSG_CHANNEL_SUCCESS) {
            if (pktin.type != SSH2_MSG_CHANNEL_FAILURE) {
                bombout(("Server got confused by pty request"));
                crReturnV;
            }
            c_write("Server refused to allocate pty\r\n", 32);
            ssh_editing = ssh_echoing = 1;
        } else {
            logevent("Allocated pty");
        }
    } else {
        ssh_editing = ssh_echoing = 1;
    }

    /*
     * Start a shell or a remote command.
     */
    ssh2_pkt_init(SSH2_MSG_CHANNEL_REQUEST);
    ssh2_pkt_adduint32(mainchan->remoteid); /* recipient channel */
2789
2790
2791
2792
2793
2794
2795

2796
2797
2798
2799
2800
2801
2802
2803
2804
	ssh_size();
    if (eof_needed)
        ssh_special(TS_EOF);

    /*
     * Transfer data!
     */

    ssh_send_ok = 1;
    begin_session();
    while (1) {
        static int try_send;
	crReturnV;
        try_send = FALSE;
	if (ispkt) {
	    if (pktin.type == SSH2_MSG_CHANNEL_DATA ||
                pktin.type == SSH2_MSG_CHANNEL_EXTENDED_DATA) {







>

<







2796
2797
2798
2799
2800
2801
2802
2803
2804

2805
2806
2807
2808
2809
2810
2811
	ssh_size();
    if (eof_needed)
        ssh_special(TS_EOF);

    /*
     * Transfer data!
     */
    ldisc_send(NULL, 0);               /* cause ldisc to notice changes */
    ssh_send_ok = 1;

    while (1) {
        static int try_send;
	crReturnV;
        try_send = FALSE;
	if (ispkt) {
	    if (pktin.type == SSH2_MSG_CHANNEL_DATA ||
                pktin.type == SSH2_MSG_CHANNEL_EXTENDED_DATA) {
3001
3002
3003
3004
3005
3006
3007


3008
3009
3010
3011
3012
3013
3014
	
#ifdef MSCRYPTOAPI
    if(crypto_startup() == 0)
	return "Microsoft high encryption pack not installed!";
#endif

    ssh_send_ok = 0;



    p = connect_to_host(host, port, realhost);
    if (p != NULL)
	return p;

    return NULL;
}







>
>







3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
	
#ifdef MSCRYPTOAPI
    if(crypto_startup() == 0)
	return "Microsoft high encryption pack not installed!";
#endif

    ssh_send_ok = 0;
    ssh_editing = 0;
    ssh_echoing = 0;

    p = connect_to_host(host, port, realhost);
    if (p != NULL)
	return p;

    return NULL;
}
3095
3096
3097
3098
3099
3100
3101






3102
3103
3104
3105
3106
3107
3108
3109

3110
3111
        /* do nothing */
    }
}

static Socket ssh_socket(void) { return s; }

static int ssh_sendok(void) { return ssh_send_ok; }







Backend ssh_backend = {
    ssh_init,
    ssh_send,
    ssh_size,
    ssh_special,
    ssh_socket,
    ssh_sendok,

    22
};







>
>
>
>
>
>








>


3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
        /* do nothing */
    }
}

static Socket ssh_socket(void) { return s; }

static int ssh_sendok(void) { return ssh_send_ok; }

static int ssh_ldisc(int option) {
    if (option == LD_ECHO) return ssh_echoing;
    if (option == LD_EDIT) return ssh_editing;
    return FALSE;
}

Backend ssh_backend = {
    ssh_init,
    ssh_send,
    ssh_size,
    ssh_special,
    ssh_socket,
    ssh_sendok,
    ssh_ldisc,
    22
};