Postfix3.3.1
xsasl.h
[詳解]
1 #ifndef _XSASL_H_INCLUDED_
2 #define _XSASL_H_INCLUDED_
3 
4 /*++
5 /* NAME
6 /* xsasl 3h
7 /* SUMMARY
8 /* Postfix SASL plug-in interface
9 /* SYNOPSIS
10 /* #include <xsasl.h>
11 /* DESCRIPTION
12 /* .nf
13 
14  /*
15  * Utility library.
16  */
17 #include <argv.h>
18 #include <vstream.h>
19 #include <vstring.h>
20 
21  /*
22  * Generic server object. Specific instances extend this with their own
23  * private data.
24  */
25 typedef struct XSASL_SERVER {
26  void (*free) (struct XSASL_SERVER *);
27  int (*first) (struct XSASL_SERVER *, const char *, const char *, VSTRING *);
28  int (*next) (struct XSASL_SERVER *, const char *, VSTRING *);
29  const char *(*get_mechanism_list) (struct XSASL_SERVER *);
30  const char *(*get_username) (struct XSASL_SERVER *);
31 } XSASL_SERVER;
32 
33 #define xsasl_server_free(server) (server)->free(server)
34 #define xsasl_server_first(server, method, init_resp, reply) \
35  (server)->first((server), (method), (init_resp), (reply))
36 #define xsasl_server_next(server, request, reply) \
37  (server)->next((server), (request), (reply))
38 #define xsasl_server_get_mechanism_list(server) \
39  (server)->get_mechanism_list((server))
40 #define xsasl_server_get_username(server) \
41  (server)->get_username((server))
42 
43  /*
44  * Generic server implementation. Specific instances extend this with their
45  * own private data.
46  */
47 typedef struct XSASL_SERVER_CREATE_ARGS {
50  const char *server_addr;
51  const char *server_port;
52  const char *client_addr;
53  const char *client_port;
54  const char *service;
55  const char *user_realm;
56  const char *security_options;
57  int tls_flag;
59 
60 typedef struct XSASL_SERVER_IMPL {
62  void (*done) (struct XSASL_SERVER_IMPL *);
64 
65 extern XSASL_SERVER_IMPL *xsasl_server_init(const char *, const char *);
66 extern ARGV *xsasl_server_types(void);
67 
68 #define xsasl_server_create(impl, args) \
69  (impl)->create((impl), (args))
70 #define XSASL_SERVER_CREATE(impl, args, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) \
71  xsasl_server_create((impl), (((args)->a1), ((args)->a2), ((args)->a3), \
72  ((args)->a4), ((args)->a5), ((args)->a6), ((args)->a7), ((args)->a8), \
73  ((args)->a9), ((args)->a10), (args)))
74 #define xsasl_server_done(impl) (impl)->done((impl));
75 
76  /*
77  * Generic client object. Specific instances extend this with their own
78  * private data.
79  */
80 typedef struct XSASL_CLIENT {
81  void (*free) (struct XSASL_CLIENT *);
82  int (*first) (struct XSASL_CLIENT *, const char *, const char *, const char *, const char **, VSTRING *);
83  int (*next) (struct XSASL_CLIENT *, const char *, VSTRING *);
84 } XSASL_CLIENT;
85 
86 #define xsasl_client_free(client) (client)->free(client)
87 #define xsasl_client_first(client, server, method, user, pass, init_resp) \
88  (client)->first((client), (server), (method), (user), (pass), (init_resp))
89 #define xsasl_client_next(client, request, reply) \
90  (client)->next((client), (request), (reply))
91 #define xsasl_client_set_password(client, user, pass) \
92  (client)->set_password((client), (user), (pass))
93 
94  /*
95  * Generic client implementation. Specific instances extend this with their
96  * own private data.
97  */
98 typedef struct XSASL_CLIENT_CREATE_ARGS {
100  const char *service;
101  const char *server_name;
102  const char *security_options;
104 
105 typedef struct XSASL_CLIENT_IMPL {
107  void (*done) (struct XSASL_CLIENT_IMPL *);
109 
110 extern XSASL_CLIENT_IMPL *xsasl_client_init(const char *, const char *);
111 extern ARGV *xsasl_client_types(void);
112 
113 #define xsasl_client_create(impl, args) \
114  (impl)->create((impl), (args))
115 #define XSASL_CLIENT_CREATE(impl, args, a1, a2, a3, a4) \
116  xsasl_client_create((impl), (((args)->a1), ((args)->a2), ((args)->a3), \
117  ((args)->a4), (args)))
118 #define xsasl_client_done(impl) (impl)->done((impl));
119 
120  /*
121  * Status codes.
122  */
123 #define XSASL_AUTH_OK 1 /* Success */
124 #define XSASL_AUTH_MORE 2 /* Need another c/s protocol exchange */
125 #define XSASL_AUTH_DONE 3 /* Authentication completed */
126 #define XSASL_AUTH_FORM 4 /* Cannot decode response */
127 #define XSASL_AUTH_FAIL 5 /* Error */
128 #define XSASL_AUTH_TEMP 6 /* Temporary error condition */
129 
130 /* LICENSE
131 /* .ad
132 /* .fi
133 /* The Secure Mailer license must be distributed with this software.
134 /* AUTHOR(S)
135 /* Wietse Venema
136 /* IBM T.J. Watson Research
137 /* P.O. Box 704
138 /* Yorktown Heights, NY 10598, USA
139 /*
140 /* Wietse Venema
141 /* Google, Inc.
142 /* 111 8th Avenue
143 /* New York, NY 10011, USA
144 /*--*/
145 
146 #endif
const char * server_addr
Definition: xsasl.h:50
int(* first)(struct XSASL_CLIENT *, const char *, const char *, const char *, const char **, VSTRING *)
Definition: xsasl.h:82
struct XSASL_SERVER_IMPL XSASL_SERVER_IMPL
XSASL_CLIENT_IMPL * xsasl_client_init(const char *, const char *)
Definition: xsasl_client.c:218
Definition: argv.h:17
void(* done)(struct XSASL_SERVER_IMPL *)
Definition: xsasl.h:62
void(* done)(struct XSASL_CLIENT_IMPL *)
Definition: xsasl.h:107
struct XSASL_SERVER_CREATE_ARGS XSASL_SERVER_CREATE_ARGS
const char * service
Definition: xsasl.h:100
struct XSASL_CLIENT_IMPL XSASL_CLIENT_IMPL
ARGV * xsasl_server_types(void)
Definition: xsasl_server.c:262
const char * client_addr
Definition: xsasl.h:52
const char * client_port
Definition: xsasl.h:53
const char * user_realm
Definition: xsasl.h:55
void(* free)(struct XSASL_CLIENT *)
Definition: xsasl.h:81
XSASL_SERVER_IMPL * xsasl_server_init(const char *, const char *)
Definition: xsasl_server.c:248
void(* free)(struct XSASL_SERVER *)
Definition: xsasl.h:26
VSTREAM * stream
Definition: xsasl.h:48
ARGV * xsasl_client_types(void)
Definition: xsasl_client.c:232
const char * server_port
Definition: xsasl.h:51
const char * security_options
Definition: xsasl.h:102
int(* next)(struct XSASL_CLIENT *, const char *, VSTRING *)
Definition: xsasl.h:83
int(* next)(struct XSASL_SERVER *, const char *, VSTRING *)
Definition: xsasl.h:28
const char * security_options
Definition: xsasl.h:56
int int
Definition: smtpd_proxy.h:21
const char * service
Definition: xsasl.h:54
VSTREAM * stream
Definition: xsasl.h:99
struct XSASL_SERVER XSASL_SERVER
const char * server_name
Definition: xsasl.h:101
struct XSASL_CLIENT XSASL_CLIENT
int(* first)(struct XSASL_SERVER *, const char *, const char *, VSTRING *)
Definition: xsasl.h:27
struct XSASL_CLIENT_CREATE_ARGS XSASL_CLIENT_CREATE_ARGS