aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2025-02-14 12:44:55 +0900
committerOphestra <cat@gensokyo.uk>2025-02-14 12:44:55 +0900
commite431ab3c24acc5309531a26d71e761619bd69eec (patch)
tree7293d4e61c1db3b043b2b8192e2c25e8a87e8cc0
parent3fba33687b8efca5d1acbc3a23daaa316509e172 (diff)
app: check username length against LOGIN_NAME_MAX
This limit is arbitrary, but it's good to enforce it anyway. Signed-off-by: Ophestra <cat@gensokyo.uk>
-rw-r--r--internal/app/seal.go4
-rw-r--r--internal/sysconf.go6
2 files changed, 9 insertions, 1 deletions
diff --git a/internal/app/seal.go b/internal/app/seal.go
index 155fafb3..c78add93 100644
--- a/internal/app/seal.go
+++ b/internal/app/seal.go
@@ -15,6 +15,7 @@ import (
"git.gensokyo.uk/security/fortify/dbus"
"git.gensokyo.uk/security/fortify/fst"
"git.gensokyo.uk/security/fortify/helper/bwrap"
+ "git.gensokyo.uk/security/fortify/internal"
"git.gensokyo.uk/security/fortify/internal/fmsg"
"git.gensokyo.uk/security/fortify/internal/linux"
"git.gensokyo.uk/security/fortify/internal/state"
@@ -133,7 +134,8 @@ func (a *app) Seal(config *fst.Config) error {
}
if seal.sys.user.username == "" {
seal.sys.user.username = "chronos"
- } else if !posixUsername.MatchString(seal.sys.user.username) {
+ } else if !posixUsername.MatchString(seal.sys.user.username) ||
+ len(seal.sys.user.username) >= internal.Sysconf_SC_LOGIN_NAME_MAX() {
return fmsg.WrapError(ErrName,
fmt.Sprintf("invalid user name %q", seal.sys.user.username))
}
diff --git a/internal/sysconf.go b/internal/sysconf.go
new file mode 100644
index 00000000..03b236f4
--- /dev/null
+++ b/internal/sysconf.go
@@ -0,0 +1,6 @@
+package internal
+
+//#include <unistd.h>
+import "C"
+
+func Sysconf_SC_LOGIN_NAME_MAX() int { return int(C.sysconf(C._SC_LOGIN_NAME_MAX)) }