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