seteuid(0) for reopening the log file

This commit is contained in:
Julien BLACHE 2010-07-14 13:06:32 +02:00
parent c4e4db0728
commit 3cbca1dd07

View File

@ -21,6 +21,7 @@
#endif #endif
#include <stdio.h> #include <stdio.h>
#include <unistd.h>
#include <stdarg.h> #include <stdarg.h>
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>
@ -197,21 +198,43 @@ void
logger_reinit(void) logger_reinit(void)
{ {
FILE *fp; FILE *fp;
uid_t uid;
int ret;
if (!logfile)
return;
pthread_mutex_lock(&logger_lck); pthread_mutex_lock(&logger_lck);
if (logfile) uid = geteuid();
if (uid != 0)
{ {
ret = seteuid(0);
if (ret < 0)
fprintf(logfile, "logger_reinit: seteuid(0) failed: %s\n", strerror(errno));
}
fp = fopen(logfilename, "a"); fp = fopen(logfilename, "a");
if (uid != 0)
{
ret = seteuid(uid);
if (ret < 0)
fprintf(logfile, "logger_reinit: seteuid(%lu) failed: %s\n", (unsigned long)uid, strerror(errno));
}
if (!fp) if (!fp)
{ {
fprintf(logfile, "WARNING: Could not reopen logfile, logging will stop now\n"); fprintf(logfile, "Could not reopen logfile: %s\n", strerror(errno));
goto out;
} }
fclose(logfile); fclose(logfile);
logfile = fp; logfile = fp;
}
out:
pthread_mutex_unlock(&logger_lck); pthread_mutex_unlock(&logger_lck);
} }