X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=json_gssapi%2Fsrc%2Fcommands%2FGSSInitSecContext.cpp;h=c0112bafbe047be53855b2b948ac50cd85867158;hb=ed6b9911b8d439a1587f2fe43c192c75614b471c;hp=68cd43a2ff530ff201a3ea3b9df948c8351251f5;hpb=4e465a5b46eae535afbeb5c389480623a9053820;p=gssweb.git diff --git a/json_gssapi/src/commands/GSSInitSecContext.cpp b/json_gssapi/src/commands/GSSInitSecContext.cpp index 68cd43a..c0112ba 100644 --- a/json_gssapi/src/commands/GSSInitSecContext.cpp +++ b/json_gssapi/src/commands/GSSInitSecContext.cpp @@ -43,29 +43,12 @@ #include #include -#include "utils/base64.h" - -typedef OM_uint32 (*init_sec_context)( - OM_uint32 *, /* minor_status */ - gss_cred_id_t, /* claimant_cred_handle */ - gss_ctx_id_t *, /* context_handle */ - gss_name_t, /* target_name */ - gss_OID, /* mech_type (used to be const) */ - OM_uint32, /* req_flags */ - OM_uint32, /* time_req */ - gss_channel_bindings_t, /* input_chan_bindings */ - gss_buffer_t, /* input_token */ - gss_OID *, /* actual_mech_type */ - gss_buffer_t, /* output_token */ - OM_uint32 *, /* ret_flags */ - OM_uint32 * /* time_req */ -); +#include "utils/util_base64.h" void GSSInitSecContext::execute() { /* Variables */ - init_sec_context fn = (init_sec_context)function; gss_OID actual_mech_type; /* Error checking */ @@ -76,7 +59,7 @@ GSSInitSecContext::execute() /* Main */ // MRW -- fix so that this uses all of the vars from the object - retVal = fn( + retVal = function( &minor_status, GSS_C_NO_CREDENTIAL, &context_handle, @@ -207,11 +190,11 @@ bool GSSInitSecContext::loadParameters(JSONObject *params) // req_flags if (!params->get("req_flags").isNull() ) - this->req_flags = params->get("req_flags").integer(); + this->req_flags = (OM_uint32 )params->get("req_flags").integer(); // time_req if (!params->get("time_req").isNull() ) - this->time_req = params->get("time_req").integer(); + this->time_req = (OM_uint32 )params->get("time_req").integer(); // input_token if (! (params->get("input_token").isNull() || @@ -219,7 +202,7 @@ bool GSSInitSecContext::loadParameters(JSONObject *params) std::string("") == params->get("input_token").string()))) { token = params->get("input_token").string(); - this->input_token.value = base64_decode(token, &this->input_token.length); + input_token.value = base64Decode(token.c_str(), &input_token.length); } /* Cleanup */ @@ -250,8 +233,11 @@ bool GSSInitSecContext::zeroOut(bool initialized) if (this->output_token.length > 0) gss_release_buffer(&minor, &output_token); - if (this->input_token.length > 0) - gss_release_buffer(&minor, &input_token); + if (this->input_token.value) { + base64Free(input_token.value); + input_token.value = NULL; + input_token.length = 0; + } } // Now set things to reasonable defaults @@ -279,8 +265,9 @@ JSONObject *GSSInitSecContext::toJSON() { /* Variables */ // MRW -- values should be scoped to the class, so execute can set error values? - std::string output_str((char *)output_token.value, output_token.length); + std::string output_str; JSONObject *values = new JSONObject(); + base64EncodeStr(output_token.value, output_token.length, output_str); /* Error checking */ @@ -291,9 +278,7 @@ JSONObject *GSSInitSecContext::toJSON() values->set("minor_status", this->minor_status); values->set("context_handle", this->contextKey.c_str()); values->set("actual_mech_type", this->getActualMechType().toString().c_str()); - // MRW -- is output_token.value guaranteed to be null-terminated? - //output_str = (char *)output_token.value; - values->set("output_token", base64_encode(output_str)); + values->set("output_token", output_str.c_str()); values->set("ret_flags", this->ret_flags); values->set("time_rec", this->time_rec); // MRW -- modify for new error handling @@ -306,14 +291,14 @@ JSONObject *GSSInitSecContext::toJSON() GSSInitSecContext::GSSInitSecContext( JSONObject *params, - void *fn) : GSSCommand(params) + init_sec_context_type fn) { zeroOut(false); loadParameters(params); function = fn; } -GSSInitSecContext::GSSInitSecContext(void *fn) +GSSInitSecContext::GSSInitSecContext(init_sec_context_type fn) { zeroOut(false); function = fn;