/* staticopen.h * Rob Siemborski * Howard Chu */ /* * Copyright (c) 1998-2016 Carnegie Mellon University. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The name "Carnegie Mellon University" must not be used to * endorse or promote products derived from this software without * prior written permission. For permission or any other legal * details, please contact * Carnegie Mellon University * Center for Technology Transfer and Enterprise Creation * 4615 Forbes Avenue * Suite 302 * Pittsburgh, PA 15213 * (412) 268-7393, fax: (412) 268-7395 * innovation@andrew.cmu.edu * * 4. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Computing Services * at Carnegie Mellon University (http://www.cmu.edu/computing/)." * * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ typedef enum { UNKNOWN = 0, SERVER = 1, CLIENT = 2, AUXPROP = 3, CANONUSER = 4 } _sasl_plug_type; typedef struct { _sasl_plug_type type; char *name; sasl_client_plug_init_t *plug; } _sasl_plug_rec; /* For static linking */ #define SPECIFIC_CLIENT_PLUG_INIT_PROTO( x ) \ sasl_client_plug_init_t x##_client_plug_init #define SPECIFIC_SERVER_PLUG_INIT_PROTO( x ) \ sasl_server_plug_init_t x##_server_plug_init #define SPECIFIC_AUXPROP_PLUG_INIT_PROTO( x ) \ sasl_auxprop_init_t x##_auxprop_plug_init #define SPECIFIC_CANONUSER_PLUG_INIT_PROTO( x ) \ sasl_canonuser_init_t x##_canonuser_plug_init /* Static Compillation Foo */ #define SPECIFIC_CLIENT_PLUG_INIT( x, n )\ { CLIENT, n, x##_client_plug_init } #define SPECIFIC_SERVER_PLUG_INIT( x, n )\ { SERVER, n, (sasl_client_plug_init_t *)x##_server_plug_init } #define SPECIFIC_AUXPROP_PLUG_INIT( x, n )\ { AUXPROP, n, (sasl_client_plug_init_t *)x##_auxprop_plug_init } #define SPECIFIC_CANONUSER_PLUG_INIT( x, n )\ { CANONUSER, n, (sasl_client_plug_init_t *)x##_canonuser_plug_init } #ifdef STATIC_ANONYMOUS extern SPECIFIC_SERVER_PLUG_INIT_PROTO( anonymous ); extern SPECIFIC_CLIENT_PLUG_INIT_PROTO( anonymous ); #endif #ifdef STATIC_CRAMMD5 extern SPECIFIC_SERVER_PLUG_INIT_PROTO( crammd5 ); extern SPECIFIC_CLIENT_PLUG_INIT_PROTO( crammd5 ); #endif #ifdef STATIC_DIGESTMD5 extern SPECIFIC_SERVER_PLUG_INIT_PROTO( digestmd5 ); extern SPECIFIC_CLIENT_PLUG_INIT_PROTO( digestmd5 ); #endif #ifdef STATIC_SCRAM extern SPECIFIC_SERVER_PLUG_INIT_PROTO( scram ); extern SPECIFIC_CLIENT_PLUG_INIT_PROTO( scram ); #endif #ifdef STATIC_GSSAPIV2 extern SPECIFIC_SERVER_PLUG_INIT_PROTO( gssapiv2 ); extern SPECIFIC_CLIENT_PLUG_INIT_PROTO( gssapiv2 ); #endif #ifdef STATIC_KERBEROS4 extern SPECIFIC_SERVER_PLUG_INIT_PROTO( kerberos4 ); extern SPECIFIC_CLIENT_PLUG_INIT_PROTO( kerberos4 ); #endif #ifdef STATIC_LOGIN extern SPECIFIC_SERVER_PLUG_INIT_PROTO( login ); extern SPECIFIC_CLIENT_PLUG_INIT_PROTO( login ); #endif #ifdef STATIC_NTLM extern SPECIFIC_SERVER_PLUG_INIT_PROTO( ntlm ); extern SPECIFIC_CLIENT_PLUG_INIT_PROTO( ntlm ); #endif #ifdef STATIC_OTP extern SPECIFIC_SERVER_PLUG_INIT_PROTO( otp ); extern SPECIFIC_CLIENT_PLUG_INIT_PROTO( otp ); #endif #ifdef STATIC_PLAIN extern SPECIFIC_SERVER_PLUG_INIT_PROTO( plain ); extern SPECIFIC_CLIENT_PLUG_INIT_PROTO( plain ); #endif #ifdef STATIC_SRP extern SPECIFIC_SERVER_PLUG_INIT_PROTO( srp ); extern SPECIFIC_CLIENT_PLUG_INIT_PROTO( srp ); #endif #ifdef STATIC_SASLDB extern SPECIFIC_AUXPROP_PLUG_INIT_PROTO( sasldb ); #endif #ifdef STATIC_SQL extern SPECIFIC_AUXPROP_PLUG_INIT_PROTO( sql ); #endif #ifdef STATIC_LDAPDB extern SPECIFIC_AUXPROP_PLUG_INIT_PROTO( ldapdb ); #endif _sasl_plug_rec _sasl_static_plugins[] = { #ifdef STATIC_ANONYMOUS SPECIFIC_SERVER_PLUG_INIT( anonymous, "ANONYMOUS" ), SPECIFIC_CLIENT_PLUG_INIT( anonymous, "ANONYMOUS" ), #endif #ifdef STATIC_CRAMMD5 SPECIFIC_SERVER_PLUG_INIT( crammd5, "CRAM-MD5" ), SPECIFIC_CLIENT_PLUG_INIT( crammd5, "CRAM-MD5" ), #endif #ifdef STATIC_DIGESTMD5 SPECIFIC_SERVER_PLUG_INIT( digestmd5, "DIGEST-MD5" ), SPECIFIC_CLIENT_PLUG_INIT( digestmd5, "DIGEST-MD5" ), #endif #ifdef STATIC_GSSAPIV2 SPECIFIC_SERVER_PLUG_INIT( gssapiv2, "GSSAPI" ), SPECIFIC_CLIENT_PLUG_INIT( gssapiv2, "GSSAPI" ), #endif #ifdef STATIC_KERBEROS4 SPECIFIC_SERVER_PLUG_INIT( kerberos4, "KERBEROS_V4" ), SPECIFIC_CLIENT_PLUG_INIT( kerberos4, "KERBEROS_V4" ), #endif #ifdef STATIC_LOGIN SPECIFIC_SERVER_PLUG_INIT( login, "LOGIN" ), SPECIFIC_CLIENT_PLUG_INIT( login, "LOGIN" ), #endif #ifdef STATIC_NTLM SPECIFIC_SERVER_PLUG_INIT( ntlm, "NTLM" ), SPECIFIC_CLIENT_PLUG_INIT( ntlm, "NTLM" ), #endif #ifdef STATIC_OTP SPECIFIC_SERVER_PLUG_INIT( otp, "OTP" ), SPECIFIC_CLIENT_PLUG_INIT( otp, "OTP" ), #endif #ifdef STATIC_PLAIN SPECIFIC_SERVER_PLUG_INIT( plain, "PLAIN" ), SPECIFIC_CLIENT_PLUG_INIT( plain, "PLAIN" ), #endif #ifdef STATIC_SCRAM SPECIFIC_SERVER_PLUG_INIT( scram, "SCRAM" ), SPECIFIC_CLIENT_PLUG_INIT( scram, "SCRAM" ), #endif #ifdef STATIC_SRP SPECIFIC_SERVER_PLUG_INIT( srp, "SRP" ), SPECIFIC_CLIENT_PLUG_INIT( srp, "SRP" ), #endif #ifdef STATIC_SASLDB SPECIFIC_AUXPROP_PLUG_INIT( sasldb, "SASLDB" ), #endif #ifdef STATIC_SQL SPECIFIC_AUXPROP_PLUG_INIT( sql, "SQL" ), #endif #ifdef STATIC_LDAPDB SPECIFIC_AUXPROP_PLUG_INIT( ldapdb, "LDAPDB" ), #endif { UNKNOWN, NULL, NULL } };