From d88e4d0da7ff801b0c58b5043ade0743547cfb90 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Wed, 4 Mar 2009 22:37:03 +0100 Subject: GSSAPIAuthRequest ist jetzt ein XmlRequest --- src/Common/Requests/GSSAPIAuthRequest.cpp | 37 ++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 10 deletions(-) (limited to 'src/Common/Requests/GSSAPIAuthRequest.cpp') diff --git a/src/Common/Requests/GSSAPIAuthRequest.cpp b/src/Common/Requests/GSSAPIAuthRequest.cpp index 05fb373..7f4617a 100644 --- a/src/Common/Requests/GSSAPIAuthRequest.cpp +++ b/src/Common/Requests/GSSAPIAuthRequest.cpp @@ -19,6 +19,7 @@ #include "GSSAPIAuthRequest.h" #include "../Logger.h" +#include "../XmlPacket.h" #include #include @@ -65,7 +66,11 @@ void GSSAPIAuthRequest::sendRequest(Net::Connection *connection, uint16_t reques return; } - if(!connection->send(Net::Packet(Net::Packet::GSSAPI_AUTH, requestId, buffer.value, buffer.length))) { + XmlPacket ret; + ret.setType("AuthGSSAPI"); + ret.addBinary("authToken", buffer.value, buffer.length); + + if(!connection->send(ret.encode(requestId))) { gss_release_buffer(&minStat, &buffer); return; } @@ -73,8 +78,8 @@ void GSSAPIAuthRequest::sendRequest(Net::Connection *connection, uint16_t reques gss_release_buffer(&minStat, &buffer); } -void GSSAPIAuthRequest::handlePacket(Net::Connection *connection, const Net::Packet &packet) { - if(packet.getType() != Net::Packet::GSSAPI_AUTH) { +void GSSAPIAuthRequest::handlePacket(Net::Connection *connection, uint16_t requestId, const XmlPacket &packet) { + if(packet.getType() != "AuthGSSAPI") { finishWithError(Exception(Exception::UNEXPECTED_PACKET)); return; // TODO Logging } @@ -85,9 +90,11 @@ void GSSAPIAuthRequest::handlePacket(Net::Connection *connection, const Net::Pac // Needs error handling! if(gssContinue) { - recvBuffer.length = packet.getLength(); + const void *pkgData; + packet["authToken"].getBinaryData(&pkgData, &recvBuffer.length); + recvBuffer.value = std::malloc(recvBuffer.length); - std::memcpy(recvBuffer.value, packet.getData(), recvBuffer.length); + std::memcpy(recvBuffer.value, pkgData, recvBuffer.length); majStat = gss_init_sec_context(&minStat, GSS_C_NO_CREDENTIAL, &gssContext, gssServiceName, GSS_C_NO_OID, GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_INTEG_FLAG, 0, GSS_C_NO_CHANNEL_BINDINGS, &recvBuffer, 0, &sendBuffer, 0, 0); @@ -103,7 +110,11 @@ void GSSAPIAuthRequest::handlePacket(Net::Connection *connection, const Net::Pac return; } - if(!connection->send(Net::Packet(Net::Packet::GSSAPI_AUTH, packet.getRequestId(), sendBuffer.value, sendBuffer.length))) { + XmlPacket ret; + ret.setType("AuthGSSAPI"); + ret.addBinary("authToken", sendBuffer.value, sendBuffer.length); + + if(!connection->send(ret.encode(requestId))) { gss_release_buffer(&minStat, &sendBuffer); return; } @@ -111,9 +122,11 @@ void GSSAPIAuthRequest::handlePacket(Net::Connection *connection, const Net::Pac gss_release_buffer(&minStat, &sendBuffer); } else { - recvBuffer.length = packet.getLength(); + const void *pkgData; + packet["certMic"].getBinaryData(&pkgData, &recvBuffer.length); + recvBuffer.value = std::malloc(recvBuffer.length); - std::memcpy(recvBuffer.value, packet.getData(), recvBuffer.length); + std::memcpy(recvBuffer.value, pkgData, recvBuffer.length); const gnutls_datum_t *cert = connection->getPeerCertificate(); @@ -137,14 +150,18 @@ void GSSAPIAuthRequest::handlePacket(Net::Connection *connection, const Net::Pac return; } - if(!connection->send(Net::Packet(Net::Packet::GSSAPI_AUTH, packet.getRequestId(), sendBuffer.value, sendBuffer.length))) { + XmlPacket ret; + ret.setType("AuthGSSAPI"); + ret.addBinary("authToken", sendBuffer.value, sendBuffer.length); + + if(!connection->send(ret.encode(requestId))) { gss_release_buffer(&minStat, &sendBuffer); return; } gss_release_buffer(&minStat, &sendBuffer); - finish(); + finish(XmlPacket()); } } -- cgit v1.2.3