$NetBSD: patch-al,v 1.3 2015/03/15 15:07:47 mef Exp $


--- smtp.c.orig	2015-02-17 23:00:08.000000000 +0900
+++ smtp.c	2015-03-12 11:30:45.000000000 +0900
@@ -49,8 +49,14 @@ static	time_t Now;
 static	int FirstRead, FirstWrite;
 static	int Terminate, NewTransCheck, NeedTrimDomain, MoreFreeSlot;
 
+static void sig_alarm P((int));
+static void sig_int P((int));
+static void sig_hup P((int));
+static void sig_term P((int));
+static void smtp P((void));
+
 static void
-sig_alarm()
+sig_alarm(int dummy)
 {
 	errno = ETIMEDOUT;
 	if (cnf.debug & DEBUG_EVENT)
@@ -58,21 +64,21 @@ sig_alarm()
 }
 
 static void
-sig_int()
+sig_int(int dummy)
 {
 	logg(LOG_INFO, "SIGINT received: internal states dumped");
 	dump_internal();
 }
 
 static void
-sig_hup()
+sig_hup(int dummy)
 {
 	logg(LOG_INFO, "SIGHUP received: graceful termination");
 	forced_terminate();
 }
 
 static void
-sig_term()
+sig_term(int dummy)
 {
 	logg(LOG_INFO, "SIGTERM received: semi graceful termination");
 	markstatus(env.rcpt_list, SMTP_TEMPFAIL(51),
@@ -207,15 +213,53 @@ deliver()
 	resource_usage("finalstatus done");
 }
 
-static int smtp_connected(), smtp_greeted(), smtp_flush();
-static int smtp_helo_r(), smtp_helo_r();
-static int smtp_mail_r(), smtp_rcpt_r(), smtp_rcpt_s();
-static int smtp_data_r(), smtp_data_body(), smtp_data_t();
-static int smtp_rset_r(), smtp_quit_r();
+static int smtp_connected P((struct connection *));
+static int smtp_flush P((struct connection *));
+static int smtp_greeted P((struct connection *));
+static int smtp_helo_r P((struct connection *));
+static int smtp_mail_r P((struct connection *));
+static int smtp_rcpt_r P((struct connection *));
+static int smtp_data_r P((struct connection *));
+static int smtp_data_body P((struct connection *));
+static int smtp_data_t P((struct connection *));
+static int smtp_rset_r P((struct connection *));
+static int smtp_quit_r P((struct connection *));
+
+static int smtp_helo_s P((struct connection *));
+static int smtp_mail_s P((struct connection *));
+static int smtp_rcpt_s P((struct connection *));
+static int smtp_data_s P((struct connection *));
+static int smtp_rset_s P((struct connection *));
+static int smtp_quit_s P((struct connection *));
+
+static int new_transaction P((void));
+static void process_connection P((fd_set *, fd_set *, int, int));
+static void markstatus P((struct recipient *, int, const char *, int));
+static struct connection *open_transaction P((struct recipient *));
+static void close_transaction P((struct connection *, int));
+static void trim_rcpts P((struct domain *));
+static int trim_domain P((void));
+static void forced_terminate P((void));
+
+static int smtp_connect P((struct connection *));
+void smtp_close P((int));
+static int smtp_read P((struct connection *, char *, int, int *));
+static int smtp_write P((struct connection *, char *, int, int));
+static int smtp_get_reply P((struct connection *,
+			     void (*) P((struct connection *, char *)),
+			     char *, int, int *));
+static int smtp_send_command P((struct connection *, char *, int, int));
+static void esmtp_check P((struct connection *, char *));
+static void ehlo_opt P((struct connection *, char *));
+static char *skipaddr P((char *, char *addr));
+static int may_be_reused P((struct connection *));
+static int smtp_timeout P((struct connection *));
+static void dump_internal P((void));
+static char *smtpstrerror P((int));
 
 static struct	{
-	int (*recv)();
-	int (*send)();
+	int (*recv) P((struct connection *));
+	int (*send) P((struct connection *));
 	time_t tout;
 	char *name;
 } state_tbl[] = {
@@ -338,7 +382,7 @@ smtp()
 	int i, fds, rc, in_use, burst, true_terminate;
 	int all_done = 0;
 	int bad_state = 0;
-	char *msg;
+	const char *msg;
 
 	/* initialize work pointers */
 	for (rcptp = env.rcpt_list; rcptp != NULL; rcptp = rcptp->next)
@@ -645,7 +689,7 @@ new_transaction()
 		}
 		if (domp->curmx == NULL)
 		{
-			char *msg = domp->response;
+			const char *msg = domp->response;
 
 			if (msg == NULL)
 				if (no_addr)
@@ -869,15 +913,15 @@ int timeout_only, true_term;
 }
 
 static void
-markstatus(rcptp, rcode, response, tracechain)
-struct recipient *rcptp;
-int rcode;
-char *response;
-int tracechain;
+markstatus (struct recipient *rcptp,
+	    int rcode,
+	    const char *response,
+	    int tracechain)
 {
 	char hbuf[MAXLINE], rbuf[MAXLINE], pbuf[64];
 	char addrbuf[SYSLOG_BUFSIZE];
-	char *hostname, *proto, *responsep;
+	char *hostname, *proto;
+	const char *responsep;
 	struct host *hostp;
 	int delay, addrlen, estconst, estlen, n;
 	static int PrevPCT = -1;
@@ -1434,7 +1478,7 @@ int next;	/* true: forward MX for next t
 	num_trans--;
 }
 
-void
+static void
 trim_rcpts(domp)
 struct domain *domp;
 {
@@ -1474,7 +1518,7 @@ struct domain *domp;
 		NeedTrimDomain = 1;
 }
 
-int
+static int
 trim_domain()
 {
 	struct domain *domp, *domtmp;
@@ -1515,7 +1559,7 @@ trim_domain()
 	return 0;
 }
 
-void
+static void
 forced_terminate()
 {
 	struct recipient *rcptp;
@@ -1956,7 +2000,7 @@ struct connection *conn;
 {
 	SockAddr cin;
 	int len = sizeof(SockAddr);
-	const char *errmsg;
+	char *errmsg;
 
 	if (getpeername(conn->socket, (struct sockaddr *)&cin, &len) < 0)
 	{
@@ -2261,7 +2305,7 @@ struct connection *conn;
 static int
 smtp_get_reply(conn, func, firstline, size, rest)
 struct connection *conn;
-void (*func)();
+void (*func) P((struct connection *, char *));
 char firstline[];
 int size;
 int *rest;
