From 6d3990cbcf2ce4f97bb9663c895f2bf914cf9edb Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Wed, 3 Sep 2014 16:32:57 +0200 Subject: [PATCH] Add mac-telnet - a layer 2 Telnet/SSH server useful to access bricked devices 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 --- net/mac-telnet/Makefile | 71 ++++++++++++++++++++++++ net/mac-telnet/files/mactelnet.config | 9 +++ net/mac-telnet/files/mactelnet.init | 80 +++++++++++++++++++++++++++ 3 files changed, 160 insertions(+) create mode 100644 net/mac-telnet/Makefile create mode 100644 net/mac-telnet/files/mactelnet.config create mode 100755 net/mac-telnet/files/mactelnet.init diff --git a/net/mac-telnet/Makefile b/net/mac-telnet/Makefile new file mode 100644 index 000000000..856eaa865 --- /dev/null +++ b/net/mac-telnet/Makefile @@ -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 + +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 index 000000000..d27c91aef --- /dev/null +++ b/net/mac-telnet/files/mactelnet.config @@ -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 index 000000000..701ce98e9 --- /dev/null +++ b/net/mac-telnet/files/mactelnet.init @@ -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 +} +