]> jfr.im git - irc/rqf/shadowircd.git/commitdiff
report logfile access issues
authorAaron Sethman <redacted>
Sun, 16 Nov 2008 07:15:28 +0000 (10:15 +0300)
committerAaron Sethman <redacted>
Sun, 16 Nov 2008 07:15:28 +0000 (10:15 +0300)
committer: Valeriy Yatsko <redacted>

src/logger.c

index 56af880c22036ac18a4a3953eff77159a7f14afb..53cd72be24914101701516cb17fc8bf88b08fbdf 100644 (file)
@@ -73,11 +73,56 @@ static struct log_struct log_table[LAST_LOGFILE] =
        { &ConfigFileEntry.fname_ioerrorlog,    &log_ioerror    }
 };
 
+static void
+verify_logfile_access(const char *filename)
+{
+       char *dirname, *d;
+       char buf[512];
+       d = rb_dirname(filename);
+       dirname = LOCAL_COPY(d);
+       rb_free(d);
+       
+       if(access(dirname, F_OK) == -1)
+       {
+               rb_snprintf(buf, sizeof(buf), "WARNING: Unable to access logfile %s - parent directory %s does not exist", filename, dirname);
+               if(testing_conf || server_state_foreground)
+                       fprintf(stderr, "%s\n", buf);
+               sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s", buf);
+               return;
+       }
+
+       if(access(filename, F_OK) == -1)
+       {
+               if(access(dirname, W_OK) == -1)
+               {
+                       rb_snprintf(buf, sizeof(buf), "WARNING: Unable to access logfile %s - access to parent directory %s failed: %s", 
+                                   filename, dirname, strerror(errno));
+                       if(testing_conf || server_state_foreground)
+                               fprintf(stderr, "%s\n", buf);
+                       sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s", buf);
+               }
+               return;
+       }
+       
+       if(access(filename, W_OK) == -1)
+       {
+               rb_snprintf(buf, sizeof(buf), "WARNING: Access denied for logfile %s: %s", filename, strerror(errno));
+               if(testing_conf || server_state_foreground)
+                       fprintf(stderr, "%s\n", buf);   
+               sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s", buf);
+               return;
+       }
+       return;
+}
+
 void
 init_main_logfile(void)
 {
+       verify_logfile_access(logFileName);
        if(log_main == NULL)
+       {
                log_main = fopen(logFileName, "a");
+       }
 }
 
 void
@@ -94,7 +139,10 @@ open_logfiles(void)
        {
                /* reopen those with paths */
                if(!EmptyString(*log_table[i].name))
+               {
+                       verify_logfile_access(*log_table[i].name);
                        *log_table[i].logfile = fopen(*log_table[i].name, "a");
+               }
        }
 }