/* -*- LPC -*- */ /* * $Locker: $ * $Id: site.c,v 1.8 2000/09/23 05:50:26 pinkfish Exp $ */ #include <parser.h> #include <access.h> inherit "/cmds/base"; private string print_access(string bit, mapping bing, int depth, int cols, string filter); /* * This will ban a site */ mixed cmd(string ip, string ident, string level, string reason) { seteuid("Root"); if (this_player() != this_player(1)) return 0; switch(level) { case "nonew": level = "2"; break; case "noacccess": level = "3"; break; case "normal": level = "1"; break; } if (!"/secure/bastards.old"->change_access(explode(ip, "."), ident, to_int(level), reason)) { write("Error changing permissions.\n"); return 0; } write("Access permisions changed.\n"); printf("User %s at site %s set to %s for %s\n", ident, ip, PERM_NAMES[to_int(level)], reason); return 1; } /* cmd() */ int access(string filter) { mixed bing; seteuid("Root"); if (this_player() != this_player(1)) return 0; bing = (mixed)"/secure/bastards.old"->query_all_access(); if (!m_sizeof(bing)) { notify_fail("No access control defined.\n"); return 0; } write("Current access list:\n"); bing = print_access("", bing, 0, (int)this_player()->query_cols(), filter); this_player()->more_string(bing, "site access"); return 1; } private string print_access(string bit, mapping bing, int depth, int cols, string filter) { mixed *bits; int i; string ret; string colour; ret = "" ; if (this_player() != this_player(1)) { return 0; } bits = m_indices(bing); if (depth == 4) { if(!filter || filter == "" || strsrch(bit, filter) != -1 || strsrch(bits[i], filter) != -1) { /* Do the ident printing... */ for (i=0;i<sizeof(bits);i++) { switch (bing[bits[i]][0]) { case NO_NEW: colour = "%^CYAN%^"; break; case NO_ACCESS: colour = "%^YELLOW%^"; break; default : colour = ""; break; } write(replace(bit, ".*", "")[1..] + "\n"); "/secure/bastards"->change_access(replace(bit, ".*", "")[1..], bing[bits[i]][0], "/secure/bastards.old"->query_reason(explode(bit, "."), bits[i])); } } return ""; } for (i=0;i<sizeof(bits);i++) { ret += print_access(bit+"."+bits[i], bing[bits[i]], depth+1, cols, filter); } return ret; } /* print_access() */ int help() { return notify_fail( "Syntax: site access\n"+ " site ban <ip number> <ident> <level> <reason>\n"+ " <level> := normal [1] normal access,\n"+ " nonew [2] no new players, \n"+ " noaccess [3] no access.\n"); } mixed *query_patterns() { return ({ "ban <word'address'> <word'ident'> <word'level'> " "<string'reason'>", (: cmd($4[0], $4[1], $4[2], implode($4[3..], "")) :), "access <word'address'>", (: access($4[0]) :), "access", (: access("") :), "", (: help() :), "help", (: help() :) }); } /* query_patterns() */