|
@@ -0,0 +1,1051 @@
|
|
|
|
+#!/bin/sh
|
|
|
|
+#
|
|
|
|
+# $Id$
|
|
|
|
+#
|
|
|
|
+# sc: ser control; tool for maintaining ser's databases
|
|
|
|
+#
|
|
|
|
+# History:
|
|
|
|
+# --------
|
|
|
|
+# 2003-02-23 Thomas's start|stop commands checked in
|
|
|
|
+# 2003-09-08 multidomain features: usernames can now include domain
|
|
|
|
+# names too (jiri)
|
|
|
|
+# 2003-09-15 multidomain support completed (jiri)
|
|
|
|
+# 2003-10-30 more debugging output, less copy and paste in
|
|
|
|
+# the previous item
|
|
|
|
+#
|
|
|
|
+# To-DO:
|
|
|
|
+# -----
|
|
|
|
+# - generalization for other than mysql databases
|
|
|
|
+# - front-end to updating administrative mysql password would
|
|
|
|
+# be a convenient thing to have
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+# configuration for starting/stopping ser
|
|
|
|
+PID_FILE=/var/run/ser.pid
|
|
|
|
+SYSLOG=1 # 0=output to console, 1=output to syslog
|
|
|
|
+STARTOPTIONS= # for example -dddd
|
|
|
|
+DIR=`dirname $0`
|
|
|
|
+SERBIN=$DIR/ser
|
|
|
|
+AWK=awk
|
|
|
|
+
|
|
|
|
+# ser's FIFO server
|
|
|
|
+if [ -z "$SER_FIFO" ]; then
|
|
|
|
+ SER_FIFO="localhost 2050"
|
|
|
|
+fi
|
|
|
|
+# period in which stats are reprinted
|
|
|
|
+if [ -z "$WATCH_PERIOD" ] ; then
|
|
|
|
+ WATCH_PERIOD=2
|
|
|
|
+fi
|
|
|
|
+
|
|
|
|
+# SQL config
|
|
|
|
+if [ -z "$SQL_DB" ] ; then
|
|
|
|
+ SQL_DB=ser
|
|
|
|
+fi
|
|
|
|
+if [ -z "$SQL_HOST" ] ; then
|
|
|
|
+ SQL_HOST=localhost
|
|
|
|
+fi
|
|
|
|
+if [ -z "$SQL_USER" ] ; then
|
|
|
|
+ SQL_USER=ser
|
|
|
|
+fi
|
|
|
|
+
|
|
|
|
+# the read-only user for whom password may be stored here
|
|
|
|
+if [ -z "$RO_USER" ] ; then
|
|
|
|
+ RO_USER=serro
|
|
|
|
+fi
|
|
|
|
+if [ -z "$RO_PW" ] ; then
|
|
|
|
+ RO_PW=47serro11
|
|
|
|
+fi
|
|
|
|
+
|
|
|
|
+# binaries
|
|
|
|
+GENHA1='gen_ha1'
|
|
|
|
+MYSQL='mysql'
|
|
|
|
+SER='sr'
|
|
|
|
+LAST_LINE='tail -1'
|
|
|
|
+
|
|
|
|
+# ACL name verification
|
|
|
|
+VERIFY_ACL=1
|
|
|
|
+ACL_GROUPS="local ld int voicemail free-pstn prepaid"
|
|
|
|
+
|
|
|
|
+VERSION='$Revision$'
|
|
|
|
+#### SQL names
|
|
|
|
+
|
|
|
|
+# Usr Loc Table
|
|
|
|
+if [ -z "$UL_TABLE" ] ; then
|
|
|
|
+ UL_TABLE=location
|
|
|
|
+fi
|
|
|
|
+USER_COLUMN=username
|
|
|
|
+CALLID_COLUMN=callid
|
|
|
|
+
|
|
|
|
+# subscriber table
|
|
|
|
+if [ -z "$SUB_TABLE" ] ; then
|
|
|
|
+ SUB_TABLE=subscriber
|
|
|
|
+fi
|
|
|
|
+REALM_COLUMN=domain
|
|
|
|
+HA1_COLUMN=HA1
|
|
|
|
+HA1B_COLUMN=HA1B
|
|
|
|
+PASSWORD_COLUMN=password
|
|
|
|
+RPID_COLUMN=rpid
|
|
|
|
+SUBSCRIBER_COLUMN='username'
|
|
|
|
+EMAIL_COLUMN=email_address
|
|
|
|
+SUB_CREATED_COLUMN=datetime_created
|
|
|
|
+SUB_MODIFIED_COLUMN=datetime_modified
|
|
|
|
+PHP_LIB_COLUMN=phplib_id
|
|
|
|
+
|
|
|
|
+# acl table
|
|
|
|
+if [ -z "$ACL_TABLE" ] ; then
|
|
|
|
+ ACL_TABLE=grp
|
|
|
|
+fi
|
|
|
|
+ACL_USER_COLUMN=username
|
|
|
|
+ACL_DOMAIN_COLUMN=domain
|
|
|
|
+ACL_GROUP_COLUMN=grp
|
|
|
|
+ACL_MODIFIED_COLUMN=last_modified
|
|
|
|
+ACL_DOMAIN_COLUMN=domain
|
|
|
|
+
|
|
|
|
+# aliases table
|
|
|
|
+if [ -z "$ALS_TABLE" ] ; then
|
|
|
|
+ ALS_TABLE=aliases
|
|
|
|
+fi
|
|
|
|
+A_USER_COLUMN=username
|
|
|
|
+A_CONTACT_COLUMN=contact
|
|
|
|
+A_EXPIRES_COLUMN=expires
|
|
|
|
+A_Q_COLUMN=q
|
|
|
|
+A_CALLID_COLUMN=callid
|
|
|
|
+A_CSEQ_COLUMN=cseq
|
|
|
|
+A_LAST_MODIFIED_COLUMN=last_modified
|
|
|
|
+
|
|
|
|
+# domain table
|
|
|
|
+DOMAIN_TABLE=domain
|
|
|
|
+
|
|
|
|
+# URI table
|
|
|
|
+if [ -z "$URI_TABLE" ] ; then
|
|
|
|
+ URI_TABLE=uri
|
|
|
|
+fi
|
|
|
|
+URIUSER_COLUMN=uri_user
|
|
|
|
+MODIFIED_COLUMN=last_modified
|
|
|
|
+
|
|
|
|
+FIFO_DBG=0
|
|
|
|
+
|
|
|
|
+EGREP="egrep"
|
|
|
|
+#===================================================================
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+usage() {
|
|
|
|
+CMD=`basename $0`
|
|
|
|
+if [ "0$VERIFY_ACL" -eq 1 ] ; then
|
|
|
|
+ EXTRA_TEXT="ACL privileges are: $ACL_GROUPS"
|
|
|
|
+fi
|
|
|
|
+cat <<EOF
|
|
|
|
+$0 $VERSION
|
|
|
|
+parameter usage:
|
|
|
|
+ * subscribers *
|
|
|
|
+ add <username> <password> <email> .. add a new subscriber (*)
|
|
|
|
+ passwd <username> <passwd> ......... change user's password (*)
|
|
|
|
+ rm <username> ...................... delete a user (*)
|
|
|
|
+ mail <username> .................... send an email to a user
|
|
|
|
+ alias show [<alias>] ............... show aliases
|
|
|
|
+ alias rm <alias> ................... remove an alias
|
|
|
|
+ alias add <alias> <uri> ............ add an aliases
|
|
|
|
+ rpid add <username> <rpid> ......... add rpid for a user (*)
|
|
|
|
+ rpid rm <username> ................. set rpid to NULL for a user (*)
|
|
|
|
+ rpid show <username> ............... show rpid of a user
|
|
|
|
+
|
|
|
|
+ * access control lists *
|
|
|
|
+ acl show [<username>] .............. show user membership
|
|
|
|
+ acl grant <username> <group> ....... grant user membership (*)
|
|
|
|
+ acl revoke <username> [<group>] .... grant user membership(s) (*)
|
|
|
|
+
|
|
|
|
+ * usrloc *
|
|
|
|
+ ul show [<username>]................ show in-RAM online users
|
|
|
|
+ ul rm <username> ................... delete user's UsrLoc entries
|
|
|
|
+ ul add <username> <uri> ............ introduce a permanent UrLoc entry
|
|
|
|
+ showdb [<username>] ................ show online users flushed in DB
|
|
|
|
+
|
|
|
|
+ * pa *
|
|
|
|
+ pa pres <p_uri> <pstate>............ set pstate for a presentity
|
|
|
|
+ pa loc <p_uri> <loc>................ set location for a presentity
|
|
|
|
+
|
|
|
|
+ * domains *
|
|
|
|
+ domain show ........................ show list of served domains
|
|
|
|
+ domain add <domainname> ............ add a new served domain
|
|
|
|
+ domain rm <domainname> ............. remove a served domain
|
|
|
|
+
|
|
|
|
+ * control and diagnostics *
|
|
|
|
+ moni ... show internal status start .... start ser
|
|
|
|
+ ps ..... show runnig processes stop ..... stop ser
|
|
|
|
+ fifo ... send raw FIFO commands restart .. restart ser
|
|
|
|
+ ping <uri> .. ping a URI (OPTIONS)
|
|
|
|
+ cisco_restart <uri> .. restart a Cisco phone (NOTIFY)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ Commands labeled with (*) will prompt for a MySQL password.
|
|
|
|
+ If the variable PW is set, the password will not be prompted.
|
|
|
|
+
|
|
|
|
+ $EXTRA_TEXT
|
|
|
|
+EOF
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+# determine host name, typically for use in printing UAC
|
|
|
|
+# messages; we use today a simplistic but portable uname -n way --
|
|
|
|
+# no domain name is displayed ; fifo_uac expands !! to host
|
|
|
|
+# address only for optional header fields; uname output without
|
|
|
|
+# domain is sufficient for informational header fields such as
|
|
|
|
+# From
|
|
|
|
+#
|
|
|
|
+get_my_host() {
|
|
|
|
+ uname -n
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+# calculate name and domain of current user
|
|
|
|
+set_user() {
|
|
|
|
+
|
|
|
|
+ SERUSER=`echo $1|$AWK -F @ '{print $1}'`
|
|
|
|
+ SERDOMAIN=`echo $1|$AWK -F @ '{print $2}'`
|
|
|
|
+
|
|
|
|
+ if [ -z "$SERDOMAIN" ] ; then
|
|
|
|
+ SERDOMAIN="$SIP_DOMAIN"
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ if [ -z "$SERDOMAIN" ] ; then
|
|
|
|
+ echo "domain unknown: use usernames with domain or set default domain in SIP_DOMAIN"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+# check the parameter if it is a valid SIP URI
|
|
|
|
+# quite simplified now -- it captures just very basic
|
|
|
|
+# errors
|
|
|
|
+check_uri() {
|
|
|
|
+ echo "$1" | $EGREP "^sip(s)?:([a-zA-Z0-9_]+@)?.*\..*" > /dev/null
|
|
|
|
+ if [ $? -ne 0 ] ; then
|
|
|
|
+ echo "error: invalid URI: $1" > /dev/stderr
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+# check for alias duplicates
|
|
|
|
+check_alias() {
|
|
|
|
+ RES=`fifo_cmd ul_show_contact "$ALS_TABLE" "$1"`
|
|
|
|
+ RET="$?"
|
|
|
|
+ if [ $RET -ne 0 ] ; then
|
|
|
|
+ echo "error: SER/FIFO not accessible: $RET" \
|
|
|
|
+ > /dev/stderr
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ echo "$RES" | grep "^404" > /dev/null
|
|
|
|
+ if [ $? -eq 0 ] ; then
|
|
|
|
+ # alias does not exist yet, go ahead!
|
|
|
|
+ return 0
|
|
|
|
+ fi
|
|
|
|
+ echo "$RES" | grep "^400" > /dev/null
|
|
|
|
+ if [ $? -eq 0 ] ; then
|
|
|
|
+ echo "error: 400; check if you use aliases in SER" \
|
|
|
|
+ > /dev/stderr
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ # Unknown error
|
|
|
|
+ echo "$RES" | grep "^[1-9][0-9][0-9]" > /dev/null
|
|
|
|
+ if [ $? -eq 0 ] ; then
|
|
|
|
+ echo "error: $RES" \
|
|
|
|
+ > /dev/stderr
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ echo "error: Overlap with an existing alias" > /dev/stderr
|
|
|
|
+ exit 1
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#params: none
|
|
|
|
+# output: PW
|
|
|
|
+prompt_pw() {
|
|
|
|
+ if [ -z "$PW" ] ; then
|
|
|
|
+ savetty=`stty -g`
|
|
|
|
+ printf "MySql password: " > /dev/stderr
|
|
|
|
+ stty -echo
|
|
|
|
+ read PW
|
|
|
|
+ stty $savetty
|
|
|
|
+ echo
|
|
|
|
+ fi
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+print_status() {
|
|
|
|
+ echo $1 | grep "^[1-6][0-9][0-9]" > /dev/null
|
|
|
|
+ if [ "$?" -eq 0 ] ; then
|
|
|
|
+ echo $1
|
|
|
|
+ else
|
|
|
|
+ echo "200 OK"
|
|
|
|
+ fi
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+# process output from FIFO server; if everything is ok
|
|
|
|
+# skip the first "ok" line and proceed to returned
|
|
|
|
+# parameters
|
|
|
|
+filter_fl()
|
|
|
|
+{
|
|
|
|
+# tail +2
|
|
|
|
+
|
|
|
|
+ $AWK 'BEGIN {line=0;IGNORECASE=1;}
|
|
|
|
+ {line++}
|
|
|
|
+ line==1 && /^200 ok/ { next }
|
|
|
|
+ { print }'
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+fifo_cmd()
|
|
|
|
+{
|
|
|
|
+ if [ "0${FIFO_DBG}" -eq 1 ] ; then
|
|
|
|
+ echo "entering fifo_cmd $*"
|
|
|
|
+ fi
|
|
|
|
+ if [ "$#" -lt 1 ]; then
|
|
|
|
+ echo "ERROR: fifo_cmd must take at least command name as parameter"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ # construct the command now
|
|
|
|
+ CMD=":$1:\n";
|
|
|
|
+ shift
|
|
|
|
+ while [ -n "$1" ] ; do
|
|
|
|
+ CMD="${CMD}${1}\n"
|
|
|
|
+ shift
|
|
|
|
+ done
|
|
|
|
+ CMD="${CMD}\n"
|
|
|
|
+
|
|
|
|
+ # issue FIFO request (printf taken to deal with \n)
|
|
|
|
+ printf "$CMD" |nc -q 10 $SER_FIFO| filter_fl
|
|
|
|
+
|
|
|
|
+ if [ "0${FIFO_DBG}" -eq 1 ] ; then
|
|
|
|
+ printf "FIFO command was:\n$CMD"
|
|
|
|
+ fi
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+# $1 = name $2=path $3=attempt
|
|
|
|
+print_stats() {
|
|
|
|
+
|
|
|
|
+echo "[cycle #: $3; if constant make sure server lives and fifo is on]"
|
|
|
|
+
|
|
|
|
+cat | nc -q 10 $SER_FIFO |filter_fl <<EOF
|
|
|
|
+:version:$1
|
|
|
|
+
|
|
|
|
+EOF
|
|
|
|
+
|
|
|
|
+cat | nc -q 10 $SER_FIFO |filter_fl <<EOF
|
|
|
|
+:uptime:$1
|
|
|
|
+
|
|
|
|
+EOF
|
|
|
|
+echo
|
|
|
|
+
|
|
|
|
+echo Transaction Statistics
|
|
|
|
+cat | nc -q 10 $SER_FIFO |filter_fl <<EOF
|
|
|
|
+:t_stats:$1
|
|
|
|
+
|
|
|
|
+EOF
|
|
|
|
+echo
|
|
|
|
+
|
|
|
|
+echo Stateless Server Statistics
|
|
|
|
+cat | nc -q 10 $SER_FIFO |filter_fl <<EOF
|
|
|
|
+:sl_stats:$1
|
|
|
|
+
|
|
|
|
+EOF
|
|
|
|
+echo
|
|
|
|
+
|
|
|
|
+echo UsrLoc Stats
|
|
|
|
+cat | nc -q 10 $SER_FIFO |filter_fl <<EOF
|
|
|
|
+:ul_stats:$1
|
|
|
|
+
|
|
|
|
+EOF
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+# input: sql query, optional mysql command-line params
|
|
|
|
+sql_query() {
|
|
|
|
+ # if password not yet queried, query it now
|
|
|
|
+ if [ -z "$PW" ] ; then
|
|
|
|
+ savetty=`stty -g`
|
|
|
|
+ printf "MySql password: " > /dev/stderr
|
|
|
|
+ stty -echo
|
|
|
|
+ read PW >&2
|
|
|
|
+ stty $savetty
|
|
|
|
+ echo >&2
|
|
|
|
+ fi
|
|
|
|
+ $MYSQL $2 -h $SQL_HOST -u $SQL_USER "-p$PW" -e "$1 ;" $SQL_DB
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+# input: sql query, optional mysql command-line params
|
|
|
|
+sql_ro_query() {
|
|
|
|
+ $MYSQL $2 -h $SQL_HOST -u $RO_USER "-p$RO_PW" \
|
|
|
|
+ -e "$1 ;" $SQL_DB
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+usrloc() {
|
|
|
|
+ if [ "$#" -lt 2 ] ; then
|
|
|
|
+ echo "usrloc: too few parameters"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ if [ "$1" = "alias" ] ; then
|
|
|
|
+ USRLOC_TABLE="$ALS_TABLE"
|
|
|
|
+ CHECK_SUB=1
|
|
|
|
+ elif [ "$1" = "ul" ] ; then
|
|
|
|
+ USRLOC_TABLE="$UL_TABLE"
|
|
|
|
+ CHECK_SUB=0
|
|
|
|
+ else
|
|
|
|
+ echo "usrloc: unknown table name"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ shift
|
|
|
|
+
|
|
|
|
+ case $1 in
|
|
|
|
+ show)
|
|
|
|
+ if [ $# -eq 2 ] ; then
|
|
|
|
+ set_user $2
|
|
|
|
+ fifo_cmd ul_show_contact $USRLOC_TABLE "$SERUSER@$SERDOMAIN"
|
|
|
|
+ elif [ $# -eq 1 ] ; then
|
|
|
|
+ printf "Dumping all contacts may take long: are you sure you want to proceed? [Y|N] " > /dev/stderr
|
|
|
|
+ read answer
|
|
|
|
+ if [ "$answer" = "y" -o "$answer" = "Y" ] ; then
|
|
|
|
+ fifo_cmd ul_dump
|
|
|
|
+ fi
|
|
|
|
+ else
|
|
|
|
+ echo "wrong number of params for usrloc show"
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ exit $?
|
|
|
|
+ ;;
|
|
|
|
+ add)
|
|
|
|
+ if [ $# -ne 3 ] ; then
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ shift
|
|
|
|
+ check_uri "$2"
|
|
|
|
+ set_user $1
|
|
|
|
+
|
|
|
|
+ if [ "$?" -ne "0" ] ; then
|
|
|
|
+ echo "$2 is not a valid URI"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ if [ "$CHECK_SUB" -ne 0 ] ; then
|
|
|
|
+ is_user
|
|
|
|
+ if [ $? -eq 0 ] ; then
|
|
|
|
+ echo overlap of alias with an existing subscriber name
|
|
|
|
+ exit 1;
|
|
|
|
+ fi
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ check_alias "$SERUSER@$SERDOMAIN"
|
|
|
|
+
|
|
|
|
+ # 128 means FL_PERSISTENT is on
|
|
|
|
+ fifo_cmd ul_add "$USRLOC_TABLE" "$SERUSER@$SERDOMAIN" "$2" "0" "1.00" "0" "128"
|
|
|
|
+ exit $?
|
|
|
|
+ ;;
|
|
|
|
+ rm)
|
|
|
|
+ if [ $# -ne 2 ] ; then
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ shift
|
|
|
|
+ set_user $1
|
|
|
|
+ fifo_cmd ul_rm $USRLOC_TABLE "$SERUSER@$SERDOMAIN"
|
|
|
|
+
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ *)
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ ;;
|
|
|
|
+ esac
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+presence_agent() {
|
|
|
|
+ if [ "$#" -lt 4 ] ; then
|
|
|
|
+ echo "pa: too few parameters"
|
|
|
|
+ # usage
|
|
|
|
+ # exit 1
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ shift
|
|
|
|
+ case $1 in
|
|
|
|
+ loc)
|
|
|
|
+ shift
|
|
|
|
+ # check_uri "$1"
|
|
|
|
+ if [ "$?" -ne "0" ] ; then
|
|
|
|
+ echo "$1 is not a valid URI"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ fifo_cmd pa_location "registrar" "$1" "$2"
|
|
|
|
+ exit $?
|
|
|
|
+ ;;
|
|
|
|
+ pres)
|
|
|
|
+ shift
|
|
|
|
+ # check_uri "$1"
|
|
|
|
+ if [ "$?" -ne "0" ] ; then
|
|
|
|
+ echo "$1 is not a valid URI"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ fifo_cmd pa_presence "registrar" "$1" "$2"
|
|
|
|
+ exit $?
|
|
|
|
+ ;;
|
|
|
|
+ *)
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ ;;
|
|
|
|
+ esac
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+rpid() {
|
|
|
|
+ if [ "$#" -lt 2 ] ; then
|
|
|
|
+ echo "rpid: too few parameters"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ shift;
|
|
|
|
+
|
|
|
|
+ case $1 in
|
|
|
|
+ show)
|
|
|
|
+ if [ $# -eq 2 ] ; then
|
|
|
|
+ set_user $2
|
|
|
|
+ is_user
|
|
|
|
+ if [ $? -ne 0 ] ; then
|
|
|
|
+ echo non-existent user
|
|
|
|
+ exit 1;
|
|
|
|
+ fi
|
|
|
|
+ CLAUSE=" WHERE $SUBSCRIBER_COLUMN='$SERUSER' AND $REALM_COLUMN='$SERDOMAIN' "
|
|
|
|
+ elif [ $# -ne 1 ] ; then
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ QUERY="select $SUBSCRIBER_COLUMN, $RPID_COLUMN FROM $SUB_TABLE $CLAUSE ; "
|
|
|
|
+ sql_ro_query "$QUERY"
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ add|rm)
|
|
|
|
+ MODE=$1;
|
|
|
|
+
|
|
|
|
+ if [ "$MODE" = "add" ] ; then
|
|
|
|
+ ARG_NUM=3;
|
|
|
|
+ else
|
|
|
|
+ ARG_NUM=2;
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ if [ $# -lt $ARG_NUM ] ; then
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ prompt_pw
|
|
|
|
+ set_user $2
|
|
|
|
+ is_user
|
|
|
|
+ if [ $? -ne 0 ] ; then
|
|
|
|
+ echo non-existent user
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ shift 2
|
|
|
|
+
|
|
|
|
+ if [ "$MODE" = "add" ] ; then
|
|
|
|
+ RPID_VAL="'$1'";
|
|
|
|
+ else
|
|
|
|
+ RPID_VAL=NULL;
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ QUERY="UPDATE $SUB_TABLE \
|
|
|
|
+ SET $RPID_COLUMN=$RPID_VAL \
|
|
|
|
+ WHERE $SUBSCRIBER_COLUMN='$SERUSER' AND $REALM_COLUMN='$SERDOMAIN';"
|
|
|
|
+ sql_query "$QUERY"
|
|
|
|
+ if [ $? -ne 0 ] ; then
|
|
|
|
+ echo "SQL Error"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ $0 rpid show $SERUSER@$SERDOMAIN
|
|
|
|
+
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ *)
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ ;;
|
|
|
|
+ esac
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+domain() {
|
|
|
|
+ case $1 in
|
|
|
|
+ show)
|
|
|
|
+ # QUERY="select * FROM $DOMAIN_TABLE ; "
|
|
|
|
+ # sql_ro_query "$QUERY"
|
|
|
|
+ fifo_cmd domain_dump
|
|
|
|
+ ;;
|
|
|
|
+ add)
|
|
|
|
+ shift
|
|
|
|
+ if [ $# -ne 1 ] ; then
|
|
|
|
+ echo missing domain to be added
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ prompt_pw
|
|
|
|
+ QUERY="insert into $DOMAIN_TABLE (domain) VALUES ('$1');"
|
|
|
|
+ sql_query "$QUERY"
|
|
|
|
+ if [ $? -ne 0 ] ; then
|
|
|
|
+ echo "SQL Error"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ fifo_cmd domain_reload
|
|
|
|
+ ;;
|
|
|
|
+ rm)
|
|
|
|
+ shift
|
|
|
|
+ if [ $# -ne 1 ] ; then
|
|
|
|
+ echo missing domain to be removed
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ prompt_pw
|
|
|
|
+ QUERY="delete from $DOMAIN_TABLE where domain='$1';"
|
|
|
|
+ sql_query "$QUERY"
|
|
|
|
+ if [ $? -ne 0 ] ; then
|
|
|
|
+ echo "SQL Error"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ fifo_cmd domain_reload
|
|
|
|
+ ;;
|
|
|
|
+ *)
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ esac
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+acl() {
|
|
|
|
+ case $1 in
|
|
|
|
+ show)
|
|
|
|
+ if [ $# -eq 2 ] ; then
|
|
|
|
+ set_user $2
|
|
|
|
+ is_user
|
|
|
|
+ if [ $? -ne 0 ] ; then
|
|
|
|
+ echo non-existent user
|
|
|
|
+ exit 1;
|
|
|
|
+ fi
|
|
|
|
+ CLAUSE=" WHERE $ACL_USER_COLUMN='$SERUSER' AND $ACL_DOMAIN_COLUMN='$SERDOMAIN' "
|
|
|
|
+ elif [ $# -ne 1 ] ; then
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ QUERY="select * FROM $ACL_TABLE $CLAUSE ; "
|
|
|
|
+ sql_ro_query "$QUERY"
|
|
|
|
+
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ grant)
|
|
|
|
+ if [ $# -lt 3 ] ; then
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ prompt_pw
|
|
|
|
+ set_user $2
|
|
|
|
+ is_user
|
|
|
|
+ if [ $? -ne 0 ] ; then
|
|
|
|
+ echo non-existent user
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ shift 2
|
|
|
|
+ while [ $# -gt 0 ] ; do
|
|
|
|
+
|
|
|
|
+ if [ $VERIFY_ACL -eq 1 ] ; then
|
|
|
|
+ found=0
|
|
|
|
+ for i in $ACL_GROUPS ; do
|
|
|
|
+ if [ "$1" = "$i" ] ; then
|
|
|
|
+ found=1
|
|
|
|
+ break
|
|
|
|
+ fi
|
|
|
|
+ done
|
|
|
|
+ if [ $found -eq 0 ] ; then
|
|
|
|
+ echo "Invalid privilege: $1 ignored"
|
|
|
|
+ shift
|
|
|
|
+ continue
|
|
|
|
+ fi
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ QUERY="insert into $ACL_TABLE \
|
|
|
|
+ ($ACL_USER_COLUMN,$ACL_GROUP_COLUMN,$ACL_MODIFIED_COLUMN, $ACL_DOMAIN_COLUMN ) \
|
|
|
|
+ values ('$SERUSER','$1', now(), '$SERDOMAIN' );"
|
|
|
|
+ sql_query "$QUERY"
|
|
|
|
+ if [ $? -ne 0 ] ; then
|
|
|
|
+ echo "SQL Error"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ shift
|
|
|
|
+ done
|
|
|
|
+
|
|
|
|
+ $0 acl show $SERUSER@$SERDOMAIN
|
|
|
|
+
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ revoke)
|
|
|
|
+ if [ $# -eq 3 ] ; then
|
|
|
|
+ CLAUSE=" and $ACL_GROUP_COLUMN='$3' "
|
|
|
|
+ elif [ $# -ne 2 ] ; then
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ set_user $2
|
|
|
|
+
|
|
|
|
+ QUERY="delete from $ACL_TABLE where \
|
|
|
|
+ $ACL_TABLE.$ACL_USER_COLUMN='$SERUSER' AND $ACL_DOMAIN_COLUMN='$SERDOMAIN' $CLAUSE"
|
|
|
|
+ sql_query "$QUERY"
|
|
|
|
+
|
|
|
|
+ $0 acl show $2
|
|
|
|
+
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ *)
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ ;;
|
|
|
|
+ esac
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+# params: user
|
|
|
|
+# output: false if exists, true otherwise
|
|
|
|
+is_user() {
|
|
|
|
+ QUERY="select count(*) from $SUB_TABLE \
|
|
|
|
+ where $SUBSCRIBER_COLUMN='$SERUSER' and $REALM_COLUMN='$SERDOMAIN';"
|
|
|
|
+ CNT=`sql_ro_query "$QUERY" | grep -v ERROR | $LAST_LINE`
|
|
|
|
+ if [ "0$CNT" -eq 0 ] ; then
|
|
|
|
+ false
|
|
|
|
+ else
|
|
|
|
+ true
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+# params: user, password
|
|
|
|
+# output: HA1, HA1B
|
|
|
|
+credentials()
|
|
|
|
+{
|
|
|
|
+ set_user $1
|
|
|
|
+
|
|
|
|
+ HA1=`$GENHA1 $SERUSER $SERDOMAIN $2`
|
|
|
|
+ if [ $? -ne 0 ] ; then
|
|
|
|
+ echo "HA1 calculation failed"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ HA1B=`$GENHA1 "$SERUSER@$SERDOMAIN" $SERDOMAIN $2`
|
|
|
|
+ if [ $? -ne 0 ] ; then
|
|
|
|
+ echo "HA1B calculation failed"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#================================================================
|
|
|
|
+
|
|
|
|
+# if the script calls itself ...
|
|
|
|
+export PW
|
|
|
|
+
|
|
|
|
+case $1 in
|
|
|
|
+
|
|
|
|
+ start)
|
|
|
|
+ echo
|
|
|
|
+ printf "Starting SER : "
|
|
|
|
+ if [ -r $PID_FILE ] ; then
|
|
|
|
+ echo "PID file exists! ($PID_FILE) already running?"
|
|
|
|
+ exit 1
|
|
|
|
+ else
|
|
|
|
+ if [ ! -x "$SERBIN" ] ; then
|
|
|
|
+ echo "SER binaries not found at $SERBIN; reconfigure SERBIN in $0"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ if [ $SYSLOG = 1 ] ; then
|
|
|
|
+ $SERBIN -P $PID_FILE $STARTOPTIONS 1>/dev/null 2>/dev/null
|
|
|
|
+ else
|
|
|
|
+ $SERBIN -P $PID_FILE -E $STARTOPTIONS
|
|
|
|
+ fi
|
|
|
|
+ sleep 1
|
|
|
|
+ if [ ! -s $PID_FILE ] ; then
|
|
|
|
+ echo "PID file $PID_FILE does not exist -- SER start failed"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ echo "started pid(`cat $PID_FILE`)"
|
|
|
|
+ fi
|
|
|
|
+ exit 0
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ stop)
|
|
|
|
+ printf "Stopping SER : "
|
|
|
|
+ if [ -r $PID_FILE ] ; then
|
|
|
|
+ kill `cat $PID_FILE`
|
|
|
|
+ echo "stopped"
|
|
|
|
+ else
|
|
|
|
+ echo No PID file found! SER probably not running
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ exit 0
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ restart)
|
|
|
|
+ $0 stop
|
|
|
|
+ if [ "$?" -ne 0 ] ; then
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ sleep 2
|
|
|
|
+ $0 start
|
|
|
|
+ exit 0
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ passwd)
|
|
|
|
+ if [ $# -ne 3 ] ; then
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ shift
|
|
|
|
+ credentials $1 $2
|
|
|
|
+ prompt_pw
|
|
|
|
+
|
|
|
|
+ is_user $1
|
|
|
|
+ if [ $? -ne 0 ] ; then
|
|
|
|
+ echo non-existent user
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ QUERY="update $SUB_TABLE \
|
|
|
|
+ set $HA1_COLUMN='$HA1', $HA1B_COLUMN='$HA1B', $PASSWORD_COLUMN='$2' \
|
|
|
|
+ , $SUB_MODIFIED_COLUMN=now() \
|
|
|
|
+ WHERE $SUBSCRIBER_COLUMN='$SERUSER' and $REALM_COLUMN='$SERDOMAIN';"
|
|
|
|
+ sql_query "$QUERY"
|
|
|
|
+ if [ $? -ne 0 ] ; then
|
|
|
|
+ echo "password change failed"
|
|
|
|
+ else
|
|
|
|
+ echo "password change succeeded"
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ add)
|
|
|
|
+ if [ $# -ne 4 ] ; then
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ shift
|
|
|
|
+ credentials $1 $2
|
|
|
|
+ prompt_pw
|
|
|
|
+ is_user $1
|
|
|
|
+ if [ $? -eq 0 ] ; then
|
|
|
|
+ echo user already exists
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ check_alias "$SERUSER@$SERDOMAIN"
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ QUERY="insert into $SUB_TABLE \
|
|
|
|
+ ($SUBSCRIBER_COLUMN,$REALM_COLUMN,$HA1_COLUMN,\
|
|
|
|
+ $HA1B_COLUMN,$PASSWORD_COLUMN,$EMAIL_COLUMN, $SUB_CREATED_COLUMN, \
|
|
|
|
+ $PHP_LIB_COLUMN ) \
|
|
|
|
+ values ('$SERUSER','$SERDOMAIN','$HA1','$HA1B','$2', '$3', now(), '$HA1' );";
|
|
|
|
+ sql_query "$QUERY"
|
|
|
|
+ if [ $? -ne 0 ] ; then
|
|
|
|
+ echo "introducing a new user to the database failed"
|
|
|
|
+ else
|
|
|
|
+ echo "new user added"
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ QUERY="insert into $URI_TABLE \
|
|
|
|
+ ($SUBSCRIBER_COLUMN,$REALM_COLUMN,$URIUSER_COLUMN,$MODIFIED_COLUMN) \
|
|
|
|
+ values ('$SERUSER','$SERDOMAIN','$SERUSER',now());";
|
|
|
|
+ sql_query "$QUERY"
|
|
|
|
+ if [ $? -ne 0 ] ; then
|
|
|
|
+ echo "introducing a new user into uri table failed"
|
|
|
|
+ else
|
|
|
|
+ echo "new user into uri table added"
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ monitor|console|moni|con)
|
|
|
|
+ name=ser_receiver_$$
|
|
|
|
+ path=/tmp/$name
|
|
|
|
+ attempt=0
|
|
|
|
+ if [ "$2" = "" ]; then
|
|
|
|
+ loops=-1;
|
|
|
|
+ else
|
|
|
|
+ loops=$2;
|
|
|
|
+ fi
|
|
|
|
+ clear
|
|
|
|
+ while [ $loops -ne $attempt ] ; do
|
|
|
|
+ attempt=`expr $attempt + 1`
|
|
|
|
+ #clear
|
|
|
|
+ tput cup 0 0
|
|
|
|
+ print_stats $name $path $attempt
|
|
|
|
+ if [ $loops -ne $attempt ] ; then
|
|
|
|
+ sleep $WATCH_PERIOD
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ done
|
|
|
|
+ rm $path
|
|
|
|
+ exit 0
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ mail)
|
|
|
|
+ if [ $# -ne 2 ] ; then
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ shift
|
|
|
|
+ set_user $1
|
|
|
|
+ QUERY="select $SUB_TABLE.$EMAIL_COLUMN from $SUB_TABLE where \
|
|
|
|
+ $SUB_TABLE.$SUBSCRIBER_COLUMN='$SERUSER' and $SUB_TABLE.$REALM_COLUMN='$SERDOMAIN'"
|
|
|
|
+ EA=`sql_ro_query "$QUERY" "-B" | grep -v ERROR | $LAST_LINE`
|
|
|
|
+ if [ $? -ne 0 ] ; then
|
|
|
|
+ echo "MySql query failed"
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ echo "Write email to $1: $EA now ..."
|
|
|
|
+ mail -s "Message from $SERDOMAIN SIP admin" $EA
|
|
|
|
+ if [ $? -eq 0 ] ; then
|
|
|
|
+ echo message sent
|
|
|
|
+ else
|
|
|
|
+ echo sending message failed
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ alias|ul)
|
|
|
|
+ usrloc "$@"
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ pa)
|
|
|
|
+ presence_agent "$@"
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ rpid)
|
|
|
|
+ rpid "$@"
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ online)
|
|
|
|
+ fifo_cmd ul_dump |grep aor| $AWK '{print $3}' | sort | sort -mu
|
|
|
|
+ exit $?
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ showdb|userdb)
|
|
|
|
+ shift
|
|
|
|
+ if [ $# -eq 1 ] ; then
|
|
|
|
+ set_user $1
|
|
|
|
+ is_user
|
|
|
|
+ if [ $? -ne 0 ] ; then
|
|
|
|
+ echo non-existent user
|
|
|
|
+ exit 1;
|
|
|
|
+ fi
|
|
|
|
+ QUERY1="select $SUB_TABLE.$EMAIL_COLUMN from $SUB_TABLE \
|
|
|
|
+ where $SUB_TABLE.$SUBSCRIBER_COLUMN='$SERUSER' and \
|
|
|
|
+ $SUB_TABLE.$REALM_COLUMN='$SERDOMAIN' "
|
|
|
|
+ QUERY2="select $UL_TABLE.* from $UL_TABLE where \
|
|
|
|
+ $UL_TABLE.$USER_COLUMN='$SERUSER' and
|
|
|
|
+ $UL_TABLE.$REALM_COLUMN='$SERDOMAIN' order by expires desc"
|
|
|
|
+ sql_ro_query "$QUERY1"
|
|
|
|
+ sql_ro_query "$QUERY2"
|
|
|
|
+ else
|
|
|
|
+ QUERY3="select $UL_TABLE.$USER_COLUMN, $SUB_TABLE.$EMAIL_COLUMN, \
|
|
|
|
+ $UL_TABLE.$CALLID_COLUMN from $SUB_TABLE, $UL_TABLE where \
|
|
|
|
+ $SUB_TABLE.$SUBSCRIBER_COLUMN=$UL_TABLE.$USER_COLUMN \
|
|
|
|
+ order by $UL_TABLE.$USER_COLUMN"
|
|
|
|
+ sql_ro_query "$QUERY3"
|
|
|
|
+ fi
|
|
|
|
+ echo "Note: Due to usage of cache, server's list " \
|
|
|
|
+ "may differ from DB list."
|
|
|
|
+
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ rm)
|
|
|
|
+ if [ $# -ne 2 ] ; then
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ shift
|
|
|
|
+ prompt_pw
|
|
|
|
+
|
|
|
|
+ set_user $1
|
|
|
|
+ is_user
|
|
|
|
+ if [ $? -ne 0 ] ; then
|
|
|
|
+ echo non-existent user
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ # begin with remove all user's privileges
|
|
|
|
+ $0 acl revoke $1 > /dev/null 2>&1
|
|
|
|
+
|
|
|
|
+ QUERY="delete from $URI_TABLE where $SUBSCRIBER_COLUMN='$SERUSER'"
|
|
|
|
+ sql_query "$QUERY"
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ # destroy the user now
|
|
|
|
+ QUERY="delete from $SUB_TABLE where $SUB_TABLE.$SUBSCRIBER_COLUMN='$SERUSER' and $SUB_TABLE.$REALM_COLUMN='$SERDOMAIN'"
|
|
|
|
+ sql_query "$QUERY"
|
|
|
|
+
|
|
|
|
+ # and also all his contacts
|
|
|
|
+ $0 ul rm $1 > /dev/null 2>&1
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ ps)
|
|
|
|
+ fifo_cmd ps
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ acl)
|
|
|
|
+ shift
|
|
|
|
+ acl "$@"
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ domain)
|
|
|
|
+ shift
|
|
|
|
+ domain "$@"
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ fifo)
|
|
|
|
+ shift
|
|
|
|
+ fifo_cmd "$@"
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ ping)
|
|
|
|
+ # error handling is hacked -- filter_fl should not
|
|
|
|
+ # consume positive status -- that should be done by
|
|
|
|
+ # calling app
|
|
|
|
+ if [ "$#" -ne 2 ] ; then
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ myhost=`get_my_host`
|
|
|
|
+ RET=`fifo_cmd t_uac_dlg OPTIONS "$2" "." \
|
|
|
|
+ "From: sip:daemon@$myhost" \
|
|
|
|
+ "To: <$2>" "Contact: <sip:daemon@!!>" "." "." \
|
|
|
|
+ | head -1 `
|
|
|
|
+ print_status $RET
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ cisco_restart)
|
|
|
|
+ if [ "$#" -ne 2 ] ; then
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+ myhost=`get_my_host`
|
|
|
|
+ RET=`fifo_cmd t_uac_dlg NOTIFY "$2" "." \
|
|
|
|
+ "From: sip:daemon@$myhost" \
|
|
|
|
+ "To: <$2>" "Event: check-sync" \
|
|
|
|
+ "Contact: <sip:daemon@!!>" "." "." |
|
|
|
|
+ head -1 `
|
|
|
|
+ print_status $RET
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ version)
|
|
|
|
+ echo "$0 $VERSION"
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+ *)
|
|
|
|
+ usage
|
|
|
|
+ exit 1
|
|
|
|
+ ;;
|
|
|
|
+
|
|
|
|
+esac
|
|
|
|
+
|