85 |
{ |
{ |
86 |
VALUE_PAIR *p, *proxy_state_pair = NULL; |
VALUE_PAIR *p, *proxy_state_pair = NULL; |
87 |
PROXY_STATE *state; |
PROXY_STATE *state; |
88 |
|
RADIUS_SERVER *server; |
89 |
|
|
90 |
if (!qr->server) { |
if (!qr->realm) { |
91 |
|
debug(100,("no proxy realm")); |
92 |
|
return 1; |
93 |
|
} |
94 |
|
server = list_item(qr->realm->queue->servers, qr->server_no); |
95 |
|
if (!server) { |
96 |
debug(100,("no proxy server")); |
debug(100,("no proxy server")); |
97 |
return 1; |
return 1; |
98 |
} |
} |
99 |
|
|
100 |
/* Find the last PROXY_STATE attribute. */ |
/* Find the last PROXY_STATE attribute. */ |
101 |
for (p = r->request; p; p = p->next) { |
for (p = r->request; p; p = p->next) { |
102 |
if (p->attribute == DA_PROXY_STATE) |
if (p->attribute == DA_PROXY_STATE) |
120 |
qr->id, state->id, |
qr->id, state->id, |
121 |
qr->ipaddr, state->ipaddr, |
qr->ipaddr, state->ipaddr, |
122 |
qr->server_id, state->proxy_id, |
qr->server_id, state->proxy_id, |
123 |
qr->server->addr, state->rem_ipaddr)); |
server->addr, state->rem_ipaddr)); |
124 |
|
|
125 |
if (state->ipaddr == qr->ipaddr |
if (state->ipaddr == qr->ipaddr |
126 |
&& state->id == qr->id |
&& state->id == qr->id |
127 |
&& state->proxy_id == qr->server_id |
&& state->proxy_id == qr->server_id |
128 |
&& state->rem_ipaddr == qr->server->addr) { |
&& state->rem_ipaddr == server->addr) { |
129 |
debug(1,("EQUAL!!!")); |
debug(1,("EQUAL!!!")); |
130 |
return 0; |
return 0; |
131 |
} |
} |
134 |
debug(10, ("(old=data) id %d %d, ipaddr %#8x %#8x", |
debug(10, ("(old=data) id %d %d, ipaddr %#8x %#8x", |
135 |
qr->server_id, |
qr->server_id, |
136 |
r->id, |
r->id, |
137 |
qr->server->addr, |
server->addr, |
138 |
r->ipaddr)); |
r->ipaddr)); |
139 |
|
|
140 |
if (r->ipaddr == qr->server->addr |
if (r->ipaddr == server->addr |
141 |
&& r->id == qr->server_id) |
&& r->id == qr->server_id) |
142 |
return 0; |
return 0; |
143 |
} |
} |
159 |
RADIUS_SERVER *server; |
RADIUS_SERVER *server; |
160 |
|
|
161 |
if (radreq->attempt_no > radreq->realm->queue->retries) { |
if (radreq->attempt_no > radreq->realm->queue->retries) { |
162 |
radreq->server = radreq->server->next; |
radreq->server_no++; |
163 |
radreq->attempt_no = 0; |
radreq->attempt_no = 0; |
164 |
} |
} |
165 |
|
server = list_item(radreq->realm->queue->servers, radreq->server_no); |
166 |
|
|
167 |
|
|
168 |
if (!radreq->server) { |
if (!server) { |
169 |
radlog_req(L_NOTICE, radreq, |
radlog_req(L_NOTICE, radreq, |
170 |
_("couldn't send request to realm %s"), |
_("couldn't send request to realm %s"), |
171 |
radreq->realm->realm); |
radreq->realm->realm); |
172 |
return 0; |
return 0; |
173 |
} |
} |
174 |
|
if (radreq->attempt_no == 0) |
175 |
|
radreq->server_id = rad_clt_message_id(server); |
176 |
radreq->attempt_no++; |
radreq->attempt_no++; |
177 |
|
|
|
server = radreq->server; |
|
178 |
rad_clt_random_vector(vector); |
rad_clt_random_vector(vector); |
179 |
|
|
180 |
/* Copy the list */ |
/* Copy the list */ |
298 |
string_replace(&namepair->avp_strvalue, username); |
string_replace(&namepair->avp_strvalue, username); |
299 |
namepair->avp_strlength = strlen(namepair->avp_strvalue); |
namepair->avp_strlength = strlen(namepair->avp_strvalue); |
300 |
|
|
301 |
radreq->server = realm->queue->first_server; |
radreq->server_no = 0; |
302 |
radreq->attempt_no = 0; |
radreq->attempt_no = 0; |
|
radreq->server_id = rad_clt_message_id(radreq->server); |
|
303 |
radreq->remote_user = string_create(username); |
radreq->remote_user = string_create(username); |
304 |
|
|
305 |
req->update_size = sizeof(*upd) + strlen(realm->realm); |
req->update_size = sizeof(*upd) + strlen(realm->realm); |
306 |
upd = emalloc(req->update_size); |
upd = emalloc(req->update_size); |
307 |
upd->proxy_id = radreq->server_id; |
upd->proxy_id = radreq->server_id; |
308 |
upd->server_no = 0; |
upd->server_no = radreq->server_no; |
309 |
strcpy(upd->realmname, realm->realm); |
strcpy(upd->realmname, realm->realm); |
310 |
req->update = upd; |
req->update = upd; |
311 |
|
|
429 |
|
|
430 |
/* Proxy support fields */ |
/* Proxy support fields */ |
431 |
radreq->realm = oldreq->realm; |
radreq->realm = oldreq->realm; |
432 |
radreq->server = oldreq->server; |
radreq->server_no = oldreq->server_no; |
433 |
radreq->server_id = oldreq->server_id; |
radreq->server_id = oldreq->server_id; |
434 |
|
|
435 |
return 0; |
return 0; |