On Thursday 20 September 2012 13:31:55 Ron Yorston wrote:
> With the -u option mktemp uses tempnam to generate the temporary file
> name. This mostly works as required, but the TMPDIR environment variable
> trumps any path supplied to tempnam. If TMPDIR is set unexpected behaviour
> ensues:
>
> $ mktemp -u temp.XXXXXX
> temp.4qYDxk
> $ mktemp -u -t temp.XXXXXX
> /tmp/temp.8gP6Pq
> $ export TMPDIR=/tmp
> $ mktemp -u temp.XXXXXX
> mp/temp.BuEBHM
>
> Signed-off-by: Ron Yorston <[email protected]>
> ---
> debianutils/mktemp.c | 1 +
> 1 files changed, 1 insertions(+), 0 deletions(-)
>
> diff --git a/debianutils/mktemp.c b/debianutils/mktemp.c
> index dbe4309..b6833af 100644
> --- a/debianutils/mktemp.c
> +++ b/debianutils/mktemp.c
> @@ -91,6 +91,7 @@ int mktemp_main(int argc UNUSED_PARAM, char **argv)
> while (--cnt >= 0 && chp[--len] == 'X')
> chp[len] = '\0';
>
> + unsetenv("TMPDIR");
> chp = tempnam(opts & (OPT_t|OPT_p) ? path : "./", chp);
> if (!chp)
> return EXIT_FAILURE;
>
Hi,
a cleaner fix without unsetting env vars could be:
--- debianutils/mktemp.c.original 2012-09-20 15:32:32.000000000 +0200
+++ debianutils/mktemp.c 2012-09-20 15:34:47.000000000 +0200
@@ -95,7 +95,7 @@
if (!chp)
return EXIT_FAILURE;
if (!(opts & (OPT_t|OPT_p)))
- chp += 2;
+ chp = bb_get_last_path_component_strip(chp);
goto ret;
}
This seems to work for me as expected eventually needs more testing.
Ciao,
Tito
Fix ./busybox mktemp -u temp.XXXXXX
returning garbage: mp/temp.ddTkNr
when TMPDIR env var is set.
Signed-off by Tito Ragusa <[email protected]>
--- debianutils/mktemp.c.original 2012-09-20 15:32:32.000000000 +0200
+++ debianutils/mktemp.c 2012-09-20 15:34:47.000000000 +0200
@@ -95,7 +95,7 @@
if (!chp)
return EXIT_FAILURE;
if (!(opts & (OPT_t|OPT_p)))
- chp += 2;
+ chp = bb_get_last_path_component_strip(chp);
goto ret;
}
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox