mktemp.3 (252838) | mktemp.3 (254151) |
---|---|
1.\" Copyright (c) 1989, 1991, 1993 2.\" The Regents of the University of California. All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. --- 12 unchanged lines hidden (view full) --- 21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26.\" SUCH DAMAGE. 27.\" 28.\" @(#)mktemp.3 8.1 (Berkeley) 6/4/93 | 1.\" Copyright (c) 1989, 1991, 1993 2.\" The Regents of the University of California. All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. --- 12 unchanged lines hidden (view full) --- 21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26.\" SUCH DAMAGE. 27.\" 28.\" @(#)mktemp.3 8.1 (Berkeley) 6/4/93 |
29.\" $FreeBSD: head/lib/libc/stdio/mktemp.3 252838 2013-07-05 20:24:50Z jilles $ | 29.\" $FreeBSD: head/lib/libc/stdio/mktemp.3 254151 2013-08-09 17:24:23Z jilles $ |
30.\" | 30.\" |
31.Dd July 5, 2013 | 31.Dd August 8, 2013 |
32.Dt MKTEMP 3 33.Os 34.Sh NAME 35.Nm mktemp 36.Nd make temporary file name (unique) 37.Sh LIBRARY 38.Lb libc 39.Sh SYNOPSIS 40.In stdlib.h 41.Ft char * 42.Fn mktemp "char *template" 43.Ft int 44.Fn mkstemp "char *template" | 32.Dt MKTEMP 3 33.Os 34.Sh NAME 35.Nm mktemp 36.Nd make temporary file name (unique) 37.Sh LIBRARY 38.Lb libc 39.Sh SYNOPSIS 40.In stdlib.h 41.Ft char * 42.Fn mktemp "char *template" 43.Ft int 44.Fn mkstemp "char *template" |
45.Ft int 46.Fn mkostemp "char *template" "int oflags" 47.Ft int 48.Fn mkostemps "char *template" "int suffixlen" "int oflags" |
|
45.Ft char * 46.Fn mkdtemp "char *template" 47.In unistd.h 48.Ft int 49.Fn mkstemps "char *template" "int suffixlen" 50.Sh DESCRIPTION 51The 52.Fn mktemp --- 27 unchanged lines hidden (view full) --- 80.Fn mkstemp 81function 82makes the same replacement to the template and creates the template file, 83mode 0600, returning a file descriptor opened for reading and writing. 84This avoids the race between testing for a file's existence and opening it 85for use. 86.Pp 87The | 49.Ft char * 50.Fn mkdtemp "char *template" 51.In unistd.h 52.Ft int 53.Fn mkstemps "char *template" "int suffixlen" 54.Sh DESCRIPTION 55The 56.Fn mktemp --- 27 unchanged lines hidden (view full) --- 84.Fn mkstemp 85function 86makes the same replacement to the template and creates the template file, 87mode 0600, returning a file descriptor opened for reading and writing. 88This avoids the race between testing for a file's existence and opening it 89for use. 90.Pp 91The |
92.Fn mkostemp 93function 94is like 95.Fn mkstemp 96but allows specifying additional 97.Xr open 2 98flags (defined in 99.In fcntl.h ) . 100The permitted flags are 101.Dv O_APPEND , 102.Dv O_DIRECT , 103.Dv O_SHLOCK , 104.Dv O_EXLOCK , 105.Dv O_SYNC 106and 107.Dv O_CLOEXEC . 108.Pp 109The |
|
88.Fn mkstemps | 110.Fn mkstemps |
89function acts the same as 90.Fn mkstemp , 91except it permits a suffix to exist in the template. | 111and 112.Fn mkostemps 113functions act the same as 114.Fn mkstemp 115and 116.Fn mkostemp 117respectively, 118except they permit a suffix to exist in the template. |
92The template should be of the form 93.Pa /tmp/tmpXXXXXXsuffix . 94The 95.Fn mkstemps | 119The template should be of the form 120.Pa /tmp/tmpXXXXXXsuffix . 121The 122.Fn mkstemps |
123and 124.Fn mkostemps |
|
96function | 125function |
97is told the length of the suffix string. | 126are told the length of the suffix string. |
98.Pp 99The 100.Fn mkdtemp 101function makes the same replacement to the template as in 102.Fn mktemp 103and creates the template directory, mode 0700. 104.Sh RETURN VALUES 105The 106.Fn mktemp 107and 108.Fn mkdtemp 109functions return a pointer to the template on success and 110.Dv NULL 111on failure. 112The | 127.Pp 128The 129.Fn mkdtemp 130function makes the same replacement to the template as in 131.Fn mktemp 132and creates the template directory, mode 0700. 133.Sh RETURN VALUES 134The 135.Fn mktemp 136and 137.Fn mkdtemp 138functions return a pointer to the template on success and 139.Dv NULL 140on failure. 141The |
113.Fn mkstemp 114and | 142.Fn mkstemp , 143.Fn mkostemp |
115.Fn mkstemps | 144.Fn mkstemps |
145and 146.Fn mkostemps |
|
116functions 117return \-1 if no suitable file could be created. 118If either call fails an error code is placed in the global variable 119.Va errno . 120.Sh ERRORS 121The 122.Fn mkstemp , | 147functions 148return \-1 if no suitable file could be created. 149If either call fails an error code is placed in the global variable 150.Va errno . 151.Sh ERRORS 152The 153.Fn mkstemp , |
123.Fn mkstemps | 154.Fn mkostemp , 155.Fn mkstemps , 156.Fn mkostemps |
124and 125.Fn mkdtemp 126functions 127may set 128.Va errno 129to one of the following values: 130.Bl -tag -width Er 131.It Bq Er ENOTDIR 132The pathname portion of the template is not an existing directory. 133.El 134.Pp 135The | 157and 158.Fn mkdtemp 159functions 160may set 161.Va errno 162to one of the following values: 163.Bl -tag -width Er 164.It Bq Er ENOTDIR 165The pathname portion of the template is not an existing directory. 166.El 167.Pp 168The |
169.Fn mkostemp 170and 171.Fn mkostemps 172functions 173may also set 174.Va errno 175to the following value: 176.Bl -tag -width Er 177.It Bq Er EINVAL 178The 179.Fa oflags 180argument is invalid. 181.El 182.Pp 183The |
|
136.Fn mkstemp , | 184.Fn mkstemp , |
137.Fn mkstemps | 185.Fn mkostemp , 186.Fn mkstemps , 187.Fn mkostemps |
138and 139.Fn mkdtemp 140functions 141may also set 142.Va errno 143to any value specified by the 144.Xr stat 2 145function. 146.Pp 147The | 188and 189.Fn mkdtemp 190functions 191may also set 192.Va errno 193to any value specified by the 194.Xr stat 2 195function. 196.Pp 197The |
148.Fn mkstemp 149and | 198.Fn mkstemp , 199.Fn mkostemp , |
150.Fn mkstemps | 200.Fn mkstemps |
201and 202.Fn mkostemps |
|
151functions 152may also set 153.Va errno 154to any value specified by the 155.Xr open 2 156function. 157.Pp 158The --- 45 unchanged lines hidden (view full) --- 204.St -p1003.1-2008 . 205The 206.Fn mktemp 207function is expected to conform to 208.St -p1003.1-2001 209and is not specified by 210.St -p1003.1-2008 . 211The | 203functions 204may also set 205.Va errno 206to any value specified by the 207.Xr open 2 208function. 209.Pp 210The --- 45 unchanged lines hidden (view full) --- 256.St -p1003.1-2008 . 257The 258.Fn mktemp 259function is expected to conform to 260.St -p1003.1-2001 261and is not specified by 262.St -p1003.1-2008 . 263The |
264.Fn mkostemp , |
|
212.Fn mkstemps | 265.Fn mkstemps |
213function does not conform to any standard. | 266and 267.Fn mkostemps 268functions do not conform to any standard. |
214.Sh HISTORY 215A 216.Fn mktemp 217function appeared in 218.At v7 . 219The 220.Fn mkstemp 221function appeared in --- 5 unchanged lines hidden (view full) --- 227and later in 228.Fx 3.2 . 229The 230.Fn mkstemps 231function first appeared in 232.Ox 2.4 , 233and later in 234.Fx 3.4 . | 269.Sh HISTORY 270A 271.Fn mktemp 272function appeared in 273.At v7 . 274The 275.Fn mkstemp 276function appeared in --- 5 unchanged lines hidden (view full) --- 282and later in 283.Fx 3.2 . 284The 285.Fn mkstemps 286function first appeared in 287.Ox 2.4 , 288and later in 289.Fx 3.4 . |
290The 291.Fn mkostemp 292and 293.Fn mkostemps 294functions appeared in 295.Fx 10.0 . |
|
235.Sh BUGS 236This family of functions produces filenames which can be guessed, 237though the risk is minimized when large numbers of 238.Ql X Ns s 239are used to 240increase the number of possible temporary filenames. 241This makes the race in 242.Fn mktemp , 243between testing for a file's existence (in the 244.Fn mktemp 245function call) 246and opening it for use 247(later in the user application) 248particularly dangerous from a security perspective. 249Whenever it is possible, 250.Fn mkstemp | 296.Sh BUGS 297This family of functions produces filenames which can be guessed, 298though the risk is minimized when large numbers of 299.Ql X Ns s 300are used to 301increase the number of possible temporary filenames. 302This makes the race in 303.Fn mktemp , 304between testing for a file's existence (in the 305.Fn mktemp 306function call) 307and opening it for use 308(later in the user application) 309particularly dangerous from a security perspective. 310Whenever it is possible, 311.Fn mkstemp |
312or 313.Fn mkostemp |
|
251should be used instead, since it does not have the race condition. 252If 253.Fn mkstemp 254cannot be used, the filename created by 255.Fn mktemp 256should be created using the 257.Dv O_EXCL 258flag to 259.Xr open 2 260and the return status of the call should be tested for failure. 261This will ensure that the program does not continue blindly 262in the event that an attacker has already created the file 263with the intention of manipulating or reading its contents. | 314should be used instead, since it does not have the race condition. 315If 316.Fn mkstemp 317cannot be used, the filename created by 318.Fn mktemp 319should be created using the 320.Dv O_EXCL 321flag to 322.Xr open 2 323and the return status of the call should be tested for failure. 324This will ensure that the program does not continue blindly 325in the event that an attacker has already created the file 326with the intention of manipulating or reading its contents. |