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