Benutzer:Kirmse/delixs-groupdel

Aus Delixs
Version vom 15. Juni 2009, 06:57 Uhr von Kirmse (Diskussion | Beiträge) (Script zum Löschen von Usern aus Delixs-Gruppen)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

delixs-groupdel

  • Dieses Script dient dazu, User (Lehrer) aus einer der Delixs-Gruppen hadmin, cadmin, tadmin, fachl, material, online und internet zu löschen.
  • Parameter: -help oder -h, -user oder -u, -group oder -g
  • Aufruf: delixs-groupdel -g hadmin -u mmustermann


das Script

<source lang="perl">

  1. !/usr/bin/perl

use warnings; use strict;

use Net::LDAP; use Getopt::Long;

my ($ldap, $ldap_base, $entry, $pass, $mesg, $member, @members,

   $group, $anzahl, @groups);

@groups = qw(hadmin cadmin tadmin fachl material online internet);

  1. Initialisieren der Variablen fuer die Parameter

$member = ; $group = ;

  1. wir holen uns zuerst die Parameter,
  2. falls --help, dann Ausgabe der Hilfe (siehe &help) und beenden

GetOptions('user=s' => \$member,

          'group=s'=> \$group,
          'help'   => \&help);
  1. Wenn kein Parameter -user uebergeben wurde, dann Abbruch

if ($member eq ) {

 die "Abbruch: es wurde kein Loginname uebergeben!\n";

}

  1. Wenn kein Parameter -g oder --group uebergeben wurde, dann Abbruch

if ($group eq ) {

 die "Abbruch: es wurde keine Gruppe uebergeben!\n";

}

  1. Der Parameter -g muss in @groups aufgelistet sein

$anzahl = grep /^$group$/, @groups; if ( $anzahl == 0) {

 die "Abbruch: $group ist keine Delixs-Gruppe!\n"; 

}

  1. 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";

}

  1. 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;

  1. 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;

  1. 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";
  1. Wenn der uebergebene Parameter kein User ist, dann Abbruch

$mesg = $ldap->search(base => "ou=people,ou=accounts,$ldap_base",

                     filter => "uid=$member",
                     attrs  => ['uid', 'gidNumber'] );
  1. wenn Fehlercode, dann das Script mit Fehlermeldung sterben lassen

$mesg->code and die $mesg->error;

  1. wir suchen in der Gruppe, ob es schon einen Eintrag fuer $member gibt

$mesg = $ldap->search(base => "cn=$group,ou=groups,$ldap_base",

                     filter => "cn=$group",
                     attrs  => ['memberUid'] );

$entry = ($mesg->entries)[0]; # es ist nur ein Element in der Liste @members = $entry->get_value('memberUid'); $anzahl = grep /^$member$/, @members; if ( $anzahl == 0) {

 die "Abbruch: $member kann nicht geloescht werden, denn $member ist nicht in $group!\n"; 

}

  1. wir loeschen von dem Entry einen Eintrag von memberUid

$mesg = $ldap->modify( "cn=$group,ou=groups,$ldap_base",

                       delete => { memberUid => $member } );
  1. wenn Fehlercode, dann das Script mit Fehlermeldung sterben lassen

$mesg->code and die $mesg->error;

  1. wir trennen uns vom LDAP

$ldap->unbind;

  1. Ausgabe auf der Konsole (Rueckmeldung)

print "User $member aus der Gruppe $group geloescht.\n";


                                      1. Programm-Ende #####################################
  1. Wenn Parameter -h uebergeben wurde, dann Hilfe ausgegeben und beenden

sub help {

  # hier den Text ausgeben
  exit (0);

}


__END__

</source>