[patch-team] ZNC: upate to 0.094 - Signed-off-by: Jonas Gorski <jonas.gorski+openwrt...
authorScott V. Kamp <outbackdingo@gmail.com>
Mon, 25 Oct 2010 01:10:58 +0000 (01:10 +0000)
committerScott V. Kamp <outbackdingo@gmail.com>
Mon, 25 Oct 2010 01:10:58 +0000 (01:10 +0000)
SVN-Revision: 23626

net/znc/Makefile
net/znc/files/znc.conf [new file with mode: 0644]
net/znc/files/znc.init [new file with mode: 0644]

index 44b4a84..57ca13f 100644 (file)
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=znc
-PKG_VERSION:=0.078
-PKG_RELEASE:=2
+PKG_VERSION:=0.094
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=@SF/znc
-PKG_MD5SUM:=b1379bd6609353ebbc8df7ec19bd004f
+PKG_MD5SUM:=db101f7a7756285d824b59e3b33e3ad5
 
 PKG_BUILD_PARALLEL:=1
 
 include $(INCLUDE_DIR)/package.mk
 
-define Package/znc
+define Package/znc/default
   SUBMENU:=Instant Messaging
   SECTION:=net
   CATEGORY:=Network
-  DEPENDS:=+libopenssl +uclibcxx
   TITLE:=ZNC
   URL:=http://en.znc.in/
 endef
 
+define Package/znc
+  $(Package/znc/default)
+  DEPENDS:=+libopenssl +uclibcxx +coreutils-su
+  MENU:=1
+endef
+
 define Package/znc/description
        ZNC is an IRC bouncer with many advanced features like detaching,
        multiple users, per channel playback buffer, SSL, IPv6, transparent DCC
        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)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-admin/description
+ Allows you to add/remove/edit users and settings on the fly via IRC messages.
+endef
+
+define Package/znc-mod-adminlog
+  $(Package/znc/default)
+  TITLE+= (adminlog plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-adminlog/description
+ Log user connects and disconnects and failed logins to file or syslog.
+endef
+
+define Package/znc-mod-autoattach
+  $(Package/znc/default)
+  TITLE+= (autoattach plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-autoattach/description
+ Reattaches you to channels on activity.
+endef
+
+
+define Package/znc-mod-autocycle
+  $(Package/znc/default)
+  TITLE+= (autocycle plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-autocycle/description
+ Cycles a channel when you are the only one in there and you don't have op.
+endef
+
+define Package/znc-mod-autoop
+  $(Package/znc/default)
+  TITLE+= (autoop plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-autoop/description
+ Auto op the good guys.
+endef
+
+define Package/znc-mod-autoreply
+  $(Package/znc/default)
+  TITLE+= (autoreply plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-autoreply/description
+ Gives a automatic reply if someone messages you if you are away.
+endef
+
+define Package/znc-mod-away
+  $(Package/znc/default)
+  TITLE+= (away plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-away/description
+ Stores messages while away, also auto away.
+endef
+
+define Package/znc-mod-awaynick
+  $(Package/znc/default)
+  TITLE+= (awaynick plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-awaynick/description
+ Change your nick while you are away.
+endef
+
+define Package/znc-mod-blockuser
+  $(Package/znc/default)
+  TITLE+= (blockuser plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-blockuser/description
+ Blocks certain users from using ZNC saying their account was disabled.
+endef
+
+define Package/znc-mod-buffextras
+  $(Package/znc/default)
+  TITLE+= (buffextras plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-buffextras/description
+ Add nick changes, joins, parts, topic changes etc. to your playback buffer.
+endef
+
+define Package/znc-mod-certauth
+  $(Package/znc/default)
+  TITLE+= (certauth plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-certauth/description
+ This module allows users to log in via SSL client keys.
+endef
+
+define Package/znc-mod-chansaver
+  $(Package/znc/default)
+  TITLE+= (chansaver plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-chansaver/description
+ Keeping config up to date when user joins and parts.
+endef
+
+define Package/znc-mod-clientnotify
+  $(Package/znc/default)
+  TITLE+= (clientnotify plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-clientnotify/description
+ Notify about new incoming connections to your user.
+endef
+
+define Package/znc-mod-crypt
+  $(Package/znc/default)
+  TITLE+= (crypt plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-crypt/description
+ Encryption for channel/private messages.
+endef
+
+define Package/znc-mod-disconkick
+  $(Package/znc/default)
+  TITLE+= (disconkick plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-disconkick/description
+ This module will kick your client from all channels where you are, in case if ZNC disconnects from server.
+endef
+
+define Package/znc-mod-fail2ban
+  $(Package/znc/default)
+  TITLE+= (fail2ban plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-fail2ban/description
+ Block IPs for some time after a failed login.
+endef
+
+define Package/znc-mod-fixfreenode
+  $(Package/znc/default)
+  TITLE+= (fixfreenode plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-fixfreenode/description
+ This module blocks some freenode-specific feature which results in plus (+)
+ and minus (-) signs being displayed in front of every message from a client.
+endef
+
+define Package/znc-mod-keepnick
+  $(Package/znc/default)
+  TITLE+= (keepnick plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-keepnick/description
+ Tries to get you your primary nick.
+endef
+
+define Package/znc-mod-kickrejoin
+  $(Package/znc/default)
+  TITLE+= (kickrejoin plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-kickrejoin/description
+ Implements auto-rejoin-on-kick.
+endef
+
+define Package/znc-mod-lastseen
+  $(Package/znc/default)
+  TITLE+= (lastseen plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-lastseen/description
+ Logs when a user last logged in to ZNC.
+endef
+
+define Package/znc-mod-nickserv
+  $(Package/znc/default)
+  TITLE+= (nickserv plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-nickserv/description
+ Auths you with NickServ.
+endef
+
+define Package/znc-mod-notes
+  $(Package/znc/default)
+  TITLE+= (notes plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-notes/description
+ This modules stores and displays short notes using a key/note pairs and shows them to you on connect.
+endef
+
+define Package/znc-mod-partyline
+  $(Package/znc/default)
+  TITLE+= (partyline plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-partyline/description
+ Allows ZNC users to join internal channels and query other ZNC users
+ on the same ZNC.
+endef
+
+define Package/znc-mod-perform
+  $(Package/znc/default)
+  TITLE+= (perform plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-perform/description
+ Performs commands on connect.
+endef
+
+define Package/znc-mod-q
+  $(Package/znc/default)
+  TITLE+= (q plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-q/description
+ Auths you with Q (and a little more).
+endef
+
+define Package/znc-mod-raw
+  $(Package/znc/default)
+  TITLE+= (raw plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-raw/description
+ View all of the raw traffic.
+endef
+
+define Package/znc-mod-route-replies
+  $(Package/znc/default)
+  TITLE+= (route replies plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-route-replies/description
+ Routes back answers to the right client when connected with multiple clients.
+endef
+
+define Package/znc-mod-savebuff
+  $(Package/znc/default)
+  TITLE+= (savebuff plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-savebuff/description
+ Saves your channel buffers into an encrypted file so they can survive
+ restarts and reboots.
+endef
+
+define Package/znc-mod-schat
+  $(Package/znc/default)
+  TITLE+= (schat plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-schat/description
+ SSL (encrypted) DCC chats.
+endef
+
+define Package/znc-mod-simple-away
+  $(Package/znc/default)
+  TITLE+= (simple away plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-simple-away/description
+ This module will automatically set you away on IRC while you are disconnected from the bouncer.
+endef
+
+define Package/znc-mod-stickychan
+  $(Package/znc/default)
+  TITLE+= (stickychan plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-stickychan/description
+ Keeps you sticked to specific channels.
+endef
+
+define Package/znc-mod-watch
+  $(Package/znc/default)
+  TITLE+= (watch plugin)
+  DEPENDS:=znc
+endef
+
+define Package/znc-mod-watch/description
+ Monitor activity for specific text patterns from specific users and have
+ the text sent to a special query window.
+endef
+
+
 CONFIGURE_VARS += \
        CXX="$(STAGING_DIR)/host/bin/g++-uc"
        CXXFLAGS="$(TARGET_CFLAGS) -fno-builtin -fno-rtti -nostdinc++" \
@@ -43,13 +378,14 @@ CONFIGURE_VARS += \
 
 CONFIGURE_ARGS += \
        --disable-c-ares \
-       --disable-modules \
        --disable-perl
 
 MAKE_FLAGS += \
        CXX="$(STAGING_DIR)/host/bin/g++-uc"
 
 define Build/Configure
+        # webadmin doesn't compile
+        $(RM) $(PKG_BUILD_DIR)/modules/webadmin.cpp
        $(call Build/Configure/Default,)
        $(call libtool_disable_rpath)
 endef
@@ -57,6 +393,202 @@ 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
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/admin.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-adminlog/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/adminlog.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-autoattach/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/autoattach.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-autocycle/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/autocycle.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-autoop/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/autoop.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-autoreply/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/autoreply.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-away/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/away.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-awaynick/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/awaynick.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-blockuser/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/blockuser.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-buffextras/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/buffextras.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-certauth/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/certauth.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-chansaver/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/chansaver.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-clientnotify/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/clientnotify.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-crypt/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/crypt.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-disconkick/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/disconkick.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-fail2ban/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/fail2ban.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-fixfreenode/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/fixfreenode.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-keepnick/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/keepnick.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-kickrejoin/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/kickrejoin.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-lastseen/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/lastseen.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-nickserv/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/nickserv.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-notes/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/notes.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-partyline/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/partyline.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-perform/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/perform.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-q/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/q.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-raw/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/raw.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-route-replies/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/route_replies.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-savebuff/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/savebuff.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-schat/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/schat.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-simple-away/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/simple_away.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-stickychan/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/stickychan.so $(1)/usr/lib/znc/
+endef
+
+define Package/znc-mod-watch/install
+       $(INSTALL_DIR) $(1)/usr/lib/znc/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/modules/watch.so $(1)/usr/lib/znc/
 endef
 
 $(eval $(call BuildPackage,znc))
+$(eval $(call BuildPackage,znc-mod-admin))
+$(eval $(call BuildPackage,znc-mod-adminlog))
+$(eval $(call BuildPackage,znc-mod-autoattach))
+$(eval $(call BuildPackage,znc-mod-autocycle))
+$(eval $(call BuildPackage,znc-mod-autoop))
+$(eval $(call BuildPackage,znc-mod-autoreply))
+$(eval $(call BuildPackage,znc-mod-away))
+$(eval $(call BuildPackage,znc-mod-awaynick))
+$(eval $(call BuildPackage,znc-mod-blockuser))
+$(eval $(call BuildPackage,znc-mod-buffextras))
+$(eval $(call BuildPackage,znc-mod-certauth))
+$(eval $(call BuildPackage,znc-mod-chansaver))
+$(eval $(call BuildPackage,znc-mod-clientnotify))
+$(eval $(call BuildPackage,znc-mod-crypt))
+$(eval $(call BuildPackage,znc-mod-disconkick))
+$(eval $(call BuildPackage,znc-mod-fail2ban))
+$(eval $(call BuildPackage,znc-mod-fixfreenode))
+$(eval $(call BuildPackage,znc-mod-keepnick))
+$(eval $(call BuildPackage,znc-mod-kickrejoin))
+$(eval $(call BuildPackage,znc-mod-lastseen))
+$(eval $(call BuildPackage,znc-mod-nickserv))
+$(eval $(call BuildPackage,znc-mod-notes))
+$(eval $(call BuildPackage,znc-mod-partyline))
+$(eval $(call BuildPackage,znc-mod-perform))
+$(eval $(call BuildPackage,znc-mod-q))
+$(eval $(call BuildPackage,znc-mod-raw))
+$(eval $(call BuildPackage,znc-mod-route-replies))
+$(eval $(call BuildPackage,znc-mod-savebuff))
+$(eval $(call BuildPackage,znc-mod-schat))
+$(eval $(call BuildPackage,znc-mod-simple-away))
+$(eval $(call BuildPackage,znc-mod-stickychan))
+$(eval $(call BuildPackage,znc-mod-watch))
diff --git a/net/znc/files/znc.conf b/net/znc/files/znc.conf
new file mode 100644 (file)
index 0000000..bdfdac8
--- /dev/null
@@ -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 (file)
index 0000000..d36c87e
--- /dev/null
@@ -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")
+}
+