blob: 9355cbb72458e7cafbdc02dc0039ea809b45cd63 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
|
#!/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
}
|