better error code propagation when creating attr contexts
authorLuke Howard <lukeh@padl.com>
Thu, 21 Oct 2010 12:47:43 +0000 (23:47 +1100)
committerLuke Howard <lukeh@padl.com>
Thu, 21 Oct 2010 12:47:43 +0000 (23:47 +1100)
accept_sec_context.c
util_attr.cpp
util_attr.h

index 60f9619..fa9576f 100644 (file)
@@ -107,11 +107,10 @@ acceptReadyEap(OM_uint32 *minor, gss_ctx_id_t ctx, gss_cred_id_t cred)
     if (GSS_ERROR(major))
         return major;
 
-    ctx->initiatorName->attrCtx = gssEapCreateAttrContext(cred, ctx);
-    if (ctx->initiatorName->attrCtx == NULL) {
-        *minor = GSSEAP_ATTR_CONTEXT_FAILURE;
-        return GSS_S_FAILURE;
-    }
+    major = gssEapCreateAttrContext(minor, cred, ctx,
+                                    &ctx->initiatorName->attrCtx);
+    if (GSS_ERROR(major))
+        return major;
 
     *minor = 0;
     return GSS_S_COMPLETE;
index 3d7d1f6..a428984 100644 (file)
@@ -1014,25 +1014,30 @@ gssEapReleaseAttrContext(OM_uint32 *minor,
  * Public accessor for initialisng a context from a GSS context. Also
  * sets expiry time on GSS context as a side-effect.
  */
-struct gss_eap_attr_ctx *
-gssEapCreateAttrContext(gss_cred_id_t gssCred,
-                        gss_ctx_id_t gssCtx)
+OM_uint32
+gssEapCreateAttrContext(OM_uint32 *minor,
+                        gss_cred_id_t gssCred,
+                        gss_ctx_id_t gssCtx,
+                        struct gss_eap_attr_ctx **pAttrContext)
 {
     gss_eap_attr_ctx *ctx;
-    OM_uint32 tmpMinor;
+    OM_uint32 major;
 
     assert(gssCtx != GSS_C_NO_CONTEXT);
 
-    if (GSS_ERROR(gssEapAttrProvidersInit(&tmpMinor)))
-        return NULL;
+    major = gssEapAttrProvidersInit(minor);
+    if (GSS_ERROR(major))
+        return major;
 
     ctx = new gss_eap_attr_ctx();
     if (!ctx->initFromGssContext(gssCred, gssCtx)) {
         delete ctx;
-        return NULL;
+        *minor = GSSEAP_ATTR_CONTEXT_FAILURE;
+        return GSS_S_FAILURE;
     }
 
     gssCtx->expiryTime = ctx->getExpiryTime();
 
-    return ctx;
+    *minor = 0;
+    return GSS_S_COMPLETE;
 }
index 9dd4787..b0e3c05 100644 (file)
@@ -268,9 +268,11 @@ extern "C" {
  * obtain the name mutex.
  */
 
-struct gss_eap_attr_ctx *
-gssEapCreateAttrContext(gss_cred_id_t acceptorCred,
-                        gss_ctx_id_t acceptorCtx);
+OM_uint32
+gssEapCreateAttrContext(OM_uint32 *minor,
+                        gss_cred_id_t acceptorCred,
+                        gss_ctx_id_t acceptorCtx,
+                        struct gss_eap_attr_ctx **pAttrCtx);
 
 OM_uint32
 gssEapInquireName(OM_uint32 *minor,