X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fwiki%2Fserv_wiki.c;h=f3b6ce1027a24dff1a25ec8b184b3542f9936373;hb=6a1cf13717b09efec39499ce68878bbfa110c482;hp=6ae8eda01337959fc060c2c4d9fffe3c2dbed9fe;hpb=817d516abb818afd13704394a790fd1b8180d445;p=citadel.git diff --git a/citadel/modules/wiki/serv_wiki.c b/citadel/modules/wiki/serv_wiki.c index 6ae8eda01..f3b6ce102 100644 --- a/citadel/modules/wiki/serv_wiki.c +++ b/citadel/modules/wiki/serv_wiki.c @@ -1,23 +1,21 @@ /* - * $Id$ - * * Server-side module for Wiki rooms. This handles things like version control. * - * Copyright (c) 2009 by the citadel.org team + * Copyright (c) 2009-2011 by the citadel.org team * - * This program is free 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. + * 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. * - * 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. + * 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 + * 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" @@ -53,7 +51,6 @@ #include "config.h" #include "control.h" #include "user_ops.h" -#include "policy.h" #include "database.h" #include "msgbase.h" #include "euidindex.h" @@ -108,8 +105,9 @@ int wiki_upload_beforesave(struct CtdlMessage *msg) { /* If this isn't a MIME message, don't bother. */ if (msg->cm_format_type != 4) return(0); - /* If there's no EUID we can't do this. */ - if (msg->cm_fields['E'] == NULL) return(0); + /* If there's no EUID we can't do this. Reject the post. */ + if (msg->cm_fields['E'] == NULL) return(1); + snprintf(history_page, sizeof history_page, "%s_HISTORY_", msg->cm_fields['E']); /* Make sure we're saving a real wiki page rather than a wiki history page. @@ -132,7 +130,7 @@ int wiki_upload_beforesave(struct CtdlMessage *msg) { msg->cm_fields['U'] = strdup(msg->cm_fields['E']); /* See if we can retrieve the previous version. */ - old_msgnum = locate_message_by_euid(msg->cm_fields['E'], &CCC->room); + old_msgnum = CtdlLocateMessageByEuid(msg->cm_fields['E'], &CCC->room); if (old_msgnum > 0L) { old_msg = CtdlFetchMessage(old_msgnum, 1); } @@ -203,7 +201,7 @@ int wiki_upload_beforesave(struct CtdlMessage *msg) { /* Now look for the existing edit history */ - history_msgnum = locate_message_by_euid(history_page, &CCC->room); + history_msgnum = CtdlLocateMessageByEuid(history_page, &CCC->room); history_msg = NULL; if (history_msgnum > 0L) { history_msg = CtdlFetchMessage(history_msgnum, 1); @@ -365,7 +363,7 @@ void wiki_history(char *pagename) { } snprintf(history_page_name, sizeof history_page_name, "%s_HISTORY_", pagename); - msgnum = locate_message_by_euid(history_page_name, &CC->room); + msgnum = CtdlLocateMessageByEuid(history_page_name, &CC->room); if (msgnum > 0L) { msg = CtdlFetchMessage(msgnum, 1); } @@ -424,7 +422,7 @@ void wiki_rev_callback(char *name, char *filename, char *partnum, char *disp, CtdlLogPrintf(CTDL_DEBUG, "callback found rev: %s\n", this_rev); /* Perform the patch */ - fp = popen("patch -f -s -p0 --global-reject-file=/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); @@ -443,7 +441,7 @@ void wiki_rev_callback(char *name, char *filename, char *partnum, char *disp, fprintf(fp, "%s\n", buf); } } - } while ((*ptr != 0) && ((int)ptr < ((int)content + length))); + } while ((*ptr != 0) && (ptr < ((char*)content + length))); if (pclose(fp) != 0) { CtdlLogPrintf(CTDL_ERR, "pclose() returned an error - patch failed\n"); } @@ -489,7 +487,7 @@ void wiki_rev(char *pagename, char *rev, char *operation) /* Begin by fetching the current version of the page. We're going to patch * backwards through the diffs until we get the one we want. */ - msgnum = locate_message_by_euid(pagename, &CC->room); + msgnum = CtdlLocateMessageByEuid(pagename, &CC->room); if (msgnum > 0L) { msg = CtdlFetchMessage(msgnum, 1); } @@ -523,7 +521,7 @@ void wiki_rev(char *pagename, char *rev, char *operation) /* Get the revision history */ snprintf(history_page_name, sizeof history_page_name, "%s_HISTORY_", pagename); - msgnum = locate_message_by_euid(history_page_name, &CC->room); + msgnum = CtdlLocateMessageByEuid(history_page_name, &CC->room); if (msgnum > 0L) { msg = CtdlFetchMessage(msgnum, 1); } @@ -574,7 +572,7 @@ void wiki_rev(char *pagename, char *rev, char *operation) fseek(fp, 0L, SEEK_SET); msg->cm_fields['M'] = malloc(len + 1); rv = fread(msg->cm_fields['M'], len, 1, fp); - CtdlLogPrintf(CTDL_DEBUG, "\033[32mdid %d blocks of %d bytes\033[0m\n", rv, len); + CtdlLogPrintf(CTDL_DEBUG, "did %d blocks of %ld bytes\n", rv, len); msg->cm_fields['M'][len] = 0; fclose(fp); } @@ -662,5 +660,5 @@ CTDL_MODULE_INIT(wiki) } /* return our Subversion id for the Log */ - return "$Id$"; + return "wiki"; }