Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 2 Aug 2003 02:38:45 +0200
From:      Riccardo Torrini <riccardo@torrini.org>
To:        freebsd-current@FreeBSD.ORG
Subject:   Re: newsyslog problems with -C
Message-ID:  <20030802003845.GE73426@trudy.torrini.home>
In-Reply-To: <20030802000332.GD73426@trudy.torrini.home>
References:  <20030802000332.GD73426@trudy.torrini.home>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Aug 02, 2003 at 02:03:32AM +0200, Riccardo Torrini wrote:

> Without creating by hand /var/tmp/{foo,bar} this command fail

> # newsyslog -vvvvv -F -C -f /usr/local/etc/rotatemailbackup.conf
>         --> [creating entry for /var/tmp/foo]
>         --> [creating entry for /var/tmp/bar]
> /var/tmp/foo <7Z>: does not exist -> will create.
> newsyslog: can't fchmod temp file '/var/tmp/foo.z8FjDcW': \
	Bad file descriptor

Found (I think  :-)

# truss newsyslog -vvvvv -CC -F -f \
	/usr/local/etc/rotatemailbackup.conf /var/tmp/foo
[...]
lstat("/var/tmp",0xbfbffad0)             = 0 (0x0)
gettimeofday(0xbfbff500,0x0)             = 0 (0x0)
getpid()                                 = 84801 (0x14b41)
open("/dev/urandom",0x0,00)              = 3 (0x3)
read(0x3,0xbfbff50c,0x74)                = 116 (0x74)
close(3)                                 = 0 (0x0)
stat("/var/tmp",0xbfbff610)              = 0 (0x0)
open("/var/tmp/foo.zM4kxLE",0xa02,0600)  = 3 (0x3)
fchown(0x3,0x3e9,0x6)                    = 0 (0x0)
close(3)                                 = 0 (0x0)
fchmod(0x3,0x180)                        ERR#9 'Bad file descriptor'
[...]

It seems that last two lines are reversed (close before fchmod).
Looking into sources I found two close(fd).  Here is the patch:


-----8<-----[ patch ]-----8<-----
# diff -u newsyslog.c.orig newsyslog.c
--- newsyslog.c.orig    Sun May 25 18:46:13 2003
+++ newsyslog.c Sat Aug  2 02:28:50 2003
@@ -1764,7 +1764,6 @@
			failed = fchown(fd, ent->uid, ent->gid);
			if (failed)
				err(1, "can't fchown temp file %s", tempfile);
-				(void) close(fd);
		}
	}
-----8<-----[ patch ]-----8<-----

Now it works, here is the correct flow:
[...]
open("/dev/urandom",0x0,00)                      = 3 (0x3)
read(0x3,0xbfbff4bc,0x74)                        = 116 (0x74)
close(3)                                         = 0 (0x0)
stat("/var/tmp",0xbfbff5c0)                      = 0 (0x0)
open("/var/tmp/foo.zKXXcYJ",0xa02,0600)          = 3 (0x3)
fchown(0x3,0x3e9,0x6)                            = 0 (0x0)
fchmod(0x3,0x180)                                = 0 (0x0)
rename(0xbfbff680,0x8058060)                     = 0 (0x0)
close(3)                                         = 0 (0x0)
        --> [freeing entry for /var/tmp/foo]
[...]


Please commit on both 4.8 and -CURRENT because newsyslog.c 1.25.2.21 (4.8)
and newsyslog.c 1.70 (-CURRENT) are equal but the headers.  Thanks.


-- 
Riccardo. ( http://www.GUFI.org/~vic/ )



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030802003845.GE73426>