Postfix3.3.1
データ構造 | マクロ定義 | 関数 | 変数
smtpd_check.c ファイル
#include <sys_defs.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <ctype.h>
#include <stdarg.h>
#include <netdb.h>
#include <setjmp.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <msg.h>
#include <vstring.h>
#include <split_at.h>
#include <fsspace.h>
#include <stringops.h>
#include <valid_hostname.h>
#include <argv.h>
#include <mymalloc.h>
#include <dict.h>
#include <htable.h>
#include <ctable.h>
#include <mac_expand.h>
#include <attr_clnt.h>
#include <myaddrinfo.h>
#include <inet_proto.h>
#include <ip_match.h>
#include <valid_utf8_hostname.h>
#include <midna_domain.h>
#include <mynetworks.h>
#include <dns.h>
#include <string_list.h>
#include <namadr_list.h>
#include <domain_list.h>
#include <mail_params.h>
#include <resolve_clnt.h>
#include <mail_error.h>
#include <resolve_local.h>
#include <own_inet_addr.h>
#include <mail_conf.h>
#include <maps.h>
#include <mail_addr_find.h>
#include <match_parent_style.h>
#include <strip_addr.h>
#include <cleanup_user.h>
#include <record.h>
#include <rec_type.h>
#include <mail_proto.h>
#include <mail_addr.h>
#include <verify_clnt.h>
#include <input_transp.h>
#include <is_header.h>
#include <valid_mailhost_addr.h>
#include <dsn_util.h>
#include <conv_time.h>
#include <xtext.h>
#include <smtp_stream.h>
#include <attr_override.h>
#include "smtpd.h"
#include "smtpd_sasl_glue.h"
#include "smtpd_check.h"
#include "smtpd_dsn_fix.h"
#include "smtpd_resolve.h"
#include "smtpd_expand.h"

[ソースコード]

データ構造

struct  SMTPD_RBL_EXPAND_CONTEXT
 
struct  SMTPD_POLICY_CLNT
 

マクロ定義

#define SMTPD_CHECK_DUNNO   0 /* indifferent */
 
#define SMTPD_CHECK_OK   1 /* explicitly permit */
 
#define SMTPD_CHECK_REJECT   2 /* explicitly reject */
 
#define STR   vstring_str
 
#define CONST_STR(x)   ((const char *) vstring_str(x))
 
#define UPDATE_STRING(ptr, val)   { if (ptr) myfree(ptr); ptr = mystrdup(val); }
 
#define DEFER_IF_REJECT2(state, class, code, dsn, fmt, a1, a2)   defer_if(&(state)->defer_if_reject, (class), (code), (dsn), (fmt), (a1), (a2))
 
#define DEFER_IF_REJECT3(state, class, code, dsn, fmt, a1, a2, a3)   defer_if(&(state)->defer_if_reject, (class), (code), (dsn), (fmt), (a1), (a2), (a3))
 
#define DEFER_IF_REJECT4(state, class, code, dsn, fmt, a1, a2, a3, a4)   defer_if(&(state)->defer_if_reject, (class), (code), (dsn), (fmt), (a1), (a2), (a3), (a4))
 
#define DEFER_ALL_ACT   0
 
#define DEFER_IF_PERMIT_ACT   1
 
#define DEFER_IF_PERMIT2(type, state, class, code, dsn, fmt, a1, a2)
 
#define DEFER_IF_PERMIT3(type, state, class, code, dsn, fmt, a1, a2, a3)
 
#define DEFER_IF_PERMIT4(type, state, class, code, dsn, fmt, a1, a2, a3, a4)
 
#define link_override_table_to_variable(table, var)   do { table[var##_offset].target = &var; } while (0)
 
#define smtpd_policy_tmout_offset   0
 
#define smtpd_policy_idle_offset   1
 
#define smtpd_policy_ttl_offset   2
 
#define smtpd_policy_try_delay_offset   3
 
#define smtpd_policy_req_limit_offset   0
 
#define smtpd_policy_try_limit_offset   1
 
#define smtpd_policy_def_action_offset   0
 
#define smtpd_policy_context_offset   1
 
#define SMTPD_CHECK_PARSE_POLICY   (1<<0)
 
#define SMTPD_CHECK_PARSE_MAPS   (1<<1)
 
#define SMTPD_CHECK_PARSE_ALL   (~0)
 
#define NO_PRINT_ARGS   "%s", ""
 
#define RR_ADDR_TYPES   T_A
 
#define MAILHOST_LOOKUP_FLAGS
 
#define NOPE   0
 
#define YUP   1
 
#define YUP   1
 
#define NOPE   0
 
#define HAS_MY_ADDR_RETURN(x)   { freeaddrinfo(res0); return (x); }
 
#define PERMIT_MX_BACKUP_RETURN(x)
 
#define STREQUAL(x, y, l)   (strncasecmp((x), (y), (l)) == 0 && (y)[l] == 0)
 
#define SHUT_RDWR   2
 
#define ADDROF(x)   ((char *) &(x))
 
#define CHK_ACCESS_RETURN(x, y)   { *found = y; return(x); }
 
#define FULL   0
 
#define PARTIAL   DICT_FLAG_FIXED
 
#define FOUND   1
 
#define MISSED   0
 
#define CHK_DOMAIN_RETURN(x, y)   { *found = y; return(x); }
 
#define CHK_ADDR_RETURN(x, y)   { *found = y; return(x); }
 
#define CHECK_SERVER_RETURN(x)   { dns_rr_free(server_list); return(x); }
 
#define SUSPICIOUS(reply, reply_class)
 
#define SMTPD_DNSXL_STAT_SOFT(dnsxl_res)   ((dnsxl_res) == dnsxl_stat_soft)
 
#define SMTPD_DNXSL_STAT_HARD(dnsxl_res)   ((dnsxl_res) == 0)
 
#define SMTPD_DNSXL_STAT_OK(dnsxl_res)   !(SMTPD_DNXSL_STAT_HARD(dnsxl_res) || SMTPD_DNSXL_STAT_SOFT(dnsxl_res))
 
#define RBL_TXT_LIMIT   500
 
#define STREQ(x, y)   (*(x) == *(y) && strcmp((x), (y)) == 0)
 
#define NO_DEF_ACL   0
 
#define SMTPD_CHECK_RESET()
 
#define SMTPD_CHECK_PUSH(backup, current, new)
 
#define SMTPD_CHECK_POP(current, backup)
 
#define SMTPD_CHECK_HELO_RETURN(x)
 
#define SMTPD_CHECK_MAIL_RETURN(x)
 
#define SMTPD_CHECK_RCPT_RETURN(x)
 
#define SMTPD_CHECK_ETRN_RETURN(x)
 
#define MATCH(map, rcpt)   check_mail_addr_find(state, recipient, map, rcpt, (char **) 0)
 
#define NOMATCH(map, rcpt)   (MATCH(map, rcpt) == 0)
 
#define MATCH_LEFT(l, r, n)   (strncasecmp_utf8((l), (r), (n)) == 0 && (r)[n] == '@')
 
#define BLOCKS(x)   ((x) / fsbuf.block_size)
 

関数

void smtpd_check_init (void)
 
int smtpd_check_addr (const char *sender, const char *addr, int smtputf8)
 
char * smtpd_check_rewrite (SMTPD_STATE *state)
 
char * smtpd_check_client (SMTPD_STATE *state)
 
char * smtpd_check_helo (SMTPD_STATE *state, char *helohost)
 
char * smtpd_check_mail (SMTPD_STATE *state, char *sender)
 
char * smtpd_check_rcpt (SMTPD_STATE *state, char *recipient)
 
char * smtpd_check_etrn (SMTPD_STATE *state, char *domain)
 
char * smtpd_check_size (SMTPD_STATE *state, off_t size)
 
char * smtpd_check_queue (SMTPD_STATE *state)
 
char * smtpd_check_data (SMTPD_STATE *state)
 
char * smtpd_check_eod (SMTPD_STATE *state)
 

変数

 SMTPD_RBL_STATE
 
double smtpd_space_multf = 1.5
 

マクロ定義詳解

#define ADDROF (   x)    ((char *) &(x))
#define BLOCKS (   x)    ((x) / fsbuf.block_size)
#define CHECK_SERVER_RETURN (   x)    { dns_rr_free(server_list); return(x); }
#define CHK_ACCESS_RETURN (   x,
 
)    { *found = y; return(x); }
#define CHK_ADDR_RETURN (   x,
 
)    { *found = y; return(x); }
#define CHK_DOMAIN_RETURN (   x,
 
)    { *found = y; return(x); }
#define CONST_STR (   x)    ((const char *) vstring_str(x))

smtpd_check.c380 行目に定義があります。

#define DEFER_ALL_ACT   0
#define DEFER_IF_PERMIT2 (   type,
  state,
  class,
  code,
  dsn,
  fmt,
  a1,
  a2 
)
値:
(((state)->warn_if_reject == 0 && (type) != 0) ? \
defer_if(&(state)->defer_if_permit, (class), (code), (dsn), (fmt), (a1), (a2)) \
: \
smtpd_check_reject((state), (class), (code), (dsn), (fmt), (a1), (a2)))
int const char * fmt
#define DEFER_IF_PERMIT3 (   type,
  state,
  class,
  code,
  dsn,
  fmt,
  a1,
  a2,
  a3 
)
値:
(((state)->warn_if_reject == 0 && (type) != 0) ? \
defer_if(&(state)->defer_if_permit, (class), (code), (dsn), (fmt), (a1), (a2), (a3)) \
: \
smtpd_check_reject((state), (class), (code), (dsn), (fmt), (a1), (a2), (a3)))
int const char * fmt
#define DEFER_IF_PERMIT4 (   type,
  state,
  class,
  code,
  dsn,
  fmt,
  a1,
  a2,
  a3,
  a4 
)
値:
(((state)->warn_if_reject == 0 && (type) != 0) ? \
defer_if(&(state)->defer_if_permit, (class), (code), (dsn), (fmt), (a1), (a2), (a3), (a4)) \
: \
smtpd_check_reject((state), (class), (code), (dsn), (fmt), (a1), (a2), (a3), (a4)))
int const char * fmt
#define DEFER_IF_PERMIT_ACT   1
#define DEFER_IF_REJECT2 (   state,
  class,
  code,
  dsn,
  fmt,
  a1,
  a2 
)    defer_if(&(state)->defer_if_reject, (class), (code), (dsn), (fmt), (a1), (a2))
#define DEFER_IF_REJECT3 (   state,
  class,
  code,
  dsn,
  fmt,
  a1,
  a2,
  a3 
)    defer_if(&(state)->defer_if_reject, (class), (code), (dsn), (fmt), (a1), (a2), (a3))
#define DEFER_IF_REJECT4 (   state,
  class,
  code,
  dsn,
  fmt,
  a1,
  a2,
  a3,
  a4 
)    defer_if(&(state)->defer_if_reject, (class), (code), (dsn), (fmt), (a1), (a2), (a3), (a4))
#define FOUND   1
#define FULL   0
#define HAS_MY_ADDR_RETURN (   x)    { freeaddrinfo(res0); return (x); }
#define link_override_table_to_variable (   table,
  var 
)    do { table[var##_offset].target = &var; } while (0)

smtpd_check.c503 行目に定義があります。

#define MAILHOST_LOOKUP_FLAGS
値:
#define DNS_REQ_FLAG_STOP_OK
Definition: dns.h:245
#define DNS_REQ_FLAG_STOP_INVAL
Definition: dns.h:246
#define DNS_REQ_FLAG_STOP_MX_POLICY
Definition: dns.h:248
#define DNS_REQ_FLAG_STOP_NULLMX
Definition: dns.h:247
#define MATCH (   map,
  rcpt 
)    check_mail_addr_find(state, recipient, map, rcpt, (char **) 0)
#define MATCH_LEFT (   l,
  r,
 
)    (strncasecmp_utf8((l), (r), (n)) == 0 && (r)[n] == '@')
#define MISSED   0
#define NO_DEF_ACL   0
#define NO_PRINT_ARGS   "%s", ""
#define NOMATCH (   map,
  rcpt 
)    (MATCH(map, rcpt) == 0)
#define NOPE   0
#define NOPE   0
#define PARTIAL   DICT_FLAG_FIXED
#define PERMIT_MX_BACKUP_RETURN (   x)
値:
do { \
middle->next = rest; \
dns_rr_free(mx_list); \
return (x); \
} while (0)
void dns_rr_free(DNS_RR *)
Definition: dns_rr.c:137
#define RBL_TXT_LIMIT   500
#define RR_ADDR_TYPES   T_A
#define SHUT_RDWR   2
#define SMTPD_CHECK_DUNNO   0 /* indifferent */

smtpd_check.c271 行目に定義があります。

#define SMTPD_CHECK_ETRN_RETURN (   x)
値:
{ \
SMTPD_CHECK_POP(state->etrn_name, saved_etrn_name); \
return (x); \
}
#define SMTPD_CHECK_POP(current, backup)
#define SMTPD_CHECK_HELO_RETURN (   x)
値:
{ \
SMTPD_CHECK_POP(state->helo_name, saved_helo); \
return (x); \
}
#define SMTPD_CHECK_POP(current, backup)
#define SMTPD_CHECK_MAIL_RETURN (   x)
値:
{ \
SMTPD_CHECK_POP(state->sender, saved_sender); \
return (x); \
}
#define SMTPD_CHECK_POP(current, backup)
#define SMTPD_CHECK_OK   1 /* explicitly permit */

smtpd_check.c272 行目に定義があります。

#define SMTPD_CHECK_PARSE_ALL   (~0)
#define SMTPD_CHECK_PARSE_MAPS   (1<<1)
#define SMTPD_CHECK_PARSE_POLICY   (1<<0)
#define SMTPD_CHECK_POP (   current,
  backup 
)
値:
{ \
if (current) myfree(current); \
current = backup; \
}
void myfree(void *ptr)
Definition: mymalloc.c:207
#define SMTPD_CHECK_PUSH (   backup,
  current,
  new 
)
値:
{ \
backup = current; \
current = (new ? mystrdup(new) : 0); \
}
char * mystrdup(const char *str)
Definition: mymalloc.c:225
#define SMTPD_CHECK_RCPT_RETURN (   x)
値:
{ \
SMTPD_CHECK_POP(state->recipient, saved_recipient); \
return (x); \
}
#define SMTPD_CHECK_POP(current, backup)
#define SMTPD_CHECK_REJECT   2 /* explicitly reject */

smtpd_check.c273 行目に定義があります。

#define SMTPD_CHECK_RESET ( )
値:
{ \
state->recursion = 0; \
state->warn_if_reject = 0; \
state->defer_if_reject.active = 0; \
}
#define SMTPD_DNSXL_STAT_OK (   dnsxl_res)    !(SMTPD_DNXSL_STAT_HARD(dnsxl_res) || SMTPD_DNSXL_STAT_SOFT(dnsxl_res))

smtpd_check.c3263 行目に定義があります。

#define SMTPD_DNSXL_STAT_SOFT (   dnsxl_res)    ((dnsxl_res) == dnsxl_stat_soft)

smtpd_check.c3261 行目に定義があります。

#define SMTPD_DNXSL_STAT_HARD (   dnsxl_res)    ((dnsxl_res) == 0)

smtpd_check.c3262 行目に定義があります。

#define smtpd_policy_context_offset   1

smtpd_check.c515 行目に定義があります。

#define smtpd_policy_def_action_offset   0

smtpd_check.c514 行目に定義があります。

#define smtpd_policy_idle_offset   1

smtpd_check.c507 行目に定義があります。

#define smtpd_policy_req_limit_offset   0

smtpd_check.c511 行目に定義があります。

#define smtpd_policy_tmout_offset   0

smtpd_check.c506 行目に定義があります。

#define smtpd_policy_try_delay_offset   3

smtpd_check.c509 行目に定義があります。

#define smtpd_policy_try_limit_offset   1

smtpd_check.c512 行目に定義があります。

#define smtpd_policy_ttl_offset   2

smtpd_check.c508 行目に定義があります。

#define STR   vstring_str

smtpd_check.c379 行目に定義があります。

#define STREQ (   x,
 
)    (*(x) == *(y) && strcmp((x), (y)) == 0)
#define STREQUAL (   x,
  y,
 
)    (strncasecmp((x), (y), (l)) == 0 && (y)[l] == 0)
#define SUSPICIOUS (   reply,
  reply_class 
)
値:
&& (reply->flags & RESOLVE_FLAG_ROUTED) \
&& strcmp(reply_class, SMTPD_NAME_RECIPIENT) == 0)
#define RESOLVE_FLAG_ROUTED
Definition: resolve_clnt.h:26
bool var_allow_untrust_route
Definition: smtpd.c:1271
#define SMTPD_NAME_RECIPIENT
Definition: smtpd_dsn_fix.h:21
#define UPDATE_STRING (   ptr,
  val 
)    { if (ptr) myfree(ptr); ptr = mystrdup(val); }

smtpd_check.c381 行目に定義があります。

#define YUP   1
#define YUP   1

関数詳解

int smtpd_check_addr ( const char *  sender,
const char *  addr,
int  smtputf8 
)

smtpd_check.c4654 行目に定義があります。

char* smtpd_check_client ( SMTPD_STATE state)

smtpd_check.c4762 行目に定義があります。

char* smtpd_check_data ( SMTPD_STATE state)

smtpd_check.c5349 行目に定義があります。

char* smtpd_check_eod ( SMTPD_STATE state)

smtpd_check.c5400 行目に定義があります。

char* smtpd_check_etrn ( SMTPD_STATE state,
char *  domain 
)

smtpd_check.c5019 行目に定義があります。

char* smtpd_check_helo ( SMTPD_STATE state,
char *  helohost 
)

smtpd_check.c4798 行目に定義があります。

void smtpd_check_init ( void  )

smtpd_check.c721 行目に定義があります。

char* smtpd_check_mail ( SMTPD_STATE state,
char *  sender 
)

smtpd_check.c4852 行目に定義があります。

char* smtpd_check_queue ( SMTPD_STATE state)

smtpd_check.c5306 行目に定義があります。

char* smtpd_check_rcpt ( SMTPD_STATE state,
char *  recipient 
)

smtpd_check.c4907 行目に定義があります。

char* smtpd_check_rewrite ( SMTPD_STATE state)

smtpd_check.c4690 行目に定義があります。

char* smtpd_check_size ( SMTPD_STATE state,
off_t  size 
)

smtpd_check.c5281 行目に定義があります。

変数詳解

SMTPD_RBL_STATE

smtpd_check.c447 行目に定義があります。

double smtpd_space_multf = 1.5

smtpd_check.c469 行目に定義があります。