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

430 lines, 264 significant
1## compare_shells: dash bash mksh zsh
2## oils_failures_allowed: 3
3# case #24 with ulimit -f 1 is different under C++ for some reason - could be due to the python2
4# intepreter and SIGXFSZ
5
6#### get umask
7umask | grep '[0-9]\+' # check for digits
8## status: 0
9
10#### set umask in octal
11rm -f $TMP/umask-one $TMP/umask-two
12umask 0002
13echo one > $TMP/umask-one
14umask 0022
15echo two > $TMP/umask-two
16stat -c '%a' $TMP/umask-one $TMP/umask-two
17## status: 0
18## STDOUT:
19664
20644
21## END
22## stderr-json: ""
23
24#### set umask symbolically
25umask 0002 # begin in a known state for the test
26rm -f $TMP/umask-one $TMP/umask-two
27# open()s 'umask-one' with mask 0666, then subtracts 0002 -> 0664
28echo one > $TMP/umask-one
29umask g-w,o-w
30echo two > $TMP/umask-two
31stat -c '%a' $TMP/umask-one $TMP/umask-two
32## status: 0
33## STDOUT:
34664
35644
36## END
37## stderr-json: ""
38
39#### umask -p
40umask -p | grep 'umask [0-9][0-9][0-9][0-9]'
41## status: 0
42## N-I dash/mksh/zsh status: 1
43
44#### umask -S
45# current mask as symbolic
46umask -S | grep 'u=[rwx]*,g=[rwx]*,o=[rwx]*'
47## status: 0
48
49#### umask symbolic parsing
50
51umask 0000
52umask u-rw
53echo status0=$?
54umask | tail -c 4
55
56umask 0700
57umask u=r
58echo status1=$?
59umask | tail -c 4
60
61umask 0000
62umask u=r,g=w,o=x
63echo status2=$?
64umask | tail -c 4
65
66umask 0777
67umask u+r,g+w,o+x
68echo status3=$?
69umask | tail -c 4
70
71umask 0000
72umask u-r,g-w,o-x
73echo status4=$?
74umask | tail -c 4
75
76umask 0137
77umask u=,g+,o-
78echo status5=$?
79umask | tail -c 4
80
81## status: 0
82## STDOUT:
83status0=0
84600
85status1=0
86300
87status2=0
88356
89status3=0
90356
91status4=0
92421
93status5=0
94737
95## END
96
97#### umask symbolic parsing with spaces
98umask 0111
99# spaces are an error in bash
100# dash & mksh only interpret the first one
101umask u=, g+, o-
102echo status=$?
103umask | tail -c 4
104## status: 0
105## STDOUT:
106status=2
107111
108## END
109## OK bash/zsh STDOUT:
110status=1
111111
112## END
113## BUG dash/mksh STDOUT:
114status=0
115711
116## END
117
118#### umask bad symbolic input
119umask b=rwx
120## status: 1
121## OK dash status: 2
122
123#### umask octal number out of range
124umask 0022
125umask 1234567
126# osh currently treats 0o1234567 as 0o0567
127echo status=$?
128umask | tail -c 4
129## status: 0
130## STDOUT:
131status=1
132022
133## END
134## BUG mksh/zsh/dash STDOUT:
135status=0
136567
137## END
138
139#### umask allow overwriting and duplicates
140umask 0111
141umask u=rwx,u=rw,u=r,u=,g=rwx
142umask | tail -c 4
143## status: 0
144## STDOUT:
145701
146## END
147
148#### umask a is valid who
149umask 0732
150umask a=rwx
151umask | tail -c 4
152
153umask 0124
154umask a+r
155umask | tail -c 4
156
157umask 0124
158umask a-r
159umask | tail -c 4
160## status: 0
161## STDOUT:
162000
163120
164564
165## END
166
167#### umask X perm
168umask 0124
169umask a=X
170echo ret0 = $?
171umask | tail -c 4
172
173umask 0246
174umask a=X
175echo ret1 = $?
176umask | tail -c 4
177
178umask 0246
179umask a-X
180echo ret2 = $?
181umask | tail -c 4
182## status: 0
183## STDOUT:
184ret0 = 0
185666
186ret1 = 0
187777
188ret2 = 0
189246
190## END
191## BUG dash/mksh STDOUT:
192ret0 = 0
193666
194ret1 = 0
195666
196ret2 = 0
197357
198## END
199## N-I bash/zsh STDOUT:
200ret0 = 1
201124
202ret1 = 1
203246
204ret2 = 1
205246
206## END
207
208#### umask s perm
209umask 0124
210umask a-s
211echo ret0 = $?
212umask | tail -c 4
213
214umask 0124
215umask a+s
216echo ret1 = $?
217umask | tail -c 4
218
219umask 0124
220umask a=s
221echo ret2 = $?
222umask | tail -c 4
223## status: 0
224## STDOUT:
225ret0 = 0
226124
227ret1 = 0
228124
229ret2 = 0
230777
231## END
232## N-I bash/zsh STDOUT:
233ret0 = 1
234124
235ret1 = 1
236124
237ret2 = 1
238124
239## END
240
241#### umask t perm
242umask 0124
243umask a-t
244echo ret0 = $?
245umask | tail -c 4
246
247umask 0124
248umask a+t
249echo ret1 = $?
250umask | tail -c 4
251
252umask 0124
253umask a=t
254echo ret2 = $?
255umask | tail -c 4
256## status: 0
257## STDOUT:
258ret0 = 0
259124
260ret1 = 0
261124
262ret2 = 0
263777
264## END
265## N-I bash/zsh/mksh STDOUT:
266ret0 = 1
267124
268ret1 = 1
269124
270ret2 = 1
271124
272## END
273## N-I dash STDOUT:
274ret0 = 2
275124
276ret1 = 2
277124
278ret2 = 2
279124
280## END
281
282#### umask default who
283umask 0124
284umask =
285umask | tail -c 4
286
287umask 0124
288umask =rx
289echo ret = $?
290umask | tail -c 4
291
292umask 0124
293umask +
294umask | tail -c 4
295
296umask 0124
297# zsh ALSO treats this as just `umask`
298umask - >/dev/null
299umask | tail -c 4
300## status: 0
301## BUG zsh status: 1
302## STDOUT:
303777
304ret = 0
305222
306124
307124
308## END
309## BUG zsh STDOUT:
310777
311## END
312
313#### umask bare op
314umask 0124
315umask =+=
316umask | tail -c 4
317
318umask 0124
319umask +=
320umask | tail -c 4
321
322umask 0124
323umask =+rwx+rx
324umask | tail -c 4
325## status: 0
326## BUG zsh status: 1
327## STDOUT:
328777
329777
330000
331## END
332## N-I bash STDOUT:
333124
334124
335124
336## END
337## BUG zsh STDOUT:
338## END
339
340#### umask bare op -
341umask 0124
342umask -rwx
343umask | tail -c 4
344
345umask 0124
346umask -wx
347umask | tail -c 4
348
349umask 0124
350umask -=+
351umask | tail -c 4
352## status: 0
353## STDOUT:
354777
355337
356777
357## END
358## N-I dash/bash/mksh/zsh STDOUT:
359124
360124
361124
362## END
363
364#### umask permcopy
365umask 0124
366umask a=u
367umask | tail -c 4
368
369umask 0365
370umask a=g
371umask | tail -c 4
372
373umask 0124
374umask a=o
375umask | tail -c 4
376## status: 0
377## STDOUT:
378111
379666
380444
381## END
382## N-I bash/zsh STDOUT:
383124
384365
385124
386## END
387
388#### umask permcopy running value
389umask 0124
390umask a=,a=u
391umask | tail -c 4
392
393umask 0124
394umask a=
395umask a=u
396umask | tail -c 4
397## status: 0
398## STDOUT:
399111
400777
401## END
402## N-I bash/zsh STDOUT:
403124
404777
405## END
406
407#### umask sequential actions
408umask 0124
409umask u+r+w+x
410umask | tail -c 4
411
412umask 0124
413umask a+r+w+x,o-w
414umask | tail -c 4
415
416umask 0124
417umask a+x+wr-r
418umask | tail -c 4
419## status: 0
420## STDOUT:
421024
422002
423444
424## END
425## N-I bash/zsh STDOUT:
426124
427124
428124
429## END
430