mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-10-08 22:11:58 +02:00
58 lines
2.0 KiB
Diff
58 lines
2.0 KiB
Diff
From cb867d2fd64adc851f82be3c6eb6e38ec008930b Mon Sep 17 00:00:00 2001
|
|
From: Dominik Honnef <dominik@honnef.co>
|
|
Date: Sun, 21 Jun 2015 20:07:29 +0200
|
|
Subject: [PATCH] os/user: don't depend on _SC_GETPW_R_SIZE_MAX on Linux
|
|
|
|
Even Linux systems may not have _SC_GETPW_R_SIZE_MAX if using a
|
|
different libc than glibc (e.g. musl). Instead of having special-cases
|
|
for the BSDs, handle -1 correctly by always using a default buffer size.
|
|
|
|
Fixes #11319.
|
|
|
|
Change-Id: I8b1b260eb9830e6dbe7667f3f33d115ae4de4ce8
|
|
Reviewed-on: https://go-review.googlesource.com/13772
|
|
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
|
|
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
|
|
---
|
|
src/os/user/lookup_unix.go | 19 ++++++++-----------
|
|
1 file changed, 8 insertions(+), 11 deletions(-)
|
|
|
|
diff --git a/src/os/user/lookup_unix.go b/src/os/user/lookup_unix.go
|
|
index f4f603e..e8a1eb1 100644
|
|
--- a/src/os/user/lookup_unix.go
|
|
+++ b/src/os/user/lookup_unix.go
|
|
@@ -9,7 +9,6 @@ package user
|
|
|
|
import (
|
|
"fmt"
|
|
- "runtime"
|
|
"strconv"
|
|
"strings"
|
|
"syscall"
|
|
@@ -55,17 +54,15 @@ func lookupUnix(uid int, username string, lookupByName bool) (*User, error) {
|
|
var pwd C.struct_passwd
|
|
var result *C.struct_passwd
|
|
|
|
- var bufSize C.long
|
|
- if runtime.GOOS == "dragonfly" || runtime.GOOS == "freebsd" {
|
|
- // DragonFly and FreeBSD do not have _SC_GETPW_R_SIZE_MAX
|
|
- // and just return -1. So just use the same
|
|
- // size that Linux returns.
|
|
+ bufSize := C.sysconf(C._SC_GETPW_R_SIZE_MAX)
|
|
+ if bufSize == -1 {
|
|
+ // DragonFly and FreeBSD do not have _SC_GETPW_R_SIZE_MAX.
|
|
+ // Additionally, not all Linux systems have it, either. For
|
|
+ // example, the musl libc returns -1.
|
|
bufSize = 1024
|
|
- } else {
|
|
- bufSize = C.sysconf(C._SC_GETPW_R_SIZE_MAX)
|
|
- if bufSize <= 0 || bufSize > 1<<20 {
|
|
- return nil, fmt.Errorf("user: unreasonable _SC_GETPW_R_SIZE_MAX of %d", bufSize)
|
|
- }
|
|
+ }
|
|
+ if bufSize <= 0 || bufSize > 1<<20 {
|
|
+ return nil, fmt.Errorf("user: unreasonable _SC_GETPW_R_SIZE_MAX of %d", bufSize)
|
|
}
|
|
buf := C.malloc(C.size_t(bufSize))
|
|
defer C.free(buf)
|