1 /* RADIUS client doing blocking i/o. */
7 #include <event2/event.h>
8 #include "../libradsec.h"
10 #define SECRET "sikrit"
11 #define USER_NAME "bob"
12 #define USER_PW "hemligt"
15 rsx_client (const char *srvname, int srvport)
18 struct rs_connection *conn;
19 struct rs_peer *server;
20 struct rs_packet *req, *resp;
22 if (rs_context_create (&h, "/usr/share/freeradius/dictionary"))
25 if (rs_conn_create (h, &conn))
26 return rs_conn_err_pop (conn);
27 if (rs_conn_add_server (conn, &server, RS_CONN_TYPE_UDP, srvname, srvport))
28 return rs_conn_err_pop (conn);
29 rs_server_set_timeout (server, 10);
30 rs_server_set_tries (server, 3);
31 rs_server_set_secret (server, SECRET);
33 if (rs_packet_create_acc_request (conn, &req, USER_NAME, USER_PW))
34 return rs_conn_err_pop (conn);
36 if (rs_packet_send (conn, req, NULL))
37 return rs_conn_err_pop (conn);
41 if (rs_packet_create_acc_request (conn, &req, USER_NAME, USER_PW))
42 return rs_conn_err_pop (conn);
44 if (rs_packet_send (conn, req, NULL))
45 return rs_conn_err_pop (conn);
49 if (rs_packet_receive (conn, &resp))
50 return rs_conn_err_pop (conn);
51 /* TODO: do something interesting with the response */
52 rs_packet_destroy (resp);
54 rs_conn_destroy (conn);
55 rs_context_destroy (h);
60 main (int argc, char *argv[])
66 host = strsep (argv + 1, ":");
67 port = atoi (argv[1]);
68 err = rsx_client (host, port);
71 fprintf (stderr, "%s\n", rs_err_msg (err, 0));
72 return rs_err_code (err, 1);