Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
45a8354
)
Make sure the log file is always opened before root privileges (if any)
author
David Dykstra
<dwd@samba.org>
Wed, 25 Oct 2000 19:57:42 +0000
(19:57 +0000)
committer
David Dykstra
<dwd@samba.org>
Wed, 25 Oct 2000 19:57:42 +0000
(19:57 +0000)
are given up.
log.c
patch
|
blob
|
blame
|
history
socket.c
patch
|
blob
|
blame
|
history
diff --git
a/log.c
b/log.c
index
1c54a85
..
c19ebe8
100644
(file)
--- a/
log.c
+++ b/
log.c
@@
-30,12
+30,8
@@
static int log_error_fd = -1;
static void logit(int priority, char *buf)
{
if (logfname) {
static void logit(int priority, char *buf)
{
if (logfname) {
- if (!logfile) {
- extern int orig_umask;
- int old_umask = umask(022 | orig_umask);
- logfile = fopen(logfname, "a");
- umask(old_umask);
- }
+ if (!logfile)
+ log_open();
fprintf(logfile,"%s [%d] %s",
timestring(time(NULL)), (int)getpid(), buf);
fflush(logfile);
fprintf(logfile,"%s [%d] %s",
timestring(time(NULL)), (int)getpid(), buf);
fflush(logfile);
@@
-62,8
+58,10
@@
void log_init(void)
/* optionally use a log file instead of syslog */
logfname = lp_log_file();
if (logfname) {
/* optionally use a log file instead of syslog */
logfname = lp_log_file();
if (logfname) {
- if (*logfname)
+ if (*logfname) {
+ log_open();
return;
return;
+ }
logfname = NULL;
}
logfname = NULL;
}
@@
-82,9
+80,17
@@
void log_init(void)
#endif
}
#endif
}
-/* for long runs when using a log file, close it before potential long waits
- so it can be trimmed by another process instead of growing forever */
-void log_release()
+void log_open()
+{
+ if (logfname && !logfile) {
+ extern int orig_umask;
+ int old_umask = umask(022 | orig_umask);
+ logfile = fopen(logfname, "a");
+ umask(old_umask);
+ }
+}
+
+void log_close()
{
if (logfile) {
fclose(logfile);
{
if (logfile) {
fclose(logfile);
diff --git
a/socket.c
b/socket.c
index
a0debcd
..
b4d078c
100644
(file)
--- a/
socket.c
+++ b/
socket.c
@@
-247,7
+247,10
@@
void start_accept_loop(int port, int (*fn)(int ))
struct sockaddr addr;
int in_addrlen = sizeof(addr);
struct sockaddr addr;
int in_addrlen = sizeof(addr);
- log_release();
+ /* close log file before the potentially very long select so
+ file can be trimmed by another process instead of growing
+ forever */
+ log_close();
FD_ZERO(&fds);
FD_SET(s, &fds);
FD_ZERO(&fds);
FD_SET(s, &fds);
@@
-274,6
+277,10
@@
void start_accept_loop(int port, int (*fn)(int ))
if (fork()==0) {
close(s);
if (fork()==0) {
close(s);
+ /* open log file in child before possibly giving
+ up privileges */
+ log_open();
+
_exit(fn(fd));
}
_exit(fn(fd));
}