Skip to content

Commit 2b32297

Browse files
committed
sysusers: Parse a leading - in user
This is used in the wild by `vboxadd` from `virtualbox-guest-additions`. Signed-off-by: Colin Walters <[email protected]>
1 parent 552da45 commit 2b32297

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

sysusers/src/lib.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,11 @@ impl SysusersEntry {
142142
.or_else(|| id.map(|id| (id, id)))
143143
.map(|(uid, gid)| (Some(uid), Some(gid)))
144144
.unwrap_or((None, None));
145-
let uid = uid.map(|id| id.parse()).transpose().map_err(|_| err())?;
145+
let uid = uid
146+
.filter(|&v| v != "-")
147+
.map(|id| id.parse())
148+
.transpose()
149+
.map_err(|_| err())?;
146150
let pgid = pgid.map(|id| id.parse()).transpose().map_err(|_| err())?;
147151
let (gecos, s) = Self::next_token_owned(s).ok_or_else(err.clone())?;
148152
let (home, s) = Self::next_optional_token_owned(s).unwrap_or_default();
@@ -388,6 +392,7 @@ mod tests {
388392
/// Non-default sysusers found in the wild
389393
const OTHER_SYSUSERS_REF: &str = indoc! { r#"
390394
u qemu 107:qemu "qemu user" - -
395+
u vboxadd -:1 - /var/run/vboxadd -
391396
"#};
392397

393398
fn parse_all(s: &str) -> impl Iterator<Item = SysusersEntry> + use<'_> {
@@ -458,6 +463,17 @@ mod tests {
458463
shell: None
459464
}
460465
);
466+
assert_eq!(
467+
entries.next().unwrap(),
468+
SysusersEntry::User {
469+
name: "vboxadd".into(),
470+
uid: None,
471+
pgid: Some(1.into()),
472+
gecos: "-".into(),
473+
home: Some("/var/run/vboxadd".into()),
474+
shell: None
475+
}
476+
);
461477
assert_eq!(entries.count(), 0);
462478

463479
Ok(())

0 commit comments

Comments
 (0)