commit - 564cf6648ae288aa56cd6fd5b45028a5a8aad523
commit + 78c53071b76cb7428ded1a0dc32b99949235feb4
blob - d6c25560687c7bf3e0835a08fda7b2cbe35b7629
blob + cae8aab327ffe2e551a8ed1e0c483d8184b464ca
--- gotd/libexec/got-notify-email/got-notify-email.c
+++ gotd/libexec/got-notify-email/got-notify-email.c
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
+#include <syslog.h>
+#include <getopt.h>
#include <err.h>
#include <pwd.h>
#include <netdb.h>
#include <time.h>
#include <unistd.h>
+#include "log.h"
+
#include "got_error.h"
#include "got_lib_poll.h"
hints.ai_socktype = SOCK_STREAM;
error = getaddrinfo(host, port, &hints, &res0);
if (error)
- errx(1, "failed to resolve %s:%s: %s", host, port,
+ fatalx("failed to resolve %s:%s: %s", host, port,
gai_strerror(error));
s = -1;
freeaddrinfo(res0);
if (s == -1)
- err(1, "%s", cause);
+ fatal("%s", cause);
return s;
}
pw = getpwuid(getuid());
if (pw == NULL) {
- errx(1, "my UID %d was not found in password database",
+ fatalx("my UID %d was not found in password database",
getuid());
}
if (gethostname(hostname, sizeof(hostname)) == -1)
- err(1, "gethostname");
+ fatal("gethostname");
if (asprintf(&s, "%s@%s", pw->pw_name, hostname) == -1)
- err(1, "asprintf");
+ fatal("asprintf");
return s;
}
break;
if (smtp_buflen == sizeof(smtp_buf))
- errx(1, "line too long");
+ fatalx("line too long");
error = got_poll_fd(s, POLLIN, smtp_timeout);
if (error)
- errx(1, "poll: %s", error->msg);
+ fatalx("poll: %s", error->msg);
r = read(s, smtp_buf + smtp_buflen,
sizeof(smtp_buf) - smtp_buflen);
if (r == -1)
- err(1, "read");
+ fatal("read");
if (r == 0)
- errx(1, "unexpected EOF");
+ fatalx("unexpected EOF");
smtp_buflen += r;
}
linelen = endl - smtp_buf;
if (linelen < 3)
- errx(1, "invalid SMTP response");
+ fatalx("invalid SMTP response");
if (strncmp(code, smtp_buf, 3) != 0) {
smtp_buf[3] = '\0';
- warnx("unexpected SMTP message code: %s", smtp_buf);
+ log_warnx("unexpected SMTP message code: %s", smtp_buf);
return -1;
}
len = vsnprintf(buf, sizeof(buf), fmt, ap);
va_end(ap);
if (len < 0) {
- warn("vsnprintf");
+ log_warn("vsnprintf");
return -1;
}
if (len >= sizeof(buf)) {
- warnx("%s: buffer too small for message '%s...'",
+ log_warnx("%s: buffer too small for message '%s...'",
__func__, buf);
return -1;
}
error = got_poll_write_full(s, buf, len);
if (error) {
- warnx("write: %s", error->msg);
+ log_warnx("write: %s", error->msg);
return -1;
}
datestr = get_datestr(&now, datebuf);
if (read_smtp_code(s, "220"))
- errx(1, "unexpected SMTP greeting received");
+ fatalx("unexpected SMTP greeting received");
if (send_smtp_msg(s, "HELO localhost\r\n"))
- errx(1, "could not send HELO");
+ fatalx("could not send HELO");
if (read_smtp_code(s, "250"))
- errx(1, "unexpected SMTP response received");
+ fatalx("unexpected SMTP response received");
if (send_smtp_msg(s, "MAIL FROM:<%s>\r\n", myfromaddr))
- errx(1, "could not send MAIL FROM");
+ fatalx("could not send MAIL FROM");
if (read_smtp_code(s, "250"))
- errx(1, "unexpected SMTP response received");
+ fatalx("unexpected SMTP response received");
if (send_smtp_msg(s, "RCPT TO:<%s>\r\n", recipient))
- errx(1, "could not send MAIL FROM");
+ fatalx("could not send MAIL FROM");
if (read_smtp_code(s, "250"))
- errx(1, "unexpected SMTP response received");
+ fatalx("unexpected SMTP response received");
if (send_smtp_msg(s, "DATA\r\n"))
- errx(1, "could not send MAIL FROM");
+ fatalx("could not send MAIL FROM");
if (read_smtp_code(s, "354"))
- errx(1, "unexpected SMTP response received");
+ fatalx("unexpected SMTP response received");
if (send_smtp_msg(s, "From: %s\r\n", fromaddr))
- errx(1, "could not send From header");
+ fatalx("could not send From header");
if (send_smtp_msg(s, "To: %s\r\n", recipient))
- errx(1, "could not send To header");
+ fatalx("could not send To header");
if (replytoaddr) {
if (send_smtp_msg(s, "Reply-To: %s\r\n", replytoaddr))
- errx(1, "could not send Reply-To header");
+ fatalx("could not send Reply-To header");
}
if (send_smtp_msg(s, "Date: %s +0000 (UTC)\r\n", datestr))
- errx(1, "could not send Date header");
+ fatalx("could not send Date header");
if (send_smtp_msg(s, "Subject: %s\r\n", subject))
- errx(1, "could not send Subject header");
+ fatalx("could not send Subject header");
if (send_smtp_msg(s, "\r\n"))
- errx(1, "could not send body delimiter");
+ fatalx("could not send body delimiter");
while ((linelen = getline(&line, &linesize, stdin)) != -1) {
if (line[0] == '.') { /* dot stuffing */
error = got_poll_write_full(s, ".", 1);
if (error)
- errx(1, "write: %s", error->msg);
+ fatalx("write: %s", error->msg);
}
error = got_poll_write_full(s, line, linelen);
if (error)
- errx(1, "write: %s", error->msg);
+ fatalx("write: %s", error->msg);
}
if (send_smtp_msg(s, "\r\n.\r\n"))
- errx(1, "could not send data terminator");
+ fatalx("could not send data terminator");
if (read_smtp_code(s, "250"))
- errx(1, "unexpected SMTP response received");
+ fatalx("unexpected SMTP response received");
if (send_smtp_msg(s, "QUIT\r\n"))
- errx(1, "could not send QUIT");
+ fatalx("could not send QUIT");
if (read_smtp_code(s, "221"))
- errx(1, "unexpected SMTP response received");
+ fatalx("unexpected SMTP response received");
close(s);
free(line);
char *timeoutstr;
int ch, s;
+ log_init(0, LOG_DAEMON);
while ((ch = getopt(argc, argv, "f:r:s:h:p:")) != -1) {
switch (ch) {
case 'h':
if (timeoutstr) {
smtp_timeout = strtonum(timeoutstr, 0, 600, &errstr);
if (errstr != NULL)
- errx(1, "timeout in seconds is %s: %s",
+ fatalx("timeout in seconds is %s: %s",
errstr, timeoutstr);
}