//	File	: /cmds/adm/_mailreg.c
//	Creator	: Karathan  (8/12/93)
// The command to add or remove an email-registered character. Just an interface
// to the banish daemon.
// Command from Karathan, daemon from Dainia@Dreamshadow.
#include <mudlib.h>
#include <daemons.h>
inherit DAEMON;
int fail();
int cmd_mailreg(string str)
{
    int i, j;
    mixed *names;
    if (!adminp(geteuid(previous_object())))
      { notify_fail("You are not permitted to use the mailreg command.\n");
	return 0; }
    if (!str || !stringp(str) || str == "")
      { names = BANISH_D->query_mailreg_names();
	if (!names || names == ({ }))
	    write("There are no email-registration names.\n");
	else
	  { i = sizeof(names);
	    if (i < 4)
		str = "There is one email-registered name: " +
		      capitalize(names[0]);
	    else
	      { str = "There are " + (sizeof(names) / 2) +
		      " email-registered names: ";
		for (j = 0; j < i - 4; j += 2)
		    str += capitalize(names[j]) + ", ";
		str += capitalize(names[i - 4]) + " and " +
		       capitalize(names[i - 2]); }
	    write(wrap(str + ".\n")); }
	return 1; }
    names = explode(lower_case(str), " ");
    if (sizeof(names) == 2)
      { if (names[0] != "-")
	    return fail();
	i = BANISH_D->remove_mailreg_name(names[1]);
	if (!i)
	    write("Mailreg: Command failed.\n");
	else if (i < 0)
	    write("Mailreg: " + capitalize(names[1]) + " is not in the list " +
		  "of email-registered characters.\n");
	else
	    write("Mailreg: Removed " + capitalize(names[1]) + " from the " +
		  "list of email-registered characters.\n");
	return 1; }
    if (sizeof(names) != 1)
	return fail();
    write("Enter password for " + capitalize(names[0]) + ": ");
    input_to("getpass", 1, names[0], "", 0);
    return 1;
}
static int getpass(string password, string name, string prev, int count)
{
    int i;
    if (prev == "")
      { if (!password || password == "")
	  { write("\nCan't have the null string as a password.\n");
	    if (count < 2)
	      { write("Re-enter password for " + capitalize(name) + ": ");
		input_to("getpass", 1, name, "", count + 1); }
	    return 1; }
	if (strlen(password) < 5)
	  { write("\nPassword must be over five characters in length.\n");
	    if (count < 2)
	      { write("Re-enter password for " + capitalize(name) + ": ");
		input_to("getpass", 1, name, "", count + 1); }
	    return 1; }
	write("\nConfirm password for " + capitalize(name) + ": ");
	input_to("getpass", 1, name, password, 0);
	return 1; }
    if (password != prev)
      { write("\nPasswords do not match.\n");
	return 1; }
    i = BANISH_D->add_mailreg_name(name, crypt(password, 0));
    if (!i)
	write("\nMailreg: Command failed.\n");
    else if (i < 0)
	write("\nMailreg: Password for " + capitalize(name) + " altered.\n");
    else
	write("\nMailreg: Added " + capitalize(name) + " to the list of " +
	      "email-registered characters.\n");
    return 1;
}
int fail()
{
    notify_fail("Usage: mailreg [[-] name]\n");
    return 0;
}
string help()
{
    return(
"Usage: mailreg [[-] name]\n"
"If <name> is given a password will be prompted for (silent entry).  Passwords\n"
"may be altered on existing email-registration characters.  With no argument\n"
"a list of email-registration characters is displayed.  All entries should be\n"
"automatically deleted at first signon, but can also be deleted using the '-'\n"
"option if necessary.\n");
}