31 #define ACCESS_UNDEF 0 33 #define ACCESS_QUICK_NO 2 35 #define ACCESS_QUICK_YES 4 37 static int access_decode(
char *);
70 memset(bufout, 0,
sizeof (bufout));
72 if (strlen(bufout) > 0)
73 ZE_MessageInfo(15,
" -> Got : %s:%-15s %s\n", prefix, key, bufout);
84 ZE_MessageInfo(15,
" -> Got : %s:%-15s %s\n", prefix,
"DEFAULT", buf);
138 memset(bufout, 0,
sizeof (bufout));
140 if (strlen(bufout) > 0)
141 ZE_MessageInfo(15,
" -> Got : %s:%-15s %s\n", prefix, key, bufout);
165 ZE_MessageInfo(15,
" -> Got : %s:%-15s %s\n",
"NetClass", key, tb);
167 if (strlen(bufout) > 0)
168 ZE_MessageInfo(15,
" -> Got : %s:%-15s %s\n", prefix, tb, bufout);
179 if (strlen(bufout) > 0)
180 ZE_MessageInfo(15,
" -> Got : %s:%-15s %s\n", prefix,
"DEFAULT", buf);
187 if (strlen(bufout) > 0)
217 memset(buf, 0, size);
221 prefix,
STRNULL(addr,
"???"), buf);
228 prefix,
STRNULL(name,
"???"), buf);
232 memset(lclass, 0,
sizeof (lclass));
233 if (
class == NULL || strlen(
class) == 0) {
234 if (addr != NULL && strlen(addr) > 0)
236 if (!ok && name != NULL && strlen(name) > 0)
239 strlcpy(lclass,
class,
sizeof (lclass));
241 if (strlen(lclass) == 0)
246 prefix,
STRNULL(
class,
"???"), buf);
256 #define MAX_TOKENS 256 258 #define DECODE_ACCESS(value, result) \ 260 switch (access_decode(value)) { \ 267 case ACCESS_QUICK_YES: \ 270 case ACCESS_QUICK_NO: \ 286 char tag[256], value[256], key[256];
287 char send[256], rcpt[256];
292 netclass =
STRNULL(netclass,
"UNKNOWN");
293 from =
STRNULL(from,
"nullsender");
296 memset(send, 0,
sizeof (send));
298 memset(rcpt, 0,
sizeof (rcpt));
304 memset(tag, 0,
sizeof (tag));
305 memset(key, 0,
sizeof (key));
306 memset(value, 0,
sizeof (value));
313 snprintf(tag,
sizeof (tag),
"%sConnect", prefix);
315 switch (access_decode(value)) {
341 if (token != NULL && strlen(token) > 0) {
350 snprintf(tag,
sizeof (tag),
"%sFrom", prefix);
352 for (i = 0; i < argc; i++) {
354 if ((p = strstr(from, argv[i])) != NULL) {
356 switch (access_decode(value)) {
376 snprintf(tag,
sizeof (tag),
"%sFrom", prefix);
378 switch (access_decode(value)) {
404 if (token != NULL && strlen(token) > 0) {
413 snprintf(tag,
sizeof (tag),
"%sTo", prefix);
415 for (i = 0; i < argc; i++) {
417 if ((p = strstr(from, argv[i])) != NULL) {
419 switch (access_decode(value)) {
439 snprintf(tag,
sizeof (tag),
"%sTo", prefix);
442 switch (access_decode(value)) {
459 ZE_MessageInfo(15,
"TUPLE %s %s %s %s : %s", ip, name, send, rcpt,
483 int nok = 0, nko = 0;
485 for (p = rcpt; p != NULL; p = p->
next) {
497 doit = (nok > 0) ? result : !result;
498 if (nko > 0 && nok > 0) {
501 doit = (nko > 0) ? !result : result;
504 doit = (nok > nko) ? result : !result;
519 #define VAL2LIMIT(r,buffer) \ 523 v = zeStr2long(buffer, NULL, r); \ 527 r = (v > 0) ? MIN(v,r) : r; \ 540 char tag[256], buffer[256], key[256];
541 char send[256], rcpt[256];
546 netclass =
STRNULL(netclass,
"UNKNOWN");
547 from =
STRNULL(from,
"nullsender");
550 memset(send, 0,
sizeof (send));
552 memset(rcpt, 0,
sizeof (rcpt));
558 memset(tag, 0,
sizeof (tag));
559 memset(key, 0,
sizeof (key));
560 memset(buffer, 0,
sizeof (buffer));
564 result =
MAX(result, 0);
569 snprintf(tag,
sizeof (tag),
"%sConnect", prefix);
584 if (token != NULL && strlen(token) > 0) {
593 snprintf(tag,
sizeof (tag),
"%sFrom", prefix);
595 for (i = 0; i < argc; i++) {
597 if ((p = strstr(from, argv[i])) != NULL) {
606 snprintf(tag,
sizeof (tag),
"%sFrom", prefix);
621 if (token != NULL && strlen(token) > 0) {
630 snprintf(tag,
sizeof (tag),
"%sTo", prefix);
632 for (i = 0; i < argc; i++) {
634 if ((p = strstr(from, argv[i])) != NULL) {
643 snprintf(tag,
sizeof (tag),
"%sTo", prefix);
650 ZE_MessageInfo(20,
"TUPLE %s %s %s %s : %ld", ip, name, send, rcpt, result);
669 long result = defval;
673 for (p = rcpt; p != NULL; p = p->
next) {
681 result =
MIN(v, result);
725 if (code == NULL || strlen(code) == 0)
728 if (strcasecmp(code,
"DEFAULT") == 0)
731 if (strcasecmp(code,
"REJECT") == 0)
734 if (strcasecmp(code,
"OK") == 0)
751 if (strcasecmp(s,
"NO") == 0)
754 if (strcasecmp(s,
"QUICKNO") == 0)
757 if (strcasecmp(s,
"QUICK-NO") == 0)
760 if (strcasecmp(s,
"NOQUICK") == 0)
763 if (strcasecmp(s,
"NO-QUICK") == 0)
766 if (strcasecmp(s,
"YES") == 0)
769 if (strcasecmp(s,
"QUICKYES") == 0)
772 if (strcasecmp(s,
"QUICK-YES") == 0)
775 if (strcasecmp(s,
"YESQUICK") == 0)
778 if (strcasecmp(s,
"YES-QUICK") == 0)
bool check_policy_all_rcpts(char *prefix, char *ip, char *name, char *netclass, char *from, rcpt_addr_T *rcpt, bool result, int conflict)
bool check_policy(char *prefix, char *key, char *buf, size_t szbuf, bool chkdefault)
bool check_host_policy(char *prefix, char *addr, char *name, char *class, char *buf, size_t size, bool cdef)
#define VAL2LIMIT(r, buffer)
bool zeStrRegex(char *, char *, long *, long *, bool)
char * extract_email_address(char *, char *, size_t)
int zeStr2Tokens(char *, int, char **, char *)
int policy_decode(char *code)
bool lookup_policy(char *prefix, char *key, char *buf, size_t szbuf, bool chkdefault)
long check_limit_all_rcpts(char *prefix, char *ip, char *name, char *netclass, char *from, rcpt_addr_T *rcpt, long defval)
#define CF_FROM_PASS_TOKEN
bool db_policy_check(char *prefix, char *key, char *bufout, size_t szbuf)
#define ZE_MessageInfo(level,...)
bool db_policy_open(bool)
char * cf_get_str(int id)
long check_limit_tuple(char *prefix, char *ip, char *name, char *netclass, char *from, char *to, long result)
bool check_policy_tuple(char *prefix, char *ip, char *name, char *netclass, char *from, char *to, bool result)