Check if altered before write. pratial but funktional. but bugs

This commit is contained in:
xor 2015-10-04 17:44:26 +02:00
parent f1ec24decb
commit 4d9a996b47

View File

@ -15,6 +15,7 @@ VERSION="0.7.4"
PATH="/bin:/usr/bin:/sbin:/usr/sbin:${PATH}" PATH="/bin:/usr/bin:/sbin:/usr/sbin:${PATH}"
DIGEST_FILE="/var/lib/hashboot.digest" DIGEST_FILE="/var/lib/hashboot.digest"
DIGEST_FILE_TMP="/tmp/hashboot.digesttmp"
LOG_FILE="/tmp/hashboot.log" LOG_FILE="/tmp/hashboot.log"
MBR_DEVICE="" MBR_DEVICE=""
MBR_TMP="/tmp/mbr" MBR_TMP="/tmp/mbr"
@ -66,6 +67,17 @@ mbr_size ()
expr ${sectorsize} \* ${startsector} / 1024 expr ${sectorsize} \* ${startsector} / 1024
} }
write_hashes ()
{
#Write header to tmp
echo "#hashboot ${VERSION} - Algorithm: $(basename ${HASHER})" > ${1}
#Write MBR of MBR_DEVICE to tmp
dd if=${MBR_DEVICE} of=${MBR_TMP} bs=$(mbr_size)K count=1 status=noxfer || die 8
#Write hashes of all regular files to tmp
${HASHER} ${MBR_TMP} >> ${1}
find /boot -type f -exec ${HASHER} --binary {} >> ${1} +
}
#If we're not root: exit #If we're not root: exit
if [ ${UID} -ne 0 ] if [ ${UID} -ne 0 ]
then then
@ -73,7 +85,7 @@ then
fi fi
#If /boot is in fstab but not mounted: mount, mark as mounted #If /boot is in fstab but not mounted: mount, mark as mounted
if grep -q '/boot' /etc/fstab && ! grep -q /boot /etc/mtab if grep -q '/boot.*noauto' /etc/fstab && ! grep -q /boot /etc/mtab
then then
mount /boot mount /boot
BOOT_MOUNTED=1 BOOT_MOUNTED=1
@ -95,20 +107,26 @@ then
read_config read_config
#Write header write_hashes $DIGEST_FILE_TMP
echo "#hashboot ${VERSION} - Algorithm: $(basename ${HASHER})" > ${DIGEST_FILE}
#Write MBR of MBR_DEVICE to ${DIGEST_FILE} if diff -q --ignore-matching-lines='^#' ${DIGEST_FILE} ${DIGEST_FILE_TMP} ;
dd if=${MBR_DEVICE} of=${MBR_TMP} bs=$(mbr_size)K count=1 status=noxfer || die 8
#Write hashes of all regular files to ${DIGEST_FILE}
${HASHER} ${MBR_TMP} >> ${DIGEST_FILE}
find /boot -type f -exec ${HASHER} --binary {} >> ${DIGEST_FILE} +
if [ $? == 0 ]
then then
echo "List of hashes written to ${DIGEST_FILE}" echo "alles fine und die exit definieren"
die 0
else else
die 7 "Error writing ${DIGEST_FILE}" if [ "$(grep ${MBR_TMP} ${DIGEST_FILE})" != "$(grep ${MBR_TMP} ${DIGEST_FILE_TMP})" ]
then
echo "at least mbr must be written."
fi
if [ "$(grep -v ${MBR_TMP} ${DIGEST_FILE})" != "$(grep -v ${MBR_TMP} ${DIGEST_FILE_TMP})" ]
then
echo "anything here, must be rewritten."
cp ${DIGEST_FILE_TMP} ${DIGEST_FILE} || die 7
rm ${DIGEST_FILE_TMP}
echo "List of hashes written to ${DIGEST_FILE}"
fi
fi fi
#Backup of good files #Backup of good files
tar -czpPf ${BACKUP_FILE} ${MBR_TMP} /boot ${DIGEST_FILE} tar -czpPf ${BACKUP_FILE} ${MBR_TMP} /boot ${DIGEST_FILE}
if [ $? == 0 ] if [ $? == 0 ]