Mercurial > dnsbl
comparison src/scanner.cpp @ 6:cea50d98a6cf
start work on content url scanner
author | carl |
---|---|
date | Wed, 21 Apr 2004 22:39:46 -0700 |
parents | |
children | 93ff6d1ef647 |
comparison
equal
deleted
inserted
replaced
5:793ac9cc114d | 6:cea50d98a6cf |
---|---|
1 // normal stuff | |
2 #include <stdio.h> | |
3 #include <stdlib.h> | |
4 | |
5 // needed for std c++ collections | |
6 #include <set> | |
7 #include <map> | |
8 #include <list> | |
9 | |
10 // for the dns resolver | |
11 #include <netinet/in.h> | |
12 #include <arpa/nameser.h> | |
13 #include <resolv.h> | |
14 | |
15 // misc stuff needed here | |
16 #include <ctype.h> | |
17 #include <fstream> | |
18 | |
19 static char* version="$Id$"; | |
20 | |
21 using namespace std; | |
22 | |
23 enum status {oksofar, // not rejected yet | |
24 white, // whitelisted by envelope from | |
25 black, // blacklisted by envelope from or to | |
26 reject}; // rejected by a dns list | |
27 | |
28 enum state {//u_init, // url decoder states | |
29 | |
30 m_init, // mime decoder states | |
31 m_eq, | |
32 m_1, | |
33 | |
34 e_init, // html entity decoder states | |
35 e_amp, | |
36 e_num, | |
37 | |
38 b_init, // base64 decoder states | |
39 b_lf, | |
40 b_lf2, | |
41 b_64, | |
42 | |
43 end_state, // counter for number of columns in the table | |
44 | |
45 m_2, // temporary mime states | |
46 m_cr, | |
47 m_nl, | |
48 e_semi, | |
49 b_cr, | |
50 }; | |
51 | |
52 typedef state PARSE[end_state]; | |
53 | |
54 static PARSE parse_table[256] = { | |
55 // m_init, m_eq, m_1, e_init, e_amp, e_num, b_init, b_lf, b_lf2, b_64 | |
56 | |
57 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x00 | |
58 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x01 | |
59 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x02 | |
60 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x03 | |
61 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x04 | |
62 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x05 | |
63 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x06 | |
64 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x07 | |
65 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x08 | |
66 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x09 | |
67 {m_init, m_nl, m_init, e_init, e_init, e_init, b_lf, b_init, b_lf2, b_init, }, // 0x0a <lf> | |
68 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x0b | |
69 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x0c | |
70 {m_init, m_cr, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_cr, }, // 0x0d <cr> | |
71 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x0e | |
72 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x0f | |
73 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x10 | |
74 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x11 xon char | |
75 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x12 | |
76 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x13 xoff char | |
77 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x14 | |
78 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x15 | |
79 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x16 | |
80 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x17 | |
81 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x18 | |
82 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x19 | |
83 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x1a | |
84 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x1b | |
85 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x1c | |
86 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x1d | |
87 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x1e | |
88 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x1f | |
89 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x20 space | |
90 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x21 ! | |
91 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x22 "" | |
92 {m_init, m_init, m_init, e_init, e_num, e_init, b_init, b_init, b_init, b_init, }, // 0x23 # | |
93 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x24 $ | |
94 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x25 % | |
95 {m_init, m_init, m_init, e_amp, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x26 & | |
96 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x27 ' | |
97 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x28 ( | |
98 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x29 ) | |
99 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x2A * | |
100 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x2B + | |
101 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x2C , | |
102 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x2D - | |
103 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x2E . | |
104 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x2F / | |
105 {m_init, m_1, m_2, e_init, e_init, e_num, b_init, b_64, b_64, b_64, }, // 0x30 0 | |
106 {m_init, m_1, m_2, e_init, e_init, e_num, b_init, b_64, b_64, b_64, }, // 0x31 1 | |
107 {m_init, m_1, m_2, e_init, e_init, e_num, b_init, b_64, b_64, b_64, }, // 0x32 2 | |
108 {m_init, m_1, m_2, e_init, e_init, e_num, b_init, b_64, b_64, b_64, }, // 0x33 3 | |
109 {m_init, m_1, m_2, e_init, e_init, e_num, b_init, b_64, b_64, b_64, }, // 0x34 4 | |
110 {m_init, m_1, m_2, e_init, e_init, e_num, b_init, b_64, b_64, b_64, }, // 0x35 5 | |
111 {m_init, m_1, m_2, e_init, e_init, e_num, b_init, b_64, b_64, b_64, }, // 0x36 6 | |
112 {m_init, m_1, m_2, e_init, e_init, e_num, b_init, b_64, b_64, b_64, }, // 0x37 7 | |
113 {m_init, m_1, m_2, e_init, e_init, e_num, b_init, b_64, b_64, b_64, }, // 0x38 8 | |
114 {m_init, m_1, m_2, e_init, e_init, e_num, b_init, b_64, b_64, b_64, }, // 0x39 9 | |
115 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x3A : | |
116 {m_init, m_init, m_init, e_init, e_init, e_semi, b_init, b_init, b_init, b_init, }, // 0x3B ; | |
117 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x3C < | |
118 {m_eq, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x3D = | |
119 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x3E > | |
120 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x3F ? | |
121 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x40 @ | |
122 {m_init, m_1, m_2, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x41 A | |
123 {m_init, m_1, m_2, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x42 B | |
124 {m_init, m_1, m_2, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x43 C | |
125 {m_init, m_1, m_2, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x44 D | |
126 {m_init, m_1, m_2, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x45 E | |
127 {m_init, m_1, m_2, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x46 F | |
128 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x47 G | |
129 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x48 H | |
130 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x49 I | |
131 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x4A J | |
132 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x4B K | |
133 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x4C L | |
134 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x4D M | |
135 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x4E N | |
136 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x4F O | |
137 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x50 P | |
138 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x51 Q | |
139 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x52 R | |
140 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x53 S | |
141 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x54 T | |
142 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x55 U | |
143 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x56 V | |
144 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x57 W | |
145 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x58 X | |
146 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x59 Y | |
147 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x5A Z | |
148 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x5B [ | |
149 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x5C brace | |
150 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x5D ] | |
151 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x5E ^ | |
152 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x5F _ | |
153 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x60 ` | |
154 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x61 a | |
155 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x62 b | |
156 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x63 c | |
157 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x64 d | |
158 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x65 e | |
159 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x66 f | |
160 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x67 g | |
161 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x68 h | |
162 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x69 i | |
163 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x6A j | |
164 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x6B k | |
165 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x6C l | |
166 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x6D m | |
167 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x6E n | |
168 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x6F o | |
169 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x70 p | |
170 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x71 q | |
171 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x72 r | |
172 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x73 s | |
173 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x74 t | |
174 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x75 u | |
175 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x76 v | |
176 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x77 w | |
177 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x78 x | |
178 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x79 y | |
179 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_64, b_64, b_64, }, // 0x7A z | |
180 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x7B { | |
181 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x7C | | |
182 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x7D } | |
183 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x7E ~ | |
184 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x7f | |
185 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x80 | |
186 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x81 | |
187 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x82 | |
188 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x83 | |
189 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x84 | |
190 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x85 | |
191 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x86 | |
192 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x87 | |
193 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x88 | |
194 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x89 | |
195 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x8a | |
196 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x8b | |
197 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x8c | |
198 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x8d | |
199 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x8e | |
200 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x8f | |
201 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x90 | |
202 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x91 | |
203 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x92 | |
204 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x93 | |
205 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x94 | |
206 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x95 | |
207 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x96 | |
208 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x97 | |
209 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x98 | |
210 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x99 | |
211 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x9a | |
212 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x9b | |
213 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x9c | |
214 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x9d | |
215 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x9e | |
216 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0x9f | |
217 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xa0 | |
218 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xa1 | |
219 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xa2 | |
220 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xa3 | |
221 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xa4 | |
222 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xa5 | |
223 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xa6 | |
224 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xa7 | |
225 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xa8 | |
226 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xa9 | |
227 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xaa | |
228 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xab | |
229 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xac | |
230 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xad | |
231 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xae | |
232 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xaf | |
233 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xb0 | |
234 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xb1 | |
235 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xb2 | |
236 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xb3 | |
237 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xb4 | |
238 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xb5 | |
239 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xb6 | |
240 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xb7 | |
241 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xb8 | |
242 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xb9 | |
243 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xba | |
244 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xbb | |
245 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xbc | |
246 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xbd | |
247 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xbe | |
248 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xbf | |
249 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xc0 | |
250 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xc1 | |
251 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xc2 | |
252 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xc3 | |
253 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xc4 | |
254 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xc5 | |
255 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xc6 | |
256 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xc7 | |
257 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xc8 | |
258 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xc9 | |
259 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xca | |
260 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xcb | |
261 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xcc | |
262 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xcd | |
263 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xce | |
264 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xcf | |
265 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xd0 | |
266 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xd1 | |
267 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xd2 | |
268 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xd3 | |
269 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xd4 | |
270 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xd5 | |
271 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xd6 | |
272 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xd7 | |
273 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xd8 | |
274 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xd9 | |
275 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xda | |
276 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xdb | |
277 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xdc | |
278 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xdd | |
279 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xde | |
280 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xdf | |
281 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xe0 | |
282 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xe1 | |
283 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xe2 | |
284 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xe3 | |
285 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xe4 | |
286 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xe5 | |
287 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xe6 | |
288 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xe7 | |
289 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xe8 | |
290 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xe9 | |
291 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xea | |
292 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xeb | |
293 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xec | |
294 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xed | |
295 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xee | |
296 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xef | |
297 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xf0 | |
298 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xf1 | |
299 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xf2 | |
300 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xf3 | |
301 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xf4 | |
302 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xf5 | |
303 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xf6 | |
304 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xf7 | |
305 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xf8 | |
306 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xf9 | |
307 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xfa | |
308 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xfb | |
309 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xfc | |
310 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xfd | |
311 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xfe | |
312 {m_init, m_init, m_init, e_init, e_init, e_init, b_init, b_init, b_init, b_init, }, // 0xff | |
313 }; | |
314 | |
315 | |
316 u_char hex_decode[256] = { | |
317 0, // 0x00 | |
318 0, // 0x01 | |
319 0, // 0x02 | |
320 0, // 0x03 | |
321 0, // 0x04 | |
322 0, // 0x05 | |
323 0, // 0x06 | |
324 0, // 0x07 | |
325 0, // 0x08 | |
326 0, // 0x09 | |
327 0, // 0x0a | |
328 0, // 0x0b | |
329 0, // 0x0c | |
330 0, // 0x0d | |
331 0, // 0x0e | |
332 0, // 0x0f | |
333 0, // 0x10 | |
334 0, // 0x11 xon char | |
335 0, // 0x12 | |
336 0, // 0x13 xoff char | |
337 0, // 0x14 | |
338 0, // 0x15 | |
339 0, // 0x16 | |
340 0, // 0x17 | |
341 0, // 0x18 | |
342 0, // 0x19 | |
343 0, // 0x1a | |
344 0, // 0x1b | |
345 0, // 0x1c | |
346 0, // 0x1d | |
347 0, // 0x1e | |
348 0, // 0x1f | |
349 0, // 0x20 space | |
350 0, // 0x21 ! | |
351 0, // 0x22 "" | |
352 0, // 0x23 # | |
353 0, // 0x24 $ | |
354 0, // 0x25 % | |
355 0, // 0x26 & | |
356 0, // 0x27 ' | |
357 0, // 0x28 ( | |
358 0, // 0x29 ) | |
359 0, // 0x2A * | |
360 0, // 0x2B + | |
361 0, // 0x2C , | |
362 0, // 0x2D - | |
363 0, // 0x2E . | |
364 0, // 0x2F / | |
365 0, // 0x30 0 | |
366 1, // 0x31 1 | |
367 2, // 0x32 2 | |
368 3, // 0x33 3 | |
369 4, // 0x34 4 | |
370 5, // 0x35 5 | |
371 6, // 0x36 6 | |
372 7, // 0x37 7 | |
373 8, // 0x38 8 | |
374 9, // 0x39 9 | |
375 0, // 0x3A : | |
376 0, // 0x3B ; | |
377 0, // 0x3C < | |
378 0, // 0x3D = | |
379 0, // 0x3E > | |
380 0, // 0x3F ? | |
381 0, // 0x40 @ | |
382 10, // 0x41 A | |
383 11, // 0x42 B | |
384 12, // 0x43 C | |
385 13, // 0x44 D | |
386 14, // 0x45 E | |
387 15, // 0x46 F | |
388 0, // 0x47 G | |
389 0, // 0x48 H | |
390 0, // 0x49 I | |
391 0, // 0x4A J | |
392 0, // 0x4B K | |
393 0, // 0x4C L | |
394 0, // 0x4D M | |
395 0, // 0x4E N | |
396 0, // 0x4F O | |
397 0, // 0x50 P | |
398 0, // 0x51 Q | |
399 0, // 0x52 R | |
400 0, // 0x53 S | |
401 0, // 0x54 T | |
402 0, // 0x55 U | |
403 0, // 0x56 V | |
404 0, // 0x57 W | |
405 0, // 0x58 X | |
406 0, // 0x59 Y | |
407 0, // 0x5A Z | |
408 0, // 0x5B [ | |
409 0, // 0x5C brace | |
410 0, // 0x5D ] | |
411 0, // 0x5E ^ | |
412 0, // 0x5F _ | |
413 0, // 0x60 ` | |
414 10, // 0x61 a | |
415 11, // 0x62 b | |
416 12, // 0x63 c | |
417 13, // 0x64 d | |
418 14, // 0x65 e | |
419 15, // 0x66 f | |
420 0, // 0x67 g | |
421 0, // 0x68 h | |
422 0, // 0x69 i | |
423 0, // 0x6A j | |
424 0, // 0x6B k | |
425 0, // 0x6C l | |
426 0, // 0x6D m | |
427 0, // 0x6E n | |
428 0, // 0x6F o | |
429 0, // 0x70 p | |
430 0, // 0x71 q | |
431 0, // 0x72 r | |
432 0, // 0x73 s | |
433 0, // 0x74 t | |
434 0, // 0x75 u | |
435 0, // 0x76 v | |
436 0, // 0x77 w | |
437 0, // 0x78 x | |
438 0, // 0x79 y | |
439 0, // 0x7A z | |
440 0, // 0x7B { | |
441 0, // 0x7C | | |
442 0, // 0x7D } | |
443 0, // 0x7E ~ | |
444 0, // 0x7f | |
445 0, // 0x80 | |
446 0, // 0x81 | |
447 0, // 0x82 | |
448 0, // 0x83 | |
449 0, // 0x84 | |
450 0, // 0x85 | |
451 0, // 0x86 | |
452 0, // 0x87 | |
453 0, // 0x88 | |
454 0, // 0x89 | |
455 0, // 0x8a | |
456 0, // 0x8b | |
457 0, // 0x8c | |
458 0, // 0x8d | |
459 0, // 0x8e | |
460 0, // 0x8f | |
461 0, // 0x90 | |
462 0, // 0x91 | |
463 0, // 0x92 | |
464 0, // 0x93 | |
465 0, // 0x94 | |
466 0, // 0x95 | |
467 0, // 0x96 | |
468 0, // 0x97 | |
469 0, // 0x98 | |
470 0, // 0x99 | |
471 0, // 0x9a | |
472 0, // 0x9b | |
473 0, // 0x9c | |
474 0, // 0x9d | |
475 0, // 0x9e | |
476 0, // 0x9f | |
477 0, // 0xa0 | |
478 0, // 0xa1 | |
479 0, // 0xa2 | |
480 0, // 0xa3 | |
481 0, // 0xa4 | |
482 0, // 0xa5 | |
483 0, // 0xa6 | |
484 0, // 0xa7 | |
485 0, // 0xa8 | |
486 0, // 0xa9 | |
487 0, // 0xaa | |
488 0, // 0xab | |
489 0, // 0xac | |
490 0, // 0xad | |
491 0, // 0xae | |
492 0, // 0xaf | |
493 0, // 0xb0 | |
494 0, // 0xb1 | |
495 0, // 0xb2 | |
496 0, // 0xb3 | |
497 0, // 0xb4 | |
498 0, // 0xb5 | |
499 0, // 0xb6 | |
500 0, // 0xb7 | |
501 0, // 0xb8 | |
502 0, // 0xb9 | |
503 0, // 0xba | |
504 0, // 0xbb | |
505 0, // 0xbc | |
506 0, // 0xbd | |
507 0, // 0xbe | |
508 0, // 0xbf | |
509 0, // 0xc0 | |
510 0, // 0xc1 | |
511 0, // 0xc2 | |
512 0, // 0xc3 | |
513 0, // 0xc4 | |
514 0, // 0xc5 | |
515 0, // 0xc6 | |
516 0, // 0xc7 | |
517 0, // 0xc8 | |
518 0, // 0xc9 | |
519 0, // 0xca | |
520 0, // 0xcb | |
521 0, // 0xcc | |
522 0, // 0xcd | |
523 0, // 0xce | |
524 0, // 0xcf | |
525 0, // 0xd0 | |
526 0, // 0xd1 | |
527 0, // 0xd2 | |
528 0, // 0xd3 | |
529 0, // 0xd4 | |
530 0, // 0xd5 | |
531 0, // 0xd6 | |
532 0, // 0xd7 | |
533 0, // 0xd8 | |
534 0, // 0xd9 | |
535 0, // 0xda | |
536 0, // 0xdb | |
537 0, // 0xdc | |
538 0, // 0xdd | |
539 0, // 0xde | |
540 0, // 0xdf | |
541 0, // 0xe0 | |
542 0, // 0xe1 | |
543 0, // 0xe2 | |
544 0, // 0xe3 | |
545 0, // 0xe4 | |
546 0, // 0xe5 | |
547 0, // 0xe6 | |
548 0, // 0xe7 | |
549 0, // 0xe8 | |
550 0, // 0xe9 | |
551 0, // 0xea | |
552 0, // 0xeb | |
553 0, // 0xec | |
554 0, // 0xed | |
555 0, // 0xee | |
556 0, // 0xef | |
557 0, // 0xf0 | |
558 0, // 0xf1 | |
559 0, // 0xf2 | |
560 0, // 0xf3 | |
561 0, // 0xf4 | |
562 0, // 0xf5 | |
563 0, // 0xf6 | |
564 0, // 0xf7 | |
565 0, // 0xf8 | |
566 0, // 0xf9 | |
567 0, // 0xfa | |
568 0, // 0xfb | |
569 0, // 0xfc | |
570 0, // 0xfd | |
571 0, // 0xfe | |
572 0, // 0xff | |
573 }; | |
574 u_char b64_decode[256] = { | |
575 0, // 0x00 | |
576 0, // 0x01 | |
577 0, // 0x02 | |
578 0, // 0x03 | |
579 0, // 0x04 | |
580 0, // 0x05 | |
581 0, // 0x06 | |
582 0, // 0x07 | |
583 0, // 0x08 | |
584 0, // 0x09 | |
585 0, // 0x0a | |
586 0, // 0x0b | |
587 0, // 0x0c | |
588 0, // 0x0d | |
589 0, // 0x0e | |
590 0, // 0x0f | |
591 0, // 0x10 | |
592 0, // 0x11 xon char | |
593 0, // 0x12 | |
594 0, // 0x13 xoff char | |
595 0, // 0x14 | |
596 0, // 0x15 | |
597 0, // 0x16 | |
598 0, // 0x17 | |
599 0, // 0x18 | |
600 0, // 0x19 | |
601 0, // 0x1a | |
602 0, // 0x1b | |
603 0, // 0x1c | |
604 0, // 0x1d | |
605 0, // 0x1e | |
606 0, // 0x1f | |
607 0, // 0x20 space | |
608 0, // 0x21 ! | |
609 0, // 0x22 "" | |
610 0, // 0x23 # | |
611 0, // 0x24 $ | |
612 0, // 0x25 % | |
613 0, // 0x26 & | |
614 0, // 0x27 ' | |
615 0, // 0x28 ( | |
616 0, // 0x29 ) | |
617 0, // 0x2A * | |
618 62, // 0x2B + | |
619 0, // 0x2C , | |
620 0, // 0x2D - | |
621 0, // 0x2E . | |
622 63, // 0x2F / | |
623 52, // 0x30 0 | |
624 53, // 0x31 1 | |
625 54, // 0x32 2 | |
626 55, // 0x33 3 | |
627 56, // 0x34 4 | |
628 57, // 0x35 5 | |
629 58, // 0x36 6 | |
630 59, // 0x37 7 | |
631 60, // 0x38 8 | |
632 61, // 0x39 9 | |
633 0, // 0x3A : | |
634 0, // 0x3B ; | |
635 0, // 0x3C < | |
636 0, // 0x3D = | |
637 0, // 0x3E > | |
638 0, // 0x3F ? | |
639 0, // 0x40 @ | |
640 0, // 0x41 A | |
641 1, // 0x42 B | |
642 2, // 0x43 C | |
643 3, // 0x44 D | |
644 4, // 0x45 E | |
645 5, // 0x46 F | |
646 6, // 0x47 G | |
647 7, // 0x48 H | |
648 8, // 0x49 I | |
649 9, // 0x4A J | |
650 10, // 0x4B K | |
651 11, // 0x4C L | |
652 12, // 0x4D M | |
653 13, // 0x4E N | |
654 14, // 0x4F O | |
655 15, // 0x50 P | |
656 16, // 0x51 Q | |
657 17, // 0x52 R | |
658 18, // 0x53 S | |
659 19, // 0x54 T | |
660 20, // 0x55 U | |
661 21, // 0x56 V | |
662 22, // 0x57 W | |
663 23, // 0x58 X | |
664 24, // 0x59 Y | |
665 25, // 0x5A Z | |
666 0, // 0x5B [ | |
667 0, // 0x5C brace | |
668 0, // 0x5D ] | |
669 0, // 0x5E ^ | |
670 0, // 0x5F _ | |
671 0, // 0x60 ` | |
672 26, // 0x61 a | |
673 27, // 0x62 b | |
674 28, // 0x63 c | |
675 29, // 0x64 d | |
676 30, // 0x65 e | |
677 31, // 0x66 f | |
678 32, // 0x67 g | |
679 33, // 0x68 h | |
680 34, // 0x69 i | |
681 35, // 0x6A j | |
682 36, // 0x6B k | |
683 37, // 0x6C l | |
684 38, // 0x6D m | |
685 39, // 0x6E n | |
686 40, // 0x6F o | |
687 41, // 0x70 p | |
688 42, // 0x71 q | |
689 43, // 0x72 r | |
690 44, // 0x73 s | |
691 45, // 0x74 t | |
692 46, // 0x75 u | |
693 47, // 0x76 v | |
694 48, // 0x77 w | |
695 49, // 0x78 x | |
696 50, // 0x79 y | |
697 51, // 0x7A z | |
698 0, // 0x7B { | |
699 0, // 0x7C | | |
700 0, // 0x7D } | |
701 0, // 0x7E ~ | |
702 0, // 0x7f | |
703 0, // 0x80 | |
704 0, // 0x81 | |
705 0, // 0x82 | |
706 0, // 0x83 | |
707 0, // 0x84 | |
708 0, // 0x85 | |
709 0, // 0x86 | |
710 0, // 0x87 | |
711 0, // 0x88 | |
712 0, // 0x89 | |
713 0, // 0x8a | |
714 0, // 0x8b | |
715 0, // 0x8c | |
716 0, // 0x8d | |
717 0, // 0x8e | |
718 0, // 0x8f | |
719 0, // 0x90 | |
720 0, // 0x91 | |
721 0, // 0x92 | |
722 0, // 0x93 | |
723 0, // 0x94 | |
724 0, // 0x95 | |
725 0, // 0x96 | |
726 0, // 0x97 | |
727 0, // 0x98 | |
728 0, // 0x99 | |
729 0, // 0x9a | |
730 0, // 0x9b | |
731 0, // 0x9c | |
732 0, // 0x9d | |
733 0, // 0x9e | |
734 0, // 0x9f | |
735 0, // 0xa0 | |
736 0, // 0xa1 | |
737 0, // 0xa2 | |
738 0, // 0xa3 | |
739 0, // 0xa4 | |
740 0, // 0xa5 | |
741 0, // 0xa6 | |
742 0, // 0xa7 | |
743 0, // 0xa8 | |
744 0, // 0xa9 | |
745 0, // 0xaa | |
746 0, // 0xab | |
747 0, // 0xac | |
748 0, // 0xad | |
749 0, // 0xae | |
750 0, // 0xaf | |
751 0, // 0xb0 | |
752 0, // 0xb1 | |
753 0, // 0xb2 | |
754 0, // 0xb3 | |
755 0, // 0xb4 | |
756 0, // 0xb5 | |
757 0, // 0xb6 | |
758 0, // 0xb7 | |
759 0, // 0xb8 | |
760 0, // 0xb9 | |
761 0, // 0xba | |
762 0, // 0xbb | |
763 0, // 0xbc | |
764 0, // 0xbd | |
765 0, // 0xbe | |
766 0, // 0xbf | |
767 0, // 0xc0 | |
768 0, // 0xc1 | |
769 0, // 0xc2 | |
770 0, // 0xc3 | |
771 0, // 0xc4 | |
772 0, // 0xc5 | |
773 0, // 0xc6 | |
774 0, // 0xc7 | |
775 0, // 0xc8 | |
776 0, // 0xc9 | |
777 0, // 0xca | |
778 0, // 0xcb | |
779 0, // 0xcc | |
780 0, // 0xcd | |
781 0, // 0xce | |
782 0, // 0xcf | |
783 0, // 0xd0 | |
784 0, // 0xd1 | |
785 0, // 0xd2 | |
786 0, // 0xd3 | |
787 0, // 0xd4 | |
788 0, // 0xd5 | |
789 0, // 0xd6 | |
790 0, // 0xd7 | |
791 0, // 0xd8 | |
792 0, // 0xd9 | |
793 0, // 0xda | |
794 0, // 0xdb | |
795 0, // 0xdc | |
796 0, // 0xdd | |
797 0, // 0xde | |
798 0, // 0xdf | |
799 0, // 0xe0 | |
800 0, // 0xe1 | |
801 0, // 0xe2 | |
802 0, // 0xe3 | |
803 0, // 0xe4 | |
804 0, // 0xe5 | |
805 0, // 0xe6 | |
806 0, // 0xe7 | |
807 0, // 0xe8 | |
808 0, // 0xe9 | |
809 0, // 0xea | |
810 0, // 0xeb | |
811 0, // 0xec | |
812 0, // 0xed | |
813 0, // 0xee | |
814 0, // 0xef | |
815 0, // 0xf0 | |
816 0, // 0xf1 | |
817 0, // 0xf2 | |
818 0, // 0xf3 | |
819 0, // 0xf4 | |
820 0, // 0xf5 | |
821 0, // 0xf6 | |
822 0, // 0xf7 | |
823 0, // 0xf8 | |
824 0, // 0xf9 | |
825 0, // 0xfa | |
826 0, // 0xfb | |
827 0, // 0xfc | |
828 0, // 0xfd | |
829 0, // 0xfe | |
830 0, // 0xff | |
831 }; | |
832 | |
833 #define PENDING_LIMIT 1000 | |
834 struct fsa { | |
835 u_char pending[PENDING_LIMIT]; | |
836 int count; | |
837 state st; | |
838 state init; | |
839 fsa* next; | |
840 | |
841 fsa(state init, fsa* next_); | |
842 void push(u_char *buf, int len); | |
843 }; | |
844 | |
845 fsa::fsa(state init_, fsa* next_) { | |
846 count = 0; | |
847 st = init_; | |
848 init = init_; | |
849 next = next_; | |
850 } | |
851 | |
852 void fsa::push(u_char *buf, int len) { | |
853 for (int i=0; i<len; i++) { | |
854 u_char c = buf[i]; | |
855 // guard against buffer overflow | |
856 if (count == PENDING_LIMIT-1) { | |
857 if (next) next->push(pending, count); | |
858 else { | |
859 pending[count] = 0; | |
860 fprintf(stdout, "%s", (char*)pending); | |
861 } | |
862 count = 0; | |
863 st = init; | |
864 } | |
865 pending[count++] = c; | |
866 st = parse_table[c][st]; | |
867 switch (st) { | |
868 | |
869 ////////////////////////////// | |
870 // mime decoder | |
871 case m_2: { | |
872 pending[0] = hex_decode[pending[1]] * 16 + hex_decode[pending[2]]; | |
873 count = 1; | |
874 st = m_init; | |
875 } // fall thru | |
876 | |
877 case m_init: { | |
878 if (next) next->push(pending, count); | |
879 else { | |
880 pending[count] = 0; | |
881 fprintf(stdout, "%s", (char*)pending); | |
882 } | |
883 count = 0; | |
884 } break; | |
885 | |
886 case m_cr: { | |
887 count = 1; | |
888 st = m_eq; | |
889 } break; | |
890 | |
891 case m_nl: { | |
892 count = 0; | |
893 st = m_init; | |
894 } break; | |
895 | |
896 ////////////////////////////// | |
897 // html entity decoder | |
898 case e_semi: { | |
899 pending[--count] = '\0'; // null terminate the digit string by overwriting the semicolon | |
900 pending[0] = atoi((const char *)pending+2); | |
901 count = 1; | |
902 st = e_init; | |
903 } // fall thru | |
904 | |
905 case e_init: { | |
906 if (next) next->push(pending, count); | |
907 else { | |
908 pending[count] = 0; | |
909 fprintf(stdout, "%s", (char*)pending); | |
910 } | |
911 count = 0; | |
912 } break; | |
913 | |
914 ////////////////////////////// | |
915 // base64 decoder | |
916 case b_lf2: { | |
917 count--; | |
918 } break; | |
919 | |
920 case b_cr: { | |
921 int cnt = 0; | |
922 if ((count % 4) == 1) { | |
923 count--; | |
924 // might have proper b64 data | |
925 for (int i=0; i<count; i+=4) { | |
926 unsigned long a1 = b64_decode[pending[i]]; | |
927 unsigned long a2 = b64_decode[pending[i+1]]; | |
928 unsigned long a3 = b64_decode[pending[i+2]]; | |
929 unsigned long a4 = b64_decode[pending[i+3]]; | |
930 unsigned long a = (a1 << 18) | (a2 << 12) | (a3 << 6) | a4; | |
931 pending[cnt++] = (a & 0x00ff0000) >> 16; | |
932 pending[cnt++] = (a & 0x0000ff00) >> 8; | |
933 pending[cnt++] = (a & 0x000000ff); | |
934 if ((char)pending[i+3] == '=') cnt--; | |
935 if ((char)pending[i+2] == '=') cnt--; | |
936 } | |
937 count = cnt; | |
938 st = b_lf2; | |
939 } | |
940 else st = b_init; | |
941 } // fall thru | |
942 | |
943 case b_lf: | |
944 case b_init: { | |
945 if (next) next->push(pending, count); | |
946 else { | |
947 pending[count] = 0; | |
948 fprintf(stdout, "%s", (char*)pending); | |
949 } | |
950 count = 0; | |
951 } break; | |
952 | |
953 ////////////////////////////// | |
954 // states that just accumulate characters in the pending buffer | |
955 case e_amp: | |
956 case e_num: | |
957 case b_64: | |
958 case m_eq: | |
959 case m_1: | |
960 default: { | |
961 } break; | |
962 } | |
963 } | |
964 } | |
965 | |
966 | |
967 | |
968 //////////////////////////////////////////////// | |
969 // ask a dns question and get an A record answer | |
970 // | |
971 static unsigned long dns_interface(char *question); | |
972 static unsigned long dns_interface(char *question) { | |
973 u_char answer[NS_PACKETSZ]; | |
974 int length = res_search(question, ns_c_in, ns_t_a, answer, sizeof(answer)); | |
975 if (length < 0) return oksofar; // error in getting answer | |
976 // parse the answer | |
977 ns_msg handle; | |
978 ns_rr rr; | |
979 if (ns_initparse(answer, length, &handle) != 0) return oksofar; | |
980 int rrnum = 0; | |
981 while (ns_parserr(&handle, ns_s_an, rrnum++, &rr) == 0) { | |
982 if (ns_rr_type(rr) == ns_t_a) { | |
983 unsigned long address; | |
984 memcpy(&address, ns_rr_rdata(rr), sizeof(address)); | |
985 return reject; | |
986 } | |
987 } | |
988 return 0; | |
989 } | |
990 | |
991 //////////////////////////////////////////////// | |
992 // check a single dnsbl - we don't try very hard, just | |
993 // using the default resolver retry settings. If we cannot | |
994 // get an answer, we just accept the mail. The caller | |
995 // must ensure thread safety. | |
996 // | |
997 static status check_single(int ip, char *suffix); | |
998 static status check_single(int ip, char *suffix) { | |
999 // make a dns question | |
1000 const u_char *src = (const u_char *)&ip; | |
1001 if (src[0] == 127) return oksofar; // don't do dns lookups on localhost | |
1002 char question[NS_MAXDNAME]; | |
1003 snprintf(question, sizeof(question), "%u.%u.%u.%u.%s.", src[3], src[2], src[1], src[0], suffix); | |
1004 // ask the question, if we get an A record it implies a blacklisted ip address | |
1005 unsigned long ans = dns_interface(question); | |
1006 return (ans) ? reject : oksofar; | |
1007 } | |
1008 | |
1009 | |
1010 //////////////////////////////////////////////// | |
1011 // scan a file for URLs | |
1012 // | |
1013 static void scan_file(char *fn, fsa& parser); | |
1014 static void scan_file(char *fn, fsa& parser) { | |
1015 const int LINE_SIZE = 2000; | |
1016 char line[LINE_SIZE]; | |
1017 ifstream is(fn); | |
1018 while (!is.eof()) { | |
1019 is.getline(line, LINE_SIZE-1); | |
1020 int n = strlen(line); | |
1021 line[n++] = '\n'; | |
1022 parser.push((u_char*)line, n); | |
1023 } | |
1024 is.close(); | |
1025 } | |
1026 | |
1027 | |
1028 int main(int argc, char**argv) | |
1029 { | |
1030 char *fn = argv[1]; | |
1031 fsa *html_parser = new fsa(e_init, NULL); | |
1032 fsa *mime_parser = new fsa(m_init, html_parser); | |
1033 fsa *b64_parser = new fsa(b_init, mime_parser); | |
1034 if (fn) scan_file(fn, *b64_parser); | |
1035 return 0; | |
1036 } |