xref: /freebsd/lib/libc/stdio/tmpnam.3 (revision fbbd9655e5107c68e4e0146ff22b73d7350475bc)
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.
16*fbbd9655SWarner Losh.\" 3. Neither the name of the University nor the names of its contributors
1758f0484fSRodney W. Grimes.\"    may be used to endorse or promote products derived from this software
1858f0484fSRodney W. Grimes.\"    without specific prior written permission.
1958f0484fSRodney W. Grimes.\"
2058f0484fSRodney W. Grimes.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2158f0484fSRodney W. Grimes.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2258f0484fSRodney W. Grimes.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2358f0484fSRodney W. Grimes.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2458f0484fSRodney W. Grimes.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2558f0484fSRodney W. Grimes.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2658f0484fSRodney W. Grimes.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2758f0484fSRodney W. Grimes.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2858f0484fSRodney W. Grimes.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2958f0484fSRodney W. Grimes.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3058f0484fSRodney W. Grimes.\" SUCH DAMAGE.
3158f0484fSRodney W. Grimes.\"
3258f0484fSRodney W. Grimes.\"     @(#)tmpnam.3	8.2 (Berkeley) 11/17/93
337f3dea24SPeter Wemm.\" $FreeBSD$
3458f0484fSRodney W. Grimes.\"
35a0490929SMaxim Konovalov.Dd March 18, 2007
3658f0484fSRodney W. Grimes.Dt TMPFILE 3
3758f0484fSRodney W. Grimes.Os
3858f0484fSRodney W. Grimes.Sh NAME
3958f0484fSRodney W. Grimes.Nm tempnam ,
4058f0484fSRodney W. Grimes.Nm tmpfile ,
4158f0484fSRodney W. Grimes.Nm tmpnam
4258f0484fSRodney W. Grimes.Nd temporary file routines
4325bb73e0SAlexey Zelkin.Sh LIBRARY
4425bb73e0SAlexey Zelkin.Lb libc
4558f0484fSRodney W. Grimes.Sh SYNOPSIS
4632eef9aeSRuslan Ermilov.In stdio.h
4758f0484fSRodney W. Grimes.Ft FILE *
4858f0484fSRodney W. Grimes.Fn tmpfile void
4958f0484fSRodney W. Grimes.Ft char *
5058f0484fSRodney W. Grimes.Fn tmpnam "char *str"
5158f0484fSRodney W. Grimes.Ft char *
5258f0484fSRodney W. Grimes.Fn tempnam "const char *tmpdir" "const char *prefix"
5358f0484fSRodney W. Grimes.Sh DESCRIPTION
5458f0484fSRodney W. GrimesThe
5558f0484fSRodney W. Grimes.Fn tmpfile
5658f0484fSRodney W. Grimesfunction
5758f0484fSRodney W. Grimesreturns a pointer to a stream associated with a file descriptor returned
5858f0484fSRodney W. Grimesby the routine
5958f0484fSRodney W. Grimes.Xr mkstemp 3 .
6058f0484fSRodney W. GrimesThe created file is unlinked before
6158f0484fSRodney W. Grimes.Fn tmpfile
6258f0484fSRodney W. Grimesreturns, causing the file to be automatically deleted when the last
6358f0484fSRodney W. Grimesreference to it is closed.
6458f0484fSRodney W. GrimesThe file is opened with the access value
6558f0484fSRodney W. Grimes.Ql w+ .
660bada860SMike HeffnerThe file is created in the directory determined by the environment variable
670bada860SMike Heffner.Ev TMPDIR
680bada860SMike Heffnerif set.
690bada860SMike HeffnerThe default location if
700bada860SMike Heffner.Ev TMPDIR
710bada860SMike Heffneris not set is
720bada860SMike Heffner.Pa /tmp .
7358f0484fSRodney W. Grimes.Pp
7458f0484fSRodney W. GrimesThe
7558f0484fSRodney W. Grimes.Fn tmpnam
7658f0484fSRodney W. Grimesfunction
7758f0484fSRodney W. Grimesreturns a pointer to a file name, in the
7858f0484fSRodney W. Grimes.Dv P_tmpdir
7958f0484fSRodney W. Grimesdirectory, which
8058f0484fSRodney W. Grimesdid not reference an existing file at some indeterminate point in the
8158f0484fSRodney W. Grimespast.
8258f0484fSRodney W. Grimes.Dv P_tmpdir
8358f0484fSRodney W. Grimesis defined in the include file
84fe08efe6SRuslan Ermilov.In stdio.h .
8558f0484fSRodney W. GrimesIf the argument
863076db19SKris Kennaway.Fa str
8758f0484fSRodney W. Grimesis
8858f0484fSRodney W. Grimes.Pf non- Dv NULL ,
8958f0484fSRodney W. Grimesthe file name is copied to the buffer it references.
9058f0484fSRodney W. GrimesOtherwise, the file name is copied to a static buffer.
9158f0484fSRodney W. GrimesIn either case,
9258f0484fSRodney W. Grimes.Fn tmpnam
9358f0484fSRodney W. Grimesreturns a pointer to the file name.
9458f0484fSRodney W. Grimes.Pp
9558f0484fSRodney W. GrimesThe buffer referenced by
963076db19SKris Kennaway.Fa str
9758f0484fSRodney W. Grimesis expected to be at least
9858f0484fSRodney W. Grimes.Dv L_tmpnam
9958f0484fSRodney W. Grimesbytes in length.
10058f0484fSRodney W. Grimes.Dv L_tmpnam
10158f0484fSRodney W. Grimesis defined in the include file
102fe08efe6SRuslan Ermilov.In stdio.h .
10358f0484fSRodney W. Grimes.Pp
10458f0484fSRodney W. GrimesThe
10558f0484fSRodney W. Grimes.Fn tempnam
10658f0484fSRodney W. Grimesfunction
10758f0484fSRodney W. Grimesis similar to
10858f0484fSRodney W. Grimes.Fn tmpnam ,
10958f0484fSRodney W. Grimesbut provides the ability to specify the directory which will
11058f0484fSRodney W. Grimescontain the temporary file and the file name prefix.
11158f0484fSRodney W. Grimes.Pp
11258f0484fSRodney W. GrimesThe environment variable
11358f0484fSRodney W. Grimes.Ev TMPDIR
11458f0484fSRodney W. Grimes(if set), the argument
11558f0484fSRodney W. Grimes.Fa tmpdir
11658f0484fSRodney W. Grimes(if
11758f0484fSRodney W. Grimes.Pf non- Dv NULL ) ,
11858f0484fSRodney W. Grimesthe directory
11958f0484fSRodney W. Grimes.Dv P_tmpdir ,
12058f0484fSRodney W. Grimesand the directory
12158f0484fSRodney W. Grimes.Pa /tmp
12258f0484fSRodney W. Grimesare tried, in the listed order, as directories in which to store the
12358f0484fSRodney W. Grimestemporary file.
12458f0484fSRodney W. Grimes.Pp
12558f0484fSRodney W. GrimesThe argument
12658f0484fSRodney W. Grimes.Fa prefix ,
12758f0484fSRodney W. Grimesif
12858f0484fSRodney W. Grimes.Pf non- Dv NULL ,
12958f0484fSRodney W. Grimesis used to specify a file name prefix, which will be the
13058f0484fSRodney W. Grimesfirst part of the created file name.
1311fae73b1SRuslan ErmilovThe
1321fae73b1SRuslan Ermilov.Fn tempnam
1331fae73b1SRuslan Ermilovfunction
13458f0484fSRodney W. Grimesallocates memory in which to store the file name; the returned pointer
13558f0484fSRodney W. Grimesmay be used as a subsequent argument to
13658f0484fSRodney W. Grimes.Xr free 3 .
13758f0484fSRodney W. Grimes.Sh RETURN VALUES
13858f0484fSRodney W. GrimesThe
13958f0484fSRodney W. Grimes.Fn tmpfile
14058f0484fSRodney W. Grimesfunction
14158f0484fSRodney W. Grimesreturns a pointer to an open file stream on success, and a
14258f0484fSRodney W. Grimes.Dv NULL
14358f0484fSRodney W. Grimespointer
14458f0484fSRodney W. Grimeson error.
14558f0484fSRodney W. Grimes.Pp
14658f0484fSRodney W. GrimesThe
14758f0484fSRodney W. Grimes.Fn tmpnam
14858f0484fSRodney W. Grimesand
14958f0484fSRodney W. Grimes.Fn tempfile
15058f0484fSRodney W. Grimesfunctions
15158f0484fSRodney W. Grimesreturn a pointer to a file name on success, and a
15258f0484fSRodney W. Grimes.Dv NULL
15358f0484fSRodney W. Grimespointer
15458f0484fSRodney W. Grimeson error.
155a0490929SMaxim Konovalov.Sh ENVIRONMENT
156a0490929SMaxim Konovalov.Bl -tag -width Ds
157a0490929SMaxim Konovalov.It Ev TMPDIR
158a0490929SMaxim Konovalov.Pf [ Fn tempnam
159a0490929SMaxim Konovalovonly]
160a0490929SMaxim KonovalovIf set,
161a0490929SMaxim Konovalovthe directory in which the temporary file is stored.
162a0490929SMaxim Konovalov.Ev TMPDIR
163a0490929SMaxim Konovalovis ignored for processes
164a0490929SMaxim Konovalovfor which
165a0490929SMaxim Konovalov.Xr issetugid 2
166a0490929SMaxim Konovalovis true.
167a0490929SMaxim Konovalov.El
16824a0682cSRuslan Ermilov.Sh COMPATIBILITY
16924a0682cSRuslan ErmilovThese interfaces are provided from System V and
17024a0682cSRuslan Ermilov.Tn ANSI
17124a0682cSRuslan Ermilovcompatibility only.
17224a0682cSRuslan Ermilov.Pp
17324a0682cSRuslan ErmilovMost historic implementations of these functions provide
17424a0682cSRuslan Ermilovonly a limited number of possible temporary file names
17524a0682cSRuslan Ermilov(usually 26)
17624a0682cSRuslan Ermilovbefore file names will start being recycled.
17724a0682cSRuslan ErmilovSystem V implementations of these functions
17824a0682cSRuslan Ermilov(and of
17924a0682cSRuslan Ermilov.Xr mktemp 3 )
18024a0682cSRuslan Ermilovuse the
18124a0682cSRuslan Ermilov.Xr access 2
18224a0682cSRuslan Ermilovsystem call to determine whether or not the temporary file
18324a0682cSRuslan Ermilovmay be created.
18424a0682cSRuslan ErmilovThis has obvious ramifications for setuid or setgid programs,
18524a0682cSRuslan Ermilovcomplicating the portable use of these interfaces in such programs.
18624a0682cSRuslan Ermilov.Pp
18724a0682cSRuslan ErmilovThe
18824a0682cSRuslan Ermilov.Fn tmpfile
18924a0682cSRuslan Ermilovinterface should not be used in software expected to be used on other systems
19024a0682cSRuslan Ermilovif there is any possibility that the user does not wish the temporary file to
19124a0682cSRuslan Ermilovbe publicly readable and writable.
19258f0484fSRodney W. Grimes.Sh ERRORS
19358f0484fSRodney W. GrimesThe
19458f0484fSRodney W. Grimes.Fn tmpfile
19558f0484fSRodney W. Grimesfunction
19658f0484fSRodney W. Grimesmay fail and set the global variable
19758f0484fSRodney W. Grimes.Va errno
19858f0484fSRodney W. Grimesfor any of the errors specified for the library functions
19958f0484fSRodney W. Grimes.Xr fdopen 3
20058f0484fSRodney W. Grimesor
20158f0484fSRodney W. Grimes.Xr mkstemp 3 .
20258f0484fSRodney W. Grimes.Pp
20358f0484fSRodney W. GrimesThe
20458f0484fSRodney W. Grimes.Fn tmpnam
20558f0484fSRodney W. Grimesfunction
20658f0484fSRodney W. Grimesmay fail and set
20758f0484fSRodney W. Grimes.Va errno
20858f0484fSRodney W. Grimesfor any of the errors specified for the library function
20958f0484fSRodney W. Grimes.Xr mktemp 3 .
21058f0484fSRodney W. Grimes.Pp
21158f0484fSRodney W. GrimesThe
21258f0484fSRodney W. Grimes.Fn tempnam
21358f0484fSRodney W. Grimesfunction
21458f0484fSRodney W. Grimesmay fail and set
21558f0484fSRodney W. Grimes.Va errno
21658f0484fSRodney W. Grimesfor any of the errors specified for the library functions
21758f0484fSRodney W. Grimes.Xr malloc 3
21858f0484fSRodney W. Grimesor
21958f0484fSRodney W. Grimes.Xr mktemp 3 .
2200afc94c1SUlrich Spörlein.Sh SEE ALSO
2210afc94c1SUlrich Spörlein.Xr mkstemp 3 ,
2220afc94c1SUlrich Spörlein.Xr mktemp 3
2230afc94c1SUlrich Spörlein.Sh STANDARDS
2240afc94c1SUlrich SpörleinThe
2250afc94c1SUlrich Spörlein.Fn tmpfile
2260afc94c1SUlrich Spörleinand
2270afc94c1SUlrich Spörlein.Fn tmpnam
2280afc94c1SUlrich Spörleinfunctions
2290afc94c1SUlrich Spörleinconform to
2300afc94c1SUlrich Spörlein.St -isoC .
231e125c135SChris Costello.Sh SECURITY CONSIDERATIONS
232e125c135SChris CostelloThe
233e125c135SChris Costello.Fn tmpnam
234e125c135SChris Costelloand
235e125c135SChris Costello.Fn tempnam
2366ba681a1SChris Costellofunctions are susceptible to a race condition
23714243126SMike Pritchardoccurring between the selection of the file name
2386ba681a1SChris Costelloand the creation of the file,
239e125c135SChris Costellowhich allows malicious users
240e125c135SChris Costelloto potentially overwrite arbitrary files in the system,
241e125c135SChris Costellodepending on the level of privilege of the running program.
2426ba681a1SChris CostelloAdditionally, there is no means by which
2436ba681a1SChris Costellofile permissions may be specified.
244e125c135SChris CostelloIt is strongly suggested that
245e125c135SChris Costello.Xr mkstemp 3
246e125c135SChris Costellobe used in place of these functions.
247