cleanup attribute names for radius
authorLuke Howard <lukeh@padl.com>
Tue, 21 Sep 2010 22:39:59 +0000 (00:39 +0200)
committerLuke Howard <lukeh@padl.com>
Tue, 21 Sep 2010 22:39:59 +0000 (00:39 +0200)
mech_eap/accept_sec_context.c
mech_eap/gssapiP_eap.h
mech_eap/util_radius.cpp
mech_eap/util_radius.h
mech_eap/util_saml.cpp

index 710c6ab..f17cb56 100644 (file)
@@ -66,8 +66,8 @@ acceptReady(OM_uint32 *minor, gss_ctx_id_t ctx, gss_cred_id_t cred)
     ctx->initiatorName->attrCtx = gssEapCreateAttrContext(cred, ctx);
 
     vp = rc_avpair_get(ctx->acceptorCtx.avps,
-                       RADIUS_VENDOR_ATTR_MS_MPPE_SEND_KEY,
-                       RADIUS_VENDOR_ID_MICROSOFT);
+                       VENDOR_ATTR_MS_MPPE_SEND_KEY,
+                       VENDOR_ID_MICROSOFT);
     if (ctx->encryptionType != ENCTYPE_NULL && vp != NULL) {
         major = gssEapDeriveRfc3961Key(minor,
                                        (unsigned char *)vp->strvalue,
@@ -158,25 +158,51 @@ setAcceptorIdentity(OM_uint32 *minor,
 {
     OM_uint32 major, tmpMinor;
     gss_buffer_desc nameBuf;
+    krb5_principal krbPrinc;
 
     /* Awaits further specification */
     if (ctx->acceptorName == GSS_C_NO_NAME)
         return GSS_S_COMPLETE;
 
-    major = gss_display_name(minor, ctx->acceptorName, &nameBuf, NULL);
+    krbPrinc = ctx->acceptorName->krbPrincipal;
+    assert(krbPrinc != NULL);
+
+    if (krbPrinc->length < 2)
+        return GSS_S_BAD_NAME;
+
+    nameBuf.value = krbPrinc->data[0].data;
+    nameBuf.length = krbPrinc->data[0].length;
+
+    major = addAvpFromBuffer(minor, ctx->acceptorCtx.radHandle, avps,
+                             VENDOR_ATTR_GSS_ACCEPTOR_SERVICE_NAME,
+                             VENDOR_ID_GSS_EAP,
+                             &nameBuf);
     if (GSS_ERROR(major))
         return major;
 
+    nameBuf.value = krbPrinc->data[1].data;
+    nameBuf.length = krbPrinc->data[2].length;
+
     major = addAvpFromBuffer(minor, ctx->acceptorCtx.radHandle, avps,
-                             RADIUS_VENDOR_ATTR_GSS_EAP_ACCEPTOR_SERVICE_NAME,
-                             RADIUS_VENDOR_ID_GSS_EAP,
+                             VENDOR_ATTR_GSS_ACCEPTOR_HOST_NAME,
+                             VENDOR_ID_GSS_EAP,
                              &nameBuf);
     if (GSS_ERROR(major))
         return major;
 
-    gss_release_buffer(&tmpMinor, &nameBuf);
+    if (krbPrinc->realm.data != NULL) {
+        nameBuf.value = krbPrinc->realm.data;
+        nameBuf.length = krbPrinc->realm.length;
 
-    return major;
+        major = addAvpFromBuffer(minor, ctx->acceptorCtx.radHandle, avps,
+                                 VENDOR_ATTR_GSS_ACCEPTOR_REALM_NAME,
+                                 VENDOR_ID_GSS_EAP,
+                                 &nameBuf);
+        if (GSS_ERROR(major))
+            return major;
+    }
+
+    return GSS_S_COMPLETE;
 }
 
 static OM_uint32
index 7830e2e..99665b6 100644 (file)
@@ -81,6 +81,8 @@ struct gss_name_struct {
 #define CRED_FLAG_ACCEPT                    0x00000002
 #define CRED_FLAG_DEFAULT_IDENTITY          0x00000004
 #define CRED_FLAG_PASSWORD                  0x00000008
+#define CRED_FLAG_DISABLE_LOCAL_ATTRS       0x00010000
+#define CRED_FLAG_SET_CRED_OPTION_MASK      0x00FF0000
 
 struct gss_cred_id_struct {
     GSSEAP_MUTEX mutex;
index ffc30a8..111bad6 100644 (file)
@@ -144,16 +144,16 @@ isHiddenAttributeP(int attrid, int vendor)
     bool ret = false;
 
     switch (vendor) {
-    case RADIUS_VENDOR_ID_MICROSOFT:
+    case VENDOR_ID_MICROSOFT:
         switch (attrid) {
-        case RADIUS_VENDOR_ATTR_MS_MPPE_SEND_KEY:
-        case RADIUS_VENDOR_ATTR_MS_MPPE_RECV_KEY:
+        case VENDOR_ATTR_MS_MPPE_SEND_KEY:
+        case VENDOR_ATTR_MS_MPPE_RECV_KEY:
             ret = true;
             break;
         default:
             break;
         }
-    case RADIUS_VENDOR_ID_GSS_EAP:
+    case VENDOR_ID_GSS_EAP:
         ret = true;
         break;
     default:
index 6829db0..cc84900 100644 (file)
@@ -136,19 +136,18 @@ gssEapRadiusAllocHandle(OM_uint32 *minor,
 #define RC_CONFIG_FILE      SYSCONFDIR "/radiusclient/radiusclient.conf"
 
 /* RFC 2548 - Microsoft Vendor-specific RADIUS Attributes */
-#define RADIUS_VENDOR_ID_MICROSOFT 311
+#define VENDOR_ID_MICROSOFT 311
 
-enum { RADIUS_VENDOR_ATTR_MS_MPPE_SEND_KEY = 16,
-       RADIUS_VENDOR_ATTR_MS_MPPE_RECV_KEY = 17
+enum { VENDOR_ATTR_MS_MPPE_SEND_KEY = 16,
+       VENDOR_ATTR_MS_MPPE_RECV_KEY = 17
 };
 
-/* OK, this is completely unassigned */
-#define RADIUS_VENDOR_ID_GSS_EAP   5322
+#define VENDOR_ID_GSS_EAP   5322    /* XXX TODO assign */
 
-enum { RADIUS_VENDOR_ATTR_GSS_EAP_ACCEPTOR_SERVICE_NAME = 1,
-       RADIUS_VENDOR_ATTR_GSS_EAP_ACCEPTOR_HOST_NAME,
-       RADIUS_VENDOR_ATTR_GSS_EAP_ACCEPTOR_REALM_NAME,
-       RADIUS_VENDOR_ATTR_GSS_EAP_SAML_AAA_ASSERTION
+enum { VENDOR_ATTR_GSS_ACCEPTOR_SERVICE_NAME = 1,
+       VENDOR_ATTR_GSS_ACCEPTOR_HOST_NAME,
+       VENDOR_ATTR_GSS_ACCEPTOR_REALM_NAME,
+       VENDOR_ATTR_SAML_AAA_ASSERTION
 };
 
 #ifdef __cplusplus
index ce704de..922b64c 100644 (file)
@@ -99,8 +99,8 @@ gss_eap_saml_assertion_provider::initFromGssContext(const gss_eap_attr_ctx *mana
     radius = static_cast<const gss_eap_radius_attr_provider *>
         (m_manager->getProvider(ATTR_TYPE_RADIUS));
     if (radius != NULL &&
-        radius->getFragmentedAttribute(RADIUS_VENDOR_ATTR_GSS_EAP_SAML_AAA_ASSERTION,
-                                       RADIUS_VENDOR_ID_GSS_EAP,
+        radius->getFragmentedAttribute(VENDOR_ATTR_SAML_AAA_ASSERTION,
+                                       VENDOR_ID_GSS_EAP,
                                        &authenticated, &complete, &value)) {
         setAssertion(&value, authenticated);
         gss_release_buffer(&minor, &value);