home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 27 / IOPROG_27.ISO / SOFT / ADSDK.ZIP / Samples / General / ADQI / ADsOpenDSObject.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1999-04-08  |  6.0 KB  |  287 lines

  1.  
  2.  
  3. //----------------------------------------------------------------------------
  4. //
  5. //  Microsoft Active Directory 2.5 Sample Code
  6. //
  7. //  Copyright (C) Microsoft Corporation, 1996 - 1999
  8. //
  9. //  File:       ADsOpenDSObject.cpp
  10. //
  11. //  Contents:   IADsOpenDSObject and ADsOpenObject usage
  12. //
  13. //
  14. //----------------------------------------------------------------------------
  15.  
  16.  
  17. #include "stdafx.h"
  18. #include "ADQI.h"
  19. #include "ADsOpenDSObject.h"
  20.  
  21. #ifdef _DEBUG
  22. #define new DEBUG_NEW
  23. #undef THIS_FILE
  24. static char THIS_FILE[] = __FILE__;
  25. #endif
  26.  
  27.  
  28. void DlgProcIADsOpenDSObject( LPUNKNOWN pUnk, LPUNKNOWN *ppNew)
  29. {
  30.    CDlgIADsOpenDSObject dlg( pUnk, ppNew );
  31.    dlg.DoModal();
  32. }
  33.  
  34.  
  35. /////////////////////////////////////////////////////////////////////////////
  36. // CDlgIADsOpenDSObject dialog
  37.  
  38.  
  39. CDlgIADsOpenDSObject::CDlgIADsOpenDSObject( LPUNKNOWN pUnk, LPUNKNOWN *ppNew, CWnd* pParent /*=NULL*/)
  40.     : CDialog(CDlgIADsOpenDSObject::IDD, pParent)
  41. {
  42.     //{{AFX_DATA_INIT(CDlgIADsOpenDSObject)
  43.     m_sPassword = _T("");
  44.     m_sUserName = _T("");
  45.     m_bEncrypt = FALSE;
  46.     m_bReadOnly = FALSE;
  47.     m_bSecured = FALSE;
  48.     m_bPrompt = FALSE;
  49.     m_bNoAuthentication = FALSE;
  50.     m_sADsPath = _T("");
  51.     m_bClearText = FALSE;
  52.     m_bFastBind = FALSE;
  53.     m_bSealing = FALSE;
  54.     m_bSigning = FALSE;
  55.     //}}AFX_DATA_INIT
  56.     
  57.     HRESULT hr;
  58.     m_pOpenDS = NULL;
  59.     m_ppUnk = ppNew;
  60.  
  61.     
  62.     hr = pUnk->QueryInterface( IID_IADsOpenDSObject, (void **) &m_pOpenDS );
  63.     if ( !SUCCEEDED(hr) )
  64.     {
  65.         // Give warning... ADsOpenObject has the same functionality as IADsOpenDSObject,
  66.         // the only different is the IADsOpenDSObject normally lives on the namespace object
  67.         AfxMessageBox(_T("Warning: QI for IADsOpenDSObject failed, we will use ADsOpenObject()"));
  68.     }
  69.  
  70.     
  71.  
  72.     CComPtr<IADs> pADs=NULL;
  73.     BSTR bstr;
  74.     hr = pUnk->QueryInterface( IID_IADs, (void**) &pADs );
  75.     if ( SUCCEEDED(hr) )
  76.     {
  77.         pADs->get_ADsPath( &bstr );
  78.         m_sADsPath = bstr;
  79.            SysFreeString( bstr );
  80.     }
  81.  
  82.     pUnk->Release();
  83.  
  84.  
  85.  
  86.     
  87.  
  88.  
  89. }
  90.  
  91. CDlgIADsOpenDSObject::~CDlgIADsOpenDSObject()
  92. {
  93.     if ( m_pOpenDS )
  94.     {
  95.         m_pOpenDS->Release();
  96.     }
  97.  
  98. }
  99.  
  100. void CDlgIADsOpenDSObject::DoDataExchange(CDataExchange* pDX)
  101. {
  102.     CDialog::DoDataExchange(pDX);
  103.     //{{AFX_DATA_MAP(CDlgIADsOpenDSObject)
  104.     DDX_Text(pDX, IDC_PASSWORD, m_sPassword);
  105.     DDX_Text(pDX, IDC_USERNAME, m_sUserName);
  106.     DDX_Check(pDX, IDC_ENCRYPT, m_bEncrypt);
  107.     DDX_Check(pDX, IDC_READONLY, m_bReadOnly);
  108.     DDX_Check(pDX, IDC_SECURED, m_bSecured);
  109.     DDX_Check(pDX, IDC_PROMPTCREDENTIAL, m_bPrompt);
  110.     DDX_Check(pDX, IDC_NOAUTHENTICATION, m_bNoAuthentication);
  111.     DDX_Text(pDX, IDC_ADSPATH, m_sADsPath);
  112.     DDX_Check(pDX, IDC_CLEARTEXT, m_bClearText);
  113.     DDX_Check(pDX, IDC_FASTBIND, m_bFastBind);
  114.     DDX_Check(pDX, IDC_SEALING, m_bSealing);
  115.     DDX_Check(pDX, IDC_SIGNING, m_bSigning);
  116.     //}}AFX_DATA_MAP
  117. }
  118.  
  119.  
  120. BEGIN_MESSAGE_MAP(CDlgIADsOpenDSObject, CDialog)
  121.     //{{AFX_MSG_MAP(CDlgIADsOpenDSObject)
  122.     ON_EN_CHANGE(IDC_USERNAME, OnChangeUsername)
  123.     ON_EN_CHANGE(IDC_ADSPATH, OnChangeADsPath)
  124.     //}}AFX_MSG_MAP
  125. END_MESSAGE_MAP()
  126.  
  127. /////////////////////////////////////////////////////////////////////////////
  128. // CDlgIADsOpenDSObject message handlers
  129.  
  130. void CDlgIADsOpenDSObject::OnOK() 
  131. {
  132.     HRESULT hr;
  133.     DWORD dwFlag;
  134.  
  135.     UpdateData(TRUE);
  136.  
  137.  
  138.     dwFlag = 0;
  139.     if ( m_bSecured )
  140.     {
  141.          dwFlag |=  ADS_SECURE_AUTHENTICATION;
  142.     }
  143.  
  144.     if ( m_bReadOnly )
  145.     {
  146.          dwFlag |= ADS_READONLY_SERVER;
  147.     }
  148.  
  149.     if ( m_bEncrypt )
  150.     {
  151.         dwFlag |=     ADS_USE_ENCRYPTION;
  152.     }
  153.  
  154.     if ( m_bPrompt )
  155.     {
  156.         dwFlag |= ADS_PROMPT_CREDENTIALS;
  157.     }
  158.  
  159.     if ( m_bNoAuthentication )
  160.     {
  161.         dwFlag = ADS_NO_AUTHENTICATION;    
  162.     }
  163.  
  164.     if ( m_bFastBind )
  165.     {
  166.         dwFlag |= ADS_FAST_BIND;
  167.     }
  168.  
  169.     if ( m_bSigning )
  170.     {
  171.         dwFlag |= ADS_USE_SIGNING;
  172.     }
  173.  
  174.     if ( m_bSealing )
  175.     {
  176.         dwFlag |= ADS_USE_SEALING;
  177.     }
  178.     
  179.     
  180.     
  181.     USES_CONVERSION;
  182.     LPWSTR pszUser=NULL;
  183.     LPWSTR pszPwd=NULL;
  184.     IUnknown *pNewUnk;
  185.  
  186.     if ( !m_sUserName.IsEmpty() )
  187.     {
  188.         pszUser = T2OLE(m_sUserName);
  189.     }
  190.  
  191.     pszPwd  = T2OLE(m_sPassword);
  192.  
  193.  
  194.  
  195.     if ( pszUser == NULL )
  196.     {
  197.         hr = ADsGetObject( T2OLE(m_sADsPath), IID_IUnknown, (void**) &pNewUnk );
  198.     }
  199.     else
  200.     {
  201.         if ( m_pOpenDS )
  202.         {
  203.     
  204.               hr = m_pOpenDS->OpenDSObject( T2OLE(m_sADsPath), pszUser, pszPwd, 
  205.                                                dwFlag, (IDispatch**) &pNewUnk );
  206.  
  207.         }
  208.         else
  209.         {
  210.             hr = ADsOpenObject( T2OLE(m_sADsPath), pszUser, pszPwd, 
  211.                                    dwFlag, IID_IUnknown, (void**) &pNewUnk );
  212.  
  213.         }
  214.     }
  215.  
  216.  
  217.  
  218.     if ( !SUCCEEDED(hr) )
  219.     {
  220.         AfxMessageBox(GetErrorMessage(hr));
  221.         return;
  222.     }
  223.     
  224.     //////////////////////////////////////////////////////////////////////
  225.     // Save it so, somebody can ask the pointer with its credentials have
  226.     // been validated
  227.     ////////////////////////////////////////////////////////////////////
  228.     
  229.     if (SUCCEEDED(hr) )
  230.     {
  231.         *m_ppUnk = pNewUnk;  // new validate iunkown;
  232.         ////////////////////////////////////////////////////////////
  233.         // IMPORTANT!!: DO NOT SAVE THE PASSWORD IN MEMORY
  234.         ///////////////////////////////////////////////////////////
  235.         if ( pszUser )
  236.         {
  237.             App->SetCredentials( OLE2T(pszUser), dwFlag ); // save it for later use
  238.         }
  239.         else
  240.         {
  241.             App->SetCredentials( _T(""), dwFlag ); // save it for later use
  242.         }
  243.         
  244.  
  245.     }
  246.  
  247.  
  248.     CDialog::OnOK();
  249. }
  250.  
  251.  
  252.  
  253. void CDlgIADsOpenDSObject::OnChangeUsername() 
  254. {
  255.     
  256.     BOOL bADsLength;
  257.     
  258.     //////////////////////////////////////////////////////////////
  259.     // Turn off/on the OK button depending if ADsPath Edit box is filled.
  260.     //////////////////////////////////////////////////////////////////////
  261.     
  262.     bADsLength  = GetDlgItem(IDC_ADSPATH)->GetWindowTextLength() > 0 ? TRUE : FALSE;
  263.  
  264.     GetDlgItem( IDOK )->EnableWindow( bADsLength );
  265. }
  266.  
  267.  
  268. void CDlgIADsOpenDSObject::OnChangeADsPath() 
  269. {
  270.    OnChangeUsername();    
  271. }
  272.  
  273.  
  274. BOOL CDlgIADsOpenDSObject::OnInitDialog() 
  275. {
  276.     CDialog::OnInitDialog();
  277.     
  278.     // Get the current DN;
  279.     OnChangeUsername();    
  280.  
  281.  
  282.     UpdateData(FALSE); // update to relect the UI
  283.     return TRUE;  // return TRUE unless you set the focus to a control
  284.                   // EXCEPTION: OCX Property Pages should return FALSE
  285. }
  286.  
  287.