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
|
#ifndef _CIDR_MATCH_H_INCLUDED_
#define _CIDR_MATCH_H_INCLUDED_
/*++
/* NAME
/* dict_cidr 3h
/* SUMMARY
/* CIDR-style pattern matching
/* SYNOPSIS
/* #include <cidr_match.h>
/* DESCRIPTION
/* .nf
/*
* System library.
*/
#include <limits.h> /* CHAR_BIT */
/*
* Utility library.
*/
#include <myaddrinfo.h> /* MAI_V6ADDR_BYTES etc. */
#include <vstring.h>
/*
* External interface.
*
* Address length is protocol dependent. Find out how large our address byte
* strings should be.
*/
#ifdef HAS_IPV6
# define CIDR_MATCH_ABYTES MAI_V6ADDR_BYTES
#else
# define CIDR_MATCH_ABYTES MAI_V4ADDR_BYTES
#endif
/*
* Each parsed CIDR pattern can be member of a linked list.
*/
typedef struct CIDR_MATCH {
int op; /* operation, match or control flow */
int match; /* positive or negative match */
unsigned char net_bytes[CIDR_MATCH_ABYTES]; /* network portion */
unsigned char mask_bytes[CIDR_MATCH_ABYTES]; /* network mask */
unsigned char addr_family; /* AF_XXX */
unsigned char addr_byte_count; /* typically, 4 or 16 */
unsigned char addr_bit_count; /* optimization */
unsigned char mask_shift; /* optimization */
struct CIDR_MATCH *next; /* next entry */
struct CIDR_MATCH *block_end; /* block terminator */
} CIDR_MATCH;
#define CIDR_MATCH_OP_MATCH 1 /* Match this pattern */
#define CIDR_MATCH_OP_IF 2 /* Increase if/endif nesting on match */
#define CIDR_MATCH_OP_ENDIF 3 /* Decrease if/endif nesting on match */
#define CIDR_MATCH_TRUE 1 /* Request positive match */
#define CIDR_MATCH_FALSE 0 /* Request negative match */
extern VSTRING *cidr_match_parse(CIDR_MATCH *, char *, int, VSTRING *);
extern VSTRING *cidr_match_parse_if(CIDR_MATCH *, char *, int, VSTRING *);
extern void cidr_match_endif(CIDR_MATCH *);
extern CIDR_MATCH *cidr_match_execute(CIDR_MATCH *, const char *);
/* LICENSE
/* .ad
/* .fi
/* The Secure Mailer license must be distributed with this software.
/* AUTHOR(S)
/* Wietse Venema
/* IBM T.J. Watson Research
/* P.O. Box 704
/* Yorktown Heights, NY 10598, USA
/*
/* Wietse Venema
/* Google, Inc.
/* 111 8th Avenue
/* New York, NY 10011, USA
/*--*/
#endif
|