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 {
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;
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;
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) {
major = GSS_S_CONTINUE_NEEDED;
cleanup:
- rs_packet_destroy(req);
- rs_packet_destroy(resp);
+ rs_request_destroy(request);
return major;
}
#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)
}
static bool
-isHiddenAttributeP(int attrid, uint16_t vendor)
+isHiddenAttributeP(uint16_t attrid, uint16_t vendor)
{
bool ret = false;
OM_uint32 tmpMinor;
gss_buffer_desc strAttr = GSS_C_EMPTY_BUFFER;
DICT_ATTR *da;
- int attrid;
+ uint32_t attrid;
char *s;
duplicateBuffer(*attr, &strAttr);
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;
}
memcpy(vp->vp_octets, p, n);
+ vp->length = n;
+
pairadd(vps, vp);
p += n;
uint16_t vendor,
VALUE_PAIR **vp)
{
- uint16_t attr = VENDORATTR(vendor, type);
+ uint32_t attr = VENDORATTR(vendor, type);
*vp = pairfind(vps, attr);