nsss_unix_shadow_get experiences a bug where entries with null values aren't returned. This patch instead treats empty fields as a null string or -1. --- src/libnsss/nsss_unix_shadow_get.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/libnsss/nsss_unix_shadow_get.c b/src/libnsss/nsss_unix_shadow_get.c index 0d87088..18d61b6 100644 --- a/src/libnsss/nsss_unix_shadow_get.c +++ b/src/libnsss/nsss_unix_shadow_get.c @@ -1,6 +1,7 @@ /* ISC license. */ #include <pthread.h> +#include <limits.h> #include <skalibs/types.h> #include <skalibs/skamisc.h> #include <nsss/shadow-def.h> @@ -15,19 +16,18 @@ static inline int shadow_parseline (struct spwd *sp, char *s, size_t max) if (!nsss_unix_field(&sp2.sp_namp, &s)) return 0 ; if (!nsss_unix_field(&sp2.sp_pwdp, &s)) return 0 ; if (!nsss_unix_field(&p, &s)) return 0 ; - if (!ulong0_scan(p, (unsigned long *)&sp2.sp_lstchg)) return 0 ; + if (!ulong0_scan(p, (unsigned long *)&sp2.sp_lstchg)) sp2.sp_lstchg = -1 ; if (!nsss_unix_field(&p, &s)) return 0 ; - if (!ulong0_scan(p, (unsigned long *)&sp2.sp_min)) return 0 ; + if (!ulong0_scan(p, (unsigned long *)&sp2.sp_min)) sp2.sp_min = -1 ; if (!nsss_unix_field(&p, &s)) return 0 ; - if (!ulong0_scan(p, (unsigned long *)&sp2.sp_max)) return 0 ; + if (!ulong0_scan(p, (unsigned long *)&sp2.sp_max)) sp2.sp_max = -1 ; if (!nsss_unix_field(&p, &s)) return 0 ; - if (!ulong0_scan(p, (unsigned long *)&sp2.sp_warn)) return 0 ; + if (!ulong0_scan(p, (unsigned long *)&sp2.sp_warn)) sp2.sp_warn = -1 ; if (!nsss_unix_field(&p, &s)) return 0 ; - if (!ulong0_scan(p, (unsigned long *)&sp2.sp_inact)) return 0 ; + if (!ulong0_scan(p, (unsigned long *)&sp2.sp_inact)) sp2.sp_inact = -1 ; if (!nsss_unix_field(&p, &s)) return 0 ; - if (!ulong0_scan(p, (unsigned long *)&sp2.sp_expire)) return 0 ; - if (!nsss_unix_field(&p, &s)) return 0 ; - if (!ulong0_scan(p, &sp2.sp_flag)) return 0 ; + if (!ulong0_scan(p, (unsigned long *)&sp2.sp_expire)) sp2.sp_expire = -1 ; + if (!nsss_unix_field(&p, &s) || !ulong0_scan(p, &sp2.sp_flag)) sp2.sp_flag = ULONG_MAX ; *sp = sp2 ; return 1 ; } -- 1.8.3.1