/* -*- LPC -*- */
/*
* $Locker: $
* $Id: site.c,v 1.9 2001/06/01 20:58:28 ceres Exp $
*/
#include <parser.h>
#include <access.h>
inherit "/cmds/base";
/*
* This will ban a site
*/
mixed cmd(string address, 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 "authnew":
level = "4";
break;
case "normal":
level = "1";
break;
}
// the .* is nolonger needed in addresses (or names for that matter).
address = replace(address, ".*", "");
if (!"/secure/bastards"->change_access(address, to_int(level), reason)) {
write("Error changing permissions.\n");
return 0;
}
write("Access permisions changed.\n");
printf("Site %s set to %s for %s\n", address, PERM_NAMES[to_int(level)],
reason);
return 1;
} /* cmd() */
int access(string filter) {
string addr, ret;
mapping list;
int found;
seteuid("Root");
if (this_player() != this_player(1))
return 0;
list = "/secure/bastards"->query_all_access();
ret = "";
foreach(addr in keys(list)) {
if(!filter || filter == "" || strsrch(addr, filter) != -1) {
found = 1;
ret += sprintf("%-20s %-18s %-=39s\n", addr,
PERM_NAMES[list[addr][ACCESS_LEVEL]],
list[addr][ACCESS_REASON]);
}
}
if (!found)
return notify_fail("No access control defined.\n");
write("Current access list:\n");
this_player()->more_string(ret, "site access");
return 1;
}
int multi(int allow, string address) {
if("/secure/bastards"->change_multi(address, allow, 0)) {
if(allow)
write("Site " + address + " has been permitted for multiplayers.\n");
else
write("Site " + address + " has been blocked for multiplayers.\n");
} else
write("Error multiplayer settings for site " + address + ".\n");
return 1;
}
int list_multi(string filter) {
string addr, ret;
mapping list;
int found;
list = "/secure/bastards"->query_all_multi();
ret = "";
foreach(addr in keys(list)) {
if(!filter || filter == "" || strsrch(addr, filter) != -1) {
found = 1;
ret += sprintf("%-30s\n", addr);
}
}
if (!found)
return notify_fail("No access control defined.\n");
write("Current multuser site list:\n");
this_player()->more_string(ret, "site access");
return 1;
}
int help() {
return notify_fail(
"Syntax: site access\n"+
" site ban <ip number|site name> <level> <reason>\n"+
" <level> := normal normal access,\n"+
" nonew no new players, \n"+
" authnew authorised new players\n"+
" noaccess no access.\n");
}
mixed *query_patterns() {
return ({ "ban <word'address'> <word'level'> <string'reason'>",
(: cmd($4[0], $4[1], implode($4[2..], "")) :),
"allow multi <word'address'>",
(: multi(1, $4[0]) :),
"disallow multi <word'address'>",
(: multi(0, $4[0]) :),
"list multi", (: list_multi("") :),
"list multi <word'address'>", (: list_multi($4[0]) :),
"access <word'address'>", (: access($4[0]) :),
"access", (: access("") :),
"", (: help() :),
"help", (: help() :)
});
} /* query_patterns() */