Autor Thema: C-API: Prüfen, ob ACL-Einträge (Gruppen, Personen) im Adressbuch vorhanden sind  (Gelesen 2654 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.728
  • 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.728
  • 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