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 (https://github.com/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