summaryrefslogtreecommitdiffstats
path: root/community/go/default-sc-getpw-r-size-max.patch
diff options
context:
space:
mode:
Diffstat (limited to 'community/go/default-sc-getpw-r-size-max.patch')
-rw-r--r--community/go/default-sc-getpw-r-size-max.patch57
1 files changed, 57 insertions, 0 deletions
diff --git a/community/go/default-sc-getpw-r-size-max.patch b/community/go/default-sc-getpw-r-size-max.patch
new file mode 100644
index 00000000000..77be27d13d4
--- /dev/null
+++ b/community/go/default-sc-getpw-r-size-max.patch
@@ -0,0 +1,57 @@
+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)