Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

298 lines
6.4 KiB

//----------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1993.
//
// File: drt.cxx
//
// Contents: Main for OleDs DRT
//
//
// History: 28-Oct-94 KrishnaG, created OleDs DRT
// 28-Oct-94 ChuckC, rewritten.
//
//----------------------------------------------------------------------------
//
// System Includes
//
#define INC_OLE2
#include <windows.h>
//
// CRunTime Includes
//
#include <stdlib.h>
#include <limits.h>
#include <io.h>
#include <stdio.h>
//
// Public OleDs includes
//
//
// Private defines
//
#define BAIL_ON_NULL(p) \
if (!(p)) { \
goto error; \
}
#define BAIL_ON_FAILURE(hr) \
if (FAILED(hr)) { \
goto error; \
}
#include "activeds.h"
#include "main.hxx"
//
// Globals representing the parameters
//
LPWSTR pszTreeName, pszAttrList, pszAttrNames[10];
DWORD dwNumberAttributes = -1;
LPWSTR pszUserName=NULL, pszPassword=NULL;
DWORD dwAuthFlags=0;
//+---------------------------------------------------------------------------
//
// Function: main
//
// Synopsis:
//
//----------------------------------------------------------------------------
INT _CRTAPI1
main(int argc, char * argv[])
{
HRESULT hr=S_OK;
IDirectorySchemaMgmt *pDSSchemaMgmt=NULL;
DWORD dwAttributesReturned;
PADS_ATTR_DEF pAttrDefinition;
//
// Sets the global variables with the parameters
//
hr = ProcessArgs(argc, argv);
BAIL_ON_FAILURE(hr);
hr = CoInitialize(NULL);
if (FAILED(hr)) {
printf("CoInitialize failed\n") ;
return(1) ;
}
hr = ADsOpenObject(
pszTreeName,
pszUserName,
pszPassword,
dwAuthFlags,
IID_IDirectorySchemaMgmt,
(void **)&pDSSchemaMgmt
);
BAIL_ON_FAILURE(hr);
pDSSchemaMgmt->EnumAttributes(
pszAttrNames,
dwNumberAttributes,
&pAttrDefinition,
&dwAttributesReturned
);
BAIL_ON_FAILURE(hr);
PrintAttrDefinition(
pAttrDefinition,
dwAttributesReturned
);
if (pAttrDefinition)
FreeADsMem(pAttrDefinition);
FREE_INTERFACE(pDSSchemaMgmt);
FREE_UNICODE_STRING(pszAttrList) ;
CoUninitialize();
return(0) ;
error:
FREE_INTERFACE(pDSSchemaMgmt);
FREE_UNICODE_STRING(pszAttrList) ;
FREE_UNICODE_STRING(pszUserName) ;
FREE_UNICODE_STRING(pszPassword) ;
wprintf (L"Error! hr = 0x%x\n", hr);
return(1) ;
}
//+---------------------------------------------------------------------------
//
// Function: ProcessArgs
//
// Synopsis:
//
//----------------------------------------------------------------------------
HRESULT
ProcessArgs(
int argc,
char * argv[]
)
{
argc--;
int currArg = 1;
LPWSTR pTemp;
char *pszCurrPref, *pszCurrPrefValue;
while (argc) {
if (argv[currArg][0] != '/' && argv[currArg][0] != '-')
BAIL_ON_FAILURE (E_FAIL);
switch (argv[currArg][1]) {
case 'b':
argc--;
currArg++;
if (argc <= 0)
BAIL_ON_FAILURE (E_FAIL);
pszTreeName = AllocateUnicodeString(argv[currArg]);
BAIL_ON_NULL(pszTreeName);
break;
case 'a':
argc--;
currArg++;
if (argc <= 0)
BAIL_ON_FAILURE(E_FAIL);
pszAttrList = AllocateUnicodeString(argv[currArg]);
BAIL_ON_NULL(pszAttrList);
if (wcslen(pszAttrList) == 0)
break;
dwNumberAttributes = 0;
pTemp = wcstok(pszAttrList, L",");
pszAttrNames[dwNumberAttributes] = RemoveWhiteSpaces(pTemp);
dwNumberAttributes++;
while (pTemp) {
pTemp = wcstok(NULL, L",");
pszAttrNames[dwNumberAttributes] = RemoveWhiteSpaces(pTemp);
dwNumberAttributes++;
}
dwNumberAttributes--;
break;
case 'u':
argc--;
currArg++;
if (argc <= 0)
BAIL_ON_FAILURE (E_FAIL);
pszUserName = AllocateUnicodeString(argv[currArg]);
BAIL_ON_NULL(pszUserName);
argc--;
currArg++;
if (argc <= 0)
BAIL_ON_FAILURE (E_FAIL);
pszPassword = AllocateUnicodeString(argv[currArg]);
BAIL_ON_NULL(pszPassword);
break;
case 't':
argc--;
currArg++;
if (argc <= 0)
BAIL_ON_FAILURE (E_FAIL);
pszCurrPref = strtok(argv[currArg], "=");
pszCurrPrefValue = strtok(NULL, "=");
if (!pszCurrPref || !pszCurrPrefValue)
BAIL_ON_FAILURE(E_FAIL);
if (!_stricmp(pszCurrPref, "SecureAuth")) {
if (!_stricmp(pszCurrPrefValue, "yes" ))
dwAuthFlags |= ADS_SECURE_AUTHENTICATION;
else if (!_stricmp(pszCurrPrefValue, "no" ))
dwAuthFlags &= ~ADS_SECURE_AUTHENTICATION;
else
BAIL_ON_FAILURE(E_FAIL);
}
else if (!_stricmp(pszCurrPref, "UseEncrypt")) {
if (!_stricmp(pszCurrPrefValue, "yes" ))
dwAuthFlags |= ADS_USE_ENCRYPTION;
else if (!_stricmp(pszCurrPrefValue, "no" ))
dwAuthFlags &= ~ADS_USE_ENCRYPTION;
else
BAIL_ON_FAILURE(E_FAIL);
}
else
BAIL_ON_FAILURE(E_FAIL);
break;
default:
BAIL_ON_FAILURE(E_FAIL);
}
argc--;
currArg++;
}
if (!pszTreeName) {
BAIL_ON_FAILURE(E_FAIL);
}
if (dwNumberAttributes == 0) {
//
// Get all the attributes
//
dwNumberAttributes = -1;
}
return (S_OK);
error:
PrintUsage();
return E_FAIL;
}
LPWSTR
RemoveWhiteSpaces(
LPWSTR pszText)
{
LPWSTR pChar;
if(!pszText)
return (pszText);
while(*pszText && iswspace(*pszText))
pszText++;
for(pChar = pszText + wcslen(pszText) - 1; pChar >= pszText; pChar--) {
if(!iswspace(*pChar))
break;
else
*pChar = L'\0';
}
return pszText;
}