1 /* RADIUS/RadSec client using libradsec in user dispatch mode. */
5 #include <radsec/radsec.h>
6 #include <event2/event.h>
7 #include "debug.h" /* For rs_dump_packet(). */
9 #define CONFIG "dispatching-tls"
10 #define CONFIG_FILE "examples/client.conf"
12 #define SECRET "sikrit"
13 #define USER_NAME "molgan@PROJECT-MOONSHOT.ORG"
14 #define USER_PW "password"
17 struct rs_packet *msg;
18 unsigned packet_sent_flag : 1;
19 unsigned packet_received_flag : 1;
23 connected_cb (void *user_data)
25 printf ("%s\n", __FUNCTION__);
29 disconnected_cb (void *user_data)
31 printf ("%s\n", __FUNCTION__);
35 msg_received_cb (struct rs_packet *packet, void *user_data)
37 struct state *state = (struct state *) user_data;
39 printf ("%s\n", __FUNCTION__);
42 state->packet_received_flag = 1;
46 msg_sent_cb (void *user_data)
48 struct state *state = (struct state *) user_data;
50 printf ("%s\n", __FUNCTION__);
52 rs_packet_destroy (state->msg);
53 state->packet_sent_flag = 1;
57 dispatching_client (struct rs_context *ctx)
59 struct rs_connection *conn = NULL;
60 struct rs_conn_callbacks cb = { connected_cb, disconnected_cb,
61 msg_received_cb, msg_sent_cb };
62 struct rs_packet *req_msg = NULL;
63 struct rs_error *err = NULL;
66 memset (&state, 0, sizeof (state));
68 if (rs_conn_create(ctx, &conn, CONFIG))
70 rs_conn_set_callbacks (conn, &cb, &state);
71 if (rs_packet_create_authn_request (conn, &req_msg, USER_NAME, USER_PW))
73 /* Doesn't really send the message but rather queues it for sending.
74 msg_received_cb() will be invoked with user_data = &state when
75 the message has been sent. */
76 if (rs_packet_send (req_msg))
81 if (rs_conn_dispatch (conn))
83 if (state.packet_received_flag)
85 rs_dump_packet (state.msg); /* debug printout */
86 if (rs_packet_code (state.msg) == PW_ACCESS_ACCEPT)
87 printf ("Good auth.\n");
89 printf ("Bad auth: %d\n", rs_packet_code (state.msg));
90 rs_packet_destroy (state.msg);
95 if (rs_conn_destroy(conn))
100 err = rs_err_ctx_pop (ctx);
102 err = rs_err_conn_pop (conn);
105 rs_conn_destroy(conn);
111 main (int argc, char *argv[])
113 struct rs_error *err = NULL;
114 struct rs_context *ctx = NULL;
116 if (rs_context_create(&ctx))
118 if (rs_context_read_config(ctx, CONFIG_FILE))
121 err = dispatching_client (ctx);
125 rs_context_destroy(ctx);
129 fprintf (stderr, "error: %s: %d\n", rs_err_msg (err), rs_err_code (err, 0));
130 return rs_err_code (err, 1);