1 /* See the file COPYING for licensing information. */
3 #if defined HAVE_CONFIG_H
14 #include <freeradius/libradius.h>
15 #include <event2/event.h>
16 #include <event2/util.h>
17 #include <radsec/radsec.h>
18 #include <radsec/radsec-impl.h>
19 #if defined (RS_ENABLE_TLS)
23 #include "../radsecproxy.h"
25 #include "rsp_debug.h"
28 rs_context_create(struct rs_context **ctx, const char *dict)
32 char *buf1 = NULL, *buf2 = NULL;
39 h = (struct rs_context *) malloc (sizeof(struct rs_context));
43 /* Initialize freeradius dictionary. */
44 buf1 = malloc (strlen (dict) + 1);
45 buf2 = malloc (strlen (dict) + 1);
55 if (dict_init (dir, fn) < 0)
63 #if defined (RS_ENABLE_TLS)
70 debug_init ("libradsec"); /* radsecproxy compat, FIXME: remove */
72 memset (h, 0, sizeof(struct rs_context));
73 fr_randinit (&h->fr_randctx, 0);
74 fr_rand_seed (NULL, 0);
92 _rs_peer_create (struct rs_context *ctx, struct rs_peer **rootp)
96 p = (struct rs_peer *) rs_malloc (ctx, sizeof(*p));
99 memset (p, 0, sizeof(struct rs_peer));
102 p->next = (*rootp)->next;
112 _rs_peer_destroy (struct rs_peer *p)
116 assert (p->conn->ctx);
117 /* NOTE: The peer object doesn't own its connection (conn). */
120 evutil_freeaddrinfo (p->addr);
123 rs_free (p->conn->ctx, p);
126 void rs_context_destroy(struct rs_context *ctx)
128 struct rs_realm *r = NULL;
129 struct rs_peer *p = NULL;
131 for (r = ctx->realms; r; )
133 struct rs_realm *tmp = r;
134 for (p = r->peers; p; )
136 struct rs_peer *tmp = p;
138 _rs_peer_destroy (tmp);
146 int rs_context_set_alloc_scheme(struct rs_context *ctx,
147 struct rs_alloc_scheme *scheme)
149 return rs_err_ctx_push_fl (ctx, RSE_NOSYS, __FILE__, __LINE__,
150 "%s: NYI", __func__);
154 rs_server_create (struct rs_connection *conn, struct rs_peer **server)
158 srv = _rs_peer_create (conn->ctx, &conn->peers);
162 srv->realm->timeout = 2;
163 srv->realm->retries = 2;
166 return rs_err_conn_push_fl (conn, RSE_NOMEM, __FILE__, __LINE__, NULL);
173 rs_server_set_address (struct rs_peer *server, const char *hostname,
176 struct rs_error *err;
179 assert (server->realm);
181 err = _rs_resolv (&server->addr, server->realm->type, hostname, service);
183 return _rs_err_conn_push_err (server->conn, err);
188 rs_server_set_timeout (struct rs_peer *server, int timeout)
191 assert (server->realm);
192 server->realm->timeout = timeout;
195 rs_server_set_retries (struct rs_peer *server, int retries)
198 assert (server->realm);
199 server->realm->retries = retries;
203 rs_server_set_secret (struct rs_peer *server, const char *secret)
206 free (server->secret);
207 server->secret = (char *) malloc (strlen(secret) + 1);
209 return rs_err_conn_push (server->conn, RSE_NOMEM, NULL);
210 strcpy (server->secret, secret);