Last Updated:

Audit code in Domino server - part 1: Requirements

HCL Domino

I have made a presentation at Collabsphere and Engage about a NSF tool I developed in order to audit the code of a Domino server for a Spanish customer.

I receive attention from many English-speaking users who asked me for an English version.

As I see space for improvements, I will explain the process from scratch and add new features.

My personal list of requirements:

  1. One server = one audit database who contains all the data.
  2. One central location who gather system information in one place before starting analysis
  3. Option to choose what to analyze
  4. Easy to maintain and with possible manual live analysis triggered by the user
  5. Always accurate through nightly automatic update processes
  6. Focus on usability instead of top-of-the-noch analysis, extra detailed extraction
  7. Lotuscript and Java based (No API C calls)
  8. Possible creation and exportation of a report for a database or a group of databases
  9. High value information presented easily

What DBs to analyze?

We will not analyze System databases, templates, mail files. We will focus on Business applications.

What are the questions we want to answer about the code?

Where do we have the following bad practices:

  • Hard-coded server names
  • Hard-coded usernames, who can be current users, deprecated users (DENY ACCESS GROUP Members), disabled users (temporary disabled users)
  • Hard-coded database names
  • Hardcoded emails 
  • Other hard-coded values from a list per request
  • Inheritance of design elements blocked at low level

What language are in use in the NSF to develop applications

  • Externals JAR stored in NSF
  • Use of Java language
  • Use of Javascript
  • Use of Bootstrap + version

What are the others components in use

  • Use of Libre Office, Word, Excel
  • Use of PDF
  • Teamstudio Buildmanager
  • http API calls


Where do we use specific components

  • OLE calls 
  • LS2J - LotusScript 2 Java Bridge
  • LEI
  • DECS
  • Search for specific CreateObject method

Where we see ties to Operating System bitiness:

  • lock-unlock method
  • NotesSession.Platform="Windows/32"
  • NotesSession.Platform,3))="win"
  • GetActiveWindow
  • List of DLL used ("kernel32")

Long term limitations for Nomad

  • JavaAgents
  • XPages
  • LS2J
  • Web Services
  • @Command( [EditFind] )
  • C Api "OSLoadProgram" 
  • NotesHTTPRequest 


Usage in HCL Nomad


Not supported. Generates the error "Operation not supported on this platform."


If a drive letter is contained in the argument, generates the error "Device unavailable."


Not supported. Generates the error "Operation not supported on this platform."

Date, Date$

Can fetch current date. Setting the date generates the error "Illegal function call."


Generates the error "Error in Loading DLL."


Does not return the following attributes: ATTR_HIDDEN, ATTR_ARCHIVE, ATTR_VOLUME, ATTR_SYSTEM.


Not supported. Generates the error "Operation not supported on this platform."

Lock, Unlock

Not supported. Generates the error "Operation not supported on this platform."


Not supported. Because CreateObject is not supported, unable to get Wscript.Shell object.


Ignores the attributes ATTR_HIDDEN, ATTR_ARCHIVE, and ATTR_VOLUME.


Not supported. Generates the error "Unable to open file."

Time, Time$

Can fetch current time. Setting the time generates the error "Illegal function call."