report logfile access issues

committer: Valeriy Yatsko <dwr@it-penza.org>
This commit is contained in:
Aaron Sethman 2008-11-16 10:15:28 +03:00
parent 731fac317d
commit cdf7c361aa

View file

@ -73,11 +73,56 @@ static struct log_struct log_table[LAST_LOGFILE] =
{ &ConfigFileEntry.fname_ioerrorlog, &log_ioerror } { &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 void
init_main_logfile(void) init_main_logfile(void)
{ {
verify_logfile_access(logFileName);
if(log_main == NULL) if(log_main == NULL)
{
log_main = fopen(logFileName, "a"); log_main = fopen(logFileName, "a");
}
} }
void void
@ -94,8 +139,11 @@ open_logfiles(void)
{ {
/* reopen those with paths */ /* reopen those with paths */
if(!EmptyString(*log_table[i].name)) if(!EmptyString(*log_table[i].name))
{
verify_logfile_access(*log_table[i].name);
*log_table[i].logfile = fopen(*log_table[i].name, "a"); *log_table[i].logfile = fopen(*log_table[i].name, "a");
} }
}
} }
void void