diff options
author | Runxi Yu <me@runxiyu.org> | 2025-02-17 13:00:56 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-02-17 13:02:06 +0800 |
commit | 0a91277e257752e6414d4f514f970e43242bd533 (patch) | |
tree | c07b76fe801fcba69e349b8563f1815bf59e134e | |
parent | git_hooks_client.c: Splice socket to stderr (diff) | |
download | forge-0a91277e257752e6414d4f514f970e43242bd533.tar.gz forge-0a91277e257752e6414d4f514f970e43242bd533.tar.zst forge-0a91277e257752e6414d4f514f970e43242bd533.zip |
git_hooks_handle.go, etc.: Listen for connections from hooks
Diffstat (limited to '')
-rw-r--r-- | git_hooks_handle.go | 12 | ||||
-rw-r--r-- | main.go | 31 | ||||
-rw-r--r-- | ssh_server.go | 10 |
3 files changed, 39 insertions, 14 deletions
diff --git a/git_hooks_handle.go b/git_hooks_handle.go index 86300cb..f650436 100644 --- a/git_hooks_handle.go +++ b/git_hooks_handle.go @@ -31,11 +31,21 @@ func hooks_handle_connection(conn net.Conn) (err error) { pid := ucred.Pid - _ = pid + conn.Write([]byte{0}) + fmt.Fprintf(conn, "your PID is %d\n", pid) return nil } +func serve_git_hooks(listener net.Listener) error { + conn, err := listener.Accept() + if err != nil { + return err + } + + return hooks_handle_connection(conn) +} + 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 { @@ -35,12 +35,25 @@ func main() { if err != nil { clog.Fatal(1, "Listening SSH: "+err.Error()) } + clog.Info("Listening SSH on " + config.SSH.Net + " " + config.SSH.Addr) + go func() { + err = serve_ssh(ssh_listener) + if err != nil { + clog.Fatal(1, "Serving SSH: "+err.Error()) + } + }() - err = serve_ssh(ssh_listener) + hooks_listener, err := net.Listen("unix", config.Hooks.Socket) if err != nil { - clog.Fatal(1, "Serving SSH: "+err.Error()) + clog.Fatal(1, "Listening hooks: "+err.Error()) } - clog.Info("Listening SSH on " + config.SSH.Net + " " + config.SSH.Addr) + clog.Info("Listening hooks at " + config.Hooks.Socket) + go func() { + err = serve_git_hooks(hooks_listener) + if err != nil { + clog.Fatal(1, "Serving hooks: "+err.Error()) + } + }() listener, err := net.Listen(config.HTTP.Net, config.HTTP.Addr) if err != nil { @@ -48,8 +61,12 @@ func main() { } clog.Info("Listening HTTP on " + config.HTTP.Net + " " + config.HTTP.Addr) - err = http.Serve(listener, &http_router_t{}) - if err != nil { - clog.Fatal(1, "Serving HTTP: "+err.Error()) - } + go func() { + err = http.Serve(listener, &http_router_t{}) + if err != nil { + clog.Fatal(1, "Serving HTTP: "+err.Error()) + } + }() + + select{} } diff --git a/ssh_server.go b/ssh_server.go index 63ba467..a9aeea8 100644 --- a/ssh_server.go +++ b/ssh_server.go @@ -83,12 +83,10 @@ func serve_ssh(listener net.Listener) error { server.AddHostKey(host_key) - go func() { - err = server.Serve(listener) - if err != nil { - clog.Fatal(1, "Serving SSH: "+err.Error()) - } - }() + err = server.Serve(listener) + if err != nil { + clog.Fatal(1, "Serving SSH: "+err.Error()) + } return nil } |