]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
tests/unit/test_chkhash.c: add special test cases
authorIker Pedrosa <ipedrosa@redhat.com>
Wed, 4 Feb 2026 10:15:56 +0000 (11:15 +0100)
committerAlejandro Colomar <foss+github@alejandro-colomar.es>
Tue, 17 Feb 2026 23:30:57 +0000 (00:30 +0100)
*, ! and empty strings are special valid cases for shadow's second
field. Add test cases for them.

Signed-off-by: Iker Pedrosa <ipedrosa@redhat.com>
tests/unit/test_chkhash.c

index 3ae91b19fa68bacaac7add8e9a668477bc31600d..e7649e0471a27f5669bb0529d3b7bd0342fd40a5 100644 (file)
@@ -132,6 +132,26 @@ test_is_valid_hash_ok_des(void **)
 }
 
 
+static void
+test_is_valid_hash_ok_special(void **)
+{
+       // Empty string - passwordless account
+       assert_true(is_valid_hash(""));
+
+       // Single asterisk - password permanently locked
+       assert_true(is_valid_hash("*"));
+
+       // Single ! - temporarily locked passwordless account
+       assert_true(is_valid_hash("!"));
+
+       // Leading ! prefix - temporarily locked account with SHA-512 hash
+       assert_true(is_valid_hash("!$6$salt$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890./abcdefghijklmnopqrstuv"));
+
+       // Leading ! prefix - temporarily locked account with yescrypt hash
+       assert_true(is_valid_hash("!$y$j9T$salt$abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ"));
+}
+
+
 int
 main(void)
 {
@@ -142,6 +162,7 @@ main(void)
         cmocka_unit_test(test_is_valid_hash_ok_sha256),
         cmocka_unit_test(test_is_valid_hash_ok_md5),
         cmocka_unit_test(test_is_valid_hash_ok_des),
+        cmocka_unit_test(test_is_valid_hash_ok_special),
     };
 
     return cmocka_run_group_tests(tests, NULL, NULL);