mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-02-03 20:40:05 -05:00
Add checksum keyword to enable DB checksum validation
This commit is contained in:
parent
5da0f14530
commit
3be39979ea
4 changed files with 49 additions and 1 deletions
|
|
@ -233,6 +233,7 @@ struct bdb_info {
|
|||
#define BDB_UPD_CONFIG 0x04
|
||||
#define BDB_DEL_INDEX 0x08
|
||||
#define BDB_RE_OPEN 0x10
|
||||
#define BDB_CHKSUM 0x20
|
||||
#ifdef BDB_HIER
|
||||
int bi_modrdns; /* number of modrdns completed */
|
||||
ldap_pvt_thread_mutex_t bi_modrdns_mutex;
|
||||
|
|
|
|||
|
|
@ -51,7 +51,8 @@ enum {
|
|||
BDB_LOCKD,
|
||||
BDB_SSTACK,
|
||||
BDB_MODE,
|
||||
BDB_PGSIZE
|
||||
BDB_PGSIZE,
|
||||
BDB_CHECKSUM
|
||||
};
|
||||
|
||||
static ConfigTable bdbcfg[] = {
|
||||
|
|
@ -74,6 +75,10 @@ static ConfigTable bdbcfg[] = {
|
|||
bdb_cf_gen, "( OLcfgDbAt:1.2 NAME 'olcDbCheckpoint' "
|
||||
"DESC 'Database checkpoint interval in kbytes and minutes' "
|
||||
"SYNTAX OMsDirectoryString SINGLE-VALUE )",NULL, NULL },
|
||||
{ "checksum", NULL, 1, 2, 0, ARG_ON_OFF|ARG_MAGIC|BDB_CHECKSUM,
|
||||
bdb_cf_gen, "( OLcfgDbAt:1.16 NAME 'olcDbChecksum' "
|
||||
"DESC 'Enable database checksum validation' "
|
||||
"SYNTAX OMsBoolean SINGLE-VALUE )", NULL, NULL },
|
||||
{ "cryptfile", "file", 2, 2, 0, ARG_STRING|ARG_MAGIC|BDB_CRYPTFILE,
|
||||
bdb_cf_gen, "( OLcfgDbAt:1.13 NAME 'olcDbCryptFile' "
|
||||
"DESC 'Pathname of file containing the DB encryption key' "
|
||||
|
|
@ -467,6 +472,11 @@ bdb_cf_gen( ConfigArgs *c )
|
|||
c->value_int = 1;
|
||||
break;
|
||||
|
||||
case BDB_CHECKSUM:
|
||||
if ( bdb->bi_flags & BDB_CHKSUM )
|
||||
c->value_int = 1;
|
||||
break;
|
||||
|
||||
case BDB_INDEX:
|
||||
bdb_attr_index_unparse( bdb, &c->rvalue_vals );
|
||||
if ( !c->rvalue_vals ) rc = 1;
|
||||
|
|
@ -577,6 +587,9 @@ bdb_cf_gen( ConfigArgs *c )
|
|||
case BDB_NOSYNC:
|
||||
bdb->bi_dbenv->set_flags( bdb->bi_dbenv, DB_TXN_NOSYNC, 0 );
|
||||
break;
|
||||
case BDB_CHECKSUM:
|
||||
bdb->bi_flags &= ~BDB_CHKSUM;
|
||||
break;
|
||||
case BDB_INDEX:
|
||||
if ( c->valx == -1 ) {
|
||||
int i;
|
||||
|
|
@ -839,6 +852,13 @@ bdb_cf_gen( ConfigArgs *c )
|
|||
}
|
||||
break;
|
||||
|
||||
case BDB_CHECKSUM:
|
||||
if ( c->value_int )
|
||||
bdb->bi_flags |= BDB_CHKSUM;
|
||||
else
|
||||
bdb->bi_flags &= ~BDB_CHKSUM;
|
||||
break;
|
||||
|
||||
case BDB_INDEX:
|
||||
rc = bdb_attr_index_config( bdb, c->fname, c->lineno,
|
||||
c->argc - 1, &c->argv[1], &c->reply);
|
||||
|
|
|
|||
|
|
@ -144,6 +144,19 @@ bdb_db_cache(
|
|||
}
|
||||
}
|
||||
|
||||
if( bdb->bi_flags & BDB_CHKSUM ) {
|
||||
rc = db->bdi_db->set_flags( db->bdi_db, DB_CHKSUM );
|
||||
if ( rc ) {
|
||||
Debug( LDAP_DEBUG_ANY,
|
||||
"bdb_db_cache: db set_flags(DB_CHKSUM)(%s) failed: %s (%d)\n",
|
||||
bdb->bi_dbenv_home, db_strerror(rc), rc );
|
||||
ldap_pvt_thread_mutex_unlock( &bdb->bi_database_mutex );
|
||||
db->bdi_db->close( db->bdi_db, 0 );
|
||||
ch_free( db );
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
/* If no explicit size set, use the default */
|
||||
flags = bdb_db_findsize( bdb, name );
|
||||
if ( !flags ) flags = BDB_PAGESIZE;
|
||||
|
|
|
|||
|
|
@ -416,6 +416,20 @@ shm_retry:
|
|||
}
|
||||
}
|
||||
|
||||
if( bdb->bi_flags & BDB_CHKSUM ) {
|
||||
rc = db->bdi_db->set_flags( db->bdi_db, DB_CHKSUM );
|
||||
if ( rc ) {
|
||||
snprintf(cr->msg, sizeof(cr->msg),
|
||||
"database \"%s\": db set_flags(DB_CHKSUM)(%s) failed: %s (%d).",
|
||||
be->be_suffix[0].bv_val,
|
||||
bdb->bi_dbenv_home, db_strerror(rc), rc );
|
||||
Debug( LDAP_DEBUG_ANY,
|
||||
LDAP_XSTRING(bdb_db_open) ": %s\n",
|
||||
cr->msg, 0, 0 );
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
rc = bdb_db_findsize( bdb, (struct berval *)&bdbi_databases[i].name );
|
||||
|
||||
if( i == BDB_ID2ENTRY ) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue