瀏覽代碼

make SQLite optional

mom040267 11 年之前
父節點
當前提交
924fa29c5e

+ 2 - 2
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
 

+ 3 - 3
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
 

+ 1 - 1
README.turnutils

@@ -251,7 +251,7 @@ FILES
 
 /etc/turnserver.conf
 
-~/turndb
+/var/db/turndb
 
 /usr/local/etc/turnserver.conf
 

+ 26 - 27
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

+ 2 - 2
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.

+ 3 - 3
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

+ 4 - 4
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

+ 2 - 2
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

+ 13 - 2
src/apps/relay/dbdrivers/dbd_sqlite.c

@@ -32,6 +32,8 @@
 #include "../mainrelay.h"
 #include "dbd_sqlite.h"
 
+#if !defined(TURN_NO_SQLITE)
+
 #include <sqlite3.h>
 
 #include <unistd.h>
@@ -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

+ 30 - 23
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;
 }
 

+ 17 - 4
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				<filename>	Configuration file name (default - turnserver.conf).\n"
-" -b, , --db, --userdb	<filename>		SQLite database file name (default - ~/turndb).\n"
+#if !defined(TURN_NO_SQLITE)
+" -b, , --db, --userdb	<filename>		SQLite database file name (default - /var/db/turndb).\n"
+#endif
 #if !defined(TURN_NO_PQ)
 " -e, --psql-userdb, --sql-userdb <conn-string>	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

+ 2 - 0
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);

+ 6 - 1
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