#include <parser.h> #include <access.h> inherit COMMAND_BASE; int print_access(string bit, mapping bing, int depth, int cols); /* * 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 (!BASTARDS_H->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() { mixed bing; seteuid("Root"); if (this_player() != this_player(1)) return 0; bing = (mixed)BASTARDS_H->query_all_access(); if (!m_sizeof(bing)) { notify_fail("No access control defined.\n"); return 0; } write("Current access list:\n"); print_access("", bing, 0, (int)this_player()->query_cols()); return 1; } int print_access(string bit, mapping bing, int depth, int cols) { mixed *bits; int i; if (this_player() != this_player(1)) return 0; bits = m_indices(bing); if (depth == 4) { /* Do the ident printing... */ for (i=0;i<sizeof(bits);i++) { printf("%s@%s set to %s [%s]\n", bits[i], bit, PERM_NAMES[bing[bits[i]][0]], BASTARDS_H->query_reason(explode(bit, "."), bits[i])); } return 1; } for (i=0;i<sizeof(bits);i++) print_access(bit+"."+bits[i], bing[bits[i]], depth+1, cols); return 1; } /* 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", (: access() :), "", (: help() :), "help", (: help() :) }); } /* query_patterns() */