implement systemd socket activation
parent
63bcc48e31
commit
7c36193a14
@ -1,10 +1,25 @@
|
|||||||
with import <nixpkgs> {};
|
with import <nixpkgs> {};
|
||||||
mkShell {
|
|
||||||
nativeBuildInputs = [
|
buildGoModule {
|
||||||
go
|
name = "systemd-vault";
|
||||||
vault
|
src = ./.;
|
||||||
|
vendorSha256 = null;
|
||||||
|
checkInputs = [
|
||||||
python3.pkgs.pytest
|
python3.pkgs.pytest
|
||||||
golangci-lint
|
golangci-lint
|
||||||
hivemind
|
vault
|
||||||
];
|
];
|
||||||
|
meta = with lib; {
|
||||||
|
description = "A proxy for secrets between systemd services and vault";
|
||||||
|
homepage = "https://github.com/numtide/systemd-vault";
|
||||||
|
license = licenses.mit;
|
||||||
|
maintainers = with maintainers; [ mic92 ];
|
||||||
|
platforms = platforms.unix;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
#mkShell {
|
||||||
|
# nativeBuildInputs = [
|
||||||
|
# go
|
||||||
|
# hivemind
|
||||||
|
# ];
|
||||||
|
#}
|
||||||
|
@ -0,0 +1,52 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"syscall"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// listenFdsStart corresponds to `SD_LISTEN_FDS_START`.
|
||||||
|
listenFdsStart = 3
|
||||||
|
)
|
||||||
|
|
||||||
|
// Files returns a slice containing a `os.File` object for each
|
||||||
|
// file descriptor passed to this process via systemd fd-passing protocol.
|
||||||
|
//
|
||||||
|
// The order of the file descriptors is preserved in the returned slice.
|
||||||
|
// `unsetEnv` is typically set to `true` in order to avoid clashes in
|
||||||
|
// fd usage and to avoid leaking environment flags to child processes.
|
||||||
|
func systemdSockets(unsetEnv bool) []*os.File {
|
||||||
|
if unsetEnv {
|
||||||
|
defer os.Unsetenv("LISTEN_PID")
|
||||||
|
defer os.Unsetenv("LISTEN_FDS")
|
||||||
|
defer os.Unsetenv("LISTEN_FDNAMES")
|
||||||
|
}
|
||||||
|
|
||||||
|
pid, err := strconv.Atoi(os.Getenv("LISTEN_PID"))
|
||||||
|
if err != nil || pid != os.Getpid() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
nfds, err := strconv.Atoi(os.Getenv("LISTEN_FDS"))
|
||||||
|
if err != nil || nfds == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
names := strings.Split(os.Getenv("LISTEN_FDNAMES"), ":")
|
||||||
|
|
||||||
|
files := make([]*os.File, 0, nfds)
|
||||||
|
for fd := listenFdsStart; fd < listenFdsStart+nfds; fd++ {
|
||||||
|
syscall.CloseOnExec(fd)
|
||||||
|
name := "LISTEN_FD_" + strconv.Itoa(fd)
|
||||||
|
offset := fd - listenFdsStart
|
||||||
|
if offset < len(names) && len(names[offset]) > 0 {
|
||||||
|
name = names[offset]
|
||||||
|
}
|
||||||
|
files = append(files, os.NewFile(uintptr(fd), name))
|
||||||
|
}
|
||||||
|
|
||||||
|
return files
|
||||||
|
}
|
Loading…
Reference in New Issue