ACL Inventory of All Mail Databases

Hi All,

I’m wondering if theres any script that would list each and every ACL (in Excel or .txt form) of all databases within the MAIL folder…

This is ofcourse is for inventory purposes, so that it would be easier to update our inventory docs.

I found a lotus script but you have to inject and run it to each and every database… very tedious… (CODE BELOW)

I would appreciate any ideas/concepts regarding this matter… Thanks in advance.

BTW, here’s the code for the ACL Excel generating script which you have to inject individually:

'Declarations

'===============================

Dim xlApp As Variant

Dim xlWkBook As Variant

Dim sColumnCode As String

Const xlDiagonalDown=5

Const xlNone=-4142

Const xlDiagonalUp=6

Const xlEdgeBottom=9

Const xlEdgeLeft=7

Const xlEdgeRight=10

Const xlEdgeTop=8

Const xlAutomatic=-4105

Const xlContinuous=1

Const xlThin=2

Const xlInsideVertical=11

Const xlUnderlineStyleNone=-4142

Const xlPrintNoComments=-4142

Const xlLandscape=2

Const xlPaperA4=9

Const xlDownThenOver=1

'===================================

Sub Initialize

Dim s As New NotesSession

Dim db As NotesDatabase

Dim acl As NotesACL

Dim entry As NotesACLEntry

Dim row As Integer

Dim Col As Integer

Dim x As Integer

Dim RoleList List As Integer

Dim UserTypeList List As String

Dim AccessLevel List As String

Set db = s.currentdatabase

Set acl = db.ACL

row = 1

col = 1

UserTypeList(0) = “Unspecified”

UserTypeList(1) = “Person”

UserTypeList(2) = “Server”

UserTypeList(3) = “Mixed”

UserTypeList(4) = “Person Group”

UserTypeList(5) = “Server Group”

AccessLevel(0) = “No Access”

AccessLevel(1) = “Depositor”

AccessLevel(2) = “Reader”

AccessLevel(3) = “Author”

AccessLevel(4) = “Editor”

AccessLevel(5) = “Designer”

AccessLevel(6) = “Manager”

'Create Spreadsheet titles

Set xlApp = CreateObject(“Excel.Application”)

xlApp.Visible = True

Set xlWkBook = xlApp.Workbooks

xlWkBook.Add

xlApp.Application.DisplayAlerts = False

xlApp.Sheets(“Sheet1”).Select

xlApp.Sheets(“Sheet1”).Name = “ACL”

xlApp.Sheets(“Sheet2”).Select

xlApp.Sheets(“Sheet2”).Name = “Roles”

xlApp.Sheets(“Sheet3”).Select

xlApp.ActiveWindow.SelectedSheets.Delete

'Set Headings

xlApp.Sheets(“ACL”).Select

xlApp.Cells(Row,6) = “Create”

xlApp.Cells(Row,7) = “Create”

xlApp.Cells(Row,8) = “Create”

xlApp.Cells(Row,9) = “Create”

xlApp.Cells(Row,10) = “Read”

xlApp.Cells(Row,11) = “Write”

row = row + 1

xlApp.Cells(Row,2) = “User”

xlApp.Cells(Row,4) = “Create”

xlApp.Cells(Row,5) = “Delete”

xlApp.Cells(Row,6) = “Personal”

xlApp.Cells(Row,7) = “Personal”

xlApp.Cells(Row,8) = “Shared”

xlApp.Cells(Row,9) = “LotusScript”

xlApp.Cells(Row,10) = “Public”

xlApp.Cells(Row,11) = “Public”

row = row + 1

xlApp.Cells(Row,1) = “Name”

xlApp.Cells(Row,2) = “Type”

xlApp.Cells(Row,3) = “Access”

xlApp.Cells(Row,4) = “Documents”

xlApp.Cells(Row,5) = “Documents”

xlApp.Cells(Row,6) = “Agents”

xlApp.Cells(Row,7) = “Folders/Views”

xlApp.Cells(Row,8) = “Folders/Views”

xlApp.Cells(Row,9) = “Agents”

xlApp.Cells(Row,10) = “Documents”

xlApp.Cells(Row,11) = “Documents”

’ Now do the roles

xlApp.Sheets(“Roles”).Select

row=1

xlApp.Cells(Row,2) = “User”

row = row + 1

xlApp.Cells(Row,1) = “Name”

xlApp.Cells(Row,2) = “Type”

xlApp.Cells(Row,3) = “Access”

col =3

x=1

Forall r In acl.Roles

col=col+1

xlApp.Cells(Row,col) = r

RoleList(r) = x

x=x+1

End Forall

row = 4

'populate the spreadsheet

Set entry = acl.GetFirstEntry

While Not(entry Is Nothing)

xlApp.Sheets(“ACL”).Select

xlApp.Cells(Row,1) = entry.Name

xlApp.Cells(Row,2) = UserTypeList(entry.UserType)

xlApp.Cells(Row,3) = AccessLevel(entry.Level)

If entry.CanCreateDocuments Then xlApp.Cells(Row,4) = “X”

If entry.CanDeleteDocuments Then xlApp.Cells(Row,5) = “X”

If entry.CanCreatePersonalAgent Then xlApp.Cells(Row,6) = “X”

If entry.CanCreatePersonalFolder Then xlApp.Cells(Row,7) = “X”

If entry.CanCreateSharedFolder Then xlApp.Cells(Row,8) = “X”

If entry.CanCreateLSOrJavaAgent Then xlApp.Cells(Row,9) = “X”

If entry.IsPublicReader Then xlApp.Cells(Row,10) = “X”

If entry.IsPublicWriter Then xlApp.Cells(Row,11) = “X”

xlApp.Sheets(“Roles”).Select

xlApp.Cells(Row,1) = entry.Name

xlApp.Cells(Row,2) = UserTypeList(entry.UserType)

xlApp.Cells(Row,3) = AccessLevel(entry.Level)

Forall r In entry.Roles

If Not(r = “”) Then

col=3+Cint(RoleList(r))

xlApp.Cells(Row,col) = "X"

End If

End Forall

row = row+1

Set entry = acl.GetNextEntry(entry)

Wend

’ Bold Titles

xlApp.Sheets(“ACL”).Select

For y = 1 To 3

For z = 1 To 11

Call GetColumnCode(Cstr(z))

xlApp.Range(sColumnCode & Cstr(y)).Select

With xlApp.Selection.Font

.FontStyle = "Bold"

End With

Next

Next

xlApp.Sheets(“Roles”).Select

For y = 1 To 2

For z = 1 To x+2

Call GetColumnCode(Cstr(z))

xlApp.Range(sColumnCode & Cstr(y)).Select

With xlApp.Selection.Font

.FontStyle = "Bold"

End With

Next

Next

’ autofit the columns in both sheets and underline the titles

xlApp.Sheets(“ACL”).Select

xlApp.Columns(“A:K”).EntireColumn.AutoFit

xlApp.Range(“A4:K4”).Select

With xlApp.Selection.Borders(xlEdgeTop)

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic

End With

xlApp.Sheets(“Roles”).Select

Call GetColumnCode(Cstr(x+2))

xlApp.Columns(“A:” & sColumnCode).EntireColumn.AutoFit

xlApp.Range(“A3:” & sColumnCode & “3”).Select

With xlApp.Selection.Borders(xlEdgeTop)

.LineStyle = xlContinuous

.Weight = xlThin

.ColorIndex = xlAutomatic

End With

End Sub

'=================================

Sub GetColumnCode(sColumnNumber As String)

Select Case sColumnNumber

Case “1”

sColumnCode = “A”

Case “2”

sColumnCode = “B”

Case “3”

sColumnCode = “C”

Case “4”

sColumnCode = “D”

Case “5”

sColumnCode = “E”

Case “6”

sColumnCode = “F”

Case “7”

sColumnCode = “G”

Case “8”

sColumnCode = “H”

Case “9”

sColumnCode = “I”

Case “10”

sColumnCode = “J”

Case “11”

sColumnCode = “K”

Case “12”

sColumnCode = “L”

Case “13”

sColumnCode = “M”

Case “14”

sColumnCode = “N”

Case “15”

sColumnCode = “O”

Case “16”

sColumnCode = “P”

Case “17”

sColumnCode = “Q”

Case “18”

sColumnCode = “R”

Case “19”

sColumnCode = “S”

Case “20”

sColumnCode = “T”

Case “21”

sColumnCode = “U”

Case “22”

sColumnCode = “V”

Case “23”

sColumnCode = “W”

Case “24”

sColumnCode = “X”

Case “25”

sColumnCode = “Y”

Case “26”

sColumnCode = “Z”

Case “27”

sColumnCode = “AA”

Case “28”

sColumnCode = “AB”

Case “29”

sColumnCode = “AC”

Case “30”

sColumnCode = “AD”

Case “31”

sColumnCode = “AE”

Case “32”

sColumnCode = “AF”

Case “33”

sColumnCode = “AG”

Case “34”

sColumnCode = “AH”

Case “35”

sColumnCode = “AI”

Case “36”

sColumnCode = “AJ”

Case “37”

sColumnCode = “AK”

Case “38”

sColumnCode = “AL”

Case “39”

sColumnCode = “AM”

Case “40”

sColumnCode = “AN”

Case “41”

sColumnCode = “AO”

Case “42”

sColumnCode = “AP”

Case “43”

sColumnCode = “AQ”

Case “44”

sColumnCode = “AR”

Case “45”

sColumnCode = “AS”

Case “46”

sColumnCode = “AT”

Case “47”

sColumnCode = “AU”

Case “48”

sColumnCode = “AV”

Case “49”

sColumnCode = “AW”

Case “50”

sColumnCode = “AX”

Case “51”

sColumnCode = “AY”

Case “52”

sColumnCode = “AZ”

End Select

End Sub

Subject: ACL Inventory of All Mail Databases

Did you see what information the Catalog holds? typically catalog.nsf.

Regards,

Oswald

Subject: RE: ACL Inventory of All Mail Databases

Hi Oswald,

It seems that the Database Catalog is not that complete and also not pertaining to the NSFs inside MAIL folder.

Is there a way to populate or customize the Database Catalog in order for it to have detailed ACL views for databases within MAIL folder?

Thanks

Subject: RE: ACL Inventory of All Mail Databases

Well… you can type a "Load Catalog, this will start populating the catalog db, at the server console screen.

Subject: RE: ACL Inventory of All Mail Databases

Hi Oswald,

I got it already. I found out that the LocalDomainCatalogServers is not included in the ACL of my catalog.nsf.

After including it, your command wokred like a charm!

Many thanks to you…

Subject: RE: ACL Inventory of All Mail Databases

Hi Oswald,

I tried to execute the command “load catalog” but unfortunately, it returned an error: “Unable to replace obsolete catalog: The name is not in the list.”

What could possibly the reason why?

Thanks