diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-09-14 19:19:08 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-09-14 19:19:08 +0200 |
commit | 56836bfdbdca9fd6a5b608d249d178a22d3337d8 (patch) | |
tree | 75b84ef6650f92a48ba70823cb1e22f27d1d39bd /sys/src/cmd/tlsclient.c | |
parent | be5992955d4e417ca625b07af93a800464d4c11f (diff) |
tls: fix various tlsClient()/tlsServer() related bugs
- TLSconn structure on stack but not initialized (zeroed)
- original filedescriptor double closed in error case
- original filedescriptor leaked in success case
- leaked TLSconn.sessionID and TLSconn.cert
- clarify in pushtls(2) and pushssl(2)
Diffstat (limited to 'sys/src/cmd/tlsclient.c')
-rw-r--r-- | sys/src/cmd/tlsclient.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/sys/src/cmd/tlsclient.c b/sys/src/cmd/tlsclient.c index f4f1a25d8..d96e733b4 100644 --- a/sys/src/cmd/tlsclient.c +++ b/sys/src/cmd/tlsclient.c @@ -38,7 +38,7 @@ reporter(char *fmt, ...) void main(int argc, char **argv) { - int fd, netfd, debug; + int fd, debug; uchar digest[20]; TLSconn *conn; char *addr, *file, *filex, *ccert; @@ -78,7 +78,7 @@ main(int argc, char **argv) } addr = argv[0]; - if((netfd = dial(addr, 0, 0, 0)) < 0) + if((fd = dial(addr, 0, 0, 0)) < 0) sysfatal("dial %s: %r", addr); conn = (TLSconn*)mallocz(sizeof *conn, 1); @@ -86,7 +86,7 @@ main(int argc, char **argv) conn->cert = readcert(ccert, &conn->certlen); if(debug) conn->trace = reporter; - fd = tlsClient(netfd, conn); + fd = tlsClient(fd, conn); if(fd < 0) sysfatal("tlsclient: %r"); if(thumb){ @@ -98,8 +98,6 @@ main(int argc, char **argv) sysfatal("server certificate %.*H not recognized", SHA1dlen, digest); } } - free(conn->cert); - close(netfd); rfork(RFNOTEG); switch(fork()){ |