Autor Thema: C-API: Prüfen, ob ACL-Einträge (Gruppen, Personen) im Adressbuch vorhanden sind  (Gelesen 2855 mal)

Offline inu

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 594
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Hallo Leute,

gibt es eine Möglichkeit, mittels C-API die ACL einer DB auszulesen und zu prüfen, ob die gefundenen  Einträge überhaupt greifen würden - sprich: sind ACL-Einträge (Gruppen, Server, Personen) im Adressbuch hinterlegt?

Wie prüft Domino/Notes eigentlich eine ACL? Wird da auf Vorhandensein eines Eintrages in einer bestimmte Ansicht in der names.nsf verglichen?

Viele Grüße

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Wieso willst Du das mit C-API machen? Dazu reichen doch wenige Zeilen in LotusScript (ACLEntries durchgehen und in der DD-View "($Users)" gegenprüfen).

Bernhard

Offline inu

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 594
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
... weil es in einem Servertask integriert werden muss.

($Users) reicht bestimmt nicht. Irgendwie muss ich ja auch Gruppen und Server gegenprüfen.

Hast Du eine Idee?

Viele Grüße

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
#include <acl.h>

STATUS LNPUBLIC ACLLookupAccess(
   DHANDLE  hACL,
   NAMES_LIST far *pNamesList,
   WORD far *retAccessLevel,
   ACL_PRIVILEGES far *retPrivileges,
   WORD far *retAccessFlags,
   DHANDLE far *rethPrivNames);

ist hier wohl das Richtige
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
In ($Users) stehen auch die Gruppen. Für die Server brauchst Du dann noch ($Servers), David (oder eine andere vorhandene Ansicht, die ggf. für Dich besser passt).

Bernhard

Offline inu

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 594
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
@eknori: Diese Funktion klingt recht interessant. Es scheint aber keinen Rückgabewert für den Fall zu geben, dass der ACL-Eintrag nicht geprüft werden kann (Eintrag nicht in der names.nsf vorhanden). Ich muss die Funktion erst testen, aber ich vermute, dass bei einem ACL-Eintrag, der nicht gegen die names.nsf geprüft werden kann, lediglich "ACL_LEVEL_NOACCESS"  als retAccessLevel zurück gibt.

Gruß
David

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Da kannst du Recht haben.
Dann musst du halt den harten Weg gehen, und die Lotusscript Funktionen nachbilden.

Hier ien Codefragment aus einem meiner Addins

Code
/* Get the note id of the view we want. */
if (error = NIFFindView (dbhNames, "($VIMGroups)", &view_id))
{
NSFDbClose (dbhNames);
AddInLogMessageText("View not found: ($VIMGroups)...", ERR(error));
        return (ERR(error));
}
/* Get a collection of notes using this view. */
if (error = NIFOpenCollection(
dbhNames, /* handle of db with view */
dbhNames, /* handle of db with data */
view_id,        /* note id of the view */
0,              /* collection open flags */
NULLHANDLE,     /* handle to unread ID list (input and return) */
&coll_handle,   /* collection handle (return) */
NULLHANDLE,     /* handle to open view note (return) */
NULL,           /* universal note id of view (return) */
NULLHANDLE,     /* handle to collapsed list (return) */
NULLHANDLE))    /* handle to selected list (return) */
{
NSFDbClose (dbhNames);
return (ERR(error));
}
/* Look for notes that have the given primary sort key (which must be of
type text). We get back a COLECTIONPOSITION structure describing where the
first such note is in the collection, and a count of how many such notes
there are. Check the return code for "not found" versus a real error. */
error = NIFFindByName (
coll_handle, /* collection to look in */
szGrpName, /* string to match on */
FIND_CASE_INSENSITIVE, /* match rules */
&coll_pos, /* where match begins (return) */
&match_size); /* how many match (return) */
if (ERR(error) == ERR_NOT_FOUND)
{
NIFCloseCollection (coll_handle);
/* The group is not in the Domino Directory. Create a new one */

Du kannst uch ohne die Views suchen . Hier ein Beispiel mit der CPP API

Code
/* first argument represents the configuration database;
Let's try to open the db */
LNString DatabasePathCatchAllDB;
DatabasePathCatchAllDB = argv[1];
s.GetDatabase( DatabasePathCatchAllDB, &workDB, s.GetUserName());
workDB.Open();
/* Find setup document*/
LNSearchOptions o;
o.SetNoteType (LNNOTETYPE_DOCUMENT);
o.SetBeginDate ("01/01/2005");
o.SetEndDate (s.GetCurrentDatetime());
workDB.Search ("Form=\"Setup\"", &col, &o);
LNDocument setupDoc = col[0];
setupDoc.Open();
LNText mboxes;  /* get name of mailboxes, if multiple */
if (setupDoc.HasItem ("mailboxes"))
{ /* does item exist ? */
setupDoc.GetItem("mailboxes", &mboxes);
}

Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz