/* Do not remove the headers from this file! see /USAGE for more info. */
/*
** group_d.c
**
** Daemon for handling system groups.
**
** 941218, Deathblade: created.
** 950813, Deathblade: removed method of specifying admins here
*/
#include <mudlib.h>
#include <security.h>
inherit M_DAEMON_DATA;
/*
** The priv needed to alter the groups. Technically, somebody with
** Mudlib:daemons could do it (by editing this file), but we'll make
** it a bit tougher for people who want to try to do that.
*/
#define PRIV_NEEDED "Mudlib:daemons"
private mapping group_map = ([ ]);
nomask void add_group(string group)
{
if ( !check_privilege(PRIV_NEEDED) )
error("illegal attempt to add a system group\n");
if ( !group_map[group] )
{
group_map[group] = ({ });
save_me();
}
}
nomask void remove_group(string group)
{
if ( !check_privilege(PRIV_NEEDED) )
error("illegal attempt to remove a system group\n");
map_delete(group_map, group);
save_me();
}
nomask void add_group_member(string group, string new_member)
{
if ( !check_privilege(PRIV_NEEDED) )
error("illegal attempt to add a member to a system group\n");
if ( !group_map[group] )
error("group does not exist\n");
if ( member_array(new_member, group_map[group]) == -1 )
{
group_map[group] += ({ new_member });
save_me();
}
}
nomask void remove_group_member(string group, string new_member)
{
if ( !check_privilege(PRIV_NEEDED) )
error("illegal attempt to remove a member from a system group\n");
if ( group_map[group] )
{
group_map[group] -= ({ new_member });
save_me();
}
}
nomask int member_group(string name, string group)
{
return group_map[group] && member_array(name, group_map[group]) != -1;
}
nomask mixed get_group(string group)
{
mixed res;
if ( !stringp(group) )
return 0;
if ( group[0] == '(' && group[<1] == ')' )
group = group[1..<2];
else
return group;
group = lower_case( group );
if ( !(res = group_map[group]) )
{
if ( this_body() && (res = this_body()->query_perm("groups")) )
{
return res[group] ? copy(res[group]) : group;
}
}
return res ? copy(res) : group;
}
nomask string * process_list(string * name_list)
{
return decompose(map_array(name_list, (: get_group :)));
}
nomask mixed get_group_data()
{
return copy(group_map);
}