From ebfd530ea616581606a82277d2250ef5d514a975 Mon Sep 17 00:00:00 2001 From: Andrew Kesterson Date: Fri, 17 Aug 2012 19:48:41 -0400 Subject: [PATCH] Added reporting of file type, raw mode, device ID, and selinux context to file reporting, from stat. --- client/bin/disco-fs-diff | 43 ++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/client/bin/disco-fs-diff b/client/bin/disco-fs-diff index f0c0e4e..6a25209 100755 --- a/client/bin/disco-fs-diff +++ b/client/bin/disco-fs-diff @@ -29,26 +29,49 @@ rsync --checksum --times --perms --owner --group -ani ./scratchfs/ ./rootfs/ |\ while read LINE do FNAME=$(echo $LINE | cut -d : -f 4 | sed s/"^ *"/""/ | sed s/" *$"/""/) + NEWSTR="" + MODSTR="" MD5_NEW=$(md5sum ${DISCOROOT}/scratchfs/${FNAME} 2>/dev/null| cut -d " " -f 1) MD5_OLD=$(md5sum /${FNAME} 2>/dev/null| cut -d " " -f 1) + if [ "$MD5_NEW" != "$MD5_OLD" ]; then + MODSTR="$MODSTR md5=[$MD5_OLD => $MD5_NEW]" + fi PERMS_NEW=$(stat --format "%G:%U %a" ${DISCOROOT}/scratchfs/${FNAME} 2>/dev/null) PERMS_OLD=$(stat --format "%G:%U %a" /${FNAME} 2>/dev/null) - if [ ! -d /${FNAME} ] && [ ! -d ${DISCOROOT}/scratchfs/${FNAME} ]; then - DIFF=$(echo; diff /${FNAME} ${DISCOROOT}/scratchfs/${FNAME} 2>/dev/null > /tmp/$$.diff ) + if [ "$PERMS_NEW" != "$PERMS_OLD" ]; then + MODSTR="$MODSTR perms=[$PERMS_OLD => $PERMS_NEW]" fi - file ${DISCOROOT}/scratchfs/${FNAME} 2>&1 | grep ASCII >/dev/null 2>&1 - if [ $? -eq 0 ]; then - CONTENT=$(echo "Text"; cat ${DISCOROOT}/scratchfs/${FNAME} | sed s/"^"/"> "/g > /tmp/$$.content) + SELINUX_NEW=$(stat --format "%C" ${DISCOROOT}/scratchfs/${FNAME} 2>/dev/null) + SELINUX_OLD=$(stat --format "%C" /${FNAME} 2>/dev/null) + if [ "$SELINUX_NEW" != "$SELINUX_OLD" ]; then + MODSTR="$MODSTR selinux=[$SELINUX_OLD => $SELINUX_NEW]" + fi + TYPE_NEW=$(stat --format "%F" ${DISCOROOT}/scratchfs/${FNAME} 2>/dev/null) + TYPE_OLD=$(stat --format "%F" /${FNAME} 2>/dev/null) + if [ "$TYPE_NEW" != "$TYPE_OLD" ]; then + MODSTR="$MODSTR type=[$TYPE_OLD => $TYPE_NEW]" + fi + RAWMODE_NEW=$(stat --format "%f" ${DISCOROOT}/scratchfs/${FNAME} 2>/dev/null) + RAWMODE_OLD=$(stat --format "%f" /${FNAME} 2>/dev/null) + if [ "$RAWMODE_NEW" != "$RAWMODE_OLD" ]; then + MODSTR="$MODSTR mode=[$RAWMODE_OLD => $RAWMODE_NEW]" + fi + DEVICE_NEW=$(stat --format "%D" ${DISCOROOT}/scratchfs/${FNAME} 2>/dev/null) + DEVICE_OLD=$(stat --format "%D" /${FNAME} 2>/dev/null) + if [ "$DEVICE_NEW" != "$DEVICE_OLD" ]; then + MODSTR="$MODSTR device=[$DEVICE_OLD => $DEVICE_NEW]" + fi + + if [ ! -d /${FNAME} ] && [ ! -d ${DISCOROOT}/scratchfs/${FNAME} ]; then + diff -N /${FNAME} ${DISCOROOT}/scratchfs/${FNAME} 2>/dev/null > /tmp/$$.diff fi echo $LINE |\ - sed -e s/"Created$"/"Created : md5=[${MD5_NEW}] perms=[${PERMS_NEW}]"/ |\ - sed -e s/"Modified$"/"Modified : md5=[${MD5_OLD} => ${MD5_NEW}] perms=[${PERMS_OLD} => ${PERMS_NEW}]"/ + sed -e s/"Created$"/"Created : type=[${TYPE_NEW}] device=[${DEVICE_NEW}] mode=[${RAWMODE_NEW}] selinux=[${SELINUX_NEW}] md5=[${MD5_NEW}] perms=[${PERMS_NEW}]OB"/ |\ + sed -e s/"Modified$"/"Modified : ${MODSTR}"/ if [ -f /tmp/$$.diff ]; then cat /tmp/$$.diff - elif [ -f /tmp/$$.content ]; then - cat /tmp/$$.content fi - rm -f /tmp/$$.content /tmp/$$.diff 2>/dev/null + rm -f /tmp/$$* 2>/dev/null done rm -f /tmp/$$* \ No newline at end of file