Branch: master

2a5e4eb5 2014-09-03 01:41:43 Timothy Pearson
Download installation files from correct locations
Keep track of arbiter(s) in use per connection
M raptorsmiface/libraptorsmiface.c
M raptorsmiface/libraptorsmiface.h
M xorg/X11R7.6/buildx.sh
diff --git a/raptorsmiface/libraptorsmiface.c b/raptorsmiface/libraptorsmiface.c
index 2ad0f6e..55e9294 100644
--- a/raptorsmiface/libraptorsmiface.c
+++ b/raptorsmiface/libraptorsmiface.c
@@ -41,22 +41,26 @@
 #include "list.h"
 #include "libraptorsmiface.h"
 
-#define STATISTICS_SERVER_START_EVENT		0
-#define STATISTICS_SERVER_STOP_EVENT		1
-#define STATISTICS_NEW_CONNECTION_EVENT		2
-#define STATISTICS_CONNECTION_STATUS_EVENT	3
-#define STATISTICS_DISCONNECTION_EVENT		4
+#define STATISTICS_SERVER_START_EVENT			0
+#define STATISTICS_SERVER_STOP_EVENT			1
+#define STATISTICS_NEW_CONNECTION_EVENT			2
+#define STATISTICS_CONNECTION_STATUS_EVENT		3
+#define STATISTICS_DISCONNECTION_EVENT			4
 
-#define RAPTORSMIFACE_CFG_DATABASE		"Database"
-#define RAPTORSMIFACE_CFG_DATABASE_SERVER	"Server"
-#define RAPTORSMIFACE_CFG_DATABASE_NAME		"Database"
-#define RAPTORSMIFACE_CFG_DATABASE_USER		"User"
-#define RAPTORSMIFACE_CFG_DATABASE_PASSWORD	"Password"
+#define RAPTORSMIFACE_CFG_DATABASE			"Database"
+#define RAPTORSMIFACE_CFG_DATABASE_SERVER		"Server"
+#define RAPTORSMIFACE_CFG_DATABASE_NAME			"Database"
+#define RAPTORSMIFACE_CFG_DATABASE_USER			"User"
+#define RAPTORSMIFACE_CFG_DATABASE_PASSWORD		"Password"
+
+#define RAPTORSMIFACE_CFG_DATABASE_SCHEMA_VERSION	1
 
 char *server = NULL;
 char *user = NULL;
 char *password = NULL;
 char *database = NULL;
+
+char *local_machine_fqdn = NULL;
 
 void dprint(const char *fmt, ...)
 {
@@ -126,6 +130,10 @@
 	struct list* param_n;
 	struct list* param_v;
 
+	/* set global variables */
+	local_machine_fqdn = raptor_sm_get_local_machine_fqdn();
+
+	/* open configuration file */
 	char cfg_file[256];
 	g_snprintf(cfg_file, 255, "%s/xrdp.ini", XRDP_CFG_PATH);
 
@@ -159,6 +167,39 @@
 	if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) {
 		dprint("[ERROR] MySQL connection FAILED [%s]\n\r", mysql_error(conn));
 		conn = 0;
+	}
+	else {
+		// Check schema version
+		char* query;
+		MYSQL_RES *res;
+		MYSQL_ROW row;
+		asprintf(&query, "SELECT value FROM dbschema WHERE skey='revision'");
+		if (mysql_query_internal(conn, query)) {
+			// Server error
+			free(query);
+			mysql_close(conn);
+			dprint("[ERROR] MySQL connection FAILED [%s]\n\r", mysql_error(conn));
+			conn = 0;
+		}
+		else {
+			free(query);
+			res = mysql_store_result(conn);
+			if ((row = mysql_fetch_row(res)) == NULL) {
+				dprint("[ERROR] Mandatory schema version key not found\n\r");
+				conn = 0;
+			}
+			else if (!row[0]) {
+				dprint("[ERROR] Mandatory schema version key not found\n\r");
+				conn = 0;
+			}
+			else {
+				int schema_version = atoi(row[0]);
+				if (schema_version != RAPTORSMIFACE_CFG_DATABASE_SCHEMA_VERSION) {
+					dprint("[ERROR] Schema version key mismatch (%d:%d)\n\r", schema_version, RAPTORSMIFACE_CFG_DATABASE_SCHEMA_VERSION);
+					conn = 0;
+				}
+			}
+		}
 	}
 	return conn;
 }
@@ -285,10 +326,12 @@
 		// Insert connection information into the statistics database
 		char* safe_servername = get_mysql_escaped_string(conn, hostname);
 		char* safe_username = get_mysql_escaped_string(conn, username);
+		char* safe_local_machine_fqdn = get_mysql_escaped_string(conn, local_machine_fqdn);
 		long long timestamp = time(NULL);
-		asprintf(&query, "INSERT INTO statistics (timestamp, eventtypeid, servername, display, typeid, username) VALUES ('%lld', '%d', '%s', '%d', '%d', '%s')", timestamp, STATISTICS_DISCONNECTION_EVENT, safe_servername, display, -1, safe_username);
+		asprintf(&query, "INSERT INTO statistics (timestamp, eventtypeid, arbiter, servername, display, typeid, username) VALUES ('%lld', '%d', '%s', '%s', '%d', '%d', '%s')", timestamp, STATISTICS_DISCONNECTION_EVENT, safe_local_machine_fqdn, safe_servername, display, -1, safe_username);
 		free(safe_servername);
 		free(safe_username);
+		free(safe_local_machine_fqdn);
 		free(hostname);
 		if (mysql_query_internal(conn, query)) {
 			// Server error
@@ -409,7 +452,9 @@
 						// Insert new information into the sessions database and set status to ALLOCATED
 						char* safe_servername = get_mysql_escaped_string(conn, bestserver);
 						char* safe_username = get_mysql_escaped_string(conn, username);
-						asprintf(&query, "INSERT INTO sessions (username, servername, state) VALUES ('%s', '%s', '%d')", safe_username, safe_servername, SM_STATUS_ALLOCATED);
+						char* safe_local_machine_fqdn = get_mysql_escaped_string(conn, local_machine_fqdn);
+						asprintf(&query, "INSERT INTO sessions (username, arbiter, servername, state) VALUES ('%s', '%s', '%s', '%d')", safe_username, safe_local_machine_fqdn, safe_servername, SM_STATUS_ALLOCATED);
+						free(safe_local_machine_fqdn);
 						free(safe_servername);
 						free(safe_username);
 						if (mysql_query_internal(conn, query)) {
@@ -424,8 +469,10 @@
 							// Insert connection information into the statistics database
 							char* safe_servername = get_mysql_escaped_string(conn, bestserver);
 							char* safe_username = get_mysql_escaped_string(conn, username);
+							char* safe_local_machine_fqdn = get_mysql_escaped_string(conn, local_machine_fqdn);
 							long long timestamp = time(NULL);
-							asprintf(&query, "INSERT INTO statistics (timestamp, eventtypeid, servername, display, typeid, username) VALUES ('%lld', '%d', '%s', '%d', '%d', '%s')", timestamp, STATISTICS_NEW_CONNECTION_EVENT, safe_servername, -1, SM_STATUS_ALLOCATED, safe_username);
+							asprintf(&query, "INSERT INTO statistics (timestamp, eventtypeid, arbiter, servername, display, typeid, username) VALUES ('%lld', '%d', '%s', '%s', '%d', '%d', '%s')", timestamp, STATISTICS_NEW_CONNECTION_EVENT, safe_local_machine_fqdn, safe_servername, -1, SM_STATUS_ALLOCATED, safe_username);
+							free(safe_local_machine_fqdn);
 							free(safe_servername);
 							free(safe_username);
 							if (mysql_query_internal(conn, query)) {
@@ -453,6 +500,28 @@
 			return ret;
 		}
 	}
+}
+
+char* raptor_sm_get_local_machine_fqdn() {
+	struct addrinfo hints, *res;
+	int err;
+
+	char hostname[1024];
+	hostname[1023] = '\0';
+	gethostname(hostname, 1023);
+
+	memset(&hints, 0, sizeof hints);
+	hints.ai_socktype = SOCK_STREAM;
+	hints.ai_family = AF_UNSPEC;
+	hints.ai_flags = AI_CANONNAME;
+
+	if ((err = getaddrinfo(hostname, NULL, &hints, &res)) != 0) {
+		return strdup("");
+	}
+
+	char* ret = strdup(res->ai_canonname);
+	freeaddrinfo(res);
+	return ret;
 }
 
 char* raptor_sm_get_ip_for_hostname(char* hostname, char* error) {
@@ -868,10 +937,12 @@
 		char* current_server = raptor_sm_get_hostname_for_display(display);
 		char* safe_servername = get_mysql_escaped_string(conn, current_server);
 		char* safe_username = get_mysql_escaped_string(conn, username);
+		char* safe_local_machine_fqdn = get_mysql_escaped_string(conn, local_machine_fqdn);
 		long long timestamp = time(NULL);
-		asprintf(&query, "INSERT INTO statistics (timestamp, eventtypeid, servername, display, typeid, username) VALUES ('%lld', '%d', '%s', '%d', '%d', '%s')", timestamp, STATISTICS_CONNECTION_STATUS_EVENT, safe_servername, display, SM_STATUS_RUNNING, safe_username);
+		asprintf(&query, "INSERT INTO statistics (timestamp, eventtypeid, arbiter, servername, display, typeid, username) VALUES ('%lld', '%d', '%s', '%s', '%d', '%d', '%s')", timestamp, STATISTICS_CONNECTION_STATUS_EVENT, safe_local_machine_fqdn, safe_servername, display, SM_STATUS_RUNNING, safe_username);
 		free(safe_servername);
 		free(safe_username);
+		free(safe_local_machine_fqdn);
 		free(current_server);
 		if (mysql_query_internal(conn, query)) {
 			// Server error
@@ -1107,10 +1178,12 @@
 		char* username = raptor_sm_get_username_for_display_and_hostname(display, hostname);
 		char* safe_servername = get_mysql_escaped_string(conn, hostname);
 		char* safe_username = get_mysql_escaped_string(conn, username);
+		char* safe_local_machine_fqdn = get_mysql_escaped_string(conn, local_machine_fqdn);
 		long long timestamp = time(NULL);
-		asprintf(&query, "INSERT INTO statistics (timestamp, eventtypeid, servername, display, typeid, username) VALUES ('%lld', '%d', '%s', '%d', '%d', '%s')", timestamp, STATISTICS_CONNECTION_STATUS_EVENT, safe_servername, display, state, safe_username);
+		asprintf(&query, "INSERT INTO statistics (timestamp, eventtypeid, arbiter, servername, display, typeid, username) VALUES ('%lld', '%d', '%s', '%s', '%d', '%d', '%s')", timestamp, STATISTICS_CONNECTION_STATUS_EVENT, safe_local_machine_fqdn, safe_servername, display, state, safe_username);
 		free(safe_servername);
 		free(safe_username);
+		free(safe_local_machine_fqdn);
 		free(hostname);
 		free(username);
 		if (mysql_query_internal(conn, query)) {
@@ -1161,9 +1234,11 @@
 
 	// Insert information into the statistics database
 	char* safe_servername = get_mysql_escaped_string(conn, hostname);
+	char* safe_local_machine_fqdn = get_mysql_escaped_string(conn, local_machine_fqdn);
 	long long timestamp = time(NULL);
-	asprintf(&query, "INSERT INTO statistics (timestamp, eventtypeid, servername, display, typeid) VALUES ('%lld', '%d', '%s', '%d', '%d')", timestamp, STATISTICS_SERVER_START_EVENT, safe_servername, -1, -1);
+	asprintf(&query, "INSERT INTO statistics (timestamp, eventtypeid, arbiter, servername, display, typeid) VALUES ('%lld', '%d', '%s', '%s', '%d', '%d')", timestamp, STATISTICS_SERVER_START_EVENT, safe_local_machine_fqdn, safe_servername, -1, -1);
 	free(safe_servername);
+	free(safe_local_machine_fqdn);
 	if (mysql_query_internal(conn, query)) {
 		// Server error
 		dprint("Unable to insert data into statistics database! [%s]\n\r", mysql_error(conn));
@@ -1186,9 +1261,11 @@
 
 	// Insert information into the statistics database
 	char* safe_servername = get_mysql_escaped_string(conn, hostname);
+	char* safe_local_machine_fqdn = get_mysql_escaped_string(conn, local_machine_fqdn);
 	long long timestamp = time(NULL);
-	asprintf(&query, "INSERT INTO statistics (timestamp, eventtypeid, servername, display, typeid) VALUES ('%lld', '%d', '%s', '%d', '%d')", timestamp, STATISTICS_SERVER_STOP_EVENT, safe_servername, -1, -1);
+	asprintf(&query, "INSERT INTO statistics (timestamp, eventtypeid, arbiter, servername, display, typeid) VALUES ('%lld', '%d', '%s', '%s', '%d', '%d')", timestamp, STATISTICS_SERVER_STOP_EVENT, safe_local_machine_fqdn, safe_servername, -1, -1);
 	free(safe_servername);
+	free(safe_local_machine_fqdn);
 	if (mysql_query_internal(conn, query)) {
 		// Server error
 		dprint("Unable to insert data into statistics database! [%s]\n\r", mysql_error(conn));
diff --git a/raptorsmiface/libraptorsmiface.h b/raptorsmiface/libraptorsmiface.h
index 299d64b..79e4c2e 100644
--- a/raptorsmiface/libraptorsmiface.h
+++ b/raptorsmiface/libraptorsmiface.h
@@ -41,6 +41,8 @@
 #define RAPTOR_SM_BASE_PULSEAUDIO_PORT 2000
 #define RAPTOR_SM_MANAGEMENT_SERVER_IP_NETRANGE "10.0.0.0/8"
 
+char* raptor_sm_get_local_machine_fqdn();
+
 char* raptor_sm_get_ip_for_hostname(char* hostname, char* err);
 char* raptor_sm_get_hostname_for_username(char* username, bool create);
 
diff --git a/xorg/X11R7.6/buildx.sh b/xorg/X11R7.6/buildx.sh
index 279f72c..4db5b8f 100755
--- a/xorg/X11R7.6/buildx.sh
+++ b/xorg/X11R7.6/buildx.sh
@@ -34,7 +34,27 @@
     cd downloads
 
     echo "downloading file $file"
-    if [ "$file" = "pixman-0.15.20.tar.bz2" ]; then
+     wget -cq $download_url/$file
+    status=$?
+    cd ..
+    return $status
+
+    if [ "$file" = "libpthread-stubs-0.3.tar.bz2" ]; then
+        wget -cq http://xcb.freedesktop.org/dist/$file
+        status=$?
+        cd ..
+        return $status
+    elif [ "$file" = "libxcb-1.7.tar.bz2" ]; then
+        wget -cq http://xcb.freedesktop.org/dist/$file
+        status=$?
+        cd ..
+        return $status
+    elif [ "$file" = "xcb-proto-1.6.tar.bz2" ]; then
 ** Diff limit reached (max: 250 lines) **