diff --git a/modules/saml/lib/SP/LogoutStore.php b/modules/saml/lib/SP/LogoutStore.php index e8313883623e50cc3416683c0b6b80f94404822d..c06cec5658fc1a262b8859e96ec56b6bb456d7dc 100644 --- a/modules/saml/lib/SP/LogoutStore.php +++ b/modules/saml/lib/SP/LogoutStore.php @@ -26,7 +26,24 @@ class LogoutStore private static function createLogoutTable(Store\SQL $store) { $tableVer = $store->getTableVersion('saml_LogoutStore'); - if ($tableVer === 2) { + if ($tableVer === 3) { + return; + } elseif ($tableVer === 2) { + // Drop old indexes + $query = 'ALTER TABLE '.$store->prefix.'_saml_LogoutStore DROP INDEX '.$store->prefix.'_saml_LogoutStore_nameId'; + $store->pdo->exec($query); + $query = 'ALTER TABLE '.$store->prefix.'_saml_LogoutStore DROP INDEX _authSource'; + $store->pdo->exec($query); + + // Create new indexes + $query = 'CREATE INDEX '.$store->prefix.'_saml_LogoutStore_nameId ON '; + $query .= $store->prefix.'_saml_LogoutStore (_authSource(191), _nameId)'; + $store->pdo->exec($query); + + $query = 'ALTER TABLE '.$store->prefix.'_saml_LogoutStore ADD UNIQUE KEY (_authSource(191), _nameID, _sessionIndex)'; + $store->pdo->exec($query); + + $store->setTableVersion('saml_LogoutStore', 3); return; } elseif ($tableVer === 1) { // TableVersion 2 increased the column size to 255 which is the maximum length of a FQDN @@ -58,7 +75,7 @@ class LogoutStore _sessionIndex VARCHAR(50) NOT NULL, _expire TIMESTAMP NOT NULL, _sessionId VARCHAR(50) NOT NULL, - UNIQUE (_authSource, _nameID, _sessionIndex) + UNIQUE (_authSource(191), _nameID, _sessionIndex) )'; $store->pdo->exec($query); @@ -67,7 +84,7 @@ class LogoutStore $store->pdo->exec($query); $query = 'CREATE INDEX '.$store->prefix.'_saml_LogoutStore_nameId ON '; - $query .= $store->prefix.'_saml_LogoutStore (_authSource, _nameId)'; + $query .= $store->prefix.'_saml_LogoutStore (_authSource(191), _nameId)'; $store->pdo->exec($query); $store->setTableVersion('saml_LogoutStore', 2);