Original Author: Simon J. Mudd
postfix-2.9-20110130-multiline-greeting.patch
postfix-2.9-20110130-multiline-greeting (8 downloads )
diff -C1 -r postfix-2.9-20110130/src/smtpd/smtpd.c postfix-2.9-20110130.patched/src/smtpd/smtpd.c *** postfix-2.9-20110130/src/smtpd/smtpd.c Wed Jan 26 01:30:14 2011 --- postfix-2.9-20110130.patched/src/smtpd/smtpd.c Mon Jan 31 13:35:51 2011 *************** *** 4529,4531 **** } else { ! smtpd_chat_reply(state, "220 %s", var_smtpd_banner); } --- 4529,4531 ---- } else { ! smtpd_chat_reply_multiline(state, 220, var_smtpd_banner); } diff -C1 -r postfix-2.9-20110130/src/smtpd/smtpd_chat.c postfix-2.9-20110130.patched/src/smtpd/smtpd_chat.c *** postfix-2.9-20110130/src/smtpd/smtpd_chat.c Tue Jan 25 21:53:32 2011 --- postfix-2.9-20110130.patched/src/smtpd/smtpd_chat.c Mon Jan 31 13:35:51 2011 *************** *** 64,65 **** --- 64,66 ---- #include <stdarg.h> + #include <ctype.h> *************** *** 217,218 **** --- 218,274 ---- state->flags |= SMTPD_FLAG_HANGUP; + } + + /* trim_line - remove trailing whitespace and return a pointer to the first */ + /* non-space char in the string. Based on TRIM() in ../util/dict.c */ + /* WARNING: this function is DESTRUCTIVE. */ + + static char *trim_line( char *line ) { + char *p; + + for (p=line + strlen(line); p > line && ISSPACE(p[-1]); p--); + *p = 0; + + while ( ISSPACE(*line) ) + ++line; + + return ( line ); + } + + /* smtpd_chat_reply_multiline - convert multline string into seperate */ + /* lines, sending each one to smtpd_chat_reply() */ + + #define LINE_SEPARATOR "\n" + + void smtpd_chat_reply_multiline(SMTPD_STATE *state, int smtp_reply_code, char *format,...) + { + va_list ap; + char *line, *line2; /* one line (of the multiline) reply */ + size_t size; /* size of a single line */ + static VSTRING *temp_line; /* SMTP reply before unescapeing */ + static VSTRING *multiline; /* SMTP reply after unescaping */ + + /* First-time intialization. */ + if (!temp_line) + temp_line = vstring_alloc(512); + if (!multiline) + multiline = vstring_alloc(512); + + va_start(ap, format); + vstring_vsprintf(temp_line, format, ap); + va_end(ap); + + /* unescape lines with "\\n", converting them to "\n" */ + unescape( multiline, STR(temp_line) ); + + line = STR(multiline); + while ( (size = strcspn(line, LINE_SEPARATOR)) < strlen(line) ) { + *(line + size) = 0; + + line2 = trim_line(line); + smtpd_chat_reply(state, "%03d-%s", smtp_reply_code, line2); + + line += size + 1; + } + line2 = trim_line(line); + smtpd_chat_reply(state, "%03d %s", smtp_reply_code, line2); } diff -C1 -r postfix-2.9-20110130/src/smtpd/smtpd_chat.h postfix-2.9-20110130.patched/src/smtpd/smtpd_chat.h *** postfix-2.9-20110130/src/smtpd/smtpd_chat.h Tue Apr 25 01:48:28 2006 --- postfix-2.9-20110130.patched/src/smtpd/smtpd_chat.h Mon Jan 31 13:35:51 2011 *************** *** 17,18 **** --- 17,19 ---- extern void PRINTFLIKE(2, 3) smtpd_chat_reply(SMTPD_STATE *, const char *, ...); + extern void smtpd_chat_reply_multiline(SMTPD_STATE *, int, char *, ...); extern void smtpd_chat_notify(SMTPD_STATE *);
i try to use the multi line greeting patch provided to simon j mudd without succes
it is possible to use your patch with standard distribution postfix 2.8.2
Well, multiline greeting i’ve provided is actually simon’s patch. i’ve just modified a bit to keep it applied to any postfix version
Here’s for 2.8.x
https://kutukupret.com/download/2954/?tmstv=1719371273