VIEW_ definitions are now in libcitadel.h
authorArt Cancro <ajc@citadel.org>
Wed, 16 Jan 2008 14:42:41 +0000 (14:42 +0000)
committerArt Cancro <ajc@citadel.org>
Wed, 16 Jan 2008 14:42:41 +0000 (14:42 +0000)
Also added a version number check to libcitadel.h and to the
library itself.  citserver and webcit will refuse to run if
the linked version of libcitadel is older than the one used
at compile time.

citadel/citadel.h
citadel/config.c
citadel/server.h
libcitadel/lib/libcitadel.c
libcitadel/lib/libcitadel.h
webcit/roomops.c
webcit/webcit.h
webcit/webserver.c

index 1a759e4ffd6c47e730e3f2289f74b9502f824499..9e9b92341aef104784efea3ef6a8992a2b1c5f5c 100644 (file)
@@ -270,20 +270,6 @@ enum {
 #define LONG_MAX 2147483647L
 #endif
 
-
-/*
- * Views
- */
-#define        VIEW_BBS                0       /* Bulletin board view */
-#define VIEW_MAILBOX           1       /* Mailbox summary */
-#define VIEW_ADDRESSBOOK       2       /* Address book view */
-#define VIEW_CALENDAR          3       /* Calendar view */
-#define VIEW_TASKS             4       /* Tasks view */
-#define VIEW_NOTES             5       /* Notes view */
-#define        VIEW_WIKI               6       /* Wiki view */
-#define VIEW_CALBRIEF          7       /* Brief Calendar view */
-#define VIEW_JOURNAL           8       /* Journal view (not yet implemented in native clients) */
-
 /*
  * Authentication modes
  */
index 48e04420cb160bdc6975f0544011eff2eb149bfd..cc1e01091fd86a81ff836e8840f6afb1884c3156 100644 (file)
@@ -14,6 +14,7 @@
 #include <errno.h>
 #include <string.h>
 #include <limits.h>
+#include <libcitadel.h>
 #include "citadel.h"
 #include "server.h"
 #include "config.h"
@@ -52,6 +53,7 @@ void get_config(void) {
                perror(file_citadel_config);
                exit(CTDLEXIT_CONFIG);
        }
+
 #ifndef __CYGWIN__
        if (st.st_uid != CTDLUID) {
                fprintf(stderr, "%s must be owned by uid="F_UID_T" but "F_UID_T" owns it!\n", 
@@ -65,16 +67,25 @@ void get_config(void) {
                exit(CTDLEXIT_CONFIG);
        }
 #endif
+
        fclose(cfp);
 
+       /* Ensure that we are linked to the correct version of libcitadel */
+       if (libcitadel_version_number() < LIBCITADEL_VERSION_NUMBER) {
+               fprintf(stderr, "    You are running libcitadel version %d.%02d\n",
+                       (libcitadel_version_number() / 100), (libcitadel_version_number() % 100));
+               fprintf(stderr, "citserver was compiled against version %d.%02d\n",
+                       (LIBCITADEL_VERSION_NUMBER / 100), (LIBCITADEL_VERSION_NUMBER % 100));
+               exit(CTDLEXIT_LIBCITADEL);
+       }
+
+
+       /* Check to see whether 'setup' must first be run to update data file formats */
        if (config.c_setup_level < REV_MIN) {
-               fprintf(stderr, "config: Your data files are out of date.  ");
-               fprintf(stderr, "Run setup to update them.\n");
-               fprintf(stderr,
-                       "        This program requires level %d.%02d\n",
+               fprintf(stderr, "Your data files are out of date.  Run setup to update them.\n");
+               fprintf(stderr, "        This program requires level %d.%02d\n",
                        (REV_LEVEL / 100), (REV_LEVEL % 100));
-               fprintf(stderr,
-                       "        Data files are currently at %d.%02d\n",
+               fprintf(stderr, "        Data files are currently at %d.%02d\n",
                        (config.c_setup_level / 100),
                        (config.c_setup_level % 100));
                exit(CTDLEXIT_OOD);
index 9c5fabd79faf971fbc4941f585b9510fc40b9ffd..820bdb17e9dbcb97c7a6abc3d191b7ddb30f0b45 100644 (file)
@@ -53,6 +53,7 @@ struct CtdlMessage {
 #define CTDLEXIT_HOME          103     /* Citadel home directory not found */
 #define CTDLEXIT_OOD           104     /* Out Of Date config - rerun setup */
 #define CTDLEXIT_DB            105     /* Unable to initialize database */
+#define CTDLEXIT_LIBCITADEL    106     /* Incorrect version of libcitadel */
 
 
 
index 70457b73823c2ac26296cba287cf57589db09cba..0a6c9f179fbb09d15e8daa186caacef6bbcdd5d6 100644 (file)
@@ -18,3 +18,6 @@ char *libcitadel_version_string(void) {
        return "$Id$";
 }
 
+int libcitadel_version_number(void) {
+       return LIBCITADEL_VERSION_NUMBER;
+}
index 66c1134ccffba0f718306e58dbd76944f91fef97..d74e80afb2870668c857db2c2032d18885e83606 100644 (file)
@@ -3,6 +3,9 @@
  *
  */
 
+
+#define LIBCITADEL_VERSION_NUMBER      101
+
 /*
  * Here's a bunch of stupid magic to make the MIME parser portable.
  */
 #define SIZ    4096
 #endif
 
+
+/*
+ * Views
+ */
+#define        VIEW_BBS                0       /* Bulletin board view */
+#define VIEW_MAILBOX           1       /* Mailbox summary */
+#define VIEW_ADDRESSBOOK       2       /* Address book view */
+#define VIEW_CALENDAR          3       /* Calendar view */
+#define VIEW_TASKS             4       /* Tasks view */
+#define VIEW_NOTES             5       /* Notes view */
+#define        VIEW_WIKI               6       /* Wiki view */
+#define VIEW_CALBRIEF          7       /* Brief Calendar view */
+#define VIEW_JOURNAL           8       /* Journal view (not yet implemented in native clients) */
+
+
 #ifndef IsEmptyStr
 #define IsEmptyStr(a) ((a)[0] == '\0')
 #endif
@@ -19,6 +37,7 @@
  */
 
 char *libcitadel_version_string(void);
+int libcitadel_version_number(void);
 
 
 /*
index bc6e81053cbabe83ee859ba86e54f91207a719a8..8a03c30bb39e9fb3fbb8b148f6dfeeefd468e259 100644 (file)
@@ -1,19 +1,16 @@
 /*
  * $Id$
+ * Lots of different room-related operations.
  */
-/**
- * \defgroup RoomOps Lots of different room-related operations.
- * \ingroup CitadelCommunitacion
- */
-/*@{*/
+
 #include "webcit.h"
 
 char floorlist[128][SIZ]; /**< list of our floor names */
 
 char *viewdefs[9]; /**< the different kinds of available views */
 
-/**
- * \brief initialize the viewdefs with localized strings
+/*
+ * Initialize the viewdefs with localized strings
  */
 void initialize_viewdefs(void) {
        viewdefs[0] = _("Bulletin Board");
@@ -27,10 +24,8 @@ void initialize_viewdefs(void) {
        viewdefs[8] = _("Journal");
 }
 
-/**
- * \brief      Determine which views are allowed as the default for creating a new room.
- *
- * \param      which_view      The view ID being queried.
+/*
+ * Determine which views are allowed as the default for creating a new room.
  */
 int is_view_allowed_as_default(int which_view)
 {
@@ -49,8 +44,8 @@ int is_view_allowed_as_default(int which_view)
 }
 
 
-/**
- * \brief load the list of floors
+/*
+ * load the list of floors
  */
 void load_floorlist(void)
 {
@@ -72,10 +67,8 @@ void load_floorlist(void)
 }
 
 
-/**
- * \brief      Free a session's march list
- *
- * \param      wcf             Pointer to session being cleared
+/*
+ * Free a session's march list
  */
 void free_march_list(struct wcsession *wcf)
 {
@@ -91,8 +84,8 @@ void free_march_list(struct wcsession *wcf)
 
 
 
-/**
- * \brief remove a room from the march list
+/*
+ * remove a room from the march list
  */
 void remove_march(char *aaa)
 {
@@ -122,9 +115,8 @@ void remove_march(char *aaa)
 
 
 
-/**
- * \brief display rooms in tree structure???
- * \param rp the roomlist to build a tree from
+/*
+ * display rooms in tree structure
  */
 void room_tree_list(struct roomlisting *rp)
 {
index dbd47b9d7556f1fd21376cc2b231754e077f345f..418c541fd3111e85813a55cbdc34e392e4555234 100644 (file)
@@ -784,17 +784,6 @@ extern char *hourname[];   /**< Names of hours (12am, 1am, etc.) */
 void http_datestring(char *buf, size_t n, time_t xtime);
 
 
-/** Views (from citadel.h) */
-#define        VIEW_BBS                0       /**< Traditional Citadel BBS view */
-#define VIEW_MAILBOX           1       /**< Mailbox summary */
-#define VIEW_ADDRESSBOOK       2       /**< Address book view */
-#define VIEW_CALENDAR          3       /**< Calendar view */
-#define VIEW_TASKS             4       /**< Tasks view */
-#define VIEW_NOTES             5       /**<  Notes view */
-#define VIEW_WIKI              6       /**<  Wiki view */
-#define VIEW_CALBRIEF          7       /**< Brief Calendar view */
-#define VIEW_JOURNAL            8       /**< Journal view (not yet implemented in webcit) */
-
 /* These should be empty, but we have them for testing */
 #define DEFAULT_HTTPAUTH_USER  ""
 #define DEFAULT_HTTPAUTH_PASS  ""
index 82d9e396cce9629bc7c02ca305f7762dd4ff2e45..22e525849251656a1b84cdd9a11516f1d28f64f9 100644 (file)
@@ -1,14 +1,12 @@
 /*
  * $Id$
- */
-/**
- * \defgroup Webserver This contains a simple multithreaded TCP server manager.  It sits around
+ *
+ * This contains a simple multithreaded TCP server manager.  It sits around
  * waiting on the specified port for incoming HTTP connections.  When a
  * connection is established, it calls context_loop() from context_loop.c.
- * \ingroup WebcitHttpServer
+ *
  */
 
-/*@{*/
 #include "webcit.h"
 #include "webserver.h"
 
 int vsnprintf(char *buf, size_t max, const char *fmt, va_list argp);
 #endif
 
-int verbosity = 9;             /**< Logging level */
-int msock;                     /**< master listening socket */
-int is_https = 0;              /**< Nonzero if I am an HTTPS service */
-int follow_xff = 0;            /**< Follow X-Forwarded-For: header */
-int home_specified = 0;                /**< did the user specify a homedir? */
-int time_to_die = 0;            /**< Nonzero if server is shutting down */
+int verbosity = 9;             /* Logging level */
+int msock;                     /* master listening socket */
+int is_https = 0;              /* Nonzero if I am an HTTPS service */
+int follow_xff = 0;            /* Follow X-Forwarded-For: header */
+int home_specified = 0;                /* did the user specify a homedir? */
+int time_to_die = 0;            /* Nonzero if server is shutting down */
 extern void *context_loop(int);
 extern void *housekeeping_loop(void);
 extern pthread_mutex_t SessionListMutex;
@@ -37,17 +35,17 @@ char file_crpt_file_key[PATH_MAX]="";
 char file_crpt_file_csr[PATH_MAX]="";
 char file_crpt_file_cer[PATH_MAX]="";
 
-char socket_dir[PATH_MAX];                     /**< where to talk to our citadel server */
-static const char editor_absolut_dir[PATH_MAX]=EDITORDIR;      /**< nailed to what configure gives us. */
-static char static_dir[PATH_MAX];              /**< calculated on startup */
-static char static_local_dir[PATH_MAX];                /**< calculated on startup */
-char  *static_dirs[]={                         /**< needs same sort order as the web mapping */
-       (char*)static_dir,                      /** our templates on disk */
-       (char*)static_local_dir,                /** user provided templates disk */
-       (char*)editor_absolut_dir               /** the editor on disk */
+char socket_dir[PATH_MAX];                     /* where to talk to our citadel server */
+static const char editor_absolut_dir[PATH_MAX]=EDITORDIR;      /* nailed to what configure gives us. */
+static char static_dir[PATH_MAX];              /* calculated on startup */
+static char static_local_dir[PATH_MAX];                /* calculated on startup */
+char  *static_dirs[]={                         /* needs same sort order as the web mapping */
+       (char*)static_dir,                      /* our templates on disk */
+       (char*)static_local_dir,                /* user provided templates disk */
+       (char*)editor_absolut_dir               /* the editor on disk */
 };
 
-/**
+/*
  * Subdirectories from which the client may request static content
  *
  * (If you add more, remember to increment 'ndirs' below)
@@ -61,21 +59,22 @@ char *static_content_dirs[] = {
 int ndirs=3;
 
 
-char *server_cookie = NULL;    /**< our Cookie connection to the client */
-int http_port = PORT_NUM;      /**< Port to listen on */
-char *ctdlhost = DEFAULT_HOST; /**< our name */
-char *ctdlport = DEFAULT_PORT; /**< our Port */
-int setup_wizard = 0;          /**< should we run the setup wizard? \todo */
-char wizard_filename[PATH_MAX];        /**< where's the setup wizard? */
-int running_as_daemon = 0;     /**< should we deamonize on startup? */
+char *server_cookie = NULL;    /* our Cookie connection to the client */
+int http_port = PORT_NUM;      /* Port to listen on */
+char *ctdlhost = DEFAULT_HOST; /* our name */
+char *ctdlport = DEFAULT_PORT; /* our Port */
+int setup_wizard = 0;          /* should we run the setup wizard? \todo */
+char wizard_filename[PATH_MAX];        /* where's the setup wizard? */
+int running_as_daemon = 0;     /* should we deamonize on startup? */
 
 
-/** 
- * \brief This is a generic function to set up a master socket for listening on
+/* 
+ * This is a generic function to set up a master socket for listening on
  * a TCP port.  The server shuts down if the bind fails.
- * \param ip_addr ip to bind to
- * \param port_number the port to bind to 
- * \param queue_len Number of incoming connections to allow in the queue
+ *
+ * ip_addr     IP address to bind
+ * port_number port number to bind
+ * queue_len   number of incoming connections to allow in the queue
  */
 int ig_tcp_server(char *ip_addr, int port_number, int queue_len)
 {
@@ -105,7 +104,7 @@ int ig_tcp_server(char *ip_addr, int port_number, int queue_len)
                lprintf(1, "Can't create a socket: %s\n", strerror(errno));
                exit(WC_EXIT_BIND);
        }
-       /** Set some socket options that make sense. */
+       /* Set some socket options that make sense. */
        i = 1;
        setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));
 
@@ -124,7 +123,7 @@ int ig_tcp_server(char *ip_addr, int port_number, int queue_len)
 
 
 
-/**
+/*
  * \brief Create a Unix domain socket and listen on it
  * \param sockpath file name of the unix domain socket
  * \param queue_len Number of incoming connections to allow in the queue
@@ -141,7 +140,7 @@ int ig_uds_server(char *sockpath, int queue_len)
 
        i = unlink(sockpath);
        if (i != 0) if (errno != ENOENT) {
-               lprintf(1, "citserver: can't unlink %s: %s\n",
+               lprintf(1, "webserver: can't unlink %s: %s\n",
                        sockpath, strerror(errno));
                exit(WC_EXIT_BIND);
        }
@@ -152,19 +151,19 @@ int ig_uds_server(char *sockpath, int queue_len)
 
        s = socket(AF_UNIX, SOCK_STREAM, 0);
        if (s < 0) {
-               lprintf(1, "citserver: Can't create a socket: %s\n",
+               lprintf(1, "webserver: Can't create a socket: %s\n",
                        strerror(errno));
                exit(WC_EXIT_BIND);
        }
 
        if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
-               lprintf(1, "citserver: Can't bind: %s\n",
+               lprintf(1, "webserver: Can't bind: %s\n",
                        strerror(errno));
                exit(WC_EXIT_BIND);
        }
 
        if (listen(s, actual_queue_len) < 0) {
-               lprintf(1, "citserver: Can't listen: %s\n",
+               lprintf(1, "webserver: Can't listen: %s\n",
                        strerror(errno));
                exit(WC_EXIT_BIND);
        }
@@ -176,7 +175,7 @@ int ig_uds_server(char *sockpath, int queue_len)
 
 
 
-/**
+/*
  * \brief Read data from the client socket.
  * \param sock socket fd to read from
  * \param buf buffer to read into 
@@ -231,7 +230,7 @@ int client_read_to(int sock, char *buf, int bytes, int timeout)
        return (1);
 }
 
-/**
+/*
  * \brief write data to the client
  * \param buf data to write to the client
  * \param count size of buffer
@@ -276,7 +275,7 @@ ssize_t client_write(const void *buf, size_t count)
        return (write(WC->http_sock, buf, count));
 }
 
-/**
+/*
  * \brief Begin buffering HTTP output so we can transmit it all in one write operation later.
  */
 void begin_burst(void)
@@ -291,26 +290,26 @@ void begin_burst(void)
 }
 
 
-/**
+/*
  * \brief uses the same calling syntax as compress2(), but it
  * creates a stream compatible with HTTP "Content-encoding: gzip"
  */
 #ifdef HAVE_ZLIB
-#define DEF_MEM_LEVEL 8 /**< memlevel??? */
-#define OS_CODE 0x03   /**< unix */
-int ZEXPORT compress_gzip(Bytef * dest,         /**< compressed buffer*/
-                         size_t * destLen,     /**< length of the compresed data */
-                         const Bytef * source, /**< source to encode */
-                         uLong sourceLen,      /**< length of source to encode */
-                         int level)            /**< compression level */
+#define DEF_MEM_LEVEL 8 /*< memlevel??? */
+#define OS_CODE 0x03   /*< unix */
+int ZEXPORT compress_gzip(Bytef * dest,         /*< compressed buffer*/
+                         size_t * destLen,     /*< length of the compresed data */
+                         const Bytef * source, /*< source to encode */
+                         uLong sourceLen,      /*< length of source to encode */
+                         int level)            /*< compression level */
 {
-       const int gz_magic[2] = { 0x1f, 0x8b }; /** gzip magic header */
+       const int gz_magic[2] = { 0x1f, 0x8b }; /* gzip magic header */
 
-       /** write gzip header */
+       /* write gzip header */
        snprintf((char *) dest, *destLen, 
                 "%c%c%c%c%c%c%c%c%c%c",
                 gz_magic[0], gz_magic[1], Z_DEFLATED,
-                0 /*flags */ , 0, 0, 0, 0 /*time */ , 0 /** xflags */ ,
+                0 /*flags */ , 0, 0, 0, 0 /*time */ , 0 /* xflags */ ,
                 OS_CODE);
 
        /* normal deflate */
@@ -356,7 +355,7 @@ int ZEXPORT compress_gzip(Bytef * dest,         /**< compressed buffer*/
 }
 #endif
 
-/**
+/*
  * \brief Finish buffering HTTP output.  [Compress using zlib and] output with a Content-Length: header.
  */
 void end_burst(void)
@@ -405,7 +404,7 @@ void end_burst(void)
 
 
 
-/**
+/*
  * \brief Read data from the client socket with default timeout.
  * (This is implemented in terms of client_read_to() and could be
  * justifiably moved out of sysdep.c)
@@ -419,7 +418,7 @@ int client_read(int sock, char *buf, int bytes)
 }
 
 
-/**
+/*
  * \brief Get a LF-terminated line of text from the client.
  * (This is implemented in terms of client_read() and could be
  * justifiably moved out of sysdep.c)
@@ -432,23 +431,23 @@ int client_getln(int sock, char *buf, int bufsiz)
 {
        int i, retval;
 
-       /** Read one character at a time.*/
+       /* Read one character at a time.*/
        for (i = 0;; i++) {
                retval = client_read(sock, &buf[i], 1);
                if (retval != 1 || buf[i] == '\n' || i == (bufsiz-1))
                        break;
                if ( (!isspace(buf[i])) && (!isprint(buf[i])) ) {
-                       /** Non printable character recieved from client */
+                       /* Non printable character recieved from client */
                        return(-1);
                }
        }
 
-       /** If we got a long line, discard characters until the newline. */
+       /* If we got a long line, discard characters until the newline. */
        if (i == (bufsiz-1))
                while (buf[i] != '\n' && retval == 1)
                        retval = client_read(sock, &buf[i], 1);
 
-       /**
+       /*
         * Strip any trailing non-printable characters.
         */
        buf[i] = 0;
@@ -458,7 +457,7 @@ int client_getln(int sock, char *buf, int bufsiz)
        return (retval);
 }
 
-/**
+/*
  * \brief shut us down the regular way.
  * param signum the signal we want to forward
  */
@@ -470,7 +469,7 @@ void graceful_shutdown_watcher(int signum) {
                exit(0);
 }
 
-/**
+/*
  * \brief shut us down the regular way.
  * param signum the signal we want to forward
  */
@@ -492,7 +491,7 @@ void graceful_shutdown(int signum) {
 }
 
 
-/**
+/*
  * \brief      Start running as a daemon.  
  *
  * param       do_close_stdio          Only close stdio if set.
@@ -596,22 +595,22 @@ void start_daemon(char *pid_file)
        exit(WEXITSTATUS(status));
 }
 
-/**
+/*
  * \brief      Spawn an additional worker thread into the pool.
  */
 void spawn_another_worker_thread()
 {
-       pthread_t SessThread;   /**< Thread descriptor */
-       pthread_attr_t attr;    /**< Thread attributes */
+       pthread_t SessThread;   /*< Thread descriptor */
+       pthread_attr_t attr;    /*< Thread attributes */
        int ret;
 
        lprintf(3, "Creating a new thread\n");
 
-       /** set attributes for the new thread */
+       /* set attributes for the new thread */
        pthread_attr_init(&attr);
        pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
 
-       /**
+       /*
         * Our per-thread stacks need to be bigger than the default size, otherwise
         * the MIME parser crashes on FreeBSD, and the IMAP service crashes on
         * 64-bit Linux.
@@ -622,27 +621,27 @@ void spawn_another_worker_thread()
                pthread_attr_destroy(&attr);
        }
 
-       /** now create the thread */
+       /* now create the thread */
        if (pthread_create(&SessThread, &attr,
                           (void *(*)(void *)) worker_entry, NULL)
            != 0) {
                lprintf(1, "Can't create thread: %s\n", strerror(errno));
        }
 
-       /** free up the attributes */
+       /* free up the attributes */
        pthread_attr_destroy(&attr);
 }
 
-/**
+/*
  * \brief Here's where it all begins.
  * \param argc number of commandline args
  * \param argv the commandline arguments
  */
 int main(int argc, char **argv)
 {
-       pthread_t SessThread;   /**< Thread descriptor */
-       pthread_attr_t attr;    /**< Thread attributes */
-       int a, i;                       /**< General-purpose variables */
+       pthread_t SessThread;   /*< Thread descriptor */
+       pthread_attr_t attr;    /*< Thread attributes */
+       int a, i;                       /*< General-purpose variables */
        char tracefile[PATH_MAX];
        char ip_addr[256]="0.0.0.0";
        char dirbuffer[PATH_MAX]="";
@@ -658,14 +657,23 @@ int main(int argc, char **argv)
        char *locale = NULL;
        char *mo = NULL;
 #endif /* ENABLE_NLS */
-       char uds_listen_path[PATH_MAX]; /**< listen on a unix domain socket? */
+       char uds_listen_path[PATH_MAX]; /*< listen on a unix domain socket? */
+
+       /* Ensure that we are linked to the correct version of libcitadel */
+       if (libcitadel_version_number() < LIBCITADEL_VERSION_NUMBER) {
+               fprintf(stderr, " You are running libcitadel version %d.%02d\n",
+                       (libcitadel_version_number() / 100), (libcitadel_version_number() % 100));
+               fprintf(stderr, "WebCit was compiled against version %d.%02d\n",
+                       (LIBCITADEL_VERSION_NUMBER / 100), (LIBCITADEL_VERSION_NUMBER % 100));
+               return(1);
+       }
 
        strcpy(uds_listen_path, "");
 
        if (getenv("TZ") == NULL)
                putenv("TZ=UTC");
 
-       /** Parse command line */
+       /* Parse command line */
 #ifdef HAVE_OPENSSL
        while ((a = getopt(argc, argv, "h:i:p:t:x:dD:cfs")) != EOF)
 #else
@@ -757,7 +765,7 @@ int main(int argc, char **argv)
                signal(SIGHUP, graceful_shutdown);
        }
 
-       /** Tell 'em who's in da house */
+       /* Tell 'em who's in da house */
        lprintf(1, PACKAGE_STRING "\n");
        lprintf(1, "Copyright (C) 1996-2008 by the Citadel development team.\n"
                "This software is distributed under the terms of the "
@@ -765,7 +773,7 @@ int main(int argc, char **argv)
        );
 
 
-       /** initialize the International Bright Young Thing */
+       /* initialize the International Bright Young Thing */
 #ifdef ENABLE_NLS
        initialize_locales();
        locale = setlocale(LC_ALL, "");
@@ -809,7 +817,7 @@ int main(int argc, char **argv)
                 "%s/citadel.cer",
                 ctdl_key_dir);
 
-       /** we should go somewhere we can leave our coredump, if enabled... */
+       /* we should go somewhere we can leave our coredump, if enabled... */
        lprintf(9, "Changing directory to %s\n", socket_dir);
        if (chdir(webcitdir) != 0) {
                perror("chdir");
@@ -817,7 +825,7 @@ int main(int argc, char **argv)
        initialize_viewdefs();
        initialize_axdefs();
 
-       /**
+       /*
         * Set up a place to put thread-specific data.
         * We only need a single pointer per thread - it points to the
         * wcsession struct to which the thread is currently bound.
@@ -827,7 +835,7 @@ int main(int argc, char **argv)
        }
        InitialiseSemaphores ();
 
-       /**
+       /*
         * Set up a place to put thread-specific SSL data.
         * We don't stick this in the wcsession struct because SSL starts
         * up before the session is bound, and it gets torn down between
@@ -839,7 +847,7 @@ int main(int argc, char **argv)
        }
 #endif
 
-       /**
+       /*
         * Bind the server to our favorite port.
         * There is no need to check for errors, because ig_tcp_server()
         * exits if it doesn't succeed.
@@ -859,7 +867,7 @@ int main(int argc, char **argv)
 
        pthread_mutex_init(&SessionListMutex, NULL);
 
-       /**
+       /*
         * Start up the housekeeping thread
         */
        pthread_attr_init(&attr);
@@ -868,7 +876,7 @@ int main(int argc, char **argv)
                       (void *(*)(void *)) housekeeping_loop, NULL);
 
 
-       /**
+       /*
         * If this is an HTTPS server, fire up SSL
         */
 #ifdef HAVE_OPENSSL
@@ -877,7 +885,7 @@ int main(int argc, char **argv)
        }
 #endif
 
-       /** Start a few initial worker threads */
+       /* Start a few initial worker threads */
        for (i = 0; i < (MIN_WORKER_THREADS); ++i) {
                spawn_another_worker_thread();
        }
@@ -888,7 +896,7 @@ int main(int argc, char **argv)
 }
 
 
-/**
+/*
  * Entry point for worker threads
  */
 void worker_entry(void)
@@ -906,7 +914,7 @@ void worker_entry(void)
        FD_SET(msock, &readset);
 
        do {
-               /** Only one thread can accept at a time */
+               /* Only one thread can accept at a time */
                fail_this_transaction = 0;
                ssock = -1; 
                errno = EAGAIN;
@@ -972,12 +980,12 @@ void worker_entry(void)
                        lprintf(2, "inbetween.");
                        pthread_exit(NULL);
                } else { // Got it? do some real work!
-                       /** Set the SO_REUSEADDR socket option */
+                       /* Set the SO_REUSEADDR socket option */
                        i = 1;
                        setsockopt(ssock, SOL_SOCKET, SO_REUSEADDR,
                                   &i, sizeof(i));
 
-                       /** If we are an HTTPS server, go crypto now. */
+                       /* If we are an HTTPS server, go crypto now. */
 #ifdef HAVE_OPENSSL
                        if (is_https) {
                                if (starttls(ssock) != 0) {
@@ -989,17 +997,17 @@ void worker_entry(void)
 
                        if (fail_this_transaction == 0) {
 
-                               /** Perform an HTTP transaction... */
+                               /* Perform an HTTP transaction... */
                                context_loop(ssock);
 
-                               /** Shut down SSL/TLS if required... */
+                               /* Shut down SSL/TLS if required... */
 #ifdef HAVE_OPENSSL
                                if (is_https) {
                                        endtls();
                                }
 #endif
 
-                               /** ...and close the socket. */
+                               /* ...and close the socket. */
                                lingering_close(ssock);
                        }
 
@@ -1011,7 +1019,7 @@ void worker_entry(void)
        pthread_exit(NULL);
 }
 
-/**
+/*
  * \brief logprintf. log messages 
  * logs to stderr if loglevel is lower than the verbosity set at startup
  * \param loglevel level of the message
@@ -1032,7 +1040,7 @@ int lprintf(int loglevel, const char *format, ...)
 }
 
 
-/**
+/*
  * \brief print the actual stack frame.
  */
 void wc_backtrace(void)