Commit 4e82e903 authored by Andrew Price's avatar Andrew Price

Decouple mwlog() from the client

Should make it simpler to move logging into the server.
parent dd42a192
Pipeline #505 passed with stage
in 7 minutes and 30 seconds
......@@ -10,10 +10,6 @@
#define HOMEPATH "/usr/local/lib/mw"
#endif
#ifndef LOGDIR
#define LOGDIR "/var/log/mw"
#endif
#ifndef STATEDIR
#define STATEDIR "/var/lib/mw"
#endif
......@@ -22,7 +18,6 @@
#define MSGDIR "/run/mw"
#endif
#define LOGFILE LOGDIR"/log.bb"
#define LOGIN_BANNER HOMEPATH"/login.banner"
#define LOCKFILE "/tmp/bb.locked"
#define EDITOR "/usr/bin/vim"
......@@ -41,7 +36,6 @@
#define CMD_TALK_STR "."
#define CMD_SCRIPT_STR ","
#define LOGLINESIZE 2048 /* size of a line printed to log file */
#define MAXTEXTLENGTH 2048 /* text buffer size */
#define MAXPIPELENGTH 4096 /* maximum length of a pipe message */
......
......@@ -18,6 +18,7 @@
#include <signal.h>
#include <util.h>
#include <mwlog.h>
#include "talker_privs.h"
#include "special.h"
#include "incoming.h"
......@@ -189,7 +190,7 @@ void edit_user(const char *args, const char *name)
ipc_send_to_username(usr->name, IPC_STATUS, stats);
show_change(oldstats, statout, "%s has just changed %s's status",
user->record.name, usr->name);
mwlog("CHANGE(STATUS) of %s by %s", usr->name, stats);
mwlog(user, "CHANGE(STATUS) of %s by %s", usr->name, stats);
}
free(oldstats);
}else
......@@ -213,7 +214,7 @@ void edit_user(const char *args, const char *name)
ipc_send_to_username(usr->name, IPC_SPECIAL, stats);
show_change(oldstats, statout, "%s has just changed %s's specials",
user->record.name, usr->name);
mwlog("CHANGE(SPECIAL) of %s by %s", usr->name, stats);
mwlog(user, "CHANGE(SPECIAL) of %s by %s", usr->name, stats);
}
free(oldstats);
}else
......@@ -234,7 +235,7 @@ void edit_user(const char *args, const char *name)
show_change(oldstats, display_cpflags(usr->chatprivs),
"%s has just changed %s's chatprivs",
user->record.name, usr->name);
mwlog("CHANGE(CHATPRIV) of %s by %s", usr->name, stats);
mwlog(user, "CHANGE(CHATPRIV) of %s by %s", usr->name, stats);
}
free(oldstats);
}else
......@@ -269,7 +270,7 @@ void edit_user(const char *args, const char *name)
broadcast(3, "%s has just changed %s's protection from %s to %d/%d.",
user->record.name, usr->name, oldstats, cpl, apl);
mwlog("CHANGE(PROTLEVEL) of %s to %d/%d", usr->name, cpl, apl);
mwlog(user, "CHANGE(PROTLEVEL) of %s to %d/%d", usr->name, cpl, apl);
} else if (*stats)
{
printf(_("Invalid protection level.\n"));
......@@ -295,7 +296,7 @@ void edit_user(const char *args, const char *name)
user->record.name, usr->name);
if (*stats)
{
mwlog("CHANGE(CHATMODE) of %s by %s", usr->name, stats);
mwlog(user, "CHANGE(CHATMODE) of %s by %s", usr->name, stats);
}
}
free(oldstats);
......@@ -314,7 +315,7 @@ void edit_user(const char *args, const char *name)
{
usr->groups = folder_groups(stats, usr->groups);
ipc_send_to_username(usr->name, IPC_GROUPS, stats);
mwlog("CHANGE(GROUPS) of %s by %s", usr->name, stats);
mwlog(user, "CHANGE(GROUPS) of %s by %s", usr->name, stats);
show_fold_groups(usr->groups, stats, false);
show_change(oldstats, stats, "%s has just changed %s's groups",
......@@ -339,7 +340,7 @@ void edit_user(const char *args, const char *name)
strcpy(usr->passwd, pass1);
printf(_("Password changed.\n"));
broadcast(3, "%s has just changed %s's password.", user->record.name, usr->name);
mwlog("CHANGE(PASSWD) of %s", usr->name);
mwlog(user, "CHANGE(PASSWD) of %s", usr->name);
ipc_send_to_username(usr->name, IPC_PASSWD, usr->passwd);
}
}else
......@@ -359,7 +360,7 @@ void edit_user(const char *args, const char *name)
printf(_("New name set.\n"));
broadcast(3, "%s has just changed %s's realname from \"%s\" to \"%s\".",
user->record.name, usr->name, oldreal, realname);
mwlog("CHANGE(REALNAME) of %s to %s", usr->name, realname);
mwlog(user, "CHANGE(REALNAME) of %s to %s", usr->name, realname);
}
free(oldreal);
}else
......@@ -393,7 +394,7 @@ void edit_user(const char *args, const char *name)
printf(_("Room changed to %d.\n"), usr->room);
broadcast(3, "%s has just changed %s's room from %d to %d.",
user->record.name, usr->name, oldroom, newroom);
mwlog("CHANGE(ROOM) of %s to %d", usr->name, newroom);
mwlog(user, "CHANGE(ROOM) of %s to %d", usr->name, newroom);
}
}else
if (stringcmp(args,"username",1))
......@@ -435,7 +436,7 @@ void edit_user(const char *args, const char *name)
printf(_("New name set.\n"));
broadcast(3, "%s has just renamed %s to %s.",
user->record.name, oldname, username);
mwlog("CHANGE(USERNAME) of %s to %s", oldname, username);
mwlog(user, "CHANGE(USERNAME) of %s to %s", oldname, username);
}else
printf(_("Change cancelled.\n"));
}else
......@@ -454,7 +455,7 @@ void edit_user(const char *args, const char *name)
printf(_("New address set.\n"));
broadcast(3, "%s has just changed %s's contact to %s.",
user->record.name, usr->name, contact);
mwlog("CHANGE(CONTACT) of %s to %s", usr->name, contact);
mwlog(user, "CHANGE(CONTACT) of %s to %s", usr->name, contact);
}
}else
if (stringcmp(args,"doing",2))
......@@ -471,14 +472,14 @@ void edit_user(const char *args, const char *name)
printf(_("New status set.\n"));
broadcast(3, "%s has just changed %s's status to %s.",
user->record.name, usr->name, doing);
mwlog("CHANGE(STATUS) of %s to %s", usr->name, doing);
mwlog(user, "CHANGE(STATUS) of %s to %s", usr->name, doing);
} else {
*(usr->doing) = 0;
usr->dowhen = 0;
ipc_send_to_username(usr->name, IPC_DOING, usr->doing);
printf(_("New status set.\n"));
broadcast(3, "%s has just cleared %s's status.", user->record.name, usr->name);
mwlog("CHANGE(STATUS) cleared %s", doing);
mwlog(user, "CHANGE(STATUS) cleared %s", doing);
}
}else
if (stringcmp(args,"timeout",1))
......@@ -511,7 +512,7 @@ void edit_user(const char *args, const char *name)
printf(_("TIMEOUT now disabled.\n"));
broadcast(3, "%s has just disabled %s's timeout.",
user->record.name, usr->name);
mwlog("CHANGE(TIMEOUT) of %s to disabled", usr->name);
mwlog(user, "CHANGE(TIMEOUT) of %s to disabled", usr->name);
}
else
{
......@@ -530,7 +531,7 @@ void edit_user(const char *args, const char *name)
broadcast(3, "%s has just changed %s's timeout to %"PRId32" seconds.",
user->record.name, usr->name, usr->timeout);
printf(_("New timeout set to %"PRId32" seconds.\n"), usr->timeout);
mwlog("CHANGE(TIMEOUT) of %s to %"PRId32" seconds", usr->name, usr->timeout);
mwlog(user, "CHANGE(TIMEOUT) of %s to %"PRId32" seconds", usr->name, usr->timeout);
}
}
}else
......@@ -667,7 +668,7 @@ void edit_folder(const char *args, const char *name)
printf(_("WARNING: folder may get written over by the next folder created.\n"));
}
log[255] = '\0';
mwlog("%s", log);
mwlog(user, "%s", log);
}else
if (stringcmp(args,"groups",2))
{
......@@ -678,7 +679,7 @@ void edit_folder(const char *args, const char *name)
if (*tmp)
{
fold.groups=folder_groups(tmp,fold.groups);
mwlog("FOLDER(GROUPS) of %s by %s", fold.name, tmp);
mwlog(user, "FOLDER(GROUPS) of %s by %s", fold.name, tmp);
show_fold_groups(fold.groups,tmp,true);
printf(_("Groups changed to [%s]\n"),tmp);
}
......@@ -691,7 +692,7 @@ void edit_folder(const char *args, const char *name)
if (*tmp == '\0' || strchr(tmp, '/') != NULL) {
printf("Bad folder name\n");
} else {
mwlog("FOLDER(RENAME) of %s to %s", fold.name, tmp);
mwlog(user, "FOLDER(RENAME) of %s to %s", fold.name, tmp);
if (rename_folder(&fold, tmp) == 0)
printf(_("Name changed to %s\n"), fold.name);
}
......@@ -737,7 +738,7 @@ void edit_folder(const char *args, const char *name)
{
strcpy(fold.topic,tmp);
printf(_("Topic changed to '%s'\n"),fold.topic);
mwlog("FOLDER(TOPIC) of %s to %s", fold.name, tmp);
mwlog(user, "FOLDER(TOPIC) of %s to %s", fold.name, tmp);
}
}else
if (stringcmp(args,"delete",6))
......@@ -756,7 +757,7 @@ void edit_folder(const char *args, const char *name)
fold.name[0]=0;
users_lastread(folnum);
printf(_("Folder deleted.\n"));
mwlog("FOLDER(DELETE) %s", fold.name);
mwlog(user, "FOLDER(DELETE) %s", fold.name);
}else
{
printf(_("Not done.\n"));
......@@ -977,7 +978,7 @@ void edit_contact(void)
strcpy(user->record.contact, contact);
printf(_("New address set.\n"));
broadcast(3, "Contact for %s has just changed to %s.", user->record.name, contact);
mwlog("CHANGE(CONTACT) of %s to %s", user->record.name, contact);
mwlog(user, "CHANGE(CONTACT) of %s to %s", user->record.name, contact);
}
update_user(user);
}
......@@ -8,6 +8,8 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <mwlog.h>
#include "ipc.h"
#include "files.h"
#include "perms.h"
......@@ -17,6 +19,8 @@
#include "folders.h"
#include "mesg.h"
extern struct user * const user;
void add_folder(void)
{
struct folder new;
......@@ -70,7 +74,7 @@ void add_folder(void)
}
Unlock_File(file);
close(file);
mwlog("FOLDER(CREATED) %s", new.name);
mwlog(user, "FOLDER(CREATED) %s", new.name);
}
void auto_subscribe(int folnum, int state)
......
......@@ -17,6 +17,7 @@
#include <netinet/in.h>
#include <signal.h>
#include <mwlog.h>
#include "command.h"
#include "alarm.h"
#include "strings.h"
......@@ -193,12 +194,12 @@ static void accept_line(char *line)
{
*comm=0;
eof_count++;
mwlog("EOF");
mwlog(user, "EOF");
if (eof_count>3)
{
broadcast(1, "\03304%s'%s connection has just dropped.", user->record.name,
user->record.name[strlen(user->record.name)] == 's' ? "" : "s");
mwlog("EOF(LOGOUT)");
mwlog(user, "EOF(LOGOUT)");
close_down(LOGOFF_EOFS, NULL, NULL);
}
} else
......@@ -650,9 +651,9 @@ int main(int argc, char **argv)
ss=sizeof(sa);
/* can we log a hostname ? */
if (getpeername(fileno(stdin), (struct sockaddr *)&sa, &ss))
mwlog("LOGIN");
mwlog(user, "LOGIN");
else
mwlog("LOGIN from %s", inet_ntoa(sa.sin_addr));
mwlog(user, "LOGIN from %s", inet_ntoa(sa.sin_addr));
}
time_t when = user->record.lastlogout;
......@@ -758,7 +759,7 @@ int main(int argc, char **argv)
printf("<%d>\n", busy);
fflush(stdout);
perror("stdin");
mwlog("ERROR on stdin");
mwlog(user, "ERROR on stdin");
close_down(LOGOFF_ERROR, NULL, NULL);
}
if (!busy && MesgIsStacked())
......@@ -909,7 +910,7 @@ void close_down(int logofftype, char *sourceuser, char *reason)
if (!quietmode && logofftype != LOGOFF_TIMEOUT && logofftype != LOGOFF_EOFS)
broadcast(1, "\03302%s has just left the board.", user->record.name);
mwlog("LOGOUT");
mwlog(user, "LOGOUT");
sleep(1); //dodgy hack for race condition in checkonoff, cunningly we currently get woken by the very message we're waiting for.
ipc_close();
......@@ -1259,7 +1260,7 @@ static void time_out(void *idle_count_p)
write(1,msg,strlen(msg));
broadcast(1, _("\03304%s has been timed out."), user->record.name);
mwlog("TIMEOUT(LOGOUT)");
mwlog(user, "TIMEOUT(LOGOUT)");
close_down(LOGOFF_TIMEOUT, NULL, NULL);
}
else if (*icnt==0)
......@@ -1272,7 +1273,7 @@ static void time_out(void *idle_count_p)
}
else
{
mwlog("TIMEOUT(BLOCKED)");
mwlog(user, "TIMEOUT(BLOCKED)");
close_down(LOGOFF_TIMEOUT, NULL, NULL);
}
......
......@@ -9,6 +9,7 @@
#include <sys/stat.h>
#include <util.h>
#include <mwlog.h>
#include "talker_privs.h"
#include "special.h"
#include "ipc.h"
......@@ -63,10 +64,10 @@ void broadcast(int state, const char *fmt, ...)
israw = (state & 0x100) != 0;
state &= ~0x100;
if (state==0) mwlog("WALL %s", text);
else if (state==1 && israw) mwlog("BROADCAST %s", text);
else if (state==2) mwlog("WIZ %s", text);
else if (state==5) mwlog("STATUS %s", text);
if (state==0) mwlog(user, "WALL %s", text);
else if (state==1 && israw) mwlog(user, "BROADCAST %s", text);
else if (state==2) mwlog(user, "WIZ %s", text);
else if (state==5) mwlog(user, "STATUS %s", text);
switch (state) {
case 1:
......@@ -102,31 +103,3 @@ void broadcast(int state, const char *fmt, ...)
ipc_send_to_all(IPC_TEXT, buff);
}
}
void mwlog(const char *fmt, ...)
{
char detail[LOGLINESIZE];
mode_t mask;
va_list ap;
time_t t;
char *ts;
FILE *fp;
mask = umask(077);
fp = fopen(LOGFILE, "a");
umask(mask);
if (fp == NULL) {
perror(LOGFILE);
return;
}
t=time(0);
ts = asctime(gmtime(&t));
if (ts != NULL && *ts != '\0')
ts[strlen(ts) - 1] = '\0';
va_start(ap, fmt);
vsnprintf(detail, LOGLINESIZE-1, fmt, ap);
va_end(ap);
fprintf(fp, "%s | %*s | %s\n", ts, NAMESIZE, user->record.name, detail);
fclose(fp);
}
......@@ -6,6 +6,5 @@
void broadcast(int state, const char *fmt, ...) __attribute__((format(printf,2,3)));
void inform_of_mail(char *to);
void postinfo(struct user *who, struct folder *fol, struct Header *mesg);
void mwlog(const char *fmt, ...) __attribute__((format(printf,1,2)));
#endif /* MESG_H */
......@@ -11,6 +11,7 @@
#include <stdbool.h>
#include <locale.h>
#include <mwlog.h>
#include "folders.h"
#include "iconv.h"
#include "strings.h"
......@@ -468,7 +469,7 @@ void c_mesg(CommandList *cm, int argc, const char **argv, char *args)
busy++;
mesg_edit(argv[1], &user->folder, atoi(argv[2]), user);
busy--;
mwlog("MESSAGE %s %s:%d",argv[1], user->folder.name, atoi(argv[2]));
mwlog(user, "MESSAGE %s %s:%d",argv[1], user->folder.name, atoi(argv[2]));
}
void c_latest(CommandList *cm, int argc, const char **argv, char *args)
......@@ -815,7 +816,7 @@ void c_passwd(CommandList *cm, int argc, const char **argv, char *args)
strcpy(user->record.passwd, pw1);
update_user(user);
printf(_("Password set.\n"));
mwlog("CHANGE(PASSWD)");
mwlog(user, "CHANGE(PASSWD)");
}
}
}
......
......@@ -7,6 +7,7 @@
#include <stdbool.h>
#include <sqlite.h>
#include <mwlog.h>
#include "bb.h"
#include "talker_privs.h"
#include "special.h"
......@@ -60,7 +61,7 @@ static void talk_send_to_room(const char * text, int channel, const char * type,
}
void talk_send_shout(char * text){
mwlog("SHOUT %s", text);
mwlog(user, "SHOUT %s", text);
ipc_message_t * msg = ipcmsg_create(IPC_SAYTOALL, user->posn);
json_t * j = json_init(NULL);
json_addstring(j, "text", text);
......@@ -71,25 +72,25 @@ void talk_send_shout(char * text){
static void talk_send_say(const char * text, int channel)
{
mwlog("SAY %s", text);
mwlog(user, "SAY %s", text);
catchuri(text);
talk_send_to_room(text, channel, "say", -1);
}
void talk_send_raw(char * text, int channel){
mwlog("RAW %s", text);
mwlog(user, "RAW %s", text);
catchuri(text);
talk_send_to_room(text, channel, "raw", -1);
}
void talk_send_rawbcast(char * text){
mwlog("RAWBCAST %s", text);
mwlog(user, "RAWBCAST %s", text);
ipc_send_to_all(IPC_TEXT, text);
}
void talk_send_emote(char * text, int channel, int plural){
catchuri(text);
mwlog("EMOTE %s", text);
mwlog(user, "EMOTE %s", text);
talk_send_to_room(text, channel, "emote", plural);
}
......@@ -104,7 +105,7 @@ void talk_sayto(char *text, const char *to, const char *type)
json_decref(j);
ipcmsg_transmit(msg);
mwlog("SAYTO %s %s",to,text);
mwlog(user, "SAYTO %s %s",to,text);
}
int screen_h(void)
......@@ -415,7 +416,7 @@ void t_notsayto(CommandList *cm, int argc, const char **argv, char *args)
char text[MAXTEXTLENGTH];
snprintf(text, MAXTEXTLENGTH, "%s", args);
mwlog("NSAYTO %s %s", argv[1], text);
mwlog(user, "NSAYTO %s %s", argv[1], text);
/* variant of say_to_room but with an exclude clause */
ipc_message_t * msg = ipcmsg_create(IPC_SAYTOROOM, user->posn);
......@@ -1048,11 +1049,11 @@ void t_topic(CommandList *cm, int argc, const char **argv, char *args)
if (topic == NULL || *topic == 0) {
snprintf(text, MAXTEXTLENGTH-1, "\03315%s has cleared the channel topic.",
user->record.name);
mwlog("TOPIC <empty>");
mwlog(user, "TOPIC <empty>");
} else {
snprintf(text, MAXTEXTLENGTH-1, "\03315%s has set the topic to \"%s\".",
user->record.name, topic);
mwlog("TOPIC %s", topic);
mwlog(user, "TOPIC %s", topic);
}
talk_send_raw(text, user->record.room);
} else {
......@@ -1198,9 +1199,9 @@ void sendipc(const char *to, const char *text, int bcast)
}else
{
if (bcast)
mwlog("SENDIPB %s", text);
mwlog(user, "SENDIPB %s", text);
else
mwlog("SENDIPC(%s) %s",to,text);
mwlog(user, "SENDIPC(%s) %s",to,text);
}
}
......@@ -1224,9 +1225,9 @@ void sendrpc(const char *to, const char *type, const char *text, int bcast)
}else
{
if (bcast)
mwlog("SENDRPB(%s) %s", type, text);
mwlog(user, "SENDRPB(%s) %s", type, text);
else
mwlog("SENDRPC(%s, %s) %s", to, type, text);
mwlog(user, "SENDRPC(%s, %s) %s", to, type, text);
}
}
......
......@@ -6,6 +6,7 @@
#include <sqlite.h>
#include <util.h>
#include <mwlog.h>
#include "uri.h"
#include "sqlite.h"
#include "talker.h"
......@@ -420,7 +421,7 @@ void uri_delete(int argc, const char **argv, int wiz)
snprintf(mesg, MAXTEXTLENGTH-1, "\03315%s has just deleted %s's uri %s [%s] from mwuri", user->record.name, username, uri, added);
broadcast(1, "%s", mesg);
snprintf(mesg, MAXTEXTLENGTH-1, "MWURI %s deleted uri: %s <%s> [%s]", user->record.name, username, uri, added);
mwlog("%s", mesg);
mwlog(user, "%s", mesg);
}
else
{
......@@ -515,7 +516,7 @@ static void uri_set_flag(int argc, const char **argv, int wiz, int flag)
snprintf(mesg, MAXTEXTLENGTH-1, "\03304%s has just %sset the %s flag on %s's uri %s [%s] in mwuri", user->record.name, flag&flags?"":"un", desc_str, username, uri, added);
broadcast(3, "%s", mesg);
snprintf(mesg, MAXTEXTLENGTH-1, "MWURI %s %sset %s flag on uri: %s <%s> [%s]", user->record.name, flag&flags?"":"un", desc_str, username, uri, added);
mwlog("%s", mesg);
mwlog(user, "%s", mesg);
}
else
{
......
......@@ -12,6 +12,8 @@
#include <pwd.h>
#include <time.h>
#include <stdbool.h>
#include <mwlog.h>
#include "special.h"
#include "talker_privs.h"
#include "talker.h"
......@@ -224,7 +226,7 @@ MAX OF 10 MESSAGES IN THE LAST 2 WEEKS
tmp->groups|=1;
tmp->chatprivs|=CP_SCRIPT;
}
mwlog("AUTOREGISTER %s",getmylogin());
mwlog(user, "AUTOREGISTER %s",getmylogin());
ret = 1; /* Autoregistered */
}
return ret;
......@@ -284,7 +286,7 @@ static int new_usr(char *name, struct user *u)
get_str(usr->contact,CONTACTSIZE);
strip_str(usr->contact);
mwlog("CREATED: %s <%s>",usr->realname, usr->contact);
mwlog(user, "CREATED: %s <%s>",usr->realname, usr->contact);
int ret = 2; /* New user */
ret += set_defaults(usr);
......
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <sys/stat.h>
#include <time.h>
#include "mwlog.h"
void mwlog(struct user *user, const char *fmt, ...)
{
char detail[LOGLINESIZE];
mode_t mask;
va_list ap;
time_t t;
char *ts;
FILE *fp;
mask = umask(077);
fp = fopen(LOGFILE, "a");
umask(mask);
if (fp == NULL) {
perror(LOGFILE);
return;
}
t = time(0);
ts = asctime(gmtime(&t));
if (ts != NULL && *ts != '\0')
ts[strlen(ts) - 1] = '\0';
va_start(ap, fmt);
vsnprintf(detail, LOGLINESIZE-1, fmt, ap);
va_end(ap);
fprintf(fp, "%s | %*s | %s\n", ts, NAMESIZE, user->record.name, detail);
fclose(fp);
}
#ifndef MWLOG_H
#define MWLOG_H
#include "user.h"
#ifndef LOGDIR
#define LOGDIR "/var/log/mw"
#endif
#define LOGFILE LOGDIR "/log.bb"
#define LOGLINESIZE 2048
void mwlog(struct user *user, const char *fmt, ...) __attribute__((format(printf,2,3)));
#endif /* MWLOG_H */
......@@ -23,6 +23,7 @@
#include <perms.h>
#include <bb.h>
#include <util.h>
#include <mwlog.h>
#include "import.h"
#include "comms.h"
#include "mwstring.h"
......@@ -71,8 +72,6 @@ struct list_head connlist;
char * json_escape(char *in);
static void handle_mesg(void);
void mwlog(const char *fmt, ...) __attribute__((format(printf,1,2)));
/* unix socket to accept control commands from */
void open_command_socket()
{
......@@ -454,7 +453,7 @@ static int handle_command(CONNECTION *co)
json_decref(j);
ipcmsg_transmit(msg);
mwlog("SAYTO %s %s", to, text);
mwlog(user, "SAYTO %s %s", to, text);
asprintf(&status, "{\"status\":\"sayto sent to %s (%s)\"}", to, text);
send(co->fd, status, strlen(status), 0);
......@@ -463,7 +462,7 @@ static int handle_command(CONNECTION *co)
}else
if (co->authd && strncasecmp(buff, "emote ", 6)==0) {
talk_send_to_room(&buff[6], user->record.room, "emote", 0);
mwlog("EMOTE %s", &buff[6]);
mwlog(user, "EMOTE %s", &buff[6]);
snprintf(buff, sizeof buff, "{\"status\":\"Emote Sent to channel %d\"}", user->record.room);
send(co->fd, buff, strlen(buff), 0);
user->record.idletime = lastcomm;
......@@ -522,7 +521,7 @@ static int handle_command(CONNECTION *co)
}else
if (co->authd && strncasecmp(buff, "say ", 4)==0) {
talk_send_to_room(&buff[4], user->record.room, "say", -1);
mwlog("SAY %s", &buff[4]);
mwlog(user, "SAY %s", &buff[4]);
snprintf(buff, sizeof buff, "{\"status\":\"Message Sent to channel %d\"}", user->record.room);
send(co->fd, buff, strlen(buff), 0);
user->record.idletime = lastcomm;
......@@ -610,40 +609,13 @@ void create_user(struct user *me, const char *username, const char *password)
if ((pw=getpwnam(username))!=NULL) {
snprintf(urec->realname, sizeof(urec->realname), "%s", pw->pw_gecos);
snprintf(urec->contact, sizeof(urec->contact), "%s@sucs.org", pw->pw_name);
mwlog("CREATED %s <%s>", urec->realname, urec->contact);
mwlog(user, "CREATED %s <%s>", urec->realname, urec->contact);
} else {
mwlog("CREATED Auto web user");
mwlog(user, "CREATED Auto web user");
}
userdb_write(me);
}
void mwlog(const char *fmt, ...)
{
char detail[LOGLINESIZE];
mode_t mask;
va_list ap;
time_t t;
char *ts;
FILE *fp;
mask = umask(077);
fp = fopen(LOGFILE, "a");
umask(mask);
if (fp == NULL) {
perror(LOGFILE);
return;
}
t=time(0);
ts = asctime(gmtime(&t));
if (ts != NULL && *ts != '\0')
ts[strlen(ts) - 1] = '\0';
va_start(ap, fmt);
vsnprintf(detail, LOGLINESIZE-1, fmt, ap);
va_end(ap);
fprintf(fp, "%s | %*s | %s\n", ts, NAMESIZE, user->record.name, detail);
fclose(fp);
}
int32_t who_find(const char *username)
{
if (whoinfo == NULL) return -1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment