Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37566605
en ru br
Репозитории ALT
S:1.0.2-alt1
5.1: 1.0.2-alt1
4.1: 1.0.2-alt1
www.altlinux.org/Changes

Группа :: Система/Серверы
Пакет: jabber-alice

 Главная   Изменения   Спек   Патчи   Исходники   Загрузить   Gear   Bugs and FR  Repocop 

#!/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=<host>] [--port=<port>] [--tls] [--resource=<name>] [--priority=<num>] (help|add|del|list) [From[:Password]] [<To> [<To> ..]]"
echo "Options are userfull only for adding accounts."
echo "Default values (see $SITE_CONFIG):"
echo " host = <host part of From JID>"
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:]]*<!--#alias/ s/^[[:blank:]]*<!--#alias[[:blank:]]\+\(.\+\)[[: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 </aliases>, 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"
<!--#alias $FROM => $TO -->
<connection>
<hostname>$HOST</hostname>
<domain>$DOMAIN</domain>
<username>$USER</username>
<password>$PASSWORD</password>
<port>$PORT</port>
<tls>$TLS</tls>
<priority>$PRIORITY</priority>
<resource>$RESOURCE</resource>
__END__
for i in $TO ; do
echo -e "\t\t<real_jid>$i</real_jid>" >> "$TEMPDIR/connection"
done
echo -e "\t</connection>" >> "$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

 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin