@@ -54,39 +54,93 @@ chmod_calc(){
5454 fi
5555 done
5656 # If permission string is given -> calc number
57- elif [[ ${ # 1} -eq 9 && $ 1 =~ ^[r,s,S,t,T,w,x,-]+$ ]]
57+ elif [[ $1 =~ ^[r,s,S,t,T,w,x,-]+$ ]]
5858 then
59- p_s=$1
60- num=0
61- # Process specials
62- [[ ' sS' =~ ${p_s: 2: 1} ]] && setuid=' X' && num=$(( num+ 4 ))
63- [[ ' sS' =~ ${p_s: 5: 1} ]] && setgid=' X' && num=$(( num+ 2 ))
64- [[ ' tT' =~ ${p_s: 8: 1} ]] && sticky=' X' && num=$(( num+ 1 ))
65- [ ${num} -gt 0 ] && p_n+=" $num "
66- # Calculate rest of p_n number while populating arrays for table
67- for (( i= 0 ; i< ${# p_s} ; i+= 0 ))
68- do
59+ # FULL STRING
60+ if [[ ${# 1} -eq 9 ]]
61+ then
62+ p_s=$1
6963 num=0
70- [[ " r-" =~ ${p_s: $i : 1} ]] || return 1
71- [[ ${p_s: $i : 1} == ' r' ]] && R+=(' X' ) || R+=(' ' )
72- [[ ${p_s: $((i++)): 1} == ' r' ]] && let num++
73- num=$(( num << 1 ))
74- [[ " w-" =~ ${p_s: $i : 1} ]] || return 1
75- [[ ${p_s: $i : 1} == ' w' ]] && W+=(' X' ) || W+=(' ' )
76- [[ ${p_s: $((i++)): 1} == ' w' ]] && let num++
77- num=$(( num << 1 ))
78- if [ $i -lt 6 ]
64+ # Process specials
65+ [[ ' sS' =~ ${p_s: 2: 1} ]] && setuid=' X' && num=$(( num+ 4 ))
66+ [[ ' sS' =~ ${p_s: 5: 1} ]] && setgid=' X' && num=$(( num+ 2 ))
67+ [[ ' tT' =~ ${p_s: 8: 1} ]] && sticky=' X' && num=$(( num+ 1 ))
68+ [ ${num} -gt 0 ] && p_n+=" $num "
69+ # Calculate rest of p_n number while populating arrays for table
70+ for (( i= 0 ; i< ${# p_s} ; i+= 0 ))
71+ do
72+ num=0
73+ [[ " r-" =~ ${p_s: $i : 1} ]] || return 1
74+ [[ ${p_s: $i : 1} == ' r' ]] && R+=(' X' ) || R+=(' ' )
75+ [[ ${p_s: $((i++)): 1} == ' r' ]] && let num++
76+ num=$(( num << 1 ))
77+ [[ " w-" =~ ${p_s: $i : 1} ]] || return 1
78+ [[ ${p_s: $i : 1} == ' w' ]] && W+=(' X' ) || W+=(' ' )
79+ [[ ${p_s: $((i++)): 1} == ' w' ]] && let num++
80+ num=$(( num << 1 ))
81+ if [ $i -lt 6 ]
82+ then
83+ [[ " sSx-" =~ ${p_s: $i : 1} ]] || return 1
84+ [[ " sx" =~ ${p_s: $i : 1} ]] && X+=(' X' ) || X+=(' ' )
85+ [[ " sx" =~ ${p_s: $((i++)): 1} ]] && let num++
86+ else
87+ [[ " tTx-" =~ ${p_s: $i : 1} ]] || return 1
88+ [[ " tx" =~ ${p_s: $i : 1} ]] && X+=(' X' ) || X+=(' ' )
89+ [[ " tx" =~ ${p_s: $((i++)): 1} ]] && let num++
90+ fi
91+ p_n+=" $num "
92+ done
93+ # PARTIAL STRING
94+ elif [[ $1 =~ ^[r,s,t,w,x]+$ ]]
95+ then
96+ p_s=' ---------'
97+ p_n0=0
98+ p_n1=0
99+ p_n2=0
100+ p_n3=0
101+ R=(' ' ' ' ' ' )
102+ W=(' ' ' ' ' ' )
103+ X=(' ' ' ' ' ' )
104+ if [[ $1 =~ ' r' ]]
79105 then
80- [[ " sSx-" =~ ${p_s: $i : 1} ]] || return 1
81- [[ " sx" =~ ${p_s: $i : 1} ]] && X+=(' X' ) || X+=(' ' )
82- [[ " sx" =~ ${p_s: $((i++)): 1} ]] && let num++
83- else
84- [[ " tTx-" =~ ${p_s: $i : 1} ]] || return 1
85- [[ " tx" =~ ${p_s: $i : 1} ]] && X+=(' X' ) || X+=(' ' )
86- [[ " tx" =~ ${p_s: $((i++)): 1} ]] && let num++
106+ p_s=$( echo $p_s | sed ' s/./r/1; s/./r/4; s/./r/7;' )
107+ let p_n1+=4
108+ let p_n2+=4
109+ let p_n3+=4
110+ R=(' X' ' X' ' X' )
87111 fi
88- p_n+=" $num "
89- done
112+ if [[ $1 =~ ' w' ]]
113+ then
114+ p_s=$( echo $p_s | sed ' s/./w/2' )
115+ let p_n1+=2
116+ W=(' X' ' ' ' ' )
117+ fi
118+ if [[ $1 =~ ' x' ]]
119+ then
120+ p_s=$( echo $p_s | sed ' s/./x/3; s/./x/6; s/./x/9;' )
121+ let p_n1+=1
122+ let p_n2+=1
123+ let p_n3+=1
124+ X=(' X' ' X' ' X' )
125+ fi
126+ if [[ $1 =~ ' s' ]]
127+ then
128+ [[ ${p_s: 2: 1} == ' x' ]] && p_s=$( echo $p_s | sed ' s/./s/3' ) || p_s=$( echo $p_s | sed ' s/./S/3' )
129+ [[ ${p_s: 5: 1} == ' x' ]] && p_s=$( echo $p_s | sed ' s/./s/6' ) || p_s=$( echo $p_s | sed ' s/./S/6' )
130+ let p_n0+=6
131+ setuid=' X'
132+ setgid=' X'
133+ fi
134+ if [[ $1 =~ ' t' ]]
135+ then
136+ let p_n0+=1
137+ [[ ${p_s: 8: 1} == ' x' ]] && p_s=$( echo $p_s | sed ' s/./t/9' ) || p_s=$( echo $p_s | sed ' s/./T/9' )
138+ sticky=' X'
139+ fi
140+ p_n=" ${p_n0}${p_n1}${p_n2}${p_n3} "
141+ else
142+ return 1
143+ fi
90144 else
91145 return 1
92146 fi
0 commit comments