diff --git a/README.turnadmin b/README.turnadmin index 22d1f70f..a2f6b27d 100644 --- a/README.turnadmin +++ b/README.turnadmin @@ -80,7 +80,7 @@ Commands: Options with required values: --b, --db, --userdb SQLite user database file name (default - ~/turndb). +-b, --db, --userdb SQLite user database file name (default - /var/db/turndb). See the same option in the turnserver section. -e, --psql-userdb PostgreSQL user database connection string. See the --psql-userdb option in the turnserver section. @@ -170,7 +170,7 @@ to see the man page. /etc/turnserver.conf -~/turndb +/var/db/turndb /usr/local/etc/turnserver.conf diff --git a/README.turnserver b/README.turnserver index a2199b28..867cfd5b 100644 --- a/README.turnserver +++ b/README.turnserver @@ -81,7 +81,7 @@ Config file settings: User database settings: --b, --db, --userdb SQLite user database file name (default - ~/turndb). +-b, --db, --userdb SQLite user database file name (default - /var/db/turndb). -e, --psql-userdb User database connection string for PostgreSQL. This database can be used for long-term and short-term @@ -716,7 +716,7 @@ For the user database, the turnserver has the following options: Obviously, only a few users can be set that way, and their credentials are fixed for the turnserver process lifetime. -2) Users can be stored in SQLite DB. The default SQLite database file is ~/turndb. +2) Users can be stored in SQLite DB. The default SQLite database file is /var/db/turndb. 3) Users can be stored in PostgreSQL database, if the turnserver was compiled with PostgreSQL support. Each time turnserver checks user credentials, it reads the database (asynchronously, @@ -841,7 +841,7 @@ FILES /etc/turnserver.conf -~/turndb +/var/db/turndb /usr/local/etc/turnserver.conf diff --git a/README.turnutils b/README.turnutils index 8beaf824..61757a28 100644 --- a/README.turnutils +++ b/README.turnutils @@ -251,7 +251,7 @@ FILES /etc/turnserver.conf -~/turndb +/var/db/turndb /usr/local/etc/turnserver.conf diff --git a/configure b/configure index bf3e8e4e..c722a509 100755 --- a/configure +++ b/configure @@ -959,32 +959,6 @@ else TURN_NO_GCM="-DTURN_NO_GCM" fi -########################### -# Test SQLite setup -########################### - -testlib sqlite3 -ER=$? -if ! [ ${ER} -eq 0 ] ; then - ${ECHO_CMD} "SQLite library found." -else - ${ECHO_CMD} "ERROR: SQLite3 development library cannot be found." - cleanup - exit -fi - -testsqlite_comp -ER=$? -if ! [ ${ER} -eq 0 ] ; then - ${ECHO_CMD} "SQLite development found." -else - ${ECHO_CMD} "ERROR: SQLite development libraries are not installed properly in required location." - ${ECHO_CMD} "See the INSTALL file." - ${ECHO_CMD} "Abort." - cleanup - exit -fi - ########################### # Test Libevent2 setup ########################### @@ -1055,6 +1029,31 @@ else exit fi +########################### +# Test SQLite setup +########################### + +if [ -z "${TURN_NO_SQLITE}" ] ; then + + testlib sqlite3 + ER=$? + if ! [ ${ER} -eq 0 ] ; then + ${ECHO_CMD} "SQLite library found." + else + ${ECHO_CMD} "SQLite3 development library cannot be found." + TURN_NO_SQLITE="-DTURN_NO_SQLITE" + fi + + testsqlite_comp + ER=$? + if ! [ ${ER} -eq 0 ] ; then + ${ECHO_CMD} "SQLite development found." + else + ${ECHO_CMD} "SQLite development libraries are not installed properly in required location." + TURN_NO_SQLITE="-DTURN_NO_SQLITE" + fi +fi + ########################### # Test PostgreSQL ########################### @@ -1178,7 +1177,7 @@ ${ECHO_CMD} "LDFLAGS += ${OSLIBS}" >> Makefile ${ECHO_CMD} "DBLIBS += ${DBLIBS}" >> Makefile ${ECHO_CMD} "CFLAGS += ${OSCFLAGS}" >> Makefile ${ECHO_CMD} "CPPFLAGS = ${CPPFLAGS}" >> Makefile -${ECHO_CMD} "DBCFLAGS += ${DBCFLAGS} ${TURN_NO_PQ} ${TURN_NO_MYSQL} ${TURN_NO_MONGO} ${TURN_NO_HIREDIS}" >> Makefile +${ECHO_CMD} "DBCFLAGS += ${DBCFLAGS} ${TURN_NO_PQ} ${TURN_NO_MYSQL} ${TURN_NO_SQLITE} ${TURN_NO_MONGO} ${TURN_NO_HIREDIS}" >> Makefile ${ECHO_CMD} "#" >> Makefile ${ECHO_CMD} "PORTNAME = ${PORTNAME}" >> Makefile ${ECHO_CMD} "PREFIX = ${PREFIX}" >> Makefile diff --git a/examples/etc/turnserver.conf b/examples/etc/turnserver.conf index e853f500..3e6cd203 100644 --- a/examples/etc/turnserver.conf +++ b/examples/etc/turnserver.conf @@ -250,9 +250,9 @@ # SQLite database file name. # -# Default file name is ~/turndb (turndb in the process' home directory). +# Default file name is /var/db/turndb (turndb in the process' home directory). # -#userdb=~/turndb +#userdb=/var/db/turndb # PostgreSQL database connection string in the case that we are using PostgreSQL # as the user database. diff --git a/man/man1/turnadmin.1 b/man/man1/turnadmin.1 index dd0cf25d..85470c69 100644 --- a/man/man1/turnadmin.1 +++ b/man/man1/turnadmin.1 @@ -1,5 +1,5 @@ .\" Text automatically generated by txt2man -.TH TURN 1 "16 November 2014" "" "" +.TH TURN 1 "19 November 2014" "" "" .SH GENERAL INFORMATION \fIturnadmin\fP is a TURN administration tool. This tool can be used to manage @@ -132,7 +132,7 @@ Options with required values: .TP .B \fB\-b\fP, \fB\-\-db\fP, \fB\-\-userdb\fP -SQLite user database file name (default \- ~/turndb). +SQLite user database file name (default \- /var/db/turndb). See the same option in the \fIturnserver\fP section. .TP .B @@ -261,7 +261,7 @@ to see the man page. /etc/turnserver.conf .PP -~/turndb +/var/db/turndb .PP /usr/local/etc/turnserver.conf .PP diff --git a/man/man1/turnserver.1 b/man/man1/turnserver.1 index bad4a5df..5cdc166c 100644 --- a/man/man1/turnserver.1 +++ b/man/man1/turnserver.1 @@ -1,5 +1,5 @@ .\" Text automatically generated by txt2man -.TH TURN 1 "16 November 2014" "" "" +.TH TURN 1 "19 November 2014" "" "" .SH GENERAL INFORMATION The \fBTURN Server\fP project contains the source code of a TURN server and TURN client @@ -132,7 +132,7 @@ User database settings: .TP .B \fB\-b\fP, \fB\-\-db\fP, \fB\-\-userdb\fP -SQLite user database file name (default \- ~/turndb). +SQLite user database file name (default \- /var/db/turndb). .TP .B \fB\-e\fP, \fB\-\-psql\-userdb\fP @@ -971,7 +971,7 @@ Users can be set in the command line, with multiple \fB\-u\fP or \fB\-\-user\fP Obviously, only a few users can be set that way, and their credentials are fixed for the \fIturnserver\fP process lifetime. .IP 2) 4 -Users can be stored in SQLite DB. The default SQLite database file is ~/turndb. +Users can be stored in SQLite DB. The default SQLite database file is /var/db/turndb. .IP 3) 4 Users can be stored in PostgreSQL database, if the \fIturnserver\fP was compiled with PostgreSQL support. Each time \fIturnserver\fP checks user credentials, it reads the database (asynchronously, @@ -1096,7 +1096,7 @@ it would affect the performance. /etc/turnserver.conf .PP -~/turndb +/var/db/turndb .PP /usr/local/etc/turnserver.conf .PP diff --git a/man/man1/turnutils.1 b/man/man1/turnutils.1 index 6df707ae..b2a60223 100644 --- a/man/man1/turnutils.1 +++ b/man/man1/turnutils.1 @@ -1,5 +1,5 @@ .\" Text automatically generated by txt2man -.TH TURN 1 "16 November 2014" "" "" +.TH TURN 1 "19 November 2014" "" "" .SH GENERAL INFORMATION A set of turnutils_* programs provides some utility functionality to be used @@ -374,7 +374,7 @@ to see the man page. /etc/turnserver.conf .PP -~/turndb +/var/db/turndb .PP /usr/local/etc/turnserver.conf .PP diff --git a/src/apps/relay/dbdrivers/dbd_sqlite.c b/src/apps/relay/dbdrivers/dbd_sqlite.c index 367332f7..0bb60956 100644 --- a/src/apps/relay/dbdrivers/dbd_sqlite.c +++ b/src/apps/relay/dbdrivers/dbd_sqlite.c @@ -32,6 +32,8 @@ #include "../mainrelay.h" #include "dbd_sqlite.h" +#if !defined(TURN_NO_SQLITE) + #include #include @@ -124,7 +126,12 @@ static sqlite3 * get_sqlite_connection(void) { int rc = sqlite3_open(pud->userdb, &sqliteconnection); if(!sqliteconnection || (rc != SQLITE_OK)) { const char* errmsg = sqlite3_errmsg(sqliteconnection); - TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot open SQLite DB connection: <%s>, runtime error: %s\n",pud->userdb,errmsg); + TURN_LOG_FUNC(TURN_LOG_LEVEL_ERROR, "Cannot open SQLite DB connection: <%s>, runtime error:\n %s\n (If your intention is to use a database for the TURN server, then\n check the TURN server process / file / DB directory permissions and\n re-start the TURN server)\n",pud->userdb,errmsg); + if(sqliteconnection) { + sqlite3_close(sqliteconnection); + sqliteconnection=NULL; + } + turn_params.default_users_db.userdb_type = TURN_USERDB_TYPE_UNKNOWN; } else if(!donot_print_connection_success){ init_sqlite_database(sqliteconnection); TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "SQLite DB connection success: %s\n",pud->userdb); @@ -923,8 +930,12 @@ static turn_dbdriver_t driver = { &sqlite_list_oauth_keys }; -/////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////// turn_dbdriver_t * get_sqlite_dbdriver(void) { return &driver; } + +////////////////////////////////////////////////// + +#endif diff --git a/src/apps/relay/dbdrivers/dbdriver.c b/src/apps/relay/dbdrivers/dbdriver.c index ecae7039..f51ac72a 100644 --- a/src/apps/relay/dbdrivers/dbdriver.c +++ b/src/apps/relay/dbdrivers/dbdriver.c @@ -60,36 +60,43 @@ persistent_users_db_t * get_persistent_users_db(void) { return &(turn_params.default_users_db.persistent_users_db); } -turn_dbdriver_t * get_dbdriver() { - if (!_driver) { - switch(turn_params.default_users_db.userdb_type) { - case TURN_USERDB_TYPE_SQLITE: - _driver = get_sqlite_dbdriver(); - break; +turn_dbdriver_t * get_dbdriver() +{ + + if (turn_params.default_users_db.userdb_type == TURN_USERDB_TYPE_UNKNOWN) + return NULL; + + if (!_driver) { + switch (turn_params.default_users_db.userdb_type){ +#if !defined(TURN_NO_SQLITE) + case TURN_USERDB_TYPE_SQLITE: + _driver = get_sqlite_dbdriver(); + break; +#endif #if !defined(TURN_NO_PQ) - case TURN_USERDB_TYPE_PQ: - _driver = get_pgsql_dbdriver(); - break; + case TURN_USERDB_TYPE_PQ: + _driver = get_pgsql_dbdriver(); + break; #endif #if !defined(TURN_NO_MYSQL) - case TURN_USERDB_TYPE_MYSQL: - _driver = get_mysql_dbdriver(); - break; + case TURN_USERDB_TYPE_MYSQL: + _driver = get_mysql_dbdriver(); + break; #endif #if !defined(TURN_NO_MONGO) - case TURN_USERDB_TYPE_MONGO: - _driver = get_mongo_dbdriver(); - break; + case TURN_USERDB_TYPE_MONGO: + _driver = get_mongo_dbdriver(); + break; #endif #if !defined(TURN_NO_HIREDIS) - case TURN_USERDB_TYPE_REDIS: - _driver = get_redis_dbdriver(); - break; + case TURN_USERDB_TYPE_REDIS: + _driver = get_redis_dbdriver(); + break; #endif - default: - break; - } - } - return _driver; + default: + break; + } + } + return _driver; } diff --git a/src/apps/relay/mainrelay.c b/src/apps/relay/mainrelay.c index 77aca642..f92fa8f4 100644 --- a/src/apps/relay/mainrelay.c +++ b/src/apps/relay/mainrelay.c @@ -412,7 +412,9 @@ static char Usage[] = "Usage: turnserver [options]\n" " Total bytes-per-second bandwidth the TURN server is allowed to allocate\n" " for the sessions, combined (input and output network streams are treated separately).\n" " -c Configuration file name (default - turnserver.conf).\n" -" -b, , --db, --userdb SQLite database file name (default - ~/turndb).\n" +#if !defined(TURN_NO_SQLITE) +" -b, , --db, --userdb SQLite database file name (default - /var/db/turndb).\n" +#endif #if !defined(TURN_NO_PQ) " -e, --psql-userdb, --sql-userdb PostgreSQL database connection string, if used (default - empty, no PostreSQL DB used).\n" " This database can be used for long-term and short-term credentials mechanisms,\n" @@ -584,7 +586,9 @@ static char AdminUsage[] = "Usage: turnadmin [command] [options]\n" " -g, --set-realm-option Set realm params: max-bps, total-quota, user-quota.\n" " -G, --list-realm-options List realm params.\n" "\nOptions with mandatory values:\n\n" - " -b, --db, --userdb SQLite database file, default value is ~/turndb.\n" +#if !defined(TURN_NO_SQLITE) + " -b, --db, --userdb SQLite database file, default value is /var/db/turndb.\n" +#endif #if !defined(TURN_NO_PQ) " -e, --psql-userdb, --sql-userdb PostgreSQL user database connection string, if PostgreSQL DB is used.\n" #endif @@ -600,7 +604,7 @@ static char AdminUsage[] = "Usage: turnadmin [command] [options]\n" " -u, --user Username\n" " -r, --realm Realm for long-term mechanism only\n" " -p, --password Password\n" -#if !defined(TURN_NO_PQ) || !defined(TURN_NO_MYSQL) || !defined(TURN_NO_MONGO) || !defined(TURN_NO_HIREDIS) +#if !defined(TURN_NO_SQLITE) || !defined(TURN_NO_PQ) || !defined(TURN_NO_MYSQL) || !defined(TURN_NO_MONGO) || !defined(TURN_NO_HIREDIS) " -o, --origin Origin\n" #endif " -H, --sha256 Use SHA256 digest function to be used for the message integrity.\n" @@ -714,8 +718,10 @@ static const struct myoption long_options[] = { { "st-cred-mech", optional_argument, NULL, 'A' }, { "no-auth", optional_argument, NULL, 'z' }, { "user", required_argument, NULL, 'u' }, +#if !defined(TURN_NO_SQLITE) { "userdb", required_argument, NULL, 'b' }, { "db", required_argument, NULL, 'b' }, +#endif #if !defined(TURN_NO_PQ) { "psql-userdb", required_argument, NULL, 'e' }, { "sql-userdb", required_argument, NULL, 'e' }, @@ -810,8 +816,10 @@ static const struct myoption admin_long_options[] = { { "delete-all-secrets", no_argument, NULL, DEL_ALL_AUTH_SECRETS_OPT }, { "add-st", no_argument, NULL, 'A' }, { "delete-st", no_argument, NULL, 'D' }, +#if !defined(TURN_NO_SQLITE) { "userdb", required_argument, NULL, 'b' }, { "db", required_argument, NULL, 'b' }, +#endif #if !defined(TURN_NO_PQ) { "psql-userdb", required_argument, NULL, 'e' }, { "sql-userdb", required_argument, NULL, 'e' }, @@ -1104,10 +1112,12 @@ static void set_option(int c, char *value) case 'u': add_user_account(value,0); break; +#if !defined(TURN_NO_SQLITE) case 'b': STRCPY(turn_params.default_users_db.persistent_users_db.userdb, value); turn_params.default_users_db.userdb_type = TURN_USERDB_TYPE_SQLITE; break; +#endif #if !defined(TURN_NO_PQ) case 'e': STRCPY(turn_params.default_users_db.persistent_users_db.userdb, value); @@ -1469,10 +1479,12 @@ static int adminmain(int argc, char **argv) case DEL_ALL_AUTH_SECRETS_OPT: ct = TA_DEL_SECRET; break; +#if !defined(TURN_NO_SQLITE) case 'b': STRCPY(turn_params.default_users_db.persistent_users_db.userdb,optarg); turn_params.default_users_db.userdb_type = TURN_USERDB_TYPE_SQLITE; break; +#endif #if !defined(TURN_NO_PQ) case 'e': STRCPY(turn_params.default_users_db.persistent_users_db.userdb,optarg); @@ -1587,8 +1599,9 @@ static void print_features(unsigned long mfn) TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "AEAD supported\n"); #endif +#if !defined(TURN_NO_SQLITE) TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "SQLite supported\n"); - +#endif #if !defined(TURN_NO_HIREDIS) TURN_LOG_FUNC(TURN_LOG_LEVEL_INFO, "Redis supported\n"); #else diff --git a/src/apps/relay/turncli.c b/src/apps/relay/turncli.c index cf129080..4f86d916 100644 --- a/src/apps/relay/turncli.c +++ b/src/apps/relay/turncli.c @@ -781,9 +781,11 @@ static void cli_print_configuration(struct cli_session* cs) if(turn_params.default_users_db.persistent_users_db.userdb[0]) { switch(turn_params.default_users_db.userdb_type) { +#if !defined(TURN_NO_SQLITE) case TURN_USERDB_TYPE_SQLITE: cli_print_str(cs,"SQLite","DB type",0); break; +#endif #if !defined(TURN_NO_PQ) case TURN_USERDB_TYPE_PQ: cli_print_str(cs,"Postgres","DB type",0); diff --git a/src/apps/relay/userdb.h b/src/apps/relay/userdb.h index dc4890fc..faf4504f 100644 --- a/src/apps/relay/userdb.h +++ b/src/apps/relay/userdb.h @@ -48,7 +48,7 @@ extern "C" { //////////// Defines ////////////////////////////// -#define DEFAULT_USERDB_FILE ("~/turndb") +#define DEFAULT_USERDB_FILE ("/var/db/turndb") #define AUTH_SECRET_SIZE (512) @@ -100,7 +100,12 @@ struct auth_message { }; enum _TURN_USERDB_TYPE { +#if !defined(TURN_NO_SQLITE) + TURN_USERDB_TYPE_UNKNOWN=-1, TURN_USERDB_TYPE_SQLITE=0 +#else + TURN_USERDB_TYPE_UNKNOWN=0 +#endif #if !defined(TURN_NO_PQ) ,TURN_USERDB_TYPE_PQ #endif