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 {
31 public:
32     NS_DECL_ISUPPORTS
33     NS_DECL_NSIAUTHMODULE
34 
35     nsAuthSSPI(pType package = PACKAGE_TYPE_NEGOTIATE);
36 
37 private:
38     ~nsAuthSSPI();
39 
40     void Reset();
41 
42     typedef TimeStamp MS_TimeStamp;
43 
44 private:
45     CredHandle   mCred;
46     CtxtHandle   mCtxt;
47     nsCString    mServiceName;
48     uint32_t     mServiceFlags;
49     uint32_t     mMaxTokenLen;
50     pType        mPackage;
51     nsString     mDomain;
52     nsString     mUsername;
53     nsString     mPassword;
54     bool         mIsFirst;
55     void*        mCertDERData;
56     uint32_t     mCertDERLength;
57 };
58 
59 #endif /* nsAuthSSPI_h__ */
60