1 /* vim:set ts=4 sw=4 et cindent: */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3  * License, v. 2.0. If a copy of the MPL was not distributed with this
4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 
6 #ifndef nsAuthSSPI_h__
7 #define nsAuthSSPI_h__
8 
9 #include "nsAuth.h"
10 #include "nsIAuthModule.h"
11 #include "nsString.h"
12 
13 #include <windows.h>
14 
15 #define SECURITY_WIN32 1
16 #include <ntsecapi.h>
17 #include <security.h>
18 #include <rpc.h>
19 
20 // The nsNegotiateAuth class provides responses for the GSS-API Negotiate method
21 // as specified by Microsoft in draft-brezak-spnego-http-04.txt
22 
23 // It can also be configured to talk raw NTLM.  This implementation of NTLM has
24 // the advantage of being able to access the user's logon credentials.  This
25 // implementation of NTLM should only be used for single-signon.  It should be
26 // avoided when authenticating over the internet since it may use a lower-grade
27 // version of password hashing depending on the version of Windows being used.
28 
29 class nsAuthSSPI final : public nsIAuthModule {
30  public:
31   NS_DECL_ISUPPORTS
32   NS_DECL_NSIAUTHMODULE
33 
34   explicit nsAuthSSPI(pType package = PACKAGE_TYPE_NEGOTIATE);
35 
36  private:
37   ~nsAuthSSPI();
38 
39   void Reset();
40 
41   typedef TimeStamp MS_TimeStamp;
42 
43  private:
44   nsresult MakeSN(const char *principal, nsCString &result);
45 
46   CredHandle mCred;
47   CtxtHandle mCtxt;
48   nsCString mServiceName;
49   uint32_t mServiceFlags;
50   uint32_t mMaxTokenLen;
51   pType mPackage;
52   nsString mDomain;
53   nsString mUsername;
54   nsString mPassword;
55   bool mIsFirst;
56   void *mCertDERData;
57   uint32_t mCertDERLength;
58 };
59 
60 #endif /* nsAuthSSPI_h__ */
61