From d166317d059f1c0bf91626315b51d4bda15935c0 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Mon, 17 Feb 2025 20:34:05 +0800 Subject: git_hooks_handle.go: Refactor for clarity --- git_hooks_handle.go | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/git_hooks_handle.go b/git_hooks_handle.go index 7e67a89..00b1c65 100644 --- a/git_hooks_handle.go +++ b/git_hooks_handle.go @@ -9,24 +9,16 @@ import ( ) var err_not_unixconn = errors.New("Not a unix connection") +var err_get_fd = errors.New("Unable to get file descriptor") +var err_get_ucred = errors.New("Failed getsockopt") func hooks_handle_connection(conn net.Conn) { defer conn.Close() - unix_conn := conn.(*net.UnixConn) - - fd, err := unix_conn.File() + ucred, err := get_ucred(conn) if err != nil { conn.Write([]byte{1}) - fmt.Fprintln(conn, "Unable to get file descriptor") - return - } - defer fd.Close() - - ucred, err := get_ucred(fd) - if err != nil { - conn.Write([]byte{1}) - fmt.Fprintln(conn, "Unable to get peer credentials") + fmt.Fprintln(conn, "Unable to get peer credentials:", err.Error()) return } @@ -52,10 +44,17 @@ func serve_git_hooks(listener net.Listener) error { } } -func get_ucred(fd *os.File) (*syscall.Ucred, error) { +func get_ucred(conn net.Conn) (*syscall.Ucred, error) { + unix_conn := conn.(*net.UnixConn) + fd, err := unix_conn.File() + if err != nil { + return nil, err_get_fd + } + defer fd.Close() + 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 nil, err_get_ucred } return ucred, nil } -- cgit v1.2.3