$Log$
+ Revision 601.109 2003/01/15 05:57:09 ajc
+ * First cut at static-linking the citserver. Ripped out libtool and
+ replaced the dynloader paradigm with "server extensions" paradigm (static
+ linked, but still very loosely coupled by way of using the API's to
+ register callbacks and commands etc.) Needs more testing.
+
Revision 601.108 2003/01/14 04:12:26 ajc
* Set default view for new user Calendar> rooms to 3 (calendar)
* Set default view for new user Tasks> rooms to 4 (tasks)
Fri Jul 10 1998 Art Cancro <ajc@uncensored.citadel.org>
* Initial CVS import
+
all: $(TARGETS)
-.SUFFIXES: .lo .d .c
+.SUFFIXES: .o .d .c
EXEEXT=@EXEEXT@
SMTP=@SMTP@
CLIENT_TARGETS=citadel$(EXEEXT) whobbs$(EXEEXT)
-SERVER_TARGETS=libcitserver.la citserver setup $(CHKPWD)
-SERV_MODULES=modules/libchat.la modules/libvcard.la \
- modules/libupgrade.la \
+SERVER_TARGETS=citserver setup $(CHKPWD)
+SERV_MODULES=serv_chat.o \
+ serv_upgrade.o \
$(SMTP) \
- modules/libpop3.la \
- modules/libmrtg.la \
- modules/libspam.la \
- modules/libimap.la \
- modules/libnetwork.la \
- modules/liblistsub.la \
- modules/libnetfilter.la \
- modules/libnewuser.la \
- modules/libpas2.la \
- modules/libinetcfg.la \
- modules/librwho.la \
- modules/libbio.la \
- modules/libexpire.la \
- modules/libvandelay.la \
- modules/libcalendar.la
+ serv_pop3.o \
+ serv_vcard.o vcard.o \
+ serv_mrtg.o \
+ serv_spam.o \
+ serv_imap.o imap_fetch.o imap_misc.o imap_search.o \
+ imap_store.o imap_tools.o \
+ serv_network.o \
+ serv_listsub.o \
+ serv_netfilter.o \
+ serv_newuser.o \
+ serv_pas2.o md5.o \
+ serv_inetcfg.o \
+ serv_rwho.o \
+ serv_bio.o \
+ serv_expire.o \
+ serv_vandelay.o \
+ serv_calendar.o ical_dezonify.o
+
UTIL_TARGETS=aidepost msgform readlog \
stats citmail userlist sendcommand \
base64 migratenet$(EXEEXT)
YACC=@YACC@
DATABASE=@DATABASE@
-LIBTOOL=./libtool
-LTSHARE=cd modules && ../$(LIBTOOL) $(CC) -rpath $(prefix)/modules -no-undefined -avoid-version -module
-
# End configuration section
VPATH=$(srcdir)
client: $(CLIENT_TARGETS)
-server: $(SERVER_TARGETS)
+server: $(SERVER_TARGETS) $(SERV_MODULES)
utils: $(UTIL_TARGETS)
-serv_modules: $(SERV_MODULES)
- @cd modules && mods=`echo .libs/*.s[ol]` && test "$$mods" != '.libs/*.s[ol]' && ln -sf $$mods . || true
- @cd modules && mods=`echo .libs/*.dll` && test "$$mods" != '.libs/*.dll' && ln -sf $$mods . || true
-
-#
-#
-
citadel$(EXEEXT): citadel.o citadel_ipc.o client_chat.o client_passwords.o \
commands.o html.o ipc_c_tcp.o md5.o messages.o rooms.o routines.o \
routines2.o screen.o tools.o $(LIBOBJS)
#
#
-SERV_OBJS = server_main.o
-
parsedate.o: parsedate.c
-LIBSERV_OBJS = user_ops.lo citserver.lo sysdep.lo dynloader.lo \
- tools.lo $(DATABASE:.c=.lo) $(DOMAIN:.c=.lo) \
- control.lo policy.lo config.lo support.lo room_ops.lo \
- file_ops.lo msgbase.lo \
- locate_host.lo housekeeping.lo logging.lo mime_parser.lo html.lo \
- internet_addressing.lo \
- serv_crypto.lo parsedate.lo genstamp.lo \
- clientsocket.lo $(AUTH) $(LIBOBJS:.o=.lo)
+SERV_OBJS = server_main.o \
+ user_ops.o citserver.o sysdep.o dynloader.o \
+ tools.o $(DATABASE:.c=.o) $(DOMAIN:.c=.o) \
+ control.o policy.o config.o support.o room_ops.o \
+ file_ops.o msgbase.o \
+ locate_host.o housekeeping.o logging.o mime_parser.o html.o \
+ internet_addressing.o \
+ serv_crypto.o parsedate.o genstamp.o \
+ clientsocket.o $(AUTH) $(SERV_MODULES)
-libcitserver.la: $(LIBSERV_OBJS)
- $(LIBTOOL) $(CC) $(LDFLAGS) -rpath $(prefix) -no-undefined \
- -o libcitserver.la $(LIBSERV_OBJS) $(LIBS) $(RESOLV)
-
-citserver: $(SERV_OBJS) $(LIBTOOL) libcitserver.la
- $(LIBTOOL) --mode=link $(CC) $(SERV_OBJS) $(LDFLAGS) libcitserver.la -o \
- citserver $(LIBS)
+citserver: $(SERV_OBJS)
+ $(CC) $(SERV_OBJS) $(LDFLAGS) $(LIBS) $(RESOLV) -o citserver
.c.o:
$(CC) $(CFLAGS) $(CPPFLAGS) $(DEFS) -c $< -o $@
-.c.lo: $(LIBTOOL)
- @test -d modules || mkdir -p modules
- $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) $(CPPFLAGS) $(DEFS) -c $< -o $@
-
-modules/libchat.la: serv_chat.lo libcitserver.la $(LIBTOOL)
- $(LTSHARE) -o libchat.la ../serv_chat.lo ../libcitserver.la
-
-modules/libtest.la: serv_test.lo libcitserver.la $(LIBTOOL)
- $(LTSHARE) -o libtest.la ../serv_test.lo ../libcitserver.la
-
-modules/libpop3.la: serv_pop3.lo md5.lo $(LIBTOOL) libcitserver.la
- $(LTSHARE) -o libpop3.la ../serv_pop3.lo ../md5.lo ../libcitserver.la
-
-modules/libmrtg.la: serv_mrtg.lo md5.lo $(LIBTOOL) libcitserver.la
- $(LTSHARE) -o libmrtg.la ../serv_mrtg.lo ../libcitserver.la
-
-modules/libspam.la: serv_spam.lo md5.lo domain.lo $(LIBTOOL) libcitserver.la
- $(LTSHARE) -o libspam.la ../serv_spam.lo ../domain.lo ../libcitserver.la
-
-modules/libinetcfg.la: serv_inetcfg.lo $(LIBTOOL) libcitserver.la
- $(LTSHARE) -o libinetcfg.la ../serv_inetcfg.lo ../libcitserver.la
-
-modules/librwho.la: serv_rwho.lo $(LIBTOOL) libcitserver.la
- $(LTSHARE) -o librwho.la ../serv_rwho.lo ../libcitserver.la
-
-modules/libbio.la: serv_bio.lo $(LIBTOOL) libcitserver.la
- $(LTSHARE) -o libbio.la ../serv_bio.lo ../libcitserver.la
-
-modules/libexpire.la: serv_expire.lo $(LIBTOOL) libcitserver.la
- $(LTSHARE) -o libexpire.la ../serv_expire.lo ../libcitserver.la
-
-modules/libvandelay.la: serv_vandelay.lo $(LIBTOOL) libcitserver.la
- $(LTSHARE) -o libvandelay.la ../serv_vandelay.lo ../libcitserver.la
-
-modules/libnetwork.la: serv_network.lo $(LIBTOOL) libcitserver.la
- $(LTSHARE) -o libnetwork.la ../serv_network.lo ../libcitserver.la
-
-modules/liblistsub.la: serv_listsub.lo $(LIBTOOL) libcitserver.la
- $(LTSHARE) -o liblistsub.la ../serv_listsub.lo ../libcitserver.la
-
-modules/libnetfilter.la: serv_netfilter.lo $(LIBTOOL) libcitserver.la
- $(LTSHARE) -o libnetfilter.la ../serv_netfilter.lo ../libcitserver.la
-
-modules/libnewuser.la: serv_newuser.lo $(LIBTOOL) libcitserver.la
- $(LTSHARE) -o libnewuser.la ../serv_newuser.lo ../libcitserver.la
-
-modules/libupgrade.la: serv_upgrade.lo $(LIBTOOL) libcitserver.la
- $(LTSHARE) -o libupgrade.la ../serv_upgrade.lo ../libcitserver.la
-
-modules/libvcard.la: serv_vcard.lo vcard.lo $(LIBTOOL) libcitserver.la
- $(LTSHARE) -o libvcard.la ../serv_vcard.lo ../vcard.lo ../libcitserver.la
-
-modules/libsmtp.la: serv_smtp.lo domain.lo $(LIBTOOL) libcitserver.la
- $(LTSHARE) -o libsmtp.la ../serv_smtp.lo ../domain.lo ../libcitserver.la
-
-
-modules/libimap.la: serv_imap.lo imap_tools.lo imap_fetch.lo \
- imap_search.lo imap_store.lo imap_misc.lo $(LIBTOOL) libcitserver.la
- $(LTSHARE) -o libimap.la ../imap_tools.lo ../serv_imap.lo \
- ../imap_fetch.lo ../imap_search.lo ../imap_store.lo ../imap_misc.lo ../libcitserver.la
-
-aidepost: aidepost.o libcitserver.la $(LIBOBJS)
- $(LIBTOOL) $(CC) aidepost.o libcitserver.la $(LIBOBJS) $(LDFLAGS) -o aidepost $(LIBS)
-
-modules/libpas2.la: serv_pas2.lo md5.lo $(LIBTOOL) libcitserver.la
- $(LTSHARE) -o libpas2.la ../serv_pas2.lo ../md5.lo ../libcitserver.la
-
-modules/libcalendar.la: serv_calendar.lo ical_dezonify.lo \
- $(LIBTOOL) libcitserver.la
- $(LTSHARE) -o libcalendar.la ../serv_calendar.lo ../ical_dezonify.lo \
- ../libcitserver.la
+aidepost: aidepost.o config.o
+ $(CC) aidepost.o config.o $(LDFLAGS) -o aidepost $(LIBS)
citmail: citmail.o config.o
$(CC) citmail.o config.o $(LDFLAGS) -o citmail $(LIBS)
whobbs$(EXEEXT): whobbs.o ipc_c_tcp.o tools.o citadel_ipc.o $(LIBOBJS)
$(CC) whobbs.o ipc_c_tcp.o tools.o citadel_ipc.o $(LIBOBJS) $(LDFLAGS) -o whobbs $(LIBS)
-migratenet$(EXEEXT): migratenet.o config.o ipc_c_tcp.o citadel_ipc.o tools.o libcitserver.la $(LIBOBJS)
- $(LIBTOOL) $(CC) migratenet.o config.o ipc_c_tcp.o citadel_ipc.o tools.o libcitserver.la $(LIBOBJS) $(LDFLAGS) -o migratenet $(LIBS)
+migratenet$(EXEEXT): migratenet.o config.o ipc_c_tcp.o citadel_ipc.o tools.o $(LIBOBJS)
+ $(CC) migratenet.o config.o ipc_c_tcp.o citadel_ipc.o tools.o $(LIBOBJS) $(LDFLAGS) -o migratenet $(LIBS)
-sendcommand: sendcommand.o ipc_c_tcp.o citadel_ipc.o libcitserver.la $(LIBOBJS)
- $(LIBTOOL) $(CC) sendcommand.o ipc_c_tcp.o citadel_ipc.o libcitserver.la \
+sendcommand: sendcommand.o ipc_c_tcp.o citadel_ipc.o tools.o config.o $(LIBOBJS)
+ $(CC) sendcommand.o ipc_c_tcp.o citadel_ipc.o tools.o config.o \
$(LIBOBJS) $(LDFLAGS) -o sendcommand $(LIBS)
base64: base64.o
readlog: readlog.o config.o
$(CC) readlog.o config.o $(LDFLAGS) -o readlog
-stats: stats.o ipc_c_tcp.o citadel_ipc.o libcitserver.la $(LIBOBJS)
- $(LIBTOOL) $(CC) stats.o ipc_c_tcp.o citadel_ipc.o libcitserver.la $(LIBOBJS) $(LDFLAGS) -o stats $(LIBS)
+stats: stats.o ipc_c_tcp.o citadel_ipc.o tools.o config.o
+ $(CC) stats.o ipc_c_tcp.o citadel_ipc.o tools.o config.o $(LDFLAGS) -o stats $(LIBS)
.PHONY: install-data install-doc install-exec clean cleaner distclean
done
install-exec: all weekly
- @for i in bio bitbucket files images info modules userpics; do \
+ @for i in bio bitbucket files images info userpics; do \
$(srcdir)/mkinstalldirs $(root)$(prefix)/$$i; \
done
@for i in $(CLIENT_TARGETS) $(SERVER_TARGETS) $(UTIL_TARGETS); do \
if test -f $$i; then \
- echo $(LIBTOOL) --mode=install $(INSTALL) $$i $(root)$(prefix)/$$i; \
- $(LIBTOOL) --mode=install $(INSTALL) $$i $(root)$(prefix)/$$i; \
- fi \
- done
- @for i in $(SERV_MODULES) ; do \
- if test -f $$i; then \
- (cd modules && ../$(LIBTOOL) --mode=install $(INSTALL) `basename $$i` $(root)$(prefix)/$$i) ; \
+ echo $(INSTALL) $$i $(root)$(prefix)/$$i; \
+ $(INSTALL) $$i $(root)$(prefix)/$$i; \
fi \
done
@for i in utilsmenu weekly ; do \
fi
clean:
- rm -f *.o *.lo parsedate.c
+ rm -f *.o parsedate.c
cleaner: clean
- rm -rf $(CLIENT_TARGETS) $(SERVER_TARGETS) $(UTIL_TARGETS) \
- modules/*.la modules/.libs so_locations
+ rm -rf $(CLIENT_TARGETS) $(SERVER_TARGETS) $(UTIL_TARGETS) *.la
distclean: cleaner
find . -name '*~' -o -name '.#*' | xargs rm -f
- rm -f Makefile sysdep.h config.cache config.log config.status *.d weekly
+ rm -f Makefile sysdep.h config.cache config/.og config.status *.d weekly
.c.d:
@echo Checking dependencies for $<
- @$(CC) -M $(CPPFLAGS) $< | sed -e 's!$*.o!$*.o $*.lo $@!' > $@
+ @$(CC) -M $(CPPFLAGS) $< | sed -e 's!$*.o!$*.o $*/.o $@!' > $@
@test -s $@ || rm -f $@
Makefile: $(srcdir)/Makefile.in config.status
weekly: $(srcdir)/weekly.in config.status
CONFIG_FILES=weekly CONFIG_HEADERS= $(SHELL) ./config.status
-LIBTOOL_DEPS = @LIBTOOL_DEPS@
-$(LIBTOOL): $(LIBTOOL_DEPS)
- $(SHELL) ./config.status --recheck
-
-include $(DEP_FILES)
echo ... running aclocal ...
$aclocal
-echo ... running libtoolize ...
-libtoolize -c --force
echo ... running autoconf ...
$autoconf
echo ... running autoheader ...
$autoheader
echo
-echo This script has been tested with autoconf 2.53, libtool 1.4d, and
+echo This script has been tested with autoconf 2.53 and
echo automake 1.5. Other versions may work, but I recommend the latest
echo compatible versions of these.
echo
-echo libtool 1.4.2 is not sufficient to build portable configure scripts;
-echo at least version 1.4d from alpha.gnu.org is needed.
-echo
-echo Also note that autoconf, automake, and libtool should all be configured
+echo Also note that autoconf and automake should be configured
echo with the same prefix.
echo
;;
esac
fi
-AC_LIBTOOL_DLOPEN
-AC_LIBTOOL_WIN32_DLL
AC_DISABLE_STATIC
-AC_PROG_LIBTOOL
-AC_SUBST(LIBTOOL_DEPS)
AC_PROG_INSTALL
AC_PROG_YACC
missing_dir=`cd $ac_aux_dir && pwd`
dnl We want to test for the following in libc before checking for their
dnl respective libraries, because some systems (like Irix) have both, and the
dnl non-libc versions may be broken.
-AC_CHECK_FUNCS(crypt dlopen gethostbyname connect)
+AC_CHECK_FUNCS(crypt gethostbyname connect)
if test "$ac_cv_func_gethostbyname" = no; then
AC_CHECK_LIB(nsl, gethostbyname)
AC_CHECK_LIB(socket, connect)
fi
-if test "$ac_cv_func_dlopen" = no; then
- AC_CHECK_LIB(dl, dlopen, [LIBS="-ldl $LIBS"
- test "$with_pam" = yes && chkpwd_LIBS="-ldl $chkpwd_LIBS"])
-fi
-
-dnl Check for HP/UX dynamic loader. This should only be in -ldld.
-AC_CHECK_LIB(dld, shl_load, LIBS="-ldld $LIBS")
-
dnl Check for Solaris realtime support
AC_CHECK_LIB(rt, sched_yield)
AC_CHECK_HEADERS(ncurses.h,,,[ ])
fi
-AC_CHECK_HEADER(resolv.h, [SMTP=modules/libsmtp.la; DOMAIN=domain.c],,
+AC_CHECK_HEADER(resolv.h, [SMTP=serv_smtp.o; DOMAIN=domain.c],,
[#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#endif],
ac_cv_func_pthread_create=yes, ac_cv_func_pthread_create=no)])
if test "$ac_cv_func_pthread_create" = yes; then
- test "$DATABASE" && TARGETS="client server utils serv_modules"
+ test "$DATABASE" && TARGETS="client server utils"
if test "x$enable_threaded_client" != xno; then
AC_DEFINE(THREADED_CLIENT)
fi
*
*/
-#ifdef DLL_EXPORT
-#define IN_LIBCIT
-#endif
-
#include "sysdep.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
-#ifdef HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-#ifdef HAVE_DL_H
-#include <dl.h>
-#include "hpsux.h"
-#endif
#include <sys/types.h>
#include <dirent.h>
#include <string.h>
return 0;
}
-void DLoader_Init(char *pathname)
+void initialize_server_extensions(void)
{
- void *fcn_handle;
- char dl_error[SIZ];
- DIR *dir;
- int i;
- struct dirent *dptr;
- char *(*h_init_fcn) (void);
- char *dl_info;
-
- char pathbuf[PATH_MAX];
-
- if ((dir = opendir(pathname)) == NULL) {
- perror("opendir");
- exit(1);
- }
- while ((dptr = readdir(dir)) != NULL) {
- if (strlen(dptr->d_name) < 4)
- continue;
-#ifndef __CYGWIN__
- if (strcasecmp(&dptr->d_name[strlen(dptr->d_name)-3], ".so"))
-#else
- if (strcasecmp(&dptr->d_name[strlen(dptr->d_name)-4], ".dll"))
-#endif
- continue;
-
- snprintf(pathbuf, PATH_MAX, "%s/%s", pathname, dptr->d_name);
- lprintf(7, "Initializing %s...\n", pathbuf);
-
-#ifdef RTLD_LAZY
- if (!(fcn_handle = dlopen(pathbuf, RTLD_LAZY)))
-#else /* OpenBSD */
- if (!(fcn_handle = dlopen(pathbuf, DL_LAZY)))
-#endif
- {
- safestrncpy(dl_error, dlerror(), sizeof dl_error);
- for (i=0; i<strlen(dl_error); ++i)
- if (!isprint(dl_error[i]))
- dl_error[i]='.';
- fprintf(stderr, "DLoader_Init dlopen failed: %s\n",
- dl_error);
- continue;
- }
- h_init_fcn = (char * (*)(void))
-#if defined(__OpenBSD__) || defined(__APPLE__)
- dlsym(fcn_handle, "_Dynamic_Module_Init");
-#else
- dlsym(fcn_handle, "Dynamic_Module_Init");
-#endif
-
- if (dlerror() != NULL) {
- fprintf(stderr, "DLoader_Init dlsym failed\n");
- continue;
- }
- dl_info = h_init_fcn();
-
- lprintf(3, "Loaded module: %s\n", dl_info);
- } /* While */
+ serv_bio_init();
+ serv_calendar_init();
+ serv_inithat_init();
+ serv_expire_init();
+ serv_imap_init();
+ serv_inetcfg_init();
+ serv_listsub_init();
+ serv_mrtg_init();
+ serv_netfilter_init();
+ serv_network_init();
+ serv_newuser_init();
+ serv_pas2_init();
+ serv_pop3_init();
+ serv_rwho_init();
+ serv_smtp_init();
+ serv_spam_init();
+ /* serv_test_init(); */
+ serv_upgrade_init();
+ serv_vandelay_init();
+ serv_vcard_init();
}
#include "server.h"
-void DLoader_Init(char *pathname);
+void initialize_server_extensions(void);
int DLoader_Exec_Cmd(char *cmdbuf);
char *Dynamic_Module_Init(void);
-char *Dynamic_Module_Init(void)
+char *serv_bio_init(void)
{
CtdlRegisterProtoHook(cmd_ebio, "EBIO", "Enter your bio");
CtdlRegisterProtoHook(cmd_rbio, "RBIO", "Read a user's bio");
/*
* Register this module with the Citadel server.
*/
-char *Dynamic_Module_Init(void)
+char *serv_calendar_init(void)
{
#ifdef CITADEL_WITH_CALENDAR_SERVICE
CtdlRegisterMessageHook(ical_obj_beforesave, EVT_BEFORESAVE);
-char *Dynamic_Module_Init(void)
+char *serv_inithat_init(void)
{
CtdlRegisterProtoHook(cmd_chat, "CHAT", "Begin real-time chat");
CtdlRegisterProtoHook(cmd_pexp, "PEXP", "Poll for express messages");
/*****************************************************************************/
-char *Dynamic_Module_Init(void)
+char *serv_expire_init(void)
{
CtdlRegisterProtoHook(cmd_expi, "EXPI", "Expire old system objects");
CtdlRegisterProtoHook(cmd_fsck, "FSCK", "Check message ref counts");
* This function is called by dynloader.c to register the IMAP module
* with the Citadel server.
*/
-char *Dynamic_Module_Init(void)
+char *serv_imap_init(void)
{
SYM_IMAP = CtdlGetDynamicSymbol();
CtdlRegisterServiceHook(config.c_imap_port,
/*****************************************************************************/
-char *Dynamic_Module_Init(void)
+char *serv_inetcfg_init(void)
{
CtdlRegisterMessageHook(inetcfg_aftersave, EVT_AFTERSAVE);
inetcfg_init();
/*
* Module entry point
*/
-char *Dynamic_Module_Init(void)
+char *serv_listsub_init(void)
{
CtdlRegisterProtoHook(cmd_subs, "SUBS", "List subscribe/unsubscribe");
return "$Id$";
}
-char *Dynamic_Module_Init(void)
+char *serv_mrtg_init(void)
{
CtdlRegisterProtoHook(cmd_mrtg, "MRTG", "Supply stats to MRTG");
return "$Id$";
}
-char *Dynamic_Module_Init(void)
+char *serv_netfilter_init(void)
{
CtdlRegisterNetprocHook(filter_the_idiots);
return "$Id$";
/*
* Module entry point
*/
-char *Dynamic_Module_Init(void)
+char *serv_network_init(void)
{
CtdlRegisterProtoHook(cmd_gnet, "GNET", "Get network config");
CtdlRegisterProtoHook(cmd_snet, "SNET", "Set network config");
}
-char *Dynamic_Module_Init(void)
+char *serv_newuser_init(void)
{
CtdlRegisterSessionHook(CopyNewUserGreetings, EVT_LOGIN);
return "$Id$";
-char *Dynamic_Module_Init(void)
+char *serv_pas2_init(void)
{
CtdlRegisterProtoHook(cmd_pas2, "PAS2", "APOP-based login");
return "$Id$";
-char *Dynamic_Module_Init(void)
+char *serv_pop3_init(void)
{
SYM_POP3 = CtdlGetDynamicSymbol();
CtdlRegisterServiceHook(config.c_pop3_port,
-char *Dynamic_Module_Init(void)
+char *serv_rwho_init(void)
{
CtdlRegisterProtoHook(cmd_rwho, "RWHO", "Display who is online");
CtdlRegisterProtoHook(cmd_hchg, "HCHG", "Masquerade hostname");
/*****************************************************************************/
-char *Dynamic_Module_Init(void)
+char *serv_smtp_init(void)
{
SYM_SMTP = CtdlGetDynamicSymbol();
-char *Dynamic_Module_Init(void)
+char *serv_spam_init(void)
{
/* (disabled built-in scanner, see above)
}
-char *Dynamic_Module_Init(void)
+char *serv_test_init(void)
{
CtdlRegisterCleanupHook(CleanupTest);
CtdlRegisterSessionHook(NewRoomTest, EVT_NEWROOM);
-char *Dynamic_Module_Init(void)
+char *serv_upgrade_init(void)
{
check_server_upgrades();
return "$Id$";
-char *Dynamic_Module_Init(void)
+char *serv_vandelay_init(void)
{
CtdlRegisterProtoHook(cmd_artv, "ARTV", "import/export data store");
return "$Id$";
-char *Dynamic_Module_Init(void)
+char *serv_vcard_init(void)
{
SYM_VCARD = CtdlGetDynamicSymbol();
CtdlRegisterSessionHook(vcard_session_startup_hook, EVT_START);
int a, i; /* General-purpose variables */
struct passwd *pw;
int drop_root_perms = 1;
- char *moddir;
struct worker_node *wnp;
size_t size;
do_command_loop);
/*
- * Load any server-side modules (plugins) available here.
+ * Load any server-side extensions available here.
*/
- lprintf(7, "Initializing loadable modules\n");
+ lprintf(7, "Initializing server extensions\n");
size = strlen(bbs_home_directory) + 9;
- if ((moddir = mallok(size)) != NULL) {
- snprintf(moddir, size, "%s/modules", bbs_home_directory);
- DLoader_Init(moddir);
- free(moddir);
- }
+ initialize_server_extensions();
/*
* The rescan pipe exists so that worker threads can be woken up and