#!/usr/bin/perl -w
# ------------------------------------------------------------
# move_to_adsm.pl
#   (c) 1999, Xtelligent IT Consulting GmbH
#   karin.wenzel@xtelligent.de
# ------------------------------------------------------------
# Uebergabeparameter: 
#   Filename
# Umgebungsanpassung: 
#   ADSM-Kennwort im Skript unter "Parametersetzung" anpassen!
# Funktion:
#   File wird mittels gzip gepackt, das gepackte File nach ADSM 
#   gesichert und dann geloescht.
#   Falls bereits ein gleichnamiges .gz File existiert,
#   wird es vorher gesichert und geloescht.
# ------------------------------------------------------------
# Fehlerausgaben (Exit-Code und Text auf Standardoutput)
#   1   Datei $ParamFile existiert nicht.
#
#  2x   ADSM-Fehler:
#  21   Bereits vorhandene Datei $ZipFile konnte nicht gesichert werden.
#       \nADSM-Fehler: $ErrTxt
#  22   Sichern fehlgeschlagen.
#       \nADSM-Fehlermeldung: $ErrTxt\n
#
#   3   Datei $ParamFile konnten nicht gepackt werden. Errcode: $Err
#       (gzip-Fehler, kann z.B. an mangelnder Zugriffsberechtigung liegen)
#
#
#  41   Bereits vorhandene Datei $ZipFile konnte nicht gelöscht werden.
#  42   $ZipFile konnte nicht gelöscht werden.
# ------------------------------------------------------------
# Stand: 24.11.1999
# History:
# xx.xx.xxxx - Version x.x : Neueste Aenderung...
# 24.11.1999 - Version 1.1 : Pfad explizit definiert (usr/bin, usr/sbin, 
#                            /usr/local/bin); Bei dsmc-Aufrufen ein "&" 
#                            eingefuegt, das interaktive Abfragen verhin-
#                            dert.
# 17.11.1999 - Version 1.0 : Lauffaehig.
# ------------------------------------------------------------

sub PruefeObGesichert
    {
    # -----------------------------------------------------------------------------------
    # Uebergabeparameter : Filename, ADSM-Kennwort
    # Uebergabeparameter : Filename, ADSM-Kennwort
    # Funktion           : Prueft ob File im ADSM (query backup) vorhanden.
    # Pruefung           : ADSM-Output wird nach Fehlermeldung ("ANS" am Zeilenbeginn)
    #                      gescannt:
    #                      gibt "0" zurück, wenn alles ok.
    #                      gibt "1" und $ErrTxt (Zeile mit "ANS") zurück, wenn Problem.
    # -----------------------------------------------------------------------------------
       my ($File, $Geheim, $Trash)=@_;
       my ($File, $Geheim, $Trash)=@_;
       my $ErrGesichert=0;
       # Das "&" am Ende des folgenden Befehls ist erforderlich, um interaktive Abfragen durch
       # den ADSM-Client zu unterbinden. 
       my $GesichertOutput=`dsmc query backup -password=$Geheim $File 2>&1 &`;
       # Pruefe Output auf Vorhandensein einer Fehlermeldung (beginnen mit "ANS" am Zeilenbeginn)
       $ErrTxt=`echo \"$GesichertOutput\" | grep \"^ANS\"`;
       if ($ErrTxt=="") {$ErrGesichert=0;} else {$ErrGesichert=1;}; 
       return $ErrGesichert;
    } # ENDE sub  

sub SichernNachADSM
    {
    # -----------------------------------------------------------------------------------
    # Uebergabeparameter : Filename, ADSM-Kennwort
    # Uebergabeparameter : Filename, ADSM-Kennwort
    # Funktion           : Sichert File nach ADSM (incremental backup)
    # Pruefung           : ADSM-Output wird nach "Successful incremental backup" gescannt.
    #                      gibt "0" zurück, wenn alles ok.
    #                      gibt "1" und $ErrTxt zurück, wenn Problem.
    # -----------------------------------------------------------------------------------
    my ($File, $Geheim, $Trash)=@_;
    my ($File, $Geheim, $Trash)=@_;
    # Das "&" am Ende des folgenden Befehls ist erforderlich, um interaktive Abfragen durch
    # den ADSM-Client zu unterbinden. 
    my $GesichertOutput=`dsmc incremental -password=$Geheim $File 2>&1 &`; 
    # fuer Test: my $GesichertOutput=`cat increm.txt.orig`;
    # fuer Test: print "-- KEIN ECHTER VERSUCH! ---\n";
    $ErrTxt=`echo \"$GesichertOutput\" | grep \"^ANS\"`;
    my $ErrGesichert=`echo \"$GesichertOutput\" | grep \"Successful incremental backup\" > /dev/null && echo 0 || echo 1` ;
    $ErrGesichert=~ s/\n//;
    return $ErrGesichert;
    } # ENDE sub

# ------------------------------------------------------------
#  MAIN
# ------------------------------------------------------------
# Parametersetzung
# -----------------
@ARGV==1 or die "USAGE: move_to_adsm.pl <FILENAME>\n";
$ParamFile=$ARGV[0];
$Geheim='osiris1';
$ENV{PATH}="/bin:/usr/bin:/usr/local/bin";

# --- Pruefe Existenz des Files
# --------------------------------
unless (-f $ParamFile) {print "Datei $ParamFile existiert nicht.\n"; exit 1;}
   
# --- Pruefe ob es das File schon gepackt ist (Endung .gz oder .tgz),
#     oder ob es eine gepackte Version bereits gibt.
#     Sichere eine bereits vorhandene gepackte Datei und lösche sie.
#     Erstelle eine neue gepackte Version des Files.
# -------------------------------------------------------------------
   if ($ParamFile =~ /\.gz$/) 
     {
      print "Datei $ParamFile hat bereits Endung .gz - wird nicht gepackt.\n";
      $ZipFile=$ParamFile;
     } 
   elsif ($ParamFile =~ /\.tgz$/) 
     {
      print "Datei $ParamFile hat bereits Endung .tgz - wird nicht gepackt.\n";
      $ZipFile=$ParamFile;
     } 
   else
     {
      $ZipFile = $ParamFile.".gz"; 
      if (-f $ZipFile)
        { 
          # --- Wenn eine Datei.gz vorhanden, sichere sie nach ADSM.
          #     Wenn sichern ok, loesche alte Zip-Datei. 

          print "Sichere bereits vorhandenes $ZipFile nach ADSM ... \n";
          $Err=&SichernNachADSM($ZipFile, $Geheim);
          if ($Err ne 0 ) { 
             print "Bereits vorhandene Datei $ZipFile konnte nicht gesichert werden.\nADSM-Fehler: $ErrTxt";
             exit 21;
          }
          print "Ok.\n";

          $Err2=0;
          unlink($ZipFile) or $Err2=1;
          if ($Err2 == 1) {
             print "Bereits vorhandene Datei $ZipFile konnte nicht gelöscht werden.\n";
             exit 41;
          }
        }

      # --- Packe File
      `gzip $ParamFile`;
      $Err=$?;
      if ($Err ne 0 )
        {
         print "Datei $ParamFile konnten nicht gepackt werden. Errcode: $Err\n";
         exit 3;
         }
     }

# --- Sichere gepacktes File nach ADSM
# --------------------------------------
 print "Sichere $ZipFile nach ADSM ... \n";
 $Err=&SichernNachADSM($ZipFile, $Geheim);
 if ($Err == 0) 
  { print "Ok.\n";
    $Err2=0;
    unlink($ZipFile) or $Err2=1;
    if ($Err2 == 1) {
       print "$ZipFile konnte nicht gelöscht werden.\n";
       exit 42;
    }
  }
 else 
  { print "Sichern fehlgeschlagen.\nADSM-Fehlermeldung: $ErrTxt\n";
    exit 22;
  }

# ----- ENDE -----


--------------D842776F866FBF6D10A4769F--
=======================================================================