X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=command.c;h=5e13df66bce15a7e759ce1dd85347b9a176a5417;hp=5790f11d278f95d4ad09964ab76af5d0ebf9e772;hb=4744d937c4160898d1fe151257606430750e580c;hpb=fa9e0ecb219000e07eaf694f50679a8edfb5dc9e diff --git a/command.c b/command.c index 5790f11d..5e13df66 100644 --- a/command.c +++ b/command.c @@ -934,22 +934,28 @@ __noreturn void handle_connect(int fd, const char *peername) PARA_DEBUG_LOG("sending %u byte challenge + rc4 keys (%zu bytes)\n", CHALLENGE_SIZE, numbytes); if (cc->use_sideband) { + struct iovec iov; ret = send_sb(&cc->scc, buf, numbytes, SBD_CHALLENGE, false); buf = NULL; if (ret < 0) goto net_err; - buf = para_malloc(HANDSHAKE_BUFSIZE); + ret = recv_sb(&cc->scc, SBD_CHALLENGE_RESPONSE, + HANDSHAKE_BUFSIZE, &iov); + if (ret < 0) + goto net_err; + buf = iov.iov_base; + numbytes = iov.iov_len; } else { ret = write_all(fd, buf, numbytes); if (ret < 0) goto net_err; + /* recv challenge response */ + ret = recv_bin_buffer(fd, buf, HASH_SIZE); + if (ret < 0) + goto net_err; + numbytes = ret; } - /* recv challenge response */ - ret = recv_bin_buffer(fd, buf, HASH_SIZE); - if (ret < 0) - goto net_err; - numbytes = ret; - PARA_DEBUG_LOG("received %d bytes challenge response\n", ret); + PARA_DEBUG_LOG("received %zu bytes challenge response\n", numbytes); ret = -E_BAD_USER; if (!cc->u) goto net_err;