#!/bin/bash # Script for inserting/deleting aliases from Alice config file # [ -r @sysconfigfile@ ] && . @sysconfigfile@ CONFIG=$CONFIG_FILE [ "$CONFIG" == "" ] && CONFIG=./config.xml BACKUP="$CONFIG.back" SITE_CONFIG=`dirname "$CONFIG"`/alice-config.conf # Default values HOST= PORT=5222 TLS=no RESOURCE=Alice PRIORITY=0 [ -r "$SITE_CONFIG" ] && . "$SITE_CONFIG" show_usage() { echo "Usage: $0 [--host=] [--port=] [--tls] [--resource=] [--priority=] (help|add|del|list) [From[:Password]] [ [ ..]]" echo "Options are userfull only for adding accounts." echo "Default values (see $SITE_CONFIG):" echo " host = " echo " port = $PORT" echo " tls = $TLS" echo " resource = $RESOURCE" echo " priority = $PRIORITY" exit 0 } check_config() { if [ "$CONFIG" ]; then if [ ! -r "$CONFIG" ]; then echo "Can't read config file $CONFIG, exiting..." exit 2 fi else echo "Config file name is't set, exiting..." exit 2 fi } TEMP=`getopt -n "$0" -o h -l host:,port:,tls,resource:,priority:,config: -- "$@"` || show_usage eval set -- "$TEMP" while :; do case "$1" in -h|help) show_usage ;; --host) shift [ "$1" ] && HOST=$1 shift ;; --port) shift [ "$1" ] && PORT=$1 shift ;; --tls) shift TLS=yes ;; --resource) shift [ "$1" ] && RESOURCE=$1 shift ;; --priority) shift [ "$1" ] && PRIORITY=$1 shift ;; --config) shift CONFIG=$1 shift ;; --) shift ;; add) ACTION='add' break ;; del|delete) ACTION='del' break ;; list) check_config sed -n '/^[[:blank:]]*/\1/p' < "$CONFIG" exit 0 ;; -h|*) show_usage esac done shift check_config [ "$1" ] || show_usage FROM=$1 shift [ "$1" ] || show_usage TO=$@ # check password part in From JID USER=`echo $FROM | sed -n 's/^\([^@]\+\)@\?.*$/\1/p'` DOMAIN=`echo $FROM | sed -n 's/^[^@]\+@\([^:]*\):\?.*$/\1/p'` PASSWORD=`echo $FROM | sed -n 's/^[^@]\+@\?[^:]*:\?\(.*\)$/\1/p'` FROM=$USER [ $DOMAIN ] && FROM="$FROM@$DOMAIN" echo "$ACTION from=<$FROM>, to=<$TO>" [ "$USER" ] || (echo "Cann't find user name from JID $FROM, exiting...";exit 1); [ "$DOMAIN" ] || (echo "No domain part in JID $FROM, using --host instead..."; DOMAIN=$HOST); [ "$DOMAIN" ] || (echo "Cann't find domain for JID $FROM, exiting...";exit 1); [ "$HOST" ] || HOST=$DOMAIN exit_handler() { local rc=$? trap - EXIT if [ -d "$TEMPDIR" ]; then rm -f "$TEMPDIR/header" "$TEMPDIR/footer" "$TEMPDIR/connection" "$TEMPDIR/config" "$TEMPDIR/tmp" rmdir "$TEMPDIR" fi exit $rc } trap exit_handler HUP PIPE INT QUIT TERM EXIT # Split config into parts # Three-way split - header, connection, footer - by $LINE config_split_3() { sed "/^$LINE/q" <$CONFIG | sed '$d' > "$TEMPDIR/header" sed -n "/^$LINE/,\$p" <$CONFIG >"$TEMPDIR/tmp" sed -n '1,/^[[:blank:]]*<\/connection>/p' < "$TEMPDIR/tmp" >"$TEMPDIR/connection" sed -n '/^[[:blank:]]*<\/connection>/,$p' < "$TEMPDIR/tmp" | sed '1d' > "$TEMPDIR/footer" } # Two-way split - header before , and footer config_split_2() { sed '/^[[:blank:]]*<\/aliases>/q' <$CONFIG | sed '$d' >"$TEMPDIR/header" touch "$TEMPDIR/connection" sed -n '/^[[:blank:]]*<\/aliases>/,$p' <$CONFIG > "$TEMPDIR/footer" } # Make connection section make_connection() { local i cat <<__END__ > "$TEMPDIR/connection" $HOST $DOMAIN $USER $PASSWORD $PORT $TLS $PRIORITY $RESOURCE __END__ for i in $TO ; do echo -e "\t\t$i" >> "$TEMPDIR/connection" done echo -e "\t" >> "$TEMPDIR/connection" } TEMPDIR=`mktemp -td` LINE=`sed -n "/^[[:blank:]]*<\!--#alias[[:blank:]]\+$FROM[[:blank:]]\+=>[[:blank:]]\+$TO[[:blank:]]\+-->/p" <$CONFIG | sed -n '1p'` if [ "$ACTION" == 'add' ]; then if [ "$LINE" ]; then echo "Connection from $FROM to $TO already exists, replacing it with new one" config_split_3 else echo "Adding connection from $FROM to $TO" config_split_2 fi make_connection cat "$TEMPDIR/header" "$TEMPDIR/connection" "$TEMPDIR/footer" > "$TEMPDIR/config" else if [ "$LINE" ]; then echo "Deleting connection from $FROM to $TO" config_split_3 cat "$TEMPDIR/header" "$TEMPDIR/footer" > "$TEMPDIR/config" else echo "There are no connection from $FROM to $TO" exit 0 fi fi # Updating config file if ! diff -q "$CONFIG" "$TEMPDIR/config" >/dev/null; then echo "Updating config file" mv -f "$CONFIG" "$BACKUP" mv -f "$TEMPDIR/config" "$CONFIG" fi