diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-02-14 12:44:55 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-02-14 12:44:55 +0900 |
| commit | e431ab3c24acc5309531a26d71e761619bd69eec (patch) | |
| tree | 7293d4e61c1db3b043b2b8192e2c25e8a87e8cc0 /internal | |
| parent | 3fba33687b8efca5d1acbc3a23daaa316509e172 (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>
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/app/seal.go | 4 | ||||
| -rw-r--r-- | internal/sysconf.go | 6 |
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)) } |
