sprintf(vstring, "SSH-%s-%s\n",
char verstring[80], vlog[100]; sprintf(verstring, "SSH-%s-%s",
static int do_ssh_init(unsigned char c) {    static char vslen;    static char version[10];    static char *vstring;    static int vstrsize;    static char *vlog;    static int i;    crBegin;    /* Search for the string "SSH-" in the input. */    i = 0;    while (1) {	static const int transS[] = { 1, 2, 2, 1 };	static const int transH[] = { 0, 0, 3, 0 };	static const int transminus[] = { 0, 0, 0, -1 };	if (c == 'S') i = transS[i];	else if (c == 'H') i = transH[i];	else if (c == '-') i = transminus[i];	else i = 0;	if (i < 0)	    break;	crReturn(1);		       /* get another character */    }    vstring = smalloc(16);    vstrsize = 16;    strcpy(vstring, "SSH-");    vslen = 4;    i = 0;    while (1) {	crReturn(1);		       /* get another char */	if (vslen >= vstrsize-1) {            vstrsize += 16;            vstring = srealloc(vstring, vstrsize);        }        vstring[vslen++] = c;	if (i >= 0) {	    if (c == '-') {		version[i] = '\0';		i = -1;	    } else if (i < sizeof(version)-1)		version[i++] = c;	}	else if (c == '\n')	    break;    }    ssh_agentfwd_enabled = FALSE;    rdpkt2_state.incoming_sequence = 0;    vstring[vslen] = 0;    if (vslen > 80)        vlog = smalloc(20 + vslen);    else        vlog = smalloc(100);    sprintf(vlog, "Server version: %s", vstring);    ssh_detect_bugs(vstring);    vlog[strcspn(vlog, "\r\n")] = '\0';    logevent(vlog);    /*     * Server version "1.99" means we can choose whether we use v1     * or v2 protocol. Choice is based on cfg.sshprot.     */    if (ssh_versioncmp(version, cfg.sshprot == 1 ? "2.0" : "1.99") >= 0) {        /*         * This is a v2 server. Begin v2 protocol.         */        char verstring[80];        sprintf(verstring, "SSH-2.0-%s", sshver);        SHA_Init(&exhashbase);        /*         * Hash our version string and their version string.         */        sha_string(&exhashbase, verstring, strlen(verstring));        sha_string(&exhashbase, vstring, strcspn(vstring, "\r\n"));        sprintf(vstring, "%s\n", verstring);        sprintf(vlog, "We claim version: %s", verstring);        logevent(vlog);        logevent("Using SSH protocol version 2");        sk_write(s, vstring, strlen(vstring));        ssh_protocol = ssh2_protocol;        ssh_version = 2;        s_rdpkt = ssh2_rdpkt;    } else {        /*         * This is a v1 server. Begin v1 protocol.         */        sprintf(vstring, "SSH-%s-%s\n",                (ssh_versioncmp(version, "1.5") <= 0 ? version : "1.5"),                sshver);        sprintf(vlog, "We claim version: %s", vstring);        vlog[strcspn(vlog, "\r\n")] = '\0';        logevent(vlog);        logevent("Using SSH protocol version 1");        sk_write(s, vstring, strlen(vstring));        ssh_protocol = ssh1_protocol;        ssh_version = 1;        s_rdpkt = ssh1_rdpkt;    }    ssh_state = SSH_STATE_BEFORE_SIZE;    sfree(vstring);    sfree(vlog);    crFinish(0);}