/* /adm/simul_efun/log_file.c
* from Nightmare Mudlib 3.2
* a simul_efun for logging to the log dir
* created by Descartes of Borg 940121
*/
#include <dirs.h>
#include <objects.h>
#include <commands.h>
#include <config.h>
#include <privs.h>
void log_file(string fl, string msg) {
if(!stringp(fl)) error("Bad argument 1 to log_file().\n");
if(!stringp(msg)) msg = identify(msg);
msg = timestamp()+" "+msg;
if(msg[<1..] != "\n") msg += "\n";
if(strsrch(fl, "..") != -1) error("Illegal file reference.\n");
if(userp(previous_object(0)) || previous_object(0) == master())
fl = DIR_LOGS+"/secure/"+fl;
else if(member_array(PRIV_SECURE,explode(query_privs(previous_object()),":"))
!= -1) fl = DIR_LOGS+"/"+fl;
else {
switch(base_name(previous_object(0))) {
case CMD_CALL:
fl = DIR_LOGS+"/"+fl;
break;
default:
fl = DIR_LOGS+"/etc/"+fl;
}
}
if(this_object()->unguarded((: file_size, fl :)) > MAX_LOG_SIZE)
this_object()->unguarded((: rename, fl, fl+".old" :));
this_object()->unguarded((: write_file, fl, msg :));
}