From 0a91277e257752e6414d4f514f970e43242bd533 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Mon, 17 Feb 2025 13:00:56 +0800 Subject: [PATCH] git_hooks_handle.go, etc.: Listen for connections from hooks --- git_hooks_handle.go | 12 +++++++++++- main.go | 31 ++++++++++++++++++++++++------- ssh_server.go | 10 ++++------ diff --git a/git_hooks_handle.go b/git_hooks_handle.go index 86300cb2e35754a540c794d8330a496222659a1b..f650436261efdbb83a2fce57cfc7657b4f150303 100644 --- a/git_hooks_handle.go +++ b/git_hooks_handle.go @@ -31,9 +31,19 @@ } 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) { diff --git a/main.go b/main.go index 90dfaee44bed1e473df8f73005c51f3ef7d260f0..0f147d4038921b310f8123caa84ed0e662d3aac9 100644 --- a/main.go +++ b/main.go @@ -35,12 +35,25 @@ ssh_listener, err := net.Listen(config.SSH.Net, config.SSH.Addr) 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 @@ clog.Fatal(1, "Listening HTTP: "+err.Error()) } 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 63ba467678f33b1e1fd194420274efd8f20fc14b..a9aeea8321673ef4421f469d391c705f5b58ab29 100644 --- a/ssh_server.go +++ b/ssh_server.go @@ -83,12 +83,10 @@ } 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 } -- 2.48.1