windows-nt/Source/XPSP1/NT/ds/nw/ndsutils/ditdump.c

642 lines
21 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/***
Copyright (c) 1995 Microsoft Corporation
Module Name:
Schema.c
Abstract:
Command line test tool for dumping the NDS schema attribute and class
names and/or definitions.
Author:
Glenn Curtis [glennc] 22-Apr-96
***/
#include <utils.c>
int
_cdecl main( int argc, char **argv )
{
DWORD status = NO_ERROR;
HANDLE hTree = NULL;
HANDLE hOperationData = NULL;
OEM_STRING OemArg;
UNICODE_STRING TreeName;
WCHAR szTreeName[256];
WCHAR szTempAttrName[256];
WCHAR szTempClassName[256];
ASN1_ID asn1Id;
DWORD dwNumberOfEntries;
DWORD dwInfoType;
DWORD dwSyntaxID;
DWORD iter;
TreeName.Length = 0;
TreeName.MaximumLength = sizeof( szTreeName );
TreeName.Buffer = szTreeName;
//
// Check the arguments.
//
if ( argc < 3 )
{
Usage:
printf( "\nUsage: ditdump <tree name> -n|d|x C|A [P] [C]\n" );
printf( "\n where: n = Names only\n" );
printf( " where: d = Names & definitions\n" );
printf( " where: x = Extended names & definitions (Includes inherited properties)\n" );
printf( " where: C = Classes\n" );
printf( " where: A = Attributes\n" );
printf( "\n where: P = Prompts user for list of specific\n" );
printf( " classes, attributes, or syntaxes to read.\n" );
printf( "\n where: C = Prompts user for a specific set of credentials.\n" );
return -1;
}
OemArg.Length = strlen( argv[1] );
OemArg.MaximumLength = OemArg.Length;
OemArg.Buffer = argv[1];
RtlOemStringToUnicodeString( &TreeName, &OemArg, FALSE );
if ( ( argc > 4 && argv[4][0] == 'C' ) ||
( argc > 5 && argv[5][0] == 'C' ) )
{
WCHAR UserName[256];
WCHAR Password[256];
printf( "\nEnter a user name : " );
GetStringOrDefault( UserName, L"" );
printf( "\nEnter a password : " );
GetStringOrDefault( Password, L"" );
status = NwNdsOpenObject( TreeName.Buffer,
UserName,
Password,
&hTree,
NULL,
NULL,
NULL,
NULL,
NULL );
}
else
{
status = NwNdsOpenObject( TreeName.Buffer,
NULL,
NULL,
&hTree,
NULL,
NULL,
NULL,
NULL,
NULL );
}
if ( status )
{
printf( "\nError: NwNdsOpenObject returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
if ( argv[2][1] == 'n' && argv[3][0] == 'A' )
{
LPNDS_NAME_ONLY lpAttrNames = NULL;
if ( argc > 4 && argv[4][0] == 'P' )
{
status = NwNdsCreateBuffer( NDS_SCHEMA_READ_ATTR_DEF,
&hOperationData );
if ( status )
{
printf( "\nError: NwNdsCreateBuffer returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
do
{
printf( "\nEnter attribute name or <Enter> to end : " );
GetStringOrDefault( szTempAttrName, L"" );
if ( wcslen(szTempAttrName) > 0 )
{
status = NwNdsPutInBuffer( szTempAttrName,
0,
NULL,
0,
0,
hOperationData );
if ( status )
{
printf( "\nError: NwNdsPutInBuffer returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
}
} while ( wcslen(szTempAttrName) > 0 );
}
printf( "\nGoing to dump the schema attribute names.\n" );
status = NwNdsReadAttrDef( hTree,
NDS_INFO_NAMES,
&hOperationData );
if ( status )
{
printf( "\nError: NwNdsReadAttrDef returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
status = NwNdsGetAttrDefListFromBuffer( hOperationData,
&dwNumberOfEntries,
&dwInfoType,
(LPVOID *) &lpAttrNames );
if ( status )
{
printf( "\nError: NwNdsGetAttrDefListFromBuffer returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
printf( "\nThe list of attribute definitions in the schema for\n" );
printf( "NDS tree %S is :\n\n", TreeName.Buffer );
for ( iter = 0; iter < dwNumberOfEntries; iter++ )
{
(void) NwNdsGetSyntaxID( hTree,
lpAttrNames[iter].szName,
&dwSyntaxID );
printf( " %S (Syntax ID: %ld)\n",
lpAttrNames[iter].szName,
dwSyntaxID );
}
(void) NwNdsFreeBuffer( hOperationData );
(void) NwNdsCloseObject( hTree );
return 0;
}
if ( argv[2][1] == 'd' && argv[3][0] == 'A' )
{
LPNDS_ATTR_DEF lpAttrDefs = NULL;
if ( argc > 4 && argv[4][0] == 'P' )
{
status = NwNdsCreateBuffer( NDS_SCHEMA_READ_ATTR_DEF,
&hOperationData );
if ( status )
{
printf( "\nError: NwNdsCreateBuffer returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
do
{
printf( "\nEnter attribute name or <Enter> to end : " );
GetStringOrDefault( szTempAttrName, L"" );
if ( wcslen(szTempAttrName) > 0 )
{
status = NwNdsPutInBuffer( szTempAttrName,
0,
NULL,
0,
0,
hOperationData );
if ( status )
{
printf( "\nError: NwNdsPutInBuffer returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
}
} while ( wcslen(szTempAttrName) > 0 );
}
printf( "\nGoing to dump the schema attribute names and definitions.\n" );
status = NwNdsReadAttrDef( hTree,
NDS_INFO_NAMES_DEFS,
&hOperationData );
if ( status )
{
printf( "\nError: NwNdsReadAttrDef returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
status = NwNdsGetAttrDefListFromBuffer( hOperationData,
&dwNumberOfEntries,
&dwInfoType,
(LPVOID *) &lpAttrDefs );
if ( status )
{
printf( "\nError: NwNdsGetAttrDefListFromBuffer returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
printf( "\nThe list of attribute definitions in the schema for\n" );
printf( "NDS tree %S is :\n\n", TreeName.Buffer );
for ( iter = 0; iter < dwNumberOfEntries; iter++ )
{
printf( " %S\n", lpAttrDefs[iter].szAttributeName );
printf( " _____________________________________________\n" );
printf( " Flags : 0x%.8X\n",
lpAttrDefs[iter].dwFlags );
printf( " Syntax ID : %ld\n",
lpAttrDefs[iter].dwSyntaxID );
printf( " Lower Limit : 0x%.8X\n",
lpAttrDefs[iter].dwLowerLimit );
printf( " Upper Limit : 0x%.8X\n",
lpAttrDefs[iter].dwUpperLimit );
printf( " ASN.1 ID length : %ld\n",
lpAttrDefs[iter].asn1ID.length );
printf( " ASN.1 ID Data : %s\n\n",
lpAttrDefs[iter].asn1ID.data );
}
(void) NwNdsFreeBuffer( hOperationData );
(void) NwNdsCloseObject( hTree );
return 0;
}
if ( argv[2][1] == 'n' && argv[3][0] == 'C' )
{
LPNDS_NAME_ONLY lpClassNames = NULL;
if ( argc > 4 && argv[4][0] == 'P' )
{
status = NwNdsCreateBuffer( NDS_SCHEMA_READ_CLASS_DEF,
&hOperationData );
if ( status )
{
printf( "\nError: NwNdsCreateBuffer returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
do
{
printf( "\nEnter class name or <Enter> to end : " );
GetStringOrDefault( szTempClassName, L"" );
if ( wcslen(szTempClassName) > 0 )
{
status = NwNdsPutInBuffer( szTempClassName,
0,
NULL,
0,
0,
hOperationData );
if ( status )
{
printf( "\nError: NwNdsPutInBuffer returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
}
} while ( wcslen(szTempClassName) > 0 );
}
printf( "\nGoing to dump the schema class names.\n" );
status = NwNdsReadClassDef( hTree,
NDS_INFO_NAMES,
&hOperationData );
if ( status )
{
printf( "\nError: NwNdsReadClassDef returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
status = NwNdsGetClassDefListFromBuffer( hOperationData,
&dwNumberOfEntries,
&dwInfoType,
(LPVOID *) &lpClassNames );
if ( status )
{
printf( "\nError: NwNdsGetClassDefListFromBuffer returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
printf( "\nThe list of class definitions in the schema for\n" );
printf( "NDS tree %S is :\n\n", TreeName.Buffer );
for ( iter = 0; iter < dwNumberOfEntries; iter++ )
{
printf( " %S\n", lpClassNames[iter].szName );
}
(void) NwNdsFreeBuffer( hOperationData );
(void) NwNdsCloseObject( hTree );
return 0;
}
if ( argv[2][1] == 'd' && argv[3][0] == 'C' )
{
LPNDS_CLASS_DEF lpClassDefs = NULL;
if ( argc > 4 && argv[4][0] == 'P' )
{
status = NwNdsCreateBuffer( NDS_SCHEMA_READ_CLASS_DEF,
&hOperationData );
if ( status )
{
printf( "\nError: NwNdsCreateBuffer returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
do
{
printf( "\nEnter class name or <Enter> to end : " );
GetStringOrDefault( szTempClassName, L"" );
if ( wcslen(szTempClassName) > 0 )
{
status = NwNdsPutInBuffer( szTempClassName,
0,
NULL,
0,
0,
hOperationData );
if ( status )
{
printf( "\nError: NwNdsPutInBuffer returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
}
} while ( wcslen(szTempClassName) > 0 );
}
printf( "\nGoing to dump the schema class names and definitions.\n" );
status = NwNdsReadClassDef( hTree,
NDS_INFO_NAMES_DEFS,
&hOperationData );
if ( status )
{
printf( "\nError: NwNdsReadClassDef returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
status = NwNdsGetClassDefListFromBuffer( hOperationData,
&dwNumberOfEntries,
&dwInfoType,
(LPVOID *) &lpClassDefs );
if ( status )
{
printf( "\nError: NwNdsGetClassDefListFromBuffer returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
printf( "\nThe list of class definitions in the schema for\n" );
printf( "NDS tree %S is :\n\n", TreeName.Buffer );
for ( iter = 0; iter < dwNumberOfEntries; iter++ )
{
printf( " %S\n", lpClassDefs[iter].szClassName );
printf( " _____________________________________________\n" );
printf( " Flags : 0x%.8X\n",
lpClassDefs[iter].dwFlags );
printf( " ASN.1 ID length : %ld\n",
lpClassDefs[iter].asn1ID.length );
printf( " ASN.1 ID Data : %s\n\n",
lpClassDefs[iter].asn1ID.data );
printf( " Super Classes (%ld) : \n",
lpClassDefs[iter].dwNumberOfSuperClasses );
DumpListOfStrings( lpClassDefs[iter].lpSuperClasses );
printf( " Containment Classes (%ld) : \n",
lpClassDefs[iter].dwNumberOfContainmentClasses );
DumpListOfStrings( lpClassDefs[iter].lpContainmentClasses );
printf( " Naming Attributes (%ld) : \n",
lpClassDefs[iter].dwNumberOfNamingAttributes );
DumpListOfStrings( lpClassDefs[iter].lpNamingAttributes );
printf( " Mandatory Attributes (%ld) : \n",
lpClassDefs[iter].dwNumberOfMandatoryAttributes );
DumpListOfStrings( lpClassDefs[iter].lpMandatoryAttributes );
printf( " Optional Attributes (%ld) : \n",
lpClassDefs[iter].dwNumberOfOptionalAttributes );
DumpListOfStrings( lpClassDefs[iter].lpOptionalAttributes );
printf( "\n" );
}
(void) NwNdsFreeBuffer( hOperationData );
(void) NwNdsCloseObject( hTree );
return 0;
}
if ( argv[2][1] == 'x' && argv[3][0] == 'C' )
{
LPNDS_CLASS_DEF lpClassDefs = NULL;
if ( argc > 4 && argv[4][0] == 'P' )
{
status = NwNdsCreateBuffer( NDS_SCHEMA_READ_CLASS_DEF,
&hOperationData );
if ( status )
{
printf( "\nError: NwNdsCreateBuffer returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
do
{
printf( "\nEnter class name or <Enter> to end : " );
GetStringOrDefault( szTempClassName, L"" );
if ( wcslen(szTempClassName) > 0 )
{
status = NwNdsPutInBuffer( szTempClassName,
0,
NULL,
0,
0,
hOperationData );
if ( status )
{
printf( "\nError: NwNdsPutInBuffer returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
}
} while ( wcslen(szTempClassName) > 0 );
}
printf( "\nGoing to dump the extended schema class names and definitions.\n" );
status = NwNdsReadClassDef( hTree,
NDS_CLASS_INFO_EXPANDED_DEFS,
&hOperationData );
if ( status )
{
printf( "\nError: NwNdsReadClassDef returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
status = NwNdsGetClassDefListFromBuffer( hOperationData,
&dwNumberOfEntries,
&dwInfoType,
(LPVOID *) &lpClassDefs );
if ( status )
{
printf( "\nError: NwNdsGetClassDefListFromBuffer returned status 0x%.8X\n", status );
printf( "Error: GetLastError returned: 0x%.8X\n\n",
GetLastError() );
return -1;
}
printf( "\nThe list of class definitions in the schema for\n" );
printf( "NDS tree %S is :\n\n", TreeName.Buffer );
for ( iter = 0; iter < dwNumberOfEntries; iter++ )
{
printf( " %S\n", lpClassDefs[iter].szClassName );
printf( " _____________________________________________\n" );
printf( " Flags : 0x%.8X\n",
lpClassDefs[iter].dwFlags );
printf( " ASN.1 ID length : %ld\n",
lpClassDefs[iter].asn1ID.length );
printf( " ASN.1 ID Data : %s\n\n",
lpClassDefs[iter].asn1ID.data );
printf( " Super Classes (%ld) : \n",
lpClassDefs[iter].dwNumberOfSuperClasses );
DumpListOfStrings( lpClassDefs[iter].lpSuperClasses );
printf( " Containment Classes (%ld) : \n",
lpClassDefs[iter].dwNumberOfContainmentClasses );
DumpListOfStrings( lpClassDefs[iter].lpContainmentClasses );
printf( " Naming Attributes (%ld) : \n",
lpClassDefs[iter].dwNumberOfNamingAttributes );
DumpListOfStrings( lpClassDefs[iter].lpNamingAttributes );
printf( " Mandatory Attributes (%ld) : \n",
lpClassDefs[iter].dwNumberOfMandatoryAttributes );
DumpListOfStrings( lpClassDefs[iter].lpMandatoryAttributes );
printf( " Optional Attributes (%ld) : \n",
lpClassDefs[iter].dwNumberOfOptionalAttributes );
DumpListOfStrings( lpClassDefs[iter].lpOptionalAttributes );
printf( "\n" );
}
(void) NwNdsFreeBuffer( hOperationData );
(void) NwNdsCloseObject( hTree );
return 0;
}
goto Usage;
}