2011-11-02 23:05:24 +04:00
#!/bin/sh
#
# Test for registry upgrades.
#
# Copyright (C) 2011 Björn Baumbach <bb@sernet.de>
if [ $# -lt 2 ] ; then
2022-04-22 16:34:10 +03:00
echo "Usage: test_registry_upgrade.sh NET DBWRAP_TOOL"
exit 1
2011-11-02 23:05:24 +04:00
fi
SCRIPT_DIR = $( dirname $0 )
BASE_DIR = " ${ SCRIPT_DIR } /../../.. "
NET = " $1 "
2013-01-15 14:22:49 +04:00
DBWRAP_TOOL = " $2 --persistent "
2011-11-02 23:05:24 +04:00
DATADIR = " ${ BASE_DIR } /testdata/samba3 "
2020-11-19 20:10:02 +03:00
WORKSPACE = " ${ SELFTEST_TMPDIR } /registry_upgrade "
2011-11-02 23:05:24 +04:00
CONFIG_FILE = " ${ WORKSPACE } /smb.conf "
CONFIGURATION = " --configfile= ${ CONFIG_FILE } "
NETCMD = " $NET $CONFIGURATION "
incdir = " ${ BASE_DIR } /testprogs/blackbox "
. $incdir /subunit.sh
failed = 0
2020-11-19 20:10:02 +03:00
cd $SELFTEST_TMPDIR || exit 1
2011-11-02 23:05:24 +04:00
REGPATH = "HKLM\Software\Samba"
LOGDIR_PREFIX = "registry_upgrade"
registry_check( )
2012-06-25 23:21:31 +04:00
(
2022-04-22 16:34:10 +03:00
CHECKNO = " $1 "
CHECKDIFF = " $2 "
REGVER = ""
ALLOWEDERR = "INFO: version =|Check database:|overwrite registry format version 0 with 1|no INFO/version found"
test " x $CHECKNO " = "x0" && {
REGVER = "--reg-version=1"
}
echo " Registry check $CHECKNO " | tee -a $LOG
CHECK = " $( $NETCMD registry check $REGVER 2>& 1) "
RC = $?
ERRORSTR = " $( echo " $CHECK " | grep -vE $ALLOWEDERR ) "
test " x $RC " = "x0" || {
echo " upgrade check $CHECKNO failed: " | tee -a $LOG
return 1
}
test " x $ERRORSTR " = "x" || {
echo " upgrade check $CHECKNO failed: " | tee -a $LOG
echo " reason: $CHECK " | tee -a $LOG
return 1
}
test " x $CHECKDIFF " = "xcheckdiff" && {
$NETCMD registry export 'HKLM' $WORKSPACE /export_${ CHECKNO } .reg >>$LOG
test " x $? " = "x0" || {
echo "Error: 'net registry export HKLM' failed" | tee -a $LOG
}
diff -q $WORKSPACE /export_0.reg $WORKSPACE /export_${ CHECKNO } .reg >>$LOG
test " x $? " = "x0" || {
echo " Error: $WORKSPACE /export_0.reg differs from $WORKSPACE /export_ ${ CHECKNO } .reg " | tee -a $LOG
return 1
}
}
return 0
2012-06-25 23:21:31 +04:00
)
2011-11-02 23:05:24 +04:00
registry_upgrade( )
{
2022-04-22 16:34:10 +03:00
echo registry_upgrade $1 | tee -a $LOG
( cat $DATADIR /registry.tdb >$WORKSPACE /registry.tdb) >>$LOG 2>& 1
REGISTRY = " ${ WORKSPACE } /registry.tdb "
test -e $REGISTRY || {
echo "Error: Database file not available" | tee -a $LOG
return 1
}
# create config file
echo '[global]' >${ CONFIG_FILE }
echo " state directory = ${ WORKSPACE } " >>${ CONFIG_FILE }
echo " private directory = ${ WORKSPACE } " >>${ CONFIG_FILE }
echo " lock directory = ${ WORKSPACE } " >>${ CONFIG_FILE }
# set database INFO/version to 1
#$DBWRAP_TOOL $REGISTRY store 'INFO/version' uint32 1
#test "x$?" = "x0" || {
# echo "Error: Can not set INFO/version" >> $LOG
# return 1
#}
# check original registry.tdb
echo " $REGISTRY " | tee -a $LOG
registry_check 0
test " x $? " = "x0" || {
echo "Error: initial 'registry_check 0' failed" | tee -a $LOG
return 1
}
# trigger upgrade
echo " $NETCMD registry enumerate $REGPATH " >>$LOG
$NETCMD registry enumerate $REGPATH >>$LOG
test " x $? " = "x0" || {
echo " Error: 'net registry enumerate $REGPATH ' failed " | tee -a $LOG
return 1
}
# check upgraded database
registry_check 1
test " x $? " = "x0" || {
echo "Error: 'registry_check 1' after upgrade failed" | tee -a $LOG
return 1
}
# export database for diffs
$NETCMD registry export 'HKLM' $WORKSPACE /export_0.reg | tee -a $LOG
test " x $? " = "x0" || {
echo "Error 'net registry export' failed" | tee -a $LOG
return 1
}
# remove version string
$DBWRAP_TOOL $REGISTRY delete INFO/version | tee -a $LOG
test " x $? " = "x0" || {
echo "Error: Can not remove INFO/version key from registry" | tee -a $LOG
return 1
}
# trigger upgrade on upgraded database
echo " $NETCMD registry enumerate $REGPATH " >>$LOG
$NETCMD registry enumerate $REGPATH >>$LOG 2>& 1
test " x $? " = "x0" || {
echo " Error: 'net registry enumerate $REGPATH ' failed " | tee -a $LOG
return 1
}
# check upgraded database again
registry_check 2 checkdiff
test " x $? " = "x0" || {
echo "Error: 'registry_check 2' after upgrade failed" | tee -a $LOG
return 1
}
# set database INFO/version to version 2
$DBWRAP_TOOL $REGISTRY store 'INFO/version' uint32 2
test " x $? " = "x0" || {
echo "Error: Can not set INFO/version" | tee -a $LOG
return 1
}
# trigger upgrade
$NETCMD registry enumerate $REGPATH >>$LOG
test " x $? " = "x0" || {
echo " Error: 'net registry enumerate $REGPATH ' failed " | tee -a $LOG
return 1
}
# check upgraded database again
registry_check 3 checkdiff
test " x $? " = "x0" || {
echo "Error: 'registry_check 3' after upgrade failed" | tee -a $LOG
return 1
}
2011-11-02 23:05:24 +04:00
}
# remove old workspace
rm -rf $WORKSPACE
2011-11-04 02:59:55 +04:00
mkdir $WORKSPACE
2020-11-19 20:10:02 +03:00
DIR = $( mktemp -d ${ WORKSPACE } /${ LOGDIR_PREFIX } _XXXXXX)
2011-11-04 02:59:55 +04:00
LOG = $DIR /log
2022-04-22 16:34:10 +03:00
testit "registry_upgrade" registry_upgrade || failed = $( expr $failed + 1)
2011-11-02 23:05:24 +04:00
2011-11-04 02:59:55 +04:00
if [ $failed -eq 0 ] ; then
2022-04-22 16:34:10 +03:00
rm -rf $WORKSPACE
2011-11-04 02:59:55 +04:00
fi
2011-11-02 23:05:24 +04:00
testok $0 $failed