From b15066b5135a0d4eba5f097ddf640a0293f14e5c Mon Sep 17 00:00:00 2001 From: Suyono Date: Tue, 26 Dec 2023 09:20:42 +1100 Subject: [PATCH] fix(pidproxy): handle new line example: sshd --- cmd/pidproxy/pidproxy.go | 23 ++++++++----------- example/ssh-docker/Dockerfile | 14 +++++++++++ example/ssh-docker/entry.sh | 7 ++++++ .../ssh-docker/etc/wingmate/service/sshd.sh | 3 +++ 4 files changed, 34 insertions(+), 13 deletions(-) create mode 100644 example/ssh-docker/entry.sh create mode 100644 example/ssh-docker/etc/wingmate/service/sshd.sh diff --git a/cmd/pidproxy/pidproxy.go b/cmd/pidproxy/pidproxy.go index b4cf749..8f63a84 100644 --- a/cmd/pidproxy/pidproxy.go +++ b/cmd/pidproxy/pidproxy.go @@ -1,6 +1,8 @@ package main import ( + "bufio" + "errors" "log" "os" "os/exec" @@ -130,8 +132,6 @@ func readPid(pidFile string) (int, error) { var ( file *os.File err error - buf []byte - n int pid64 int64 ) @@ -142,18 +142,15 @@ func readPid(pidFile string) (int, error) { _ = file.Close() }() - buf = make([]byte, 1024) - n, err = file.Read(buf) - if err != nil { - return 0, err + scanner := bufio.NewScanner(file) + if scanner.Scan() { + if pid64, err = strconv.ParseInt(scanner.Text(), 10, 64); err != nil { + return 0, err + } + return int(pid64), nil + } else { + return 0, errors.New("invalid scanner") } - - pid64, err = strconv.ParseInt(string(buf[:n]), 10, 64) - if err != nil { - return 0, err - } - - return int(pid64), nil } func startProcess(arg0 string, args ...string) { diff --git a/example/ssh-docker/Dockerfile b/example/ssh-docker/Dockerfile index e69de29..e3f96fd 100644 --- a/example/ssh-docker/Dockerfile +++ b/example/ssh-docker/Dockerfile @@ -0,0 +1,14 @@ +FROM suyono/wingmate:alpine as source + +FROM alpine:3.19 + +RUN apk update && apk add tzdata openssh-server && \ + ln -s /usr/share/zoneinfo/Australia/Sydney /etc/localtime && ssh-keygen -A + +COPY --from=source /usr/local/bin/wingmate /usr/local/bin/ +COPY --from=source /usr/local/bin/wmpidproxy /usr/local/bin/ +ADD --chmod=755 example/ssh-docker/entry.sh /usr/local/bin/entry.sh +ADD --chmod=755 example/ssh-docker/etc /etc + +ENTRYPOINT [ "/usr/local/bin/entry.sh" ] +CMD [ "/usr/local/bin/wingmate" ] \ No newline at end of file diff --git a/example/ssh-docker/entry.sh b/example/ssh-docker/entry.sh new file mode 100644 index 0000000..dbe4113 --- /dev/null +++ b/example/ssh-docker/entry.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +if [ $# -gt 0 ]; then + exec "$@" +else + exec /usr/local/bin/wingmate +fi \ No newline at end of file diff --git a/example/ssh-docker/etc/wingmate/service/sshd.sh b/example/ssh-docker/etc/wingmate/service/sshd.sh new file mode 100644 index 0000000..cd86347 --- /dev/null +++ b/example/ssh-docker/etc/wingmate/service/sshd.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +exec /usr/local/bin/wmpidproxy --pid-file /var/run/sshd.pid -- /usr/sbin/sshd