#!/bin/bash
#
# sccl_get_config
#
# Konfiguration ueber sccl_dist_config von anderem Knoten bekommen
##################################################################
#
. $(dirname $0)/globals.settings
#
if [[ "$STARTSTOPDIR" != /etc/sccl/* ]]; then
  STARTSTOPDIR=''
else
  STARTSTOPDIR="${STARTSTOPDIR#/}"
fi
PACKAGES="${PACKAGES#/}"
RESOURCES="${RESOURCES#/}"
U2WPWDDAT="${U2WPWDDAT#/}"
U2WHOSTSDAT="${U2WHOSTSDAT#/}"
MASTERFILES="etc/sccl/capwd.dat etc/sccl/certs/private/${CLUSTER}-cakey.pem etc/sccl/certs/serial"
#
if [[ "$3" == "--replace" ]]; then
  replace=1
else
  replace=0
fi
ERRORLIST=/tmp/sccl_get_config.$$.err
WARNLIST=/tmp/sccl_get_config.$$.warn
cd /
NEWER=$(tar tvfz "$1" --full-time etc/sccl/sccl.conf etc/sccl/adminpwd.dat etc/sccl/localadminpwd.dat etc/sccl/userpwd.dat $U2WPWDDAT $U2WHOSTSDAT $STARTSTOPDIR $PACKAGES $RESOURCES $MASTERFILES 2>/dev/null | sed -n 's/^\([l-]\).* \([0-9][0-9]* 2[0-9][0-9][0-9]-[01][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9][ .].*\)/\1 \2/p' | while read a s t d f; do
  if [[ $a = 'l' ]]; then
    COMP=$(ls -gG --time-style='+-' "${f% -> *}" | cut -d ' ' -f 5-)
    if [[ "$f" != "$COMP" ]]; then
      echo "\"${f% -> *}\""
    fi
  elif [[ -f "$f" ]]; then
    ls -gG --time-style='+%F %T.%N' "$f" | awk -v DT="$t$d" -v SIZE=$s -v REPLACE=$replace -v FILE="$f" -v ERRORLIST=$ERRORLIST -v WARNLIST=$WARNLIST '
      { sub("0*$", "", $5)
        sub("[.]$", "", $5)
        if( $4 $5 $3 !=  DT SIZE )
        { gsub(" ", "\\ ", FILE)
          if( DT > $4 $5 )
            print FILE
          else if( REPLACE )
            print FILE
          else
          { gsub("[.][0-9]*", "", $5)
            gsub("[.][0-9]*", "", DT)
            if( DT == $4 $5 )
              print FILE >>WARNLIST
            else
              print FILE >>ERRORLIST
         }
       }
    }'
  else
    echo ${f// /\\ }
  fi
done)
if [[ -n "$NEWER" ]]; then
  eval tar xvfz "$1" -C / $NEWER 2>&1
  if [[ -n "$ULS" ]]; then
    DT="`date '+%F %T%:z'`"
    send_test_value -h DOMAIN:$THISHOSTNAME:SCCL "$CLUSTER" "Config:$THISHOSTNAME" "got from" $DT "$2" "[_]"
    send_test_value -h DOMAIN:$THISHOSTNAME:SCCL "$CLUSTER" "Config:$THISHOSTNAME" "Files" $DT "$NEWER" "_"
    configfiles=$(grep -E '^etc/sccl/sccl.conf|^etc/sccl/packages.conf|^etc/sccl/resources.conf|^etc/sccl/scripts/' <<<"$NEWER")
    if [[ -n "$configfiles" ]]; then
      eval tar cfJ - $configfiles 2>/dev/null | send_stdin_file -h DOMAIN:$THISHOSTNAME:SCCL "$CLUSTER" "Config:$THISHOSTNAME" Tar $DT "sccl_dist_config.txz"
    fi
    if [[ -s $ERRORLIST ]]; then
      send_test_value -h DOMAIN:$THISHOSTNAME:SCCL "$CLUSTER" "Config:$THISHOSTNAME" "older files" $DT "$(<$ERRORLIST)" "_"
    fi
    if [[ -s $WARNLIST ]]; then
      send_test_value -h DOMAIN:$THISHOSTNAME:SCCL "$CLUSTER" "Config:$THISHOSTNAME" "warn files" $DT "$(<$WARNLIST)" "_"
    fi
  fi
fi
if [[ -s $WARNLIST ]]; then
  echo "Warning: The following files might be newer on the target:"
  cat $WARNLIST
fi
if [[ -s $ERRORLIST ]]; then
  echo "Error: The following files are newer on the target:"
  cat $ERRORLIST
fi
rm -f $ERRORLIST $WARNLIST
if getent group sccl | grep -q 'sccl:.*:.*:.'; then
  if [[ $(stat -c '%G' /etc/sccl/certs/private) != 'sccl' ]]; then
    chgrp sccl /etc/sccl/certs/private
    chmod g+rx /etc/sccl/certs/private
  fi
  if [[ $(stat -c '%G' $U2WKEY) != 'sccl' ]]; then
    chgrp sccl $U2WKEY
    chmod g+r $U2WKEY
  fi
fi
