/* Do not remove the headers from this file! see /USAGE for more info. */
inherit "/obj/admtool/internal/base.c";
nomask string module_name() {
return "domain";
}
nomask string module_key() {
return "d";
}
private nomask void list_domains()
{
string * domains;
domains = SECURE_D->query_domains();
if ( !sizeof(domains) )
{
write("There are no domains.\n");
}
else
{
printf("The following domains exist:\n%-#78s\n",
implode(sort_array(domains, 1), "\n") + "\n");
}
}
private nomask void show_domain_info(string domain)
{
string * members;
string * lords;
members = SECURE_D->query_domain_members(domain);
if ( !members )
{
printf("There is no domain named '%s'\n", domain);
}
else
{
lords = SECURE_D->query_domain_lords(domain) || ({ });
members -= lords;
printf("Domain %s:\n", domain);
switch ( sizeof(lords) )
{
case 0:
write("Lords: (none)\n");
break;
case 1:
printf("Lord: %s\n", lords[0]);
break;
default:
printf("Lords: %s\n", implode(lords, ", "));
break;
}
switch ( sizeof(members) )
{
case 0:
write("Members: (none)\n");
break;
case 1:
printf("Member: %s\n", members[0]);
break;
default:
printf("Members: %s\n", implode(members, ", "));
break;
}
}
}
private nomask void create_domain(int no_domain_dir, string domain)
{
domain = lower_case(domain);
/* this checks for admins... */
if ( write_error(SECURE_D->create_domain(domain)) )
return;
write("Domain created.\n");
if ( !no_domain_dir )
{
string dirname = "/domains/" + domain;
mkdir(dirname);
printf("Created %s\n", dirname);
printf("Setting protection level of %s\n", dirname);
write_error(SECURE_D->set_protection(dirname,
1,
capitalize(domain + ":")));
}
}
private nomask void delete_domain(string domain)
{
SECURE_D->set_protection("/domains/" + domain, 1, -1);
/* this checks for admins... */
if ( write_error(SECURE_D->delete_domain(domain)) )
return;
write("Domain deleted.\n");
}
private nomask void show_users_domains(string user)
{
string * domains;
domains = SECURE_D->query_domains(user) || ({ });
if ( !sizeof(domains) )
printf("Wizard %s doesn't belong to any domain.\n", user);
else
printf("Wizard %s belongs to %s.\n", user,
implode(sort_array(domains, 1), ", "));
}
private nomask void add_user_to_domain(int lord, string user, string domain)
{
/* this checks for lord privs... */
if ( write_error(SECURE_D->add_domain_member(domain, user, lord)) )
return;
printf("Added %s %s %s.\n", user, lord ? "as a lord of" : "to", domain);
}
private nomask void remove_user_from_domain(string user, string domain)
{
/* this checks for lord privs... */
if ( write_error(SECURE_D->remove_domain_member(domain, user)) )
return;
printf("Removed %s from %s.\n", user, domain);
}
nomask class command_info array module_commands() {
return ({
new(class command_info,
key : "l",
desc : "list domains",
action : (: list_domains :)),
new(class command_info,
key : "s",
desc : "show domain information",
proto : "[domain]",
args : ({ "Show information on which domain? " }),
action : (: show_domain_info :)),
new(class command_info),
new(class command_info,
key : "c",
desc : "create a domain",
proto : "[domain]",
who : "[admin]",
args : ({ "Name for the new domain? " }),
action : (: create_domain, 0 :)),
new(class command_info,
key : "C",
desc : "create abstract domain (no dir)",
proto : "[domain]",
who : "[admin]",
args : ({ "Name for the new domain? " }),
action : (: create_domain, 1 :)),
new(class command_info,
key : "d",
desc : "delete a domain",
proto : "[domain]",
who : "[admin]",
args : ({ "Delete which domain? " }),
action : (: delete_domain :)),
new(class command_info),
new(class command_info,
key : "u",
desc : "show user's domains",
proto : "[user]",
args : ({ "Show information for which user? " }),
action : (: show_users_domains :)),
new(class command_info,
key : "a",
desc : "add user to a domain",
who : "[lord]",
proto : "[user] [domain]",
args : ({ "Add which user? ", "Add '%s' to which domain? " }),
action : (: add_user_to_domain, 0 :)),
new(class command_info,
key : "A",
desc : "add user as a lord of the domain",
who : "[lord]",
proto : "[user] [domain]",
args : ({ "Add which user as a lord? ", "Add '%s' to which domain? " }),
action : (: add_user_to_domain, 1 :)),
new(class command_info,
key : "r",
desc : "remove a user from a domain",
who : "[lord]",
proto : "[user] [domain]",
args : ({ "Remove which user? ", "Remove '%s' from which domain? " }),
action : (: remove_user_from_domain :) ),
});
}