File: 630

package info (click to toggle)
pcp 7.1.0-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 252,748 kB
  • sloc: ansic: 1,483,656; sh: 182,366; xml: 160,462; cpp: 83,813; python: 24,980; perl: 18,327; yacc: 6,877; lex: 2,864; makefile: 2,738; awk: 165; fortran: 60; java: 52
file content (172 lines) | stat: -rwxr-xr-x 3,372 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#!/bin/sh
# PCP QA Test No. 630
# exercise _save_prev_file() from utilproc.sh
#
# Copyright (c) 2018 Ken McDonell.  All Rights Reserved.
#

seq=`basename $0`
echo "QA output created by $seq"

# get standard environment, filters and checks
. ./common.product
. ./common.filter
. ./common.check

. $PCP_SHARE_DIR/lib/utilproc.sh

_cleanup()
{
    cd $here
    $sudo rm -rf $tmp $tmp.*
}

status=1	# failure is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15
mkdir $tmp
cd $tmp

me=`id -un`

_do_it()
{
    _save_prev_file target >$tmp.out 2>&1
    _sts=$?
    sed <$tmp.out \
	-e '/^.[rwx-][rwx-][rwx-]/s/.*/<ls output>/' \
    # end
    if [ "$_sts" = 0 ]
    then
	echo "returns: pass"
    else
	echo "returns: fail"
    fi
    echo -n "files:"
    for file in *
    do
	if [ "$file" != "*" ]
	then
	    echo -n " $file"
	    owner=`ls -ld $file | $PCP_AWK_PROG '{print $3}'`
	    [ "$owner" != $me ] && echo " (owner $owner)"
	fi
    done
    echo
    [ -f target ] && ( echo -n "target: "; cat target )
    [ -f target.prev ] && ( echo -n "target.prev: "; cat target.prev )
}

# real QA test starts here
echo "=== target is a directory ==="
mkdir target
_do_it
rmdir target

echo
echo "=== target is a symlink ==="
touch there
ln -s there target
_do_it
rm -f target there

for mode in - rw r
do
    echo
    $sudo rm -f target target.prev
    case $mode
    in
	-)
	    echo "=== target does not exist, target.prev does not exist ==="
	    ;;
	rw)
	    echo "=== target is writeable, target.prev does not exist ==="
	    echo prior >target
	    chmod 644 target
	    ;;
	r)
	    echo "=== target is not writeable, target.prev does not exist ==="
	    echo prior >target
	    chmod 444 target
	    ;;
    esac
    _do_it
done

for mode in - rw r
do
    echo
    $sudo rm -f target target.prev
    echo "prior-prior" >target.prev
    chmod 644 target.prev
    case $mode
    in
	-)
	    echo "=== target does not exist, target.prev is writeable ==="
	    ;;
	rw)
	    echo "=== target is writeable, target.prev is writeable ==="
	    echo prior >target
	    chmod 644 target
	    ;;
	r)
	    echo "=== target is not writeable, target.prev is writeable ==="
	    echo prior >target
	    chmod 444 target
	    ;;
    esac
    _do_it
done

for mode in - rw r
do
    echo
    $sudo rm -f target target.prev
    echo "prior-prior" >target.prev
    chmod 444 target.prev
    case $mode
    in
	-)
	    echo "=== target does not exist, target.prev is writeable ==="
	    ;;
	rw)
	    echo "=== target is writeable, target.prev is writeable ==="
	    echo prior >target
	    chmod 644 target
	    ;;
	r)
	    echo "=== target is not writeable, target.prev is writeable ==="
	    echo prior >target
	    chmod 444 target
	    ;;
    esac
    _do_it
done

echo
echo "=== non-root owned target and root owned target.prev ==="
$sudo rm -f target target.prev
echo "prior" >target
echo "prior-prior" >target.prev
$sudo chown root target.prev
_do_it

echo
echo "=== root owned target and non-root owned target.prev ==="
$sudo rm -f target target.prev
echo "prior" >target
$sudo chown root target
echo "prior-prior" >target.prev
_do_it

echo
echo "=== root owned target and root owned target.prev ==="
$sudo rm -f target target.prev
echo "prior" >target
$sudo chown root target
echo "prior-prior" >target.prev
$sudo chown root target.prev
_do_it

# success, all done
status=0
exit