X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fmessages.c;h=2915ce1480d5b623c2320395ee8e7cad63830c56;hb=7ba7f73f95cad7f4ecd7f986e12095e9bb546126;hp=93107db0c5b074410bf2660f2e4a8afcadab3a51;hpb=d1c8cf51268eca39767724aebc7e3a032ee5a3de;p=citadel.git diff --git a/webcit/messages.c b/webcit/messages.c index 93107db0c..2915ce148 100644 --- a/webcit/messages.c +++ b/webcit/messages.c @@ -20,7 +20,7 @@ #include "webcit.h" #include "webserver.h" -#include "groupdav.h" +#include "dav.h" #include "calendar.h" HashList *MsgHeaderHandler = NULL; @@ -1010,7 +1010,7 @@ void post_message(void) int saving_to_drafts = 0; long HeaderLen = 0; - saving_to_drafts = !strcasecmp(bstr("submit_action"), "drafts"); + saving_to_drafts = !strcasecmp(bstr("submit_action"), "draft"); Buf = NewStrBuf(); if (saving_to_drafts) { @@ -1113,7 +1113,7 @@ void post_message(void) if (saving_to_drafts) { AppendImportantMessage(_("Message has been saved to Drafts.\n"), -1); gotoroom(WCC->CurRoom.name); - display_enter(); + readloop(readnew, eUseDefault); FreeStrBuf(&Buf); return; } else if ( (havebstr("recp")) @@ -1307,7 +1307,6 @@ void display_enter(void) const StrBuf *display_name = NULL; int recipient_required = 0; int subject_required = 0; - int recipient_bad = 0; int is_anonymous = 0; wcsession *WCC = WC; int i = 0; @@ -1323,7 +1322,9 @@ void display_enter(void) is_anonymous = 1; } - /* First test to see whether this is a room that requires recipients to be entered */ + /* + * First, do we have permission to enter messages in this room at all? + */ Line = NewStrBuf(); serv_puts("ENT0 0"); StrBuf_ServGetln(Line); @@ -1595,20 +1596,14 @@ void display_enter(void) rc = GetServerStatusMsg(CmdBuf, &Result, 0, 0); if ( (Result == 570) /* invalid or missing recipient(s) */ - || (Result == 550) /* access control problem */ + || (Result == 550) /* higher access required to send Internet mail */ ) { - if ( havebstr("recp") - && havebstr("cc") - && havebstr("bcc") - ) { - recipient_bad = 1; /* FIXME ... do something with this? */ - } + /* These errors will have been displayed and are excusable */ } else if (rc != 2) { /* Any other error means that we cannot continue */ - - /* FIXME IMMEDIATELY this code results in a blank screen!!! */ - wc_printf("%s
\n", ChrPtr(CmdBuf) +4); + AppendImportantMessage(ChrPtr(CmdBuf) + 4, StrLength(CmdBuf) - 4); FreeStrBuf(&CmdBuf); + readloop(readnew, eUseDefault); return; } FreeStrBuf(&CmdBuf); @@ -1726,6 +1721,7 @@ void postpart(StrBuf *partnum, StrBuf *filename, int force_download) void mimepart(int force_download) { long msgnum; + long ErrorDetail; StrBuf *att; wcsession *WCC = WC; StrBuf *Buf; @@ -1739,7 +1735,7 @@ void mimepart(int force_download) serv_printf("OPNA %ld|%s", msgnum, ChrPtr(att)); StrBuf_ServGetln(Buf); - if (GetServerStatus(Buf, NULL) == 2) { + if (GetServerStatus(Buf, &ErrorDetail) == 2) { StrBufCutLeft(Buf, 4); bytes = StrBufExtract_long(Buf, 0, '|'); if (!force_download) { @@ -1763,7 +1759,23 @@ void mimepart(int force_download) http_transmit_thing(CT, 0); } else { StrBufCutLeft(Buf, 4); - hprintf("HTTP/1.1 404 %s\n", ChrPtr(Buf)); + switch (ErrorDetail) { + default: + case ERROR + MESSAGE_NOT_FOUND: + hprintf("HTTP/1.1 404 %s\n", ChrPtr(Buf)); + break; + case ERROR + NOT_LOGGED_IN: + hprintf("HTTP/1.1 401 %s\n", ChrPtr(Buf)); + break; + + case ERROR + HIGHER_ACCESS_REQUIRED: + hprintf("HTTP/1.1 403 %s\n", ChrPtr(Buf)); + break; + case ERROR + INTERNAL_ERROR: + case ERROR + TOO_BIG: + hprintf("HTTP/1.1 500 %s\n", ChrPtr(Buf)); + break; + } output_headers(0, 0, 0, 0, 0, 0); hprintf("Content-Type: text/plain\r\n"); begin_burst();