Subject: Re: touch(1) enchancement, mkstemp(1) (fwd)
To: None <tech-security@NetBSD.ORG>
From: Darren Reed <darrenr@cyber.com.au>
List: tech-security
Date: 02/10/1998 22:10:45
I'm informed by Theo that OpenBSD has a mktemp(1) which does
what I was suggesting anyway. Any reason we shouldn't just
import this rather than roll our own ?
In some mail I received from Theo de Raadt, sie wrote
> From deraadt@cvs.openbsd.org Tue Feb 10 19:35:26 1998
> Message-Id: <199802100830.BAA12179@cvs.openbsd.org>
> To: Darren Reed <darrenr@cyber.com.au>
> Subject: Re: touch(1) enchancement, mkstemp(1)
> In-reply-to: Your message of "Tue, 10 Feb 1998 18:51:52 +1100."
> <199802100751.SAA07950@soy.cyber.com.au>
> Date: Tue, 10 Feb 1998 01:30:14 -0700
> From: Theo de Raadt <deraadt@cvs.openbsd.org>
>
> > I'd also like to propose that a command line interface to mkstemp(3)
> > be implemented. It would work something like this:
> >
> > prog=`basename $0`
> > tmpfile=`mkstemp /tmp/${prog}.XXXXXX`
> >
> > where tmpfile is the resulting filename (i.e. X's are changed to
> > something else). mkstemp(1) would return 0 on success and 1 if
> > it failed to create a file.
>
> There's no need for a new and different interface. This has been in
> OpenBSD for almost a year.
> ----
>
> NAME
> mktemp - make temporary file name (unique)
>
> SYNOPSIS
> mktemp [-d] [-q] [-u] template
>
> DESCRIPTION
> The mktemp utility takes the given file name template and overwrites a
> portion of it to create a file name. This file name is unique and suit-
> able 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 mktemp can
> return depends on the number of `Xs' provided; six `Xs' will result in
> mktemp testing roughly 26 ** 6 combinations.
>
> If mktemp can successfully generate a unique file name, the file is cre-
> ated with mode 0600 (unless the -u flag is given) and the filename is
> printed to standard output.
>
> OPTIONS
> The available options are as follows:
>
> -d Make a directory instead of a file.
>
> -q Fail silently if an error occurs. This is useful if a script
> does not want error output to go to standard error.
>
> -u Operate in ``unsafe'' mode. The temp file will be unlinked be-
> fore mktemp exits. This is slightly better than mktemp(3) but
> still introduces a race condition. Use of this option is not en-
> couraged.
>
> RETURN VALUES
> The mktemp utility exits with a value of 0 on success, and 1 on failure.
>
> EXAMPLES
> The following sh(1) fragment illustrates a simple use of mktemp where the
> script should quit if it cannot get a safe temporary file.
>
> TMPFILE=`mktemp /tmp/$0.XXXXXX` || exit 1
> echo "program output" >> $TMPFILE
>
> In this case, we want the script to catch the error itself.
>
> TMPFILE=`mktemp -q /tmp/$0.XXXXXX`
> if [ $? -ne 0 ]; then
> echo "$0: Can't create temp file, exiting..."
> exit 1
> fi
>
> Note that one can also check to see that $TMPFILE is zero length instead
> of checking $?. This would allow the check to be done later one in the
> script (since $? would get clobbered by the next shell command).
>
> SEE ALSO
> mkstemp(3), mktemp(3)
>
> HISTORY
> The mktemp utility appeared in OpenBSD.
>
> OpenBSD 2.2 November, 20, 1996 1
>