comparison src/mlmmj-send.c @ 773:2add5c5f88f8

Fix some memory leaks
author Ben Schmidt
date Fri, 12 Nov 2010 00:53:36 +1100
parents 179d5a0ed686
children 62f9b36df5a5
comparison
equal deleted inserted replaced
772:179d5a0ed686 773:2add5c5f88f8
246 const char *listdir, const char *mlmmjbounce, 246 const char *listdir, const char *mlmmjbounce,
247 const char *hdrs, size_t hdrslen, const char *body, 247 const char *hdrs, size_t hdrslen, const char *body,
248 size_t bodylen) 248 size_t bodylen)
249 { 249 {
250 int retval = 0; 250 int retval = 0;
251 char *reply, *tohdr; 251 char *reply, *reply2, *tohdr;
252 252
253 if(strchr(to, '@') == NULL) { 253 if(strchr(to, '@') == NULL) {
254 errno = 0; 254 errno = 0;
255 log_error(LOG_ARGS, "No @ in address, ignoring %s", 255 log_error(LOG_ARGS, "No @ in address, ignoring %s",
256 to); 256 to);
266 if(reply) { 266 if(reply) {
267 log_error(LOG_ARGS, "Error in MAIL FROM. Reply = [%s]", 267 log_error(LOG_ARGS, "Error in MAIL FROM. Reply = [%s]",
268 reply); 268 reply);
269 myfree(reply); 269 myfree(reply);
270 write_rset(sockfd); 270 write_rset(sockfd);
271 checkwait_smtpreply(sockfd, MLMMJ_RSET); 271 reply2 = checkwait_smtpreply(sockfd, MLMMJ_RSET);
272 if (reply2 != NULL) myfree(reply2);
272 return MLMMJ_FROM; 273 return MLMMJ_FROM;
273 } 274 }
274 retval = write_rcpt_to(sockfd, to); 275 retval = write_rcpt_to(sockfd, to);
275 if(retval) { 276 if(retval) {
276 log_error(LOG_ARGS, "Could not write RCPT TO:\n"); 277 log_error(LOG_ARGS, "Could not write RCPT TO:\n");
278 } 279 }
279 280
280 reply = checkwait_smtpreply(sockfd, MLMMJ_RCPTTO); 281 reply = checkwait_smtpreply(sockfd, MLMMJ_RCPTTO);
281 if(reply) { 282 if(reply) {
282 write_rset(sockfd); 283 write_rset(sockfd);
283 checkwait_smtpreply(sockfd, MLMMJ_RSET); 284 reply2 = checkwait_smtpreply(sockfd, MLMMJ_RSET);
285 if (reply2 != NULL) myfree(reply2);
284 if(mlmmjbounce && ((reply[0] == '4') || (reply[0] == '5')) 286 if(mlmmjbounce && ((reply[0] == '4') || (reply[0] == '5'))
285 && (reply[1] == '5')) { 287 && (reply[1] == '5')) {
286 myfree(reply); 288 myfree(reply);
287 return bouncemail(listdir, mlmmjbounce, from); 289 return bouncemail(listdir, mlmmjbounce, from);
288 } else { 290 } else {
302 reply = checkwait_smtpreply(sockfd, MLMMJ_DATA); 304 reply = checkwait_smtpreply(sockfd, MLMMJ_DATA);
303 if(reply) { 305 if(reply) {
304 log_error(LOG_ARGS, "Error with DATA. Reply = [%s]", reply); 306 log_error(LOG_ARGS, "Error with DATA. Reply = [%s]", reply);
305 myfree(reply); 307 myfree(reply);
306 write_rset(sockfd); 308 write_rset(sockfd);
307 checkwait_smtpreply(sockfd, MLMMJ_RSET); 309 reply2 = checkwait_smtpreply(sockfd, MLMMJ_RSET);
310 if (reply2 != NULL) myfree(reply2);
308 return MLMMJ_DATA; 311 return MLMMJ_DATA;
309 } 312 }
310 313
311 if(replyto) { 314 if(replyto) {
312 retval = write_replyto(sockfd, replyto); 315 retval = write_replyto(sockfd, replyto);
360 log_error(LOG_ARGS, "Mailserver did not ack end of mail.\n" 363 log_error(LOG_ARGS, "Mailserver did not ack end of mail.\n"
361 "<CR><LF>.<CR><LF> was written, to no" 364 "<CR><LF>.<CR><LF> was written, to no"
362 "avail. Reply = [%s]", reply); 365 "avail. Reply = [%s]", reply);
363 myfree(reply); 366 myfree(reply);
364 write_rset(sockfd); 367 write_rset(sockfd);
365 checkwait_smtpreply(sockfd, MLMMJ_RSET); 368 reply2 = checkwait_smtpreply(sockfd, MLMMJ_RSET);
369 if (reply2 != NULL) myfree(reply2);
366 return MLMMJ_DOT; 370 return MLMMJ_DOT;
367 } 371 }
368 372
369 return 0; 373 return 0;
370 } 374 }
426 size_t mailsize, const char *from, const char *listdir, 430 size_t mailsize, const char *from, const char *listdir,
427 const char *hdrs, size_t hdrslen, const char *body, 431 const char *hdrs, size_t hdrslen, const char *body,
428 size_t bodylen, const char *verpextra) 432 size_t bodylen, const char *verpextra)
429 { 433 {
430 int retval, i; 434 int retval, i;
431 char *reply; 435 char *reply, *reply2;
432 436
433 retval = write_mail_from(sockfd, from, verpextra); 437 retval = write_mail_from(sockfd, from, verpextra);
434 if(retval) { 438 if(retval) {
435 log_error(LOG_ARGS, "Could not write MAIL FROM\n"); 439 log_error(LOG_ARGS, "Could not write MAIL FROM\n");
436 return retval; 440 return retval;
439 if(reply) { 443 if(reply) {
440 log_error(LOG_ARGS, "Error in MAIL FROM. Reply = [%s]", 444 log_error(LOG_ARGS, "Error in MAIL FROM. Reply = [%s]",
441 reply); 445 reply);
442 myfree(reply); 446 myfree(reply);
443 write_rset(sockfd); 447 write_rset(sockfd);
444 checkwait_smtpreply(sockfd, MLMMJ_RSET); 448 reply2 = checkwait_smtpreply(sockfd, MLMMJ_RSET);
449 if (reply2 != NULL) myfree(reply2);
445 return MLMMJ_FROM; 450 return MLMMJ_FROM;
446 } 451 }
447 for(i = 0; i < addrs->count; i++) { 452 for(i = 0; i < addrs->count; i++) {
448 if(gotsigterm) { 453 if(gotsigterm) {
449 log_error(LOG_ARGS, "TERM signal received, " 454 log_error(LOG_ARGS, "TERM signal received, "
480 reply = checkwait_smtpreply(sockfd, MLMMJ_DATA); 485 reply = checkwait_smtpreply(sockfd, MLMMJ_DATA);
481 if(reply) { 486 if(reply) {
482 log_error(LOG_ARGS, "Error with DATA. Reply = [%s]", reply); 487 log_error(LOG_ARGS, "Error with DATA. Reply = [%s]", reply);
483 myfree(reply); 488 myfree(reply);
484 write_rset(sockfd); 489 write_rset(sockfd);
485 checkwait_smtpreply(sockfd, MLMMJ_RSET); 490 reply2 = checkwait_smtpreply(sockfd, MLMMJ_RSET);
491 if (reply2 != NULL) myfree(reply2);
486 return MLMMJ_DATA; 492 return MLMMJ_DATA;
487 } 493 }
488 494
489 if(prepmailinmem) { 495 if(prepmailinmem) {
490 retval = writen(sockfd, hdrs, hdrslen); 496 retval = writen(sockfd, hdrs, hdrslen);
517 log_error(LOG_ARGS, "Mailserver did not ack end of mail.\n" 523 log_error(LOG_ARGS, "Mailserver did not ack end of mail.\n"
518 "<CR><LF>.<CR><LF> was written, to no" 524 "<CR><LF>.<CR><LF> was written, to no"
519 "avail. Reply = [%s]", reply); 525 "avail. Reply = [%s]", reply);
520 myfree(reply); 526 myfree(reply);
521 write_rset(sockfd); 527 write_rset(sockfd);
522 checkwait_smtpreply(sockfd, MLMMJ_RSET); 528 reply2 = checkwait_smtpreply(sockfd, MLMMJ_RSET);
529 if (reply2 != NULL) myfree(reply2);
523 return MLMMJ_DOT; 530 return MLMMJ_DOT;
524 } 531 }
525 532
526 return 0; 533 return 0;
527 } 534 }