Feature-Request und Lösung: sophomorix-check (Mail)

Hallo Rüdiger,
ich habe ein Feature-Request und dazu gleich eine? Lösung…

Folgendes:
Ich würde gerne die Lehrer mit einer durch sophomorix generierten Mailadresse (loginname@xxx.de) ausstatten. Das geht ja prima!
Aber: die „Students“ sollen die Mailadresse die im Samba-AD gespeichert ist, bzw. durch z.B. nextcloud geschrieben wird, behalten.
Das ist z.Z. nicht möglich, da du die Mailadresse bei einem sophomorix-check und sophomorix-update wieder auf den von dir generierten Wert zurücksetzt.

Lösungsvorschlag:
In der schools.conf wird im Abschnitt [role.student] der Wert MAILDOMAIN=NONE gesetzt
Jetzt wird eine Mailadresse „NONE“ erzeugt und in die AD geschrieben.

Wenn man jetzt folgende Änderungen (siehe unten) am sophomorix-check durchführt klapp (soweit ich getestet habe) alles: Änderungen an der Mailadresse in der Samba-AD werden bei einem check und update nicht überschrieben.
Was meinst du? Kannst du das einbauen?
Gruß
Bertold

Hier ein diff:

root@ad:~# diff sophomorix-check-original sophomorix-check-Altaner

1652c1652,1654
<     if ( ${$new_mail_ref} eq  ${$old_mail_ref} ){
---
> #Altaner  || ( ${$new_mail_ref} eq "NONE" ) ergänzt!
> #- damit bleiben die Mailadressen in der AD erhalten wenn in der school.conf die MAILDOMAIN=NONE gesetzt ist (z.B. in der Sektion [role.student]
>     if ( ( ${$new_mail_ref} eq  ${$old_mail_ref} ) || ( ${$new_mail_ref} eq "NONE" ) ){


1710,1711c1712,1723
<     my $mail=$login."@".
<         $sophomorix_config{'ROLES'}{$Match{'ACTION'}{$line_new}{'school'}}{$Match{'ACTION'}{$line_new}{'role'}}{'MAILDOMAIN'};
---
>
> #Altaner
> ##- Hier wird die Mail-Adresse zu "NONE" gesetzt wenn in der school.conf die MAILDOMAIN=NONE gesetzt ist (z.B. in der Sektion [role.student]
>     my $mail="";
>     if("NONE" eq $sophomorix_config{'ROLES'}{$Match{'ACTION'}{$line_new}{'school'}}{$Match{'ACTION'}{$line_new}{'role'}}{'MAILDOMAIN'}){
>       $mail="NONE";
>     } else{
>     $mail=$login."@".
>     $sophomorix_config{'ROLES'}{$Match{'ACTION'}{$line_new}{'school'}}{$Match{'ACTION'}{$line_new}{'role'}}{'MAILDOMAIN'};
>     }
> #Altaner ENDE
>

Hallo Bertold,
darf ich fragen, welchen Mail-Server du hierzu genommen hast? Ich habe es (bisher vergeblich) mit dem docker Container (GitHub - linuxmuster/linuxmuster-mail ) versucht – der läuft aber nicht ootb (v7) weil die docker-compose.yml gar nicht mit im Paket steckt … wenn es eine gute Alternative gibt, würde ich auch die nehmen.
Schöne Grüße,
Michael

Hallo Michael,
ich nehme für die Lehrer Belwue - den Dienst gibt es aber nur für Schulen in B-W.
Den Docker Container habe ich noch nicht probiert…
Eine docker-compose.yml ist aber im Paket drin…
https://github.com/linuxmuster/linuxmuster-mail/blob/master/share/templates/docker/docker-compose.yml
Vielleicht klappt das ja…
Gruß
Bertold

Hallo Bertold,
in [role.student] der Wert
MAILDOMAIN=

sollte das machen was du brauchst: maildomain automatisch generiert.

Willst du was anderes, dann eben MAILDOMAIN=xxx.de

Oder hab ich dich nicht richtig verstanden?

LG, Rüdiger

Hallo Bertold,
wenn man das Paket linuxmuster-mail per apt installiert (so ist es offiziell gedacht), landet diese Datei aber nicht im docker Verzeichnis. Ich habe aber (so wie du vorgeschlagen hast) genau diese Datei geholt und dorthin gepackt … allerdings stehen in der .yml-Datei Variablen wie z.B. @@servername@@.@@domainname@@, die – nach meinem Verständnis – von inuxmuster-mail.py -c docker-compose.yml gegen die richtigen Einträge ersetzt werden sollten – oder verstehe ich das falsch???
Das Script bricht jedoch ab, ohne genauer zu sagen warum … von daher komme ich da nicht weiter…

Schönen Gruß,
Michael

Hallo Rüdiger,
das wäre auch meine erste Wahl gewesen - leider funktioniert das (bei mir) nicht…
Wenn ich MAILDOMAIN=
also leer lasse wird die samba-Domäne als MAILDOMAIN genommen und sophomorix-check schreibt in sophomorix.update alles Students mit der samba-Domäne rein…

Dann habe ich halt mal sophomorix-check und SophomorixSambaAD.pm angeschaut…
…und für (mich) diese Lösung gefunden…

Gruß
Bertold

Das kommt wohl hier her: SophomorixSambaAD.pm Zeile 2013 ff:

    # calculate mail attribute, if not given as sub parameter
    if (not defined $mail){
        $mail = $login."\@".$root_dns;
        if ( exists $ref_sophomorix_config->{'ROLES'}{$school}{$role}{'MAILDOMAIN'}){
            if ($ref_sophomorix_config->{'ROLES'}{$school}{$role}{'MAILDOMAIN'} ne ""){
                $mail=$login."\@".$ref_sophomorix_config->{'ROLES'}{$school}{$role}{'MAILDOMAIN'};
            }
    	}
    }

In sophomorix-check Zeile 1650 wird AD_create_new_mail aufgerufen…

In Zeile 5222 ff. von SophomorixSambaAD.pm steht:

sub AD_create_new_mail {
        my ($sam,$ref_sophomorix_config,$role_file,$school_file) = @_;
        if (not defined $role_file){
            # existing user
            $role=$ref_AD_check->{'sAMAccountName'}{$sam}{'sophomorixRole'};
            $school=$ref_AD_check->{'sAMAccountName'}{$sam}{'sophomorixSchoolname'};
        } else {
            # called from sophomorix-check to look for updates:
            # use NEW role and NEW school
            $role=$role_file;
            $school=$school_file;
        }
        my $mail;
        if ($ref_sophomorix_config->{'ROLES'}{$school}{$role}{'MAILDOMAIN'} eq "NONE"){
            $mail="NONE";
        } else {
            $mail=$sam."@".$ref_sophomorix_config->{'ROLES'}{$school}{$role}{'MAILDOMAIN'};
        }
        return $mail;
    }

ah, du möchtest ein parameter, der den einmal veränderten Wert NICHT überschreibt?

Hallo Rüdiger,
(wahrscheinlich) genau!
sophomorix-check und sophomorix-update sollen die Mail-Adressen die in der Samba-AD gesetzt sind NICHT ändern - wenn in der schools.conf der MAILDOMAIN-Parameter (auf NONE) gesetzt ist.

Zumindest funktionieren meine (minimalen) Änderungen an sophomorix-check genau so.

Was hältst du davon?

Gruß
Bertold

Hallo Michael,
hm - dazu kann ich leider nichts sagen.
War nur eine Idee…

Good luck!

Gruß
Bertold

Hallo Rüdiger,
da ich seit dem 10.04.20 keine user mehr geändert habe ist mir das nicht aufgefallen, dass mein „Problem“ immer noch da ist…
Vielleicht ist es ja nur „mein“ Problem - wenn dem so ist habe ich damit kein Problem…
Vielleicht hilft es ja dem einen oder anderen der ebenfalls zentral in der AD seine Mail-Adressen gespeichert haben möchte die dann aber NICHT beim Aufruf von sophomorix-check/sophomorix-update überschrieben werden…
Hier der aktuelle Diff zur (meiner) Problemlösung:

root@ad:/usr/sbin# diff sophomorix-check sophomorix-check-orig-2020-04-10
    1612,1613c1612
    < #Altaner    if ( ${$new_mail_ref} eq  ${$old_mail_ref} ){
    <     if ( ( ${$new_mail_ref} eq  ${$old_mail_ref} ) || ( ${$new_mail_ref} eq "NONE" ) ){
    ---
    >     if ( ${$new_mail_ref} eq  ${$old_mail_ref} ){

Gruß
Bertold

Hallo,
ich springe hier mal auf und stelle zur Diskussion, grundsätzlich das Setzen der Mailadressen durch sophomorix-check anders zu handhaben.
Das Feature, dass Email-Adressen automatisch gesetzt werden, ist ja sehr gut gemeint. Allerdings muss man trotzdem oft manuell Hand anlegen, bspw. bei gleichen Nachnamen (wenn die Email-Adresse nicht vorname.nachename oä. ist) .Siehe auch hier.
Die manuellen Änderungen sind dann leider beim nächsten sophomorix-check (und sophomorix-add) wieder zunichte gemacht.
Ich würde mir wünschen, dass man das automatische Setzen der eMail-Adressen in sophomorix-check deaktivieren kann (um es nur dann ausführen zu können, wenn man es auch wirklich braucht). Bestenfalls über irgendwelche Häkchen in der Schulkonsole.

Gruß
Daniel

Hallo Daniel,
das sollte ja eigentlich so gehen wenn in der school.conf
folgendes steht:

[role.student]
...
        MAILDOMAIN=NONE

UND mein Patch von oben in die sophomorix-check eingepflegt wird…
Wir sind also fast am Ziel wenn Rüdiger das noch einbauen würde…
Mittels

sophomorix-user --user USERID --set-single-value-attribute mail --entry NEUER-WERT

kann dann die AD mit Mailadressen - z.B. aus der Schulverwaltung - gefüllt werden - und die bleiben dann auch so drin…

Gruß
Bertold

…aber nur um es explizit klarzustellen (vor lauter Kritik/Feature-Requests, etc…):
Rüdiger, du machst einen tollen Job! Hut ab! Das sophomorix läuft seit fast 20 Jahren (so lange schon…) stabil und erspart jedem Admin viel Arbeit!
Tolle Leistung!
Das gilt natürlich ebenso für alle anderen die linuxmuster am Leben halten!

Danke!

Gruß
Bertold

1 „Gefällt mir“

Hallo Bertold, danke für das Skript. Das ist eine gute Ergänzung. Wäre toll, wenn irgendwas in der Art integriert wird.

@jeffbeck

Hallo Rüdiger!

Schau dir das hier mal bitte an.

Beste Grüße

Thorsten

Hi @baltaner
Gibt es Fortschritte in Bezug auf den lmn-v7-docker-Container für eine schulweite eMail? Meine letzten Versuche waren nicht wirklich zielführend. Die Anbindung an den AD klappte zwar; nicht aber die Alias-Funktion beim Senden - zudem konnte ich keine eMail an ganze Klassen schicken, was meiner Meinung nach ein must-have-feature in diesem Zshg ist.
Warst du da erfolgreich?

@Supergamer und ich hatten das auch schon mal in diesem Beitrag diskutiert.

Schöne Grüße,
Michael

Hallo Michael,
leider habe ich mich mit dem docker-Container für die Mails nicht beschäftigt - sorry!

Gruß
Bertold

Hallo @baltaner,

mus ich hier noch was machen?

Prinipiell ist es so:
das single-value attribut bei user soll von sophomorix gemanaged werden
das Multi-Value attribut proxyAddresses
darf/soll vom user befüllt werden.

Das kann man auf Konsole mit sophomorix-user machen:

Updating the user configurable E-Mail address attribute proxyAddresses (multi-value):
  --user <user> --set-proxy-addresses <address1>,<address2>,...
  --user <user> --add-proxy-addresses <address>
  --user <user> --remove-proxy-addresses <address>

LG, Rüdiger

Hallo Rüdiger (@jeffbeck),
danke dass du dich darum kümmerst!
Ich möchte prinzipiell ein LDAP-Attribut welches ich zum speichern einer Mailadresse nutzen kann.
Ich dachte ich nehme ‚mail‘ - dann habe ich halt die Probleme da durch sophomorix-check ja selbst geänderte Werte in dem LDAP-Attribut ‚mail‘ überschrieben werden. Dazu habe ich ja für mich eine Lösung in dem ich sophomorix patche…
Wenn ich dich recht verstehe, sollte ich nicht dieses „single-value“ Attribut ändern - sondern ein neues (was es aber jetzt noch nicht gibt - oder?) nehmen - dieses von dir vorgeschlagene Multi-Value-Attribut „proxyAddresses“.
Richtig?
Wenn ja, kann dann dieses LDAP-Attribut dann von anderen Programmen (Moodle, Nextcloud, etc…) per LDAP ausgelesen werden wie das ‚mail‘-Attribut? Wenn ja, löst das mein Problem - dann mache ich das dann so!

Gruß
Bertold