* Unfinished code is now disabled.
authorArt Cancro <ajc@citadel.org>
Mon, 28 Jan 2008 16:25:50 +0000 (16:25 +0000)
committerArt Cancro <ajc@citadel.org>
Mon, 28 Jan 2008 16:25:50 +0000 (16:25 +0000)
  To enable it, do 'CFLAGS=-DTECH_PREVIEW' prior to configure.
  This will activate the Jabber and Wiki modules.
* Citadel and WebCit configure scripts now check to make sure that
  libcitadel is current enough.
* Cleaned up some compiler warnings.

12 files changed:
citadel/citadel.h
citadel/configure.ac
citadel/modules/jabber/serv_xmpp.c
citadel/msgbase.c
citadel/tuiconfig.c
citadel/user_ops.c
libcitadel/lib/libcitadel.h
webcit/configure.ac
webcit/preferences.c
webcit/roomops.c
webcit/siteconfig.c
webcit/webcit.h

index 9e9b92341aef104784efea3ef6a8992a2b1c5f5c..f646fae3c2e652e2f0358a5880f8fffe95db65b2 100644 (file)
@@ -50,6 +50,7 @@ extern "C" {
 #define REV_LEVEL      725             /* This version */
 #define REV_MIN                591             /* Oldest compatible database */
 #define EXPORT_REV_MIN 725             /* Oldest compatible export files */
+#define LIBCITADEL_MIN 103             /* Minimum required version of libcitadel */
 
 #define SERVER_TYPE 0                  /* zero for stock Citadel; other developers please
                                           obtain SERVER_TYPE codes for your implementations */
index 8a3d904f7a668e945c0f757f36cd3dd8c3eeb552..e3d51730c3ef9d0ec53670ad515ce5aad4108489 100644 (file)
@@ -405,7 +405,6 @@ dnl Check for libcitadel
 AC_CHECK_HEADER(libcitadel.h,
        [AC_CHECK_LIB(citadel, libcitadel_version_string,
                [
-                       AC_MSG_RESULT(OK)
                        LIBS="-lcitadel $LIBS"
                ],
                [
@@ -420,6 +419,28 @@ AC_CHECK_HEADER(libcitadel.h,
 
 
 
+dnl Check to see if libcitadel is new enough
+AC_MSG_CHECKING(checking libcitadel version)
+AC_TRY_RUN(
+       [
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <libcitadel.h>
+#include "citadel.h"
+main() {
+        if (LIBCITADEL_VERSION_NUMBER >= LIBCITADEL_MIN) {
+               return(0);
+       }
+       return(1);
+}
+       ], 
+       AC_MSG_RESULT(ok),
+       AC_MSG_ERROR(libcitadel is too old.  Please upgrade it first.)
+)
+
+
+
 # The big search for OpenSSL
 if test "$with_ssl" != "no"; then
        saved_LIBS="$LIBS"
index 6fa8a66b9172ee5105979dd8aa045d043c6a47b8..f131c988a45184864504bad8bbae0ea5cb6cd21b 100644 (file)
@@ -480,6 +480,7 @@ const char *CitadelServiceXMPP="XMPP";
 CTDL_MODULE_INIT(jabber)
 {
        if (!threading) {
+#ifdef TECH_PREVIEW
 #ifdef HAVE_EXPAT
                CtdlRegisterServiceHook(config.c_xmpp_c2s_port,
                                        NULL,
@@ -495,6 +496,7 @@ CTDL_MODULE_INIT(jabber)
        #else
                lprintf(CTDL_INFO, "This server is missing the Expat XML parser.  Jabber service will be disabled.\n");
 #endif
+#endif /* TECH_PREVIEW */
        }
 
        /* return our Subversion id for the Log */
index 15fbd3993b02c2f031e069207882d6a096147a6c..6489e6528c759d4628120a826fc58b0eb91201cb 100644 (file)
@@ -3114,7 +3114,7 @@ int CtdlDoIHavePermissionToPostInThisRoom(char *errmsgbuf,
                        snprintf(errmsgbuf, n, "Not logged in Moderation feature not yet implemented!");
                        return (ERROR + NOT_LOGGED_IN);
                }
-               if (CC->room.QRflags2 & QR2_SMTP_PUBLIC == 0){
+               if ((CC->room.QRflags2 & QR2_SMTP_PUBLIC) == 0) {
                        SpoolControl *sc;
                        char filename[SIZ];
                        int found;
index 314704894d0b5cb041fd0583c8168f3d575950cd..c1104df8db10e72380ca06cc1e0f5f6f5f718d70 100644 (file)
@@ -171,10 +171,12 @@ void do_system_configuration(CtdlIPC *ipc)
        strprompt("SMTPS server port (-1 to disable)", &sc[41][0], 5);
        strprompt("Postfix TCP Dictionary Port server port (-1 to disable)", &sc[50][0], 5);
        strprompt("ManageSieve server port (-1 to disable)", &sc[51][0], 5);
-       strprompt("XMPP (Jabber) client to server port (-1 to disable)", &sc[62][0], 5);
 
+#ifdef TECH_PREVIEW
+       strprompt("XMPP (Jabber) client to server port (-1 to disable)", &sc[62][0], 5);
        /* No prompt because we don't implement this service yet, it's just a placeholder */
        /* strprompt("XMPP (Jabber) server to server port (-1 to disable)", &sc[63][0], 5); */
+#endif
 
        /* This logic flips the question around, because it's one of those
         * situations where 0=yes and 1=no
index 974e1da8b51187fc9a60357de46dbf8f4ab342e6..10fcb3f47d1fc605cf9e07674734e8354679bc52 100644 (file)
@@ -413,7 +413,8 @@ int CtdlLoginExistingUser(char *authname, char *trythisname)
                 * If not found, make one attempt to create it.
                 */
                found_user = getuserbyuid(&CC->user, pd.pw_uid);
-               lprintf(CTDL_DEBUG, "found it: uid=%ld, gecos=%s here: %ld\n", (long)pd.pw_uid, pd.pw_gecos, found_user);
+               lprintf(CTDL_DEBUG, "found it: uid=%ld, gecos=%s here: %d\n",
+                       (long)pd.pw_uid, pd.pw_gecos, found_user);
                if (found_user != 0) {
                        create_user(username, 0);
                        found_user = getuserbyuid(&CC->user, pd.pw_uid);
index 9b8462be61febea0a83b6324adbd895590e864de..73813738dd053d3cbc7196fd40a4f5b717f97d32 100644 (file)
@@ -4,7 +4,7 @@
  */
 
 
-#define LIBCITADEL_VERSION_NUMBER      102
+#define LIBCITADEL_VERSION_NUMBER      103
 
 /*
  * Here's a bunch of stupid magic to make the MIME parser portable.
@@ -15,7 +15,8 @@
 
 
 /*
- * Views
+ * View definitions.
+ * Note that not all views are implemented in all clients.
  */
 #define        VIEW_BBS                0       /* Bulletin board view */
 #define VIEW_MAILBOX           1       /* Mailbox summary */
@@ -25,7 +26,7 @@
 #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) */
+#define VIEW_JOURNAL           8       /* Journal view */
 
 
 #ifndef IsEmptyStr
index 80ff049fe53d0e97fbebf65c2933efda254f46d9..39626b38b8855ef77aed46341608c132d3e874e5 100644 (file)
@@ -105,7 +105,6 @@ dnl Check for libcitadel
 AC_CHECK_HEADER(libcitadel.h,
        [AC_CHECK_LIB(citadel, libcitadel_version_string,
                [
-                       AC_MSG_RESULT(OK)
                        LIBS="-lcitadel $LIBS"
                ],
                [
@@ -119,6 +118,24 @@ AC_CHECK_HEADER(libcitadel.h,
 )
 
 
+dnl Check to see if libcitadel is new enough
+AC_MSG_CHECKING(checking libcitadel version)
+AC_TRY_RUN(
+       [
+#include "webcit.h"
+main() {
+        if (LIBCITADEL_VERSION_NUMBER >= LIBCITADEL_MIN) {
+               return(0);
+       }
+       return(1);
+}
+       ], 
+       AC_MSG_RESULT(ok),
+       AC_MSG_ERROR(libcitadel is too old.  Please upgrade it first.)
+)
+
+
+
 webcit_with_calendar_service=no
 dnl Checks for the libical calendaring library.
 if test "x$with_libical" != xno ; then
index 87026fe8b5dfd91d588d78e42fa05d474812787d..d39829931b5b596d3f3739cdf3fa7a36ca28f2e5 100644 (file)
@@ -1,28 +1,21 @@
 /*
  * $Id$
- */
-/**
- * \defgroup ManagePrefs Manage user preferences with a little help from the Citadel server.
- * \ingroup CitadelConfig
+ *
+ * Manage user preferences with a little help from the Citadel server.
  *
  */
-/*@{*/
+
 #include "webcit.h"
 #include "webserver.h"
 #include "groupdav.h"
 
-
-//// tmp
-#include <stdio.h>
-
-/**
- * \brief display preferences dialog
+/*
+ * display preferences dialog
  */
 void load_preferences(void) {
        char buf[SIZ];
        long msgnum = 0L;
        char key[SIZ], value[SIZ];
-       char *pBuf;
        
        serv_printf("GOTO %s", USERCONFIGROOM);
        serv_getln(buf, sizeof buf);
@@ -56,7 +49,7 @@ void load_preferences(void) {
                }
        }
 
-       /** Go back to the room we're supposed to be in */
+       /* Go back to the room we're supposed to be in */
        serv_printf("GOTO %s", WC->wc_roomname);
        serv_getln(buf, sizeof buf);
 }
index fcbbf368aefc84748e11511009ca1532147011a8..a128ba8bf4311ecf2ad7f4ae9d464b46f5be871c 100644 (file)
@@ -37,10 +37,16 @@ int is_view_allowed_as_default(int which_view)
                case VIEW_CALENDAR:     return(1);
                case VIEW_TASKS:        return(1);
                case VIEW_NOTES:        return(1);
-               case VIEW_WIKI:         return(0);      /**< because it isn't finished yet */
+
+#ifdef TECH_PREVIEW
+               case VIEW_WIKI:         return(1);
+#else /* TECH_PREVIEW */
+               case VIEW_WIKI:         return(0);      /* because it isn't finished yet */
+#endif /* TECH_PREVIEW */
+
                case VIEW_CALBRIEF:     return(0);
                case VIEW_JOURNAL:      return(0);
-               default:                return(0);      /**< should never get here */
+               default:                return(0);      /* should never get here */
        }
 }
 
@@ -827,8 +833,9 @@ char *pop_march(int desired_floor)
 
 
 
-/**
- *\brief Goto next room having unread messages.
+/*
+ * Goto next room having unread messages.
+ *
  * We want to skip over rooms that the user has already been to, and take the
  * user back to the lobby when done.  The room we end up in is placed in
  * newroom - which is set to 0 (the lobby) initially.
@@ -838,12 +845,13 @@ char *pop_march(int desired_floor)
 void gotonext(void)
 {
        char buf[256];
-       struct march *mptr, *mptr2;
+       struct march *mptr = NULL;
+       struct march *mptr2 = NULL;
        char room_name[128];
        char next_room[128];
        int ELoop = 0;
 
-       /**
+       /*
         * First check to see if the march-mode list is already allocated.
         * If it is, pop the first room off the list and go there.
         */
@@ -876,7 +884,7 @@ void gotonext(void)
                                }
                                buf[0] = '\0';
                        }
-               /**
+               /*
                 * add _BASEROOM_ to the end of the march list, so the user will end up
                 * in the system base room (usually the Lobby>) at the end of the loop
                 */
@@ -893,7 +901,7 @@ void gotonext(void)
                                mptr2 = mptr2->next;
                        mptr2->next = mptr;
                }
-               /**
+               /*
                 * ...and remove the room we're currently in, so a <G>oto doesn't make us
                 * walk around in circles
                 */
@@ -910,9 +918,8 @@ void gotonext(void)
 }
 
 
-/**
- * \brief goto next room
- * \param next_room next room to go to
+/*
+ * goto next room
  */
 void smart_goto(char *next_room) {
        gotoroom(next_room);
@@ -921,8 +928,8 @@ void smart_goto(char *next_room) {
 
 
 
-/**
- * \brief mark all messages in current room as having been read
+/*
+ * mark all messages in current room as having been read
  */
 void slrp_highest(void)
 {
@@ -933,8 +940,8 @@ void slrp_highest(void)
 }
 
 
-/**
- * \brief un-goto the previous room
+/*
+ * un-goto the previous room
  */
 void ungoto(void)
 {
@@ -968,16 +975,16 @@ typedef struct __room_states {
        int order;
        int view;
        int flags2;
-}room_states;
+} room_states;
 
 
 
 
-/**
- * \brief Set/clear/read the "self-service list subscribe" flag for a room
+/*
+ * Set/clear/read the "self-service list subscribe" flag for a room
  * 
- * \param newval set to 0 to clear, 1 to set, any other value to leave unchanged.
- * \return return the new value.
+ * set newval to 0 to clear, 1 to set, any other value to leave unchanged.
+ * returns the new value.
  */
 
 int self_service(int newval) {
@@ -1030,29 +1037,26 @@ int self_service(int newval) {
 
 }
 
-int
-is_selflist(room_states *RoomFlags)
+int is_selflist(room_states *RoomFlags)
 {
        return ((RoomFlags->flags2 & QR2_SELFLIST) != 0);
 }
 
-int
-is_publiclist(room_states *RoomFlags)
+int is_publiclist(room_states *RoomFlags)
 {
        return ((RoomFlags->flags2 & QR2_SMTP_PUBLIC) != 0);
 }
 
-int
-is_moderatedlist(room_states *RoomFlags)
+int is_moderatedlist(room_states *RoomFlags)
 {
        return ((RoomFlags->flags2 & QR2_MODERATED) != 0);
 }
 
-/**
- * \brief Set/clear/read the "self-service list subscribe" flag for a room
+/*
+ * Set/clear/read the "self-service list subscribe" flag for a room
  * 
- * \param newval set to 0 to clear, 1 to set, any other value to leave unchanged.
- * \return return the new value.
+ * set newval to 0 to clear, 1 to set, any other value to leave unchanged.
+ * returns the new value.
  */
 
 int get_roomflags(room_states *RoomOps) 
@@ -1096,8 +1100,8 @@ int set_roomflags(room_states *RoomOps)
 
 
 
-/**
- * \brief display the form for editing a room
+/*
+ * display the form for editing a room
  */
 void display_editroom(void)
 {
@@ -1225,9 +1229,9 @@ void display_editroom(void)
        wprintf("</li>\n");
 
        wprintf("</ul>\n");
-       /** end tabbed dialog */        
+       /* end tabbed dialog */ 
 
-       /** begin content of whatever tab is open now */
+       /* begin content of whatever tab is open now */
 
        if (!strcmp(tab, "admin")) {
                wprintf("<div class=\"tabcontent\">");
@@ -1484,7 +1488,7 @@ void display_editroom(void)
        }
 
 
-       /** Sharing the room with other Citadel nodes... */
+       /* Sharing the room with other Citadel nodes... */
        if (!strcmp(tab, "sharing")) {
                wprintf("<div class=\"tabcontent\">");
 
@@ -1531,7 +1535,7 @@ void display_editroom(void)
                        }
                }
 
-               /** Display the stuff */
+               /* Display the stuff */
                wprintf("<CENTER><br />"
                        "<table border=1 cellpadding=5><tr>"
                        "<td><B><I>");
@@ -1639,7 +1643,7 @@ void display_editroom(void)
                wprintf("</div>");
        }
 
-       /** Mailing list management */
+       /* Mailing list management */
        if (!strcmp(tab, "listserv")) {
                room_states RoomFlags;
                wprintf("<div class=\"tabcontent\">");
@@ -1721,7 +1725,7 @@ void display_editroom(void)
                        _("Add recipients from Contacts or other address books"),
                        _("Add recipients from Contacts or other address books")
                );
-               /** Pop open an address book -- end **/
+               /* Pop open an address book -- end **/
 
                wprintf("<br />\n<form method=\"GET\" action=\"toggle_self_service\">\n");
 
@@ -1760,7 +1764,7 @@ void display_editroom(void)
        }
 
 
-       /** Configuration of The Dreaded Auto-Purger */
+       /* Configuration of The Dreaded Auto-Purger */
        if (!strcmp(tab, "expire")) {
                wprintf("<div class=\"tabcontent\">");
 
@@ -1857,14 +1861,14 @@ void display_editroom(void)
                wprintf("</div>");
        }
 
-       /** Access controls */
+       /* Access controls */
        if (!strcmp(tab, "access")) {
                wprintf("<div class=\"tabcontent\">");
                display_whok();
                wprintf("</div>");
        }
 
-       /** Fetch messages from remote locations */
+       /* Fetch messages from remote locations */
        if (!strcmp(tab, "feeds")) {
                wprintf("<div class=\"tabcontent\">");
 
@@ -2003,7 +2007,7 @@ void display_editroom(void)
        }
 
 
-       /** end content of whatever tab is open now */
+       /* end content of whatever tab is open now */
        wprintf("</div>\n");
 
        address_book_popup();
@@ -2011,17 +2015,16 @@ void display_editroom(void)
 }
 
 
-/** 
- * \brief Toggle self-service list subscription
+/* 
+ * Toggle self-service list subscription
  */
 void toggle_self_service(void) {
-//     int newval = 0;
        room_states RoomFlags;
 
        get_roomflags (&RoomFlags);
 
-       // Yank out the bits we want to change
-       RoomFlags.flags2 = RoomFlags.flags2 &   
+       /* Yank out the bits we want to change */
+       RoomFlags.flags2 = RoomFlags.flags2 &
                !(QR2_SELFLIST|QR2_SMTP_PUBLIC|QR2_MODERATED);
 
        if (!strcasecmp(bstr("QR2_SelfList"), "yes")) 
@@ -2038,8 +2041,8 @@ void toggle_self_service(void) {
 
 
 
-/**
- * \brief save new parameters for a room
+/*
+ * save new parameters for a room
  */
 void editroom(void)
 {
@@ -2226,8 +2229,8 @@ void editroom(void)
 }
 
 
-/**
- * \brief Display form for Invite, Kick, and show Who Knows a room
+/*
+ * Display form for Invite, Kick, and show Who Knows a room
  */
 void do_invt_kick(void) {
         char buf[SIZ], room[SIZ], username[SIZ];
@@ -2276,8 +2279,8 @@ void do_invt_kick(void) {
 
 
 
-/**
- * \brief Display form for Invite, Kick, and show Who Knows a room
+/*
+ * Display form for Invite, Kick, and show Who Knows a room
  */
 void display_whok(void)
 {
@@ -2332,7 +2335,7 @@ void display_whok(void)
                "<input type=\"hidden\" name=\"invite_button\" value=\"Invite\">"
                "<input type=\"submit\" value=\"%s\">"
                "</form></CENTER>\n", _("Invite"));
-               /** Pop open an address book -- begin **/
+               /* Pop open an address book -- begin **/
                wprintf(
                        "<a href=\"javascript:PopOpenAddressBook('username_id|%s');\" "
                        "title=\"%s\">"
@@ -2341,7 +2344,7 @@ void display_whok(void)
                        _("User"), 
                        _("Users"), _("Users")
                );
-               /** Pop open an address book -- end **/
+               /* Pop open an address book -- end **/
 
        wprintf("</td></tr></table>\n");
        address_book_popup();
@@ -2350,8 +2353,8 @@ void display_whok(void)
 
 
 
-/**
- * \brief display the form for entering a new room
+/*
+ * display the form for entering a new room
  */
 void display_entroom(void)
 {
@@ -2398,7 +2401,7 @@ void display_entroom(void)
         wprintf("</select>\n");
         wprintf("</td></tr>");
 
-               /**
+               /*
                 * Our clever little snippet of JavaScript automatically selects
                 * a public room if the view is set to Bulletin Board or wiki, and
                 * it selects a mailbox room otherwise.  The user can override this,
@@ -2500,8 +2503,8 @@ void display_entroom(void)
 
 
 
-/**
- * \brief support function for entroom() -- sets the default view 
+/*
+ * support function for entroom() -- sets the default view 
  */
 void er_set_default_view(int newview) {
 
@@ -2536,8 +2539,8 @@ void er_set_default_view(int newview) {
 
 
 
-/**
- * \brief enter a new room
+/*
+ * Create a new room
  */
 void entroom(void)
 {
index ecc63972a51c8b0c9d7b6191a43991363536d147..96e481c9b3c7df21adb08860c03ac39cf5c0b98b 100644 (file)
@@ -599,6 +599,8 @@ void display_siteconfig(void)
                                ((atoi(buf) != 0) ? "CHECKED" : ""));
                        sprintf(&network[strlen(network)], "</TD></TR>\n");
                        break;
+
+#ifdef TECH_PREVIEW
                case 62:
                        sprintf(&network[strlen(network)], "<tr><td>");
                        sprintf(&network[strlen(network)], _("XMPP (Jabber) client to server port (-1 to disable)"));
@@ -609,10 +611,24 @@ void display_siteconfig(void)
                case 63:
                        sprintf(&network[strlen(network)], "<tr><td>");
                        sprintf(&network[strlen(network)], _("XMPP (Jabber) server to server port (-1 to disable)"));
-                       sprintf(&network[strlen(network)], "</td><td>-1");
+                       sprintf(&network[strlen(network)], "</td><td>");
+                       sprintf(&network[strlen(network)], "<input type=\"hidden\" name=\"c_xmpp_s2s_port\" value=\"%s\">\n", buf);
+                       sprintf(&network[strlen(network)], "</TD></TR>\n");
+                       break;
+#else  /* TECH_PREVIEW */
+               case 62:
+                       sprintf(&network[strlen(network)], "<tr><td>");
+                       sprintf(&network[strlen(network)], "</td><td>");
+                       sprintf(&network[strlen(network)], "<input type=\"hidden\" name=\"c_xmpp_c2s_port\" value=\"%s\">", buf);
+                       sprintf(&network[strlen(network)], "</TD></TR>\n");
+                       break;
+               case 63:
+                       sprintf(&network[strlen(network)], "<tr><td>");
+                       sprintf(&network[strlen(network)], "</td><td>");
                        sprintf(&network[strlen(network)], "<input type=\"hidden\" name=\"c_xmpp_s2s_port\" value=\"%s\">\n", buf);
                        sprintf(&network[strlen(network)], "</TD></TR>\n");
                        break;
+#endif /* TECH_PREVIEW */
                }
        
        }
index 6b865e4f9050d57e065efbb70ff687eb3192c7d8..a324f6c98b3fae240c23cb47dd2227e38a7d0165 100644 (file)
@@ -123,7 +123,8 @@ extern locale_t wc_locales[];
 #define DEVELOPER_ID           0
 #define CLIENT_ID              4
 #define CLIENT_VERSION         723             /* This version of WebCit */
-#define MINIMUM_CIT_VERSION    723             /* min required Citadel ver. */
+#define MINIMUM_CIT_VERSION    723             /* min required Citadel ver */
+#define        LIBCITADEL_MIN          103             /* min required libcitadel ver */
 #define DEFAULT_HOST           "localhost"     /* Default Citadel server */
 #define DEFAULT_PORT           "504"
 #define LB                     (1)             /* Internal escape chars */