- if (s->proto2 && (ssh->cfg.sshprot >= 2 || !s->proto1)) {
- /*
- * Use v2 protocol.
- */
- char verstring[80], vlog[100];
- sprintf(verstring, "SSH-2.0-%s", sshver);
- SHA_Init(&ssh->exhashbase);
- /*
- * Hash our version string and their version string.
- */
- sha_string(&ssh->exhashbase, verstring, strlen(verstring));
- sha_string(&ssh->exhashbase, s->vstring, strcspn(s->vstring, "\r\n"));
- sprintf(vlog, "We claim version: %s", verstring);
- logevent(vlog);
- strcat(verstring, "\012");
- logevent("Using SSH protocol version 2");
- sk_write(ssh->s, verstring, strlen(verstring));
- ssh->protocol = ssh2_protocol;
- ssh2_protocol_setup(ssh);
- ssh->version = 2;
- ssh->s_rdpkt = ssh2_rdpkt;
- } else {
- /*
- * Use v1 protocol.
- */
- char verstring[80], vlog[100];
- sprintf(verstring, "SSH-%s-%s",
- (ssh_versioncmp(s->version, "1.5") <= 0 ? s->version : "1.5"),
- sshver);
- sprintf(vlog, "We claim version: %s", verstring);
- logevent(vlog);
- strcat(verstring, "\012");
-
- logevent("Using SSH protocol version 1");
+ {
+ char *verstring;
+
+ if (s->proto2 && (ssh->cfg.sshprot >= 2 || !s->proto1)) {
+ /*
+ * Construct a v2 version string.
+ */
+ verstring = dupprintf("SSH-2.0-%s\015\012", sshver);
+ ssh->version = 2;
+ } else {
+ /*
+ * Construct a v1 version string.
+ */
+ verstring = dupprintf("SSH-%s-%s\012",
+ (ssh_versioncmp(s->version, "1.5") <= 0 ?
+ s->version : "1.5"),
+ sshver);
+ ssh->version = 1;
+ }
+
+ ssh_fix_verstring(verstring);
+
+ if (ssh->version == 2) {
+ /*
+ * Hash our version string and their version string.
+ */
+ SHA_Init(&ssh->exhashbase);
+ sha_string(&ssh->exhashbase, verstring,
+ strcspn(verstring, "\015\012"));
+ sha_string(&ssh->exhashbase, s->vstring,
+ strcspn(s->vstring, "\015\012"));
+
+ /*
+ * Initialise SSHv2 protocol.
+ */
+ ssh->protocol = ssh2_protocol;
+ ssh2_protocol_setup(ssh);
+ ssh->s_rdpkt = ssh2_rdpkt;
+ } else {
+ /*
+ * Initialise SSHv1 protocol.
+ */
+ ssh->protocol = ssh1_protocol;
+ ssh1_protocol_setup(ssh);
+ ssh->s_rdpkt = ssh1_rdpkt;
+ }
+ logeventf(ssh, "We claim version: %.*s",
+ strcspn(verstring, "\015\012"), verstring);