xref: /freebsd/lib/libc/stdio/tmpnam.3 (revision 24a0682c6465290759ed0b09ea16e40e7cd47053)
158f0484fSRodney W. Grimes.\" Copyright (c) 1988, 1991, 1993
258f0484fSRodney W. Grimes.\"	The Regents of the University of California.  All rights reserved.
358f0484fSRodney W. Grimes.\"
458f0484fSRodney W. Grimes.\" This code is derived from software contributed to Berkeley by
558f0484fSRodney W. Grimes.\" the American National Standards Committee X3, on Information
658f0484fSRodney W. Grimes.\" Processing Systems.
758f0484fSRodney W. Grimes.\"
858f0484fSRodney W. Grimes.\" Redistribution and use in source and binary forms, with or without
958f0484fSRodney W. Grimes.\" modification, are permitted provided that the following conditions
1058f0484fSRodney W. Grimes.\" are met:
1158f0484fSRodney W. Grimes.\" 1. Redistributions of source code must retain the above copyright
1258f0484fSRodney W. Grimes.\"    notice, this list of conditions and the following disclaimer.
1358f0484fSRodney W. Grimes.\" 2. Redistributions in binary form must reproduce the above copyright
1458f0484fSRodney W. Grimes.\"    notice, this list of conditions and the following disclaimer in the
1558f0484fSRodney W. Grimes.\"    documentation and/or other materials provided with the distribution.
1658f0484fSRodney W. Grimes.\" 3. All advertising materials mentioning features or use of this software
1758f0484fSRodney W. Grimes.\"    must display the following acknowledgement:
1858f0484fSRodney W. Grimes.\"	This product includes software developed by the University of
1958f0484fSRodney W. Grimes.\"	California, Berkeley and its contributors.
2058f0484fSRodney W. Grimes.\" 4. Neither the name of the University nor the names of its contributors
2158f0484fSRodney W. Grimes.\"    may be used to endorse or promote products derived from this software
2258f0484fSRodney W. Grimes.\"    without specific prior written permission.
2358f0484fSRodney W. Grimes.\"
2458f0484fSRodney W. Grimes.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2558f0484fSRodney W. Grimes.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2658f0484fSRodney W. Grimes.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2758f0484fSRodney W. Grimes.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2858f0484fSRodney W. Grimes.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2958f0484fSRodney W. Grimes.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
3058f0484fSRodney W. Grimes.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3158f0484fSRodney W. Grimes.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
3258f0484fSRodney W. Grimes.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3358f0484fSRodney W. Grimes.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3458f0484fSRodney W. Grimes.\" SUCH DAMAGE.
3558f0484fSRodney W. Grimes.\"
3658f0484fSRodney W. Grimes.\"     @(#)tmpnam.3	8.2 (Berkeley) 11/17/93
377f3dea24SPeter Wemm.\" $FreeBSD$
3858f0484fSRodney W. Grimes.\"
3958f0484fSRodney W. Grimes.Dd November 17, 1993
4058f0484fSRodney W. Grimes.Dt TMPFILE 3
4158f0484fSRodney W. Grimes.Os
4258f0484fSRodney W. Grimes.Sh NAME
4358f0484fSRodney W. Grimes.Nm tempnam ,
4458f0484fSRodney W. Grimes.Nm tmpfile ,
4558f0484fSRodney W. Grimes.Nm tmpnam
4658f0484fSRodney W. Grimes.Nd temporary file routines
4725bb73e0SAlexey Zelkin.Sh LIBRARY
4825bb73e0SAlexey Zelkin.Lb libc
4958f0484fSRodney W. Grimes.Sh SYNOPSIS
5032eef9aeSRuslan Ermilov.In stdio.h
5158f0484fSRodney W. Grimes.Ft FILE *
5258f0484fSRodney W. Grimes.Fn tmpfile void
5358f0484fSRodney W. Grimes.Ft char *
5458f0484fSRodney W. Grimes.Fn tmpnam "char *str"
5558f0484fSRodney W. Grimes.Ft char *
5658f0484fSRodney W. Grimes.Fn tempnam "const char *tmpdir" "const char *prefix"
5758f0484fSRodney W. Grimes.Sh DESCRIPTION
5858f0484fSRodney W. GrimesThe
5958f0484fSRodney W. Grimes.Fn tmpfile
6058f0484fSRodney W. Grimesfunction
6158f0484fSRodney W. Grimesreturns a pointer to a stream associated with a file descriptor returned
6258f0484fSRodney W. Grimesby the routine
6358f0484fSRodney W. Grimes.Xr mkstemp 3 .
6458f0484fSRodney W. GrimesThe created file is unlinked before
6558f0484fSRodney W. Grimes.Fn tmpfile
6658f0484fSRodney W. Grimesreturns, causing the file to be automatically deleted when the last
6758f0484fSRodney W. Grimesreference to it is closed.
6858f0484fSRodney W. GrimesThe file is opened with the access value
6958f0484fSRodney W. Grimes.Ql w+ .
700bada860SMike HeffnerThe file is created in the directory determined by the environment variable
710bada860SMike Heffner.Ev TMPDIR
720bada860SMike Heffnerif set.
730bada860SMike HeffnerThe default location if
740bada860SMike Heffner.Ev TMPDIR
750bada860SMike Heffneris not set is
760bada860SMike Heffner.Pa /tmp .
7758f0484fSRodney W. Grimes.Pp
7858f0484fSRodney W. GrimesThe
7958f0484fSRodney W. Grimes.Fn tmpnam
8058f0484fSRodney W. Grimesfunction
8158f0484fSRodney W. Grimesreturns a pointer to a file name, in the
8258f0484fSRodney W. Grimes.Dv P_tmpdir
8358f0484fSRodney W. Grimesdirectory, which
8458f0484fSRodney W. Grimesdid not reference an existing file at some indeterminate point in the
8558f0484fSRodney W. Grimespast.
8658f0484fSRodney W. Grimes.Dv P_tmpdir
8758f0484fSRodney W. Grimesis defined in the include file
88fe08efe6SRuslan Ermilov.In stdio.h .
8958f0484fSRodney W. GrimesIf the argument
903076db19SKris Kennaway.Fa str
9158f0484fSRodney W. Grimesis
9258f0484fSRodney W. Grimes.Pf non- Dv NULL ,
9358f0484fSRodney W. Grimesthe file name is copied to the buffer it references.
9458f0484fSRodney W. GrimesOtherwise, the file name is copied to a static buffer.
9558f0484fSRodney W. GrimesIn either case,
9658f0484fSRodney W. Grimes.Fn tmpnam
9758f0484fSRodney W. Grimesreturns a pointer to the file name.
9858f0484fSRodney W. Grimes.Pp
9958f0484fSRodney W. GrimesThe buffer referenced by
1003076db19SKris Kennaway.Fa str
10158f0484fSRodney W. Grimesis expected to be at least
10258f0484fSRodney W. Grimes.Dv L_tmpnam
10358f0484fSRodney W. Grimesbytes in length.
10458f0484fSRodney W. Grimes.Dv L_tmpnam
10558f0484fSRodney W. Grimesis defined in the include file
106fe08efe6SRuslan Ermilov.In stdio.h .
10758f0484fSRodney W. Grimes.Pp
10858f0484fSRodney W. GrimesThe
10958f0484fSRodney W. Grimes.Fn tempnam
11058f0484fSRodney W. Grimesfunction
11158f0484fSRodney W. Grimesis similar to
11258f0484fSRodney W. Grimes.Fn tmpnam ,
11358f0484fSRodney W. Grimesbut provides the ability to specify the directory which will
11458f0484fSRodney W. Grimescontain the temporary file and the file name prefix.
11558f0484fSRodney W. Grimes.Pp
11658f0484fSRodney W. GrimesThe environment variable
11758f0484fSRodney W. Grimes.Ev TMPDIR
11858f0484fSRodney W. Grimes(if set), the argument
11958f0484fSRodney W. Grimes.Fa tmpdir
12058f0484fSRodney W. Grimes(if
12158f0484fSRodney W. Grimes.Pf non- Dv NULL ) ,
12258f0484fSRodney W. Grimesthe directory
12358f0484fSRodney W. Grimes.Dv P_tmpdir ,
12458f0484fSRodney W. Grimesand the directory
12558f0484fSRodney W. Grimes.Pa /tmp
12658f0484fSRodney W. Grimesare tried, in the listed order, as directories in which to store the
12758f0484fSRodney W. Grimestemporary file.
12858f0484fSRodney W. Grimes.Pp
12958f0484fSRodney W. GrimesThe argument
13058f0484fSRodney W. Grimes.Fa prefix ,
13158f0484fSRodney W. Grimesif
13258f0484fSRodney W. Grimes.Pf non- Dv NULL ,
13358f0484fSRodney W. Grimesis used to specify a file name prefix, which will be the
13458f0484fSRodney W. Grimesfirst part of the created file name.
1351fae73b1SRuslan ErmilovThe
1361fae73b1SRuslan Ermilov.Fn tempnam
1371fae73b1SRuslan Ermilovfunction
13858f0484fSRodney W. Grimesallocates memory in which to store the file name; the returned pointer
13958f0484fSRodney W. Grimesmay be used as a subsequent argument to
14058f0484fSRodney W. Grimes.Xr free 3 .
14158f0484fSRodney W. Grimes.Sh RETURN VALUES
14258f0484fSRodney W. GrimesThe
14358f0484fSRodney W. Grimes.Fn tmpfile
14458f0484fSRodney W. Grimesfunction
14558f0484fSRodney W. Grimesreturns a pointer to an open file stream on success, and a
14658f0484fSRodney W. Grimes.Dv NULL
14758f0484fSRodney W. Grimespointer
14858f0484fSRodney W. Grimeson error.
14958f0484fSRodney W. Grimes.Pp
15058f0484fSRodney W. GrimesThe
15158f0484fSRodney W. Grimes.Fn tmpnam
15258f0484fSRodney W. Grimesand
15358f0484fSRodney W. Grimes.Fn tempfile
15458f0484fSRodney W. Grimesfunctions
15558f0484fSRodney W. Grimesreturn a pointer to a file name on success, and a
15658f0484fSRodney W. Grimes.Dv NULL
15758f0484fSRodney W. Grimespointer
15858f0484fSRodney W. Grimeson error.
15924a0682cSRuslan Ermilov.Sh COMPATIBILITY
16024a0682cSRuslan ErmilovThese interfaces are provided from System V and
16124a0682cSRuslan Ermilov.Tn ANSI
16224a0682cSRuslan Ermilovcompatibility only.
16324a0682cSRuslan Ermilov.Pp
16424a0682cSRuslan ErmilovMost historic implementations of these functions provide
16524a0682cSRuslan Ermilovonly a limited number of possible temporary file names
16624a0682cSRuslan Ermilov(usually 26)
16724a0682cSRuslan Ermilovbefore file names will start being recycled.
16824a0682cSRuslan ErmilovSystem V implementations of these functions
16924a0682cSRuslan Ermilov(and of
17024a0682cSRuslan Ermilov.Xr mktemp 3 )
17124a0682cSRuslan Ermilovuse the
17224a0682cSRuslan Ermilov.Xr access 2
17324a0682cSRuslan Ermilovsystem call to determine whether or not the temporary file
17424a0682cSRuslan Ermilovmay be created.
17524a0682cSRuslan ErmilovThis has obvious ramifications for setuid or setgid programs,
17624a0682cSRuslan Ermilovcomplicating the portable use of these interfaces in such programs.
17724a0682cSRuslan Ermilov.Pp
17824a0682cSRuslan ErmilovThe
17924a0682cSRuslan Ermilov.Fn tmpfile
18024a0682cSRuslan Ermilovinterface should not be used in software expected to be used on other systems
18124a0682cSRuslan Ermilovif there is any possibility that the user does not wish the temporary file to
18224a0682cSRuslan Ermilovbe publicly readable and writable.
18358f0484fSRodney W. Grimes.Sh ERRORS
18458f0484fSRodney W. GrimesThe
18558f0484fSRodney W. Grimes.Fn tmpfile
18658f0484fSRodney W. Grimesfunction
18758f0484fSRodney W. Grimesmay fail and set the global variable
18858f0484fSRodney W. Grimes.Va errno
18958f0484fSRodney W. Grimesfor any of the errors specified for the library functions
19058f0484fSRodney W. Grimes.Xr fdopen 3
19158f0484fSRodney W. Grimesor
19258f0484fSRodney W. Grimes.Xr mkstemp 3 .
19358f0484fSRodney W. Grimes.Pp
19458f0484fSRodney W. GrimesThe
19558f0484fSRodney W. Grimes.Fn tmpnam
19658f0484fSRodney W. Grimesfunction
19758f0484fSRodney W. Grimesmay fail and set
19858f0484fSRodney W. Grimes.Va errno
19958f0484fSRodney W. Grimesfor any of the errors specified for the library function
20058f0484fSRodney W. Grimes.Xr mktemp 3 .
20158f0484fSRodney W. Grimes.Pp
20258f0484fSRodney W. GrimesThe
20358f0484fSRodney W. Grimes.Fn tempnam
20458f0484fSRodney W. Grimesfunction
20558f0484fSRodney W. Grimesmay fail and set
20658f0484fSRodney W. Grimes.Va errno
20758f0484fSRodney W. Grimesfor any of the errors specified for the library functions
20858f0484fSRodney W. Grimes.Xr malloc 3
20958f0484fSRodney W. Grimesor
21058f0484fSRodney W. Grimes.Xr mktemp 3 .
211e125c135SChris Costello.Sh SECURITY CONSIDERATIONS
212e125c135SChris CostelloThe
213e125c135SChris Costello.Fn tmpnam
214e125c135SChris Costelloand
215e125c135SChris Costello.Fn tempnam
2166ba681a1SChris Costellofunctions are susceptible to a race condition
21714243126SMike Pritchardoccurring between the selection of the file name
2186ba681a1SChris Costelloand the creation of the file,
219e125c135SChris Costellowhich allows malicious users
220e125c135SChris Costelloto potentially overwrite arbitrary files in the system,
221e125c135SChris Costellodepending on the level of privilege of the running program.
2226ba681a1SChris CostelloAdditionally, there is no means by which
2236ba681a1SChris Costellofile permissions may be specified.
224e125c135SChris CostelloIt is strongly suggested that
225e125c135SChris Costello.Xr mkstemp 3
226e125c135SChris Costellobe used in place of these functions.
227e125c135SChris Costello(See
228e125c135SChris Costellothe FSA.)
22958f0484fSRodney W. Grimes.Sh SEE ALSO
23058f0484fSRodney W. Grimes.Xr mkstemp 3 ,
23158f0484fSRodney W. Grimes.Xr mktemp 3
232e125c135SChris Costello.Rs
233e125c135SChris Costello.%T "The FreeBSD Security Architecture"
234e125c135SChris Costello.Re
235ce9df6eeSRuslan Ermilov(See
236ce9df6eeSRuslan Ermilov.Pa "/usr/share/doc/{to be determined}" . )
23758f0484fSRodney W. Grimes.Sh STANDARDS
23858f0484fSRodney W. GrimesThe
23958f0484fSRodney W. Grimes.Fn tmpfile
24058f0484fSRodney W. Grimesand
24158f0484fSRodney W. Grimes.Fn tmpnam
24258f0484fSRodney W. Grimesfunctions
24358f0484fSRodney W. Grimesconform to
244588a200cSRuslan Ermilov.St -isoC .
245