On 2008-08-15 14:42 +0200, Andreas Metzler wrote:

> is there actually a reason for using the PID and for limiting the
> non-pid part to [[A-Za-z]?
>
> Why not
> --------bugs included-----
> --- mktemp-1.5.orig/priv_mktemp.c
> +++ mktemp-1.5/priv_mktemp.c
> @@ -81,25 +81,20 @@
>       register char *start, *trv;
>       struct stat sbuf;
>       int pid, rval;
> -     char *alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
> +     char *alphabet = 
> "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-=%#_";
>  
>       if (doopen && domkdir) {
>               errno = EINVAL;
>               return(0);
>       }
>  
> -     pid = getpid();
>       for (trv = path; *trv; ++trv)
>               ;
>       --trv;
> -     while (trv >= path && *trv == 'X' && pid != 0) {
> -             *trv-- = (pid % 10) + '0';
> -             pid /= 10;
> -     }
>       while (trv >= path && *trv == 'X') {
>               char c;
>  
> -             pid = (get_random() & 0xffff) % (26+26);
> +             pid = (get_random() & 0xffff) % (26+26+10+6);
>               c = alphabet[pid];
>               *trv-- = c;
>       }
> -------------------------

The later part starting at
                /* tricky little algorithm for backward compatibility */

has to be adjusted as well, since the results are a bit funny:

,----
| /usr/local/src/deb-src/mktemp/mktemp-1.5% for i in $(seq 100); do ./mktemp 
/tmp/foo.X; done
| /tmp/foo._
| /tmp/foo.x
| /tmp/foo.h
| /tmp/foo.5
| /tmp/foo.X
| /tmp/foo.o
| /tmp/foo.a
| /tmp/foo.4
| /tmp/foo.D
| /tmp/foo.j
| /tmp/foo.S
| /tmp/foo.b
| /tmp/foo.6
| /tmp/foo.m
| /tmp/foo.0
| /tmp/foo.F
| /tmp/foo.v
| /tmp/foo.y
| /tmp/foo.d
| /tmp/foo.R
| /tmp/foo.Q
| /tmp/foo.n
| /tmp/foo.s
| /tmp/foo.-
| /tmp/foo.W
| /tmp/foo.Z
| /tmp/foo.`
| /tmp/foo.c
| /tmp/foo.t
| /tmp/foo.2
| /tmp/foo.T
| /tmp/foo.e
| /tmp/foo.9
| /tmp/foo.i
| /tmp/foo.f
| /tmp/foo.U
| /tmp/foo.=
| /tmp/foo.u
| /tmp/foo.7
| /tmp/foo..
| /tmp/foo.z
| /tmp/foo.k
| /tmp/foo.V
| /tmp/foo.%
| /tmp/foo.g
| /tmp/foo.>
| /tmp/foo.l
| /tmp/foo.Y
| mktemp: cannot create temp file /tmp/foo.a: File exists
| /tmp/foo.#
| /tmp/foo.A
| /tmp/foo.J
| /tmp/foo.p
| /tmp/foo.w
| mktemp: cannot create temp file /tmp/foo.a: File exists
| /tmp/foo.1
| /tmp/foo.C
| /tmp/foo.M
| /tmp/foo.N
| /tmp/foo.E
| mktemp: cannot create temp file /tmp/foo.a: File exists
| /tmp/foo.?
| /tmp/foo.O
| /tmp/foo.r
| /tmp/foo.3
| mktemp: cannot create temp file /tmp/foo.a: File exists
| /tmp/foo.q
| /tmp/foo.B
| /tmp/foo.P
| mktemp: cannot create temp file /tmp/foo.a: File exists
| /tmp/foo.G
| /tmp/foo.H
| /tmp/foo.I
| mktemp: cannot create temp file /tmp/foo.a: File exists
| mktemp: cannot create temp file /tmp/foo.a: File exists
| /tmp/foo.K
| /tmp/foo.L
| mktemp: cannot create temp file /tmp/foo.a: File exists
| mktemp: cannot create temp file /tmp/foo.a: File exists
| mktemp: cannot create temp file /tmp/foo.a: File exists
| mktemp: cannot create temp file /tmp/foo.a: File exists
| /tmp/foo.+
| mktemp: cannot create temp file /tmp/foo.a: File exists
| mktemp: cannot create temp file /tmp/foo.a: File exists
| /tmp/foo.8
| mktemp: cannot create temp file /tmp/foo.a: File exists
| /tmp/foo.&
| mktemp: cannot create temp file /tmp/foo.a: File exists
| mktemp: cannot create temp file /tmp/foo.a: File exists
| mktemp: cannot create temp file /tmp/foo.a: File exists
| mktemp: cannot create temp file /tmp/foo.a: File exists
| mktemp: cannot create temp file /tmp/foo.a: File exists
| mktemp: cannot create temp file /tmp/foo.a: File exists
| mktemp: cannot create temp file /tmp/foo.a: File exists
| mktemp: cannot create temp file /tmp/foo.a: File exists
| /tmp/foo.'
| mktemp: cannot create temp file /tmp/foo.a: File exists
| mktemp: cannot create temp file /tmp/foo.a: File exists
| mktemp: cannot create temp file /tmp/foo.a: File exists
| mktemp: cannot create temp file /tmp/foo.a: File exists
`----

Note the characters outside the alphabet and the "File exists" message
appearing before mktemp actually runs out of file names.

Sven



-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to