Add a startup and a uci configuration for ZNC. This allows configuring
multiple users, loading modules with parameters (global and per user)
and starts the ZNC binary as nobody. The latter requires su, so add this
as a dependecy.

Signed-off-by: Jonas Gorski <[email protected]>
---
 net/znc/Makefile       |   10 +++++-
 net/znc/files/znc.conf |   13 +++++++
 net/znc/files/znc.init |   92 ++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 114 insertions(+), 1 deletions(-)
 create mode 100644 net/znc/files/znc.conf
 create mode 100644 net/znc/files/znc.init

diff --git a/net/znc/Makefile b/net/znc/Makefile
index 08364d4..1eaf795 100644
--- a/net/znc/Makefile
+++ b/net/znc/Makefile
@@ -29,7 +29,7 @@ endef
 
 define Package/znc
   $(Package/znc/default)
-  DEPENDS:=+libopenssl +uclibcxx
+  DEPENDS:=+libopenssl +uclibcxx +coreutils-su
   MENU:=1
 endef
 
@@ -39,6 +39,10 @@ define Package/znc/description
        bouncing, and c++ module support to name a few.
 endef
 
+define Package/znc/conffiles
+/etc/config/znc
+endef
+
 define Package/znc-mod-admin
   $(Package/znc/default)
   TITLE+= (admin plugin)
@@ -388,6 +392,10 @@ endef
 define Package/znc/install
        $(INSTALL_DIR) $(1)/usr/bin
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/znc $(1)/usr/bin/
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/znc.init $(1)/etc/init.d/znc
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_DATA) ./files/znc.conf $(1)/etc/config/znc
 endef
 
 define Package/znc-mod-admin/install
diff --git a/net/znc/files/znc.conf b/net/znc/files/znc.conf
new file mode 100644
index 0000000..ba3f069
--- /dev/null
+++ b/net/znc/files/znc.conf
@@ -0,0 +1,13 @@
+config znc
+       # where to listen for connections
+       list listener   '192.168.1.1 1234'
+
+config user 'sampleUser'
+       option password 'changeme'
+       option nick     'sampleUser'
+       option altnick  'userSample'
+       option ident    'openwrt'
+       option realname 'John Doe'
+
+       # list of allowed servers
+       list server     'chat.freenode.net 6667'
diff --git a/net/znc/files/znc.init b/net/znc/files/znc.init
new file mode 100644
index 0000000..6e56efd
--- /dev/null
+++ b/net/znc/files/znc.init
@@ -0,0 +1,92 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2010 Openwrt.org
+
+START=60
+
+PID_FILE=/tmp/etc/znc/znc.pid
+ZNC_CONFIG=/tmp/etc/znc/configs/znc.conf
+
+add_param() {
+       echo "$1 = $2" >> $ZNC_CONFIG
+}
+
+znc_global() {
+       local znc="$1"
+       local anoniplimit
+       local maxbuffersize
+       local connectdelay
+       local serverthrottle
+
+
+       config_get anoniplimit "$znc" anoniplimit
+       config_get maxbuffersize "$znc" maxbuffersize
+       config_get connectdelay "$znc" connectdelay
+       config_get serverthrottle "$znc" serverthrottle
+
+       [ -z $anoniplimit ] || echo "AnonIPLimit = $anoniplimit" >> $ZNC_CONFIG
+       [ -z $maxbuffersize ] || echo "MaxBufferSize = $maxbuffersize" >> 
$ZNC_CONFIG
+       [ -z $connectdelay ] || echo "ConnectDelay = $connectdelay" >> 
$ZNC_CONFIG
+       [ -z $serverthrottle ] || echo "ServerThrottle = $anoniplimit" >> 
$ZNC_CONFIG
+
+       echo "PidFile = $PID_FILE" >> $ZNC_CONFIG
+
+       config_list_foreach "$znc" listener "add_param Listener"
+       config_list_foreach "$znc" module "add_param LoadModule"
+}
+
+add_user() {
+       local user="$1"
+       local password
+       local nick
+       local altnick
+       local ident
+       local realname
+       local buffer
+       local quitmsg
+       local chanmodes
+       local vhost
+
+       config_get password "$user" password
+       config_get nick "$user" nick
+       config_get altnick "$user" altnick
+       config_get ident "$user" ident
+       config_get realname "$user" realname
+       config_get buffer "$user" buffer
+       config_get quitmsg "$user" quitmsg
+       config_get chanmodes "$user" chanmodes
+       config_get vhost "$user" vhost
+
+       echo "<User $user>" >> $ZNC_CONFIG
+       echo "  Pass = plain#$password" >> $ZNC_CONFIG
+       echo "  Nick = $nick" >> $ZNC_CONFIG
+       echo "  AltNick = ${altnick:-$nick"_"}" >> $ZNC_CONFIG
+       echo "  Ident = ${ident:-$nick}" >> $ZNC_CONFIG
+       echo "  RealName = ${realname:-$nick}" >> $ZNC_CONFIG
+       [ -z "$vhost" ] || echo "       VHost = $vhost" >> $ZNC_CONFIG
+       echo "  Buffer = ${buffer:-50}"  >> $ZNC_CONFIG
+       echo "  KeepBuffer = false" >> $ZNC_CONFIG
+       echo "  ChanModes = ${chanmodes:-"+stn"}" >> $ZNC_CONFIG
+       [ -z "$quitmsg" ] || echo "     QuitMsg = $quitmsg" >> $ZNC_CONFIG
+
+       config_list_foreach "$user" server "add_param \"        Server\""
+       config_list_foreach "$user" module "add_param \"        LoadModule\""
+       echo "</User>" >> $ZNC_CONFIG
+}
+
+
+start() {
+       mkdir -p /tmp/etc/znc/configs/
+       [ -f "$ZNC_CONFIG" ] && rm "$ZNC_CONFIG"
+       config_load znc
+       config_foreach znc_global znc
+       config_foreach add_listener listener
+       config_foreach add_user user
+
+       chown -R nobody:nogroup /tmp/etc/znc
+       su -s /bin/ash -c "/usr/bin/znc -d/tmp/etc/znc" nobody
+}
+
+stop() {
+       [ -f "$PID_FILE" ] && kill $(cat "$PID_FILE")
+}
+
-- 
1.5.6.5

_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to