-# Copyright (C) 2006 OpenWrt.org
-
-start() {
- for type in rsa dss; do {
- # check for keys
- key=/etc/dropbear/dropbear_${type}_host_key
- [ ! -f $key ] && {
- # generate missing keys
- mkdir -p /etc/dropbear
- [ -x /usr/bin/dropbearkey ] && {
- /usr/bin/dropbearkey -t $type -f $key 2>&- >&- && exec /etc/rc.common "$initscript" start
- } &
- exit 0
- }
- }; done
-
- /usr/sbin/dropbear
+# Copyright (C) 2006-2009 OpenWrt.org
+# Copyright (C) 2006 Carlos Sobrinho
+
+NAME=dropbear
+PROG=/usr/sbin/dropbear
+START=50
+PIDCOUNT=0
+EXTRA_COMMANDS="killclients"
+EXTRA_HELP=" killclients Kill ${NAME} processes except servers and yourself"
+
+dropbear_start()
+{
+ local section="$1"
+
+ # check if section is enabled (default)
+ local enabled
+ config_get_bool enabled "${section}" enable 1
+ [ "${enabled}" -eq 0 ] && return 1
+
+ # verbose parameter
+ local verbosed
+ config_get_bool verbosed "${section}" verbose 0
+
+ # increase pid file count to handle multiple instances correctly
+ PIDCOUNT="$(( ${PIDCOUNT} + 1))"
+
+ # prepare parameters
+ # A) password authentication
+ local nopasswd
+ local passauth
+ config_get_bool passauth "${section}" PasswordAuth 1
+ [ "${passauth}" -eq 0 ] && nopasswd=1
+ # B) listen port
+ local port
+ config_get port "${section}" Port
+ # C) banner file
+ local bannerfile
+ config_get bannerfile ${section} BannerFile
+ [ -f $bannerfile ] || bannerfile=''
+
+ # concatenate parameters
+ local args
+ args="${nopasswd:+-s }${port:+-p ${port} }${bannerfile:+-b $bannerfile }-P /var/run/${NAME}.${PIDCOUNT}.pid"
+
+ # execute program and return its exit code
+ [ "${verbosed}" -ne 0 ] && echo "${initscript}: section ${section} starting ${PROG} ${args}"
+ ${PROG} ${args}
+ return $?
+}
+
+keygen()
+{
+ for keytype in rsa dss; do
+ # check for keys
+ key=dropbear/dropbear_${keytype}_host_key
+ [ -f /tmp/$key -o -s /etc/$key ] || {
+ # generate missing keys
+ mkdir -p /tmp/dropbear
+ [ -x /usr/bin/dropbearkey ] && {
+ /usr/bin/dropbearkey -t $keytype -f /tmp/$key 2>&- >&- && exec /etc/rc.common "$initscript" start
+ } &
+ exit 0
+ }
+ done
+
+ lock /tmp/.switch2jffs
+ mkdir -p /etc/dropbear
+ mv /tmp/dropbear/dropbear_* /etc/dropbear/
+ lock -u /tmp/.switch2jffs
+ chown root /etc/dropbear
+ chmod 0700 /etc/dropbear