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