/* -*- LPC -*- */
int valid_snoop(object snooper, object snoopee, object pobj) {
string verb;
verb = this_player()->query_current_verb();
if (snooper == snoopee) {
tell_object(snooper, "You can't snoop yourself.\n");
return 0;
}
if (snoopee && query_snoop(snoopee)) {
tell_object(snooper,
snoopee->query_cap_name()+" is already being snooped.\n");
return 0;
}
if (snooper->query_snoopee()) {
user_event( snooper->query_cap_name()+" stops " + verb + "ing "+
snooper->query_snoopee()->query_name(), "snoop");
if (!snooper->query_property("quiet snoop")) {
tell_object((object)snooper->query_snoopee(),
snooper->query_cap_name()+" stops snooping you.\n");
} else {
snooper->remove_property("quiet snoop");
}
snooper->set_snoopee(0);
}
if (!snoopee) {
return 1;
}
if (!creatorp(snooper))
return 0;
if (pobj == this_object()) {
user_event( snooper->query_cap_name()+" starts qsnooping "+
snoopee->query_name(), "snoop");
return 1;
}
if (verb == "qsnoop" && lordp(geteuid(snooper)) &&
!lordp(geteuid(snoopee))) {
tell_object(snooper, "You are quiet snooping "+
snoopee->query_cap_name()+"\n");
snooper->add_property("quiet snoop", 1);
} else {
tell_object(snoopee, "You are being snooped by "+
snooper->query_cap_name()+".\n");
}
unguarded( (: write_file("/secure/log/SNOOP", ctime(time()) + " " +
(string)$(snooper)->query_cap_name() + " " +
$(verb) + "s " + (string)$(snoopee)->query_cap_name() + ".\n") :) );
snooper->set_snoopee(snoopee);
if (verb == "qsnoop") {
tell_object(snooper, "Please share with us the reason why you are " +
"quiet snooping?\n: ");
input_to("snoop_reason");
snoop_list[snooper] = snoopee;
return 0;
}
user_event( snooper->query_cap_name()+" starts " + verb + "ing "+
snoopee->query_name(), "snoop");
return 1;
} /* valid_snoop() */
void snoop_reason(string str) {
object snooper;
snooper = this_player();
if (this_player(1) != this_player()) {
write("Can't force people...\n");
return ;
}
if (!adminp(geteuid(this_player()))) {
write("Not an Admin.\n");
return ;
}
if (!snoop_list[snooper]) {
write("The snoopee has just logged out.\n");
return ;
}
if(!str) {
write("Snoop canceled.\n");
unguarded( (: write_file("/secure/log/SNOOP", " Chickened out.\n") :) );
return;
}
unguarded( (: write_file("/secure/log/SNOOP", " Reason: " + $(str) +
"\n") :) );
if (snoop(snooper, snoop_list[snooper]))
write("Snoop suceeded,\n");
else
write("Snoop failed.\n");
} /* snoop_reason() */