Messages in this thread | | | From | Torsten Foertsch <> | Subject | Re: chroot() breaks syslog() ? | Date | Mon, 4 Aug 2003 09:23:47 +0200 |
| |
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On Monday 04 August 2003 07:27, Steven Micallef wrote: > Hi all, > > I've stumbled onto what seems to have broken somewhere between 2.4.8 and > 2.4.18 (sorry, I've been unable to test it on a later version just yet). > Basically, when using chroot(), syslog() calls don't work. > > The following simple example is broken on 2.4.18: > > #include <stdio.h> > #include <sys/syslog.h> > > int main(void) { > chroot("/home/steve"); > syslog(LOG_ALERT, "TEST"); > }
consider syslogd's -a option. Or simply call openlog(3) with LOG_NDELAY before chroot(). Or place the first call to syslog() before chroot(). Syscall() does not close the socket between calls.
int main(void) { openlog( "klaus", LOG_NDELAY, LOG_NEWS); chroot("/tmp"); printf( "before\n" ); fflush( stdout ); syslog(LOG_ALERT, "TEST1"); printf( "between\n" ); fflush( stdout ); syslog(LOG_ALERT, "TEST2"); }
strace give the following output:
...
socket(PF_UNIX, SOCK_DGRAM, 0) = 3 fcntl64(3, F_SETFD, FD_CLOEXEC) = 0 connect(3, {sin_family=AF_UNIX, path="/dev/log"}, 16) = 0 chroot("/tmp") = 0
...
write(1, "before\n", 7before ) = 7
...
send(3, "<57>Aug 4 07:17:09 klaus: TEST1", 32, 0) = 32 rt_sigaction(SIGPIPE, {SIG_DFL}, NULL, 8) = 0 write(1, "between\n", 8between ) = 8
...
send(3, "<57>Aug 4 07:17:09 klaus: TEST2", 32, 0) = 32 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.7 (GNU/Linux)
iD8DBQE/LgoGwicyCTir8T4RAqbzAJ9SPwFSnLyinG0C+ya/uTJRR4vwGQCeLxiV ilmX6A7oJjou6ympLhFsDC4= =mfSg -----END PGP SIGNATURE----- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |