static char const RCSID[] =
"$Id: radrealms.c,v 1.2 2004/11/14 07:26:26 paulus Exp $";
-#include "pppd.h"
-#include "radiusclient.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
+#include <sys/param.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdarg.h>
+#include <sys/types.h>
+
+#include <pppd/pppd.h>
+
+#include "radiusclient.h"
-char pppd_version[] = VERSION;
+char pppd_version[] = PPPD_VERSION;
char radrealms_config[MAXPATHLEN] = "/etc/radiusclient/realms";
static option_t Options[] = {
- { "realms-config-file", o_string, &radrealms_config },
+ { "realms-config-file", o_string, &radrealms_config,
+ "Configuration file for RADIUS realms", OPT_STATIC, NULL, MAXPATHLEN },
{ NULL }
};
}
if ((fd = fopen(radrealms_config, "r")) == NULL) {
- option_error("cannot open %s", radrealms_config);
+ ppp_option_error("cannot open %s", radrealms_config);
+ free(auths);
+ free(accts);
return;
- }
+ }
info("Reading %s", radrealms_config);
-
+
while ((fgets(buffer, sizeof(buffer), fd) != NULL)) {
line++;
if (p == NULL || (strcmp(p, "authserver") !=0
&& strcmp(p, "acctserver"))) {
fclose(fd);
- option_error("%s: invalid line %d: %s", radrealms_config,
+ ppp_option_error("%s: invalid line %d: %s", radrealms_config,
line, buffer);
+ free(auths);
+ free(accts);
return;
}
info("Parsing '%s' entry:", p);
if ((p = strtok(NULL, "\t ")) == NULL) {
fclose(fd);
- option_error("%s: realm name missing on line %d: %s",
+ ppp_option_error("%s: realm name missing on line %d: %s",
radrealms_config, line, buffer);
+ free(auths);
+ free(accts);
return;
}
info(" - Matched realm %s", p);
if ((p = strtok(NULL, ":")) == NULL) {
fclose(fd);
- option_error("%s: server address missing on line %d: %s",
+ ppp_option_error("%s: server address missing on line %d: %s",
radrealms_config, line, buffer);
+ free(auths);
+ free(accts);
return;
}
s->name[s->max] = strdup(p);
info(" - Address is '%s'",p);
if ((p = strtok(NULL, "\t ")) == NULL) {
fclose(fd);
- option_error("%s: server port missing on line %d: %s",
+ ppp_option_error("%s: server port missing on line %d: %s",
radrealms_config, line, buffer);
+ free(auths);
+ free(accts);
return;
}
s->port[s->max] = atoi(p);
if (accts->max)
*acctserver = accts;
+ else
+ free(accts);
if (auths->max)
*authserver = auths;
+ else
+ free(auths);
return;
}
{
radius_pre_auth_hook = lookup_realm;
- add_options(Options);
+ ppp_add_options(Options);
info("RADIUS Realms plugin initialized.");
}