This makes life much easier for client libraries, which can (for
example) put `-background TAG' in a standard place to obtain
background operation.
.\"* 10 Commands
The commands provided are:
.SP
.\"* 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
Adds a new peer. The peer is given the name
.IR peer ;
the peer's public key is assumed to be in the file
{
unsigned i, j;
const char *tag = 0;
{
unsigned i, j;
const char *tag = 0;
/* --- Set stuff up --- */
add = xmalloc(sizeof(*add));
/* --- Set stuff up --- */
add = xmalloc(sizeof(*add));
- add->peer.name = xstrdup(av[0]);
add->peer.t_ka = 0;
add->peer.tops = tun_default;
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 --- */
/* --- Parse options --- */
for (;;) {
if (!av[i])
goto bad_syntax;
for (;;) {
if (!av[i])
goto bad_syntax;
+ /* --- 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);
/* --- Crank up the resolver --- */
a_resolve(a, &add->r, tag, a_doadd, ac - i, av + i);
/* --- Clearing up --- */
bad_syntax:
/* --- 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);
+ if (add->peer.name) xfree(add->peer.name);
static void acmd_help(admin */*a*/, unsigned /*ac*/, char */*av*/[]);
static const acmd acmdtab[] = {
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 },
{ "addr", "PEER", 1, 1, acmd_addr },
{ "checkchal", "CHAL", 1, 1, acmd_checkchal },
{ "daemon", 0, 0, 0, acmd_daemon },