Skip to content

Commit 3ac2a61

Browse files
authored
Merge pull request #2476 from h2zh/xrdhttp-pelican-0.0.7
Fix pelican-server binary panic and Upgrade xrdhttp-pelican to v0.0.7
2 parents e9c606d + 7fd6059 commit 3ac2a61

2 files changed

Lines changed: 24 additions & 3 deletions

File tree

images/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ ARG LOTMAN_VER=0.0.4
5656
ARG XRDCL_PELICAN_SRC_BUILD=false
5757
ARG XRDCL_PELICAN_VER=1.2.3
5858
ARG XRDHTTP_PELICAN_SRC_BUILD=false
59-
ARG XRDHTTP_PELICAN_VER=0.0.6
59+
ARG XRDHTTP_PELICAN_VER=0.0.7
6060
ARG XROOTD_LOTMAN_SRC_BUILD=false
6161
ARG XROOTD_LOTMAN_VER=0.0.3
6262
ARG XROOTD_S3_HTTP_SRC_BUILD=true

launchers/droppriv_unix.go

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,25 @@ import (
3030
"github.com/pelicanplatform/pelican/param"
3131
)
3232

33+
// rawSetuid and rawSetgid perform setuid and setgid using syscall.RawSyscall()
34+
// to avoid syscall.Setgid() and syscall.Setuid(). The latter internally use
35+
// AllThreadsSyscall(), which fails when CGO is disabled.
36+
func rawSetuid(uid int) error {
37+
_, _, errno := syscall.RawSyscall(syscall.SYS_SETUID, uintptr(uid), 0, 0)
38+
if errno != 0 {
39+
return errno
40+
}
41+
return nil
42+
}
43+
44+
func rawSetgid(gid int) error {
45+
_, _, errno := syscall.RawSyscall(syscall.SYS_SETGID, uintptr(gid), 0, 0)
46+
if errno != 0 {
47+
return errno
48+
}
49+
return nil
50+
}
51+
3352
func dropPrivileges() (err error) {
3453
log.Info("Dropping privileges to user ", param.Server_UnprivilegedUser.GetString())
3554
var puser config.User
@@ -45,11 +64,13 @@ func dropPrivileges() (err error) {
4564
err = errors.Errorf("unable to drop privileges to user (user %s, group %s) with GID 0", puser.Username, puser.Groupname)
4665
return
4766
}
48-
if err = syscall.Setgid(puser.Gid); err != nil {
67+
68+
// Use raw syscalls to avoid failures when CGO is disabled
69+
if err = rawSetgid(puser.Gid); err != nil {
4970
err = errors.Wrap(err, "failed to drop group privileges")
5071
return
5172
}
52-
if err = syscall.Setuid(puser.Uid); err != nil {
73+
if err = rawSetuid(puser.Uid); err != nil {
5374
err = errors.Wrap(err, "failed to drop user privileges")
5475
return
5576
}

0 commit comments

Comments
 (0)