#include <parser.h>
inherit COMMAND_BASE;
string basename;
/*
* This will reset a players password.
*/
mixed cmd(string player, string newpw) {
string file, password;
string *bits;
int i;
if (!sizeof(filter(previous_object(-1), (: interactive($1) :)))) {
unguarded((: write_file, "/log/CHEAT", ctime( time() ) +
": illegal attempt to reset password.\nTrace: " + back_trace()
:));
return 0;
}
if (!sizeof(filter(previous_object(-1),(:adminp($1):)))) {
unguarded((: write_file, "/log/CHEAT", ctime( time() ) +
": illegal attempt to reset password.\nTrace: " + back_trace()
:));
return 0;
}
if(!newpw || newpw == "")
return notify_fail("Syntax: resetpw <player> <new password>\n");
seteuid("Root");
/* Restore them... */
if ("/secure/login"->test_user(player)) {
basename = "/save/players/" + player[0..0] + "/" + player;
file = unguarded( (: read_file(basename + ".o") :));
bits = explode(file, "\n");
for (i = 0; i < sizeof(bits); i++) {
if (bits[i][0..strlen("password")-1] == "password") {
password = restore_variable(bits[i][strlen("password") + 1..]);
break;
}
}
password = crypt(newpw, newpw[0..1]);
if (i < sizeof(bits)) {
bits[i] = "password " + save_variable(password);
} else {
bits += ({ "password " + save_variable(password) });
}
unguarded( (: rm(basename + ".old") :) );
unguarded( (: rename(basename+".o", basename+".old") :) );
unguarded( (: write_file(basename + ".o", implode($(bits), "\n") + "\n") :));
write(sprintf("Reset password for %s to %s\n", player, newpw));
} else {
write("Unable to find player "+player+".\n");
}
return 1;
} /* cmd() */
mixed *query_patterns() {
return ({ "<word> <string>", (: cmd($4[0], $4[1]) :),
});
} /* query_patterns() */