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