#include "config.h"
#include "mud.h"
#include "vars.h"
#include "match.h"
/*
Handle wizard and unwizard commands
*/
static int wiz_set(char *who, char *aswho, int on_off);
static int wiz_passwd(char *who, char *aswho, char *new);
static int wiz_set(char *who, char *aswho, int on_off)
{
if (ut_flagged (who, var_isplay) == 0) {
say (who, "not a player.\n", (char *) 0);
return (UERR_BADOID);
}
if (on_off) {
if (ut_set (who, who, typ_flag, var_wiz, "")) {
say (who, "can't set wizard.\n", (char *) 0);
return (UERR_FATAL);
}
say (who, "set.\n", (char *) 0);
} else {
if (ut_unset (who, who, var_wiz)) {
say (who, "can't unset wizard.\n", (char *) 0);
return (UERR_FATAL);
}
say (who, "unset.\n", (char *) 0);
}
return (UERR_NONE);
}
static int wiz_passwd (who, aswho, new)
char *who;
char *aswho;
char *new;
{
if (new == (char *) 0) {
if (ut_unset (who, system_object, var_pass)) {
say (who, "can't unset passwd.\n", (char *) 0);
return (UERR_FATAL);
}
say (who, "password removed.\n", (char *) 0);
} else {
if (ut_setpass (system_object, new)) {
say (who, "can't set passwd.\n", (char *) 0);
return (UERR_FATAL);
}
say (who, "password set.\n", (char *) 0);
}
return (UERR_NONE);
}
/* figure out what the hell the goober is trying to do - modularize */
/* ARGSUSED */
int cmd__wizard (int ac, char *av[], char *who, char *aswho)
{
char pbuf[MAXOID];
char *pw;
char *wizs;
char *passwd = (char *) 0;
if (ac < 3 || !strcmp (av[1], "help")) {
say (who, av[0], " on [password]\n", (char *) 0);
say (who, av[0], " off [password]\n", (char *) 0);
say (who, av[0], " password [old-password] [new-password]\n", (char *) 0);
return (UERR_BADPARM);
}
passwd = av[2];
/* get the system wizard list */
wizs = ut_getatt (system_object, 0, typ_list, var_wizs, (char *) 0);
/* if there is a wizard list and they're not on it... */
if (wizs != (char *) 0 && !lstlook (wizs, who)) {
say (who, "permission denied.\n", (char *) 0);
return (UERR_PERM);
}
/* get the system wizard password */
pw = ut_getatt (system_object, 0, typ_str, var_pass, (char *) 0);
/* compare it against the one they gave */
/* if there is no password set, farg it */
if (pw != (char *) 0 && *pw != '\0') {
rot_init (system_object);
rot_decode (pw, pbuf);
if (strcmp (passwd, pbuf)) {
say (who, "permission denied.\n", (char *) 0);
return (UERR_PERM);
}
}
if (!strncmp (av[1], "on", strlen (av[1]))) {
return (wiz_set (who, aswho, 1));
}
if (!strncmp (av[1], "off", strlen (av[1]))) {
return (wiz_set (who, aswho, 0));
}
if (!strncmp (av[1], "password", strlen (av[1]))) {
char *new = (char *) 0;
if (ac > 3)
new = av[3];
else if (pw == (char *) 0 || *pw == '\0')
new = passwd;
return (wiz_passwd (who, aswho, new));
}
say (who, "I don't understand what you want to ", av[0], "\n", (char *) 0);
return (UERR_BADPARM);
}