radiusd
static struct radiusd *conf;
parse_config(const char *filename, struct radiusd *radiusd)
conf = radiusd;
radiusd_conf_init(struct radiusd *conf)
struct radiusd *radiusd_s = NULL;
radiusd_find_query(struct radiusd *radiusd, u_int q_id)
TAILQ_FOREACH(q, &radiusd->query, next) {
radiusd_imsg_compose_module(struct radiusd *radiusd, const char *module_name,
radiusd_module_load(struct radiusd *radiusd, const char *path, const char *name)
module->radiusd = radiusd;
struct radiusd *radiusd;
q = radiusd_find_query(module->radiusd, q_id);
q = radiusd_find_query(module->radiusd, q_id);
if ((radiusd = calloc(1, sizeof(*radiusd))) == NULL)
radiusd_s = radiusd;
TAILQ_INIT(&radiusd->listen);
TAILQ_INIT(&radiusd->query);
q = radiusd_find_query(module->radiusd, q_id);
if (parse_config(conffile, radiusd) != 0)
signal_set(&radiusd->ev_sigterm, SIGTERM, radiusd_on_sigterm, radiusd);
signal_set(&radiusd->ev_sigint, SIGINT, radiusd_on_sigint, radiusd);
signal_set(&radiusd->ev_sighup, SIGHUP, radiusd_on_sighup, radiusd);
signal_set(&radiusd->ev_sigchld, SIGCHLD, radiusd_on_sigchld, radiusd);
if (radiusd_start(radiusd) != 0)
if (radiusd->error != 0)
radiusd_stop(radiusd);
error = radiusd->error;
radiusd_free(radiusd);
radiusd_start(struct radiusd *radiusd)
TAILQ_FOREACH(l, &radiusd->listen, next) {
l->radiusd = radiusd;
signal_add(&radiusd->ev_sigterm, NULL);
signal_add(&radiusd->ev_sigint, NULL);
signal_add(&radiusd->ev_sighup, NULL);
signal_add(&radiusd->ev_sigchld, NULL);
TAILQ_FOREACH(module, &radiusd->module, next) {
radiusd->error++;
radiusd_stop(struct radiusd *radiusd)
TAILQ_FOREACH_REVERSE(l, &radiusd->listen, radiusd_listen_head, next) {
TAILQ_FOREACH(module, &radiusd->module, next) {
if (signal_pending(&radiusd->ev_sigterm, NULL))
signal_del(&radiusd->ev_sigterm);
if (signal_pending(&radiusd->ev_sigint, NULL))
signal_del(&radiusd->ev_sigint);
if (signal_pending(&radiusd->ev_sighup, NULL))
signal_del(&radiusd->ev_sighup);
if (signal_pending(&radiusd->ev_sigchld, NULL))
signal_del(&radiusd->ev_sigchld);
radiusd_free(struct radiusd *radiusd)
TAILQ_FOREACH_SAFE(authen, &radiusd->authen, next, authent) {
TAILQ_REMOVE(&radiusd->authen, authen, next);
TAILQ_FOREACH_SAFE(acct, &radiusd->account, next, acctt) {
TAILQ_REMOVE(&radiusd->account, acct, next);
TAILQ_FOREACH_SAFE(module, &radiusd->module, next, modulet) {
TAILQ_REMOVE(&radiusd->module, module, next);
TAILQ_FOREACH_SAFE(client, &radiusd->client, next, clientt) {
TAILQ_REMOVE(&radiusd->client, client, next);
TAILQ_FOREACH_SAFE(listn, &radiusd->listen, next, listnt) {
TAILQ_REMOVE(&radiusd->listen, listn, next);
free(radiusd);
TAILQ_FOREACH(client, &listn->radiusd->client, next) {
TAILQ_FOREACH(q, &listn->radiusd->query, next) {
q->radiusd = listn->radiusd;
static int radiusd_start(struct radiusd *);
TAILQ_INSERT_TAIL(&listn->radiusd->query, q, next);
static void radiusd_stop(struct radiusd *);
TAILQ_FOREACH(authen, &listn->radiusd->authen, next) {
static void radiusd_free(struct radiusd *);
TAILQ_FOREACH(accounting, &listn->radiusd->account, next) {
q_next->radiusd = q->radiusd;
TAILQ_INSERT_TAIL(&q->radiusd->query, q_next, next);
TAILQ_REMOVE(&q->radiusd->query, q, next);
struct radiusd *radiusd = ctx;
TAILQ_FOREACH(module, &radiusd->module, next) {
radiusd->error++;
struct radiusd *radiusd;
extern struct radiusd *radiusd_s;
int parse_config(const char *, struct radiusd *);
void radiusd_conf_init(struct radiusd *);
struct radiusd_module *radiusd_module_load(struct radiusd *, const char *,
int radiusd_imsg_compose_module(struct radiusd *, const char *,
struct radiusd *radiusd;
struct radiusd *radiusd;