Postfix3.3.1
tok822_resolve.c
[詳解]
1 /*++
2 /* NAME
3 /* tok822_resolve 3
4 /* SUMMARY
5 /* address resolving, client interface
6 /* SYNOPSIS
7 /* #include <tok822.h>
8 /*
9 /* void tok822_resolve(addr, reply)
10 /* TOK822 *addr;
11 /* RESOLVE_REPLY *reply;
12 /*
13 /* void tok822_resolve_from(sender, addr, reply)
14 /* const char *sender;
15 /* TOK822 *addr;
16 /* RESOLVE_REPLY *reply;
17 /* DESCRIPTION
18 /* tok822_resolve() takes an address token tree and finds out the
19 /* transport to deliver via, the next-hop host on that transport,
20 /* and the recipient relative to that host.
21 /*
22 /* tok822_resolve_from() allows the caller to specify sender context
23 /* that will be used to look up sender-dependent relayhost information.
24 /* SEE ALSO
25 /* resolve_clnt(3) basic resolver client interface
26 /* LICENSE
27 /* .ad
28 /* .fi
29 /* The Secure Mailer license must be distributed with this software.
30 /* AUTHOR(S)
31 /* Wietse Venema
32 /* IBM T.J. Watson Research
33 /* P.O. Box 704
34 /* Yorktown Heights, NY 10598, USA
35 /*--*/
36 
37 /* System library. */
38 
39 #include <sys_defs.h>
40 
41 /* Utility library. */
42 
43 #include <vstring.h>
44 #include <msg.h>
45 
46 /* Global library. */
47 
48 #include "resolve_clnt.h"
49 #include "tok822.h"
50 
51 /* tok822_resolve - address rewriting interface */
52 
53 void tok822_resolve_from(const char *sender, TOK822 *addr,
54  RESOLVE_REPLY *reply)
55 {
56  VSTRING *intern_form = vstring_alloc(100);
57 
58  if (addr->type != TOK822_ADDR)
59  msg_panic("tok822_resolve: non-address token type: %d", addr->type);
60 
61  /*
62  * Internalize the token tree and ship it to the resolve service.
63  * Shipping string forms is much simpler than shipping parse trees.
64  */
65  tok822_internalize(intern_form, addr->head, TOK822_STR_DEFL);
66  resolve_clnt_query_from(sender, vstring_str(intern_form), reply);
67  if (msg_verbose)
68  msg_info("tok822_resolve: from=%s addr=%s -> chan=%s, host=%s, rcpt=%s",
69  sender,
70  vstring_str(intern_form), vstring_str(reply->transport),
71  vstring_str(reply->nexthop), vstring_str(reply->recipient));
72 
73  vstring_free(intern_form);
74 }
int msg_verbose
Definition: msg.c:177
#define TOK822_ADDR
Definition: tok822.h:46
NORETURN msg_panic(const char *fmt,...)
Definition: msg.c:295
#define vstring_str(vp)
Definition: vstring.h:71
Definition: tok822.h:27
void tok822_resolve_from(const char *sender, TOK822 *addr, RESOLVE_REPLY *reply)
struct TOK822 * head
Definition: tok822.h:32
int type
Definition: tok822.h:28
VSTRING * vstring_alloc(ssize_t len)
Definition: vstring.c:353
VSTRING * tok822_internalize(VSTRING *, TOK822 *, int)
Definition: tok822_parse.c:199
VSTRING * recipient
Definition: resolve_clnt.h:46
#define TOK822_STR_DEFL
Definition: tok822.h:91
VSTRING * vstring_free(VSTRING *vp)
Definition: vstring.c:380
VSTRING * nexthop
Definition: resolve_clnt.h:45
VSTRING * transport
Definition: resolve_clnt.h:44
#define resolve_clnt_query_from(f, a, r)
Definition: resolve_clnt.h:56
void msg_info(const char *fmt,...)
Definition: msg.c:199