91f3ecaa7eb00e7df22a76505f4d693ab24846fa
[feed/packages.git] / net / znc / files / znc.init
1 #!/bin/sh /etc/rc.common
2 # Copyright (C) 2010 Openwrt.org
3
4 START=60
5
6 ZNC_CONFIG_PATH=/tmp/etc/znc
7 PID_FILE=${ZNC_CONFIG_PATH}/znc.pid
8 ZNC_CONFIG=${ZNC_CONFIG_PATH}/configs/znc.conf
9
10 EXTERNAL_CONFIG=0
11 DISABLED=
12
13 RUNAS_USER=
14 RUNAS_GROUP=
15 RUNAS_SHELL=
16
17 add_param() {
18 echo "$1 = $2" >> $ZNC_CONFIG
19 }
20
21 add_chan() {
22 chan=${1% *}
23 pass=${1#* }
24 echo " <Chan $chan>" >> $ZNC_CONFIG
25 [ "$chan" != "$pass" ] && echo " Key = $pass" >> $ZNC_CONFIG
26 echo " </Chan>" >> $ZNC_CONFIG
27 }
28
29 add_network() {
30 local current_user="$1"
31 local network="$2"
32 local user
33 local name
34
35 config_get user "$network" user
36
37 [ "$user" = "$current_user" ] || return 0
38
39 config_get name "$network" name
40 echo " <Network $name>" >> $ZNC_CONFIG
41 config_list_foreach "$network" server "add_param \" Server\""
42 config_list_foreach "$network" fingerprint "add_param \" trustedserverfingerprint\""
43 config_list_foreach "$network" channel "add_chan"
44 echo " </Network>" >> $ZNC_CONFIG
45 }
46
47 znc_global() {
48 local znc="$1"
49 local anoniplimit
50 local maxbuffersize
51 local connectdelay
52 local serverthrottle
53 local znc_config_path
54 local znc_pem_file
55
56 config_get_bool DISABLED "$znc" disabled 0
57
58 [ "$DISABLED" -eq 0 ] || return 0
59
60 config_get znc_config_path "$znc" znc_config_path
61
62 config_get RUNAS_USER "$znc" runas_user
63 config_get RUNAS_GROUP "$znc" runas_group
64 config_get RUNAS_SHELL "$znc" runas_shell
65
66 if [ "${znc_config_path}" ]
67 then
68 ZNC_CONFIG_PATH=$znc_config_path
69 EXTERNAL_CONFIG=1
70 else
71 mkdir -p $ZNC_CONFIG_PATH/configs/
72 [ ! -f "$ZNC_CONFIG" ] || rm "$ZNC_CONFIG"
73
74 add_param "Version" "1.0"
75
76 config_get anoniplimit "$znc" anoniplimit
77 config_get maxbuffersize "$znc" maxbuffersize
78 config_get connectdelay "$znc" connectdelay
79 config_get serverthrottle "$znc" serverthrottle
80 config_get znc_pem_file "$znc" znc_ssl_cert
81
82 [ -z "$znc_pem_file" ] || ln -sf "$znc_pem_file" $ZNC_CONFIG_PATH/znc.pem
83
84 [ -z $anoniplimit ] || echo "AnonIPLimit = $anoniplimit" >> $ZNC_CONFIG
85 [ -z $maxbuffersize ] || echo "MaxBufferSize = $maxbuffersize" >> $ZNC_CONFIG
86 [ -z $connectdelay ] || echo "ConnectDelay = $connectdelay" >> $ZNC_CONFIG
87 [ -z $serverthrottle ] || echo "ServerThrottle = $anoniplimit" >> $ZNC_CONFIG
88
89 echo "PidFile = $PID_FILE" >> $ZNC_CONFIG
90
91 config_list_foreach "$znc" listener "add_param Listener"
92 config_list_foreach "$znc" module "add_param LoadModule"
93
94 add_param LoadModule "droproot ${RUNAS_USER:-nobody} ${RUNAS_GROUP:-nogroup}"
95 fi
96 }
97
98 add_user() {
99 local user="$1"
100 local password
101 local nick
102 local altnick
103 local ident
104 local realname
105 local buffer
106 local quitmsg
107 local chanmodes
108 local vhost
109 local server
110
111 config_get password "$user" password
112 config_get nick "$user" nick
113 config_get altnick "$user" altnick
114 config_get ident "$user" ident
115 config_get realname "$user" realname
116 config_get buffer "$user" buffer
117 config_get quitmsg "$user" quitmsg
118 config_get chanmodes "$user" chanmodes
119 config_get vhost "$user" vhost
120 config_get server "$user" server
121
122 echo "<User $user>" >> $ZNC_CONFIG
123
124 case "$password" in
125 "md5#"* | "sha256#"* | "plain#"*)
126 add_param " Pass" "$password"
127 ;;
128 *)
129 add_param " Pass" "plain#$password"
130 ;;
131 esac
132
133 add_param " Nick" "$nick"
134 add_param " AltNick" "${altnick:-$nick"_"}"
135 add_param " Ident" "${ident:-$nick}"
136 add_param " RealName" "${realname:-$nick}"
137 [ -z "$vhost" ] || add_param " VHost" "$vhost"
138 add_param " Buffer" "${buffer:-50}"
139 add_param " KeepBuffer" "false"
140 add_param " ChanModes" "${chanmodes:-"+stn"}"
141 [ -z "$quitmsg" ] || add_param " QuitMsg" "$quitmsg"
142
143 config_list_foreach "$user" module "add_param \" LoadModule\""
144
145 # add legacy network
146 if [ "$server" ]; then
147 echo " <Network Default>" >> $ZNC_CONFIG
148 config_list_foreach "$user" server "add_param \" Server\""
149 config_list_foreach "$user" fingerprint "add_param \" trustedserverfingerprint\""
150 config_list_foreach "$user" channel "add_chan"
151 echo " </Network>" >> $ZNC_CONFIG
152 fi
153
154 config_foreach "add_network \"$user\"" network
155
156 echo "</User>" >> $ZNC_CONFIG
157 }
158
159
160 start() {
161 config_load znc
162 config_foreach znc_global znc
163
164 if [ "$DISABLED" -eq 1 ]; then
165 return 0
166 fi
167
168 if [ "$EXTERNAL_CONFIG" -eq 0 ]
169 then
170 config_foreach add_listener listener
171 config_foreach add_user user
172
173 chown -hR ${RUNAS_USER:-nobody}:${RUNAS_GROUP:-nogroup} ${ZNC_CONFIG_PATH}
174 fi
175
176 if [ "$EXTERNAL_CONFIG" -eq 1 -a "$RUNAS_USER" ]
177 then
178 local SU=$(which su)
179 if [ "$SU" ]
180 then
181 chown -hR ${RUNAS_USER:-nobody}:${RUNAS_GROUP:-nogroup} ${ZNC_CONFIG_PATH}
182 $SU ${RUNAS_SHELL:+s $RUNAS_SHELL} -c "/usr/bin/znc -d$ZNC_CONFIG_PATH >/dev/null &" $RUNAS_USER
183 else
184 logger -s -t ZNC -p daemon.err "Could not run ZNC as user $RUNAS_USER: su not found."
185 exit 1
186 fi
187 else
188 /usr/bin/znc -d$ZNC_CONFIG_PATH >/dev/null &
189 fi
190 }
191
192 stop() {
193 if [ -f "$PID_FILE" ]
194 then
195 kill $(cat "$PID_FILE")
196 else
197 killall znc
198 fi
199 }
200