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
>