From 9b298a38621af9f8e63d35422c0dac749b306b48 Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Sat, 26 May 2012 12:33:13 +0200 Subject: [PATCH] Fix loading of message template; cut'n'paste code from webcit. Fix leak. --- citadel/modules/extnotify/funambol65.c | 52 ++++++++++++++------------ 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/citadel/modules/extnotify/funambol65.c b/citadel/modules/extnotify/funambol65.c index f4b0d8d38..c7aab3468 100644 --- a/citadel/modules/extnotify/funambol65.c +++ b/citadel/modules/extnotify/funambol65.c @@ -93,11 +93,15 @@ int notify_http_server(char *remoteurl, if (tlen > 0) { /* Load the template message. Get mallocs done too */ - FILE *Ftemplate = NULL; + int fd; + struct stat statbuf; const char *mimetype; + const char *Err = NULL; - Ftemplate = fopen(template, "r"); - if (Ftemplate == NULL) { + fd = open(template, O_RDONLY); + if ((fd < 0) || + (fstat(fd, &statbuf) == -1)) + { char buf[SIZ]; snprintf(buf, SIZ, @@ -110,34 +114,35 @@ int notify_http_server(char *remoteurl, CtdlAideMessage( buf, "External notifier: " - "unable to find message template!"); + "unable to find/stat message template!"); goto abort; } - mimetype = GuessMimeByFilename(template, tlen); - - buf = malloc(SIZ); - memset(buf, 0, SIZ); - SOAPMessage = malloc(3072); - memset(SOAPMessage, 0, 3072); - while(fgets(buf, SIZ, Ftemplate) != NULL) { - strcat(SOAPMessage, buf); - } - fclose(Ftemplate); - - if (strlen(SOAPMessage) < 0) { + Buf = NewStrBufPlain(NULL, statbuf.st_size + 1); + if (StrBufReadBLOB(Buf, &fd, 1, statbuf.st_size, &Err) < 0) { char buf[SIZ]; + close(fd); + snprintf(buf, SIZ, - "Cannot load template file %s;" - " won't send notification\r\n", - file_funambol_msg); + "Cannot load template file %s [%s] " + "won't send notification\r\n", + file_funambol_msg, + Err); syslog(LOG_ERR, "%s", buf); - - CtdlAideMessage(buf, "External notifier: " - "unable to load message template!"); + // TODO: once an hour! + CtdlAideMessage( + buf, + "External notifier: " + "unable to load message template!"); goto abort; } + close(fd); + + mimetype = GuessMimeByFilename(template, tlen); + + SOAPMessage = SmashStrBuf(&Buf); + // Do substitutions help_subst(SOAPMessage, "^notifyuser", user); help_subst(SOAPMessage, "^syncsource", @@ -159,7 +164,8 @@ int notify_http_server(char *remoteurl, IO->HttpReq.headers = curl_slist_append( IO->HttpReq.headers, contenttype); - + free(contenttype); + contenttype = NULL; IO->HttpReq.headers = curl_slist_append( IO->HttpReq.headers, "Accept: application/soap+xml, " -- 2.30.2