summaryrefslogtreecommitdiffstats
path: root/servers/auth_server_lin
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2014-12-24 07:50:20 +0000
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2014-12-24 07:50:20 +0000
commitf603b8d80d2eea38c43f619aae3cd2502260a25d (patch)
treea750bcb4296335a03ecb8b7a662ae0261ebf3751 /servers/auth_server_lin
parent3843168ee8689295819faaf79f3b21e9623ea5d3 (diff)
downloadulab-f603b8d80d2eea38c43f619aae3cd2502260a25d.tar.gz
ulab-f603b8d80d2eea38c43f619aae3cd2502260a25d.zip
Fix faulty table existence checks
Diffstat (limited to 'servers/auth_server_lin')
-rw-r--r--servers/auth_server_lin/src/auth_conn.cpp49
1 files changed, 33 insertions, 16 deletions
diff --git a/servers/auth_server_lin/src/auth_conn.cpp b/servers/auth_server_lin/src/auth_conn.cpp
index cf68f9e..ce1e752 100644
--- a/servers/auth_server_lin/src/auth_conn.cpp
+++ b/servers/auth_server_lin/src/auth_conn.cpp
@@ -427,7 +427,7 @@ void AuthSocket::commandLoop() {
if (command == "LIST") {
// Send list of available servers...
m_slist.clear();
-
+
// Get all stations from the database
m_databaseStationsCursor->select();
while (m_databaseStationsCursor->next()) {
@@ -444,13 +444,13 @@ void AuthSocket::commandLoop() {
printf("[ERROR] Unable to allocate memory\n\r"); fflush(stdout);
exit(EXIT_FAILURE);
}
-
+
pw = getpwnam(m_authenticatedUserName.ascii());
if (pw == NULL) {
printf("[WARNING] Unable to get detailed information for user '%s', ignoring\n\r", m_authenticatedUserName.ascii()); fflush(stdout);
continue;
}
-
+
if (getgrouplist(m_authenticatedUserName.ascii(), pw->pw_gid, groups, &ngroups) == -1) {
free(groups);
groups = (gid_t*)malloc(ngroups*sizeof(gid_t));
@@ -522,10 +522,10 @@ void AuthSocket::commandLoop() {
StationType st;
ds >> st;
clearFrameTail();
-
+
// Attempt to bind to station matching desired Service Type list...
m_stationID = -1;
-
+
// Ensure that this user is not already connected
int activeID = -1;
m_databaseActivityCursor->select(TQString("username='%1' AND realmname='%2'").arg(m_authenticatedUserName).arg(m_authenticatedRealmName));
@@ -552,7 +552,7 @@ void AuthSocket::commandLoop() {
}
}
}
-
+
if (m_stationID < 0) {
ds << TQString("ERRUNAVAL");
writeEndOfFrame();
@@ -560,7 +560,7 @@ void AuthSocket::commandLoop() {
else {
m_bound = true;
m_serviceID = 0;
-
+
// Update database
TQSqlRecord *buffer = m_databaseActivityCursor->primeInsert();
buffer->setValue("station", m_stationID);
@@ -573,7 +573,7 @@ void AuthSocket::commandLoop() {
m_databaseActivityCursor->insert();
updateStatistics(STATISTICS_NEW_CONNECTION_EVENT);
-
+
ds << TQString("OK");
writeEndOfFrame();
}
@@ -589,12 +589,12 @@ void AuthSocket::commandLoop() {
ds >> libname;
clearFrameTail();
printf("[DEBUG] SERV command parameter was %s from user %s@%s\n\r", libname.ascii(), m_authenticatedUserName.ascii(), m_authenticatedRealmName.ascii()); fflush(stdout);
-
+
m_databaseActivityCursor->select(TQString("username='%1' AND realmname='%2' AND serviceid=0").arg(m_authenticatedUserName).arg(m_authenticatedRealmName));
if (m_databaseActivityCursor->next()) {
m_stationID = m_databaseActivityCursor->value("station").toInt();
}
-
+
if (m_bound == true) {
ds << TQString("ERRINVCMD");
writeEndOfFrame();
@@ -684,7 +684,7 @@ void AuthSocket::commandLoop() {
if (mechList.count() > 0) {
m_servClientSocket->setMechanismOverrideList(mechList);
}
-
+
m_servClientSocket->setServerFQDN(m_srvServiceHostName);
m_servClientSocket->connectToHost(m_srvServiceHostName, m_srvServicePort);
@@ -859,45 +859,62 @@ int AuthServer::connectToDatabase() {
return -1;
}
- if (!m_database->tables().contains("stations")) {
+ TQSqlCursor* testCursor = NULL;
+
+ testCursor = new TQSqlCursor("stations", TRUE, m_database);
+ testCursor->select();
+ if (!testCursor->isActive()) {
m_database->close();
printf("[ERROR] Control database '%s' on '%s' does not contain the required 'stations' table\n\r", m_database->databaseName().ascii(), m_database->hostName().ascii()); fflush(stdout);
TQSqlDatabase::removeDatabase(m_database);
m_database = NULL;
return -1;
}
+ delete testCursor;
- if (!m_database->tables().contains("services")) {
+ testCursor = new TQSqlCursor("services", TRUE, m_database);
+ testCursor->select();
+ if (!testCursor->isActive()) {
m_database->close();
printf("[ERROR] Control database '%s' on '%s' does not contain the required 'services' table\n\r", m_database->databaseName().ascii(), m_database->hostName().ascii()); fflush(stdout);
TQSqlDatabase::removeDatabase(m_database);
m_database = NULL;
return -1;
}
+ delete testCursor;
- if (!m_database->tables().contains("servicetypes")) {
+ testCursor = new TQSqlCursor("servicetypes", TRUE, m_database);
+ testCursor->select();
+ if (!testCursor->isActive()) {
m_database->close();
printf("[ERROR] Control database '%s' on '%s' does not contain the required 'servicetypes' table\n\r", m_database->databaseName().ascii(), m_database->hostName().ascii()); fflush(stdout);
TQSqlDatabase::removeDatabase(m_database);
m_database = NULL;
return -1;
}
+ delete testCursor;
- if (!m_database->tables().contains("permissions")) {
+ testCursor = new TQSqlCursor("permissions", TRUE, m_database);
+ testCursor->select();
+ if (!testCursor->isActive()) {
m_database->close();
printf("[ERROR] Control database '%s' on '%s' does not contain the required 'permissions' table\n\r", m_database->databaseName().ascii(), m_database->hostName().ascii()); fflush(stdout);
TQSqlDatabase::removeDatabase(m_database);
m_database = NULL;
return -1;
}
+ delete testCursor;
- if (!m_database->tables().contains("activity")) {
+ testCursor = new TQSqlCursor("activity", TRUE, m_database);
+ testCursor->select();
+ if (!testCursor->isActive()) {
m_database->close();
printf("[ERROR] Control database '%s' on '%s' does not contain the required 'activity' table\n\r", m_database->databaseName().ascii(), m_database->hostName().ascii()); fflush(stdout);
TQSqlDatabase::removeDatabase(m_database);
m_database = NULL;
return -1;
}
+ delete testCursor;
// Start database ping process
// When combined with the MYSQL_OPT_RECONNECT flag passed above, this will keep the connection open even if the database server goes offline and then comes back online