if (new_head != inbuf_reap) {
inbuf[inbuf_head] = *buf++;
inbuf_head = new_head;
+ } else {
+ term_out();
+ if( inbuf_head == inbuf_reap ) len++; else break;
}
}
}
pktin.length = len;
if (pktin.maxlen < biglen) {
pktin.maxlen = biglen;
+#ifdef MSCRYPTOAPI
+ /* Allocate enough buffer space for extra block
+ * for MS CryptEncrypt() */
+ pktin.data = (pktin.data == NULL ? malloc(biglen+8) :
+ realloc(pktin.data, biglen+8));
+#else
pktin.data = (pktin.data == NULL ? malloc(biglen) :
- realloc(pktin.data, biglen));
+ realloc(pktin.data, biglen));
+#endif
if (!pktin.data)
fatalbox("Out of memory");
}
pktout.length = len-5;
if (pktout.maxlen < biglen) {
pktout.maxlen = biglen;
+#ifdef MSCRYPTOAPI
+ /* Allocate enough buffer space for extra block
+ * for MS CryptEncrypt() */
+ pktout.data = (pktout.data == NULL ? malloc(biglen+8) :
+ realloc(pktout.data, biglen+8));
+#else
pktout.data = (pktout.data == NULL ? malloc(biglen+4) :
realloc(pktout.data, biglen+4));
+#endif
if (!pktout.data)
fatalbox("Out of memory");
}
if (!rsabuf)
fatalbox("Out of memory");
- verify_ssh_host_key(savedhost, &hostkey);
+ /*
+ * Verify the host key.
+ */
+ {
+ /*
+ * First format the key into a string.
+ */
+ int len = rsastr_len(&hostkey);
+ char *keystr = malloc(len);
+ if (!keystr)
+ fatalbox("Out of memory");
+ rsastr_fmt(keystr, &hostkey);
+ verify_ssh_host_key(savedhost, keystr);
+ free(keystr);
+ }
for (i=0; i<32; i++) {
rsabuf[i] = session_key[i];
char *FWhost;
int FWport;
#endif
+
+#ifdef MSCRYPTOAPI
+ if(crypto_startup() == 0)
+ return "Microsoft high encryption pack not installed!";
+#endif
savedhost = malloc(1+strlen(host));
if (!savedhost)