Is User A Member Of A (Nested) Group ?

Working with nested groups, it can be hard to determine if a user is member of the “base” group. The following class contains a method to do the job.

IsGroupMember ( GroupName, UserName ) calls method ExplodeGroup, which fills an array with all members of the group. It also resolves nested groups.

IsGroupMember now checks if the username is a member of this array using Lotusscript function ArrayGetIndex.

Class NotesDominoDirectory

	Private strServer As String

	Public Sub new (server As String )
		strServer = server
	End Sub

	Public Function ExplodeGroup (GroupName As String) As Variant

		Dim s As New Notessession
		Dim db As New NotesDatabase ( Me.strServer, "names.nsf" )
		Dim doc As NotesDocument
		Dim view As NotesView
		Dim i As Integer, j As Integer, k As Integer
		Dim arrGrp1, arrGrp2 As Variant

		Set view=Db.GetView ("($VIMGroups)")
		Set doc=View.GetDocumentByKey (GroupName)
		Redim arrMembers (1) As Variant
		j = 0

		If Not (doc Is Nothing) Then
			arrGrp1= Doc.GetItemValue ("Members")
			For i= 0 To Ubound (arrGrp1)
				arrGrp2= Me.ExplodeGroup (arrGrp1 (i))
				Redim Preserve arrMembers (Ubound (arrGrp2) + j) As Variant
				For k= 0  To Ubound (arrGrp2)
					arrMembers (j) = arrGrp2 (k)
					j = j + 1
				Next
			Next
		Else
			Redim arrMembers (0) As Variant
			arrMembers (0) = GroupName
		End If

		ExplodeGroup= Arrayunique (arrMembers)

	End Function 

	Public Function IsGroupMember ( strGroup As String, strUser As String ) As Boolean

		IsGroupMember = False

		If (Arraygetindex (Me.ExplodeGroup (strGroup), strUser , 5))  Then
			IsGroupMember = True
		End If

	End Function

	Public Function IsGroupMemberExt ( strGroup As String, strUser As String ) As Boolean
		' uses undocumented function
		Dim arrMembers As Variant
		IsGroupMemberExt = False
		arrMembers =
            Evaluate(|@ExpandNameList("|& strServer & |":"names.nsf";"|& strGroup &|")| )
		If (Arraygetindex ( arrMembers, strUser, 5)) Then
			IsGroupMemberExt = True
		End If
	End Function

End Class

Here is a sample of how to check if Ulrich Krause is member of group “Everybody”

Sub Click(Source As Button)
	Dim res As Variant
	Dim dd As New NotesDominoDirectory ("serv01/singultus")
	Msgbox dd.IsGroupMember ( "Everybody" , "CN=Ulrich Krause/O=singultus")
End Sub

There is also an undocumented @formula @ExpandNameList to expand a group and all nested groups to all the names.

Function IsGroupMemberExt ( strGroup As String, strUser As String ) As Boolean
	' uses undocumented function
	Dim arrMembers As Variant
	IsGroupMemberExt = False
	arrMembers =
         Evaluate(|@ExpandNameList("|& strServer &|":"names.nsf";"|& strGroup &|")| )
	If (Arraygetindex ( arrMembers, strUser, 5))  Then
	     IsGroupMemberExt = True
	End If
End Function

10 Most Frequent Lies Told By IT Consultants

  1. “This can only be accomplished through a large custom development project.”
  2. “Of course your data is safe.”
  3. “We’ll need a day or two for optimization and debugging.”
  4. “Yes, we’ve done this before. There are several companies using this product (or technology). They really like it.”
  5. “Server consolidation and virtualization will save you money.”
  6. “Storage consolidation and virtualization will save you money.”
  7. “The upgrade (or change) will be seamless and will not affect production.”
  8. “The upgrade (or change) will be transparent to users.”
  9. “Yes, we tested this thoroughly before installing it.”
  10. “If you install Tivoli it will solve all your support problems.”

To understand why some IT consultants are great but most are not, read Robert X. Cringely’s article The Truth About IT Consultants”

[via Gregg Eldred]


Primeval – Episodenguide zur 2. Staffel (german)

In Staffel zwei muss sich das Team um Professor Nick Cutter (Douglas Henshall) nicht nur mit den Kreaturen aus vergangenen und zukünftigen Zeitaltern herumschlagen, sondern auch mit einer gefährlichen Verschwörung in den eigenen Reihen …

Episode 1 Bestürzt stellt Cutter nach seiner Rückkehr fest, dass Claudia Brown in seiner Welt nicht mehr existiert. Und das ist nicht das einzige, was sich zum Nachteil verändert hat: Anstelle von Claudia ist jetzt der schmierige Oliver Leek die rechte Hand des schnöseligen Team-Chefs Lester. Allerdings staunt Cutter nicht schlecht, als er im (nur für ihn) neuen Einsatzzentrum The ARC eintrifft.

Doch zum Eingewöhnen bleibt keine Zeit: In einem Einkaufszentrum haben es sich gefährliche Raptoren gemütlich gemacht

Episode 2 Cutters Verwirrung hat nach dem Neuzugang der PR-Frau Jenny Lewis kein Ende. Eine grausame Ironie des Schicksals will es, dass Jenny bis auf stilistische Unterschiede aussieht wie seine geliebte Claudia. Die toughe Karrierefrau reagiert sehr irritiert auf Cutters Avancen und hält ihn ebenso wie Lester für einen Spinner. Derweil arbeitet Connor an einem Anomalie-Detektor, wird jedoch durch die attraktive Zufallsbekanntschaft Caroline abgelenkt sehr zum Missfallen von Abby. Action erlebt das Team diesmal in einem Hochhaus, in dem fleischfressende Riesenwürmer ihr Unwesen treiben.

Cutters renitente, undurchsichtige Frau Helen taucht bei ihrem Ex-Lover, Cutters Freund Stephen auf und verfolgt offenbar weiter dunkle Pläne.

Episode 3 In einem Vergnügungspark wird ein Gast von einem riesigen Raubtier getötet. Allerdings hat der Anomalien-Detektor zu Connors Verdruss nicht Alarm geschlagen. Bald stellt sich heraus, dass es sich um eine Säbelzahnkatze handelt, die schon länger in der Gegenwart zu Hause ist.
Beunruhigender ist da schon die vor dem Team verborgene Tatsache, dass Leek offenbar Connors neue Flamme Caroline bezahlt, um ihn auszuspionieren.

Und es kommt noch besser: Helen scheint die Drahtzieherin hinter Leek zu sein!

Episode 4 Connors Anomalien-Detektor scheint endlich zu funktionieren! Aber auch dieses Mal ist das Team zu spät, als ein Zeitloch in der Nähe der Themse entdeckt wird: Es ist bereits ein Junge verschwunden. Die Spannungen zwischen Stephen und Cutter führen dazu, dass der Professor kurzzeitig von Lester gefeuert wird. Doch Cutter gibt nicht auf, denn auch Abby wurde von einem seltsamen Riesenseehund aus der Zukunft entführt.

Gemeinsam mit Connor, der wegen Abbys Verschwinden sichtbar emotionalisiert ist, sucht er auf eigene Faust im Londoner Untergrund.

Episode 5 Wieder schlagen Connors Sensoren Alarm, und wieder bricht kurz darauf das ganze System zusammen. Cutter und Connor erkennen, dass sie durch einen Insider sabotiert werden. Der Professor verdächtigt seinen ungeliebten Boss Lester. Während dessen dringt ein von Leek insgeheim zusammengestellten Söldner-Team in die Anomalie vor und versucht dort, Kreaturen einzufangen. Doch sie werden Opfer von riesigen Skorpionen im Sand der Wüste. Als Stephen und Cutter ebenfalls durch das Portal kommen, finden sie ein dort gestrandetes, vermisstes Mädchen. Doch dann schließt sich die Anomalie und alle drei sind in der todbringenden Vergangenheit gefangen. In der Gegenwart erkennt Connor seine wahren Gefühle für Abby und macht per SMS Schluss mit Caroline.

Doch die entführt einfach Abbys Liebling Rex

Episode 6 Ein gewaltiger kolumbianischer Mammutbulle verursacht ein furchtbares Chaos auf einer wichtigen Autobahn. Obwohl es das Team unter großen Mühen schafft, das Tier einzufangen, kommt es zwischen Cutter und Stephen zum offenen Bruch: Die intriganten Helen gaukelt Stephen vor, dass man endlich alle Erkenntnisse an das Licht der Öffentlichkeit tragen müsste, um einen Missbrauch des Projekts durch Lester und die Regierung zu verhindern.
Stephen ahnt natürlich nicht, dass Helen mit Leek unter einer Decke steckt. Cutter stellt sich gegen ihn und Stephen verlässt das Team. Während Cutter, Abby und Connor dem ihnen unbekannten Verräter eine Falle stellen, hetzt Leek seinem Boss Lester einen ferngesteuerten Zukunfts-Predator auf den Hals. Die Lage spitzt sich zu

Wie es weiter geht wird man sehen. Es wird eine dritte Staffel Primeval geben und diese wird gleich 13 Episoden haben.


Für Ein Stück Schokolade

[via Axel Janssen]

Mit der Sicherheit von Firmendaten und -netzwerken ist es ein Gräuel. Alles muss immer furchtbar sicher sein. Der Admin bekommt bereits Ausschlag, wenn jemand seinen privaten USB-Stick mitbringt und in so manchem Großkonzern dürfen die Mitarbeiter nicht einmal ein Foto-Handy dabei haben. Wozu der ganze Aufwand? Absolut unnötig, reine Zeit- und Geldverschwendung. Wenn man ehrlich ist, dann muss man das Absichern von Firmennetzen gar als Arbeitsbeschaffungsmaßnahme abtun.

mehr dazu gibt es hier zu lesen.


Automatically Run An Agent When Server Starts

SnTTYou want an agent to automatically run each time a Lotus® Domino® server starts up. How can this be accomplished?
In version 7.x or earlier you can create a Program document set to run “at startup” in the Domino Directory. For example, on a Windows® platform, the Basics tab of such a Program document would look like:

Program name: nserver
Command line: -c “tell amgr run ‘database_name.nsf’ ‘agent_name'”

Note that both the database name and agent name must be in single quotes.


In Notes 8 there is a new feature in the agent properties.


WordPress Plugin For LotusScript And Formula Syntax Highlighting

I’m using wordpress for blogging and have wp-syntax installed for quite a while as a syntax colour code/highlighter. wp-syntax supports many languages. But it does not support Lotus Script or @Formula language out of the box.

You can easily add support for these languages by adding a file to GeSHi, the Generic Syntax Highlighter, which is used in wp-syntax and some other plugins for wordpress.

I had done this a year ago for Notes 7. Now Richard Civil posted a new version for Notes 8. If your blog is based on wordpress and you are looking for an easy to implement, easy to use syntax colour code/highlighter to prettify your Lotus Script or formula code, jump over to RichardCivil.net.


Advanced LotusScript Logging

Flow contains a full-featured logging engine that allows you to log events/errors to rich-text documents and e-mail messages allowing you to generate easily readable logs with different color text based on the event’s logging level. You may also send logging events/errors to plain-text files, the server console or client status bar, and/or message dialog boxes.

Download Flow from OpenNTF.



Programmatically Change The Design Of A Local Database

From the Lotus Notes KnowledgeBase (#1280243)

You want to programmatically change or update the design of a local Lotus Notes® database from a template. For your particular scenario, replication is not an option. The database is local to the client, and there is no server replica to pull the design changes from. So you would like to use LotusScript to programmatically change the design.

First of all, the template with which you want to update the database design much also be local to this Notes client. If that is true, one way to accomplish this task is to use the LotusScript Shell command to call the convert program located on the Notes client.
The convert program takes the same commands as the server-based convert task. For example, if you want to update the local names.nsf database with the latest personal address book template, you could use the following code on a Microsoft® Windows® platform because the name of the program on Windows is nconvert.exe:

Sub Initialize
Dim result As Variant
result = Shell("nconvert -d names.nsf * pernames.ntf")
End Sub

When you call the convert program, it reads the notes.ini file and retrieves the ID value form the KeyFileName entry. The convert program runs under the authority of that ID.
You will be prompted to enter the password for that ID before the task continues if

  • the Notes client is not running, or
  • the Notes client is running and you have not selected “Don’t prompt for a password from other Notes-based programs” in your User Security preferences. (If you check that option, you are not prompted for a password if the Notes client is running.)

Bug In MSVCRT.DLL

The bug will cause some Windows applications to behave as though it were one hour earlier than the correct time shown on the operating system’s clock. That could lead calendar entries to slip and Windows-based banking systems to record the wrong time for financial transactions.

Microsoft confirmed the bug, but said in most cases a repair would be no problem. “Ninety-nine percent of all packaged applications… can be fixed really simply by downloading a new version, or a patched version, of the DLL”.


Suppressing The Prompts On Failover

If a failover condition occurs , Notes will close the current tab and prompt you to switch to a different replica of the database, allowing you to attempt the action again.

A notes.ini variable has been introduced in Lotus Notes® 8.0.1 to prevent the failover prompt when the server holding the current application is no longer responding, To suppress these prompts, use the client notes.ini variable:

HidePromptFailoverInc=1

Beginning with Lotus Notes® 8.0.1 the following scenarios have added failover functionality

  • Opening a view
  • Scrolling a view
  • Pressing F9 to refresh a view