[package] openssh: add ESSENTIAL_PROCESSES
[openwrt/svn-archive/archive.git] / net / openssh / files / sshd.init
old mode 100755 (executable)
new mode 100644 (file)
index c2e535d..7945439
@@ -1,5 +1,12 @@
 #!/bin/sh /etc/rc.common
-# Copyright (C) 2006 OpenWrt.org
+# Copyright (C) 2006-2011 OpenWrt.org
+
+START=50
+STOP=50
+ESSENTIAL_PROCESSES="ssh sshd"
+
+SERVICE_USE_PID=1
+
 
 start() {
        for type in rsa dsa; do {
@@ -8,15 +15,32 @@ start() {
                [ ! -f $key ] && {
                        # generate missing keys
                        [ -x /usr/bin/ssh-keygen ] && {
-                               /usr/bin/ssh-keygen -N '' -t $type -f $key 2>&- >&- && exec $0 $*
-                       } &
-                       exit 0
+                               /usr/bin/ssh-keygen -N '' -t $type -f $key 2>&- >&-
+                       }
                }
        }; done
-       mkdir -p /var/empty
-       /usr/sbin/sshd
+       user_exists sshd 22 || user_add sshd 22 22 sshd /var/empty
+       group_exists sshd 22 || group_add sshd 22 
+       mkdir -m 0700 -p /var/empty
+       service_start /usr/sbin/sshd
 }
 
 stop() {
-       killall sshd
+       service_stop /usr/sbin/sshd
+}
+
+shutdown() {
+       local pid
+       local pids
+       local pid_mine
+
+       stop
+
+       # kill active clients
+       pid_mine="$$"
+       pids="$(pidof sshd)"
+       for pid in $pids; do
+               [ "$pid" = "$pid_mine" ] && continue
+               [ -e "/proc/$pid/stat" ] && kill $pid
+       done
 }