From f681f87b6cb2ed433a6464e885a98d0be7993a16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Otto=20Kr=C3=B6pke?= Date: Wed, 7 Oct 2026 17:56:37 +0200 Subject: [PATCH] process: report owner label as DOMAIN\user (#2515) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Claude Opus 5.5 Signed-off-by: Jan-Otto Kröpke --- internal/collector/process/process.go | 2 +- .../process/process_internal_test.go | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 internal/collector/process/process_internal_test.go diff --git a/internal/collector/process/process.go b/internal/collector/process/process.go index 3e5b223f..5d37e674 100644 --- a/internal/collector/process/process.go +++ b/internal/collector/process/process.go @@ -483,7 +483,7 @@ func (c *Collector) getProcessOwner(logger *slog.Logger, hProcess windows.Handle if err != nil { owner = sid } else { - owner = fmt.Sprintf(`%s\%s`, account, domain) + owner = fmt.Sprintf(`%s\%s`, domain, account) } c.lookupCache.Store(sid, owner) diff --git a/internal/collector/process/process_internal_test.go b/internal/collector/process/process_internal_test.go new file mode 100644 index 00000000..bc32b725 --- /dev/null +++ b/internal/collector/process/process_internal_test.go @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Copyright The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build windows + +package process + +import ( + "log/slog" + "os/user" + "testing" + + "github.com/stretchr/testify/require" + "golang.org/x/sys/windows" +) + +// The owner label must use the Windows DOMAIN\user form, as os/user reports it. +func TestGetProcessOwner(t *testing.T) { + t.Parallel() + + currentUser, err := user.Current() + require.NoError(t, err) + + c := &Collector{} + + owner, err := c.getProcessOwner(slog.New(slog.DiscardHandler), windows.CurrentProcess()) + require.NoError(t, err) + require.Equal(t, currentUser.Username, owner) +}