[gssntlmssp] Add actual patch

Simo Sorce simo at fedoraproject.org
Wed Dec 4 18:34:21 UTC 2013


commit 32040958d1f6cff45e4030691de768ac8fa6e14f
Author: Simo Sorce <simo at redhat.com>
Date:   Wed Dec 4 13:25:33 2013 -0500

    Add actual patch

 gss-set-neg-mech-fix.patch |  204 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 204 insertions(+), 0 deletions(-)
---
diff --git a/gss-set-neg-mech-fix.patch b/gss-set-neg-mech-fix.patch
new file mode 100644
index 0000000..27a7077
--- /dev/null
+++ b/gss-set-neg-mech-fix.patch
@@ -0,0 +1,204 @@
+diff -uPr gssntlmssp-0.2.0.orig/src/gss_creds.c gssntlmssp-0.2.0.new/src/gss_creds.c
+--- gssntlmssp-0.2.0.orig/src/gss_creds.c	2013-10-17 19:34:01.387283054 -0400
++++ gssntlmssp-0.2.0.new/src/gss_creds.c	2013-12-04 13:27:04.802224591 -0500
+@@ -358,6 +358,7 @@
+         gssntlm_release_cred(&tmpmin, (gss_cred_id_t *)&cred);
+     } else {
+         *output_cred_handle = (gss_cred_id_t)cred;
++        if (time_rec) *time_rec = GSS_C_INDEFINITE;
+     }
+     *minor_status = retmin;
+     return retmaj;
+@@ -425,3 +426,112 @@
+                                      actual_mechs,
+                                      time_rec);
+ }
++
++uint32_t gssntlm_inquire_cred(uint32_t *minor_status,
++                              gss_cred_id_t cred_handle,
++                              gss_name_t *name,
++                              uint32_t *lifetime,
++                              gss_cred_usage_t *cred_usage,
++                              gss_OID_set *mechanisms)
++{
++    struct gssntlm_cred *cred;
++    uint32_t maj, min;
++
++    if (minor_status == NULL)
++        return GSS_S_CALL_INACCESSIBLE_WRITE;
++    *minor_status = 0;
++
++    if (cred_handle == GSS_C_NO_CREDENTIAL)
++        return GSS_S_NO_CRED;
++
++    cred = (struct gssntlm_cred *)cred_handle;
++
++    if (cred->type == GSSNTLM_CRED_NONE)
++        return GSS_S_NO_CRED;
++
++    if (name) {
++        switch (cred->type) {
++        case GSSNTLM_CRED_NONE:
++        case GSSNTLM_CRED_ANON:
++            *name = GSS_C_NO_NAME;
++            break;
++        case GSSNTLM_CRED_USER:
++            maj = gssntlm_duplicate_name(minor_status,
++                                         (gss_name_t)&cred->cred.user.user,
++                                         name);
++            if (maj != GSS_S_COMPLETE) return maj;
++            break;
++        case GSSNTLM_CRED_SERVER:
++            maj = gssntlm_duplicate_name(minor_status,
++                                         (gss_name_t)&cred->cred.server.name,
++                                         name);
++            if (maj != GSS_S_COMPLETE) return maj;
++            break;
++        }
++    }
++
++    if (lifetime) *lifetime = GSS_C_INDEFINITE;
++    if (cred_usage) {
++        if (cred->type == GSSNTLM_CRED_SERVER) {
++            *cred_usage = GSS_C_ACCEPT;
++        } else {
++            *cred_usage = GSS_C_INITIATE;
++        }
++    }
++
++    if (mechanisms) {
++        maj = gss_create_empty_oid_set(minor_status, mechanisms);
++        if (maj != GSS_S_COMPLETE) {
++            gss_release_name(&min, name);
++            return maj;
++        }
++        maj = gss_add_oid_set_member(minor_status,
++                                     discard_const(&gssntlm_oid),
++                                     mechanisms);
++        if (maj != GSS_S_COMPLETE) {
++            gss_release_oid_set(&min, mechanisms);
++            gss_release_name(&min, name);
++            return maj;
++        }
++    }
++
++    return GSS_S_COMPLETE;
++}
++
++uint32_t gssntlm_inquire_cred_by_mech(uint32_t *minor_status,
++                                      gss_cred_id_t cred_handle,
++                                      gss_OID mech_type,
++                                      gss_name_t *name,
++                                      uint32_t *initiator_lifetime,
++                                      uint32_t *acceptor_lifetime,
++                                      gss_cred_usage_t *cred_usage)
++{
++    gss_cred_usage_t usage;
++    uint32_t lifetime;
++    uint32_t maj;
++
++    maj = gssntlm_inquire_cred(minor_status, cred_handle, name,
++                               &lifetime, &usage, NULL);
++    if (maj != GSS_S_COMPLETE) return maj;
++
++    switch (usage) {
++    case GSS_C_INITIATE:
++        if (initiator_lifetime) *initiator_lifetime = lifetime;
++        if (acceptor_lifetime) *acceptor_lifetime = 0;
++        break;
++    case GSS_C_ACCEPT:
++        if (initiator_lifetime) *initiator_lifetime = 0;
++        if (acceptor_lifetime) *acceptor_lifetime = lifetime;
++        break;
++    case GSS_C_BOTH:
++        if (initiator_lifetime) *initiator_lifetime = lifetime;
++        if (acceptor_lifetime) *acceptor_lifetime = lifetime;
++        break;
++    default:
++        *minor_status = EINVAL;
++        return GSS_S_FAILURE;
++    }
++
++    if (cred_usage) *cred_usage = usage;
++    return GSS_S_COMPLETE;
++}
+diff -uPr gssntlmssp-0.2.0.orig/src/gss_ntlmssp.h gssntlmssp-0.2.0.new/src/gss_ntlmssp.h
+--- gssntlmssp-0.2.0.orig/src/gss_ntlmssp.h	2013-10-18 17:41:55.973715207 -0400
++++ gssntlmssp-0.2.0.new/src/gss_ntlmssp.h	2013-12-04 13:27:04.802224591 -0500
+@@ -303,4 +303,19 @@
+                               gss_name_t input_name,
+                               gss_buffer_t output_name_buffer,
+                               gss_OID *output_name_type);
++
++uint32_t gssntlm_inquire_cred(uint32_t *minor_status,
++                              gss_cred_id_t cred_handle,
++                              gss_name_t *name,
++                              uint32_t *lifetime,
++                              gss_cred_usage_t *cred_usage,
++                              gss_OID_set *mechanisms);
++
++uint32_t gssntlm_inquire_cred_by_mech(uint32_t *minor_status,
++                                      gss_cred_id_t cred_handle,
++                                      gss_OID mech_type,
++                                      gss_name_t *name,
++                                      uint32_t *initiator_lifetime,
++                                      uint32_t *acceptor_lifetime,
++                                      gss_cred_usage_t *cred_usage);
+ #endif /* _GSS_NTLMSSP_H_ */
+diff -uPr gssntlmssp-0.2.0.orig/src/gss_spi.c gssntlmssp-0.2.0.new/src/gss_spi.c
+--- gssntlmssp-0.2.0.orig/src/gss_spi.c	2013-10-18 17:41:55.974715214 -0400
++++ gssntlmssp-0.2.0.new/src/gss_spi.c	2013-12-04 13:27:04.803224598 -0500
+@@ -296,3 +296,35 @@
+                                           desired_object,
+                                           value);
+ }
++
++OM_uint32 gss_inquire_cred(OM_uint32 *minor_status,
++                           gss_cred_id_t cred_handle,
++                           gss_name_t *name,
++                           OM_uint32 *lifetime,
++                           gss_cred_usage_t *cred_usage,
++                           gss_OID_set *mechanisms)
++{
++    return gssntlm_inquire_cred(minor_status,
++                                cred_handle,
++                                name,
++                                lifetime,
++                                cred_usage,
++                                mechanisms);
++}
++
++OM_uint32 gss_inquire_cred_by_mech(OM_uint32 *minor_status,
++                                   gss_cred_id_t cred_handle,
++                                   gss_OID mech_type,
++                                   gss_name_t *name,
++                                   OM_uint32 *initiator_lifetime,
++                                   OM_uint32 *acceptor_lifetime,
++                                   gss_cred_usage_t *cred_usage)
++{
++    return gssntlm_inquire_cred_by_mech(minor_status,
++                                        cred_handle,
++                                        mech_type,
++                                        name,
++                                        initiator_lifetime,
++                                        acceptor_lifetime,
++                                        cred_usage);
++}
+diff -uPr gssntlmssp-0.2.0.orig/tests/ntlmssptest.c gssntlmssp-0.2.0.new/tests/ntlmssptest.c
+--- gssntlmssp-0.2.0.orig/tests/ntlmssptest.c	2013-10-18 17:41:55.976715229 -0400
++++ gssntlmssp-0.2.0.new/tests/ntlmssptest.c	2013-12-04 13:27:04.803224598 -0500
+@@ -1117,6 +1117,14 @@
+         }
+     }
+ 
++    retmaj = gssntlm_inquire_cred_by_mech(&retmin, cli_cred, GSS_C_NO_OID,
++                                          NULL, NULL, NULL, NULL);
++    if (retmaj != GSS_S_COMPLETE) {
++        fprintf(stderr, "gssntlm_import_cred_by_mech failed! (%d/%d, %s)",
++                        retmaj, retmin, strerror(retmin));
++        return EINVAL;
++    }
++
+     nbuf.value = discard_const(srvname);
+     nbuf.length = strlen(srvname);
+     retmaj = gssntlm_import_name(&retmin, &nbuf,


More information about the scm-commits mailing list