FAQ:Arktur4/LDAP als Thunderbird-Adressbuch: Unterschied zwischen den Versionen

Aus Delixs
Zur Navigation springen Zur Suche springen
(→‎Allgemeines: Schreibfehler)
 
(Formatierung des Quelltextes verbessert)
Zeile 8: Zeile 8:
* Bearbeiten – Hinzufügen
* Bearbeiten – Hinzufügen
[[Bild:Thunderbird-LDAP_Tab_Allgemein.jpg]]
[[Bild:Thunderbird-LDAP_Tab_Allgemein.jpg]]
[[Bild:Thunderbird-LDAP_Tab_Erweitert.jpg]]
[[Bild:Thunderbird-LDAP_Tab_Erweitert.jpg]]


Zeile 19: Zeile 20:


  #!/usr/bin/perl -w
  #!/usr/bin/perl -w
  use strict;
  use strict;
  use Net::LDAP;
  use Net::LDAP;
  my ($ldap, $ldap_base, $pass, $entry, $value, $domain, $mesg, $temp,  
$mailadress);  
  my ($ldap, $ldap_base, $pass, $entry, $value, $domain, $mesg, $temp, $mailadress);  
  # wir holen uns die Such-Basis ($ldap_base) aus der ldap.conf
   
<font color="#C0C0C0"># wir holen uns die Such-Basis ($ldap_base) aus der ldap.conf</font>
  open DATEI, '<', '/etc/ldap.conf' or die "konnte ldap.conf nicht oeffnen, $!\n";
  open DATEI, '<', '/etc/ldap.conf' or die "konnte ldap.conf nicht oeffnen, $!\n";
  while (my $zeile = <DATEI>) {
  while (my $zeile = <DATEI>) {
Zeile 32: Zeile 35:
  }
  }
  close DATEI;
  close DATEI;
  # da wir die Mail-Adresse in den LDAP schreiben, brauchen wir noch das Passwort
   
  open DATEI, '<', '/etc/ldap.secret' or die "konnte ldap.secret nicht oeffnen,  
<font color="#C0C0C0"># da wir die Mail-Adresse in den LDAP schreiben, brauchen wir noch das Passwort</font>
$!\n";
  open DATEI, '<', '/etc/ldap.secret' or die "konnte ldap.secret nicht oeffnen, $!\n";
  $pass = <DATEI>;
  $pass = <DATEI>;
  chomp($pass);
  chomp($pass);
  close DATEI;
  close DATEI;
  # wir verbinden uns mit dem LDAP
   
<font color="#C0C0C0"># wir verbinden uns mit dem LDAP</font>
  $ldap = Net::LDAP->new('127.0.0.1', version => 3) or die "$@";
  $ldap = Net::LDAP->new('127.0.0.1', version => 3) or die "$@";
  $ldap->bind( dn => "cn=admin, $ldap_base", password => $pass)
  $ldap->bind( dn => "cn=admin, $ldap_base", password => $pass)
   or die "konnte mich nicht mit dem Server verbinden";  
   or die "konnte mich nicht mit dem Server verbinden";  
  # wir holen uns den Domainname aus 'dhcpOption' von 'cn=DHCP Service Config'
   
<font color="#C0C0C0"># wir holen uns den Domainname aus 'dhcpOption' von 'cn=DHCP Service Config'</font>
  $mesg = $ldap->search(base  => "cn=DHCP Service Config,o=DHCP, $ldap_base",
  $mesg = $ldap->search(base  => "cn=DHCP Service Config,o=DHCP, $ldap_base",
                       filter => "dhcpOption=*",
                       filter => "dhcpOption=*",
Zeile 50: Zeile 55:
  $value = $entry->get_value( "dhcpOption" );
  $value = $entry->get_value( "dhcpOption" );
  ($domain) = $value =~ /^\s*domain-name\s*"([^"]*)"$/;  
  ($domain) = $value =~ /^\s*domain-name\s*"([^"]*)"$/;  
  # wir holen uns von den Usern die uid (= Login) und den Eintrag für 'mail'
   
<font color="#C0C0C0"># wir holen uns von den Usern die uid (= Login) und den Eintrag für 'mail'</font>
  $mesg = $ldap->search(base  => "o=SCHULE, $ldap_base",
  $mesg = $ldap->search(base  => "o=SCHULE, $ldap_base",
                       filter => "(|(gidNumber=101)(gidNumber=102))",
                       filter => "(|(gidNumber=101)(gidNumber=102))",
                       attrs  => ['uid', 'mail'] );
                       attrs  => ['uid', 'mail'] );
  $mesg->code and die $mesg->error;  
  $mesg->code and die $mesg->error;  
  # wenn Value fuer 'mail' nicht vorhanden, dann erstellen und in LDAP schieben
   
<font color="#C0C0C0"># wenn Value fuer 'mail' nicht vorhanden, dann erstellen und in LDAP schieben</font>
  foreach my $entry ($mesg->entries) {
  foreach my $entry ($mesg->entries) {
   $temp = $entry->get_value('mail');
   $temp = $entry->get_value('mail');
   if ( !defined( $temp ) or $temp eq '' ) {
   if ( !defined( $temp ) or $temp eq &quot;&quot;) {
     $mailadress = $entry->get_value('uid') . '@' . $domain;
     $mailadress = $entry->get_value('uid') . '@' . $domain;
     $ldap->modify( $entry->dn, add => { mail => $mailadress } );
     $ldap->modify( $entry->dn, add => { mail => $mailadress } );
   }
   }
  }
  }
  # wir trennen uns vom LDAP
   
<font color="#C0C0C0"># wir trennen uns vom LDAP</font>
  $ldap->unbind;
  $ldap->unbind;



Version vom 19. November 2007, 14:04 Uhr

Allgemeines

In Thunderbird V2.0.0.6 kann der LDAP als Adressbuch verwendet werden, so dass die anderen „Arkturianer“ nicht von Hand ins eigene Adressbuch eingegeben werden müssen. Diese Notizen fassen Ideen von Harry Jede, Thorsten Strusch, Hans-Dietrich Kirmse und Uwe Schoffer zusammen.

Einstellungen in Thunderbird

Thunderbird - Einstellungen

  • Extras – Einstellungen – Verfassen – Adressieren
  • LDAP-Verzeichnisserver = ja
  • Bearbeiten – Hinzufügen

Thunderbird - Konten

  • Extras – Konten – user@..... – Verfassen&Adressieren – Adressieren
  • Einen anderen LDAP-Verzeichnisserver verwenden = Arktur-LDAP auswählen
  • Thunderbird neu starten.

Ergänzungen auf Arktur

Thunderbird überträgt bis jetzt nur leere Textfelder, da die entsprechenden Felder im LDAP noch leer sind. Am einfachsten lässt sich das mit folgendem Skript korrigieren.

#!/usr/bin/perl -w

use strict;
use Net::LDAP;

my ($ldap, $ldap_base, $pass, $entry, $value, $domain, $mesg, $temp, $mailadress); 

# wir holen uns die Such-Basis ($ldap_base) aus der ldap.conf
open DATEI, '<', '/etc/ldap.conf' or die "konnte ldap.conf nicht oeffnen, $!\n";
while (my $zeile = <DATEI>) {
  if ($zeile =~ m/^\s*base\s+(\w.*\w)\s*$/) {
    $ldap_base = $1;
    last;
  }
}
close DATEI;

# da wir die Mail-Adresse in den LDAP schreiben, brauchen wir noch das Passwort
open DATEI, '<', '/etc/ldap.secret' or die "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 "$@";
$ldap->bind( dn => "cn=admin, $ldap_base", password => $pass)
  or die "konnte mich nicht mit dem Server verbinden"; 

# wir holen uns den Domainname aus 'dhcpOption' von 'cn=DHCP Service Config'
$mesg = $ldap->search(base   => "cn=DHCP Service Config,o=DHCP, $ldap_base",
                     filter => "dhcpOption=*",
                     attrs  => "dhcpOption",
                     scope  => "base" );
$entry = $mesg->shift_entry;
$value = $entry->get_value( "dhcpOption" );
($domain) = $value =~ /^\s*domain-name\s*"([^"]*)"$/; 

# wir holen uns von den Usern die uid (= Login) und den Eintrag für 'mail'
$mesg = $ldap->search(base   => "o=SCHULE, $ldap_base",
                      filter => "(|(gidNumber=101)(gidNumber=102))",
                      attrs  => ['uid', 'mail'] );
$mesg->code and die $mesg->error; 

# wenn Value fuer 'mail' nicht vorhanden, dann erstellen und in LDAP schieben
foreach my $entry ($mesg->entries) {
  $temp = $entry->get_value('mail');
  if ( !defined( $temp ) or $temp eq "") {
    $mailadress = $entry->get_value('uid') . '@' . $domain;
    $ldap->modify( $entry->dn, add => { mail => $mailadress } );
  }
}

# wir trennen uns vom LDAP
$ldap->unbind;
  • Auf dem T:-Laufwerk Datei erstellen und mit UNIX-Umbrüchen abspeichern.
  • Als root auf der Konsole z.B. nach /root/tools/ldap verschieben und Rechte ggf. anpassen
chown root:root /root/tools/ldap/email-in-ldap
chmod 750 /root/tools/ldap/email-in-ldap
  • Ein Mal von Hand starten, dann sind alle aktuellen User verfügbar
  • Damit zukünftige User ebenfalls verfügbar sind, ggf. regelmäßige Ausführung per crontab einrichten.
crontab –u root –e
30 8,13 * * * /root/tools/ldap/email-in-ldap > /dev/null
  • Um den Vorschlag mit job.TAG.mailaddress umzusetzen, kenne ich mich zu wenig aus.

Nutzungshinweise

  • Falls das Kontaktefenster nicht sichtbar ist, über Ansicht – Kontakte-Sidebar einblenden
  • Adressbuch = Arktur-LDAP
  • Bei Suche nach muss „* *“ (Stern Leerzeichen Stern, ohne Anführungszeichen) eingegeben werden, damit alle Namen aufgelistet werden.
  • Per Drag-And-Drop oder über die „>> AN“- und „>>CC“-Buttons in das Adressfeld übertragen.