Do save vendor part of MAC for FTicksMac VendorHashed and VendorKeyHashed.
[libradsec.git] / radsecproxy.c
index 5856113..69da4dc 100644 (file)
@@ -78,6 +78,7 @@
 #include "tcp.h"
 #include "tls.h"
 #include "dtls.h"
+#include "fticks.h"
 
 static struct options options;
 static struct list *clconfs, *srvconfs;
@@ -1691,6 +1692,9 @@ void replyh(struct server *server, unsigned char *buf) {
     debug(msg->code == RAD_Access_Accept || msg->code == RAD_Access_Reject || msg->code == RAD_Accounting_Response ? DBG_WARN : DBG_INFO,
          "replyh: passing %s to client %s (%s)", radmsgtype2string(msg->code), from->conf->name, addr2string(from->addr));
 
+    if (options.fticks_reporting && from->conf->fticks_viscountry != NULL)
+       fticks_log(&options, from, msg, rqout);
+
     radmsg_free(rqout->rq->msg);
     rqout->rq->msg = msg;
     sendreply(newrqref(rqout->rq));
@@ -2676,6 +2680,7 @@ int confclient_cb(struct gconffile **cf, void *arg, char *block, char *opt, char
            "rewriteIn", CONF_STR, &conf->confrewritein,
            "rewriteOut", CONF_STR, &conf->confrewriteout,
            "rewriteattribute", CONF_STR, &conf->confrewriteusername,
+           "fticksVISCOUNTRY", CONF_STR, &conf->fticks_viscountry,
            NULL
            ))
        debugx(1, DBG_ERR, "configuration error");
@@ -3003,76 +3008,14 @@ int setprotoopts(uint8_t type, char **listenargs, char *sourcearg) {
     return 1;
 }
 
-int configure_fticks(char **reporting, char **mac, char **key) {
-    int r = 0;
-
-    if (*reporting == NULL)
-       goto out;
-
-    if (strcasecmp(*reporting, "None") == 0)
-       options.fticks_reporting = RSP_FTICKS_REPORTING_NONE;
-    else if (strcasecmp(*reporting, "Basic") == 0)
-       options.fticks_reporting = RSP_FTICKS_REPORTING_BASIC;
-    else if (strcasecmp(*reporting, "Full") == 0)
-       options.fticks_reporting = RSP_FTICKS_REPORTING_FULL;
-    else {
-       debugx(1, DBG_ERR, "config error: invalid F-Ticks-Reporting value: %s",
-              *reporting);
-       r = 1;
-       goto out;
-    }
-
-    if (strcasecmp(*mac, "Static") == 0)
-       options.fticks_mac = RSP_FTICKS_MAC_STATIC;
-    else if (strcasecmp(*mac, "Original") == 0)
-       options.fticks_mac = RSP_FTICKS_MAC_ORIGINAL;
-    else if (strcasecmp(*mac, "VendorHashed") == 0)
-       options.fticks_mac = RSP_FTICKS_MAC_VENDOR_HASHED;
-    else if (strcasecmp(*mac, "VendorKeyHashed") == 0)
-       options.fticks_mac = RSP_FTICKS_MAC_VENDOR_KEY_HASHED;
-    else if (strcasecmp(*mac, "FullyHashed") == 0)
-       options.fticks_mac = RSP_FTICKS_MAC_FULLY_HASHED;
-    else if (strcasecmp(*mac, "FullyKeyHashed") == 0)
-       options.fticks_mac = RSP_FTICKS_MAC_FULLY_KEY_HASHED;
-    else {
-       debugx(1, DBG_ERR, "config error: invalid F-Ticks-MAC value: %s", *mac);
-       r = 1;
-       goto out;
-    }
-
-    if (*key == NULL
-       && (options.fticks_mac == RSP_FTICKS_MAC_VENDOR_KEY_HASHED
-           || options.fticks_mac == RSP_FTICKS_MAC_FULLY_KEY_HASHED)) {
-       debugx(1, DBG_ERR,
-              "config error: F-Ticks-MAC %s requires an F-Ticks-Key", *mac);
-       options.fticks_mac = RSP_FTICKS_MAC_STATIC;
-       r = 1;
-       goto out;
-    }
-
-    if (*key != NULL)
-       options.fticks_key = *key;
-
-out:
-    if (*reporting != NULL) {
-       free(*reporting);
-       *reporting = NULL;
-    }
-    if (*mac != NULL) {
-       free(*mac);
-       *mac = NULL;
-    }
-    return r;
-}
-
 void getmainconfig(const char *configfile) {
     long int addttl = LONG_MIN, loglevel = LONG_MIN;
     struct gconffile *cfs;
     char **listenargs[RAD_PROTOCOUNT];
     char *sourcearg[RAD_PROTOCOUNT];
-    char *fticks_reporting_str = NULL;
-    char *fticks_mac_str = NULL;
-    char *fticks_key_str = NULL;
+    uint8_t *fticks_reporting_str = NULL;
+    uint8_t *fticks_mac_str = NULL;
+    uint8_t *fticks_key_str = NULL;
     int i;
 
     cfs = openconfigfile(configfile);
@@ -3126,9 +3069,9 @@ void getmainconfig(const char *configfile) {
            "TLS", CONF_CBK, conftls_cb, NULL,
 #endif
            "Rewrite", CONF_CBK, confrewrite_cb, NULL,
-           "F-Ticks-Reporting", CONF_STR, &fticks_reporting_str,
-           "F-Ticks-MAC", CONF_STR, &fticks_mac_str,
-           "F-Ticks-Key", CONF_STR, &fticks_key_str,
+           "FTicksReporting", CONF_STR, &fticks_reporting_str,
+           "FTicksMAC", CONF_STR, &fticks_mac_str,
+           "FTicksKey", CONF_STR, &fticks_key_str,
            NULL
            ))
        debugx(1, DBG_ERR, "configuration error");
@@ -3146,7 +3089,8 @@ void getmainconfig(const char *configfile) {
     if (!setttlattr(&options, DEFAULT_TTL_ATTR))
        debugx(1, DBG_ERR, "Failed to set TTLAttribute, exiting");
 
-    configure_fticks(&fticks_reporting_str, &fticks_mac_str, &fticks_key_str);
+    fticks_configure(&options, &fticks_reporting_str, &fticks_mac_str,
+                    &fticks_key_str);
 
     for (i = 0; i < RAD_PROTOCOUNT; i++)
        if (listenargs[i] || sourcearg[i])