1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
$NetBSD: patch-ao,v 1.4 2001/04/23 15:06:19 abs Exp $
--- util/TypeRules.c++.orig Sun Jun 13 08:41:26 1999
+++ util/TypeRules.c++
@@ -36,6 +36,14 @@
#include <netinet/in.h>
}
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
TypeRule::TypeRule() {}
TypeRule::~TypeRule() {}
TypeRule::TypeRule(const TypeRule& other)
@@ -51,7 +59,7 @@
}
static const char* typeNames[] =
- { "ascii", "string", "address", "byte", "short", "long" };
+ { "ascii", "asciiesc", "string", "address", "byte", "short", "long" };
static const char* opNames[] =
{ "<any>", "=", "!=", "<", "<=", ">", ">=", "&", "^", "!" };
static const char* resultNames[] = { "tiff", "postscript", "error" };
@@ -68,7 +76,7 @@
);
if (type == STRING)
printf(" \"%s\"", value.s);
- else if (type != ASCII) {
+ else if (type != ASCII && type != ASCIIESC) {
if (op == ANY)
printf(" <any value>");
else
@@ -86,6 +94,7 @@
const u_char* cp = (const u_char*) data;
switch (type) {
case ASCII:
+ {
u_int i;
for (i = 0; i < size; i++)
if (!isprint(cp[i]) && !isspace(cp[i])) {
@@ -95,6 +104,19 @@
}
ok = true;
goto done;
+ }
+ case ASCIIESC:
+ {
+ u_int i;
+ for (i = 0; i < size; i++)
+ if (!isprint(cp[i]) && !isspace(cp[i]) && cp[i] != '\033') {
+ if (verbose)
+ printf("failed (unprintable char %#x)\n", cp[i]);
+ return (FALSE);
+ }
+ ok = TRUE;
+ goto done;
+ }
case STRING:
ok = (strncmp((const char*)(cp+off), value.s,
fxmin((u_int) strlen(value.s), (u_int)(size-off))) == 0);
@@ -311,6 +333,8 @@
rule.type = TypeRule::STRING;
else if (strncasecmp(tp, "ascii", cp-tp) == 0)
rule.type = TypeRule::ASCII;
+ else if (strncasecmp(tp, "asciiesc", cp-tp) == 0)
+ rule.type = TypeRule::ASCIIESC;
else if (strncasecmp(tp, "addr", cp-tp) == 0)
rule.type = TypeRule::ADDR;
else {
@@ -321,7 +345,8 @@
cp++;
rule.op = TypeRule::EQ; // default is '='
const char* vp = cp;
- if (rule.type != TypeRule::STRING && rule.type != TypeRule::ASCII) {
+ if (rule.type != TypeRule::STRING && rule.type != TypeRule::ASCII
+ && rule.type != TypeRule::ASCIIESC) {
// numeric value
switch (*vp) {
case '=': rule.op = TypeRule::EQ; cp++; break;
|