xref: /freebsd/lib/libc/stdio/tmpnam.3 (revision dc36d6f9bb1753f3808552f3afd30eda9a7b206a)
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.
16fbbd9655SWarner 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.\"
32*1f325602SGordon Bergling.Dd August 7, 2020
3358f0484fSRodney W. Grimes.Dt TMPFILE 3
3458f0484fSRodney W. Grimes.Os
3558f0484fSRodney W. Grimes.Sh NAME
3658f0484fSRodney W. Grimes.Nm tempnam ,
3758f0484fSRodney W. Grimes.Nm tmpfile ,
3858f0484fSRodney W. Grimes.Nm tmpnam
3958f0484fSRodney W. Grimes.Nd temporary file routines
4025bb73e0SAlexey Zelkin.Sh LIBRARY
4125bb73e0SAlexey Zelkin.Lb libc
4258f0484fSRodney W. Grimes.Sh SYNOPSIS
4332eef9aeSRuslan Ermilov.In stdio.h
4458f0484fSRodney W. Grimes.Ft FILE *
4558f0484fSRodney W. Grimes.Fn tmpfile void
4658f0484fSRodney W. Grimes.Ft char *
4758f0484fSRodney W. Grimes.Fn tmpnam "char *str"
4858f0484fSRodney W. Grimes.Ft char *
4958f0484fSRodney W. Grimes.Fn tempnam "const char *tmpdir" "const char *prefix"
5058f0484fSRodney W. Grimes.Sh DESCRIPTION
5158f0484fSRodney W. GrimesThe
5258f0484fSRodney W. Grimes.Fn tmpfile
5358f0484fSRodney W. Grimesfunction
5458f0484fSRodney W. Grimesreturns a pointer to a stream associated with a file descriptor returned
5558f0484fSRodney W. Grimesby the routine
5658f0484fSRodney W. Grimes.Xr mkstemp 3 .
5758f0484fSRodney W. GrimesThe created file is unlinked before
5858f0484fSRodney W. Grimes.Fn tmpfile
5958f0484fSRodney W. Grimesreturns, causing the file to be automatically deleted when the last
6058f0484fSRodney W. Grimesreference to it is closed.
6158f0484fSRodney W. GrimesThe file is opened with the access value
6258f0484fSRodney W. Grimes.Ql w+ .
630bada860SMike HeffnerThe file is created in the directory determined by the environment variable
640bada860SMike Heffner.Ev TMPDIR
650bada860SMike Heffnerif set.
660bada860SMike HeffnerThe default location if
670bada860SMike Heffner.Ev TMPDIR
680bada860SMike Heffneris not set is
690bada860SMike Heffner.Pa /tmp .
7058f0484fSRodney W. Grimes.Pp
7158f0484fSRodney W. GrimesThe
7258f0484fSRodney W. Grimes.Fn tmpnam
7358f0484fSRodney W. Grimesfunction
7458f0484fSRodney W. Grimesreturns a pointer to a file name, in the
7558f0484fSRodney W. Grimes.Dv P_tmpdir
7658f0484fSRodney W. Grimesdirectory, which
7758f0484fSRodney W. Grimesdid not reference an existing file at some indeterminate point in the
7858f0484fSRodney W. Grimespast.
7958f0484fSRodney W. Grimes.Dv P_tmpdir
8058f0484fSRodney W. Grimesis defined in the include file
81fe08efe6SRuslan Ermilov.In stdio.h .
8258f0484fSRodney W. GrimesIf the argument
833076db19SKris Kennaway.Fa str
8458f0484fSRodney W. Grimesis
8558f0484fSRodney W. Grimes.Pf non- Dv NULL ,
8658f0484fSRodney W. Grimesthe file name is copied to the buffer it references.
8758f0484fSRodney W. GrimesOtherwise, the file name is copied to a static buffer.
8858f0484fSRodney W. GrimesIn either case,
8958f0484fSRodney W. Grimes.Fn tmpnam
9058f0484fSRodney W. Grimesreturns a pointer to the file name.
9158f0484fSRodney W. Grimes.Pp
9258f0484fSRodney W. GrimesThe buffer referenced by
933076db19SKris Kennaway.Fa str
9458f0484fSRodney W. Grimesis expected to be at least
9558f0484fSRodney W. Grimes.Dv L_tmpnam
9658f0484fSRodney W. Grimesbytes in length.
9758f0484fSRodney W. Grimes.Dv L_tmpnam
9858f0484fSRodney W. Grimesis defined in the include file
99fe08efe6SRuslan Ermilov.In stdio.h .
10058f0484fSRodney W. Grimes.Pp
10158f0484fSRodney W. GrimesThe
10258f0484fSRodney W. Grimes.Fn tempnam
10358f0484fSRodney W. Grimesfunction
10458f0484fSRodney W. Grimesis similar to
10558f0484fSRodney W. Grimes.Fn tmpnam ,
10658f0484fSRodney W. Grimesbut provides the ability to specify the directory which will
10758f0484fSRodney W. Grimescontain the temporary file and the file name prefix.
10858f0484fSRodney W. Grimes.Pp
10958f0484fSRodney W. GrimesThe environment variable
11058f0484fSRodney W. Grimes.Ev TMPDIR
11158f0484fSRodney W. Grimes(if set), the argument
11258f0484fSRodney W. Grimes.Fa tmpdir
11358f0484fSRodney W. Grimes(if
11458f0484fSRodney W. Grimes.Pf non- Dv NULL ) ,
11558f0484fSRodney W. Grimesthe directory
11658f0484fSRodney W. Grimes.Dv P_tmpdir ,
11758f0484fSRodney W. Grimesand the directory
11858f0484fSRodney W. Grimes.Pa /tmp
11958f0484fSRodney W. Grimesare tried, in the listed order, as directories in which to store the
12058f0484fSRodney W. Grimestemporary file.
12158f0484fSRodney W. Grimes.Pp
12258f0484fSRodney W. GrimesThe argument
12358f0484fSRodney W. Grimes.Fa prefix ,
12458f0484fSRodney W. Grimesif
12558f0484fSRodney W. Grimes.Pf non- Dv NULL ,
12658f0484fSRodney W. Grimesis used to specify a file name prefix, which will be the
12758f0484fSRodney W. Grimesfirst part of the created file name.
1281fae73b1SRuslan ErmilovThe
1291fae73b1SRuslan Ermilov.Fn tempnam
1301fae73b1SRuslan Ermilovfunction
13158f0484fSRodney W. Grimesallocates memory in which to store the file name; the returned pointer
13258f0484fSRodney W. Grimesmay be used as a subsequent argument to
13358f0484fSRodney W. Grimes.Xr free 3 .
13458f0484fSRodney W. Grimes.Sh RETURN VALUES
13558f0484fSRodney W. GrimesThe
13658f0484fSRodney W. Grimes.Fn tmpfile
13758f0484fSRodney W. Grimesfunction
13858f0484fSRodney W. Grimesreturns a pointer to an open file stream on success, and a
13958f0484fSRodney W. Grimes.Dv NULL
14058f0484fSRodney W. Grimespointer
14158f0484fSRodney W. Grimeson error.
14258f0484fSRodney W. Grimes.Pp
14358f0484fSRodney W. GrimesThe
14458f0484fSRodney W. Grimes.Fn tmpnam
14558f0484fSRodney W. Grimesand
14658f0484fSRodney W. Grimes.Fn tempfile
14758f0484fSRodney W. Grimesfunctions
14858f0484fSRodney W. Grimesreturn a pointer to a file name on success, and a
14958f0484fSRodney W. Grimes.Dv NULL
15058f0484fSRodney W. Grimespointer
15158f0484fSRodney W. Grimeson error.
152a0490929SMaxim Konovalov.Sh ENVIRONMENT
153a0490929SMaxim Konovalov.Bl -tag -width Ds
154a0490929SMaxim Konovalov.It Ev TMPDIR
155a0490929SMaxim Konovalov.Pf [ Fn tempnam
156*1f325602SGordon Berglingand
157*1f325602SGordon Bergling.Fn tmpfile
158a0490929SMaxim Konovalovonly]
159a0490929SMaxim KonovalovIf set,
160a0490929SMaxim Konovalovthe directory in which the temporary file is stored.
161a0490929SMaxim Konovalov.Ev TMPDIR
162a0490929SMaxim Konovalovis ignored for processes
163a0490929SMaxim Konovalovfor which
164a0490929SMaxim Konovalov.Xr issetugid 2
165a0490929SMaxim Konovalovis true.
166a0490929SMaxim Konovalov.El
16724a0682cSRuslan Ermilov.Sh COMPATIBILITY
16824a0682cSRuslan ErmilovThese interfaces are provided from System V and
16924a0682cSRuslan Ermilov.Tn ANSI
17024a0682cSRuslan Ermilovcompatibility only.
17124a0682cSRuslan Ermilov.Pp
17224a0682cSRuslan ErmilovMost historic implementations of these functions provide
17324a0682cSRuslan Ermilovonly a limited number of possible temporary file names
17424a0682cSRuslan Ermilov(usually 26)
17524a0682cSRuslan Ermilovbefore file names will start being recycled.
17624a0682cSRuslan ErmilovSystem V implementations of these functions
17724a0682cSRuslan Ermilov(and of
17824a0682cSRuslan Ermilov.Xr mktemp 3 )
17924a0682cSRuslan Ermilovuse the
18024a0682cSRuslan Ermilov.Xr access 2
18124a0682cSRuslan Ermilovsystem call to determine whether or not the temporary file
18224a0682cSRuslan Ermilovmay be created.
18324a0682cSRuslan ErmilovThis has obvious ramifications for setuid or setgid programs,
18424a0682cSRuslan Ermilovcomplicating the portable use of these interfaces in such programs.
18524a0682cSRuslan Ermilov.Pp
18624a0682cSRuslan ErmilovThe
18724a0682cSRuslan Ermilov.Fn tmpfile
18824a0682cSRuslan Ermilovinterface should not be used in software expected to be used on other systems
18924a0682cSRuslan Ermilovif there is any possibility that the user does not wish the temporary file to
19024a0682cSRuslan Ermilovbe publicly readable and writable.
19158f0484fSRodney W. Grimes.Sh ERRORS
19258f0484fSRodney W. GrimesThe
19358f0484fSRodney W. Grimes.Fn tmpfile
19458f0484fSRodney W. Grimesfunction
19558f0484fSRodney W. Grimesmay fail and set the global variable
19658f0484fSRodney W. Grimes.Va errno
19758f0484fSRodney W. Grimesfor any of the errors specified for the library functions
19858f0484fSRodney W. Grimes.Xr fdopen 3
19958f0484fSRodney W. Grimesor
20058f0484fSRodney W. Grimes.Xr mkstemp 3 .
20158f0484fSRodney W. Grimes.Pp
20258f0484fSRodney W. GrimesThe
20358f0484fSRodney W. Grimes.Fn tmpnam
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 function
20858f0484fSRodney W. Grimes.Xr mktemp 3 .
20958f0484fSRodney W. Grimes.Pp
21058f0484fSRodney W. GrimesThe
21158f0484fSRodney W. Grimes.Fn tempnam
21258f0484fSRodney W. Grimesfunction
21358f0484fSRodney W. Grimesmay fail and set
21458f0484fSRodney W. Grimes.Va errno
21558f0484fSRodney W. Grimesfor any of the errors specified for the library functions
21658f0484fSRodney W. Grimes.Xr malloc 3
21758f0484fSRodney W. Grimesor
21858f0484fSRodney W. Grimes.Xr mktemp 3 .
2190afc94c1SUlrich Spörlein.Sh SEE ALSO
2200afc94c1SUlrich Spörlein.Xr mkstemp 3 ,
2210afc94c1SUlrich Spörlein.Xr mktemp 3
2220afc94c1SUlrich Spörlein.Sh STANDARDS
2230afc94c1SUlrich SpörleinThe
2240afc94c1SUlrich Spörlein.Fn tmpfile
2250afc94c1SUlrich Spörleinand
2260afc94c1SUlrich Spörlein.Fn tmpnam
2270afc94c1SUlrich Spörleinfunctions
2280afc94c1SUlrich Spörleinconform to
2290afc94c1SUlrich Spörlein.St -isoC .
230e125c135SChris Costello.Sh SECURITY CONSIDERATIONS
231e125c135SChris CostelloThe
232e125c135SChris Costello.Fn tmpnam
233e125c135SChris Costelloand
234e125c135SChris Costello.Fn tempnam
2356ba681a1SChris Costellofunctions are susceptible to a race condition
23614243126SMike Pritchardoccurring between the selection of the file name
2376ba681a1SChris Costelloand the creation of the file,
238e125c135SChris Costellowhich allows malicious users
239e125c135SChris Costelloto potentially overwrite arbitrary files in the system,
240e125c135SChris Costellodepending on the level of privilege of the running program.
2416ba681a1SChris CostelloAdditionally, there is no means by which
2426ba681a1SChris Costellofile permissions may be specified.
243e125c135SChris CostelloIt is strongly suggested that
244e125c135SChris Costello.Xr mkstemp 3
245e125c135SChris Costellobe used in place of these functions.
246