X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fpolicy.c;h=d607d398f418702e17b6fb6c5f18d2734e15bf1b;hb=28391e51fb1a9c0002bb0154f56ce73770894b88;hp=841736d13eb02705ab855098297f024b83f98fe5;hpb=a62fd2f9689b1fe286213bf13a77b42e0f86420d;p=citadel.git diff --git a/citadel/policy.c b/citadel/policy.c index 841736d13..d607d398f 100644 --- a/citadel/policy.c +++ b/citadel/policy.c @@ -47,7 +47,27 @@ void GetExpirePolicy(struct ExpirePolicy *epbuf, struct quickroom *qrbuf) { * Get Policy EXpire */ void cmd_gpex(char *argbuf) { - cprintf("%d Command not yet implemented.\n", ERROR); + struct ExpirePolicy exp; + struct floor flbuf; + char which[256]; + + extract(which, argbuf, 0); + if (!strcasecmp(which, "room")) { + memcpy(&exp, &CC->quickroom.QRep, sizeof(struct ExpirePolicy)); + } + else if (!strcasecmp(which, "floor")) { + getfloor(&flbuf, CC->quickroom.QRfloor); + memcpy(&exp, &flbuf.f_ep, sizeof(struct ExpirePolicy)); + } + else if (!strcasecmp(which, "site")) { + memcpy(&exp, &config.c_ep, sizeof(struct ExpirePolicy)); + } + else { + cprintf("%d Invalid keyword.\n", ERROR); + return; + } + + cprintf("%d %d|%d\n", OK, exp.expire_mode, exp.expire_value); } @@ -55,7 +75,64 @@ void cmd_gpex(char *argbuf) { * Set Policy EXpire */ void cmd_spex(char *argbuf) { - cprintf("%d Command not yet implemented.\n", ERROR); + struct ExpirePolicy exp; + struct floor flbuf; + char which[256]; + + bzero(&exp, sizeof(struct ExpirePolicy)); + extract(which, argbuf, 0); + exp.expire_mode = extract_int(argbuf, 1); + exp.expire_value = extract_int(argbuf, 2); + + if ((exp.expire_mode < 0) || (exp.expire_mode > 3)) { + cprintf("%d Invalid policy.\n", ERROR); + return; + } + + if (!strcasecmp(which, "room")) { + if (!is_room_aide()) { + cprintf("%d Higher access required.\n", + ERROR+HIGHER_ACCESS_REQUIRED); + return; + } + lgetroom(&CC->quickroom, CC->quickroom.QRname); + memcpy(&CC->quickroom.QRep, &exp, sizeof(struct ExpirePolicy)); + lputroom(&CC->quickroom, CC->quickroom.QRname); + cprintf("%d ok\n", OK); + return; + } + + if (CC->usersupp.axlevel < 6) { + cprintf("%d Higher access required.\n", + ERROR+HIGHER_ACCESS_REQUIRED); + return; + } + + if (!strcasecmp(which, "floor")) { + lgetfloor(&flbuf, CC->quickroom.QRfloor); + memcpy(&flbuf.f_ep, &exp, sizeof(struct ExpirePolicy)); + lputfloor(&flbuf, CC->quickroom.QRfloor); + cprintf("%d ok\n", OK); + return; + } + + else if (!strcasecmp(which, "site")) { + if (exp.expire_mode == EXPIRE_NEXTLEVEL) { + cprintf("%d Invalid policy (no higher level)\n", + ERROR); + return; + } + memcpy(&config.c_ep, &exp, sizeof(struct ExpirePolicy)); + put_config(); + cprintf("%d ok\n", OK); + return; + } + + else { + cprintf("%d Invalid keyword.\n", ERROR); + return; + } + }