// File : /cmds/adm/_banish.c // Creator : Buddha@TMI // Updated : Mobydick (5/26/93) Added rudimentary argument checking. // Karathan (7/13/93) Rewritten for unified banish code. // Karathan (8/12/93) Updated with banish daemon. // The command to banish or unbanish a site or name. Just an interface to the // banish daemon. Command from Buddha, daemon from Dainia@Dreamshadow. #include <mudlib.h> #include <daemons.h> inherit DAEMON; int fail() { notify_fail("Usage: banish <site [[-] site ip]|name [[-] name]>\n"); return 0; } int cmd_banish(string str) { int i; string *words; mixed *sites, *names; if (!str || !stringp(str) || str == "") return fail(); replace_string(str, " ", " ", 0); if (str == "") return fail(); words = explode(lower_case(str), " "); if (sizeof(words) < 1 || sizeof(words) > 3 || (sizeof(words) == 3 && words[1] != "-")) return fail(); if (words[0] == "site" || words[0] == "sites") { if (sizeof(words) == 1) { sites = BANISH_D->query_banished_sites(); if (!sites || sites == ({ })) write("There are no banished sites.\n"); else { if (sizeof(sites) == 1) str = "There is one banished site: " + sites[0]; else str = "There are " + sizeof(sites) + " banished sites: " + implode(sites[0..<2], ", ") + " and " + sites[<1]; write(wrap(str + ".\n")); } return 1; } if (!adminp(geteuid(previous_object()))) { notify_fail("You are not permitted to use the banish command.\n"); return 0; } if (sizeof(words) == 2) { i = BANISH_D->banish_site(words[1]); if (!i) write("Banish site: Command failed.\n"); else if (i < 0) write("Site '" + words[1] + "' is already in the banish list.\n"); else write("Site '" + words[1] + "' has been added to the banish list.\n"); } else { i = BANISH_D->remove_banished_site(words[2]); if (!i) write("Banish site (removal): Command failed.\n"); else if (i < 0) write("Site '" + words[2] + "' is not in the banish list.\n"); else write("Site '" + words[2] + "' has been removed from the banish list.\n"); } return 1; } if (words[0] == "name" || words[0] == "names") { if (sizeof(words) == 1) { names = BANISH_D->query_banished_names(); if (!names || names == ({ })) write("There are no banished names.\n"); else { if (sizeof(names) == 1) str = "There is one banished name: " + names[0]; else str = "There are " + sizeof(names) + " banished names: " + implode(names[0..<2], ", ") + " and " + names[<1]; write(wrap(str + ".\n")); } return 1; } if (!adminp(geteuid(previous_object()))) { notify_fail("You are not permitted to use the banish command.\n"); return 0; } if (sizeof(words) == 2) { i = BANISH_D->banish_name(words[1]); if (!i) write("Banish name: Command failed.\n"); else if (i < 0) write("Name '" + words[1] + "' is already in the banish list.\n"); else write("Name '" + words[1] + "' has been added to the banish list.\n"); } else { i = BANISH_D->remove_banished_name(words[2]); if (!i) write("Banish name (removal): Command failed.\n"); else if (i < 0) write("Name '" + words[2] + "' is not in the banish list.\n"); else write("Name '" + words[2] + "' has been removed from the banish list.\n"); } return 1; } return fail(); } string help() { return( "Usage: banish <site [[-] site ip]|name [[-] name]>\n" "The <site> string may be either an IP number of the form 123.123.123.123 or\n" "it may be a partial, such as 123.123, which banishes all sites whose root\n" "IP numbers starts with 123.123. Guest logins are also site-checked. The\n" "<name> string may include any regexp wildcards (eg, '.*fuck.*'). Preceding\n" "the site or name with a (space separated) '-' character will remove it from\n" "the relevant list. With no name or site ip given, the full list is shown.\n" "NB To banish only \"at\" not \"cat\", \"satan\" & \"atan\", use \"^at$\".\n"+ "\nSee also: nuke\n"); }