diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-02-17 19:00:43 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-02-17 19:00:43 +0900 |
| commit | 90cb01b2748550228d0bc179691a19ebb996fc36 (patch) | |
| tree | 06a2e17b578312c3f0734bf4c476e3c2eb5f6908 /system/xhost.go | |
| parent | b1e1d5627e6532ec719c761846d7f38fe93fcadd (diff) | |
system: move out of internal
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'system/xhost.go')
| -rw-r--r-- | system/xhost.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/system/xhost.go b/system/xhost.go new file mode 100644 index 00000000..bbc0a914 --- /dev/null +++ b/system/xhost.go @@ -0,0 +1,53 @@ +package system + +import ( + "fmt" + + "git.gensokyo.uk/security/fortify/xcb" +) + +// ChangeHosts appends an X11 ChangeHosts command Op. +func (sys *I) ChangeHosts(username string) *I { + sys.lock.Lock() + defer sys.lock.Unlock() + + sys.ops = append(sys.ops, XHost(username)) + + return sys +} + +type XHost string + +func (x XHost) Type() Enablement { + return EX11 +} + +func (x XHost) apply(sys *I) error { + sys.printf("inserting entry %s to X11", x) + return sys.wrapErrSuffix(xcb.ChangeHosts(xcb.HostModeInsert, xcb.FamilyServerInterpreted, "localuser\x00"+string(x)), + fmt.Sprintf("cannot insert entry %s to X11:", x)) +} + +func (x XHost) revert(sys *I, ec *Criteria) error { + if ec.hasType(x) { + sys.printf("deleting entry %s from X11", x) + return sys.wrapErrSuffix(xcb.ChangeHosts(xcb.HostModeDelete, xcb.FamilyServerInterpreted, "localuser\x00"+string(x)), + fmt.Sprintf("cannot delete entry %s from X11:", x)) + } else { + sys.printf("skipping entry %s in X11", x) + return nil + } +} + +func (x XHost) Is(o Op) bool { + x0, ok := o.(XHost) + return ok && x == x0 +} + +func (x XHost) Path() string { + return string(x) +} + +func (x XHost) String() string { + return string("SI:localuser:" + x) +} |
