From 82f2b9ca823cf4770ed83e76f323faf8d90857db Mon Sep 17 00:00:00 2001 From: Jonas Date: Thu, 20 May 2010 14:36:58 +0200 Subject: Add dummy provider, and test realm using it. --- localkannel-dispatch | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/localkannel-dispatch b/localkannel-dispatch index ac2aae4..5926b28 100755 --- a/localkannel-dispatch +++ b/localkannel-dispatch @@ -37,6 +37,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" @@ -54,6 +59,11 @@ case "$SMS_REALM" in ;; esac case "$provider" in + dummy) + dummy=1 + ADMIN_OK=1 + export ADMIN_OK dummy + ;; local) export SMS_SMSC ;; -- cgit v1.2.3 From 15a5bf08d902cb5c5d4a55eea999bd52bcdce931 Mon Sep 17 00:00:00 2001 From: Jonas Date: Thu, 20 May 2010 14:39:45 +0200 Subject: Fix findobjects function. --- localkannel-dispatch | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/localkannel-dispatch b/localkannel-dispatch index 5926b28..41f6e64 100755 --- a/localkannel-dispatch +++ b/localkannel-dispatch @@ -119,11 +119,13 @@ findobjects() { 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 + cd "$vardir/$object" && find -mindepth 1 -maxdepth 1 -type d -printf '%f\n' elif [ -n "$regex" ]; then - cd "$vardir/$object" && find * -maxdepth 1 -type d -regex "$regex" + cd "$vardir/$object" && find -mindepth 1 -maxdepth 1 -type d -regex "$regex" elif [ -n $args ]; then - cd "$vardir/$object" && ls -1d $args + args_multiline="$(echo "$args" | perl -pe 's/[[:space:]]+/\n/g')" + cd "$vardir/$object" && ! find -mindepth 1 -maxdepth 1 -type d -printf '%f\n' \ + | grep -Fx "$args_multiline" || true else return1 "Internal error in routine \"findobjects\" (illegal limit)!" fi -- cgit v1.2.3 From ba307892224bdabf46646c3e979b3b3a56cb1554 Mon Sep 17 00:00:00 2001 From: Jonas Date: Thu, 20 May 2010 14:56:25 +0200 Subject: Rename object-related variables. --- localkannel-dispatch | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/localkannel-dispatch b/localkannel-dispatch index 41f6e64..54a13da 100755 --- a/localkannel-dispatch +++ b/localkannel-dispatch @@ -113,18 +113,18 @@ return1() { vardir="/var/lib/kannel/hello" findobjects() { set -e - object="$1"; shift || return1 "Internal error in routine \"findobjects\" (empty object)!" + type="$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 + [ -d "$vardir/$type" ] || return if [ -z "$*" ]; then - cd "$vardir/$object" && find -mindepth 1 -maxdepth 1 -type d -printf '%f\n' + cd "$vardir/$type" && find -mindepth 1 -maxdepth 1 -type d -printf '%f\n' elif [ -n "$regex" ]; then - cd "$vardir/$object" && find -mindepth 1 -maxdepth 1 -type d -regex "$regex" + cd "$vardir/$type" && find -mindepth 1 -maxdepth 1 -type d -regex "$regex" elif [ -n $args ]; then args_multiline="$(echo "$args" | perl -pe 's/[[:space:]]+/\n/g')" - cd "$vardir/$object" && ! find -mindepth 1 -maxdepth 1 -type d -printf '%f\n' \ + cd "$vardir/$type" && ! find -mindepth 1 -maxdepth 1 -type d -printf '%f\n' \ | grep -Fx "$args_multiline" || true else return1 "Internal error in routine \"findobjects\" (illegal limit)!" @@ -132,13 +132,13 @@ findobjects() { } addobject() { set -e - object="$1" + type="$1" name="$2" - oldname="$(findobjects "$object" "$name")" || return1 "$oldname" - [ -z "$oldname" ] || return1 "$object \"$name\" already exist." + oldname="$(findobjects "$type" "$name")" || return1 "$oldname" + [ -z "$oldname" ] || return1 "$type \"$name\" already exist." [ -n "$name" ] || return1 "Internal error in routine \"addobject\" (empty name)!" - mkdir -p "$vardir/$object/$name" - chgrp --reference="$vardir" "$vardir/$object/$name" + mkdir -p "$vardir/$type/$name" + chgrp --reference="$vardir" "$vardir/$type/$name" echo "$name" } @@ -163,9 +163,9 @@ case "$app" 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." + objecttype="$1"; shift || exit1 "Internal error while adding object." + objectname="$(addobject "$objecttype" "$@")" || exit1 "Failed adding $objecttype${objectname+: $objectname}!" + /usr/local/sbin/localsendsms "$to" "$objecttype \"$objectname\" added." ;; *) exit1 "Cannot add \"$1\" (try \"add user\" or \"add group\" instead)." -- cgit v1.2.3 From a49c116e631b7a2d04bff6e65cbd9fe03cd9afc4 Mon Sep 17 00:00:00 2001 From: Jonas Date: Thu, 20 May 2010 15:07:19 +0200 Subject: Improve variable validation in object functions. --- localkannel-dispatch | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/localkannel-dispatch b/localkannel-dispatch index 54a13da..05e00c8 100755 --- a/localkannel-dispatch +++ b/localkannel-dispatch @@ -113,7 +113,8 @@ return1() { vardir="/var/lib/kannel/hello" findobjects() { set -e - type="$1"; shift || return1 "Internal error in routine \"findobjects\" (empty object)!" + type="$1"; shift || return1 "Internal error (findobjects: missing type)!" + [ -n "$type" ] || return1 "Internal error (findobjects: empty type)!" limit="$@" regex="$(echo "$limit" | perl -ne '/^\/(.+)\/$/ and print $1')" args="$(echo "$limit" | perl -ne 's/.*?([a-z0-9]+).*?/ $1/g and print')" @@ -127,16 +128,17 @@ findobjects() { cd "$vardir/$type" && ! find -mindepth 1 -maxdepth 1 -type d -printf '%f\n' \ | grep -Fx "$args_multiline" || true else - return1 "Internal error in routine \"findobjects\" (illegal limit)!" + return1 "Internal error (findobjects: illegal limit)!" fi } addobject() { set -e - type="$1" - name="$2" + type="$1"; shift || return1 "Internal error (addobject: missing type)!" + [ -n "$type" ] || return1 "Internal error (addobject: empty type)!" + name="$1"; shift || return1 "Internal error (addobject: missing name)!" + [ -n "$name" ] || return1 "Internal error (addobject: empty name)!" oldname="$(findobjects "$type" "$name")" || return1 "$oldname" [ -z "$oldname" ] || return1 "$type \"$name\" already exist." - [ -n "$name" ] || return1 "Internal error in routine \"addobject\" (empty name)!" mkdir -p "$vardir/$type/$name" chgrp --reference="$vardir" "$vardir/$type/$name" echo "$name" -- cgit v1.2.3 From 16542abffa25dadd328a1ddc4dc4fb72cc137a75 Mon Sep 17 00:00:00 2001 From: Jonas Date: Thu, 20 May 2010 20:08:30 +0200 Subject: Add function delobject(), and keyword del/delete/remove. --- localkannel-dispatch | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/localkannel-dispatch b/localkannel-dispatch index 05e00c8..7343b67 100755 --- a/localkannel-dispatch +++ b/localkannel-dispatch @@ -143,6 +143,17 @@ addobject() { chgrp --reference="$vardir" "$vardir/$type/$name" echo "$name" } +delobject() { + set -e + type="$1"; shift || return1 "Internal error (delobject: missing type)!" + [ -n "$type" ] || return1 "Internal error (delobject: empty type)!" + name="$1"; shift || return1 "Internal error (delobject: missing name)!" + [ -n "$name" ] || return1 "Internal error (delobject: empty name)!" + oldname="$(findobjects "$type" "$name")" || return1 "$oldname" + [ -n "$oldname" ] || return1 "No $type named \"$name\" (typo? or perhaps already deleted?)." + rmdir1 "$vardir/$type/$name" + echo "$name" +} case "$app" in @*) @@ -174,6 +185,18 @@ case "$app" in ;; esac ;; + del|delete|remove) + case "$1" in + user|group) + objecttype="$1"; shift || exit1 "Internal error while deleting object." + objectname="$(delobject "$objecttype" "$@")" || exit1 "Failed deleting $objecttype${objectname+: $objectname}!" + /usr/local/sbin/localsendsms "$to" "$objecttype \"$objectname\" deleted." + ;; + *) + exit1 "Cannot delete \"$1\" (try \"del user\" or \"del group\" instead)." + ;; + esac + ;; status) msg="$(/usr/local/sbin/localshowkannelstatus)" /usr/local/sbin/localsendsms "$to" "$msg" -- cgit v1.2.3 From b85e67369883d7aa8f759f8e2c4af61c74d4954e Mon Sep 17 00:00:00 2001 From: Jonas Date: Thu, 20 May 2010 20:32:50 +0200 Subject: Simplify variable validation: shift after checking if empty. --- localkannel-dispatch | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/localkannel-dispatch b/localkannel-dispatch index 7343b67..00cc6e3 100755 --- a/localkannel-dispatch +++ b/localkannel-dispatch @@ -113,8 +113,7 @@ return1() { vardir="/var/lib/kannel/hello" findobjects() { set -e - type="$1"; shift || return1 "Internal error (findobjects: missing type)!" - [ -n "$type" ] || return1 "Internal error (findobjects: empty type)!" + type="$1"; [ -n "$type" ] || return1 "Internal error (findobjects: empty type)!"; shift limit="$@" regex="$(echo "$limit" | perl -ne '/^\/(.+)\/$/ and print $1')" args="$(echo "$limit" | perl -ne 's/.*?([a-z0-9]+).*?/ $1/g and print')" @@ -133,10 +132,8 @@ findobjects() { } addobject() { set -e - type="$1"; shift || return1 "Internal error (addobject: missing type)!" - [ -n "$type" ] || return1 "Internal error (addobject: empty type)!" - name="$1"; shift || return1 "Internal error (addobject: missing name)!" - [ -n "$name" ] || return1 "Internal error (addobject: empty name)!" + type="$1"; [ -n "$type" ] || return1 "Internal error (addobject: empty type)!"; shift + name="$1"; [ -n "$name" ] || return1 "Internal error (addobject: empty name)!"; shift oldname="$(findobjects "$type" "$name")" || return1 "$oldname" [ -z "$oldname" ] || return1 "$type \"$name\" already exist." mkdir -p "$vardir/$type/$name" @@ -145,10 +142,8 @@ addobject() { } delobject() { set -e - type="$1"; shift || return1 "Internal error (delobject: missing type)!" - [ -n "$type" ] || return1 "Internal error (delobject: empty type)!" - name="$1"; shift || return1 "Internal error (delobject: missing name)!" - [ -n "$name" ] || return1 "Internal error (delobject: empty name)!" + type="$1"; [ -n "$type" ] || return1 "Internal error (delobject: empty type)!"; shift + name="$1"; [ -n "$name" ] || return1 "Internal error (delobject: empty name)!"; shift oldname="$(findobjects "$type" "$name")" || return1 "$oldname" [ -n "$oldname" ] || return1 "No $type named \"$name\" (typo? or perhaps already deleted?)." rmdir1 "$vardir/$type/$name" @@ -176,7 +171,7 @@ case "$app" in add|create) case "$1" in user|group) - objecttype="$1"; shift || exit1 "Internal error while adding object." + objecttype="$1"; shift objectname="$(addobject "$objecttype" "$@")" || exit1 "Failed adding $objecttype${objectname+: $objectname}!" /usr/local/sbin/localsendsms "$to" "$objecttype \"$objectname\" added." ;; @@ -188,7 +183,7 @@ case "$app" in del|delete|remove) case "$1" in user|group) - objecttype="$1"; shift || exit1 "Internal error while deleting object." + objecttype="$1"; shift objectname="$(delobject "$objecttype" "$@")" || exit1 "Failed deleting $objecttype${objectname+: $objectname}!" /usr/local/sbin/localsendsms "$to" "$objecttype \"$objectname\" deleted." ;; -- cgit v1.2.3 From 3bdf0f531b76ac852692d3f981a9b939bbc7a193 Mon Sep 17 00:00:00 2001 From: Jonas Date: Thu, 20 May 2010 21:37:04 +0200 Subject: Rephrase action responses (to support optional additional info). --- localkannel-dispatch | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/localkannel-dispatch b/localkannel-dispatch index 00cc6e3..a57429f 100755 --- a/localkannel-dispatch +++ b/localkannel-dispatch @@ -171,9 +171,9 @@ case "$app" in add|create) case "$1" in user|group) - objecttype="$1"; shift - objectname="$(addobject "$objecttype" "$@")" || exit1 "Failed adding $objecttype${objectname+: $objectname}!" - /usr/local/sbin/localsendsms "$to" "$objecttype \"$objectname\" added." + type="$1"; shift + response="$(addobject "$type" "$@")" || exit1 "Failed adding $type${response+: $response}!" + /usr/local/sbin/localsendsms "$to" "Added $type: $response." ;; *) exit1 "Cannot add \"$1\" (try \"add user\" or \"add group\" instead)." @@ -183,9 +183,9 @@ case "$app" in del|delete|remove) case "$1" in user|group) - objecttype="$1"; shift - objectname="$(delobject "$objecttype" "$@")" || exit1 "Failed deleting $objecttype${objectname+: $objectname}!" - /usr/local/sbin/localsendsms "$to" "$objecttype \"$objectname\" deleted." + type="$1"; shift + response="$(delobject "$type" "$@")" || exit1 "Failed deleting $type${respnse+: $response}!" + /usr/local/sbin/localsendsms "$to" "Deleted $type: $response." ;; *) exit1 "Cannot delete \"$1\" (try \"del user\" or \"del group\" instead)." -- cgit v1.2.3 From b5d15b85ab700a56e716b7f83d72d80225ba1350 Mon Sep 17 00:00:00 2001 From: Jonas Date: Thu, 20 May 2010 21:38:14 +0200 Subject: Fix typo in function delobject(). --- localkannel-dispatch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/localkannel-dispatch b/localkannel-dispatch index a57429f..cedbd87 100755 --- a/localkannel-dispatch +++ b/localkannel-dispatch @@ -146,7 +146,7 @@ delobject() { name="$1"; [ -n "$name" ] || return1 "Internal error (delobject: empty name)!"; shift oldname="$(findobjects "$type" "$name")" || return1 "$oldname" [ -n "$oldname" ] || return1 "No $type named \"$name\" (typo? or perhaps already deleted?)." - rmdir1 "$vardir/$type/$name" + rmdir "$vardir/$type/$name" echo "$name" } -- cgit v1.2.3 From 8f4bf633d276e21f8b4469e6095f894ef6988b3c Mon Sep 17 00:00:00 2001 From: Jonas Date: Thu, 20 May 2010 21:40:41 +0200 Subject: Fix typo in action del/delete/remove. --- localkannel-dispatch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/localkannel-dispatch b/localkannel-dispatch index cedbd87..effc7fd 100755 --- a/localkannel-dispatch +++ b/localkannel-dispatch @@ -184,7 +184,7 @@ case "$app" in case "$1" in user|group) type="$1"; shift - response="$(delobject "$type" "$@")" || exit1 "Failed deleting $type${respnse+: $response}!" + response="$(delobject "$type" "$@")" || exit1 "Failed deleting $type${response+: $response}!" /usr/local/sbin/localsendsms "$to" "Deleted $type: $response." ;; *) -- cgit v1.2.3 From 175cc7c95b2c7f36ac461b633673de18d531f205 Mon Sep 17 00:00:00 2001 From: Jonas Date: Fri, 21 May 2010 19:46:53 +0200 Subject: Fork and extend localsmsadmin from localkannel-dispatch. --- localkannel-dispatch | 85 ++--------------------- localsmsadmin | 189 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 193 insertions(+), 81 deletions(-) create mode 100755 localsmsadmin diff --git a/localkannel-dispatch b/localkannel-dispatch index effc7fd..ecdd6ea 100755 --- a/localkannel-dispatch +++ b/localkannel-dispatch @@ -55,7 +55,7 @@ case "$SMS_REALM" in export mdpath ;; *) - exit1 "unknown realm \"$SMS_REALM\"" + exit1 "unknown realm \"$SMS_REALM\"!" ;; esac case "$provider" in @@ -92,7 +92,7 @@ case "$provider" in export SMS_SMSC SMS_DLR_MASK SMS_DLR_URL ;; *) - exit1 "unknown provider \"$provider\"" + exit1 "unknown provider \"$provider\"!" ;; esac @@ -104,52 +104,6 @@ exit1() { exit 1 } -return1() { - echo >&2 "Error: $1" - echo "$1" - exit 1 -} - -vardir="/var/lib/kannel/hello" -findobjects() { - set -e - type="$1"; [ -n "$type" ] || return1 "Internal error (findobjects: empty type)!"; shift - limit="$@" - regex="$(echo "$limit" | perl -ne '/^\/(.+)\/$/ and print $1')" - args="$(echo "$limit" | perl -ne 's/.*?([a-z0-9]+).*?/ $1/g and print')" - [ -d "$vardir/$type" ] || return - if [ -z "$*" ]; then - cd "$vardir/$type" && find -mindepth 1 -maxdepth 1 -type d -printf '%f\n' - elif [ -n "$regex" ]; then - cd "$vardir/$type" && find -mindepth 1 -maxdepth 1 -type d -regex "$regex" - elif [ -n $args ]; then - args_multiline="$(echo "$args" | perl -pe 's/[[:space:]]+/\n/g')" - cd "$vardir/$type" && ! find -mindepth 1 -maxdepth 1 -type d -printf '%f\n' \ - | grep -Fx "$args_multiline" || true - else - return1 "Internal error (findobjects: illegal limit)!" - fi -} -addobject() { - set -e - type="$1"; [ -n "$type" ] || return1 "Internal error (addobject: empty type)!"; shift - name="$1"; [ -n "$name" ] || return1 "Internal error (addobject: empty name)!"; shift - oldname="$(findobjects "$type" "$name")" || return1 "$oldname" - [ -z "$oldname" ] || return1 "$type \"$name\" already exist." - mkdir -p "$vardir/$type/$name" - chgrp --reference="$vardir" "$vardir/$type/$name" - echo "$name" -} -delobject() { - set -e - type="$1"; [ -n "$type" ] || return1 "Internal error (delobject: empty type)!"; shift - name="$1"; [ -n "$name" ] || return1 "Internal error (delobject: empty name)!"; shift - oldname="$(findobjects "$type" "$name")" || return1 "$oldname" - [ -n "$oldname" ] || return1 "No $type named \"$name\" (typo? or perhaps already deleted?)." - rmdir "$vardir/$type/$name" - echo "$name" -} - case "$app" in @*) [ -n "$REDIRECT_OK" ] || exit1 "Redirection not permitted here!" @@ -167,39 +121,8 @@ case "$app" in /*) [ -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) - type="$1"; shift - response="$(addobject "$type" "$@")" || exit1 "Failed adding $type${response+: $response}!" - /usr/local/sbin/localsendsms "$to" "Added $type: $response." - ;; - *) - exit1 "Cannot add \"$1\" (try \"add user\" or \"add group\" instead)." - ;; - esac - ;; - del|delete|remove) - case "$1" in - user|group) - type="$1"; shift - response="$(delobject "$type" "$@")" || exit1 "Failed deleting $type${response+: $response}!" - /usr/local/sbin/localsendsms "$to" "Deleted $type: $response." - ;; - *) - exit1 "Cannot delete \"$1\" (try \"del user\" or \"del group\" instead)." - ;; - esac - ;; - status) - msg="$(/usr/local/sbin/localshowkannelstatus)" - /usr/local/sbin/localsendsms "$to" "$msg" - ;; - *) - exit1 "unknown command \"$cmd\"" - ;; - esac + response="$(/usr/local/sbin/localsmsadmin "$cmd" "$@")" || exit1 "$response" + /usr/local/sbin/localsendsms "$to" "$response" ;; yb) s="$(links -dump "http://www.yubnub.org/parser/parse?command=$@")" diff --git a/localsmsadmin b/localsmsadmin new file mode 100755 index 0000000..7b6c8d1 --- /dev/null +++ b/localsmsadmin @@ -0,0 +1,189 @@ +#!/bin/sh + +set -e + +exit0() { + echo "$1" + exit 0 +} + +exit1() { +# FIXME: pass error messages via stderr (not stdout) +# echo >&2 "Error: $1" + [ -z "$1" ] || echo "$1" + exit 1 +} + +vardir="/var/lib/kannel/hello" +findobjects() { + set -e + type="$1"; [ -n "$type" ] || return1 "Internal error (findobjects: empty type)!"; shift + limit="$@" + regex="$(echo "$limit" | perl -ne '/^\/(.+)\/$/ and print $1')" + args="$(echo "$limit" | perl -ne 's/.*?([a-z0-9]+).*?/ $1/g and print')" + [ -d "$vardir/$type" ] || exit0 + if [ -z "$*" ]; then + cd "$vardir/$type" && find -mindepth 1 -maxdepth 1 -type d -printf '%f\n' + elif [ -n "$regex" ]; then + cd "$vardir/$type" && find -mindepth 1 -maxdepth 1 -type d -regex "$regex" + elif [ -n $args ]; then + args_multiline="$(echo "$args" | perl -pe 's/[[:space:]]+/\n/g')" + cd "$vardir/$type" && ! find -mindepth 1 -maxdepth 1 -type d -printf '%f\n' \ + | grep -Fx "$args_multiline" || true + else + exit1 "Internal error (findobjects: illegal limit)!" + fi +} +finditems() { + set -e + type="$1"; [ -n "$type" ] || exit1 "Internal error (finditems: empty type)!"; shift + name="$1"; [ -n "$name" ] || exit1 "Internal error (finditems: empty name)!"; shift + limit="$@" + regex="$(echo "$limit" | perl -ne '/^\/(.+)\/$/ and print $1')" + args="$(echo "$limit" | perl -ne 's/.*?([a-z0-9]+).*?/ $1/g and print')" + dir="$type/$name" + [ -d "$vardir/$dir" ] || exit0 + if [ -z "$*" ]; then + cd "$vardir/$dir" && find -mindepth 1 -maxdepth 1 -type f -printf '%f\n' + elif [ -n "$regex" ]; then + cd "$vardir/$dir" && find -mindepth 1 -maxdepth 1 -type f -regex "$regex" + elif [ -n $args ]; then + args_multiline="$(echo "$args" | perl -pe 's/[[:space:]]+/\n/g')" + cd "$vardir/$dir" && ! find -mindepth 1 -maxdepth 1 -type f -printf '%f\n' \ + | grep -Fx "$args_multiline" || true + else + exit1 "Internal error (finditems: illegal limit)!" + fi +} +getitem() { + set -e + type="$1"; [ -n "$type" ] || exit1 "Internal error (getitem: empty type)!"; shift + name="$1"; [ -n "$name" ] || exit1 "Internal error (getitem: empty name)!"; shift + item="$1"; [ -n "$item" ] || exit1 "Internal error (getitem: empty item)!"; shift + file="$type/$name/$item" + [ ! -s "$vardir/$file" ] || cat "$vardir/$file" +} +additem() { + set -e + type="$1"; [ -n "$type" ] || exit1 "Internal error (additem: empty type)!"; shift + name="$1"; [ -n "$name" ] || exit1 "Internal error (additem: empty name)!"; shift + item="$1"; [ -n "$item" ] || exit1 "Internal error (additem: empty item)!"; shift + data="$*"; [ -n "$data" ] || exit1 "Internal error (additem: empty data)!"; shift + data="$(echo "$data" | perl -0 -pe 's/\s+/ /g; s/^\s+//; s/\s+$//')" + truename="$(findobjects "$type" "$name")" || exit1 "$truename" + [ -n "$truename" ] || exit1 "No $type named \"$name\"!" + file="$type/$truename/$item" + [ ! -s "$vardir/$file" ] || linecount="$(grep -c . "$vardir/$file")" + echo "$data" >> "$vardir/$file" + chgrp --reference="$vardir" "$vardir/$file" + echo "$data${linecount+ (on top of $linecount other values)}" +} +addobject() { + set -e + type="$1"; [ -n "$type" ] || exit1 "Internal error (addobject: empty type)!"; shift + name="$1"; [ -n "$name" ] || exit1 "Internal error (addobject: empty name)!"; shift + oldname="$(findobjects "$type" "$name")" || exit1 "$oldname" + [ -z "$oldname" ] || exit1 "$type \"$name\" already exist!" + + case "$type" in + user) + session="$(findobjects "session" "default")" || exit1 "$truename" + [ -z "$session" ] || phone_ccc="$(finditems "session" "$session" "phone_ccc")" || exit1 "$phone_ccc" + for chunk in $@; do + case $chunk in + +[[:digit:]]*) + [ -z "$phone" ] || exit1 "Multiple phone numbers (use only a single number, e.g. 40843136 or +4540843136)!" + phone_ccc="$chunk" + ;; + [[:digit:]][[:digit:]][[:digit:]][[:digit:]]*) + [ -n "$phone_ccc" ] || [ -n "$phone_ccc_default" ] || exit1 "Unknown country calling code (use international phone numbering, e.g. +4540843136)!" + [ -z "$phone" ] || exit1 "Multiple phone numbers (use only a single number, e.g. 40843136 or +4540843136)!" + # TODO: optionally validate $phone_min and $phone_max + phone="$phone_ccc$chunk" + ;; + [[:alpha:]][[:alnum:]]*) + [ -z "$nick" ] || exit1 "Multiple nick names (use only a single nick name)!" + nick="$chunk" + ;; + *) + exit1 "Internal error (additems: unknown item)!" + ;; + esac + done + [ -n "$phone" ] || exit1 "Missing phone number (use a single full number, e.g. 40843136 or +4540843136)!" + [ -n "$nick" ] || exit1 "Missing nick name!" + ;; + esac + + mkdir -p "$vardir/$type/$name" + chgrp --reference="$vardir" "$vardir/$type/$name" + case "$type" in + user) + additem "$type" "$name" "nick" "$nick" + additem "$type" "$name" "phone" "$phone" + details="with nick and phone number" + ;; + esac + + echo "$name${details+: ($details)}" +} +delobject() { + set -e + type="$1"; [ -n "$type" ] || exit1 "Internal error (delobject: empty type)!"; shift + name="$1"; [ -n "$name" ] || exit1 "Internal error (delobject: empty name)!"; shift + oldname="$(findobjects "$type" "$name")" || exit1 "$oldname" + [ -n "$oldname" ] || exit1 "No $type named \"$name\"!" + items="$(finditems "$type" "$name")" || exit1 "$items" + for item in $items; do + rm "$vardir/$type/$name/$item" || exit1 "Internal error!" + done + rmdir "$vardir/$type/$name" || exit1 "Internal error!" + echo "$name" +} + +cmd="$1"; shift +case "$cmd" in + add|create) + case "$1" in + user|group) + type="$1"; shift + response="$(addobject "$type" "$@")" || exit1 "Failed adding $type${response+: $response}" + exit0 "Added $type: $response." + ;; + *) + exit1 "Cannot add \"$1\" (try \"add user\" or \"add group\" instead)!" + ;; + esac + ;; + del|delete|remove) + case "$1" in + user|group) + type="$1"; shift + response="$(delobject "$type" "$@")" || exit1 "Failed deleting $type${response+: $response}" + exit0 "Deleted $type: $response." + ;; + *) + exit1 "Cannot delete \"$1\" (try \"del user\" or \"del group\" instead)!" + ;; + esac + ;; + list|show|view) + case "$1" in + user|group) + type="$1"; shift + response="$(listobject "$type" "$@")" || exit1 "Failed listing $type${response+: $response}" + exit0 "Listing $type: $response." + ;; + *) + exit1 "Cannot list \"$1\" (try \"list user\" or \"list group\" instead)!" + ;; + esac + ;; + status) + msg="$(/usr/local/sbin/localshowkannelstatus)" + exit0 "$msg" + ;; + *) + exit1 "unknown command \"$cmd\"!" + ;; +esac -- cgit v1.2.3 From 3d80bf3353d786c759c3f454e3d13dfbd7ddd647 Mon Sep 17 00:00:00 2001 From: Jonas Date: Mon, 31 May 2010 09:24:55 +0200 Subject: Major updates to localkannel-dispatch and localsmsadmin. --- localkannel-dispatch | 91 +++++++++++------ localsmsadmin | 284 +++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 267 insertions(+), 108 deletions(-) diff --git a/localkannel-dispatch b/localkannel-dispatch index ecdd6ea..e1685d8 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 @@ -96,39 +107,53 @@ case "$provider" in ;; 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 -} - +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" "$@" + $sbindir/localmarkdown2sms "$to" "$@" + exit 0 ;; -# !*) -# [ -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/^\///;')" - response="$(/usr/local/sbin/localsmsadmin "$cmd" "$@")" || exit1 "$response" - /usr/local/sbin/localsendsms "$to" "$response" - ;; - 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" "$@" diff --git a/localsmsadmin b/localsmsadmin index 7b6c8d1..054db55 100755 --- a/localsmsadmin +++ b/localsmsadmin @@ -2,19 +2,25 @@ set -e +# make data writable both from kannel and designated shell accounts +umask 0007 + +vardir=/var/lib/kannel/hello +sbindir=/usr/local/sbin + exit0() { - echo "$1" + [ -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 "Error: $1" - [ -z "$1" ] || echo "$1" +# echo >&2 "$response" + echo "$response" exit 1 } -vardir="/var/lib/kannel/hello" findobjects() { set -e type="$1"; [ -n "$type" ] || return1 "Internal error (findobjects: empty type)!"; shift @@ -73,115 +79,243 @@ additem() { truename="$(findobjects "$type" "$name")" || exit1 "$truename" [ -n "$truename" ] || exit1 "No $type named \"$name\"!" file="$type/$truename/$item" +# [ ! -s "$vardir/$file" ] || linecount="$(grep -c . "$vardir/$file")" +# echo "$data" >> "$vardir/$file" +# chgrp --reference="$vardir" "$vardir/$file" +# echo "$data${linecount+ (on top of $linecount other values)}" [ ! -s "$vardir/$file" ] || linecount="$(grep -c . "$vardir/$file")" - echo "$data" >> "$vardir/$file" - chgrp --reference="$vardir" "$vardir/$file" - echo "$data${linecount+ (on top of $linecount other values)}" + echo "$data" > "$vardir/$file" +# chgrp --reference="$vardir" "$vardir/$file" + echo "$data" } addobject() { set -e type="$1"; [ -n "$type" ] || exit1 "Internal error (addobject: empty type)!"; shift name="$1"; [ -n "$name" ] || exit1 "Internal error (addobject: empty name)!"; shift - oldname="$(findobjects "$type" "$name")" || exit1 "$oldname" - [ -z "$oldname" ] || exit1 "$type \"$name\" already exist!" + fallback="$1"; [ -n "$fallback" ] || exit1 "Internal error (addobject: empty fallback)!"; shift + [ -z "$*" ] || exit1 "Internal error (addobject: too many options)!" + case "$fallback" in + keep|replace|fail) :;; + *) exit1 "Internal error (addobject: unknown fallback)!";; + esac - case "$type" in - user) - session="$(findobjects "session" "default")" || exit1 "$truename" - [ -z "$session" ] || phone_ccc="$(finditems "session" "$session" "phone_ccc")" || exit1 "$phone_ccc" - for chunk in $@; do - case $chunk in - +[[:digit:]]*) - [ -z "$phone" ] || exit1 "Multiple phone numbers (use only a single number, e.g. 40843136 or +4540843136)!" - phone_ccc="$chunk" +# if [ -e "$vardir/$type/$name" ]; then + oldname="$(findobjects "$type" "$name")" || exit1 "$oldname" + if [ -n "$oldname" ]; then + case "$fallback" in + keep) + action="kept" ;; - [[:digit:]][[:digit:]][[:digit:]][[:digit:]]*) - [ -n "$phone_ccc" ] || [ -n "$phone_ccc_default" ] || exit1 "Unknown country calling code (use international phone numbering, e.g. +4540843136)!" - [ -z "$phone" ] || exit1 "Multiple phone numbers (use only a single number, e.g. 40843136 or +4540843136)!" - # TODO: optionally validate $phone_min and $phone_max - phone="$phone_ccc$chunk" + replace) + delopbject "$type" "$oldname" ;; - [[:alpha:]][[:alnum:]]*) - [ -z "$nick" ] || exit1 "Multiple nick names (use only a single nick name)!" - nick="$chunk" +# TODO rename) +# TODO renameopbject "$type" "$oldname" +# TODO ;; + fail) + exit1 "Adding $type failed ($name already exists)!" ;; - *) - exit1 "Internal error (additems: unknown item)!" - ;; - esac - done - [ -n "$phone" ] || exit1 "Missing phone number (use a single full number, e.g. 40843136 or +4540843136)!" - [ -n "$nick" ] || exit1 "Missing nick name!" - ;; - esac - - mkdir -p "$vardir/$type/$name" - chgrp --reference="$vardir" "$vardir/$type/$name" - case "$type" in - user) - additem "$type" "$name" "nick" "$nick" - additem "$type" "$name" "phone" "$phone" - details="with nick and phone number" - ;; - esac - - echo "$name${details+: ($details)}" -} -delobject() { - set -e - type="$1"; [ -n "$type" ] || exit1 "Internal error (delobject: empty type)!"; shift - name="$1"; [ -n "$name" ] || exit1 "Internal error (delobject: empty name)!"; shift - oldname="$(findobjects "$type" "$name")" || exit1 "$oldname" - [ -n "$oldname" ] || exit1 "No $type named \"$name\"!" - items="$(finditems "$type" "$name")" || exit1 "$items" - for item in $items; do - rm "$vardir/$type/$name/$item" || exit1 "Internal error!" - done - rmdir "$vardir/$type/$name" || exit1 "Internal error!" - echo "$name" + esac + else + mkdir -p "$vardir/$type/$name" +# chgrp -R --reference="$vardir" "$vardir/$type" + fi } cmd="$1"; shift case "$cmd" in add|create) - case "$1" in - user|group) - type="$1"; shift - response="$(addobject "$type" "$@")" || exit1 "Failed adding $type${response+: $response}" - exit0 "Added $type: $response." + type="$1"; [ -n "$type" ] || exit1 "Internal error (empty type)!"; shift + name="$1"; [ -n "$name" ] || exit1 "Internal error (empty name)!"; shift + oldname="$(findobjects "$type" "$name")" || exit1 "$oldname" + + case "$type" in + default) + case "$name" in + session|prefix) + item="$name" + data="$1" + ;; + *) + exit1 "unknown default \"$1\"" + ;; + esac + str=$(addobject "$type" "$name" keep) || exit1 "$str" + str=$(additem "$type" "$name" "$item" "$data") || exit1 "$str" + response="Added $type $name $data" + ;; + user) + session="$(getitem "default" "session" "session")" || exit1 "Internal error: $session" + [ -z "$session" ] || session_group="$(getitem "session" "$session" "group")" || exit1 "Internal error: $session_group" + plural= + for chunk in $@; do + case $chunk in + +[[:digit:]]*) + [ -z "$phone" ] || exit1 "Too many phone numbers (use only a single number, e.g. 40843136 or +4540843136)!" + phone="$chunk" + ;; + [[:digit:]][[:digit:]][[:digit:]][[:digit:]]*) + [ -z "$phone" ] || exit1 "Too many phone numbers (use only a single number, e.g. 40843136 or +4540843136)!" + [ -z "$session" ] || prefix="$(getitem "session" "$session" "prefix")" || exit1 "Internal error: $prefix" + [ -n "$prefix" ] || exit1 "Missing prefix (use international phone numbering, e.g. +4540843136${session+, or add default prefix to session $session})!" + # TODO: optionally validate $phone_min and $phone_max + phone="$prefix$chunk" + ;; + [[:alpha:]][[:alnum:]]*) + [ -z "$groups" ] || plural=true + groups="${groups+$groups }$chunk" + ;; + *) + exit1 "Internal error (unknown user item \"$1\")!" + ;; + esac + done + response="Added $type $name" + fallback=fail + if [ -z "$oldname" ]; then + [ -n "$phone" ] || exit1 "Missing phone number (required)!" + else + [ -n "$phone$groups" ] || exit1 "No items to update (include one or more of phone number and groups)!" + fallback=keep + response="Updated $type $name" + fi + str=$(addobject "$type" "$name" "$fallback") || exit1 "$str" + [ -z "$phone" ] || dummy="$(additem "$type" "$name" "phone" "$phone")" +# TODO: distinguish session group from included ones (i.e. mention explicitly if added) + [ -z "$session_group" ] || groups="$session_group $groups" + for group in $groups; do +# TODO: strip existing, duplicate and session groups, and mention stripping in response + dummy="$(additem "$type" "$name" "group" "$group")" + done + if [ -n "$phone" ]; then + if [ -n "$groups" ]; then + response="$response with phone $phone and group${plural+s} $groups" + else + response="$response with phone $phone" + fi + elif [ -n "$groups" ]; then + response="$response with group${plural+s} $groups" + fi + ;; + group) + for chunk in $@; do + case $chunk in + [[:alpha:]][[:alnum:]]*) + [ -z "$session" ] || exit1 "Too many sessions (a group can be only in a single session)!" + session="$chunk" + ;; + *) + exit1 "Internal error (unknown group item \"$1\")!" + ;; + esac + done + response="Added $type $name" + fallback=fail + if [ -n "$oldname" ]; then + [ -n "$session" ] || exit1 "Group already exists (and no session name to update was included)!" + fallback=keep + response="Updated $type $name" + fi + str=$(addobject "$type" "$name" "$fallback") || exit1 "$str" + [ -z "$session" ] || dummy="$(additem "$type" "$name" "session" "$session")" + [ -z "$session" ] || response="$response with session $session" + ;; + session) + for chunk in $@; do + case $chunk in + +[[:digit:]]*) + [ -z "$prefix" ] || exit1 "Too many country prefixes (use only one, e.g. +45)!" + prefix="$chunk" + ;; + [[:alpha:]][[:alnum:]]*) + [ -z "$group" ] || exit1 "Too many default groups (use only one)!" +# FIXME: fail if group does not exist + group="$chunk" + ;; + *) + exit1 "Internal error (unknown session item \"$1\")!" + ;; + esac + done +# TODO: distinguish default prefix from included one (i.e. mention explicitly if added) + [ -n "$prefix" ] || prefix="$(getitem "default" "prefix" "prefix")" || exit1 "Internal error: $prefix" + response="Added $type $name" + fallback=fail + if [ -n "$oldname" ]; then + [ -n "$prefix$group" ] || exit1 "Session already exists (and no default group or country prefix to add/update was included)!" + fallback=keep + response="Updated $type $name" + fi + str=$(addobject "$type" "$name" "$fallback") || exit1 "$str" + [ -z "$prefix" ] || dummy="$(additem "$type" "$name" "prefix" "$prefix")" + [ -z "$group" ] || dummy="$(additem "$type" "$name" "group" "$group")" + if [ -n "$prefix" ]; then + if [ -n "$group" ]; then + response="$response with default country prefix $prefix and default group $group" + else + response="$response with default country prefix $prefix" + fi + elif [ -n "$group" ]; then + response="$response with default group $group" + fi ;; *) - exit1 "Cannot add \"$1\" (try \"add user\" or \"add group\" instead)!" + exit1 "Cannot add \"$1\" (try \"/help\" to see supported commands)!" ;; esac + exit0 "$response" ;; del|delete|remove) case "$1" in - user|group) + default|user|group|session) type="$1"; shift - response="$(delobject "$type" "$@")" || exit1 "Failed deleting $type${response+: $response}" - exit0 "Deleted $type: $response." + name="$1"; [ -n "$name" ] || exit1 "Internal error (empty name)!"; shift + [ -z "$*" ] || exit1 "Internal error (too many options)!" + oldname="$(findobjects "$type" "$name")" || exit1 "Internal error${oldname+: $oldname}" + [ -n "$oldname" ] || exit1 "No $type named \"$name\"!" + items="$(finditems "$type" "$name")" || exit1 "Internal error${items+: $items}" +# TODO: find user by phone number + for item in $items; do + rm "$vardir/$type/$name/$item" || exit1 "Internal error during $type $name item removal!" + done +# FIXME: remove items of other objects referencing this object + rmdir "$vardir/$type/$name" || exit1 "Internal error during $type $name object removal!" + exit0 "Deleted $type: $name." ;; *) - exit1 "Cannot delete \"$1\" (try \"del user\" or \"del group\" instead)!" + exit1 "Cannot delete \"$1\" (try \"/help\" to see supported commands)!" ;; esac ;; list|show|view) case "$1" in - user|group) + default|user|group|session) type="$1"; shift response="$(listobject "$type" "$@")" || exit1 "Failed listing $type${response+: $response}" exit0 "Listing $type: $response." ;; *) - exit1 "Cannot list \"$1\" (try \"list user\" or \"list group\" instead)!" + exit1 "Cannot list \"$1\" (try \"/help\" to see supported commands)!" ;; esac ;; + help) + cat < Date: Wed, 2 Jun 2010 22:42:06 +0200 Subject: export stripprefix for clickatell. --- localkannel-dispatch | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/localkannel-dispatch b/localkannel-dispatch index ac2aae4..8a891d6 100755 --- a/localkannel-dispatch +++ b/localkannel-dispatch @@ -79,7 +79,8 @@ 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" - export SMS_SMSC SMS_DLR_MASK SMS_DLR_URL + stripprefix="1" + export SMS_SMSC SMS_DLR_MASK SMS_DLR_URL stripprefix ;; *) exit1 "unknown provider \"$provider\"" -- cgit v1.2.3 From f2962c6ceebee1c1684fb53f81bd8f645c449b88 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 2 Jun 2010 22:46:22 +0200 Subject: Avoid hardcoded phone numbers in localshowkannelsms. --- localshowkannelsms | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/localshowkannelsms b/localshowkannelsms index 437b72b..46c04bd 100755 --- a/localshowkannelsms +++ b/localshowkannelsms @@ -17,6 +17,6 @@ lslogfiles() { } #lslogfiles | xargs zcat -f | perl -ne '/^(\S+ +\S+) .*Starting to service <(.*)> from <.*> to <\+4530959593>$/ and print "$1 $2\n"; /^\S+ (\S+) .*sendsms sender:<\S+:\+4530959593> .*msg:<(.*?)>?$/ and print " $1 $2\n"; /^(...................)(??$/ and print " $1$2\n"' -lslogfiles | xargs zcat -f | perl -ne '/^(\S+ +\S+) .*Starting to service <(.*)> from <.*> to <\+4530640636>$/ and print "$1 $2\n"; /^\S+ (\S+) .*sendsms sender:<\S+:\+4530959593> .*msg:<(.*?)>?$/ and print " $1 $2\n"; /^(...................)(??$/ and print " $1$2\n"' +lslogfiles | xargs zcat -f | perl -ne '/^(\S+ +\S+) .*Starting to service <(.*)> from <.*> to / and print "$1 $2\n"; /^\S+ (\S+) .*sendsms sender:<\S+:.*msg:<(.*?)>?$/ and print " $1 $2\n"; /^(...................)(??$/ and print " $1$2\n"' exit 0 -- cgit v1.2.3 From 795c68fe2a593b0b2b82a524c70a7ec14d73a14a Mon Sep 17 00:00:00 2001 From: Jonas Date: Thu, 3 Jun 2010 13:44:43 +0200 Subject: Add support for dlr_url in localmarkdown2sms. --- localmarkdown2sms | 2 ++ 1 file changed, 2 insertions(+) diff --git a/localmarkdown2sms b/localmarkdown2sms index 2f91108..feb7a53 100755 --- a/localmarkdown2sms +++ b/localmarkdown2sms @@ -47,6 +47,7 @@ my $sms_msgtag = $ENV{SMS_MSGTAG} || "text"; my $sms_cp = $ENV{SMS_CP} || "utf8"; my $sms_concat = $ENV{SMS_CONCAT}; my $sms_dlr_mask = $ENV{SMS_DLR_MASK}; +my $sms_dlr_url = $ENV{SMS_DLR_URL}; my $path = $ENV{mdpath}; my (%file, %delay, %reply); @@ -206,6 +207,7 @@ sub sendmsg { $url .= '&smsc=' . uri_escape($sms_smsc) if ($sms_smsc); $url .= '&concat=' . uri_escape($sms_concat) if ($sms_concat); $url .= '&dlr-mask=' . uri_escape($sms_dlr_mask) if ($sms_dlr_mask); + $url .= '&dlr-url=' . uri_escape($sms_dlr_url) if ($sms_dlr_url); $url .= '&' . $sms_msgtag . '=' . uri_escape(transliterate($sms_cp, $msg)); DEBUG "Sending request: $url"; my $response = $ua->request(HTTP::Request->new('GET', $url)); -- cgit v1.2.3 From 6080ca49fa91a316f71247575a59cf7e0df0dd2f Mon Sep 17 00:00:00 2001 From: Jonas Date: Sat, 5 Jun 2010 18:38:44 +0200 Subject: Add support for validity in localmarkdown2sms, localsendsms and localkannel-dispatch. --- localkannel-dispatch | 3 ++- localmarkdown2sms | 2 ++ localsendsms | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/localkannel-dispatch b/localkannel-dispatch index e1685d8..bf635a8 100755 --- a/localkannel-dispatch +++ b/localkannel-dispatch @@ -100,7 +100,8 @@ 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" - export SMS_SMSC SMS_DLR_MASK SMS_DLR_URL + SMS_VALIDITY="1" + export SMS_SMSC SMS_DLR_MASK SMS_DLR_URL SMS_VALIDITY ;; *) exit1 "unknown provider \"$provider\"!" diff --git a/localmarkdown2sms b/localmarkdown2sms index feb7a53..47a06f3 100755 --- a/localmarkdown2sms +++ b/localmarkdown2sms @@ -48,6 +48,7 @@ my $sms_cp = $ENV{SMS_CP} || "utf8"; my $sms_concat = $ENV{SMS_CONCAT}; my $sms_dlr_mask = $ENV{SMS_DLR_MASK}; my $sms_dlr_url = $ENV{SMS_DLR_URL}; +my $sms_validity = $ENV{SMS_VALIDITY}; my $path = $ENV{mdpath}; my (%file, %delay, %reply); @@ -208,6 +209,7 @@ sub sendmsg { $url .= '&concat=' . uri_escape($sms_concat) if ($sms_concat); $url .= '&dlr-mask=' . uri_escape($sms_dlr_mask) if ($sms_dlr_mask); $url .= '&dlr-url=' . uri_escape($sms_dlr_url) if ($sms_dlr_url); + $url .= '&validity=' . uri_escape($sms_validity) if ($sms_validity); $url .= '&' . $sms_msgtag . '=' . uri_escape(transliterate($sms_cp, $msg)); DEBUG "Sending request: $url"; my $response = $ua->request(HTTP::Request->new('GET', $url)); diff --git a/localsendsms b/localsendsms index ec1468a..6449e3c 100755 --- a/localsendsms +++ b/localsendsms @@ -27,6 +27,7 @@ my $sms_cp = $ENV{SMS_CP} || "utf8"; my $sms_concat = $ENV{SMS_CONCAT}; my $sms_dlr_mask = $ENV{SMS_DLR_MASK}; my $sms_dlr_url = $ENV{SMS_DLR_URL}; +my $sms_validity = $ENV{SMS_VALIDITY}; # decode data if passed from kannel if ($urldecode) { @@ -77,6 +78,7 @@ sub sendmsg { $url .= '&concat=' . uri_escape($sms_concat) if ($sms_concat); $url .= '&dlr-mask=' . uri_escape($sms_dlr_mask) if ($sms_dlr_mask); $url .= '&dlr-url=' . uri_escape($sms_dlr_url) if ($sms_dlr_url); + $url .= '&validity=' . uri_escape($sms_validity) if ($sms_validity); $url .= '&' . $sms_msgtag . '=' . uri_escape(transliterate($sms_cp, $msg)); DEBUG "Sending request: $url"; my $response = $ua->request(HTTP::Request->new('GET', $url)); -- cgit v1.2.3 From 847a13089cd112ab6d047d1d1614e6a9c6f2dd9c Mon Sep 17 00:00:00 2001 From: Jonas Date: Sat, 5 Jun 2010 18:40:40 +0200 Subject: Add new provider routo to localkannel-dispatch. --- localkannel-dispatch | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/localkannel-dispatch b/localkannel-dispatch index bf635a8..8edde5b 100755 --- a/localkannel-dispatch +++ b/localkannel-dispatch @@ -103,6 +103,10 @@ case "$provider" in SMS_VALIDITY="1" export SMS_SMSC SMS_DLR_MASK SMS_DLR_URL SMS_VALIDITY ;; + routo) + SMS_SMSC="Y" + export SMS_SMSC + ;; *) exit1 "unknown provider \"$provider\"!" ;; -- cgit v1.2.3 From 2915e2a7d90483216a7caf32a715a2ffe0200c1e Mon Sep 17 00:00:00 2001 From: root Date: Sun, 6 Jun 2010 04:36:27 +0200 Subject: Respect stripprefix in localmarkdown2sms localsendsms . --- localmarkdown2sms | 4 +++- localsendsms | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/localmarkdown2sms b/localmarkdown2sms index 47a06f3..1767788 100755 --- a/localmarkdown2sms +++ b/localmarkdown2sms @@ -49,6 +49,7 @@ my $sms_concat = $ENV{SMS_CONCAT}; my $sms_dlr_mask = $ENV{SMS_DLR_MASK}; my $sms_dlr_url = $ENV{SMS_DLR_URL}; my $sms_validity = $ENV{SMS_VALIDITY}; +my $stripprefix = $ENV{stripprefix}; my $path = $ENV{mdpath}; my (%file, %delay, %reply); @@ -62,7 +63,8 @@ my ($key) = lc (shift @ARGV); # strip international prefix # (prefix is optional some places and illegal at other places - forgot where) -$phone =~ s/\+/ /g; +$phone =~ s/^\+//g if ($stripprefix); +$sms_phone =~ s/^\+//g if ($stripprefix); # strip non-word chars from keyword (and use only first chunk of word chars) $key =~ s/.*?(\w+).*?/$1/; diff --git a/localsendsms b/localsendsms index 6449e3c..ff82ffd 100755 --- a/localsendsms +++ b/localsendsms @@ -28,6 +28,7 @@ my $sms_concat = $ENV{SMS_CONCAT}; my $sms_dlr_mask = $ENV{SMS_DLR_MASK}; my $sms_dlr_url = $ENV{SMS_DLR_URL}; my $sms_validity = $ENV{SMS_VALIDITY}; +my $stripprefix = $ENV{stripprefix}; # decode data if passed from kannel if ($urldecode) { @@ -37,7 +38,8 @@ my ($phone) = shift @ARGV; # strip international prefix # (prefix is optional some places and illegal at other places - forgot where) -#$phone =~ s/\+/ /g; +$phone =~ s/^\+//g if ($stripprefix); +$sms_phone =~ s/^\+//g if ($stripprefix); if ($debug) { Log::Log4perl->easy_init($DEBUG); -- cgit v1.2.3 From f8322721903e0c049ddd4ee681eb8b9691f56b46 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 10 Jun 2010 00:28:03 +0200 Subject: Support req_feat and binfo in localmarkdown2sms and localsendsms . --- localmarkdown2sms | 4 ++++ localsendsms | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/localmarkdown2sms b/localmarkdown2sms index 1767788..d30ed19 100755 --- a/localmarkdown2sms +++ b/localmarkdown2sms @@ -49,6 +49,8 @@ my $sms_concat = $ENV{SMS_CONCAT}; my $sms_dlr_mask = $ENV{SMS_DLR_MASK}; my $sms_dlr_url = $ENV{SMS_DLR_URL}; my $sms_validity = $ENV{SMS_VALIDITY}; +my $sms_req_feat = $ENV{SMS_REQ_FEAT}; +my $sms_binfo = $ENV{SMS_BINFO}; my $stripprefix = $ENV{stripprefix}; my $path = $ENV{mdpath}; @@ -212,6 +214,8 @@ sub sendmsg { $url .= '&dlr-mask=' . uri_escape($sms_dlr_mask) if ($sms_dlr_mask); $url .= '&dlr-url=' . uri_escape($sms_dlr_url) if ($sms_dlr_url); $url .= '&validity=' . uri_escape($sms_validity) if ($sms_validity); + $url .= '&req_feat=' . uri_escape($sms_req_feat) if ($sms_req_feat); + $url .= '&binfo=' . uri_escape($sms_binfo) if ($sms_binfo); $url .= '&' . $sms_msgtag . '=' . uri_escape(transliterate($sms_cp, $msg)); DEBUG "Sending request: $url"; my $response = $ua->request(HTTP::Request->new('GET', $url)); diff --git a/localsendsms b/localsendsms index ff82ffd..0bd22c2 100755 --- a/localsendsms +++ b/localsendsms @@ -28,6 +28,8 @@ my $sms_concat = $ENV{SMS_CONCAT}; my $sms_dlr_mask = $ENV{SMS_DLR_MASK}; my $sms_dlr_url = $ENV{SMS_DLR_URL}; my $sms_validity = $ENV{SMS_VALIDITY}; +my $sms_req_feat = $ENV{SMS_REQ_FEAT}; +my $sms_binfo = $ENV{SMS_BINFO}; my $stripprefix = $ENV{stripprefix}; # decode data if passed from kannel @@ -81,6 +83,8 @@ sub sendmsg { $url .= '&dlr-mask=' . uri_escape($sms_dlr_mask) if ($sms_dlr_mask); $url .= '&dlr-url=' . uri_escape($sms_dlr_url) if ($sms_dlr_url); $url .= '&validity=' . uri_escape($sms_validity) if ($sms_validity); + $url .= '&req_feat=' . uri_escape($sms_req_feat) if ($sms_req_feat); + $url .= '&binfo=' . uri_escape($sms_binfo) if ($sms_binfo); $url .= '&' . $sms_msgtag . '=' . uri_escape(transliterate($sms_cp, $msg)); DEBUG "Sending request: $url"; my $response = $ua->request(HTTP::Request->new('GET', $url)); -- cgit v1.2.3