aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-02-17 13:00:56 +0800
committerRunxi Yu <me@runxiyu.org>2025-02-17 13:02:06 +0800
commit0a91277e257752e6414d4f514f970e43242bd533 (patch)
treec07b76fe801fcba69e349b8563f1815bf59e134e
parentgit_hooks_client.c: Splice socket to stderr (diff)
downloadforge-0a91277e257752e6414d4f514f970e43242bd533.tar.gz
forge-0a91277e257752e6414d4f514f970e43242bd533.tar.zst
forge-0a91277e257752e6414d4f514f970e43242bd533.zip
git_hooks_handle.go, etc.: Listen for connections from hooks
-rw-r--r--git_hooks_handle.go12
-rw-r--r--main.go31
-rw-r--r--ssh_server.go10
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 {
diff --git a/main.go b/main.go
index 90dfaee..0f147d4 100644
--- a/main.go
+++ b/main.go
@@ -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
}