extensions/auth/nsAuthFactory.cpp

changeset 0
6474c204b198
     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;

mercurial