]> git.pld-linux.org Git - packages/openssh.git/blobdiff - opensshd.init
- prevent sshd from being killed via oom
[packages/openssh.git] / opensshd.init
index baf7c33db57f2901cc649557057faa1aad06bcfb..17c2a2b9274cbc7f9c93c502eacb0ddff4a2381d 100644 (file)
@@ -8,6 +8,7 @@
 #              Ssh can be used for remote login, remote file copying, TCP port \
 #              forwarding etc. Ssh offers strong encryption and authentication.
 
+SSHD_OOM_ADJUST=-17
 
 # Source function library
 . /etc/rc.d/init.d/functions
@@ -28,14 +29,21 @@ else
        exit 0
 fi
 
+adjust_oom() {
+    if [ -e /var/run/sshd.pid ]; then
+       for pid in $(cat /var/run/sshd.pid); do
+               if [ -w "/proc/$pid/oom_adj" ]; then
+                   echo "$SSHD_OOM_ADJUST" > "/proc/$pid/oom_adj" 2> /dev/null || :
+               fi
+       done
+    fi
+}
+
 checkconfig() {
        /usr/sbin/sshd -t || exit 1
 }
 
-RETVAL=0
-# See how we were called.
-case "$1" in
-  start)
+start() {
        # generate new keys with empty passwords if they do not exist
        if [ ! -f /etc/ssh/ssh_host_key -o ! -s /etc/ssh/ssh_host_key ]; then
                /usr/bin/ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N '' 1>&2
@@ -64,14 +72,16 @@ case "$1" in
        # Check if the service is already running?
        if [ ! -f /var/lock/subsys/sshd ]; then
                msg_starting OpenSSH
-               daemon /usr/sbin/sshd
+               daemon --pidfile /var/run/sshd.pid /usr/sbin/sshd
                RETVAL=$?
+               adjust_oom
                [ $RETVAL -eq 0 ] && touch /var/lock/subsys/sshd
        else
                msg_already_running OpenSSH
        fi
-       ;;
-  stop)
+}
+
+stop() {
        if [ -f /var/lock/subsys/sshd ]; then
                msg_stopping OpenSSH
                # we use start-stop-daemon to stop sshd, as it is unacceptable for such
@@ -82,12 +92,21 @@ case "$1" in
        else
                msg_not_running OpenSSH
        fi
+}
+
+RETVAL=0
+# See how we were called.
+case "$1" in
+  start)
+       start
+       ;;
+  stop)
+       stop
        ;;
   restart)
        checkconfig
-       $0 stop
-       $0 start
-       exit $?
+       stop
+       start
        ;;
   status)
        status sshd
@@ -110,6 +129,7 @@ case "$1" in
        ;;
   reload|force-reload)
        if [ -f /var/lock/subsys/sshd ]; then
+               checkconfig
                msg_reloading OpenSSH
                killproc sshd -HUP
                RETVAL=$?
This page took 0.053078 seconds and 4 git commands to generate.