Guest User

Untitled

a guest
Jun 9th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 57.14 KB | None | 0 0
  1. #!/bin/sh
  2. #
  3. # $Id$
  4. #
  5. # opensips control tool for maintaining opensips
  6. #
  7. #===================================================================
  8.  
  9. PATH=$PATH:/usr/local/sbin/
  10.  
  11. # for testing only, please don't enable this in production environments
  12. # as this introduce security risks
  13. TEST="false"
  14. ### include config files
  15. if [ -n "$osipsctlrc" -a -f "$osipsctlrc" ]; then
  16. . "$osipsctlrc"
  17. else
  18. if [ -f /etc/opensips/opensipsctlrc ]; then
  19. . /etc/opensips/opensipsctlrc
  20. fi
  21. if [ -f /usr/local/etc/opensips/opensipsctlrc ]; then
  22. . /usr/local/etc/opensips/opensipsctlrc
  23. fi
  24. if [ -f ~/.opensipsctlrc ]; then
  25. . ~/.opensipsctlrc
  26. fi
  27.  
  28. if [ $TEST = "true" ]; then
  29. ETCDIR=etc/
  30. if [ -f ./opensipsctlrc ]; then
  31. . ./opensipsctlrc
  32. elif [ -f scripts/opensipsctlrc ]; then
  33. . scripts/opensipsctlrc
  34. fi
  35. fi
  36. fi
  37.  
  38. if [ -z $SHELL_TESTED ] && [ -z $NOHLPRINT ] ; then
  39. if [ -x /bin/bash ]; then
  40. # bash is available
  41. export SHELL_TESTED=yes
  42. exec /bin/bash "$0" "$@"
  43. else
  44. NOHLPRINT=yes
  45. fi
  46. fi
  47.  
  48.  
  49.  
  50. ### force values for variables in this section
  51. # you better set the variables in ~/.opensipsctlrc
  52. if [ -z $ETCDIR ] ; then
  53. ETCDIR="/usr/local/etc/opensips"
  54. else
  55. # Fix relative paths
  56. [ "${ETCDIR:0:1}" != "/" ] && ETCDIR=$PWD/$ETCDIR
  57. fi
  58.  
  59. ### version for this script
  60. VERSION='$Revision: 4448 $'
  61.  
  62. if [ -z $MYDIR ] ; then
  63. MYDIR=`dirname $0`
  64. fi
  65.  
  66. if [ -z $MYLIBDIR ] ; then
  67. MYLIBDIR="/usr/local/lib/opensips/opensipsctl"
  68. if [ ! -d $MYLIBDIR ]; then
  69. MYLIBDIR=$MYDIR
  70. fi
  71. fi
  72.  
  73. ##### ------------------------------------------------ #####
  74. ### load base functions
  75. #
  76. if [ -f "$MYLIBDIR/opensipsctl.base" ]; then
  77. . "$MYLIBDIR/opensipsctl.base"
  78. else
  79. echo -e "Cannot load core functions '$MYLIBDIR/opensipsctl.base' - exiting ...\n"
  80. exit -1
  81. fi
  82.  
  83. ##### ------------------------------------------------ #####
  84. ### define default parameters that may be overridden by
  85. ### different database engines
  86. #
  87. now="now()"
  88.  
  89. #
  90. ##### ------------------------------------------------ #####
  91. ### DBENGINE
  92. #
  93. DBENGINELOADED=0
  94. case $DBENGINE in
  95. MYSQL|mysql|MySQL)
  96. if [ -f "$MYLIBDIR/opensipsctl.mysql" ]; then
  97. . "$MYLIBDIR/opensipsctl.mysql"
  98. DBENGINELOADED=1
  99. fi
  100. ;;
  101. PGSQL|pgsql|postgres|postgresql|POSTGRESQL)
  102. if [ -f "$MYLIBDIR/opensipsctl.pgsql" ]; then
  103. . "$MYLIBDIR/opensipsctl.pgsql"
  104. DBENGINELOADED=1
  105. fi
  106. ;;
  107. ORACLE|oracle|Oracle)
  108. if [ -f "$MYLIBDIR/opensipsctl.oracle" ]; then
  109. . "$MYLIBDIR/opensipsctl.oracle"
  110. DBENGINELOADED=1
  111. fi
  112. ;;
  113.  
  114. DBTEXT|dbtext|textdb)
  115. if [ -f "$MYLIBDIR/opensipsctl.dbtext" ]; then
  116. . "$MYLIBDIR/opensipsctl.dbtext"
  117. DBENGINELOADED=1
  118. fi
  119. ;;
  120. DB_BERKELEY|db_berkeley|BERKELEY|berkeley)
  121. if [ -f "$MYLIBDIR/opensipsctl.db_berkeley" ]; then
  122. . "$MYLIBDIR/opensipsctl.db_berkeley"
  123. DBENGINELOADED=1
  124. fi
  125. ;;
  126. SQLITE|db_sqlite|SQLITE|sqlite)
  127. if [ -f "$MYLIBDIR/opensipsctl.sqlite" ]; then
  128. . "$MYLIBDIR/opensipsctl.sqlite"
  129. DBENGINELOADED=1
  130. now="datetime('now','localtime')"
  131. fi
  132. ;;
  133.  
  134. esac
  135.  
  136. if [ $DBENGINELOADED -eq 1 ] ; then
  137. mdbg "database engine '$DBENGINE' loaded"
  138. elif [ -n "$DBENGINE" ] ; then
  139. mwarn "database engine not found - tried '$DBENGINE'"
  140. fi
  141.  
  142. #
  143. ##### ------------------------------------------------ #####
  144. ### CTLENGINE
  145. #
  146. CTLENGINELOADED=0
  147. if [ -z $CTLENGINE ] ; then
  148. CTLENGINE="FIFO"
  149. fi
  150. case $CTLENGINE in
  151. FIFO|fifo)
  152. if [ -f "$MYLIBDIR/opensipsctl.fifo" ]; then
  153. . "$MYLIBDIR/opensipsctl.fifo"
  154. CTLENGINELOADED=1
  155. fi
  156. ;;
  157. UNIXSOCK|unixsock)
  158. if [ -f "$MYLIBDIR/opensipsctl.unixsock" ]; then
  159. . "$MYLIBDIR/opensipsctl.unixsock"
  160. CTLENGINELOADED=1
  161. fi
  162. ;;
  163. esac
  164.  
  165. if [ $CTLENGINELOADED -eq 1 ] ; then
  166. mdbg "Control engine '$CTLENGINE' loaded"
  167. else
  168. mwarn "no control engine found - tried '$CTLENGINE'"
  169. fi
  170.  
  171. #
  172. ##### ------------------------------------------------ #####
  173. ### common functions
  174. #
  175. usage() {
  176. CMD=`basename $0`
  177. if [ "0$VERIFY_ACL" -eq 1 ] ; then
  178. EXTRA_TEXT="ACL privileges are: $ACL_GROUPS"
  179. fi
  180. cat <<EOF
  181. $0 $VERSION
  182.  
  183. Existing commands:
  184. EOF
  185. for f in $USAGE_FUNCTIONS
  186. do
  187. $f
  188. done
  189. echo
  190.  
  191. }
  192.  
  193. require_dbengine() {
  194. if [ $DBENGINELOADED -eq 0 ] ; then
  195. merr "This command requires a database engine - none was loaded"
  196. exit -1
  197. fi
  198. }
  199.  
  200. require_ctlengine() {
  201. if [ $CTLENGINELOADED -eq 0 ] ; then
  202. merr "This command requires a control engine - none was loaded"
  203. exit -1
  204. fi
  205. }
  206.  
  207. #
  208. ##### ------------------------------------------------ #####
  209. ### combined functions (require db and/or ctl)
  210. #
  211. #
  212.  
  213. #
  214. ##### ------------------------------------------------ #####
  215. ### helper functions (require db and/or ctl)
  216. #
  217.  
  218. lower() {
  219. echo $1 | tr [A-Z] [a-z]
  220. }
  221.  
  222. # params: user
  223. # output: false if exists, true otherwise
  224. is_user() {
  225. set_user $1
  226.  
  227. QUERY="select count(*) from $SUB_TABLE where \
  228. $SUBSCRIBER_COLUMN='$OSIPSUSER' and $REALM_COLUMN='$OSIPSDOMAIN';"
  229.  
  230. CNT=`$DBCMD "$QUERY" "$DBRAWPARAMS" | $EGREP -v ERROR | $LAST_LINE`
  231. mdbg "is_user: user counter=$CNT"
  232. if [ "$CNT" = "0" ] ; then
  233. false
  234. else
  235. true
  236. fi
  237. }
  238.  
  239.  
  240. # params: table, column, value
  241. # output: false if exists, true otherwise
  242. is_value_in_db() {
  243. TABLE=$1
  244. COL=$2
  245. VALUE=$3
  246.  
  247. QUERY="select count(*) from $TABLE where $COL='$VALUE';"
  248. CNT=`$DBCMD "$QUERY" "$DBRAWPARAMS" | $EGREP -v ERROR | $LAST_LINE`
  249. mdbg "is_value_in_db: counter=$CNT"
  250. if [ "$CNT" = "0" ] ; then
  251. false
  252. else
  253. true
  254. fi
  255. }
  256.  
  257. #
  258. ##### ------------------------------------------------ #####
  259. ### ACL Management
  260. #
  261. acl() {
  262. require_dbengine
  263. case $1 in
  264. show)
  265. if [ $# -eq 2 ] ; then
  266. is_user $2
  267. if [ $? -ne 0 ] ; then
  268. mecho "Non-existent user '$2'. Still proceeding? [Y|N] "
  269. read answer
  270. if [ $answer = "y" -o $answer = "Y" ] ; then
  271. minfo "Proceeding with non-local user"
  272. else
  273. exit 1
  274. fi
  275. fi
  276. set_user $2
  277. CLAUSE=" WHERE $ACL_USER_COLUMN='$OSIPSUSER' AND \
  278. $ACL_DOMAIN_COLUMN='$OSIPSDOMAIN' "
  279. elif [ $# -ne 1 ] ; then
  280. usage_acl
  281. exit 1
  282. fi
  283. QUERY="select * FROM $ACL_TABLE $CLAUSE ; "
  284. $DBCMD "$QUERY"
  285.  
  286. ;;
  287.  
  288. grant)
  289. if [ $# -lt 3 ] ; then
  290. usage
  291. exit 1
  292. fi
  293. is_user $2
  294. if [ $? -ne 0 ] ; then
  295. mecho "Non-existent user '$2'. Still proceeding? [Y|N] "
  296. read answer
  297. if [ $answer = "y" -o $answer = "Y" ] ; then
  298. minfo "Proceeding with non-local user"
  299. else
  300. exit 1
  301. fi
  302. fi
  303. set_user $2
  304. shift 2
  305. acl_inserted=0
  306. while [ $# -gt 0 ] ; do
  307.  
  308. if [ $VERIFY_ACL -eq 1 ] ; then
  309. found=0
  310. for i in $ACL_GROUPS ; do
  311. if [ "$1" = "$i" ] ; then
  312. found=1
  313. break
  314. fi
  315. done
  316. if [ $found -eq 0 ] ; then
  317. mwarn "Invalid privilege: acl '$1' ignored"
  318. shift
  319. continue
  320. fi
  321. fi
  322.  
  323. QUERY="insert into $ACL_TABLE ($ACL_USER_COLUMN,\
  324. $ACL_GROUP_COLUMN,$ACL_MODIFIED_COLUMN,$ACL_DOMAIN_COLUMN ) values \
  325. ('$OSIPSUSER','$1', $now, '$OSIPSDOMAIN' );"
  326. $DBCMD "$QUERY"
  327. if [ $? -ne 0 ] ; then
  328. merr "acl - SQL Error"
  329. exit 1
  330. fi
  331. acl_inserted=1
  332. shift
  333. done
  334.  
  335. if [ $acl_inserted -eq 1 ] ; then
  336. $0 acl show "$OSIPSUSER@$OSIPSDOMAIN"
  337. fi
  338.  
  339. ;;
  340.  
  341. revoke)
  342. if [ $# -eq 3 ] ; then
  343. CLAUSE=" and $ACL_GROUP_COLUMN='$3' "
  344. elif [ $# -ne 2 ] ; then
  345. merr "acl - wrong number of parameters"
  346. usage_acl
  347. exit 1
  348. fi
  349.  
  350. set_user $2
  351.  
  352. QUERY="delete from $ACL_TABLE where \
  353. $ACL_TABLE.$ACL_USER_COLUMN='$OSIPSUSER' AND $ACL_DOMAIN_COLUMN='$OSIPSDOMAIN' \
  354. $CLAUSE;"
  355. $DBCMD "$QUERY"
  356.  
  357. $0 acl show "$2"
  358.  
  359. ;;
  360.  
  361. *)
  362. merr "acl - invalid commad '$1'"
  363. usage_acl
  364. exit 1
  365. ;;
  366. esac
  367. }
  368.  
  369.  
  370. #
  371. ##### ------------------------------------------------ #####
  372. ### alias management
  373. #
  374. check_db_alias() {
  375. require_dbengine
  376.  
  377. ALIAS_DB_EXISTS=0
  378.  
  379. QUERY="select count(*) from $DA_TABLE where $DA_ALIAS_USER_COLUMN='$1' \
  380. and $DA_ALIAS_DOMAIN_COLUMN='$2';"
  381. CNT=`$DBCMD "$QUERY" | $EGREP -v ERROR | $LAST_LINE`
  382. mdbg "check_db_alias: alias counter=$CNT"
  383. if [ "$CNT" = "0" ] ; then
  384. ALIAS_DB_EXISTS=0
  385. else
  386. ALIAS_DB_EXISTS=1
  387. fi
  388. }
  389.  
  390. #
  391. # check for alias duplicates
  392. # params: user domain
  393. # output: false if exists, true otherwise
  394. check_alias() {
  395. ALIAS_EXISTS=0
  396.  
  397. if [ $ENABLE_ALIASES -eq 1 ] ; then
  398. check_db_alias "$1" "$2"
  399. if [ $ALIAS_DB_EXISTS -eq 0 ] ; then
  400. ALIAS_EXISTS=0
  401. else
  402. ALIAS_EXISTS=1
  403. fi
  404. fi
  405. }
  406.  
  407. # db-based aliases
  408. alias_db() {
  409. if [ $# -lt 2 ] ; then
  410. merr "alias_db - too few parameters"
  411. echo
  412. usage_alias_db
  413. exit 1
  414. fi
  415.  
  416. require_dbengine
  417.  
  418. shift
  419.  
  420. case $1 in
  421. list)
  422. if [ $# -eq 2 ] ; then
  423. # print aliases for user
  424. check_aor "$2"
  425. if [ $? -ne 0 ] ; then
  426. merr "alias_db - <$2> is not a valid AoR (user@domain)"
  427. exit 1
  428. fi
  429.  
  430. set_user $2
  431.  
  432. CLAUSE="WHERE $DA_USER_COLUMN='$OSIPSUSER' AND \
  433. $DA_DOMAIN_COLUMN='$OSIPSDOMAIN'"
  434. mecho "Dumping aliases for user=<$2>"
  435. echo
  436. if [ $DBENGINE = "MYSQL" ] ; then
  437. QUERY="SELECT CONCAT($DA_ALIAS_USER_COLUMN,\
  438. '@',$DA_ALIAS_DOMAIN_COLUMN) AS ALIAS FROM $DA_TABLE $CLAUSE;"
  439. elif [ $DBENGINE = "PGSQL" ] ; then
  440. QUERY="SELECT ($DA_ALIAS_USER_COLUMN || \
  441. '@' || $DA_ALIAS_DOMAIN_COLUMN) AS ALIAS FROM $DA_TABLE $CLAUSE;"
  442. fi
  443.  
  444. mecho "Dumping aliases for user=<$2>"
  445. echo
  446.  
  447. $DBCMD "$QUERY"
  448. # | $AWK 'BEGIN {line=0;}
  449. # /^\+/ { next }
  450. # { if(line==0) print "ALIASES";
  451. # else print line ")\t" $1 "@" $2;
  452. # line++; }'
  453. elif [ $# -eq 1 ] ; then
  454. mecho "Dumping all aliases may take long: do you want to proceed? [Y|N] "
  455. read answer
  456. if [ $answer = "y" -o $answer = "Y" ] ; then
  457. mecho "Dumping all aliases..."
  458. echo
  459. else
  460. exit 1
  461. fi
  462. QUERY="SELECT $DA_ALIAS_USER_COLUMN, $DA_ALIAS_DOMAIN_COLUMN,\
  463. $DA_USER_COLUMN, $DA_DOMAIN_COLUMN FROM $DA_TABLE;"
  464. $DBCMD "$QUERY"
  465. # | $AWK 'BEGIN {line=0;}
  466. # /^\+/ { next }
  467. # { line++;
  468. # if(line==1) print "SIP-ID \tALIAS\n";
  469. # else print $3 "@" $4 "\t" $1 "@" $2 }'
  470. else
  471. merr "alias_db - wrong number of params for command [list]"
  472. echo
  473. usage_alias_db
  474. exit 1
  475. fi
  476.  
  477. exit $?
  478. ;;
  479. show)
  480. if [ $# -ne 2 ] ; then
  481. merr "alias_db - wrong number of params for command [show]"
  482. usage_alias_db
  483. exit 1
  484. fi
  485.  
  486. check_aor "$2"
  487. if [ $? -ne 0 ] ; then
  488. merr "alias_db - $2 is not a valid AoR (user@domain)"
  489. exit 1
  490. fi
  491.  
  492. set_user $2
  493.  
  494. CLAUSE="WHERE $DA_ALIAS_USER_COLUMN='$OSIPSUSER' AND \
  495. $DA_ALIAS_DOMAIN_COLUMN='$OSIPSDOMAIN'"
  496. if [ $DBENGINE = "MYSQL" ] ; then
  497. QUERY="SELECT CONCAT($DA_USER_COLUMN,'@',$DA_DOMAIN_COLUMN) \
  498. AS 'SIP-ID' FROM $DA_TABLE $CLAUSE ; "
  499. elif [ $DBENGINE = "PGSQL" ] ; then
  500. QUERY="SELECT ($DA_USER_COLUMN || '@' || $DA_DOMAIN_COLUMN) \
  501. AS 'SIP-ID' FROM $DA_TABLE $CLAUSE ; "
  502. fi
  503.  
  504. $DBCMD "$QUERY"
  505. #TMP_UUID=`sql_ro_query "$QUERY" | $AWK 'BEGIN {line=0;}
  506. # /^\+/ { next }
  507. # { line++;
  508. # if(line==2) print $1 "@" $2;}'`
  509. #
  510. #if [ "$TMP_UUID" = "" ] ; then
  511. # mecho "non-existent alias <$2>"
  512. # exit 1
  513. #fi
  514. #
  515. #echo "Details for alias <$2>"
  516. #echo
  517. #echo "SIP-ID: $TMP_UUID"
  518. #echo
  519. #exit $?
  520. ;;
  521. add)
  522. if [ $# -ne 3 ] ; then
  523. usage_alias_db
  524. exit 1
  525. fi
  526. shift
  527. check_aor "$1"
  528. if [ $? -ne 0 ] ; then
  529. err "alias_db - $1 is not a valid AoR (user@domain)"
  530. exit 1
  531. fi
  532.  
  533. check_aor "$2"
  534. if [ $? -ne 0 ] ; then
  535. err "alias_db - $2 is not a valid AoR (user@domain)"
  536. exit 1
  537. fi
  538.  
  539. set_user $1
  540. TMP_OSIPSUSER=$OSIPSUSER
  541. TMP_OSIPSDOMAIN=$OSIPSDOMAIN
  542. set_user $2
  543.  
  544. if [ $DBENGINE = "MYSQL" ] ; then
  545. if is_value_in_db $DA_TABLE "concat($DA_ALIAS_USER_COLUMN,$DA_ALIAS_DOMAIN_COLUMN)" "$TMP_OSIPSUSER$TMP_OSIPSDOMAIN"; then
  546. minfo "$TMP_OSIPSUSER alias already in $DA_TABLE table"
  547. exit 0
  548. fi
  549. elif [ $DBENGINE = "PGSQL" ] ; then
  550. if is_value_in_db $DA_TABLE "$DA_ALIAS_USER_COLUMN || $DA_ALIAS_DOMAIN_COLUMN" "$TMP_OSIPSUSER$TMP_OSIPSDOMAIN"; then
  551. minfo "$TMP_OSIPSUSER alias already in $DA_TABLE table"
  552. exit 0
  553. fi
  554. fi
  555.  
  556. QUERY="INSERT INTO $DA_TABLE ($DA_USER_COLUMN,$DA_DOMAIN_COLUMN,\
  557. $DA_ALIAS_USER_COLUMN,$DA_ALIAS_DOMAIN_COLUMN) VALUES (\
  558. '$OSIPSUSER','$OSIPSDOMAIN','$TMP_OSIPSUSER','$TMP_OSIPSDOMAIN' );"
  559. $DBCMD "$QUERY"
  560. if [ $? -ne 0 ] ; then
  561. merr "alias_db - SQL Error"
  562. exit 1
  563. fi
  564.  
  565. exit $?
  566. ;;
  567. rm)
  568. if [ $# -ne 2 ] ; then
  569. merr "alias_db - wrong numbers of parameters"
  570. usage_alias_db
  571. exit 1
  572. fi
  573.  
  574. shift
  575.  
  576. check_aor "$1"
  577. if [ $? -ne 0 ] ; then
  578. merr "alias_db - $1 is not a valid URI"
  579. exit 1
  580. fi
  581.  
  582. set_user $1
  583. CLAUSE="WHERE $DA_ALIAS_USER_COLUMN='$OSIPSUSER' AND \
  584. $DA_ALIAS_DOMAIN_COLUMN='$OSIPSDOMAIN'"
  585. QUERY="DELETE FROM $DA_TABLE $CLAUSE;"
  586. $DBCMD "$QUERY"
  587. if [ $? -ne 0 ] ; then
  588. merr "alias_db - SQL Error"
  589. exit 1
  590. fi
  591.  
  592. exit $?
  593. ;;
  594.  
  595. help)
  596. usage_alias_db "alone"
  597. ;;
  598.  
  599. *)
  600. usage_alias_db
  601. exit 1
  602. ;;
  603. esac
  604. } # end db-aliases
  605.  
  606.  
  607. #
  608. ##### ------------------------------------------------ #####
  609. ### AVP management
  610. #
  611. # avp list [-T table] [-u <sip-id|uuid>]
  612. # [-a attribute] [-v value] [-t type] ... list AVPs
  613. # avp add [-T table] <sip-id|uuid>
  614. # <attribute> <type> <value> ............ add AVP (*)
  615. # avp rm [-T table] [-u <sip-id|uuid>]
  616. # [-a attribute] [-v value] [-t type] ... remove AVP (*)
  617.  
  618. avpops() {
  619. require_dbengine
  620. if [ $# -lt 2 ] ; then
  621. merr "avp - too few parameters"
  622. minfo "see '$0 avp help'"
  623. exit 1
  624. fi
  625. if [ "$1" = "avp" ] ; then
  626. shift
  627. else
  628. merr "avp - unknown command $1"
  629. minfo "see '$0 avp help'"
  630. exit 1
  631. fi
  632.  
  633. case $1 in
  634. list)
  635. shift
  636. CLAUSE=""
  637. while [ $# -ne 0 ]
  638. do
  639. TMP_ARG=$1
  640. shift
  641. case $TMP_ARG in
  642. -T)
  643. if [ -z "$1" ] ; then
  644. merr "avp list - table name parameter missing"
  645. exit 1
  646. fi
  647. AVP_TABLE=$1
  648. ;;
  649. -u)
  650. if [ -z "$1" ] ; then
  651. merr "avp list - user id or uuid parameter missing"
  652. exit 1
  653. fi
  654. is_aor "$1"
  655. if [ $? -eq 0 ] ; then
  656. set_user $1
  657. if [ "$CLAUSE" = "" ] ; then
  658. CLAUSE=" WHERE $AVP_USER_COLUMN='$OSIPSUSER' \
  659. AND $AVP_DOMAIN_COLUMN='$OSIPSDOMAIN'"
  660. else
  661. CLAUSE="$CLAUSE AND \
  662. $AVP_USER_COLUMN='$OSIPSUSER' AND $AVP_DOMAIN_COLUMN='$OSIPSDOMAIN'"
  663. fi
  664. else
  665. if [ "$CLAUSE" = "" ] ; then
  666. CLAUSE=" WHERE $AVP_UUID_COLUMN='$1'"
  667. else
  668. CLAUSE="$CLAUSE AND $AVP_UUID_COLUMN='$1'"
  669. fi
  670. fi
  671. ;;
  672. -a)
  673. if [ -z "$1" ] ; then
  674. merr "avp list - attribute name parameter missing"
  675. exit 1
  676. fi
  677. if [ "$CLAUSE" = "" ] ; then
  678. CLAUSE=" WHERE $AVP_ATTRIBUTE_COLUMN='$1'"
  679. else
  680. CLAUSE="$CLAUSE AND $AVP_ATTRIBUTE_COLUMN='$1'"
  681. fi
  682. ;;
  683. -v)
  684. if [ -z "$1" ] ; then
  685. merr "avp list - value parameter missing"
  686. exit 1
  687. fi
  688. if [ "$CLAUSE" = "" ] ; then
  689. CLAUSE=" WHERE $AVP_VALUE_COLUMN='$1'"
  690. else
  691. CLAUSE="$CLAUSE AND $AVP_VALUE_COLUMN='$1'"
  692. fi
  693. ;;
  694. -t)
  695. if [ -z "$1" ] ; then
  696. merr "avp list - type parameter missing"
  697. exit 1
  698. fi
  699. if [ "$CLAUSE" = "" ] ; then
  700. CLAUSE=" WHERE $AVP_TYPE_COLUMN='$1'"
  701. else
  702. CLAUSE="$CLAUSE AND $AVP_TYPE_COLUMN='$1'"
  703. fi
  704. ;;
  705. *)
  706. merr "avp list - unknown parameter $1"
  707. exit 1
  708. ;;
  709. esac
  710. shift
  711. done
  712.  
  713. QUERY="SELECT $AVP_UUID_COLUMN,$AVP_USER_COLUMN,\
  714. $AVP_DOMAIN_COLUMN,$AVP_ATTRIBUTE_COLUMN,$AVP_TYPE_COLUMN,$AVP_VALUE_COLUMN \
  715. FROM $AVP_TABLE $CLAUSE;"
  716. mdbg "Query: $QUERY"
  717. mecho "Dumping AVPs"
  718. echo
  719. $DBCMD "$QUERY"
  720. # | $AWK 'BEGIN {line=0;}
  721. # /^\+/ { next }
  722. # { if(line==0) print "## UUID \tUserID \tAttribute \tType \tValue\n";
  723. # else {
  724. # ORS_BAK=ORS;
  725. # ORS="";
  726. # print line ") " $1 $2 "@" $3 "\t" $4 "\t\"" $5;
  727. # for (i=6;i<=NF;++i) print FS $i;
  728. # ORS=ORS_BAK;
  729. # print "\"";
  730. # }
  731. # line++;
  732. # }'
  733.  
  734. exit $?
  735. ;;
  736.  
  737. add)
  738. shift
  739. if [ $# -ne 4 ] ; then
  740. if [ $# -ne 6 ] ; then
  741. merr "avp add - bad number of parameters"
  742. exit 1
  743. fi
  744. fi
  745. if [ $# -eq 6 ] ; then
  746. if [ "$1" = "-T" ] ; then
  747. AVP_TABLE=$2
  748. shift
  749. shift
  750. else
  751. mecho "avp add - unknown parameter '$1'"
  752. exit 1
  753. fi
  754. fi
  755.  
  756. is_aor "$1"
  757. if [ $? -eq 0 ] ; then
  758. set_user $1
  759. else
  760. AVP_UUID=$1
  761. fi
  762.  
  763. QUERY="INSERT INTO $AVP_TABLE \
  764. ($AVP_UUID_COLUMN,$AVP_USER_COLUMN,$AVP_DOMAIN_COLUMN,$AVP_ATTRIBUTE_COLUMN,\
  765. $AVP_TYPE_COLUMN,$AVP_VALUE_COLUMN,$AVP_MODIFIED_COLUMN) \
  766. VALUES ('$AVP_UUID','$OSIPSUSER','$OSIPSDOMAIN','$2',$3,'$4',NOW());"
  767. # echo "Query: $QUERY"
  768. $DBCMD "$QUERY"
  769. if [ $? -ne 0 ] ; then
  770. merr "avp add - SQL Error"
  771. exit 1
  772. else
  773. echo
  774. mecho "avp add - attribute added"
  775. fi
  776.  
  777. exit $?
  778. ;;
  779.  
  780. rm)
  781. shift
  782. CLAUSE=""
  783. while [ $# -ne 0 ]
  784. do
  785. TMP_ARG=$1
  786. shift
  787. case $TMP_ARG in
  788. -T)
  789. if [ -z "$1" ] ; then
  790. merr "avp rm - table name parameter missing"
  791. exit 1
  792. fi
  793. AVP_TABLE=$1
  794. ;;
  795. -u)
  796. if [ -z "$1" ] ; then
  797. merr "avp rm - user id or uuid parameter missing"
  798. exit 1
  799. fi
  800. is_aor "$1"
  801. if [ $? -eq 0 ] ; then
  802. set_user $1
  803. if [ "$CLAUSE" = "" ] ; then
  804. CLAUSE="WHERE $AVP_USER_COLUMN='$OSIPSUSER' \
  805. AND $AVP_DOMAIN_COLUMN='$OSIPSDOMAIN'"
  806. else
  807. CLAUSE="$CLAUSE AND \
  808. $AVP_USER_COLUMN='$OSIPSUSER' AND $AVP_DOMAIN_COLUMN='$OSIPSDOMAIN'"
  809. fi
  810. else
  811. if [ "$CLAUSE" = "" ] ; then
  812. CLAUSE="WHERE $AVP_UUID_COLUMN='$1'"
  813. else
  814. CLAUSE="$CLAUSE AND $AVP_UUID_COLUMN='$1'"
  815. fi
  816. fi
  817. ;;
  818. -a)
  819. if [ -z "$1" ] ; then
  820. merr "avp rm - attribute name parameter missing"
  821. exit 1
  822. fi
  823. if [ "$CLAUSE" = "" ] ; then
  824. CLAUSE="WHERE $AVP_ATTRIBUTE_COLUMN='$1'"
  825. else
  826. CLAUSE="$CLAUSE AND $AVP_ATTRIBUTE_COLUMN='$1'"
  827. fi
  828. ;;
  829. -v)
  830. if [ -z "$1" ] ; then
  831. merr "avp rm - value parameter missing"
  832. exit 1
  833. fi
  834. if [ "$CLAUSE" = "" ] ; then
  835. CLAUSE="WHERE $AVP_VALUE_COLUMN='$1'"
  836. else
  837. CLAUSE="$CLAUSE AND $AVP_VALUE_COLUMN='$1'"
  838. fi
  839. ;;
  840. -t)
  841. if [ -z "$1" ] ; then
  842. merr "avp rm - type parameter missing"
  843. exit 1
  844. fi
  845. if [ "$CLAUSE" = "" ] ; then
  846. CLAUSE="WHERE $AVP_TYPE_COLUMN='$1'"
  847. else
  848. CLAUSE="$CLAUSE AND $AVP_TYPE_COLUMN='$1'"
  849. fi
  850. ;;
  851. *)
  852. merr "avp rm - unknown parameter $1"
  853. exit 1
  854. ;;
  855. esac
  856. shift
  857. done
  858. QUERY="DELETE FROM $AVP_TABLE $CLAUSE;"
  859. mdbg "Query: $QUERY"
  860. $DBCMD "$QUERY"
  861. if [ $? -ne 0 ] ; then
  862. merr "avp rm - SQL Error"
  863. exit 1
  864. else
  865. echo
  866. mecho "avp rm - AVP(s) deleted"
  867. fi
  868.  
  869. exit $?
  870. ;;
  871.  
  872. help)
  873. usage_avp
  874. ;;
  875.  
  876. *)
  877. merr "avp - unknown command"
  878. usage
  879. exit 1
  880. ;;
  881. esac
  882. } # end avpops()
  883.  
  884. #
  885. ##### ------------------------------------------------ #####
  886. ### cisco restart
  887. #
  888. cisco_restart() {
  889. require_ctlengine
  890. myhost=`get_my_host`
  891. RET=`$CTLCMD t_uac_dlg NOTIFY "$1" "." \
  892. "From: sip:daemon@$myhost" \
  893. "To: <$1>" "Event: check-sync" \
  894. "Contact: <sip:daemon@!!>" "." "." |
  895. head -1 `
  896. print_status $RET
  897. }
  898.  
  899. #
  900. ##### ------------------------------------------------ #####
  901. ### DB operations
  902. #
  903. db_ops() {
  904. require_dbengine
  905. case $1 in
  906. exec|query)
  907. shift
  908. if [ $# -ne 1 ] ; then
  909. merr "missing query parameter"
  910. exit 1
  911. fi
  912. $DBCMD "$1"
  913. ;;
  914. roexec|roquery)
  915. shift
  916. if [ $# -ne 1 ] ; then
  917. merr "missing query parameter"
  918. exit 1
  919. fi
  920. $DBCMD "$1"
  921. ;;
  922. run)
  923. shift
  924. if [ $# -ne 1 ] ; then
  925. merr "missing query parameter"
  926. exit 1
  927. fi
  928. eval QUERY=\$$1
  929. if [ -z "$QUERY" ] ; then
  930. merr "missing query value"
  931. exit 1
  932. fi
  933. $DBCMD "$QUERY"
  934. ;;
  935. rorun)
  936. shift
  937. if [ $# -ne 1 ] ; then
  938. merr "missing query parameter"
  939. exit 1
  940. fi
  941. eval QUERY=\$$1
  942. if [ -z "$QUERY" ] ; then
  943. merr "missing query value"
  944. exit 1
  945. fi
  946. $DBCMD "$QUERY"
  947. ;;
  948. show)
  949. shift
  950. if [ $# -ne 1 ] ; then
  951. merr "missing table parameter"
  952. exit 1
  953. fi
  954. QUERY="select * FROM $1;"
  955. $DBCMD "$QUERY"
  956. ;;
  957. *)
  958. usage_db_ops
  959. exit 1
  960. esac
  961. }
  962.  
  963. #
  964. ##### ------------------------------------------------ #####
  965. ### domain management
  966. #
  967. domain() {
  968. case $1 in
  969. reload)
  970. require_ctlengine
  971. $CTLCMD domain_reload
  972. ;;
  973. show)
  974. require_ctlengine
  975. $CTLCMD domain_dump
  976. ;;
  977. showdb)
  978. require_dbengine
  979. QUERY="select * FROM $DOMAIN_TABLE ; "
  980. $DBCMD "$QUERY"
  981. ;;
  982. add)
  983. require_dbengine
  984. shift
  985. if [ $# -ne 1 ] ; then
  986. merr "missing domain parameter"
  987. exit 1
  988. fi
  989. if is_value_in_db $DOMAIN_TABLE $DO_DOMAIN_COLUMN $1; then
  990. minfo "$1 already in $DOMAIN_TABLE table"
  991. exit 0
  992. fi
  993. QUERY="insert into $DOMAIN_TABLE ($DO_DOMAIN_COLUMN, \
  994. $DO_LAST_MODIFIED_COLUMN) VALUES ('$1',$now);"
  995. $DBCMD "$QUERY"
  996. if [ $? -ne 0 ] ; then
  997. merr "domain - SQL Error"
  998. exit 1
  999. fi
  1000. minfo "execute '$0 domain reload' to synchronize cache and database"
  1001. ;;
  1002. rm)
  1003. require_dbengine
  1004. shift
  1005. if [ $# -ne 1 ] ; then
  1006. merr "missing domain parameter"
  1007. exit 1
  1008. fi
  1009. QUERY="delete from $DOMAIN_TABLE where domain='$1';"
  1010. $DBCMD "$QUERY"
  1011. if [ $? -ne 0 ] ; then
  1012. merr "domain - SQL Error"
  1013. exit 1
  1014. fi
  1015. minfo "execute '$0 domain reload' to synchronize cache and database"
  1016. ;;
  1017. *)
  1018. usage_domain
  1019. exit 1
  1020. esac
  1021. }
  1022.  
  1023. #
  1024. ##### ------------------------------------------------ #####
  1025. ### address management
  1026. #
  1027. address() {
  1028. case $1 in
  1029. reload)
  1030. require_ctlengine
  1031. $CTLCMD address_reload
  1032. ;;
  1033. dump)
  1034. require_ctlengine
  1035. $CTLCMD address_dump
  1036. ;;
  1037. show)
  1038. require_dbengine
  1039. QUERY="select * FROM $ADDRESS_TABLE ; "
  1040. $DBCMD "$QUERY"
  1041. ;;
  1042. add)
  1043. require_dbengine
  1044. shift
  1045. if [ $# -lt 5 ] ; then
  1046. usage_address
  1047. exit 1
  1048. fi
  1049. if is_value_in_db $ADDRESS_TABLE ip $2; then
  1050. minfo "$2 already in $ADDRESS_TABLE table"
  1051. exit 0
  1052. fi
  1053. case $5 in
  1054. any|udp|tcp|tls|sctp|none)
  1055. ;;
  1056. *)
  1057. merr "unknown protocol"
  1058. exit 1
  1059. esac
  1060.  
  1061. QUERY="insert into $ADDRESS_TABLE \
  1062. ($ADDRESS_GRP_COLUMN, $ADDRESS_IP_COLUMN, $ADDRESS_MASK_COLUMN, \
  1063. $ADDRESS_PORT_COLUMN, $ADDRESS_PROTO_COLUMN) \
  1064. VALUES ('$1', '$2', '$3', '$4', '$5');"
  1065.  
  1066. CONTEXT_INFO=""
  1067. if [ ! -z "$6" ]; then
  1068. CONTEXT_INFO="$6"
  1069.  
  1070. QUERY="insert into $ADDRESS_TABLE \
  1071. ($ADDRESS_GRP_COLUMN, $ADDRESS_IP_COLUMN, $ADDRESS_MASK_COLUMN, \
  1072. $ADDRESS_PORT_COLUMN, $ADDRESS_PROTO_COLUMN, $ADDRESS_CONTEXT_INFO_COLUMN) \
  1073. VALUES ('$1', '$2', '$3', '$4', '$5', '$CONTEXT_INFO');"
  1074.  
  1075. PATTERN=""
  1076. if [ ! -z "$7" ]; then
  1077. PATTERN="$7"
  1078.  
  1079. QUERY="insert into $ADDRESS_TABLE \
  1080. ($ADDRESS_GRP_COLUMN, $ADDRESS_IP_COLUMN, $ADDRESS_MASK_COLUMN, \
  1081. $ADDRESS_PORT_COLUMN, $ADDRESS_PROTO_COLUMN, $ADDRESS_CONTEXT_INFO_COLUMN, $ADDRESS_PATTERN_COLUMN) \
  1082. VALUES ('$1', '$2', '$3', '$4', '$5', '$CONTEXT_INFO', '$PATTERN');"
  1083. fi
  1084. fi
  1085.  
  1086. $DBCMD "$QUERY"
  1087. if [ $? -ne 0 ] ; then
  1088. merr "address - SQL Error"
  1089. exit 1
  1090. fi
  1091. minfo "execute '$0 address reload' to synchronize cache and database"
  1092. ;;
  1093. rm)
  1094. require_dbengine
  1095. shift
  1096. if [ $# -ne 4 ] ; then
  1097. usage_address
  1098. exit 1
  1099. fi
  1100. QUERY="delete from $ADDRESS_TABLE where $ADDRESS_GRP_COLUMN='$1' \
  1101. AND $ADDRESS_IP_COLUMN='$2' AND $ADDRESS_MASK_COLUMN='$3'\
  1102. AND $ADDRESS_PORT_COLUMN='$4';"
  1103. $DBCMD "$QUERY"
  1104. if [ $? -ne 0 ] ; then
  1105. merr "address - SQL Error"
  1106. exit 1
  1107. fi
  1108. minfo "execute '$0 address reload' to synchronize cache and database"
  1109. ;;
  1110. *)
  1111. usage_address
  1112. exit 1
  1113. esac
  1114. }
  1115.  
  1116. #
  1117. ##### ------------------------------------------------ #####
  1118. ### CARRIERROUTE management
  1119. #
  1120. cr() {
  1121. require_dbengine
  1122. require_ctlengine
  1123. case $1 in
  1124. show)
  1125. mecho "cr routing tree"
  1126. QUERY="select * FROM $ROUTE_TREE_TABLE ORDER BY $CARRIERROUTE_ROUTE_TREE_PREFIX_COLUMN; "
  1127. $DBCMD "$QUERY"
  1128. mecho "cr routes"
  1129. QUERY="select * FROM $CARRIERROUTE_TABLE ORDER BY \
  1130. $CARRIERROUTE_CARRIERROUTE_CARRIER_COLUMN,\
  1131. $CARRIERROUTE_CARRIERROUTE_SCAN_PREFIX_COLUMN,\
  1132. $CARRIERROUTE_CARRIERROUTE_DOMAIN_COLUMN,\
  1133. $CARRIERROUTE_CARRIERROUTE_PROB_COLUMN;"
  1134. $DBCMD "$QUERY"
  1135. ;;
  1136. reload)
  1137. $CTLCMD cr_reload_routes
  1138. ;;
  1139.  
  1140. dump)
  1141. $CTLCMD cr_dump
  1142. ;;
  1143.  
  1144. addrt)
  1145. shift
  1146. if [ $# -ne 2 ] ; then
  1147. merr "cr - missing route_tree"
  1148. exit 1
  1149. fi
  1150. QUERY="insert into $ROUTE_TREE_TABLE
  1151. ( $CARRIERROUTE_ROUTE_TREE_PREFIX_COLUMN, \
  1152. $CARRIERROUTE_ROUTE_TREE_CARRIER_COLUMN) \
  1153. VALUES ($1, '$2');"
  1154. $DBCMD "$QUERY"
  1155. if [ $? -ne 0 ] ; then
  1156. merr "cr - SQL Error"
  1157. exit 1
  1158. fi
  1159. minfo "execute '$0 cr reload' to synchronize cache and database"
  1160. ;;
  1161.  
  1162. rmrt)
  1163. shift
  1164. if [ $# -ne 1 ] ; then
  1165. merr "cr - missing route_tree to be removed"
  1166. exit 1
  1167. fi
  1168. QUERY="delete from $ROUTE_TREE_TABLE where $CARRIERROUTE_ROUTE_TREE_CARRIER_COLUMN='$1';"
  1169. $DBCMD "$QUERY"
  1170. if [ $? -ne 0 ] ; then
  1171. merr "cr - SQL Error"
  1172. exit 1
  1173. fi
  1174. minfo "execute '$0 cr reload' to synchronize cache and database"
  1175. ;;
  1176.  
  1177. addcarrier)
  1178. shift
  1179. if [ $# -lt 4 ] ; then
  1180. merr "cr - too few parameters"
  1181. exit 1
  1182. fi
  1183. PROB=1
  1184. STRIP=0
  1185. REWRITE_PREFIX=
  1186. REWRITE_SUFFIX=
  1187. COMMENT=
  1188. FLAGS=0
  1189. MASK=0
  1190. if [ $# -gt 4 ] ; then
  1191. PROB=$5
  1192. if [ $# -gt 5 ] ; then
  1193. STRIP=$6
  1194. if [ $# -gt 6 ] ; then
  1195. REWRITE_PREFIX=$7
  1196. if [ $# -gt 7 ] ; then
  1197. REWRITE_SUFFIX=$8
  1198. if [ $# -gt 8 ] ; then
  1199. COMMENT=$9
  1200. if [ $# -gt 9 ] ; then
  1201. FLAGS=${10}
  1202. if [ $# -gt 10 ] ; then
  1203. MASK=${11}
  1204. fi
  1205. fi
  1206. fi
  1207. fi
  1208. fi
  1209. fi
  1210. fi
  1211. CARRIER=$1
  1212. SCAN_PREFIX=$2
  1213. DOMAIN=$3
  1214. REWRITE_HOST=$4
  1215. echo $FLAGS
  1216. echo $MASK
  1217. QUERY="insert into $CARRIERROUTE_TABLE \
  1218. ( $CARRIERROUTE_CARRIERROUTE_CARRIER_COLUMN, \
  1219. $CARRIERROUTE_CARRIERROUTE_SCAN_PREFIX_COLUMN, \
  1220. $CARRIERROUTE_CARRIERROUTE_DOMAIN_COLUMN, \
  1221. $CARRIERROUTE_CARRIERROUTE_PROB_COLUMN, \
  1222. $CARRIERROUTE_CARRIERROUTE_STRIP_COLUMN, \
  1223. $CARRIERROUTE_CARRIERROUTE_REWRITE_HOST_COLUMN, \
  1224. $CARRIERROUTE_CARRIERROUTE_REWRITE_PREFIX_COLUMN, \
  1225. $CARRIERROUTE_CARRIERROUTE_REWRITE_SUFFIX_COLUMN, \
  1226. $CARRIERROUTE_CARRIERROUTE_COMMENT_COLUMN, \
  1227. $CARRIERROUTE_CARRIERROUTE_FLAGS_COLUMN, \
  1228. $CARRIERROUTE_CARRIERROUTE_MASK_COLUMN ) \
  1229. VALUES ($CARRIER, '$SCAN_PREFIX', '$DOMAIN', $PROB, $STRIP, \
  1230. '$REWRITE_HOST', '$REWRITE_PREFIX', '$REWRITE_SUFFIX', '$COMMENT', \
  1231. $FLAGS, $MASK);"
  1232. $DBCMD "$QUERY"
  1233. if [ $? -ne 0 ] ; then
  1234. merr "cr - SQL Error"
  1235. exit 1
  1236. fi
  1237. minfo "execute '$0 cr reload' to synchronize cache and database"
  1238. ;;
  1239.  
  1240. rmcarrier)
  1241. shift
  1242. if [ $# -ne 3 ] ; then
  1243. merr "cr - too few parameters"
  1244. exit 1
  1245. fi
  1246. CARRIER=$1
  1247. SCAN_PREFIX=$2
  1248. DOMAIN=$3
  1249. QUERY="delete from $CARRIERROUTE_TABLE where $CARRIERROUTE_CARRIERROUTE_CARRIER_COLUMN='$CARRIER' AND \
  1250. $CARRIERROUTE_CARRIERROUTE_SCAN_PREFIX_COLUMN='$SCAN_PREFIX' AND \
  1251. $CARRIERROUTE_CARRIERROUTE_DOMAIN_COLUMN=$DOMAIN ;"
  1252. $DBCMD "$QUERY"
  1253. if [ $? -ne 0 ] ; then
  1254. merr "cr - SQL Error"
  1255. exit 1
  1256. fi
  1257. minfo "execute '$0 cr reload' to synchronize cache and database"
  1258. ;;
  1259.  
  1260. *)
  1261. usage_cr
  1262. exit 1
  1263. esac
  1264. }
  1265.  
  1266.  
  1267. #
  1268. ##### ------------------------------------------------ #####
  1269. ### DISPATCHER management
  1270. #
  1271. dispatcher() {
  1272. require_dbengine
  1273. require_ctlengine
  1274. case $1 in
  1275. show)
  1276. mecho "dispatcher gateways"
  1277. QUERY="select * FROM $DISPATCHER_TABLE ORDER BY $DISPATCHER_SETID_COLUMN; "
  1278. $DBCMD "$QUERY"
  1279. ;;
  1280. addgw)
  1281. shift
  1282. if [ $# -lt 6 ] ; then
  1283. merr "too few parameters"
  1284. usage_dispatcher
  1285. exit 1
  1286. fi
  1287.  
  1288. if [ $# -gt 6 ] ; then
  1289. DISPATCHER_DESCRIPTION=$7
  1290. else
  1291. DISPATCHER_DESCRIPTION=""
  1292. fi
  1293.  
  1294. DISPATCHER_SETID=$1
  1295. DISPATCHER_DESTINATION=$2
  1296. DISPATCHER_SOCKET=$3
  1297. DISPATCHER_STATE=$4
  1298. DISPATCHER_WEIGHT=$5
  1299. DISPATCHER_ATTRS=$6
  1300.  
  1301. QUERY="insert into $DISPATCHER_TABLE ($DISPATCHER_SETID_COLUMN, $DISPATCHER_DESTINATION_COLUMN, $DISPATCHER_SOCKET_COLUMN, $DISPATCHER_STATE_COLUMN, $DISPATCHER_WEIGHT_COLUMN, $DISPATCHER_ATTRS_COLUMN, $DISPATCHER_DESCRIPTION_COLUMN) VALUES ($DISPATCHER_SETID, '$DISPATCHER_DESTINATION', '$DISPATCHER_SOCKET', $DISPATCHER_STATE, '$DISPATCHER_WEIGHT', '$DISPATCHER_ATTRS', '$DISPATCHER_DESCRIPTION');"
  1302.  
  1303. $DBCMD "$QUERY"
  1304.  
  1305. if [ $? -ne 0 ] ; then
  1306. merr "dispatcher - SQL Error"
  1307. exit 1
  1308. fi
  1309.  
  1310. $CTLCMD ds_reload
  1311. ;;
  1312. rmgw)
  1313. shift
  1314. if [ $# -ne 1 ] ; then
  1315. merr "missing gateway id to be removed"
  1316. exit 1
  1317. fi
  1318.  
  1319. QUERY="delete from $DISPATCHER_TABLE where $DISPATCHER_ID_COLUMN='$1';"
  1320. $DBCMD "$QUERY"
  1321.  
  1322. if [ $? -ne 0 ] ; then
  1323. merr "dispatcher - SQL Error"
  1324. exit 1
  1325. fi
  1326.  
  1327. $CTLCMD ds_reload
  1328. ;;
  1329. reload)
  1330. $CTLCMD ds_reload
  1331. ;;
  1332.  
  1333. dump)
  1334. $CTLCMD ds_list
  1335. ;;
  1336.  
  1337. *)
  1338. usage_dispatcher
  1339. exit 1
  1340.  
  1341. esac
  1342. }
  1343.  
  1344. dr() {
  1345. require_dbengine
  1346. require_ctlengine
  1347. case $1 in
  1348. show)
  1349. mecho "dr gateways"
  1350. QUERY="select * FROM $DR_GATEWAYS_TABLE ORDER BY $DR_GATEWAYS_GWID_COLUMN; "
  1351. $DBCMD "$QUERY"
  1352. mecho "dr groups"
  1353. QUERY="select * FROM $DR_GROUPS_TABLE ORDER BY $DR_GROUPS_GROUPID_COLUMN; "
  1354. $DBCMD "$QUERY"
  1355. mecho "dr carriers"
  1356. QUERY="select * FROM $DR_CARRIERS_TABLE ORDER BY $DR_CARRIERS_CARRIERID_COLUMN; "
  1357. $DBCMD "$QUERY"
  1358. mecho "dr rules"
  1359. QUERY="select * FROM $DR_RULES_TABLE ORDER BY $DR_RULES_GROUPID_COLUMN; "
  1360. $DBCMD "$QUERY"
  1361. ;;
  1362.  
  1363. addgw)
  1364. shift
  1365. if [ $# -lt 7 ] ; then
  1366. merr "too few parameters"
  1367. usage_dr
  1368. exit 1
  1369. fi
  1370.  
  1371. if [ $# -gt 7 ] ; then
  1372. DR_GATEWAYS_DESCRIPTION=$8
  1373. else
  1374. DR_GATEWAYS_DESCRIPTION=""
  1375. fi
  1376.  
  1377. DR_GATEWAYS_GWID=$1
  1378. DR_GATEWAYS_TYPE=$2
  1379. DR_GATEWAYS_ADDRESS=$3
  1380. DR_GATEWAYS_STRIP=$4
  1381. DR_GATEWAYS_PRI_PREFIX=$5
  1382. DR_GATEWAYS_ATTRS=$6
  1383. DR_GATEWAYS_PROBE_MODE=$7
  1384.  
  1385. QUERY="insert into $DR_GATEWAYS_TABLE \
  1386. ( $DR_GATEWAYS_GWID_COLUMN, $DR_GATEWAYS_TYPE_COLUMN, $DR_GATEWAYS_ADDRESS_COLUMN, $DR_GATEWAYS_STRIP_COLUMN, $DR_GATEWAYS_PRI_PREFIX_COLUMN, $DR_GATEWAYS_ATTRS_COLUMN, $DR_GATEWAYS_PROBE_MODE_COLUMN, $DR_GATEWAYS_DESCRIPTION_COLUMN ) \
  1387. VALUES ('$DR_GATEWAYS_GWID', $DR_GATEWAYS_TYPE, '$DR_GATEWAYS_ADDRESS', $DR_GATEWAYS_STRIP, '$DR_GATEWAYS_PRI_PREFIX', '$DR_GATEWAYS_ATTRS', $DR_GATEWAYS_PROBE_MODE, '$DR_GATEWAYS_DESCRIPTION' );"
  1388. $DBCMD "$QUERY"
  1389.  
  1390. if [ $? -ne 0 ] ; then
  1391. merr "dr - SQL Error"
  1392. exit 1
  1393. fi
  1394.  
  1395. $CTLCMD dr_reload
  1396. ;;
  1397. rmgw)
  1398. shift
  1399. if [ $# -ne 1 ] ; then
  1400. merr "missing gateway id to be removed"
  1401. exit 1
  1402. fi
  1403.  
  1404. QUERY="delete from $DR_GATEWAYS_TABLE where $DR_GATEWAYS_ID_COLUMN='$1';"
  1405. $DBCMD "$QUERY"
  1406.  
  1407. if [ $? -ne 0 ] ; then
  1408. merr "dr - SQL Error"
  1409. exit 1
  1410. fi
  1411.  
  1412. $CTLCMD dr_reload
  1413. ;;
  1414.  
  1415. addcr)
  1416. shift
  1417. if [ $# -lt 4 ] ; then
  1418. merr "too few parameters"
  1419. usage_dr
  1420. exit 1
  1421. fi
  1422.  
  1423. if [ $# -gt 4 ] ; then
  1424. DR_CARRIERS_DESCRIPTION=$5
  1425. else
  1426. DR_CARRIERS_DESCRIPTION=""
  1427. fi
  1428.  
  1429. DR_CARRIERS_CARRIERID=$1
  1430. DR_CARRIERS_GWLIST=$2
  1431. DR_CARRIERS_FLAGS=$3
  1432. DR_CARRIERS_ATTRS=$4
  1433.  
  1434. QUERY="insert into $DR_CARRIERS_TABLE \
  1435. ( $DR_CARRIERS_CARRIERID_COLUMN, $DR_CARRIERS_GWLIST_COLUMN, $DR_CARRIERS_FLAGS_COLUMN, $DR_CARRIERS_ATTRS_COLUMN, $DR_CARRIERS_DESCRIPTION_COLUMN ) \
  1436. VALUES ('$DR_CARRIERS_CARRIERID', '$DR_CARRIERS_GWLIST', $DR_CARRIERS_FLAGS, '$DR_CARRIERS_ATTRS', '$DR_CARRIERS_DESCRIPTION' );"
  1437. mecho "$QUERY"
  1438. $DBCMD "$QUERY"
  1439.  
  1440. if [ $? -ne 0 ] ; then
  1441. merr "dr - SQL Error"
  1442. exit 1
  1443. fi
  1444.  
  1445. $CTLCMD dr_reload
  1446. ;;
  1447. rmcr)
  1448. shift
  1449. if [ $# -ne 1 ] ; then
  1450. merr "missing gateway id to be removed"
  1451. exit 1
  1452. fi
  1453.  
  1454. QUERY="delete from $DR_CARRIERS_TABLE where $DR_CARRIERS_ID_COLUMN='$1';"
  1455. $DBCMD "$QUERY"
  1456.  
  1457. if [ $? -ne 0 ] ; then
  1458. merr "dr - SQL Error"
  1459. exit 1
  1460. fi
  1461.  
  1462. $CTLCMD dr_reload
  1463. ;;
  1464.  
  1465. addgrp)
  1466. shift
  1467. if [ $# -lt 3 ] ; then
  1468. merr "too few parameters"
  1469. usage_dr
  1470. exit 1
  1471. fi
  1472.  
  1473. if [ $# -gt 3 ] ; then
  1474. DR_GROUPS_DESCRIPTION=$4
  1475. else
  1476. DR_GROUPS_DESCRIPTION=""
  1477. fi
  1478.  
  1479. DR_GROUPS_USERNAME=$1
  1480. DR_GROUPS_DOMAIN=$2
  1481. DR_GROUPS_GROUPID=$3
  1482.  
  1483. QUERY="insert into $DR_GROUPS_TABLE \
  1484. ( $DR_GROUPS_USERNAME_COLUMN, $DR_GROUPS_DOMAIN_COLUMN, $DR_GROUPS_GROUPID_COLUMN, $DR_GROUPS_DESCRIPTION_COLUMN ) \
  1485. VALUES ('$DR_GROUPS_USERNAME', '$DR_GROUPS_DOMAIN', $DR_GROUPS_GROUPID, '$DR_GROUPS_DESCRIPTION' );"
  1486. $DBCMD "$QUERY"
  1487.  
  1488. if [ $? -ne 0 ] ; then
  1489. merr "dr - SQL Error"
  1490. exit 1
  1491. fi
  1492.  
  1493. $CTLCMD dr_reload
  1494. ;;
  1495. rmgrp)
  1496. shift
  1497. if [ $# -ne 1 ] ; then
  1498. merr "missing gateway id to be removed"
  1499. exit 1
  1500. fi
  1501.  
  1502. QUERY="delete from $DR_GROUPS_TABLE where $DR_GROUPS_ID_COLUMN='$1';"
  1503. $DBCMD "$QUERY"
  1504.  
  1505. if [ $? -ne 0 ] ; then
  1506. merr "dr - SQL Error"
  1507. exit 1
  1508. fi
  1509.  
  1510. $CTLCMD dr_reload
  1511. ;;
  1512.  
  1513. addrule)
  1514. shift
  1515. if [ $# -lt 7 ] ; then
  1516. merr "too few parameters"
  1517. usage_dr
  1518. exit 1
  1519. fi
  1520.  
  1521. if [ $# -gt 7 ] ; then
  1522. DR_RULES_DESCRIPTION=$8
  1523. else
  1524. DR_RULES_DESCRIPTION=""
  1525. fi
  1526.  
  1527. DR_RULES_GROUPID=$1
  1528. DR_RULES_PREFIX=$2
  1529. DR_RULES_TIMEREC=$3
  1530. DR_RULES_PRIORITY=$4
  1531. DR_RULES_ROUTEID=$5
  1532. DR_RULES_GWLIST=$6
  1533. DR_RULES_ATTRS=$7
  1534.  
  1535. QUERY="insert into $DR_RULES_TABLE \
  1536. ( $DR_RULES_GROUPID_COLUMN, $DR_RULES_PREFIX_COLUMN, $DR_RULES_TIMEREC_COLUMN, $DR_RULES_PRIORITY_COLUMN, $DR_RULES_ROUTEID_COLUMN, $DR_RULES_GWLIST_COLUMN, $DR_RULES_ATTRS_COLUMN, $DR_RULES_DESCRIPTION_COLUMN ) \
  1537. VALUES ('$DR_RULES_GROUPID', '$DR_RULES_PREFIX', '$DR_RULES_TIMEREC', $DR_RULES_PRIORITY, '$DR_RULES_ROUTEID', '$DR_RULES_GWLIST', '$DR_RULES_ATTRS', '$DR_RULES_DESCRIPTION' );"
  1538. $DBCMD "$QUERY"
  1539.  
  1540. if [ $? -ne 0 ] ; then
  1541. merr "dr - SQL Error"
  1542. exit 1
  1543. fi
  1544.  
  1545. $CTLCMD dr_reload
  1546. ;;
  1547. rmrule)
  1548. shift
  1549. if [ $# -ne 1 ] ; then
  1550. merr "missing gateway id to be removed"
  1551. exit 1
  1552. fi
  1553.  
  1554. QUERY="delete from $DR_RULES_TABLE where $DR_RULES_RULEID_COLUMN='$1';"
  1555. $DBCMD "$QUERY"
  1556.  
  1557. if [ $? -ne 0 ] ; then
  1558. merr "dr - SQL Error"
  1559. exit 1
  1560. fi
  1561.  
  1562. $CTLCMD dr_reload
  1563. ;;
  1564.  
  1565. reload)
  1566. $CTLCMD dr_reload
  1567. ;;
  1568.  
  1569. gw_status)
  1570. $CTLCMD dr_gw_status
  1571. ;;
  1572.  
  1573. carrier_status)
  1574. $CTLCMD dr_carrier_status
  1575. ;;
  1576.  
  1577. *)
  1578. usage_dr
  1579. exit 1
  1580.  
  1581. esac
  1582. }
  1583.  
  1584. #
  1585. ##### ------------------------------------------------ #####
  1586. ### DIALPLAN management
  1587. #
  1588. dialplan() {
  1589. require_dbengine
  1590. require_ctlengine
  1591. case $1 in
  1592. show)
  1593. shift
  1594. if [ $# -gt 0 ] ; then
  1595. mecho "dialplan $1 tables"
  1596. QUERY="select * FROM $DIALPLAN_TABLE WHERE $DIALPLAN_DPID_COLUMN=$1 ORDER BY $DIALPLAN_PR_COLUMN ; "
  1597. else
  1598. mecho "dialplan tables"
  1599. QUERY="select * FROM $DIALPLAN_TABLE ORDER BY $DIALPLAN_DPID_COLUMN, $DIALPLAN_PR_COLUMN; "
  1600. fi
  1601. $DBCMD "$QUERY"
  1602. ;;
  1603.  
  1604. addrule)
  1605. shift
  1606. if [ $# -lt 8 ] ; then
  1607. merr "too few parameters"
  1608. usage_dialplan
  1609. exit 1
  1610. fi
  1611.  
  1612. DIALPLAN_DPID=$1
  1613. DIALPLAN_PR=$2
  1614. DIALPLAN_MATCH_OP=$3
  1615. case $DIALPLAN_MATCH_OP in
  1616. equal)
  1617. DIALPLAN_MATCH_OP=0
  1618. ;;
  1619. regexp)
  1620. DIALPLAN_MATCH_OP=1
  1621. ;;
  1622. *)
  1623. merr "dialplan - unexpected $DIALPLAN_MATCH_OP for operating matching. Use 'equal' or 'regexp'!"
  1624. exit 1
  1625. esac
  1626. DIALPLAN_MATCH_EXP=$4
  1627. DIALPLAN_MATCH_FLAGS=$5
  1628. DIALPLAN_SUBST_EXP=$6
  1629. DIALPLAN_REPL_EXP=$7
  1630. DIALPLAN_ATTRS=$8
  1631.  
  1632. QUERY="insert into $DIALPLAN_TABLE \
  1633. ( $DIALPLAN_DPID_COLUMN, $DIALPLAN_PR_COLUMN, $DIALPLAN_MATCH_OP_COLUMN, \
  1634. $DIALPLAN_MATCH_EXP_COLUMN, $DIALPLAN_MATCH_FLAGS_COLUMN, \
  1635. $DIALPLAN_SUBST_EXP_COLUMN, $DIALPLAN_REPL_EXP_COLUMN, \
  1636. $DIALPLAN_ATTRS_COLUMN ) \
  1637. VALUES ( $DIALPLAN_DPID, $DIALPLAN_PR, $DIALPLAN_MATCH_OP, \
  1638. '$DIALPLAN_MATCH_EXP', $DIALPLAN_MATCH_FLAGS, '$DIALPLAN_SUBST_EXP', \
  1639. '$DIALPLAN_REPL_EXP', '$DIALPLAN_ATTRS')";
  1640. mecho "$QUERY"
  1641. $DBCMD "$QUERY"
  1642.  
  1643. if [ $? -ne 0 ] ; then
  1644. merr "dialplan - SQL Error"
  1645. exit 1
  1646. fi
  1647.  
  1648. $CTLCMD dp_reload
  1649. ;;
  1650.  
  1651. rm)
  1652. QUERY="delete from $DIALPLAN_TABLE; "
  1653. $DBCMD "$QUERY"
  1654.  
  1655. if [ $? -ne 0 ] ; then
  1656. merr "dialplan - SQL Error"
  1657. exit 1
  1658. fi
  1659.  
  1660. $CTLCMD dp_reload
  1661. ;;
  1662.  
  1663. rmdpid)
  1664. shift
  1665. if [ $# -lt 1 ] ; then
  1666. merr "too few parameters"
  1667. usage_dialplan
  1668. exit 1
  1669. fi
  1670.  
  1671. DIALPLAN_DPID=$1
  1672.  
  1673. QUERY="delete from $DIALPLAN_TABLE where $DIALPLAN_DPID_COLUMN=$DIALPLAN_DPID; "
  1674. $DBCMD "$QUERY"
  1675.  
  1676. if [ $? -ne 0 ] ; then
  1677. merr "dialplan - SQL Error"
  1678. exit 1
  1679. fi
  1680.  
  1681. $CTLCMD dp_reload
  1682. ;;
  1683.  
  1684. rmrule)
  1685. shift
  1686. if [ $# -lt 2 ] ; then
  1687. merr "too few parameters"
  1688. usage_dialplan
  1689. exit 1
  1690. fi
  1691.  
  1692. DIALPLAN_DPID=$1
  1693. DIALPLAN_PR=$2
  1694.  
  1695. QUERY="delete from $DIALPLAN_TABLE where $DIALPLAN_DPID_COLUMN=$DIALPLAN_DPID AND $DIALPLAN_PR_COLUMN=$DIALPLAN_PR; "
  1696. $DBCMD "$QUERY"
  1697.  
  1698. if [ $? -ne 0 ] ; then
  1699. merr "dialplan - SQL Error"
  1700. exit 1
  1701. fi
  1702.  
  1703. $CTLCMD dp_reload
  1704. ;;
  1705.  
  1706. reload)
  1707. $CTLCMD dp_reload
  1708. ;;
  1709.  
  1710. *)
  1711. usage_dialplan
  1712. exit 1
  1713.  
  1714. esac
  1715. }
  1716.  
  1717. #
  1718. ##### ------------------------------------------------ #####
  1719. ### REGISTRANT management
  1720. #
  1721. registrant() {
  1722. require_dbengine
  1723. require_ctlengine
  1724. case $1 in
  1725. show)
  1726. mecho "registrant table"
  1727. QUERY="select * FROM $REGISTRANT_TABLE ORDER BY $REGISTRANT_AOR_COLUMN; "
  1728. $DBCMD "$QUERY"
  1729. ;;
  1730.  
  1731. dump)
  1732. $CTLCMD reg_list
  1733. ;;
  1734.  
  1735. add)
  1736. shift
  1737. if [ $# -lt 9 ] ; then
  1738. merr "too few parameters"
  1739. usage_dialplan
  1740. exit 1
  1741. fi
  1742.  
  1743. REGISTRANT_REGISTRAR=$1
  1744. REGISTRANT_PROXY=$2
  1745. REGISTRANT_AOR=$3
  1746. REGISTRANT_THIRD_PARTY_REGISTRANT=$4
  1747. REGISTRANT_USERNAME=$5
  1748. REGISTRANT_PASSWORD=$6
  1749. REGISTRANT_BINDING_URI=$7
  1750. REGISTRANT_BINDING_PARAMS=$8
  1751. REGISTRANT_EXPIRY=$9
  1752. REGISTRANT_FORCED_SOCKET=${10}
  1753.  
  1754. QUERY="insert into $REGISTRANT_TABLE\
  1755. ( $REGISTRANT_REGISTRAR_COLUMN,\
  1756. $REGISTRANT_PROXY_COLUMN, $REGISTRANT_AOR_COLUMN,\
  1757. $REGISTRANT_THIRD_PARTY_REGISTRANT_COLUMN,\
  1758. $REGISTRANT_USERNAME_COLUMN,\
  1759. $REGISTRANT_PASSWORD_COLUMN,\
  1760. $REGISTRANT_BINDING_URI_COLUMN,\
  1761. $REGISTRANT_BINDING_PARAMS_COLUMN,\
  1762. $REGISTRANT_EXPIRY_COLUMN,\
  1763. $REGISTRANT_FORCED_SOCKET_COLUMN)\
  1764. VALUES ( '$REGISTRANT_REGISTRAR', '$REGISTRANT_PROXY',\
  1765. '$REGISTRANT_AOR',\
  1766. '$REGISTRANT_THIRD_PARTY_REGISTRANT',\
  1767. '$REGISTRANT_USERNAME', '$REGISTRANT_PASSWORD',\
  1768. '$REGISTRANT_BINDING_URI',\
  1769. '$REGISTRANT_BINDING_PARAMS',\
  1770. $REGISTRANT_EXPIRY, '$REGISTRANT_FORCED_SOCKET')";
  1771. #mecho "$QUERY"
  1772. $DBCMD "$QUERY"
  1773.  
  1774. if [ $? -ne 0 ] ; then
  1775. merr "registrant - SQL Error"
  1776. exit 1
  1777. fi
  1778.  
  1779. #$CTLCMD reg_reload
  1780. ;;
  1781. rm)
  1782. QUERY="delete from $REGISTRANT_TABLE; "
  1783. $DBCMD "$QUERY"
  1784.  
  1785. if [ $? -ne 0 ] ; then
  1786. merr "registrant - SQL Error"
  1787. exit 1
  1788. fi
  1789.  
  1790. #$CTLCMD reg_reload
  1791. ;;
  1792.  
  1793. rmaor)
  1794. shift
  1795. if [ $# -lt 1 ] ; then
  1796. merr "too few parameters"
  1797. usage_registrant
  1798. exit 1
  1799. fi
  1800.  
  1801. REGISTRANT_ID=$1
  1802.  
  1803. QUERY="delete from $REGISTRANT_TABLE where $REGISTRANT_ID_COLUMN=$REGISTRANT_ID; "
  1804. $DBCMD "$QUERY"
  1805.  
  1806. if [ $? -ne 0 ] ; then
  1807. merr "registrant - SQL Error"
  1808. exit 1
  1809. fi
  1810.  
  1811. #$CTLCMD reg_reload
  1812. ;;
  1813. *)
  1814. usage_registrant
  1815. exit 1
  1816. esac
  1817. }
  1818.  
  1819. #
  1820. ##### ------------------------------------------------ #####
  1821. ### opensips_start
  1822. #
  1823. opensips_start() {
  1824. echo
  1825. minfo "Starting OpenSIPS : "
  1826. if [ -r $PID_FILE ] ; then
  1827. if [ -d /proc/$(cat $PID_FILE) ] ; then
  1828. ps -ef | $EGREP opensips
  1829. ls -l $PID_FILE
  1830. minfo "PID file exists ($PID_FILE)! OpenSIPS already running?"
  1831. exit 1
  1832. else
  1833. minfo "Removing stale PID file $PID_FILE.";
  1834. rm -f $PID_FILE;
  1835. fi
  1836. fi
  1837.  
  1838. if [ ! -x "$OSIPSBIN" ] ; then
  1839. echo
  1840. merr "OpenSIPS binaries not found at $OSIPSBIN"
  1841. merr "set OSIPSBIN to the path of opensips in $0 or ~/.opensipsctlrc"
  1842. exit 1
  1843. fi
  1844. if [ $SYSLOG = 1 ] ; then
  1845. $OSIPSBIN -P $PID_FILE $STARTOPTIONS 1>/dev/null 2>/dev/null
  1846. else
  1847. $OSIPSBIN -P $PID_FILE -E $STARTOPTIONS
  1848. fi
  1849. sleep 3
  1850. if [ ! -s $PID_FILE ] ; then
  1851. echo
  1852. merr "PID file $PID_FILE does not exist -- OpenSIPS start failed"
  1853. exit 1
  1854. fi
  1855. minfo "started (pid: `cat $PID_FILE`)"
  1856. }
  1857.  
  1858. #
  1859. ##### ------------------------------------------------ #####
  1860. ### opensips_stop
  1861. #
  1862. opensips_stop() {
  1863.  
  1864. # In case stop was called in restart, it should not exit.
  1865.  
  1866. echo
  1867. if [ "$1" = "restart" ]
  1868. then
  1869. minfo "Restarting OpenSIPS : "
  1870. else
  1871. minfo "Stopping OpenSIPS : "
  1872. fi
  1873.  
  1874. if [ -r $PID_FILE ] ; then
  1875. kill `cat $PID_FILE`
  1876. minfo "stopped"
  1877. else
  1878. echo
  1879. merr "No PID file found ($PID_FILE)! OpenSIPS probably not running"
  1880. if [ "$1" != "restart" ] ; then
  1881. minfo "check with 'ps -ef | $EGREP opensips'"
  1882. exit 1
  1883. fi
  1884. fi
  1885. }
  1886.  
  1887. #
  1888. ##### ------------------------------------------------ #####
  1889. ### options_ping
  1890. #
  1891. options_ping() {
  1892. myhost=`get_my_host`
  1893. require_ctlengine
  1894. CMD="t_uac_dlg OPTIONS \"$1\" \".\" \".\" \"From:sip:daemon@$myhost"$'\r\n'"To:<$1>"$'\r\n'"Contact:sip:daemon@$myhost"$'\r\n'"\""
  1895. RET=`$CTLCMD $CMD | head -1`
  1896. print_status $RET
  1897. }
  1898.  
  1899. #
  1900. ##### ------------------------------------------------ #####
  1901. ### rpid management
  1902. #
  1903. rpid() {
  1904. if [ "$#" -lt 2 ] ; then
  1905. merr "rpid - too few parameters"
  1906. exit 1
  1907. fi
  1908. shift;
  1909. require_dbengine
  1910. case $1 in
  1911. show)
  1912. if [ $# -eq 2 ] ; then
  1913. set_user $2
  1914. is_user $2
  1915. if [ $? -ne 0 ] ; then
  1916. merr "rpid - invalid user '$2'"
  1917. exit 1;
  1918. fi
  1919. CLAUSE=" WHERE $SUBSCRIBER_COLUMN='$OSIPSUSER' AND \
  1920. $REALM_COLUMN='$OSIPSDOMAIN' "
  1921. elif [ $# -ne 1 ] ; then
  1922. usage_rpid
  1923. exit 1
  1924. fi
  1925. QUERY="select $SUBSCRIBER_COLUMN, $RPID_COLUMN FROM $SUB_TABLE \
  1926. $CLAUSE ; "
  1927. $DBCMD "$QUERY"
  1928. ;;
  1929.  
  1930. add|rm)
  1931. MODE=$1;
  1932.  
  1933. if [ "$MODE" = "add" ] ; then
  1934. ARG_NUM=3;
  1935. else
  1936. ARG_NUM=2;
  1937. fi
  1938.  
  1939. if [ $# -lt $ARG_NUM ] ; then
  1940. usage_rpid
  1941. exit 1
  1942. fi
  1943.  
  1944. set_user $2
  1945. is_user $2
  1946. if [ $? -ne 0 ] ; then
  1947. merr "rpid - invalid user '$2'"
  1948. exit 1
  1949. fi
  1950. shift 2
  1951.  
  1952. if [ "$MODE" = "add" ] ; then
  1953. RPID_VAL="'$1'";
  1954. else
  1955. RPID_VAL=NULL;
  1956. fi
  1957.  
  1958. QUERY="UPDATE $SUB_TABLE SET $RPID_COLUMN=$RPID_VAL \
  1959. WHERE $SUBSCRIBER_COLUMN='$OSIPSUSER' AND $REALM_COLUMN='$OSIPSDOMAIN';"
  1960. $DBCMD "$QUERY"
  1961. if [ $? -ne 0 ] ; then
  1962. merr "rpid - SQL Error"
  1963. exit 1
  1964. fi
  1965.  
  1966. $0 rpid show "$OSIPSUSER@$OSIPSDOMAIN"
  1967.  
  1968. ;;
  1969.  
  1970. *)
  1971. usage_rpid
  1972. exit 1
  1973. ;;
  1974. esac
  1975. }
  1976.  
  1977. #
  1978. ##### ------------------------------------------------ #####
  1979. ### SPEEDDIAL management
  1980. #
  1981. speeddial() {
  1982. if [ "$#" -lt 2 ] ; then
  1983. merr "speeddial - too few parameters"
  1984. echo
  1985. usage_speeddial
  1986. exit 1
  1987. fi
  1988.  
  1989. require_dbengine
  1990. shift
  1991.  
  1992. case $1 in
  1993. list)
  1994. if [ $# -eq 2 ] ; then
  1995. # print speed-dials for user
  1996. check_aor "$2"
  1997. if [ $? -ne 0 ] ; then
  1998. merr "speeddial - <$2> is not a valid AoR (user@domain)"
  1999. exit 1
  2000. fi
  2001.  
  2002. set_user $2
  2003.  
  2004. CLAUSE="WHERE $SD_USER_COLUMN='$OSIPSUSER' AND \
  2005. $SD_DOMAIN_COLUMN='$OSIPSDOMAIN'"
  2006. mecho "Dumping speed-dials for user=<$2>"
  2007. echo
  2008. if [ $DBENGINE = "MYSQL" ] ; then
  2009. QUERY="SELECT CONCAT($SD_SD_USER_COLUMN,'@',\
  2010. $SD_SD_DOMAIN_COLUMN) AS 'Short number', $SD_NEW_URI_COLUMN AS 'New URI',\
  2011. $SD_DESC_COLUMN FROM $SD_TABLE $CLAUSE;"
  2012. elif [ $DBENGINE = "PGSQL" ] ; then
  2013. QUERY="SELECT ($SD_SD_USER_COLUMN || '@' || \
  2014. $SD_SD_DOMAIN_COLUMN) AS 'Short number', $SD_NEW_URI_COLUMN AS 'New URI',\
  2015. $SD_DESC_COLUMN FROM $SD_TABLE $CLAUSE;"
  2016. fi
  2017. mecho "Dumping speed-dials for user=<$2>"
  2018. echo
  2019.  
  2020. $DBCMD "$QUERY"
  2021. #| $AWK 'BEGIN {line=0;}
  2022. # /^\+/ { next }
  2023. #{ if(line==0) print "## SpeedDial \tNew-URI \tDescription\n";
  2024. # else {
  2025. # ORS_BAK=ORS;
  2026. # ORS="";
  2027. # print line ") " $1 "@" $2 "\t" $3 "\t\"" $4;
  2028. # for (i=5;i<=NF;++i) print FS $i;
  2029. # ORS=ORS_BAK;
  2030. # print "\"";
  2031. # }
  2032. # line++;
  2033. #}'
  2034. elif [ $# -eq 1 ] ; then
  2035. mecho "Dumping all speed-dials may take long: do you want to proceed? [Y|N] "
  2036. read answer
  2037. if [ "$answer" = "y" -o "$answer" = "Y" ] ; then
  2038. mecho "Dumping all speed-dials..."
  2039. echo
  2040. else
  2041. exit 1
  2042. fi
  2043. if [ $DBENGINE = "MYSQL" ] ; then
  2044. QUERY="SELECT CONCAT($SD_SD_USER_COLUMN,'@',\
  2045. $SD_SD_DOMAIN_COLUMN) AS 'Short number', CONCAT($SD_USER_COLUMN,'@',\
  2046. $SD_DOMAIN_COLUMN) AS 'Owner', $SD_NEW_URI_COLUMN AS 'New URI',\
  2047. $SD_DESC_COLUMN FROM $SD_TABLE;"
  2048. elif [ $DBENGINE = "PGSQL" ] ; then
  2049. QUERY="SELECT ($SD_SD_USER_COLUMN||'@'||\
  2050. $SD_SD_DOMAIN_COLUMN) AS 'Short number', ($SD_USER_COLUMN||'@'||\
  2051. $SD_DOMAIN_COLUMN) AS 'Owner', $SD_NEW_URI_COLUMN AS 'New URI',\
  2052. $SD_DESC_COLUMN FROM $SD_TABLE;"
  2053. fi
  2054. $DBCMD "$QUERY"
  2055. #| $AWK 'BEGIN {line=0;}
  2056. # /^\+/ { next }
  2057. # { line++;
  2058. #if(line==1) print "SIP-ID \tSpeedDial \tNew-URI \tDescritpion\n";
  2059. # else {
  2060. # ORS_BAK=ORS;
  2061. # ORS="";
  2062. # print $3 "@" $4 "\t" $1 "@" $2 "\t" $5 "\t\"" $6;
  2063. # for (i=7;i<=NF;++i) print FS $i;
  2064. # ORS=ORS_BAK;
  2065. # print "\"";
  2066. # }
  2067. # }'
  2068. else
  2069. merr "speeddial - wrong number of params for command [list]"
  2070. usage_speeddial
  2071. exit 1
  2072. fi
  2073.  
  2074. exit $?
  2075. ;;
  2076. show)
  2077. if [ $# -ne 2 ] ; then
  2078. merr "speeddial - wrong number of params for command [show]"
  2079. usage_speeddial
  2080. exit 1
  2081. fi
  2082.  
  2083. check_aor "$2"
  2084. if [ $? -ne 0 ] ; then
  2085. merr "speeddial - $2 is not a valid AoR (user@domain)"
  2086. exit 1
  2087. fi
  2088.  
  2089. set_user $2
  2090.  
  2091. CLAUSE="WHERE $SD_SD_USER_COLUMN='$OSIPSUSER' AND \
  2092. $SD_SD_DOMAIN_COLUMN='$OSIPSDOMAIN'"
  2093. if [ $DBENGINE = "MYSQL" ] ; then
  2094. QUERY="SELECT CONCAT($SD_USER_COLUMN,'@',$SD_DOMAIN_COLUMN) \
  2095. AS 'Owner', $SD_NEW_URI_COLUMN AS 'New URI', $SD_DESC_COLUMN FROM \
  2096. $SD_TABLE $CLAUSE ; "
  2097. elif [ $DBENGINE = "PGSQL" ] ; then
  2098. QUERY="SELECT ($SD_USER_COLUMN || '@' || $SD_DOMAIN_COLUMN) \
  2099. AS 'Owner', $SD_NEW_URI_COLUMN AS 'New URI', $SD_DESC_COLUMN FROM \
  2100. $SD_TABLE $CLAUSE ; "
  2101. fi
  2102. mecho "Details for speeddial <$2>"
  2103. $DBCMD "$QUERY"
  2104. # | $AWK 'BEGIN {line=0;} /^\+/ { next }
  2105. # {
  2106. # if(line==0) print "## SIP-ID \tNew-URI \tDescritpion\n";
  2107. # else {
  2108. # ORS_BAK=ORS;usage_opensips_monitor() {
  2109. # ORS="";
  2110. # print line ") " $1 "@" $2 "\t" $3 "\t\"" $4;
  2111. # for (i=5;i<=NF;++i) print FS $i;
  2112. # ORS=ORS_BAK;
  2113. # print "\"";
  2114. # }
  2115. # line++;
  2116. # }'
  2117.  
  2118. exit $?
  2119. ;;
  2120. add)
  2121. if [ $# -ne 4 ] ; then
  2122. if [ $# -ne 5 ] ; then
  2123. merr "speeddial - wrong number of parameters"
  2124. usage_speeddial
  2125. exit 1
  2126. fi
  2127. fi
  2128. shift
  2129. check_aor "$1"
  2130. if [ $? -ne 0 ] ; then
  2131. merr "speeddial - $1 is not a valid AoR (user@domain)"
  2132. exit 1
  2133. fi
  2134.  
  2135. check_aor "$2"
  2136. if [ $? -ne 0 ] ; then
  2137. merr "speeddial - $2 is not a valid AoR (user@domain)"
  2138. exit 1
  2139. fi
  2140.  
  2141. check_sipaor "$3"
  2142. if [ $? -ne 0 ] ; then
  2143. merr "speeddial - $3 is not a valid SIP AoR (sip:user@domain)"
  2144. exit 1
  2145. fi
  2146.  
  2147. set_user $1
  2148. TMP_OSIPSUSER=$OSIPSUSER
  2149. TMP_OSIPSDOMAIN=$OSIPSDOMAIN
  2150. set_user $2
  2151.  
  2152. QUERY="INSERT INTO $SD_TABLE ($SD_USER_COLUMN,$SD_DOMAIN_COLUMN,\
  2153. $SD_SD_USER_COLUMN,$SD_SD_DOMAIN_COLUMN,$SD_NEW_URI_COLUMN,$SD_DESC_COLUMN) \
  2154. VALUES ('$TMP_OSIPSUSER','$TMP_OSIPSDOMAIN','$OSIPSUSER','$OSIPSDOMAIN','$3','$4');"
  2155. $DBCMD "$QUERY"
  2156. if [ $? -ne 0 ] ; then
  2157. merr "speeddial - SQL Error"
  2158. exit 1
  2159. fi
  2160. mecho "ok - spedd dial added"
  2161. echo
  2162. exit $?
  2163. ;;
  2164. rm)
  2165. if [ $# -ne 3 ] ; then
  2166. merr "speeddial rm - invalid number of parameters"
  2167. usage_speeddial
  2168. exit 1
  2169. fi
  2170.  
  2171. shift
  2172.  
  2173. check_aor "$1"
  2174. if [ $? -ne 0 ] ; then
  2175. merr "speeddial - $1 is not a valid AoR (user@domain)"
  2176. exit 1
  2177. fi
  2178.  
  2179. check_aor "$2"
  2180. if [ $? -ne 0 ] ; then
  2181. merr "speeddial - $2 is not a valid AoR (user@domain)"
  2182. exit 1
  2183. fi
  2184.  
  2185. set_user $1
  2186. TMP_OSIPSUSER=$OSIPSUSER
  2187. TMP_OSIPSDOMAIN=$OSIPSDOMAIN
  2188. set_user $2
  2189.  
  2190. CLAUSE="WHERE $SD_USER_COLUMN='$TMP_OSIPSUSER' AND \
  2191. $SD_DOMAIN_COLUMN='$TMP_OSIPSDOMAIN' AND $SD_SD_USER_COLUMN='$OSIPSUSER' AND \
  2192. $SD_SD_DOMAIN_COLUMN='$OSIPSDOMAIN'"
  2193. QUERY="DELETE FROM $SD_TABLE $CLAUSE;"
  2194. $DBCMD "$QUERY"
  2195. if [ $? -ne 0 ] ; then
  2196. merr "speeddial - SQL Error"
  2197. exit 1
  2198. fi
  2199.  
  2200. mecho "ok - spedd dial deleted"
  2201. echo
  2202.  
  2203. ;;
  2204.  
  2205. help)
  2206. usage_speeddial
  2207. ;;
  2208.  
  2209. *)
  2210. merr "speeddial - unknown command"
  2211. usage_speeddial
  2212. exit 1
  2213. ;;
  2214. esac
  2215. } # end speed_dial()
  2216.  
  2217. #
  2218. ##### ================================================ #####
  2219. ### subscriber management
  2220. #
  2221. subscriber() {
  2222. if [ $# -lt 2 ] ; then
  2223. merr "too few parameters"
  2224. usage_subscriber
  2225. exit 1
  2226. fi
  2227.  
  2228. require_dbengine
  2229.  
  2230. case $1 in
  2231. add)
  2232. if [ $# -ne 3 ] ; then
  2233. usage_subscriber
  2234. exit 1
  2235. fi
  2236. shift
  2237. credentials $1 $2
  2238. is_user $1
  2239. if [ $? -eq 0 ] ; then
  2240. minfo "user '$1' already exists"
  2241. exit 1
  2242. fi
  2243. set_user $1
  2244. check_alias $OSIPSUSER $OSIPSDOMAIN
  2245. if [ $ALIAS_EXISTS -eq 1 ] ; then
  2246. minfo "user '$1' already exists as alias"
  2247. exit 1
  2248. fi
  2249.  
  2250. if [ $STORE_PLAINTEXT_PW -eq 1 ] ; then
  2251. PASS="$2"
  2252. else
  2253. PASS=""
  2254. fi
  2255.  
  2256. QUERY="insert into $SUB_TABLE ($SUBSCRIBER_COLUMN,\
  2257. $REALM_COLUMN,$HA1_COLUMN,$HA1B_COLUMN,$PASSWORD_COLUMN) \
  2258. values ('$OSIPSUSER','$OSIPSDOMAIN','$HA1','$HA1B','$PASS');";
  2259. $DBCMD "$QUERY"
  2260. if [ $? -ne 0 ] ; then
  2261. merr "introducing the new user '$1' to the database failed"
  2262. else
  2263. mecho "new user '$1' added"
  2264. fi
  2265. ;;
  2266.  
  2267. passwd)
  2268. if [ $# -ne 3 ] ; then
  2269. usage_subscriber
  2270. exit 1
  2271. fi
  2272. shift
  2273. credentials $1 $2
  2274.  
  2275. is_user $1
  2276. if [ $? -ne 0 ] ; then
  2277. merr "non-existent user '$1'"
  2278. exit 1
  2279. fi
  2280.  
  2281. if [ $STORE_PLAINTEXT_PW -eq 1 ] ; then
  2282. PASS="$2"
  2283. else
  2284. PASS=""
  2285. fi
  2286.  
  2287. QUERY="update $SUB_TABLE set $HA1_COLUMN='$HA1', \
  2288. $HA1B_COLUMN='$HA1B', $PASSWORD_COLUMN='$PASS' \
  2289. WHERE $SUBSCRIBER_COLUMN='$OSIPSUSER' and $REALM_COLUMN='$OSIPSDOMAIN';"
  2290. $DBCMD "$QUERY"
  2291. if [ $? -ne 0 ] ; then
  2292. merr "password change failed"
  2293. else
  2294. minfo "password change succeeded"
  2295. fi
  2296. ;;
  2297.  
  2298. rm)
  2299. if [ $# -ne 2 ] ; then
  2300. usage_subscriber
  2301. exit 1
  2302. fi
  2303.  
  2304. require_ctlengine
  2305. shift
  2306.  
  2307. is_user $1
  2308. if [ $? -ne 0 ] ; then
  2309. merr "non-existent user '$1'"
  2310. exit 1
  2311. fi
  2312.  
  2313. # begin with remove all user's privileges
  2314. acl revoke $1 > /dev/null 2>&1
  2315.  
  2316. # destroy db-aliases
  2317. QUERY="delete from $DA_TABLE where $DA_USER_COLUMN='$OSIPSUSER' \
  2318. and $DA_DOMAIN_COLUMN='$OSIPSDOMAIN';"
  2319. $DBCMD "$QUERY"
  2320.  
  2321.  
  2322. # destroy the user now
  2323. QUERY="delete from $SUB_TABLE where $SUBSCRIBER_COLUMN='$OSIPSUSER' \
  2324. and $REALM_COLUMN='$OSIPSDOMAIN';"
  2325. $DBCMD "$QUERY"
  2326.  
  2327. # and also all his contacts
  2328. $0 ul rm $1 > /dev/null 2>&1
  2329. ;;
  2330. esac
  2331.  
  2332. }
  2333.  
  2334. #
  2335. ##### ================================================ #####
  2336. ### USRLOC management
  2337. #
  2338. usrloc() {
  2339. if [ $# -lt 2 ] ; then
  2340. merr "usrloc - too few parameters"
  2341. usage_usrloc
  2342. exit 1
  2343. fi
  2344.  
  2345. require_ctlengine
  2346.  
  2347. if [ "$1" = "ul" ] ; then
  2348. USRLOC_TABLE="$UL_TABLE"
  2349. if [ -z $USRLOC_TABLE ] ; then
  2350. USRLOC_TABLE=location
  2351. fi
  2352. CHECK_SUB=0
  2353. elif [ "$1" = "usrloc" ] ; then
  2354. USRLOC_TABLE="$UL_TABLE"
  2355. if [ -z $USRLOC_TABLE ] ; then
  2356. USRLOC_TABLE=location
  2357. fi
  2358. CHECK_SUB=0
  2359. else
  2360. merr "usrloc - unknown subcommand '$1'"
  2361. usage_usrloc
  2362. exit 1
  2363. fi
  2364. shift
  2365.  
  2366. case "$1" in
  2367. show)
  2368. if [ $# -eq 2 ] ; then
  2369. if [ "$2" = "--brief" ] ; then
  2370. $CTLCMD ul_dump brief
  2371. else
  2372. set_user $2
  2373. $CTLCMD ul_show_contact \
  2374. $USRLOC_TABLE "$OSIPSUSER@$OSIPSDOMAIN"
  2375. fi
  2376. elif [ $# -eq 1 ] ; then
  2377. $CTLCMD ul_dump
  2378. else
  2379. merr "wrong number of params"
  2380. usage_usrloc
  2381. exit 1
  2382. fi
  2383. exit $?
  2384. ;;
  2385. add)
  2386. if [ $# -eq 3 ] ; then
  2387. # expires 0 means persistent contact
  2388. UL_EXPIRES=0
  2389. UL_FLAGS=0
  2390. BR_FLAGS=0
  2391. elif [ $# -eq 4 ] ; then
  2392. UL_EXPIRES=$4
  2393. UL_FLAGS=0
  2394. BR_FLAGS=0
  2395. else
  2396. usage_usrloc
  2397. exit 1
  2398. fi
  2399. shift
  2400. check_uri "$2"
  2401.  
  2402. if [ $? -ne 0 ] ; then
  2403. merr "$2 is not a valid URI"
  2404. exit 1
  2405. fi
  2406.  
  2407. set_user $1
  2408. if [ $CHECK_SUB -ne 0 ] ; then
  2409. is_user $1
  2410. if [ $? -eq 0 ] ; then
  2411. merr "overlap of alias with an existing subscriber name"
  2412. exit 1;
  2413. fi
  2414. fi
  2415.  
  2416. check_alias $OSIPSUSER $OSIPSDOMAIN
  2417. if [ $ALIAS_EXISTS -eq 1 ] ; then
  2418. if [ $CHECK_SUB -ne 0 ] ; then
  2419. minfo "alias already defined"
  2420. else
  2421. merr "AOR is an alias"
  2422. fi
  2423. exit 1
  2424. fi
  2425.  
  2426. $CTLCMD ul_add "$USRLOC_TABLE" "$OSIPSUSER@$OSIPSDOMAIN" "$2" \
  2427. "$UL_EXPIRES" "1.00" "0" "$UL_FLAGS" "$BR_FLAGS" "$ALL_METHODS"
  2428. exit $?
  2429. ;;
  2430. rm)
  2431. if [ $# -eq 2 ] ; then
  2432. shift
  2433. set_user $1
  2434. $CTLCMD ul_rm $USRLOC_TABLE "$OSIPSUSER@$OSIPSDOMAIN"
  2435.  
  2436. elif [ $# -eq 3 ] ; then
  2437. shift
  2438. set_user $1
  2439. check_uri "$2"
  2440. if [ $? -ne 0 ] ; then
  2441. merr "$2 is not a valid SIP URI (sip:[user@]domain)"
  2442. exit 1
  2443. fi
  2444.  
  2445. $CTLCMD ul_rm_contact $USRLOC_TABLE "$OSIPSUSER@$OSIPSDOMAIN" "$2"
  2446.  
  2447. else
  2448. merr "wrong number of params"
  2449. usage_usrloc
  2450. exit 1
  2451. fi
  2452. ;;
  2453.  
  2454. *)
  2455. usage_usrloc
  2456. exit 1
  2457. ;;
  2458. esac
  2459. }
  2460.  
  2461. ##### ================================================ #####
  2462. ### TLS CA management
  2463. #
  2464.  
  2465. tls_ca() {
  2466.  
  2467. if [ "$1" = "rootCA" ] ; then
  2468. if [ -z $2 ] ; then
  2469. # use default
  2470. CA_BASE=$ETCDIR/tls
  2471. else
  2472. CA_BASE=`(cd $2;pwd)`
  2473. fi
  2474.  
  2475. if [ ! -d $CA_BASE ] ; then
  2476. merr "Config directory ($CA_BASE) does not exist"
  2477. exit 1
  2478. fi
  2479.  
  2480. CA_CONF='ca.conf'
  2481. CA_PATH=$CA_BASE/rootCA
  2482. if [ ! -f $CA_BASE/$CA_CONF ] ; then
  2483. merr "root CA config file ($CA_BASE/$CA_CONF) does not exist"
  2484. exit 1
  2485. fi
  2486.  
  2487. if [ -d $CA_PATH ] ; then
  2488. mwarn "root CA directory ($CA_PATH) exists! Remove it (y/n)?"
  2489. read X
  2490. if [ "$X" != "y" -a "$X" != "Y" ] ; then
  2491. exit 1
  2492. fi
  2493. fi
  2494.  
  2495. mecho "Creating directory $CA_PATH and its sub-tree"
  2496. mkdir -p $CA_PATH
  2497. if [ $? -ne 0 ] ; then
  2498. merr "Failed to create root directory $CA_PATH"
  2499. exit 1
  2500. fi
  2501. rm -fr $CA_PATH/*
  2502. mkdir $CA_PATH/private
  2503. mkdir $CA_PATH/certs
  2504. touch $CA_PATH/index.txt
  2505. echo 01 >$CA_PATH/serial
  2506.  
  2507. mecho "Creating CA self-signed certificate"
  2508. ( cd $CA_PATH; openssl req -config $CA_BASE/$CA_CONF -x509 -newkey \
  2509. rsa:2048 -days 365 -out ./cacert.pem -outform PEM )
  2510. if [ $? -ne 0 ] ; then
  2511. merr "Failed to create self-signed certificate"
  2512. exit 1
  2513. fi
  2514.  
  2515. mecho "Protecting CA private key"
  2516. chmod 600 $CA_PATH/private/cakey.pem
  2517.  
  2518. mecho "DONE"
  2519. minfo "Private key can be found in $CA_PATH/private/cakey.pem"
  2520. minfo "Certificate can be found in $CA_PATH/cacert.pem"
  2521.  
  2522. elif [ "$1" = "userCERT" ] ; then
  2523.  
  2524. if [ -z $2 ] ; then
  2525. merr "Missing user name parameter"
  2526. exit 1
  2527. fi
  2528.  
  2529. if [ -z $3 ] ; then
  2530. # use default
  2531. CA_BASE=$ETCDIR/tls
  2532. else
  2533. CA_BASE=`(cd $3;pwd)`
  2534. fi
  2535.  
  2536. if [ ! -d $CA_BASE ] ; then
  2537. merr "Config directory ($CA_BASE) does not exist"
  2538. exit 1
  2539. fi
  2540.  
  2541. USER_DIR=$CA_BASE/$2
  2542. USER_CFG=$CA_BASE/$2.conf
  2543. USER=$2
  2544. REQ_CFG=$CA_BASE/request.conf
  2545.  
  2546. if [ ! -f $USER_CFG ] ; then
  2547. merr "User config file $USER_CFG not found"
  2548. exit 1
  2549. fi
  2550.  
  2551. if [ ! -f $REQ_CFG ] ; then
  2552. merr "Request config file $REQ_CFG not found"
  2553. exit 1
  2554. fi
  2555.  
  2556. mecho "Using config file $USER_CFG"
  2557.  
  2558. if [ -d $USER_DIR ] ; then
  2559. mwarn "User CERT directory ($USER_DIR) exists! Remove it (y/n)?"
  2560. read X
  2561. if [ "$X" != "y" -a "$X" != "Y" ] ; then
  2562. exit 1
  2563. fi
  2564. fi
  2565.  
  2566. mecho "Creating directory $USER_DIR"
  2567. mkdir -p $USER_DIR
  2568. if [ $? -ne 0 ] ; then
  2569. merr "Failed to create user directory $USER_DIR "
  2570. exit 1
  2571. fi
  2572. rm -fr $USER_DIR/*
  2573.  
  2574. mecho "Creating user certificate request"
  2575. openssl req -config $USER_CFG -out $USER_DIR/$USER-cert_req.pem \
  2576. -keyout $USER_DIR/$USER-privkey.pem -new -nodes
  2577. if [ $? -ne 0 ] ; then
  2578. merr "Failed to generate certificate request"
  2579. exit 1
  2580. fi
  2581.  
  2582. mecho "Signing certificate request"
  2583. ( cd $CA_BASE ; openssl ca -config $REQ_CFG -in \
  2584. $USER_DIR/$USER-cert_req.pem -out $USER_DIR/$USER-cert.pem )
  2585. if [ $? -ne 0 ] ; then
  2586. merr "Failed to generate certificate request"
  2587. exit 1
  2588. fi
  2589.  
  2590. mecho "Generating CA list"
  2591. cat $CA_BASE/rootCA/cacert.pem >> $USER_DIR/$USER-calist.pem
  2592.  
  2593. mecho "DONE"
  2594. minfo "Private key is locate at $USER_DIR/$USER-privkey.pem "
  2595. minfo "Certificate is locate at $USER_DIR/$USER-cert.pem "
  2596. minfo "CA-List is locate at $USER_DIR/$USER-calist.pem "
  2597.  
  2598. else
  2599. [ -n "$1" ] && merr "unknown TLS command: \"$1\""
  2600. usage_tls
  2601. exit 1
  2602. fi
  2603. }
  2604.  
  2605. ##### ================================================ #####
  2606. ### trap with gdb opensips processes
  2607. #
  2608.  
  2609. opensips_trap() {
  2610. if [ -z "$GDB" ] ; then
  2611. merr "'gdb' tool not found: set GDB variable to correct tool path"
  2612. exit
  2613. fi
  2614. DATE=$(/bin/date +%Y%m%d_%H%M%S)
  2615. LOG_PATH=/tmp
  2616. LOG_FILE=$LOG_PATH/gdb_opensips_$DATE
  2617. minfo "Trap file: $LOG_FILE"
  2618. minfo "Trapping OpenSIPS with gdb: "
  2619.  
  2620. pids=()
  2621. i=0
  2622. while read procline; do
  2623. BIN=$(echo "$procline" | grep -o "\<.*opensips\s" | awk '{print $NF}')
  2624. PID=$(echo "$procline" | awk '{print $2}')
  2625. echo -n "$PID "
  2626. echo "---start $PID ($procline)" >>$LOG_FILE.$PID
  2627. $GDB $BIN $PID -batch --eval-command="bt full" 2>&1 >>$LOG_FILE.$PID &
  2628. pids[$i]=$!
  2629. i=$(($i+1))
  2630. done < <(ps aux | grep '[o]pensips.*-f.*' | grep "$TRAP_FILTER")
  2631.  
  2632. for i in $(seq 0 1 $((i-1))); do
  2633. wait ${pids[$i]}
  2634. done
  2635.  
  2636. for file in $(find $LOG_PATH -name $(basename $LOG_FILE).* | sort -t. -k2n); do
  2637. cat $file >>$LOG_FILE
  2638. echo >>$LOG_FILE
  2639. rm $file
  2640. done
  2641.  
  2642. echo "DONE!"
  2643. }
  2644.  
  2645. #
  2646. ##### ================================================ #####
  2647. ### main command switch
  2648. #
  2649. case $1 in
  2650. acl)
  2651. shift
  2652. acl "$@"
  2653. ;;
  2654.  
  2655. add)
  2656. subscriber "$@"
  2657. ;;
  2658.  
  2659. passwd)
  2660. subscriber "$@"
  2661. ;;
  2662.  
  2663. rm)
  2664. subscriber "$@"
  2665. ;;
  2666.  
  2667. ul|usrloc)
  2668. usrloc "$@"
  2669. ;;
  2670.  
  2671. alias_db|aliasdb)
  2672. alias_db "$@"
  2673. ;;
  2674.  
  2675. avp)
  2676. avpops "$@"
  2677. ;;
  2678.  
  2679. cisco_restart)
  2680. if [ $# -ne 2 ] ; then
  2681. usage_cisco_restart
  2682. exit 1
  2683. fi
  2684. cisco_restart $2
  2685. ;;
  2686.  
  2687. db)
  2688. shift
  2689. db_ops "$@"
  2690. ;;
  2691.  
  2692. showdb|userdb)
  2693. usage
  2694. exit 1
  2695. ;;
  2696.  
  2697. domain)
  2698. shift
  2699. domain "$@"
  2700. ;;
  2701.  
  2702. address)
  2703. shift
  2704. address "$@"
  2705. ;;
  2706.  
  2707. fifo|unixsock)
  2708. require_ctlengine
  2709. shift
  2710. $CTLCMD "$@"
  2711. ;;
  2712.  
  2713. cr)
  2714. shift
  2715. cr "$@"
  2716. ;;
  2717.  
  2718. dispatcher)
  2719. shift
  2720. dispatcher "$@"
  2721. ;;
  2722.  
  2723. dr)
  2724. shift
  2725. dr "$@"
  2726. ;;
  2727.  
  2728. dialplan)
  2729. shift
  2730. dialplan "$@"
  2731. ;;
  2732.  
  2733. registrant)
  2734. shift
  2735. registrant "$@"
  2736. ;;
  2737.  
  2738. monitor|console|moni|con)
  2739. require_ctlengine
  2740. $OPENSIPS_MONITOR "$@"
  2741. ;;
  2742.  
  2743. online)
  2744. require_ctlengine
  2745. $CTLCMD ul_dump | $EGREP -i aor | awk '{print $2}' | sort | sort -mu
  2746. exit $?
  2747. ;;
  2748.  
  2749. ping)
  2750. # error handling is hacked -- filter_fl should not
  2751. # consume positive status -- that should be done by
  2752. # calling app
  2753. if [ $# -ne 2 ] ; then
  2754. usage_ping
  2755. exit 1
  2756. fi
  2757. options_ping $2
  2758. ;;
  2759.  
  2760. ps)
  2761. require_ctlengine
  2762. $CTLCMD ps
  2763. ;;
  2764.  
  2765. restart)
  2766. opensips_stop restart
  2767. sleep 2
  2768. opensips_start
  2769. ;;
  2770.  
  2771. rpid)
  2772. rpid "$@"
  2773. ;;
  2774.  
  2775. speeddial|speed_dial)
  2776. speeddial "$@"
  2777. ;;
  2778.  
  2779. tls)
  2780. shift
  2781. tls_ca "$@"
  2782. ;;
  2783.  
  2784. trap)
  2785. require_ctlengine
  2786. opensips_trap
  2787. ;;
  2788.  
  2789. start)
  2790. opensips_start
  2791. ;;
  2792.  
  2793. stop)
  2794. opensips_stop
  2795. ;;
  2796.  
  2797. version)
  2798. echo "$0 $VERSION"
  2799. ;;
  2800.  
  2801. *)
  2802. merr "$0: Unknown command - \"$1\""
  2803. usage
  2804. exit 1
  2805. ;;
  2806. esac
Add Comment
Please, Sign In to add comment