2e7f0f9c12
Adds a mod_ucmd plugin which uses the previously added user command plugin functions to send user commands when users log in. These are read from a text file in a simple format. They can be restricted to users with certain credentials, and can have multiple actions (e.g., send a PM and a message in the main chat). A sample user command file for the standard uhub commands is at doc/ucmd.conf, and will be automatically installed if appropriate. This currently won't send commands to existing users (e.g., if the plugin is (re)loaded after the hub is already up and running). To support this, a plugin function to list all current users would need to be added. I'm not sure how efficient this would be due to the volume of messages needed to delete the existing commands on shutdown and send them again on startup. As the commands are reloaded properly within the plugin, it may be easier to require users to reconnect after the configuration changes (and, of course, an admin could force this by restarting the hub).
387 lines
10 KiB
Makefile
387 lines
10 KiB
Makefile
##
|
|
## Makefile for uhub (Use GNU make)
|
|
## Copyright (C) 2007-2010, Jan Vidar Krey <janvidar@extatic.org>
|
|
#
|
|
|
|
-include Makefile.private
|
|
|
|
CC = gcc
|
|
LD := $(CC)
|
|
MV := mv
|
|
RANLIB := ranlib
|
|
CFLAGS += -pipe -Wall
|
|
USE_SSL ?= YES
|
|
USE_PLUGINS ?= YES
|
|
USE_BIGENDIAN ?= AUTO
|
|
BITS ?= AUTO
|
|
SILENT ?= YES
|
|
TERSE ?= NO
|
|
STACK_PROTECT ?= NO
|
|
NEED_LIBDL ?= NO
|
|
|
|
ifeq ($(OS), Windows_NT)
|
|
WINDOWS ?= YES
|
|
OPSYS ?= Windows
|
|
else
|
|
OPSYS ?= $(shell uname)
|
|
endif
|
|
|
|
ifeq ($(OPSYS),SunOS)
|
|
LDLIBS += -lsocket -lnsl
|
|
endif
|
|
|
|
ifeq ($(OPSYS),Haiku)
|
|
LDLIBS += -lnetwork
|
|
endif
|
|
|
|
ifeq ($(OPSYS),Linux)
|
|
NEED_LIBDL = YES
|
|
endif
|
|
|
|
CFLAGS += -I./src/
|
|
|
|
ifeq ($(OPSYS),Windows)
|
|
USE_BIGENDIAN := NO
|
|
LDLIBS += -lws2_32
|
|
UHUB_CONF_DIR ?= c:/uhub/
|
|
UHUB_PREFIX ?= c:/uhub/
|
|
CFLAGS += -mno-cygwin
|
|
LDFLAGS += -mno-cygwin
|
|
BIN_EXT ?= .exe
|
|
else
|
|
DESTDIR ?= /
|
|
UHUB_CONF_DIR ?= $(DESTDIR)/etc/uhub
|
|
UHUB_PREFIX ?= $(DESTDIR)/usr/local
|
|
UHUB_MOD_DIR ?= $(DESTDIR)/var/lib/uhub
|
|
CFLAGS += -I/usr/local/include
|
|
LDFLAGS += -L/usr/local/lib
|
|
BIN_EXT ?=
|
|
endif
|
|
|
|
ifeq ($(SILENT),YES)
|
|
MSG_CC=@echo " CC:" $(notdir $<) &&
|
|
MSG_LD=@echo " LD:" $(notdir $@) &&
|
|
MSG_AR=@echo " AR:" $(notdir $@) &&
|
|
else
|
|
MSG_CC=
|
|
MSG_LD=
|
|
MSG_AR=
|
|
endif
|
|
|
|
ifeq ($(TERSE), YES)
|
|
MSG_CC=@
|
|
MSG_LD=@
|
|
MSG_AR=@
|
|
MSG_CLEAN=-n ""
|
|
else
|
|
MSG_CLEAN="Clean as a whistle"
|
|
endif
|
|
|
|
ifeq ($(RELEASE),YES)
|
|
CFLAGS += -O3 -DNDEBUG
|
|
else
|
|
CFLAGS += -ggdb -DDEBUG
|
|
endif
|
|
|
|
ifeq ($(STACK_PROTECT),YES)
|
|
CFLAGS += -fstack-protector-all
|
|
endif
|
|
|
|
|
|
ifeq ($(PROFILING),YES)
|
|
CFLAGS += -pg
|
|
LDFLAGS += -pg
|
|
endif
|
|
|
|
ifeq ($(FUNCTRACE),YES)
|
|
CFLAGS += -finstrument-functions
|
|
CFLAGS += -DDEBUG_FUNCTION_TRACE
|
|
endif
|
|
|
|
ifneq ($(BITS), AUTO)
|
|
ifeq ($(BITS), 64)
|
|
CFLAGS += -m64
|
|
LDFLAGS += -m64
|
|
else
|
|
ifeq ($(BITS), 32)
|
|
CFLAGS += -m32
|
|
LDFLAGS += -m32
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(USE_BIGENDIAN),AUTO)
|
|
ifeq ($(shell perl -e 'print pack("L", 0x554E4958)'),UNIX)
|
|
CFLAGS += -DARCH_BIGENDIAN
|
|
endif
|
|
else
|
|
ifeq ($(USE_BIGENDIAN),YES)
|
|
CFLAGS += -DARCH_BIGENDIAN
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(USE_SSL),YES)
|
|
CFLAGS += -DSSL_SUPPORT
|
|
LDLIBS += -lssl -lcrypto
|
|
endif
|
|
|
|
ifeq ($(NEED_LIBDL),YES)
|
|
LDLIBS += -ldl
|
|
endif
|
|
|
|
GIT_VERSION=$(shell git describe --tags 2>/dev/null || echo "")
|
|
GIT_REVISION=$(shell git show --abbrev-commit 2>/dev/null | head -n 1 | cut -f 2 -d " " || echo "")
|
|
OLD_REVISION=$(shell grep GIT_REVISION revision.h 2>/dev/null | cut -f 3 -d " " | tr -d "\"")
|
|
|
|
# Sources
|
|
libuhub_SOURCES := \
|
|
src/core/auth.c \
|
|
src/core/command_parser.c \
|
|
src/core/commands.c \
|
|
src/core/config.c \
|
|
src/core/eventqueue.c \
|
|
src/core/hub.c \
|
|
src/core/hubevent.c \
|
|
src/core/hubio.c \
|
|
src/core/inf.c \
|
|
src/core/netevent.c \
|
|
src/core/probe.c \
|
|
src/core/route.c \
|
|
src/core/user.c \
|
|
src/core/usermanager.c \
|
|
src/core/plugincallback.c \
|
|
src/core/plugininvoke.c \
|
|
src/core/pluginloader.c \
|
|
src/core/pluginucmd.c \
|
|
src/network/backend.c \
|
|
src/network/connection.c \
|
|
src/network/epoll.c \
|
|
src/network/kqueue.c \
|
|
src/network/select.c \
|
|
src/network/timeout.c \
|
|
src/network/timer.c
|
|
|
|
|
|
libadc_common_SOURCES := \
|
|
src/adc/message.c \
|
|
src/adc/sid.c
|
|
|
|
libutils_SOURCES := \
|
|
src/util/cbuffer.c \
|
|
src/util/config_token.c \
|
|
src/util/credentials.c \
|
|
src/util/floodctl.c \
|
|
src/util/ipcalc.c \
|
|
src/util/list.c \
|
|
src/util/log.c \
|
|
src/util/memory.c \
|
|
src/util/misc.c \
|
|
src/network/network.c \
|
|
src/util/rbtree.c \
|
|
src/util/tiger.c
|
|
|
|
libadc_client_SOURCES := \
|
|
src/tools/adcclient.c
|
|
|
|
uhub_SOURCES := src/core/main.c
|
|
|
|
uhub-passwd_SOURCES := src/tools/uhub-passwd.c
|
|
uhub-passwd_LIBS := -lsqlite3
|
|
|
|
adcrush_SOURCES := src/tools/adcrush.c
|
|
|
|
admin_SOURCES := src/tools/admin.c
|
|
|
|
autotest_SOURCES := \
|
|
autotest/test_commands.tcc \
|
|
autotest/test_credentials.tcc \
|
|
autotest/test_eventqueue.tcc \
|
|
autotest/test_hub.tcc \
|
|
autotest/test_inf.tcc \
|
|
autotest/test_ipfilter.tcc \
|
|
autotest/test_list.tcc \
|
|
autotest/test_memory.tcc \
|
|
autotest/test_message.tcc \
|
|
autotest/test_misc.tcc \
|
|
autotest/test_sid.tcc \
|
|
autotest/test_tiger.tcc \
|
|
autotest/test_timer.tcc \
|
|
autotest/test_tokenizer.tcc \
|
|
autotest/test_usermanager.tcc
|
|
|
|
autotest_OBJECTS = autotest.o
|
|
|
|
# Plugin targets:
|
|
plugin_example_SOURCES := src/plugins/mod_example.c
|
|
plugin_example_TARGET := mod_example.so
|
|
|
|
plugin_welcome_SOURCES := src/plugins/mod_welcome.c
|
|
plugin_welcome_TARGET := mod_welcome.so
|
|
|
|
plugin_logging_SOURCES := src/plugins/mod_logging.c
|
|
plugin_logging_TARGET := mod_logging.so
|
|
|
|
plugin_auth_SOURCES := src/plugins/mod_auth_simple.c
|
|
plugin_auth_TARGET := mod_auth_simple.so
|
|
|
|
plugin_auth_sqlite_SOURCES := src/plugins/mod_auth_sqlite.c
|
|
plugin_auth_sqlite_TARGET := mod_auth_sqlite.so
|
|
plugin_auth_sqlite_LIBS := -lsqlite3
|
|
|
|
plugin_chat_history_SOURCES := src/plugins/mod_chat_history.c
|
|
plugin_chat_history_TARGET := mod_chat_history.so
|
|
|
|
plugin_chat_only_SOURCES := src/plugins/mod_chat_only.c
|
|
plugin_chat_only_TARGET := mod_chat_only.so
|
|
|
|
plugin_topic_SOURCES := src/plugins/mod_topic.c
|
|
plugin_topic_TARGET := mod_topic.so
|
|
|
|
plugin_ucmd_SOURCES := src/plugins/mod_ucmd.c
|
|
plugin_ucmd_TARGET := mod_ucmd.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)
|
|
|
|
uhub_OBJECTS := $(uhub_SOURCES:.c=.o)
|
|
uhub-passwd_OBJECTS := $(uhub-passwd_SOURCES:.c=.o)
|
|
adcrush_OBJECTS := $(adcrush_SOURCES:.c=.o)
|
|
admin_OBJECTS := $(admin_SOURCES:.c=.o)
|
|
|
|
all_plugins := \
|
|
$(plugin_example_TARGET) \
|
|
$(plugin_logging_TARGET) \
|
|
$(plugin_auth_TARGET) \
|
|
$(plugin_auth_sqlite_TARGET) \
|
|
$(plugin_welcome_TARGET) \
|
|
$(plugin_chat_history_TARGET) \
|
|
$(plugin_chat_only_TARGET) \
|
|
$(plugin_topic_TARGET) \
|
|
$(plugin_ucmd_TARGET)
|
|
|
|
all_OBJECTS := \
|
|
$(libuhub_OBJECTS) \
|
|
$(uhub_OBJECTS) \
|
|
$(libutils_OBJECTS) \
|
|
$(adcrush_OBJECTS) \
|
|
$(autotest_OBJECTS) \
|
|
$(admin_OBJECTS) \
|
|
$(libadc_common_OBJECTS) \
|
|
$(libadc_client_OBJECTS)
|
|
|
|
all_OBJECTS += $(all_plugins)
|
|
|
|
uhub_BINARY=uhub$(BIN_EXT)
|
|
uhub-passwd_BINARY=uhub-passwd$(BIN_EXT)
|
|
adcrush_BINARY=adcrush$(BIN_EXT)
|
|
admin_BINARY=uhub-admin$(BIN_EXT)
|
|
autotest_BINARY=autotest/test$(BIN_EXT)
|
|
|
|
|
|
.PHONY: revision.h.tmp all plugins
|
|
|
|
%.o: %.c version.h revision.h
|
|
$(MSG_CC) $(CC) -fPIC -c $(CFLAGS) -o $@ $<
|
|
|
|
|
|
#%.so: %.c
|
|
# $(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS)
|
|
|
|
|
|
all: $(uhub_BINARY) $(uhub-passwd_BINARY) plugins
|
|
|
|
plugins: $(uhub_BINARY) $(all_plugins)
|
|
|
|
$(plugin_auth_TARGET): $(plugin_auth_SOURCES) $(libutils_OBJECTS)
|
|
$(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS)
|
|
|
|
$(plugin_auth_sqlite_TARGET): $(plugin_auth_sqlite_SOURCES) $(libutils_OBJECTS)
|
|
$(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS) $(LDFLAGS) $(plugin_auth_sqlite_LIBS)
|
|
|
|
$(plugin_example_TARGET): $(plugin_example_SOURCES) $(libutils_OBJECTS)
|
|
$(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS)
|
|
|
|
$(plugin_logging_TARGET): $(plugin_logging_SOURCES) $(libutils_OBJECTS) $(libadc_common_OBJECTS) src/network/network.o
|
|
$(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS)
|
|
|
|
$(plugin_chat_history_TARGET): $(plugin_chat_history_SOURCES) $(libutils_OBJECTS)
|
|
$(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS)
|
|
|
|
$(plugin_chat_only_TARGET): $(plugin_chat_only_SOURCES) $(libutils_OBJECTS)
|
|
$(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS)
|
|
|
|
$(plugin_welcome_TARGET): $(plugin_welcome_SOURCES) $(libutils_OBJECTS)
|
|
$(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS)
|
|
|
|
$(plugin_topic_TARGET): $(plugin_topic_SOURCES) $(libutils_OBJECTS)
|
|
$(MSG_CC) $(CC) -shared -fPIC -o $@ $^ $(CFLAGS)
|
|
|
|
$(plugin_ucmd_TARGET): $(plugin_ucmd_SOURCES) $(libutils_OBJECTS)
|
|
$(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) $(libutils_OBJECTS) $(libadc_common_OBJECTS) $(libadc_client_OBJECTS)
|
|
$(MSG_LD) $(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS)
|
|
|
|
$(uhub_BINARY): $(uhub_OBJECTS) $(libuhub_OBJECTS) $(libutils_OBJECTS) $(libadc_common_OBJECTS)
|
|
$(MSG_LD) $(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS)
|
|
|
|
$(uhub-passwd_BINARY): $(uhub-passwd_OBJECTS) src/util/misc.o src/util/list.o src/util/memory.o src/util/log.o
|
|
$(MSG_LD) $(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS) $(uhub-passwd_LIBS)
|
|
|
|
|
|
autotest.c: $(autotest_SOURCES)
|
|
$(shell exotic --standalone $(autotest_SOURCES) > $@)
|
|
|
|
revision.h.tmp:
|
|
@rm -f $@
|
|
@echo "/* AUTOGENERATED FILE - DO NOT EDIT */" > $@
|
|
@if [ -n '$(GIT_VERSION)' ]; then echo \#define GIT_VERSION \"$(GIT_VERSION)\" >> $@; fi
|
|
@if [ -n '$(GIT_REVISION)' ]; then echo \#define GIT_REVISION \"$(GIT_REVISION)\" >> $@; fi
|
|
|
|
version.h: revision.h
|
|
|
|
revision.h: revision.h.tmp
|
|
@if [ '$(GIT_REVISION)' != '$(OLD_REVISION)' ]; then cp $@.tmp $@; fi
|
|
@if [ ! -f $@ ]; then cp $@.tmp $@; fi
|
|
|
|
$(autotest_OBJECTS): autotest.c
|
|
$(MSG_CC) $(CC) -c $(CFLAGS) -Isrc -o $@ $<
|
|
|
|
$(autotest_BINARY): $(autotest_OBJECTS) $(libuhub_OBJECTS) $(libutils_OBJECTS) $(libadc_common_OBJECTS) $(libadc_client_OBJECTS)
|
|
$(MSG_LD) $(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS)
|
|
|
|
autotest: $(autotest_BINARY)
|
|
@./$(autotest_BINARY) -s -f
|
|
|
|
ifeq ($(WINDOWS),YES)
|
|
install:
|
|
@echo "Cannot install automatically on windows."
|
|
else
|
|
install: all
|
|
@echo Copying $(uhub_BINARY) to $(UHUB_PREFIX)/bin/
|
|
@cp $(uhub_BINARY) $(UHUB_PREFIX)/bin/
|
|
@cp $(uhub-passwd_BINARY) $(UHUB_PREFIX)/bin/
|
|
@if [ ! -d $(UHUB_CONF_DIR) ]; then echo Creating $(UHUB_CONF_DIR); mkdir -p $(UHUB_CONF_DIR); fi
|
|
@if [ ! -f $(UHUB_CONF_DIR)/uhub.conf ]; then cp doc/uhub.conf $(UHUB_CONF_DIR); fi
|
|
@if [ ! -f $(UHUB_CONF_DIR)/rules.txt ]; then cp doc/rules.txt $(UHUB_CONF_DIR); fi
|
|
@if [ ! -f $(UHUB_CONF_DIR)/plugins.conf ]; then cp doc/plugins.conf $(UHUB_CONF_DIR); fi
|
|
@if [ ! -f $(UHUB_CONF_DIR)/ucmd.conf ]; then cp doc/ucmd.conf $(UHUB_CONF_DIR); fi
|
|
@if [ ! -d $(UHUB_MOD_DIR) ]; then echo Creating $(UHUB_MOD_DIR); mkdir -p $(UHUB_MOD_DIR); fi
|
|
@cp -f mod_*.so $(UHUB_MOD_DIR)
|
|
@touch $(UHUB_CONF_DIR)/motd.txt
|
|
@echo done.
|
|
endif
|
|
|
|
dist-clean:
|
|
@rm -rf $(all_OBJECTS) *~ core
|
|
|
|
clean:
|
|
@rm -rf $(libuhub_OBJECTS) *~ core $(uhub_BINARY) $(uhub-passwd_BINARY) $(admin_BINARY) $(autotest_BINARY) $(adcrush_BINARY) $(all_OBJECTS) $(all_plugins) autotest.c revision.h revision.h.tmp && \
|
|
echo $(MSG_CLEAN)
|