X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmsgbase.c;h=089d50b23edee2a9d5b6e8a603cb26f88a3c65cd;hb=fe4ad631ada6d1c97bd16abf3ed39f6b25a0c6b6;hp=dc407afdc369ff88aad6d06684dd39da9cb03b53;hpb=f81a5a37a8c492f1061c8cca886d820acc9e3fb6;p=citadel.git diff --git a/citadel/msgbase.c b/citadel/msgbase.c index dc407afdc..089d50b23 100644 --- a/citadel/msgbase.c +++ b/citadel/msgbase.c @@ -116,6 +116,15 @@ char *msgkeys[] = { NULL /* Z */ }; +void CtdlMsgSetCM_Fields(struct CtdlMessage *Msg, const char which, const char *buf, long length) +{ + if (Msg->cm_fields[which] != NULL) + free (Msg->cm_fields[which]); + Msg->cm_fields[which] = malloc(length + 1); + memcpy(Msg->cm_fields[which], buf, length); + Msg->cm_fields[which][length] = '\0'; +} + /* * This function is self explanatory. * (What can I say, I'm in a weird mood today...) @@ -1138,7 +1147,7 @@ void mime_download(char *name, char *filename, char *partnum, char *disp, return; } - rv = fwrite(content, length, 1, CC->download_fp); + rv = fwrite(content, length, 1, CCC->download_fp); if (rv <= 0) { MSG_syslog(LOG_EMERG, "mime_download(): Couldn't write: %s\n", strerror(errno)); @@ -1312,6 +1321,49 @@ void CtdlFreeMessage(struct CtdlMessage *msg) free(msg); } +int DupCMField(int i, struct CtdlMessage *OrgMsg, struct CtdlMessage *NewMsg) +{ + long len; + len = strlen(OrgMsg->cm_fields[i]); + NewMsg->cm_fields[i] = malloc(len + 1); + if (NewMsg->cm_fields[i] == NULL) + return 0; + memcpy(NewMsg->cm_fields[i], OrgMsg->cm_fields[i], len); + NewMsg->cm_fields[i][len] = '\0'; + return 1; +} + +struct CtdlMessage * CtdlDuplicateMessage(struct CtdlMessage *OrgMsg) +{ + int i; + struct CtdlMessage *NewMsg; + + if (is_valid_message(OrgMsg) == 0) + return NULL; + NewMsg = (struct CtdlMessage *)malloc(sizeof(struct CtdlMessage)); + if (NewMsg == NULL) + return NULL; + + memcpy(NewMsg, OrgMsg, sizeof(struct CtdlMessage)); + + memset(&NewMsg->cm_fields, 0, sizeof(char*) * 256); + + for (i = 0; i < 256; ++i) + { + if (OrgMsg->cm_fields[i] != NULL) + { + if (!DupCMField(i, OrgMsg, NewMsg)) + { + CtdlFreeMessage(NewMsg); + return NULL; + } + } + } + + return NewMsg; +} + + /* * Pre callback function for multipart/alternative @@ -3499,7 +3551,7 @@ long CtdlSubmitMsg(struct CtdlMessage *msg, /* message to save */ */ void quickie_message(const char *from, const char *fromaddr, - char *to, + const char *to, char *room, const char *text, int format_type, @@ -3546,7 +3598,7 @@ void quickie_message(const char *from, void flood_protect_quickie_message(const char *from, const char *fromaddr, - char *to, + const char *to, char *room, const char *text, int format_type, @@ -4011,11 +4063,6 @@ struct CtdlMessage *CtdlMakeMessage( 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 * room. Returns a *CITADEL ERROR CODE* and puts a message in errmsgbuf, or @@ -4050,7 +4097,7 @@ int CtdlDoIHavePermissionToPostInThisRoom( } if ((PostPublic!=POST_LMTP) &&(CC->room.QRflags2 & QR2_SMTP_PUBLIC) == 0) { - return netconfig_check_roomaccess(errmsgbuf, n, RemoteIdentifier); + return CtdlNetconfigCheckRoomaccess(errmsgbuf, n, RemoteIdentifier); } return (0);