1 /* RADIUS client doing blocking i/o. */
7 #include <event2/event.h>
8 #include <freeradius/libradius.h>
9 #include <radsec/radsec.h>
11 #define SECRET "sikrit"
12 #define USER_NAME "bob"
13 #define USER_PW "hemligt"
16 rsx_client (const char *srvname, int srvport)
19 struct rs_connection *conn;
20 struct rs_peer *server;
21 struct rs_packet *req, *resp;
22 RADIUS_PACKET *fr_pkt;
25 if (rs_context_create (&h, "/usr/share/freeradius/dictionary"))
28 if (rs_conn_create (h, &conn))
29 return rs_conn_err_pop (conn);
30 if (rs_conn_add_server (conn, &server, RS_CONN_TYPE_UDP, srvname, srvport))
31 return rs_conn_err_pop (conn);
32 rs_server_set_timeout (server, 10);
33 rs_server_set_tries (server, 3);
34 rs_server_set_secret (server, SECRET);
36 if (rs_packet_create_acc_request (conn, &req, USER_NAME, USER_PW))
37 return rs_conn_err_pop (conn);
39 if (rs_packet_send (req, NULL))
40 return rs_conn_err_pop (conn);
43 if (rs_conn_receive_packet (conn, &resp))
44 return rs_conn_err_pop (conn);
45 fr_pkt = rs_packet_frpkt (resp);
46 fr_vp = fr_pkt->vps; /* FIXME: Is there an accessor? */
47 vp_printlist(stdout, fr_vp);
48 rs_packet_destroy (resp);
50 rs_conn_destroy (conn);
51 rs_context_destroy (h);
56 main (int argc, char *argv[])
62 host = strsep (argv + 1, ":");
63 port = atoi (argv[1]);
64 err = rsx_client (host, port);
67 fprintf (stderr, "%s\n", rs_err_msg (err, 0));
68 return rs_err_code (err, 1);