Posts Tagged: ‘IBM Notes’

AdminCamp 2015: Wir sind dabei

23. Juli 2015 Posted by Thomas Bahn

AdminCamp
Das diesjährige AdminCamp findet vom 21. bis 23 September statt, wie gewohnt im Maritim Hotel Gelsenkirchen. Auch dieses Jahr sind wir wieder mit als Referenten dabei.


Am Dienstag in Session 4 im Track 3 geht es um ein Steckenpferd von mir: Weil sicher sicher sicher ist, Edition 2015 - Sicherheit in IBM Domino

Sicherheit ist ein vielschichtiges Thema und IBM hat bei Notes und Domino sehr viel getan, so dass man damit eine äußerst sichere Lösung für Anwendungen, E-Mails und mehr implementieren kann. Man kann aber natürlich auch riesige Scheunentore aufmachen...

Damit dir das nicht passiert, erkläre ich dir in dieser Session die wichtigsten Grundlagen und wie man "Sicherheit" in den Server- und Konfigurationsdokumenten, in der notes.ini und an anderen Stellen praktisch und pragmatisch umsetzt.

Im letzten Jahr hat sich einiges in Punkto Sicherheit beim Domino-Server verändert, insbesondere beim HTTP-Task, SSL und TLS. POODLE (SSL und TLS), Bar Mitzvah (RC4), LogJam und andere Sicherheitslücken waren in aller Munde. Was solltest als Domino-Administrator jetzt unbedingt machen und wie kannst du das Plus an Sicherheit einfach nutzen?

Diese Session wendet sich an alle Domino-Administratoren, die ihr Domino-System sicher(er) machen möchten.

Mit Sicherheit in den Sommerurlaub

8. Juli 2015 Posted by Matthias Adomat

call_center_operator_checkmark.png
Ja, auch die IT-Spezialisten sollten mal Sommerurlaub machen .
Aber wer übernimmt dann die Aufgaben?

Damit auch Sie beruhigt in den Sommerurlaub gehen können, springen wir für Sie ein und zwar soweit wie Sie mögen!

Sie haben die Möglichkeit von uns in unterschiedlichster Form Unterstützung zu erhalten. Sie oder Ihre Kollegen können z.B. jederzeit unsere Technische Hotline erreichen: 04307-900-403. Dadurch gelangen Sie direkt zu unserem Experten-Team. Für diese Zeit erweitert sich Ihre Abteilung virtuell und effizient um das assono-Team.

Ihre Supportanfragen werden aufgenommen und bearbeitet. Wir überwachen z.B. die Betriebsbereitschaft Ihrer Dominoserver aus der Ferne, oder vertreten Sie direkt bei Ihnen vor Ort. Dabei profitieren Sie von unserer Expertise und Erfahrung. Zudem können Sie die Sommerzeit dann auch für ein System-Check-Up Ihrer IBM Notes und Domino Umgebung nutzen.

Für weitere Infomation stehen wir Ihnen gern zur Verfügung unter Tel.: 04307-900-418, oder per Mail: vertrieb@assono.de.

Interims Fix 8 für IBM Domino 8.5.3 Fix Pack 6 erschienen

25. Juni 2015 Posted by Thomas Bahn

IBM Domino
Nach dem 4. Fix Pack für IBM Domino 9.0.1 vor ein paar Tagen, hatte ich ja schon auf die entsprechende Aktualisierung der 8.5.3er Version gewartet. Heute hatte mein warten ein Ende:
IBM den Interims Fix 8 für IBM Domino 8.5.3 Fix Pack 6 heraus gebracht.

Natürlich ist wieder ein kritisches Sicherheitsloch geschlossen worden - dasselbe wie bei der 9.0.1FP4:

Security Bulletin: IBM Domino Web Server Cross-site Scripting Vulnerability

CVEID: CVE-2015-1981

Description: IBM Domino Web server configured for Webmail is vulnerable to cross-site scripting, caused by improper validation of user-supplied input. A remote attacker could exploit this vulnerability using a specially-crafted URL to execute script in a victim's Web browser within the security context of the hosting Web site, once the URL is clicked. An attacker could use this vulnerability to steal the victim's cookie-based authentication credentials. Note that Domino servers configured for iNotes are not vulnerable to this attack.

Weitere Informationen:
Interim Fixes for 8.5.3 Fix Pack 6 versions of IBM Notes, Domino & iNotes
Download IBM Domino 8.5.3 Fix Pack 6 Interims Fix 8
Security Bulletin: IBM Domino Web Server Cross-site Scripting Vulnerability (CVE-2015-1981)

Fix Pack 4 für IBM Notes und Domino 9.0.1 erschienen

20. Juni 2015 Posted by Thomas Bahn

IBM NotesIBM Domino
IBM hat vor ein paar Tagen das 4. Fix Pack für IBM Notes und Domino 9.0.1 heraus gebracht.


Important Notes
  • 9.0.1 Fix Pack 4 updates the embedded Notes/Domino JVM to 1.6 SR16 FP4 to address security vulnerabilities.
  • 9.0.1 Fix Pack 4 adds support for the following: Safari 8 for iNotes; SiteMinder 12.52 SP1

Ein Tag später kam dann ein Security Bulletin, dass der "IBM Domino Web server configured for Webmail has a cross-site scripting vulnerability."

CVEID: CVE-2015-1981

Description: IBM Domino Web server configured for Webmail is vulnerable to cross-site scripting, caused by improper validation of user-supplied input. A remote attacker could exploit this vulnerability using a specially-crafted URL to execute script in a victim's Web browser within the security context of the hosting Web site, once the URL is clicked. An attacker could use this vulnerability to steal the victim's cookie-based authentication credentials. Note that Domino servers configured for iNotes are not vulnerable to this attack.

Weitere Informationen:
IBM Notes/Domino 9.0.1 Fix Pack 4 Release Notice
Download IBM Notes 9.0.1 Fix Pack 4
Download IBM Domino 9.0.1 Fix Pack 4
Security Bulletin: IBM Domino Web Server Cross-site Scripting Vulnerability (CVE-2015-1981)

Sicherheitskritische Fehler in JVM behoben – JVM Patch SR16FP4

4. Juni 2015 Posted by Thomas Bahn

IBM NotesIBM Domino
Als verantwortungsvoller und sicherheitsbewusster Domino-Administrator hat man ja in letzter Zeit Einiges zu tun, um immer auf dem aktuellen Stand zu bleiben. Für mich auffällig ist dabei, dass es immer wieder Lücken in eingebetteten "Fremdprodukten" sind - heute ist es mal wieder Java.

Der JVM Patch SR16FP4 bringt neue Sicherheit, die behobenen Probleme sind in der Technote Security Bulletin: Multiple vulnerabilities in IBM Java 6 SR16FP3 IF1 affect IBM Notes and Domino aufgelistet.

Quellen:
Download des JVM Patch SR16FP4 in der IBM Fix Central
Interim Fixes for 9.0.1.x versions of IBM Notes, Domino, iNotes & Notes Browser Plug-in
Interim Fixes for 8.5.3 Fix Pack 6 versions of IBM Notes, Domino & iNotes

Upgrades der IBM Notes- und Domino-JVMs für 8.5.3 FP5+FP6 und 9.0.1 FP3

8. April 2015 Posted by Thomas Bahn

IBM NotesIBM Domino
Java erweist sich leider immer wieder als problematisch in Punkto Sicherheit.

Es ist sehr mächtig und gleichzeitig weit verbreitet, also ein ideales Ziel für Hacker. Und alle, die Java in der einen oder anderen Form benötigen, dürfen immer wieder ihre Systeme aktualisieren.
Ich weiß nicht, ob es gut, notwendig oder überflüssig ist, aber IBM hat seine eigene Java Virtual Machine (JVM), die in ihren Produkten wie z. B. IBM Notes und IBM Domino genutzt werden, und muss daher getrennt aktualisiert werden. Und genau dafür gibt es jetzt eine entsprechende Korrektur, die
viele Sicherheitslöcher stopft.

Download des JVM-Upgrades JVMPatch SR16FP3 IF1 gibt es für IBM Notes und Domino 8.5.3 mit Fix Pack 5 bzw. 6 und für 9.0.1 mit Fix Pack 3.

Quick Tipp: Schnelladressierung zuerst auf dem Server suchen lassen

20. März 2015 Posted by Manuel Nientit

Quick-TippIBM Notes
Kürzlich kam bei einem Kunden die Frage auf, warum denn die "privaten" E-Mail-Adressen eines Kontaktes in der Vorschlagsliste bei der Schnelladressierung höher angezeigt werden, als die beruflichen.
Das liegt natürlich zunächst einmal mit daran, dass Notes natürlich nicht von sich aus zwischen beruflich und privat unterscheiden könnte - wie sollte auch das gehen? Aber hängt auch damit zusammen, dass Vorschläge nach Häufigkeit der Korrespondenz gewichtet angezeigt werden.

In diesem Fall war es jedoch so, dass das Workspace-Verzeichnis, in dem die Datenbank für die Gewichtung (DIP) abgelegt ist, zurückgesetzt worden war. Somit waren private und die berufliche Adressen erst einmal theoretisch gleichwertig. Allerdings fließt hier außerdem die Standardsuchreihenfolge ein, die bei der Schnelladressierung immer erst lokale Adressbücher und dann erst Serveradressbücher berücksichtigt.

Aber genau das ist einer der Punkte, an denen man einhaken kann, indem man die Schnelladressierung die Adressen vom Server stärker gewichten lässt als die lokalen. Zu diesem Zweck muss, beginnend mit Notes 8.5.3, die Variable:
TypeAheadShowServerFirstDefault=1
in die notes.ini eingetragen werden.
Details dazu können auch hier nachgelesen werden: "New Type-ahead Feature in Notes v9"

Das Ergebnis sieht aus, wie in folgendem Screenshot:
Schnelladressierung_mit_ServerFirst.png
Die Treffer von Server-Adressbüchern inklusive Verzeichnisunterstützung werden oben gelistet und erst dann unter "Local Directory" die Treffer aus allen lokalen Adressbüchern.

Dieses Ergebnis mag auch nicht für alle Nutzer und alle Situationen nützlich sein. Das ist sehr stark abhängig von der Gesamtkonfiguration der Adressbücher und der persönlichen Nutzung. Daher gibt es hier keinen goldenen Weg.

Die Schnelladressierung in Notes ist ein sehr hilfreiches und wertvolles Feature. Aber auch das Feature das vermutlich alleine mit am meisten Supportfälle verursacht. Nicht zuletzt, weil es nahezu untrennbar mit dem nicht minder wertvollen Feature "Letzte Kontakte", das seinerseits für einige Fragen gut ist, verheiratet ist. An dieser Stelle sind Administratoren herausgefordert, ihre Nutzer zu kennen und sinnvolle Vorgaben zu machen und gleichzeitig den First-Level-Support zu schulen, bestimmte Fragen diesbezüglich beantworten bzw. die Konfiguration wie oben kurzfristig ändern zu können.

Neue Sicherheitsupdates: Notes 9.0.1 FP3 IF2 und 8.5.3 FP6 IF 5

15. März 2015 Posted by Thomas Bahn

IBM Notes
Jede halbwegs komplexe Software nutzt viele Bibliotheken von anderen Anbietern oder die als Open Source zur Verfügung steht.. Leider enthalten auch solche Module und Bibliotheken hin und wieder Sicherheitsmängel. Vor kurzem wurde ein Problem in der libpng entdeckt, einer Bibliothek zur Nutzung von PNG-Grafiken: "libpng is vulnerable to a heap-based buffer overflow, caused by improper bounds checking when decompressing the IDAT_data."

IBM hat mit Interims Fixes für die aktuellen Notes-Versionen reagiert und für Notes 9.0.1 mit Fix Pack 3 den Interims Fix 2 und für Notes 8.5.3 mit Fix Pack 6 den Interims Fix 5 heraus gebracht.

Details zur libpng-Sicherheitslücke: Security Bulletin: IBM Notes (CVE-2014-9495 and CVE-2015-0973)

Fix Pack 3 für IBM Notes und Domino 9.0.1 erschienen

22. Januar 2015 Posted by Thomas Bahn

IBM NotesIBM Domino
IBM hat heute das 3. Fix Pack für IBM Notes und Domino 9.0.1 heraus gebracht.


"Important Notes
  • 9.0.1 Fix Pack 3 updates the embedded Notes/Domino JVM to 1.6 SR16 FP2 to address security vulnerabilities. This release has all of the content from the recently released POODLE and POODLE on TLS vulnerabilities in one easy to install package that includes the content from Domino 9.0.1 Fix Pack 2 Interim Fix 3 and Notes 9.0.1 Fix Pack 2 Interim Fix 4.
  • 9.0.1 Fix Pack 3 is the first Fix Pack to sign using the IBM Apple Developer ID. 9.0.1 Fix Pack 3 also introduces Apple v2 Developer ID signing, which is the signing required under OS X 10.10, 10.9.5 and above.
  • 9.0.1 Fix Pack 3 adds support for the following:
    • Chrome 37 for iNotes
    • Citrix XenApp 7.6 for Notes
    • VMware 5.5"

Interessant ist noch die neue notes.ini-Einstellung, um SSL v3 zu deaktivieren:
SPR# KLYH9QXMQE - Adds the ability to disable SSLv3 by setting DISABLE_SSLV3=1.

Weitere Informationen:
IBM Notes/Domino 9.0.1 Fix Pack 3 Release Notice
Download Options for Notes & Domino 9.0.1 Fix Packs

Notes ist 25 Jahre jung geworden

3. Dezember 2014 Posted by Thomas Bahn

IBM NotesIBM Domino
Oje, oje, ich habe einen wichtigen Geburtstag verpasst.
A picture named M2


Thank you, Mat for the screenshot.

Quick-Tipp: E-Mails mit POP3 abholen – E-Mail-Server mag nur TLS

21. November 2014 Posted by Thomas Bahn

Quick-TippIBM Notes
Seit früher in diesem Jahr erlauben viele E-Mail-Provider nur noch das verschlüsselte Abholen und Senden von E-Mails über POP3, IMAP und SMTP. Wegen eines Sicherheitsproblems mit SSL v3 (POODLE) schalten einige Server-Betreiber dieses Protokoll jetzt ab und erlauben nur noch TLS. Dazu gehören auch die E-Mail-Provider GMX und web.de.


Wenn man mit dem Notes-Client E-Mails per POP3 von E-Mail-Servern abholen will, die nur TLS erlauben, muss man den Notes-Client aktualisieren - und zwar (mindestens) auf die Version 9.0.1 Fix Pack 2 Interims Fix 2, den es im Moment nur relativ versteckt und nur für Windows gibt. Danke, Daniel, für den Tipp: Some Additonal TLS 1.0 Information).

Danach funktionierte es bei mir leider immer noch nicht, aber das lag einfach an einer falschen Einstellung.
Im Benutzerkonto (Account)-Dokument gibt es unter Erweitert die Einstellung "SSL-Sitezertifikate annehmen", die bei mir auf "Nein" stand - auf "Ja" korrigiert, läuft die E-Mail-Abfrage sofort.
Danke an Wollgraeser für den Tipp in die richtige Richtung: Re: Domino Client mit GMX Mail und SSL - TLS

Mit #NewWayToWork kündigt IBM die nächste Notes/Domino Version an

12. November 2014 Posted by Stephan Kopp

…und schürt damit die Erwartungshaltung auf einen wirklich großen Wurf.

Am 18.11. findet in New York das Launch Event von IBM Mail Next statt, wie die neue Version bislang genannt wird.

Was aber viel mehr als “nur” eine neue Version sein soll. Darauf lässt zumindest das Motto #NewWayToWork hoffen.

Für den 20.11. kann man sich zu einem Webinar “Get ready for an extreme mail makeover!” anmelden um nähere Details zu erfahren.

Print


Filed under: IBM Mail Next

Quick Tip: Benutzervalidierung durch erneute Passwort-Eingabe

30. September 2014 Posted by Thomas Bahn

Quick-TippIBM Notes
Ich hatte letzte Woche eine "kleine" Anforderung von einem Kunden: Er ist interessiert an der erweiterten kommerziellen Version unseres assono Password-Safes. Aber seine interne Revisionsabteilung hatte noch eine neue Anforderung: Der aktuelle Benutzer sollte vor dem Öffnen eines Dokuments oder beim Kopieren eines Passworts in die Zwischenablage direkt aus einer Ansicht vorher noch einmal sein Notes-Passwort eingeben müssen.

Dafür gibt es ein @Command: ToolsUserLogoff. Wenn es ausgeführt wird, logt es den Benutzer aus. Wenn man dieses Kommando mit etwas Code kombiniert, mit dem man auf den Server zugreift, erscheint der Passworteingabe-Dialog, wie es zum Bespiel hier beschrieben wurde: Forcing user re-entry of passwords for electronic signatures in script.

Dieser Ansatz hat aber für mich drei Nachteile:
1. Er funktioniert nicht offline, also z. B. bei einer lokalen Replik, weil der Serverzugriff notwendig ist, um den Passworteingabe-Dialog zu öffnen.
2. Ich möchte es nutzen, um das Öffnen von existierenden Dokumenten abzusichern. Wenn der Benutzer den Dialog abbricht, wird das Dokument trotzdem geöffnet.
3. Der Formel-Code muss im QueryOpen-Ereignis der Maske eingetragen werden. Dort brauche ich aber zwangsläufig LotusScript.

Also musste ich weiter suchen nach einer Lösung in LotusScript. Und ich wurde fündig bei Eknori, der in 2004 diesen Blog-Eintrag verfasst hat: @Command(ToolsUserLogoff) in Lotus Script.
Diese Lösung muss für die aktuellen Versionen von Notes angepasst werden, weil man sich jetzt nicht mehr mit F5, sondern mit Strg-F5 auslogt.

Ich war immer noch nicht überzeugt, dass dies die bestmögliche Lösung für mein Problem sein sollte. Es ist wegen der Verwendung von Windows-DLLs nicht auf andere Plattformen übertragbar, der Benutzer bleibt ausgeloggt, wenn er den Passworteingabe-Dialog abbricht, es würde wohl auch nicht lokal funktionieren usw.

Ich suchte weiter und fand diese großartige Idee: Mittels Notes C-API auf den privaten Teil der Benutzer-ID-Datei zugreifen, genauer mit der  REGGetIDInfoString-Function mit REGIDGetPrivateKey als infoType.
  • Dies würde den Passworteingabe-Dialog erzwingen, aber gleichzeitig den Benutzer nicht abmelden.
  • Es würde auch lokal ohne jeden Server-Kontakt funktionieren.
  • Und ich könnte sogar feststellen, wenn der Benutzer den Dialog abgebrochen hätte und darauf falls nötig reagieren.

Vielen Dank an Davy Vanherbergen für seinen OpenNTF Code Bin-Beitrag (von 2003!): Call notes password prompt from lotusscript 

Ich habe seine Idee genommen und auf "meine Art" neu implementiert. Dabei habe ich unsere C-API-Hilfsfunktionen genutzt, und ich lasse den Benutzer eine andere ID-Datei auswählen, wenn die in der notes.ini eingestellte nicht die seine ist.

Function ValidateCurrentUser As Boolean
        '/**
        ' * validates current user by letting him enter his password
        ' *
        ' * @return  True, if user has successfully entered his password
        ' *
        ' * @author  Thomas Bahn/assono <tbahn@assono.de>
        ' * @version 2014-09-30
        ' */

        Const MAXOUTBUFRLEN% = 4096
       
        Dim idFileName As String
        Dim returnCode As Integer
        Dim userNameBuffer As String*MAXUSERNAME
        Dim actualLen As Long
        Dim currentUserName As String                
        Dim outBufrLen As String*MAXOUTBUFRLEN
       
        If Not IsDebugMode() Then On Error GoTo errorHandler
       
        ValidateCurrentUser = False
       
        idFileName = session.GetEnvironmentString("KeyFileName", True)
        returnCode = REGGetIDInfoString(idFileName, REGIDGetName, _
                userNameBuffer, MAXUSERNAME, actualLen)
        Call ShowCAPIErrorIfAnyAndEnd(returnCode, "REGGetIDInfo", _
                NULLHANDLE)
       
        currentUserName = Left(userNameBuffer, actualLen - 1)        
        Do While session.UserName <> currentUserName
                ' ID file configured in notes.ini is not the ID file of the
                ' current user
                idFileName = uiws.OpenFileDialog(False, _
                        "Wählen Sie Ihre ID-Datei:", "*.ID|", _
                        GetNotesDataDirectory(), idFileName)(0)

                returnCode = REGGetIDInfoString(idFileName, REGIDGetName, _
                        userNameBuffer, MAXUSERNAME, actualLen)
                Call ShowCAPIErrorIfAnyAndEnd(returnCode, "REGGetIDInfo", _
                        NULLHANDLE)
               
                currentUserName = Left(userNameBuffer, actualLen - 1)
        Loop
       
        returnCode = REGGetIDInfoString(idFileName, REGIDGetPrivateKey, _
                        outBufrLen, MAXOUTBUFRLEN, actualLen)
        If returnCode = -32355 Then
                Exit Function ' user cancelled dialog
        Else
                Call ShowCAPIErrorIfAnyAndEnd(returnCode, "REGGetIDInfo", _
                        NULLHANDLE)
        End If

        ' when we get here, the user must have entered his password
        ' successfully
        ValidateCurrentUser = True
        Exit Function
       
errorHandler:
        If HandleError() = RESUME_NEXT_LINE Then Resume Next
        Exit Function
End Function

GetNotesDataDirectory() ist eine Hilfsfunktion, die das Notes-Datenverzeichnis zurück gibt. Ersetze diese Funktion durch deine eigene oder einfach eine String-Konstante.
Und passe den Fehlerbehandlungscode (IsDebugMode() and HandleError()) entsprechend deinen Standards an.

Ich benötige noch einige Deklarationen (Declarations):

Private Const LIBRARY = "Eintrag utils"

' WORD LNPUBLIC OSLoadString(HMODULE hModule, STATUS StringCode, char far *retBuffer, WORD BufferLength);
Declare Function OSLoadString Lib "nnotes" Alias "OSLoadString" (ByVal hModule As Long, ByVal stringCode As Integer, ByVal retBuffer As LMBCS String, ByVal bufferLength As Integer) As Integer

' STATUS LNPUBLIC REGGetIDInfo(char far *IDFileName, WORD InfoType, void far *OutBufr, WORD OutBufrLen, WORD far *ActualLen);
Declare Function REGGetIDInfoString  Lib "nnotes" Alias "REGGetIDInfo" (ByVal idFileName As String, ByVal infoType As Integer, ByVal outBufr As String, ByVal outBufrLen As Integer, actualLen As Long) As Integer
Declare Function REGGetIDInfoBoolean Lib "nnotes" Alias "REGGetIDInfo" (ByVal idFileName As String, ByVal infoType As Integer, ByVal outBufr As Long,   ByVal outBufrLen As Integer, actualLen As Long) As Integer

Const REGIDGetName = 7 ' Data structure returned Is char xx[MAXUSERNAME]
Const REGIDGetPrivateKey = 9 ' Data structure returned Is char xx[xx]


' STATUS LNPUBLIC NSFDbClose(DBHANDLE hDB);
Declare Function NSFDbClose Lib "nnotes.dll" (ByVal hDB As Long) As Integer


Const NOERROR = 0

Const NULLHANDLE = 0&

Const MAXUSERNAME = 256


And two support functions for the C API error handling:

Sub ShowCAPIErrorIfAnyAndEnd(errorCode As Integer, functionName As String, hDB As Long)
        '/**
        ' * shows user the C API error and aborts execution.
        ' *
        ' * @param   errorCode return code of the function's execution
        ' * @param   functionName name of the C API function called
        ' * @param   hDB handle to the open database
        ' *
        ' * @author  Thomas Bahn/assono <tbahn@assono.de>
        ' * @version 2014-07-17
        ' */                
       
        If errorCode = NOERROR Then Exit Sub ' exit if no error occured
       
        If hDB <> 0 Then
                ' if there is a valid handle, try to close database
                Call NSFDbClose(hDB)
        End If
       
        Error Err, "Fehler in Bibliothek '" & LIBRARY & "'" & Chr$(10) & _
        "Ein Fehler ist aufgetreten in der C-API-Funktion'" & _
        functionName & "': "  & Chr$(10) &_
        "Fehler-Code: " & Trim$(Str$(errorCode)) & Chr$(10) & _
        "Fehler-Text: " & Chr$(10) & GetCAPIErrorMsg(errorCode)
End Sub

Function GetCAPIErrorMsg(errorCode As Integer) As String
        '/**
        ' * gets error message for the C API error.
        ' *
        ' * @param   errorCode return code of the function's execution
        ' * @return  error message for the C API error
        ' *
        ' * @author  Thomas Bahn/assono <tbahn@assono.de>
        ' * @version 2014-07-17
        ' */        
       
        Dim length As Integer
        Dim buffer As String
       
        ' initialize a buffer of adequate length to accept the error string
        buffer = String$(256, 0)
       
        ' get the API error message from the internal Notes/Domino string
        ' tables
        length = OSLoadString(NULLHANDLE, errorCode, buffer, Len(buffer))
        If length > 0 Then
                ' remove any trailing characters from the string and
                ' return it to the caller
                GetCAPIErrorMsg = Left$(buffer, InStr(1,buffer,Chr$(0))-1)
        Else
                ' couldn’t locate the error message in the string tables
                GetCAPIErrorMsg = "Unbekannter Fehler"
        End If
End Function

Schließlich platziere Code ähnlich dem folgenden in das QueryOpen-Ereignis deiner Maske:

If continue Then
        continue = ValidateCurrentUser()
       
        If continue Then
                ' do some stuff if necessary
        End If
End If

Da der Code ausschließlich Notes C-API-Aufrufe benutzt, kann er leicht auf weitere Plattformen erweitert werden. Momentan ist er auf Windows beschränkt.

AdminCamp 2014: Weil sicher sicher sicher ist – Sicherheit in IBM Domino

30. September 2014 Posted by Thomas Bahn

AdminCamp
Der zweite Tag des diesjährigen AdminCamps nähert sich langsam dem Ende. Ich warte noch gespannt auf die Fragestunde nach dem Abendessen. Auf meine Frage gestern habe ich ganz viele wertvolle Antworten bekommen, so dass ich letzte Nacht gleich eine Lösung bauen konnte. Dazu gleich mehr in einem weiteren Blog-Eintrag.


Hier schon mal die Präsentation zu meinem heutigen Vortrag in Track 2, Session 3: Weil sicher sicher sicher ist - Sicherheit in IBM Domino:

Quick-Tipp: Script-Bibliothek verhindert Ausführung eines Agenten

21. August 2014 Posted by Thomas Bahn

Quick-TippIBM Notes
Heute konnte ich ein Problem eines meiner Kunden lösen: Ein geplanter Server-Agent lief einfach nicht!

Eigentlich lief er doch, nur tat er einfach nichts. Wenn man ihn z. B. per Agent Manager aufgerufen hat (z. B. mit tell amgr run "some-db.nsf" 'Test'), erschienen folgende zwei Zeilen im Server-Protokoll:
AMgr: Start executing agent 'Test' in 'some-db.nsf'
AMgr: Agent 'Test' in 'some-db.nsf' completed execution
Aber selbst ein einfaches Print "TEST" in der ersten Zeile der Initialize-Prozedur gab nichts aus - gar nicht erst zu sprechen von der eigentlichen Aufgabe des Agenten.

Wir haben (wirklich!) alles geprüft, was irgendwie Einfluss haben könnte - u.a. die Einstellungen zur Server-Sicherheit, die Anwendungseigenschaften ("Hintergrundagenten in dieser Datenbank nicht ausführen"), Zugriffskontrollliste (ACL), die Eigenschaften des Agenten...

Dann habe ich Schritt für Schritt den Agenten nachgebaut. Erst die Use-Befehle, dann Stück für Stück den restlichen Code, und alles getestet, wieder und wieder: Es lief so wie es sollte.

Schließlich habe ich den vermeintlich "korrupten" Agenten gelöscht und den neue Agenten umbenannt, so dass er hieß, wie der alte. Und in dem Moment hörte er auf zu funktionieren!

Okay, wieder zurück umbennant - läuft. Noch einmal auf den Namen des ursprünglichen Agenten geändert - läuft nicht.

Weiter im Domino Administrator den "Gottmodus" (Full-access administration) aktiviert und die Datenbank neu im Designer inspiziert. Gibt es vielleicht einen bisher unsichtbaren Agenten mit dem gleichen Namen? Nöps, auch nichts.

Aber ich fand eine Script-Bibliothek mit exakt demselben Namen wie der Agent. Naja, vielleicht... Umbenannt ... und ... der ... Agent ... LÄUFT!

Was habe ich daraus gelernt: Eine Script-Bibliothek verhindert die Ausführung eines Agenten, wenn beide gleich heißen!