📄 check_perm.sh
字号:
#!/bin/sh## @(#)check_perm.sh 1.4 8/28/91 SMI## check_perm.sh## compare permissions, sizes, dates from what is in the # original release media and what is local#export TZTZ=US/PacificCMD=`basename $0`USAGE="$0 [-verbose]"MEDIA_DIR=/usr/etc/install/tarUPGRADE_DIR=$MEDIA_DIR/sunupgradeINCLUDE_DIR=$UPGRADE_DIR/incldLS=$UPGRADE_DIR/toolkit/newlsTMP=/tmpVERBOSE=""KARCH=`arch -k`KARCH1=sun4KARCH2=sun4cKARCH3=sun4mINSTALL_DATE=""INSDIR=/etc/installif [ -r $INSDIR/release ]; then FROM_RELEASE=`sed "s/^.*sunos\.//" $INSDIR/release`elif [ -r /usr/sys/conf.common/RELEASE ]; then FROM_RELEASE=`cat /usr/sys/conf.common/RELEASE`else echo "OS Release Version not found. Exiting with code 0." exit 0fiif [ "$FROM_RELEASE" = "4.1.2" ]; then rev=".412"elif [ "$FROM_RELEASE" = "4.1.1" ]; then if [ -f /usr/kvm/showrev.dat ]; then rev=`nawk '{print "."$NF}' /usr/kvm/showrev.dat |\ tr '[A-Z]' '[a-z]'` fielse echo "$FROM_RELEASE is not supported in $CMD. Exiting with code 2." exit 2fiFILE_DB=file_db$revROOT_MEDIA_PATHS=$UPGRADE_DIR/$FILE_DB/root_media_pathsUSR_MEDIA_PATHS=$UPGRADE_DIR/$FILE_DB/usr_media_pathsKVM_MEDIA_PATHS=$UPGRADE_DIR/$FILE_DB/kvm_media_paths.$KARCHTMP_MEDIA_PATHS=$TMP/tmp_media_pathsROOT_MEDIA_FILES_DATABASE=$UPGRADE_DIR/$FILE_DB/root_media_files_databaseUSR_MEDIA_FILES_DATABASE=$UPGRADE_DIR/$FILE_DB/usr_media_files_databaseKVM_MEDIA_FILES_DATABASE=$UPGRADE_DIR/$FILE_DB/kvm_media_files_database.$KARCHTMP_MEDIA_FILES_DATABASE=$TMP/tmp_media_files_databaseCOMMON_FILE_DATABASE=$TMP/common_file_databaseLOCAL_PATH_LIST=$TMP/local_path_listLOCAL_PATHS=$TMP/local_pathsVOLATILE_CANDIDATES=/usr/tmp/volatile_candidatesTMP_VOLATILE_FILE=$TMP/volatile_fileVOLATILE_FILE=/usr/tmp/volatile_file########################################################################### Utility subroutines##########################################################################cleanup() { if [ $1 -ne 0 ]; then verbose_log "Exiting with code $1" else verbose_log "Exiting" fi rm -f $COMMON_FILE_DATABASE \ $LOCAL_PATHS $TMP_MEDIA_PATHS \ $TMP_MEDIA_FILES_DATABASE \ $TMP_VOLATILE_FILE exit $1}########################################################################verbose_log() { if [ $VERBOSE ] then now=`date | nawk '{print $4}'` echo $now $* fi}########################################################################user_handle() { echo "User routine: current name $NAME" cleanup 0}########################################################################get_local_paths() { sort -u $1 > $LOCAL_PATHS rm -f $1}########################################################################get_common_database() { rm -f $COMMON_FILE_DATABASE for NAME in $common_paths; do## if it is a directory, we need the second line# if [ -d $NAME ] then $LS -aln $NAME | \ nawk '/ \.$/ { print $1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" '$NAME'"}' \ >> $COMMON_FILE_DATABASE elif [ -f $NAME ]; then LOCAL_DIRECT_STRING=`$LS -ln $NAME` echo $LOCAL_DIRECT_STRING >> $COMMON_FILE_DATABASE fi done}########################################################################check_it(){ local_paths=$1 media_paths=$2 media_files_database=$3 orig_media_paths=$4 get_local_paths $local_paths common_paths=`comm -12 $LOCAL_PATHS $media_paths` get_common_database do_compare $media_files_database $media_paths \ $COMMON_FILE_DATABASE $orig_media_paths}########################################################################make_local_list(){ base_dir=$1 rm -f $LOCAL_PATH_LIST for pack in $2; do nawk '{ name="'$base_dir'" substr($1,2); print name }' $pack >> \ $LOCAL_PATH_LIST done}########################################################################do_compare(){DATABASE=$1PATHS=$2COMMON_LIST=$3ORIG_PATHS=$4nawk 'function bingetpath(upath) { low = 1; high = media_path_rec; mid = int((low + high) / 2); while(low != high) { if(upath == media_path[mid]) return(mid) else if(upath < media_path[mid]) high = mid; else low = mid; mid = int((low + high) / 2); } return(0);}BEGIN { install_date="'$INSTALL_DATE'"; media_base_rec = 0; while (getline <"'$DATABASE'" > 0) { media_base_rec++; media_base[media_base_rec] = $0; } media_path_rec = 0; while (getline <"'$PATHS'" > 0) { media_path_rec++; media_path[media_path_rec] = $0; } common_path_rec = 0; while (getline <"'$COMMON_LIST'" > 0) { common_path_rec++; common_path[common_path_rec] = $0; } if ("'$ORIG_PATHS'" != ""){ orig_path_rec = 0; while (getline <"'$ORIG_PATHS'" > 0) { orig_path_rec++; orig_path[orig_path_rec] = $0; } } for(i = 1; i <= common_path_rec; i++) { split(common_path[i], local_dir); upath = local_dir[9]; rec_num = bingetpath(upath); if(rec_num == 0) print "not found " upath else { if ("'$ORIG_PATHS'" == "") org_path=upath else org_path=orig_path[rec_num] split(media_base[rec_num], media_dir); local_permissions=substr(local_dir[1], 2); media_permissions=substr(media_dir[1], 2); local_group=local_dir[4]; media_group=media_dir[3]; local_size=local_dir[5]; media_size=media_dir[4]; local_owner=local_dir[3]; media_owner=media_dir[2]; local_date=sprintf("%s:%s:%s", local_dir[6], local_dir[7], local_dir[8]); media_date=sprintf("%s:%s:%s", media_dir[5], media_dir[6], media_dir[8]); if (local_permissions != media_permissions){ print upath " # permissions: local -> " local_permissions " media -> " media_permissions print "+ " org_path >> "'$TMP_VOLATILE_FILE'" } if (local_owner != media_owner){ print upath " # owner: local -> " local_owner " media -> " media_owner print "+ " org_path >> "'$TMP_VOLATILE_FILE'" } if (local_group != media_group){ print upath " # group: local -> " local_group " media -> " media_group print "+ " org_path >> "'$TMP_VOLATILE_FILE'" } if (local_date != media_date && substr(media_dir[1],1,1) != "d") { if(install_date == "") { if(local_date != install_date){ print upath " # date: local -> " local_date " media -> " media_date print "+ " org_path >> "'$TMP_VOLATILE_FILE'" } } else { print upath " # date: local -> " local_date " media -> " media_date print "+ " org_path >> "'$TMP_VOLATILE_FILE'" } } if (local_size != media_size) { if(media_size != 0){ print upath " # size: local -> " local_size " media -> " media_size print "+ " org_path >> "'$TMP_VOLATILE_FILE'" } } } } exit;}' >> $VOLATILE_CANDIDATES}########################################################################trap 'cleanup 1' 1trap 'cleanup 2' 2trap 'cleanup 3' 3trap 'cleanup 15' 15trap 'user_handle 30' 30trap 'user_handle 31' 31if [ -f $UPGRADE_DIR/release ]; then TO_RELEASE=`sed 's/\./_/g' $UPGRADE_DIR/release | tr '[A-Z]' '[a-z]`else echo "$UPGRADE_DIR/release not found" cleanup 3fiFROM_SUFFIX=`echo $FROM_RELEASE | sed "s/\.//g" | tr '[A-Z]' '[a-z]'`TO_SUFFIX=`echo $TO_RELEASE | sed "s/\.//g" | tr '[A-Z]' '[a-z]'`echo "# Suggested volatile file list## key:# - $Release file is retained; $TO_RELEASE file added with .$TO_SUFFIX tag.# + $TO_RELEASE file replaces $Release file; $Release file saved with .$FROM_SUFFIX tag.# & $Release file replaced by $TO_RELEASE file.#"> $VOLATILE_FILE########################################################################## Parse the arguments#########################################################################for param in $*; do case $param in -v*) VERBOSE=1 ;; -I*) INSTALL_DATE=`expr $param : '-I\(.*\)' '|' ""` verbose_log "Install date is $INSTALL_DATE " ;; *) echo echo USAGE : $USAGE cleanup 1 ;; esacdone########################################################################## check for file existance#########################################################################for file in $ROOT_MEDIA_PATHS $USR_MEDIA_PATHS $KVM_MEDIA_PATHS \ $ROOT_MEDIA_FILES_DATABASE $USR_MEDIA_FILES_DATABASE \ $KVM_MEDIA_FILES_DATABASE; do if [ ! -f $file ]; then echo "Database $file is not available." cleanup 8 fidone########################################################################if [ $KARCH = $KARCH1 ]; then KARCH_ADD1=$KARCH2 KARCH_ADD2=$KARCH3elif [ $KARCH = $KARCH2 ]; then KARCH_ADD1=$KARCH1 KARCH_ADD2=$KARCH3elif [ $KARCH = $KARCH3 ]; then KARCH_ADD1=$KARCH1 KARCH_ADD2=$KARCH2else echo $KARCH is not supported cleanup 12fi########################################################################if [ -r $INSDIR/sys_info ]; then TYPE=`nawk -F= '{ if ($1 == "sys_type") print $2}' \ $INSDIR/sys_info`else echo "$INSDIR/sys_info not found" echo "sys_type=client assumed" TYPE=clientfi########################################################################## Look who is running#########################################################################if [ $TYPE = server -a "`whoami`x" != "root"x ]; then echo "You must be root to run $CMD at the server!" cleanup 4fi########################################################################rm -f $VOLATILE_CANDIDATES verbose_log Testing root ... root_pack=$INCLUDE_DIR/proto_root_sunos_$TO_RELEASE.include make_local_list "" $root_pack check_it $LOCAL_PATH_LIST \ $ROOT_MEDIA_PATHS \ $ROOT_MEDIA_FILES_DATABASE#-----------------------------------------------------------------if [ $TYPE != dataless -a $TYPE != client ]; then verbose_log Testing kvm ... kvm_packs="$INCLUDE_DIR/${KARCH}_sunos_$TO_RELEASE.kvm.include \ $INCLUDE_DIR/${KARCH}_sunos_$TO_RELEASE.sys.include" make_local_list "/usr/kvm" "$kvm_packs" check_it $LOCAL_PATH_LIST \ $KVM_MEDIA_PATHS \ $KVM_MEDIA_FILES_DATABASEfi#-----------------------------------------------------------------if [ $TYPE != dataless -a $TYPE != client ]; then verbose_log Testing usr ... all_other_packs=`ls $INCLUDE_DIR/*.include |\ egrep -v "kvm|sys|root"` make_local_list "/usr" "$all_other_packs" check_it $LOCAL_PATH_LIST \ $USR_MEDIA_PATHS \ $USR_MEDIA_FILES_DATABASEfi#-----------------------------------------------------------------if [ $TYPE = server ]; then for KARCH_ADD in $KARCH_ADD1 $KARCH_ADD2; do SOFT_INFO1=$INSDIR/soft_info.sun4.${KARCH_ADD}.sunos.4.1.1 ADD_KVM_PATHS1=$UPGRADE_DIR/file_db/kvm_media_paths.$KARCH_ADD ADD_KVM_DB1=$UPGRADE_DIR/file_db/kvm_media_files_database.$KARCH_ADD SOFT_INFO2=$INSDIR/soft_info.sun4.${KARCH_ADD}.sunos.4.1.2 ADD_KVM_PATHS2=$UPGRADE_DIR/file_db.412/kvm_media_paths.$KARCH_ADD ADD_KVM_DB2=$UPGRADE_DIR/file_db.412/kvm_media_files_database.$KARCH_ADD if [ -f $SOFT_INFO1 ]; then verbose_log Testing kvm of the $KARCH_ADD on 4.1.1 ... kvm_path=`nawk -F "=" '/kvm_path/ {print $2}' $SOFT_INFO1` kvm_packs="$INCLUDE_DIR/${KARCH_ADD}_sunos_$TO_RELEASE.kvm.include \ $INCLUDE_DIR/${KARCH_ADD}_sunos_$TO_RELEASE.sys.include" make_local_list $kvm_path "$kvm_packs" sed "s@/usr/kvm@$kvm_path@" $ADD_KVM_PATHS1 > \ $TMP_MEDIA_PATHS sed "s@/usr/kvm@$kvm_path@" $ADD_KVM_DB1 > \ $TMP_MEDIA_FILES_DATABASE check_it $LOCAL_PATH_LIST \ $TMP_MEDIA_PATHS \ $TMP_MEDIA_FILES_DATABASE \ $ADD_KVM_PATHS1 rm -f $TMP_MEDIA_PATHS $TMP_MEDIA_FILES_DATABASE fi if [ -f $SOFT_INFO2 ]; then verbose_log Testing kvm of the $KARCH_ADD on 4.1.2 ... kvm_path=`nawk -F "=" '/kvm_path/ {print $2}' $SOFT_INFO2` kvm_packs="$INCLUDE_DIR/${KARCH_ADD}_sunos_$TO_RELEASE.kvm.include \ $INCLUDE_DIR/${KARCH_ADD}_sunos_$TO_RELEASE.sys.include" make_local_list $kvm_path "$kvm_packs" sed "s@/usr/kvm@$kvm_path@" $ADD_KVM_PATHS2 > \ $TMP_MEDIA_PATHS sed "s@/usr/kvm@$kvm_path@" $ADD_KVM_DB2 > \ $TMP_MEDIA_FILES_DATABASE check_it $LOCAL_PATH_LIST \ $TMP_MEDIA_PATHS \ $TMP_MEDIA_FILES_DATABASE \ $ADD_KVM_PATHS2 rm -f $TMP_MEDIA_PATHS $TMP_MEDIA_FILES_DATABASE fi done #----------------------------------------------------------------- for karch in $KARCH1 $KARCH2 $KARCH3; do client_list_file1=$INSDIR/client_list.sun4.$karch.sunos.4.1.1 if [ -f $client_list_file1 ]; then client_list1="$client_list1 `cat $client_list_file1`" fi client_list_file2=$INSDIR/client_list.sun4.$karch.sunos.4.1.2 if [ -f $client_list_file2 ]; then client_list2="$client_list2 `cat $client_list_file2`" fi done for client1 in $client_list1; do client_file1=$INSDIR/client.$client1 if [ $client_file1 ]; then verbose_log Testing root of the client $client1 ... root_path=`nawk -F "=" '/root_path/ {print $2}' $client_file1` make_local_list $root_path "$root_pack" sed "s@^@$root_path@" $UPGRADE_DIR/file_db/root_media_paths > \ $TMP_MEDIA_PATHS sed "s@/usr/kvm@$kvm_path@" $UPGRADE_DIR/file_db/root_media_files_database > \ $TMP_MEDIA_FILES_DATABASE check_it $LOCAL_PATH_LIST \ $TMP_MEDIA_PATHS \ $TMP_MEDIA_FILES_DATABASE \ $UPGRADE_DIR/file_db/root_media_paths rm -f $TMP_MEDIA_PATHS $TMP_MEDIA_FILES_DATABASE else echo File $INSDIR/client.$client1 not found fi done for client2 in $client_list2; do client_file2=$INSDIR/client.$client2 if [ $client_file2 ]; then verbose_log Testing root of the client $client2 ... root_path=`nawk -F "=" '/root_path/ {print $2}' $client_file2` make_local_list $root_path "$root_pack" sed "s@^@$root_path@" $UPGRADE_DIR/file_db.412/root_media_paths > \ $TMP_MEDIA_PATHS sed "s@/usr/kvm@$kvm_path@" $UPGRADE_DIR/file_db.412/root_media_files_database > \ $TMP_MEDIA_FILES_DATABASE check_it $LOCAL_PATH_LIST \ $TMP_MEDIA_PATHS \ $TMP_MEDIA_FILES_DATABASE \ $UPGRADE_DIR/file_db.412/root_media_paths rm -f $TMP_MEDIA_PATHS $TMP_MEDIA_FILES_DATABASE else echo File $INSDIR/client.$client2 not found fi donefi#-----------------------------------------------------------------[ -s $TMP_VOLATILE_FILE ] && \sort -u $TMP_VOLATILE_FILE >> $VOLATILE_FILEecho "The results are placed to the"if [ -s $VOLATILE_CANDIDATES ]; then echo $VOLATILE_CANDIDATES echo andfiecho $VOLATILE_FILEcleanup 0########################################################################
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -