Benutzer:Kirmse/delixs-usermod
delixs-usermod
- Dieses Script dient dazu, von einem User die Daten zu aktualisieren (Vorname, Nachname, Klasse).
- Aufruf: delixs-usermod --user <login> --name <neuer Nachname> --vorname <neuer Vorname> --class <neue Klasse>
- Hinweis: --user ist zwingend, es muss mindestens ein Parameter von --name oder --vorname angegeben werden, --class ist optional
das Script
<source lang="perl">
- !/usr/bin/perl
use warnings; use strict;
use Net::LDAP; use Getopt::Long;
my ($ldap, $ldap_base, $pass, $mesg, $entry, $user, $class, $klasse,
$name, $vorname, $temp, @temp);
- Initialisieren der Variablen fuer die Parameter
$user = ; $name = ; $vorname = ; $class = ;
- wir holen uns zuerst die Parameter,
- falls --help, dann Ausgabe der Hilfe (siehe &help) und beenden
GetOptions('user=s' => \$user,
'name=s' => \$name, 'vorname=s' => \$vorname, 'class=s' => \$class, 'help' => \&help);
- Wenn --user nicht uebergeben, dann Abbruch
if ($user eq ) {
die "Abbruch: es muss uebergeben, wessen Daten geaendert werden sollen!\n";
}
- Wenn weder --name noch --vorname uebergeben, dann auch Abbruch
if ($name eq and $vorname eq ) {
die "Abbruch: es wurden keine neuen Daten uebergeben!\n";
}
- Wenn wir keine root-Rechte haben, dann Abbruch
if ($> != 0) { # siehe $EFFECTIVE_USER_ID,$EUID
die "Abbruch: das Script muss mit root-Rechten ausgefuehrt werden!\n";
}
- wir holen uns die Such-Basis ($ldap_base) aus der ldap.conf
open DATEI, '<', '/etc/ldap/ldap.conf'
or die "Abbruch: konnte ldap.conf nicht oeffnen, $!\n";
while (my $zeile = <DATEI>) {
if ($zeile =~ m/^\s*base\s+(\w.*\w)\s*$/i) { $ldap_base = $1; last; }
} close DATEI;
- da wir (spaeter) in den LDAP schreiben wollen, brauchen wir noch das Passwort
open DATEI, '<', '/etc/ldap.secret'
or die "Abbruch: konnte ldap.secret nicht oeffnen, $!\n";
$pass = <DATEI>; chomp($pass); close DATEI;
- wir verbinden uns mit dem LDAP
$ldap = Net::LDAP->new('127.0.0.1', version => 3) or die "Abbruch: $@"; $ldap->bind( dn => "cn=admin, $ldap_base", password => $pass)
or die "Abbruch: konnte mich nicht mit dem LDAP verbinden";
$mesg = $ldap->search(base => "ou=people,ou=accounts,$ldap_base",
filter => "uid=$user", attrs => 'gecos');
- Wenn der User nicht gefunden wird dann Abbruch
if (scalar ($mesg->entries) == 0) {
die "Abbruch: Der User $user existiert nicht im LDAP!\n";
}
- jetzt werden die neuen Daten zusammengetragen
$entry = ($mesg->entries)[0]; ($temp, $klasse) = split /,/ , $entry->get_value('gecos');
- ($vname, $nname) = split /\s+/, $temp; # wir zerlegen den Name
@temp = split /\s+/, $temp; # wir zerlegen den Name
- wenn der Nachname und der Vorname nicht eindeutig zugeordnet werden kann
if (scalar @temp > 2) {
if ($name eq or $vorname eq ) { die "Abbruch: Da Vorname oder Nachname aus mehreren Woertern besteht, koennen die alten Werte nicht eindeutig zugeordnet werden. Geben Sie deshalb --name und --vorname an!\n"; }
}
- wenn kein Nachname uebergeben wurde, dann nehmen wir den alten Nachname
if ($name eq ) {
$name = $temp[1];
}
- Wenn kein Vorname uebergeben wurde, dann nehmen wir den alten Vorname
if ($vorname eq ) {
$vorname = $temp[0];
}
- wenn keine Klasse uebergeben wurde, dann nehmen wir die alte Klasse
if ($class eq ) {
$class = $klasse;
}
- wir bauen uns den String fuer GECOS zusammen
$temp = $vorname . ' ' . $name . ',' . $class;
- und tragen den in den LDAP ein
$mesg = $ldap->modify( $entry->dn,
replace => { 'gecos' => $temp } );
$mesg->code and die $mesg->error;
- wir trennen uns vom LDAP
$ldap->unbind;
- Rueckmeldung auf der Kommando-Zeile
print "Von User $user wurden die Daten aktualisiert!\n";
- Programm-Ende #####################################
- Wenn Parameter -h uebergeben wurde, dann Hilfe ausgegeben und beenden
sub help {
print "Hilfe muss noch erstellt werden.\n"; exit (0);
}
__END__
</source>