#include "journaling.h"
#include "citadel_dirs.h"
#include "clientsocket.h"
-#include "serv_network.h"
#include "threads.h"
#include "ctdl_module.h"
/* This temp file holds the queue of operations for AdjRefCount() */
static FILE *arcfp = NULL;
-/*
- * This really belongs in serv_network.c, but I don't know how to export
- * symbols between modules.
- */
-struct FilterList *filterlist = NULL;
-
-
/*
* These are the four-character field headers we use when outputting
* messages in Citadel format (as opposed to RFC822 format).
return;
rv = fwrite(content, length, 1, CC->download_fp);
+ if (rv == -1) {
+ syslog(LOG_EMERG, "mime_download(): Couldn't write: %s\n",
+ strerror(errno));
+ }
fflush(CC->download_fp);
rewind(CC->download_fp);
}
}
else if (i == 'K') {
- cprintf("Reply-To: <%s>%s", mptr, nl);
+ hptr = mptr;
+ while ((*hptr != '\0') && isspace(*hptr))
+ hptr ++;
+ if (!IsEmptyStr(hptr))
+ cprintf("Reply-To: %s%s", mptr, nl);
}
if (mptr != mpptr)
free (mptr);
void dump_message(struct CtdlMessage *msg, /* unserialized msg */
long Siz) /* how many chars ? */
{
- size_t wlen;
int i;
static char *forder = FORDER;
char *buf;
buf = (char*) malloc (Siz + 1);
- wlen = 3;
-
for (i=0; i<26; ++i) if (msg->cm_fields[(int)forder[i]] != NULL) {
snprintf (buf, Siz, " msg[%c] = %s ...\n", (char) forder[i],
msg->cm_fields[(int)forder[i]]);
network_fp = fopen(submit_filename, "wb+");
if (network_fp != NULL) {
rv = fwrite(smr.ser, smr.len, 1, network_fp);
+ if (rv == -1) {
+ syslog(LOG_EMERG, "CtdlSubmitMsg(): Couldn't write network spool file: %s\n",
+ strerror(errno));
+ }
fclose(network_fp);
}
free(smr.ser);
return(msg);
}
+extern int netconfig_check_roomaccess(
+ char *errmsgbuf,
+ size_t n,
+ const char* RemoteIdentifier); /* TODO: find a smarter way */
/*
* Check to see whether we have permission to post a message in the current
return (ERROR + NOT_LOGGED_IN);
}
if ((PostPublic!=POST_LMTP) &&(CC->room.QRflags2 & QR2_SMTP_PUBLIC) == 0) {
- SpoolControl *sc;
- char filename[SIZ];
- int found;
-
- if (RemoteIdentifier == NULL)
- {
- snprintf(errmsgbuf, n, "Need sender to permit access.");
- return (ERROR + USERNAME_REQUIRED);
- }
- assoc_file_name(filename, sizeof filename, &CC->room, ctdl_netcfg_dir);
- begin_critical_section(S_NETCONFIGS);
- if (!read_spoolcontrol_file(&sc, filename))
- {
- end_critical_section(S_NETCONFIGS);
- snprintf(errmsgbuf, n,
- "This mailing list only accepts posts from subscribers.");
- return (ERROR + NO_SUCH_USER);
- }
- end_critical_section(S_NETCONFIGS);
- found = is_recipient (sc, RemoteIdentifier);
- free_spoolcontrol_struct(&sc);
- if (found) {
- return (0);
- }
- else {
- snprintf(errmsgbuf, n,
- "This mailing list only accepts posts from subscribers.");
- return (ERROR + NO_SUCH_USER);
- }
+ return netconfig_check_roomaccess(errmsgbuf, n, RemoteIdentifier);
}
return (0);
if ((CC->user.axlevel < AxProbU)
&& ((CC->room.QRflags & QR_MAILBOX) == 0)) {
- snprintf(errmsgbuf, n, "Need to be validated to enter "
- "(except in %s> to sysop)", MAILROOM);
+ snprintf(errmsgbuf, n, "Need to be validated to enter (except in %s> to sysop)", MAILROOM);
return (ERROR + HIGHER_ACCESS_REQUIRED);
}
CtdlRoomAccess(&CC->room, &CC->user, &ra, NULL);
- if ( (!(ra & UA_POSTALLOWED)) && (ra & UA_REPLYALLOWED) && (!is_reply) ) {
+ if (ra & UA_POSTALLOWED) {
+ strcpy(errmsgbuf, "OK to post or reply here");
+ return(0);
+ }
+
+ if ( (ra & UA_REPLYALLOWED) && (is_reply) ) {
/*
* To be thorough, we ought to check to see if the message they are
* replying to is actually a valid one in this room, but unless this
* actually becomes a problem we'll go with high performance instead.
*/
- snprintf(errmsgbuf, n, "You may only reply to existing messages here.");
- return (ERROR + HIGHER_ACCESS_REQUIRED);
+ strcpy(errmsgbuf, "OK to reply here");
+ return(0);
}
- else if (!(ra & UA_POSTALLOWED)) {
- snprintf(errmsgbuf, n, "Higher access is required to post in this room.");
+ if ( (ra & UA_REPLYALLOWED) && (!is_reply) ) {
+ /* Clarify what happened with a better error message */
+ snprintf(errmsgbuf, n, "You may only reply to existing messages here.");
return (ERROR + HIGHER_ACCESS_REQUIRED);
}
- strcpy(errmsgbuf, "Ok");
- return(0);
+ snprintf(errmsgbuf, n, "Higher access is required to post in this room.");
+ return (ERROR + HIGHER_ACCESS_REQUIRED);
+
}
new_arcq.arcq_msgnum = msgnum;
new_arcq.arcq_delta = incr;
rv = fwrite(&new_arcq, sizeof(struct arcq), 1, arcfp);
+ if (rv == -1) {
+ syslog(LOG_EMERG, "Couldn't write Refcount Queue File %s: %s\n",
+ file_arcq,
+ strerror(errno));
+ }
fflush(arcfp);
return;