final_realms_fluffos_v1/
final_realms_fluffos_v1/bin/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/ChangeLog.old/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/Win32/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/compat/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/compat/simuls/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/include/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/clone/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/command/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/data/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/etc/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/include/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/inherit/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/inherit/master/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/log/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/compiler/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/efuns/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/single/tests/operators/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/testsuite/u/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/tmp/
final_realms_fluffos_v1/fluffos-2.9-ds2.11/windows/
final_realms_fluffos_v1/lib/baseobs/guilds/
final_realms_fluffos_v1/lib/baseobs/misc/
final_realms_fluffos_v1/lib/baseobs/races/shadows/
final_realms_fluffos_v1/lib/cmds/god/
final_realms_fluffos_v1/lib/cmds/handlers/
final_realms_fluffos_v1/lib/cmds/handlers/cmds/
final_realms_fluffos_v1/lib/d/heaven/
final_realms_fluffos_v1/lib/d/heaven/heaven/ave/
final_realms_fluffos_v1/lib/d/mudlib/
final_realms_fluffos_v1/lib/d/newbie/
final_realms_fluffos_v1/lib/d/newbie/docs/
final_realms_fluffos_v1/lib/d/newbie/drow/armour/
final_realms_fluffos_v1/lib/d/newbie/drow/items/
final_realms_fluffos_v1/lib/d/newbie/drow/mobs/
final_realms_fluffos_v1/lib/d/newbie/drow/oldmobs/
final_realms_fluffos_v1/lib/d/newbie/drow/weapons/
final_realms_fluffos_v1/lib/d/newbie/duergar/weapons/
final_realms_fluffos_v1/lib/d/newbie/dwarf/weapons/
final_realms_fluffos_v1/lib/d/newbie/elf/cafe/
final_realms_fluffos_v1/lib/d/newbie/elf/chars/equip/
final_realms_fluffos_v1/lib/d/newbie/elf/items/armours/
final_realms_fluffos_v1/lib/d/newbie/elf/items/obj/
final_realms_fluffos_v1/lib/d/newbie/elf/items/weapons/
final_realms_fluffos_v1/lib/d/newbie/elf/quick_fix/
final_realms_fluffos_v1/lib/d/newbie/gnome/armour/
final_realms_fluffos_v1/lib/d/newbie/gnome/buildings/
final_realms_fluffos_v1/lib/d/newbie/gnome/items/
final_realms_fluffos_v1/lib/d/newbie/gnome/npcs/clones/
final_realms_fluffos_v1/lib/d/newbie/gnome/rooms/northrooms/
final_realms_fluffos_v1/lib/d/newbie/gnome/weapons/
final_realms_fluffos_v1/lib/d/newbie/goblin/armour/
final_realms_fluffos_v1/lib/d/newbie/goblin/items/
final_realms_fluffos_v1/lib/d/newbie/grads/log/
final_realms_fluffos_v1/lib/d/newbie/grads/npcs/
final_realms_fluffos_v1/lib/d/newbie/grads/rooms/
final_realms_fluffos_v1/lib/d/newbie/grads/rooms/cave1/
final_realms_fluffos_v1/lib/d/newbie/grads/temp/
final_realms_fluffos_v1/lib/d/newbie/guests/weapons/
final_realms_fluffos_v1/lib/d/newbie/half-elf/items/
final_realms_fluffos_v1/lib/d/newbie/half-elf/newroomss/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/castle/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/drows/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/savannah/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/secret/
final_realms_fluffos_v1/lib/d/newbie/half-elf/rooms/town/
final_realms_fluffos_v1/lib/d/newbie/halfling/
final_realms_fluffos_v1/lib/d/newbie/halfling/misc/
final_realms_fluffos_v1/lib/d/newbie/halfling/rooms/cave/
final_realms_fluffos_v1/lib/d/newbie/human/
final_realms_fluffos_v1/lib/d/newbie/human/armour/
final_realms_fluffos_v1/lib/d/newbie/human/monsters/
final_realms_fluffos_v1/lib/d/newbie/human/obj/
final_realms_fluffos_v1/lib/d/newbie/human/weapons/
final_realms_fluffos_v1/lib/d/newbie/lizard/armour/
final_realms_fluffos_v1/lib/d/newbie/lizard/items/
final_realms_fluffos_v1/lib/d/newbie/lizard/underwater/
final_realms_fluffos_v1/lib/d/newbie/lizard/weapons/
final_realms_fluffos_v1/lib/d/newbie/logs/
final_realms_fluffos_v1/lib/d/newbie/new_halfelf/
final_realms_fluffos_v1/lib/d/newbie/new_halfelf/npcs/
final_realms_fluffos_v1/lib/d/newbie/newdrow/npcs/
final_realms_fluffos_v1/lib/d/newbie/newdrow/rooms/
final_realms_fluffos_v1/lib/d/newbie/newelf/
final_realms_fluffos_v1/lib/d/newbie/newelf/chars/
final_realms_fluffos_v1/lib/d/newbie/newelf/npcs/
final_realms_fluffos_v1/lib/d/newbie/newelf/npcs/recopied/
final_realms_fluffos_v1/lib/d/newbie/newelf/obj/
final_realms_fluffos_v1/lib/d/newbie/newelf/quest_docs./
final_realms_fluffos_v1/lib/d/newbie/newken/
final_realms_fluffos_v1/lib/d/newbie/newken/chars/
final_realms_fluffos_v1/lib/d/newbie/newken/misc/
final_realms_fluffos_v1/lib/d/newbie/newken/npcs/
final_realms_fluffos_v1/lib/d/newbie/newken/obj/
final_realms_fluffos_v1/lib/d/newbie/newliz/
final_realms_fluffos_v1/lib/d/newbie/newliz/cave/
final_realms_fluffos_v1/lib/d/newbie/newliz/npcs/
final_realms_fluffos_v1/lib/d/newbie/orc/items/misc/
final_realms_fluffos_v1/lib/d/newbie/orc/items/weapons/
final_realms_fluffos_v1/lib/d/newbie/orc/tower/
final_realms_fluffos_v1/lib/d/vehicle/
final_realms_fluffos_v1/lib/doc/
final_realms_fluffos_v1/lib/doc/driver/
final_realms_fluffos_v1/lib/doc/driver/concepts/
final_realms_fluffos_v1/lib/doc/driver/driver/
final_realms_fluffos_v1/lib/doc/driver/efuns/arrays/
final_realms_fluffos_v1/lib/doc/driver/efuns/bitstrings/
final_realms_fluffos_v1/lib/doc/driver/efuns/communication/
final_realms_fluffos_v1/lib/doc/driver/efuns/core/
final_realms_fluffos_v1/lib/doc/driver/efuns/debugging/
final_realms_fluffos_v1/lib/doc/driver/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/driver/efuns/interactive/
final_realms_fluffos_v1/lib/doc/driver/efuns/mappings/
final_realms_fluffos_v1/lib/doc/driver/efuns/objects/
final_realms_fluffos_v1/lib/doc/driver/efuns/security/
final_realms_fluffos_v1/lib/doc/driver/efuns/strings/
final_realms_fluffos_v1/lib/doc/driver/efuns/system/
final_realms_fluffos_v1/lib/doc/driver/efuns/types/
final_realms_fluffos_v1/lib/doc/driver/lpc/constructs/
final_realms_fluffos_v1/lib/doc/driver/lpc/types/
final_realms_fluffos_v1/lib/doc/driver/platforms/
final_realms_fluffos_v1/lib/doc/lpc/
final_realms_fluffos_v1/lib/doc/mail/
final_realms_fluffos_v1/lib/doc/man/
final_realms_fluffos_v1/lib/doc/man/html/
final_realms_fluffos_v1/lib/doc/man/html/applies/
final_realms_fluffos_v1/lib/doc/man/html/applies/parsing/
final_realms_fluffos_v1/lib/doc/man/html/driver/
final_realms_fluffos_v1/lib/doc/man/html/efuns/
final_realms_fluffos_v1/lib/doc/man/html/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/html/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/html/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/html/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/html/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/html/efuns/general/
final_realms_fluffos_v1/lib/doc/man/html/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/html/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/local/
final_realms_fluffos_v1/lib/doc/man/local/applies/
final_realms_fluffos_v1/lib/doc/man/local/applies/interactive/
final_realms_fluffos_v1/lib/doc/man/local/applies/master/
final_realms_fluffos_v1/lib/doc/man/local/concepts/
final_realms_fluffos_v1/lib/doc/man/local/defines/
final_realms_fluffos_v1/lib/doc/man/local/driver/
final_realms_fluffos_v1/lib/doc/man/local/efuns/
final_realms_fluffos_v1/lib/doc/man/local/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/local/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/local/efuns/calls/
final_realms_fluffos_v1/lib/doc/man/local/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/local/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/man/local/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/local/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/local/efuns/general/
final_realms_fluffos_v1/lib/doc/man/local/efuns/interactive/
final_realms_fluffos_v1/lib/doc/man/local/efuns/internals/
final_realms_fluffos_v1/lib/doc/man/local/efuns/mappings/
final_realms_fluffos_v1/lib/doc/man/local/efuns/mudlib/
final_realms_fluffos_v1/lib/doc/man/local/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/local/efuns/objects/
final_realms_fluffos_v1/lib/doc/man/local/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/local/efuns/sockets/
final_realms_fluffos_v1/lib/doc/man/local/efuns/strings/
final_realms_fluffos_v1/lib/doc/man/local/efuns/system/
final_realms_fluffos_v1/lib/doc/man/local/historical/
final_realms_fluffos_v1/lib/doc/man/local/lfun/QC/
final_realms_fluffos_v1/lib/doc/man/local/lfun/events/
final_realms_fluffos_v1/lib/doc/man/local/lfun/monster/
final_realms_fluffos_v1/lib/doc/man/local/lfun/properties/
final_realms_fluffos_v1/lib/doc/man/local/lpc/
final_realms_fluffos_v1/lib/doc/man/local/lpc/constructs/
final_realms_fluffos_v1/lib/doc/man/local/lpc/types/
final_realms_fluffos_v1/lib/doc/man/local/standards/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/basic/
final_realms_fluffos_v1/lib/doc/man/local/tutorials/intermediate/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/interactive/
final_realms_fluffos_v1/lib/doc/man/mudos/applies/parsing/
final_realms_fluffos_v1/lib/doc/man/mudos/concepts/
final_realms_fluffos_v1/lib/doc/man/mudos/driver/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/arrays/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/buffers/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/calls/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/compile/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/filesystem/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/floats/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/functions/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/general/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mappings/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mixed/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/mudlib/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/numbers/
final_realms_fluffos_v1/lib/doc/man/mudos/efuns/parsing/
final_realms_fluffos_v1/lib/doc/man/mudos/lpc/constructs/
final_realms_fluffos_v1/lib/doc/man/mudos/lpc/types/
final_realms_fluffos_v1/lib/doc/races/
final_realms_fluffos_v1/lib/doc/races/old_race/
final_realms_fluffos_v1/lib/global/virtual/
final_realms_fluffos_v1/lib/global/wiz_backup/
final_realms_fluffos_v1/lib/net/config/
final_realms_fluffos_v1/lib/net/daemon/chars/
final_realms_fluffos_v1/lib/net/inherit/
final_realms_fluffos_v1/lib/net/intermud3/
final_realms_fluffos_v1/lib/net/intermud3/cmds/
final_realms_fluffos_v1/lib/net/intermud3/save/
final_realms_fluffos_v1/lib/net/intermud3/services/
final_realms_fluffos_v1/lib/net/obj/
final_realms_fluffos_v1/lib/net/old/
final_realms_fluffos_v1/lib/net/old/intermud/
final_realms_fluffos_v1/lib/net/old/intermud/adm/
final_realms_fluffos_v1/lib/net/old/intermud/services/
final_realms_fluffos_v1/lib/net/old/intermud/udp/
final_realms_fluffos_v1/lib/net/virtual/
final_realms_fluffos_v1/lib/obj/b_day/
final_realms_fluffos_v1/lib/obj/chars/
final_realms_fluffos_v1/lib/obj/handlers/lists/
final_realms_fluffos_v1/lib/obj/handlers/useless/
final_realms_fluffos_v1/lib/obj/monsters/
final_realms_fluffos_v1/lib/obj/roomgen/
final_realms_fluffos_v1/lib/obj/soul/
final_realms_fluffos_v1/lib/obj/vegetation/
final_realms_fluffos_v1/lib/obj/weapons/oldsys/
final_realms_fluffos_v1/lib/open/
final_realms_fluffos_v1/lib/players/g/
final_realms_fluffos_v1/lib/releasefiles/d/heaven/
final_realms_fluffos_v1/lib/releasefiles/d/mudlib/
final_realms_fluffos_v1/lib/releasefiles/d/newbie/
final_realms_fluffos_v1/lib/releasefiles/doc/
final_realms_fluffos_v1/lib/releasefiles/players/g/
final_realms_fluffos_v1/lib/releasefiles/save/
final_realms_fluffos_v1/lib/releasefiles/save/environ/
final_realms_fluffos_v1/lib/releasefiles/save/roomgen/
final_realms_fluffos_v1/lib/releasefiles/secure/
final_realms_fluffos_v1/lib/releasefiles/w/
final_realms_fluffos_v1/lib/releasefiles/w/god/
final_realms_fluffos_v1/lib/room/
final_realms_fluffos_v1/lib/save/
final_realms_fluffos_v1/lib/save/environ/
final_realms_fluffos_v1/lib/save/roomgen/
final_realms_fluffos_v1/lib/scripts/
final_realms_fluffos_v1/lib/secure/crerem/
final_realms_fluffos_v1/lib/secure/dom/
final_realms_fluffos_v1/lib/secure/log/
final_realms_fluffos_v1/lib/secure/misc/
final_realms_fluffos_v1/lib/std/adnd/
final_realms_fluffos_v1/lib/std/commands/shadows/
final_realms_fluffos_v1/lib/std/creator/
final_realms_fluffos_v1/lib/std/curses/
final_realms_fluffos_v1/lib/std/curses/old_sys/
final_realms_fluffos_v1/lib/std/curses/shadows/
final_realms_fluffos_v1/lib/std/dom/
final_realms_fluffos_v1/lib/std/effects/
final_realms_fluffos_v1/lib/std/effects/healing/
final_realms_fluffos_v1/lib/std/effects/other/
final_realms_fluffos_v1/lib/std/effects/poisons/
final_realms_fluffos_v1/lib/std/environ/
final_realms_fluffos_v1/lib/std/guilds/
final_realms_fluffos_v1/lib/std/guilds/priests/samples/
final_realms_fluffos_v1/lib/std/guilds/wizards/
final_realms_fluffos_v1/lib/std/living/baldy/
final_realms_fluffos_v1/lib/std/living/divstuff/
final_realms_fluffos_v1/lib/std/paran/
final_realms_fluffos_v1/lib/std/poisons/
final_realms_fluffos_v1/lib/std/poisons/shadows/
final_realms_fluffos_v1/lib/std/poisons/weapons/
final_realms_fluffos_v1/lib/std/race_groups/
final_realms_fluffos_v1/lib/std/room/
final_realms_fluffos_v1/lib/std/room/old/
final_realms_fluffos_v1/lib/std/rooms/
final_realms_fluffos_v1/lib/std/shadows/
final_realms_fluffos_v1/lib/std/shadows/test_shad/
final_realms_fluffos_v1/lib/std/socket/
final_realms_fluffos_v1/lib/std/spells/
final_realms_fluffos_v1/lib/std/vaults/
final_realms_fluffos_v1/lib/tmp/
final_realms_fluffos_v1/lib/w/
final_realms_fluffos_v1/lib/w/god/
final_realms_fluffos_v1/old/
final_realms_fluffos_v1/win32/
/* Bastards.c takes care of suspension, banished sites and now also banished
 * playernames.
 * Baldrick, oct '95
 */
/* Tweaked Sept 1995 -- Hamlet
   Trying to fix NO_NEW and add NO_GUEST
*/

#include "access.h"
#include "mail.h"
#define POSTAL_D "/obj/handlers/postal_d"

static string *names;
static string def;

mapping access;  /* Site access control */
string *preferred;
mapping suspended, banished;

int query_access(string *address, string ident);
mapping query_access_mapping() { return access; }
string get_nomulti_string(string site, string userid);

void create() {
    names = ({ "root", "/global/player",
      "failsafe", "/global/failsafe", });
    def = "/global/player";
    seteuid("Root");
    access = ([ ]);
    suspended = ([ ]);
    banished = ([ ]);
    restore_object(file_name(this_object()),1);
    move_object("/room/void");  /* Make it unclonable... */
    preferred = ({ });
} /* create() */

int check_access(object ob, int existing)
{
    string *tmp = explode(query_ip_name(ob),".");
    switch (query_access(explode(query_ip_number(ob), "."), 
    ob->query_ident())) {
    case NO_NEW :
    if (!existing) {
        write("Site banned for new players.\n");
        return NO_NEW;
    }
    else
        return ACCESS;
    case NO_ACCESS :
    write("Site banned for all players.\n");
    return NO_ACCESS;
    case NO_GUEST :
    if(ob->query_name() == "guest") {
        write("Site banned for guests.\n");
        return NO_GUEST;
    }
    else
        return ACCESS;
    case NO_IMMORTS :
    if(ob->query_creator()) {
        write("Site banned for immortals.\n");
        return NO_IMMORTS;
    }
    else
        return ACCESS;
    case NO_PLAYERS :
    if(!ob->query_creator()) {
        write("Site banned for players.\n");
        return NO_PLAYERS;
    }
    else
        return ACCESS;
    case ACCESS :
    return ACCESS;
    case NO_MULTIPLAY:
      ob->add_static_property("NOMULTI",
                              get_nomulti_string(query_ip_number(ob),
                                                 ob->query_ident()));
    return DEFAULT;
    default :
    return DEFAULT;
    }
} /* check_access() */

/* The flag skips the initial check for query_creator().  This is
   needed for the first call to the fcn, when restore_object() hasn't
   been called yet.  Only purpose of this first call is to determine
   whether the person is banished, so security isn't really an issue.
   Check for query_creator() needs skipped so I can install immortal
   slots, which have to decide whether let person in according to whether
   this fcn returns "global/player" or not.  flag should not be passed in
   any subsequent calls to the function. -- Hamlet
*/
varargs string query_player_ob(string name, int flag)
{
    int i;
    int existing;
    int reason;

    if (POSTAL_D->query_mailing_list(name))
    {
    write("Name is a mailing list.\n");
    return 0;
    }

    if(member_array(name,get_dir("/d/")) != -1) {
    write("Name is a domain.\n");
    return 0;
    }

    i = member_array(name, names);
    if (i != -1) 
    {
    return names[i+1];
    }
    if (banished[name])
    {
    write("This name is banished, pick a different one.\n");
    return 0;
    }
    if (suspended[name] > time()) 
    {
    write("You have been suspended until "+ctime(suspended[name])+".\n");
    return 0;
    }
    suspended = m_delete(suspended, name);
    /*
    if ("secure/master"->query_lord(name)) 
      {
      return "global/lord";
      }
    */
    if(file_size("/players/" + name[0..0] + "/" + name + ".o") < 1)
    existing = 0;
    else
    existing = 1;
    reason = check_access(previous_object(), existing);
    if(reason != ACCESS)
    return "";
    /* I hope this is the right place to put this code in.
     * Baldrick, sept '93 
     * Added more files, oct '95. 
     * First, a check if the player is a creator..
     * to be sure it isn't a new player using a non-existing .o
     */
    if(previous_object()->query_creator() ||flag)
    {
    if ("/secure/gods"->query_boo(name))
        return "global/god";
    if ("/secure/lords"->query_boo(name))
        return "global/lord";
    if ("/secure/mudlibber"->query_boo(name))
        return "global/lord";
    if ("/secure/thanes"->query_of(name))
        return "global/thane";
    if ("/secure/patrons"->query_patronage(name))
        return "global/patron";
    if(previous_object()->query_creator()) /* Will actually need this now. */
        return "global/creator";
    }
    return def;
} /* query_player_ob() */

int query_prevent_shadow() { return 1; }

/*
 * Ok, acces checking stuff...
 */
mapping query_all_access() { return access + ([ ]); }

/*
 * Look up the address and find out if it is nice and floppy
 * Adress is of the format ({ "130", "95", "100", "2" })
 */
int query_access(string *address, string ident) {
    mixed rest;

    if (!pointerp(address) || sizeof(address) != 4)
    return ERROR;
    if (!(rest = access[address[0]]))
    return DEFAULT;
    address = address[1..4];
    while (sizeof(address)) {
    if (!rest[address[0]])
        if (!rest["*"])
        return DEFAULT;
        else
        rest = rest["*"];
    else
        rest = rest[address[0]];
    address = address[1..4];
    }
    if (rest[ident])
    return rest[ident];
    if (rest["*"])
    return rest["*"];
    return DEFAULT;
} /* query_access() */

static mixed add_access(mixed bing, string *address, string ident,
  int level) {
    if (!mappingp(bing))
    bing = ([ ]);
    if (!sizeof(address)) {
    if (!level)
        bing = m_delete(bing, ident);
    else
        bing[ident] = level;
    if (!m_sizeof(bing))
        return 0;
    return bing;
    }
    bing[address[0]] = add_access(bing[address[0]], address[1..4], ident, level);
    if (!bing[address[0]])
    bing = m_delete(bing, address[0]);
    if (!m_sizeof(bing))
    return 0;
    return bing;
} /* add_access() */

int change_access(string *address, string ident, int level, string reason) {
    if (!"/secure/master"->high_programmer(geteuid(previous_object())) ||
      this_player() != this_player(1)) {
    notify_fail("Wrong euid.\n");
    return 0;
    }
    if (!pointerp(address) || sizeof(address) != 4 || !reason) {
    notify_fail("Invalid paramters.\n");
    return 0;
    }
    access = add_access(access, address, ident, level);
    if (!access)
    access = ([ ]);
    save_object(file_name(this_object()),1);
    switch (level) {
    case NO_NEW :
    reason = "no new for "+reason;
    break;
    case NO_ACCESS :
    reason = "no access for "+reason;
    break;
    case ACCESS :
    reason = "access for "+reason;
    break;
    case 0 :
    reason = "deleted for "+reason;
    break;
    }
    write_file("/log/ACCESS",
      ident+"@"+implode(address, ".")+" set to "+reason+" by "+
      this_player()->query_name()+".\n");
    return 1;
} /* check_access() */

int suspend_person(string str, int tim) 
{
    if (!"/secure/master"->query_lord(geteuid(previous_object())))
    return 0;
    if (file_size("/players/"+str[0..0]+"/"+str+".o") < 0)
    return 0;
    suspended[str] = time()+tim;
    save_object(file_name(this_object()),1);
    write_file("/log/SUSPEND", str+" suspended until "+ctime(time()+tim)+
      " by "+this_player()->query_name()+".\n");
    return 1;
} /* suspend_person() */

int unsuspend_person(string str) 
{
    if (!"/secure/master"->query_lord(geteuid(previous_object())))
    return 0;
    suspended = m_delete(suspended, str);
    save_object(file_name(this_object()),1);
    // Radix...
    write_file("/log/SUSPEND", str+" unsuspended by "+
      this_player()->query_name()+".\n");
    // write_file("/log/SUSPEND", str+" unsuspended.\n");
    return 1;
} /* unsuspend_person() */

/* Banish code: 
 * Added by Baldrick for simplifying banishing.. 
 */

int banish_playername(string str, string reason)
{
    if (!"/secure/master"->query_lord(geteuid(previous_object())))
    return 0;
    /*
    if (file_size("/players/"+str[0..0]+"/"+str+".o") < 0)
      return 0;
    */
    banished[str] = reason;
    save_object(file_name(this_object()),1);
    write_file("/log/BANISHED", str+" banished because of " + reason + 
      " by "+this_player()->query_name()+".\n");
    return 1;
} /* banish player name */

int unbanish_playername(string str)
{
    if (!"/secure/master"->query_lord(geteuid(previous_object())))
    return 0;
    banished = m_delete(banished, str);
    save_object(file_name(this_object()),1);
    write_file("/log/BANISHED", str+" unbanished.\n");
    return 1;
} /* unbanish playername */

string get_nomulti_string(string site, string userid) {
  string *ret;
  string *thesite;
  int i;
  mapping acc;

  acc = copy(access);

  thesite = explode(site, ".");
  ret = ({ thesite[0] });

  acc = acc[thesite[0]];

  for(i=1; i < sizeof(thesite); i++) {
    if(acc["*"]) {
      acc = acc["*"];
      ret += ({ "*" });
    }
    else {
      acc = acc[thesite[i]];
      ret += ({ thesite[i] });
    }
  }

  if(acc["*"])
    userid = "*";

  return userid + "@" + implode(ret, ".");    
}