Mailfile | Manager zu Editor...

  • Indem du mehrere DBs im Adminclient markierst und die ACL bearbeitest.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Selbstverständlich kann man das! Der Button, der mit 'Modify' beschriftet ist, macht -oh Wunder- genau das: modifizieren.


    Nachzulesen in der Hilfe unter "Editing entries in multiple ACLs"...

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

    • Offizieller Beitrag

    ... dann geht es nur per Script, welches den Besitzer der Mail-DB ermittelt und dann in der ACL den Eintrag für den Besitzer in den Rechten verändert.


    Gruß
    Dirk


    [size=x-small][color=CC0000]Bitte Themenpräfix beachten[/color][/size]

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • hm, im Grunde hast Du Recht, wäre schön gewesen.
    Leider tut diese Funktion nicht wirklich.
    Probiere mal bitte 2 Mailfiles und ändere den Owner von x nach Editor oder Manager.
    Du wirst sehen, das er es nur bei einem tut und auch nen Fehler anzeigt. Passiert zumindest bei meinem 8.0.1er Admin auf einem 7.0.2er Dominoserver.


    EDIT:


    Genau Taurec


    Hat da jemand ein Script für mich?

  • Ok, hab ich in der Tat missverstanden ... bin heute nicht wirklich gut drauf.


    Ein fertiges Script werde ich nicht posten aber zumindest genug, dass du es dir zusammenreimen kannst:
    mit der NotesDbDirectory-Klasse holst du dir alle Datenbanken und prüfst mit Left ab, ob der FileName "mail" enthält (ggf. auspassen bei Verzeichnisse wie "mailin"). Wenn ja, kommst du mit GetProfileDocument ans Kalenderprofil und das Feld "Owner". Mit GetEntry der NotesACL-Klasse suchst du dir den Namen, welchen du dann mit GrantAccess der selben Klasse auf Editor zurückstufst.


    Die kursiv hervorgehobenen Begriffe sind bei Bedarf in der Hilfe nachzuschlagen. Anahnd der jeweiligen Beispiele wird deutlich, was wie zu tun ist.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Falls es mal einer braucht, hier ist ein Code.


    Ich habe den Code komplett im Designer 8.0.1 direkt unter "Initialize" eingegeben. Der Designer splittet ihn selbstständig auf.




    Zwei Tests liefen erfolgreich, der Zugriffslevel der Mailfile Eigentümer wurde von xxx auf Editor gesetzt.


    Sub Initialize
    Dim session As Notessession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim dbmail As NotesDatabase
    Dim owner As Variant
    Dim strmailfile As String
    Dim cserver As String
    Dim dbdir As NotesDatabase
    Dim docu As NotesDocument
    Dim searchString As String
    Dim cu As Integer
    Dim dcu As NotesDocumentCollection
    Dim strmailfiles As String
    Dim strmailserver As String
    Dim x As Integer


    Set session = New NotesSession
    Set db = session.CurrentDatabase


    cserver = db.Server 'Get the servername of the server where this database is located.
    Set dbdir = session.GetDatabase(cserver ,"names.nsf") 'Use the Domino Directory (NAB) on the current server.
    searchString = |Form = "Person"|
    Set dcu = dbdir.Search(searchString, Nothing, 0)
    cu = dcu.Count
    Redim varEntries(cu, 2) 'Update the array varEntries with the right amount of records.
    Set docu = dcu.GetFirstDocument


    While Not (docu Is Nothing) 'Populate the array with data from the person documents.
    varEntries(x,0) = docu.mailfile(0)
    strmailfiles = strmailfiles + |"| + Strright(docu.mailfile(0), "\") + |":|
    varEntries(x,1) = docu.FullName
    varEntries(x,2) = docu.mailserver(0)
    Set docu = dcu.GetNextDocument(docu)
    x = x + 1
    Wend
    strmailfiles = Left(strmailfiles,Len(strmailfiles)-1)


    For x = 0 To cu-1
    strmailfile = varEntries(x,0)
    strmailserver = varEntries(x,2)
    owner = varEntries(x,1)
    If owner(0) <> session.UserName Then
    Set dbmail = session.GetDatabase(strmailserver, strmailfile)
    Call CheckAcl(dbmail, owner(0))
    End If
    Next


    End Sub





    Sub CheckAcl(dbmail As NotesDatabase, strusr As Variant)
    Dim acl As NotesACL
    Dim entry As NotesACLEntry


    If Not (dbmail.IsOpen) Then
    Messagebox "Could not open mailfile for " & strusr,,"Warning"
    Exit Sub
    End If


    Set acl = dbmail.ACL
    Set entry = acl.GetEntry(strusr)
    If entry Is Nothing Then
    Messagebox "No acl entry for " & strusr & " present in " & dbmail.Title,,"Warning"
    Else
    entry.UserType = ACLTYPE_PERSON
    entry.Level = ACLLEVEL_EDITOR
    entry.CanDeleteDocuments = True
    entry.CanCreateLSOrJavaAgent = True
    entry.CanReplicateOrCopyDocuments = True
    acl.AdministrationServer = "yourserver/here"
    Call acl.Save
    End If
    End Sub

  • Das ist aber ein extrem schräger Code, den Du da gefunden hast.
    Beispiel:
    varEntries(x,1) = docu.FullName


    FullName ist in der Regel ein Array mit mehreren Einträgen. Der erste Wert darin *kann* der richtige sein, muss es aber nicht.
    Richtig wäre:
    varEntries(x,1) = docu.Owner (0)


    Ein Array of Variants zu deklarieren, ist sowieso ... unsauber.


    Von derartigen Stellen gibt es im Code noch mehr. Viel Spass damit ...


    Bernhard

  • Zitat


    msomst schrieb:
    ... leider kann ich das nicht beurteilen und bin erstmal zufrieden.


    Das ist eben die grosse Gefahr. Du kannst "black boxes" verwenden, die Du nicht verstehst und gar nicht verstehen kannst - wenn der Anbieter dafür haftet und Dir im Fall der Fälle dann auch zur Seite steht.
    Aber Code zu verwenden, den man irgendwo "findet", aber nicht versteht ... Das kann böse enden.
    Und ja, natürlich habe ich etwas "sauberes", und ich bin da mit absoluter Garantie nicht der einzige. Nur: Ich garantiere dann auch dafür, und ich habe meine Zeit da hinein gesteckt. Und ich muss (und darf :) meine Familie damit ernähren. Ergo kosten meine Lösungen immer Geld. Tipps und Tricks, Hinweise in die richtige Richtung etc. gibt es kostenlos - dafür bin ich ja in Foren unterwegs, um zu helfen. Nur: Ich mache nicht und niemals die Arbeit anderer Leute. Was wiederum Prinzip der Foren ist.


    Auf den ersten Blick (und tiefer mag ich in diesen unschönen Code nicht hineinschauen): Das schlimmste, was Dir passieren kann, ist das User nach wie vor Manager sind - auch wenn der Code gelaufen ist. Angezeigt wird Dir das Ergebnis ja nicht (was ich so niemals machen würde - das Ergebnis und eine Listung aller erfolgreichen und nicht erfolgreichen Fälle gebe ich prinzipiell aus).
    Dass Du jemanden ganz heraus kickst, kann ich nicht erkennen. Aber wie gesagt - nur auf den ersten Blick.


    Bernhard

  • n'Abend!


    Ich muss da auch gerade mal meinen Senf dazu geben. Zuerst: Bernhard ist da in Gänze Recht zu geben: Code zu verwenden, den man nicht versteht, ist zumindest mal mutig. Was wäre passiert, hätte es nicht geklappt? Wahrscheinlich hättest du den Code hier gepostet und wir hätten dann -in Unkenntnis deiner Umgebung- raten müssen, was nun schief läuft. Das kann eine ganze Menge sein.


    Zunächst einmal ist der Code nicht sonderlich performant. Es wird erst eine Suche anstatt einer Volltextsuche durchgeführt. Bei ein paar Dutzend oder einer kleinen 3-stelligen Anzahl an Usern mag das noch angehen, bei großen Umgebungen ist das das erste Problem. Dann werden sämtliche Dokumente abgegrast und die benötigten Informationen (Bernhard sprach den FullName bereits an) in ein Array (of Variants) geschrieben, welches dann schlussendlich dazu dient die DBs zu holen, um die ACLs umzubiegen. Bis auf den Teil mit der Suche übers Adressbuch, was eine durchaus sinnige Alternative zur NotesDbDirectory-Variante darstellt, ist das in sich schon mal Kohl. Weil, warum ein Array einmal füllen und einmal abarbeiten, wenn ich gleich im ersten Schritt alle Informationen habe?


    Dann verstehe ich nicht, warum die ACLs aller DBs umgebogen werden, bis auf die, die dem User gehört, der gerade den Agenten ausführt?


    Hinzu kommt, dass es durchaus möglich sein kann, dass es z.B. mehrere Admin-IDs gibt: eine zum Signieren der DBs (unter der ID laufen dann Agenten), eine fürs Mailjournaling, etc. Normal arbeitet man nicht mit den IDs, insofern ist es relativ egal, ob diese technische ID Manager oder Editor auf ihrem Mailfile ist. Aber unschön finde ich persönlich das dennoch. Ebenfalls kann es weitere technische IDs geben: einige werden sich noch an NotesPump erinnern. Vermutlich hat niemand mehr NotesPump, aber wir alle kennen "historisch gewachsene" Umgebungen. Weitere Alternativen sind denkbar.


    Das Error-/Success-Logging wurde ebenfalls erwähnt.


    Dann kann man durchaus darüber streiten, ob es Not tut, dass ein zum normalen User herabgestufter Anwender, tatsächlich LS- und Java-Agenten erstellen können muss. Klar, ist der Haken nicht gesetzt, landen die Agenten in der desktop.dsk. Aber genau da gehören die auch hin, sonst scheduled jemand das Ding auf 23:00 Uhr und schießt mir nachts meinen Server ab...


    Und schlussendlich: dieser Agent bedingt, dass bei mehreren Mailservern in der Umgebung jeder bei jedem anderen als Trusted Server gelistet ist. Normal hat man Mailcluster, vermutlich sind die Clusterpartner trusted, muss aber nicht und schon geht das Ding auf die Bretter. Dann habe ich in Umgebungen schon gesehen, dass z.B. Mitarbeiter externer Firmen im DD gelistet sind und auch der Server der externen Firma als Mailserver hinterlegt ist. Spätestens hier kann man davon ausgehen, dass kein Vertrauensverhältnis besteht. Heißt der User nun per Zufall "Alex Anders", geht mit hoher Wahrscheinlichkeit der Agent gleich beim ersten Versuch in die Knie. Ohne Errorlogging steht man im Niesel, um nicht zu sagen: im Regen.


    Der gesamte Code hat soviele flaws, dass ich jedem, der irgendwann einmal auf diesen Code stößt, ernsthaft abraten muss, den zu verwenden. Von den "Schönheitsfehlern" (Array of Variants) einmal abgesehen, sind da derartig viele logische Fehler drin, dass es bestenfalls als Anhaltspunkt für einen eigenen Agenten dienen kann. Von einem (am Besten noch: ungetesteten) Einsatz in einer Produktivumgebung kann nicht einmal ansatzweise die Rede sein!

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • "Rock wilder" - der Nickname passt wirklich. Gut gebrüllt, Löwe!
    Man könnte sich wohl noch eine ganze Weile mit dem Code beschäftigen und wird immer noch "no-no!'s" finden. Nur eine Anmerkung noch: Man könnte ja gleich die passende view im DD durchgehen und damit alle personengebundenen Mailfiles erwischen ... Im DD kann sollte man dann auch gleich abklären, ob es denn überhaupt ein Mailfile gibt. Und dann sind wir auch schon bei "Mailfile liegt auf anderem Server" - aber das hattest Du Dir ja schon zur Brust genommen.


    Man "findet" eine Menge Code im Internet, und sehr häufig erinnern derartige Veröffentlichungen an "Genosse Hauptmann, Genosse Hautpmann - ich weiss etwas ... Im Kreml brennt noch Licht!". Wird etwas auf einer Website veröffentlicht (und das gilt auch für die Sandbox und OpenNTF), heisst das noch lange nicht, dass es etwas taugt. Dort wirkliche Perlen zu finden, ist eher schwer. Als Ideengeber (wenn man sich auskennt und weiss, was man tut), sieht das *etwas* anders aus, aber - und da sind wir wieder beim Kern - der Weisheit letzten Schluss bzw. die ultimative "fire & forget"-Lösung wird man dort nicht finden. Eigeninitiative und eigene Verantwortung sind da angesagt, sonst kann es furchtbar krachen.


    Bernhard