Reject Excess 8-Bit Characters
Much of the spam email that arrives from the Far East (especially
Korea and China) is sent with Subject: headers
that contain unencoded 8-bit characters. Because 8-bit characters in
the Subject: header are illegal, it is perfectly
OK to reject such email.
In this section we show you how to write a routine that can reject
8-bit Subject: headers using the
checkcompat( ) routine. In the following
example, the numbers to the left are for reference and are not a part
of the code.
1 int
2 checkcompat(to, e)
3 register ADDRESS *to;
4 register ENVELOPE *e;
5 {
6 char *cp, *h;
7 int len, cnt;
8
9 if (!bitnset(M_LOCALMAILER, to->q_mailer->m_flags))
10 return EX_OK;
11
12 if ((h = hvalue("subject", e->e_header)) = = NULL)
13 return EX_OK;
14
15 if ((len = strlen(h)) = = 0)
16 return EX_OK;
17
18 cnt = 0;
19 for (cp = h; *cp != ''; ++cp)
20 {
21 if ((*cp & 0x80) != 0)
22 ++cnt;
23 }
24 if ((cnt * 2) > len)
25 {
26 e->e_flags |= EF_NO_BODY_RETN;
27 e->e_message = "553 Cannot accept eight-bit subjects";
28 to->q_status = "5.7.1";
29 return EX_UNAVAILABLE;
30 }
31 return EX_OK;
32 }We begin (line 2) by declaring
checkcompat( ) the same way it is declared
inside conf.c. The two arguments
(*to and *e) passed to it are
described in the first section of this appendix.
Our routine for rejecting 8-bit characters in the
Subject: header requires four local variables
(line 6). The *h will point
to the value of the Subject: header. The
*cp will be walked through *h looking ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access