/[radius]/radius/radiusd/proxy.c
ViewVC logotype

Diff of /radius/radiusd/proxy.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.45 by gray, Mon Apr 28 12:09:11 2003 UTC revision 1.46 by gray, Tue Apr 29 13:59:15 2003 UTC
# Line 85  proxy_cmp(RADIUS_REQ *qr, RADIUS_REQ *r) Line 85  proxy_cmp(RADIUS_REQ *qr, RADIUS_REQ *r)
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)
# Line 113  proxy_cmp(RADIUS_REQ *qr, RADIUS_REQ *r) Line 120  proxy_cmp(RADIUS_REQ *qr, RADIUS_REQ *r)
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                          }                          }
# Line 127  proxy_cmp(RADIUS_REQ *qr, RADIUS_REQ *r) Line 134  proxy_cmp(RADIUS_REQ *qr, RADIUS_REQ *r)
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          }          }
# Line 152  proxy_send_request(int fd, RADIUS_REQ *r Line 159  proxy_send_request(int fd, RADIUS_REQ *r
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 */
# Line 288  proxy_send(REQUEST *req) Line 298  proxy_send(REQUEST *req)
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                    
# Line 420  proxy_receive(RADIUS_REQ *radreq, RADIUS Line 429  proxy_receive(RADIUS_REQ *radreq, RADIUS
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;

Legend:
Removed from v.1.45  
changed lines
  Added in v.1.46

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26