From b299d7e36b3f1fa17b781a3da4e1a67e49aea388 Mon Sep 17 00:00:00 2001 From: Arceliar Date: Sat, 24 Jul 2021 11:12:37 -0500 Subject: [PATCH] move setuid/setgid into separate functions in platform-dependent files --- cmd/yggdrasil/main.go | 14 ++++++++++---- cmd/yggdrasil/setids_other.go | 13 +++++++++++++ cmd/yggdrasil/setids_posix.go | 13 +++++++++++++ 3 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 cmd/yggdrasil/setids_other.go create mode 100644 cmd/yggdrasil/setids_posix.go diff --git a/cmd/yggdrasil/main.go b/cmd/yggdrasil/main.go index f994bbd7..f1ef29c4 100644 --- a/cmd/yggdrasil/main.go +++ b/cmd/yggdrasil/main.go @@ -376,12 +376,18 @@ func run(args yggArgs, ctx context.Context, done chan struct{}) { // Lower permissions from root to something else, if the user wants to if syscall.Getuid() == 0 { if args.rungid > 0 { - fmt.Println("Dropping gid to ", args.rungid) - syscall.Setgid(args.rungid) + logger.Infoln("Setting gid to:", args.rungid) + if err := setgid(args.rungid); err != nil { + logger.Errorln("Failed to set gid:", err) + return + } } if args.runuid > 0 { - fmt.Println("Dropping uid to ", args.rungid) - syscall.Setuid(args.runuid) + logger.Infoln("Setting uid to:", args.runuid) + if err := setuid(args.runuid); err != nil { + logger.Errorln("Failed to set uid:", err) + return + } } } logger.Infof("Your public key is %s", hex.EncodeToString(public[:])) diff --git a/cmd/yggdrasil/setids_other.go b/cmd/yggdrasil/setids_other.go new file mode 100644 index 00000000..dcf1020a --- /dev/null +++ b/cmd/yggdrasil/setids_other.go @@ -0,0 +1,13 @@ +// +build !linux,!darwin,!freebsd,!openbsd + +package main + +import "errors" + +func setuid(uid int) error { + return errors.New("setting uid not supported on this platform") +} + +func setgid(gid int) error { + return errors.New("setting gid not supported on this platform") +} diff --git a/cmd/yggdrasil/setids_posix.go b/cmd/yggdrasil/setids_posix.go new file mode 100644 index 00000000..1e23568d --- /dev/null +++ b/cmd/yggdrasil/setids_posix.go @@ -0,0 +1,13 @@ +// +build linux darwin freebsd openbsd + +package main + +import "syscall" + +func setuid(uid int) error { + return syscall.Setuid(uid) +} + +func setgid(gid int) error { + return syscall.Setgid(gid) +}