/*
* Server-side module for Wiki rooms. This handles things like version control.
*
- * Copyright (c) 2009-2011 by the citadel.org team
+ * Copyright (c) 2009-2012 by the citadel.org team
*
* This program is open source software. You can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 3 of the
- * License, or (at your option) any later version.
+ * modify it under the terms of the GNU General Public License, version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "sysdep.h"
fclose(fp);
snprintf(diff_cmd, sizeof diff_cmd,
- "diff -u %s %s >%s",
+ DIFF " -u %s %s >%s",
diff_new_filename,
((old_msg != NULL) ? diff_old_filename : "/dev/null"),
diff_out_filename
fclose(fp);
}
- syslog(LOG_DEBUG, "diff length is %d bytes", diffbuf_len);
+ syslog(LOG_DEBUG, "diff length is "SIZE_T_FMT" bytes", diffbuf_len);
unlink(diff_old_filename);
unlink(diff_new_filename);
CtdlDecodeBase64(memo, filename, strlen(filename));
extract_token(this_rev, memo, 0, '|', sizeof this_rev);
- syslog(LOG_DEBUG, "callback found rev: %s\n", this_rev);
+ striplt(this_rev);
/* Perform the patch */
- fp = popen("patch -f -s -p0 -r /dev/null >/dev/null 2>/dev/null", "w");
+ fp = popen(PATCH " -f -s -p0 -r /dev/null >/dev/null 2>/dev/null", "w");
if (fp) {
/* Replace the filenames in the patch with the tempfilename we're actually tweaking */
fprintf(fp, "--- %s\n", hecbd->tempfilename);
memset(&hecbd, 0, sizeof(struct HistoryEraserCallBackData));
hecbd.tempfilename = temp;
hecbd.stop_when = rev;
+ striplt(hecbd.stop_when);
mime_parser(msg->cm_fields['M'], NULL, *wiki_rev_callback, NULL, NULL, (void *)&hecbd, 0);
CtdlFreeMessage(msg);
msg->cm_fields['A'] = strdup("Citadel");
CtdlCreateRoom(wwm, 5, "", 0, 1, 1, VIEW_BBS); /* Not an error if already exists */
msgnum = CtdlSubmitMsg(msg, NULL, wwm, 0); /* Store the revision here */
+
+ /*
+ * WARNING: VILE SLEAZY HACK
+ * This will avoid the 'message xxx is not in this room' security error,
+ * but only if the client fetches the message we just generated immediately
+ * without first trying to perform other fetch operations.
+ */
+ if (CC->cached_msglist != NULL) {
+ free(CC->cached_msglist);
+ CC->cached_msglist = NULL;
+ CC->cached_num_msgs = 0;
+ }
+ CC->cached_msglist = malloc(sizeof(long));
+ if (CC->cached_msglist != NULL) {
+ CC->cached_num_msgs = 1;
+ CC->cached_msglist[0] = msgnum;
+ }
+
}
else if (!strcasecmp(operation, "revert")) {
snprintf(timestamp, sizeof timestamp, "%ld", time(NULL));
CtdlRegisterProtoHook(cmd_wiki, "WIKI", "Commands related to Wiki management");
}
- /* return our Subversion id for the Log */
+ /* return our module name for the log */
return "wiki";
}