diff options
author | Matthias Schiffer <matthias@gamezock.de> | 2008-09-07 23:42:04 +0200 |
---|---|---|
committer | Matthias Schiffer <matthias@gamezock.de> | 2008-09-07 23:42:04 +0200 |
commit | 406510059972fdbfb14bc8985980f52c655d5946 (patch) | |
tree | a71d11a0347d39d60c33103eb7ff608b547ff123 /src/Common/Request/CertificateRequest.h | |
parent | ce10864739759813d7376e447fae96abef23598d (diff) | |
download | mad-406510059972fdbfb14bc8985980f52c655d5946.tar mad-406510059972fdbfb14bc8985980f52c655d5946.zip |
Einige Requests und Pakettypen umbenannt
Diffstat (limited to 'src/Common/Request/CertificateRequest.h')
-rw-r--r-- | src/Common/Request/CertificateRequest.h | 163 |
1 files changed, 0 insertions, 163 deletions
diff --git a/src/Common/Request/CertificateRequest.h b/src/Common/Request/CertificateRequest.h deleted file mode 100644 index 4e26041..0000000 --- a/src/Common/Request/CertificateRequest.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - * CertificateRequest.h - * - * Copyright (C) 2008 Matthias Schiffer <matthias@gamezock.de> - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef MAD_COMMON_REQUEST_CERTIFICATEREQUEST_H_ -#define MAD_COMMON_REQUEST_CERTIFICATEREQUEST_H_ - -#include "Request.h" -#include "../RequestManager.h" -#include <Net/Connection.h> -#include <Net/Packet.h> -#include <string> -#include <cstring> -#include <gssapi/gssapi.h> - -#include <iostream> - -namespace Mad { -namespace Common { -namespace Request { - - -// TODO Logging & error handling! - -class CertificateRequest : public Request { - private: - std::string serviceName; - gss_name_t gssServiceName; - gss_ctx_id_t gssContext; - - bool gssContinue; - - CertificateRequest(const std::string &serviceName0) : serviceName(serviceName0), gssServiceName(GSS_C_NO_NAME), gssContext(GSS_C_NO_CONTEXT), gssContinue(true) {} - - public: - virtual ~CertificateRequest() { - OM_uint32 minStat; - - if(gssServiceName != GSS_C_NO_NAME) - gss_release_name(&minStat, &gssServiceName); - } - - static bool send(Net::Connection *connection, RequestManager &requestManager, const std::string &serviceName0) { - CertificateRequest *request = new CertificateRequest(serviceName0); - - if(requestManager.sendRequest(connection, request)) - return true; - - delete request; - return false; - } - - virtual bool sendRequest(Net::Connection *connection, unsigned short requestId) { - if(isSent()) - return false; - - OM_uint32 majStat, minStat; - gss_buffer_desc buffer; - - buffer.length = serviceName.length(); - buffer.value = std::malloc(buffer.length); - std::memcpy(buffer.value, serviceName.c_str(), buffer.length); - - majStat = gss_import_name(&minStat, &buffer, GSS_C_NT_HOSTBASED_SERVICE, &gssServiceName); - - std::free(buffer.value); - - if(majStat != GSS_S_COMPLETE) { - gssServiceName = GSS_C_NO_NAME; - return false; - } - - majStat = gss_init_sec_context(&minStat, GSS_C_NO_CREDENTIAL, &gssContext, gssServiceName, GSS_C_NO_OID, GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG, - 0, GSS_C_NO_CHANNEL_BINDINGS, GSS_C_NO_BUFFER, NULL, &buffer, NULL, NULL); - - if(majStat == GSS_S_COMPLETE) { - std::cout << "GSS context established." << std::endl; - gssContinue = false; - } - else if(majStat != GSS_S_CONTINUE_NEEDED) { - gss_release_buffer(&minStat, &buffer); - return false; - } - - if(!connection->send(Net::Packet(Net::Packet::TYPE_CERT_REQ, requestId, buffer.value, buffer.length))) { - gss_release_buffer(&minStat, &buffer); - return false; - } - - gss_release_buffer(&minStat, &buffer); - - setSent(); - return true; - } - - virtual bool handlePacket(Net::Connection *connection, const Net::Packet &packet) { - if(isFinished()) - return false; - - if(packet.getType() != Net::Packet::TYPE_CERT_REP) - return false; // TODO Logging - - OM_uint32 majStat, minStat; - gss_buffer_desc recvBuffer, sendBuffer; - - if(gssContinue) { - recvBuffer.length = packet.getLength(); - recvBuffer.value = std::malloc(recvBuffer.length); - std::memcpy(recvBuffer.value, packet.getData(), 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, NULL, &sendBuffer, NULL, NULL); - - std::free(recvBuffer.value); - - if(majStat == GSS_S_COMPLETE) { - std::cout << "GSS context established." << std::endl; - gssContinue = false; - } - else if(majStat != GSS_S_CONTINUE_NEEDED) { - gss_release_buffer(&minStat, &sendBuffer); - return false; - } - - if(!connection->send(Net::Packet(Net::Packet::TYPE_CERT_REQ, packet.getRequestId(), sendBuffer.value, sendBuffer.length))) { - gss_release_buffer(&minStat, &sendBuffer); - return false; - } - - gss_release_buffer(&minStat, &sendBuffer); - } - else { - return false; - - //setFinished(); - } - - return true; - } -}; - -} - -} - -} - -#endif /* MAD_COMMON_REQUEST_CERTIFICATEREQUEST_H_ */ |