source: packages/net/znc/files/znc.init @ 28774

Last change on this file since 28774 was 28774, checked in by jogo, 5 years ago

packages: znc: fix cert linking and add mirror

Properly (re-)create the link only if there's a file given and don't try to
change the owner of the link target.

Also add the znc release archive as a file mirror to prevent updates from
breaking the build.

File size: 3.7 KB
Line 
1#!/bin/sh /etc/rc.common
2# Copyright (C) 2010 Openwrt.org
3
4START=60
5
6ZNC_CONFIG_PATH=/tmp/etc/znc
7PID_FILE=${ZNC_CONFIG_PATH}/znc.pid
8ZNC_CONFIG=${ZNC_CONFIG_PATH}/configs/znc.conf
9
10EXTERNAL_CONFIG=0
11
12RUNAS_USER=
13RUNAS_GROUP=
14
15add_param() {
16        echo "$1 = $2" >> $ZNC_CONFIG
17}
18
19add_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
27znc_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" ] || ln -sf "$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
71add_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
121start() {
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 -hR ${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
148stop() {
149        if [ -f "$PID_FILE" ]
150        then
151                kill $(cat "$PID_FILE")
152        else
153                killall znc
154        fi
155}
156
Note: See TracBrowser for help on using the repository browser.