/src/mozilla-central/extensions/auth/nsAuthFactory.cpp
Line | Count | Source (jump to first uncovered line) |
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 | | 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 | | nsSambaNTLMAuthConstructor(nsISupports *outer, REFNSIID iid, void **result) |
111 | 0 | { |
112 | 0 | if (outer) |
113 | 0 | return NS_ERROR_NO_AGGREGATION; |
114 | 0 | |
115 | 0 | RefPtr<nsAuthSambaNTLM> auth = new nsAuthSambaNTLM(); |
116 | 0 | if (!auth) |
117 | 0 | return NS_ERROR_OUT_OF_MEMORY; |
118 | 0 | |
119 | 0 | nsresult rv = auth->SpawnNTLMAuthHelper(); |
120 | 0 | if (NS_FAILED(rv)) { |
121 | 0 | // Failure here probably means that cached credentials were not available |
122 | 0 | return rv; |
123 | 0 | } |
124 | 0 | |
125 | 0 | return auth->QueryInterface(iid, result); |
126 | 0 | } |
127 | | |
128 | | #endif |
129 | | |
130 | | static nsresult |
131 | | nsKerbGSSAPIAuthConstructor(nsISupports *outer, REFNSIID iid, void **result) |
132 | 0 | { |
133 | 0 | if (outer) |
134 | 0 | return NS_ERROR_NO_AGGREGATION; |
135 | 0 | |
136 | 0 | nsAuthGSSAPI *auth = new nsAuthGSSAPI(PACKAGE_TYPE_KERBEROS); |
137 | 0 | if (!auth) |
138 | 0 | return NS_ERROR_OUT_OF_MEMORY; |
139 | 0 | |
140 | 0 | NS_ADDREF(auth); |
141 | 0 | nsresult rv = auth->QueryInterface(iid, result); |
142 | 0 | NS_RELEASE(auth); |
143 | 0 | return rv; |
144 | 0 | } |
145 | | |
146 | | static nsresult |
147 | | nsGSSAPIAuthConstructor(nsISupports *outer, REFNSIID iid, void **result) |
148 | 0 | { |
149 | 0 | if (outer) |
150 | 0 | return NS_ERROR_NO_AGGREGATION; |
151 | 0 | |
152 | 0 | nsAuthGSSAPI *auth = new nsAuthGSSAPI(PACKAGE_TYPE_NEGOTIATE); |
153 | 0 | if (!auth) |
154 | 0 | return NS_ERROR_OUT_OF_MEMORY; |
155 | 0 | |
156 | 0 | NS_ADDREF(auth); |
157 | 0 | nsresult rv = auth->QueryInterface(iid, result); |
158 | 0 | NS_RELEASE(auth); |
159 | 0 | return rv; |
160 | 0 | } |
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 | | 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 | | #elif !defined(XP_MACOSX) |
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 | | InitNegotiateAuth() |
227 | 0 | { |
228 | 0 | return NS_OK; |
229 | 0 | } |
230 | | |
231 | | static void |
232 | | DestroyNegotiateAuth() |
233 | 0 | { |
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; |