Support hook suffixes to use the same hook multiple times

This commit is contained in:
Martin Willi
2011-01-05 16:45:42 +01:00
parent e5e71e46d9
commit a60b892841
6 changed files with 37 additions and 29 deletions
+12 -4
View File
@@ -214,19 +214,27 @@ static bool load_keys(settings_t *settings, char *dir)
static bool load_hooks() static bool load_hooks()
{ {
enumerator_t *enumerator; enumerator_t *enumerator;
char *name, buf[64]; char *name, *pos, buf[64];
hook_t *(*create)(void); hook_t *(*create)(char*);
hook_t *hook; hook_t *hook;
enumerator = conftest->test->create_section_enumerator(conftest->test, enumerator = conftest->test->create_section_enumerator(conftest->test,
"hooks"); "hooks");
while (enumerator->enumerate(enumerator, &name)) while (enumerator->enumerate(enumerator, &name))
{ {
snprintf(buf, sizeof(buf), "%s_hook_create", name); pos = strchr(name, '-');
if (pos)
{
snprintf(buf, sizeof(buf), "%.*s_hook_create", pos - name, name);
}
else
{
snprintf(buf, sizeof(buf), "%s_hook_create", name);
}
create = dlsym(RTLD_DEFAULT, buf); create = dlsym(RTLD_DEFAULT, buf);
if (create) if (create)
{ {
hook = create(); hook = create(name);
if (hook) if (hook)
{ {
conftest->hooks->insert_last(conftest->hooks, hook); conftest->hooks->insert_last(conftest->hooks, hook);
+7 -7
View File
@@ -111,7 +111,7 @@ METHOD(hook_t, destroy, void,
/** /**
* Create the IKE_AUTH fill hook * Create the IKE_AUTH fill hook
*/ */
hook_t *add_notify_hook_create(void) hook_t *add_notify_hook_create(char *name)
{ {
private_add_notify_t *this; private_add_notify_t *this;
@@ -123,17 +123,17 @@ hook_t *add_notify_hook_create(void)
.destroy = _destroy, .destroy = _destroy,
}, },
.req = conftest->test->get_bool(conftest->test, .req = conftest->test->get_bool(conftest->test,
"hooks.add_notify.request", TRUE), "hooks.%s.request", TRUE, name),
.id = conftest->test->get_int(conftest->test, .id = conftest->test->get_int(conftest->test,
"hooks.add_notify.id", 0), "hooks.%s.id", 0, name),
.type = conftest->test->get_str(conftest->test, .type = conftest->test->get_str(conftest->test,
"hooks.add_notify.type", ""), "hooks.%s.type", "", name),
.data = conftest->test->get_str(conftest->test, .data = conftest->test->get_str(conftest->test,
"hooks.add_notify.data", ""), "hooks.%s.data", "", name),
.spi = conftest->test->get_int(conftest->test, .spi = conftest->test->get_int(conftest->test,
"hooks.add_notify.spi", 0), "hooks.%s.spi", 0, name),
.esp = conftest->test->get_bool(conftest->test, .esp = conftest->test->get_bool(conftest->test,
"hooks.add_notify.esp", FALSE), "hooks.%s.esp", FALSE, name),
); );
return &this->hook; return &this->hook;
+4 -4
View File
@@ -66,7 +66,7 @@ METHOD(hook_t, destroy, void,
/** /**
* Create the ignore_message hook * Create the ignore_message hook
*/ */
hook_t *ignore_message_hook_create(void) hook_t *ignore_message_hook_create(char *name)
{ {
private_ignore_message_t *this; private_ignore_message_t *this;
@@ -78,11 +78,11 @@ hook_t *ignore_message_hook_create(void)
.destroy = _destroy, .destroy = _destroy,
}, },
.in = conftest->test->get_bool(conftest->test, .in = conftest->test->get_bool(conftest->test,
"hooks.ignore_message.inbound", TRUE), "hooks.%s.inbound", TRUE, name),
.req = conftest->test->get_bool(conftest->test, .req = conftest->test->get_bool(conftest->test,
"hooks.ignore_message.request", TRUE), "hooks.%s.request", TRUE, name),
.id = conftest->test->get_int(conftest->test, .id = conftest->test->get_int(conftest->test,
"hooks.ignore_message.id", 0), "hooks.%s.id", 0, name),
); );
return &this->hook; return &this->hook;
+4 -4
View File
@@ -121,7 +121,7 @@ METHOD(hook_t, destroy, void,
/** /**
* Create the IKE_AUTH fill hook * Create the IKE_AUTH fill hook
*/ */
hook_t *ike_auth_fill_hook_create(void) hook_t *ike_auth_fill_hook_create(char *name)
{ {
private_ike_auth_fill_t *this; private_ike_auth_fill_t *this;
@@ -133,11 +133,11 @@ hook_t *ike_auth_fill_hook_create(void)
.destroy = _destroy, .destroy = _destroy,
}, },
.req = conftest->test->get_bool(conftest->test, .req = conftest->test->get_bool(conftest->test,
"hooks.ike_auth_fill.request", TRUE), "hooks.%s.request", TRUE, name),
.id = conftest->test->get_int(conftest->test, .id = conftest->test->get_int(conftest->test,
"hooks.ike_auth_fill.id", 1), "hooks.%s.id", 1, name),
.bytes = conftest->test->get_int(conftest->test, .bytes = conftest->test->get_int(conftest->test,
"hooks.ike_auth_fill.bytes", 0), "hooks.%s.bytes", 0, name),
); );
return &this->hook; return &this->hook;
+6 -6
View File
@@ -126,7 +126,7 @@ METHOD(hook_t, destroy, void,
/** /**
* Create the IKE_AUTH fill hook * Create the IKE_AUTH fill hook
*/ */
hook_t *unencrypted_notify_hook_create(void) hook_t *unencrypted_notify_hook_create(char *name)
{ {
private_unencrypted_notify_t *this; private_unencrypted_notify_t *this;
@@ -138,15 +138,15 @@ hook_t *unencrypted_notify_hook_create(void)
.destroy = _destroy, .destroy = _destroy,
}, },
.id = conftest->test->get_int(conftest->test, .id = conftest->test->get_int(conftest->test,
"hooks.unencrypted_notify.id", 2), "hooks.%s.id", 2, name),
.type = conftest->test->get_str(conftest->test, .type = conftest->test->get_str(conftest->test,
"hooks.unencrypted_notify.type", ""), "hooks.%s.type", "", name),
.data = conftest->test->get_str(conftest->test, .data = conftest->test->get_str(conftest->test,
"hooks.unencrypted_notify.data", ""), "hooks.%s.data", "", name),
.spi = conftest->test->get_int(conftest->test, .spi = conftest->test->get_int(conftest->test,
"hooks.unencrypted_notify.spi", 0), "hooks.%s.spi", 0, name),
.esp = conftest->test->get_bool(conftest->test, .esp = conftest->test->get_bool(conftest->test,
"hooks.unencrypted_notify.esp", FALSE), "hooks.%s.esp", FALSE, name),
); );
return &this->hook; return &this->hook;
+4 -4
View File
@@ -110,7 +110,7 @@ METHOD(hook_t, destroy, void,
/** /**
* Create the IKE_AUTH fill hook * Create the IKE_AUTH fill hook
*/ */
hook_t *unsort_message_hook_create(void) hook_t *unsort_message_hook_create(char *name)
{ {
private_unsort_message_t *this; private_unsort_message_t *this;
@@ -122,11 +122,11 @@ hook_t *unsort_message_hook_create(void)
.destroy = _destroy, .destroy = _destroy,
}, },
.req = conftest->test->get_bool(conftest->test, .req = conftest->test->get_bool(conftest->test,
"hooks.unsort_message.request", TRUE), "hooks.%s.request", TRUE, name),
.id = conftest->test->get_int(conftest->test, .id = conftest->test->get_int(conftest->test,
"hooks.unsort_message.id", 0), "hooks.%s.id", 0, name),
.order = conftest->test->get_str(conftest->test, .order = conftest->test->get_str(conftest->test,
"hooks.unsort_message.order", ""), "hooks.%s.order", "", name),
); );
return &this->hook; return &this->hook;