NAME
mmkktteemmpp - make temporary file name (unique)
SYNOPSIS
mmkktteemmpp [-dd] [-qq] [-tt prefix] [-uu] template ...
mmkktteemmpp [-dd] [-qq] [-uu] -tt prefix
DESCRIPTION
The mmkktteemmpp utility takes each of the given file name templates and over-
writes a portion of it to create a file name. This file name is unique and suitable for use by the application. The template may be any file name with some number of `Xs' appended to it, for example /tmp/temp.XXXX. The trailing `Xs' are replaced with the current process number and/or a unique letter combination. The number of unique file names mmkktteemmpp can return depends on the number of `Xs' provided; six `Xs' will result in mmkktteemmpp testing roughly 26 ** 6 combinations.If mmkktteemmpp can successfully generate a unique file name, the file is cre-
ated with mode 0600 (unless the -uu flag is given) and the filename is
printed to standard output.If the -tt prefix option is given, mmkktteemmpp will generate an template string
based on the prefix and the TMPDIR environment variable if set. The default location if TMPDIR is not set is /tmp. Care should be taken to ensure that it is appropriate to use an environment variable potentially supplied by the user. Any number of temporary files may be created in a single invocation,including one based on the internal template resulting from the -tt flag.
MMkktteemmpp is provided to allow shell scripts to safely use temporary files. Traditionally, many shell scripts take the name of the program with thepid as a suffix and use that as a temporary file name. This kind of nam-
ing scheme is predictable and the race condition it creates is easy for an attacker to win. A safer, though still inferior, approach is to make a temporary directory using the same naming scheme. While this does allow one to guarantee that a temporary file will not be subverted, it still allows a simple denial of service attack. For these reasons it is suggested that mmkktteemmpp be used instead. OOPPTTIIOONNSS The available options are as follows:-dd Make a directory instead of a file.
-qq Fail silently if an error occurs. This is useful if a script
does not want error output to go to standard error.-tt prefix
Generate a template (using the supplied prefix and TMPDIR if set) to create a filename template.-uu Operate in ``unsafe'' mode. The temp file will be unlinked
before mmkktteemmpp exits. This is slightly better than mktemp(3) but
still introduces a race condition. Use of this option is not encouraged. DIAGNOSTICS The mmkktteemmpp utility exits 0 on success, and 1 if an error occurs. EEXXAAMMPPLLEESS The following sh(1) fragment illustrates a simple use of mmkktteemmpp where the script should quit if it cannot get a safe temporary file.tempfoo=`basename $0`
TMPFILE=`mktemp /tmp/${tempfoo}.XXXXXX` || exit 1
echo "program output" >> $TMPFILE
To allow the use of $TMPDIR:
tempfoo=`basename $0`
TMPFILE=`mktemp -t ${tempfoo}` || exit 1
echo "program output" >> $TMPFILE
In this case, we want the script to catch the error itself.tempfoo=`basename $0`
TMPFILE=`mktemp -q /tmp/${tempfoo}.XXXXXX`
if [ $? -ne 0 ]; then
echo "$0: Can't create temp file, exiting..."
exit 1 fiSEE ALSO
mkdtemp(3), mkstemp(3), mktemp(3), environ(7)
HISTORYA mmkktteemmpp utility appeared in OpenBSD 2.1. This implementation was writ-
ten independently based on the OpenBSD man page, and first appeared in FreeBSD 2.2.7. This man page is taken from OpenBSD BSD November 20, 1996 BSD