From: Mark Wooding Date: Mon, 1 Jan 2007 12:52:32 +0000 (+0000) Subject: admin: Put all command options at the start of the command-line. X-Git-Tag: 1.0.0pre8~94^3~9 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/tripe/commitdiff_plain/9986f0b5b268750fdc4cb29413c8545f60d3382e?ds=sidebyside admin: Put all command options at the start of the command-line. This makes life much easier for client libraries, which can (for example) put `-background TAG' in a standard place to obtain background operation. --- diff --git a/doc/tripe-admin.5.in b/doc/tripe-admin.5.in index 0d9e7b66..3ea15b11 100644 --- a/doc/tripe-admin.5.in +++ b/doc/tripe-admin.5.in @@ -213,7 +213,7 @@ letters control collections of message types. .\"* 10 Commands The commands provided are: .SP -.BI "ADD " peer " \fR[" options "\fR] " address "\fR..." +.BI "ADD \fR[" options "\fR] " peer " " address "\fR..." Adds a new peer. The peer is given the name .IR peer ; the peer's public key is assumed to be in the file diff --git a/server/admin.c b/server/admin.c index 7a932ad1..44a0fdc6 100644 --- a/server/admin.c +++ b/server/admin.c @@ -909,25 +909,18 @@ static void acmd_add(admin *a, unsigned ac, char *av[]) { unsigned i, j; const char *tag = 0; - admin_addop *add = 0; + admin_addop *add; /* --- Set stuff up --- */ add = xmalloc(sizeof(*add)); - add->peer.name = xstrdup(av[0]); + add->peer.name = 0; add->peer.t_ka = 0; add->peer.tops = tun_default; - /* --- Make sure someone's not got there already --- */ - - if (p_find(av[0])) { - a_fail(a, "peer-exists", "%s", av[0], A_END); - goto fail; - } - /* --- Parse options --- */ - i = 1; + i = 0; for (;;) { if (!av[i]) goto bad_syntax; @@ -962,6 +955,16 @@ static void acmd_add(admin *a, unsigned ac, char *av[]) i++; } + /* --- Make sure someone's not got there already --- */ + + if (!av[i]) + goto bad_syntax; + if (p_find(av[i])) { + a_fail(a, "peer-exists", "%s", av[i], A_END); + goto fail; + } + add->peer.name = xstrdup(av[i++]); + /* --- Crank up the resolver --- */ a_resolve(a, &add->r, tag, a_doadd, ac - i, av + i); @@ -970,9 +973,9 @@ static void acmd_add(admin *a, unsigned ac, char *av[]) /* --- Clearing up --- */ bad_syntax: - a_fail(a, "bad-syntax", "add", "PEER [OPTIONS] ADDR ...", A_END); + a_fail(a, "bad-syntax", "add", "[OPTIONS] PEER ADDR ...", A_END); fail: - xfree(add->peer.name); + if (add->peer.name) xfree(add->peer.name); xfree(add); return; } @@ -1405,7 +1408,7 @@ typedef struct acmd { static void acmd_help(admin */*a*/, unsigned /*ac*/, char */*av*/[]); static const acmd acmdtab[] = { - { "add", "PEER [OPTIONS] ADDR ...", 2, 0xffff, acmd_add }, + { "add", "[OPTIONS] PEER ADDR ...", 2, 0xffff, acmd_add }, { "addr", "PEER", 1, 1, acmd_addr }, { "checkchal", "CHAL", 1, 1, acmd_checkchal }, { "daemon", 0, 0, 0, acmd_daemon },