Skip to content

Commit a5b0495

Browse files
authored
Merge pull request #217 from ErezBinyamin/patch-7
Single letter permission changes (chmod +x)
2 parents 367b953 + 4667a98 commit a5b0495

File tree

1 file changed

+83
-29
lines changed

1 file changed

+83
-29
lines changed

share/adapters/chmod.sh

Lines changed: 83 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)