#!/bin/sh /etc/rc.common
|
|
# Copyright (C) 2010 Openwrt.org
|
|
|
|
START=60
|
|
|
|
USE_PROCD=1
|
|
|
|
ZNC_CONFIG_PATH=/tmp/etc/znc
|
|
PID_FILE=${ZNC_CONFIG_PATH}/znc.pid
|
|
ZNC_CONFIG=${ZNC_CONFIG_PATH}/configs/znc.conf
|
|
|
|
EXTERNAL_CONFIG=0
|
|
DISABLED=
|
|
|
|
RUNAS_USER=
|
|
RUNAS_GROUP=
|
|
|
|
add_param() {
|
|
echo "$1 = $2" >> $ZNC_CONFIG
|
|
}
|
|
|
|
add_chan() {
|
|
chan=${1% *}
|
|
pass=${1#* }
|
|
echo " <Chan $chan>" >> $ZNC_CONFIG
|
|
[ "$chan" != "$pass" ] && echo " Key = $pass" >> $ZNC_CONFIG
|
|
echo " </Chan>" >> $ZNC_CONFIG
|
|
}
|
|
|
|
add_network() {
|
|
local current_user="$1"
|
|
local network="$2"
|
|
local user
|
|
local name
|
|
|
|
config_get user "$network" user
|
|
|
|
[ "$user" = "$current_user" ] || return 0
|
|
|
|
config_get name "$network" name
|
|
echo " <Network $name>" >> $ZNC_CONFIG
|
|
config_list_foreach "$network" server "add_param \" Server\""
|
|
config_list_foreach "$network" fingerprint "add_param \" trustedserverfingerprint\""
|
|
config_list_foreach "$network" channel "add_chan"
|
|
echo " </Network>" >> $ZNC_CONFIG
|
|
}
|
|
|
|
znc_global() {
|
|
local znc="$1"
|
|
local anoniplimit
|
|
local maxbuffersize
|
|
local connectdelay
|
|
local serverthrottle
|
|
local znc_config_path
|
|
local znc_pem_file
|
|
|
|
config_get_bool DISABLED "$znc" disabled 0
|
|
|
|
[ "$DISABLED" -eq 0 ] || return 0
|
|
|
|
config_get znc_config_path "$znc" znc_config_path
|
|
|
|
config_get RUNAS_USER "$znc" runas_user znc
|
|
config_get RUNAS_GROUP "$znc" runas_group znc
|
|
|
|
if [ "${znc_config_path}" ]
|
|
then
|
|
ZNC_CONFIG_PATH=$znc_config_path
|
|
EXTERNAL_CONFIG=1
|
|
else
|
|
mkdir -p $ZNC_CONFIG_PATH/configs/
|
|
[ ! -f "$ZNC_CONFIG" ] || rm "$ZNC_CONFIG"
|
|
|
|
add_param "Version" "1.6"
|
|
|
|
config_get anoniplimit "$znc" anoniplimit
|
|
config_get maxbuffersize "$znc" maxbuffersize
|
|
config_get connectdelay "$znc" connectdelay
|
|
config_get serverthrottle "$znc" serverthrottle
|
|
config_get znc_pem_file "$znc" znc_ssl_cert
|
|
|
|
[ -z "$znc_pem_file" ] || ln -sf "$znc_pem_file" $ZNC_CONFIG_PATH/znc.pem
|
|
|
|
[ -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"
|
|
fi
|
|
}
|
|
|
|
add_listener() {
|
|
local listener="$1"
|
|
local host
|
|
local port
|
|
local allowirc
|
|
local allowweb
|
|
local ipv4
|
|
local ipv6
|
|
local ssl
|
|
|
|
config_get host "$listener" host
|
|
config_get port "$listener" port
|
|
config_get allowirc "$listener" allowirc
|
|
config_get allowweb "$listener" allowweb
|
|
config_get ipv4 "$listener" ipv4
|
|
config_get ipv6 "$listener" ipv6
|
|
config_get ssl "$listener" ssl
|
|
|
|
echo "<Listener $listener>" >> $ZNC_CONFIG
|
|
|
|
[ -z "$host" ] || add_param " Host" "$host"
|
|
[ -z "$port" ] || add_param " Port" "$port"
|
|
[ -z "$allowirc" ] || add_param " AllowIRC" "$allowirc"
|
|
[ -z "$allowweb" ] || add_param " AllowWeb" "$allowweb"
|
|
[ -z "$ipv4" ] || add_param " IPv4" "$ipv4"
|
|
[ -z "$ipv6" ] || add_param " IPv6" "$ipv6"
|
|
[ -z "$ssl" ] || add_param " SSL" "$ssl"
|
|
|
|
echo "</Listener>" >> $ZNC_CONFIG
|
|
}
|
|
|
|
add_user() {
|
|
local user="$1"
|
|
local password
|
|
local nick
|
|
local altnick
|
|
local ident
|
|
local realname
|
|
local buffer
|
|
local quitmsg
|
|
local chanmodes
|
|
local vhost
|
|
local server
|
|
|
|
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
|
|
config_get server "$user" server
|
|
|
|
echo "<User $user>" >> $ZNC_CONFIG
|
|
|
|
case "$password" in
|
|
"md5#"* | "sha256#"* | "plain#"*)
|
|
add_param " Pass" "$password"
|
|
;;
|
|
*)
|
|
add_param " Pass" "plain#$password"
|
|
;;
|
|
esac
|
|
|
|
add_param " Nick" "$nick"
|
|
add_param " AltNick" "${altnick:-$nick"_"}"
|
|
add_param " Ident" "${ident:-$nick}"
|
|
add_param " RealName" "${realname:-$nick}"
|
|
[ -z "$vhost" ] || add_param " VHost" "$vhost"
|
|
add_param " Buffer" "${buffer:-50}"
|
|
add_param " KeepBuffer" "false"
|
|
add_param " ChanModes" "${chanmodes:-"+stn"}"
|
|
[ -z "$quitmsg" ] || add_param " QuitMsg" "$quitmsg"
|
|
|
|
config_list_foreach "$user" module "add_param \" LoadModule\""
|
|
|
|
# add legacy network
|
|
if [ "$server" ]; then
|
|
echo " <Network Default>" >> $ZNC_CONFIG
|
|
config_list_foreach "$user" server "add_param \" Server\""
|
|
config_list_foreach "$user" fingerprint "add_param \" trustedserverfingerprint\""
|
|
config_list_foreach "$user" channel "add_chan"
|
|
echo " </Network>" >> $ZNC_CONFIG
|
|
fi
|
|
|
|
config_foreach "add_network \"$user\"" network
|
|
|
|
echo "</User>" >> $ZNC_CONFIG
|
|
}
|
|
|
|
start_service() {
|
|
config_load znc
|
|
config_foreach znc_global znc
|
|
|
|
[ "$DISABLED" -eq 0 ] || return 0
|
|
|
|
if [ "$EXTERNAL_CONFIG" -eq 0 ]
|
|
then
|
|
config_foreach add_listener listener
|
|
config_foreach add_user user
|
|
|
|
fi
|
|
|
|
chown -hR ${RUNAS_USER}:${RUNAS_GROUP} ${ZNC_CONFIG_PATH} || {
|
|
logger -s -t ZNC -p daemon.err "Invalid UID/GID. Aborting startup"
|
|
exit 1
|
|
}
|
|
|
|
procd_open_instance
|
|
procd_set_param file /etc/config/znc
|
|
[ "$EXTERNAL_CONFIG" -eq 1 ] && procd_set_param file "${ZNC_CONFIG}/configs/znc.conf"
|
|
procd_set_param command /usr/bin/znc
|
|
procd_append_param command -f -d$ZNC_CONFIG_PATH
|
|
procd_set_param user ${RUNAS_USER}
|
|
procd_set_param respawn
|
|
procd_close_instance
|
|
}
|