ze-filter  (ze-filter-0.8.0-develop-180218)
ze-policy-test.c
Go to the documentation of this file.
1 
2 /*
3  *
4  * ze-filter - Mail Server Filter for sendmail
5  *
6  * Copyright (c) 2001-2018 - Jose-Marcio Martins da Cruz
7  *
8  * Auteur : Jose Marcio Martins da Cruz
9  * jose.marcio.mc@gmail.org
10  *
11  * Historique :
12  * Creation : janvier 2002
13  *
14  * This program is free software, but with restricted license :
15  *
16  *
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20  *
21  * More details about ze-filter license can be found at ze-filter
22  * web site : http://foss.jose-marcio.org
23  */
24 
25 #include <ze-sys.h>
26 #include <ze-filter.h>
27 
28 void
29 usage(arg)
30  char *arg;
31 {
32  char *tprefix, *kprefix, *ip, *name, *from, *to, *key;
33 
34  tprefix = "GreyCheck";;
35  kprefix = "NetClass";
36 
37  ip = "10.3.5.5";
38  name = "minho.ensmp.fr";
39  from = "root@domain.com";
40  to = "joe@domain.com";
41  key = "10.3.5.5";
42 
43  printf("Usage : %s options\n"
44  " -t : prefix + triplet (default is prefix + key)\n"
45  " -P prefix : e.g. -P %s\n"
46  " -K key : e.g. -K %s\n"
47  " -I address : e.g. -I %s\n"
48  " -H hostname : e.g. -H %s\n"
49  " -F from : e.g. -F %s\n"
50  " -T to : e.g. -T %s\n"
51  " -v : increase log level\n"
52  " -h : help - this message\n"
53  "\n"
54  " Sample queries : \n"
55  " %s -t -P %s -I %s -H %s -F %s -T %s\n"
56  " %s -P %s -K %s\n"
57  "\n"
58  " %s\n" " Compiled on %s\n",
59  arg,
60  tprefix, key, ip, name, from, to,
61  arg, tprefix, ip, name, from, to,
62  arg, kprefix, key, PACKAGE, __DATE__ " " __TIME__);
63 }
64 
65 
66 int
67 main(argc, argv)
68  int argc;
69  char **argv;
70 {
71  int res = 0;
72  extern int ze_logLevel;
73 
74  char *prefix, *ip, *name, *from, *to, *key;
75  int netclass = NET_UNKNOWN;
76  bool triplet = FALSE;
77 
78  prefix = "ContentCheck";
79  ip = "0.0.0.0";
80  name = "localhost";
81  from = "nobody@localhost";
82  to = "nobody@localdomain";
83  key = "0.0.0.0";
84 
85  configure("ze-policy-test", conf_file, FALSE);
86 
88  ze_logLevel = 10;
89 
90  {
91  const char *args = "P:K:I:H:F:T:htv";
92  int c;
93 
94  while ((c = getopt(argc, argv, args)) != -1) {
95  switch (c) {
96  case 'h':
97  usage(argv[0]);
98  exit(0);
99  break;
100  case 'P':
101  prefix = optarg;
102  break;
103  case 'K':
104  key = optarg;
105  break;
106  case 'I':
107  ip = optarg;
108  break;
109  case 'H':
110  name = optarg;
111  break;
112  case 'F':
113  from = optarg;
114  break;
115  case 'T':
116  to = optarg;
117  break;
118  case 't':
119  triplet = !triplet;
120  break;
121  case 'v':
122  ze_logLevel++;
123  break;
124  case 'l':
125  break;
126  default:
127  exit(0);
128  break;
129  }
130  }
131  }
132 
133  if (!policy_init()) {
134  ZE_MessageInfo(0, "Error opening policy database !");
135  exit(1);
136  }
137 
138  if (triplet) {
139  bool flag;
140  char class[256];
141 
142  memset(class, 0, sizeof (class));
143  netclass = GetClientNetClass(ip, name, NULL, class, sizeof (class));
144 
145  if (strlen(class) == 0)
146  strlcpy(class, NET_CLASS_LABEL(netclass), sizeof (class));
147  ZE_MessageInfo(0, "Client IP address : %s", ip);
148  ZE_MessageInfo(0, "Client hostname : %s", name);
149  ZE_MessageInfo(0, "Sender : %s", from);
150  ZE_MessageInfo(0, "Recipient : %s", to);
151  ZE_MessageInfo(0, "Client NET class : %02X %s", netclass, class);
152  ZE_MessageInfo(0, "");
153  ZE_MessageInfo(0, "Checking = %s %s %s %s %s", prefix, ip, name, from, to);
154  flag = check_policy_tuple(prefix, ip, name, class, from, to, TRUE);
155  ZE_MessageInfo(0, "RESULT = %s", STRBOOL(flag, "YES", "NO"));
156  } else {
157  bool flag;
158  char buf[256];
159 
160  ZE_MessageInfo(0, "Checking = %s %s", prefix, key);
161  memset(buf, 0, sizeof (buf));
162  flag = check_policy(prefix, key, buf, sizeof (buf), TRUE);
163  ZE_MessageInfo(0, "RESULT = %s - %s", buf, STRBOOL(flag, "YES", "NO"));
164  }
165 
166  policy_close();
167 
168  return 0;
169 }
#define STRBOOL(x, t, f)
Definition: macros.h:87
bool policy_close()
Definition: ze-policy.c:702
bool check_policy(char *prefix, char *key, char *buf, size_t size, bool cdef)
Definition: ze-policy.c:119
int ze_logLevel
Definition: zeSyslog.c:34
#define NET_UNKNOWN
Definition: ze-netclass.h:31
int GetClientNetClass(char *ip, char *name, netclass_T *class, char *label, size_t sz)
Definition: ze-netclass.c:49
void zeLog_SetOutput(bool, bool)
Definition: zeSyslog.c:490
#define FALSE
Definition: macros.h:160
#define strlcpy
Definition: zeString.h:32
bool policy_init()
Definition: ze-policy.c:692
#define ZE_MessageInfo(level,...)
Definition: zeSyslog.h:90
#define TRUE
Definition: macros.h:157
char * conf_file
Definition: ze-cf.c:38
int configure(char *, char *, bool)
Definition: ze-cf.c:1203
#define PACKAGE
Definition: version.h:28
int main(int argc, char **argv)
#define NET_CLASS_LABEL(class)
Definition: ze-netclass.h:57
bool check_policy_tuple(char *prefix, char *ip, char *name, char *netclass, char *from, char *to, bool result)
Definition: ze-policy.c:277
void usage(char *arg)