1 /* See the file COPYING for licensing information. */
3 #if defined HAVE_CONFIG_H
10 #include <radsec/radsec.h>
11 #include <radsec/radsec-impl.h>
13 static const char *_errtxt[] = {
14 "SUCCESS", /* 0 RSE_OK */
15 "out of memory", /* 1 RSE_NOMEM */
16 "not yet implemented", /* 2 RSE_NOSYS */
17 "invalid handle", /* 3 RSE_INVALID_CTX */
18 "invalid connection", /* 4 RSE_INVALID_CONN */
19 "connection type mismatch", /* 5 RSE_CONN_TYPE_MISMATCH */
20 "FreeRadius error", /* 6 RSE_FR */
21 "bad hostname or port", /* 7 RSE_BADADDR */
22 "no peer configured", /* 8 RSE_NOPEER */
23 "libevent error", /* 9 RSE_EVENT */
24 "socket error", /* 10 RSE_SOCKERR */
25 "invalid configuration file", /* 11 RSE_CONFIG */
26 "authentication failed", /* 12 RSE_BADAUTH */
27 "internal error", /* 13 RSE_INTERNAL */
28 "SSL error", /* 14 RSE_SSLERR */
29 "invalid packet", /* 15 RSE_INVALID_PKT */
35 "some error", /* 21 RSE_SOME_ERROR */
37 #define ERRTXT_SIZE (sizeof(_errtxt) / sizeof(*_errtxt))
39 static struct rs_error *
40 _err_vcreate (unsigned int code, const char *file, int line, const char *fmt,
45 err = malloc (sizeof(struct rs_error));
49 memset (err, 0, sizeof(struct rs_error));
52 n = vsnprintf (err->buf, sizeof(err->buf), fmt, args);
56 err->code < ERRTXT_SIZE ? _errtxt[err->code] : "",
58 n = strlen (err->buf);
62 char *sep = strrchr (file, '/');
65 snprintf (err->buf + n, sizeof(err->buf) - n, " (%s:%d)", file,
73 _rs_err_create (unsigned int code, const char *file, int line, const char *fmt,
80 err = _err_vcreate (code, file, line, fmt, args);
86 _ctx_err_vpush_fl (struct rs_context *ctx, int code, const char *file,
87 int line, const char *fmt, va_list args)
89 struct rs_error *err = _err_vcreate (code, file, line, fmt, args);
97 rs_err_ctx_push (struct rs_context *ctx, int code, const char *fmt, ...)
100 va_start (args, fmt);
101 _ctx_err_vpush_fl (ctx, code, NULL, 0, fmt, args);
107 rs_err_ctx_push_fl (struct rs_context *ctx, int code, const char *file,
108 int line, const char *fmt, ...)
111 va_start (args, fmt);
112 _ctx_err_vpush_fl (ctx, code, file, line, fmt, args);
118 _rs_err_conn_push_err (struct rs_connection *conn, struct rs_error *err)
120 conn->err = err; /* FIXME: use a stack */
125 _conn_err_vpush_fl (struct rs_connection *conn, int code, const char *file,
126 int line, const char *fmt, va_list args)
128 struct rs_error *err = _err_vcreate (code, file, line, fmt, args);
131 _rs_err_conn_push_err (conn, err);
136 rs_err_conn_push (struct rs_connection *conn, int code, const char *fmt, ...)
139 va_start (args, fmt);
140 _conn_err_vpush_fl (conn, code, NULL, 0, fmt, args);
146 rs_err_conn_push_fl (struct rs_connection *conn, int code, const char *file,
147 int line, const char *fmt, ...)
150 va_start (args, fmt);
151 _conn_err_vpush_fl (conn, code, file, line, fmt, args);
157 rs_err_ctx_pop (struct rs_context *ctx)
159 struct rs_error *err;
162 return NULL; /* FIXME: RSE_INVALID_CTX. */
169 rs_err_conn_pop (struct rs_connection *conn)
171 struct rs_error *err;
174 return NULL; /* FIXME: RSE_INVALID_CONN */
181 rs_err_free (struct rs_error *err)
190 rs_err_msg (struct rs_error *err, int dofree_flag)
199 msg = strdup (err->buf);
207 rs_err_code (struct rs_error *err, int dofree_flag)