summaryrefslogtreecommitdiff
path: root/src/printmaillist.c
diff options
context:
space:
mode:
authorJannis Hoffmann <jannis@fehcom.de>2024-07-03 15:48:04 +0200
committerJannis Hoffmann <jannis@fehcom.de>2024-07-03 15:48:04 +0200
commit89b7b67a13ebb7965cc7f13ad0595e2194a2d34c (patch)
tree25efd77a90ae87236e6730d8ea3846bbe0fd126f /src/printmaillist.c
add sqmail-4.2.29asqmail-4.2
Diffstat (limited to 'src/printmaillist.c')
-rw-r--r--src/printmaillist.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/printmaillist.c b/src/printmaillist.c
new file mode 100644
index 0000000..6edb3b3
--- /dev/null
+++ b/src/printmaillist.c
@@ -0,0 +1,53 @@
+#include <unistd.h>
+#include "buffer.h"
+#include "logmsg.h"
+#include "stralloc.h"
+#include "getln.h"
+#include "str.h"
+
+#define WHO "printmaillist"
+
+void badformat()
+{
+ logmsg(WHO,100,FATAL,"bad mailing list format");
+}
+
+stralloc line = {0};
+int match;
+
+int main()
+{
+ for (;;) {
+ if (getln(buffer_1small,&line,&match,'\0') == -1)
+ logmsg(WHO,111,FATAL,"unable to read input: ");
+ if (!match) {
+ if (line.len)
+ badformat();
+ if (buffer_flush(buffer_1small) == -1)
+ logmsg(WHO,111,FATAL,"unable to write output: ");
+ _exit(0);
+ }
+
+ if (line.s[str_chr(line.s,'\n')]) badformat();
+ if (line.s[line.len - 1] == ' ') badformat();
+ if (line.s[line.len - 1] == '\t') badformat();
+
+ if ((line.s[0] == '.') || (line.s[0] == '/')) {
+ if (buffer_puts(buffer_1small,line.s) == -1)
+ logmsg(WHO,111,FATAL,"unable to write output: ");
+ if (buffer_puts(buffer_1small,"\n") == -1)
+ logmsg(WHO,111,FATAL,"unable to write output: ");
+ continue;
+ }
+ if (line.s[0] == '&') {
+ if (line.len > 900) badformat();
+ if (buffer_puts(buffer_1small,line.s) == -1)
+ logmsg(WHO,111,FATAL,"unable to write output: ");
+ if (buffer_puts(buffer_1small,"\n") == -1)
+ logmsg(WHO,111,FATAL,"unable to write output: ");
+ continue;
+ }
+
+ badformat();
+ }
+}