#ifndef lint
static char RCSid[] = "$Header: /usr/users/mjr/hacks/umud/CMD/RCS/wizard.c,v 1.1 91/07/04 17:33:29 mjr Rel $";
#endif
#include "config.h"
#include "mud.h"
#include "vars.h"
#include "match.h"
/*
Handle wizard and unwizard commands
*/
static int
wiz_set(who,aswho,on_off)
char *who;
char *aswho;
int on_off;
{
if(ut_flagged(who,var_isplay) == 0) {
say(who,"not a player.\n",(char *)0);
return(1);
}
if(on_off) {
if(ut_set(who,who,typ_flag,var_wiz,"")) {
say(who,"can't set wizard.\n",(char *)0);
return(1);
}
say(who,"set.\n",(char *)0);
} else {
if(ut_unset(who,who,var_wiz)) {
say(who,"can't unset wizard.\n",(char *)0);
return(1);
}
say(who,"unset.\n",(char *)0);
}
return(0);
}
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(1);
}
say(who,"password removed.\n",(char *)0);
} else {
if(ut_setpass(system_object, new)) {
say(who,"can't set passwd.\n",(char *)0);
return(1);
}
say(who,"password set.\n",(char *)0);
}
return(0);
}
/* figure out what the hell the goober is trying to do - modularize */
/* ARGSUSED */
cmd__wizard(ac,av,who,aswho)
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((ac < 2) ? 1 : 0);
}
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(1);
}
/* 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(1);
}
}
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(1);
}