BusyBox mktemp uses tempnam to generate filenames with the -u option. tempnam works differently from the mechanism used by coreutils: it pays too much attention to TMPDIR and it only uses the first five characters of the template.
Consider the following commands: mktemp -u temp.XXXXXX mktemp -u -t temp.XXXXXX mktemp -u temp123.XXXXXX mktemp -u t/temp.XXXXXX mktemp -u tmpdir/temp.XXXXXX mktemp -u /var/tmp/temp.XXXXXX coreutils mktemp returns (with TMPDIR unset in the left column and set to /tmp in the right): temp.N5sFF8 temp.szUHKA /tmp/temp.7uPmpr /tmp/temp.EnN3Cb temp123.pCKP0t temp123.mLLGKy t/temp.y1Tr2X t/temp.j91VbW tmpdir/temp.9bHHbd tmpdir/temp.WR2iXj /var/tmp/temp.H6ypnZ /var/tmp/temp.uOWZM5 Original BusyBox mktemp returns: temp.AwvZ1U mp/temp.MjmUfi /tmp/temp.eUYIwR /tmp/temp.yJX2ox temp15ugCZW mp/temp18qPhgB t/temABm01N mp/t/tem6acA5F tmpdivTbGrF mp/tmpdi6aop9L /var/bN6XBU mp//var/6jeTv6 With this patch BusyBox mktemp returns: temp.r0jnvN temp.Fi7Zgh /tmp/temp.2Hi55L /tmp/temp.oQLmgi temp123.rCzPdM temp123.tUqsBg t/temp.21IcyP t/temp.cgeAmg tmpdir/temp.FV5FxO tmpdir/temp.VJW19j /var/tmp/temp.E45xYO /var/tmp/temp.sYHyok Signed-off-by: Ron Yorston <[email protected]> --- debianutils/mktemp.c | 22 ++++++---------------- 1 files changed, 6 insertions(+), 16 deletions(-) diff --git a/debianutils/mktemp.c b/debianutils/mktemp.c index dbe4309..1f3bc9b 100644 --- a/debianutils/mktemp.c +++ b/debianutils/mktemp.c @@ -84,25 +84,15 @@ int mktemp_main(int argc UNUSED_PARAM, char **argv) opts |= OPT_t; } - if (opts & OPT_u) { - /* Remove (up to) 6 X's */ - unsigned len = strlen(chp); - int cnt = len > 6 ? 6 : len; - while (--cnt >= 0 && chp[--len] == 'X') - chp[len] = '\0'; - - chp = tempnam(opts & (OPT_t|OPT_p) ? path : "./", chp); - if (!chp) - return EXIT_FAILURE; - if (!(opts & (OPT_t|OPT_p))) - chp += 2; - goto ret; - } - if (opts & (OPT_t|OPT_p)) chp = concat_path_file(path, chp); - if (opts & OPT_d) { + if (opts & OPT_u) { + chp = mktemp(chp); + if ( chp[0] == '\0' ) + return EXIT_FAILURE; + } + else if (opts & OPT_d) { if (mkdtemp(chp) == NULL) return EXIT_FAILURE; } else { -- 1.7.4.4 _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
