#include #include #include #include #include #include #include #include <9p.h> #include #include #include "dat.h" #include "fns.h" static long _iovfprint(va_list *arg) { int fd; char *fmt; va_list arg2; fd = va_arg(*arg, int); fmt = va_arg(*arg, char*); arg2 = va_arg(*arg, va_list); return vfprint(fd, fmt, arg2); } int iovfprint(Ioproc *io, int fd, char *fmt, va_list arg) { return iocall(io, _iovfprint, fd, fmt, arg); } int ioprint(Ioproc *io, int fd, char *fmt, ...) { int n; va_list arg; va_start(arg, fmt); n = iovfprint(io, fd, fmt, arg); va_end(arg); return n; } static long _iotlsdial(va_list *arg) { char *addr, *local, *dir; int *cfdp, fd, tfd, usetls; TLSconn conn; addr = va_arg(*arg, char*); local = va_arg(*arg, char*); dir = va_arg(*arg, char*); cfdp = va_arg(*arg, int*); usetls = va_arg(*arg, int); fd = dial(addr, local, dir, cfdp); if(fd < 0) return -1; if(!usetls) return fd; memset(&conn, 0, sizeof conn); /* does no good, so far anyway */ // conn.chain = readcertchain("/sys/lib/ssl/vsignss.pem"); tfd = tlsClient(fd, &conn); close(fd); if(tfd < 0) fprint(2, "%s: tlsClient: %r\n", argv0); else { /* BUG: check cert here? */ if(conn.cert) free(conn.cert); } return tfd; } int iotlsdial(Ioproc *io, char *addr, char *local, char *dir, int *cfdp, int usetls) { return iocall(io, _iotlsdial, addr, local, dir, cfdp, usetls); }