1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/extensions/auth/nsAuthFactory.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,253 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +#include "mozilla/ModuleUtils.h" 1.9 +#include "nsAuth.h" 1.10 +#include "nsAutoPtr.h" 1.11 + 1.12 +//----------------------------------------------------------------------------- 1.13 + 1.14 +#define NS_HTTPNEGOTIATEAUTH_CID \ 1.15 +{ /* 75c80fd0-accb-432c-af59-ec60668c3990 */ \ 1.16 + 0x75c80fd0, \ 1.17 + 0xaccb, \ 1.18 + 0x432c, \ 1.19 + {0xaf, 0x59, 0xec, 0x60, 0x66, 0x8c, 0x39, 0x90} \ 1.20 +} 1.21 + 1.22 +#include "nsHttpNegotiateAuth.h" 1.23 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsHttpNegotiateAuth) 1.24 +//----------------------------------------------------------------------------- 1.25 + 1.26 +#define NS_NEGOTIATEAUTH_CID \ 1.27 +{ /* 96ec4163-efc8-407a-8735-007fb26be4e8 */ \ 1.28 + 0x96ec4163, \ 1.29 + 0xefc8, \ 1.30 + 0x407a, \ 1.31 + {0x87, 0x35, 0x00, 0x7f, 0xb2, 0x6b, 0xe4, 0xe8} \ 1.32 +} 1.33 +#define NS_GSSAUTH_CID \ 1.34 +{ /* dc8e21a0-03e4-11da-8cd6-0800200c9a66 */ \ 1.35 + 0xdc8e21a0, \ 1.36 + 0x03e4, \ 1.37 + 0x11da, \ 1.38 + {0x8c, 0xd6, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66} \ 1.39 +} 1.40 + 1.41 +#include "nsAuthGSSAPI.h" 1.42 + 1.43 +#if defined( USE_SSPI ) 1.44 +#include "nsAuthSSPI.h" 1.45 + 1.46 +static nsresult 1.47 +nsSysNTLMAuthConstructor(nsISupports *outer, REFNSIID iid, void **result) 1.48 +{ 1.49 + if (outer) 1.50 + return NS_ERROR_NO_AGGREGATION; 1.51 + 1.52 + nsAuthSSPI *auth = new nsAuthSSPI(PACKAGE_TYPE_NTLM); 1.53 + if (!auth) 1.54 + return NS_ERROR_OUT_OF_MEMORY; 1.55 + 1.56 + NS_ADDREF(auth); 1.57 + nsresult rv = auth->QueryInterface(iid, result); 1.58 + NS_RELEASE(auth); 1.59 + return rv; 1.60 +} 1.61 + 1.62 +static nsresult 1.63 +nsKerbSSPIAuthConstructor(nsISupports *outer, REFNSIID iid, void **result) 1.64 +{ 1.65 + if (outer) 1.66 + return NS_ERROR_NO_AGGREGATION; 1.67 + 1.68 + nsAuthSSPI *auth = new nsAuthSSPI(PACKAGE_TYPE_KERBEROS); 1.69 + if (!auth) 1.70 + return NS_ERROR_OUT_OF_MEMORY; 1.71 + 1.72 + NS_ADDREF(auth); 1.73 + nsresult rv = auth->QueryInterface(iid, result); 1.74 + NS_RELEASE(auth); 1.75 + return rv; 1.76 +} 1.77 + 1.78 +#define NS_SYSNTLMAUTH_CID \ 1.79 +{ /* dc195987-6e9a-47bc-b1fd-ab895d398833 */ \ 1.80 + 0xdc195987, \ 1.81 + 0x6e9a, \ 1.82 + 0x47bc, \ 1.83 + {0xb1, 0xfd, 0xab, 0x89, 0x5d, 0x39, 0x88, 0x33} \ 1.84 +} 1.85 + 1.86 +#define NS_NEGOTIATEAUTHSSPI_CID \ 1.87 +{ /* 78d3b0c0-0241-11da-8cd6-0800200c9a66 */ \ 1.88 + 0x78d3b0c0, \ 1.89 + 0x0241, \ 1.90 + 0x11da, \ 1.91 + {0x8c, 0xd6, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66} \ 1.92 +} 1.93 + 1.94 +#define NS_KERBAUTHSSPI_CID \ 1.95 +{ /* 8c3a0e20-03e5-11da-8cd6-0800200c9a66 */ \ 1.96 + 0x8c3a0e20, \ 1.97 + 0x03e5, \ 1.98 + 0x11da, \ 1.99 + {0x8c, 0xd6, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66} \ 1.100 +} 1.101 + 1.102 +#else 1.103 + 1.104 +#define NS_SAMBANTLMAUTH_CID \ 1.105 +{ /* bc54f001-6eb0-4e32-9f49-7e064d8e70ef */ \ 1.106 + 0xbc54f001, \ 1.107 + 0x6eb0, \ 1.108 + 0x4e32, \ 1.109 + {0x9f, 0x49, 0x7e, 0x06, 0x4d, 0x8e, 0x70, 0xef} \ 1.110 +} 1.111 + 1.112 +#include "nsAuthSambaNTLM.h" 1.113 +static nsresult 1.114 +nsSambaNTLMAuthConstructor(nsISupports *outer, REFNSIID iid, void **result) 1.115 +{ 1.116 + if (outer) 1.117 + return NS_ERROR_NO_AGGREGATION; 1.118 + 1.119 + nsRefPtr<nsAuthSambaNTLM> auth = new nsAuthSambaNTLM(); 1.120 + if (!auth) 1.121 + return NS_ERROR_OUT_OF_MEMORY; 1.122 + 1.123 + nsresult rv = auth->SpawnNTLMAuthHelper(); 1.124 + if (NS_FAILED(rv)) { 1.125 + // Failure here probably means that cached credentials were not available 1.126 + return rv; 1.127 + } 1.128 + 1.129 + return auth->QueryInterface(iid, result); 1.130 +} 1.131 + 1.132 +#endif 1.133 + 1.134 +static nsresult 1.135 +nsKerbGSSAPIAuthConstructor(nsISupports *outer, REFNSIID iid, void **result) 1.136 +{ 1.137 + if (outer) 1.138 + return NS_ERROR_NO_AGGREGATION; 1.139 + 1.140 + nsAuthGSSAPI *auth = new nsAuthGSSAPI(PACKAGE_TYPE_KERBEROS); 1.141 + if (!auth) 1.142 + return NS_ERROR_OUT_OF_MEMORY; 1.143 + 1.144 + NS_ADDREF(auth); 1.145 + nsresult rv = auth->QueryInterface(iid, result); 1.146 + NS_RELEASE(auth); 1.147 + return rv; 1.148 +} 1.149 + 1.150 +static nsresult 1.151 +nsGSSAPIAuthConstructor(nsISupports *outer, REFNSIID iid, void **result) 1.152 +{ 1.153 + if (outer) 1.154 + return NS_ERROR_NO_AGGREGATION; 1.155 + 1.156 + nsAuthGSSAPI *auth = new nsAuthGSSAPI(PACKAGE_TYPE_NEGOTIATE); 1.157 + if (!auth) 1.158 + return NS_ERROR_OUT_OF_MEMORY; 1.159 + 1.160 + NS_ADDREF(auth); 1.161 + nsresult rv = auth->QueryInterface(iid, result); 1.162 + NS_RELEASE(auth); 1.163 + return rv; 1.164 +} 1.165 + 1.166 + 1.167 +#if defined( USE_SSPI ) 1.168 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsAuthSSPI) 1.169 +#endif 1.170 + 1.171 +#define NS_AUTHSASL_CID \ 1.172 +{ /* 815e42e0-72cc-480f-934b-148e33c228a6 */ \ 1.173 + 0x815e42e0, \ 1.174 + 0x72cc, \ 1.175 + 0x480f, \ 1.176 + {0x93, 0x4b, 0x14, 0x8e, 0x33, 0xc2, 0x28, 0xa6} \ 1.177 +} 1.178 + 1.179 +#include "nsAuthSASL.h" 1.180 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsAuthSASL) 1.181 + 1.182 +NS_DEFINE_NAMED_CID(NS_GSSAUTH_CID); 1.183 +NS_DEFINE_NAMED_CID(NS_NEGOTIATEAUTH_CID); 1.184 +#if defined( USE_SSPI ) 1.185 +NS_DEFINE_NAMED_CID(NS_NEGOTIATEAUTHSSPI_CID); 1.186 +NS_DEFINE_NAMED_CID(NS_KERBAUTHSSPI_CID); 1.187 +NS_DEFINE_NAMED_CID(NS_SYSNTLMAUTH_CID); 1.188 +#else 1.189 +NS_DEFINE_NAMED_CID(NS_SAMBANTLMAUTH_CID); 1.190 +#endif 1.191 +NS_DEFINE_NAMED_CID(NS_HTTPNEGOTIATEAUTH_CID); 1.192 +NS_DEFINE_NAMED_CID(NS_AUTHSASL_CID); 1.193 + 1.194 + 1.195 +static const mozilla::Module::CIDEntry kAuthCIDs[] = { 1.196 + { &kNS_GSSAUTH_CID, false, nullptr, nsKerbGSSAPIAuthConstructor }, 1.197 + { &kNS_NEGOTIATEAUTH_CID, false, nullptr, nsGSSAPIAuthConstructor }, 1.198 +#if defined( USE_SSPI ) 1.199 + { &kNS_NEGOTIATEAUTHSSPI_CID, false, nullptr, nsAuthSSPIConstructor }, 1.200 + { &kNS_KERBAUTHSSPI_CID, false, nullptr, nsKerbSSPIAuthConstructor }, 1.201 + { &kNS_SYSNTLMAUTH_CID, false, nullptr, nsSysNTLMAuthConstructor }, 1.202 +#else 1.203 + { &kNS_SAMBANTLMAUTH_CID, false, nullptr, nsSambaNTLMAuthConstructor }, 1.204 +#endif 1.205 + { &kNS_HTTPNEGOTIATEAUTH_CID, false, nullptr, nsHttpNegotiateAuthConstructor }, 1.206 + { &kNS_AUTHSASL_CID, false, nullptr, nsAuthSASLConstructor }, 1.207 + { nullptr } 1.208 +}; 1.209 + 1.210 +static const mozilla::Module::ContractIDEntry kAuthContracts[] = { 1.211 + { NS_AUTH_MODULE_CONTRACTID_PREFIX "kerb-gss", &kNS_GSSAUTH_CID }, 1.212 + { NS_AUTH_MODULE_CONTRACTID_PREFIX "negotiate-gss", &kNS_NEGOTIATEAUTH_CID }, 1.213 +#if defined( USE_SSPI ) 1.214 + { NS_AUTH_MODULE_CONTRACTID_PREFIX "negotiate-sspi", &kNS_NEGOTIATEAUTHSSPI_CID }, 1.215 + { NS_AUTH_MODULE_CONTRACTID_PREFIX "kerb-sspi", &kNS_KERBAUTHSSPI_CID }, 1.216 + { NS_AUTH_MODULE_CONTRACTID_PREFIX "sys-ntlm", &kNS_SYSNTLMAUTH_CID }, 1.217 +#else 1.218 + { NS_AUTH_MODULE_CONTRACTID_PREFIX "sys-ntlm", &kNS_SAMBANTLMAUTH_CID }, 1.219 +#endif 1.220 + { NS_HTTP_AUTHENTICATOR_CONTRACTID_PREFIX "negotiate", &kNS_HTTPNEGOTIATEAUTH_CID }, 1.221 + { NS_AUTH_MODULE_CONTRACTID_PREFIX "sasl-gssapi", &kNS_AUTHSASL_CID }, 1.222 + { nullptr } 1.223 +}; 1.224 + 1.225 +//----------------------------------------------------------------------------- 1.226 +#if defined( PR_LOGGING ) 1.227 +PRLogModuleInfo *gNegotiateLog; 1.228 + 1.229 +// setup nspr logging ... 1.230 +static nsresult 1.231 +InitNegotiateAuth() 1.232 +{ 1.233 + gNegotiateLog = PR_NewLogModule("negotiateauth"); 1.234 + return NS_OK; 1.235 +} 1.236 +#else 1.237 +#define InitNegotiateAuth nullptr 1.238 +#endif 1.239 + 1.240 +static void 1.241 +DestroyNegotiateAuth() 1.242 +{ 1.243 + nsAuthGSSAPI::Shutdown(); 1.244 +} 1.245 + 1.246 +static const mozilla::Module kAuthModule = { 1.247 + mozilla::Module::kVersion, 1.248 + kAuthCIDs, 1.249 + kAuthContracts, 1.250 + nullptr, 1.251 + nullptr, 1.252 + InitNegotiateAuth, 1.253 + DestroyNegotiateAuth 1.254 +}; 1.255 + 1.256 +NSMODULE_DEFN(nsAuthModule) = &kAuthModule;