1.\" Copyright (c) 1988, 1991, 1993 2.\" The Regents of the University of California. All rights reserved. 3.\" 4.\" This code is derived from software contributed to Berkeley by 5.\" the American National Standards Committee X3, on Information 6.\" Processing Systems. 7.\" 8.\" Redistribution and use in source and binary forms, with or without 9.\" modification, are permitted provided that the following conditions 10.\" are met: 11.\" 1. Redistributions of source code must retain the above copyright 12.\" notice, this list of conditions and the following disclaimer. 13.\" 2. Redistributions in binary form must reproduce the above copyright 14.\" notice, this list of conditions and the following disclaimer in the 15.\" documentation and/or other materials provided with the distribution. 16.\" 3. All advertising materials mentioning features or use of this software 17.\" must display the following acknowledgement: 18.\" This product includes software developed by the University of 19.\" California, Berkeley and its contributors. 20.\" 4. Neither the name of the University nor the names of its contributors 21.\" may be used to endorse or promote products derived from this software 22.\" without specific prior written permission. 23.\" 24.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 25.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 26.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 27.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 28.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34.\" SUCH DAMAGE. 35.\" 36.\" @(#)tmpnam.3 8.2 (Berkeley) 11/17/93 37.\" $FreeBSD$ 38.\" 39.Dd November 17, 1993 40.Dt TMPFILE 3 41.Os 42.Sh NAME 43.Nm tempnam , 44.Nm tmpfile , 45.Nm tmpnam 46.Nd temporary file routines 47.Sh LIBRARY 48.Lb libc 49.Sh SYNOPSIS 50.In stdio.h 51.Ft FILE * 52.Fn tmpfile void 53.Ft char * 54.Fn tmpnam "char *str" 55.Ft char * 56.Fn tempnam "const char *tmpdir" "const char *prefix" 57.Sh DESCRIPTION 58The 59.Fn tmpfile 60function 61returns a pointer to a stream associated with a file descriptor returned 62by the routine 63.Xr mkstemp 3 . 64The created file is unlinked before 65.Fn tmpfile 66returns, causing the file to be automatically deleted when the last 67reference to it is closed. 68The file is opened with the access value 69.Ql w+ . 70The file is created in the directory determined by the environment variable 71.Ev TMPDIR 72if set. 73The default location if 74.Ev TMPDIR 75is not set is 76.Pa /tmp . 77.Pp 78The 79.Fn tmpnam 80function 81returns a pointer to a file name, in the 82.Dv P_tmpdir 83directory, which 84did not reference an existing file at some indeterminate point in the 85past. 86.Dv P_tmpdir 87is defined in the include file 88.In stdio.h . 89If the argument 90.Fa str 91is 92.Pf non- Dv NULL , 93the file name is copied to the buffer it references. 94Otherwise, the file name is copied to a static buffer. 95In either case, 96.Fn tmpnam 97returns a pointer to the file name. 98.Pp 99The buffer referenced by 100.Fa str 101is expected to be at least 102.Dv L_tmpnam 103bytes in length. 104.Dv L_tmpnam 105is defined in the include file 106.In stdio.h . 107.Pp 108The 109.Fn tempnam 110function 111is similar to 112.Fn tmpnam , 113but provides the ability to specify the directory which will 114contain the temporary file and the file name prefix. 115.Pp 116The environment variable 117.Ev TMPDIR 118(if set), the argument 119.Fa tmpdir 120(if 121.Pf non- Dv NULL ) , 122the directory 123.Dv P_tmpdir , 124and the directory 125.Pa /tmp 126are tried, in the listed order, as directories in which to store the 127temporary file. 128.Pp 129The argument 130.Fa prefix , 131if 132.Pf non- Dv NULL , 133is used to specify a file name prefix, which will be the 134first part of the created file name. 135The 136.Fn tempnam 137function 138allocates memory in which to store the file name; the returned pointer 139may be used as a subsequent argument to 140.Xr free 3 . 141.Sh RETURN VALUES 142The 143.Fn tmpfile 144function 145returns a pointer to an open file stream on success, and a 146.Dv NULL 147pointer 148on error. 149.Pp 150The 151.Fn tmpnam 152and 153.Fn tempfile 154functions 155return a pointer to a file name on success, and a 156.Dv NULL 157pointer 158on error. 159.Sh ERRORS 160The 161.Fn tmpfile 162function 163may fail and set the global variable 164.Va errno 165for any of the errors specified for the library functions 166.Xr fdopen 3 167or 168.Xr mkstemp 3 . 169.Pp 170The 171.Fn tmpnam 172function 173may fail and set 174.Va errno 175for any of the errors specified for the library function 176.Xr mktemp 3 . 177.Pp 178The 179.Fn tempnam 180function 181may fail and set 182.Va errno 183for any of the errors specified for the library functions 184.Xr malloc 3 185or 186.Xr mktemp 3 . 187.Sh SECURITY CONSIDERATIONS 188The 189.Fn tmpnam 190and 191.Fn tempnam 192functions are susceptible to a race condition 193occuring between the selection of the file name 194and the creation of the file, 195which allows malicious users 196to potentially overwrite arbitrary files in the system, 197depending on the level of privilege of the running program. 198Additionally, there is no means by which 199file permissions may be specified. 200It is strongly suggested that 201.Xr mkstemp 3 202be used in place of these functions. 203(See 204the FSA.) 205.Sh COMPATIBILITY 206These interfaces are provided from System V and 207.Tn ANSI 208compatibility only. 209.Pp 210Most historic implementations of these functions provide 211only a limited number of possible temporary file names 212(usually 26) 213before file names will start being recycled. 214System V implementations of these functions 215(and of 216.Xr mktemp 3 ) 217use the 218.Xr access 2 219system call to determine whether or not the temporary file 220may be created. 221This has obvious ramifications for setuid or setgid programs, 222complicating the portable use of these interfaces in such programs. 223.Pp 224The 225.Fn tmpfile 226interface should not be used in software expected to be used on other systems 227if there is any possibility that the user does not wish the temporary file to 228be publicly readable and writable. 229.Sh SEE ALSO 230.Xr mkstemp 3 , 231.Xr mktemp 3 232.Rs 233.%T "The FreeBSD Security Architecture" 234.Re 235(See 236.Pa "/usr/share/doc/{to be determined}" . ) 237.Sh STANDARDS 238The 239.Fn tmpfile 240and 241.Fn tmpnam 242functions 243conform to 244.St -isoC . 245