heimdal: Fix size types and array access
[metze/samba/wip.git] / source4 / heimdal / lib / gssapi / mech / gss_set_cred_option.c
index 78c8cc79c105500ab1bc413517144a42639b45ff..653565b856d8a1402b8e84874450ba53c2a3e8de 100644 (file)
@@ -31,9 +31,8 @@
  */
 
 #include "mech_locl.h"
-RCSID("$Id: gss_set_cred_option.c 20626 2007-05-08 13:56:49Z lha $");
 
-OM_uint32
+GSSAPI_LIB_FUNCTION OM_uint32 GSSAPI_LIB_CALL
 gss_set_cred_option (OM_uint32 *minor_status,
                     gss_cred_id_t *cred_handle,
                     const gss_OID object,
@@ -42,7 +41,7 @@ gss_set_cred_option (OM_uint32 *minor_status,
        struct _gss_cred *cred = (struct _gss_cred *) *cred_handle;
        OM_uint32       major_status = GSS_S_COMPLETE;
        struct _gss_mechanism_cred *mc;
-       int one_ok = 0;
+       OM_uint32 one_ok = 0;
 
        *minor_status = 0;
 
@@ -55,16 +54,18 @@ gss_set_cred_option (OM_uint32 *minor_status,
                if (cred == NULL)
                    return GSS_S_FAILURE;
 
-               SLIST_INIT(&cred->gc_mc);
+               HEIM_SLIST_INIT(&cred->gc_mc);
 
-               SLIST_FOREACH(m, &_gss_mechs, gm_link) {
+               HEIM_SLIST_FOREACH(m, &_gss_mechs, gm_link) {
 
                        if (m->gm_mech.gm_set_cred_option == NULL)
                                continue;
 
                        mc = malloc(sizeof(*mc));
                        if (mc == NULL) {
-                           /* XXX free the other mc's */
+                           *cred_handle = (gss_cred_id_t)cred;
+                           gss_release_cred(minor_status, cred_handle);
+                           *minor_status = ENOMEM;
                            return GSS_S_FAILURE;
                        }
 
@@ -80,7 +81,7 @@ gss_set_cred_option (OM_uint32 *minor_status,
                                continue;
                        }
                        one_ok = 1;
-                       SLIST_INSERT_HEAD(&cred->gc_mc, mc, gmc_link);
+                       HEIM_SLIST_INSERT_HEAD(&cred->gc_mc, mc, gmc_link);
                }
                *cred_handle = (gss_cred_id_t)cred;
                if (!one_ok) {
@@ -90,15 +91,15 @@ gss_set_cred_option (OM_uint32 *minor_status,
        } else {
                gssapi_mech_interface   m;
 
-               SLIST_FOREACH(mc, &cred->gc_mc, gmc_link) {
+               HEIM_SLIST_FOREACH(mc, &cred->gc_mc, gmc_link) {
                        m = mc->gmc_mech;
-       
+
                        if (m == NULL)
                                return GSS_S_BAD_MECH;
-       
+
                        if (m->gm_set_cred_option == NULL)
                                continue;
-       
+
                        major_status = m->gm_set_cred_option(minor_status,
                            &mc->gmc_cred, object, value);
                        if (major_status == GSS_S_COMPLETE)