tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pwd_mkdb(8) is still broken to me



> What changed by changing compiler option is value of stack garbage.
> Those garbage supposed to be filled by pw_scan() but actually it
> failed to fill them.

This saves me from reading scary x86 disasm... :)

> Since the # of bytes written to database is controlled not by
> sizeof(time_t) but by sizeof(pwd.pw_change), getversion() also should
> return 0 or 1 depending on sizeof(pwd.pw_change).

Or, write database depending on the size of time_t, like:

        time_t tmp = pwd.pw_change;

        memmove(p, &tmp, sizeof(tmp));
        p += sizeof(tmp);

Other problems I'm seeing:

- pw_scan.c:gettime() built as libnbcomat.a passes wrong sized pointer
when host time_t is 32-bit.
  - tools/compat should be built with stricter compiler checks (-Wall
-Werror) IMO.
- Current nbpwd_mkdb generates a broken *pwd.db where VERSION == 0 but
pw_change & pw_expire are 64-bit.

Masao


Home | Main Index | Thread Index | Old Index