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