Add mac-telnet - a layer 2 Telnet/SSH server useful to access bricked devices
authorJo-Philipp Wich <redacted>
Wed, 3 Sep 2014 14:32:57 +0000 (16:32 +0200)
committerJo-Philipp Wich <redacted>
Wed, 3 Sep 2014 14:38:06 +0000 (16:38 +0200)
This package adds the mac-telnet server, client, ping and discovery utilities.
See https://github.com/aouyar/MAC-Telnet for details.

This package uses the fork from https://github.com/jow-/MAC-Telnet as source,
the code there has a number of bugfixes and results in smaller binaries since
most core functionality has been ported to libubox facilities provided by
OpenWrt.

Signed-off-by: Jo-Philipp Wich <redacted>
net/mac-telnet/Makefile [new file with mode: 0644]
net/mac-telnet/files/mactelnet.config [new file with mode: 0644]
net/mac-telnet/files/mactelnet.init [new file with mode: 0755]

diff --git a/net/mac-telnet/Makefile b/net/mac-telnet/Makefile
new file mode 100644 (file)
index 0000000..856eaa8
--- /dev/null
@@ -0,0 +1,71 @@
+#
+# Copyright (C) 2014 OpenWrt.org
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=mac-telnet
+PKG_VERSION:=2014-09-03
+PKG_RELEASE:=$(PKG_SOURCE_VERSION)
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/jow-/MAC-Telnet.git
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_VERSION:=9a8bf5c242c6b0336c2f257aa67d2240454ba4b0
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
+
+PKG_LICENSE:=GPL-2.0+
+PKG_MAINTAINER:=Jo-Philipp Wich <jow@openwrt.org>
+
+include $(INCLUDE_DIR)/package.mk
+
+TARGET_CFLAGS += -ffunction-sections -fdata-sections $(if $(CONFIG_MACTELNET_PLAIN_SUPPORT),-DTELNET_SUPPORT)
+TARGET_LDFLAGS += -Wl,--gc-sections
+
+# 1: name
+# 2: executable
+define BuildPlugin
+  define Package/mac-telnet-$(1)
+    SECTION:=net
+    CATEGORY:=Network
+    DEPENDS:=+libubox
+    TITLE:=MAC-Telnet / MAC-SSH $(1)
+    URL:=https://github.com/jow-/MAC-Telnet
+  endef
+
+  define Package/mac-telnet-$(1)/description
+    Open source MAC Telnet client and server utilities for connecting to
+    Mikrotik RouterOS routers and Linux machines via MAC address.
+  endef
+
+  define Package/mac-telnet-$(1)/install
+       $(INSTALL_DIR) $$(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/$(2) $$(1)/usr/sbin/
+       $(call Package/mac-telnet-$(1)/install-extra)
+  endef
+
+  $$(eval $$(call BuildPackage,mac-telnet-$(1)))
+endef
+
+define Package/mac-telnet-server/config
+  config MACTELNET_PLAIN_SUPPORT
+       bool "Include support for plain telnet connections"
+       depends on PACKAGE_mac-telnet-server
+        default y
+       help
+         Disable this option to only support SSH logins to the
+         MAC-Telnet server.
+endef
+
+define Package/mac-telnet-server/install-extra
+       $(INSTALL_DIR) $$(1)/etc/init.d
+       $(INSTALL_BIN) ./files/mactelnet.init $$(1)/etc/init.d/mactelnet
+       $(INSTALL_DIR) $$(1)/etc/config
+       $(INSTALL_DATE) ./files/mactelnet.config $$(1)/etc/config/mactelnet
+endef
+
+
+$(eval $(call BuildPlugin,server,mactelnetd))
+$(eval $(call BuildPlugin,client,mactelnet))
+$(eval $(call BuildPlugin,ping,macping))
+$(eval $(call BuildPlugin,discover,mndp))
diff --git a/net/mac-telnet/files/mactelnet.config b/net/mac-telnet/files/mactelnet.config
new file mode 100644 (file)
index 0000000..d27c91a
--- /dev/null
@@ -0,0 +1,9 @@
+# Global settings for MAC-Telnet daemon
+config mactelnetd
+       option sshmode '0'
+       list interface 'lan'
+
+# Define a MAC-Telnet login, multiple login sections allowed
+config login
+       option username 'root'
+       option password 'secret'
diff --git a/net/mac-telnet/files/mactelnet.init b/net/mac-telnet/files/mactelnet.init
new file mode 100755 (executable)
index 0000000..701ce98
--- /dev/null
@@ -0,0 +1,80 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2014 OpenWrt.org
+
+START=60
+
+USE_PROCD=1
+
+PROG=/usr/sbin/mactelnetd
+USERS=/var/etc/mactelnetd.users
+SSHMODE=0
+
+add_account() {
+       local cfg="$1"
+       local user pass
+
+       [ $SSHMODE -eq 0 ] || {
+               [ -n "$already_warned" ] || {
+                       echo "mactelnet.$cfg: login sections ignored in SSH mode" >&1
+                       already_warned=1
+               }
+               return
+       }
+
+       config_get username "$cfg" username
+       config_get password "$cfg" password
+
+       [ -n "$username" ] || {
+               echo "mactelnet.$cfg: username missing" >&2
+               return
+       }
+
+       [ -n "$password" ] || {
+               echo "mactelnet.$cfg: password missing" >&2
+               return
+       }
+
+       echo "$username:$password" >> $USERS
+}
+
+add_interface() {
+       local iface="$1"
+       local device
+
+       [ -n "$iface" ] || return
+
+       if network_get_physdev device "$iface"; then
+               procd_append_param command -i "$device"
+       fi
+
+       procd_add_reload_interface_trigger "$iface"
+}
+
+add_globals() {
+       local cfg="$1"
+
+       config_get_bool SSHMODE "$cfg" sshmode 0
+       [ $SSHMODE -eq 0 ] || procd_append_param command -S
+
+       config_list_foreach "$cfg" interface add_interface
+}
+
+start_service() {
+       . /lib/functions/network.sh
+
+       procd_open_instance
+
+       procd_add_reload_trigger mactelnet
+       procd_set_param command "$PROG" -f
+
+       config_load mactelnet
+       config_foreach add_globals mactelnetd
+
+       [ $SSHMODE -eq 1 ] || {
+               rm -f $USERS
+               config_foreach add_account login
+       }
+
+       procd_close_instance
+}
+
git clone https://git.99rst.org/PROJECT