Mercurial > hg > mlmmj
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 } |