[OpenWrt-Devel] [PATCH 2/2] dropbear: ensure the interface has an ip-address

Mathias Kresin openwrt at kresin.me
Mon Oct 6 13:46:30 EDT 2014


Use network_get_ipaddrs_all to get all ip-addresses of an interface. If the
function fails, the interface does not exists or has not any suiteable ip
addresses assigned.

Use the returned ip-address(es) to construct the dropbear listen address.

Signed-off-by: Mathias Kresin <openwrt at kresin.me>
---
 .../network/services/dropbear/files/dropbear.init  | 23 +++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/package/network/services/dropbear/files/dropbear.init b/package/network/services/dropbear/files/dropbear.init
index 5186523..860235e 100755
--- a/package/network/services/dropbear/files/dropbear.init
+++ b/package/network/services/dropbear/files/dropbear.init
@@ -14,20 +14,15 @@ EXTRA_HELP="	killclients Kill ${NAME} processes except servers and yourself"
 
 append_ports()
 {
-	local ifname="$1"
+	local ipaddrs="$1"
 	local port="$2"
 
-	grep -qs "^ *$ifname:" /proc/net/dev || {
+	[ -z "$ipaddrs" ] && {
 		procd_append_param command -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
+	for addr in $ipaddrs; do
 		procd_append_param command -p "$addr:$port"
 	done
 }
@@ -55,13 +50,20 @@ dropbear_instance()
 	local PasswordAuth enable Interface GatewayPorts \
 		RootPasswordAuth RootLogin rsakeyfile \
 		dsskeyfile BannerFile Port SSHKeepAlive IdleTimeout \
-		mdns
+		mdns ipaddrs
 
 	validate_section_dropbear "${1}" || {
 		echo "validation failed"
 		return 1
 	}
 
+	[ -n "${Interface}" ] && {
+		network_get_ipaddrs_all ipaddrs "${Interface}" || {
+			echo "interface ${Interface} has no physdev or physdev has no suitable ip"
+			return 1
+		}
+	}
+
 	[ "${enable}" = "0" ] && return 1
 	PIDCOUNT="$(( ${PIDCOUNT} + 1))"
 	local pid_file="/var/run/${NAME}.${PIDCOUNT}.pid"
@@ -75,8 +77,7 @@ dropbear_instance()
 	[ -n "${rsakeyfile}" ] && procd_append_param command -r "${rsakeyfile}"
 	[ -n "${dsskeyfile}" ] && procd_append_param command -d "${dsskeyfile}"
 	[ -n "${BannerFile}" ] && procd_append_param command -b "${BannerFile}"
-	[ -n "${Interface}" ] && network_get_device Interface "${Interface}"
-	append_ports "${Interface}" "${Port}"
+	append_ports "${ipaddrs}" "${Port}"
 	[ "${IdleTimeout}" -ne 0 ] && procd_append_param command -I "${IdleTimeout}"
 	[ "${SSHKeepAlive}" -ne 0 ] && procd_append_param command -K "${SSHKeepAlive}"
 	[ "${mdns}" -ne 0 ] && procd_add_mdns "ssh" "tcp" "$Port" "daemon=dropbear"
-- 
1.9.1
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list