X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/dbc84ac3309e10a581233f3a2bd62ba174d247db..18969e42a11e11ef8a3ea81eaf0038e8e74e004d:/server/admin.c?ds=sidebyside diff --git a/server/admin.c b/server/admin.c index ad44132f..4bab4404 100644 --- a/server/admin.c +++ b/server/admin.c @@ -890,7 +890,7 @@ static void a_jobdestroy(admin_svcop *svc) IF_TRACING(T_ADMIN, { trace(T_ADMIN, "admin: destroying job %s (%u)", a_jobidencode(svc), i); }) - assert(j->v[i].u.op = svc); + assert(j->v[i].u.op == svc); j->v[i].u.next = j->free; j->v[i].seq++; j->free = i; @@ -1457,7 +1457,7 @@ static void acmd_add(admin *a, unsigned ac, char *av[]) if (add->peer.tag) xfree(add->peer.tag); add->peer.tag = xstrdup(arg); }) - OPT("-mobile", { add->peer.f |= PSF_MOBILE | PSF_EPHEM; }) + OPT("-mobile", { add->peer.f |= PSF_MOBILE; }) OPTARG("-priv", arg, { if (add->peer.privtag) xfree(add->peer.privtag); add->peer.privtag = xstrdup(arg); @@ -1465,7 +1465,6 @@ static void acmd_add(admin *a, unsigned ac, char *av[]) OPTARG("-knock", arg, { if (add->peer.knock) xfree(add->peer.knock); add->peer.knock = xstrdup(arg); - add->peer.f |= PSF_EPHEM; }) }); @@ -1594,7 +1593,7 @@ static void a_ping(admin *a, unsigned ac, char *av[], return; bad_syntax: - a_fail(a, "bad-syntax", "%s", cmd, "[OPTIONS] PEER", cmd, A_END); + a_fail(a, "bad-syntax", "%s", cmd, "[OPTIONS] PEER", A_END); fail: if (pg) xfree(pg); return; @@ -2102,21 +2101,40 @@ static void acmd_stats(admin *a, unsigned ac, char *av[]) static void acmd_kill(admin *a, unsigned ac, char *av[]) { peer *p; + int bye = 1; + OPTIONS(ac, av, { + OPT("-quiet", { bye = 0; }) + }); + if (!*av || av[1]) goto bad_syntax; if ((p = a_findpeer(a, av[0])) != 0) { - p_destroy(p, 1); + p_destroy(p, bye); a_ok(a); } + return; + +bad_syntax: + a_fail(a, "bad-syntax", "kill", "[OPTIONS] PEER", A_END); } static void acmd_forcekx(admin *a, unsigned ac, char *av[]) { peer *p; + int quiet = 0; + OPTIONS(ac, av, { + OPT("-quiet", { quiet = 1; }) + }); + if (!*av || av[1]) goto bad_syntax; if ((p = a_findpeer(a, av[0])) != 0) { - kx_start(&p->kx, 1); + if (!quiet) kx_start(&p->kx, 1); + else { p->kx.t_valid = time(0) - T_VALID - 1; } a_ok(a); } + return; + +bad_syntax: + a_fail(a, "bad-syntax", "forcekx", "[OPTIONS] PEER", A_END); } static void acmd_reload(admin *a, unsigned ac, char *av[]) @@ -2160,13 +2178,13 @@ static const acmd acmdtab[] = { { "checkchal", "CHAL", 1, 1, acmd_checkchal }, { "daemon", 0, 0, 0, acmd_daemon }, { "eping", "[OPTIONS] PEER", 1, 0xffff, acmd_eping }, - { "forcekx", "PEER", 1, 1, acmd_forcekx }, + { "forcekx", "[OPTIONS] PEER", 1, 0xffff, acmd_forcekx }, { "getchal", 0, 0, 0, acmd_getchal }, { "greet", "PEER CHAL", 2, 2, acmd_greet }, { "help", 0, 0, 0, acmd_help }, { "ifname", "PEER", 1, 1, acmd_ifname }, { "jobs", 0, 0, 0, acmd_jobs }, - { "kill", "PEER", 1, 1, acmd_kill }, + { "kill", "[OPTIONS] PEER", 1, 0xffff, acmd_kill }, { "list", 0, 0, 0, acmd_list }, { "notify", "MESSAGE ...", 1, 0xffff, acmd_notify }, { "peerinfo", "PEER", 1, 1, acmd_peerinfo },