chiark / gitweb /
make-secnet-sites: Fix error handling if caller is in wrong group
[secnet.git] / log.c
diff --git a/log.c b/log.c
index 3efd289fe67f9efc9051a07c84a2f83b58a06b51..f937d2ec35d4500294d568d43da2e4258ed3512e 100644 (file)
--- a/log.c
+++ b/log.c
@@ -49,12 +49,7 @@ FORMAT(printf,2,0)
 static void vMessage(uint32_t class, const char *message, va_list args)
 {
 
-    if (system_log) {
-       /* Messages go to the system log interface */
-       vslilog_part(system_log, class, message, args);
-    } else {
-       vMessageFallback(class,message,args);
-    }
+    vslilog_part(system_log, class, message, args);
 }  
 
 void Message(uint32_t class, const char *message, ...)
@@ -416,6 +411,23 @@ static struct flagstr message_class_table[]={
     { NULL, 0 }
 };
 
+static void logfile_file_init(struct logfile *st, FILE *f, const char *desc)
+{
+    st->cl.description=desc;
+    st->cl.type=CL_LOG;
+    st->cl.apply=NULL;
+    st->cl.interface=&st->ops;
+    st->ops.st=st;
+    st->ops.vlogfn=logfile_vlog;
+    st->ops.buff[0]=0;
+    st->f=f;
+    st->logfile=0;
+    st->prefix="";
+    st->forked=0;
+    st->loc.file=0;
+    st->loc.line=-1;
+}
+
 static list_t *logfile_apply(closure_t *self, struct cloc loc, dict_t *context,
                             list_t *args)
 {
@@ -428,17 +440,8 @@ static list_t *logfile_apply(closure_t *self, struct cloc loc, dict_t *context,
        become a daemon. */
     
     NEW(st);
-    st->cl.description="logfile";
-    st->cl.type=CL_LOG;
-    st->cl.apply=NULL;
-    st->cl.interface=&st->ops;
-    st->ops.st=st;
-    st->ops.vlogfn=logfile_vlog;
-    st->ops.buff[0]=0;
     st->loc=loc;
-    st->f=stderr;
-    st->prefix="";
-    st->forked=0;
+    logfile_file_init(st,stderr,"logfile");
 
     item=list_elem(args,0);
     if (!item || item->type!=t_dict) {
@@ -452,7 +455,7 @@ static list_t *logfile_apply(closure_t *self, struct cloc loc, dict_t *context,
     st->level=string_list_to_word(dict_lookup(dict,"class"),
                                       message_class_table,"logfile");
 
-    add_hook(PHASE_GETRESOURCES,logfile_phase_hook,st);
+    add_hook(PHASE_DAEMONIZE,logfile_phase_hook,st);
     add_hook(PHASE_CHILDPERSIST,logfile_childpersist_hook,st);
 
     return new_closure(&st->cl);
@@ -564,7 +567,7 @@ static list_t *syslog_apply(closure_t *self, struct cloc loc, dict_t *context,
     st->facility=string_to_word(facstr,loc,
                                syslog_facility_table,"syslog");
     st->open=False;
-    add_hook(PHASE_GETRESOURCES,syslog_phase_hook,st);
+    add_hook(PHASE_DAEMONIZE,syslog_phase_hook,st);
     add_hook(PHASE_CHILDPERSIST,syslog_phase_hook,st);
 
     return new_closure(&st->cl);
@@ -655,6 +658,16 @@ void log_from_fd(int fd, cstring_t prefix, struct log_if *log)
                      prefix);
 }
 
+static struct logfile startup_log;
+void log_early_init(void)
+{
+    logfile_file_init(&startup_log,stderr,"startup");
+    system_log=&startup_log.ops;;
+}
+
+/* for the benefit of main, really */
+void logfile_init_file(struct logfile *st, FILE *f);
+
 void log_module(dict_t *dict)
 {
     setlinebuf(stderr);