From 87105447624e226db84504d950ea5479d765588f Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Fri, 26 Jun 2026 20:37:29 +0300 Subject: [PATCH 01/22] Add CI job to install-test the Windows MSI The opendj-msi package was built and uploaded but never installed or exercised in CI. Add a test-msi job (needs: build-maven) that, on a windows-latest runner, installs the built .msi silently (msiexec /i), runs setup, registers and starts/stops the OpenDJ Windows service with an ldapsearch liveness check, then uninstalls (msiexec /x). --- .github/workflows/build.yml | 50 +++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 58927fe9e8..29cf33ada0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -441,3 +441,53 @@ jobs: timeout 3m bash -c 'until docker inspect --format="{{json .State.Health.Status}}" test_custom | grep -q \"healthy\"; do sleep 10; done' docker exec test_custom 'sh' '-c' '/opt/opendj/bin/ldapsearch --hostname localhost --port 1636 --bindDN "cn=Directory Manager" --bindPassword custom_password --useSsl --trustAll --baseDN "dc=example,dc=com" --searchScope base "(objectClass=*)" 1.1' docker kill test_custom + + test-msi: + needs: build-maven + runs-on: 'windows-latest' + steps: + - name: Download artifacts + uses: actions/download-artifact@v8 + with: + name: windows-latest-11 + - name: Set up Java + uses: actions/setup-java@v5 + with: + java-version: '21' + distribution: 'zulu' + - name: Install MSI (silent) + shell: pwsh + run: | + $msi = (Get-ChildItem -Recurse -Filter *.msi -Path opendj-packages/opendj-msi | Select-Object -First 1).FullName + if (-not $msi) { throw "MSI not found in the windows-latest-11 artifact" } + Write-Host "MSI: $msi" + $p = Start-Process msiexec -Wait -PassThru -ArgumentList "/i `"$msi`" /quiet /qn /norestart OPENDJ=C:\opendj /l*v install.log" + if ($p.ExitCode -ne 0) { Get-Content install.log -Tail 80; throw "msiexec /i failed: $($p.ExitCode)" } + $root = @("C:\opendj","C:\Program Files (x86)\OpenDJ","C:\Program Files\OpenDJ") | Where-Object { Test-Path "$_\setup.bat" } | Select-Object -First 1 + if (-not $root) { Get-Content install.log -Tail 80; throw "OpenDJ install root with setup.bat not found" } + Write-Host "Installed to $root" + "OPENDJ_ROOT=$root" | Out-File -FilePath $env:GITHUB_ENV -Append + - name: Setup and start/stop the Windows service + shell: pwsh + run: | + $root = $env:OPENDJ_ROOT + $env:OPENDJ_JAVA_ARGS = "-server -Xmx512m" + & "$root\setup.bat" -h localhost -p 1389 --ldapsPort 1636 --adminConnectorPort 4444 --enableStartTLS --generateSelfSignedCertificate --rootUserDN "cn=Directory Manager" --rootUserPassword password --baseDN dc=example,dc=com --addBaseEntry --cli --acceptLicense --no-prompt + if ($LASTEXITCODE -ne 0) { throw "setup.bat failed: $LASTEXITCODE" } + & "$root\bat\windows-service.bat" --enableService + if ($LASTEXITCODE -ne 0) { throw "windows-service --enableService failed: $LASTEXITCODE" } + net start "OpenDJ Server" + if ($LASTEXITCODE -ne 0) { throw "net start failed: $LASTEXITCODE" } + for ($i=0; $i -lt 12; $i++) { try { $c = New-Object System.Net.Sockets.TcpClient('localhost', 1636); $c.Close(); break } catch { Start-Sleep -Seconds 5 } } + & "$root\bat\ldapsearch.bat" --hostname localhost --port 1636 --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll --baseDN "dc=example,dc=com" --searchScope base "(objectClass=*)" 1.1 + if ($LASTEXITCODE -ne 0) { throw "ldapsearch failed: $LASTEXITCODE" } + net stop "OpenDJ Server" + if ($LASTEXITCODE -ne 0) { throw "net stop failed: $LASTEXITCODE" } + & "$root\bat\windows-service.bat" --disableService + - name: Uninstall MSI + shell: pwsh + run: | + $msi = (Get-ChildItem -Recurse -Filter *.msi -Path opendj-packages/opendj-msi | Select-Object -First 1).FullName + $p = Start-Process msiexec -Wait -PassThru -ArgumentList "/x `"$msi`" /quiet /qn /norestart /l*v uninstall.log" + if ($p.ExitCode -ne 0) { Get-Content uninstall.log -Tail 80; throw "msiexec /x failed: $($p.ExitCode)" } + Write-Host "Uninstalled OK" From 830629c6b44711338863b3d1a54146f6f55c9ab0 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Sun, 28 Jun 2026 11:45:42 +0300 Subject: [PATCH 02/22] Require Java via MSI launch condition; fix test-msi (--doNotStart, JRE 25) The MSI ships no JRE, so add a WiX launch condition that fails the install early with a clear message when Java is not detected (it does not install Java). JAVA_HOME is captured from the environment before LaunchConditions; `Installed` keeps uninstall/repair working regardless of Java. Fix the test-msi CI job (it failed with `net start` exit 2 "service already started"): - setup.bat is now invoked with --doNotStart, so the server is started only by `net start "OpenDJ Server"` (setup.bat no longer starts a standalone instance first). - Bump actions/setup-java from 21 to 25 (latest LTS; smoke-tests the MSI under a fresh JRE). The runner has JAVA_HOME from setup-java, so the new launch condition is satisfied and the install proceeds. --- .github/workflows/build.yml | 4 ++-- .../opendj-msi-standard/resources/msi/package.wxs | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 29cf33ada0..9384c3ad51 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -453,7 +453,7 @@ jobs: - name: Set up Java uses: actions/setup-java@v5 with: - java-version: '21' + java-version: '25' distribution: 'zulu' - name: Install MSI (silent) shell: pwsh @@ -472,7 +472,7 @@ jobs: run: | $root = $env:OPENDJ_ROOT $env:OPENDJ_JAVA_ARGS = "-server -Xmx512m" - & "$root\setup.bat" -h localhost -p 1389 --ldapsPort 1636 --adminConnectorPort 4444 --enableStartTLS --generateSelfSignedCertificate --rootUserDN "cn=Directory Manager" --rootUserPassword password --baseDN dc=example,dc=com --addBaseEntry --cli --acceptLicense --no-prompt + & "$root\setup.bat" -h localhost -p 1389 --ldapsPort 1636 --adminConnectorPort 4444 --enableStartTLS --generateSelfSignedCertificate --rootUserDN "cn=Directory Manager" --rootUserPassword password --baseDN dc=example,dc=com --addBaseEntry --cli --acceptLicense --no-prompt --doNotStart if ($LASTEXITCODE -ne 0) { throw "setup.bat failed: $LASTEXITCODE" } & "$root\bat\windows-service.bat" --enableService if ($LASTEXITCODE -ne 0) { throw "windows-service --enableService failed: $LASTEXITCODE" } diff --git a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs index 23f4dd4471..9835892c2b 100644 --- a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs +++ b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs @@ -13,7 +13,7 @@ ! information: "Portions Copyright [year] [name of copyright owner]". ! ! Copyright 2013-2016 ForgeRock AS. - ! Portion Copyright 2018 Open Identity Platform Community + ! Portions Copyright 2018-2026 3A Systems, LLC ! --> + + + + + + + From 2b2d25d31d520faa51a63b7372a7a6ab44fb069a Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Sun, 28 Jun 2026 23:22:01 +0300 Subject: [PATCH 03/22] remove MSI JAVA_HOME launch condition The launch condition (Installed OR JAVA_HOME_ENV) false-blocked valid installs: a JRE does not always set JAVA_HOME (it may be only on PATH). Drop it - the MSI again only copies files and Java availability stays the admin's responsibility. The test-msi fix (--doNotStart, JRE 25) is unaffected. --- .../opendj-msi-standard/resources/msi/package.wxs | 9 --------- 1 file changed, 9 deletions(-) diff --git a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs index 9835892c2b..f77dda7a14 100644 --- a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs +++ b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs @@ -35,15 +35,6 @@ - - - - - - - From 3edfa16347ed34e2ce4c3b448cd848be6a607475 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Sun, 28 Jun 2026 23:22:01 +0300 Subject: [PATCH 04/22] document MSI install/upgrade/uninstall The install guide covered only the .zip and native .deb/.rpm. Add Windows MSI sections to chap-install/chap-upgrade/chap-uninstall: GUI and silent msiexec install, Java as a runtime prerequisite the installer does not enforce, configure via setup.bat, optional Windows service registration via windows-service.bat, MSI upgrade (disable service, back up, install newer .msi, upgrade.bat, re-enable), and uninstall via Apps & features / msiexec /x. --- .../asciidoc/install-guide/chap-install.adoc | 44 +++++++++++++++++ .../install-guide/chap-uninstall.adoc | 29 +++++++++++- .../asciidoc/install-guide/chap-upgrade.adoc | 47 +++++++++++++++++++ 3 files changed, 119 insertions(+), 1 deletion(-) diff --git a/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-install.adoc b/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-install.adoc index 92be08f08a..f976103528 100644 --- a/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-install.adoc +++ b/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-install.adoc @@ -40,6 +40,8 @@ This chapter covers installation of OpenDJ server software and includes the foll * xref:#install-rpm["To Install From the RPM Package"] +* xref:#install-msi["To Install With the Windows Installer (MSI)"] + * xref:#install-properties-file["To Install OpenDJ Directory Server With a Properties File"] * xref:#pdb-to-je["To Move Data from a PDB Backend to a JE Backend"] @@ -635,6 +637,48 @@ opendj 0:off 1:off 2:on 3:on 4:on 5:on 6:off ==== +[#install-msi] +.To Install With the Windows Installer (MSI) +==== +On Windows you can install OpenDJ directory server from the `.msi` package. The installer only copies the server files to disk: it does not configure or start a server, it does not register a Windows service, and it does not install a Java runtime. + +. Make sure a supported Java runtime is available, as described in xref:#before-you-install["To Prepare For Installation"]. ++ +The installer does not check for Java. If your default Java environment is not appropriate, set `OPENDJ_JAVA_HOME` to the correct Java installation (or `OPENDJ_JAVA_BIN` to the absolute path of the `java` command), or make sure `java` is on the `PATH`, before you run `setup` or start the server. + +. Install the package, either with the GUI or silently: ++ +* GUI: double-click `opendj-{opendj-version}.msi` and follow the wizard. ++ +* Silent: run the following command (optionally set the installation directory with the `OPENDJ` property): ++ + +[source, console, subs="attributes"] +---- +C:\> msiexec /i opendj-{opendj-version}.msi /quiet OPENDJ="C:\opendj" +---- ++ +By default the package installs under `C:\Program Files\OpenDJ` (the 32-bit installer uses `C:\Program Files (x86)\OpenDJ` on 64-bit Windows). + +. Configure OpenDJ directory server by running the `setup` command, described in xref:../reference/admin-tools-ref.adoc#setup-1[setup(1)] in the __Reference__, from the installation directory. Use `setup.bat` for the GUI wizard or `setup.bat --cli` for the command-line: ++ + +[source, console] +---- +C:\path\to\opendj> setup.bat --cli +---- + +. (Optional) Register OpenDJ as a Windows service and start it. The MSI does not register the service; use the `windows-service` command: ++ + +[source, console] +---- +C:\path\to\opendj\bat> windows-service.bat --enableService +C:\> net start "OpenDJ Server" +---- + +==== + [#install-properties-file] .To Install OpenDJ Directory Server With a Properties File ==== diff --git a/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-uninstall.adoc b/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-uninstall.adoc index 19cc3a3875..17e0413635 100644 --- a/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-uninstall.adoc +++ b/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-uninstall.adoc @@ -12,7 +12,7 @@ information: "Portions copyright [year] [name of copyright owner]". Copyright 2017 ForgeRock AS. - Portions Copyright 2024 3A Systems LLC. + Portions Copyright 2024-2026 3A Systems LLC. //// :figure-caption!: @@ -33,6 +33,8 @@ This chapter includes the following procedures: * xref:#uninstall-rpm["To Uninstall the RPM Package"] +* xref:#uninstall-msi["To Uninstall the Windows MSI Package"] + [#uninstall-gui] .To Remove OpenDJ With the GUI Uninstaller @@ -157,3 +159,28 @@ Removing the package does not remove your data or configuration. You must remove ==== +[#uninstall-msi] +.To Uninstall the Windows MSI Package +==== +Remove OpenDJ directory server installed from the `.msi` package like any other Windows program. + +. If OpenDJ is registered as a Windows service, remove the service first: ++ + +[source, console] +---- +C:\path\to\opendj\bat> windows-service.bat --disableService +---- + +. Uninstall the package, either through __Settings > Apps__ (or __Control Panel > Programs and Features__) by selecting OpenDJ and choosing Uninstall, or from the command-line: ++ + +[source, console, subs="attributes"] +---- +C:\> msiexec /x opendj-{opendj-version}.msi /quiet +---- ++ +Uninstalling removes the files installed by the package. Your configured instance data under the installation directory (for example `config`, `db`, and `logs`) is not removed; delete the installation directory manually to remove all files. + +==== + diff --git a/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-upgrade.adoc b/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-upgrade.adoc index cf0268dec0..c514e71c82 100644 --- a/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-upgrade.adoc +++ b/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-upgrade.adoc @@ -45,6 +45,8 @@ This chapter includes the following procedures and examples: * xref:#upgrade-zip-example["Upgrading to OpenDJ {opendj-version-short}"] +* xref:#upgrade-msi["To Upgrade the Windows MSI Installation"] + * xref:#upgrade-repl["To Upgrade Replicated Servers"] * xref:#new-repl-mixed-topology["To Add a New Replica to an Existing Topology"] @@ -243,6 +245,51 @@ $ ---- ==== +[#upgrade-msi] +.To Upgrade the Windows MSI Installation +==== +Before starting this procedure, follow the steps in xref:#before-you-upgrade["Before You Upgrade"]. Installing the newer `.msi` performs a major upgrade that replaces the installed program files, so make a full file-system backup of the current installation first. + +. Stop the current OpenDJ server. + +. If OpenDJ is registered as a Windows service, disable the service: ++ + +[source, console] +---- +C:\path\to\opendj\bat> windows-service.bat --disableService +---- + +. Back up the file-system directory where OpenDJ is installed. + +. Install the newer package (GUI or silent), using the same installation directory as the current server. Your configured instance data (`config`, `db`, `logs`) is kept; only the program files are replaced: ++ + +[source, console, subs="attributes"] +---- +C:\> msiexec /i opendj-{opendj-version}.msi /quiet OPENDJ="C:\path\to\opendj" +---- + +. Run the `upgrade` command, described in xref:../reference/admin-tools-ref.adoc#upgrade-1[upgrade(1)] in the __Reference__, to bring the configuration and application data up to date with the new binary and script files: ++ + +[source, console] +---- +C:\path\to\opendj> upgrade.bat --no-prompt --acceptLicense +---- + +. Start the upgraded OpenDJ server. + +. If you disabled the Windows service, enable it again: ++ + +[source, console] +---- +C:\path\to\opendj\bat> windows-service.bat --enableService +---- + +==== + [#upgrade-repl] .To Upgrade Replicated Servers ==== From f3b7a1561f358d429e481520ed2f88f4272dfc22 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Mon, 29 Jun 2026 15:54:37 +0300 Subject: [PATCH 05/22] Modernize MSI: WiX v5, x64, register service via WiX, drop wine Migrate the Windows MSI off the EOL WiX 3.11.1 (heat/candle/light run under wine + winetricks dotnet40) to the cross-platform WiX v5 .NET tool, and address the MSI validation findings: - package.wxs rewritten to the WiX v4+ schema: single , x64 (ProgramFiles64Folder), MediaTemplate CompressionLevel="high", InstallerVersion=500, directory harvest (replaces heat), and a / on opendj_service.exe so the MSI itself registers the "OpenDJ Server" Windows service (Start=auto, not started during install - setup must configure the instance first). UpgradeCode preserved. - opendj-msi-standard/pom.xml builds the MSI with `wix build -arch x64`; removed the external-dependency-plugin (wix3111 + winetricks), heat/candle/light and the wine/winetricks antrun steps. - opendj-msi/pom.xml: wine-path profiles replaced by an unconditional module so the MSI builds natively on every OS where opendj-msi is included. - build.yml: drop wine (keep rpm); add a "Setup WiX (.NET tool)" step; test-msi no longer calls windows-service.bat --enableService (the MSI registers it). - install guide: x64 install path; the MSI registers the service. Signing (#4) deferred (no certificate). The Burn bundle that auto-installs a JRE is a follow-up, to be added after this MSI build is validated in CI. --- .github/workflows/build.yml | 23 +- .../asciidoc/install-guide/chap-install.adoc | 7 +- .../opendj-msi/opendj-msi-standard/pom.xml | 288 +++++------------- .../resources/msi/package.wxs | 83 +++-- opendj-packages/opendj-msi/pom.xml | 65 +--- 5 files changed, 138 insertions(+), 328 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9384c3ad51..3f65adc5b2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,19 +28,12 @@ jobs: os: [ 'ubuntu-latest', 'macos-latest', 'windows-latest' ] fail-fast: false steps: - - name: Install wine+rpm for distribution + - name: Install rpm for distribution if: runner.os == 'Linux' shell: bash run: | - sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list - sudo dpkg --add-architecture i386 - sudo mkdir -pm755 /etc/apt/keyrings && sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key - sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/$(lsb_release -c -s)/winehq-$(lsb_release -c -s).sources sudo apt-get update - sudo apt install --install-recommends winehq-stable || sudo apt install --install-recommends winehq-staging - wine --version - version="9.4.0"; sudo wget "https://dl.winehq.org/wine/wine-mono/$version/wine-mono-$version-x86.msi" -O /tmp/wine-mono.msi - wine msiexec /i /tmp/wine-mono.msi + sudo apt-get install -y rpm - uses: actions/checkout@v6 with: fetch-depth: 0 @@ -79,6 +72,14 @@ jobs: run: | echo "MAVEN_PROFILE_FLAG=-P precommit" >> $GITHUB_OUTPUT + - name: Setup WiX (.NET tool) for MSI + shell: bash + run: | + dotnet tool install --global wix --version 5.0.2 || dotnet tool update --global wix --version 5.0.2 + echo "$HOME/.dotnet/tools" >> "$GITHUB_PATH" + export PATH="$HOME/.dotnet/tools:$PATH" + wix --version + wix extension add -g WixToolset.UI.wixext/5.0.2 || true - name: Build with Maven timeout-minutes: 180 env: @@ -474,8 +475,7 @@ jobs: $env:OPENDJ_JAVA_ARGS = "-server -Xmx512m" & "$root\setup.bat" -h localhost -p 1389 --ldapsPort 1636 --adminConnectorPort 4444 --enableStartTLS --generateSelfSignedCertificate --rootUserDN "cn=Directory Manager" --rootUserPassword password --baseDN dc=example,dc=com --addBaseEntry --cli --acceptLicense --no-prompt --doNotStart if ($LASTEXITCODE -ne 0) { throw "setup.bat failed: $LASTEXITCODE" } - & "$root\bat\windows-service.bat" --enableService - if ($LASTEXITCODE -ne 0) { throw "windows-service --enableService failed: $LASTEXITCODE" } + # The service is already registered by the MSI (WiX ServiceInstall); just start it. net start "OpenDJ Server" if ($LASTEXITCODE -ne 0) { throw "net start failed: $LASTEXITCODE" } for ($i=0; $i -lt 12; $i++) { try { $c = New-Object System.Net.Sockets.TcpClient('localhost', 1636); $c.Close(); break } catch { Start-Sleep -Seconds 5 } } @@ -483,7 +483,6 @@ jobs: if ($LASTEXITCODE -ne 0) { throw "ldapsearch failed: $LASTEXITCODE" } net stop "OpenDJ Server" if ($LASTEXITCODE -ne 0) { throw "net stop failed: $LASTEXITCODE" } - & "$root\bat\windows-service.bat" --disableService - name: Uninstall MSI shell: pwsh run: | diff --git a/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-install.adoc b/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-install.adoc index f976103528..66e9f855b6 100644 --- a/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-install.adoc +++ b/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-install.adoc @@ -640,7 +640,7 @@ opendj 0:off 1:off 2:on 3:on 4:on 5:on 6:off [#install-msi] .To Install With the Windows Installer (MSI) ==== -On Windows you can install OpenDJ directory server from the `.msi` package. The installer only copies the server files to disk: it does not configure or start a server, it does not register a Windows service, and it does not install a Java runtime. +On Windows you can install OpenDJ directory server from the `.msi` package. The installer copies the server files to disk and registers the `OpenDJ Server` Windows service, but it does not configure or start a server (run `setup` first) and it does not install a Java runtime. . Make sure a supported Java runtime is available, as described in xref:#before-you-install["To Prepare For Installation"]. + @@ -658,7 +658,7 @@ The installer does not check for Java. If your default Java environment is not a C:\> msiexec /i opendj-{opendj-version}.msi /quiet OPENDJ="C:\opendj" ---- + -By default the package installs under `C:\Program Files\OpenDJ` (the 32-bit installer uses `C:\Program Files (x86)\OpenDJ` on 64-bit Windows). +By default the x64 package installs under `C:\Program Files\OpenDJ`. . Configure OpenDJ directory server by running the `setup` command, described in xref:../reference/admin-tools-ref.adoc#setup-1[setup(1)] in the __Reference__, from the installation directory. Use `setup.bat` for the GUI wizard or `setup.bat --cli` for the command-line: + @@ -668,12 +668,11 @@ By default the package installs under `C:\Program Files\OpenDJ` (the 32-bit inst C:\path\to\opendj> setup.bat --cli ---- -. (Optional) Register OpenDJ as a Windows service and start it. The MSI does not register the service; use the `windows-service` command: +. Start the OpenDJ Windows service. The installer already registered it as `OpenDJ Server`; after configuring with `setup`, start it (it is not started automatically during installation): + [source, console] ---- -C:\path\to\opendj\bat> windows-service.bat --enableService C:\> net start "OpenDJ Server" ---- diff --git a/opendj-packages/opendj-msi/opendj-msi-standard/pom.xml b/opendj-packages/opendj-msi/opendj-msi-standard/pom.xml index 9b4bf07b7e..0c89fea8c7 100644 --- a/opendj-packages/opendj-msi/opendj-msi-standard/pom.xml +++ b/opendj-packages/opendj-msi/opendj-msi-standard/pom.xml @@ -13,7 +13,7 @@ information: "Portions Copyright [year] [name of copyright owner]". Copyright 2015-2016 ForgeRock AS. - Portions Copyright 2018 Open Identity Platform Community + Portions Copyright 2018-2026 3A Systems, LLC --> 4.0.0 @@ -29,265 +29,113 @@ OpenDJ MSI Standard Package - This module generates an OpenDJ MSI package. + This module generates an OpenDJ MSI package using the WiX Toolset v5 .NET tool + (cross-platform; no wine). The `wix` tool must be on the PATH (CI installs it via + `dotnet tool install --global wix`). ${basedir}/resources/msi ${project.build.directory}/${product.name.lowercase} + ${project.build.directory}/msi-staging + ${project.build.directory}/${product.name.lowercase}-${project.version}.msi + 5.0.2 - - - + + ${project.groupId}.${project.artifactId} + org.codehaus.mojo build-helper-maven-plugin - - - - org.openidentityplatform.commons - maven-external-dependency-plugin - false - - - ${project.build.directory}/dependencies/ - - false - true - false - - - openidentityplatform.org - wixtoolset - 3.11.1 - zip - - https://github.com/wixtoolset/wix3/releases/download/wix3111rtm/wix311-binaries.zip - - false - - - openidentityplatform.org - winetricks - LAST - sh - - https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks - - false - - - - - - clean-external-dependencies - clean - - clean-external - - - - resolve-install-external-dependencies - process-resources - - resolve-external - install-external - - - - deploy-external-dependencies - deploy - - deploy-external - - - - - - org.apache.maven.plugins - maven-dependency-plugin - unpack-wix - package - - unpack - - - - - openidentityplatform.org - wixtoolset - 3.11.1 - zip - - - - ${project.build.directory}/wix - - - - - unpack-winetricks + attach-msi-and-bundle package - copy + attach-artifact - - - openidentityplatform.org - winetricks - LAST - sh - - - - ${project.build.directory}/winetricks - + + ${msi.file}msi + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + org.apache.maven.plugins maven-antrun-plugin - build-msi-package-prepare + stage-msi-payload package run - - - + + + - - - - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ------------------- ${exec.heat} ${param.heat} ------------------- - - - - - - - - - - - - - - - - ------------------- ${exec.candle} ${param.candle} ------------------- - - - - - - - - - - - - - ------------------- ${exec.light} ${param.light} ------------------- - - - - - - - - - - - - - - - - - + + + + org.codehaus.mojo + exec-maven-plugin + + + wix-build-msi + package + + exec + + + wix + ${project.build.directory} + + build + ${msi.resources}/package.wxs + -archx64 + -extWixToolset.UI.wixext + -bindpath${msi.resources} + -dname=${product.name} + -dmajor=${parsedVersion.majorVersion} + -dminor=${parsedVersion.minorVersion} + -dpoint=${parsedVersion.incrementalVersion} + -dstaging=${staging.dir} + -o${msi.file} + + + + + - \ No newline at end of file + diff --git a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs index f77dda7a14..6e6db00722 100644 --- a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs +++ b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs @@ -15,45 +15,62 @@ ! Copyright 2013-2016 ForgeRock AS. ! Portions Copyright 2018-2026 3A Systems, LLC ! --> - - - - - - - + + + + + + + + - - + + - - - - - - - + + + + - + + + + + + + + + + + + + + + + - - + + + + - - - - - - - NOT Installed - 1 - - + + + diff --git a/opendj-packages/opendj-msi/pom.xml b/opendj-packages/opendj-msi/pom.xml index f652541ac6..3a697e73f4 100644 --- a/opendj-packages/opendj-msi/pom.xml +++ b/opendj-packages/opendj-msi/pom.xml @@ -32,63 +32,10 @@ This module contains configuration and generic plugin call to build OpenDJ MSI packages. - - - /usr/bin/wine - - unix - /usr/bin/wine - - - opendj-msi-standard - - - /usr/bin/wine${project.build.directory}/wix/heat.exe - /usr/bin/wine${project.build.directory}/wix/candle.exe - /usr/bin/wine${project.build.directory}/wix/light.exe - - - - /usr/local/bin/wine - - unix - /usr/local/bin/wine - - - opendj-msi-standard - - - /usr/local/bin/wine${project.build.directory}/wix/heat.exe - /usr/local/bin/wine${project.build.directory}/wix/candle.exe - /usr/local/bin/wine${project.build.directory}/wix/light.exe - - - - /opt/local/bin/wine - - unix - /opt/local/bin/wine - - - opendj-msi-standard - - - /opt/local/bin/wine${project.build.directory}/wix/heat.exe - /opt/local/bin/wine${project.build.directory}/wix/candle.exe - /opt/local/bin/wine${project.build.directory}/wix/light.exe - - - - windows - windows - - opendj-msi-standard - - - ${project.build.directory}\wix\heat.exe - ${project.build.directory}\wix\candle.exe - ${project.build.directory}\wix\light.exe - - - + + + opendj-msi-standard + From f92565627ecc4aee61993d732d885c729c56a8b3 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Mon, 29 Jun 2026 15:59:23 +0300 Subject: [PATCH 06/22] Fix MSI CI: DOTNET_ROLL_FORWARD=Major so the net6.0 wix tool runs WiX 5 ships as a net6.0 .NET tool, but the runners only have a newer .NET runtime (no .NET 6), so 'wix' failed to launch (exit 131, missing_runtime) on arm64 macOS. Set DOTNET_ROLL_FORWARD=Major in the Setup WiX step (exported and written to GITHUB_ENV) so the tool rolls forward to the installed runtime, both for that step and the Maven build that invokes 'wix build'. --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3f65adc5b2..0a24aa407e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -75,6 +75,9 @@ jobs: - name: Setup WiX (.NET tool) for MSI shell: bash run: | + # WiX 5 ships as a net6.0 tool; allow it to run on the newer .NET runtime present on the runners. + echo "DOTNET_ROLL_FORWARD=Major" >> "$GITHUB_ENV" + export DOTNET_ROLL_FORWARD=Major dotnet tool install --global wix --version 5.0.2 || dotnet tool update --global wix --version 5.0.2 echo "$HOME/.dotnet/tools" >> "$GITHUB_PATH" export PATH="$HOME/.dotnet/tools:$PATH" From 60364d50000b6eb34922378388835d7137393607 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Mon, 29 Jun 2026 16:12:17 +0300 Subject: [PATCH 07/22] Fix MSI build: WiX v5 Files child Exclude; .NET runtime for wix on macOS wix build failed with WIX0004 ('Files element contains an unexpected attribute Exclude'): in WiX 5.0.2 exclusion is a child element (with ), not an inline attribute. Convert both harvests to the child-element form. macOS (arm64) runners have no .NET runtime for the net6.0 wix apphost (DOTNET_ROOT unset, exit 131); add actions/setup-dotnet (8.0.x) on macOS so the tool finds a runtime and rolls forward. --- .github/workflows/build.yml | 5 +++++ .../opendj-msi-standard/resources/msi/package.wxs | 10 ++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0a24aa407e..0e3a276dec 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -72,6 +72,11 @@ jobs: run: | echo "MAVEN_PROFILE_FLAG=-P precommit" >> $GITHUB_OUTPUT + - name: Setup .NET runtime for WiX (macOS) + if: runner.os == 'macOS' + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' - name: Setup WiX (.NET tool) for MSI shell: bash run: | diff --git a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs index 6e6db00722..7e24a13621 100644 --- a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs +++ b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs @@ -58,10 +58,16 @@ - + + + + - + + + + From 8571e3d9c53fdd1408aefb2f31c986c851e52461 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Mon, 29 Jun 2026 16:53:42 +0300 Subject: [PATCH 08/22] Fix MSI build: do Files exclusions in Ant staging (WiX 5 Files takes only Include) WiX 5.0.2 requires Include as an attribute on and rejects an Exclude attribute as well as / child elements (WIX0004/0005/0010). Move all exclusions to the Ant staging step: stagingRoot = payload minus lib (and macOS/Unix bits), stagingLib = lib minus opendj_service.exe (registered via an explicit component sourced from the package dir). Each now uses only the Include attribute, and there is no duplicate lib directory. --- .../opendj-msi/opendj-msi-standard/pom.xml | 28 +++++++++++++++---- .../resources/msi/package.wxs | 17 ++++------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/opendj-packages/opendj-msi/opendj-msi-standard/pom.xml b/opendj-packages/opendj-msi/opendj-msi-standard/pom.xml index 0c89fea8c7..c1eb2ff709 100644 --- a/opendj-packages/opendj-msi/opendj-msi-standard/pom.xml +++ b/opendj-packages/opendj-msi/opendj-msi-standard/pom.xml @@ -37,7 +37,11 @@ ${basedir}/resources/msi ${project.build.directory}/${product.name.lowercase} - ${project.build.directory}/msi-staging + + ${project.build.directory}/msi-staging + ${project.build.directory}/msi-staging-lib + ${package.dir}/lib/opendj_service.exe ${project.build.directory}/${product.name.lowercase}-${project.version}.msi 5.0.2 @@ -86,19 +90,31 @@ - - - + + + + + + + + + + + + + + @@ -129,7 +145,9 @@ -dmajor=${parsedVersion.majorVersion} -dminor=${parsedVersion.minorVersion} -dpoint=${parsedVersion.incrementalVersion} - -dstaging=${staging.dir} + -dstagingRoot=${staging.root} + -dstagingLib=${staging.lib} + -dserviceExe=${service.exe} -o${msi.file} diff --git a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs index 7e24a13621..2866f91801 100644 --- a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs +++ b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs @@ -46,7 +46,7 @@ Registered here, but NOT started during install (the instance must be configured by setup.bat first). --> - + - + - - - - + - - - - + From 7ebd48bc45e1258502efea744a0a1ce470a4e5bf Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Wed, 1 Jul 2026 15:13:01 +0300 Subject: [PATCH 09/22] Use forward slashes in WiX Files Include (test non-Windows wix build) On Linux/macOS the wix tool treats backslash as a literal, not a path separator, which may cascade into the WIX0389 'not a relative path' errors. Use '/**' (accepted on Windows too) to test whether the cross-platform wix build then succeeds. --- .../opendj-msi/opendj-msi-standard/resources/msi/package.wxs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs index 2866f91801..520121247f 100644 --- a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs +++ b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs @@ -59,10 +59,10 @@ needs only the Include attribute (WiX 5 requires it; no Exclude here): stagingRoot has everything except lib; stagingLib has lib minus the service wrapper. --> - + - + From 8e297c034cc08b127dc451aedc9deb65e831ea40 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Wed, 1 Jul 2026 15:50:24 +0300 Subject: [PATCH 10/22] Build the MSI on Windows only (WiX cannot author MSIs on Linux/macOS) The WiX Toolset can create MSI databases on Windows only: it warns "only supports Windows" and, on Linux/macOS, fails with WIX0389 on every Directory name and (with no name) on a missing msi.dll (the Windows Installer library). Verified locally on macOS with WiX 5.0.2, 6.0.1 and 7.0.0 - none can build. - opendj-packages/pom.xml: build opendj-msi only in the distribution-windows profile (removed from distribution-unix and distribution-mac). - build.yml: run the WiX setup step only on Windows; drop macOS setup-dotnet. - package.wxs: keep the Windows-proven backslash glob in . - .gitattributes: force LF for *.wxs/*.wxi. --- .gitattributes | 3 +++ .github/workflows/build.yml | 9 +++------ .../opendj-msi-standard/resources/msi/package.wxs | 4 ++-- opendj-packages/pom.xml | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..2676ab14f7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +# WiX sources must stay LF so the WiX toolset parses them consistently across runners. +*.wxs text eol=lf +*.wxi text eol=lf diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0e3a276dec..e1136a25e9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -72,15 +72,12 @@ jobs: run: | echo "MAVEN_PROFILE_FLAG=-P precommit" >> $GITHUB_OUTPUT - - name: Setup .NET runtime for WiX (macOS) - if: runner.os == 'macOS' - uses: actions/setup-dotnet@v4 - with: - dotnet-version: '8.0.x' - name: Setup WiX (.NET tool) for MSI + if: runner.os == 'Windows' shell: bash run: | - # WiX 5 ships as a net6.0 tool; allow it to run on the newer .NET runtime present on the runners. + # The MSI builds on Windows only (WiX cannot author MSIs on Linux/macOS). WiX 5 ships as a + # net6.0 tool; allow it to run on the newer .NET runtime present on the runner. echo "DOTNET_ROLL_FORWARD=Major" >> "$GITHUB_ENV" export DOTNET_ROLL_FORWARD=Major dotnet tool install --global wix --version 5.0.2 || dotnet tool update --global wix --version 5.0.2 diff --git a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs index 520121247f..2866f91801 100644 --- a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs +++ b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs @@ -59,10 +59,10 @@ needs only the Include attribute (WiX 5 requires it; no Exclude here): stagingRoot has everything except lib; stagingLib has lib minus the service wrapper. --> - + - + diff --git a/opendj-packages/pom.xml b/opendj-packages/pom.xml index 739e77779f..83d43d7ec0 100644 --- a/opendj-packages/pom.xml +++ b/opendj-packages/pom.xml @@ -55,7 +55,6 @@ opendj-deb opendj-rpm opendj-svr4 - opendj-msi opendj-docker @@ -69,7 +68,6 @@ opendj-svr4 - opendj-msi opendj-docker @@ -79,6 +77,8 @@ windows + opendj-msi opendj-docker From a3e3d00f580eb5dbad7cf719c68a0fd952d3383e Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Thu, 2 Jul 2026 15:13:40 +0300 Subject: [PATCH 11/22] Publish the Windows MSI in release/deploy without rebuilding the server The MSI can only be built on Windows. Instead of rebuilding opendj-server-legacy on a Windows runner: - deploy.yml: reuse the MSI already built by the triggering Build run (download the windows-latest-11 artifact, re-upload as "OpenDJ MSI Package"); both steps continue-on-error; drop wine (rpm only). - release.yml: release-maven uploads the released server zip as an artifact; new release-msi job (windows, continue-on-error so an MSI failure does not break the release) installs the zip into the local Maven repository and only packages :opendj-msi-standard (no -am), then attaches the MSI to the GitHub release; drop the .msi from the ubuntu release file list; drop wine. --- .github/workflows/deploy.yml | 25 ++++++----- .github/workflows/release.yml | 80 ++++++++++++++++++++++++++++++----- 2 files changed, 85 insertions(+), 20 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 8b56d45faa..723c8606be 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -14,19 +14,12 @@ jobs: env: GITHUB_CONTEXT: ${{ toJSON(github) }} run: echo "$GITHUB_CONTEXT" - - name: Install wine+rpm for distribution + - name: Install rpm for distribution if: runner.os == 'Linux' shell: bash run: | - sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list - sudo dpkg --add-architecture i386 - sudo mkdir -pm755 /etc/apt/keyrings && sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key - sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/$(lsb_release -c -s)/winehq-$(lsb_release -c -s).sources sudo apt-get update - sudo apt install --install-recommends winehq-stable || sudo apt install --install-recommends winehq-staging - wine --version - version="9.4.0"; sudo wget "https://dl.winehq.org/wine/wine-mono/$version/wine-mono-$version-x86.msi" -O /tmp/wine-mono.msi - wine msiexec /i /tmp/wine-mono.msi + sudo apt-get install -y rpm - uses: actions/checkout@v6 with: fetch-depth: 0 @@ -90,11 +83,22 @@ jobs: with: name: OpenDJ RPM Package path: opendj-packages/opendj-rpm/opendj-rpm-standard/target/rpm/opendj/RPMS/noarch/*.rpm + # The MSI can only be built on Windows; reuse the one already built by the triggering + # Build run (windows-latest-11 artifact) instead of rebuilding it here. + - name: Download Windows build artifact (contains the MSI) + continue-on-error: true + uses: actions/download-artifact@v8 + with: + name: windows-latest-11 + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ secrets.GITHUB_TOKEN }} + path: windows-build - name: Upload artifacts OpenDJ MSI Package + continue-on-error: true uses: actions/upload-artifact@v7 with: name: OpenDJ MSI Package - path: opendj-packages/opendj-msi/opendj-msi-standard/target/*.msi + path: windows-build/opendj-packages/opendj-msi/opendj-msi-standard/target/*.msi - name: Upload artifacts OpenDJ Docker Packages uses: actions/upload-artifact@v7 with: @@ -169,3 +173,4 @@ jobs: git commit -a -m "upload ${{github.event.repository.name}} docs after deploy ${{ github.sha }}" git push --force https://github.com/OpenIdentityPlatform/doc.openidentityplatform.org.git fi + diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 41bb3bc8b0..1533fc5d3a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,18 +19,11 @@ jobs: env: GITHUB_CONTEXT: ${{ toJSON(github) }} run: echo "$GITHUB_CONTEXT" - - name: Install wine+rpm for distribution + - name: Install rpm for distribution shell: bash run: | - sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list - sudo dpkg --add-architecture i386 - sudo mkdir -pm755 /etc/apt/keyrings && sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key - sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/$(lsb_release -c -s)/winehq-$(lsb_release -c -s).sources sudo apt-get update - sudo apt install --install-recommends winehq-stable || sudo apt install --install-recommends winehq-staging - wine --version - version="9.4.0"; sudo wget "https://dl.winehq.org/wine/wine-mono/$version/wine-mono-$version-x86.msi" -O /tmp/wine-mono.msi - wine msiexec /i /tmp/wine-mono.msi + sudo apt-get install -y rpm - uses: actions/checkout@v6 with: fetch-depth: 0 @@ -70,6 +63,15 @@ jobs: MAVEN_OPTS: -Dhttps.protocols=TLSv1.2 -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.requestSentEnabled=true -Dmaven.wagon.http.retryHandler.count=10 if: ${{ env.MAVEN_USERNAME!='' && env.MAVEN_PASSWORD!='' }} run: mvn --batch-mode -Darguments="-Dgpg.passphrase=${{ secrets.GPG_PASSPHRASE }}" -DsignTag=true -DtagNameFormat="${{ github.event.inputs.releaseVersion }}" -DreleaseVersion=${{ github.event.inputs.releaseVersion }} -DdevelopmentVersion=${{ github.event.inputs.developmentVersion }} release:prepare release:perform --file pom.xml + # Hand the just-released server zip to the release-msi job (the MSI can only be + # built on Windows), so it does not have to rebuild opendj-server-legacy. + - name: Upload the server zip for the MSI job + continue-on-error: true + uses: actions/upload-artifact@v7 + with: + name: release-server-zip + retention-days: 1 + path: target/checkout/opendj-server-legacy/target/package/*.zip - name: Release on GitHub uses: softprops/action-gh-release@v2 with: @@ -84,7 +86,6 @@ jobs: target/checkout/opendj-ldap-toolkit/target/*.zip target/checkout/opendj-packages/opendj-deb/opendj-deb-standard/target/*.deb target/checkout/opendj-packages/opendj-rpm/opendj-rpm-standard/target/rpm/opendj/RPMS/noarch/*.rpm - target/checkout/opendj-packages/opendj-msi/opendj-msi-standard/target/*.msi target/checkout/opendj-packages/opendj-docker/target/Dockerfile.zip target/checkout/opendj-packages/opendj-openshift-template/*.yaml target/checkout/opendj-doc-generated-ref/target/*.zip @@ -130,6 +131,65 @@ jobs: git tag -f ${TAG_NAME} git push --quiet --force origin ${TAG_NAME} + # The MSI can only be built on Windows. Reuses the server zip built by release-maven + # (installed into the local repo), so only the opendj-msi-standard module is built here. + # continue-on-error: an MSI failure must not break the release. + release-msi: + name: Windows MSI release + runs-on: 'windows-latest' + continue-on-error: true + needs: + - release-maven + steps: + - uses: actions/checkout@v6 + with: + ref: ${{ github.event.inputs.releaseVersion }} + submodules: recursive + - name: Set up Java + uses: actions/setup-java@v5 + with: + java-version: '11' + distribution: 'temurin' + - name: Cache Maven packages + uses: actions/cache@v5 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-m2-repository-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-m2-repository + - name: Setup WiX (.NET tool) + shell: bash + run: | + echo "DOTNET_ROLL_FORWARD=Major" >> "$GITHUB_ENV" + export DOTNET_ROLL_FORWARD=Major + dotnet tool install --global wix --version 5.0.2 || dotnet tool update --global wix --version 5.0.2 + echo "$HOME/.dotnet/tools" >> "$GITHUB_PATH" + export PATH="$HOME/.dotnet/tools:$PATH" + wix --version + wix extension add -g WixToolset.UI.wixext/5.0.2 || true + - name: Download the server zip built by release-maven + uses: actions/download-artifact@v8 + with: + name: release-server-zip + path: server-zip + - name: Install the server zip into the local Maven repository + shell: bash + run: | + ZIP=$(ls server-zip/*.zip | head -1) + echo "Installing $ZIP as opendj-server-legacy:${{ github.event.inputs.releaseVersion }}:zip" + mvn --batch-mode install:install-file -Dfile="$ZIP" \ + -DgroupId=org.openidentityplatform.opendj -DartifactId=opendj-server-legacy \ + -Dversion=${{ github.event.inputs.releaseVersion }} -Dpackaging=zip + - name: Build the MSI (packaging only, no rebuild) + env: + MAVEN_OPTS: -Dhttps.protocols=TLSv1.2 -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.requestSentEnabled=true -Dmaven.wagon.http.retryHandler.count=10 + run: mvn --batch-mode --errors -DskipTests package -pl :opendj-msi-standard --file pom.xml + - name: Attach the MSI to the GitHub release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ github.event.inputs.releaseVersion }} + fail_on_unmatched_files: true + files: opendj-packages/opendj-msi/opendj-msi-standard/target/*.msi + release-docker: name: Docker release runs-on: 'ubuntu-latest' From 431b69343540e879b99bdb9ae83a36f1dc5c69aa Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Thu, 2 Jul 2026 15:39:48 +0300 Subject: [PATCH 12/22] MSI: require a JRE at install, upgrade over existing installs, replace legacy service - package.wxs: refuse to install when no Java is detectable (JAVA_HOME\bin\java.exe or java-looking PATH entries; MSI cannot scan PATH, so substring heuristic) with a message pointing at https://adoptium.net; detect an existing install (InstallDir registry value written by this package, else the legacy x86 default directory) and apply it only when OPENDJ is not set explicitly; drop the legacy windows-service.bat "OpenDJ Server" service before InstallServices (its display name collides with the MSI ServiceInstall). - build.yml: test-msi asserts the installer fails without a JRE before one is set up; new test-win-upgrade installs the released 5.1.1 x86 MSI, configures an instance with the legacy service, upgrades with the newly built x64 MSI without OPENDJ and asserts same directory, intact data, MSI-managed service, then runs upgrade.bat, starts the service and searches the pre-upgrade data. - docs: Java is required by the installer (adoptium.net link); MSI upgrade autodetects the directory and replaces the service; uninstall removes the service automatically. --- .github/workflows/build.yml | 81 +++++++++++++++++++ .../asciidoc/install-guide/chap-install.adoc | 2 +- .../install-guide/chap-uninstall.adoc | 12 +-- .../asciidoc/install-guide/chap-upgrade.adoc | 20 ++--- .../resources/msi/package.wxs | 44 ++++++++++ 5 files changed, 134 insertions(+), 25 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e1136a25e9..4cd47cddf5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -456,6 +456,18 @@ jobs: uses: actions/download-artifact@v8 with: name: windows-latest-11 + - name: Install must fail without a JRE + shell: pwsh + run: | + # Simulate a machine with no Java: clear JAVA_HOME and strip java-looking PATH entries. + $env:JAVA_HOME = "" + $env:PATH = (($env:PATH -split ';') | Where-Object { $_ -notmatch 'java|jdk|jre|zulu|javapath' }) -join ';' + $msi = (Get-ChildItem -Recurse -Filter *.msi -Path opendj-packages/opendj-msi | Select-Object -First 1).FullName + if (-not $msi) { throw "MSI not found in the windows-latest-11 artifact" } + $p = Start-Process msiexec -Wait -PassThru -ArgumentList "/i `"$msi`" /quiet /qn /norestart /l*v install-nojre.log" + if ($p.ExitCode -eq 0) { throw "installer succeeded without a JRE, but the Java launch condition must fail it" } + Write-Host "Installer refused to install without a JRE as expected (exit $($p.ExitCode))" + Select-String -Path install-nojre.log -Pattern "requires Java" | Select-Object -First 1 - name: Set up Java uses: actions/setup-java@v5 with: @@ -495,3 +507,72 @@ jobs: $p = Start-Process msiexec -Wait -PassThru -ArgumentList "/x `"$msi`" /quiet /qn /norestart /l*v uninstall.log" if ($p.ExitCode -ne 0) { Get-Content uninstall.log -Tail 80; throw "msiexec /x failed: $($p.ExitCode)" } Write-Host "Uninstalled OK" + + # Upgrade path: released 5.1.1 x86 MSI (wine-built, WiX3) -> this build's x64 MSI. + # Verifies the new installer detects the legacy Program Files (x86) install, keeps the + # instance data in place, replaces the windows-service.bat service with the MSI-managed + # one, and the upgraded server starts with the old data. + test-win-upgrade: + needs: build-maven + runs-on: 'windows-latest' + steps: + - name: Download artifacts + uses: actions/download-artifact@v8 + with: + name: windows-latest-11 + - name: Set up Java + uses: actions/setup-java@v5 + with: + java-version: '25' + distribution: 'zulu' + - name: Install released 5.1.1 MSI and configure an instance + shell: pwsh + run: | + Invoke-WebRequest -Uri "https://github.com/OpenIdentityPlatform/OpenDJ/releases/download/5.1.1/opendj-5.1.1.msi" -OutFile opendj-5.1.1.msi + $p = Start-Process msiexec -Wait -PassThru -ArgumentList "/i opendj-5.1.1.msi /quiet /qn /norestart /l*v install-old.log" + if ($p.ExitCode -ne 0) { Get-Content install-old.log -Tail 80; throw "msiexec /i (5.1.1) failed: $($p.ExitCode)" } + $root = "C:\Program Files (x86)\OpenDJ" + if (-not (Test-Path "$root\setup.bat")) { Get-Content install-old.log -Tail 80; throw "5.1.1 install root not found at $root" } + $env:OPENDJ_JAVA_ARGS = "-server -Xmx512m" + & "$root\setup.bat" -h localhost -p 1389 --ldapsPort 1636 --adminConnectorPort 4444 --enableStartTLS --generateSelfSignedCertificate --rootUserDN "cn=Directory Manager" --rootUserPassword password --baseDN dc=example,dc=com --addBaseEntry --cli --acceptLicense --no-prompt --doNotStart + if ($LASTEXITCODE -ne 0) { throw "setup.bat (5.1.1) failed: $LASTEXITCODE" } + # Register the LEGACY service the pre-MSI way and prove it works, then stop it. + & "$root\bat\windows-service.bat" --enableService + if ($LASTEXITCODE -ne 0) { throw "windows-service --enableService failed: $LASTEXITCODE" } + net start "OpenDJ Server" + if ($LASTEXITCODE -ne 0) { throw "net start (5.1.1) failed: $LASTEXITCODE" } + net stop "OpenDJ Server" + if ($LASTEXITCODE -ne 0) { throw "net stop (5.1.1) failed: $LASTEXITCODE" } + - name: Upgrade with the newly built MSI (no OPENDJ property - must auto-detect) + shell: pwsh + run: | + $msi = (Get-ChildItem -Recurse -Filter *.msi -Path opendj-packages/opendj-msi | Select-Object -First 1).FullName + if (-not $msi) { throw "MSI not found in the windows-latest-11 artifact" } + $p = Start-Process msiexec -Wait -PassThru -ArgumentList "/i `"$msi`" /quiet /qn /norestart /l*v upgrade.log" + if ($p.ExitCode -ne 0) { Get-Content upgrade.log -Tail 120; throw "msiexec /i (upgrade) failed: $($p.ExitCode)" } + $root = "C:\Program Files (x86)\OpenDJ" + # New package files landed in the legacy directory, not the x64 default + if (-not (Test-Path "$root\setup.bat")) { throw "upgrade did not keep the legacy install dir" } + if (Test-Path "C:\Program Files\OpenDJ") { throw "upgrade unexpectedly installed into the x64 default dir" } + # Instance data survived + if (-not (Test-Path "$root\config\config.ldif")) { throw "instance data (config\config.ldif) lost by the upgrade" } + # Legacy service replaced by the MSI-managed one: display name maps to key 'OpenDJ' + $key = (sc.exe getkeyname "OpenDJ Server" | Select-String -Pattern "Name = (.+)").Matches[0].Groups[1].Value.Trim() + if ($key -ne "OpenDJ") { sc.exe query; throw "expected MSI-managed service key 'OpenDJ', got '$key'" } + sc.exe qc OpenDJ + "OPENDJ_ROOT=$root" | Out-File -FilePath $env:GITHUB_ENV -Append + - name: Run upgrade.bat and start the upgraded server + shell: pwsh + run: | + $root = $env:OPENDJ_ROOT + $env:OPENDJ_JAVA_ARGS = "-server -Xmx512m" + & "$root\upgrade.bat" --no-prompt --acceptLicense --force + if ($LASTEXITCODE -ne 0) { throw "upgrade.bat failed: $LASTEXITCODE" } + net start "OpenDJ Server" + if ($LASTEXITCODE -ne 0) { throw "net start (upgraded) failed: $LASTEXITCODE" } + for ($i=0; $i -lt 12; $i++) { try { $c = New-Object System.Net.Sockets.TcpClient('localhost', 1636); $c.Close(); break } catch { Start-Sleep -Seconds 5 } } + # The pre-upgrade data must still be served + & "$root\bat\ldapsearch.bat" --hostname localhost --port 1636 --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll --baseDN "dc=example,dc=com" --searchScope base "(objectClass=*)" 1.1 + if ($LASTEXITCODE -ne 0) { throw "ldapsearch after upgrade failed: $LASTEXITCODE" } + net stop "OpenDJ Server" + if ($LASTEXITCODE -ne 0) { throw "net stop (upgraded) failed: $LASTEXITCODE" } diff --git a/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-install.adoc b/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-install.adoc index 66e9f855b6..7fdbe50c62 100644 --- a/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-install.adoc +++ b/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-install.adoc @@ -644,7 +644,7 @@ On Windows you can install OpenDJ directory server from the `.msi` package. The . Make sure a supported Java runtime is available, as described in xref:#before-you-install["To Prepare For Installation"]. + -The installer does not check for Java. If your default Java environment is not appropriate, set `OPENDJ_JAVA_HOME` to the correct Java installation (or `OPENDJ_JAVA_BIN` to the absolute path of the `java` command), or make sure `java` is on the `PATH`, before you run `setup` or start the server. +The installer refuses to install when it cannot detect a Java installation: install a JRE (for example link:https://adoptium.net[Eclipse Temurin, window=\_blank]), set `JAVA_HOME` to your Java installation, or make sure the `java` executable is on the `PATH`, before running it. If your default Java environment is not the one OpenDJ should use, additionally set `OPENDJ_JAVA_HOME` to the correct Java installation (or `OPENDJ_JAVA_BIN` to the absolute path of the `java` command) before you run `setup` or start the server. . Install the package, either with the GUI or silently: + diff --git a/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-uninstall.adoc b/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-uninstall.adoc index 17e0413635..3adc45d381 100644 --- a/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-uninstall.adoc +++ b/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-uninstall.adoc @@ -162,17 +162,9 @@ Removing the package does not remove your data or configuration. You must remove [#uninstall-msi] .To Uninstall the Windows MSI Package ==== -Remove OpenDJ directory server installed from the `.msi` package like any other Windows program. +Remove OpenDJ directory server installed from the `.msi` package like any other Windows program. The uninstaller stops and removes the `OpenDJ Server` Windows service that the package registered. -. If OpenDJ is registered as a Windows service, remove the service first: -+ - -[source, console] ----- -C:\path\to\opendj\bat> windows-service.bat --disableService ----- - -. Uninstall the package, either through __Settings > Apps__ (or __Control Panel > Programs and Features__) by selecting OpenDJ and choosing Uninstall, or from the command-line: +* Uninstall the package, either through __Settings > Apps__ (or __Control Panel > Programs and Features__) by selecting OpenDJ and choosing Uninstall, or from the command-line: + [source, console, subs="attributes"] diff --git a/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-upgrade.adoc b/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-upgrade.adoc index c514e71c82..d91b763711 100644 --- a/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-upgrade.adoc +++ b/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-upgrade.adoc @@ -250,25 +250,19 @@ $ ==== Before starting this procedure, follow the steps in xref:#before-you-upgrade["Before You Upgrade"]. Installing the newer `.msi` performs a major upgrade that replaces the installed program files, so make a full file-system backup of the current installation first. -. Stop the current OpenDJ server. - -. If OpenDJ is registered as a Windows service, disable the service: -+ - -[source, console] ----- -C:\path\to\opendj\bat> windows-service.bat --disableService ----- +. Stop the current OpenDJ server (if it runs as a Windows service, `net stop "OpenDJ Server"`). . Back up the file-system directory where OpenDJ is installed. -. Install the newer package (GUI or silent), using the same installation directory as the current server. Your configured instance data (`config`, `db`, `logs`) is kept; only the program files are replaced: +. Install the newer package (GUI or silent). The installer detects the existing installation — the location recorded in the registry by a previous x64 package, or the default directory of the older 32-bit package (`C:\Program Files (x86)\OpenDJ`) — and installs into the same directory, so your configured instance data (`config`, `db`, `logs`) is kept and only the program files are replaced. If the older server was installed in a custom directory the installer did not detect, select that directory in the GUI or pass it explicitly: + [source, console, subs="attributes"] ---- C:\> msiexec /i opendj-{opendj-version}.msi /quiet OPENDJ="C:\path\to\opendj" ---- ++ +The installer replaces a service registered by the older `windows-service.bat` command with the MSI-managed `OpenDJ Server` service automatically; no manual `--disableService`/`--enableService` is needed. . Run the `upgrade` command, described in xref:../reference/admin-tools-ref.adoc#upgrade-1[upgrade(1)] in the __Reference__, to bring the configuration and application data up to date with the new binary and script files: + @@ -278,14 +272,12 @@ C:\> msiexec /i opendj-{opendj-version}.msi /quiet OPENDJ="C:\path\to\opendj" C:\path\to\opendj> upgrade.bat --no-prompt --acceptLicense ---- -. Start the upgraded OpenDJ server. - -. If you disabled the Windows service, enable it again: +. Start the upgraded OpenDJ server: + [source, console] ---- -C:\path\to\opendj\bat> windows-service.bat --enableService +C:\> net start "OpenDJ Server" ---- ==== diff --git a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs index 2866f91801..142d1ced45 100644 --- a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs +++ b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs @@ -31,6 +31,43 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -55,6 +92,12 @@ Stop="both" Remove="uninstall" Wait="yes"/> + + + + + @@ -67,6 +110,7 @@ + From 50247e1e5b30de8b9ff91ac7ce1cddf0e2f0c414 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Thu, 2 Jul 2026 17:53:28 +0300 Subject: [PATCH 13/22] Document the unsigned-MSI SmartScreen warning; drop unused wix.version property --- .../src/main/asciidoc/install-guide/chap-install.adoc | 2 ++ opendj-packages/opendj-msi/opendj-msi-standard/pom.xml | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-install.adoc b/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-install.adoc index 7fdbe50c62..5770bfc24d 100644 --- a/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-install.adoc +++ b/opendj-doc-generated-ref/src/main/asciidoc/install-guide/chap-install.adoc @@ -648,6 +648,8 @@ The installer refuses to install when it cannot detect a Java installation: inst . Install the package, either with the GUI or silently: + +The package is not code-signed, so Windows SmartScreen or User Account Control may warn about an unrecognized publisher; choose to run the installer anyway. ++ * GUI: double-click `opendj-{opendj-version}.msi` and follow the wizard. + * Silent: run the following command (optionally set the installation directory with the `OPENDJ` property): diff --git a/opendj-packages/opendj-msi/opendj-msi-standard/pom.xml b/opendj-packages/opendj-msi/opendj-msi-standard/pom.xml index c1eb2ff709..f7505785c1 100644 --- a/opendj-packages/opendj-msi/opendj-msi-standard/pom.xml +++ b/opendj-packages/opendj-msi/opendj-msi-standard/pom.xml @@ -43,7 +43,6 @@ ${project.build.directory}/msi-staging-lib ${package.dir}/lib/opendj_service.exe ${project.build.directory}/${product.name.lowercase}-${project.version}.msi - 5.0.2 From 20fbcca8530b41b5873bf3404f365b62f9de68b4 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Thu, 2 Jul 2026 21:28:34 +0300 Subject: [PATCH 14/22] Fix unquoted java.io.tmpdir (paths with spaces); harden MSI tests - _script-util.bat: quote -Djava.io.tmpdir="%OPENDJ_TMP_DIR%" - any install directory containing spaces (including the x64 default C:\Program Files\OpenDJ and the legacy Program Files (x86)) broke the CheckJVMVersion probe and every script with "The detected Java version could not be used". - build.yml test-msi: the no-JRE negative test now hides Java at MACHINE scope (the Windows Installer service evaluates launch conditions with the machine environment) and restarts msiserver, restoring everything afterwards; the positive install now goes to the spaced x64 default directory end-to-end. - build.yml test-msi-upgrade (renamed from test-win-upgrade): the released 5.1.1 scripts cannot run from a spaced directory, so the old install lives in C:\opendj and the upgrade passes OPENDJ explicitly; added a fresh-install scenario asserting the legacy default directory is auto-detected when OPENDJ is not given, plus uninstall/service cleanup checks. - ADNotificationRequestControl: escape && in the javadoc code sample (javadoc "invalid input: '&'" warnings). --- .github/workflows/build.yml | 73 ++++++++++++++----- .../ADNotificationRequestControl.java | 5 +- .../resource/bin/_script-util.bat | 4 +- 3 files changed, 60 insertions(+), 22 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4cd47cddf5..ab2c5faab7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -459,15 +459,31 @@ jobs: - name: Install must fail without a JRE shell: pwsh run: | - # Simulate a machine with no Java: clear JAVA_HOME and strip java-looking PATH entries. + # Simulate a machine with no Java. The launch condition is evaluated by the Windows + # Installer service, which sees the MACHINE environment - so hide Java there too and + # restart msiserver to make it pick the change up; restore everything afterwards. + Stop-Service msiserver -Force -ErrorAction SilentlyContinue + $oldJH = [Environment]::GetEnvironmentVariable('JAVA_HOME','Machine') + $oldPM = [Environment]::GetEnvironmentVariable('Path','Machine') + [Environment]::SetEnvironmentVariable('JAVA_HOME',$null,'Machine') + [Environment]::SetEnvironmentVariable('Path',((($oldPM -split ';') | Where-Object { $_ -notmatch 'java|jdk|jre|zulu|javapath' }) -join ';'),'Machine') $env:JAVA_HOME = "" $env:PATH = (($env:PATH -split ';') | Where-Object { $_ -notmatch 'java|jdk|jre|zulu|javapath' }) -join ';' - $msi = (Get-ChildItem -Recurse -Filter *.msi -Path opendj-packages/opendj-msi | Select-Object -First 1).FullName - if (-not $msi) { throw "MSI not found in the windows-latest-11 artifact" } - $p = Start-Process msiexec -Wait -PassThru -ArgumentList "/i `"$msi`" /quiet /qn /norestart /l*v install-nojre.log" - if ($p.ExitCode -eq 0) { throw "installer succeeded without a JRE, but the Java launch condition must fail it" } - Write-Host "Installer refused to install without a JRE as expected (exit $($p.ExitCode))" - Select-String -Path install-nojre.log -Pattern "requires Java" | Select-Object -First 1 + try { + $msi = (Get-ChildItem -Recurse -Filter *.msi -Path opendj-packages/opendj-msi | Select-Object -First 1).FullName + if (-not $msi) { throw "MSI not found in the windows-latest-11 artifact" } + $p = Start-Process msiexec -Wait -PassThru -ArgumentList "/i `"$msi`" /quiet /qn /norestart /l*v install-nojre.log" + if ($p.ExitCode -eq 0) { + Get-Content install-nojre.log -Tail 60 + throw "installer succeeded without a JRE, but the Java launch condition must fail it" + } + Write-Host "Installer refused to install without a JRE as expected (exit $($p.ExitCode))" + Select-String -Path install-nojre.log -Pattern "requires Java" | Select-Object -First 1 + } finally { + [Environment]::SetEnvironmentVariable('JAVA_HOME',$oldJH,'Machine') + [Environment]::SetEnvironmentVariable('Path',$oldPM,'Machine') + Stop-Service msiserver -Force -ErrorAction SilentlyContinue + } - name: Set up Java uses: actions/setup-java@v5 with: @@ -479,10 +495,12 @@ jobs: $msi = (Get-ChildItem -Recurse -Filter *.msi -Path opendj-packages/opendj-msi | Select-Object -First 1).FullName if (-not $msi) { throw "MSI not found in the windows-latest-11 artifact" } Write-Host "MSI: $msi" - $p = Start-Process msiexec -Wait -PassThru -ArgumentList "/i `"$msi`" /quiet /qn /norestart OPENDJ=C:\opendj /l*v install.log" + # No OPENDJ property: exercise the x64 default C:\Program Files\OpenDJ (a path with + # spaces, which the server scripts must handle). + $p = Start-Process msiexec -Wait -PassThru -ArgumentList "/i `"$msi`" /quiet /qn /norestart /l*v install.log" if ($p.ExitCode -ne 0) { Get-Content install.log -Tail 80; throw "msiexec /i failed: $($p.ExitCode)" } - $root = @("C:\opendj","C:\Program Files (x86)\OpenDJ","C:\Program Files\OpenDJ") | Where-Object { Test-Path "$_\setup.bat" } | Select-Object -First 1 - if (-not $root) { Get-Content install.log -Tail 80; throw "OpenDJ install root with setup.bat not found" } + $root = "C:\Program Files\OpenDJ" + if (-not (Test-Path "$root\setup.bat")) { Get-Content install.log -Tail 80; throw "OpenDJ not installed into the x64 default $root" } Write-Host "Installed to $root" "OPENDJ_ROOT=$root" | Out-File -FilePath $env:GITHUB_ENV -Append - name: Setup and start/stop the Windows service @@ -512,7 +530,7 @@ jobs: # Verifies the new installer detects the legacy Program Files (x86) install, keeps the # instance data in place, replaces the windows-service.bat service with the MSI-managed # one, and the upgraded server starts with the old data. - test-win-upgrade: + test-msi-upgrade: needs: build-maven runs-on: 'windows-latest' steps: @@ -529,9 +547,11 @@ jobs: shell: pwsh run: | Invoke-WebRequest -Uri "https://github.com/OpenIdentityPlatform/OpenDJ/releases/download/5.1.1/opendj-5.1.1.msi" -OutFile opendj-5.1.1.msi - $p = Start-Process msiexec -Wait -PassThru -ArgumentList "/i opendj-5.1.1.msi /quiet /qn /norestart /l*v install-old.log" + # The released 5.1.1 scripts cannot run from a directory with spaces (unquoted + # java.io.tmpdir), so put the old install into C:\opendj. + $p = Start-Process msiexec -Wait -PassThru -ArgumentList "/i opendj-5.1.1.msi /quiet /qn /norestart OPENDJ=C:\opendj /l*v install-old.log" if ($p.ExitCode -ne 0) { Get-Content install-old.log -Tail 80; throw "msiexec /i (5.1.1) failed: $($p.ExitCode)" } - $root = "C:\Program Files (x86)\OpenDJ" + $root = "C:\opendj" if (-not (Test-Path "$root\setup.bat")) { Get-Content install-old.log -Tail 80; throw "5.1.1 install root not found at $root" } $env:OPENDJ_JAVA_ARGS = "-server -Xmx512m" & "$root\setup.bat" -h localhost -p 1389 --ldapsPort 1636 --adminConnectorPort 4444 --enableStartTLS --generateSelfSignedCertificate --rootUserDN "cn=Directory Manager" --rootUserPassword password --baseDN dc=example,dc=com --addBaseEntry --cli --acceptLicense --no-prompt --doNotStart @@ -543,16 +563,16 @@ jobs: if ($LASTEXITCODE -ne 0) { throw "net start (5.1.1) failed: $LASTEXITCODE" } net stop "OpenDJ Server" if ($LASTEXITCODE -ne 0) { throw "net stop (5.1.1) failed: $LASTEXITCODE" } - - name: Upgrade with the newly built MSI (no OPENDJ property - must auto-detect) + - name: Upgrade with the newly built MSI (same directory passed explicitly) shell: pwsh run: | $msi = (Get-ChildItem -Recurse -Filter *.msi -Path opendj-packages/opendj-msi | Select-Object -First 1).FullName if (-not $msi) { throw "MSI not found in the windows-latest-11 artifact" } - $p = Start-Process msiexec -Wait -PassThru -ArgumentList "/i `"$msi`" /quiet /qn /norestart /l*v upgrade.log" + $p = Start-Process msiexec -Wait -PassThru -ArgumentList "/i `"$msi`" /quiet /qn /norestart OPENDJ=C:\opendj /l*v upgrade.log" if ($p.ExitCode -ne 0) { Get-Content upgrade.log -Tail 120; throw "msiexec /i (upgrade) failed: $($p.ExitCode)" } - $root = "C:\Program Files (x86)\OpenDJ" - # New package files landed in the legacy directory, not the x64 default - if (-not (Test-Path "$root\setup.bat")) { throw "upgrade did not keep the legacy install dir" } + $root = "C:\opendj" + # New package files landed in the old directory, not the x64 default + if (-not (Test-Path "$root\setup.bat")) { throw "upgrade did not keep the old install dir" } if (Test-Path "C:\Program Files\OpenDJ") { throw "upgrade unexpectedly installed into the x64 default dir" } # Instance data survived if (-not (Test-Path "$root\config\config.ldif")) { throw "instance data (config\config.ldif) lost by the upgrade" } @@ -576,3 +596,20 @@ jobs: if ($LASTEXITCODE -ne 0) { throw "ldapsearch after upgrade failed: $LASTEXITCODE" } net stop "OpenDJ Server" if ($LASTEXITCODE -ne 0) { throw "net stop (upgraded) failed: $LASTEXITCODE" } + - name: Auto-detect the legacy default directory on a fresh install + shell: pwsh + run: | + $msi = (Get-ChildItem -Recurse -Filter *.msi -Path opendj-packages/opendj-msi | Select-Object -First 1).FullName + # Clean up the previous scenario first. + $p = Start-Process msiexec -Wait -PassThru -ArgumentList "/x `"$msi`" /quiet /qn /norestart /l*v uninstall1.log" + if ($p.ExitCode -ne 0) { Get-Content uninstall1.log -Tail 80; throw "msiexec /x failed: $($p.ExitCode)" } + if (Get-Service OpenDJ -ErrorAction SilentlyContinue) { throw "service not removed by uninstall" } + # An existing legacy default directory must be picked up when OPENDJ is not given. + New-Item -ItemType Directory -Force "C:\Program Files (x86)\OpenDJ" | Out-Null + $p = Start-Process msiexec -Wait -PassThru -ArgumentList "/i `"$msi`" /quiet /qn /norestart /l*v install-autodetect.log" + if ($p.ExitCode -ne 0) { Get-Content install-autodetect.log -Tail 80; throw "msiexec /i (autodetect) failed: $($p.ExitCode)" } + if (-not (Test-Path "C:\Program Files (x86)\OpenDJ\setup.bat")) { Get-Content install-autodetect.log -Tail 80; throw "installer did not auto-detect the legacy default dir" } + if (Test-Path "C:\Program Files\OpenDJ") { throw "installer used the x64 default dir despite an existing legacy dir" } + Write-Host "Legacy default directory auto-detected OK" + $p = Start-Process msiexec -Wait -PassThru -ArgumentList "/x `"$msi`" /quiet /qn /norestart /l*v uninstall2.log" + if ($p.ExitCode -ne 0) { Get-Content uninstall2.log -Tail 80; throw "msiexec /x (cleanup) failed: $($p.ExitCode)" } diff --git a/opendj-core/src/main/java/org/forgerock/opendj/ldap/controls/ADNotificationRequestControl.java b/opendj-core/src/main/java/org/forgerock/opendj/ldap/controls/ADNotificationRequestControl.java index c2c6ea3669..631f5e1e05 100644 --- a/opendj-core/src/main/java/org/forgerock/opendj/ldap/controls/ADNotificationRequestControl.java +++ b/opendj-core/src/main/java/org/forgerock/opendj/ldap/controls/ADNotificationRequestControl.java @@ -12,6 +12,7 @@ * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2013-2016 ForgeRock AS. + * Portions Copyright 2026 3A Systems, LLC */ package org.forgerock.opendj.ldap.controls; @@ -39,12 +40,12 @@ * SearchResultEntry entry = reader.readEntry(); // Entry that changed * * Boolean isDeleted = entry.parseAttribute("isDeleted").asBoolean(); - * if (isDeleted != null && isDeleted) { + * if (isDeleted != null && isDeleted) { * // Handle entry deletion * } * String whenCreated = entry.parseAttribute("whenCreated").asString(); * String whenChanged = entry.parseAttribute("whenChanged").asString(); - * if (whenCreated != null && whenChanged != null) { + * if (whenCreated != null && whenChanged != null) { * if (whenCreated.equals(whenChanged)) { * //Handle entry addition * } else { diff --git a/opendj-server-legacy/resource/bin/_script-util.bat b/opendj-server-legacy/resource/bin/_script-util.bat index f6bacbb9d1..30ef80d811 100644 --- a/opendj-server-legacy/resource/bin/_script-util.bat +++ b/opendj-server-legacy/resource/bin/_script-util.bat @@ -13,7 +13,7 @@ rem information: "Portions Copyright [year] [name of copyright owner]". rem rem Copyright 2008-2010 Sun Microsystems, Inc. rem Portions Copyright 2011-2016 ForgeRock AS. -rem Portions Copyright 2020-2025 3A Systems, LLC. +rem Portions Copyright 2020-2026 3A Systems, LLC. set SET_JAVA_HOME_AND_ARGS_DONE=false set SET_ENVIRONMENT_VARS_DONE=false @@ -186,7 +186,7 @@ goto scriptBegin if %SET_TEMP_DIR_DONE% == "true" goto end set OPENDJ_TMP_DIR=%INSTANCE_ROOT%\tmp if not exist "%OPENDJ_TMP_DIR%" mkdir "%OPENDJ_TMP_DIR%" -set OPENDJ_JAVA_ARGS=%OPENDJ_JAVA_ARGS% -Djava.io.tmpdir=%OPENDJ_TMP_DIR% +set OPENDJ_JAVA_ARGS=%OPENDJ_JAVA_ARGS% -Djava.io.tmpdir="%OPENDJ_TMP_DIR%" set SET_TEMP_DIR_DONE=true goto scriptBegin From 23b355af8302cbc99826b80844cfe5a12901fc22 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Thu, 2 Jul 2026 21:34:55 +0300 Subject: [PATCH 15/22] Fix unquoted java.io.tmpdir in Windows scripts (install paths with spaces) _script-util.bat appends -Djava.io.tmpdir=%OPENDJ_TMP_DIR% to OPENDJ_JAVA_ARGS without quotes, so in any install directory containing spaces (for example C:\Program Files (x86)\OpenDJ) the CheckJVMVersion probe - and with it setup and every other command-line tool - fails with "The detected Java version could not be used with the set of Java arguments". Quote the value: -Djava.io.tmpdir="%OPENDJ_TMP_DIR%". --- opendj-server-legacy/resource/bin/_script-util.bat | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opendj-server-legacy/resource/bin/_script-util.bat b/opendj-server-legacy/resource/bin/_script-util.bat index f6bacbb9d1..30ef80d811 100644 --- a/opendj-server-legacy/resource/bin/_script-util.bat +++ b/opendj-server-legacy/resource/bin/_script-util.bat @@ -13,7 +13,7 @@ rem information: "Portions Copyright [year] [name of copyright owner]". rem rem Copyright 2008-2010 Sun Microsystems, Inc. rem Portions Copyright 2011-2016 ForgeRock AS. -rem Portions Copyright 2020-2025 3A Systems, LLC. +rem Portions Copyright 2020-2026 3A Systems, LLC. set SET_JAVA_HOME_AND_ARGS_DONE=false set SET_ENVIRONMENT_VARS_DONE=false @@ -186,7 +186,7 @@ goto scriptBegin if %SET_TEMP_DIR_DONE% == "true" goto end set OPENDJ_TMP_DIR=%INSTANCE_ROOT%\tmp if not exist "%OPENDJ_TMP_DIR%" mkdir "%OPENDJ_TMP_DIR%" -set OPENDJ_JAVA_ARGS=%OPENDJ_JAVA_ARGS% -Djava.io.tmpdir=%OPENDJ_TMP_DIR% +set OPENDJ_JAVA_ARGS=%OPENDJ_JAVA_ARGS% -Djava.io.tmpdir="%OPENDJ_TMP_DIR%" set SET_TEMP_DIR_DONE=true goto scriptBegin From a80fcdbd24be809b04684c86760719074263c0b1 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Fri, 3 Jul 2026 12:53:59 +0300 Subject: [PATCH 16/22] Fix classpath building for install paths with spaces/parentheses (setcp.bat) _script-util.bat passed unquoted paths to setcp.bat, and setcp.bat compared arguments with if ""%1""=="""". The argument-joining hack survived spaces, but a parenthesis in the path (C:\Program Files (x86)\OpenDJ - the default MSI directory) breaks the cmd parser with "... was unexpected at this time", so setup.bat and every tool exit with 255. Quote the setcp.bat arguments at the three call sites and switch setcp.bat to %~1 with quoted comparisons. --- opendj-server-legacy/resource/bin/_script-util.bat | 6 +++--- opendj-server-legacy/resource/bin/setcp.bat | 11 +++++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/opendj-server-legacy/resource/bin/_script-util.bat b/opendj-server-legacy/resource/bin/_script-util.bat index 30ef80d811..37538a75b3 100644 --- a/opendj-server-legacy/resource/bin/_script-util.bat +++ b/opendj-server-legacy/resource/bin/_script-util.bat @@ -56,10 +56,10 @@ rem get the absolute paths before building the classpath rem it also helps comparing the two paths FOR /F "delims=" %%i IN ("%INSTALL_ROOT%") DO set INSTALL_ROOT=%%~dpnxi FOR /F "delims=" %%i IN ("%INSTANCE_ROOT%") DO set INSTANCE_ROOT=%%~dpnxi -call "%INSTALL_ROOT%\lib\setcp.bat" %INSTALL_ROOT%\lib\bootstrap-client.jar +call "%INSTALL_ROOT%\lib\setcp.bat" "%INSTALL_ROOT%\lib\bootstrap-client.jar" set CLASSPATH=%INSTANCE_ROOT%\classes;%CLASSPATH% if "%INSTALL_ROOT%" == "%INSTANCE_ROOT%" goto setClassPathDone -FOR %%x in ("%INSTANCE_ROOT%\lib\*.jar") DO call "%INSTANCE_ROOT%\lib\setcp.bat" %%x +FOR %%x in ("%INSTANCE_ROOT%\lib\*.jar") DO call "%INSTANCE_ROOT%\lib\setcp.bat" "%%x" :setClassPathDone set SET_CLASSPATH_DONE=true goto scriptBegin @@ -71,7 +71,7 @@ rem get the absolute paths before building the classpath rem it also helps comparing the two paths FOR /F "delims=" %%i IN ("%INSTALL_ROOT%") DO set INSTALL_ROOT=%%~dpnxi FOR /F "delims=" %%i IN ("%INSTANCE_ROOT%") DO set INSTANCE_ROOT=%%~dpnxi -call "%INSTALL_ROOT%\lib\setcp.bat" %INSTALL_ROOT%\lib\* +call "%INSTALL_ROOT%\lib\setcp.bat" "%INSTALL_ROOT%\lib\*" set CLASSPATH=%INSTANCE_ROOT%\classes;%CLASSPATH% set SET_CLASSPATH_DONE=true goto scriptBegin diff --git a/opendj-server-legacy/resource/bin/setcp.bat b/opendj-server-legacy/resource/bin/setcp.bat index a47d4e6ac5..eca179c082 100644 --- a/opendj-server-legacy/resource/bin/setcp.bat +++ b/opendj-server-legacy/resource/bin/setcp.bat @@ -12,14 +12,17 @@ rem Header, with the fields enclosed by brackets [] replaced by your own identif rem information: "Portions Copyright [year] [name of copyright owner]". rem rem Copyright 2006-2008 Sun Microsystems, Inc. +rem Portions Copyright 2026 3A Systems, LLC -set CLASSPATHCOMPONENT=%1 -if ""%1""=="""" goto gotAllArgs +rem Use %~1 and quoted comparisons so paths containing spaces and parentheses +rem (for example C:\Program Files (x86)\OpenDJ) do not break the parser. +set CLASSPATHCOMPONENT=%~1 +if "%~1"=="" goto gotAllArgs shift :argCheck -if ""%1""=="""" goto gotAllArgs -set CLASSPATHCOMPONENT=%CLASSPATHCOMPONENT% %1 +if "%~1"=="" goto gotAllArgs +set CLASSPATHCOMPONENT=%CLASSPATHCOMPONENT% %~1 shift goto argCheck From dc97ea4420824267509f3f060893ef8d201a8fae Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Fri, 3 Jul 2026 16:33:26 +0300 Subject: [PATCH 17/22] Use "if defined" for JAVA_ARGS checks: the quoted java.io.tmpdir broke "%VAR%" == "" comparisons After -Djava.io.tmpdir="%OPENDJ_TMP_DIR%" is appended, OPENDJ_JAVA_ARGS contains embedded quotes, and the subsequent if "%OPENDJ_JAVA_ARGS%" == "" checks blow up the cmd parser ('...\tmp"" was unexpected at this time', every tool exits 255) regardless of whether the install path has spaces. Compare with "if defined", which does not expand the value. --- opendj-server-legacy/resource/bin/_script-util.bat | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/opendj-server-legacy/resource/bin/_script-util.bat b/opendj-server-legacy/resource/bin/_script-util.bat index 37538a75b3..bea162b7cd 100644 --- a/opendj-server-legacy/resource/bin/_script-util.bat +++ b/opendj-server-legacy/resource/bin/_script-util.bat @@ -100,7 +100,8 @@ rem if not "%OPENDJ_JAVA_ARGS%" == "" goto checkEnvJavaHome set SCRIPT_JAVA_ARGS_PROPERTY=%SCRIPT_NAME%.java-args call:readProperty %SCRIPT_JAVA_ARGS_PROPERTY% set OPENDJ_JAVA_ARGS=%OPENDJ_JAVA_ARGS% %PROPERTY_VALUE% -if not "%OPENDJ_JAVA_ARGS%" == "" goto checkEnvJavaHome +rem "if defined" comparisons: the value may contain quotes (java.io.tmpdir), which break "%VAR%" == "" checks. +if defined OPENDJ_JAVA_ARGS goto checkEnvJavaHome call:readProperty default.java-args set OPENDJ_JAVA_ARGS=%OPENDJ_JAVA_ARGS% %PROPERTY_VALUE if "%OPENDJ_JAVA_BIN%" == "" goto checkEnvJavaHome @@ -191,7 +192,7 @@ set SET_TEMP_DIR_DONE=true goto scriptBegin :testJava -if "%OPENDJ_JAVA_ARGS%" == "" goto checkLegacyArgs +if not defined OPENDJ_JAVA_ARGS goto checkLegacyArgs :continueTestJava "%OPENDJ_JAVA_BIN%" %OPENDJ_JAVA_ARGS% org.opends.server.tools.CheckJVMVersion > NUL 2>&1 set RESULT_CODE=%errorlevel% @@ -200,12 +201,12 @@ if not %RESULT_CODE% == 0 goto noValidJavaHome goto end :checkLegacyArgs -if "%OPENDS_JAVA_ARGS%" == "" goto continueTestJava +if not defined OPENDS_JAVA_ARGS goto continueTestJava set OPENDJ_JAVA_ARGS=%OPENDS_JAVA_ARGS% goto continueTestJava :noValidJavaHome -if NOT "%OPENDJ_JAVA_ARGS%" == "" goto noValidHomeWithArgs +if defined OPENDJ_JAVA_ARGS goto noValidHomeWithArgs echo ERROR: The detected Java version could not be used. The detected echo Java binary is: echo %OPENDJ_JAVA_BIN% From a6c9fb021c11713671289e50a29afd9c637a9de5 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Sat, 4 Jul 2026 09:47:27 +0300 Subject: [PATCH 18/22] MSI: ship the empty instance directories and fix the service ImagePath quoting - The harvest ships files only (heat had -ke), so the empty instance directories (bak, changelogDb, classes, db, import-tmp, ldif, locks, logs, tmp and the template ones) were missing from the installed tree and the server could not create its lock/pid files - setup aborted with "error stopping server". Create them with explicit CreateFolder components. - [OPENDJ] ends with a backslash which escaped the closing quote in the service ImagePath ('start "C:\opendj\"' -> broken argv), so the MSI-managed service failed to start (NET HELPMSG 2186). Append an extra backslash so \\" parses as backslash + closing quote. --- .../resources/msi/package.wxs | 46 ++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs index 142d1ced45..d90e9cb4e0 100644 --- a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs +++ b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs @@ -76,18 +76,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Arguments="start "[OPENDJ]\"" Vital="no"/> @@ -113,6 +156,7 @@ + From 1a4f66eb9ebfbdb2a9bf9bd93a28549ad6c579a7 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Sat, 4 Jul 2026 13:03:22 +0300 Subject: [PATCH 19/22] MSI: explicit GUIDs for the CreateFolder components (WIX0230) Components whose KeyPath is a directory cannot use auto-generated GUIDs, so the empty-instance-directory components broke wix build with WIX0230. Assign fixed GUIDs. --- .../resources/msi/package.wxs | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs index d90e9cb4e0..cef70bf31b 100644 --- a/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs +++ b/opendj-packages/opendj-msi/opendj-msi-standard/resources/msi/package.wxs @@ -101,23 +101,23 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + + Arguments="start "[OPENDJ]."" Vital="no"/> diff --git a/opendj-server-legacy/src/build-tools/windows/service.c b/opendj-server-legacy/src/build-tools/windows/service.c index 1fd7e373d0..29fbb87381 100644 --- a/opendj-server-legacy/src/build-tools/windows/service.c +++ b/opendj-server-legacy/src/build-tools/windows/service.c @@ -826,6 +826,118 @@ ServiceReturnCode createServiceBinPath(char* serviceBinPath) return returnValue; } // createServiceBinPath +// ---------------------------------------------------- +// Reads the next command line token starting at *p into out (at most +// outSize - 1 characters). A token is either a run of non-blank +// characters or a double-quoted string; quotes are treated as plain +// delimiters without escape processing, so a trailing backslash-quote +// sequence (as written by msiexec) leaves trailing backslashes on the +// token, which normalizeInstanceDir strips. Returns the position right +// after the token. +// ---------------------------------------------------- + +static const char* nextCmdToken(const char* p, char* out, int outSize) +{ + int i = 0; + while ((*p == ' ') || (*p == '\t')) + { + p++; + } + if (*p == '"') + { + p++; + while ((*p != '\0') && (*p != '"')) + { + if (i < (outSize - 1)) + { + out[i++] = *p; + } + p++; + } + if (*p == '"') + { + p++; + } + } + else + { + while ((*p != '\0') && (*p != ' ') && (*p != '\t')) + { + if (i < (outSize - 1)) + { + out[i++] = *p; + } + p++; + } + } + out[i] = '\0'; + return p; +} // nextCmdToken + +// ---------------------------------------------------- +// Strips trailing backslashes and "\." path segments from an instance +// dir so that "C:\opendj", "C:\opendj\" and "C:\opendj\." all compare +// equal. +// ---------------------------------------------------- + +static void normalizeInstanceDir(char* dir) +{ + size_t len = strlen(dir); + BOOL changed = TRUE; + while (changed && (len > 0)) + { + changed = FALSE; + if (dir[len - 1] == '\\') + { + dir[--len] = '\0'; + changed = TRUE; + } + else if ((len > 1) && (dir[len - 1] == '.') && (dir[len - 2] == '\\')) + { + dir[--len] = '\0'; + changed = TRUE; + } + } +} // normalizeInstanceDir + +// ---------------------------------------------------- +// Tells whether two service command lines refer to the same server +// instance. The strings cannot be compared verbatim because every +// writer quotes differently: this executable and the java tools write +// '"\lib\opendj_service.exe" start ""' while the MSI +// ServiceInstall writes the executable unquoted (when the path has no +// spaces) and the instance dir with a trailing backslash. Instead the +// executable path, the subcommand and the normalized instance dir are +// compared token by token, case-insensitively. +// ---------------------------------------------------- + +static BOOL serviceCmdsMatch(const char* cmd1, const char* cmd2) +{ + char exe1[COMMAND_SIZE]; + char exe2[COMMAND_SIZE]; + char sub1[COMMAND_SIZE]; + char sub2[COMMAND_SIZE]; + char dir1[COMMAND_SIZE]; + char dir2[COMMAND_SIZE]; + const char* p1 = cmd1; + const char* p2 = cmd2; + + p1 = nextCmdToken(p1, exe1, COMMAND_SIZE); + p1 = nextCmdToken(p1, sub1, COMMAND_SIZE); + nextCmdToken(p1, dir1, COMMAND_SIZE); + + p2 = nextCmdToken(p2, exe2, COMMAND_SIZE); + p2 = nextCmdToken(p2, sub2, COMMAND_SIZE); + nextCmdToken(p2, dir2, COMMAND_SIZE); + + normalizeInstanceDir(dir1); + normalizeInstanceDir(dir2); + + return (_stricmp(exe1, exe2) == 0) + && (_stricmp(sub1, sub2) == 0) + && (_stricmp(dir1, dir2) == 0); +} // serviceCmdsMatch + // ---------------------------------------------------- // Returns the service name that maps the command used to start the // product. All commands are supposed to be unique because they have @@ -866,7 +978,7 @@ ServiceReturnCode getServiceName(char* cmdToRun, char* serviceName) ServiceDescriptor curService = serviceList[i]; if (curService.cmdToRun != NULL) { - if (_stricmp(cmdToRun, curService.cmdToRun) == 0) + if (serviceCmdsMatch(cmdToRun, curService.cmdToRun)) { if (strlen(curService.serviceName) < MAX_SERVICE_NAME) { From b23db327ba80b8723eae3fa5b1e936b9fb142620 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Tue, 7 Jul 2026 09:31:46 +0300 Subject: [PATCH 22/22] Rebuild Windows native binaries with the ImagePath fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace opendj_service.exe, winlauncher.exe and launcher_administrator.exe with the CI-built artifacts from the fixed service.c (tolerant ImagePath matching, commit 262f98f66). Verified by green test-msi and test-msi-upgrade — the Windows service now starts (no more error 2186). --- .../lib/launcher_administrator.exe | Bin 159232 -> 160256 bytes opendj-server-legacy/lib/opendj_service.exe | Bin 169984 -> 170496 bytes opendj-server-legacy/lib/winlauncher.exe | Bin 158208 -> 159232 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/opendj-server-legacy/lib/launcher_administrator.exe b/opendj-server-legacy/lib/launcher_administrator.exe index 50b885811d2d0f841b4af5d8500c3298e195084b..bfb8ae4fdff4b313043dfb3daa18f939576aeef2 100644 GIT binary patch delta 46115 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 delta 46047 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 diff --git a/opendj-server-legacy/lib/opendj_service.exe b/opendj-server-legacy/lib/opendj_service.exe index 0b458d8f72c8796c7336720edb0adc56d21533c8..4e20ac794117bc1ec049ade896455928ec0b70fd 100644 GIT binary patch delta 56361 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%0AIzyFP~$M8m)nLfx%6NO-;dXIRE?Euy92NgeM9< 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 delta 55489 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

POCZZ^s!JPkg?( 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 DT&Gwr