ze-filter  (ze-filter-0.8.0-develop-180218)
ze-rcpt-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 static name2id_T names[] = {
29  {"OK", RCPT_OK},
30  {"REJECT", RCPT_REJECT},
31  {"TEMPFAIL", RCPT_TEMPFAIL},
32  {"Access Denied", RCPT_ACCESS_DENIED},
33  {"Bad Network", RCPT_BAD_NETWORK},
34  {"User Unknown", RCPT_USER_UNKNOWN},
35  {NULL, -1}
36 };
37 
38 int
39 main(argc, argv)
40  int argc;
41  char **argv;
42 {
43  int res = 0;
44  extern int ze_logLevel;
45 
46  configure("ze-rcpt-test", conf_file, FALSE);
47 
49  ze_logLevel = 10;
50 
51  if (!policy_init()) {
52  ZE_MessageInfo(0, "Error opening policy database !");
53  exit(1);
54  }
55 
56  if (!rcpt_init()) {
57  ZE_MessageInfo(0, "Error opening rcpt database !");
58  exit(1);
59  }
60 
61  {
62  char *ip, *name, *to;
63  int netclass;
64 
65  int flag;
66  char *result = NULL;
67  int c;
68 
69  const char *args = "i:h:t:l:v";
70 
71  ip = "0.0.0.0";
72  name = "localhost";
73  to = "nobody@localdomain";
74 
75  while ((c = getopt(argc, argv, args)) != -1) {
76  switch (c) {
77  case 'i':
78  ip = optarg;
79  break;
80  case 'h':
81  name = optarg;
82  break;
83  case 't':
84  to = optarg;
85  break;
86  case 'v':
87  ze_logLevel++;
88  break;
89  case 'l':
90  ze_logLevel = atoi(optarg);
91  break;
92  default:
93  (void) fprintf(stderr, "-> Unknown command line option : %c\n", c);
94  exit(1);
95  }
96  }
97 
98  netclass = GetClientNetClass(ip, name, NULL, NULL, 0);
99 
100  ZE_MessageInfo(0, "Client IP address : %s", ip);
101  ZE_MessageInfo(0, "Client hostname : %s", name);
102  ZE_MessageInfo(0, "Recipient : %s", to);
103  ZE_MessageInfo(0, "Client NET class : %02X %s", netclass,
104  NET_CLASS_LABEL(netclass));
105 
106  flag = check_rcpt(to, ip, name, netclass);
107 
108  result = get_name_by_id(names, flag);
109  result = STRNULL(result, "???");
110 
111  ZE_MessageInfo(0, "RESULT = %2d %s", flag, result);
112  }
113 
114  policy_close();
115  rcpt_close();
116 
117  return 0;
118 }
#define RCPT_REJECT
Definition: ze-rcpt.h:39
bool policy_close()
Definition: ze-policy.c:702
int main(int argc, char **argv)
Definition: ze-rcpt-test.c:39
int ze_logLevel
Definition: zeSyslog.c:34
#define STRNULL(x, r)
Definition: macros.h:81
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
bool rcpt_close()
Definition: ze-rcpt.c:562
bool policy_init()
Definition: ze-policy.c:692
bool rcpt_init()
Definition: ze-rcpt.c:552
int check_rcpt(char *rcpt, char *ip, char *name, int netclass)
Definition: ze-rcpt.c:89
#define RCPT_USER_UNKNOWN
Definition: ze-rcpt.h:43
#define RCPT_TEMPFAIL
Definition: ze-rcpt.h:40
#define RCPT_ACCESS_DENIED
Definition: ze-rcpt.h:41
char * get_name_by_id(name2id_T *, int)
Definition: ze-name2id.c:58
#define RCPT_OK
Definition: ze-rcpt.h:38
#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 RCPT_BAD_NETWORK
Definition: ze-rcpt.h:42
#define NET_CLASS_LABEL(class)
Definition: ze-netclass.h:57