153 |
inputsize); |
inputsize); |
154 |
if (!radreq) |
if (!radreq) |
155 |
return 1; |
return 1; |
156 |
|
|
157 |
*output = radreq; |
*output = radreq; |
158 |
return 0; |
return 0; |
159 |
} |
} |
200 |
VALUE_PAIR *alist = NULL, *blist = NULL, *ap, *bp; |
VALUE_PAIR *alist = NULL, *blist = NULL, *ap, *bp; |
201 |
int rc; |
int rc; |
202 |
NAS *nas; |
NAS *nas; |
203 |
|
|
204 |
|
if (proxy_cmp(a, b) == 0) |
205 |
|
return RCMP_PROXY; |
206 |
|
|
207 |
if (a->ipaddr != b->ipaddr || a->code != b->code) |
if (a->ipaddr != b->ipaddr || a->code != b->code) |
208 |
return 1; |
return RCMP_NE; |
209 |
|
|
210 |
if (a->id == b->id |
if (a->id == b->id |
211 |
&& memcmp(a->vector, b->vector, sizeof(a->vector)) == 0) |
&& memcmp(a->vector, b->vector, sizeof(a->vector)) == 0) |
212 |
return 0; |
return RCMP_EQ; |
213 |
|
|
214 |
if (nas = nas_request_to_nas(a)) |
if (nas = nas_request_to_nas(a)) |
215 |
prop = envar_lookup_int(nas->args, "compare-atribute-flag", 0); |
prop = envar_lookup_int(nas->args, "compare-atribute-flag", 0); |
233 |
} |
} |
234 |
|
|
235 |
if (prop == 0) |
if (prop == 0) |
236 |
return 1; |
return RCMP_NE; |
237 |
|
|
238 |
prop |= AP_REQ_CMP; |
prop |= AP_REQ_CMP; |
239 |
alist = _extract_pairs(a, prop); |
alist = _extract_pairs(a, prop); |
246 |
|
|
247 |
avl_free(alist); |
avl_free(alist); |
248 |
avl_free(blist); |
avl_free(blist); |
249 |
return rc; |
return rc == 0 ? RCMP_EQ : RCMP_NE; |
250 |
|
} |
251 |
|
|
252 |
|
void |
253 |
|
radius_req_update(void *req_ptr, void *data_ptr) |
254 |
|
{ |
255 |
|
RADIUS_REQ *req = req_ptr; |
256 |
|
RADIUS_UPDATE *upd = data_ptr; |
257 |
|
RADIUS_SERVER *server; |
258 |
|
REALM *realm; |
259 |
|
int i; |
260 |
|
|
261 |
|
req->server_id = upd->proxy_id; |
262 |
|
realm = realm_lookup_name(upd->realmname); |
263 |
|
server = realm->queue->first_server; |
264 |
|
for (i = 0; i < upd->server_no && server; i++) |
265 |
|
server = server->next; |
266 |
|
req->server = server; |
267 |
} |
} |
268 |
|
|
269 |
void |
void |
342 |
case RT_ACCOUNTING_REQUEST: |
case RT_ACCOUNTING_REQUEST: |
343 |
if (avl_find(radreq->request, DA_USER_NAME) == NULL) |
if (avl_find(radreq->request, DA_USER_NAME) == NULL) |
344 |
break; |
break; |
345 |
if (proxy_send(radreq, req->fd) != 0) { |
if (proxy_send(req) != 0) { |
|
req->type = R_PROXY; |
|
346 |
return 0; |
return 0; |
347 |
} |
} |
348 |
break; |
break; |
351 |
case RT_AUTHENTICATION_REJECT: |
case RT_AUTHENTICATION_REJECT: |
352 |
case RT_ACCOUNTING_RESPONSE: |
case RT_ACCOUNTING_RESPONSE: |
353 |
case RT_ACCESS_CHALLENGE: |
case RT_ACCESS_CHALLENGE: |
354 |
if (proxy_receive(radreq, req->fd) < 0) { |
if (!req->orig) { |
355 |
|
char buf[MAX_SHORTNAME]; |
356 |
|
radlog_req(L_PROXY|L_ERR, radreq, |
357 |
|
_("Unrecognized proxy reply from server %s, proxy ID %d"), |
358 |
|
client_lookup_name(radreq->ipaddr, |
359 |
|
buf, sizeof buf), |
360 |
|
radreq->id); |
361 |
|
return 1; |
362 |
|
} |
363 |
|
|
364 |
|
if (proxy_receive(radreq, req->orig->data, req->fd) < 0) { |
365 |
return 1; |
return 1; |
366 |
} |
} |
367 |
break; |
break; |