From 849a791f79086643a9533b02a3550bb9adeb901d Mon Sep 17 00:00:00 2001 From: Jan Vidar Krey Date: Thu, 8 Jul 2010 14:24:40 +0200 Subject: [PATCH] Fixed plugin handling when using the utils code from within a plugin. --- GNUmakefile | 55 ++++++++++++++--------- src/plugins/mod_auth_simple.c | 84 +++++++++++++++++++++++++++++++++++ src/plugins/mod_logging.c | 4 +- 3 files changed, 121 insertions(+), 22 deletions(-) create mode 100644 src/plugins/mod_auth_simple.c diff --git a/GNUmakefile b/GNUmakefile index 1407e77..4a140a5 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -155,7 +155,14 @@ libuhub_SOURCES := \ src/network/network.c \ src/network/select.c \ src/network/timeout.c \ - src/network/timer.c \ + src/network/timer.c + + +libadc_common_SOURCES := \ + src/adc/message.c \ + src/adc/sid.c + +libutils_SOURCES := \ src/util/ipcalc.c \ src/util/list.c \ src/util/log.c \ @@ -164,10 +171,6 @@ libuhub_SOURCES := \ src/util/rbtree.c \ src/util/tiger.c -libadc_common_SOURCES := \ - src/adc/message.c \ - src/adc/sid.c - libadc_client_SOURCES := \ src/tools/adcclient.c @@ -193,15 +196,20 @@ autotest_SOURCES := \ autotest_OBJECTS = autotest.o +# Plugin targets: plugin_example_SOURCES := src/plugins/mod_example.c -plugin_example_TARGET := $(plugin_example_SOURCES:.c=.so) +plugin_example_TARGET := mod_example.so plugin_logging_SOURCES := src/plugins/mod_logging.c -plugin_logging_TARGET := $(plugin_example_SOURCES:.c=.so) +plugin_logging_TARGET := mod_logging.so + +plugin_auth_SOURCES := src/plugins/mod_auth_simple.c +plugin_auth_TARGET := mod_auth_simple.so # Source to objects libuhub_OBJECTS := $(libuhub_SOURCES:.c=.o) +libutils_OBJECTS := $(libutils_SOURCES:.c=.o) libadc_client_OBJECTS := $(libadc_client_SOURCES:.c=.o) libadc_common_OBJECTS := $(libadc_common_SOURCES:.c=.o) @@ -209,8 +217,8 @@ uhub_OBJECTS := $(uhub_SOURCES:.c=.o) adcrush_OBJECTS := $(adcrush_SOURCES:.c=.o) admin_OBJECTS := $(admin_SOURCES:.c=.o) -all_OBJECTS := $(libuhub_OBJECTS) $(uhub_OBJECTS) $(adcrush_OBJECTS) $(autotest_OBJECTS) $(admin_OBJECTS) $(libadc_common_OBJECTS) $(libadc_client_OBJECTS) -all_plugins := $(plugin_example_TARGET) $(plugin_logging_TARGET) +all_OBJECTS := $(libuhub_OBJECTS) $(uhub_OBJECTS) $(libutils_OBJECTS) $(adcrush_OBJECTS) $(autotest_OBJECTS) $(admin_OBJECTS) $(libadc_common_OBJECTS) $(libadc_client_OBJECTS) +all_plugins := $(plugin_example_TARGET) $(plugin_logging_TARGET) $(plugin_auth_TARGET) uhub_BINARY=uhub$(BIN_EXT) adcrush_BINARY=adcrush$(BIN_EXT) @@ -221,24 +229,31 @@ ifeq ($(USE_PLUGINS),YES) all_OBJECTS += $(plugins) endif - -.PHONY: revision.h.tmp - -%.so: %.c - $(MSG_CC) $(CC) -shared -fPIC -o $@ $< $(CFLAGS) +.PHONY: revision.h.tmp all plugins %.o: %.c version.h revision.h - $(MSG_CC) $(CC) -c $(CFLAGS) -o $@ $< + $(MSG_CC) $(CC) -fPIC -c $(CFLAGS) -o $@ $< all: $(uhub_BINARY) -$(adcrush_BINARY): $(adcrush_OBJECTS) $(libuhub_OBJECTS) $(libadc_common_OBJECTS) $(libadc_client_OBJECTS) +plugins: $(uhub_BINARY) $(all_plugins) + +$(plugin_auth_TARGET): $(plugin_auth_SOURCES) $(libutils_OBJECTS) + $(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS) + +$(plugin_example_TARGET): $(plugin_example_SOURCES) + $(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS) + +$(plugin_logging_TARGET): $(plugin_logging_SOURCES) + $(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS) + +$(adcrush_BINARY): $(adcrush_OBJECTS) $(libuhub_OBJECTS) $(libutils_OBJECTS) $(libadc_common_OBJECTS) $(libadc_client_OBJECTS) $(MSG_LD) $(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS) -$(admin_BINARY): $(admin_OBJECTS) $(libuhub_OBJECTS) $(libadc_common_OBJECTS) $(libadc_client_OBJECTS) +$(admin_BINARY): $(admin_OBJECTS) $(libuhub_OBJECTS) $(libutils_OBJECTS) $(libadc_common_OBJECTS) $(libadc_client_OBJECTS) $(MSG_LD) $(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS) -$(uhub_BINARY): $(uhub_OBJECTS) $(libuhub_OBJECTS) $(libadc_common_OBJECTS) +$(uhub_BINARY): $(uhub_OBJECTS) $(libuhub_OBJECTS) $(libutils_OBJECTS) $(libadc_common_OBJECTS) $(MSG_LD) $(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS) autotest.c: $(autotest_SOURCES) @@ -259,7 +274,7 @@ revision.h: revision.h.tmp $(autotest_OBJECTS): autotest.c $(MSG_CC) $(CC) -c $(CFLAGS) -Isrc -o $@ $< -$(autotest_BINARY): $(autotest_OBJECTS) $(libuhub_OBJECTS) $(libadc_common_OBJECTS) $(libadc_client_OBJECTS) +$(autotest_BINARY): $(autotest_OBJECTS) $(libuhub_OBJECTS) $(libutils_OBJECTS) $(libadc_common_OBJECTS) $(libadc_client_OBJECTS) $(MSG_LD) $(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS) autotest: $(autotest_BINARY) @@ -283,7 +298,7 @@ dist-clean: @rm -rf $(all_OBJECTS) *~ core clean: - @rm -rf $(libuhub_OBJECTS) *~ core $(uhub_BINARY) $(admin_BINARY) $(autotest_BINARY) $(adcrush_BINARY) $(all_OBJECTS) autotest.c revision.h revision.h.tmp && \ + @rm -rf $(libuhub_OBJECTS) *~ core $(uhub_BINARY) $(admin_BINARY) $(autotest_BINARY) $(adcrush_BINARY) $(all_OBJECTS) $(all_plugins) autotest.c revision.h revision.h.tmp && \ echo $(MSG_CLEAN) diff --git a/src/plugins/mod_auth_simple.c b/src/plugins/mod_auth_simple.c new file mode 100644 index 0000000..d2726c0 --- /dev/null +++ b/src/plugins/mod_auth_simple.c @@ -0,0 +1,84 @@ +/* + * uhub - A tiny ADC p2p connection hub + * Copyright (C) 2010, Jan Vidar Krey + */ + +#include "plugin_api/handle.h" +#include "util/memory.h" +#include "util/list.h" +#include "util/ipcalc.h" + + +struct user_access_info +{ + char* username; + char* password; + enum auth_credentials credentials; +}; + +struct acl_list +{ + struct linked_list* users; /* see struct user_access_info */ +}; + +static void free_user_access_info(void* ptr) +{ + struct user_access_info* info = (struct user_access_info*) ptr; + hub_free(info->username); + hub_free(info->password); + hub_free(info); +} + +static struct acl_list* load_acl(const char* filename) +{ + struct acl_list* list = (struct acl_list*) hub_malloc(sizeof(struct acl_list)); + struct linked_list* users = list_create(); + + if (!list || !users) + { + list_destroy(users); + hub_free(list); + return 0; + } + + list->users = users; + return list; +} + +static void unload_acl(struct acl_list* list) +{ + if (!list) + return; + + list_clear(list->users, free_user_access_info); + list_destroy(list->users); + hub_free(list); +} + + +int plugin_register(struct uhub_plugin_handle* plugin, const char* config) +{ + plugin->name = "File authentication plugin"; + plugin->version = "0.1"; + plugin->description = "Simple authentication plugin that authenticates users based on a file."; + plugin->plugin_api_version = PLUGIN_API_VERSION; + plugin->plugin_funcs_size = sizeof(struct plugin_funcs); + memset(&plugin->funcs, 0, sizeof(struct plugin_funcs)); + + plugin->ptr = load_acl(config); + +/* + plugin->funcs.on_connect = log_connect; + plugin->funcs.on_user_login = log_user_login; + plugin->funcs.on_user_logout = log_user_logout; + plugin->funcs.on_user_change_nick = log_change_nick; +*/ + return 0; +} + +int plugin_unregister(struct uhub_plugin_handle* plugin) +{ + unload_acl(plugin->ptr); + return 0; +} + diff --git a/src/plugins/mod_logging.c b/src/plugins/mod_logging.c index 223d46b..1ae315f 100644 --- a/src/plugins/mod_logging.c +++ b/src/plugins/mod_logging.c @@ -38,12 +38,12 @@ int plugin_register(struct uhub_plugin_handle* plugin, const char* config) plugin->plugin_api_version = PLUGIN_API_VERSION; plugin->plugin_funcs_size = sizeof(struct plugin_funcs); memset(&plugin->funcs, 0, sizeof(struct plugin_funcs)); - +/* plugin->funcs.on_connect = log_connect; plugin->funcs.on_user_login = log_user_login; plugin->funcs.on_user_logout = log_user_logout; plugin->funcs.on_user_change_nick = log_change_nick; - +*/ puts("* plugin register"); return 0; }