forked from changi67/tiki
-
Notifications
You must be signed in to change notification settings - Fork 0
/
setup-legacy.sh
217 lines (188 loc) · 5.12 KB
/
setup-legacy.sh
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
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
# (c) Copyright 2002-2013 by authors of the Tiki Wiki CMS Groupware Project
#
# All Rights Reserved. See copyright.txt for details and a complete list of authors.
# Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
# $Id$
# This file sets permissions and creates relevant folders for Tiki.
#
DIRS="db dump img/wiki img/wiki_up img/trackers modules/cache temp temp/cache temp/public templates_c templates styles maps whelp mods files tiki_tests/tests temp/unified-index"
AUSER=nobody
AGROUP=nobody
VIRTUALS=""
USER=`whoami`
if [ -f /etc/debian_version ]; then
AUSER=www-data
AGROUP=www-data
elif [ -f /etc/redhat-release ]; then
AUSER=apache
AGROUP=apache
elif [ -f /etc/gentoo-release ]; then
AUSER=apache
AGROUP=apache
else
UNAME=`uname | cut -c 1-6`
if [ "$UNAME" = "CYGWIN" ]; then
AUSER=SYSTEM
AGROUP=SYSTEM
elif [ "$UNAME" = "Darwin" ]; then
AUSER=_www
AGROUP=_www
fi
fi
usage() {
cat <<EOF
usage: $0 [<switches>] open|fix
-h show help
-u user owner of files (default: $AUSER)
-g group group of files (default: $AGROUP)
-v virtuals list of virtuals (for multitiki, example: "www1 www2")
-n not interactive mode
EOF
}
OPT_AUSER=
OPT_AGROUP=
OPT_VIRTUALS=
OPT_NOTINTERACTIVE=
while getopts "hu:g:v:n" OPTION; do
case $OPTION in
h) usage ; exit 0 ;;
u) OPT_AUSER=$OPTARG ;;
g) OPT_AGROUP=$OPTARG ;;
v) OPT_VIRTUALS=$OPTARG ;;
n) OPT_NOTINTERACTIVE=1 ;;
?) usage ; exit 1 ;;
esac
done
shift $(($OPTIND - 1))
if [ -z $1 ]; then
COMMAND=fix
else
COMMAND=$1
fi
if [ "$COMMAND" = 'fix' ]; then
if [ "$USER" = 'root' ]; then
if [ -n "$OPT_AUSER" ]; then
AUSER=$OPT_AUSER
elif [ -z "$OPT_NOTINTERACTIVE" ]; then
read -p "User [$AUSER]: " REPLY
if [ -n "$REPLY" ]; then
AUSER=$REPLY
fi
fi
else
if [ -z "$OPT_NOTINTERACTIVE" ]; then
echo "You are not root or you are on a shared hosting account. You can now:
1- ctrl-c to break now.
or
2- If you press enter to continue, you will probably get some error messages
but it (the script) will still fix what it can according to the permissions
of your user. This script will now ask you some questions. If you don't know
what to answer, just press enter to each question (to use default value)"
read -p "> Press enter to continue: " WAIT
AUSER=$USER
fi
fi
if [ -n "$OPT_AGROUP" ]; then
AGROUP=$OPT_AGROUP
elif [ -z "$OPT_NOTINTERACTIVE" ]; then
read -p "> Group [$AGROUP]: " REPLY
if [ -n "$REPLY" ]; then
AGROUP=$REPLY
fi
fi
touch db/virtuals.inc
if [ -n "$OPT_VIRTUALS" ]; then
VIRTUALS=$OPT_VIRTUALS
elif [ -n "$OPT_NOTINTERACTIVE" ]; then
VIRTUALS=$(cat db/virtuals.inc)
else
read -p "> Multi [$(cat -s db/virtuals.inc | tr '\n' ' ')]: " VIRTUALS
[ -z "$VIRTUALS" ] && VIRTUALS=$(cat db/virtuals.inc)
fi
if [ -n "$VIRTUALS" ]; then
for vdir in $VIRTUALS; do
echo $vdir >> db/virtuals.inc
cat db/virtuals.inc | sort | uniq > db/virtuals.inc_new
rm -f db/virtuals.inc && mv db/virtuals.inc_new db/virtuals.inc
done
fi
echo "Checking dirs : "
for dir in $DIRS; do
echo -n " $dir ... "
if [ ! -d $dir ]; then
echo -n " Creating directory"
mkdir -p $dir
fi
echo " ok."
if [ -n "$VIRTUALS" ] && [ $dir != "temp/unified-index" ]; then
for vdir in $VIRTUALS; do
echo -n " $dir/$vdir ... "
if [ ! -d "$dir/$vdir" ]; then
echo -n " Creating Directory"
mkdir -p "$dir/$vdir"
fi
echo " ok."
done
fi
done
# Check that the USER is in AGROUP
USERINAGROUP="no"
for grp in `id -Gn $USER`; do
if [ "$grp" = "$AGROUP" ]; then
USERINAGROUP="yes"
fi
done
echo "Fix global perms ..."
if [ "$USER" = 'root' ]; then
#chown -fR $AUSER:$AGROUP . || echo "Could not change ownership to $AUSER"
echo -n "Change user to $AUSER and group to $AGROUP..."
chown -fR $AUSER:$AGROUP .
echo " done."
else
if [ -n "$OPT_AUSER" ]; then
echo "You are not root. We will not try to change the file owners."
fi
if [ "$USERINAGROUP" = "yes" ]; then
echo -n "Change group to $AGROUP ..."
chgrp -Rf $AGROUP .
echo " done."
else
echo "You are not root and you are not in the group $AGROUP. We can't change the group ownership to $AGROUP."
echo "Special dirs permissions will be set accordingly."
fi
fi
# find . ! -regex '.*^\(devtools\).*' -type f -exec chmod 644 {} \;
# echo -n " files perms fixed ..."
# find . -type d -exec chmod 755 {} \;
# echo " dirs perms fixed ... done"
echo -n "Fix normal dirs ..."
chmod -fR u=rwX,go=rX .
echo " done."
echo -n "Fix special dirs ..."
if [ "$USER" = 'root' -o "$USERINAGROUP" = "yes" ]; then
chmod -R g+w $DIRS
else
chmod -fR go+w $DIRS
fi
# chmod 664 robots.txt tiki-install.php
echo " done."
elif [ "$COMMAND" = 'open' ]; then
if [ "$USER" = 'root' ]; then
if [ -n "$OPT_AUSER" ]; then
AUSER=$OPT_AUSER
elif [ -z "$OPT_NOTINTERACTIVE" ]; then
read -p "User [$AUSER]: " REPLY
if [ -n "$REPLY" ]; then
AUSER=$REPLY
fi
fi
chown -R $AUSER .
else
echo "You are not root or you are on a shared hosting account. We will not try to change the file owners."
fi
chmod -R a=rwX .
echo " done"
else
echo "Type 'fix' or 'open' as command argument."
fi
exit 0