Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:11.4
syslogd
sysklogd-1.4.1-clearing.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File sysklogd-1.4.1-clearing.patch of Package syslogd
! ! Be able to write errors on creating of pid file on ! the current terminal (bug #394787) ! --- klogd.c +++ klogd.c 2008-05-28 10:01:46.000000000 +0000 @@ -1098,6 +1098,10 @@ int main(argc, argv) auto int fl; int num_fds = getdtablesize(); + /* tuck my process id away */ + if (!write_pid(PidFile)) + Terminate(); + /* This is the child closing its file descriptors. */ for (fl= 0; fl <= num_fds; ++fl) { @@ -1117,19 +1121,18 @@ int main(argc, argv) fputs("klogd: Already running.\n", stderr); exit(1); } - } - - - /* tuck my process id away */ - if (!check_pid(PidFile)) - { - if (!write_pid(PidFile)) + } else { + /* tuck my process id away */ + if (!check_pid(PidFile)) + { + if (!write_pid(PidFile)) + Terminate(); + } + else + { + fputs("klogd: Already running.\n", stderr); Terminate(); - } - else - { - fputs("klogd: Already running.\n", stderr); - Terminate(); + } } #endif --- pidfile.c +++ pidfile.c 2008-05-29 21:43:35.280028303 +0000 @@ -23,6 +23,7 @@ * Sat Aug 19 13:24:33 MET DST 1995: Martin Schulze * First version (v0.2) released */ +#define USE_FCNTL 1 #include <stdio.h> #include <unistd.h> @@ -31,6 +32,10 @@ #include <string.h> #include <errno.h> #include <signal.h> +#if defined(USE_FCNTL) && (USE_FCNTL != 0) +# include <unistd.h> +# include <fcntl.h> +#endif /* read_pid * @@ -86,6 +91,9 @@ int write_pid (char *pidfile) FILE *f; int fd; int pid; +#if defined(USE_FCNTL) && (USE_FCNTL != 0) + struct flock lck; +#endif if ( ((fd = open(pidfile, O_RDWR|O_CREAT, 0644)) == -1) || ((f = fdopen(fd, "r+")) == NULL) ) { @@ -93,23 +101,46 @@ int write_pid (char *pidfile) return 0; } +#if defined(USE_FCNTL) && (USE_FCNTL != 0) + memset(&lck, 0, sizeof (struct flock)); + lck.l_type = F_WRLCK; + lck.l_whence = SEEK_SET; + + if (fcntl(fd, F_SETLK, &lck) == -1) { + fclose(f); + memset(&lck, 0, sizeof (struct flock)); + fcntl(fd, F_GETLK, &lck); + fprintf(stderr, "Can't lock, lock is held by pid %d.\n", lck.l_pid); + return 0; + } +#else if (flock(fd, LOCK_EX|LOCK_NB) == -1) { fscanf(f, "%d", &pid); fclose(f); - printf("Can't lock, lock is held by pid %d.\n", pid); + fprintf(stderr, "Can't lock, lock is held by pid %d.\n", pid); return 0; } +#endif pid = getpid(); if (!fprintf(f,"%d\n", pid)) { - printf("Can't write pid , %s.\n", strerror(errno)); + fprintf(stderr, "Can't write pid , %s.\n", strerror(errno)); close(fd); return 0; } fflush(f); - if (flock(fd, LOCK_UN) == -1) { - printf("Can't unlock pidfile %s, %s.\n", pidfile, strerror(errno)); +#if defined(USE_FCNTL) && (USE_FCNTL != 0) + memset(&lck, 0, sizeof (struct flock)); + lck.l_type = F_UNLCK; + lck.l_whence = SEEK_SET; + + if (fcntl(fd, F_SETLK, &lck) == -1) +#else + if (flock(fd, LOCK_UN) == -1) +#endif + { + fprintf(stderr,"Can't unlock pidfile %s, %s.\n", pidfile, strerror(errno)); close(fd); return 0; } --- syslogd.c +++ syslogd.c 2008-05-28 10:12:25.000000000 +0000 @@ -22,7 +22,7 @@ char copyright2[] = #endif /* not lint */ #if !defined(lint) && !defined(NO_SCCS) -static char sccsid[] = "@(#)syslogd.c 5.27 (Berkeley) 10/10/88"; +static char sccsid[] __attribute__ ((unused)) = "@(#)syslogd.c 5.27 (Berkeley) 10/10/88"; #endif /* not lint */ /* @@ -821,8 +821,10 @@ int main(argc, argv) int len, num_fds; #else /* __GLIBC__ */ #ifndef TESTING +#ifdef SYSLOG_INET size_t len; #endif +#endif int num_fds; #endif /* __GLIBC__ */ /* @@ -841,7 +843,9 @@ int main(argc, argv) fd_set readfds; #ifndef TESTING +#ifdef SYSLOG_UNIXAF int fd; +#endif #ifdef SYSLOG_INET #ifdef INET6 struct sockaddr_storage frominet; @@ -856,7 +860,9 @@ int main(argc, argv) int ch; struct hostent *hent; +#if defined(SYSLOG_UNIXAF) || defined(TESTING) char line[MAXLINE +1]; +#endif extern int optind; extern char *optarg; int maxfds; @@ -975,10 +981,19 @@ int main(argc, argv) case 0: signal (SIGTERM, SIG_DFL); + /* tuck my process id away */ + dprintf("Writing pidfile.\n"); + if (!write_pid(PidFile)) + { + dprintf("Can't write pid.\n"); + exit(1); + } + num_fds = getdtablesize(); for (i = 0; i < num_fds; i++) (void) close(i); untty(); + break; } } else @@ -988,32 +1003,32 @@ int main(argc, argv) } } else + { #endif debugging_on = 1; #ifndef SYSV - else setlinebuf(stdout); #endif - #ifndef TESTING - /* tuck my process id away */ - if ( !Debug ) - { - dprintf("Writing pidfile.\n"); - if (!check_pid(PidFile)) + /* tuck my process id away */ + if ( !Debug ) { - if (!write_pid(PidFile)) + dprintf("Writing pidfile.\n"); + if (!check_pid(PidFile)) { - dprintf("Can't write pid.\n"); + if (!write_pid(PidFile)) + { + dprintf("Can't write pid.\n"); + exit(1); + } + } + else + { + dprintf("Pidfile (and pid) already exist.\n"); exit(1); } - } - else - { - dprintf("Pidfile (and pid) already exist.\n"); - exit(1); - } - } /* if ( !Debug ) */ + } /* if ( !Debug ) */ + } #endif consfile.f_type = F_CONSOLE; @@ -1659,8 +1674,13 @@ void logmsg(pri, msg, from, flags) int flags; { register struct filed *f; - int fac, prilev, lognum; + int fac, prilev; int msglen; +#ifndef SYSV + int omask; +#else + int lognum; +#endif char *timestamp; dprintf("logmsg: %s, flags %x, from %s, msg %s\n", textpri(pri), flags, from, msg); @@ -2402,11 +2422,9 @@ void init() register int i, lognum; register FILE *cf; register struct filed *f; -#ifndef TESTING #ifndef SYSV register struct filed **nextp = (struct filed **) 0; #endif -#endif register char *p; register unsigned int Forwarding = 0; #ifdef CONT_LINE @@ -2487,7 +2505,7 @@ void init() #else *nextp = (struct filed *)calloc(1, sizeof(*f)); cfline("*.ERR\t" _PATH_CONSOLE, *nextp); - (*nextp)->f_next = (struct filed *)calloc(1, sizeof(*f)) /* ASP */ + (*nextp)->f_next = (struct filed *)calloc(1, sizeof(*f)); /* ASP */ cfline("*.PANIC\t*", (*nextp)->f_next); #endif Initialized = 1;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor