mirror of
https://github.com/openwrt/packages.git
synced 2025-12-21 19:14:30 +04:00
csshnpd: add new package
Maintainer: @cpswan Compile tested: x86_64 (snapshot r29619) Run tested: x86_64 (snapshot r29619) Description: A C daemon for NoPorts, which allows TCP connections to be established without exposing ports to the Internet. More details at: https://docs.noports.com/ Signed-off-by: Chris Swan <chris@atsign.com>
This commit is contained in:
committed by
Florian Eckert
parent
28c085f7c3
commit
bd43da7ce5
67
net/csshnpd/Makefile
Normal file
67
net/csshnpd/Makefile
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2025 The Atsign Foundation
|
||||||
|
|
||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=csshnpd
|
||||||
|
PKG_VERSION:=1.0.12
|
||||||
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
|
PKG_SOURCE:=$(PKG_NAME)-c$(PKG_VERSION).tar.gz
|
||||||
|
PKG_SOURCE_URL:=https://github.com/atsign-foundation/noports/releases/download/c$(PKG_VERSION)
|
||||||
|
PKG_HASH:=02990724a29cc5a879e1ed282699a8b12fdcc008a9ab3acbfc987cd2ecdab7e4
|
||||||
|
|
||||||
|
PKG_MAINTAINER:=Chris Swan <chris@atsign.com>
|
||||||
|
PKG_LICENSE:=BSD-3-Clause
|
||||||
|
PKG_LICENSE_FILES:=LICENSE
|
||||||
|
|
||||||
|
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-c$(PKG_VERSION)
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
include $(INCLUDE_DIR)/cmake.mk
|
||||||
|
|
||||||
|
CMAKE_OPTIONS += \
|
||||||
|
-S . \
|
||||||
|
-DATSDK_BUILD_TESTS="OFF" \
|
||||||
|
-DATSDK_MEMCHECK="OFF" \
|
||||||
|
-DBUILD_SHARED_AND_STATIC_LIBS="OFF" \
|
||||||
|
-DCMAKE_EXPORT_COMPILE_COMMANDS="OFF" \
|
||||||
|
-DCMAKE_INSTALL_PREFIX="${PKG_BUILD_DIR}/build/release-static/tmp-install-dir" \
|
||||||
|
-DENABLE_PROGRAMS="OFF" \
|
||||||
|
-DENABLE_TARGET_EXPORT="OFF" \
|
||||||
|
-DENABLE_TESTING="OFF" \
|
||||||
|
-DNOPORTS_ATSDK_PATH="deps/atsdk-src" \
|
||||||
|
-DNOPORTS_BUILD_TESTS="OFF" \
|
||||||
|
-DNOPORTS_USE_SHARED_LIBS="ON"
|
||||||
|
|
||||||
|
define Package/csshnpd
|
||||||
|
SECTION:=net
|
||||||
|
CATEGORY:=Network
|
||||||
|
SUBMENU:=SSH
|
||||||
|
DEPENDS:=+libmbedtls +cJSON
|
||||||
|
TITLE:=NoPorts Daemon
|
||||||
|
URL:=https://noports.com
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/csshnpd/description
|
||||||
|
A small and portable daemon for NoPorts.
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/csshnpd/conffiles
|
||||||
|
/etc/config/sshnpd
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/csshnpd/install
|
||||||
|
$(INSTALL_DIR) $(1)/usr/bin
|
||||||
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/sshnpd/sshnpd $(1)/usr/bin/
|
||||||
|
$(INSTALL_BIN) $(PKG_BUILD_DIR)/sshnpd/at_activate $(1)/usr/bin/
|
||||||
|
$(INSTALL_BIN) ./files/at_enroll.sh $(1)/usr/bin/
|
||||||
|
|
||||||
|
$(INSTALL_DIR) $(1)/etc/config
|
||||||
|
$(INSTALL_CONF) ./files/csshnpd.config $(1)/etc/config/sshnpd
|
||||||
|
|
||||||
|
$(INSTALL_DIR) $(1)/etc/init.d
|
||||||
|
$(INSTALL_BIN) ./files/csshnpd.init $(1)/etc/init.d/sshnpd
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildPackage,csshnpd))
|
||||||
60
net/csshnpd/files/at_enroll.sh
Normal file
60
net/csshnpd/files/at_enroll.sh
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
. /lib/functions.sh
|
||||||
|
enroll_atsign() {
|
||||||
|
local section="$1"
|
||||||
|
|
||||||
|
config_get atsign "$section" "atsign"
|
||||||
|
if [ -z "$atsign" ]; then
|
||||||
|
echo "sshnpd: atsign must be configured in /etc/config/sshnpd"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
config_get device "$section" "device"
|
||||||
|
if [ -z "$device" ]; then
|
||||||
|
echo "sshnpd: device must be configured in /etc/config/sshnpd"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
config_get otp "$section" "otp"
|
||||||
|
if [ -z "$otp" ]; then
|
||||||
|
echo "sshnpd: otp must be configured in /etc/config/sshnpd"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
config_get user "$section" user
|
||||||
|
if [ -z "$user" ]; then
|
||||||
|
user='root'
|
||||||
|
fi
|
||||||
|
|
||||||
|
config_get home "$section" home
|
||||||
|
if [ -z "$home" ]; then
|
||||||
|
if [ "$user" = "root" ]; then
|
||||||
|
home='/root'
|
||||||
|
else
|
||||||
|
home="/home/${user}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "${home}/.atsign/keys" ]; then
|
||||||
|
mkdir -p "${home}/.atsign/keys"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "${home}/.atsign/keys/${atsign}_key.atKeys" ]; then
|
||||||
|
echo "sshnpd: atsign keys file already present, exiting enrollment"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "To activate this enrollment run the following command line on a"
|
||||||
|
echo "system where the ${atsign} key has been activated:"
|
||||||
|
echo
|
||||||
|
echo "at_activate approve -a ${atsign} --arx noports --drx ${device}"
|
||||||
|
echo
|
||||||
|
|
||||||
|
at_activate enroll -a ${atsign} -s ${otp} -p noports \
|
||||||
|
-k ${home}/.atsign/keys/${atsign}_key.atKeys -d ${device} \
|
||||||
|
-n "sshnp:rw,sshrvd:rw"
|
||||||
|
|
||||||
|
}
|
||||||
|
config_load sshnpd
|
||||||
|
config_foreach enroll_atsign sshnpd
|
||||||
7
net/csshnpd/files/csshnpd.config
Normal file
7
net/csshnpd/files/csshnpd.config
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
config sshnpd
|
||||||
|
option atsign '@atsign'
|
||||||
|
option manager '@manager'
|
||||||
|
option device 'devicename'
|
||||||
|
option args ''
|
||||||
|
option otp ''
|
||||||
|
option enabled '0'
|
||||||
86
net/csshnpd/files/csshnpd.init
Normal file
86
net/csshnpd/files/csshnpd.init
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
#!/bin/sh /etc/rc.common
|
||||||
|
# Copyright (C) 2007-2011 OpenWrt.org
|
||||||
|
|
||||||
|
USE_PROCD=1
|
||||||
|
START=80
|
||||||
|
|
||||||
|
start_instance() {
|
||||||
|
local section="$1"
|
||||||
|
|
||||||
|
config_get_bool enabled "$section" enabled 1
|
||||||
|
[ "$enabled" != "1" ] && return 0
|
||||||
|
|
||||||
|
config_get atsign "$section" atsign
|
||||||
|
if [ -z "$atsign" ]; then
|
||||||
|
echo "sshnpd: atsign for this device is mandatory"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
config_get manager "$section" manager
|
||||||
|
if [ -z "$manager" ]; then
|
||||||
|
echo "sshnpd: manager for this device is mandatory"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
config_get device "$section" device
|
||||||
|
if [ -z "$device" ]; then
|
||||||
|
echo "sshnpd: device name is mandatory"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
config_get user "$section" user
|
||||||
|
if [ -z "$user" ]; then
|
||||||
|
user='root'
|
||||||
|
fi
|
||||||
|
|
||||||
|
config_get home "$section" home
|
||||||
|
if [ -z "$home" ]; then
|
||||||
|
if [ "$user" = "root" ]; then
|
||||||
|
home='/root'
|
||||||
|
else
|
||||||
|
home="/home/${user}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "${home}/.atsign/keys/${atsign}_key.atKeys" ]; then
|
||||||
|
echo "sshnpd: WARNING atsign keys not found in default location"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "${home}/.ssh" ]; then
|
||||||
|
mkdir ${home}/.ssh
|
||||||
|
chmod 700 ${home}/.ssh
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "${home}/.ssh/authorized_keys" ]; then
|
||||||
|
touch ${home}/.ssh/authorized_keys
|
||||||
|
chmod 600 ${home}/.ssh/authorized_keys
|
||||||
|
fi
|
||||||
|
|
||||||
|
config_get args "$section" args
|
||||||
|
|
||||||
|
config_get pidfile "$section" pidfile
|
||||||
|
|
||||||
|
procd_open_instance "$section"
|
||||||
|
procd_set_param stdout 1
|
||||||
|
procd_set_param stderr 1
|
||||||
|
procd_set_param env USER=${user} HOME=${home}
|
||||||
|
procd_set_param command /usr/bin/sshnpd -a ${atsign} -m ${manager} -d ${device} ${args}
|
||||||
|
procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
|
||||||
|
[ -n "$pidfile" ] && procd_set_param pidfile "$pidfile"
|
||||||
|
|
||||||
|
[ -n "$pidfile" ] && procd_append_param env "SSHNPD_PIDFILE=$pidfile"
|
||||||
|
|
||||||
|
procd_close_instance
|
||||||
|
}
|
||||||
|
|
||||||
|
start_service() {
|
||||||
|
local instance=$1
|
||||||
|
|
||||||
|
config_load 'sshnpd'
|
||||||
|
|
||||||
|
if [ -n "$instance" ]; then
|
||||||
|
start_instance "$1"
|
||||||
|
else
|
||||||
|
config_foreach start_instance 'sshnpd'
|
||||||
|
fi
|
||||||
|
}
|
||||||
3
net/csshnpd/test.sh
Normal file
3
net/csshnpd/test.sh
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
sshnpd --help | grep "$2"
|
||||||
Reference in New Issue
Block a user