Bumping gaia.json for 1 gaia revision(s) a=gaia-bump
[gecko.git] / extensions / auth / nsAuthFactory.cpp
blobeb600c1ce5f65581fdfd9d1cc61f2878297b7ee9
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} \
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} \
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} \
38 #include "nsAuthGSSAPI.h"
40 #if defined( USE_SSPI )
41 #include "nsAuthSSPI.h"
43 static nsresult
44 nsSysNTLMAuthConstructor(nsISupports *outer, REFNSIID iid, void **result)
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;
59 static nsresult
60 nsKerbSSPIAuthConstructor(nsISupports *outer, REFNSIID iid, void **result)
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;
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} \
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} \
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} \
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} \
109 #include "nsAuthSambaNTLM.h"
110 static nsresult
111 nsSambaNTLMAuthConstructor(nsISupports *outer, REFNSIID iid, void **result)
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;
126 return auth->QueryInterface(iid, result);
129 #endif
131 static nsresult
132 nsKerbGSSAPIAuthConstructor(nsISupports *outer, REFNSIID iid, void **result)
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;
147 static nsresult
148 nsGSSAPIAuthConstructor(nsISupports *outer, REFNSIID iid, void **result)
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;
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} \
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 }
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 }
222 //-----------------------------------------------------------------------------
223 #if defined( PR_LOGGING )
224 PRLogModuleInfo *gNegotiateLog;
226 // setup nspr logging ...
227 static nsresult
228 InitNegotiateAuth()
230 gNegotiateLog = PR_NewLogModule("negotiateauth");
231 return NS_OK;
233 #else
234 #define InitNegotiateAuth nullptr
235 #endif
237 static void
238 DestroyNegotiateAuth()
240 nsAuthGSSAPI::Shutdown();
243 static const mozilla::Module kAuthModule = {
244 mozilla::Module::kVersion,
245 kAuthCIDs,
246 kAuthContracts,
247 nullptr,
248 nullptr,
249 InitNegotiateAuth,
250 DestroyNegotiateAuth
253 NSMODULE_DEFN(nsAuthModule) = &kAuthModule;