#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
+#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
*sockfd = socket(PF_INET, SOCK_STREAM, 0);
if(*sockfd == -1) {
log_error(LOG_ARGS, "Could not get socket");
- exit(EXIT_FAILURE);
+ return;
}
addr.sin_family = PF_INET;
addr.sin_addr.s_addr = inet_addr(relayhost);
addr.sin_port = htons(port);
len = sizeof(addr);
if(connect(*sockfd, (struct sockaddr *)&addr, len) == -1) {
- log_error(LOG_ARGS, "Could not connect to %s, "
- "exiting ... ", relayhost);
- exit(EXIT_FAILURE);
+ log_error(LOG_ARGS, "Could not connect to %s", relayhost);
+ close(*sockfd);
+ *sockfd = -1;
+ return;
}
on = 1;
int retval = 0;
char *reply, *reply2, *tohdr;
+ if(sockfd == -1)
+ return EBADF;
+
if(strchr(to, '@') == NULL) {
errno = 0;
log_error(LOG_ARGS, "No @ in address, ignoring %s",
int retval = 0;
char *reply = NULL;
char *myhostname = hostnamestr();
-
+
init_sockfd(sockfd, relayhost, port);
-
+
+ if(*sockfd == -1)
+ return EBADF;
+
if((reply = checkwait_smtpreply(*sockfd, MLMMJ_CONNECT)) != NULL) {
log_error(LOG_ARGS, "No proper greeting to our connect"
"Reply: [%s]", reply);
int retval, i;
char *reply, *reply2;
+ if(sockfd == -1)
+ return EBADF;
+
retval = write_mail_from(sockfd, from, verpextra);
if(retval) {
log_error(LOG_ARGS, "Could not write MAIL FROM\n");
if(verp) {
initsmtp(&sockfd, relay, smtpport);
- if(write_mail_from(sockfd, verpfrom, verp)) {
+ if(sockfd > -1) {
+ if(write_mail_from(sockfd, verpfrom, verp)) {
log_error(LOG_ARGS,
- "Could not write MAIL FROM\n");
+ "Could not write VERP MAIL FROM. "
+ "Not sending with VERP.");
verp = NULL;
- } else {
+ } else {
reply = checkwait_smtpreply(sockfd, MLMMJ_FROM);
if(reply) {
log_error(LOG_ARGS,
"Mailserver did not "
- "accept verp mail from. "
+ "accept VERP MAIL FROM. "
"Not sending with VERP.");
myfree(reply);
verp = NULL;
}
+ }
+ /* We can't be in SMTP DATA state or anything like
+ * that, so should be able to safely QUIT. */
+ endsmtp(&sockfd);
+ } else {
+ log_error(LOG_ARGS,
+ "Could not connect to "
+ "write VERP MAIL FROM. "
+ "Not sending with VERP.");
+ verp = NULL;
}
- /* We can't be in SMTP DATA state or anything like
- * that, so should be able to safely QUIT. */
- endsmtp(&sockfd);
}
while((dp = readdir(subddir)) != NULL) {