2009-01-13から1日間の記事一覧

続々 pwd_mkdb(8)

こんな事もあろうかと思って作っておいた christos-time_t ブランチマージ以前のスナップショットの pwd_mkdb(8) を使って /etc/pwd.db, /etc/spwd.db を作り直したら、ログイン時の警告が出なくなった。わーい。 いいか、お前ら pwd_mkdb(8) するなよ! pwd_…

続 pwd_mkdb(8)

/etc/pwd.db に VERSION キーがあるか確認するためのソース。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <assert.h> #include <errno.h> #include <fcntl.h> #include <db.h> #include <pwd.h> int main(void) { const char *dbfile = "/etc/pwd.db"; DB *db; DBT key, value; int version; …</pwd.h></db.h></fcntl.h></errno.h></assert.h></unistd.h></string.h></stdlib.h></stdio.h>

pwd_mkdb(8)

んー、pwd_mkdb(8) って /etc/pwd.db, /etc/spwd.db に VERSION キーを付与しないと駄目っぽいような気がするんだけど…。 src/lib/libc/gen/getpwent.c:_pw_getkey() ではこれを使って 32bit time_t の形式と 64bit time_t の形式を判断してるから、現状の p…

ログイン

ログイン時にホームディレクトリが無いって警告されるんだけどウチの環境だけ?

続 nbpwd_mkdb

src/lib/libc/gen/pw_scan.c:gettime() の第一引数は time_t * なので、見事に pw_change の次に位置する pw_class を 0 で上書きしちゃってるね。で、ぬるぽって終了ね。 koharu# gdb obj.i386/pwd_mkdb GNU gdb 6.5 Copyright (C) 2006 Free Software Foun…

nbpwd_mkdb

src/tools/pwd_mkdb が SEGV でこけるので調べてみたら、src/tools/compat/compat_pwd.h の struct passwd のメンバ pw_change と pw_expire が int32_t になっているせい?。 /* All elements exactly sized: */ struct passwd { char *pw_name; char *pw_p…