|
|
- #!/bin/sh /etc/rc.common
-
- START=80
- STOP=10
-
- CFGDIR=/var/etc/radicale2
- SYSCFG=$CFGDIR/config
- USRCFG=$CFGDIR/users
-
- DATADIR="/srv/radicale2/data"
- LOGDIR=""
- USE_PROCD=1
-
- # we could start with empty configuration file using defaults
- [ -f ${IPKG_INSTROOT}/etc/config/radicale2 ] || touch ${IPKG_INSTROOT}/etc/config/radicale2
-
- conf_line() {
- local cfgfile="$1"
- local option="$2"
- local value="$3"
-
- if [ -n "$value" ]; then
- eval "echo '$2' = '$value' >>'$cfgfile'"
- fi
- }
-
- conf_getline() {
- local cfg="$1"
- local cfgfile="$2"
- local option="$3"
- local defval="$4"
- local flag="$5"
- unset value
-
- if [ "$flag" != "1" ]; then
- config_get value "$cfg" "$option" "$defval"
- conf_line "$cfgfile" "$option" "$value"
- else
- config_get_bool value "$cfg" "$option" "$defval"
- [ -z "$defval" ] && defval=1
- if [ "$value" -ne "$defval" ]; then
- if [ "$value" -ne 0 ]; then
- conf_line "$cfgfile" "$option" "True"
- else
- conf_line "$cfgfile" "$option" "False"
- fi
- fi
- fi
- }
-
- build_hosts_line() {
- local val="$1"
-
- append hostlist "$val" ", "
- }
-
- conf_section() {
- local cfg="$1"
- local cfgfile="$2"
- local hostlist=""
- local value
-
- echo "[$cfg]
- " >>$cfgfile
-
- case $cfg in
- server)
- config_list_foreach "$cfg" host build_hosts_line
- conf_line "$tmpfile" hosts "$hostlist"
- conf_getline "$cfg" $tmpfile max_connections
- conf_getline "$cfg" $tmpfile max_conntent_length
- conf_getline "$cfg" $tmpfile timeout
-
- conf_getline "$cfg" $tmpfile ssl 0 1
- if [ "$value" -eq 1 ]; then
- conf_getline "$cfg" $tmpfile certificate
- conf_getline "$cfg" $tmpfile key
- conf_getline "$cfg" $tmpfile certificate_authority
- conf_getline "$cfg" $tmpfile protocol
- conf_getline "$cfg" $tmpfile ciphers
- fi
-
- conf_getline "$cfg" $tmpfile dns_lookup 1 1
- conf_getline "$cfg" $tmpfile realm
- ;;
- encoding)
- conf_getline "$cfg" $tmpfile request
- conf_getline "$cfg" $tmpfile stock
- ;;
- auth)
- conf_getline "$cfg" $tmpfile "type" htpasswd
- if [ "$value" = "htpasswd" ]; then
- conf_getline "$cfg" $tmpfile htpasswd_filename $CFGDIR/users
- conf_getline "$cfg" "$tmpfile" htpasswd_encryption plain
- fi
-
- conf_getline "$cfg" "$tmpfile" delay
- ;;
- rights)
- conf_getline "$cfg" "$tmpfile" "type"
- if [ "$value" = "from_file" ]; then
- conf_getline "$cfg" "$tmpfile" "file"
- fi
- ;;
- storage)
- conf_getline "$cfg" $tmpfile filesystem_folder "$DATADIR"
- DATADIR="$value"
- conf_getline "$cfg" $tmpfile filesystem_locking 1 1
- conf_getline "$cfg" $tmpfile max_sync_token_age
- conf_getline "$cfg" $tmpfile filesystem_close_lock_file 0 1
- conf_getline "$cfg" $tmpfile hook
- ;;
- web)
- conf_getline "$cfg" $tmpfile "type"
- ;;
- logging)
- conf_getline "$cfg" "$tmpfile" config
- conf_getline "$cfg" "$tmpfile" debug 0 1
- conf_getline "$cfg" "$tmpfile" full_environment 0 1
- conf_getline "$cfg" "$tmpfile" mask_passwords 1 1
- ;;
- headers)
- config_get "$cfg" "$tmpfile" cors
- if [ -n "$cors" ]; then
- echo "Access-Control-Allow-Origin = $cors" >>$tmpfile
- fi
- ;;
- esac
-
- echo "
- " >>$cfgfile
- }
-
- add_missing_sections() {
- local cfgfile="$1"
-
- for section in server encoding auth rights storage web logging headers; do
- if [ "$section" = "server" ]; then
- grep -q "\[$section\]" $cfgfile || echo "
- [$section]
- hosts = 0.0.0.0:5232, [::]:5232
-
- " >>$cfgfile
- elif [ "$section" = "auth" ]; then
- grep -q "\[$section\]" $cfgfile || echo "
- [$section]
- type = htpasswd
- htpasswd_filename = $CFGDIR/users
- htpasswd_encryption = plain
-
- " >>$cfgfile
- elif [ "$section" = "storage" ]; then
- grep -q "\[$section\]" $cfgfile || echo "
- [$section]
- filesystem_folder = $DATADIR
-
- " >>$cfgfile
- else
- grep -q "\[$section\]" $cfgfile || echo "
- [$section]
-
- " >>$cfgfile
- fi
- done
- }
-
- add_user() {
- local cfg="$1"
- local tmpfile="$2"
- local name password
-
- config_get name "$cfg" name
- config_get password "$cfg" password
-
- [ -n "$name" ] && echo "$name:$password" >>$tmpfile
- }
-
- build_users() {
- local tmpfile="$1"
-
- # temporary config file
- # radicale2 needs read access
- chmod 0640 $tmpfile
-
- config_foreach add_user user "$tmpfile"
- }
-
- build_config() {
- local tmpfile=$(mktemp)
- local tmpfile2=$(mktemp)
-
- # temporary config file
- # radicale2 need read access
- chmod 0640 $tmpfile
-
- config_load radicale2
- config_foreach conf_section section $tmpfile
- add_missing_sections $tmpfile
-
- build_users $tmpfile2
-
- # move tmp to final
- mkdir -m0750 -p $CFGDIR
- cat $tmpfile >$SYSCFG
- rm -f $tmpfile
- cat $tmpfile2 >$USRCFG
- rm -f $tmpfile2
- }
-
- set_permission() {
- # config file permissions (read access for group)
- chmod 0750 $CFGDIR
- chmod 0640 $SYSCFG
- chmod 0640 $USRCFG
- chgrp -R radicale2 $CFGDIR
- # data directory does not exist
- [ -d $DATADIR ] || {
- logger -p user.error -t "radicale2[----]" "Data directory '$DATADIR' does not exist. Startup failed !!!"
- }
- }
-
-
- interface_triggers() {
- local action="$1"
- local triggerlist trigger
-
- config_load radicale2
- config_get triggerlist server triggerlist
-
- . /lib/functions/network.sh
-
- if [ -n "$triggerlist" ]; then
- for trigger in $triggerlist; do
- if [ "$action" = "add_trigger" ]; then
- procd_add_interface_trigger "interface.*" "$trigger" /etc/init.d/radicale2 reload
- else
- network_is_up "$trigger" && return 0
- fi
- done
- else
- if [ "$action" = "add_trigger" ]; then
- procd_add_raw_trigger "interface.*.up" 2000 /etc/init.d/radicale2 reload
- else
- ubus call network.device status | grep -q '"up": true' && return 0
- fi
- fi
- [ "$action" = "add_trigger" ] || return 1
- }
-
- start_service() {
- local haveinterface
-
- if [ ! -r /etc/radicale2/config ]; then
- build_config
- set_permission
- fi
-
- interface_triggers "check_interface_up" || return
-
- procd_open_instance "radicale2"
- procd_set_param respawn
- procd_set_param stderr 1
- procd_set_param stdout 1
- if [ ! -r /etc/radicale2/config ]; then
- procd_set_param command /usr/bin/radicale2 --config="$SYSCFG"
- else
- procd_set_param command /usr/bin/radicale2 --config="/etc/radicale2/config"
- fi
- procd_set_param user radicale2
- procd_close_instance
-
- return 0
- }
-
- service_triggers() {
- interface_triggers "add_trigger"
- procd_add_reload_trigger "radicale2"
- }
|