extensions/auth/nsAuthFactory.cpp

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 #include "mozilla/ModuleUtils.h"
     6 #include "nsAuth.h"
     7 #include "nsAutoPtr.h"
     9 //-----------------------------------------------------------------------------
    11 #define NS_HTTPNEGOTIATEAUTH_CID                   \
    12 { /* 75c80fd0-accb-432c-af59-ec60668c3990 */       \
    13   0x75c80fd0,                                      \
    14   0xaccb,                                          \
    15   0x432c,                                          \
    16   {0xaf, 0x59, 0xec, 0x60, 0x66, 0x8c, 0x39, 0x90} \
    17 }
    19 #include "nsHttpNegotiateAuth.h"
    20 NS_GENERIC_FACTORY_CONSTRUCTOR(nsHttpNegotiateAuth)
    21 //-----------------------------------------------------------------------------
    23 #define NS_NEGOTIATEAUTH_CID                       \
    24 { /* 96ec4163-efc8-407a-8735-007fb26be4e8 */       \
    25   0x96ec4163,                                      \
    26   0xefc8,                                          \
    27   0x407a,                                          \
    28   {0x87, 0x35, 0x00, 0x7f, 0xb2, 0x6b, 0xe4, 0xe8} \
    29 }
    30 #define NS_GSSAUTH_CID                             \
    31 { /* dc8e21a0-03e4-11da-8cd6-0800200c9a66 */       \
    32   0xdc8e21a0,                                      \
    33   0x03e4,                                          \
    34   0x11da,                                          \
    35   {0x8c, 0xd6, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66} \
    36 }
    38 #include "nsAuthGSSAPI.h"
    40 #if defined( USE_SSPI )
    41 #include "nsAuthSSPI.h"
    43 static nsresult
    44 nsSysNTLMAuthConstructor(nsISupports *outer, REFNSIID iid, void **result)
    45 {
    46   if (outer)
    47     return NS_ERROR_NO_AGGREGATION;
    49   nsAuthSSPI *auth = new nsAuthSSPI(PACKAGE_TYPE_NTLM);
    50   if (!auth)
    51     return NS_ERROR_OUT_OF_MEMORY;
    53   NS_ADDREF(auth);
    54   nsresult rv = auth->QueryInterface(iid, result);
    55   NS_RELEASE(auth);
    56   return rv;
    57 }
    59 static nsresult
    60 nsKerbSSPIAuthConstructor(nsISupports *outer, REFNSIID iid, void **result)
    61 {
    62   if (outer)
    63     return NS_ERROR_NO_AGGREGATION;
    65   nsAuthSSPI *auth = new nsAuthSSPI(PACKAGE_TYPE_KERBEROS);
    66   if (!auth)
    67     return NS_ERROR_OUT_OF_MEMORY;
    69   NS_ADDREF(auth);
    70   nsresult rv = auth->QueryInterface(iid, result);
    71   NS_RELEASE(auth);
    72   return rv;
    73 }
    75 #define NS_SYSNTLMAUTH_CID                         \
    76 { /* dc195987-6e9a-47bc-b1fd-ab895d398833 */       \
    77   0xdc195987,                                      \
    78   0x6e9a,                                          \
    79   0x47bc,                                          \
    80   {0xb1, 0xfd, 0xab, 0x89, 0x5d, 0x39, 0x88, 0x33} \
    81 }
    83 #define NS_NEGOTIATEAUTHSSPI_CID                   \
    84 { /* 78d3b0c0-0241-11da-8cd6-0800200c9a66 */       \
    85   0x78d3b0c0,                                      \
    86   0x0241,                                          \
    87   0x11da,                                          \
    88   {0x8c, 0xd6, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66} \
    89 }
    91 #define NS_KERBAUTHSSPI_CID                        \
    92 { /* 8c3a0e20-03e5-11da-8cd6-0800200c9a66 */       \
    93   0x8c3a0e20,                                      \
    94   0x03e5,                                          \
    95   0x11da,                                          \
    96   {0x8c, 0xd6, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66} \
    97 }
    99 #else
   101 #define NS_SAMBANTLMAUTH_CID                       \
   102 { /* bc54f001-6eb0-4e32-9f49-7e064d8e70ef */       \
   103   0xbc54f001,                                      \
   104   0x6eb0,                                          \
   105   0x4e32,                                          \
   106   {0x9f, 0x49, 0x7e, 0x06, 0x4d, 0x8e, 0x70, 0xef} \
   107 }
   109 #include "nsAuthSambaNTLM.h"
   110 static nsresult
   111 nsSambaNTLMAuthConstructor(nsISupports *outer, REFNSIID iid, void **result)
   112 {
   113   if (outer)
   114     return NS_ERROR_NO_AGGREGATION;
   116   nsRefPtr<nsAuthSambaNTLM> auth = new nsAuthSambaNTLM();
   117   if (!auth)
   118     return NS_ERROR_OUT_OF_MEMORY;
   120   nsresult rv = auth->SpawnNTLMAuthHelper();
   121   if (NS_FAILED(rv)) {
   122     // Failure here probably means that cached credentials were not available
   123     return rv;
   124   }
   126   return auth->QueryInterface(iid, result);
   127 }
   129 #endif
   131 static nsresult
   132 nsKerbGSSAPIAuthConstructor(nsISupports *outer, REFNSIID iid, void **result)
   133 {
   134   if (outer)
   135     return NS_ERROR_NO_AGGREGATION;
   137   nsAuthGSSAPI *auth = new nsAuthGSSAPI(PACKAGE_TYPE_KERBEROS);
   138   if (!auth)
   139     return NS_ERROR_OUT_OF_MEMORY;
   141   NS_ADDREF(auth);
   142   nsresult rv = auth->QueryInterface(iid, result);
   143   NS_RELEASE(auth);
   144   return rv;
   145 }
   147 static nsresult
   148 nsGSSAPIAuthConstructor(nsISupports *outer, REFNSIID iid, void **result)
   149 {
   150   if (outer)
   151     return NS_ERROR_NO_AGGREGATION;
   153   nsAuthGSSAPI *auth = new nsAuthGSSAPI(PACKAGE_TYPE_NEGOTIATE);
   154   if (!auth)
   155     return NS_ERROR_OUT_OF_MEMORY;
   157   NS_ADDREF(auth);
   158   nsresult rv = auth->QueryInterface(iid, result);
   159   NS_RELEASE(auth);
   160   return rv;
   161 }
   164 #if defined( USE_SSPI )
   165 NS_GENERIC_FACTORY_CONSTRUCTOR(nsAuthSSPI)
   166 #endif
   168 #define NS_AUTHSASL_CID                            \
   169 { /* 815e42e0-72cc-480f-934b-148e33c228a6 */       \
   170   0x815e42e0,                                      \
   171   0x72cc,                                          \
   172   0x480f,                                          \
   173   {0x93, 0x4b, 0x14, 0x8e, 0x33, 0xc2, 0x28, 0xa6} \
   174 }
   176 #include "nsAuthSASL.h"
   177 NS_GENERIC_FACTORY_CONSTRUCTOR(nsAuthSASL)
   179 NS_DEFINE_NAMED_CID(NS_GSSAUTH_CID);
   180 NS_DEFINE_NAMED_CID(NS_NEGOTIATEAUTH_CID);
   181 #if defined( USE_SSPI )
   182 NS_DEFINE_NAMED_CID(NS_NEGOTIATEAUTHSSPI_CID);
   183 NS_DEFINE_NAMED_CID(NS_KERBAUTHSSPI_CID);
   184 NS_DEFINE_NAMED_CID(NS_SYSNTLMAUTH_CID);
   185 #else
   186 NS_DEFINE_NAMED_CID(NS_SAMBANTLMAUTH_CID);
   187 #endif
   188 NS_DEFINE_NAMED_CID(NS_HTTPNEGOTIATEAUTH_CID);
   189 NS_DEFINE_NAMED_CID(NS_AUTHSASL_CID);
   192 static const mozilla::Module::CIDEntry kAuthCIDs[] = {
   193   { &kNS_GSSAUTH_CID, false, nullptr, nsKerbGSSAPIAuthConstructor },
   194   { &kNS_NEGOTIATEAUTH_CID, false, nullptr, nsGSSAPIAuthConstructor },
   195 #if defined( USE_SSPI )
   196   { &kNS_NEGOTIATEAUTHSSPI_CID, false, nullptr, nsAuthSSPIConstructor },
   197   { &kNS_KERBAUTHSSPI_CID, false, nullptr, nsKerbSSPIAuthConstructor },
   198   { &kNS_SYSNTLMAUTH_CID, false, nullptr, nsSysNTLMAuthConstructor },
   199 #else
   200   { &kNS_SAMBANTLMAUTH_CID, false, nullptr, nsSambaNTLMAuthConstructor },
   201 #endif
   202   { &kNS_HTTPNEGOTIATEAUTH_CID, false, nullptr, nsHttpNegotiateAuthConstructor },
   203   { &kNS_AUTHSASL_CID, false, nullptr, nsAuthSASLConstructor },
   204   { nullptr }
   205 };
   207 static const mozilla::Module::ContractIDEntry kAuthContracts[] = {
   208   { NS_AUTH_MODULE_CONTRACTID_PREFIX "kerb-gss", &kNS_GSSAUTH_CID },
   209   { NS_AUTH_MODULE_CONTRACTID_PREFIX "negotiate-gss", &kNS_NEGOTIATEAUTH_CID },
   210 #if defined( USE_SSPI )
   211   { NS_AUTH_MODULE_CONTRACTID_PREFIX "negotiate-sspi", &kNS_NEGOTIATEAUTHSSPI_CID },
   212   { NS_AUTH_MODULE_CONTRACTID_PREFIX "kerb-sspi", &kNS_KERBAUTHSSPI_CID },
   213   { NS_AUTH_MODULE_CONTRACTID_PREFIX "sys-ntlm", &kNS_SYSNTLMAUTH_CID },
   214 #else
   215   { NS_AUTH_MODULE_CONTRACTID_PREFIX "sys-ntlm", &kNS_SAMBANTLMAUTH_CID },
   216 #endif
   217   { NS_HTTP_AUTHENTICATOR_CONTRACTID_PREFIX "negotiate", &kNS_HTTPNEGOTIATEAUTH_CID },
   218   { NS_AUTH_MODULE_CONTRACTID_PREFIX "sasl-gssapi", &kNS_AUTHSASL_CID },
   219   { nullptr }
   220 };
   222 //-----------------------------------------------------------------------------
   223 #if defined( PR_LOGGING )
   224 PRLogModuleInfo *gNegotiateLog;
   226 // setup nspr logging ...
   227 static nsresult
   228 InitNegotiateAuth()
   229 {
   230   gNegotiateLog = PR_NewLogModule("negotiateauth");
   231   return NS_OK;
   232 }
   233 #else
   234 #define InitNegotiateAuth nullptr
   235 #endif
   237 static void
   238 DestroyNegotiateAuth()
   239 {
   240   nsAuthGSSAPI::Shutdown();
   241 }
   243 static const mozilla::Module kAuthModule = {
   244   mozilla::Module::kVersion,
   245   kAuthCIDs,
   246   kAuthContracts,
   247   nullptr,
   248   nullptr,
   249   InitNegotiateAuth,
   250   DestroyNegotiateAuth
   251 };
   253 NSMODULE_DEFN(nsAuthModule) = &kAuthModule;

mercurial