ser_mysql.sh 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887
  1. #!/bin/sh
  2. #
  3. # $Id$
  4. #
  5. # Script for adding and dropping ser MySql tables
  6. #
  7. # TO-DO: update_structures command for migriting to new
  8. # table definitons
  9. # USAGE: call the command without any parameters for info
  10. #
  11. # 2003-01-21 changed SILO table definition, by dcm
  12. #
  13. # History:
  14. # 2003-03-12 added replication mark and state columns to location (nils)
  15. # 2003-03-05: Changed user to username, user is reserved word (janakj)
  16. # 2003-01-26 statistics table introduced (jiri)
  17. # 2003-01-25: Optimized keys of some core tables (janakj)
  18. # 2003-01-25: USER_ID changed to user everywhere (janakj)
  19. # 2003-01-24: Changed realm column of subscriber and pending
  20. # tables to domain (janakj)
  21. # 2003-04-14 reinstall introduced (jiri)
  22. # 2004-07-05 new definition of table silo (dcm)
  23. #################################################################
  24. # config vars
  25. #################################################################
  26. DBNAME=ser
  27. DBHOST=localhost
  28. USERNAME=ser
  29. DEFAULT_PW=heslo
  30. ROUSER=serro
  31. RO_PW=47serro11
  32. SQL_USER="root"
  33. CMD="mysql -h $DBHOST -u$SQL_USER "
  34. DUMP_CMD="mysqldump -h $DBHOST -u$SQL_USER -c -t "
  35. BACKUP_CMD="mysqldump -h $DBHOST -u$SQL_USER -c "
  36. TABLE_TYPE="TYPE=MyISAM"
  37. # user name column
  38. USERCOL="username"
  39. GENHA1='gen_ha1'
  40. FOREVER="2020-05-28 21:32:15"
  41. DEFAULT_ALIASES_EXPIRES=$FOREVER
  42. DEFAULT_Q="1.0"
  43. DEFAULT_CALLID="Default-Call-ID"
  44. DEFAULT_CSEQ="42"
  45. DEFAULT_LOCATION_EXPIRES=$FOREVER
  46. #################################################################
  47. usage() {
  48. COMMAND=`basename $0`
  49. cat <<EOF
  50. usage: $COMMAND create
  51. $COMMAND drop (!!entirely deletes tables)
  52. $COMMAND reinit (!!entirely deletes and than re-creates tables
  53. $COMMAND backup (dumps current database to stdout)
  54. $COMMAND restore <file> (restores tables from a file)
  55. $COMMAND copy <new_db> (creates a new db from an existing one)
  56. $COMMAND reinstall (updates to a new SER database)
  57. if you want to manipulate database as other MySql user than
  58. root, want to change database name from default value "$DBNAME",
  59. or want to use other values for users and password, edit the
  60. "config vars" section of the command $COMMAND
  61. EOF
  62. } #usage
  63. # read password
  64. prompt_pw()
  65. {
  66. savetty=`stty -g`
  67. printf "MySql password for $SQL_USER: "
  68. stty -echo
  69. read PW
  70. stty $savetty
  71. echo
  72. }
  73. # execute sql command
  74. sql_query()
  75. {
  76. $CMD "-p$PW" "$@"
  77. }
  78. # dump all rows
  79. ser_dump() # pars: <database name>
  80. {
  81. if [ $# -ne 1 ] ; then
  82. echo "ser_dump function takes one param"
  83. exit 1
  84. fi
  85. $DUMP_CMD "-p$PW" $1
  86. }
  87. # copy a database to database_bak
  88. ser_backup() # par: <database name>
  89. {
  90. if [ $# -ne 1 ] ; then
  91. echo "ser_backup function takes one param"
  92. exit 1
  93. fi
  94. BU=/tmp/mysql_bup.$$
  95. $BACKUP_CMD "-p$PW" $1 > $BU
  96. if [ "$?" -ne 0 ] ; then
  97. echo "ser backup dump failed"
  98. exit 1
  99. fi
  100. sql_query <<EOF
  101. create database $1_bak;
  102. EOF
  103. ser_restore $1_bak $BU
  104. if [ "$?" -ne 0 ]; then
  105. echo "ser backup/restore failed"
  106. rm $BU
  107. exit 1
  108. fi
  109. }
  110. ser_restore() #pars: <database name> <filename>
  111. {
  112. if [ $# -ne 2 ] ; then
  113. echo "ser_restore function takes two params"
  114. exit 1
  115. fi
  116. sql_query $1 < $2
  117. }
  118. ser_drop() # pars: <database name>
  119. {
  120. if [ $# -ne 1 ] ; then
  121. echo "ser_drop function takes two params"
  122. exit 1
  123. fi
  124. sql_query << EOF
  125. drop database $1;
  126. EOF
  127. } #ser_drop
  128. # read realm
  129. prompt_realm()
  130. {
  131. printf "Domain (realm) for the default user 'admin': "
  132. read SIP_DOMAIN
  133. echo
  134. }
  135. # calculate credentials for admin
  136. credentials()
  137. {
  138. HA1=`$GENHA1 admin $SIP_DOMAIN heslo`
  139. if [ $? -ne 0 ] ; then
  140. echo "HA1 calculation failed"
  141. exit 1
  142. fi
  143. HA1B=`$GENHA1 "admin@$SIP_DOMAIN" $SIP_DOMAIN heslo`
  144. if [ $? -ne 0 ] ; then
  145. echo "HA1B calculation failed"
  146. exit 1
  147. fi
  148. #PHPLIB_ID of users should be difficulty to guess for security reasons
  149. NOW=`date`;
  150. PHPLIB_ID=`$GENHA1 "$RANDOM" "$NOW" $SIP_DOMAIN`
  151. if [ $? -ne 0 ] ; then
  152. echo "PHPLIB_ID calculation failed"
  153. exit 1
  154. fi
  155. }
  156. ser_create () # pars: <database name> [<no_init_user>]
  157. {
  158. if [ $# -eq 1 ] ; then
  159. if [ -z "$SIP_DOMAIN" ] ; then
  160. prompt_realm
  161. fi
  162. credentials
  163. # by default we create initial user
  164. INITIAL_USER="INSERT INTO subscriber
  165. ($USERCOL, password, first_name, last_name, phone,
  166. email_address, datetime_created, datetime_modified, confirmation,
  167. flag, sendnotification, greeting, ha1, domain, ha1b, phplib_id )
  168. VALUES ( 'admin', 'heslo', 'Initial', 'Admin', '123',
  169. 'root@localhost', '2002-09-04 19:37:45', '0000-00-00 00:00:00',
  170. '57DaSIPuCm52UNe54LF545750cfdL48OMZfroM53', 'o', '', '',
  171. '$HA1', '$SIP_DOMAIN', '$HA1B',
  172. '$PHPLIB_ID' );
  173. INSERT INTO admin_privileges ($USERCOL, domain, priv_name, priv_value)
  174. VALUES ('admin', '$SIP_DOMAIN', 'is_admin', '1');
  175. INSERT INTO admin_privileges ($USERCOL, domain, priv_name, priv_value)
  176. VALUES ('admin', '$SIP_DOMAIN', 'change_privileges', '1');"
  177. elif [ $# -eq 2 ] ; then
  178. # if 3rd param set, don't create any initial user
  179. INITIAL_USER=""
  180. else
  181. echo "ser_create function takes one or two params"
  182. exit 1
  183. fi
  184. echo "creating database $1 ..."
  185. sql_query <<EOF
  186. create database $1;
  187. use $1;
  188. # Users: ser is the regular user, serro only for reading
  189. GRANT ALL PRIVILEGES ON $1.* TO $USERNAME IDENTIFIED BY '$DEFAULT_PW';
  190. GRANT ALL PRIVILEGES ON $1.* TO ${USERNAME}@$DBHOST IDENTIFIED BY '$DEFAULT_PW';
  191. GRANT SELECT ON $1.* TO $ROUSER IDENTIFIED BY '$RO_PW';
  192. GRANT SELECT ON $1.* TO ${ROUSER}@$DBHOST IDENTIFIED BY '$RO_PW';
  193. #
  194. # Table structure versions
  195. #
  196. CREATE TABLE version (
  197. table_name varchar(64) NOT NULL,
  198. table_version smallint(5) DEFAULT '0' NOT NULL
  199. ) $TABLE_TYPE;
  200. #
  201. # Dumping data for table 'version'
  202. #
  203. INSERT INTO version VALUES ( 'subscriber', '5');
  204. INSERT INTO version VALUES ( 'reserved', '1');
  205. INSERT INTO version VALUES ( 'phonebook', '1');
  206. INSERT INTO version VALUES ( 'pending', '4');
  207. INSERT INTO version VALUES ( 'missed_calls', '2');
  208. INSERT INTO version VALUES ( 'location', '6');
  209. INSERT INTO version VALUES ( 'grp', '2');
  210. INSERT INTO version VALUES ( 'event', '1');
  211. INSERT INTO version VALUES ( 'aliases', '6');
  212. INSERT INTO version VALUES ( 'active_sessions', '1');
  213. INSERT INTO version VALUES ( 'acc', '2');
  214. INSERT INTO version VALUES ( 'config', '1');
  215. INSERT INTO version VALUES ( 'silo', '3');
  216. INSERT INTO version VALUES ( 'realm', '1');
  217. INSERT INTO version VALUES ( 'domain', '1');
  218. INSERT INTO version VALUES ( 'uri', '1');
  219. INSERT INTO version VALUES ( 'server_monitoring', '1');
  220. INSERT INTO version VALUES ( 'server_monitoring_agg', '1');
  221. INSERT INTO version VALUES ( 'trusted', '1');
  222. INSERT INTO version VALUES ( 'usr_preferences', '2');
  223. INSERT INTO version VALUES ( 'usr_preferences_types', '1');
  224. INSERT INTO version VALUES ( 'admin_privileges', '1');
  225. INSERT INTO version VALUES ( 'calls_forwarding', '1');
  226. INSERT INTO version VALUES ( 'speed_dial', '2');
  227. INSERT INTO version VALUES ( 'gw', '1');
  228. INSERT INTO version VALUES ( 'gw_grp', '1');
  229. INSERT INTO version VALUES ( 'lcr', '1');
  230. #
  231. # Table structure for table 'acc' -- accounted calls
  232. #
  233. CREATE TABLE acc (
  234. caller_UUID varchar(64) NOT NULL default '',
  235. callee_UUID varchar(64) NOT NULL default '',
  236. sip_from varchar(128) NOT NULL default '',
  237. sip_to varchar(128) NOT NULL default '',
  238. sip_status varchar(128) NOT NULL default '',
  239. sip_method varchar(16) NOT NULL default '',
  240. i_uri varchar(128) NOT NULL default '',
  241. o_uri varchar(128) NOT NULL default '',
  242. from_uri varchar(128) NOT NULL default '',
  243. to_uri varchar(128) NOT NULL default '',
  244. sip_callid varchar(128) NOT NULL default '',
  245. $USERCOL varchar(64) NOT NULL default '',
  246. domain varchar(128) NOT NULL default '',
  247. fromtag varchar(128) NOT NULL default '',
  248. totag varchar(128) NOT NULL default '',
  249. time datetime NOT NULL default '0000-00-00 00:00:00',
  250. timestamp timestamp(14) NOT NULL,
  251. caller_deleted char(1) NOT NULL default '0',
  252. callee_deleted char(1) NOT NULL default '0',
  253. INDEX acc_user ($USERCOL, domain),
  254. KEY sip_callid (sip_callid)
  255. ) $TABLE_TYPE;
  256. #
  257. # Table structure for table 'active_sessions' -- web stuff
  258. #
  259. CREATE TABLE active_sessions (
  260. sid varchar(32) NOT NULL default '',
  261. name varchar(32) NOT NULL default '',
  262. val text,
  263. changed varchar(14) NOT NULL default '',
  264. PRIMARY KEY (name,sid),
  265. KEY changed (changed)
  266. ) $TABLE_TYPE;
  267. #
  268. # Table structure for table 'aliases' -- location-like table
  269. # (aliases_contact index makes lookup of missed calls much faster)
  270. #
  271. CREATE TABLE aliases (
  272. $USERCOL varchar(64) NOT NULL default '',
  273. domain varchar(128) NOT NULL default '',
  274. contact varchar(255) NOT NULL default '',
  275. received varchar(255) default NULL,
  276. expires datetime NOT NULL default '$DEFAULT_ALIASES_EXPIRES',
  277. q float(10,3) NOT NULL default '$DEFAULT_Q',
  278. callid varchar(255) NOT NULL default '$DEFAULT_CALLID',
  279. cseq int(11) NOT NULL default '$DEFAULT_CSEQ',
  280. last_modified timestamp(14) NOT NULL,
  281. replicate int(10) unsigned NOT NULL default '0',
  282. state tinyint(1) unsigned NOT NULL default '0',
  283. flags int(11) NOT NULL default '0',
  284. user_agent varchar(50) NOT NULL default '',
  285. PRIMARY KEY($USERCOL, domain, contact),
  286. INDEX aliases_contact (contact)
  287. ) $TABLE_TYPE;
  288. #
  289. # Table structure for table 'event' -- track of predefined
  290. # events to which a user subscribed
  291. #
  292. CREATE TABLE event (
  293. id int(10) unsigned NOT NULL auto_increment,
  294. $USERCOL varchar(64) NOT NULL default '',
  295. domain varchar(128) NOT NULL default '',
  296. uri varchar(255) NOT NULL default '',
  297. description varchar(255) NOT NULL default '',
  298. PRIMARY KEY (id)
  299. ) $TABLE_TYPE;
  300. #
  301. # Table structure for table 'grp' -- group membership
  302. # table; used primarily for ACLs
  303. #
  304. CREATE TABLE grp (
  305. $USERCOL varchar(64) NOT NULL default '',
  306. domain varchar(128) NOT NULL default '',
  307. grp varchar(50) NOT NULL default '',
  308. last_modified datetime NOT NULL default '0000-00-00 00:00:00',
  309. PRIMARY KEY($USERCOL, domain, grp)
  310. ) $TABLE_TYPE;
  311. #
  312. # Table structure for table 'location' -- that is persistent UsrLoc
  313. #
  314. CREATE TABLE location (
  315. $USERCOL varchar(64) NOT NULL default '',
  316. domain varchar(128) NOT NULL default '',
  317. contact varchar(255) NOT NULL default '',
  318. received varchar(255) default NULL,
  319. expires datetime NOT NULL default '$DEFAULT_LOCATION_EXPIRES',
  320. q float(10,3) NOT NULL default '$DEFAULT_Q',
  321. callid varchar(255) NOT NULL default '$DEFAULT_CALLID',
  322. cseq int(11) NOT NULL default '$DEFAULT_CSEQ',
  323. last_modified timestamp(14) NOT NULL,
  324. replicate int(10) unsigned NOT NULL default '0',
  325. state tinyint(1) unsigned NOT NULL default '0',
  326. flags int(11) NOT NULL default '0',
  327. user_agent varchar(50) NOT NULL default '',
  328. PRIMARY KEY($USERCOL, domain, contact)
  329. ) $TABLE_TYPE;
  330. #
  331. # Table structure for table 'missed_calls' -- acc-like table
  332. # for keeping track of missed calls
  333. #
  334. CREATE TABLE missed_calls (
  335. sip_from varchar(128) NOT NULL default '',
  336. sip_to varchar(128) NOT NULL default '',
  337. sip_status varchar(128) NOT NULL default '',
  338. sip_method varchar(16) NOT NULL default '',
  339. i_uri varchar(128) NOT NULL default '',
  340. o_uri varchar(128) NOT NULL default '',
  341. from_uri varchar(128) NOT NULL default '',
  342. to_uri varchar(128) NOT NULL default '',
  343. sip_callid varchar(128) NOT NULL default '',
  344. $USERCOL varchar(64) NOT NULL default '',
  345. domain varchar(128) NOT NULL default '',
  346. fromtag varchar(128) NOT NULL default '',
  347. totag varchar(128) NOT NULL default '',
  348. time datetime NOT NULL default '0000-00-00 00:00:00',
  349. timestamp timestamp(14) NOT NULL,
  350. INDEX mc_user ($USERCOL, domain)
  351. ) $TABLE_TYPE;
  352. #
  353. # Table structure for table 'pending' -- unconfirmed subscribtion
  354. # requests
  355. #
  356. CREATE TABLE pending (
  357. phplib_id varchar(32) NOT NULL default '',
  358. $USERCOL varchar(64) NOT NULL default '',
  359. domain varchar(128) NOT NULL default '',
  360. password varchar(25) NOT NULL default '',
  361. first_name varchar(25) NOT NULL default '',
  362. last_name varchar(45) NOT NULL default '',
  363. phone varchar(15) NOT NULL default '',
  364. email_address varchar(50) NOT NULL default '',
  365. datetime_created datetime NOT NULL default '0000-00-00 00:00:00',
  366. datetime_modified datetime NOT NULL default '0000-00-00 00:00:00',
  367. confirmation varchar(64) NOT NULL default '',
  368. flag char(1) NOT NULL default 'o',
  369. sendnotification varchar(50) NOT NULL default '',
  370. greeting varchar(50) NOT NULL default '',
  371. ha1 varchar(128) NOT NULL default '',
  372. ha1b varchar(128) NOT NULL default '',
  373. allow_find char(1) NOT NULL default '0',
  374. timezone varchar(128) default NULL,
  375. rpid varchar(128) default NULL,
  376. domn int(10) default NULL,
  377. uuid varchar(64) default NULL,
  378. PRIMARY KEY ($USERCOL, domain),
  379. KEY user_2 ($USERCOL),
  380. UNIQUE KEY phplib_id (phplib_id)
  381. ) $TABLE_TYPE;
  382. #
  383. # Table structure for table 'phonebook' -- user's phonebook
  384. #
  385. CREATE TABLE phonebook (
  386. id int(10) unsigned NOT NULL auto_increment,
  387. $USERCOL varchar(64) NOT NULL default '',
  388. domain varchar(128) NOT NULL default '',
  389. fname varchar(32) NOT NULL default '',
  390. lname varchar(32) NOT NULL default '',
  391. sip_uri varchar(128) NOT NULL default '',
  392. PRIMARY KEY (id)
  393. ) $TABLE_TYPE;
  394. #
  395. # Table structure for table 'reserved' -- reserved username
  396. # which should be never allowed for subscription
  397. #
  398. CREATE TABLE reserved (
  399. $USERCOL char(64) NOT NULL default '',
  400. UNIQUE KEY user2(username)
  401. ) $TABLE_TYPE;
  402. #
  403. # Table structure for table 'subscriber' -- user database
  404. #
  405. CREATE TABLE subscriber (
  406. phplib_id varchar(32) NOT NULL default '',
  407. $USERCOL varchar(64) NOT NULL default '',
  408. domain varchar(128) NOT NULL default '',
  409. password varchar(25) NOT NULL default '',
  410. first_name varchar(25) NOT NULL default '',
  411. last_name varchar(45) NOT NULL default '',
  412. phone varchar(15) NOT NULL default '',
  413. email_address varchar(50) NOT NULL default '',
  414. datetime_created datetime NOT NULL default '0000-00-00 00:00:00',
  415. datetime_modified datetime NOT NULL default '0000-00-00 00:00:00',
  416. confirmation varchar(64) NOT NULL default '',
  417. flag char(1) NOT NULL default 'o',
  418. sendnotification varchar(50) NOT NULL default '',
  419. greeting varchar(50) NOT NULL default '',
  420. ha1 varchar(128) NOT NULL default '',
  421. ha1b varchar(128) NOT NULL default '',
  422. allow_find char(1) NOT NULL default '0',
  423. timezone varchar(128) default NULL,
  424. rpid varchar(128) default NULL,
  425. domn int(10) default NULL,
  426. uuid varchar(64) default NULL,
  427. UNIQUE KEY phplib_id (phplib_id),
  428. PRIMARY KEY ($USERCOL, domain),
  429. KEY user_2 ($USERCOL)
  430. ) $TABLE_TYPE;
  431. # hook-table for all posssible future config values
  432. # (currently unused)
  433. CREATE TABLE config (
  434. attribute varchar(32) NOT NULL,
  435. value varchar(128) NOT NULL,
  436. $USERCOL varchar(64) NOT NULL default '',
  437. domain varchar(128) NOT NULL default '',
  438. modified timestamp(14)
  439. ) $TABLE_TYPE;
  440. # "instant" message silo
  441. CREATE TABLE silo(
  442. mid INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
  443. src_addr VARCHAR(255) NOT NULL DEFAULT "",
  444. dst_addr VARCHAR(255) NOT NULL DEFAULT "",
  445. r_uri VARCHAR(255) NOT NULL DEFAULT "",
  446. username VARCHAR(64) NOT NULL DEFAULT "",
  447. domain VARCHAR(128) NOT NULL DEFAULT "",
  448. inc_time INTEGER NOT NULL DEFAULT 0,
  449. exp_time INTEGER NOT NULL DEFAULT 0,
  450. ctype VARCHAR(32) NOT NULL DEFAULT "text/plain",
  451. body BLOB NOT NULL DEFAULT ""
  452. ) $TABLE_TYPE;
  453. #
  454. # Table structure for table 'domain' -- domains proxy is responsible for
  455. #
  456. CREATE TABLE domain (
  457. domain varchar(128) NOT NULL default '',
  458. last_modified datetime NOT NULL default '0000-00-00 00:00:00',
  459. PRIMARY KEY (domain)
  460. ) $TABLE_TYPE;
  461. #
  462. # Table structure for table 'uri' -- uri user parts users are allowed to use
  463. #
  464. CREATE TABLE uri (
  465. $USERCOL varchar(64) NOT NULL default '',
  466. domain varchar(128) NOT NULL default '',
  467. uri_user varchar(50) NOT NULL default '',
  468. last_modified datetime NOT NULL default '0000-00-00 00:00:00',
  469. PRIMARY KEY ($USERCOL, domain, uri_user)
  470. ) $TABLE_TYPE;
  471. #
  472. # Table structure for table 'server_monitoring'
  473. #
  474. DROP TABLE IF EXISTS server_monitoring;
  475. CREATE TABLE server_monitoring (
  476. time datetime NOT NULL default '0000-00-00 00:00:00',
  477. id int(10) unsigned NOT NULL default '0',
  478. param varchar(32) NOT NULL default '',
  479. value int(10) NOT NULL default '0',
  480. increment int(10) NOT NULL default '0',
  481. PRIMARY KEY (id,param)
  482. ) $TABLE_TYPE;
  483. #
  484. # Table structure for table 'usr_preferences'
  485. #
  486. DROP TABLE IF EXISTS usr_preferences;
  487. CREATE TABLE usr_preferences (
  488. uuid varchar(64) NOT NULL default '',
  489. $USERCOL varchar(100) NOT NULL default '0',
  490. domain varchar(128) NOT NULL default '',
  491. attribute varchar(32) NOT NULL default '',
  492. value varchar(128) NOT NULL default '',
  493. type integer NOT NULL default '0',
  494. modified timestamp(14) NOT NULL,
  495. PRIMARY KEY (attribute,$USERCOL,domain)
  496. ) $TABLE_TYPE;
  497. #
  498. # Table structure for table 'usr_preferences_types' -- types of atributes in preferences
  499. #
  500. CREATE TABLE usr_preferences_types (
  501. att_name varchar(32) NOT NULL default '',
  502. att_rich_type varchar(32) NOT NULL default 'string',
  503. att_raw_type int(11) unsigned NOT NULL default '2',
  504. att_type_spec text,
  505. default_value varchar(100) NOT NULL default '',
  506. PRIMARY KEY (att_name)
  507. ) $TABLE_TYPE;
  508. #
  509. # Table structure for table trusted
  510. CREATE TABLE trusted (
  511. src_ip varchar(39) NOT NULL,
  512. proto varchar(4) NOT NULL,
  513. from_pattern varchar(64) NOT NULL,
  514. PRIMARY KEY (src_ip, proto, from_pattern)
  515. ) $TABLE_TYPE;
  516. #
  517. # Table structure for table 'server_monitoring_agg'
  518. #
  519. DROP TABLE IF EXISTS server_monitoring_agg;
  520. CREATE TABLE server_monitoring_agg (
  521. param varchar(32) NOT NULL default '',
  522. s_value int(10) NOT NULL default '0',
  523. s_increment int(10) NOT NULL default '0',
  524. last_aggregated_increment int(10) NOT NULL default '0',
  525. av float NOT NULL default '0',
  526. mv int(10) NOT NULL default '0',
  527. ad float NOT NULL default '0',
  528. lv int(10) NOT NULL default '0',
  529. min_val int(10) NOT NULL default '0',
  530. max_val int(10) NOT NULL default '0',
  531. min_inc int(10) NOT NULL default '0',
  532. max_inc int(10) NOT NULL default '0',
  533. lastupdate datetime NOT NULL default '0000-00-00 00:00:00',
  534. PRIMARY KEY (param)
  535. ) $TABLE_TYPE;
  536. #
  537. # Table structure for table 'admin_privileges' -- multidomain serweb ACL control
  538. #
  539. CREATE TABLE admin_privileges (
  540. $USERCOL varchar(64) NOT NULL default '',
  541. domain varchar(128) NOT NULL default '',
  542. priv_name varchar(64) NOT NULL default '',
  543. priv_value varchar(64) NOT NULL default '',
  544. PRIMARY KEY ($USERCOL,priv_name,priv_value,domain)
  545. ) $TABLE_TYPE;
  546. #
  547. # Table structure for table 'calls_forwarding' -- curently used only for caller screening
  548. #
  549. CREATE TABLE calls_forwarding (
  550. $USERCOL varchar(64) NOT NULL default '',
  551. domain varchar(128) NOT NULL default '',
  552. uri_re varchar(128) NOT NULL default '',
  553. purpose varchar(32) NOT NULL default '',
  554. action varchar(32) NOT NULL default '',
  555. param1 varchar(128) default NULL,
  556. param2 varchar(128) default NULL,
  557. PRIMARY KEY ($USERCOL,domain,uri_re,purpose)
  558. ) $TABLE_TYPE;
  559. #
  560. # Table structure for table 'speed_dial'
  561. #
  562. CREATE TABLE speed_dial (
  563. uuid varchar(64) NOT NULL default '',
  564. $USERCOL varchar(64) NOT NULL default '',
  565. domain varchar(128) NOT NULL default '',
  566. sd_username varchar(64) NOT NULL default '',
  567. sd_domain varchar(128) NOT NULL default '',
  568. new_uri varchar(192) NOT NULL default '',
  569. fname varchar(128) NOT NULL default '',
  570. lname varchar(128) NOT NULL default '',
  571. description varchar(64) NOT NULL default '',
  572. PRIMARY KEY ($USERCOL,domain,sd_username,sd_domain)
  573. ) $TABLE_TYPE;
  574. #
  575. # Table structure for table 'gw'
  576. #
  577. CREATE TABLE gw (
  578. gw_name VARCHAR(128) NOT NULL,
  579. ip_addr INT UNSIGNED NOT NULL,
  580. port SMALLINT UNSIGNED,
  581. grp_id INT UNSIGNED NOT NULL,
  582. PRIMARY KEY (gw_name),
  583. KEY (grp_id)
  584. ) $TABLE_TYPE;
  585. #
  586. # Table structure for table 'gw_grp'
  587. #
  588. CREATE TABLE gw_grp (
  589. grp_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  590. grp_name VARCHAR(64) NOT NULL
  591. ) $TABLE_TYPE;
  592. #
  593. # Table structure for table 'lcr'
  594. #
  595. CREATE TABLE lcr (
  596. prefix varchar(16) NOT NULL,
  597. from_uri varchar(128) NOT NULL DEFAULT '%',
  598. grp_id INT UNSIGNED NOT NULL,
  599. priority TINYINT UNSIGNED NOT NULL,
  600. KEY (prefix),
  601. KEY (from_uri),
  602. KEY (grp_id)
  603. ) $TABLE_TYPE;
  604. # add an admin user "admin" with password==heslo,
  605. # so that one can try it out on quick start
  606. $INITIAL_USER
  607. EOF
  608. } # ser_create
  609. export PW
  610. if [ "$#" -ne 0 ]; then
  611. prompt_pw
  612. fi
  613. case $1 in
  614. reinstall)
  615. #1 create a backup database (named *_bak)
  616. echo "creating backup database"
  617. ser_backup $DBNAME
  618. if [ "$?" -ne 0 ] ; then
  619. echo "reinstall: ser_backup failed"
  620. exit 1
  621. fi
  622. #2 dump original database and change names in it
  623. echo "dumping table content ($DBNAME)"
  624. tmp_file=/tmp/ser_mysql.$$
  625. ser_dump $DBNAME > $tmp_file
  626. if [ "$?" -ne 0 ] ; then
  627. echo "reinstall: dumping original db failed"
  628. exit 1
  629. fi
  630. sed "s/[uU][sS][eE][rR]_[iI][dD]/user/g" $tmp_file |
  631. sed "s/[uU][sS][eE][rR]\($\|[^a-zA-Z]\)/$USERCOL\1/g" |
  632. sed "s/[rR][eE][aA][lL][mM]/domain/g"> ${tmp_file}.2
  633. #3 drop original database
  634. echo "dropping table ($DBNAME)"
  635. ser_drop $DBNAME
  636. if [ "$?" -ne 0 ] ; then
  637. echo "reinstall: dropping table failed"
  638. rm $tmp_file*
  639. exit 1
  640. fi
  641. #4 change names in table definition and restore
  642. echo "creating new structures"
  643. ser_create $DBNAME no_init_user
  644. if [ "$?" -ne 0 ] ; then
  645. echo "reinstall: creating new table failed"
  646. rm $tmp_file*
  647. exit 1
  648. fi
  649. #5 restoring table content
  650. echo "restoring table content"
  651. # Recreate perms column here so that subsequent
  652. # restore succeeds
  653. sql_query $DBNAME << EOF
  654. ALTER TABLE subscriber ADD perms VARCHAR(32) AFTER ha1b;
  655. ALTER TABLE pending ADD perms VARCHAR(32) AFTER ha1b;
  656. EOF
  657. ser_restore $DBNAME ${tmp_file}.2
  658. if [ "$?" -ne 0 ] ; then
  659. echo "reinstall: restoring table failed"
  660. rm $tmp_file*
  661. exit 1
  662. fi
  663. sql_query $DBNAME << EOF
  664. # Move perms from subscriber to admin_privileges
  665. INSERT INTO admin_privileges ($USERCOL, domain, priv_name, priv_value) SELECT $USERCOL, domain, 'is_admin', '1' FROM subscriber WHERE perms='admin';
  666. # Drop perms column here
  667. ALTER TABLE subscriber DROP perms;
  668. ALTER TABLE pending DROP perms;
  669. EOF
  670. #XX
  671. # rm $tmp_file*
  672. exit 0
  673. ;;
  674. copy)
  675. # copy database to some other name
  676. shift
  677. if [ $# -ne 1 ]; then
  678. usage
  679. exit 1
  680. fi
  681. tmp_file=/tmp/ser_mysql.$$
  682. ser_dump $DBNAME > $tmp_file
  683. ret=$?
  684. if [ "$ret" -ne 0 ]; then
  685. rm $tmp_file
  686. exit $ret
  687. fi
  688. ser_create $1 no_init_user
  689. ret=$?
  690. if [ "$ret" -ne 0 ]; then
  691. rm $tmp_file
  692. exit $ret
  693. fi
  694. ser_restore $1 $tmp_file
  695. ret=$?
  696. rm $tmp_file
  697. exit $ret
  698. ;;
  699. backup)
  700. # backup current database
  701. ser_dump $DBNAME
  702. exit $?
  703. ;;
  704. restore)
  705. # restore database from a backup
  706. shift
  707. if [ $# -ne 1 ]; then
  708. usage
  709. exit 1
  710. fi
  711. ser_restore $DBNAME $1
  712. exit $?
  713. ;;
  714. create)
  715. # create new database structures
  716. shift
  717. if [ $# -eq 1 ] ; then
  718. DBNAME="$1"
  719. fi
  720. ser_create $DBNAME
  721. exit $?
  722. ;;
  723. drop)
  724. # delete ser database
  725. ser_drop $DBNAME
  726. exit $?
  727. ;;
  728. reinit)
  729. # delete database and create a new one
  730. ser_drop $DBNAME
  731. ret=$?
  732. if [ "$ret" -ne 0 ]; then
  733. exit $ret
  734. fi
  735. ser_create $DBNAME
  736. exit $?
  737. ;;
  738. *)
  739. usage
  740. exit 1;
  741. ;;
  742. esac