diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-07-02 20:42:51 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-07-02 20:42:51 +0900 |
| commit | eb22a8bcc1ac03357d4073e5d3ed6d0ab5246a37 (patch) | |
| tree | d27d1f724a18bb47bf48816a444dccac28b5248c /parse.go | |
| parent | 31aef905fa819310ee7694775a836c294ff742e4 (diff) | |
cmd/hakurei: move to cmd
Having it at the project root never made sense since the "ego" name was deprecated. This change finally addresses it.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'parse.go')
| -rw-r--r-- | parse.go | 110 |
1 files changed, 0 insertions, 110 deletions
diff --git a/parse.go b/parse.go deleted file mode 100644 index 2e7f507c..00000000 --- a/parse.go +++ /dev/null @@ -1,110 +0,0 @@ -package main - -import ( - "encoding/json" - "errors" - "io" - "log" - "os" - "strconv" - "strings" - "syscall" - - "git.gensokyo.uk/security/hakurei/hst" - "git.gensokyo.uk/security/hakurei/internal/hlog" - "git.gensokyo.uk/security/hakurei/internal/state" -) - -func tryPath(name string) (config *hst.Config) { - var r io.Reader - config = new(hst.Config) - - if name != "-" { - r = tryFd(name) - if r == nil { - hlog.Verbose("load configuration from file") - - if f, err := os.Open(name); err != nil { - log.Fatalf("cannot access configuration file %q: %s", name, err) - } else { - // finalizer closes f - r = f - } - } else { - defer func() { - if err := r.(io.ReadCloser).Close(); err != nil { - log.Printf("cannot close config fd: %v", err) - } - }() - } - } else { - r = os.Stdin - } - - if err := json.NewDecoder(r).Decode(&config); err != nil { - log.Fatalf("cannot load configuration: %v", err) - } - - return -} - -func tryFd(name string) io.ReadCloser { - if v, err := strconv.Atoi(name); err != nil { - if !errors.Is(err, strconv.ErrSyntax) { - hlog.Verbosef("name cannot be interpreted as int64: %v", err) - } - return nil - } else { - hlog.Verbosef("trying config stream from %d", v) - fd := uintptr(v) - if _, _, errno := syscall.Syscall(syscall.SYS_FCNTL, fd, syscall.F_GETFD, 0); errno != 0 { - if errors.Is(errno, syscall.EBADF) { - return nil - } - log.Fatalf("cannot get fd %d: %v", fd, errno) - } - return os.NewFile(fd, strconv.Itoa(v)) - } -} - -func tryShort(name string) (config *hst.Config, entry *state.State) { - likePrefix := false - if len(name) <= 32 { - likePrefix = true - for _, c := range name { - if c >= '0' && c <= '9' { - continue - } - if c >= 'a' && c <= 'f' { - continue - } - likePrefix = false - break - } - } - - // try to match from state store - if likePrefix && len(name) >= 8 { - hlog.Verbose("argument looks like prefix") - - s := state.NewMulti(std.Paths().RunDirPath) - if entries, err := state.Join(s); err != nil { - log.Printf("cannot join store: %v", err) - // drop to fetch from file - } else { - for id := range entries { - v := id.String() - if strings.HasPrefix(v, name) { - // match, use config from this state entry - entry = entries[id] - config = entry.Config - break - } - - hlog.Verbosef("instance %s skipped", v) - } - } - } - - return -} |
