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/
//domain.c
// This is the domain daemon for the TMI-2 mudlib.
// It's loosely based on some earlier code written by Sulam (April 12, 1992) and later
// modified by Jubal for multiguilding (Apr12/92).
// The present incarnation, as a daemon, was done by Buddha@TMI-2 on 1/14/93
// 93-08-04 Grendel@tmi-2 Cleaned up a bit, and added separate wizard default
// 19-Dec 94 Leto added some copy()'s


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

inherit DAEMON;

// the default levels for players and wizards
string player, wizard;

// okay, this can be called with several intentions:
// 1. pass just an object to it, and it will assume the object is a link, and tell you the 
// primary domain of that object.
// 2. add a second string arguement to either method 1 or 2, and it will tell you if the
// player is a member of the domain specified by the second arguement.
// The return value, will be either 0, or the name of the domain the user is a 
// member of.
 
varargs string
query_domain(object link, string domain)
{
	mapping domains, entry;
	string level;

	if(!link || !objectp(link))  return 0;
 
	domains = link->query("domains");
	if (!domains || !keys(domains)) return 0;  // default case, for a player
	if(!domain)  domain = domains["primary"];
	if(domain) entry = domains[domain];
	if(entry) level = entry["level"];
 	if(!level)  return 0;
    return copy(domain);
}

varargs string
query_domain_sponsor(object link, string domain)
{
	mapping domains, entry;

	domains = link->query("domains");
	if( !domains || !keys(domains)) return 0;
	if(!domain) domain = domains["primary"];
	if( member_array( domain, DOMAIN_LIST ) < 0) return 0;
	entry = domains[domain];
      return copy( ( entry ? entry["sponsor"] : 0 ) );
}

 varargs string
query_domain_level(object link, string domain)
{
	mapping domains, entry;

	if(!link)  return player;
 
	domains = (mapping)link->query("domains");
	if (!domains || !keys(domains))
	    return (int)link->query("wizard") ? wizard : player;
	if (!domain) domain = domains["primary"];
	entry = domains[domain];
	// assume if they have a domain entry they are a wizard
      return copy ((entry ? entry["level"] : wizard));
}

nomask int
set_domain(object link, string domain, string lev, string sponsor )
{
	mapping domains, rec;

	if (getuid(previous_object() ) != ROOT_UID) return 0;
	domains = link->query("domains");
	if (nullp(domains) || !keys(domains)) domains = ([ ]);
	if (member_array(domain, DOMAIN_LIST ) < 0) return 0;
	if (member_array( lev, LEVEL_LIST ) < 0) return 0;

// This is cargo-cult programming and I know it, but I think the
// daemon is losing its EUID and that's causing a Heisenbug that
// makes promotion/demotion fail. So, I'm setting the EUID by hand. If
// I'm wrong, it should not cost anything.

	seteuid(getuid()) ;

	/* remove from domain? */
	if( member_array(lev,LEVEL_LIST) < ENTRY_LEVEL && domain != 0 )
	{
		map_delete(domains, domain);
                if(!undefinedp(domains["primary"])
                   && domains["primary"] == domain)
                    map_delete(domains,"primary");
                link->set("domains", domains);
		return 1;
	}

	/* promote or add user to domain */
	rec = ([ "level" : lev, "sponsor" : sponsor ]);
	domains[domain] = rec;
	if( member_array(lev,LEVEL_LIST) >= ENTRY_LEVEL &&
	    ! domains[ "primary" ] )
		domains[ "primary" ] = domain;
	link->set("domains", domains);
	return 1;
}

nomask int
set_primary_domain(object link, string d)
{
	mapping domains;

	if (geteuid(previous_object()) != ROOT_UID) return 0;
	domains = (mapping)link->query("domains");
	if (!domains || !keys(domains) || !domains[d]) return 0;
	if ( member_array(d, DOMAIN_LIST ) < 0) return 0;
	if ( member_array(domains[d]["level"],LEVEL_LIST) < ENTRY_LEVEL)
		return 0;
	domains["primary"] = d;
	return 1;
}

nomask string
query_primary_domain(object link)
{
	mapping domains;
	domains = (mapping)link->query("domains");
	if (!domains || !mapp(domains)) return 0;
        return copy(domains["primary"]);
}

void create()
{
    switch(sizeof(LEVEL_LIST))
    {
      case 0:
	player="";
	wizard="";
	break;
      case 1:
	player=wizard=LEVEL_LIST[0];
	break;
      default:
	player=LEVEL_LIST[0];
	wizard=LEVEL_LIST[1];
    }
}

/* EOF */