]>
Commit | Line | Data |
---|---|---|
b1e2a48c | 1 | #! /bin/bash |
1877dc0c | 2 | # |
b1e2a48c | 3 | # $Id$ |
1877dc0c | 4 | # |
b1e2a48c | 5 | ### BEGIN INIT INFO |
6 | # Provides: | |
7 | # Required-Start: $network | |
8 | # Required-Stop: | |
9 | # Default-Start: 3 4 5 | |
10 | # Default-Stop: 0 1 2 6 | |
11 | # Description: sshd | |
12 | # Bring up/down the OpenSSH secure shell daemon. | |
13 | ### END INIT INFO | |
1877dc0c | 14 | # |
b1e2a48c | 15 | # Written by Miquel van Smoorenburg <miquels@drinkel.ow.org>. |
16 | # Modified for Debian GNU/Linux by Ian Murdock <imurdock@gnu.ai.mit.edu>. | |
17 | # Modified for OpenLinux by Raymund Will <ray@caldera.de> | |
1877dc0c | 18 | |
b1e2a48c | 19 | NAME=sshd |
20 | DAEMON=/usr/sbin/$NAME | |
21 | # Hack-Alert(TM)! This is necessary to get around the 'reload'-problem | |
22 | # created by recent OpenSSH daemon/ssd combinations. See Caldera internal | |
23 | # PR [linux/8278] for details... | |
24 | PIDF=/var/run/$NAME.pid | |
25 | NAME=$DAEMON | |
26 | ||
27 | _status() { | |
28 | [ -z "$1" ] || local pidf="$1" | |
29 | local ret=-1 | |
30 | local pid | |
31 | if [ -n "$pidf" ] && [ -r "$pidf" ]; then | |
32 | pid=$(head -1 $pidf) | |
33 | else | |
34 | pid=$(pidof $NAME) | |
35 | fi | |
36 | ||
37 | if [ ! -e $SVIlock ]; then | |
38 | # no lock-file => not started == stopped? | |
39 | ret=3 | |
7c6d759d | 40 | elif [ -n "$pidf" -a ! -f "$pidf" ] || [ -z "$pid" ]; then |
b1e2a48c | 41 | # pid-file given but not present or no pid => died, but was not stopped |
42 | ret=2 | |
43 | elif [ -r /proc/$pid/cmdline ] && | |
44 | echo -ne $NAME'\000' | cmp -s - /proc/$pid/cmdline; then | |
45 | # pid-file given and present or pid found => check process... | |
46 | # but don't compare exe, as this will fail after an update! | |
47 | # compares OK => all's well, that ends well... | |
48 | ret=0 | |
49 | else | |
50 | # no such process or exe does not match => stale pid-file or process died | |
51 | # just recently... | |
52 | ret=1 | |
53 | fi | |
54 | return $ret | |
1877dc0c | 55 | } |
56 | ||
b1e2a48c | 57 | # Source function library (and set vital variables). |
58 | . @SVIdir@/functions | |
59 | ||
1877dc0c | 60 | case "$1" in |
b1e2a48c | 61 | start) |
62 | [ ! -e $SVIlock ] || exit 0 | |
63 | [ -x $DAEMON ] || exit 5 | |
64 | SVIemptyConfig @sysconfdir@/sshd_config && exit 6 | |
65 | ||
66 | if [ ! \( -f @sysconfdir@/ssh_host_key -a \ | |
aff51935 | 67 | -f @sysconfdir@/ssh_host_key.pub \) -a \ |
b1e2a48c | 68 | ! \( -f @sysconfdir@/ssh_host_rsa_key -a \ |
aff51935 | 69 | -f @sysconfdir@/ssh_host_rsa_key.pub \) -a \ |
b1e2a48c | 70 | ! \( -f @sysconfdir@/ssh_host_dsa_key -a \ |
aff51935 | 71 | -f @sysconfdir@/ssh_host_dsa_key.pub \) ]; then |
b1e2a48c | 72 | |
73 | echo "$SVIsubsys: host key not initialized: skipped!" | |
74 | echo "$SVIsubsys: use ssh-host-keygen to generate one!" | |
75 | exit 6 | |
76 | fi | |
77 | ||
78 | echo -n "Starting $SVIsubsys services: " | |
79 | ssd -S -x $DAEMON -n $NAME -- $OPTIONS | |
80 | ret=$? | |
81 | ||
82 | echo "." | |
83 | touch $SVIlock | |
84 | ;; | |
85 | ||
86 | stop) | |
87 | [ -e $SVIlock ] || exit 0 | |
88 | ||
89 | echo -n "Stopping $SVIsubsys services: " | |
90 | ssd -K -p $PIDF -n $NAME | |
91 | ret=$? | |
92 | ||
93 | echo "." | |
94 | rm -f $SVIlock | |
95 | ;; | |
96 | ||
97 | force-reload|reload) | |
98 | [ -e $SVIlock ] || exit 0 | |
99 | ||
100 | echo "Reloading $SVIsubsys configuration files: " | |
101 | ssd -K --signal 1 -q -p $PIDF -n $NAME | |
102 | ret=$? | |
103 | echo "done." | |
104 | ;; | |
105 | ||
106 | restart) | |
107 | $0 stop | |
108 | $0 start | |
109 | ret=$? | |
110 | ;; | |
111 | ||
112 | status) | |
113 | _status $PIDF | |
114 | ret=$? | |
115 | ;; | |
116 | ||
117 | *) | |
118 | echo "Usage: $SVIscript {[re]start|stop|[force-]reload|status}" | |
119 | ret=2 | |
120 | ;; | |
121 | ||
1877dc0c | 122 | esac |
123 | ||
b1e2a48c | 124 | exit $ret |
125 |