Justin, > > > tmpnam.3 (and tmpnam_r.3) > > > I think this is one of the classically-buggy functions. Since it > > > generates a filename, but doesn't ask the kernel to create that file > > > atomically, it is easy to pass its return value to fopen() and be > > > done > > > with it; but, again, this is insecure if you don't use "exclusive" > > > mode. It should be fine if you do use it, though. > > > > No! The problem is that between creation of the name and opening > > it (in /tmp, a world writable directory), some other program could > > create that file or create it as a symlink, causing the original > > program to do the wrong thing. > Not in exclusive mode.. In my test it didn't matter if it was a > dangling symlink, a real symlink, or a file. Exclusive mode fails if > the pathname exists in any way:
<blush> Yes, you are right. I should have read and thought harder before I wrote that... My apologies. In 2.34, the tmpnam.3 man page will include the following para: Although tmpnam(3) generates names that are difficult to guess, it is nevertheless possible that between the time that tmpnam(3) returns a pathname, and the time that the program opens it, another program might create that pathnam using open(2), or create it as a symbolic link. This can lead to security holes. To avoid such possibilities, use the open(2) O_EXCL flag to open the pathname. Or better yet, use mkstemp(3) or tmpfile(3). I added similar text to temnam.3. I also removed the text "POSIX dictates tmpnam(3)" from mktemp.3. Thanks Justin and Chris for your input. Cheers, Michael -- Michael Kerrisk maintainer of Linux man pages Sections 2, 3, 4, 5, and 7 Want to help with man page maintenance? Grab the latest tarball at ftp://ftp.win.tue.nl/pub/linux-local/manpages/, read the HOWTOHELP file and grep the source files for 'FIXME'. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]