WIP -- reading configuration.
[radsecproxy.git] / lib / err.c
index 8ee76a6..71a8380 100644 (file)
--- a/lib/err.c
+++ b/lib/err.c
@@ -1,7 +1,10 @@
+/* See the file COPYING for licensing information.  */
+
 #include <stdio.h>
+#include <string.h>
 #include <assert.h>
-#include "libradsec.h"
-#include "libradsec-impl.h"
+#include <radsec/radsec.h>
+#include <radsec/radsec-impl.h>
 
 const char *_errtxt[] = {
   "SUCCESS",                   /* 0 RSE_OK */
@@ -11,25 +14,27 @@ const char *_errtxt[] = {
   "invalid connection"         /* 4 RSE_INVALID_CONN */
   "connection type mismatch"   /* 5 RSE_CONN_TYPE_MISMATCH */
   "FreeRadius error"           /* 6 RSE_FR */
-  "ERR 7"                      /*  RSE_ */
-  "ERR 8"                      /*  RSE_ */
-  "ERR 9"                      /*  RSE_ */
-  "ERR 10"                     /*  RSE_ */
-  "ERR 11"                     /*  RSE_ */
+  "bad hostname or port"       /* 7 RSE_BADADDR */
+  "no peer configured"         /* 8 RSE_NOPEER */
+  "libevent error"             /* 9 RSE_EVENT */
+  "connection error"           /* 10 RSE_CONNERR */
+  "invalid configuration file" /* 11 RSE_CONFIG */
   "ERR 12"                     /*  RSE_ */
   "ERR 13"                     /*  RSE_ */
-  "ERR "                       /*  RSE_ */
-  "ERR "                       /*  RSE_ */
-  "ERR "                       /*  RSE_ */
-  "ERR "                       /*  RSE_ */
-  "ERR "                       /*  RSE_ */
-  "ERR "                       /*  RSE_ */
-  "ERR "                       /*  RSE_ */
+  "ERR 14"                     /*  RSE_ */
+  "ERR 15"                     /*  RSE_ */
+  "ERR 16"                     /*  RSE_ */
+  "ERR 17"                     /*  RSE_ */
+  "ERR 18"                     /*  RSE_ */
+  "ERR 19"                     /*  RSE_ */
+  "ERR 20"                     /*  RSE_ */
   "some error"                 /* 21 RSE_SOME_ERROR */
 };
+#define ERRTXT_SIZE (sizeof(_errtxt) / sizeof(*_errtxt))
 
 static struct rs_error *
-_err_new (unsigned int code, const char *file, int line, const char *fmt, va_list args)
+_err_vcreate (unsigned int code, const char *file, int line, const char *fmt,
+             va_list args)
 {
   struct rs_error *err;
 
@@ -39,8 +44,16 @@ _err_new (unsigned int code, const char *file, int line, const char *fmt, va_lis
       int n;
       memset (err, 0, sizeof(struct rs_error));
       err->code = code;
-      n = vsnprintf (err->buf, sizeof(err->buf), fmt, args);
-      if (n > 0)
+      if (fmt)
+       n = vsnprintf (err->buf, sizeof(err->buf), fmt, args);
+      else
+       {
+         strncpy (err->buf,
+                  err->code < ERRTXT_SIZE ? _errtxt[err->code] : "",
+                  sizeof(err->buf));
+         n = strlen (err->buf);
+       }
+      if (n >= 0 && file)
        {
          char *sep = strrchr (file, '/');
          if (sep)
@@ -52,10 +65,23 @@ _err_new (unsigned int code, const char *file, int line, const char *fmt, va_lis
   return err;
 }
 
+struct rs_error *
+_rs_err_create (unsigned int code, const char *file, int line, const char *fmt,
+               ...)
+{
+  struct rs_error *err;
+
+  va_list args;
+  va_start (args, fmt);
+  err = _err_vcreate (code, file, line, fmt, args);
+  va_end (args);
+  return err;
+}
+
 static int
 _ctx_err_vpush_fl (struct rs_handle *ctx, int code, const char *file, int line, const char *fmt, va_list args)
 {
-  struct rs_error *err = _err_new (code, file, line, fmt, args);
+  struct rs_error *err = _err_vcreate (code, file, line, fmt, args);
 
   if (err)
     ctx->err = err;
@@ -63,7 +89,7 @@ _ctx_err_vpush_fl (struct rs_handle *ctx, int code, const char *file, int line,
 }
 
 int
-rs_ctx_err_push (struct rs_handle *ctx, int code, const char *fmt, ...)
+rs_err_ctx_push (struct rs_handle *ctx, int code, const char *fmt, ...)
 {
   va_list args;
   va_start (args, fmt);
@@ -73,7 +99,7 @@ rs_ctx_err_push (struct rs_handle *ctx, int code, const char *fmt, ...)
 }
 
 int
-rs_ctx_err_push_fl (struct rs_handle *ctx, int code, const char *file, int line, const char *fmt, ...)
+rs_err_ctx_push_fl (struct rs_handle *ctx, int code, const char *file, int line, const char *fmt, ...)
 {
   va_list args;
   va_start (args, fmt);
@@ -82,18 +108,25 @@ rs_ctx_err_push_fl (struct rs_handle *ctx, int code, const char *file, int line,
   return code;
 }
 
+int
+_rs_err_conn_push_err (struct rs_connection *conn, struct rs_error *err)
+{
+  conn->err = err;             /* FIXME: use a stack */
+  return err->code;
+}
+
 static int
 _conn_err_vpush_fl (struct rs_connection *conn, int code, const char *file, int line, const char *fmt, va_list args)
 {
-  struct rs_error *err = _err_new (code, file, line, fmt, args);
+  struct rs_error *err = _err_vcreate (code, file, line, fmt, args);
 
   if (err)
-    conn->err = err;
+    _rs_err_conn_push_err (conn, err);
   return code;
 }
 
 int
-rs_conn_err_push (struct rs_connection *conn, int code, const char *fmt, ...)
+rs_err_conn_push (struct rs_connection *conn, int code, const char *fmt, ...)
 {
   va_list args;
   va_start (args, fmt);
@@ -103,7 +136,7 @@ rs_conn_err_push (struct rs_connection *conn, int code, const char *fmt, ...)
 }
 
 int
-rs_conn_err_push_fl (struct rs_connection *conn, int code, const char *file, int line, const char *fmt, ...)
+rs_err_conn_push_fl (struct rs_connection *conn, int code, const char *file, int line, const char *fmt, ...)
 {
   va_list args;
   va_start (args, fmt);
@@ -113,7 +146,7 @@ rs_conn_err_push_fl (struct rs_connection *conn, int code, const char *file, int
 }
 
 struct rs_error *
-rs_ctx_err_pop (struct rs_handle *ctx)
+rs_err_ctx_pop (struct rs_handle *ctx)
 {
   struct rs_error *err;
 
@@ -125,7 +158,7 @@ rs_ctx_err_pop (struct rs_handle *ctx)
 }
 
 struct rs_error *
-rs_conn_err_pop (struct rs_connection *conn)
+rs_err_conn_pop (struct rs_connection *conn)
 {
   struct rs_error *err;