From f87be530d67823a5d82367468e33d58b201ebee1 Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Sun, 6 Mar 2011 14:30:14 +0100 Subject: Don't free config object until we destroy the context. --- lib/include/radsec/radsec-impl.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'lib/include/radsec') diff --git a/lib/include/radsec/radsec-impl.h b/lib/include/radsec/radsec-impl.h index 932e5d2..963c821 100644 --- a/lib/include/radsec/radsec-impl.h +++ b/lib/include/radsec/radsec-impl.h @@ -5,6 +5,7 @@ #include #include +#include #if defined(RS_ENABLE_TLS) #include #endif @@ -61,6 +62,7 @@ struct rs_context { struct rs_alloc_scheme alloc_scheme; struct rs_error *err; fr_randctx fr_randctx; + cfg_t *cfg; }; struct rs_connection { -- cgit v1.1 From 7636505962a348d9564e53922834dc6df1274653 Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Sun, 6 Mar 2011 14:46:57 +0100 Subject: UDP w/o bufferevents, part 1. Sending, no retransmitting and no receiving. --- lib/include/radsec/radsec-impl.h | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'lib/include/radsec') diff --git a/lib/include/radsec/radsec-impl.h b/lib/include/radsec/radsec-impl.h index 963c821..f8904ac 100644 --- a/lib/include/radsec/radsec-impl.h +++ b/lib/include/radsec/radsec-impl.h @@ -69,7 +69,6 @@ struct rs_connection { struct rs_context *ctx; struct rs_realm *realm; /* Owned by ctx. */ struct event_base *evb; /* Event base. */ - struct bufferevent *bev; /* Buffer event. */ struct event *tev; /* Timeout event. */ struct rs_credentials transport_credentials; struct rs_conn_callbacks callbacks; @@ -80,10 +79,17 @@ struct rs_connection { char is_connecting; /* FIXME: replace with a single state member */ char is_connected; /* FIXME: replace with a single state member */ int fd; /* Socket. */ - int tryagain; - int nextid; + int tryagain; /* For server failover. */ + int nextid; /* Next RADIUS packet identifier. */ int user_dispatch_flag : 1; /* User does the dispatching. */ + /* TCP transport specifics. */ + struct bufferevent *bev; /* Buffer event. */ + /* UDP transport specifics. */ + struct event *wev; /* Write event (for UDP). */ + struct event *rev; /* Read event (for UDP). */ + struct rs_packet *out_queue; /* Queue for outgoing UDP packets. */ #if defined(RS_ENABLE_TLS) + /* TLS specifics. */ SSL_CTX *tls_ctx; SSL *tls_ssl; #endif @@ -97,6 +103,7 @@ struct rs_packet { struct rs_packet *original; char valid_flag; char written_flag; + struct rs_packet *next; /* Used for UDP output queue. */ }; struct rs_attr { -- cgit v1.1 From 43d0740f143ba737a1fc5ace3a323ffa8b09e7ae Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Sun, 6 Mar 2011 17:04:54 +0100 Subject: request: Save callers user_data and do invoke callers callbacks. --- lib/include/radsec/request-impl.h | 1 + 1 file changed, 1 insertion(+) (limited to 'lib/include/radsec') diff --git a/lib/include/radsec/request-impl.h b/lib/include/radsec/request-impl.h index 4f50d44..19aef66 100644 --- a/lib/include/radsec/request-impl.h +++ b/lib/include/radsec/request-impl.h @@ -11,6 +11,7 @@ struct rs_request struct rs_packet *req_msg; struct rs_packet *resp_msg; struct rs_conn_callbacks saved_cb; + void *saved_user_data; }; #if defined (__cplusplus) -- cgit v1.1 From cbcaa6a7c8f8a6704f6b4a68f260020957214a07 Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Mon, 7 Mar 2011 15:23:40 +0100 Subject: Move verification of response packets up to a level where it makes sense. Replace the user_dispatch_flag on connections with conn_user_dispatch_p(). Remove the 'original' member from packet and instead have an upper layer verify. Rename packet valid_flag --> received_flag to reflect that we don't verify. Move _close_conn() --> conn_close(). Move packet flags into a single unsigned int, for portability. (_read_packet): Don't verify packet. (rs_conn_receive_packet): Don't touch PKT_OUT if there isn't a packet. (rs_conn_receive_packet): Verify packet using packet_verify_response(). --- lib/include/radsec/radsec-impl.h | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'lib/include/radsec') diff --git a/lib/include/radsec/radsec-impl.h b/lib/include/radsec/radsec-impl.h index f8904ac..e790ccf 100644 --- a/lib/include/radsec/radsec-impl.h +++ b/lib/include/radsec/radsec-impl.h @@ -81,7 +81,6 @@ struct rs_connection { int fd; /* Socket. */ int tryagain; /* For server failover. */ int nextid; /* Next RADIUS packet identifier. */ - int user_dispatch_flag : 1; /* User does the dispatching. */ /* TCP transport specifics. */ struct bufferevent *bev; /* Buffer event. */ /* UDP transport specifics. */ @@ -95,14 +94,17 @@ struct rs_connection { #endif }; +enum rs_packet_flags { + rs_packet_hdr_read_flag, + rs_packet_received_flag, + rs_packet_sent_flag, +}; + struct rs_packet { struct rs_connection *conn; - char hdr_read_flag; - uint8_t hdr[4]; + unsigned int flags; + uint8_t hdr[RS_HEADER_LEN]; RADIUS_PACKET *rpkt; - struct rs_packet *original; - char valid_flag; - char written_flag; struct rs_packet *next; /* Used for UDP output queue. */ }; -- cgit v1.1 From 657eec7ee5a276521eb456bf648878935e794b6e Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Tue, 8 Mar 2011 13:32:10 +0100 Subject: Clean up struct rs_error somewhat. More to be done here! --- lib/include/radsec/radsec-impl.h | 1 - 1 file changed, 1 deletion(-) (limited to 'lib/include/radsec') diff --git a/lib/include/radsec/radsec-impl.h b/lib/include/radsec/radsec-impl.h index e790ccf..a924fc9 100644 --- a/lib/include/radsec/radsec-impl.h +++ b/lib/include/radsec/radsec-impl.h @@ -32,7 +32,6 @@ struct rs_credentials { struct rs_error { int code; - char *msg; char buf[1024]; }; -- cgit v1.1 From d464ebb9235fe78e6588e95d4d3333d5ee95ca48 Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Tue, 8 Mar 2011 13:37:46 +0100 Subject: Timeout implemented in request objects, supported by TCP. TODO: UDP. --- lib/include/radsec/radsec-impl.h | 1 + lib/include/radsec/radsec.h | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) (limited to 'lib/include/radsec') diff --git a/lib/include/radsec/radsec-impl.h b/lib/include/radsec/radsec-impl.h index a924fc9..49f9a35 100644 --- a/lib/include/radsec/radsec-impl.h +++ b/lib/include/radsec/radsec-impl.h @@ -75,6 +75,7 @@ struct rs_connection { struct rs_peer *peers; struct rs_peer *active_peer; struct rs_error *err; + struct timeval timeout; char is_connecting; /* FIXME: replace with a single state member */ char is_connected; /* FIXME: replace with a single state member */ int fd; /* Socket. */ diff --git a/lib/include/radsec/radsec.h b/lib/include/radsec/radsec.h index fcd391d..5f8f4db 100644 --- a/lib/include/radsec/radsec.h +++ b/lib/include/radsec/radsec.h @@ -3,6 +3,7 @@ /* See the file COPYING for licensing information. */ #include +#include enum rs_err_code { RSE_OK = 0, @@ -21,9 +22,10 @@ enum rs_err_code { RSE_INTERNAL = 13, RSE_SSLERR = 14, /* OpenSSL error. */ RSE_INVALID_PKT = 15, - RSE_TIMEOUT_CONN = 16, - RSE_INVAL = 17, - RSE_TIMEOUT_IO = 18, + RSE_TIMEOUT_CONN = 16, /* Connection timeout. */ + RSE_INVAL = 17, /* Invalid argument. */ + RSE_TIMEOUT_IO = 18, /* I/O timeout. */ + RSE_TIMEOUT = 19, /* High level timeout. */ }; enum rs_conn_type { @@ -111,6 +113,7 @@ int rs_conn_receive_packet(struct rs_connection *conn, struct rs_packet *request, struct rs_packet **pkt_out); int rs_conn_fd(struct rs_connection *conn); +void rs_conn_set_timeout(struct rs_connection *conn, struct timeval *tv); /* Peer -- client and server. */ int rs_peer_create(struct rs_connection *conn, struct rs_peer **peer_out); -- cgit v1.1 From 6f3ae93eb1a5c4e352b42a9fae9b6f544a2e341a Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Tue, 8 Mar 2011 14:27:59 +0100 Subject: Update rs_err_msg() prototype. Also, rename enum rs_err_code to not collide with the function named the same. --- lib/include/radsec/radsec.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lib/include/radsec') diff --git a/lib/include/radsec/radsec.h b/lib/include/radsec/radsec.h index 5f8f4db..f620fed 100644 --- a/lib/include/radsec/radsec.h +++ b/lib/include/radsec/radsec.h @@ -5,7 +5,7 @@ #include #include -enum rs_err_code { +enum rs_error_code { RSE_OK = 0, RSE_NOMEM = 1, RSE_NOSYS = 2, @@ -167,7 +167,7 @@ int rs_err_conn_push_fl(struct rs_connection *conn, struct rs_error *rs_err_conn_pop(struct rs_connection *conn); int rs_err_conn_peek_code (struct rs_connection *conn); void rs_err_free(struct rs_error *err); -char *rs_err_msg(struct rs_error *err, int dofree_flag); +char *rs_err_msg(struct rs_error *err); int rs_err_code(struct rs_error *err, int dofree_flag); #if defined (__cplusplus) -- cgit v1.1 From fac0219dad91c574417f78ec674aa0dd10949e15 Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Wed, 9 Mar 2011 10:14:20 +0100 Subject: Rename and move around a few helper functions. --- lib/include/radsec/radsec-impl.h | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) (limited to 'lib/include/radsec') diff --git a/lib/include/radsec/radsec-impl.h b/lib/include/radsec/radsec-impl.h index 49f9a35..9bcd208 100644 --- a/lib/include/radsec/radsec-impl.h +++ b/lib/include/radsec/radsec-impl.h @@ -113,18 +113,11 @@ struct rs_attr { VALUE_PAIR *vp; }; -/* Nonpublic functions. */ -struct rs_error *_rs_resolv(struct evutil_addrinfo **addr, - rs_conn_type_t type, const char *hostname, +/* Nonpublic functions (in radsec.c -- FIXME: move?). */ +struct rs_error *rs_resolv (struct evutil_addrinfo **addr, + rs_conn_type_t type, + const char *hostname, const char *service); -struct rs_peer *_rs_peer_create(struct rs_context *ctx, - struct rs_peer **rootp); -struct rs_error *_rs_err_create(unsigned int code, const char *file, - int line, const char *fmt, ...); -int _rs_err_conn_push_err(struct rs_connection *conn, - struct rs_error *err); - - #if defined (__cplusplus) } #endif -- cgit v1.1 From c4e2bd206bb9248843a8a4d9a945c5e49a188474 Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Wed, 9 Mar 2011 10:16:27 +0100 Subject: Add RSE_DISCO. --- lib/include/radsec/radsec.h | 1 + 1 file changed, 1 insertion(+) (limited to 'lib/include/radsec') diff --git a/lib/include/radsec/radsec.h b/lib/include/radsec/radsec.h index f620fed..971fc17 100644 --- a/lib/include/radsec/radsec.h +++ b/lib/include/radsec/radsec.h @@ -26,6 +26,7 @@ enum rs_error_code { RSE_INVAL = 17, /* Invalid argument. */ RSE_TIMEOUT_IO = 18, /* I/O timeout. */ RSE_TIMEOUT = 19, /* High level timeout. */ + RSE_DISCO = 20, }; enum rs_conn_type { -- cgit v1.1