/[radius]/radius/lib/client.c
ViewVC logotype

Diff of /radius/lib/client.c

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

revision 1.5 by gray, Mon Apr 28 12:07:55 2003 UTC revision 1.6 by gray, Tue Apr 29 13:57:59 2003 UTC
# Line 34  Line 34 
34  #include <ctype.h>  #include <ctype.h>
35    
36  #include <radius.h>  #include <radius.h>
 #include <slist.h>  
37  #include <debugmod.h>  #include <debugmod.h>
38    
39  void  void
# Line 205  rad_clt_send(RADIUS_SERVER_QUEUE *config Line 204  rad_clt_send(RADIUS_SERVER_QUEUE *config
204          debug(1,          debug(1,
205                ("sending %s", auth_code_str(code)));                ("sending %s", auth_code_str(code)));
206          recv_buf = emalloc(config->buffer_size);          recv_buf = emalloc(config->buffer_size);
207          server = config->first_server;          server = list_first(config->servers);
208          do {          do {
209                  fd_set readfds;                  fd_set readfds;
210                  struct timeval tm;                  struct timeval tm;
# Line 302  rad_clt_send(RADIUS_SERVER_QUEUE *config Line 301  rad_clt_send(RADIUS_SERVER_QUEUE *config
301                                    ip_iptostr(server->addr, ipbuf),                                    ip_iptostr(server->addr, ipbuf),
302                                    server->port[port_type]));                                    server->port[port_type]));
303                                    
304          } while (!req && (server = server->next) != NULL);          } while (!req && (server = list_next(config->servers)) != NULL);
305    
306          efree(recv_buf);          efree(recv_buf);
307          close(sockfd);          close(sockfd);
# Line 377  parse_client_config(RADIUS_SERVER_QUEUE Line 376  parse_client_config(RADIUS_SERVER_QUEUE
376                                 file, lineno, argv[4]);                                 file, lineno, argv[4]);
377                          break;                          break;
378                  }                  }
379                    
380                  client->first_server =                  rad_clt_append_server(client, rad_clt_alloc_server(&serv));
                         rad_clt_append_server(client->first_server,  
                                                 rad_clt_alloc_server(&serv));  
381                  break;                  break;
382                                    
383          case TOK_TIMEOUT:          case TOK_TIMEOUT:
# Line 416  rad_clt_create_queue(int read_cfg, UINT4 Line 413  rad_clt_create_queue(int read_cfg, UINT4
413          client->timeout = 1;          client->timeout = 1;
414          client->retries = 3;          client->retries = 3;
415          client->buffer_size = bufsize ? bufsize : 4096;          client->buffer_size = bufsize ? bufsize : 4096;
416          client->first_server = NULL;          client->servers = 0;
417    
418          if (read_cfg) {          if (read_cfg) {
419                  filename = mkfilename(radius_dir, "client.conf");                  filename = mkfilename(radius_dir, "client.conf");
# Line 430  void Line 427  void
427  rad_clt_destroy_queue(RADIUS_SERVER_QUEUE *queue)  rad_clt_destroy_queue(RADIUS_SERVER_QUEUE *queue)
428  {  {
429          if (queue) {          if (queue) {
430                  rad_clt_clear_server_list(queue->first_server);                  rad_clt_clear_server_list(queue);
431                  efree(queue);                  efree(queue);
432          }          }
433  }  }
# Line 440  rad_clt_alloc_server(RADIUS_SERVER *src) Line 437  rad_clt_alloc_server(RADIUS_SERVER *src)
437  {  {
438          RADIUS_SERVER *server;          RADIUS_SERVER *server;
439    
440          server = mem_alloc(sizeof(*server));          server = emalloc(sizeof(*server));
441          server->name = string_create(src->name);          server->name = string_create(src->name);
442          server->addr = src->addr;          server->addr = src->addr;
443          server->port[0] = src->port[0];          server->port[0] = src->port[0];
444          server->port[1] = src->port[1];          server->port[1] = src->port[1];
445          server->secret = string_create(src->secret);          server->secret = string_create(src->secret);
446            server->id_offset = (off_t)-1;
447          return server;          return server;
448  }  }
449    
# Line 454  rad_clt_dup_server(RADIUS_SERVER *src) Line 452  rad_clt_dup_server(RADIUS_SERVER *src)
452  {  {
453          RADIUS_SERVER *dest;          RADIUS_SERVER *dest;
454    
455          dest = mem_alloc(sizeof(*dest));          dest = emalloc(sizeof(*dest));
456          dest->addr = src->addr;          dest->addr = src->addr;
457          dest->name = string_dup(src->name);          dest->name = string_dup(src->name);
458          dest->port[0] = src->port[0];          dest->port[0] = src->port[0];
# Line 472  rad_clt_free_server(RADIUS_SERVER *serve Line 470  rad_clt_free_server(RADIUS_SERVER *serve
470  {  {
471          string_free(server->name);          string_free(server->name);
472          string_free(server->secret);          string_free(server->secret);
473          mem_free(server);          efree(server);
474  }  }
475    
476  RADIUS_SERVER *  RADIUS_SERVER *
477  rad_clt_append_server(RADIUS_SERVER *list, RADIUS_SERVER *server)  rad_clt_append_server(RADIUS_SERVER_QUEUE *qp, RADIUS_SERVER *server)
478  {  {
479          return (RADIUS_SERVER*)append_slist((struct slist*)list,          if (!qp->servers)
480                                       (struct slist*)server);                  qp->servers = list_create();
481            list_append(qp->servers, server);
482  }  }
483    
484  static void  static int
485  rad_clt_internal_free_server(RADIUS_SERVER *server)  rad_clt_internal_free_server(void *item, void *data)
486  {  {
487            RADIUS_SERVER *server = item;
488          string_free(server->name);          string_free(server->name);
489          string_free(server->secret);          string_free(server->secret);
490            efree(server);
491            return 0;
492  }  }
493    
494  void  void
495  rad_clt_clear_server_list(RADIUS_SERVER *list)  rad_clt_clear_server_list(RADIUS_SERVER_QUEUE *qp)
496  {  {
497          free_slist((struct slist *)list, rad_clt_internal_free_server);          list_destroy(&qp->servers, rad_clt_internal_free_server, NULL);
498  }  }
499    
500  static int  static int
501  server_cmp(RADIUS_SERVER *serv, char *id)  server_cmp(void *item, void *data)
502  {  {
503          return strcmp(serv->name, id);          RADIUS_SERVER *serv = item;
504            char *id = data;
505    
506            return strcmp(serv->name, id) == 0;
507  }  }
508    
509  RADIUS_SERVER *  RADIUS_SERVER *
510  rad_clt_find_server(RADIUS_SERVER *list, char *name)  rad_clt_find_server(RADIUS_SERVER_QUEUE *qp, char *name)
511  {  {
512          return (RADIUS_SERVER*)find_slist((struct slist *)list,          list_iterate(qp->servers, server_cmp, name);
513                                     server_cmp,          return list_current(qp->servers);
                                    name);  
514  }  }
515    

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

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