fix some libradsec interop nits
authorLuke Howard <lukeh@padl.com>
Fri, 8 Oct 2010 18:50:06 +0000 (20:50 +0200)
committerLuke Howard <lukeh@padl.com>
Fri, 8 Oct 2010 18:50:06 +0000 (20:50 +0200)
accept_sec_context.c
gssapiP_eap.h
util_radius.cpp

index f724f0b..c36b467 100644 (file)
@@ -60,8 +60,9 @@ acceptReadyEap(OM_uint32 *minor, gss_ctx_id_t ctx, gss_cred_id_t cred)
 
     gssEapReleaseName(&tmpMinor, &ctx->initiatorName);
 
-    vp = pairfind(ctx->acceptorCtx.vps, PW_USER_NAME);
-    if (vp != NULL) {
+    major = gssEapRadiusGetRawAvp(minor, ctx->acceptorCtx.vps,
+                                  PW_USER_NAME, 0, &vp);
+    if (major == GSS_S_COMPLETE) {
         nameBuf.length = vp->length;
         nameBuf.value = vp->vp_strvalue;
     } else {
@@ -252,6 +253,7 @@ eapGssSmAcceptAuthenticate(OM_uint32 *minor,
     OM_uint32 major, tmpMinor;
     struct rs_handle *rh;
     struct rs_connection *rconn;
+    struct rs_request *request = NULL;
     struct rs_packet *req = NULL, *resp = NULL;
     struct radius_packet *frreq, *frresp;
     int sendAcceptorIdentity = 0;
@@ -280,7 +282,8 @@ eapGssSmAcceptAuthenticate(OM_uint32 *minor,
             goto cleanup;
     }
 
-    major = gssEapRadiusAddAvp(minor, rh, &frreq->vps, PW_EAP_MESSAGE, 0, inputToken);
+    major = gssEapRadiusAddAvp(minor, rh, &frreq->vps,
+                               PW_EAP_MESSAGE, 0, inputToken);
     if (GSS_ERROR(major))
         goto cleanup;
 
@@ -293,16 +296,13 @@ eapGssSmAcceptAuthenticate(OM_uint32 *minor,
         gss_release_buffer(&tmpMinor, &ctx->acceptorCtx.state);
     }
 
-    if (rs_packet_send(req, NULL) != 0) {
+    if (rs_request_create(rconn, &request) != 0 ||
+        rs_request_send(request, req, &resp) != 0) {
         major = gssEapRadiusMapError(minor, rs_err_conn_pop(rconn));
         goto cleanup;
     }
-    req = NULL;
 
-    if (rs_conn_receive_packet(rconn, &resp) != 0) {
-        major = gssEapRadiusMapError(minor, rs_err_conn_pop(rconn));
-        goto cleanup;
-    }
+    assert(resp != NULL);
 
     frresp = rs_packet_frpkt(resp);
     switch (frresp->code) {
@@ -345,8 +345,7 @@ eapGssSmAcceptAuthenticate(OM_uint32 *minor,
     major = GSS_S_CONTINUE_NEEDED;
 
 cleanup:
-    rs_packet_destroy(req);
-    rs_packet_destroy(resp);
+    rs_request_destroy(request);
 
     return major;
 }
index 29d43f7..5ff9bd2 100644 (file)
@@ -68,6 +68,7 @@ extern "C" {
 #include <freeradius/libradius.h>
 #include <freeradius/radius.h>
 #include <radsec/radsec.h>
+#include <radsec/request.h>
 #ifdef __cplusplus
 #undef operator
 }
index 68a6807..f0afda8 100644 (file)
@@ -33,7 +33,7 @@
 #include "gssapiP_eap.h"
 
 /* stuff that should be provided by libradsec/libfreeradius-radius */
-#define VENDORATTR(vendor, attr)            ((vendor) << 16 | (attr))
+#define VENDORATTR(vendor, attr)            (((vendor) << 16) | (attr))
 
 #ifndef ATTRID
 #define ATTRID(attr)                        ((attr) & 0xFFFF)
@@ -169,7 +169,7 @@ alreadyAddedAttributeP(std::vector <std::string> &attrs, VALUE_PAIR *vp)
 }
 
 static bool
-isHiddenAttributeP(int attrid, uint16_t vendor)
+isHiddenAttributeP(uint16_t attrid, uint16_t vendor)
 {
     bool ret = false;
 
@@ -246,7 +246,7 @@ gss_eap_radius_attr_provider::getAttribute(const gss_buffer_t attr,
     OM_uint32 tmpMinor;
     gss_buffer_desc strAttr = GSS_C_EMPTY_BUFFER;
     DICT_ATTR *da;
-    int attrid;
+    uint32_t attrid;
     char *s;
 
     duplicateBuffer(*attr, &strAttr);
@@ -416,7 +416,7 @@ gssEapRadiusAddAvp(OM_uint32 *minor,
                    uint16_t vendor,
                    gss_buffer_t buffer)
 {
-    uint16_t attrid = VENDORATTR(vendor, vattrid);
+    uint32_t attrid = VENDORATTR(vendor, vattrid);
     unsigned char *p = (unsigned char *)buffer->value;
     size_t remain = buffer->length;
 
@@ -434,6 +434,8 @@ gssEapRadiusAddAvp(OM_uint32 *minor,
         }
 
         memcpy(vp->vp_octets, p, n);
+        vp->length = n;
+
         pairadd(vps, vp);
 
         p += n;
@@ -450,7 +452,7 @@ gssEapRadiusGetRawAvp(OM_uint32 *minor,
                       uint16_t vendor,
                       VALUE_PAIR **vp)
 {
-    uint16_t attr = VENDORATTR(vendor, type);
+    uint32_t attr = VENDORATTR(vendor, type);
 
     *vp = pairfind(vps, attr);