#include <openssl/err.h>
#include <openssl/md5.h>
#include "debug.h"
-#include "list.h"
#include "hash.h"
#include "util.h"
#include "hostport.h"
#include "tcp.h"
#include "tls.h"
#include "dtls.h"
+#if defined(WANT_FTICKS)
+#include "fticks.h"
+#endif
static struct options options;
static struct list *clconfs, *srvconfs;
}
}
+#if defined(WANT_FTICKS)
+ if (msg->code == RAD_Access_Accept || msg->code == RAD_Access_Reject)
+ if (options.fticks_reporting && from->conf->fticks_viscountry != NULL)
+ fticks_log(&options, from, msg, rqout);
+#endif
+
msg->id = (char)rqout->rq->rqid;
memcpy(msg->auth, rqout->rq->rqauth, 16);
close(fd[1]);
pushgconffile(&cf, fdopen(fd[0], "r"), conf->dynamiclookupcommand);
- ok = getgenericconfig(&cf, NULL,
- "Server", CONF_CBK, confserver_cb, (void *)conf,
- NULL
- );
+ ok = getgenericconfig(&cf, NULL, "Server", CONF_CBK, confserver_cb,
+ (void *) conf, NULL);
freegconf(&cf);
if (waitpid(pid, &status, 0) < 0) {
}
if (status) {
- debug(DBG_INFO, "dynamicconfig: command exited with status %d", WEXITSTATUS(status));
- goto errexit;
+ if (WEXITSTATUS(status) == 10) {
+ debug(DBG_INFO, "dynamicconfig: command signals empty config");
+ }
+ else {
+ debug(DBG_INFO, "dynamicconfig: command exited with status %d",
+ WEXITSTATUS(status));
+ goto errexit;
+ }
}
if (ok)
memset(conf, 0, sizeof(struct clsrvconf));
conf->certnamecheck = 1;
- if (!getgenericconfig(cf, block,
- "type", CONF_STR, &conftype,
- "host", CONF_MSTR, &conf->hostsrc,
- "secret", CONF_STR, &conf->secret,
+ if (!getgenericconfig(
+ cf, block,
+ "type", CONF_STR, &conftype,
+ "host", CONF_MSTR, &conf->hostsrc,
+ "secret", CONF_STR, &conf->secret,
#if defined(RADPROT_TLS) || defined(RADPROT_DTLS)
- "tls", CONF_STR, &conf->tls,
- "matchcertificateattribute", CONF_STR, &conf->matchcertattr,
- "CertificateNameCheck", CONF_BLN, &conf->certnamecheck,
+ "tls", CONF_STR, &conf->tls,
+ "matchcertificateattribute", CONF_STR, &conf->matchcertattr,
+ "CertificateNameCheck", CONF_BLN, &conf->certnamecheck,
#endif
- "DuplicateInterval", CONF_LINT, &dupinterval,
- "addTTL", CONF_LINT, &addttl,
- "rewrite", CONF_STR, &rewriteinalias,
- "rewriteIn", CONF_STR, &conf->confrewritein,
- "rewriteOut", CONF_STR, &conf->confrewriteout,
- "rewriteattribute", CONF_STR, &conf->confrewriteusername,
- NULL
+ "DuplicateInterval", CONF_LINT, &dupinterval,
+ "addTTL", CONF_LINT, &addttl,
+ "rewrite", CONF_STR, &rewriteinalias,
+ "rewriteIn", CONF_STR, &conf->confrewritein,
+ "rewriteOut", CONF_STR, &conf->confrewriteout,
+ "rewriteattribute", CONF_STR, &conf->confrewriteusername,
+#if defined(WANT_FTICKS)
+ "fticksVISCOUNTRY", CONF_STR, &conf->fticks_viscountry,
+#endif
+ NULL
))
debugx(1, DBG_ERR, "configuration error");
conf->rewriteout = getrewrite(conf->confrewriteout, NULL);
if (!addhostport(&conf->hostports, conf->hostsrc, conf->portsrc, 0)) {
- debug(DBG_ERR, "error in block %s, failed to parse %s", block, conf->hostsrc);
+ debug(DBG_ERR, "error in block %s, failed to parse %s", block, *conf->hostsrc);
return 0;
}
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;
+#if defined(WANT_FTICKS)
+ uint8_t *fticks_reporting_str = NULL;
+ uint8_t *fticks_mac_str = NULL;
+ uint8_t *fticks_key_str = NULL;
+#endif
int i;
cfs = openconfigfile(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,
+#if defined(WANT_FTICKS)
+ "FTicksSyslogFacility", CONF_STR, &options.ftickssyslogfacility,
+ "FTicksReporting", CONF_STR, &fticks_reporting_str,
+ "FTicksMAC", CONF_STR, &fticks_mac_str,
+ "FTicksKey", CONF_STR, &fticks_key_str,
+#endif
NULL
))
debugx(1, DBG_ERR, "configuration error");
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);
+#if defined(WANT_FTICKS)
+ fticks_configure(&options, &fticks_reporting_str, &fticks_mac_str,
+ &fticks_key_str);
+#endif
for (i = 0; i < RAD_PROTOCOUNT; i++)
if (listenargs[i] || sourcearg[i])
return f && !fclose(f) && r >= 0;
}
-int main(int argc, char **argv) {
+int radsecproxy_main(int argc, char **argv) {
pthread_t sigth;
sigset_t sigset;
struct list_node *entry;
options.loglevel = loglevel;
else if (options.loglevel)
debug_set_level(options.loglevel);
- if (!foreground)
- debug_set_destination(options.logdestination ? options.logdestination : "x-syslog:///");
+ if (!foreground) {
+ debug_set_destination(options.logdestination
+ ? options.logdestination
+ : "x-syslog:///", LOG_TYPE_DEBUG);
+#if defined(WANT_FTICKS)
+ if (options.ftickssyslogfacility) {
+ debug_set_destination(options.ftickssyslogfacility,
+ LOG_TYPE_FTICKS);
+ free(options.ftickssyslogfacility);
+ }
+#endif
+ }
free(options.logdestination);
if (!list_first(clconfs))