Autor Thema: ACL Protokoll löschen  (Gelesen 3604 mal)

Glombi

  • Gast
ACL Protokoll löschen
« am: 06.05.04 - 21:27:24 »
Kennt jemand ein (kostenloses) Tool oder hat einer ein API-Programm
 in der Schublade, mit dem man das Protokoll einer ACL, aber nicht die ACL löschen kann?

Andreas

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:ACL Protokoll löschen
« Antwort #1 am: 06.05.04 - 21:33:53 »
Protokoll-Löschung geht imho nur über Copy Database, da dies massiv in die DB eingreift.
Wäre aber auch auf eine Software-Lösung gespannt  :)
Wobei ich mir nicht wirklich vorstellen kann dass es da was gibt - es sei denn von IRIS.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Glombi

  • Gast
Re:ACL Protokoll löschen
« Antwort #2 am: 06.05.04 - 21:41:32 »
Ich habe natürlich vorher gegoogelt und auch die LDD durchsucht, aber nichts gefunden.

Das kopieren der ACL über den Admin Client kopiert leider auch immer das ACL Log mit.

Ich habe eine Datenbank mit diversen Gruppen, Personen und Rollen und möchte eine neue Datenbank erstellen, ohne dass das Log dabei ist.

Mit Script geht es nicht. Mit der API wohl auch nicht, jedenfalls habe ich in der C-API Dokumentation für Notes nichts dazu gefunden (nur STATUS LNPUBLIC ACLGetHistory).

Mit NotesPeek kann ich die ACL History sehen, also geht es wohl irgendwie...

Andreas
« Letzte Änderung: 06.05.04 - 21:42:56 von Glombi »

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:ACL Protokoll löschen
« Antwort #3 am: 06.05.04 - 21:43:55 »
Da ist IRIS davor, dass man solche Features aushebelt ... Schlechte Karten für sowas !
Ich kann mir auch kaum vorstellen, dass die API da was hergibt. IRIS wird sich kaum so eine (Sicherheits-)Blösse geben.

Bernhard

Glombi

  • Gast
Re:ACL Protokoll löschen
« Antwort #4 am: 06.05.04 - 21:55:00 »
Nun ja, es geht halt mit roher Gewalt  ;D

In R5 werden nur die letzten 20 Änderungen protokolliert. Das folgende Script schreibt 20 Dummy-Einträge und löscht diese wieder:

Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim acl As NotesACL
   Dim entry As NotesACLEntry
   
   Dim i As Integer
   
   Set db = session.CurrentDatabase
   If Not ( db.IsOpen ) Then
      Call db.Open( "", "" )
   End If
   Set acl = db.ACL
   
   For i = 1 To 20
      Set entry = New NotesACLEntry( acl, " ", ACLLEVEL_NOACCESS )
      Call acl.Save
      
      Set entry = acl.GetEntry( " " )
      Call entry.Remove
      Call acl.Save
   Next

Es steht zwar was in der Historie, aber damit kann ich leben.

In R6 gibt es wohl ein anderes Limit.

Andreas
« Letzte Änderung: 06.05.04 - 21:56:11 von Glombi »

Offline 0xse

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 507
  • Geschlecht: Männlich
Re: ACL Protokoll löschen
« Antwort #5 am: 04.09.09 - 01:53:35 »
Selbe Herausforderung, es soll die ACL Historie gelöscht werden. Hab mich die letzten paar Stunden mal ein wenig mit der Notes Dateistruktur beschäftigt und ein kleines C# Programm (Quick & Dirty) geschrieben, mit dem sich die Historie der ACL sauber löschen läßt. Hier der Auszug des Hauptteils.

Code
String infile = "C:\\Programme\\lotus\\notes\\data\\3Test.nsf";

            Console.Write("Reading ");
            Console.WriteLine(infile);
            
            FileStream f = new FileStream(infile, FileMode.Open);

            int counter = 0, fstatus, indexhis, indexs1, indexs2,i;
            byte[] val = new byte[4096];
            String sval;
            Encoding enc = Encoding.Default;
                                 
            while (counter * 4096 + 4096 < f.Length)
            {
                fstatus = f.Read(val, 0, 4096);
                Console.Write("#");

                sval = enc.GetString(val);
                if ((indexhis = sval.IndexOf("IHAVETOKILLTHISHISTORY")) > 0)
                {
                    indexs1 = indexhis - 100 < 0 ? 0 : indexhis - 100;
                    indexs2 = 0;
                    while((indexs1 = sval.IndexOf("/20", indexs1 + 1, indexhis - indexs1)) > 0){
                        indexs2 = indexs1;
                    }

                    if (sval[indexs2 - 3] == '/')
                    {
                        indexs2 = indexs2 - 5;

                        Console.WriteLine("");
                        Console.Write("ACL history found at block ");
                        Console.Write(counter * 4096);
                        Console.Write(", subblock ");
                        Console.Write((indexhis - (indexhis % 1024)) / 1024);
                        Console.Write(", offset ");
                        Console.WriteLine(indexs2 % 1024);

                        indexs1 = sval.IndexOf("\0\0", indexs2);
                        Console.Write("length ");
                        Console.Write(indexs1 - indexs2);
                        Console.Write(" byte, overwriting...");

                        for (i = 0; i < 4096; i++)
                        {
                            val[i] = 0;
                        }

                        f.Seek(counter * 4096 + indexs2, SeekOrigin.Begin);
                        f.Write(val,0,indexs1-indexs2);

                        Console.WriteLine(" Done");
                        Console.WriteLine("");
                    }

                    break;
                }

                counter++;                
            }

            f.Close();

Notes ist eigentlich recht trivial gestrickt. Leider konnte ich im Header (lt. Filemon zieht sich Notes immer die ersten 1024 Byte als Meta Infos rein) keinen Offset dafür ausmachen. Im ACL Bereich auch nicht. Deswegen ist es jetzt so gelöst, dass man einen Benutzer "IHAVETOKILLTHISHISTORY" in der ACL hinterlegen muss. Das muss der aktuellste Eintrag sein! Dann sucht sich das Programm den Part raus, füllt ihn mit Nullen und Notes zeigt eine leere Historie.

Bisher nur getestet mit Notes 6 Datenbanken.

Problem gelöst, nachdem Google und sonst auch nix eine brauchbare Antwort geliefert haben. Viel Vergnügen bei der Verwendung.

LG, 0xse

Offline 0xse

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 507
  • Geschlecht: Männlich
Re: ACL Protokoll löschen
« Antwort #6 am: 04.09.09 - 11:35:17 »
Die Suche in der History in dem Block könnte man auch mit einem RegExp in der Art gestalten:

#([0-9]{2}/[0-9]{2}/[0-9]{4}(.*)\0)+\0#

Mal schauen, vlt stell ich da bald ein kleines Tool zu online.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz