Skip to content

Commit 9c139d7

Browse files
committed
add comment + unit tests
1 parent ecf5d95 commit 9c139d7

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

src/sudoers/test/mod.rs

+16
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,10 @@ fn permission_test() {
250250
pass!(["a\\,b ALL=ALL"], "a,b" => request! { root, root }, "server"; "/bin/foo");
251251
pass!(["\"a,b\" ALL=ALL"], "a,b" => request! { root, root }, "server"; "/bin/foo");
252252
pass!(["\"a\\b\" ALL=ALL"], "a\\b" => request! { root, root }, "server"; "/bin/foo");
253+
254+
// special chacters
255+
pass!(["[email protected] ALL=ALL"], "[email protected]" => request! { root, root }, "server"; "/bin/foo");
256+
pass!(["fnord$ ALL=ALL"], "fnord$" => request! { root, root }, "server"; "/bin/foo");
253257
}
254258

255259
#[test]
@@ -346,6 +350,12 @@ fn invalid_directive() {
346350
parse_eval::<ast::Sudo>("User_Alias, user Alias = user1, user2");
347351
}
348352

353+
#[test]
354+
#[should_panic]
355+
fn invalid_username() {
356+
parse_eval::<ast::Sudo>("User_Alias FOO = $dollar");
357+
}
358+
349359
#[test]
350360
fn directive_test() {
351361
let y = parse_eval::<Spec<UserSpecifier>>;
@@ -467,6 +477,12 @@ fn specific_defaults() {
467477
assert!(try_parse_line("Defaults >user !use_pty").is_none());
468478
}
469479

480+
#[test]
481+
fn at_sign_ambiguity() {
482+
assert!(parse_line("Defaults@host env_keep=ALL").is_decl());
483+
assert!(parse_line("defaults@host env_keep=ALL").is_spec());
484+
}
485+
470486
#[test]
471487
fn default_specific_test() {
472488
let sudoers = || {

src/sudoers/tokens.rs

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ pub struct Username(pub SudoString);
1212
// See: https://systemd.io/USER_NAMES/
1313
impl Token for Username {
1414
fn construct(text: String) -> Result<Self, String> {
15+
// if a '$' occurs in a username, it has to be the final character
1516
if let Some((_, "")) | None = text.split_once('$') {
1617
SudoString::new(text)
1718
.map_err(|e| e.to_string())

0 commit comments

Comments
 (0)