#!/bin/bash
#
# send_server_doku
#
# Speichert Dokumentation zu einem Server in der Loggingdatenbank ber einen
# httpget-Aufruf
#
# Aufruf:
#
# send_server_doku [-c charset] [-C contentchset|-G] [-d storepath] [-S] [-h hostname] [-D data|-i] name beschreibung date time dokupfad
#
###################################################################################
#
if [[ -f /etc/uls/uls.conf ]]; then
  . /etc/uls/uls.conf
fi
#
if [[ -z "$ULSSERVER" ]]; then
  ULSSERVER="STORE"
fi
#
ULSSEND="STORE"
ACC="all"
if [[ ${LC_CTYPE:-$LANG} == *8 ]]; then
  CHARSET="utf8"
else
  CHARSET="latin1"
fi
#
unset DATA STDIN CTCHARSET GUESSCTC GUESSEDCTC
#
while getopts iD:c:C:d:Sh:s:? op; do
  case "$op" in
    c) CHARSET="$OPTARG";;
    C) CTCHARSET=";$OPTARG";;
    G) GUESSCTC=1;;
    D) if [[ -z "$OPTARG" ]]; then
         echo "ERROR $(basename $0): empty data after -D"
         exit 1
       fi
       DATA="$OPTARG";;
    i) STDIN=1;;
    d) ULS_TMP_PATH=$(readlink -f "$OPTARG");;
    S) ULSSEND="$ULSSERVER";;
    h) ULSHOSTNAME=$OPTARG;;
    s) ACC=$OPTARG;;
    *) echo "usage: `basename $0` [-c charset] [-C contentchset|-G] [-d storepath] [-S] [-h hostname] [-D data|-i] name beschreibung date time dokupfad"
       exit 1;;
  esac
done
shift $(( $OPTIND - 1))
#
if [[ $# -ne 5 ]]; then
  echo "usage: `basename $0` [-c charset] [-d storepath] [-S] [-h hostname] [-D data|-i] name beschreibung date time dokupfad"
  exit 1
fi
#
if [[ -z "$ULSHOSTNAME" ]]; then
  ULSHOSTNAME=`hostname`
fi
#
if [[ -n "$STDIN$DATA" || -f $5 ]]; then
  #
  if [[ "$ULSSEND" != "STORE" ]]; then
    RET=`httpget $SFLAGS -u logging -p lgput -s -mf "$5" -mn $ULSHOSTNAME $ULSSERVER "doku_upload.s2w?fname=$ULSHOSTNAME&date=$3&time=$4&hostname=$ULSHOSTNAME&beschreibung=$2&name=$1&charset=$CHARSET"`
    if [[ "$RET" = "OK" ]]; then
      exit 0
    fi
  fi
  #
  if [[ -z "$ULS_TMP_PATH" ]]; then
    ULS_TMP_PATH=/var/tmp/uls
  fi
  #
  umask 077
  ULSDAT=dat-`id -u`.uls
  N="`echo \"$1\" | sed 's/\\([\"\\\\]\\)/\\\\\\1/g'`"
  B="`echo \"$2\" | sed 's/\\([\"\\\\]\\)/\\\\\\1/g'`"
  P="`basename \"$5\" | sed 's/\\([\"\\;\\\\]\\)/\\\\\\1/g'`"
  ULSTMP="$(dirname $ULS_TMP_PATH)/ULSTMP.$$"
  if [[ -n "$STDIN" ]]; then
    cat >"$ULSTMP"
  elif [[ -n "$DATA" ]]; then
    echo "$DATA" >"$ULSTMP"
  else
    cp "$5" "$ULSTMP"
  fi
  if [[ -n "$GUESSCTC" ]]; then
    GUESSEDCTC=$(file -zbi "$ULSTMP" | sed -n 's/compressed-encoding=.*//;s/.* charset=\([^ ]*\).*/;\1/p')
  fi
  if cd "$ULS_TMP_PATH" 2>/dev/null; then
    test -f $ULSDAT || touch $ULSDAT && chmod 600 $ULSDAT
  else
    mkdir -m 1777 -p "$ULS_TMP_PATH"
    if cd "$ULS_TMP_PATH" 2>/dev/null; then
      touch $ULSDAT && chmod 600 $ULSDAT
    else
      echo "Kann Lokales ULS-Verzeichnis: $ULS_TMP_PATH nicht anlegen!"
      exit 1
    fi
  fi
  mv "$ULSTMP" $P.$$
  echo "L;;;;;;$CHARSET
S;$3 $4;$ULSHOSTNAME;\"$N\";\"$B\";;$P.$$;$P;$ACC${GUESSEDCTC:-$CTCHARSET}" >>$ULSDAT
  exit 0
else
  echo "ERROR $(basename $0): Datei $5 nicht gefunden."
  exit 1
fi
