If log file cycling doesn't have permission to create a new log file
it will end up closing the log file for good and stop logging. Fix
this by checking if permission to cycle the log file exists and disable
the feature if it doesn't.
silc_time_string(0), log->typename,
(unsigned long)log->maxsize / 1024);
fflush(log->fp);
silc_time_string(0), log->typename,
(unsigned long)log->maxsize / 1024);
fflush(log->fp);
memset(newname, 0, sizeof(newname));
silc_snprintf(newname, sizeof(newname) - 1, "%s.old", log->filename);
unlink(newname);
memset(newname, 0, sizeof(newname));
silc_snprintf(newname, sizeof(newname) - 1, "%s.old", log->filename);
unlink(newname);
- rename(log->filename, newname);
+ if (rename(log->filename, newname)) {
+ fprintf(log->fp,
+ "[%s] [%s] Couldn't recycle log file '%s' for type '%s': %s",
+ silc_time_string(0), log->typename,
+ log->filename, log->typename, strerror(errno));
+ log->maxsize = 0;
+ return;
+ }
log->fp = fopen(log->filename, "w");
log->fp = fopen(log->filename, "w");
SILC_LOG_WARNING(("Couldn't reopen log file '%s' for type '%s': %s",
log->filename, log->typename, strerror(errno)));
SILC_LOG_WARNING(("Couldn't reopen log file '%s' for type '%s': %s",
log->filename, log->typename, strerror(errno)));
#ifdef HAVE_CHMOD
chmod(log->filename, 0600);
#endif /* HAVE_CHMOD */
#ifdef HAVE_CHMOD
chmod(log->filename, 0600);
#endif /* HAVE_CHMOD */