X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/tripe/blobdiff_plain/35c8b547dde529693875087d67fa60bf88319d2b..cb160b861b8b4f5798eb669f72bd8430eff05009:/server/admin.c diff --git a/server/admin.c b/server/admin.c index 0fb57cd8..ef5fddf3 100644 --- a/server/admin.c +++ b/server/admin.c @@ -51,7 +51,9 @@ unsigned tr_flags = 0; #endif static const trace_opt w_opts[] = { +#ifndef NTRACE { 't', AF_TRACE, "trace messages" }, +#endif { 'n', AF_NOTE, "asynchronous notifications" }, { 'w', AF_WARN, "warnings" }, { 'A', AF_ALLMSGS, "all of the above" }, @@ -1250,6 +1252,7 @@ static void acmd_add(admin *a, unsigned ac, char *av[]) add = xmalloc(sizeof(*add)); add->peer.name = 0; add->peer.tag = 0; + add->peer.privtag = 0; add->peer.t_ka = 0; add->peer.tops = tun_default; add->peer.f = 0; @@ -1279,6 +1282,11 @@ static void acmd_add(admin *a, unsigned ac, char *av[]) add->peer.tag = xstrdup(arg); }) OPT("-mobile", { add->peer.f |= PSF_MOBILE; }) + OPTARG("-priv", arg, { + if (add->peer.privtag) + xfree(add->peer.privtag); + add->peer.privtag = xstrdup(arg); + }) }); /* --- Make sure someone's not got there already --- */ @@ -1304,6 +1312,7 @@ bad_syntax: fail: if (add->peer.name) xfree(add->peer.name); if (add->peer.tag) xfree(add->peer.tag); + if (add->peer.privtag) xfree(add->peer.privtag); xfree(add); return; } @@ -1722,18 +1731,33 @@ static void acmd_algs(admin *a, unsigned ac, char *av[]) "hash-sz=%lu", (unsigned long)algs->h->hashsz, A_END); a_info(a, - "cipher=%s", algs->c->name, - "cipher-keysz=%lu", (unsigned long)algs->cksz, - "cipher-blksz=%lu", (unsigned long)algs->c->blksz, + "bulk-transform=%s", algs->bulk->name, + "bulk-overhead=%lu", (unsigned long)algs->bulk->overhead(algs), A_END); + if (algs->c) { + a_info(a, + "cipher=%s", algs->c->name, + "cipher-keysz=%lu", (unsigned long)algs->cksz, + "cipher-blksz=%lu", (unsigned long)algs->c->blksz, + A_END); + } a_info(a, "cipher-data-limit=%lu", (unsigned long)algs->expsz, A_END); - a_info(a, - "mac=%s", algs->m->name, - "mac-keysz=%lu", (unsigned long)algs->mksz, - "mac-tagsz=%lu", (unsigned long)algs->tagsz, - A_END); + if (algs->m) { + a_info(a, + "mac=%s", algs->m->name, + "mac-keysz=%lu", (unsigned long)algs->mksz, + "mac-tagsz=%lu", (unsigned long)algs->tagsz, + A_END); + } + if (algs->b) { + a_info(a, + "blkc=%.*s", strlen(algs->b->name) - 4, algs->b->name, + "blkc-keysz=%lu", (unsigned long)algs->bksz, + "blkc-blksz=%lu", (unsigned long)algs->b->blksz, + A_END); + } a_ok(a); } @@ -1824,11 +1848,16 @@ static void acmd_peerinfo(admin *a, unsigned ac, char *av[]) { peer *p; const peerspec *ps; + const char *ptag; if ((p = a_findpeer(a, av[0])) != 0) { ps = p_spec(p); a_info(a, "tunnel=%s", ps->tops->name, A_END); - a_info(a, "key=%s", p_tag(p), A_END); + a_info(a, "key=%s", p_tag(p), + "current-key=%s", p->kx.kpub->tag, A_END); + if ((ptag = p_privtag(p)) == 0) ptag = "(default)"; + a_info(a, "private-key=%s", ptag, + "current-private-key=%s", p->kx.kpriv->tag, A_END); a_info(a, "keepalive=%lu", ps->t_ka, A_END); a_ok(a); } @@ -2208,7 +2237,7 @@ static void a_accept(int fd, unsigned mode, void *v) { int nfd; struct sockaddr_un sun; - size_t sz = sizeof(sun); + socklen_t sz = sizeof(sun); if ((nfd = accept(fd, (struct sockaddr *)&sun, &sz)) < 0) { if (errno != EINTR && errno != EAGAIN && errno != EWOULDBLOCK &&