Coverage Report

Created: 2018-09-25 14:53

/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;