OILS / spec / builtin-umask.test.sh View on Github | oils.pub

442 lines, 272 significant
1## compare_shells: dash bash mksh zsh
2## oils_failures_allowed: 3
3
4#### 'umask' prints the umask
5umask | tail --bytes 4 # 0022 versus 022
6echo status=$?
7## STDOUT:
8022
9status=0
10## END
11
12#### 'umask -p' prints a form that can be eval'd
13umask -p
14echo status=$?
15## STDOUT:
16umask 0022
17status=0
18## END
19## N-I mksh/zsh STDOUT:
20status=1
21## END
22## N-I dash STDOUT:
23status=2
24## END
25
26#### 'umask 0002' sets the umask
27rm -f $TMP/umask-one $TMP/umask-two
28umask 0002
29echo one > $TMP/umask-one
30umask 0022
31echo two > $TMP/umask-two
32stat -c '%a' $TMP/umask-one $TMP/umask-two
33## status: 0
34## STDOUT:
35664
36644
37## END
38## stderr-json: ""
39
40#### set umask with symbolic mode: g-w,o-w
41
42umask 0002 # begin in a known state for the test
43rm -f $TMP/umask-one $TMP/umask-two
44# open()s 'umask-one' with mask 0666, then subtracts 0002 -> 0664
45echo one > $TMP/umask-one
46umask g-w,o-w
47echo two > $TMP/umask-two
48stat -c '%a' $TMP/umask-one $TMP/umask-two
49## status: 0
50## STDOUT:
51664
52644
53## END
54## stderr-json: ""
55
56#### umask -S
57# current mask as symbolic
58umask -S | grep 'u=[rwx]*,g=[rwx]*,o=[rwx]*'
59## status: 0
60
61#### umask symbolic parsing
62
63umask 0000
64umask u-rw
65echo status0=$?
66umask | tail -c 4
67
68umask 0700
69umask u=r
70echo status1=$?
71umask | tail -c 4
72
73umask 0000
74umask u=r,g=w,o=x
75echo status2=$?
76umask | tail -c 4
77
78umask 0777
79umask u+r,g+w,o+x
80echo status3=$?
81umask | tail -c 4
82
83umask 0000
84umask u-r,g-w,o-x
85echo status4=$?
86umask | tail -c 4
87
88umask 0137
89umask u=,g+,o-
90echo status5=$?
91umask | tail -c 4
92
93## status: 0
94## STDOUT:
95status0=0
96600
97status1=0
98300
99status2=0
100356
101status3=0
102356
103status4=0
104421
105status5=0
106737
107## END
108
109#### umask symbolic parsing with spaces
110umask 0111
111# spaces are an error in bash
112# dash & mksh only interpret the first one
113umask u=, g+, o-
114echo status=$?
115umask | tail -c 4
116## status: 0
117## STDOUT:
118status=2
119111
120## END
121## OK bash/zsh STDOUT:
122status=1
123111
124## END
125## BUG dash/mksh STDOUT:
126status=0
127711
128## END
129
130#### umask bad symbolic input
131umask b=rwx
132## status: 1
133## OK dash status: 2
134
135#### umask octal number out of range
136umask 0022
137umask 1234567
138# osh currently treats 0o1234567 as 0o0567
139echo status=$?
140umask | tail -c 4
141## status: 0
142## STDOUT:
143status=1
144022
145## END
146## BUG mksh/zsh/dash STDOUT:
147status=0
148567
149## END
150
151#### umask allow overwriting and duplicates
152umask 0111
153umask u=rwx,u=rw,u=r,u=,g=rwx
154umask | tail -c 4
155## status: 0
156## STDOUT:
157701
158## END
159
160#### umask a is valid who
161umask 0732
162umask a=rwx
163umask | tail -c 4
164
165umask 0124
166umask a+r
167umask | tail -c 4
168
169umask 0124
170umask a-r
171umask | tail -c 4
172## status: 0
173## STDOUT:
174000
175120
176564
177## END
178
179#### umask X perm
180umask 0124
181umask a=X
182echo ret0 = $?
183umask | tail -c 4
184
185umask 0246
186umask a=X
187echo ret1 = $?
188umask | tail -c 4
189
190umask 0246
191umask a-X
192echo ret2 = $?
193umask | tail -c 4
194## status: 0
195## STDOUT:
196ret0 = 0
197666
198ret1 = 0
199777
200ret2 = 0
201246
202## END
203## BUG dash/mksh STDOUT:
204ret0 = 0
205666
206ret1 = 0
207666
208ret2 = 0
209357
210## END
211## N-I bash/zsh STDOUT:
212ret0 = 1
213124
214ret1 = 1
215246
216ret2 = 1
217246
218## END
219
220#### umask s perm
221umask 0124
222umask a-s
223echo ret0 = $?
224umask | tail -c 4
225
226umask 0124
227umask a+s
228echo ret1 = $?
229umask | tail -c 4
230
231umask 0124
232umask a=s
233echo ret2 = $?
234umask | tail -c 4
235## status: 0
236## STDOUT:
237ret0 = 0
238124
239ret1 = 0
240124
241ret2 = 0
242777
243## END
244## N-I bash/zsh STDOUT:
245ret0 = 1
246124
247ret1 = 1
248124
249ret2 = 1
250124
251## END
252
253#### umask t perm
254umask 0124
255umask a-t
256echo ret0 = $?
257umask | tail -c 4
258
259umask 0124
260umask a+t
261echo ret1 = $?
262umask | tail -c 4
263
264umask 0124
265umask a=t
266echo ret2 = $?
267umask | tail -c 4
268## status: 0
269## STDOUT:
270ret0 = 0
271124
272ret1 = 0
273124
274ret2 = 0
275777
276## END
277## N-I bash/zsh/mksh STDOUT:
278ret0 = 1
279124
280ret1 = 1
281124
282ret2 = 1
283124
284## END
285## N-I dash STDOUT:
286ret0 = 2
287124
288ret1 = 2
289124
290ret2 = 2
291124
292## END
293
294#### umask default who
295umask 0124
296umask =
297umask | tail -c 4
298
299umask 0124
300umask =rx
301echo ret = $?
302umask | tail -c 4
303
304umask 0124
305umask +
306umask | tail -c 4
307
308umask 0124
309# zsh ALSO treats this as just `umask`
310umask - >/dev/null
311umask | tail -c 4
312## status: 0
313## BUG zsh status: 1
314## STDOUT:
315777
316ret = 0
317222
318124
319124
320## END
321## BUG zsh STDOUT:
322777
323## END
324
325#### umask bare op
326umask 0124
327umask =+=
328umask | tail -c 4
329
330umask 0124
331umask +=
332umask | tail -c 4
333
334umask 0124
335umask =+rwx+rx
336umask | tail -c 4
337## status: 0
338## BUG zsh status: 1
339## STDOUT:
340777
341777
342000
343## END
344## N-I bash STDOUT:
345124
346124
347124
348## END
349## BUG zsh STDOUT:
350## END
351
352#### umask bare op -
353umask 0124
354umask -rwx
355umask | tail -c 4
356
357umask 0124
358umask -wx
359umask | tail -c 4
360
361umask 0124
362umask -=+
363umask | tail -c 4
364## status: 0
365## STDOUT:
366777
367337
368777
369## END
370## N-I dash/bash/mksh/zsh STDOUT:
371124
372124
373124
374## END
375
376#### umask permcopy
377umask 0124
378umask a=u
379umask | tail -c 4
380
381umask 0365
382umask a=g
383umask | tail -c 4
384
385umask 0124
386umask a=o
387umask | tail -c 4
388## status: 0
389## STDOUT:
390111
391666
392444
393## END
394## N-I bash/zsh STDOUT:
395124
396365
397124
398## END
399
400#### umask permcopy running value
401umask 0124
402umask a=,a=u
403umask | tail -c 4
404
405umask 0124
406umask a=
407umask a=u
408umask | tail -c 4
409## status: 0
410## STDOUT:
411111
412777
413## END
414## N-I bash/zsh STDOUT:
415124
416777
417## END
418
419#### umask sequential actions
420umask 0124
421umask u+r+w+x
422umask | tail -c 4
423
424umask 0124
425umask a+r+w+x,o-w
426umask | tail -c 4
427
428umask 0124
429umask a+x+wr-r
430umask | tail -c 4
431## status: 0
432## STDOUT:
433024
434002
435444
436## END
437## N-I bash/zsh STDOUT:
438124
439124
440124
441## END
442