/* domaintool.c * The Domain Control Tool * for the admtool *Shaydz 3 Apr '00 */ #include <colors.h> inherit COMMAND_BASE; private mapping return_mapping = ([ ]); private string main_menu_template = @END ------------------------------------------------------------------------- %s ------------------------------------------------------------------------- %sCommand Status%s [1] Create new Domain %s [2] Delete Domain %s [3] List Domains %s [4] Add Leader to Domain %s [5] Add Senior to Domain %s [6] Add Member to Domain %s [7] Remove Leader from Domain %s [8] Remove Senior from Domain %s [9] Remove Member from Domain %s END; private string main_prompt = "Enter your command [1-9], or [Q] to quit: "; private string main_prompt2 = "Enter your command [1-9], [B] to go back, or [Q] to quit: "; // Function prototypes mixed cmd(string arg); private void get_command(string str); private void create_domain(); private void create_domain2(string str); private void create_domain3(string str, string domain); private void delete_domain(); private void delete_domain2(string str); private void delete_domain3(string str, string domain); private void list_domains(); private void add_leader(); private void add_leader2(string str); private void add_leader3(string str, string domain); private void add_member(); private void add_member2(string str); private void add_member3(string str, string domain); private void remove_leader(); private void remove_leader2(string str); private void remove_leader3(string str, string domain); private void remove_member(); private void remove_member2(string str); private void remove_member3(string str, string domain); private void add_senior(); private void add_senior2(string str); private void add_senior3(string str, string domain); private void remove_senior(); private void remove_senior2(string str); private void remove_senior3(string str, string domain); private void display_menu() { string title, s1, s2, s3, s4, s5, s6, s7, s8, s9; title = sprintf("%s%|72s%s", YELLOW, mud_name()+" Domains Control Tool v1.5", RESET ); s1 = s2 = s3 = s4 = s5 = s6 = s7 = s8 = s9 = RED+"Unavailable"+RESET; if( DOMAIN_H->query_leader( TP->query_name() ) ) { s5 = s6 = s8 = s9 = MAGENTA+"Limited"+RESET; s3 = GREEN+"Available"+RESET; } if( adminp(TP) ) s1 = s2 = s3 = s4 = s5 = s6 = s7 = s8 = s9 = GREEN+"Available"+RESET; tell_object( TP, sprintf( main_menu_template, title, BOLD, RESET, s1, s2, s3, s4, s5, s6, s7, s8, s9 ) ); } /* display_menu() */ private void do_prompt() { tell_object( TP, undefinedp(return_mapping[TP]) ? main_prompt : main_prompt2 ); input_to( (: get_command :) ); } /* do_prompt() */ private void create_domain() { if( !adminp(TP) ) { tell_object( TP, RED+"\nYou are not authorised to use this option.\n"+ RESET ); return do_prompt(); } tell_object( TP, "Enter the name of the NEW Domain ('q' to abort): "); input_to( (: create_domain2 :) ); } /* create_domain() */ private void create_domain2( string str ) { if( !str || str == "") return do_prompt(); if( DOMAIN_H->query_domain( str ) ) { tell_object( TP, "The "+CAP(str)+" domain already exists.\n"); return do_prompt(); } if( ( str = lower_case(str) ) == "q") return do_prompt(); tell_object( TP, "Enter the name of the Domain leader or press return " "to use yourself ('q' to abort): "); input_to( (: create_domain3( $1, $(str)) :) ); } /* create_domain2() */ private void create_domain3( string str, string domain ) { string err, old; if( !str || str == "") str = TP->query_name(); if( ( str = lower_case(str) ) == "q") return do_prompt(); old = geteuid(TO); seteuid(geteuid(TP)); if( err = DOMAIN_H->add_domain(domain) ) { tell_object( TP, RED+"\n"+err+"\n"+RESET ); seteuid(old); return do_prompt(); } if( err = DOMAIN_H->add_member( domain, str ) ) { tell_object( TP, RED+"\n"+err+"\n"+RESET ); seteuid(old); return do_prompt(); } if( err = DOMAIN_H->add_leader( domain, str ) ) { tell_object( TP, RED+"\n"+err+"\n"+RESET ); seteuid(old); return do_prompt(); } seteuid(old); log_file("PROMOTIONS", "%s - %s created a new domain %s with %s as " "lord.\n", ctime(time()), CAP(TP->query_name()), CAP(domain), CAP(str) ); tell_object( TP, GREEN+"\nCreated domain "+CAP(domain)+" with "+ CAP(str)+" as its leader.\n\n"+RESET ); do_prompt(); } /* create_domain3() */ private void delete_domain() { if( !adminp(TP) ) { tell_object( TP, RED+"\nYou are not authorised to use this option.\n"+ RESET ); return do_prompt(); } tell_object( TP, "Enter the name of the domain to DELETE: "); input_to( (: delete_domain2 :) ); } /* delete_domain() */ private void delete_domain2( string str ) { if( !str || str == "") return do_prompt(); if( !DOMAIN_H->query_domain( str = lower_case(str) ) ) { tell_object( TP, RED+"The "+CAP(str)+" domain doesn't exist.\n"+ RESET ); return do_prompt(); } tell_object( TP, "Are you sure you wish to delete the "+ CAP(str)+" domain? : "); input_to( (: delete_domain3( $1, $(str)) :) ); } /* delete_domain2() */ private void delete_domain3( string str, string domain ) { string err, old; if( !str || str == "") return do_prompt(); str = lower_case(str); if( str != "y" && str != "yes" ) { tell_object( TP, "\nThe "+CAP(domain)+" domain has NOT been " "deleted.\n"); return do_prompt(); } old = geteuid(TO); seteuid(geteuid(TP)); if( err = DOMAIN_H->remove_domain(domain) ) { tell_object( TP, RED+"\n"+err+"\n"+RESET ); seteuid(old); return do_prompt(); } seteuid(old); log_file("PROMOTIONS", "%s - %s removed domain %s.\n", ctime(time()), CAP(TP->query_name()), CAP(domain) ); tell_object( TP, GREEN+"\nRemoved domain "+CAP(domain)+".\n"+RESET ); do_prompt(); } /* delete_domain3() */ private void list_domains() { tell_object( TP, create_table( ({"Domains", "domain"}), DOMAIN_H->query_domains(), 1 ) ); do_prompt(); } /* list_domains() */ private void add_leader() { if( !adminp(TP) ) { tell_object( TP, RED+"\nYou are not authorised to use this option.\n"+ RESET ); return do_prompt(); } tell_object( TP, "Enter the name of the Domain to add a leader to: "); input_to( (: add_leader2 :) ); } /* add_leader() */ private void add_leader2( string str ) { if( !str || str == "") return do_prompt(); if( !DOMAIN_H->query_domain( str = lower_case(str) ) ) { tell_object( TP, RED+"The "+CAP(str)+" domain doesn't exist.\n"+ RESET ); return do_prompt(); } tell_object( TP, "Enter the name of the Domain leader to add or press " "return to use yourself: "); input_to( (: add_leader3( $1, $(str)) :) ); } /* add_leader2() */ private void add_leader3( string str, string domain ) { string err, old; if( !str || str == "") str = TP->query_name(); if( DOMAIN_H->query_leader( domain, str = lower_case(str) ) ) { tell_object( TP, RED+CAP(str)+" is already a leader of "+ CAP(domain)+".\n"+RESET ); return do_prompt(); } if( !DOMAIN_H->query_member( domain, str ) ) { if( err = DOMAIN_H->add_member( domain, str ) ) { tell_object( TP, RED+"\n"+err+"\n"+RESET ); return do_prompt(); } } old = geteuid(TO); seteuid(geteuid(TP)); if( err = DOMAIN_H->add_leader( domain, str ) ) { tell_object( TP, RED+"\n"+err+"\n"+RESET ); seteuid(old); return do_prompt(); } if( DOMAIN_H->query_senior( domain, str ) ) DOMAIN_H->remove_senior( domain, str ); seteuid(old); log_file("PROMOTIONS", "%s - %s added %s as a lord of %s.\n", ctime(time()), CAP(TP->query_name()), CAP(str), CAP(domain) ); tell_object( TP, GREEN+"\nAdded "+CAP(str)+" as a leader of the "+ CAP(domain)+" domain.\n\n"+RESET ); do_prompt(); } /* add_leader3() */ private void add_senior() { tell_object( TP, "Enter the name of the Domain to add a senior to: "); input_to( (: add_senior2 :) ); } /* add_senior() */ private void add_senior2( string str ) { if( !str || str == "") return do_prompt(); if( !DOMAIN_H->query_domain( str = lower_case(str) ) ) { tell_object( TP, RED+"The "+CAP(str)+" domain doesn't exist.\n"+ RESET ); return do_prompt(); } if( !adminp(TP) && !DOMAIN_H->query_leader( str, TP->query_name() ) ) { tell_object( TP, RED+"\nYou are not authorised to do that.\n"+RESET ); return do_prompt(); } tell_object( TP, "Enter the name of the senior to add or press return to " "use yourself: "); input_to( (: add_senior3( $1, $(str)) :) ); } /* add_member2() */ private void add_senior3( string str, string domain ) { string err, old; if( !str || str == "") str = TP->query_name(); if( DOMAIN_H->query_senior( domain, str = lower_case(str) ) ) { tell_object( TP, RED+CAP(str)+" is already a senior of "+ CAP(domain)+".\n"+RESET ); return do_prompt(); } if( DOMAIN_H->query_leader( domain, str ) ) { tell_object( TP, RED+CAP(str)+" is already a leader of "+ CAP(domain)+".\n"+RESET ); return do_prompt(); } old = geteuid(TO); seteuid(geteuid(TP)); if( err = DOMAIN_H->add_senior( domain, str ) ) { tell_object( TP, RED+"\n"+err+"\n"+RESET ); seteuid(old); return do_prompt(); } seteuid(old); log_file("PROMOTIONS", "%s - %s added %s as a senior of %s.\n", ctime(time()), CAP(TP->query_name()), CAP(str),CAP(domain) ); tell_object( TP, GREEN+"\nAdded "+CAP(str)+" as a senior of "+ CAP(domain)+".\n\n"+RESET ); do_prompt(); } /* add_senior3() */ private void add_member() { tell_object( TP, "Enter the name of the Domain to add a member to: "); input_to( (: add_member2 :) ); } /* add_member() */ private void add_member2( string str ) { if( !str || str == "") return do_prompt(); if( !DOMAIN_H->query_domain( str = lower_case(str) ) ) { tell_object( TP, RED+"The "+CAP(str)+" domain doesn't exist.\n"+ RESET ); return do_prompt(); } if( !adminp(TP) && !DOMAIN_H->query_leader( str, TP->query_name() ) ) { tell_object( TP, RED+"\nYou are not authorised to do that.\n"+ RESET ); return do_prompt(); } tell_object( TP, "Enter the name of the member to add or press return to " "use yourself: "); input_to( (: add_member3( $1, $(str)) :) ); } /* add_member2() */ private void add_member3( string str, string domain ) { string err, old; if( !str || str == "") str = TP->query_name(); if( DOMAIN_H->query_member( domain, str = lower_case(str) ) ) { tell_object( TP, RED+CAP(str)+" is already a member of "+ CAP(domain)+".\n"+RESET ); return do_prompt(); } old = geteuid(TO); seteuid(geteuid(TP)); if( err = DOMAIN_H->add_member( domain, str ) ) { tell_object( TP, RED+"\n"+err+"\n"+RESET ); seteuid(old); return do_prompt(); } seteuid(old); tell_object( TP, GREEN+"\nAdded "+CAP(str)+" as a member of "+ CAP(domain)+".\n\n"+RESET ); do_prompt(); } /* add_member3() */ private void remove_leader() { if( !adminp(TP) ) { tell_object( TP, RED+"\nYou are not authorised to use this option.\n"+ RESET ); return do_prompt(); } tell_object( TP, "Enter the name of the Domain to remove a Leader " "from: "); input_to( (: remove_leader2 :) ); } /* remove_leader() */ private void remove_leader2( string str ) { if( !str || str == "") return do_prompt(); if( !DOMAIN_H->query_domain( str = lower_case(str) ) ) { tell_object( TP, RED+"The "+CAP(str)+" domain doesn't exist.\n"+ RESET ); return do_prompt(); } tell_object( TP, "Enter the name of the Domain leader to remove or press " "return to use yourself: "); input_to( (: remove_leader3( $1, $(str)) :) ); } /* remove_leader2() */ private void remove_leader3( string str, string domain ) { string err, old; if( !str || str == "") str = TP->query_name(); if( !DOMAIN_H->query_leader( domain, str = lower_case(str) ) ) { tell_object( TP, RED+CAP(str)+" isn't a Leader of "+ CAP(domain)+".\n"+RESET ); return do_prompt(); } old = geteuid(TO); seteuid(geteuid(TP)); if( err = DOMAIN_H->remove_leader( domain, str ) ) { tell_object( TP, RED+"\n"+err+"\n"+RESET ); seteuid(old); return do_prompt(); } seteuid(old); log_file("PROMOTIONS", "%s - %s removed %s as a lord of %s.\n", ctime(time()), CAP(TP->query_name()), CAP(str), CAP(domain) ); tell_object( TP, GREEN+"\nRemoved "+CAP(str)+" as a leader from "+ CAP(domain)+".\n"+RESET ); do_prompt(); } /* remove_leader3() */ private void remove_senior() { tell_object( TP, "Enter the name of the Domain to remove senior from: "); input_to( (: remove_senior2 :) ); } /* remove_member() */ private void remove_senior2( string str ) { if( !str || str == "") return do_prompt(); if( !DOMAIN_H->query_domain( str = lower_case(str) ) ) { tell_object( TP, RED+"The domain "+CAP(str)+" doesn't exist.\n"+ RESET ); return do_prompt(); } if( !adminp(TP) && !DOMAIN_H->query_leader( str, TP->query_name() ) ) { tell_object( TP, RED+"\nYou are not authorised to do that.\n"+ RESET ); return do_prompt(); } tell_object( TP, "Enter the name of the Domain senior to remove or press " "return to use yourself: "); input_to( (: remove_senior3( $1, $(str)) :) ); } /* remove_senior2() */ private void remove_senior3( string str, string domain ) { string err, old; if( !str || str == "") str = TP->query_name(); if( !DOMAIN_H->query_senior( domain, str = lower_case(str) ) ) { tell_object( TP, RED+CAP(str)+" isn't a senior of "+CAP(domain)+".\n"+ RESET ); return do_prompt(); } if( DOMAIN_H->query_leader( domain, str ) ) { tell_object( TP, RED+CAP(str)+" is a Leader of "+ CAP(domain)+", use the remove leader option.\n"+RESET ); return do_prompt(); } old = geteuid(TO); seteuid(geteuid(TP)); if( err = DOMAIN_H->remove_senior( domain, str ) ) { tell_object( TP, RED+"\n"+err+"\n"+RESET ); seteuid(old); return do_prompt(); } seteuid(old); log_file("PROMOTIONS", "%s - %s removed %s as a senior of %s.\n", ctime(time()), CAP(TP->query_name()), CAP(str),CAP(domain) ); tell_object( TP, GREEN+"\nRemoved "+CAP(str)+" as senior of "+ CAP(domain)+".\n\n"+RESET ); do_prompt(); } /* remove_senior3() */ private void remove_member() { tell_object( TP, "Enter the name of the Domain to remove member from: "); input_to( (: remove_member2 :) ); } /* remove_member() */ private void remove_member2( string str ) { if( !str || str == "") return do_prompt(); if( !DOMAIN_H->query_domain( str = lower_case(str) ) ) { tell_object( TP, RED+"The domain "+CAP(str)+" doesn't exist.\n"+ RESET ); return do_prompt(); } if( !adminp(TP) && !DOMAIN_H->query_leader( str, TP->query_name() ) ) { tell_object( TP, RED+"\nYou are not authorised to do that.\n"+ RESET ); return do_prompt(); } tell_object( TP, "Enter the name of the Domain member to remove or press " "return to use yourself: "); input_to( (: remove_member3( $1, $(str)) :) ); } /* remove_member2() */ private void remove_member3( string str, string domain ) { string err, old; if( !str || str == "") str = TP->query_name(); if( DOMAIN_H->query_leader( domain, str = lower_case(str) ) ) { tell_object( TP, RED+CAP(str)+" is a Leader of "+CAP(domain)+", use " "the remove leader option first.\n"+RESET ); return do_prompt(); } if( !DOMAIN_H->query_member( domain, str ) ) { tell_object( TP, RED+CAP(str)+" isn't a member of "+ CAP(domain)+".\n"+RESET ); return do_prompt(); } old = geteuid(TO); seteuid(geteuid(TP)); if( err = DOMAIN_H->remove_member( domain, str ) ) { tell_object( TP, RED+"\n"+err+"\n"+RESET ); seteuid(old); return do_prompt(); } seteuid(old); tell_object( TP, GREEN+"\nRemoved " + CAP(str) + " as member of "+ CAP(domain)+".\n\n"+RESET ); do_prompt(); } /* remove_member3() */ private void get_command( string str ) { if( !str ) { display_menu(); return do_prompt(); } switch( str ) { case "1": create_domain(); break; case "2": delete_domain(); break; case "3": list_domains(); break; case "4": add_leader(); break; case "5": add_senior(); break; case "6": add_member(); break; case "7": remove_leader(); break; case "8": remove_senior(); break; case "9": remove_member(); break; case "B": case "b": if( !return_mapping[TP] ) { display_menu(); return do_prompt(); } return_mapping[TP]->cmd(""); map_delete( return_mapping, TP ); break; case "Q": case "q": map_delete( return_mapping, TP ); break; default: display_menu(); return do_prompt(); } } /* get_command() */ int cmd( string arg ) { if( file_name(PO) == "/secure/cmds/creator/admtools") return_mapping[TP] = PO; display_menu(); do_prompt(); return 1; } /* cmd() */