#!/usr/bin/perl -wuse warnings;
my $datafile = '/samba/daten.txt';
my $dev = "/dev/sda9";
#> sub routines
#> --------------------------------------------------------------------------
# Subroutine: lese Daten aus Datei und liefere Daten in einem Hash-of-Hash zurueck
sub read_data_to_hash {
my $filename = shift;
my %schueler = ();
# 3-argument-open ist sicherer; $! enthaelt die Systemfehlermeldung
open my $readh, '<', $filename or die "Datei konnte nicht geoeffnet werden\n";
# zeilenweise lesen
while ( my $line = <$readh> )
{
# am Tab splitten; nur in 5 Felder splitten
my ($zeile_name, $zeile_uid, $zeile_info, $zeile_speicher, $zeile_belegt ) = split /\t/, $line, 5;
# in hash eintragen
$schueler{$zeile_name} =
{
'uid' => $zeile_uid,
'info' => $zeile_info,
'speicher' => $zeile_speicher,
'belegt' => $zeile_belegt,
};
}
close $readh or die "Datei konnte nicht geschlossen werden\n";
return %schueler;
}
#> main script
#> --------------------------------------------------------------------------
# neu einzutragender schueler... (sollte optimiert werden)
my $name = $ARGV[0];
my $uid = getpwnam("$ARGV[0]");
my $default_info = 0;
my $default_speicher = 0;
my $default_belegt = 0;
if($uid)
{
# datei auslesen und Hash %schueler fuellen
my %schueler = read_data_to_hash( $datafile );
# wenn Schueler noch nicht existiert wird er am Dateiende angelegt
if ( !exists $schueler{$name} )
{
# schreiben daten ans Dateiende
open my $writeh, '>>', $datafile or die "Datei konnte nicht geoeffnet werden\n";
printf {$writeh} "%s\t%s\t%s\t%s\t%s\n", $name, $uid, $default_info, $default_speicher, $default_belegt
or die "Fehler beim Schreiben\n";
close $writeh or die "Datei konnte nicht geschlossen werden\n";
print "Zeige: Infos fuer Homes - Benutzer" . "\n";
}
# Die Quota-Informationen des Benutzers werden ermittelt und in die entsprechenen Variablen geschieben
#($bc,$bs,$bh,$bt,$ic,%is,%ih,$it) = Quota::query($dev,$uid) # $kind ???
my $bc = "95";
if($bc>"90")
{
$schueler{$name}{'speicher'} = 1;
print "Zeige: Homes-Laufwerk voll! Belegter Speicher: $bc Bytes" . "\n";
}
$schueler{$name}{'belegt'} = $bc;
open my $writeh, '>>', $datafile or die "Datei konnte nicht geoeffnet werden\n";
while ( my $line = <$writeh> )
{
# am Tab splitten; nur in 5 Felder splitten
my ($zeile_name, $zeile_info, $zeile_speicher, $zeile_belegt ) = split /\t/, $line, 5;
if($zeile_name=$name)
{
printf {$writeh} "%s\t%s\t%s\t%s\t%s", $name, $uid, $schueler{$name}{'info'}, $schueler{$name}{'speicher'}, $schueler{$name}{'belegt'}
or die "Fehler beim Schreiben\n";
}
}
close $writeh or die "Datei konnte nicht geschlossen werden\n";
}