summaryrefslogtreecommitdiff
path: root/src/nshd
diff options
context:
space:
mode:
Diffstat (limited to 'src/nshd')
-rw-r--r--src/nshd/hackers_git/gid.go21
-rw-r--r--src/nshd/hackers_git/name2gid.go42
2 files changed, 21 insertions, 42 deletions
diff --git a/src/nshd/hackers_git/gid.go b/src/nshd/hackers_git/gid.go
new file mode 100644
index 0000000..ff95309
--- /dev/null
+++ b/src/nshd/hackers_git/gid.go
@@ -0,0 +1,21 @@
+package hackers_git
+
+import "getgr"
+
+func name2gid(name string) int32 {
+ gr, err := getgr.ByName(name)
+ if gr == nil || err != nil {
+ return -1
+ } else {
+ return int32(gr.Gid)
+ }
+}
+
+func gid2name(gid int32) string {
+ gr, err := getgr.ByGid(gid)
+ if gr == nil || err != nil {
+ return ""
+ } else {
+ return gr.Name
+ }
+}
diff --git a/src/nshd/hackers_git/name2gid.go b/src/nshd/hackers_git/name2gid.go
deleted file mode 100644
index c155d29..0000000
--- a/src/nshd/hackers_git/name2gid.go
+++ /dev/null
@@ -1,42 +0,0 @@
-package hackers_git
-
-import (
- "syscall"
- "unsafe"
-)
-
-//#define _XOPEN_SOURCE /* for getgrnam_r(3) in grp.h */
-//#include <stdlib.h> /* for free(3) */
-//#include <unistd.h> /* for sysconf(3) */
-//#include <grp.h> /* for getgrnam_r(3) */
-import "C"
-
-func name2gid(name string) (gid int32) {
- nameC := C.CString(name)
- defer C.free(unsafe.Pointer(nameC))
-
- gid = -1
- buflen := C.sysconf(C._SC_GETGR_R_SIZE_MAX)
- if buflen < 1 {
- buflen = 1024
- }
- buf := make([]byte, buflen)
- var grp C.struct_group
- var ret *C.struct_group
- for {
- success, errno := C.getgrnam_r(nameC, &grp, (*C.char)(unsafe.Pointer(&buf[0])), C.size_t(buflen), &ret)
- if success >= 0 {
- break
- }
- if errno == syscall.ERANGE {
- buflen += 256
- buf = make([]byte, buflen)
- } else {
- return
- }
- }
- if ret != nil {
- gid = int32(ret.gr_gid)
- }
- return
-}