Skip to content

Commit e1f4896

Browse files
authored
FileOwner check no longer relies on PowerShell. (#150)
* FileOwner check no longer relies on PowerShell. Signed-off-by: Mobmaker <[email protected]> * FileOwner can now handle groups and BUILTINs as well. Signed-off-by: Mobmaker <[email protected]> Signed-off-by: Mobmaker <[email protected]>
1 parent b99b383 commit e1f4896

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

checks_windows.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ func (c cond) BitlockerEnabled() (bool, error) {
2828

2929
func (c cond) FileOwner() (bool, error) {
3030
c.requireArgs("Path", "Name")
31-
owner, err := shellCommandOutput("(Get-Acl " + c.Path + ").Owner")
32-
owner = strings.TrimSpace(owner)
31+
owner, err := getFileOwner(c.Path)
3332
return owner == c.Name, err
3433
}
3534

utility_windows.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ package main
22

33
import (
44
"bytes"
5+
"github.com/DataDog/datadog-agent/pkg/util/winutil"
56
"io/ioutil"
67
"os"
78
"os/exec"
89
"strings"
910
"unsafe"
1011

11-
"github.com/DataDog/datadog-agent/pkg/util/winutil"
1212
"github.com/gen2brain/beeep"
1313
wapi "github.com/iamacarpet/go-win64api"
1414
"github.com/iamacarpet/go-win64api/shared"
@@ -253,6 +253,25 @@ func getFileAccessFromMask(mask uint32) string {
253253
return strings.Join(ret, ", ")
254254
}
255255

256+
func getFileOwner(path string) (string, error) {
257+
var sid *windows.SID
258+
if err := winutil.GetNamedSecurityInfo(path,
259+
winutil.SE_FILE_OBJECT,
260+
winutil.OWNER_SECURITY_INFORMATION,
261+
&sid,
262+
nil,
263+
nil,
264+
nil,
265+
nil); err != nil {
266+
return "", errors.Wrapf(err, "acl: failed to get security info for '%s' ", path)
267+
}
268+
var ownerAccount, _, _, err = sid.LookupAccount("")
269+
if err != nil {
270+
return "", errors.Wrapf(err, "Failed to find account for SID '%s'", sid.String())
271+
}
272+
return ownerAccount, nil
273+
}
274+
256275
func getFileRights(filePath, username string) (map[string]string, error) {
257276

258277
userSID, _, _, err := windows.LookupSID("", username)

0 commit comments

Comments
 (0)