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.
159 lines
4.0 KiB
159 lines
4.0 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1996
|
|
//
|
|
// Purpose: Hack app for setting/viewing password entries used by
|
|
// CI to index remote scopes. Someday, this will be
|
|
// handled by a real GUI admin tool.
|
|
//
|
|
// History: 28-Oct-96 dlee Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#include <pch.cxx>
|
|
#pragma hdrstop
|
|
|
|
extern "C"
|
|
{
|
|
#include <ntsam.h>
|
|
#include <ntlsa.h>
|
|
}
|
|
|
|
#include <cisecret.hxx>
|
|
|
|
void DumpSecrets( WCHAR const * pwcMachine )
|
|
{
|
|
// list all of the ci secret items
|
|
|
|
CCiSecretRead secret( pwcMachine );
|
|
CCiSecretItem * pItem = secret.NextItem();
|
|
|
|
while ( 0 != pItem )
|
|
{
|
|
printf( " catalog, user, password: '%ws' '%ws' '%ws'\n",
|
|
pItem->getCatalog(),
|
|
pItem->getUser(),
|
|
pItem->getPassword() );
|
|
|
|
pItem = secret.NextItem();
|
|
}
|
|
} //DumpSecrets
|
|
|
|
void AddOrReplaceSecret(
|
|
WCHAR const * pwcCat,
|
|
WCHAR const * pwcUser,
|
|
WCHAR const * pwcPW )
|
|
{
|
|
// write objects start blank -- the old entries must be copied
|
|
// into the write object, along with the new entry.
|
|
|
|
CCiSecretWrite secretWrite;
|
|
CCiSecretRead secret;
|
|
CCiSecretItem * pItem = secret.NextItem();
|
|
|
|
while ( 0 != pItem )
|
|
{
|
|
if ( ( !_wcsicmp( pwcCat, pItem->getCatalog() ) ) &&
|
|
( !_wcsicmp( pwcUser, pItem->getUser() ) ) )
|
|
{
|
|
// don't add this -- replace it below
|
|
}
|
|
else
|
|
{
|
|
// just copy the item
|
|
|
|
secretWrite.Add( pItem->getCatalog(),
|
|
pItem->getUser(),
|
|
pItem->getPassword() );
|
|
}
|
|
|
|
pItem = secret.NextItem();
|
|
}
|
|
|
|
// add the new item
|
|
|
|
secretWrite.Add( pwcCat, pwcUser, pwcPW );
|
|
|
|
// write it to the sam database
|
|
|
|
secretWrite.Flush();
|
|
} //AddOrReplaceSecret
|
|
|
|
void EmptySecrets()
|
|
{
|
|
CCiSecretWrite secretWrite;
|
|
secretWrite.Flush();
|
|
} //EmptySecrets
|
|
|
|
void Usage()
|
|
{
|
|
printf( "usage: cipwd catalogname domain\\user pwd\n"
|
|
" or: cipwd -d[ump] [machine] (dump the entry list) \n"
|
|
" or: cipwd -e[mpty] (empty the entry list)\n" );
|
|
exit( 1 );
|
|
} //Usage
|
|
|
|
int __cdecl main( int argc, char *argv[] )
|
|
{
|
|
TRANSLATE_EXCEPTIONS;
|
|
|
|
TRY
|
|
{
|
|
if ( argc < 2 || argc > 4 )
|
|
Usage();
|
|
|
|
if ( 2 == argc || 3 == argc )
|
|
{
|
|
if ( argv[1][0] == '-' && argv[1][1] == 'd' )
|
|
{
|
|
if ( 2 == argc )
|
|
DumpSecrets( 0 );
|
|
else
|
|
{
|
|
WCHAR awcMachine[ MAX_PATH ];
|
|
mbstowcs( awcMachine, argv[2], sizeof awcMachine );
|
|
|
|
DumpSecrets( awcMachine );
|
|
}
|
|
}
|
|
else if ( argv[1][0] == '-' && argv[1][1] == 'e' )
|
|
EmptySecrets();
|
|
else
|
|
Usage();
|
|
}
|
|
else
|
|
{
|
|
WCHAR awcCat[ MAX_PATH + 1 ];
|
|
size_t c = mbstowcs( awcCat, argv[1], MAX_PATH );
|
|
|
|
if ( ( c == -1 ) || ( c == MAX_PATH ) )
|
|
THROW( CException( E_INVALIDARG ) );
|
|
|
|
WCHAR awcUser[ MAX_PATH + 1 ];
|
|
c = mbstowcs( awcUser, argv[2], MAX_PATH );
|
|
|
|
if ( ( c == -1 ) || ( c == MAX_PATH ) )
|
|
THROW( CException( E_INVALIDARG ) );
|
|
|
|
WCHAR awcPwd[ MAX_PATH + 1 ];
|
|
c = mbstowcs( awcPwd, argv[3], MAX_PATH );
|
|
|
|
if ( ( c == -1 ) || ( c == MAX_PATH ) )
|
|
THROW( CException( E_INVALIDARG ) );
|
|
|
|
AddOrReplaceSecret( awcCat, awcUser, awcPwd );
|
|
}
|
|
}
|
|
CATCH ( CException, e )
|
|
{
|
|
printf( "caught exception 0x%x\n", e.GetErrorCode() );
|
|
}
|
|
END_CATCH
|
|
|
|
UNTRANSLATE_EXCEPTIONS;
|
|
|
|
return 0;
|
|
} //main
|
|
|
|
|