#!/usr/bin/perl -wT
use User::pwent;

# Path setzen, wegen Taint-Mode
$ENV{"PATH"} = "/bin:/usr/bin";

# Parameter holen...
my $action = shift;
my $login = shift;

# $login untainten
if (defined($login)) {
  $login =~ m/([\w\.-]+)/;
  $login = $1;
}


if (defined($action) && defined($login)) {
     if ($action eq "-passwd") { &print_passwd(); }
  elsif ($action eq "-locked") { &print_locked(); }
  elsif ($action eq "-groups") { &print_groups(); }
  elsif ($action eq "-change") { &print_change(); }
  elsif ($action eq "-quota")  { &print_quota();  }
}

print "fehlerhafte Argumente...\n";
print "user-status action login\n";
print "action: {-passwd|-locked|-groups|-change|-quota}\n";
exit 1;





sub print_passwd {
  my $user = getpwnam($login);
  if (crypt("passwort", $user->passwd) eq $user->passwd) {
    print $login;
  } else {
    print "---secure";
  }
  exit 0;
}

sub print_locked {
  my $user = getpwnam($login);
  if (substr($user->passwd, 0, 1) eq "!") {
    print $login;
  } else {
    print "---unlocked";
  }
  exit 0;
}

sub print_groups {
  my $groups = `id -nG $login`;
  print $groups;
  exit 0;
}

sub print_change {
  open(SHADOW, "</etc/shadow");
  my @data = <SHADOW>;
  close(SHADOW);
  my @user = grep(/$login/, @data);
  my $line = shift @user;
  my $age = (split(/:/, $line))[2];

  $age = $age * 24 * 60 * 60;
  my $day;
  my $mon;
  my $year;
  (undef, undef, undef, $day, $mon, $year) = localtime($age);
  $mon += 1;
  $year += 1900;

  if ($day < 10) { $day = "0$day"; }
  if ($mon < 10) { $mon = "0$mon"; }

  print "$day.$mon.$year";
  exit 0;
}

sub print_quota {
  my $ret = `quota -v $login`;
  $ret =~ tr/ //s;
  my @zeilen = split /\n/, $ret;
  my @quota = split / /, $zeilen[2];
  $quota[2] =~ m/(\d+)/;
  my $quota_used = $1;
  $quota_used = int($quota_used/1024);
  $quota[3] =~ m/(\d+)/;
  my $quota_limit = $1;
  $quota_limit = int($quota_limit/1024);

  print "$quota_used/$quota_limit MB";
  exit 0;
}
