#include "ircd_defs.h"
#include "logger.h"
#include "s_conf.h"
-#include "sprintf_irc.h"
#include "send.h"
#include "client.h"
#include "s_serv.h"
{ &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
{
/* 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");
+ }
}
}
{
fclose(logfile);
*log_table[dest].logfile = NULL;
+ return;
}
fflush(logfile);