[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Secure temporary fifo creation

Philippe Troin <phil@fifi.org> writes:

> Greg Deitrick <gdeitrick@mylinuxisp.com> writes:
>> Hello,
>> What is the recommended method for securely creating a temporary named pipe in 
>> C code?
>> Looking at the man pages for various library calls it appears that tmpfile(3) 
>> is probably an acceptable means of creating a temporary file, but this 
>> returns a FILE *.  The upstram source I'm packaging needs to make a temporary 
>> fifo.  It uses tempnam(3) to get a temporary file name as a char *, and then 
>> mkfifo(3) to make the fifo named pipe from the file name.  Is this 
>> sufficiently secure?
> Not needed... This should be race-free:
>   char *s;
>   while (s = (tempnam("/tmp", "foo")) {
>     if (mknod(s, S_IFIFO|0600, 0) == 0)
>       break;
>     if (errno != EEXIST)
>       /* error */
>   }
>   if (!s)
>     /* error */

What happens if the 'tempnam' is a link to somehwere else? Does mknod
fail or create the fifo where the link points too?

> You might want to use tmpnam if maximum portability is needed.
> Phil.


Reply to: