aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Sing <jsing@google.com>2011-11-18 01:52:39 +1100
committerJoel Sing <jsing@google.com>2011-11-18 01:52:39 +1100
commit9b571a31200ffccad327cefb48944a3b88494bcd (patch)
tree281a0c4a0fd57a1ad8f57ba62cf69ee56f0789e6
parent773a921ccbb26324db1161edceb38507ab0c96b6 (diff)
downloadgo-9b571a31200ffccad327cefb48944a3b88494bcd.tar.gz
go-9b571a31200ffccad327cefb48944a3b88494bcd.zip
syscall: hostname/domainname fix for openbsd
Work around a bug that was fixed after OpenBSD 5.0 - a request for kern.hostname or kern.domainname with a nil value for oldp will result in a length of zero being returned. If we hit this case use a length of MAXHOSTNAMELEN (256). R=golang-dev, mikioh.mikioh CC=golang-dev https://golang.org/cl/5408041
-rw-r--r--src/pkg/syscall/syscall_bsd.go11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/pkg/syscall/syscall_bsd.go b/src/pkg/syscall/syscall_bsd.go
index 65ac1e08da..163232ad48 100644
--- a/src/pkg/syscall/syscall_bsd.go
+++ b/src/pkg/syscall/syscall_bsd.go
@@ -559,7 +559,16 @@ func Sysctl(name string) (value string, err error) {
return "", err
}
if n == 0 {
- return "", nil
+ // TODO(jsing): Remove after OpenBSD 5.2 release.
+ // Work around a bug that was fixed after OpenBSD 5.0.
+ // The length for kern.hostname and kern.domainname is always
+ // returned as 0 when a nil value is passed for oldp.
+ if OS == "openbsd" && (value == "kern.hostname" || value == "kern.domainname") {
+ // MAXHOSTNAMELEN
+ n = 256
+ } else {
+ return "", nil
+ }
}
// Read into buffer of that size.