Package: postgresql
Version: 7.4.6-6
Priority: important
Tags: security patch

(Note to security team: even if this bug is tagged security it does not
apply to average users of PostgreSQL just to those building it and using
other extra tools which are not available in the Debian binary packages
but are present in the source code)

Hi postgresql maintainer,

I've been auditing postgresql as part of an auditing effort within the
work of the Debian Security Audit team [1] looking for security bugs
that might be used for symlink attacks in temporary directories.
Reviewin postgresql code I've found a lot of scripts which don't use
temporary directories safely:

- temporary files are created based on the $$ construct, which can be
  known in advance by an attcker enabling him to construct a 
  symlink attack (either because it is used multiple times in
  files that are created throughout the script or because the PID range
  used can be estimated)
- scripts don't honor $TMPDIR and just drop their stuff in /tmp 
  directly
- scripts remove files in traps or on startup which might not have been
  created by the script itself.

(Debian specific)
- scripts could use -t in mktemp calls instead of ${TMPDIR:-/tmp}
  (the -t call adds additional checks, see the manpage)
- one script (debian/enable_lang.in) does not check mktemp's
  return value and is not running with -e 
- the postinst script makes temporary files world-readable when they
  might contain sensitive information (such as database dumps)
 
As said above, I don't find these issues particularly troubling since
the tools are only used on build systems and that code is not
provided to end-users, that's why I'm labeling this bug as 'important'
and not a higher priority ('grave' is usually attached to these kind
of bugs)

Attached is a proposed patch to fix the above issues. It's not tested,
I'm just trying to provide insight at the code pieces which I
think should be fixed (even though they are easy to find just looking
for '/tmp' in the sources). The patch has been done against the 
build-tree that the Debian package creates.

It's not included in the patch but I'm slightly worried about the
following file: build-tree/postgresql-7.4.6/src/pl/plperl/ppport.h
Shouldn't this one be modified to one that doesn't use $$ constructs
but File::Temp?

Hope this is useful, if you do think it's proper, please forward it
upstream.

Regards

Javier Fernandez-Sanguino

[1] http://www.nl.debian.org/security/audit/
diff -Nru 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/contrib/pg_upgrade/pg_upgrade 
postgresql-7.4.6/build-tree/postgresql-7.4.6/contrib/pg_upgrade/pg_upgrade
--- 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/contrib/pg_upgrade/pg_upgrade 
    2002-08-30 00:19:03.000000000 +0200
+++ postgresql-7.4.6/build-tree/postgresql-7.4.6/contrib/pg_upgrade/pg_upgrade  
2005-01-23 02:23:25.000000000 +0100
@@ -29,7 +29,11 @@
 fi
 
 
-trap "rm -f /tmp/$$.*" 0 1 2 3 15
+tmpsavedata=`mktemp -t savedata.XXXXXX` || { echo "$0: Cannot create temporary 
file" >&2 ; exit 1 ; }
+tmppgdata=`mktemp -t pgtmpdata.XXXXXX` || { echo "$0: Cannot create temporary 
file" >&2 ; exit 1 ; }
+tmpdboidmap=`mktemp -t dboidmap.XXXXXX` || { echo "$0: Cannot create temporary 
file" >&2 ; exit 1 ; }
+tmpdbobjoidmap=`mktemp -t dbobjimap.XXXXXX` || { echo "$0: Cannot create 
temporary file" >&2 ; exit 1 ; }
+trap "rm -f -- \"$tmpsavedata\" \"$tmppgdata\" \"$tmpdboidmap\" 
\"$tmpdbobjoidmap\" " 0 1 2 3 13 15
 
 BASENAME=`basename "$0"`
 PHASE=""
@@ -328,9 +332,9 @@
 
 # compare locales to make sure they match
 
-pg_resetxlog -n "$SAVEDATA" | grep "^LC_" > /tmp/$$.0
-pg_resetxlog -n "$PGDATA" | grep "^LC_" > /tmp/$$.1
-if ! diff /tmp/$$.0 /tmp/$$.1 > /dev/null
+pg_resetxlog -n "$SAVEDATA" | grep "^LC_" > $tmpsavedata
+pg_resetxlog -n "$PGDATA" | grep "^LC_" > $tmppgdata
+if ! diff $tmpsavedata $tmppgdata > /dev/null
 then   echo "Locales do not match between the two versions.  Exiting." 1>&2
        exit 1
 fi
@@ -360,8 +364,8 @@
 echo "Input script completed, fixing row commit statuses..."
 
 # Generate mappings for new database
-make_dboidmap > /tmp/$$.dboidmap || exit "$?"
-make_dbobjoidmap > /tmp/$$.dbobjoidmap || exit "$?"
+make_dboidmap > $tmpdboidmap || exit "$?"
+make_dbobjoidmap > $tmpdbobjoidmap || exit "$?"
 
 # we are done with SQL database access
 # shutdown forces buffers to disk
@@ -391,8 +395,8 @@
 
        SRC_OID=`echo "$LINE" | awk '{print $3}'`
        SRC_DBOID=`grep "^$DB   " "$INFODIR"/dboidmap | awk '{print $2}'`
-       DST_DBOID=`grep "^$DB   " /tmp/$$.dboidmap | awk '{print $2}'`
-       DST_OID=`grep "^$DB     $OBJ    " /tmp/$$.dbobjoidmap | awk '{print 
$3}'`
+       DST_DBOID=`grep "^$DB   " $tmpdboidmap | awk '{print $2}'`
+       DST_OID=`grep "^$DB     $OBJ    " $tmpdbobjoidmap | awk '{print $3}'`
 
        move_objfiles
 
@@ -405,13 +409,13 @@
                SRC_OID=`grep "^$DB     pg_toast_$SAVE_SRC_OID  " \
                        "$INFODIR"/dbobjoidmap | awk '{print $3}'`
                DST_OID=`grep "^$DB     pg_toast_$SAVE_DST_OID  " \
-                       /tmp/$$.dbobjoidmap | awk '{print $3}'`
+                       $tmpdbobjoidmap | awk '{print $3}'`
                move_objfiles
                # toast index
                SRC_OID=`grep "^$DB     pg_toast_${SAVE_SRC_OID}_idx    " \
                        "$INFODIR"/dbobjoidmap | awk '{print $3}'`
                DST_OID=`grep "^$DB     pg_toast_${SAVE_DST_OID}_idx    " \
-                       /tmp/$$.dbobjoidmap | awk '{print $3}'`
+                       $tmpdbobjoidmap | awk '{print $3}'`
                move_objfiles
        fi
 done
diff -Nru 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/contrib/tools/add-emacs-variables
 postgresql-7.4.6/build-tree/postgresql-7.4.6/contrib/tools/add-emacs-variables
--- 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/contrib/tools/add-emacs-variables
 1999-06-05 21:09:45.000000000 +0200
+++ 
postgresql-7.4.6/build-tree/postgresql-7.4.6/contrib/tools/add-emacs-variables  
    2005-01-24 09:10:28.000000000 +0100
@@ -4,12 +4,15 @@
 #
 # Usage:  cd $PG_HOME && add-emacs-variables `find . -name \*.[chy] -print`
 
+tmpfile=`mktemp -t .add-local.XXXXXX`  || { echo "$0: Cannot create temporary 
file" >&2; exit 1;  }
+trap " [ -f \"$tmpfile\" ] && /bin/rm -f -- \"$tmpfile\"" 0 1 2 3 13 15
+
 for f in $*; do
     if [ -L $f ] || grep -q '^ \* Local Variables:' $f; then
        continue
     fi
     echo $f
-    touch -r $f /tmp/.add-local-variables.$$
+    touch -r $f $tmpfile
     cat <<- '    EOF' >> $f 
        
        /*
@@ -20,9 +23,8 @@
         * End:
         */
     EOF
-    touch -r /tmp/.add-local-variables.$$ $f
+    touch -r $tmpfile $f
 done
 
-rm -f /tmp/.add-local-variables.$$
-
+exit 0
 # end of file
diff -Nru 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/backend/catalog/genbki.sh 
postgresql-7.4.6/build-tree/postgresql-7.4.6/src/backend/catalog/genbki.sh
--- 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/backend/catalog/genbki.sh 
    2003-07-29 16:12:50.000000000 +0200
+++ postgresql-7.4.6/build-tree/postgresql-7.4.6/src/backend/catalog/genbki.sh  
2005-01-23 02:34:41.000000000 +0100
@@ -108,13 +108,8 @@
     exit 1
 fi
 
-if [ x"$TMPDIR" = x"" ] ; then
-    TMPDIR=/tmp
-fi
-
-
-TMPFILE="$TMPDIR/genbkitmp$$.c"
-
+TMPFILE=`tempfile --prefix=genbk --suffix=.c` || {echo "$0: Cannot create 
temporary file"
+>&2; exit 1;  }
 trap "rm -f $TMPFILE ${OUTPUT_PREFIX}.bki.$$ ${OUTPUT_PREFIX}.description.$$" 
0 1 2 3 15
 
 
diff -Nru 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/include/catalog/duplicate_oids
 postgresql-7.4.6/build-tree/postgresql-7.4.6/src/include/catalog/duplicate_oids
--- 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/include/catalog/duplicate_oids
        2002-09-17 03:28:36.000000000 +0200
+++ 
postgresql-7.4.6/build-tree/postgresql-7.4.6/src/include/catalog/duplicate_oids 
    2005-01-24 09:10:51.000000000 +0100
@@ -17,19 +17,21 @@
   echo "uniq -d is not supported on your platform."
   echo "Please report this to pgsql-hackers@postgresql.org"
 
+alloid=`mktemp -t alloids.XXXXXX` || { echo "$0: Cannot create temporary file" 
>&2; exit 1;  }
+uniqoid=`mktemp -t uniqoid.XXXXXX` || { echo "$0: Cannot create temporary 
file" >&2; exit 1;  }
+trap " /bin/rm -f -- \"$alloid\" \"$uniqoid\" " 0 1 2 3 13 15
+
 egrep '^DATA' $FILES | \
        sed -e 's/^.*OID[^=]*=[^0-9]*//' -e 's/[^0-9].*$//' | \
-       sort -n >/tmp/alloids.$$
-uniq /tmp/alloids.$$ >/tmp/uniqoids.$$
+       sort -n >$alloid
+uniq $alloid >$uniqoid
 
-diff -u /tmp/alloids.$$ /tmp/uniqoids.$$ | \
+diff -u $alloid $uniqoid | \
        grep -v '/tmp/' | \
        grep '^-' | \
        sed -e 's/^-//' | \
        grep -v '^0$' | \
        uniq
-rm /tmp/alloids.$$
-rm /tmp/uniqoids.$$
 
 else
 
diff -Nru 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/test/bench/perquery 
postgresql-7.4.6/build-tree/postgresql-7.4.6/src/test/bench/perquery
--- postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/test/bench/perquery   
1996-07-09 08:22:21.000000000 +0200
+++ postgresql-7.4.6/build-tree/postgresql-7.4.6/src/test/bench/perquery        
2005-01-24 09:12:53.000000000 +0100
@@ -1,6 +1,9 @@
 #!/bin/sh
 
-egrep 'x = "|elapse' > /tmp/foo$$
+foo=`mktemp -t foo.XXXXXX` || { echo "$0: Cannot create temporary file" >&2; 
exit 1;  }
+trap " [ -f \"$foo\" ] && /bin/rm -f -- \"$foo\"" 0 1 2 3 13 15
+
+egrep 'x = "|elapse' > $foo
 
 awk 'BEGIN { x = 0; y = 0; z = 0; a = 0; } \
      /.*elapse.*/ {x = $2 + x; y = $4 + y; z = $6 + z;} \
@@ -8,5 +11,5 @@
         printf "query %2d: %7.3f real %7.3f user %7.3f sys\n", a, x, y, z; \
         x = 0; y = 0; z = 0; a = a + 1; } \
      END {printf("query %2d: %7.3f real %7.3f user %7.3f sys\n", a, x, y, 
z);}' \
-        < /tmp/foo$$
+        < $foo
         
diff -Nru postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/ccsym 
postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/ccsym
--- postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/ccsym   
2003-10-24 23:28:52.000000000 +0200
+++ postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/ccsym        
2005-01-24 09:14:56.000000000 +0100
@@ -1,10 +1,16 @@
 #!/bin/sh
-trap "rm -f /tmp/$$.*" 0 1 2 3 15
-cd /tmp
-cat >$$.c <<EOF
+
+tmpfile=`tempfile --suffix=.c` || { echo "$0: Cannot create temporary file" 
>&2; exit 1;  }
+trap " [ -f \"$tmpfile\" ] && /bin/rm -f -- \"$tmpfile\"" 0 1 2 3 13 15
+if [ -d "$TMPDIR" ]; then
+       cd $TMPDIR
+else
+       cd /tmp
+fi
+cat >$tmpfile <<EOF
 extern int foo;
 EOF
-for i in `cc -v -c $$.c 2>&1`
+for i in `cc -v -c $tempfile 2>&1`
 do
         case "$i" in
         -D*) echo "$i" | sed 's/^-D//';;
diff -Nru 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/find_static 
postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/find_static
--- postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/find_static     
2000-06-09 00:38:00.000000000 +0200
+++ postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/find_static  
2005-01-24 09:15:49.000000000 +0100
@@ -1,5 +1,7 @@
 #!/bin/sh
-trap "rm -f /tmp/$$" 0 1 2 3 15
+
+tmpfile=`tempfile` || { echo "$0: Cannot create temporary file" >&2; exit 1;  }
+trap " [ -f \"$tmpfile\" ] && /bin/rm -f -- \"$tmpfile\"" 0 1 2 3 13 15
 
 # This script finds functions that are either never called, or
 # should be static.
@@ -15,13 +17,13 @@
 find . -name '[a-z]*.o' -type f -print | while read FILE
 do
        nm $FILE | cut -c10-100 |awk '{printf "%s\t%s\t%s\n", 
"'"$FILE"'",$1,$2}'
-done >/tmp/$$
+done >$tmpfile
 dropdb debug
 createdb debug
 echo "
        create table debug (file text, scope char, func text);
 
-       copy debug from '/tmp/"$$"';
+       copy debug from '"$tmpfile"';
 
        select  * 
        into    table debug2 
diff -Nru 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/make_ctags 
postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/make_ctags
--- postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/make_ctags      
2003-01-18 07:06:51.000000000 +0100
+++ postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/make_ctags   
2005-01-24 09:16:37.000000000 +0100
@@ -1,5 +1,7 @@
 #!/bin/sh
-trap "rm -f /tmp/$$" 0 1 2 3 15
+
+tmpfile=`tempfile` || { echo "$0: Cannot create temporary file" >&2; exit 1;  }
+trap " [ -f \"$tmpfile\" ] && /bin/rm -f -- \"$tmpfile\"" 0 1 2 3 13 15
 rm -f ./tags
 
 if ctags --version 2>&1 | grep Exuberant >/dev/null
@@ -10,7 +12,7 @@
 find `pwd`/ \( -name _deadcode -a -prune \) -o \
        -type f -name '*.[chyl]' -print|xargs ctags "$FLAGS" -a -f tags
 
-sort tags >/tmp/$$ && mv /tmp/$$ tags
+sort tags >$tmpfile && mv $tmpfile tags
 
 find . -name  'CVS' -prune -o -type d -print  |while read DIR
 do
diff -Nru 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/make_etags 
postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/make_etags
--- postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/make_etags      
2001-03-14 22:07:16.000000000 +0100
+++ postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/make_etags   
2005-01-24 09:16:54.000000000 +0100
@@ -1,5 +1,4 @@
 #!/bin/sh
-trap "rm -f /tmp/$$" 0 1 2 3 15
 rm -f ./TAGS
 find `pwd`/ -type f -name '*.[chyl]' -print | \
   xargs etags --append -o TAGS
diff -Nru 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/pginclude/pgcompinclude
 postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/pginclude/pgcompinclude
--- 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/pginclude/pgcompinclude
 2000-06-15 00:33:06.000000000 +0200
+++ 
postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/pginclude/pgcompinclude  
    2005-01-24 09:19:14.000000000 +0100
@@ -2,22 +2,26 @@
 # report which #include files can not compile on their own
 # takes -v option to display compile failure message and line numbers
 
-trap "rm -f /tmp/$$.c /tmp/$$.o /tmp/$$ /tmp/$$a" 0 1 2 3 15
+ctmp=`tempfile --suffix=.c` || { echo "$0: Cannot create temporary file" >&2; 
exit 1; } 
+otmp=`tempfile --suffix=.o` || { echo "$0: Cannot create temporary file" >&2; 
exit 1; }
+tmpfile=`tempfile` || { echo "$0: Cannot create temporary file" >&2; exit 1; }
+atmp=`tempfile --suffix=.a` || { echo "$0: Cannot create temporary file" >&2; 
exit 1; }
+trap "rm -f $ctmp $otmp $tmpfile $atmp" 0 1 2 3 13 15
 find . \( -name CVS -a -prune \) -o -name '*.[ch]' -type f -print | while read 
FILE
 do
-       sed 's/->[a-zA-Z0-9_\.]*//g' "$FILE" >/tmp/$$a
-       echo "#include \"postgres.h\"" >/tmp/$$.c
-       echo "#include \"/tmp/$$a\"" >>/tmp/$$.c
-       echo "void include_test(void);" >>/tmp/$$.c
-       echo "void include_test() {" >>/tmp/$$.c
-       pgdefine "$FILE" >>/tmp/$$.c
-       echo "}" >>/tmp/$$.c
-       cc -fsyntax-only -Werror -Wall -Wmissing-prototypes 
-Wmissing-declarations -I/pg/include -I/pg/backend -c /tmp/$$.c -o /tmp/$$.o 
>/tmp/$$ 2>&1
+       sed 's/->[a-zA-Z0-9_\.]*//g' "$FILE" >$atmp
+       echo "#include \"postgres.h\"" >$ctmp
+       echo "#include \"$atmp\"" >>$ctmp
+       echo "void include_test(void);" >>$ctmp
+       echo "void include_test() {" >>$ctmp
+       pgdefine "$FILE" >>$ctmp
+       echo "}" >>$ctmp
+       cc -fsyntax-only -Werror -Wall -Wmissing-prototypes 
-Wmissing-declarations -I/pg/include -I/pg/backend -c $ctmp -o $otmp >$tmpfile 
2>&1
        if [ "$?" -ne 0 ]
        then    echo "$FILE"
                if [ "$1" = "-v" ]
-               then    cat /tmp/$$
-                       nl /tmp/$$.c
+               then    cat $tmpfile
+                       nl $ctmp
                        echo
                fi
        fi
diff -Nru 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/pginclude/pgdefine 
postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/pginclude/pgdefine
--- 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/pginclude/pgdefine  
    2000-06-15 00:28:16.000000000 +0200
+++ postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/pginclude/pgdefine   
2005-01-24 09:08:15.000000000 +0100
@@ -1,12 +1,14 @@
 :
 # create macro calls for all defines in the file
 
-trap "rm -f /tmp/$$" 0 1 2 3 15
+tmpfile=`mktemp -t pgdef.XXXXXX` || { echo "$0: Cannot create temporary file"
+>&2; exit 1;  }
+trap " [ -f \"$tmpfile\" ] && /bin/rm -f -- \"$tmpfile\"" 0 1 2 3 13 15
 for FILE
 do
-       cat "$FILE" | grep "^#define" >/tmp/$$
-       cat /tmp/$$ | sed -n 's/^#define[       ][      ]*\([a-zA-Z0-9_]*\)[    
][      ]*[^    ].*$/(void)\1;/p'
-       cat /tmp/$$ | sed -n 's/^#define[       ][      
]*\([a-zA-Z0-9_]*([^)]*)\).*$/(=void)\1;/p' |
+       cat "$FILE" | grep "^#define" >$tmpfile
+       cat $tmpfile | sed -n 's/^#define[      ][      ]*\([a-zA-Z0-9_]*\)[    
][      ]*[^    ].*$/(void)\1;/p'
+       cat $tmpfile | sed -n 's/^#define[      ][      
]*\([a-zA-Z0-9_]*([^)]*)\).*$/(=void)\1;/p' |
        sed 's/([a-zA-Z0-9_ ][a-zA-Z0-9_ ]*)/(0)/g' |
        sed 's/([a-zA-Z0-9_ ]*,/(0,/g' |
        sed 's/,[a-zA-Z0-9_ ]*,/,0,/g' |
diff -Nru 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/pginclude/pgfixinclude
 postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/pginclude/pgfixinclude
--- 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/pginclude/pgfixinclude
  2000-06-15 00:28:16.000000000 +0200
+++ 
postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/pginclude/pgfixinclude   
    2005-01-24 09:07:48.000000000 +0100
@@ -1,7 +1,8 @@
 :
 # change #include's to <> or ""
 
-trap "rm -f /tmp/$$.c /tmp/$$.o /tmp/$$ /tmp/$$a /tmp/$$b" 0 1 2 3 15
+tmpfile=`mktemp -t tempfile.XXXXXX` || { echo "$0: Cannot create temporary 
file" >&2; exit 1;  }
+trap " [ -f \"$tmpfile\" ] && /bin/rm -f -- \"$tmpfile\"" 0 1 2 3 13 15
 find . \( -name CVS -a -prune \) -o -type f -print |
 while read FILE
 do
@@ -11,10 +12,10 @@
        do
                if [ -s /usr/include/"$INCLUDE" ]
                then    cat "$FILE" |
-                       sed 's;^#include[       ][      
]*[<"]'"$INCLUDE"'[>"]$;#include <'"$INCLUDE"'>;g' >/tmp/$$
+                       sed 's;^#include[       ][      
]*[<"]'"$INCLUDE"'[>"]$;#include <'"$INCLUDE"'>;g' $tmpfile
                else    cat "$FILE" |
-                       sed 's;^#include[       ][      
]*[<"]'"$INCLUDE"'[>"]$;#include "'"$INCLUDE"'";g' >/tmp/$$
+                       sed 's;^#include[       ][      
]*[<"]'"$INCLUDE"'[>"]$;#include "'"$INCLUDE"'";g' $tmpfile
                fi
-               cat /tmp/$$ > "$FILE"
+               cat $tmpfile > "$FILE"
        done
 done
diff -Nru 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/pginclude/pgrminclude
 postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/pginclude/pgrminclude
--- 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/pginclude/pgrminclude
   2001-08-24 16:07:50.000000000 +0200
+++ 
postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/pginclude/pgrminclude    
    2005-01-24 09:21:31.000000000 +0100
@@ -1,7 +1,12 @@
 :
 # remove extra #include's
 
-trap "rm -f /tmp/$$.c /tmp/$$.o /tmp/$$ /tmp/$$a /tmp/$$b" 0 1 2 3 15
+ctmp=`tempfile --suffix=.c` || { echo "$0: Cannot create temporary file" >&2; 
exit 1; }
+otmp=`tempfile --suffix=.o` || { echo "$0: Cannot create temporary file" >&2; 
exit 1; }
+tmpfile=`tempfile` || { echo "$0: Cannot create temporary file" >&2; exit 1; }
+atmp=`tempfile --suffix=.a` || { echo "$0: Cannot create temporary file" >&2; 
exit 1; }
+btmp=`tempfile --suffix=.b` || { echo "$0: Cannot create temporary file" >&2; 
exit 1; }
+trap "rm -f $ctmp $otmp $tmpfile $atmp $btmp" 0 1 2 3 13 15
 find . \( -name CVS -a -prune \) -o -type f -print | 
 grep -v '\./postgres.h' |
 grep -v '\./pg_config.h' |
@@ -16,12 +21,12 @@
        # remove defines
        if [ "$IS_INCLUDE" = "Y" ]
        then    cat "$FILE" | grep -v "^#if" | grep -v "^#else" | 
-               grep -v "^#endif" | sed 's/->[a-zA-Z0-9_\.]*//g' >/tmp/$$a
-       else    cat "$FILE" >/tmp/$$a
+               grep -v "^#endif" | sed 's/->[a-zA-Z0-9_\.]*//g' >$atmp
+       else    cat "$FILE" >$atmp
        fi
 
        # loop through all includes
-       cat /tmp/$$a | grep "^#include" |
+       cat $atmp | grep "^#include" |
        sed 's/^#include[       ]*[<"]\([^>"]*\).*$/\1/g' |
        while read INCLUDE
        do
@@ -37,29 +42,29 @@
                grep -A1 '^#include[    ][      ]*[<"]'"$INCLUDE"'[>"]' "$FILE" 
|
                     egrep -q '^#else|^#endif' && continue              
 
-               cat /tmp/$$a |
-               grep -v '^#include[     ]*[<"]'"$INCLUDE"'[>"]' >/tmp/$$b
+               cat $atmp |
+               grep -v '^#include[     ]*[<"]'"$INCLUDE"'[>"]' >$btmp
                if [ "$IS_INCLUDE" = "Y" ]
-               then    echo "#include \"postgres.h\"" >/tmp/$$.c
-               else    >/tmp/$$.c
+               then    echo "#include \"postgres.h\"" >$ctmp
+               else    >$ctmp
                fi
-               echo "#include \"/tmp/$$b\"" >>/tmp/$$.c
-               echo "void include_test(void);" >>/tmp/$$.c
-               echo "void include_test() {" >>/tmp/$$.c
+               echo "#include \"$btmp\"" >>$ctmp
+               echo "void include_test(void);" >>$ctmp
+               echo "void include_test() {" >>$ctmp
                if [ "$IS_INCLUDE" = "Y" ]
-               then    pgdefine "$FILE" >>/tmp/$$.c
+               then    pgdefine "$FILE" >>$ctmp
                fi
-               echo "}" >>/tmp/$$.c
-               cc -fsyntax-only -Werror -Wall -Wmissing-prototypes 
-Wmissing-declarations -I/pg/include -I/pg/backend -c /tmp/$$.c -o /tmp/$$.o 
>/tmp/$$ 2>&1
+               echo "}" >>$ctmp
+               cc -fsyntax-only -Werror -Wall -Wmissing-prototypes 
-Wmissing-declarations -I/pg/include -I/pg/backend -c $ctmp -o $otmp >$tmpfile 
2>&1
                if [ "$?" -eq 0 ]
                then    echo "$FILE $INCLUDE"
                        if [ "$IS_INCLUDE" = "N" ]
-                       then    grep -v '^#include[     ][      
]*[<"]'"$INCLUDE"'[>"]' "$FILE" >/tmp/$$b
-                               mv /tmp/$$b "$FILE"
+                       then    grep -v '^#include[     ][      
]*[<"]'"$INCLUDE"'[>"]' "$FILE" >$btmp
+                               mv $btmp "$FILE"
                        fi
                        if [ "$1" = "-v" ]
-                       then    cat /tmp/$$
-                               cat /tmp/$$.c
+                       then    cat $tmpfile
+                               cat $ctmp
                        fi
                fi
        done
diff -Nru 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/pgindent/pgcppindent
 postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/pgindent/pgcppindent
--- 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/pgindent/pgcppindent
    2002-06-15 21:13:04.000000000 +0200
+++ postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/pgindent/pgcppindent 
2005-01-24 09:23:01.000000000 +0100
@@ -1,6 +1,8 @@
 #!/bin/sh
 
-trap "rm -f /tmp/$$ /tmp/$$a" 0 1 2 3 15
+tmpfile=`tempfile` || { echo "$0: Cannot create temporary file" >&2; exit 1; }
+atmp=`tempfile --suffix=.a` || { echo "$0: Cannot create temporary file" >&2; 
exit 1; }
+trap "rm -f $tmpfile $atmp" 0 1 2 3 13 15
 entab </dev/null >/dev/null
 if [ "$?" -ne 0 ]
 then   echo "Go to the src/tools/entab directory and do a 'make' and 'make 
install'." >&2
@@ -16,12 +18,12 @@
 
 for FILE
 do
-       astyle --style=ansi -b -p -S < "$FILE" >/tmp/$$ 2>/tmp/$$a
-       if [ "$?" -ne 0 -o -s /tmp/$$a ]
+       astyle --style=ansi -b -p -S < "$FILE" >$tmpfile 2>$atmp
+       if [ "$?" -ne 0 -o -s $atmp ]
        then    echo "$FILE"
-               cat /tmp/$$a
+               cat $atmp
        fi
-       cat /tmp/$$ |
+       cat $tmpfile |
        entab -t4 -qc |
-       cat >/tmp/$$a && cat /tmp/$$a >"$FILE"
+       cat >$atmp && cat $atmp >"$FILE"
 done
diff -Nru 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/pgindent/pgindent 
postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/pgindent/pgindent
--- 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/pgindent/pgindent   
    2003-09-28 02:25:22.000000000 +0200
+++ postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/pgindent/pgindent    
2005-01-24 09:24:25.000000000 +0100
@@ -6,7 +6,9 @@
 # after *:
 #      y = (int) x *y;
 
-trap "rm -f /tmp/$$ /tmp/$$a" 0 1 2 3 15
+tmpfile=`tempfile` || { echo "$0: Cannot create temporary file" >&2; exit 1; }
+atmp=`tempfile --suffix=.a` || { echo "$0: Cannot create temporary file" >&2; 
exit 1; }
+trap "rm -f $tmpfile $atmp" 0 1 2 3 13 15
 entab </dev/null >/dev/null
 if [ "$?" -ne 0 ]
 then   echo "Go to the src/tools/entab directory and do a 'make' and 'make 
install'." >&2
@@ -100,7 +102,7 @@
 # protect backslashes in DATA()
        sed 's;^DATA(.*$;/*&*/;' |
 # protect wrapping in CATALOG()
-       sed 's;^CATALOG(.*$;/*&*/;' >/tmp/$$a
+       sed 's;^CATALOG(.*$;/*&*/;' >$atmp
 
 # We get the list of typedef's from /src/tools/find_typedef
        indent -bad -bap -bc -bl -d0 -cdb -nce -nfc1 -di12 -i4 -l75 \
@@ -1667,13 +1669,13 @@
 -Tyysigned_char \
 -Tz_stream \
 -Tz_streamp \
-/tmp/$$a >/tmp/$$ 2>&1
-       if [ "$?" -ne 0 -o -s /tmp/$$ ]
+$atmp >$tmpfile 2>&1
+       if [ "$?" -ne 0 -o -s "$tmpfile" ]
        then    echo
                echo "$FILE"
-               cat /tmp/$$
+               cat $tmpfile
        fi
-       cat /tmp/$$a |
+       cat $atmp |
 # restore DATA/CATALOG lines
        sed 's;^/\*\(DATA(.*\)\*/$;\1;' |
        sed 's;^/\*\(CATALOG(.*\)\*/$;\1;' |
@@ -1849,7 +1851,7 @@
                }
                else    print $0;
        }' |
-       cat >/tmp/$$ && cat /tmp/$$ >"$FILE"
+       cat >$tmpfile && cat $tmpfile >"$FILE"
 done
 
 # The 'for' loop makes these backup files useless so delete them
diff -Nru 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/pgindent/pgjindent 
postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/pgindent/pgjindent
--- 
postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/pgindent/pgjindent  
    2001-11-20 00:16:46.000000000 +0100
+++ postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/pgindent/pgjindent   
2005-01-24 09:25:51.000000000 +0100
@@ -1,6 +1,8 @@
 #!/bin/sh
 
-trap "rm -f /tmp/$$ /tmp/$$a" 0 1 2 3 15
+tmpfile=`tempfile` || { echo "$0: Cannot create temporary file" >&2; exit 1; }
+atmp=`tempfile --suffix=.a` || { echo "$0: Cannot create temporary file" >&2; 
exit 1; }
+trap "rm -f $tmpfile $atmp" 0 1 2 3 13 15
 entab </dev/null >/dev/null
 if [ "$?" -ne 0 ]
 then   echo "Go to the src/tools/entab directory and do a 'make' and 'make 
install'." >&2
@@ -16,12 +18,12 @@
 
 for FILE
 do
-       astyle --style=java -b -p -j -S < "$FILE" >/tmp/$$ 2>/tmp/$$a
-       if [ "$?" -ne 0 -o -s /tmp/$$a ]
+       astyle --style=java -b -p -j -S < "$FILE" >$tmpfile 2>$atmp
+       if [ "$?" -ne 0 -o -s "$atmp" ]
        then    echo "$FILE"
-               cat /tmp/$$a
+               cat $atmp
        fi
-       cat /tmp/$$ |
+       cat $tmpfile |
        entab -t4 -qc |
-       cat >/tmp/$$a && cat /tmp/$$a >"$FILE"
+       cat >$atmp && cat $atmp >"$FILE"
 done
diff -Nru postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/pgtest 
postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/pgtest
--- postgresql-7.4.6.orig/build-tree/postgresql-7.4.6/src/tools/pgtest  
2003-06-28 00:04:50.000000000 +0200
+++ postgresql-7.4.6/build-tree/postgresql-7.4.6/src/tools/pgtest       
2005-01-24 09:00:30.000000000 +0100
@@ -10,9 +10,8 @@
 
 [ ! -d src ] && echo "This must be run from the top of the PostgreSQL source 
tree" 1>&2 && exit 1
 
-trap "rm -rf /tmp/$$" 0 1 2 3 15
-mkdir /tmp/$$
-TMP="/tmp/$$"
+TMP=`mktemp -d pgtest.XXXXXX` || { echo "$0: Cannot create temporary 
directory" >&2; exit 1; } 
+trap " [ -d \"$TMP\" ] && rm -rf \"$TMP\"" 0 1 2 3 13 15
 
 [ "X$1" != "X-n" ] && PGCLEAN=clean
 
@@ -26,3 +25,5 @@
 grep -v find_rule | 
 grep -v yy_flex_realloc |
 grep -v '\[javac\] [0-9]* warning'
+
+exit
diff -Nru postgresql-7.4.6.orig/debian/enable_lang.in 
postgresql-7.4.6/debian/enable_lang.in
--- postgresql-7.4.6.orig/debian/enable_lang.in 2005-01-21 01:42:11.000000000 
+0100
+++ postgresql-7.4.6/debian/enable_lang.in      2005-01-24 09:27:34.000000000 
+0100
@@ -46,8 +46,8 @@
        exit
 fi
 
-TMPFILE=`mktemp ${TMPDIR:=/tmp}/enable_lang.XXXXXX`
-TMPFIL2=`mktemp ${TMPDIR:=/tmp}/enable_lang.XXXXXX`
+TMPFILE=`mktemp -t enable_lang.XXXXXX`  || { echo "$0: Cannot create temporary 
file" >&2; exit 1;  }
+TMPFIL2=`mktemp -t enable_lang.XXXXXX`  || { echo "$0: Cannot create temporary 
file" >&2; exit 1;  }
 trap "rm $TMPFILE $TMPFIL2" EXIT
 
 if ! [ -r /etc/postgresql/postgresql.env ] 
diff -Nru postgresql-7.4.6.orig/debian/postgresql-dump.in 
postgresql-7.4.6/debian/postgresql-dump.in
--- postgresql-7.4.6.orig/debian/postgresql-dump.in     2005-01-21 
01:42:11.000000000 +0100
+++ postgresql-7.4.6/debian/postgresql-dump.in  2005-01-24 09:26:41.000000000 
+0100
@@ -105,7 +105,7 @@
 ## Start of execution ##
 
 SHELL=/bin/sh
-TMPFILE=`mktemp ${TMPDIR:-/tmp}/pg.XXXXXX` || exit 1
+TMPFILE=`mktemp -t pg.XXXXXX` || exit 1
 chmod a+rw $TMPFILE
 trap recoverconfig 0
 
diff -Nru postgresql-7.4.6.orig/debian/postinst.in 
postgresql-7.4.6/debian/postinst.in
--- postgresql-7.4.6.orig/debian/postinst.in    2005-01-21 01:42:11.000000000 
+0100
+++ postgresql-7.4.6/debian/postinst.in 2005-01-24 09:28:49.000000000 +0100
@@ -238,13 +238,13 @@
        exit
 esac
 
-SCRIPTFILE=`mktemp ${TMPDIR:-/tmp}/pg.XXXXXX` || exit 1
-chmod 755 $SCRIPTFILE
-TMPFILE=`mktemp ${TMPDIR:-/tmp}/pg.XXXXXX` || exit 1
+SCRIPTFILE=`mktemp -t pg.XXXXXX` || exit 1
+chmod 750 $SCRIPTFILE
+TMPFILE=`mktemp -t pg.XXXXXX` || exit 1
 chown postgres:postgres $TMPFILE
-chmod 644 $TMPFILE
-MAILFILE=`mktemp ${TMPDIR:-/tmp}/pg.XXXXXX` || exit 1
-chmod 644 $MAILFILE
+chmod 640 $TMPFILE
+MAILFILE=`mktemp -t pg.XXXXXX` || exit 1
+chmod 640 $MAILFILE
 MAILSUBJECT="Postgresql installation"
 
 # arrange to delete the temporary files and mail output to root
diff -Nru postgresql-7.4.6.orig/debian/preinst.in 
postgresql-7.4.6/debian/preinst.in
--- postgresql-7.4.6.orig/debian/preinst.in     2005-01-21 01:42:11.000000000 
+0100
+++ postgresql-7.4.6/debian/preinst.in  2005-01-24 09:30:33.000000000 +0100
@@ -28,7 +28,7 @@
 
 current=%PG_VERSION%
 SHELL=/bin/sh
-TMPFILE=$(mktemp ${TMPDIR:-/tmp}/postgresql.XXXXXX || exit 1)
+TMPFILE=$(mktemp -t postgresql.XXXXXX || exit 1)
 chmod a+rw $TMPFILE
 trap "rm -f $TMPFILE" 0
 

Attachment: signature.asc
Description: Digital signature

Reply via email to