#!/bin/sh
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html

#-------------------------------------------------------------------------------
#=head1  syslog 
#=head2  syslog command that setsup the syslogd for MS, SV and nodes.
#        On MS, it makes sure all the xCAT messages goes to /var/log/messages file,
#               it enables syslogd receving logs from remote machies. 
#        On MS, it sends all the messages to MS,
#               it enables syslogd receving logs from remote nodes. 
#        On node,  it sends all the messages its master.  
#        Input: none, it takes the following environment variables: 
#           OSVER: possible values are sles10, fedora8, redhat5, aix etc.   
#=cut
#-------------------------------------------------------------------------------

master=$MASTER
conf_file="/etc/syslog.conf"
sysconfig="/etc/sysconfig/syslog"
init="/etc/init.d/syslog"
ng=0
isSN=0
isLinux=1

#echo "NTYPE=$NTYPE,OSVER=$OSVER,OSTYPE=$OSTYPE"

if [[ $NTYPE = service ]]; then 
  isSN=1
fi

if [[ $OSTYPE = linux* ]]; then
  if [[ $OSVER = fedora* ]] || [[ -f /etc/fedora-release ]]; then
    if [ -e /etc/rsyslog.conf ]; then
      conf_file="/etc/rsyslog.conf"
      sysconfig="/etc/sysconfig/rsyslog"
      init="/etc/init.d/rsyslog"
    fi
  else 
    if [[ $$OSVER = sles* ]] || [[ $$OSVER = suse* ]] || [[ -f /etc/SuSE-release ]]; then
      #find out which syslog is used for SLES, syslog or syslog-ng
      result=`grep "^SYSLOG_DAEMON=" $sysconfig 2>&1`
      if [[ $result = *syslog-ng* ]]; then
        conf_file="/etc/syslog-ng/syslog-ng.conf"
        ng=1
      fi
    fi
  fi 
else
  sysconfig=  #AIX does not have this file
  isLinux=0;
fi

#echo "isSN=$isSN, isLinux=$isLinux, ng=$ng"
#echo "sysconfig=$sysconfig, confgile=$conf_file"

#handle sysconfig file to make remote loggling possible 
if [ $isLinux -eq 1 ] && [ -a $sysconfig ]; then 
  if [[ ! -f "$sysconfig.XCATORIG" ]]; then
    cp -f $sysconfig $sysconfig.XCATORIG
  fi
  if [ -f /etc/xCATMN ]; then
    #on MN: make the syslogd be able to receive remote logs 
    awk  '{if($0 ~ /^SYSLOGD_OPTIONS=/) {
            if ($0 !~ /-r/) {sub(/\"$/, " -r\"", $0)}
            if (($0 !~ /-m0/) && ($0 !~/-m 0/)) { sub(/\"$/, " -m 0\"", $0)}
            print $0}
          else { print $0}}'  $sysconfig > $sysconfig.tmp 
  else
    if [ $isSN -eq 1 ]; then
      #on SN: make the syslog be able to receive and forward remote logs
      awk '{if($0 ~ /^SYSLOGD_OPTIONS=/) {
              if ($0 !~ /-r/) {sub(/\"$/, " -r\"", $0)}
              if ($0 !~ /-h/) {sub(/\"$/, " -h\"", $0)}
              if (($0 !~ /-m0/) && ($0 !~/-m 0/)) { sub(/\"$/, " -m 0\"", $0)}
              print $0}
            else { print $0}}'  $sysconfig > $sysconfig.tmp 
    else
      ##turn off the time marker on all 
      awk '{if($0 ~ /^SYSLOGD_OPTIONS=/) {
              if (($0 !~ /-m0/) && ($0 !~/-m 0/)) { sub(/\"$/, " -m 0\"", $0)}
              print $0}
            else {print $0}}' $sysconfig > $sysconfig.tmp 
    fi
  fi
  mv -f $sysconfig.tmp $sysconfig   
fi  


#syslog-ng has different way of enabling log forwarding
if [ $ng -eq 1 -a $isSN -eq 1 ]; then
  if [ ! -f $conf_file.XCATORIG ];  then
    cp -f $conf_file $conf_file.XCATORIG
  fi
  sed -i 's/#udp(ip("0.0.0.0/udp(ip("0.0.0.0/' $conf_file
fi

#now handling where the logs go
goLocal=0;
if [ -f /etc/xCATMN ]; then
  goLocal=1
else 
  if [ $isSN -eq 1 ]; then
     if [[ $SVLOGLOCAL -eq 1 ]]; then
       goLocal=1  
     fi
  fi
fi

if [ $goLocal -eq 1 ]; then
  #making sure all the messages goes to /var/log/messages
  touch  /var/log/messages 
  if [ $ng -eq 0 ]; then
    if [ ! -f $conf_file.XCATORIG ]; then
      cp -f $conf_file $conf_file.XCATORIG
    fi

    grep "xCAT settings" $conf_file
    if [ $? -gt 0 ]; then
      if [ $isLinux -eq 0 ]; then # aix
        echo "# xCAT settings" >> $conf_file
        echo "*.debug;*.crit;*.err;*.warning   /var/log/messages  rotate 1024K files 5" >> $conf_file
      fi
    fi
  fi
else 
  #now make the syslogd fowarding the messages to the the master
  if [ $ng -eq 1 ]; then
    if [ ! -f $conf_file.XCATORIG ]; then
      cp -f $conf_file $conf_file.XCATORIG
    fi
    grep "xCAT settings" $conf_file
    if [ $? -gt 0 ]; then
      echo "# xCAT settings" >> $conf_file
      echo "destination loghost { udp(\"$master\"); };" >> $conf_file
      echo 'log { source(src); destination(loghost); };' >> $conf_file
    fi
  else 
    if [ -f $conf_file.XCATORIG ]; then 
      rm -f $conf_file 
    else 
      mv -f $conf_file $conf_file.XCATORIG
    fi
    echo "# xCAT settings" > $conf_file
    echo "*.* @$master" >> $conf_file
  fi
fi

#restart the syslog daemon to take the new conf file settings
if [ $isLinux -eq 0 ]; then
  refresh -s syslogd
else 
  $init restart
fi

#keep a record
logger -t xcat "Install: syslog setup"
exit 0