[Pkg-citadel-commit] r182 - in citadel/trunk/debian: . patches
meskes at alioth.debian.org
meskes at alioth.debian.org
Sun Nov 30 16:13:36 UTC 2008
Author: meskes
Date: 2008-11-30 16:13:36 +0000 (Sun, 30 Nov 2008)
New Revision: 182
Added:
citadel/trunk/debian/patches/r6612_fixes.diff
Modified:
citadel/trunk/debian/changelog
Log:
Added fixes that are part of upstream's deb packages.
Modified: citadel/trunk/debian/changelog
===================================================================
--- citadel/trunk/debian/changelog 2008-11-30 15:53:09 UTC (rev 181)
+++ citadel/trunk/debian/changelog 2008-11-30 16:13:36 UTC (rev 182)
@@ -1,3 +1,4 @@
+
citadel (7.38-1) unstable; urgency=high
[ Wilfried Goesgens ]
@@ -10,8 +11,10 @@
* New upstream version.
* Removed old patches from 7.37 as they are now part of the orig tarball.
* Removed some setting in citadel-server postinst as they are the default anyway.
+ * Added patch to include some fixes that are already in the upstream provided
+ debs.
- -- Michael Meskes <meskes at debian.org> Mon, 06 Oct 2008 14:21:00 +0200
+ -- Michael Meskes <meskes at debian.org> Sun, 30 Nov 2008 17:04:55 +0100
citadel (7.37-8) unstable; urgency=low
Added: citadel/trunk/debian/patches/r6612_fixes.diff
===================================================================
--- citadel/trunk/debian/patches/r6612_fixes.diff (rev 0)
+++ citadel/trunk/debian/patches/r6612_fixes.diff 2008-11-30 16:13:36 UTC (rev 182)
@@ -0,0 +1,675 @@
+diff -ruN citadel-7.38/citadel_dirs.c citadel-7.38/citadel_dirs.c
+--- citadel-7.38/citadel_dirs.c 2008-09-13 06:07:31.000000000 +0200
++++ citadel-7.38/citadel_dirs.c 2008-09-21 22:52:57.000000000 +0200
+@@ -128,7 +128,7 @@
+ #else
+ basedir=STATICDATA_DIR;
+ #endif
+- COMPUTE_DIRECTORY(ctdl_hlp_dir);
++ COMPUTE_DIRECTORY(ctdl_message_dir);
+
+ #ifndef HAVE_HELP_DIR
+ basedir=ctdldir;
+diff -ruN citadel-7.38/docs/citadel.html citadel-7.38/docs/citadel.html
+--- citadel-7.38/docs/citadel.html 2008-09-13 06:07:23.000000000 +0200
++++ citadel-7.38/docs/citadel.html 2008-09-21 22:52:56.000000000 +0200
+@@ -2321,7 +2321,7 @@
+ server from a shell and watch it load. It might look something like
+ this:</p>
+ <font size="-2"> </font>
+-<pre><font size="-2">smw @ pixel % ./citserver<br><br>Multithreaded message server for Citadel<br>Copyright (C) 1987-2006 by the Citadel development team.<br>Citadel is open source, covered by the GNU General Public License, and<br>you are welcome to change it and/or distribute copies of it under certain<br>conditions. There is absolutely no warranty for this software. Please<br>read the 'COPYING.txt' file for details.<br><br>Loading citadel.config<br>Opening databases<br>This is GDBM version 1.8.0, as of May 19, 1999.<br>Checking floor reference counts<br>Creating base rooms (if necessary)<br>Registered a new service (TCP port 504)<br>Registered a new service (TCP port 0)<br>Initializing loadable modules<br>Registered server command CHAT (Begin real-time chat)<br>Registered server command PEXP (Poll for instant messages)<br>Registered server command GEXP (Get instant messages)<br>Registered server command SEXP (Send an instant message)<br>Registered server command DEXP (Disable instant messages)<br>Registered a new session function (type 0)<br>Registered a new x-msg function (priority 0)<br>Loaded module: $Id: citadel.html 5896 2007-12-29 17:14:05Z ajc $<br>Registered a new session function (type 1)<br>Registered a new message function (type 201)<br>Registered a new message function (type 202)<br>Registered server command REGI (Enter registration info)<br>Registered server command GREG (Get registration info)<br>Registered a new user function (type 100)<br>Loaded module: $Id: citadel.html 5896 2007-12-29 17:14:05Z ajc $<br>Server-hosted upgrade level is 5.62<br>Loaded module: $Id: citadel.html 5896 2007-12-29 17:14:05Z ajc $<br>Registered server command EXPI (Expire old system objects)<br>Registered server command FSCK (Check message ref counts)<br>Loaded module: $Id: citadel.html 5896 2007-12-29 17:14:05Z ajc $<br><b>citserver: Can't bind: Address already in use<br>ERROR: could not bind to TCP port 25.</b><br>Registered a new service (TCP port 0)<br>Registered a new session function (type 50)<br>Loaded module: $Id: citadel.html 5896 2007-12-29 17:14:05Z ajc $<br><b>citserver: Can't bind: Address already in use<br>ERROR: could not bind to TCP port 110.</b><br>Registered a new session function (type 0)<br>Loaded module: $Id: citadel.html 5896 2007-12-29 17:14:05Z ajc $<br>Registered a new message function (type 202)Loaded module: $Id: citadel.html 5896 2007-12-29 17:14:05Z ajc $<br>Registered server command RWHO (Display who is online)<br>Registered server command HCHG (Masquerade hostname)<br>Registered server command RCHG (Masquerade roomname)<br>Registered server command UCHG (Masquerade username)<br>Registered server command STEL (Enter/exit stealth mode)<br>Loaded module: $Id: citadel.html 5896 2007-12-29 17:14:05Z ajc $<br>Changing uid to 513<br>Starting housekeeper thread<br></font></pre>
++<pre><font size="-2">smw @ pixel % ./citserver<br><br>Multithreaded message server for Citadel<br>Copyright (C) 1987-2006 by the Citadel development team.<br>Citadel is open source, covered by the GNU General Public License, and<br>you are welcome to change it and/or distribute copies of it under certain<br>conditions. There is absolutely no warranty for this software. Please<br>read the 'COPYING.txt' file for details.<br><br>Loading citadel.config<br>Opening databases<br>This is GDBM version 1.8.0, as of May 19, 1999.<br>Checking floor reference counts<br>Creating base rooms (if necessary)<br>Registered a new service (TCP port 504)<br>Registered a new service (TCP port 0)<br>Initializing loadable modules<br>Registered server command CHAT (Begin real-time chat)<br>Registered server command PEXP (Poll for instant messages)<br>Registered server command GEXP (Get instant messages)<br>Registered server command SEXP (Send an instant message)<br>Registered server command DEXP (Disable instant messages)<br>Registered a new session function (type 0)<br>Registered a new x-msg function (priority 0)<br>Loaded module: $Id: citadel.html 6607 2008-09-17 14:14:12Z ajc $<br>Registered a new session function (type 1)<br>Registered a new message function (type 201)<br>Registered a new message function (type 202)<br>Registered server command REGI (Enter registration info)<br>Registered server command GREG (Get registration info)<br>Registered a new user function (type 100)<br>Loaded module: $Id: citadel.html 6607 2008-09-17 14:14:12Z ajc $<br>Server-hosted upgrade level is 5.62<br>Loaded module: $Id: citadel.html 6607 2008-09-17 14:14:12Z ajc $<br>Registered server command EXPI (Expire old system objects)<br>Registered server command FSCK (Check message ref counts)<br>Loaded module: $Id: citadel.html 6607 2008-09-17 14:14:12Z ajc $<br><b>citserver: Can't bind: Address already in use<br>ERROR: could not bind to TCP port 25.</b><br>Registered a new service (TCP port 0)<br>Registered a new session function (type 50)<br>Loaded module: $Id: citadel.html 6607 2008-09-17 14:14:12Z ajc $<br><b>citserver: Can't bind: Address already in use<br>ERROR: could not bind to TCP port 110.</b><br>Registered a new session function (type 0)<br>Loaded module: $Id: citadel.html 6607 2008-09-17 14:14:12Z ajc $<br>Registered a new message function (type 202)Loaded module: $Id: citadel.html 6607 2008-09-17 14:14:12Z ajc $<br>Registered server command RWHO (Display who is online)<br>Registered server command HCHG (Masquerade hostname)<br>Registered server command RCHG (Masquerade roomname)<br>Registered server command UCHG (Masquerade username)<br>Registered server command STEL (Enter/exit stealth mode)<br>Loaded module: $Id: citadel.html 6607 2008-09-17 14:14:12Z ajc $<br>Changing uid to 513<br>Starting housekeeper thread<br></font></pre>
+ <p>The lines emphasized in boldface in the above log output tell you
+ that Citadel "can't bind" to various ports. The error 'address already
+ in use' generally means that something else is already running on the
+@@ -2688,15 +2688,12 @@
+ <h3><a name="Database_repair"></a>Database repair</h3>
+ Although Citadel's data store is quite reliable, database corruption
+ can occur in rare instances. External factors such as an
+-operating
+-system crash or an unexpected loss of power might leave the database in
+-an unknown state. A utility is provided which may be able to
+-repair
+-your database if this occurs. If you find that your Citadel
+-server
+-is not running, and reading the logs shows that it is crashing because
+-of
+-an inability to validate a database, follow these steps:<br>
++operating system crash or an unexpected loss of power might leave the
++database in an unknown state. A utility is provided which may
++be able to repair your database if this occurs. If you find
++that your Citadel server is not running, and reading the logs shows
++that it is crashing because of an inability to validate a database,
++follow these steps:<br>
+ <ol>
+ <li>Edit <tt>/etc/inittab</tt> and switch the Citadel service from
+ "respawn" to "off." Type <tt>init q</tt> to make this setting
+@@ -2714,6 +2711,11 @@
+ </ol>
+ If this procedure does not work, you must restore from your most recent
+ backup.<br>
++<b>Please note: this utility should <i>only</i> be used for recovering
++a database that is causing the Citadel server to crash upon startup. If
++you have some other type of problem, but the citserver process is not
++aborting with "Berkeley DB Panic" errors, this is <i>not</i> the way to
++fix it.</b><br>
+ <br>
+ <h3><a name="ImportingExporting_your_Citadel"></a>Importing/Exporting
+ your Citadel database<br>
+diff -ruN citadel-7.38/Makefile.in citadel-7.38/Makefile.in
+--- citadel-7.38/Makefile.in 2008-09-13 06:07:31.000000000 +0200
++++ citadel-7.38/Makefile.in 2008-09-21 22:52:58.000000000 +0200
+@@ -8,7 +8,7 @@
+ # 2. Send e-mail to ajc at uncensored.citadel.org and let me know what you
+ # did, so any necessary changes can be put into the next release.
+ #
+-# $Id: Makefile.in 6589 2008-09-11 16:09:00Z dothebart $
++# $Id: Makefile.in 6604 2008-09-15 22:24:55Z dothebart $
+ #
+ ########################################################################
+
+@@ -228,7 +228,7 @@
+
+ $(srcdir)/mkinstalldirs $(DESTDIR)$(STATICDATA_DIR)/messages
+ @for i in \
+- `$(srcdir)/messages -type f | grep -v .svn`; do \
++ `find $(srcdir)/messages -type f | grep -v .svn`; do \
+ echo $(INSTALL_DATA) $$i $(DESTDIR)$(STATICDATA_DIR)/$$i; \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(STATICDATA_DIR)/$$i; \
+ done
+diff -ruN citadel-7.38/modules/expire/serv_expire.c citadel-7.38/modules/expire/serv_expire.c
+--- citadel-7.38/modules/expire/serv_expire.c 2008-09-13 06:07:28.000000000 +0200
++++ citadel-7.38/modules/expire/serv_expire.c 2008-09-21 22:52:57.000000000 +0200
+@@ -1,5 +1,5 @@
+ /*
+- * $Id: serv_expire.c 6571 2008-09-07 14:49:53Z davew $
++ * $Id: serv_expire.c 6606 2008-09-17 12:24:51Z ajc $
+ *
+ * This module handles the expiry of old messages and the purging of old users.
+ *
+@@ -935,6 +935,10 @@
+ /*****************************************************************************/
+
+
++/* The FSCK command has been removed because people were misusing it */
++
++#if 0
++
+ void do_fsck_msg(long msgnum, void *userdata) {
+ struct ctdlroomref *ptr;
+
+@@ -1013,6 +1017,7 @@
+
+ }
+
++#endif /* end of commented-out fsck cmd */
+
+ /*
+ * Manually initiate a run of The Dreaded Auto-Purger (tm)
+@@ -1030,11 +1035,11 @@
+ {
+ if (!threading)
+ {
+- CtdlRegisterProtoHook(cmd_fsck, "FSCK", "Check message ref counts");
++ /* CtdlRegisterProtoHook(cmd_fsck, "FSCK", "Check message ref counts"); */
+ CtdlRegisterProtoHook(cmd_tdap, "TDAP", "Manually initiate auto-purger");
+ }
+ else
+ CtdlThreadCreate("Auto Purger", CTDLTHREAD_BIGSTACK, purge_databases, NULL);
+ /* return our Subversion id for the Log */
+- return "$Id: serv_expire.c 6571 2008-09-07 14:49:53Z davew $";
++ return "$Id: serv_expire.c 6606 2008-09-17 12:24:51Z ajc $";
+ }
+diff -ruN citadel-7.38/msgbase.c citadel-7.38/msgbase.c
+--- citadel-7.38/msgbase.c 2008-09-13 06:07:31.000000000 +0200
++++ citadel-7.38/msgbase.c 2008-09-21 22:52:58.000000000 +0200
+@@ -1,5 +1,5 @@
+ /*
+- * $Id: msgbase.c 6565 2008-09-04 01:59:23Z ajc $
++ * $Id: msgbase.c 6609 2008-09-20 06:08:44Z ajc $
+ *
+ * Implements the message store.
+ *
+@@ -89,7 +89,8 @@
+ "hnod",
+ "msgn",
+ "jrnl",
+- NULL, NULL,
++ NULL,
++ "list",
+ "text",
+ "node",
+ "room",
+@@ -339,8 +340,6 @@
+ int was_seen = 0;
+ long lo = (-1L);
+ long hi = (-1L);
+- long t = (-1L);
+- int trimming = 0;
+ struct visit vbuf;
+ long *msglist;
+ int num_msgs = 0;
+@@ -348,26 +347,35 @@
+ char *is_set; /* actually an array of booleans */
+ int num_sets;
+ int s;
++ int w = 0;
+ char setstr[SIZ], lostr[SIZ], histr[SIZ];
+- size_t tmp;
+
+ /* Don't bother doing *anything* if we were passed a list of zero messages */
+ if (num_target_msgnums < 1) {
+ return;
+ }
+
+- CtdlLogPrintf(CTDL_DEBUG, "CtdlSetSeen(%d msgs starting with %ld, %d, %d)\n",
++ /* If no room was specified, we go with the current room. */
++ if (!which_room) {
++ which_room = &CC->room;
++ }
++
++ /* If no user was specified, we go with the current user. */
++ if (!which_user) {
++ which_user = &CC->user;
++ }
++
++ CtdlLogPrintf(CTDL_DEBUG, "CtdlSetSeen(%d msgs starting with %ld, %s, %d) in <%s>\n",
+ num_target_msgnums, target_msgnums[0],
+- target_setting, which_set);
++ (target_setting ? "SET" : "CLEAR"),
++ which_set,
++ which_room->QRname);
+
+ /* Learn about the user and room in question */
+- CtdlGetRelationship(&vbuf,
+- ((which_user != NULL) ? which_user : &CC->user),
+- ((which_room != NULL) ? which_room : &CC->room)
+- );
++ CtdlGetRelationship(&vbuf, which_user, which_room);
+
+ /* Load the message list */
+- cdbfr = cdb_fetch(CDB_MSGLISTS, &CC->room.QRnumber, sizeof(long));
++ cdbfr = cdb_fetch(CDB_MSGLISTS, &which_room->QRnumber, sizeof(long));
+ if (cdbfr != NULL) {
+ msglist = (long *) cdbfr->ptr;
+ cdbfr->ptr = NULL; /* CtdlSetSeen() now owns this memory */
+@@ -390,7 +398,19 @@
+ break;
+ }
+
+- /* CtdlLogPrintf(CTDL_DEBUG, "before optimize: %s\n", vset); */
++
++#if 0 /* This is a special diagnostic section. Do not allow it to run during normal operation. */
++ CtdlLogPrintf(CTDL_DEBUG, "There are %d messages in the room.\n", num_msgs);
++ for (i=0; i<num_msgs; ++i) {
++ if (i > 0) if (msglist[i] <= msglist[i-1]) abort();
++ }
++ CtdlLogPrintf(CTDL_DEBUG, "We are twiddling %d of them.\n", num_target_msgnums);
++ for (k=0; k<num_target_msgnums; ++k) {
++ if (k > 0) if (target_msgnums[k] <= target_msgnums[k-1]) abort();
++ }
++#endif
++
++ CtdlLogPrintf(CTDL_DEBUG, "before update: %s\n", vset);
+
+ /* Translate the existing sequence set into an array of booleans */
+ num_sets = num_tokens(vset, ',');
+@@ -400,15 +420,17 @@
+ extract_token(lostr, setstr, 0, ':', sizeof lostr);
+ if (num_tokens(setstr, ':') >= 2) {
+ extract_token(histr, setstr, 1, ':', sizeof histr);
+- if (!strcmp(histr, "*")) {
+- snprintf(histr, sizeof histr, "%ld", LONG_MAX);
+- }
+ }
+ else {
+ strcpy(histr, lostr);
+ }
+ lo = atol(lostr);
+- hi = atol(histr);
++ if (!strcmp(histr, "*")) {
++ hi = LONG_MAX;
++ }
++ else {
++ hi = atol(histr);
++ }
+
+ for (i = 0; i < num_msgs; ++i) {
+ if ((msglist[i] >= lo) && (msglist[i] <= hi)) {
+@@ -417,84 +439,86 @@
+ }
+ }
+
++
+ /* Now translate the array of booleans back into a sequence set */
+ strcpy(vset, "");
+- lo = (-1L);
+- hi = (-1L);
++ was_seen = 0;
++ lo = (-1);
++ hi = (-1);
+
+ for (i=0; i<num_msgs; ++i) {
++ is_seen = is_set[i];
+
+- is_seen = is_set[i]; /* Default to existing setting */
+-
++ /* Apply changes */
+ for (k=0; k<num_target_msgnums; ++k) {
+ if (msglist[i] == target_msgnums[k]) {
+ is_seen = target_setting;
+ }
+ }
+
+- if (is_seen) {
+- if (lo < 0L) lo = msglist[i];
+- hi = msglist[i];
++ w = 0; /* set to 1 if we write something to the string */
++
++ if ((was_seen == 0) && (is_seen == 1)) {
++ lo = msglist[i];
+ }
++ else if ((was_seen == 1) && (is_seen == 0)) {
++ hi = msglist[i-1];
++ w = 1;
+
+- if ( ((is_seen == 0) && (was_seen == 1))
+- || ((is_seen == 1) && (i == num_msgs-1)) ) {
+-
+- /* begin trim-o-matic code */
+- j=9;
+- trimming = 0;
+- while ( (strlen(vset) + 20) > sizeof vset) {
+- remove_token(vset, 0, ',');
+- trimming = 1;
+- if (j--) break; /* loop no more than 9 times */
++ if (!IsEmptyStr(vset)) {
++ strcat(vset, ",");
+ }
+- if ( (trimming) && (which_set == ctdlsetseen_seen) ) {
+- t = atol(vset);
+- if (t<2) t=2;
+- --t;
+- snprintf(lostr, sizeof lostr,
+- "1:%ld,%s", t, vset);
+- safestrncpy(vset, lostr, sizeof vset);
++ if (lo == hi) {
++ sprintf(&vset[strlen(vset)], "%ld", hi);
+ }
+- /* end trim-o-matic code */
+-
+- tmp = strlen(vset);
+- if (tmp > 0) {
++ else {
++ sprintf(&vset[strlen(vset)], "%ld:%ld", lo, hi);
++ }
++ }
++ else if ((is_seen) && (i == num_msgs - 1)) {
++ w = 1;
++ if (!IsEmptyStr(vset)) {
+ strcat(vset, ",");
+- ++tmp;
+ }
+- if (lo == hi) {
+- snprintf(&vset[tmp], (sizeof vset) - tmp,
+- "%ld", lo);
++ if ((i==0) || (was_seen == 0)) {
++ sprintf(&vset[strlen(vset)], "%ld", msglist[i]);
+ }
+ else {
+- snprintf(&vset[tmp], (sizeof vset) - tmp,
+- "%ld:%ld", lo, hi);
++ sprintf(&vset[strlen(vset)], "%ld:%ld", lo, msglist[i]);
+ }
+- lo = (-1L);
+- hi = (-1L);
+ }
++
++ /* If the string is getting too long, truncate it at the beginning; repeat up to 9 times */
++ if (w) for (j=0; j<9; ++j) {
++ if ((strlen(vset) + 20) > sizeof vset) {
++ remove_token(vset, 0, ',');
++ if (which_set == ctdlsetseen_seen) {
++ char temp[SIZ];
++ sprintf(temp, "1:%ld,", atol(vset)-1L);
++ strcat(temp, vset);
++ strcpy(vset, temp);
++ }
++ }
++ }
++
+ was_seen = is_seen;
+ }
+
++ CtdlLogPrintf(CTDL_DEBUG, " after update: %s\n", vset);
++
+ /* Decide which message set we're manipulating */
+ switch (which_set) {
+ case ctdlsetseen_seen:
+ safestrncpy(vbuf.v_seen, vset, sizeof vbuf.v_seen);
+ break;
+ case ctdlsetseen_answered:
+- safestrncpy(vbuf.v_answered, vset,
+- sizeof vbuf.v_answered);
++ safestrncpy(vbuf.v_answered, vset, sizeof vbuf.v_answered);
+ break;
+ }
+- free(is_set);
+
+- /* CtdlLogPrintf(CTDL_DEBUG, " after optimize: %s\n", vset); */
++ free(is_set);
+ free(msglist);
+- CtdlSetRelationship(&vbuf,
+- ((which_user != NULL) ? which_user : &CC->user),
+- ((which_room != NULL) ? which_room : &CC->room)
+- );
++ CtdlSetRelationship(&vbuf, which_user, which_room);
+ }
+
+
+diff -ruN citadel-7.38/setup.c citadel-7.38/setup.c
+--- citadel-7.38/setup.c 2008-09-13 06:07:31.000000000 +0200
++++ citadel-7.38/setup.c 2008-09-21 22:52:58.000000000 +0200
+@@ -1,5 +1,5 @@
+ /*
+- * $Id: setup.c 6411 2008-06-29 04:13:52Z ajc $
++ * $Id: setup.c 6612 2008-09-21 20:19:04Z dothebart $
+ *
+ * Citadel setup utility
+ *
+@@ -27,6 +27,10 @@
+ #include "sysdep.h"
+ #include "config.h"
+ #include "citadel_dirs.h"
++#if HAVE_BACKTRACE
++#include <execinfo.h>
++#endif
++
+
+ #define MAXSETUP 6 /* How many setup questions to ask */
+
+@@ -56,6 +60,28 @@
+ "Authentication mode"
+ };
+
++/**
++ * \brief print the actual stack frame.
++ */
++void cit_backtrace(void)
++{
++#ifdef HAVE_BACKTRACE
++ void *stack_frames[50];
++ size_t size, i;
++ char **strings;
++
++
++ size = backtrace(stack_frames, sizeof(stack_frames) / sizeof(void*));
++ strings = backtrace_symbols(stack_frames, size);
++ for (i = 0; i < size; i++) {
++ if (strings != NULL)
++ fprintf(stderr, "%s\n", strings[i]);
++ else
++ fprintf(stderr, "%p\n", stack_frames[i]);
++ }
++ free(strings);
++#endif
++}
+
+ struct config config;
+
+@@ -122,6 +148,8 @@
+
+ void cleanup(int exitcode)
+ {
++// printf("Exitcode: %d\n", exitcode);
++// cit_backtrace();
+ exit(exitcode);
+ }
+
+@@ -199,6 +227,9 @@
+ msgtext);
+ system(buf);
+ break;
++ case UI_SILENT:
++ fprintf(stderr, "%s\n", msgtext);
++ break;
+ }
+ }
+
+@@ -564,26 +595,20 @@
+
+ /* Offer to replace other MTA with the vastly superior Citadel :) */
+
+- if (getenv("ACT_AS_MTA")) {
+- if (strcasecmp(getenv("ACT_AS_MTA"), "yes")) {
+- return;
+- }
+- }
+- else {
+- snprintf(buf, sizeof buf,
+- "You appear to have the \"%s\" email program\n"
+- "running on your system. If you want Citadel mail\n"
+- "connected with %s, you will have to manually integrate\n"
+- "them. It is preferable to disable %s, and use Citadel's\n"
+- "SMTP, POP3, and IMAP services.\n\n"
+- "May we disable %s so that Citadel has access to ports\n"
+- "25, 110, and 143?\n",
+- mta, mta, mta, mta
++ snprintf(buf, sizeof buf,
++ "You appear to have the \"%s\" email program\n"
++ "running on your system. If you want Citadel mail\n"
++ "connected with %s, you will have to manually integrate\n"
++ "them. It is preferable to disable %s, and use Citadel's\n"
++ "SMTP, POP3, and IMAP services.\n\n"
++ "May we disable %s so that Citadel has access to ports\n"
++ "25, 110, and 143?\n",
++ mta, mta, mta, mta
+ );
+- if (yesno(buf, 1) == 0) {
+- return;
+- }
++ if (yesno(buf, 1) == 0) {
++ return;
+ }
++
+
+ sprintf(buf, "for x in /etc/rc*.d/S*%s; do mv $x `echo $x |sed s/S/K/g`; done >/dev/null 2>&1", mta);
+ system(buf);
+@@ -597,7 +622,7 @@
+ /*
+ * Check to see if our server really works. Returns 0 on success.
+ */
+-int test_server(char *setup_directory) {
++int test_server(char *setup_directory, char *relhomestr, int relhome) {
+ char cmd[256];
+ char cookie[256];
+ FILE *fp;
+@@ -610,10 +635,15 @@
+ */
+ sprintf(cookie, "--test--%d--", getpid());
+
+- sprintf(cmd, "%s/sendcommand -h%s ECHO %s 2>&1",
+- ctdl_sbin_dir,
+- setup_directory,
+- cookie);
++ if (relhome)
++ sprintf(cmd, "%s/sendcommand -h%s ECHO %s 2>&1",
++ ctdl_sbin_dir,
++ relhomestr,
++ cookie);
++ else
++ sprintf(cmd, "%s/sendcommand ECHO %s 2>&1",
++ ctdl_sbin_dir,
++ cookie);
+
+ fp = popen(cmd, "r");
+ if (fp == NULL) return(errno);
+@@ -1025,14 +1055,13 @@
+ set_str_val(0, setup_directory);
+ }
+
+- enable_home=(relh|home);
++ enable_home = ( relh | home );
+
+- if (chdir(setup_directory) == 0) {
+- strcpy(file_citadel_config, "./citadel.config");
+- }
+- else {
+- important_message("Citadel Setup",
+- "The directory you specified does not exist.");
++ if (chdir(setup_directory) != 0) {
++ char errmsg[SIZ];
++ sprintf(errmsg, "The directory you specified does not exist: [%s]\n", setup_directory);
++
++ important_message("Citadel Setup", errmsg);
+ cleanup(errno);
+ }
+
+@@ -1045,7 +1074,7 @@
+ }
+
+ /* Make sure Citadel is not running. */
+- if (test_server(setup_directory) == 0) {
++ if (test_server(setup_directory, relhome, enable_home) == 0) {
+ important_message("Citadel Setup",
+ "The Citadel service is still running.\n"
+ "Please stop the service manually and run "
+@@ -1259,27 +1288,31 @@
+ delete_inittab_entry(); /* Remove obsolete /etc/inittab entry */
+ check_xinetd_entry(); /* Check /etc/xinetd.d/telnet */
+
+- /* Offer to disable other MTA's on the system. */
+- disable_other_mta("courier-authdaemon");
+- disable_other_mta("courier-imap");
+- disable_other_mta("courier-imap-ssl");
+- disable_other_mta("courier-pop");
+- disable_other_mta("courier-pop3");
+- disable_other_mta("courier-pop3d");
+- disable_other_mta("cyrmaster");
+- disable_other_mta("cyrus");
+- disable_other_mta("dovecot");
+- disable_other_mta("exim");
+- disable_other_mta("exim4");
+- disable_other_mta("imapd");
+- disable_other_mta("mta");
+- disable_other_mta("pop3d");
+- disable_other_mta("popd");
+- disable_other_mta("postfix");
+- disable_other_mta("qmail");
+- disable_other_mta("saslauthd");
+- disable_other_mta("sendmail");
+- disable_other_mta("vmailmgrd");
++ if ((getenv("ACT_AS_MTA") == NULL) ||
++ (getenv("ACT_AS_MTA") &&
++ strcasecmp(getenv("ACT_AS_MTA"), "yes") == 0)) {
++ /* Offer to disable other MTA's on the system. */
++ disable_other_mta("courier-authdaemon");
++ disable_other_mta("courier-imap");
++ disable_other_mta("courier-imap-ssl");
++ disable_other_mta("courier-pop");
++ disable_other_mta("courier-pop3");
++ disable_other_mta("courier-pop3d");
++ disable_other_mta("cyrmaster");
++ disable_other_mta("cyrus");
++ disable_other_mta("dovecot");
++ disable_other_mta("exim");
++ disable_other_mta("exim4");
++ disable_other_mta("imapd");
++ disable_other_mta("mta");
++ disable_other_mta("pop3d");
++ disable_other_mta("popd");
++ disable_other_mta("postfix");
++ disable_other_mta("qmail");
++ disable_other_mta("saslauthd");
++ disable_other_mta("sendmail");
++ disable_other_mta("vmailmgrd");
++ }
+ #endif
+
+ /* Check for the 'db' nss and offer to disable it */
+@@ -1312,14 +1345,31 @@
+ sleep(3);
+ }
+
+- if (test_server(setup_directory) == 0) {
+- snprintf (admin_cmd, sizeof(admin_cmd), "%s/sendcommand \"CREU %s|%s\"", ctdl_utilbin_dir, config.c_sysadm, admin_pass);
+- system(admin_cmd);
+- important_message("Setup finished",
+- "Setup of the Citadel server is complete.\n"
+- "If you will be using WebCit, please run its\n"
+- "setup program now; otherwise, run './citadel'\n"
+- "to log in.\n");
++ if (test_server(setup_directory, relhome, enable_home) == 0) {
++ char buf[SIZ];
++ int found_it = 0;
++
++ snprintf (admin_cmd, sizeof(admin_cmd), "%s/sendcommand \"CREU %s|%s\" 2>&1",
++ ctdl_sbin_dir, config.c_sysadm, admin_pass);
++ fp = popen(admin_cmd, "r");
++ if (fp != NULL) {
++ while (fgets(buf, sizeof buf, fp) != NULL)
++ {
++ if ((atol(buf) == 574) || (atol(buf) == 200))
++ ++found_it;
++ }
++ pclose(fp);
++ }
++
++ if (found_it == 0)
++ important_message("Error","Setup failed to create your admin user");
++
++ if (setup_type != UI_SILENT)
++ important_message("Setup finished",
++ "Setup of the Citadel server is complete.\n"
++ "If you will be using WebCit, please run its\n"
++ "setup program now; otherwise, run './citadel'\n"
++ "to log in.\n");
+ }
+ else {
+ important_message("Setup failed",
+diff -ruN citadel-7.38/svn_revision.c citadel-7.38/svn_revision.c
+--- citadel-7.38/svn_revision.c 2008-09-13 06:08:24.000000000 +0200
++++ citadel-7.38/svn_revision.c 2008-09-21 22:52:58.000000000 +0200
+@@ -9,6 +9,6 @@
+
+ const char *svn_revision (void)
+ {
+- const char *SVN_Version = "6597";
++ const char *SVN_Version = "6614";
+ return SVN_Version;
+ }
+diff -ruN citadel-7.38/sysdep.h.in citadel-7.38/sysdep.h.in
+--- citadel-7.38/sysdep.h.in 2008-09-13 06:08:23.000000000 +0200
++++ citadel-7.38/sysdep.h.in 2008-09-21 22:52:58.000000000 +0200
+@@ -326,19 +326,19 @@
+ /* define, where the config should go in unix style */
+ #undef RUN_DIR
+
+-/* The size of a `char', as computed by sizeof. */
++/* The size of `char', as computed by sizeof. */
+ #undef SIZEOF_CHAR
+
+-/* The size of a `int', as computed by sizeof. */
++/* The size of `int', as computed by sizeof. */
+ #undef SIZEOF_INT
+
+-/* The size of a `long', as computed by sizeof. */
++/* The size of `long', as computed by sizeof. */
+ #undef SIZEOF_LONG
+
+-/* The size of a `short', as computed by sizeof. */
++/* The size of `short', as computed by sizeof. */
+ #undef SIZEOF_SHORT
+
+-/* The size of a `size_t', as computed by sizeof. */
++/* The size of `size_t', as computed by sizeof. */
+ #undef SIZEOF_SIZE_T
+
+ /* do we need to use solaris call syntax? */
+@@ -382,5 +382,5 @@
+ /* Define to `int' if <sys/types.h> does not define. */
+ #undef pid_t
+
+-/* Define to `unsigned' if <sys/types.h> does not define. */
++/* Define to `unsigned int' if <sys/types.h> does not define. */
+ #undef size_t
More information about the Pkg-citadel-commit
mailing list