Benutzer:Kirmse/delixs-poollist

Aus Delixs
Zur Navigation springen Zur Suche springen

delixs-poollist

  • dieses Script listet alle DHCP-Pools für eine Netzwerkkarte auf
  • Parameter: --help oder -h, --tnetz oder -t
  • Aufruf: delixs-poollist -t 10.101.0.0

das Teilnetz muss normalerweise nicht angegeben werden. Voreinstellung ist '10.100.0.0'. Das Script wird also normalerweise ohne Parameter aufgerufen.


das Script

<source lang="perl">

  1. !/usr/bin/perl

use warnings; use strict;

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

  1. dieses Script listet alle DHCP-Pools für eine Netzwerkkarte auf
  2. standardmäßig wird hier als (Teil-)Netz 10.100.0.0. genommen. Das
  3. kann durch einen Parameter --tnetz bzw. -t geändert werden.

my ($ldap, $ldap_base, $entry, $mesg, $teilnetz, $vorgabe_teilnetz, $temp);

$vorgabe_teilnetz = '10.100.0.0';


  1. Initialisieren der Variablen fuer die Parameter

$teilnetz = ;

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

GetOptions('tnetz=s'=> \$teilnetz,

          'help'   => \&help);

  1. Wenn Parameter Teilnetz uebergeben, dann kontrollieren

unless ($teilnetz eq ) {

 # ob richtiges Format 
 unless ($teilnetz =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.0$/) {
   die "Abbruch: Das Teilnetz $teilnetz ist keine gueltige Angabe!\n"
 }

}

  1. Wenn der Parameter nicht uebergeben

else {

 # dann setzen wir das Teilnetz
 $teilnetz = $vorgabe_teilnetz;  

}


  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. wir verbinden uns mit dem LDAP

$ldap = Net::LDAP->new('127.0.0.1', version => 3) or die "Abbruch: $@"; $ldap->bind or die "Abbruch: konnte mich nicht mit dem LDAP verbinden";

  1. wir ueberpruefen, ob das Teilnetz im LDAP existiert

$mesg = $ldap->search(base => "cn=$teilnetz,cn=DHCP Config,$ldap_base",

                     filter => "cn=$teilnetz",
                     attrs  => 'dhcpNetMask' );
  1. wenn wir keinen Eintrag erhalten haben, dann Abbruch

if (scalar ($mesg->entries) == 0) {

 die "Abbruch: Das Teilnetz $teilnetz existiert nicht im LDAP!\n";

}

  1. wir holen uns von dem Teilnetz die angelegten DHCP-Pools

$mesg = $ldap->search(

         base   => "cn=$teilnetz,cn=DHCP Config,$ldap_base", 
         filter => 'objectClass=dhcpPool',
         attrs  => ['cn', 'dhcpRange'] );
  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

if (scalar $mesg->entries > 0) {

 foreach my $entry ($mesg->entries) {
   $temp  = $entry->get_value('cn'). ': ';
   $temp .= $entry->get_value('dhcpRange');
   print $temp, "\n";
 }

} else {

 print "Warnung: keinen DHCP-Pool im Teilnetz $teilnetz gefunden!\n";

}


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

sub help {

  print "Hilfe muss noch erstellt werden.\n";
  exit (0);

}


__END__

</source>