-
Notifications
You must be signed in to change notification settings - Fork 0
/
shellinabox
executable file
·149 lines (135 loc) · 4.85 KB
/
shellinabox
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
#!/bin/sh
### BEGIN INIT INFO
# Provides: shellinabox
# Required-Start: $network $remote_fs
# Required-Stop: $network $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Shell In A Box Daemon
# Description: Daemon for publishing a login shell at
# http://localhost:SHELLINABOX_PORT
# where default port number is 4200.
### END INIT INFO
# Authors: Markus Gutschke <[email protected]>, Marc Singer <[email protected]>
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/bin:/usr/sbin:/usr/bin
DESC="Shell In A Box Daemon"
NAME="shellinabox"
DAEMON="/usr/local/bin/shellinaboxd"
PIDFILE="/var/run/shellinaboxd.pid"
SCRIPTNAME=/etc/init.d/$NAME
# Exit if the package is not installed
[ -x $DAEMON ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
# Set some default values
SHELLINABOX_DATADIR="${SHELLINABOX_DATADIR:-/var/lib/shellinabox}"
SHELLINABOX_PORT="${SHELLINABOX_PORT:-4200}"
SHELLINABOX_USER="${SHELLINABOX_USER:-shellinabox}"
SHELLINABOX_GROUP="${SHELLINABOX_GROUP:-shellinabox}"
SHELLINABOX_ARGS=" -q --localhost-only --linkify=normal -t -s '/:root:root:/root:/bin/bash' -s '/installcmd:root:root:/root:XTERM=xterm-256color URL=\${url} PEER=\${peer} /root/bin/installcmd'"
#
# Function that starts the daemon/service.
#
d_start() {
if [ -z "$SHELLINABOX_DAEMON_START" -o \
"$SHELLINABOX_DAEMON_START" = "0" ]; then
return 0
fi
eval start-stop-daemon --start --oknodo --pidfile "'$PIDFILE'" \
--exec "'$DAEMON'" -- --background="'$PIDFILE'" \
-c "'${SHELLINABOX_DATADIR}'" -p "'${SHELLINABOX_PORT}'" \
-u "'${SHELLINABOX_USER}'" -g "'${SHELLINABOX_GROUP}'" \
$(for i in $(ls /etc/shellinabox/options-enabled/*.css |
sed -e \
's/.*[/]\([0-9]*\)[-_+][^/:,;]*[.]css/\1/'|
sort -u); do
for j in /etc/shellinabox/options-enabled/"$i"*.css; do
echo -n "$j" |
sed -e 's/\(.*[/]\)\([0-9]*\)\([-_+]\)\([^/:,;]*\)[.]css/\4:\3\1\2\3\4.css,/
s/:_/:-/'
done |
sed -e 's/,$/;/'
done |
sed -e 's/;$//
//b
s/.*/--user-css "\0"/') \
"${SHELLINABOX_ARGS}"
}
#
# Function that stops the daemon/service.
#
d_stop() {
start-stop-daemon --stop --oknodo --pidfile "$PIDFILE"
rm -f "$PIDFILE"
}
#
# Function that reloads the config file for the daemon/service.
#
d_reload() {
# Only reload if there are no active sessions running
[ -r "$PIDFILE" ] &&
[ `ps o pid= --ppid "\`cat "$PIDFILE"\`\`ps o pid= --ppid \
\\\`cat "$PIDFILE"\\\`|
xargs -r -n 1 printf ',%s'\`" |
wc -l` -gt 1 ] &&
return 1
d_stop
d_start
}
#
# Function that check the status of the daemon/service.
#
d_status() {
[ -r "$PIDFILE" ] && kill -0 `cat "$PIDFILE"` &&
echo "$DESC is running" || echo "$DESC is not running"
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
d_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
d_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
reload)
[ "$VERBOSE" != no ] && log_daemon_msg "Reloading services for $DESC" "$NAME"
d_reload
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
restart|force-reload)
[ "$VERBOSE" != no ] && log_daemon_msg "Restarting $DESC" "$NAME"
d_stop
d_start
case "$?" in
0) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
1) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
*) [ "$VERBOSE" != no ] && log_end_msg 1 ;; # Failed to start
esac
;;
status)
d_status
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|reload}" >&2
exit 1
;;
esac
exit 0