]> git.pld-linux.org Git - packages/openssh.git/blobdiff - opensshd.init
- fixed
[packages/openssh.git] / opensshd.init
index 906b27220a498ed44995020db0d6c9237f642334..6ad6a3564de5074916c553f59a7ed59bbcf1083c 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
 # Check that networking is up.
 if is_yes "${NETWORKING}"; then
        if [ ! -f /var/lock/subsys/network -a "$1" != stop -a "$1" != status -a "$1" != init ]; then
-               msg_network_down OpenSSH
+               msg_network_down "OpenSSH"
                exit 1
        fi
 else
        exit 0
 fi
 
-RETVAL=0
-# See how we were called.
-case "$1" in
-  start)
+adjust_oom() {
+       if [ -e /var/run/sshd.pid ]; then
+               for pid in $(cat /var/run/sshd.pid); do
+                       echo "$SSHD_OOM_ADJUST" 2>/dev/null > /proc/$pid/oom_adj
+               done
+       fi
+}
+
+checkconfig() {
+       /usr/sbin/sshd -t || exit 1
+}
+
+ssh_gen_keys() {
        # 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
+               /usr/bin/ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N '' >&2
                chmod 600 /etc/ssh/ssh_host_key
-               [ -x /sbin/restorecon ] && /sbin/restorecon /etc/ssh/ssh_host_key || :
+               [ -x /sbin/restorecon ] && /sbin/restorecon /etc/ssh/ssh_host_key
        fi
        if [ ! -f /etc/ssh/ssh_host_rsa_key -o ! -s /etc/ssh/ssh_host_rsa_key ]; then
-               /usr/bin/ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' 1>&2
+               /usr/bin/ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' >&2
                chmod 600 /etc/ssh/ssh_host_rsa_key
-               [ -x /sbin/restorecon ] && /sbin/restorecon /etc/ssh/ssh_host_rsa_key || :
+               [ -x /sbin/restorecon ] && /sbin/restorecon /etc/ssh/ssh_host_rsa_key
        fi
        if [ ! -f /etc/ssh/ssh_host_dsa_key -o ! -s /etc/ssh/ssh_host_dsa_key ]; then
-               /usr/bin/ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N '' 1>&2
+               /usr/bin/ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N '' >&2
                chmod 600 /etc/ssh/ssh_host_dsa_key
-               [ -x /sbin/restorecon ] && /sbin/restorecon /etc/ssh/ssh_host_dsa_key || :
+               [ -x /sbin/restorecon ] && /sbin/restorecon /etc/ssh/ssh_host_dsa_key
+       fi
+
+       # commit files. so that sudden reboot here won't lose the data.
+       [ -x /bin/sync ] && /bin/sync
+}
+
+start() {
+       # Check if the service is already running?
+       if [ -f /var/lock/subsys/sshd ]; then
+               msg_already_running "OpenSSH"
+               return
        fi
 
-       if [ ! -f /etc/ssh/ssh_host_key ]; then
-               msg_not_running OpenSSH
+       ssh_gen_keys
+
+       checkconfig
+
+       if [ ! -s /etc/ssh/ssh_host_key ]; then
+               msg_not_running "OpenSSH"
                nls "No SSH host key found! You must run \"%s init\" first." "$0"
                exit 1
        fi
 
-       # Check if the service is already running?
-       if [ ! -f /var/lock/subsys/sshd ]; then
-               msg_starting OpenSSH
-               daemon /usr/sbin/sshd
-               RETVAL=$?
-               [ $RETVAL -eq 0 ] && touch /var/lock/subsys/sshd
-       else
-               msg_already_running OpenSSH
+       if is_yes "$IPV4_NETWORKING" && is_no "$IPV6_NETWORKING"; then
+               OPTIONS="$OPTIONS -4"
        fi
-       ;;
-  stop)
+       if is_yes "$IPV6_NETWORKING" && is_no "$IPV4_NETWORKING"; then
+               OPTIONS="$OPTIONS -6"
+       fi
+
+       msg_starting "OpenSSH"
+       daemon --pidfile /var/run/sshd.pid /usr/sbin/sshd $OPTIONS
+       RETVAL=$?
+       adjust_oom
+       [ $RETVAL -eq 0 ] && touch /var/lock/subsys/sshd
+}
+
+stop() {
        if [ -f /var/lock/subsys/sshd ]; then
-               msg_stopping OpenSSH
-               killproc sshd
-               rm -f /var/run/sshd.pid /var/lock/subsys/sshd >/dev/null 2>&1
+               msg_stopping "OpenSSH"
+               # we use start-stop-daemon to stop sshd, as it is unacceptable for such
+               # critical service as sshd to kill it by procname, but unfortunately
+               # rc-scripts does not provide way to kill *only* by pidfile
+               start-stop-daemon --stop --quiet --pidfile /var/run/sshd.pid && ok || fail
+               rm -f /var/lock/subsys/sshd >/dev/null 2>&1
        else
-               msg_not_running OpenSSH
+               msg_not_running "OpenSSH"
        fi
+}
+
+RETVAL=0
+# See how we were called.
+case "$1" in
+  start)
+       start
+       ;;
+  stop)
+       stop
        ;;
   restart)
-       $0 stop
-       $0 start
-       exit $?
+       checkconfig
+       stop
+       start
        ;;
   status)
        status sshd
@@ -87,24 +129,16 @@ case "$1" in
        nls "Now the SSH host key will be generated. Please note, that if you"
        nls "will use password for the key, you will need to type it on each"
        nls "reboot."
-       /usr/bin/ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key
-       [ -x /sbin/restorecon ] && /sbin/restorecon /etc/ssh/ssh_host_key || :
-       chmod 600 /etc/ssh/ssh_host_key
-       /usr/bin/ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
-       [ -x /sbin/restorecon ] && /sbin/restorecon /etc/ssh/ssh_host_rsa_key || :
-       chmod 600 /etc/ssh/ssh_host_rsa_key
-       /usr/bin/ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
-       chmod 600 /etc/ssh/ssh_host_dsa_key
-       [ -x /sbin/restorecon ] && /sbin/restorecon /etc/ssh/ssh_host_dsa_key || :
-       exit $?
+       ssh_gen_keys
        ;;
   reload|force-reload)
        if [ -f /var/lock/subsys/sshd ]; then
-               msg_reloading OpenSSH
+               checkconfig
+               msg_reloading "OpenSSH"
                killproc sshd -HUP
                RETVAL=$?
        else
-               msg_not_running OpenSSH >&2
+               msg_not_running "OpenSSH"
                exit 7
        fi
        ;;
This page took 0.047638 seconds and 4 git commands to generate.