0
0
mirror of https://github.com/darkk/redsocks.git synced 2025-08-26 19:55:30 +00:00

Added base instance.configured && check that we have single base config entry.

This commit is contained in:
darkk 2007-09-21 15:06:19 +00:00 committed by Leonid Evdokimov
parent c610a14081
commit d6c27de5f1

20
base.c
View File

@ -27,7 +27,7 @@ typedef struct redirector_subsys_t {
} redirector_subsys; } redirector_subsys;
typedef struct base_instance_t { typedef struct base_instance_t {
int initialized; int configured;
char *chroot; char *chroot;
char *user; char *user;
char *group; char *group;
@ -35,7 +35,9 @@ typedef struct base_instance_t {
redirector_subsys *redirector; redirector_subsys *redirector;
} base_instance; } base_instance;
static base_instance instance = { }; static base_instance instance = {
.configured = 0,
};
#if defined __FreeBSD__ || defined __OpenBSD__ #if defined __FreeBSD__ || defined __OpenBSD__
static int redir_open_private(const char *fname, int flags) static int redir_open_private(const char *fname, int flags)
@ -209,16 +211,17 @@ static parser_entry base_entries[] =
{ .key = "chroot", .type = pt_pchar, .addr = &instance.chroot }, { .key = "chroot", .type = pt_pchar, .addr = &instance.chroot },
{ .key = "user", .type = pt_pchar, .addr = &instance.user }, { .key = "user", .type = pt_pchar, .addr = &instance.user },
{ .key = "group", .type = pt_pchar, .addr = &instance.group }, { .key = "group", .type = pt_pchar, .addr = &instance.group },
{ .key = "redirector", .type = pt_pchar, .addr = &instance.redirector }, { .key = "redirector", .type = pt_pchar, .addr = &instance.redirector_name },
{ } { }
}; };
static int base_onenter(parser_section *section) static int base_onenter(parser_section *section)
{ {
if (instance.redirector) { if (instance.configured) {
parser_error(section->context, "only one instance of base is valid"); parser_error(section->context, "only one instance of base is valid");
return -1; return -1;
} }
memset(&instance, 0, sizeof(instance));
return 0; return 0;
} }
@ -245,6 +248,9 @@ static int base_onexit(parser_section *section)
if (err) if (err)
parser_error(section->context, err); parser_error(section->context, err);
if (!err)
instance.configured = 1;
return err ? -1 : 0; return err ? -1 : 0;
} }
@ -263,6 +269,12 @@ static int base_init()
{ {
uid_t uid; uid_t uid;
gid_t gid; gid_t gid;
if (!instance.configured) {
log_error("there is no configured instance of `base`, check config file");
return -1;
}
if (instance.redirector->init && instance.redirector->init() < 0) if (instance.redirector->init && instance.redirector->init() < 0)
return -1; return -1;