#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);
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) {
- unsigned char *username = NULL;
- unsigned char *realm = NULL;
- uint8_t visinst[8+40+1+1]; /* Room for 40 octets of VISINST. */
- uint8_t *macin = NULL;
- uint8_t macout[2*32+1]; /* Room for ASCII representation of SHA256. */
-
- username = radattr2ascii(radmsg_gettype(rqout->rq->msg,
- RAD_Attr_User_Name));
- if (username != NULL) {
- realm = (unsigned char *) strrchr((char *) username, '@');
- if (realm != NULL)
- realm++;
- else
- realm = (unsigned char *) "";
- }
-
- memset(visinst, 0, sizeof(visinst));
- if (options.fticks_reporting == RSP_FTICKS_REPORTING_FULL)
- snprintf((char *) visinst, sizeof(visinst), "VISINST=%s#",
- from->conf->name);
-
-#define BOGUS_MAC "00:00:00:00:00:00" /* FIXME: Is there a standard
- * for bogus MAC addresses? */
- memset(macout, 0, sizeof(macout));
- strncpy((char *) macout, BOGUS_MAC, sizeof(macout) - 1);
- if (options.fticks_mac != RSP_FTICKS_MAC_STATIC) {
- macin = radattr2ascii(radmsg_gettype(rqout->rq->msg,
- RAD_Attr_Calling_Station_Id));
- }
-#if RS_TESTING || 1
- if (macin == NULL)
- macin = (uint8_t *) strdup(BOGUS_MAC);
-#endif /* RS_TESTING */
-
- switch (options.fticks_mac)
- {
- case RSP_FTICKS_MAC_STATIC:
- memcpy(macout, BOGUS_MAC, sizeof(BOGUS_MAC));
- break;
- case RSP_FTICKS_MAC_ORIGINAL:
- memcpy(macout, macin, sizeof(macout));
- break;
- case RSP_FTICKS_MAC_VENDOR_HASHED:
- fticks_hashmac(macin + 3, NULL, sizeof(macout), macout);
- break;
- case RSP_FTICKS_MAC_VENDOR_KEY_HASHED:
- fticks_hashmac(macin + 3, options.fticks_key, sizeof(macout),
- macout);
- break;
- case RSP_FTICKS_MAC_FULLY_HASHED:
- fticks_hashmac(macin, NULL, sizeof(macout), macout);
- break;
- case RSP_FTICKS_MAC_FULLY_KEY_HASHED:
- fticks_hashmac(macin, options.fticks_key, sizeof(macout), macout);
- break;
- default:
- debugx(2, DBG_ERR, "invalid fticks mac configuration: %d",
- options.fticks_mac);
- }
- debug(0xff,
- "F-TICKS/eduroam/1.0#REALM=%s#VISCOUNTRY=%s#%sCSI=%s#RESULT=%s#",
- realm,
- from->conf->fticks_viscountry,
- visinst,
- macout,
- msg->code == RAD_Access_Accept ? "OK" : "FAIL");
- if (macin != NULL)
- free(macin);
- if (username != NULL)
- free(username);
-
- }
-
radmsg_free(rqout->rq->msg);
rqout->rq->msg = msg;
sendreply(newrqref(rqout->rq));
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) {
"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;
}
-/* FIXME: Move to fticks.c. */
-int configure_fticks(uint8_t **reportingp, uint8_t **macp, uint8_t **keyp) {
- int r = 0;
- const char *reporting = (const char *) *reportingp;
- const char *mac = (const char *) *macp;
-
- 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 FTicksReporting 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 FTicksMAC value: %s", mac);
- r = 1;
- goto out;
- }
-
- if (*keyp == 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: FTicksMAC %s requires an FTicksKey", mac);
- options.fticks_mac = RSP_FTICKS_MAC_STATIC;
- r = 1;
- goto out;
- }
-
- if (*keyp != NULL)
- options.fticks_key = *keyp;
-
-out:
- if (*reportingp != NULL) {
- free(*reportingp);
- *reportingp = NULL;
- }
- if (*macp != NULL) {
- free(*macp);
- *macp = 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];
+#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,
+#if defined(WANT_FTICKS)
"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;