1 /* RADIUS client doing blocking i/o. */
6 #include <freeradius/libradius.h>
7 #include "../libradsec.h"
10 #define SECRET "sikrit"
11 #define USER_NAME "bob"
12 #define USER_PW "hemligt"
18 struct rs_handle *ctx;
19 struct rs_connection *conn;
22 char user_pw[MAX_STRING_LEN];
23 uint8_t reqauth[AUTH_VECTOR_LEN];
27 fr_randinit (&fr_ctx, 0);
28 fr_rand_seed (NULL, 0);
30 printf ("creating context\n");
31 if (rs_context_create(&ctx))
35 printf ("reading config\n");
36 if (rs_context_config_read(ctx, "libradsec.conf"))
41 if (dict_init("/usr/share/freeradius", "dictionary"))
45 printf ("creating connection\n");
46 if (rs_conn_create(ctx, &conn))
50 printf ("creating a packet\n");
53 fr_perror ("pairmake");
58 size_t pwlen = sizeof(USER_PW);
59 strncpy (user_pw, USER_PW, sizeof(user_pw));
60 rad_pwencode(user_pw, &pwlen, SECRET, reqauth);
63 printf ("creating value pairs\n");
64 vp = pairmake ("User-Name", USER_NAME, 0);
66 fr_perror ("paircreate");
69 pairadd (&vp, pairmake ("User-Password", user_pw, 0));
72 printf ("attributes:\n");
73 vp_printlist (stdout, vp);
75 printf ("encoding packet\n");
76 rad_encode (pkt, NULL, SECRET);
77 print_hex (pkt); /* DEBUG */
80 rs_packet_create (&pkt, RS_ACCESS_REQUEST);
81 rs_attrib_create (&attr, RS_...);
82 rs_packet_add_attrib (pkt, attr);
85 //rs_packet_send (conn, pkt, ...);
90 printf ("destroying connection\n");
91 if (rs_conn_destroy(conn))
95 printf ("destroying context\n");
96 rs_context_destroy(ctx);
102 main (int argc, char *argv[])
104 exit (rsx_client ());