]> code.citadel.org Git - citadel.git/blobdiff - citadel/dynloader.c
* The size constant "256" which shows up everywhere as a buffer size has now
[citadel.git] / citadel / dynloader.c
index eb521eadd0bd3bdc4e92d94259139eca84ccf4dc..52ce3e46f337980d0eab66115671b86cca822d52 100644 (file)
@@ -1,21 +1,24 @@
-/*******************************************************
+/*
+ * $Id$
  *
  * Citadel Dynamic Loading Module
- * Written by Brian Costello
- * btx@calyx.net
- *
- * $Id$
+ * Written by Brian Costello <btx@calyx.net>
  *
- ******************************************************/
-
+ */
 
 #include "sysdep.h"
 #include <stdio.h>
 #include <stdlib.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 <strings.h>
+#include <string.h>
 #include <syslog.h>
 #include <limits.h>
 #include <ctype.h>
@@ -79,7 +82,7 @@ int DLoader_Exec_Cmd(char *cmdbuf)
 void DLoader_Init(char *pathname)
 {
        void *fcn_handle;
-       char dl_error[256];
+       char dl_error[SIZ];
        DIR *dir;
        int i;
        struct dirent *dptr;
@@ -99,8 +102,10 @@ void DLoader_Init(char *pathname)
                        continue;
 
                snprintf(pathbuf, PATH_MAX, "%s/%s", pathname, dptr->d_name);
-#ifdef RTLD_NOW
-               if (!(fcn_handle = dlopen(pathbuf, RTLD_NOW)))
+               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
@@ -235,6 +240,7 @@ void CtdlRegisterServiceHook(int tcp_port,
                        void (*h_command_function) (void) )
 {
        struct ServiceFunctionHook *newfcn;
+       char message[SIZ];
 
        newfcn = (struct ServiceFunctionHook *)
            mallok(sizeof(struct ServiceFunctionHook));
@@ -246,19 +252,26 @@ void CtdlRegisterServiceHook(int tcp_port,
 
        if (sockpath != NULL) {
                newfcn->msock = ig_uds_server(sockpath, config.c_maxsessions);
+               sprintf(message, "Unix domain socket '%s': ", sockpath);
+       }
+       else if (tcp_port <= 0) {       /* port -1 to disable */
+               lprintf(7, "Service has been manually disabled, skipping\n");
+               phree(newfcn);
+               return;
        }
        else {
                newfcn->msock = ig_tcp_server(tcp_port, config.c_maxsessions);
+               sprintf(message, "TCP port %d: ", tcp_port);
        }
 
-       if (newfcn->msock >= 0) {
+       if (newfcn->msock > 0) {
                ServiceHookTable = newfcn;
-               lprintf(5, "Registered a new service (TCP port %d)\n",
-                       tcp_port);
+               strcat(message, "registered.");
+               lprintf(5, "%s\n", message);
        }
        else {
-               lprintf(2, "ERROR: could not bind to TCP port %d.\n",
-                       tcp_port);
+               strcat(message, "FAILED.");
+               lprintf(2, "%s\n", message);
                phree(newfcn);
        }
 }