znc.init (4581B)
1 #!/bin/sh /etc/rc.common 2 # Copyright (C) 2010 Openwrt.org 3 4 START=60 5 6 USE_PROCD=1 7 8 ZNC_CONFIG_PATH=/tmp/etc/znc 9 PID_FILE=${ZNC_CONFIG_PATH}/znc.pid 10 ZNC_CONFIG=${ZNC_CONFIG_PATH}/configs/znc.conf 11 12 EXTERNAL_CONFIG=0 13 DISABLED= 14 15 RUNAS_USER= 16 RUNAS_GROUP= 17 18 add_param() { 19 echo "$1 = $2" >> $ZNC_CONFIG 20 } 21 22 add_chan() { 23 chan=${1% *} 24 pass=${1#* } 25 echo " <Chan $chan>" >> $ZNC_CONFIG 26 [ "$chan" != "$pass" ] && echo " Key = $pass" >> $ZNC_CONFIG 27 echo " </Chan>" >> $ZNC_CONFIG 28 } 29 30 add_network() { 31 local current_user="$1" 32 local network="$2" 33 local user 34 local name 35 36 config_get user "$network" user 37 38 [ "$user" = "$current_user" ] || return 0 39 40 config_get name "$network" name 41 echo " <Network $name>" >> $ZNC_CONFIG 42 config_list_foreach "$network" server "add_param \" Server\"" 43 config_list_foreach "$network" fingerprint "add_param \" trustedserverfingerprint\"" 44 config_list_foreach "$network" channel "add_chan" 45 echo " </Network>" >> $ZNC_CONFIG 46 } 47 48 znc_global() { 49 local znc="$1" 50 local anoniplimit 51 local maxbuffersize 52 local connectdelay 53 local serverthrottle 54 local znc_config_path 55 local znc_pem_file 56 57 config_get_bool DISABLED "$znc" disabled 0 58 59 [ "$DISABLED" -eq 0 ] || return 0 60 61 config_get znc_config_path "$znc" znc_config_path 62 63 config_get RUNAS_USER "$znc" runas_user znc 64 config_get RUNAS_GROUP "$znc" runas_group znc 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 fi 94 } 95 96 add_user() { 97 local user="$1" 98 local password 99 local nick 100 local altnick 101 local ident 102 local realname 103 local buffer 104 local quitmsg 105 local chanmodes 106 local vhost 107 local server 108 109 config_get password "$user" password 110 config_get nick "$user" nick 111 config_get altnick "$user" altnick 112 config_get ident "$user" ident 113 config_get realname "$user" realname 114 config_get buffer "$user" buffer 115 config_get quitmsg "$user" quitmsg 116 config_get chanmodes "$user" chanmodes 117 config_get vhost "$user" vhost 118 config_get server "$user" server 119 120 echo "<User $user>" >> $ZNC_CONFIG 121 122 case "$password" in 123 "md5#"* | "sha256#"* | "plain#"*) 124 add_param " Pass" "$password" 125 ;; 126 *) 127 add_param " Pass" "plain#$password" 128 ;; 129 esac 130 131 add_param " Nick" "$nick" 132 add_param " AltNick" "${altnick:-$nick"_"}" 133 add_param " Ident" "${ident:-$nick}" 134 add_param " RealName" "${realname:-$nick}" 135 [ -z "$vhost" ] || add_param " VHost" "$vhost" 136 add_param " Buffer" "${buffer:-50}" 137 add_param " KeepBuffer" "false" 138 add_param " ChanModes" "${chanmodes:-"+stn"}" 139 [ -z "$quitmsg" ] || add_param " QuitMsg" "$quitmsg" 140 141 config_list_foreach "$user" module "add_param \" LoadModule\"" 142 143 # add legacy network 144 if [ "$server" ]; then 145 echo " <Network Default>" >> $ZNC_CONFIG 146 config_list_foreach "$user" server "add_param \" Server\"" 147 config_list_foreach "$user" fingerprint "add_param \" trustedserverfingerprint\"" 148 config_list_foreach "$user" channel "add_chan" 149 echo " </Network>" >> $ZNC_CONFIG 150 fi 151 152 config_foreach "add_network \"$user\"" network 153 154 echo "</User>" >> $ZNC_CONFIG 155 } 156 157 start_service() { 158 config_load znc 159 config_foreach znc_global znc 160 161 [ "$DISABLED" -eq 0 ] || return 0 162 163 if [ "$EXTERNAL_CONFIG" -eq 0 ] 164 then 165 config_foreach add_listener listener 166 config_foreach add_user user 167 168 fi 169 170 chown -hR ${RUNAS_USER}:${RUNAS_GROUP} ${ZNC_CONFIG_PATH} || { 171 logger -s -t ZNC -p daemon.err "Invalid UID/GID. Aborting startup" 172 exit 1 173 } 174 175 procd_open_instance 176 procd_set_param file /etc/config/znc 177 [ "$EXTERNAL_CONFIG" -eq 1 ] && procd_set_param file "${ZNC_CONFIG}/configs/znc.conf" 178 procd_set_param command /usr/bin/znc 179 procd_append_param command -f -d$ZNC_CONFIG_PATH 180 procd_set_param user ${RUNAS_USER} 181 procd_set_param respawn 182 procd_close_instance 183 }