summaryrefslogtreecommitdiff
path: root/include/radsec/radsec-impl.h
diff options
context:
space:
mode:
authorSam Hartman <hartmans@debian.org>2014-08-24 13:23:12 -0400
committerSam Hartman <hartmans@debian.org>2014-08-24 13:23:12 -0400
commit25541859118c92a6497b52bba46c6bc4e582fcb2 (patch)
tree6eb7faaa084ef9251b7c9805fc391b46e1aa8bf1 /include/radsec/radsec-impl.h
Import libradsec_0.0.5.orig.tar.gz
[dgit import orig libradsec_0.0.5.orig.tar.gz]
Diffstat (limited to 'include/radsec/radsec-impl.h')
-rw-r--r--include/radsec/radsec-impl.h156
1 files changed, 156 insertions, 0 deletions
diff --git a/include/radsec/radsec-impl.h b/include/radsec/radsec-impl.h
new file mode 100644
index 0000000..0ecd631
--- /dev/null
+++ b/include/radsec/radsec-impl.h
@@ -0,0 +1,156 @@
+/** @file libradsec-impl.h
+ @brief Libraray internal header file for libradsec. */
+
+/* Copyright 2010-2013 NORDUnet A/S. All rights reserved.
+ See LICENSE for licensing information. */
+
+#ifndef _RADSEC_RADSEC_IMPL_H_
+#define _RADSEC_RADSEC_IMPL_H_ 1
+
+#include <event2/util.h>
+#include <confuse.h>
+#if defined(RS_ENABLE_TLS)
+#include <openssl/ssl.h>
+#endif
+
+/* Constants. */
+#define RS_HEADER_LEN 4
+
+/* Data types. */
+enum rs_cred_type {
+ RS_CRED_NONE = 0,
+ /* TLS pre-shared keys, RFC 4279. */
+ RS_CRED_TLS_PSK,
+ /* RS_CRED_TLS_DH_PSK, */
+ /* RS_CRED_TLS_RSA_PSK, */
+};
+typedef unsigned int rs_cred_type_t;
+
+enum rs_key_encoding {
+ RS_KEY_ENCODING_UTF8 = 1,
+ RS_KEY_ENCODING_ASCII_HEX = 2,
+};
+typedef unsigned int rs_key_encoding_t;
+
+#if defined (__cplusplus)
+extern "C" {
+#endif
+
+struct rs_credentials {
+ enum rs_cred_type type;
+ char *identity;
+ char *secret;
+ enum rs_key_encoding secret_encoding;
+ unsigned int secret_len;
+};
+
+struct rs_error {
+ int code;
+ char buf[1024];
+};
+
+/** Configuration object for a connection. */
+struct rs_peer {
+ struct rs_connection *conn;
+ struct rs_realm *realm;
+ char *hostname;
+ char *service;
+ char *secret; /* RADIUS secret. */
+ struct evutil_addrinfo *addr_cache;
+ struct rs_peer *next;
+};
+
+/** Configuration object for a RADIUS realm. */
+struct rs_realm {
+ char *name;
+ enum rs_conn_type type;
+ int timeout;
+ int retries;
+ char *cacertfile;
+ char *cacertpath;
+ char *certfile;
+ char *certkeyfile;
+ int disable_hostname_check;
+ struct rs_credentials *transport_cred;
+ struct rs_peer *peers;
+ struct rs_realm *next;
+};
+
+/** Top configuration object. */
+struct rs_config {
+ struct rs_realm *realms;
+ cfg_t *cfg;
+};
+
+struct rs_context {
+ struct rs_config *config;
+ struct rs_alloc_scheme alloc_scheme;
+ struct rs_error *err;
+};
+
+struct rs_connection {
+ struct rs_context *ctx;
+ struct rs_realm *realm; /* Owned by ctx. */
+ struct event_base *evb; /* Event base. */
+ struct event *tev; /* Timeout event. */
+ struct rs_conn_callbacks callbacks;
+ void *user_data;
+ 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. */
+ int tryagain; /* For server failover. */
+ int nextid; /* Next RADIUS packet identifier. */
+ /* 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
+};
+
+enum rs_packet_flags {
+ RS_PACKET_HEADER_READ,
+ RS_PACKET_RECEIVED,
+ RS_PACKET_SENT,
+};
+
+struct radius_packet;
+
+struct rs_packet {
+ struct rs_connection *conn;
+ unsigned int flags;
+ uint8_t hdr[RS_HEADER_LEN];
+ struct radius_packet *rpkt; /* FreeRADIUS object. */
+ struct rs_packet *next; /* Used for UDP output queue. */
+};
+
+#if defined (__cplusplus)
+}
+#endif
+
+/* Convenience macros. */
+#define rs_calloc(h, nmemb, size) \
+ (h->alloc_scheme.calloc ? h->alloc_scheme.calloc : calloc)(nmemb, size)
+#define rs_malloc(h, size) \
+ (h->alloc_scheme.malloc ? h->alloc_scheme.malloc : malloc)(size)
+#define rs_free(h, ptr) \
+ (h->alloc_scheme.free ? h->alloc_scheme.free : free)(ptr)
+#define rs_realloc(h, realloc, ptr, size) \
+ (h->alloc_scheme.realloc ? h->alloc_scheme.realloc : realloc)(ptr, size)
+#define min(a, b) ((a) < (b) ? (a) : (b))
+#define max(a, b) ((a) > (b) ? (a) : (b))
+
+#endif /* _RADSEC_RADSEC_IMPL_H_ */
+
+/* Local Variables: */
+/* c-file-style: "stroustrup" */
+/* End: */