void do_newpassword(dbref player, const char *name, const char *password) { dbref victim; char buf[BUFFER_LEN]; if (!Wizard(player) || Typeof(player) != TYPE_PLAYER) { notify(player, "Only a Wizard player can newpassword someone."); return; } else if ((victim = lookup_player(name)) == NOTHING) { notify(player, "No such player."); } else if (*password != '\0' && !ok_password(password)) { /* Wiz can set null passwords, but not bad passwords */ notify(player, "Bad password"); #ifdef GOD_PRIV } else if (God(victim)) { notify(player, "You can't change God's password!"); return; } else { if (TrueWizard(victim) && !God(player)) { notify(player, "Only God can change a wizard's password."); return; } #else /* GOD_PRIV */ } else {
/** Attempt to create a new player object. * \param d DESC the creation attempt is being made on (if from connect screen) * \param executor dbref of the object attempting to create a player (if * \@pcreate) * \param name name of player to create. * \param password initial password of created player. * \param host host from which creation is attempted. * \param ip ip address from which creation is attempted. * \return dbref of created player, NOTHING if invalid name, AMBIGUOUS if taken * name, or HOME for a bad password * password. */ dbref create_player(DESC *d, dbref executor, const char *name, const char *password, const char *host, const char *ip) { if (!ok_player_name(name, executor, NOTHING)) { do_log(LT_CONN, 0, 0, "Failed creation (bad name) from %s", host); if (d) { queue_event(SYSEVENT, "SOCKET`CREATEFAIL", "%d,%s,%d,%s,%s", d->descriptor, ip, mark_failed(ip), "create: bad name", name); } return (lookup_player(name) == NOTHING ? NOTHING : AMBIGUOUS); } if (!ok_password(password)) { do_log(LT_CONN, 0, 0, "Failed creation (bad password) from %s", host); if (d) { queue_event(SYSEVENT, "SOCKET`CREATEFAIL", "%d,%s,%d,%s,%s", d->descriptor, ip, mark_failed(ip), "create: bad password", name); } return HOME; } if (DBTOP_MAX && (db_top >= DBTOP_MAX + 1) && (first_free == NOTHING)) { /* Oops, out of db space! */ do_log(LT_CONN, 0, 0, "Failed creation (no db space) from %s", host); if (d) { queue_event(SYSEVENT, "SOCKET`CREATEFAIL", "%d,%s,%d,%s,%s", d->descriptor, ip, mark_failed(ip), "create: no db space left to create!", name); } return NOTHING; } /* else he doesn't already exist, create him */ return make_player(name, password, host, ip); }
dbref create_player(const char *name, const char *password) { dbref player; if (!ok_player_name(name) || !ok_password(password)) return NOTHING; /* else he doesn't already exist, create him */ player = new_object(); /* initialize everything */ NAME(player) = alloc_string(name); DBFETCH(player)->location = tp_player_start; /* home */ FLAGS(player) = TYPE_PLAYER | PCREATE_FLAGS; OWNER(player) = player; DBFETCH(player)->sp.player.home = tp_player_start; DBFETCH(player)->exits = NOTHING; DBFETCH(player)->sp.player.pennies = tp_start_pennies; DBFETCH(player)->sp.player.password = NULL; // handle this last DBFETCH(player)->sp.player.curr_prog = NOTHING; DBFETCH(player)->sp.player.insert_mode = 0; /* link him to tp_player_start */ PUSH(player, DBFETCH(tp_player_start)->contents); add_player(player); DBDIRTY(player); DBDIRTY(tp_player_start); set_password(player, password); return player; }
void do_password(dbref player, const char *old, const char *newobj) { if (!check_password(player, old)) { notify(player, "Sorry"); } else if (!ok_password(newobj)) { notify(player, "Bad new password."); } else { set_password(player, newobj); notify(player, "Password changed."); } }
bool set_password(dbref player, const char *password) { int res = 0; char hashbuf[BUFFER_LEN]; if (player == NOTHING) return 0; if (!password || !*password) { if (DBFETCH(player)->sp.player.password) free((void *) DBFETCH(player)->sp.player.password); if (!db_hash_passwords) { DBFETCH(player)->sp.player.password = NULL; return 1; } res = db_hash_password(HTYPE_NONE, hashbuf, NULL, NULL); if (!res) return 0; DBSTORE(player, sp.player.password, alloc_string(hashbuf)); return 1; } if (!ok_password(password)) return 0; if (DBFETCH(player)->sp.player.password) free((void *) DBFETCH(player)->sp.player.password); if (db_hash_passwords) { char hashbuf[BUFFER_LEN]; res = db_hash_password(HTYPE_CURRENT, hashbuf, password, NULL); if (!res) return 0; DBSTORE(player, sp.player.password, alloc_string(hashbuf)); return 1; } DBSTORE(player, sp.player.password, alloc_string(password)); return 1; }
void do_password(dbref player, const char *old, const char *newobj) { if (Guest(player)) { anotify_fmt(player, CFAIL "%s", tp_noguest_mesg); return; } if (!check_password(player, old)) { anotify_nolisten2(player, CFAIL "Syntax: @password <oldpass>=<newpass>"); } else if (!ok_password(newobj)) { anotify_nolisten2(player, CFAIL "Bad new password."); } else { set_password(player, newobj); anotify_nolisten2(player, CFAIL "Password changed."); } }
void do_password(dbref player, const char *old, const char *newobj) { if(Guest(player)) { anotify(player, CFAIL NOGUEST_MESG); return; } if ((!DBFETCH(player)->sp.player.password) || (!*DBFETCH(player)->sp.player.password) || strcmp(old, DBFETCH(player)->sp.player.password) ) { anotify(player, CFAIL "Sorry."); } else if (!ok_password(newobj)) { anotify(player, CFAIL "Bad new password."); } else { free((void *) DBFETCH(player)->sp.player.password); DBSTORE(player, sp.player.password, alloc_string(newobj)); ts_modifyobject(player); remove_property(player, PROP_PW); anotify(player, CSUCC "Password changed."); } }
dbref create_player(const char *name, const char *password) { char buf[80]; dbref player; if (!ok_player_name(name) || !ok_password(password)) return NOTHING; if (!tp_building || tp_db_readonly) return NOTHING; /* else he doesn't already exist, create him */ player = new_object(); /* initialize everything */ NAME(player) = alloc_string(name); FLAGS(player) = TYPE_PLAYER | PCREATE_FLAGS; FLAG2(player) = PCREATE_FLAG2; DBFETCH(player)->location = RootRoom; /* home */ OWNER(player) = player; DBFETCH(player)->sp.player.home = RootRoom; DBFETCH(player)->exits = NOTHING; DBFETCH(player)->sp.player.pennies = tp_start_pennies; DBFETCH(player)->sp.player.password = alloc_string(password); DBFETCH(player)->sp.player.curr_prog = NOTHING; DBFETCH(player)->sp.player.insert_mode = 0; /* link him to tp_player_start */ PUSH(player, DBFETCH(RootRoom)->contents); add_player(player); DBDIRTY(player); DBDIRTY(RootRoom); sprintf(buf, CNOTE "%s is born!", PNAME(player)); anotify_except(DBFETCH(RootRoom)->contents, NOTHING, buf, player); return player; }
/** Change a player's password. * \verbatim * This function implements @password. * \endverbatim * \param executor the executor. * \param enactor the enactor. * \param old player's current password. * \param newobj player's desired new password. * \param queue_entry the queue entry \@password is being executed in */ void do_password(dbref executor, dbref enactor, const char *old, const char *newobj, MQUE *queue_entry) { if (!queue_entry->port) { char old_eval[BUFFER_LEN]; char new_eval[BUFFER_LEN]; char const *sp; char *bp; sp = old; bp = old_eval; if (process_expression(old_eval, &bp, &sp, executor, executor, enactor, PE_DEFAULT, PT_DEFAULT, NULL)) return; *bp = '\0'; old = old_eval; sp = newobj; bp = new_eval; if (process_expression(new_eval, &bp, &sp, executor, executor, enactor, PE_DEFAULT, PT_DEFAULT, NULL)) return; *bp = '\0'; newobj = new_eval; } if (!password_check(executor, old)) { notify(executor, T("The old password that you entered was incorrect.")); } else if (!ok_password(newobj)) { notify(executor, T("Bad new password.")); } else { (void) atr_add(executor, pword_attr, password_hash(newobj, NULL), GOD, 0); notify(executor, T("You have changed your password.")); } }
dbref create_player(dbref creator, const char *name, const char *password) { char buf[BUFFER_LEN]; struct object *newp; dbref player; if (!ok_player_name(name) || !ok_password(password) || tp_db_readonly) return NOTHING; /* remove any existing alias with this name */ clear_alias(0, name); /* else he doesn't already exist, create him */ player = new_object(creator); newp = DBFETCH(player); /* initialize everything */ NAME(player) = alloc_string(name); FLAGS(player) = TYPE_PLAYER; if (OkObj(tp_player_prototype) && (Typeof(tp_player_prototype) == TYPE_PLAYER)) { FLAGS(player) = FLAGS(tp_player_prototype); FLAG2(player) = FLAG2(tp_player_prototype); if (tp_pcreate_copy_props) { newp->properties = copy_prop(tp_player_prototype); #ifdef DISKBASE newp->propsfpos = 0; newp->propsmode = PROPS_UNLOADED; newp->propstime = 0; newp->nextold = NOTHING; newp->prevold = NOTHING; dirtyprops(player); #endif } } if (OkObj(tp_player_start)) { DBFETCH(player)->location = tp_player_start; DBFETCH(player)->sp.player.home = tp_player_start; } else { DBFETCH(player)->location = GLOBAL_ENVIRONMENT; DBFETCH(player)->sp.player.home = GLOBAL_ENVIRONMENT; } OWNER(player) = player; newp->exits = NOTHING; newp->sp.player.pennies = tp_start_pennies; newp->sp.player.password = NULL; /* this has to stay here. -hinoserm */ newp->sp.player.curr_prog = NOTHING; newp->sp.player.insert_mode = 0; #ifdef IGNORE_SUPPORT newp->sp.player.ignoretime = 0; #endif /* IGNORE_SUPPORT */ /* set password */ set_password(player, password); /* link him to tp_player_start */ PUSH(player, DBFETCH(tp_player_start)->contents); add_player(player); DBDIRTY(player); DBDIRTY(tp_player_start); sprintf(buf, CNOTE "%s is born!", NAME(player)); anotify_except(DBFETCH(tp_player_start)->contents, NOTHING, buf, player); return player; }