1e9f209f67946e6342603043701cd88ced5fefda
[radsecproxy.git] / lib / examples / client.c
1 /* RADIUS client doing blocking i/o.  */
2
3 #include <stdio.h>
4 #include <string.h>
5 #include <unistd.h>
6 #include <stdlib.h>
7 #include <event2/event.h>
8 #include "../libradsec.h"
9
10 #define SECRET "sikrit"
11 #define USER_NAME "bob"
12 #define USER_PW "hemligt"
13
14 struct rs_error *
15 rsx_client (const char *srvname, int srvport)
16 {
17   struct rs_handle *h;
18   struct rs_connection *conn;
19   struct rs_peer *server;
20   struct rs_packet *req, *resp;
21
22   if (rs_context_create (&h, "/usr/share/freeradius/dictionary"))
23     return NULL;
24
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);
32
33   if (rs_packet_create_acc_request (conn, &req, USER_NAME, USER_PW))
34     return rs_conn_err_pop (conn);
35
36   if (rs_packet_send (conn, req, NULL))
37     return rs_conn_err_pop (conn);
38   req = NULL;
39
40 #if 0
41   if (rs_packet_create_acc_request (conn, &req, USER_NAME, USER_PW))
42     return rs_conn_err_pop (conn);
43
44   if (rs_packet_send (conn, req, NULL))
45     return rs_conn_err_pop (conn);
46   req = NULL;
47 #endif
48
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);
53
54   rs_conn_destroy (conn);
55   rs_context_destroy (h);
56   return NULL;
57 }
58
59 int
60 main (int argc, char *argv[])
61 {
62   struct rs_error *err;
63   char *host;
64   int port;
65
66   host = strsep (argv + 1, ":");
67   port = atoi (argv[1]);
68   err = rsx_client (host, port);
69   if (err)
70     {
71       fprintf (stderr, "%s\n", rs_err_msg (err, 0));
72       return rs_err_code (err, 1);
73     }
74   return 0;
75 }