r23456: Update Samba4 to current lorikeet-heimdal.
[sfrench/samba-autobuild/.git] / source4 / heimdal / lib / gssapi / mech / gss_inquire_context.c
index 88bbb3941f2b075f8d148bed7f6472fe8469f391..5cce30c6bd86a28226f93fc8a95207dd437f238b 100644 (file)
@@ -27,7 +27,7 @@
  */
 
 #include "mech_locl.h"
-RCSID("$Id: gss_inquire_context.c,v 1.2 2006/06/28 09:00:25 lha Exp $");
+RCSID("$Id: gss_inquire_context.c 19958 2007-01-17 13:56:18Z lha $");
 
 OM_uint32
 gss_inquire_context(OM_uint32 *minor_status,
@@ -46,27 +46,42 @@ gss_inquire_context(OM_uint32 *minor_status,
        struct _gss_name *name;
        gss_name_t src_mn, targ_mn;
 
+       if (locally_initiated)
+           *locally_initiated = 0;
+       if (open)
+           *open = 0;
+       if (lifetime_rec)
+           *lifetime_rec = 0;
+
+       if (src_name)
+           *src_name = GSS_C_NO_NAME;
+       if (targ_name)
+           *targ_name = GSS_C_NO_NAME;
+       if (mech_type)
+           *mech_type = GSS_C_NO_OID;
+       src_mn = targ_mn = GSS_C_NO_NAME;
+
        major_status = m->gm_inquire_context(minor_status,
            ctx->gc_ctx,
-           src_name ? &src_mn : 0,
-           targ_name ? &targ_mn : 0,
+           src_name ? &src_mn : NULL,
+           targ_name ? &targ_mn : NULL,
            lifetime_rec,
            mech_type,
            ctx_flags,
            locally_initiated,
            open);
 
-       if (src_name) *src_name = 0;
-       if (targ_name) *targ_name = 0;
-
        if (major_status != GSS_S_COMPLETE) {
+               _gss_mg_error(m, major_status, *minor_status);
                return (major_status);
        }
 
        if (src_name) {
                name = _gss_make_name(m, src_mn);
                if (!name) {
-                       minor_status = 0;
+                       *mech_type = GSS_C_NO_OID;
+                       m->gm_release_name(minor_status, &src_mn);
+                       *minor_status = 0;
                        return (GSS_S_FAILURE);
                }
                *src_name = (gss_name_t) name;
@@ -75,7 +90,10 @@ gss_inquire_context(OM_uint32 *minor_status,
        if (targ_name) {
                name = _gss_make_name(m, targ_mn);
                if (!name) {
-                       minor_status = 0;
+                       *mech_type = GSS_C_NO_OID;
+                       gss_release_name(minor_status, src_name);
+                       m->gm_release_name(minor_status, &targ_mn);
+                       *minor_status = 0;
                        return (GSS_S_FAILURE);
                }
                *targ_name = (gss_name_t) name;