author | Rich Burridge <rich.burridge@oracle.com> |
Tue, 22 Oct 2013 07:03:55 -0700 | |
branch | s11-update |
changeset 2799 | 1d47fff1ffff |
child 3359 | a3bb8489d586 |
permissions | -rw-r--r-- |
2799
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
1 |
From b3b5611e046b93fb20aa783d6d11d986f33f91f6 Mon Sep 17 00:00:00 2001 |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
2 |
From: Paul Eggert <eggert <at> cs.ucla.edu> |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
3 |
Date: Thu, 3 Oct 2013 21:12:09 -0700 |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
4 |
Subject: [PATCH] znew: avoid denial-of-service issue |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
5 |
|
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
6 |
Reported by Rich Burridge in <http://bugs.gnu.org/15522>. |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
7 |
* znew.in: Rewrite to avoid the need for a temporary file in /tmp. |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
8 |
That way, we avoid the need for set -C |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
9 |
and worrying about denial of service. |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
10 |
Use touch -r and chmod --reference rather than cpmod. |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
11 |
Assume cp -p works, as it's now universal. |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
12 |
Quote 'echo' args better, while we're at it. |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
13 |
(warn, tmp, cpmod, cpmodarg): Remove. |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
14 |
(GZIP): Unset, so that we needn't test for gzip extension. |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
15 |
(ext): Now always '.gz'. |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
16 |
* znew.1: Document the change of implementation assumptions. |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
17 |
--- |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
18 |
diff --git a/znew.1 b/znew.1 |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
19 |
index dcdf84f..2a7e5e1 100644 |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
20 |
--- a/znew.1 |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
21 |
+++ b/znew.1 |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
22 |
@@ -32,9 +32,16 @@ Keep a .Z file when it is smaller than the .gz file; implies |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
23 |
.SH "SEE ALSO" |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
24 |
gzip(1), zmore(1), zdiff(1), zgrep(1), zforce(1), gzexe(1), compress(1) |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
25 |
.SH BUGS |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
26 |
-.I Znew |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
27 |
-does not maintain the time stamp with the -P option if |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
28 |
-.I cpmod(1) |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
29 |
-is not available and |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
30 |
-.I touch(1) |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
31 |
-does not support the -r option. |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
32 |
+If the |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
33 |
+.B \-P |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
34 |
+option is used, |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
35 |
+.I znew |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
36 |
+does not maintain the time stamp if |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
37 |
+.IR touch (1) |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
38 |
+does not support the |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
39 |
+.B \-r |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
40 |
+option, and does not maintain permissions if |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
41 |
+.IR chmod (1) |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
42 |
+does not support the |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
43 |
+.B \-\-reference |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
44 |
+option. |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
45 |
diff --git a/znew.in b/znew.in |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
46 |
index 9bd3ce9..d16311a 100644 |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
47 |
--- a/znew.in |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
48 |
+++ b/znew.in |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
49 |
@@ -21,7 +21,7 @@ |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
50 |
case $1 in |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
51 |
--__bindir) bindir=${2?}; shift; shift;; |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
52 |
esac |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
53 |
-PATH=$bindir:$PATH; export PATH |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
54 |
+PATH=/usr/gnu/bin:$bindir:$PATH; export PATH |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
55 |
|
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
56 |
version="znew (gzip) @VERSION@ |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
57 |
Copyright (C) 2010-2012 Free Software Foundation, Inc. |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
58 |
@@ -58,33 +58,9 @@ new=0 |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
59 |
block=1024 |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
60 |
# block is the disk block size (best guess, need not be exact) |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
61 |
|
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
62 |
-warn="(does not preserve modes and timestamp)" |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
63 |
-tmp=${TMPDIR-/tmp}/zfoo.$$ |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
64 |
-set -C |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
65 |
-echo hi > $tmp || exit |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
66 |
-if test -z "`(${CPMOD-cpmod} $tmp $tmp) 2>&1`"; then |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
67 |
- cpmod=${CPMOD-cpmod} |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
68 |
- warn="" |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
69 |
-fi |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
70 |
- |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
71 |
-if test -z "$cpmod" && ${TOUCH-touch} -r $tmp $tmp 2>/dev/null; then |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
72 |
- cpmod="${TOUCH-touch}" |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
73 |
- cpmodarg="-r" |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
74 |
- warn="(does not preserve file modes)" |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
75 |
-fi |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
76 |
- |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
77 |
-# check if GZIP env. variable uses -S or --suffix |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
78 |
-gzip -q $tmp |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
79 |
-ext=`echo $tmp* | sed "s|$tmp||"` |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
80 |
-rm -f $tmp* |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
81 |
-if test -z "$ext"; then |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
82 |
- echo znew: error determining gzip extension |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
83 |
- exit 1 |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
84 |
-fi |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
85 |
-if test "$ext" = ".Z"; then |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
86 |
- echo znew: cannot use .Z as gzip extension. |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
87 |
- exit 1 |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
88 |
-fi |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
89 |
+# Beware -s or --suffix in $GZIP. |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
90 |
+unset GZIP |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
91 |
+ext=.gz |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
92 |
|
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
93 |
for arg |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
94 |
do |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
95 |
@@ -116,26 +92,27 @@ if test -n "$opt"; then |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
96 |
fi |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
97 |
|
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
98 |
for i do |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
99 |
- n=`echo $i | sed 's/.Z$//'` |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
100 |
+ n=`echo "$i" | sed 's/.Z$//'` |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
101 |
if test ! -f "$n.Z" ; then |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
102 |
- echo $n.Z not found |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
103 |
+ echo "$n.Z not found" |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
104 |
res=1; continue |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
105 |
fi |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
106 |
test $keep -eq 1 && old=`wc -c < "$n.Z"` |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
107 |
if test $pipe -eq 1; then |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
108 |
if gzip -d < "$n.Z" | gzip $opt > "$n$ext"; then |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
109 |
# Copy file attributes from old file to new one, if possible. |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
110 |
- test -n "$cpmod" && $cpmod $cpmodarg "$n.Z" "$n$ext" 2> /dev/null |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
111 |
+ touch -r"$n.Z" -- "$n$ext" 2>/dev/null |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
112 |
+ chmod --reference="$n.Z" -- "$n$ext" 2>/dev/null |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
113 |
else |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
114 |
- echo error while recompressing $n.Z |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
115 |
+ echo "error while recompressing $n.Z" |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
116 |
res=1; continue |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
117 |
fi |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
118 |
else |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
119 |
if test $check -eq 1; then |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
120 |
- if cp -p "$n.Z" "$n.$$" 2> /dev/null || cp "$n.Z" "$n.$$"; then |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
121 |
+ if cp -p "$n.Z" "$n.$$"; then |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
122 |
: |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
123 |
else |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
124 |
- echo cannot backup "$n.Z" |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
125 |
+ echo "cannot backup $n.Z" |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
126 |
res=1; continue |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
127 |
fi |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
128 |
fi |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
129 |
@@ -143,7 +120,7 @@ for i do |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
130 |
: |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
131 |
else |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
132 |
test $check -eq 1 && mv "$n.$$" "$n.Z" |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
133 |
- echo error while uncompressing $n.Z |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
134 |
+ echo "error while uncompressing $n.Z" |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
135 |
res=1; continue |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
136 |
fi |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
137 |
if gzip $opt "$n"; then |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
138 |
@@ -151,10 +128,10 @@ for i do |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
139 |
else |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
140 |
if test $check -eq 1; then |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
141 |
mv "$n.$$" "$n.Z" && rm -f "$n" |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
142 |
- echo error while recompressing $n |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
143 |
+ echo "error while recompressing $n" |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
144 |
else |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
145 |
# compress $n (might be dangerous if disk full) |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
146 |
- echo error while recompressing $n, left uncompressed |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
147 |
+ echo "error while recompressing $n, left uncompressed" |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
148 |
fi |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
149 |
res=1; continue |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
150 |
fi |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
151 |
@@ -175,7 +152,7 @@ for i do |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
152 |
else |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
153 |
test $pipe -eq 0 && mv "$n.$$" "$n.Z" |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
154 |
rm -f "$n$ext" |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
155 |
- echo error while testing $n$ext, $n.Z unchanged |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
156 |
+ echo "error while testing $n$ext, $n.Z unchanged" |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
157 |
res=1; continue |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
158 |
fi |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
159 |
elif test $pipe -eq 1; then |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
160 |
-- |
1d47fff1ffff
15440739 SUNBT6633578 gzcmp/gzdiff + gznew shell scripts use temporary files unsafely
Rich Burridge <rich.burridge@oracle.com>
parents:
diff
changeset
|
161 |
1.8.3.1 |