aboutsummaryrefslogtreecommitdiff
path: root/git_hooks_handle.go
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-02-17 11:25:17 +0800
committerRunxi Yu <me@runxiyu.org>2025-02-17 11:25:17 +0800
commit64bde599f4ffa0ce49de5072ee2bd4bd2dc8a2ac (patch)
tree6a807a5f048eb2189f2e59343a4b72501cb00ed1 /git_hooks_handle.go
parentgit_init.go: git_bare_init_with_default_hooks (diff)
downloadforge-64bde599f4ffa0ce49de5072ee2bd4bd2dc8a2ac.tar.gz
forge-64bde599f4ffa0ce49de5072ee2bd4bd2dc8a2ac.tar.zst
forge-64bde599f4ffa0ce49de5072ee2bd4bd2dc8a2ac.zip
git_hooks_handle.go: Move from git_hooks.go
Diffstat (limited to 'git_hooks_handle.go')
-rw-r--r--git_hooks_handle.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/git_hooks_handle.go b/git_hooks_handle.go
new file mode 100644
index 0000000..86300cb
--- /dev/null
+++ b/git_hooks_handle.go
@@ -0,0 +1,45 @@
+package main
+
+import (
+ "errors"
+ "fmt"
+ "net"
+ "os"
+ "syscall"
+)
+
+var err_not_unixconn = errors.New("Not a unix connection")
+
+func hooks_handle_connection(conn net.Conn) (err error) {
+ defer conn.Close()
+
+ unix_conn, ok := conn.(*net.UnixConn)
+ if !ok {
+ return err_not_unixconn
+ }
+
+ fd, err := unix_conn.File()
+ if err != nil {
+ return err
+ }
+ defer fd.Close()
+
+ ucred, err := get_ucred(fd)
+ if err != nil {
+ return err
+ }
+
+ pid := ucred.Pid
+
+ _ = pid
+
+ return nil
+}
+
+func get_ucred(fd *os.File) (*syscall.Ucred, error) {
+ ucred, err := syscall.GetsockoptUcred(int(fd.Fd()), syscall.SOL_SOCKET, syscall.SO_PEERCRED)
+ if err != nil {
+ return nil, fmt.Errorf("failed to get credentials: %v", err)
+ }
+ return ucred, nil
+}