diff options
-rw-r--r-- | go.mod | 2 | ||||
-rw-r--r-- | go.sum | 2 | ||||
-rw-r--r-- | main.go (renamed from grus.go) | 46 | ||||
-rw-r--r-- | main_openbsd.go | 51 | ||||
-rw-r--r-- | main_other.go | 7 |
5 files changed, 47 insertions, 61 deletions
diff --git a/go.mod b/go.mod index 6b71a92..929e25c 100644 --- a/go.mod +++ b/go.mod @@ -4,5 +4,5 @@ go 1.13 require ( golang.org/x/sys v0.0.0-20200406113430-c6e801f48ba2 - tildegit.org/andinus/lynx v0.2.0 + tildegit.org/andinus/lynx v0.4.0 ) diff --git a/go.sum b/go.sum index 8d3b70d..6160e3b 100644 --- a/go.sum +++ b/go.sum @@ -5,3 +5,5 @@ tildegit.org/andinus/lynx v0.1.0 h1:7YjyF8h7MBGKRgQZT0j0I3uHRPf3mI2GMiDujXVlLS0= tildegit.org/andinus/lynx v0.1.0/go.mod h1:/PCNkKwfJ7pb6ziHa76a4gYp1R9S1Ro4ANjQwzSpBIk= tildegit.org/andinus/lynx v0.2.0 h1:cBoAWqC/osZJE4VPdB0HhIEpMIC4A4eI9nEbHR/9Qvk= tildegit.org/andinus/lynx v0.2.0/go.mod h1:/PCNkKwfJ7pb6ziHa76a4gYp1R9S1Ro4ANjQwzSpBIk= +tildegit.org/andinus/lynx v0.4.0 h1:bAxZLOdWy66+qJ3bDWjkbmJfCWTIOZ8hMGzYt7T7Bxk= +tildegit.org/andinus/lynx v0.4.0/go.mod h1:/PCNkKwfJ7pb6ziHa76a4gYp1R9S1Ro4ANjQwzSpBIk= diff --git a/grus.go b/main.go index 15f3e0e..13971e7 100644 --- a/grus.go +++ b/main.go @@ -6,15 +6,18 @@ import ( "os" "tildegit.org/andinus/grus/lexical" + "tildegit.org/andinus/lynx" ) -func grus() { +func main() { + initGrus() + if len(os.Args) == 1 { fmt.Println("Usage: grus <word> <dictionaries>") os.Exit(1) } - version := "v0.3.0" + version := "v0.3.1" // Print version if first argument is version. if os.Args[1] == "version" { @@ -134,8 +137,47 @@ func grus() { if !envVar["GRUS_SEARCH_ALL"] { os.Exit(0) } + } +} + +func initGrus() { + // We need less permissions on these conditions. + if len(os.Args) == 1 || + os.Args[1] == "version" || + os.Args[1] == "env" { + err := lynx.PledgePromises("stdio") + panicOnErr(err) + } else { + err := lynx.PledgePromises("unveil stdio rpath") + panicOnErr(err) + + unveil() + + // Drop unveil from promises. + err = lynx.PledgePromises("stdio rpath") + panicOnErr(err) + } +} + +func unveil() { + paths := make(map[string]string) + paths["/usr/share/dict"] = "r" + paths["/usr/local/share/dict"] = "r" + + // Unveil user defined dictionaries. + if len(os.Args) >= 3 { + for _, dict := range os.Args[2:] { + paths[dict] = "r" + } } + // This will not return error if the file doesn't exist. + err := lynx.UnveilPaths(paths) + panicOnErr(err) + + // Block further unveil calls. + err = lynx.UnveilBlock() + panicOnErr(err) } func panicOnErr(err error) { diff --git a/main_openbsd.go b/main_openbsd.go deleted file mode 100644 index 7bbe995..0000000 --- a/main_openbsd.go +++ /dev/null @@ -1,51 +0,0 @@ -// +build openbsd - -package main - -import ( - "os" - - "golang.org/x/sys/unix" - "tildegit.org/andinus/lynx" -) - -func main() { - // We need less permissions on these conditions. - if len(os.Args) == 1 || - os.Args[1] == "version" || - os.Args[1] == "env" { - err := unix.PledgePromises("stdio") - panicOnErr(err) - } else { - err := unix.PledgePromises("unveil stdio rpath") - panicOnErr(err) - - unveil() - - // Drop unveil from promises. - err = unix.PledgePromises("stdio rpath") - panicOnErr(err) - } - grus() -} - -func unveil() { - paths := make(map[string]string) - - paths["/usr/share/dict"] = "r" - paths["/usr/local/share/dict"] = "r" - - // Unveil user defined dictionaries. - if len(os.Args) >= 3 { - for _, dict := range os.Args[2:] { - paths[dict] = "r" - } - } - // This will not return error if the file doesn't exist. - err := lynx.UnveilPaths(paths) - panicOnErr(err) - - // Block further unveil calls. - err = lynx.UnveilBlock() - panicOnErr(err) -} diff --git a/main_other.go b/main_other.go deleted file mode 100644 index 88824ad..0000000 --- a/main_other.go +++ /dev/null @@ -1,7 +0,0 @@ -// +build !openbsd - -package main - -func main() { - grus() -} |