bolug bonner linux user group
news about wissen files archive hilfe suchen  

 

archive :: SchAN-User

druckfassung

SchAN-User

Re: [Schan-user] quota-logonmessage (vistein)

To: Schulen ans Netz - Anwender <schan-user@xxxxxxxxxxxxxxxxx>
Subject: Re: [Schan-user] quota-logonmessage (vistein)
From: Hans-Dietrich Kirmse <hd.kirmse@xxxxxx>
Date: Mon, 31 May 2004 19:21:23 +0200
Hallo,

es gab mal eine Diskussion wegen Problemen mit den Quotas. Herausgekommen
war ein "Konzept", mit denen man "alle" Quota-Probleme in den Griff bekommen 
sollte. Da ich dieses Konzept nach und nach umsetzen wollte, hatte ich 
ebenso ein solches Script in Angriff genommen. Dieses ist aber noch nicht 
auf Arktur getestet, geschweige denn im Produktiveinsatz - will es aber 
den eventuell Interessierten nicht vorenthalten und bitte jetzt schon um 
Entschuldigung für die lange Mail und für eine Mail, die eigentlich in die 
schan-developer gehört. Aber ich denke, der Thread erlaubt durchaus aufzuzeigen,
dass an alternativen Lösungen gearbeitet wird.


Sven Hansen schrieb:
> 
    :
> >
> > Wenn ich das richtig sehe: Erst wird eine Datei /var/log/quotaout
> > erstellt, und zwar (vereinfacht) als Ausgabe eines "grep" in den letzten
> > Zeilen der Mails-Spool-Datei des Admins (hier kuk), an den müssen
> > natürlich die root-Mails weitergeleitet werden. Diese quotaout wird dann
> > als sysmess1.txt in das jeweilige Home-Verzeichnis kopiert und
> > anschließend gelöscht.
> 
> Hallo,
> ich lese das script so, dass die Datei sysmess1.txt bereits existiert.
> Sie wurde also vorher erstellt. Das ist ja auch sinnvoll, schließlich
> sind personalisierte quota-Warnungen doch zuviel des Luxus.

wenn man ein Script hat, welches personalisiert arbeitet, warum soll das 
Luxus sein? einfaches Beispiel:

 
> Es wird die quotaout eingelesen und für jeden gefundenen Namen die
> sysmessage in das Home-Verzeichnis geschrieben, wo sie dann das
> logon-script vorfindet und anzeigt.
> 
> Also:
> # vi /root/bin/sysmess1.txt
> Hallo, du Pfeife!
> Du solltest DRINGEND Dateien löschen. Sonst lösche ich dich!
> Dein Systemadministrator
> "ESC:wq"

ein Schüler, der das Softlimit gerade mal um 10 kByte überschritten hat
sollte nicht so behandelt werden. Ein Schüler dessen  Grace period abgelaufen
ist, hat solches verdient -> irgendwie drängt sich personalisieren auf - oder?


leider habe ich momentan noch einen Packen schriftlicher Abiprüfungen (Ma)
zu korrigieren, deshalb kann ich der Programmierung derzeit keine hohe
Priorität zukommen lassen.

Aber vielleicht können andere mal testen und berichten(?).
dieses Script ist so programmiert, dass es mit dem repquota von Arktur 3.3 
genauso wie mit der Version von Version 3.5 zurecht kommen sollte.

An Rüdiger: wie funktioniert das mit den 30 Sekunden mit dem Programm von
Michael?  - dass habe ich irgendwie noch nicht mitbekommen/geschnallt.

so wie ich das verstanden habe, braucht doch auch dieses 
"if exist u:\sysmess1.txt" nicht verwendet zu werden, die Überprüfung macht
doch m.E. das Programm von Michael. Wenn nichts da ist, verabschiedet es sich
doch sofort selbst. Wäre für mein Script wichtig, weil es bei mir ja 2 
verschiedene Nachrichten geben kann.

An Michael: läßt sich eigentlich auch eine andere Schrift (Schreibmaschinen-
schrift) wegen der Formatierung einstellen? Irgendwie wäre es nach meinem
Geschmack dann etwas schöner.



~~~~~~~~~~~~ % schnipp % 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


#!/usr/bin/perl -w

#
# Hinweise zur Nutzung und Copyright erhalten Sie mit "perldoc quota2.pl".
# Abbruch/Ende von perldoc mit q (wie "quit")
#

# ------------- Konfigurationsbereich ---------------------------------------

# standardmaessig werden beide Nachrichten erstellt. Sie koennen hier
# angeben, welche der beiden moeglichen Nachrichten erstellt werden sollen.
# wenn Sie die betreffende Nachricht nicht haben wollen, dann setzen Sie
# die Variable auf 0
$erwuenschtNachricht1 = 1;
$erwuenschtNachricht2 = 1;


# hier kann die erste Nachricht modifiziert werden. Alles zwischen der
# Zeile "$n1 = <<message1;" und der Zeile "message1" ist reines ASCII
# und kann nach eigenem Gutduenken geaendert werden. Beachten Sie folgendes:
# Es wird hier davon ausgegangen, dass mit dem Programm von Michael Vistein
# die Message angezeigt wird. Sonst muessen Zeilenumbrueche für Windows sein.
#
$n1 = <<message1;

------------ Achtung ------------

Für das Spoolverzeichnis Ihrer E-Mails auf dem Server ist das Softlimit 
überschritten. Holen
Sie bitte umgehend Ihre Mails ab.

HD. Kirmse (Admin)

message1


# hier kann die zweite Nachricht modifiziert werden. Alles zwischen der
# Zeile "$n2 = <<message2;" und der Zeile "message2" ist reines ASCII
# und kann nach eigenem Gutduenken geaendert werden. Beachten Sie folgendes:
# Die Platzhalter %anzahldateien%, %speicherplatz%, %softlimit1%,
# %softlimit2%, %quotafrist% werden durch die aktuellen Werte des Users
# ersetzt.
#
$n2 = <<message2;


------------ Achtung ------------

Ihr Speicherplatz ist durch %anzahldateien% Dateien mit %speicherplatz% kB 
belegt. Damit haben
Sie das Softlimit von %softlimit1% Dateien und %softlimit2% kByte überschritten.

Ihre Quotafrist beträgt: %quotafrist%.

Löschen Sie bitte umgehend nicht benötigte Dateien, denn nach Ablauf der 
Quotafrist können Sie
dann keine Dateien mehr auf dem Server speichern.

HD. Kirmse (Admin)

message2



# ------------- Programm ----------------------------------------------


@daten = &holeQuotaDaten;

$tabelle = 1;
# fuer jedes Element von @daten
foreach $element (@daten) {

  # wenn Tabelle1
  if ($tabelle == 1) {

    # wenn Datenzeile -> @liste1
    if ($element =~ m/^\w+\s*.?\+/i) { push @liste1, $element }

    # wenn Leerzeile  -> naechste Tabelle
    elsif ($element =~ m/^\s*$/i) { $tabelle = 2 }
  }

  # wenn Tabelle2
  if ($tabelle == 2) {

    # wenn Datenzeile -> @liste2
    if ($element =~ m/^\w+\s*.?\+/i) { push @liste2, $element }
  }
}

# wenn Nachricht1 erwuenscht ist
if ($erwuenschtNachricht1 == 1) {

  # fuer jede Zeile von @liste1
  foreach $zeile (@liste1) {

    # hole die UserDaten
    @userdat = undef;
    @userdat = &holeUserDaten($zeile);

    # erstelle mit diesen Daten die Nachricht1
    &erstelleNachricht1(@userdat);
  }
}

# wenn Nachricht2 erwuenscht ist
if ($erwuenschtNachricht2 == 1) {

  # fuer jede Zeile von @liste2
  foreach $zeile (@liste2) {

    # hole die UserDaten
    @userdat = undef;
    @userdat = &holeUserDaten($zeile);

    # erstelle mit diesen Daten die Nachricht2
    &erstelleNachricht2(@userdat);
  }
}


# ------------- Prozeduren --------------------------------------------


sub holeQuotaDaten
{
  @temp = undef;

  # wir holen uns die Daten "on the fly" mit repquota
  @temp = `/usr/sbin/repquota -avug`;

  # zum entwickeln (unter Windows) greifen wir auf eine Datei zurueck
  #open(DATEI,'<quota.txt')  or die ;
  #@temp = <DATEI>;
  #close (DATEI);

  return @temp;
}


sub holeUserDaten
{
  $z = $_[0];                           # z = eine Zeile von repquota

  $z =~ m/^                             # am Anfang
          (\w+)                         # mindestens ein Buchstabe (Login) $1
           \s*                          # keins oder mehrere Whitespace
          ([-|+])                       # ein + oder ein -                 $2
          ([-|+])                       # ein + oder ein -                 $3
           \s+                          # mindestens ein Whitespace
          (\d+)                         # mindestens eine Ziffern          $4
           \s+                          # mindestens ein Whitespace
          (\d+)                         # mindestens eine Ziffern          $5
           \s+                          # mindestens ein Whitespace
          (\d+)                         # mindestens eine Ziffern          $6
           \s+                          # mindestens ein Whitespace
          ([\w|:]*)                     # keins, mehrere Buchstaben, ":"   $7
           \s+                          # mindestens ein Whitespace
          (\d+)                         # mindestens eine Ziffern          $8
           \s+                          # mindestens ein Whitespace
          (\d+)                         # mindestens eine Ziffern          $9
           \s+                          # mindestens ein Whitespace
          (\d+)                         # mindestens eine Ziffern          $10
           \s+                          # mindestens ein Whitespace
          ([\w|:]*)                     # keins, mehrere Buchstaben, ":"   $11
                   /ix ;                # i = ignoriere Groß- / Kleinschreibung
                                        # x = Kommentare im reg. Ausdr. erlaubt

  @temp = '';                           # neu initialisieren = alles loeschen
  shift @temp;                          # jetzt ist die Liste leer

  push @temp, $1;                       # Login              -> $temp[0]
  push @temp, $4;                       # Speicherplatz      -> $temp[1]
  push @temp, $5;                       # Softlimit          -> $temp[2]
  push @temp, $6;                       # Hardlimit          -> $temp[3]
  push @temp, $7;                       # Grace Period       -> $temp[4]
  push @temp, $8;                       # Anzahl der Dateien -> $temp[5]
  push @temp, $9;                       # Softlimit          -> $temp[6]
  push @temp, $10;                      # Hardlimit          -> $temp[7]
  push @temp, $11;                      # Grace Period       -> $temp[8]

  return @temp;
}


sub erstelleNachricht1
{
  @dat  = @_ ;

  # zum Entwickeln (unter Windows) speicher ich im Ordner neu
  # $pfad = '>neu/sysmessage-'.$dat[0].'1.txt';

  # Auf Arktur 3.X verwenden wir den folgenen Pfad
  $pfad = '>home/'.$dat[0].'/sysmessage-quota1.txt';
  open(DATEI,$pfad) or die "Message konnte nicht geschrieben werden";
  print DATEI $n1;
  close (DATEI);
}


sub erstelleNachricht2
{
  my @dat  = @_ ;

  if ($dat[4] eq ''){ $dat[4] = '-'; };
  if ($dat[8] eq ''){ $dat[8] = '-'; };

  # wenn es keine Grace period gibt, dann soll auch deutlich gemacht werden
  # das es dafuer kein Problem gibt. Wir schreiben ein "-"
  $dat[9] = $dat[4].'/'.$dat[8];
  if ($dat[4] eq '-' and $dat[8] eq '-'){
    $dat[9] = 'keine Grace period';
  };
  if ($dat[4] eq 'none' or $dat[8] eq 'none'){
    $dat[9] = 'keine -> Account gesperrt';
  };

  $nachricht = $n2;


  # jetzt werden die Platzhalter durch die aktuellen Werte ersetzt
  $nachricht =~ s/%anzahldateien%/$dat[5]/i;
  $nachricht =~ s/%speicherplatz%/$dat[1]/i;
  $nachricht =~ s/%softlimit1%/$dat[6]/i;
  $nachricht =~ s/%softlimit2%/$dat[2]/i;
  $nachricht =~ s/%quotafrist%/$dat[9]/i;


  # zum Entwickeln (unter Windows) speicher ich im Ordner neu
  # $pfad = '>neu/sysmessage-'.$dat[0].'2.txt';

  # Auf Arktur 3.X verwenden wir den folgenen Pfad
  $pfad = '>home/'.$dat[0].'/sysmessage-quota2.txt';
  open(DATEI,$pfad) or die "Message konnte nicht geschrieben werden";
  print DATEI $nachricht;
  close (DATEI);
}


__END__


=head1 NAME

quota2.pl - erstellt Nachrichten der User, die Softlimit ueberschritten haben


=head1 SYNOPSIS

./quota2.pl


=head1 COPYRIGHT

Dieses Script unterliegt der GPL.


=head1 INSTALLATION

Diese Script sollte per Cronjob in der Nacht aufgerufen werden.


=head1 BESCHREIBUNG

Dieses Perlprogramm legt jedem User, bei dem Quotas gesetzt sind und
dessen Softlimit ueberschritten ist, eine Textnachricht ins Homeverzeichnis.

Die Nachrichten koennen ohne Perlkenntnisse leicht modifiziert werden.
Es stehen fuer diese Nachrichten verschiedene Platzhalter (Variablen)
zur Verfuegung.

Fuer die automatische Anzeige bei Anmelden des User empfiehlt es sich
(unter Windows) das Programm "LogonMessage" von Michael Vistein zu nutzen.


=head1 AUTOR

Hans-Dietrich Kirmse <hd.kirmse@xxxxxx>,
Lehrer am Erasmus-Reinhold-Gymnasium Saalfeld Thueringen


=cut

~~~~~~~~~~~~ % schnapp % 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


                                  /"\
Mit freundlichen Grüßen           \ / ASCII ribbon campaign
Hans-Dietrich                      X  against HTML mail 
                                  / \ and postings

_______________________________________________
schan-user mailing list
schan-user@xxxxxxxxxxxxxxxxx
http://www.heise.de/bin/newsletter/listinfo/schan-user

 

seitenanfang


 

news about wissen files archive hilfe suchen  
kontakt letzte änderung: 31.05.2004