mirror of https://github.com/tongzx/nt5src
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.
198 lines
4.5 KiB
198 lines
4.5 KiB
/***
|
|
|
|
Copyright (c) 1995 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
AddObj.c
|
|
|
|
Abstract:
|
|
|
|
Command line test tool for adding an object to a NDS tree.
|
|
|
|
Author:
|
|
|
|
Glenn Curtis [glennc] 05-Jan-96
|
|
|
|
***/
|
|
|
|
#include <utils.c>
|
|
#include <string.h>
|
|
|
|
|
|
int
|
|
_cdecl main( int argc, char **argv )
|
|
{
|
|
DWORD status = NO_ERROR;
|
|
LPBYTE lpTemp = NULL, lpValue = NULL;
|
|
DWORD dwValue;
|
|
|
|
HANDLE hParentObject = NULL;
|
|
HANDLE hOperationData = NULL;
|
|
|
|
OEM_STRING OemArg;
|
|
|
|
UNICODE_STRING ParentObjectName;
|
|
WCHAR lpParentObjectName[256];
|
|
|
|
UNICODE_STRING ObjectName;
|
|
WCHAR lpObjectName[256];
|
|
|
|
UNICODE_STRING ClassName;
|
|
WCHAR lpClassName[256];
|
|
|
|
ASN1_TYPE_3 asn1Type3;
|
|
|
|
ParentObjectName.Length = 0;
|
|
ParentObjectName.MaximumLength = sizeof( lpParentObjectName );
|
|
ParentObjectName.Buffer = lpParentObjectName;
|
|
|
|
//
|
|
// Check the arguments.
|
|
//
|
|
|
|
if ( argc != 4 )
|
|
{
|
|
printf( "\nUsage: addobj <parent object DN> <object name> <object class>\n" );
|
|
printf( "\n where:\n" );
|
|
printf( " parent object DN = \\\\tree\\xxx.yyy.zzz\n" );
|
|
printf( " object name = Fred\n" );
|
|
printf( " object class = User\n" );
|
|
printf( "\nFor Example:\n" );
|
|
printf( " addobj \\\\MARSDEV\\OU=DEV.O=MARS Fred User\n\n" );
|
|
|
|
return -1;
|
|
}
|
|
|
|
OemArg.Length = strlen( argv[1] );
|
|
OemArg.MaximumLength = OemArg.Length;
|
|
OemArg.Buffer = argv[1];
|
|
|
|
RtlOemStringToUnicodeString( &ParentObjectName, &OemArg, FALSE );
|
|
|
|
status = NwNdsOpenObject( ParentObjectName.Buffer,
|
|
NULL,
|
|
NULL,
|
|
&hParentObject,
|
|
NULL,
|
|
NULL,
|
|
NULL,
|
|
NULL,
|
|
NULL );
|
|
|
|
if ( status )
|
|
{
|
|
printf( "\nError: NwNdsOpenObject returned status 0x%.8X\n\n", status );
|
|
|
|
return -1;
|
|
}
|
|
|
|
//
|
|
// Give the new object some initial attributes
|
|
//
|
|
status = NwNdsCreateBuffer( NDS_OBJECT_ADD, &hOperationData );
|
|
|
|
if ( status )
|
|
{
|
|
printf( "\nError: NwNdsCreateBuffer returned status 0x%.8X\n\n",
|
|
status );
|
|
|
|
return -1;
|
|
}
|
|
|
|
//
|
|
// Get the new object's name
|
|
//
|
|
OemArg.Length = strlen( argv[2] );
|
|
OemArg.MaximumLength = OemArg.Length;
|
|
OemArg.Buffer = argv[2];
|
|
|
|
ObjectName.Length = 0;
|
|
ObjectName.MaximumLength = sizeof( lpObjectName );
|
|
ObjectName.Buffer = lpObjectName;
|
|
|
|
RtlOemStringToUnicodeString( &ObjectName, &OemArg, FALSE );
|
|
|
|
asn1Type3.CaseIgnoreString = ObjectName.Buffer;
|
|
|
|
OemArg.Length = strlen( argv[3] );
|
|
OemArg.MaximumLength = OemArg.Length;
|
|
OemArg.Buffer = argv[3];
|
|
|
|
ClassName.Length = 0;
|
|
ClassName.MaximumLength = sizeof( lpClassName );
|
|
ClassName.Buffer = lpClassName;
|
|
|
|
RtlOemStringToUnicodeString( &ClassName, &OemArg, FALSE );
|
|
|
|
if ( !_wcsicmp( ClassName.Buffer, L"User" ) )
|
|
{
|
|
status = NwNdsPutInBuffer( NDS_SURNAME,
|
|
&asn1Type3,
|
|
1,
|
|
0,
|
|
hOperationData );
|
|
|
|
if ( status )
|
|
{
|
|
printf( "\nError: NwNdsPutInBuffer returned status 0x%.8X\n\n", status );
|
|
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
asn1Type3.CaseIgnoreString = ClassName.Buffer;
|
|
|
|
status = NwNdsPutInBuffer( NDS_OBJECT_CLASS,
|
|
&asn1Type3,
|
|
1,
|
|
0,
|
|
hOperationData );
|
|
|
|
if ( status )
|
|
{
|
|
printf( "\nError: NwNdsPutInBuffer returned status 0x%.8X\n\n",
|
|
status );
|
|
|
|
return -1;
|
|
}
|
|
|
|
printf( "Adding the new object to tree\n" );
|
|
|
|
status = NwNdsAddObject( hParentObject,
|
|
ObjectName.Buffer,
|
|
hOperationData );
|
|
|
|
if ( status )
|
|
{
|
|
printf( "\nError: NwNdsAddObject returned status 0x%.8X\n\n", status );
|
|
|
|
return -1;
|
|
}
|
|
|
|
status = NwNdsCloseObject( hParentObject );
|
|
|
|
if ( status )
|
|
{
|
|
printf( "\nError: NwNdsCloseObject returned status 0x%.8X\n\n", status );
|
|
|
|
return -1;
|
|
}
|
|
|
|
(void) LocalFree( lpValue );
|
|
|
|
status = NwNdsFreeBuffer( hOperationData );
|
|
|
|
if ( status )
|
|
{
|
|
printf( "\nError: NwNdsFreeBuffer returned status 0x%.8X\n\n", status );
|
|
|
|
return -1;
|
|
}
|
|
|
|
printf( "\nSuccess!\n\n" );
|
|
|
|
return status;
|
|
}
|
|
|
|
|