*/
#include "GSSImportName.h"
+#include "GSSException.h"
void GSSImportName::execute()
{
-
+ this->outputName = GSSName(inputName, inputNameType, function);
}
JSONObject *GSSImportName::toJSON()
std::string input_name = (*params)["arguments"]["input_name"].string();
std::string input_name_type = (*params)["arguments"]["input_name_type"].string();
- this->inputName.setValue( (*params)["arguments"]["input_name"].string() );
- this->inputNameType.setValue( (*params)["arguments"]["input_name_type"].string() );
+ this->inputName.setValue( input_name );
+ this->inputNameType.setValue( input_name_type );
/* Cleanup */
/* Return */
void execute();
JSONObject* toJSON();
- GSSBuffer getInputName() { return GSSBuffer(inputName); }
- GSSBuffer getInputNameType() { return GSSBuffer(inputNameType); }
+ GSSBuffer getInputName() { return GSSBuffer(inputName); };
+ GSSOID getInputNameType() { return GSSOID(inputNameType); };
- gss_imp_name_type getGSSFunction() { return function; }
+ gss_imp_name_type getGSSFunction() { return function; };
+ void setInputName ( std::string name ) { inputName.setValue(name); };
+ void setInputNameType ( std::string type ) { inputNameType.setValue(type); };
private:
gss_imp_name_type function;
bool loadParameters(JSONObject *params);
+
+ OM_uint32 retVal;
+ OM_uint32 minor_status;
GSSBuffer inputName;
- GSSBuffer inputNameType;
-
+ GSSOID inputNameType;
+ GSSName outputName;
};
#endif // GSSIMPORTNAME_H
GSSBuffer(const GSSBuffer &other);
~GSSBuffer(void);
- std::string toString() { return(std::string((char *)buf->value, buf->length)); }
- gss_buffer_t toGss() { return( buf ); }
- int length() { return(buf->length); }
+ std::string toString() const { return(std::string((char *)buf->value, buf->length)); }
+ gss_buffer_t toGss() const { return( buf ); }
+ int length() const { return(buf->length); }
void setValue(std::string str);
void setValue(char *str);
void setValue(char *str, int len);
void setValue(gss_buffer_t gssbuf);
- bool operator==(GSSBuffer B) { return(this->toString() == B.toString()); }
+ bool operator==(GSSBuffer B) const { return(this->toString() == B.toString()); }
private:
gss_buffer_t buf;
#include "GSSName.h"
#include "../GSSException.h"
-void GSSName::init(GSSBuffer namestr, GSSOID name_type, gss_imp_name_type fn)
+void GSSName::init(const GSSBuffer namestr, GSSOID name_type, gss_imp_name_type fn)
{
/* Variables */
OM_uint32 major, minor;
/* Error checking */
/* Setup */
/* Main */
- major = gss_import_name(&minor, namestr.toGss(), name_type.toGss(), &name);
+ major = fn(&minor, namestr.toGss(), name_type.toGss(), &name);
if ( GSS_ERROR(major) )
{
std::string errMsg;
errMsg += namestr.toString();
throw GSSException(errMsg.c_str(), major, minor, name_type.toGss());
}
- this->function = fn;
/* Cleanup */
/* Return */
GSSName::GSSName(char *namestr, GSSOID name_type, gss_imp_name_type fn)
{
- init(GSSBuffer(namestr), name_type, fn);
+ init(GSSBuffer(namestr, true), name_type, fn);
}
GSSName::GSSName(GSSBuffer namestr, GSSOID name_type, gss_imp_name_type fn)
GSSName::GSSName(std::string namestr, gss_OID name_type, gss_imp_name_type fn)
{
- init(GSSBuffer(namestr), GSSOID(name_type), fn);
+ init(GSSBuffer(namestr, true), GSSOID(name_type), fn);
}
GSSName::GSSName(char *namestr, gss_OID name_type, gss_imp_name_type fn)
{
- init(GSSBuffer(namestr), GSSOID(name_type), fn);
+ init(GSSBuffer(namestr, true), GSSOID(name_type), fn);
}
GSSName::GSSName(GSSBuffer namestr, gss_OID name_type, gss_imp_name_type fn)
GSSName::GSSName(std::string namestr, std::string name_type, gss_imp_name_type fn)
{
- init(GSSBuffer(namestr), GSSOID(name_type), fn);
+ init(GSSBuffer(namestr, true), GSSOID(name_type), fn);
}
GSSName::GSSName(char *namestr, std::string name_type, gss_imp_name_type fn)
{
- init(GSSBuffer(namestr), GSSOID(name_type), fn);
+ init(GSSBuffer(namestr, true), GSSOID(name_type), fn);
}
GSSName::GSSName(GSSBuffer namestr, std::string name_type, gss_imp_name_type fn)
init(namestr, GSSOID(name_type), fn);
}
-
-GSSName::~GSSName()
+void GSSName::release()
{
/* Variables */
OM_uint32 major, minor;
/* Error checking */
+ if (name == GSS_C_NO_NAME)
+ return;
+
/* Setup */
/* Main */
major = gss_release_name(&minor, &name);
/* Cleanup */
/* Return */
+}
+
+GSSName::~GSSName()
+{
+ this->release();
}
/* Return */
return buf.toString();
}
+
+bool GSSName::setValue ( gss_name_t newName )
+{
+ this->release();
+ this->name = newName;
+ return(true);
+}
class GSSName {
public:
+ GSSName() {name = GSS_C_NO_NAME; };
GSSName(std::string nameStr,
GSSOID name_type = GSSOID( (gss_OID)GSS_C_NO_OID ),
gss_imp_name_type fn = (gss_imp_name_type)&gss_import_name);
- GSSName(char *namestr,
- GSSOID name_type = GSSOID( (gss_OID)GSS_C_NO_OID ),
+ GSSName(std::string nameStr,
+ gss_OID name_type,
gss_imp_name_type fn = (gss_imp_name_type)&gss_import_name);
- GSSName(GSSBuffer namestr,
- GSSOID name_type = GSSOID( (gss_OID)GSS_C_NO_OID ),
+ GSSName(std::string nameStr,
+ std::string name_type,
gss_imp_name_type fn = (gss_imp_name_type)&gss_import_name);
- GSSName(std::string nameStr,
- gss_OID name_type,
+ GSSName(char *namestr,
+ GSSOID name_type = GSSOID( (gss_OID)GSS_C_NO_OID ),
gss_imp_name_type fn = (gss_imp_name_type)&gss_import_name);
GSSName(char *namestr,
gss_OID name_type,
gss_imp_name_type fn = (gss_imp_name_type)&gss_import_name);
- GSSName(GSSBuffer namestr,
- gss_OID name_type,
+ GSSName(char *namestr,
+ std::string name_type,
gss_imp_name_type fn = (gss_imp_name_type)&gss_import_name);
- GSSName(std::string nameStr,
- std::string name_type,
+ GSSName(GSSBuffer namestr,
+ GSSOID name_type = GSSOID( (gss_OID)GSS_C_NO_OID ),
gss_imp_name_type fn = (gss_imp_name_type)&gss_import_name);
- GSSName(char *namestr,
- std::string name_type,
+ GSSName(GSSBuffer namestr,
+ gss_OID name_type,
gss_imp_name_type fn = (gss_imp_name_type)&gss_import_name);
GSSName(GSSBuffer namestr,
std::string name_type,
gss_imp_name_type fn = (gss_imp_name_type)&gss_import_name);
+ GSSName(gss_name_t gss_name) { name = gss_name; }
+
~GSSName();
gss_name_t toGSS() { return(name); }
std::string toString();
+ bool setValue(gss_name_t newName);
+
private:
gss_name_t name;
- void init(GSSBuffer namestr, GSSOID name_type, gss_imp_name_type fn);
gss_imp_name_type function;
+
+ void init(const GSSBuffer namestr, GSSOID name_type, gss_imp_name_type fn);
+ void release();
};
this->gssInternal = true;
}
-GSSOID::~GSSOID()
+GSSOID::GSSOID ( const GSSOID &gssoid )
+{
+ this->oid = gssoid.oid;
+ this->gssInternal = true;
+}
+
+void GSSOID::release()
{
OM_uint32 major, minor;
- if (! this->gssInternal)
+ if ( (!this->gssInternal) && (oid != GSS_C_NO_OID) )
{
major = gss_release_oid(&minor, &(this->oid));
if (GSS_ERROR(major))
}
}
}
+
+GSSOID::~GSSOID()
+{
+ this->release();
+}
void GSSOID::init(GSSBuffer oid_str)
{
std::string ret;
/* Error checking */
+ if (oid->length == 0)
+ return std::string("");
/* Setup */
/* Main */
major = gss_oid_to_str(&minor, this->oid, &buf);
/* Return */
return(ret);
}
+
+bool GSSOID::setValue ( GSSBuffer buf )
+{
+ init(buf);
+ return true;
+}
+
+bool GSSOID::setValue ( gss_OID gssOID )
+{
+ oid = gssOID;
+ this->gssInternal = true;
+ return true;
+}
class GSSOID {
public:
+ GSSOID() { oid = GSS_C_NO_OID; gssInternal = true; };
GSSOID(char *oid_str);
GSSOID(std::string oid_str);
GSSOID(GSSBuffer oid_str);
GSSOID(gss_OID gssoid);
+ GSSOID(const GSSOID &gssoid);
~GSSOID();
gss_OID toGss() { return(oid); };
std::string toString();
+
+ bool setValue(GSSBuffer buf);
+ bool setValue(gss_OID gssOID);
private:
gss_OID oid;
bool gssInternal;
void init(GSSBuffer oid_str);
+ void release();
};
../src/GSSImportName.cpp
../src/GSSException.cpp
../src/datamodel/GSSBuffer.cpp
+ ../src/datamodel/GSSName.cpp
+ ../src/datamodel/GSSOID.cpp
datamodel/GSSBufferTest.cpp
)
{
/* Error checking */
/* Variables */
+
/* Setup */
/* Main */
// Copy our input from the appropriate parameters to MockImportName
- MockImportName::input_name_buffer = input_name_buffer;
- MockImportName::input_name_type = input_name_type;
+ MockImportName::input_name_buffer.setValue((char *)input_name_buffer->value, input_name_buffer->length);
+ MockImportName::input_name_type.setValue(input_name_type);
// copy our output to the appropriate parameters
*minor_status = MockImportName::minor_status;
- *output_name = MockImportName::output_name;
+ *output_name = MockImportName::output_name.toGSS();
/* Cleanup */
void GSSImportNameTest::testEmptyCall()
{
/* Variables */
- GSSImportName cmd = GSSImportName();
+ GSSImportName cmd = GSSImportName(&mock_import_name);
+ std::string name = std::string("ssh@server");
+ std::string type = std::string("{ 1 2 840 113554 1 2 1 4 }");
/* Error checking */
/* Setup */
+ cmd.setInputName(name);
+ cmd.setInputNameType(type);
+ MockImportName::minor_status = rand() % 1024;
+ MockImportName::retVal = rand() % 1024;
+ MockImportName::output_name.setValue(GSS_C_NO_NAME);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "Input name was not set correctly.",
+ name,
+ cmd.getInputName().toString()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "Input name was not set correctly.",
+ type,
+ cmd.getInputNameType().toString()
+ );
+
+ cmd.execute();
+
/* Main */
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "The requested GSS name is not correct",
+ name,
+ MockImportName::input_name_buffer.toString()
+ );
+
+ GSSOID retOID = GSSOID(MockImportName::input_name_type);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(
+ "The requested GSS name type is not correct",
+ type,
+ retOID.toString()
+ );
/* Cleanup */
/* Return */
OM_uint32 MockImportName::retVal = 0;
OM_uint32 MockImportName::minor_status = 0;
-GSSBuffer MockImportName::input_name_buffer = GSSBuffer(std::string(""));
-gss_OID MockImportName::input_name_type = NULL;
-gss_name_t MockImportName::output_name = NULL;
+GSSBuffer MockImportName::input_name_buffer((char *)"");
+GSSOID MockImportName::input_name_type;
+GSSName MockImportName::output_name;
#include <gssapi.h>
#include "datamodel/GSSBuffer.h"
+#include "datamodel/GSSOID.h"
+#include "datamodel/GSSName.h"
class MockImportName
{
static OM_uint32 retVal;
static OM_uint32 minor_status;
static GSSBuffer input_name_buffer;
- static gss_OID input_name_type;
- static gss_name_t output_name;
+ static GSSOID input_name_type;
+ static GSSName output_name;
static bool visited;