2008-01-14 19:35 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/common.mak
    * replaced TAB with SPACEs

  * harbour/source/rdd/dbcmd.c
    * changed hb_retnl() in LASTREC() to hb_retnint() to increase maximum
      record number to 2^32 - unsigned 32bit integer instead of signed one.

  * harbour/source/rdd/dbf1.c
    ! fixed possible memory leak/GPF when sx_DBFencrypt() is called when
      table already has password set
    * added support for password passing in sx_DBFdecrypt() - it's accepted
      only when table has no password

  * harbour/source/rdd/hbsix/sxcompat.prg
    - removed SX_SETPASS()
  * harbour/source/rdd/hbsix/sxtable.c
    + added new SX_SETPASS() implementation which supports
      some undocumented SIX3 actions
    ! fixed problem with setting password for currently open table
      with SX_SETPASS( <cPass> )
This commit is contained in:
Przemyslaw Czerpak
2008-01-14 18:35:54 +00:00
parent 74e6b4f63f
commit 18f80120f6
6 changed files with 117 additions and 13 deletions

View File

@@ -8,6 +8,28 @@
2002-12-01 13:30 UTC+0100 Foo Bar <foo.bar@foobar.org>
*/
2008-01-14 19:35 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/common.mak
* replaced TAB with SPACEs
* harbour/source/rdd/dbcmd.c
* changed hb_retnl() in LASTREC() to hb_retnint() to increase maximum
record number to 2^32 - unsigned 32bit integer instead of signed one.
* harbour/source/rdd/dbf1.c
! fixed possible memory leak/GPF when sx_DBFencrypt() is called when
table already has password set
* added support for password passing in sx_DBFdecrypt() - it's accepted
only when table has no password
* harbour/source/rdd/hbsix/sxcompat.prg
- removed SX_SETPASS()
* harbour/source/rdd/hbsix/sxtable.c
+ added new SX_SETPASS() implementation which supports
some undocumented SIX3 actions
! fixed problem with setting password for currently open table
with SX_SETPASS( <cPass> )
2008-01-12 13:19 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/ChangeLog
* harbour/include/hbapiitm.h

View File

@@ -1065,7 +1065,7 @@ HBDOC_EXE_OBJS = \
# PDF support for HBDOC
HBDOC_EXE_OBJS = \
$(HBDOC_EXE_OBJS) \
$(HBDOC_EXE_OBJS) \
$(OBJ_DIR)\pdfhbdoc$(OBJEXT) \
$(OBJ_DIR)\genpdf1$(OBJEXT) \

View File

@@ -1018,7 +1018,7 @@ HB_FUNC( LASTREC )
if( pArea )
SELF_RECCOUNT( pArea, &ulRecCount );
hb_retnl( ulRecCount );
hb_retnint( ulRecCount );
}
HB_FUNC( LOCK )

View File

@@ -647,8 +647,17 @@ static void hb_dbfTableCrypt( DBFAREAP pArea, PHB_ITEM pPasswd, BOOL fEncrypt )
BYTE * pOldCryptKey, * pNewCryptKey;
pOldCryptKey = pArea->pCryptKey;
pArea->pCryptKey = NULL;
hb_dbfPasswordSet( pArea, pPasswd, FALSE );
pNewCryptKey = pArea->pCryptKey;
if( !fEncrypt && pNewCryptKey )
{
if( pOldCryptKey )
hb_xfree( pNewCryptKey );
else
pOldCryptKey = pNewCryptKey;
pNewCryptKey = NULL;
}
for( ulRecNo = 1; ulRecNo <= ulRecords; ++ulRecNo )
{
pArea->pCryptKey = pOldCryptKey;

View File

@@ -35,7 +35,6 @@
* Sx_LockRetry()
* Sx_IsLocked()
* Sx_SetTrigger()
* Sx_SetPass()
* Sx_VFGet()
*
* Copyright 2007 Przemyslaw Czerpak <druzus / at / priv.onet.pl>
@@ -555,13 +554,3 @@ function Sx_SetTrigger( nAction, cTriggerName, cRDD /* Harbour extensions */ )
endif
return cPrevTrigger
function Sx_SetPass( cPass, nMode, cRdd /* Harbour extensions */ )
HB_SYMBOL_UNUSED( nMode )
if valtype( cPass ) == "C"
rddInfo( RDDI_PENDINGPASSWORD, cPass, cRdd )
endif
return nil

View File

@@ -15,6 +15,7 @@
* Sx_Rollback()
* Sx_RLock()
* Sx_UnLock()
* Sx_SetPass()
* Sx_DBFencrypt()
* Sx_DBFdecrypt()
* Sx_MemoPack()
@@ -280,6 +281,84 @@ HB_FUNC( SX_UNLOCK )
}
}
HB_FUNC( SX_SETPASS )
{
int iPCount = hb_pcount();
BOOL fResult = FALSE;
PHB_ITEM pItem;
if( iPCount >=1 )
{
if( ISCHAR( 1 ) )
{
AREAP pArea = ( AREAP ) hb_rddGetCurrentWorkAreaPointer();
if( pArea )
{
pItem = hb_itemParam( 1 );
if( SELF_INFO( pArea, DBI_PASSWORD, pItem ) == SUCCESS )
fResult = TRUE;
hb_itemRelease( pItem );
}
}
}
else if( iPCount >= 2 || iPCount <= 4 )
{
if( ISCHAR( 1 ) && ISNUM( 2 ) && ( iPCount < 3 || ISCHAR( 3 ) ) &&
( iPCount < 4 || ISNUM( 4 ) ) )
{
/* Set pending password for table which will be open
* 3-rd and 4-th parameters are optional Harbour extensions
* with RDD name and connection number.
*/
LPRDDNODE pRDDNode;
USHORT uiRddID;
const char * szDriver;
if( iPCount == 2 ) /* no RDD parameter, use default */
szDriver = hb_rddDefaultDrv( NULL );
else
szDriver = hb_parc( 3 );
pRDDNode = hb_rddFindNode( szDriver, &uiRddID ); /* find the RDDNODE */
if( pRDDNode )
{
pItem = hb_itemParam( 1 );
if( SELF_RDDINFO( pRDDNode, RDDI_PENDINGPASSWORD, hb_parnl( 4 ), pItem ) == SUCCESS )
fResult = TRUE;
hb_itemRelease( pItem );
}
}
else if( iPCount == 2 && ISNUM( 1 ) && ISCHAR( 2 ) )
{
AREAP pArea = ( AREAP ) hb_rddGetCurrentWorkAreaPointer();
if( pArea )
{
/* Undocumented SIX3 extension */
switch( hb_parni( 1 ) )
{
case 1: /* return current password key in raw form */
pItem = hb_itemNew( NULL );
if( SELF_INFO( pArea, DBI_PASSWORD, pItem ) == SUCCESS )
hb_itemReturn( pItem );
hb_itemRelease( pItem );
break;
case 2: /* set raw password key */
/* not implemented */
break;
case 3: /* mark table as encrypted */
/* intentionally not implemented */
break;
case 4: /* mark table as decrypted */
/* intentionally not implemented */
break;
}
return;
}
}
}
hb_retl( fResult );
}
HB_FUNC( SX_DBFENCRYPT )
{
AREAP pArea = ( AREAP ) hb_rddGetCurrentWorkAreaPointer();
@@ -287,7 +366,12 @@ HB_FUNC( SX_DBFENCRYPT )
if( pArea )
{
/* Optional parameter with password is Harbour extension */
#ifdef HB_SIX3_STRICT
PHB_ITEM pItem = hb_itemNew( NULL );
#else
PHB_ITEM pItem = hb_itemParam( 1 );
#endif
if( SELF_INFO( pArea, DBI_ENCRYPT, pItem ) == SUCCESS )
fResult = hb_itemGetL( pItem );
hb_itemRelease( pItem );