tmi2_fluffos_v2/
tmi2_fluffos_v2/bin/
tmi2_fluffos_v2/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/ChangeLog.old/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/Win32/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/simuls/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/clone/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/command/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/data/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/master/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/log/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/compiler/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/efuns/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/operators/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/u/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/tmp/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/windows/
tmi2_fluffos_v2/lib/
tmi2_fluffos_v2/lib/adm/
tmi2_fluffos_v2/lib/adm/daemons/languages/
tmi2_fluffos_v2/lib/adm/daemons/network/I3/
tmi2_fluffos_v2/lib/adm/daemons/virtual/
tmi2_fluffos_v2/lib/adm/daemons/virtual/template/
tmi2_fluffos_v2/lib/adm/news/
tmi2_fluffos_v2/lib/adm/obj/
tmi2_fluffos_v2/lib/adm/obj/master/
tmi2_fluffos_v2/lib/adm/priv/
tmi2_fluffos_v2/lib/adm/shell/
tmi2_fluffos_v2/lib/adm/tmp/
tmi2_fluffos_v2/lib/cmds/
tmi2_fluffos_v2/lib/d/
tmi2_fluffos_v2/lib/d/Conf/
tmi2_fluffos_v2/lib/d/Conf/adm/
tmi2_fluffos_v2/lib/d/Conf/boards/
tmi2_fluffos_v2/lib/d/Conf/cmds/
tmi2_fluffos_v2/lib/d/Conf/data/
tmi2_fluffos_v2/lib/d/Conf/logs/
tmi2_fluffos_v2/lib/d/Conf/obj/
tmi2_fluffos_v2/lib/d/Conf/text/help/
tmi2_fluffos_v2/lib/d/Fooland/adm/
tmi2_fluffos_v2/lib/d/Fooland/data/
tmi2_fluffos_v2/lib/d/Fooland/data/attic/
tmi2_fluffos_v2/lib/d/Fooland/items/
tmi2_fluffos_v2/lib/d/TMI/
tmi2_fluffos_v2/lib/d/TMI/adm/
tmi2_fluffos_v2/lib/d/TMI/boards/
tmi2_fluffos_v2/lib/d/TMI/data/
tmi2_fluffos_v2/lib/d/TMI/rooms/
tmi2_fluffos_v2/lib/d/grid/
tmi2_fluffos_v2/lib/d/grid/adm/
tmi2_fluffos_v2/lib/d/grid/data/
tmi2_fluffos_v2/lib/d/std/
tmi2_fluffos_v2/lib/d/std/adm/
tmi2_fluffos_v2/lib/data/adm/
tmi2_fluffos_v2/lib/data/adm/daemons/
tmi2_fluffos_v2/lib/data/adm/daemons/doc_d/
tmi2_fluffos_v2/lib/data/adm/daemons/emoted/
tmi2_fluffos_v2/lib/data/adm/daemons/network/http/
tmi2_fluffos_v2/lib/data/adm/daemons/network/services/mail_q/
tmi2_fluffos_v2/lib/data/adm/daemons/network/smtp/
tmi2_fluffos_v2/lib/data/adm/daemons/news/archives/
tmi2_fluffos_v2/lib/data/attic/connection/
tmi2_fluffos_v2/lib/data/attic/user/
tmi2_fluffos_v2/lib/data/std/connection/b/
tmi2_fluffos_v2/lib/data/std/connection/l/
tmi2_fluffos_v2/lib/data/std/user/a/
tmi2_fluffos_v2/lib/data/std/user/b/
tmi2_fluffos_v2/lib/data/std/user/d/
tmi2_fluffos_v2/lib/data/std/user/f/
tmi2_fluffos_v2/lib/data/std/user/l/
tmi2_fluffos_v2/lib/data/std/user/x/
tmi2_fluffos_v2/lib/data/u/d/dm/working/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/smtp/
tmi2_fluffos_v2/lib/doc/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/interactive/
tmi2_fluffos_v2/lib/doc/driverdoc/concepts/
tmi2_fluffos_v2/lib/doc/driverdoc/driver/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/arrays/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/buffers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/compile/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/ed/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/filesystem/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/floats/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/functions/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/general/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/mappings/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/numbers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/parsing/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/constructs/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/preprocessor/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/types/
tmi2_fluffos_v2/lib/doc/driverdoc/platforms/
tmi2_fluffos_v2/lib/doc/mudlib/
tmi2_fluffos_v2/lib/ftp/
tmi2_fluffos_v2/lib/include/driver/
tmi2_fluffos_v2/lib/log/
tmi2_fluffos_v2/lib/log/driver/
tmi2_fluffos_v2/lib/obj/net/
tmi2_fluffos_v2/lib/obj/shells/
tmi2_fluffos_v2/lib/obj/tools/
tmi2_fluffos_v2/lib/std/adt/
tmi2_fluffos_v2/lib/std/board/
tmi2_fluffos_v2/lib/std/body/
tmi2_fluffos_v2/lib/std/fun/
tmi2_fluffos_v2/lib/std/living/
tmi2_fluffos_v2/lib/std/object/
tmi2_fluffos_v2/lib/std/shop/
tmi2_fluffos_v2/lib/std/socket/
tmi2_fluffos_v2/lib/std/user/
tmi2_fluffos_v2/lib/std/virtual/
tmi2_fluffos_v2/lib/student/
tmi2_fluffos_v2/lib/student/kalypso/
tmi2_fluffos_v2/lib/student/kalypso/armor/
tmi2_fluffos_v2/lib/student/kalypso/rooms/
tmi2_fluffos_v2/lib/student/kalypso/weapons/
tmi2_fluffos_v2/lib/u/l/leto/
tmi2_fluffos_v2/lib/u/l/leto/cmds/
tmi2_fluffos_v2/lib/www/errors/
tmi2_fluffos_v2/lib/www/gateways/
tmi2_fluffos_v2/lib/www/images/
tmi2_fluffos_v2/old/
tmi2_fluffos_v2/win32/
//	File	: /adm/daemons/banish.c
//	Creator	: Someone@TMI
//	Updated	: Karathan  (7/13/93)  Unified banish code.
//		  Karathan  (8/11/93)  Bug tidying, streamlined.
//		  Karathan  (8/12/93)  Bug tidying; added email registration
//		   command backing code.
//                Leto added some copy() and a ROOT_UID check, 19-12-94

#include <uid.h>
#include <daemons.h>

//  Name changed deliberately because regexp() requires a different name format
//  to the previous version.  Note that '*fuck*' will not do - '.*fuck.*' is
//  required.  '*fuck*' functions as '*'.
#define SAVE_F        "/adm/etc/banishes"
#define OLD_SAVE_F    "/adm/etc/ban_site"
#define BANNED_NAMES  ({ })
#define BANNED_SITES  ({"192.129.84.3" })

string *names, *sites, *mailreg;

void save();


void create()
{
    int i, j, flag;
    string str;

    seteuid(ROOT_UID);
    if (file_exists(SAVE_F + ".o"))
	restore_object(SAVE_F);
    else if (file_exists(OLD_SAVE_F + ".o"))
      { restore_object(OLD_SAVE_F);
	if (names && sizeof(names) > 0)
	   for (i = 0; i < sizeof(names); i++)
	      { for (flag = j = 0, str = ""; j < strlen(names[i]); j++)
		  { if (names[i][j] == '?')
		      { if (j > flag)
			    str += names[i][flag..(j - 1)];
			str += "."; flag = j + 1; }
		    if (names[i][j] == '*')
		      { if (j > flag)
			    str += names[i][flag..(j - 1)];
			str += ".*"; flag = j + 1; } }
		if (flag)
		    names[i] = str; }
	save(); }
    if (!names)
	names = BANNED_NAMES;
    if (!sites)
	sites = BANNED_SITES;
    if (!mailreg)
	mailreg = ({ });		// Should never be defaults for this!
}


//  Check incoming ip number against list of banned sites. Allow partial
//  matches so that 129.51 also catches 129.51.8.24, etc.
int check_banned_site(string ip)
{
    int i, j, a1, a2, a3, a4, b1, b2, b3, b4;
 
    if (!sites)
	return 0;
    if (sscanf(ip, "%d.%d.%d.%d", a1, a2, a3, a4) != 4)
	return -1;			// -1 indicates unable to break down ip
    for (i = 0; i < sizeof(sites); i++)
      { j = sscanf(sites[i], "%d.%d.%d.%d", b1, b2, b3, b4);
	if (a1 != b1)
	    continue;
	if (j > 1 && a2 != b2)
	    continue;
	if (j > 2 && a3 != b3)
	    continue;
	if (j > 3 && a4 != b4)
	    continue;
	return 1; }
    return 0;
}


//  Check incoming name against list of banned names. Banned names can include
//  standard regexp wildcards if they wish.
int check_banned_name(string name)
{
    int i;
    string *test;

    if (!names || name == "")
	return 0;
    test = ({ name });
    for (i = 0; i < sizeof(names); i++)
	if (name == names[i] || sizeof(regexp(test, names[i])) > 0)
	    return 1;
    return 0;
}


//  Check incoming name against list of email-registration names.  Return is the
//  encrypted password registered for that character or the empty string.
string check_mailreg_name(string name)
{
    int i;

 if (geteuid(previous_object()) != ROOT_UID) return "NO GO\n"; // Leto
    if (!mailreg || name == "")
	return "";
    for (i = 0; i < sizeof(mailreg); i += 2)
	if (name == mailreg[i])
          return copy(mailreg[i + 1]); // Leto
    return "";
}


//  Add a site to the list of banished sites (admin calls only).
int banish_site(string ip)
{
    if (geteuid(previous_object()) != ROOT_UID || ip == "")
	return 0;
    if (member_array(ip, sites) == -1)
      { sites += ({ ip });
	save(); return 1; }
    return -1;			// -1 indicates the site is already banished
}


//  Remove a site from the list of banished sites (admin calls only).
int remove_banished_site(string ip)
{
    if (geteuid(previous_object()) != ROOT_UID || ip == "")
	return 0;
    if (member_array(ip, sites) >= 0)
      { sites -= ({ ip });
	save(); return 1; }
    return -1;			// -1 indicates the site had not been banished
}


//  Add a name to the list of banished names (admin calls only).
int banish_name(string name)
{
    if (geteuid(previous_object()) != ROOT_UID || name == "")
	return 0;
    if (member_array(name, names) == -1)
      { names += ({ name });
	save(); return 1; }
    return -1;			// -1 indicates the name is already banished
}


//  Remove a name from the list of banished names (admin calls only).
int remove_banished_name(string name)
{
    if (geteuid(previous_object()) != ROOT_UID || name == "")
	return 0;
    if (member_array(name, names) >= 0)
      { names -= ({ name });
	save(); return 1; }
    return -1;			// -1 indicates the name had not been banished
}


//  Add a name to the list of email-registration names (admin calls only).
int add_mailreg_name(string name, string password)
{
    int i;

    if (geteuid(previous_object()) != ROOT_UID || name == "" || password == "")
	return 0;
    i = member_array(name, mailreg);
    if (i == -1)
      { mailreg += ({ name, password });
	save(); return 1; }
    mailreg[i + 1] = password;
    save(); return -1;		// -1 indicates an existing password has been
}				// altered


//  Remove a name from the list of email-registration names (admin calls and
//  logind.c via newuserd.c only).
int remove_mailreg_name(string name)
{
    int i;
    string password;

    if (geteuid(previous_object()) != ROOT_UID || name == "")
	return 0;
    i = member_array(name, mailreg);
    if (i == -1)
	return -1;		// -1 indicates the name had not been added
    password = mailreg[i + 1];
    mailreg -= ({ name, password });
    save(); return 1;
}


//  Return the list of banished sites (admin calls only).
string *query_banished_sites()
{
    if (geteuid(previous_object()) != ROOT_UID)
	return ({ });
   return copy(sites);
}


//  Return the list of banished names (admin calls only).
string *query_banished_names()
{
    if (geteuid(previous_object()) != ROOT_UID)
	return ({ });
   return copy(names); // Leto
}


//  Return the list of email-registration names (admin calls only).
string *query_mailreg_names()
{
    if (geteuid(previous_object()) != ROOT_UID)
	return ({ });
    return copy(mailreg); // Leto
}


void save()
{ 
    save_object(SAVE_F);
}