diff options
author | root <root@hello.jones.dk> | 2010-06-05 18:55:36 +0200 |
---|---|---|
committer | root <root@hello.jones.dk> | 2010-06-05 18:55:36 +0200 |
commit | b60961d6f2805769f36abf1588646c501fe81309 (patch) | |
tree | c44c788a423cb4488bb541466ec3cca4a528a15e /localkannel-dispatch | |
parent | f2962c6ceebee1c1684fb53f81bd8f645c449b88 (diff) | |
parent | 847a13089cd112ab6d047d1d1614e6a9c6f2dd9c (diff) |
Merge branch 'master' of git://source.jones.dk/sbin
Conflicts:
localkannel-dispatch
Diffstat (limited to 'localkannel-dispatch')
-rwxr-xr-x | localkannel-dispatch | 167 |
1 files changed, 76 insertions, 91 deletions
diff --git a/localkannel-dispatch b/localkannel-dispatch index 8a891d6..f1fcf5f 100755 --- a/localkannel-dispatch +++ b/localkannel-dispatch @@ -2,9 +2,20 @@ set -e -exit1() { - echo >&2 "Error: $1" - echo >&2 "Exiting..." +vardir=/var/lib/kannel/hello +sbindir=/usr/local/sbin + +exit0() { + [ -n "$1" ] && echo "$1" + exit 0 +} +exit1() { + [ -z "$1" ] || echo "Error: $1" || echo "Internal error!" + response="${1+Error: $1}${-Internal error!}" +# FIXME: pass error messages via stderr (not stdout) +# echo >&2 "$response" + echo "$response" + [ -z "$SMS_SMSC$SMS_URL" ] || $sbindir/localsendsms "$to" "$response" exit 1 } @@ -25,8 +36,8 @@ uriunescape() { from=`uriunescape "$1"`; shift #to=`uriunescape "$1" | sed -e 's/\+/ /g'`; shift to=`uriunescape "$1"`; shift -#set -- `uriunescape "$@" | sed -e 's/\+/ /g'` -set -- `uriunescape "$@"` +set -- `uriunescape "$@" | sed -e 's/\+/ /g'` +#set -- `uriunescape "$@"` app_raw="$1" app=`simpleword "$1"`; shift @@ -37,6 +48,11 @@ urldecode=0 export SMS_PHONE urldecode case "$SMS_REALM" in + test) + provider="dummy" + mdpath="/home/hearth/public_webdata/hearth/content/sms" + export mdpath + ;; hello) provider="local" # provider="coolsms" @@ -50,10 +66,15 @@ case "$SMS_REALM" in export mdpath ;; *) - exit1 "unknown realm \"$SMS_REALM\"" + exit1 "unknown realm \"$SMS_REALM\"!" ;; esac case "$provider" in + dummy) + dummy=1 + ADMIN_OK=1 + export ADMIN_OK dummy + ;; local) export SMS_SMSC ;; @@ -79,102 +100,66 @@ case "$provider" in SMS_SMSC="X" SMS_DLR_MASK="7" SMS_DLR_URL="http://helloearth.jones.dk/test.cgi?type=dlr&msgid=XXX&smsid=%I&from=%p&to=%P&time=%t&unixtime=%T&dlr=%d&dlrmsg=%A" + SMS_VALIDITY="1" stripprefix="1" - export SMS_SMSC SMS_DLR_MASK SMS_DLR_URL stripprefix + export SMS_SMSC SMS_DLR_MASK SMS_DLR_URL SMS_VALIDITY stripprefix + ;; + routo) + SMS_SMSC="Y" + export SMS_SMSC ;; *) - exit1 "unknown provider \"$provider\"" + exit1 "unknown provider \"$provider\"!" ;; esac -# by now sms connection should work, so let sender get errors too -exit1() { - echo >&2 "Error: $1" - /usr/local/sbin/localsendsms "$to" "Error: $1" - echo >&2 "Exiting..." - exit 1 -} - -return1() { - echo >&2 "Error: $1" - echo "$1" - exit 1 -} - -vardir="/var/lib/kannel/hello" -findobjects() { - set -e - object="$1"; shift || return1 "Internal error in routine \"findobjects\" (empty object)!" - limit="$@" - regex="$(echo "$limit" | perl -ne '/^\/(.+)\/$/ and print $1')" - args="$(echo "$limit" | perl -ne 's/.*?([a-z0-9]+).*?/ $1/g and print')" - [ -d "$vardir/$object" ] || return - if [ -z "$*" ]; then - cd "$vardir/$object" && find * -maxdepth 1 -type d - elif [ -n "$regex" ]; then - cd "$vardir/$object" && find * -maxdepth 1 -type d -regex "$regex" - elif [ -n $args ]; then - cd "$vardir/$object" && ls -1d $args - else - return1 "Internal error in routine \"findobjects\" (illegal limit)!" - fi -} -addobject() { - set -e - object="$1" - name="$2" - oldname="$(findobjects "$object" "$name")" || return1 "$oldname" - [ -z "$oldname" ] || return1 "$object \"$name\" already exist." - [ -n "$name" ] || return1 "Internal error in routine \"addobject\" (empty name)!" - mkdir -p "$vardir/$object/$name" - chgrp --reference="$vardir" "$vardir/$object/$name" - echo "$name" -} - +if [ -n "$REDIRECT_OK" ]; then case "$app" in @*) - [ -n "$REDIRECT_OK" ] || exit1 "Redirection not permitted here!" to="$(echo "$app" | perl -pe 's/^@//;' -e 's/^([^+])/+45\1/')" # TODO: silence errors - or better: bounce those back to original sender - /usr/local/sbin/localmarkdown2sms "$to" "$@" - ;; -# !*) -# [ -n "$GROUP_OK" ] || exit1 "Redirection to group not permitted here!" -# group="$(echo "$app" | perl -pe 's/^!//;')" -# for to in $(echo "$group" | perl ...); do -# /usr/local/sbin/localmarkdown2sms "$to" "$@" -# done -# ;; - /*) - [ -n "$ADMIN_OK" ] || exit1 "Administrative commands not permitted here!" - cmd="$(echo "$app" | perl -pe 's/^\///;')" - case "$cmd" in - add|create) - case "$1" in - user|group) - object="$1"; shift || exit1 "Internal error while adding object." - name="$(addobject "$object" "$@")" || exit1 "Failed adding $object${name+: $name}!" - /usr/local/sbin/localsendsms "$to" "$object \"$name\" added." - ;; - *) - exit1 "Cannot add \"$1\" (try \"add user\" or \"add group\" instead)." - ;; - esac - ;; - status) - msg="$(/usr/local/sbin/localshowkannelstatus)" - /usr/local/sbin/localsendsms "$to" "$msg" - ;; - *) - exit1 "unknown command \"$cmd\"" - ;; - esac + $sbindir/localmarkdown2sms "$to" "$@" + exit 0 ;; - yb) - s="$(links -dump "http://www.yubnub.org/parser/parse?command=$@")" - /usr/local/sbin/localsendsms "$to" "$s" +esac +fi + +if [ -n "$GROUP_OK" ]; then +case "$app" in + !*) + group="$(echo "$app" | perl -pe 's/^!//;')" + members=$(cd "$vardir/user" && grep -lF "$group" */group | perl -pe "s,/group$,,") || members= + [ -n "$members" ] || exit1 "Message redirected for none: no members resolved in group \"$group\"!" + for member in $members; do + phone=$(head -n 1 "$vardir/user/$member/phone") || nophone="${nophone+$nophone }$member" + [ -z "$phone" ] || $sbindir/localmarkdown2sms "$phone" "$@" + done + [ -n "$members" ] || exit1 "Message redirected for none: no members resolved in group \"$group\"!" + membercount=$(echo "$members" | wc --word) + [ -z "$nophone" ] || nophonecount=$(echo "$nophone" | wc --word) + [ -z "$nophone" ] || exit1 "Message redirected for $membercount members of group \"$group\", but failed for $nophonecount of them (could not resolve phone number)!" + exit0 "Message redirected for $membercount members of group \"$group\"." ;; - *) - /usr/local/sbin/localmarkdown2sms "$to" "$app_raw" "$@" +esac +fi + +case "$app" in + /*) + candidates=$(cd "$vardir/user" && grep -lF "$to" */phone | perl -pe "s,/phone$,,") || candidates= + [ -z "$candidates" ] || $(grep -vqF "$candidates" "$vardir/group/admin/user") || admin=true + if [ -n "$ADMIN_OK" ] && [ -n "$admin" ]; then + cmd="$(echo "$app" | perl -pe 's/^\///;')" + str="$($sbindir/localsmsadmin "$cmd" "$@" 2>&1)" || exit1 "$str" + $sbindir/localsendsms "$to" $str + exit 0 + fi ;; esac + +# yb) +# s="$(links -dump "http://www.yubnub.org/parser/parse?command=$@")" +# $sbindir/localsendsms "$to" "$s" +# exit 0 +# ;; + +$sbindir/localmarkdown2sms "$to" "$app_raw" "$@" |