From be4b786700ad03de5226951c043fefb345c0df4c Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Sat, 2 Oct 2010 21:31:50 +0200 Subject: WIP --- lib/examples/Makefile | 11 +++--- lib/examples/client-blocking.c | 80 ++++++++++++++++++++++++++++++++++++++++++ lib/examples/client.c | 75 --------------------------------------- 3 files changed, 85 insertions(+), 81 deletions(-) create mode 100644 lib/examples/client-blocking.c delete mode 100644 lib/examples/client.c (limited to 'lib/examples') diff --git a/lib/examples/Makefile b/lib/examples/Makefile index f9f2ee1..618afdb 100644 --- a/lib/examples/Makefile +++ b/lib/examples/Makefile @@ -1,12 +1,11 @@ -CFLAGS = -Wall -g +CFLAGS = -Wall -g -I ../include -all: client +HFILES = ../include/radsec/libradsec.h ../include/radsec/libradsec-impl.h -blocking.o: blocking.c blocking.h ../libradsec-base.h ../libradsec.h - $(CC) $(CFLAGS) -c -I .. $^ +all: client-blocking -client: client.c ../libradsec.a ../libradsec.h ../libradsec-impl.h +client-blocking: client-blocking.c ../libradsec.a $(HFILES) $(CC) $(CFLAGS) -o $@ $< -L /usr/lib/freeradius -lfreeradius-radius -L .. -lradsec -L /usr/local/lib -levent_core clean: - -rm *.o client + -rm *.o client-blocking *.gch diff --git a/lib/examples/client-blocking.c b/lib/examples/client-blocking.c new file mode 100644 index 0000000..0d2a58a --- /dev/null +++ b/lib/examples/client-blocking.c @@ -0,0 +1,80 @@ +/* RADIUS client doing blocking i/o. */ + +#include +#include +#include +#include +#include +#include +#include + +#define SECRET "sikrit" +#define USER_NAME "bob" +#define USER_PW "hemligt" + +struct rs_error * +rsx_client (const char *srvname, int srvport) +{ + struct rs_handle *h; + struct rs_connection *conn; + struct rs_peer *server; + struct rs_packet *req, *resp; + RADIUS_PACKET *fr_pkt; + VALUE_PAIR *fr_vp; + + if (rs_context_create (&h, "/usr/share/freeradius/dictionary")) + return NULL; + + if (rs_conn_create (h, &conn)) + return rs_conn_err_pop (conn); + if (rs_conn_add_server (conn, &server, RS_CONN_TYPE_UDP, srvname, srvport)) + return rs_conn_err_pop (conn); + rs_server_set_timeout (server, 10); + rs_server_set_tries (server, 3); + rs_server_set_secret (server, SECRET); + + if (rs_packet_create_acc_request (conn, &req, USER_NAME, USER_PW)) + return rs_conn_err_pop (conn); + + if (rs_packet_send (req, NULL)) + return rs_conn_err_pop (conn); + req = NULL; + +#if 0 + if (rs_packet_create_acc_request (conn, &req, USER_NAME, USER_PW)) + return rs_conn_err_pop (conn); + + if (rs_packet_send (conn, req, NULL)) + return rs_conn_err_pop (conn); + req = NULL; +#endif + + if (rs_conn_receive_packet (conn, &resp)) + return rs_conn_err_pop (conn); + fr_pkt = rs_packet_frpkt (resp); + fr_vp = fr_pkt->vps; /* FIXME: Is there an accessor? */ + vp_printlist(stdout, fr_vp); + rs_packet_destroy (resp); + + rs_conn_destroy (conn); + rs_context_destroy (h); + return NULL; +} + +int +main (int argc, char *argv[]) +{ + struct rs_error *err; + char *host; + int port; + + host = strsep (argv + 1, ":"); + port = atoi (argv[1]); + err = rsx_client (host, port); + if (err) + { + fprintf (stderr, "%s\n", rs_err_msg (err, 0)); + return rs_err_code (err, 1); + } + return 0; +} diff --git a/lib/examples/client.c b/lib/examples/client.c deleted file mode 100644 index 1e9f209..0000000 --- a/lib/examples/client.c +++ /dev/null @@ -1,75 +0,0 @@ -/* RADIUS client doing blocking i/o. */ - -#include -#include -#include -#include -#include -#include "../libradsec.h" - -#define SECRET "sikrit" -#define USER_NAME "bob" -#define USER_PW "hemligt" - -struct rs_error * -rsx_client (const char *srvname, int srvport) -{ - struct rs_handle *h; - struct rs_connection *conn; - struct rs_peer *server; - struct rs_packet *req, *resp; - - if (rs_context_create (&h, "/usr/share/freeradius/dictionary")) - return NULL; - - if (rs_conn_create (h, &conn)) - return rs_conn_err_pop (conn); - if (rs_conn_add_server (conn, &server, RS_CONN_TYPE_UDP, srvname, srvport)) - return rs_conn_err_pop (conn); - rs_server_set_timeout (server, 10); - rs_server_set_tries (server, 3); - rs_server_set_secret (server, SECRET); - - if (rs_packet_create_acc_request (conn, &req, USER_NAME, USER_PW)) - return rs_conn_err_pop (conn); - - if (rs_packet_send (conn, req, NULL)) - return rs_conn_err_pop (conn); - req = NULL; - -#if 0 - if (rs_packet_create_acc_request (conn, &req, USER_NAME, USER_PW)) - return rs_conn_err_pop (conn); - - if (rs_packet_send (conn, req, NULL)) - return rs_conn_err_pop (conn); - req = NULL; -#endif - - if (rs_packet_receive (conn, &resp)) - return rs_conn_err_pop (conn); - /* TODO: do something interesting with the response */ - rs_packet_destroy (resp); - - rs_conn_destroy (conn); - rs_context_destroy (h); - return NULL; -} - -int -main (int argc, char *argv[]) -{ - struct rs_error *err; - char *host; - int port; - - host = strsep (argv + 1, ":"); - port = atoi (argv[1]); - err = rsx_client (host, port); - if (err) - { - fprintf (stderr, "%s\n", rs_err_msg (err, 0)); - return rs_err_code (err, 1); - } - return 0; -} -- cgit v1.1