ccollect:0.6.2->0.7.0
[nslu2-linux/optware.git] / sources / scponly / mkscproot
blob9869a8e4ad0e7403e59afd9cea55530eaf9953f9
1 #!/bin/sh
3 # $Id$
5 # NOTE:
6 # This script works with the standard busybox tools.
8 PATH=/bin:/usr/bin:/opt/bin
10 PROG=${0##*/}
11 ERROR=""
12 USER=""
13 HOME=""
14 ROOT=""
15 CREATE=""
16 PASSWD=""
17 FORCE=""
18 SUPPORT=2
20 if [ $(id -u) != 0 ]
21 then
22 echo "This program needs to run as root" >&2
23 exit 1
27 # To make sure that files are created with the correct permissions.
29 umask 022
32 if [ -f /.unslung ]
33 then
34 FIRMWARE=unslung
35 FIRMWARE_VERSION=$(cat /.unslung)
36 SUPPORT=""
37 elif grep -q OpenSlug /etc/issue
38 then
39 FIRMWARE=OpenSlug
40 FIRMWARE_VERSION=$(awk '/OpenSlug/ {print $2}' /etc/issue)
41 SUPPORT="1"
42 else
43 FIRMWARE=unknown
44 FIRMWARE_VERSION=unknown
47 if SSH_VERSION=$(ssh -V 2>&1)
48 then
49 if [ "${SSH_VERSION%_*}" = OpenSSH ]
50 then
51 SSH=openssh
52 else
53 SUPPORT=2
55 else
56 if DROPBEAR=$(ssh -V 2>&1 | grep Dropbear)
57 then
58 SSH_VERSION="${DROPBEAR}"
59 SSH=dropbear
60 [ ${FIRMWARE} = unslung ] && SUPPORT=2
61 else
62 SSH=unknown
63 SUPPORT=2
67 while [ $# -ge 1 ]
69 case "$1" in
70 -h)
71 HOME=$2
72 shift 2
74 -u)
75 USER=$2
76 shift 2
78 -r)
79 ROOT=$2
80 shift 2
82 -n)
83 CREATE=1
84 shift
86 -e)
87 PASSWD=1
88 shift
90 -f)
91 FORCE=1
92 shift
95 ERROR=1
96 shift
98 esac
99 done
101 if [ "${SUPPORT}" ]
102 then
103 echo >&2
104 echo "Unsuported configuration." >&2
105 echo >&2
106 echo "Suported configurations:" >&2
107 echo " unslung & openssh" >&2
108 echo >&2
109 echo "Work in progress:" >&2
110 echo " openslug & busybox" >&2
111 echo >&2
112 echo "Work in progress:" >&2
113 echo " openslug & openssh" >&2
114 echo >&2
115 echo "Use \"-f\" (force) to try creating a chroot" >&2
116 echo >&2
117 echo "And report succes on the mailinglist" >&2
118 echo >&2
119 echo "Detected firmware: $FIRMWARE_VERSION" >&2
120 echo "Detected ssh: $SSH_VERSION" >&2
121 echo >&2
122 if [ ${SUPPORT} = 2 -a ! "${FORCE}" ]
123 then
124 exit 2
128 if [ -z "${USER}" -o "${ERROR}" ]
129 then
130 echo "
131 ${PROG} [-n] [-r root] [-h <home>] -u <user>
133 Example:
134 ${PROG} -u scponly
136 Don't use other options unless you know what you do!!
138 " >&2
139 exit 3
142 if [ -z "${ROOT}" ]
143 then
144 ROOT="/home/${USER}_root"
147 if [ -z "${HOME}" ]
148 then
149 HOME="${ROOT}//${USER}"
153 # We should use adduser but it's not default installed on unslung
155 if [ -z "${CREATE}" ]
156 then
157 if grep -q "^${USER}:" /etc/passwd
158 then
159 echo "User exists: Choose a other user name"
160 exit 4
162 ID=2000
163 while grep -q :${ID}: /etc/passwd
165 ID=$((${ID}+1))
166 done
167 echo "${USER}:x:${ID}:100:${USER} (scponly):${HOME}:/opt/sbin/scponlyc" >>/etc/passwd
170 mkdir -p "${HOME}"
172 for d in bin etc lib usr usr/bin usr/lib usr/libexec dev
174 mkdir "${ROOT}/${d}"
175 done
177 chown -R root:root "${ROOT}"
178 chmod -R 755 "${ROOT}" "${HOME}"
180 cd "${ROOT}"
181 ln -s usr opt
183 cd "${ROOT}/bin"
184 cp /bin/busybox chgrp
186 for f in chmod chown ln ls mkdir mv rm rmdir
188 ln chgrp "${f}"
189 done
191 cd "${ROOT}/lib"
193 for f in ld-linux.so.2 libc.so.6 libcrypt.so.1 libdl.so.2 libm.so.6 libnsl.so.1 libnss_files.so.2 libresolv.so.2 libutil.so.1 libgcc_s.so.1
195 [ -f "/lib/${f}" ] && cp "/lib/${f}" .
196 done
198 cd "${ROOT}/etc"
200 echo "root:x:0:" > group
201 echo "users:x:100:" >> group
203 echo "root::0:0:::" > passwd
204 echo "bin::1:1:::" >> passwd
205 echo "${USER}::${ID}:100::/${USER}:" >> passwd
207 for f in ld.so.conf ld.so.cache
209 [ -f "/etc/${f}" ] && cp "/etc/${f}" .
210 done
212 cd "${ROOT}/dev"
213 mknod null c 1 3
214 chmod 777 null
216 cd "${ROOT}/usr/bin"
218 if [ -f /opt/bin/scp ]
219 then
220 cp /opt/bin/scp .
221 elif [ -f /usr/bin/scp ]
222 then
223 cp /usr/bin/scp .
226 cd "${ROOT}/usr/libexec"
227 if [ -f /opt/libexec/sftp-server ]
228 then
229 cp /opt/libexec/sftp-server .
230 elif [ -f /usr/libexec/sftp-server ]
231 then
232 cp /usr/libexec/sftp-server .
235 cd "${ROOT}/usr/lib"
236 [ -f /opt/lib/libcrypto.so.0.9.7 ] && cp /opt/lib/libcrypto.so.0.9.7 .
238 if [ -f /opt/lib/libz.so.1.2.3 ]
239 then
240 cp /opt/lib/libz.so.1.2.3 .
241 ln -s libz.so.1.2.3 libz.so
242 ln -s libz.so.1.2.3 libz.so.1
243 elif [ -f /usr/lib/libz.so.1.2.3 ]
244 then
245 cp /usr/lib/libz.so.1.2.3 .
246 ln -s libz.so.1.2.3 libz.so
247 ln -s libz.so.1.2.3 libz.so.1
250 if [ -z "${PASSWD}" ]
251 then
252 passwd "${USER}"
256 # This doesn't work if we do it to fast after adding the account (bug?)
258 chown "${USER}":100 "${HOME}"