1 /* RADIUS client doing blocking i/o. */
7 #include <event2/event.h>
8 #include <freeradius/libradius.h>
9 #include <radsec/libradsec.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);
44 if (rs_packet_create_acc_request (conn, &req, USER_NAME, USER_PW))
45 return rs_conn_err_pop (conn);
47 if (rs_packet_send (conn, req, NULL))
48 return rs_conn_err_pop (conn);
52 if (rs_conn_receive_packet (conn, &resp))
53 return rs_conn_err_pop (conn);
54 fr_pkt = rs_packet_frpkt (resp);
55 fr_vp = fr_pkt->vps; /* FIXME: Is there an accessor? */
56 vp_printlist(stdout, fr_vp);
57 rs_packet_destroy (resp);
59 rs_conn_destroy (conn);
60 rs_context_destroy (h);
65 main (int argc, char *argv[])
71 host = strsep (argv + 1, ":");
72 port = atoi (argv[1]);
73 err = rsx_client (host, port);
76 fprintf (stderr, "%s\n", rs_err_msg (err, 0));
77 return rs_err_code (err, 1);