string rsKey;
SAMLConfig::getConfig().generateRandomBytes(rsKey,32);
rsKey = SAMLArtifact::toHex(rsKey);
- if (!storage->createString("RelayState", rsKey.c_str(), relayState.c_str(), time(nullptr) + 600))
- throw IOException("Collision generating in-memory relay state key.");
+ if (relayState.length() <= storage->getCapabilities().getStringSize()) {
+ if (!storage->createString("RelayState", rsKey.c_str(), relayState.c_str(), time(nullptr) + 600))
+ throw IOException("Collision generating in-memory relay state key.");
+ }
+ else {
+ if (!storage->createText("RelayState", rsKey.c_str(), relayState.c_str(), time(nullptr) + 600))
+ throw IOException("Collision generating in-memory relay state key.");
+ }
relayState = string(mech.second-3) + ':' + rsKey;
}
else {
absolutize(request, relayState);
return;
}
- else
+ else if (storage->readText("RelayState",ssid.c_str(),&relayState) > 0) {
+ if (clear)
+ storage->deleteText("RelayState",ssid.c_str());
+ absolutize(request, relayState);
+ return;
+ }
+ else {
relayState.erase();
+ }
}
else {
string msg("Storage-backed RelayState with invalid StorageService ID (");
rsKey = SAMLArtifact::toHex(rsKey);
ostringstream out;
out << postData;
- if (!storage->createString("PostData", rsKey.c_str(), out.str().c_str(), time(nullptr) + 600))
+ if (!storage->createText("PostData", rsKey.c_str(), out.str().c_str(), time(nullptr) + 600))
throw IOException("Attempted to insert duplicate storage key.");
postkey = string(mech.second-3) + ':' + rsKey;
}
#ifndef SHIBSP_LITE
StorageService* storage = conf.getServiceProvider()->getStorageService(ssid.c_str());
if (storage) {
- if (storage->readString("PostData", key, &ssid) > 0) {
- storage->deleteString("PostData", key);
+ if (storage->readText("PostData", key, &ssid) > 0) {
+ storage->deleteText("PostData", key);
istringstream inret(ssid);
DDF ret;
inret >> ret;