X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/32fd1a6c7dd28a18abdab6db20316db2a0939d77..1d1240855a20a954a108e5692182e9234a1a7f9a:/package/dropbear/files/dropbear.init?ds=sidebyside diff --git a/package/dropbear/files/dropbear.init b/package/dropbear/files/dropbear.init index fabf54e74..c909d2896 100755 --- a/package/dropbear/files/dropbear.init +++ b/package/dropbear/files/dropbear.init @@ -2,16 +2,40 @@ # Copyright (C) 2006-2010 OpenWrt.org # Copyright (C) 2006 Carlos Sobrinho -NAME=dropbear -PROG=/usr/sbin/dropbear START=50 STOP=50 + +SERVICE_USE_PID=1 + +NAME=dropbear +PROG=/usr/sbin/dropbear PIDCOUNT=0 EXTRA_COMMANDS="killclients" EXTRA_HELP=" killclients Kill ${NAME} processes except servers and yourself" dropbear_start() { + append_ports() + { + local ifname="$1" + local port="$2" + + grep -qs "^ *$ifname:" /proc/net/dev || { + append args "-p $port" + return + } + + for addr in $( + ifconfig "$ifname" | sed -ne ' + /addr: *fe[89ab][0-9a-f]:/d + s/.* addr: *\([0-9a-f:\.]*\).*/\1/p + ' + ); do + append args "-p $addr:$port" + done + } + + local section="$1" # check if section is enabled (default) @@ -26,41 +50,41 @@ dropbear_start() # increase pid file count to handle multiple instances correctly PIDCOUNT="$(( ${PIDCOUNT} + 1))" - # prepare parameters + # prepare parameters (initialise with pid file) + local pid_file="/var/run/${NAME}.${PIDCOUNT}.pid" + local args="-P $pid_file" + local val # A) password authentication - local nopasswd - local passauth - config_get_bool passauth "${section}" PasswordAuth 1 - [ "${passauth}" -eq 0 ] && nopasswd=1 + config_get_bool val "${section}" PasswordAuth 1 + [ "${val}" -eq 0 ] && append args "-s" # B) listen interface and port local port local interface - local address - config_get port "${section}" Port config_get interface "${section}" Interface - config_get address "${interface}" ipaddr - port="${address:+${address}:}${port}" + config_get interface "${interface}" ifname "$interface" + config_get port "${section}" Port 22 + append_ports "$interface" "$port" # C) banner file - local bannerfile - config_get bannerfile "${section}" BannerFile - [ -f "$bannerfile" ] || bannerfile='' + config_get val "${section}" BannerFile + [ -f "${val}" ] && append args "-b ${val}" # D) gatewayports - local gatewayports - config_get_bool gatewayports "${section}" GatewayPorts 0 - [ "${gatewayports}" -eq 1 ] || gatewayports='' + config_get_bool val "${section}" GatewayPorts 0 + [ "${val}" -eq 1 ] && append args "-a" # E) root password authentication - local norootpasswd - local rootpassauth - config_get_bool rootpassauth "${section}" RootPasswordAuth 1 - [ "${rootpassauth}" -eq 0 ] && norootpasswd=1 - # concatenate parameters - local args - args="${nopasswd:+-s }${norootpasswd:+-g }${port:+-p ${port} }${bannerfile:+-b $bannerfile }${gatewayports:+-a }-P /var/run/${NAME}.${PIDCOUNT}.pid" + config_get_bool val "${section}" RootPasswordAuth 1 + [ "${val}" -eq 0 ] && append args "-g" + # F) root login + config_get_bool val "${section}" RootLogin 1 + [ "${val}" -eq 0 ] && append args "-w" + # G) host keys + config_get val "${section}" rsakeyfile + [ -f "${val}" ] && append args "-r ${val}" + config_get val "${section}" dsskeyfile + [ -f "${val}" ] && append args "-d ${val}" # execute program and return its exit code [ "${verbosed}" -ne 0 ] && echo "${initscript}: section ${section} starting ${PROG} ${args}" - ${PROG} ${args} - return $? + SERVICE_PID_FILE="$pid_file" service_start ${PROG} ${args} } keygen() @@ -99,14 +123,17 @@ start() stop() { - # killing all server processes - local pidfile - for pidfile in `ls /var/run/${NAME}.*.pid` - do - start-stop-daemon -q -K -s KILL -p "${pidfile}" -n "${NAME}" - rm -f "${pidfile}" + local pid_file pid_files + + pid_files=`ls /var/run/${NAME}.*.pid 2>/dev/null` + + [ -z "$pid_files" ] && return 1 + + for pid_file in $pid_files; do + SERVICE_PID_FILE="$pid_file" service_stop ${PROG} && { + rm -f ${pid_file} + } done - [ -z "${pidfile}" ] && echo "${initscript}: no pid files, if you get problems with start then try killclients" } killclients()