> My best guess here is that something is wrong with pam_cracklib.so on my > broken PAM machine. Is pam_cracklib.so dependent on something else I > might be checking out? Perhaps some general library or a configuration > file that shouldn't normally be seen or something? ldd /lib/security/pam_cracklib.so will tell you that, on this machine it has no config files. I however suspect it is something else, corrupt binary, corrupt config, etc. Very hard to tell is my experience, sometimes strace can be helpfull. Igmar Igmar, here is the content of my strace of the password program with the problem configuration set up: execve("/usr/bin/passwd", ["passwd"], [/* 19 vars */]) = 0 brk(0) = 0x804f540 open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=2734, ...}) = 0 old_mmap(NULL, 2734, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40014000 close(3) = 0 open("/lib/libcrypt.so.1", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=20436, ...}) = 0 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\340\16"..., 4096) = 4096 old_mmap(NULL, 183228, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40015000 mprotect(0x4001a000, 162748, PROT_NONE) = 0 old_mmap(0x4001a000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x4000) = 0x4001a000 old_mmap(0x4001b000, 158652, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4001b000 close(3) = 0 open("/lib/libpam.so.0", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=27180, ...}) = 0 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0`\22\0\000"..., 4096) = 4096 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40042000 old_mmap(NULL, 30444, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40043000 mprotect(0x4004a000, 1772, PROT_NONE) = 0 old_mmap(0x4004a000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x6000) = 0x4004a000 close(3) = 0 open("/lib/libpam_misc.so.0", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=6060, ...}) = 0 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0@\n\0\000"..., 4096) = 4096 old_mmap(NULL, 9324, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x4004b000 mprotect(0x4004d000, 1132, PROT_NONE) = 0 old_mmap(0x4004d000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x1000) = 0x4004d000 close(3) = 0 open("/lib/libdl.so.2", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=9452, ...}) = 0 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\330\34"..., 4096) = 4096 old_mmap(NULL, 12428, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x4004e000 mprotect(0x40050000, 4236, PROT_NONE) = 0 old_mmap(0x40050000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x1000) = 0x40050000 close(3) = 0 open("/lib/libc.so.6", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0755, st_size=888064, ...}) = 0 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\244\213"..., 4096) = 4096 old_mmap(NULL, 902396, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40052000 mprotect(0x40127000, 29948, PROT_NONE) = 0 old_mmap(0x40127000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0xd4000) = 0x40127000 old_mmap(0x4012b000, 13564, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4012b000 close(3) = 0 munmap(0x40014000, 2734) = 0 getpid() = 423 brk(0) = 0x804f540 brk(0x804f578) = 0x804f578 brk(0x8050000) = 0x8050000 getuid() = 0 ioctl(0, TCGETS, {B38400 opost isig icanon echo ...}) = 0 readlink("/proc/self/fd/0", "/dev/tty2", 511) = 9 access("/var/run/utmpd.rw", F_OK) = -1 ENOENT (No such file or directory) access("/var/run/utmpd.ro", F_OK) = -1 ENOENT (No such file or directory) access("/var/run/utmpx", F_OK) = -1 ENOENT (No such file or directory) open("/var/run/utmp", O_RDWR) = 3 fcntl(3, F_GETFD) = 0 fcntl(3, F_SETFD, FD_CLOEXEC) = 0 lseek(3, 0, SEEK_SET) = 0 alarm(0) = 0 rt_sigaction(SIGALRM, {0x401160f0, [], 0x4000000}, {SIG_DFL}, 8) = 0 alarm(1) = 0 fcntl(3, F_SETLKW, {type=F_RDLCK, whence=SEEK_SET, start=0, len=0}) = 0 read(3, "\10\0\0\0\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 384) = 384 read(3, "\2\0\0\0\0\0\0\0~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 384) = 384 read(3, "\1\0\0\0002N\0\0~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 384) = 384 read(3, "\10\0\0\0\203\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 384) = 384 read(3, "\7\0\0\0\263\0\0\0tty1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 384) = 384 read(3, "\7\0\0\0\264\0\0\0tty2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 384) = 384 fcntl(3, F_SETLKW, {type=F_UNLCK, whence=SEEK_SET, start=0, len=0}) = 0 rt_sigaction(SIGALRM, {SIG_DFL}, NULL, 8) = 0 alarm(0) = 1 close(3) = 0 getuid() = 0 socket(PF_UNIX, SOCK_STREAM, 0) = 3 connect(3, {sin_family=AF_UNIX, path=" /var/run/.nscd_socket"}, 110) = -1 ECONNREFUSED (Connection refused) close(3) = 0 open("/etc/nsswitch.conf", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=465, ...}) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40014000 read(3, "# /etc/nsswitch.conf\n#\n# Example"..., 4096) = 465 read(3, "", 4096) = 0 close(3) = 0 munmap(0x40014000, 4096) = 0 open("/etc/ld.so.cache", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=2734, ...}) = 0 old_mmap(NULL, 2734, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40014000 close(3) = 0 open("/lib/libnss_compat.so.2", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=41356, ...}) = 0 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0000\31\0"..., 4096) = 4096 brk(0x8051000) = 0x8051000 old_mmap(NULL, 44332, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x4012f000 mprotect(0x40139000, 3372, PROT_NONE) = 0 old_mmap(0x40139000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x9000) = 0x40139000 close(3) = 0 open("/lib/libnsl.so.1", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=76032, ...}) = 0 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0@\0\000"..., 4096) = 4096 old_mmap(NULL, 88200, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x4013a000 mprotect(0x4014c000, 14472, PROT_NONE) = 0 old_mmap(0x4014c000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x11000) = 0x4014c000 old_mmap(0x4014e000, 6280, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4014e000 close(3) = 0 munmap(0x40014000, 2734) = 0 uname({sys="Linux", node="faire", ...}) = 0 open("/etc/passwd", O_RDONLY) = 3 fcntl(3, F_GETFD) = 0 fcntl(3, F_SETFD, FD_CLOEXEC) = 0 fstat(3, {st_mode=S_IFREG|0644, st_size=987, ...}) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40014000 _llseek(3, 0, [0], SEEK_CUR) = 0 read(3, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 987 close(3) = 0 munmap(0x40014000, 4096) = 0 open("/etc/passwd", O_RDONLY) = 3 fcntl(3, F_GETFD) = 0 fcntl(3, F_SETFD, FD_CLOEXEC) = 0 fstat(3, {st_mode=S_IFREG|0644, st_size=987, ...}) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40014000 _llseek(3, 0, [0], SEEK_CUR) = 0 read(3, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 987 close(3) = 0 munmap(0x40014000, 4096) = 0 setrlimit(RLIMIT_CORE, {rlim_cur=0, rlim_max=0}) = 0 setrlimit(RLIMIT_AS, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0 setrlimit(RLIMIT_CPU, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0 setrlimit(RLIMIT_DATA, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0 setrlimit(RLIMIT_FSIZE, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0 setrlimit(RLIMIT_NOFILE, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = -1 EPERM (Operation not permitted) setrlimit(RLIMIT_RSS, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0 setrlimit(RLIMIT_STACK, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0 rt_sigaction(SIGALRM, {SIG_IGN}, {SIG_DFL}, 8) = 0 rt_sigaction(SIGHUP, {SIG_IGN}, {SIG_DFL}, 8) = 0 rt_sigaction(SIGINT, {SIG_IGN}, {SIG_DFL}, 8) = 0 rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_DFL}, 8) = 0 rt_sigaction(SIGQUIT, {SIG_IGN}, {SIG_DFL}, 8) = 0 rt_sigaction(SIGTERM, {SIG_IGN}, {SIG_DFL}, 8) = 0 rt_sigaction(SIGTSTP, {SIG_IGN}, {SIG_DFL}, 8) = 0 rt_sigaction(SIGTTOU, {SIG_IGN}, {SIG_DFL}, 8) = 0 umask(077) = 022 stat("/etc/pam.d", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 open("/etc/pam.d/passwd", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=1240, ...}) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40014000 read(3, "#\n# The PAM configuration file f"..., 4096) = 1240 open("/lib/security/pam_cracklib.so", O_RDONLY) = 4 fstat(4, {st_mode=S_IFREG|0644, st_size=11628, ...}) = 0 read(4, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0P\r\0\000"..., 4096) = 4096 old_mmap(NULL, 31072, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x40150000 mprotect(0x40153000, 18784, PROT_NONE) = 0 old_mmap(0x40153000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0x2000) = 0x40153000 old_mmap(0x40154000, 14688, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40154000 close(4) = 0 open("/etc/ld.so.cache", O_RDONLY) = 4 fstat(4, {st_mode=S_IFREG|0644, st_size=2734, ...}) = 0 old_mmap(NULL, 2734, PROT_READ, MAP_PRIVATE, 4, 0) = 0x40158000 close(4) = 0 open("/usr/lib/libcrack.so.2", O_RDONLY) = 4 fstat(4, {st_mode=S_IFREG|0644, st_size=29772, ...}) = 0 read(4, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\360\32"..., 4096) = 4096 old_mmap(NULL, 46208, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x40159000 mprotect(0x40160000, 17536, PROT_NONE) = 0 old_mmap(0x40160000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0x6000) = 0x40160000 old_mmap(0x40162000, 9344, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40162000 close(4) = 0 munmap(0x40158000, 2734) = 0 open("/lib/security/pam_unix.so", O_RDONLY) = 4 fstat(4, {st_mode=S_IFREG|0644, st_size=40876, ...}) = 0 read(4, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\340#\0"..., 4096) = 4096 brk(0x8052000) = 0x8052000 old_mmap(NULL, 93652, PROT_READ|PROT_EXEC, MAP_PRIVATE, 4, 0) = 0x40165000 mprotect(0x4016f000, 52692, PROT_NONE) = 0 old_mmap(0x4016f000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0x9000) = 0x4016f000 old_mmap(0x40170000, 48596, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40170000 close(4) = 0 read(3, "", 4096) = 0 close(3) = 0 munmap(0x40014000, 4096) = 0 open("/etc/pam.d/other", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=341, ...}) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40014000 read(3, "#\n# /etc/pam.d/other - specify t"..., 4096) = 341 read(3, "", 4096) = 0 close(3) = 0 munmap(0x40014000, 4096) = 0 time(NULL) = 1014276547 stat("/var/cache/cracklib/cracklib_dict.pwd", 0xbfff9a1c) = -1 ENOENT (No such file or directory) open("/etc/.pwd.lock", O_WRONLY|O_CREAT, 0600) = 3 fcntl(3, F_GETFD) = 0 fcntl(3, F_SETFD, FD_CLOEXEC) = 0 rt_sigaction(SIGALRM, {0x400f669c, ~[], 0x4000000}, {SIG_IGN}, 8) = 0 rt_sigprocmask(SIG_UNBLOCK, [ALRM], [], 8) = 0 alarm(15) = 0 fcntl(3, F_SETLKW, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0}) = 0 alarm(0) = 15 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 rt_sigaction(SIGALRM, {SIG_IGN}, NULL, 8) = 0 getuid() = 0 open("/etc/passwd", O_RDONLY) = 4 fcntl(4, F_GETFD) = 0 fcntl(4, F_SETFD, FD_CLOEXEC) = 0 fstat(4, {st_mode=S_IFREG|0644, st_size=987, ...}) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40014000 _llseek(4, 0, [0], SEEK_CUR) = 0 read(4, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 987 close(4) = 0 munmap(0x40014000, 4096) = 0 open("/etc/shadow", O_RDONLY) = 4 fcntl(4, F_GETFD) = 0 fcntl(4, F_SETFD, FD_CLOEXEC) = 0 fstat(4, {st_mode=S_IFREG|0640, st_size=768, ...}) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40014000 _llseek(4, 0, [0], SEEK_CUR) = 0 read(4, "root:$1$pr8rRlVB$Bp0cngWMIniJeaB"..., 4096) = 768 close(4) = 0 munmap(0x40014000, 4096) = 0 open("/etc/passwd", O_RDONLY) = 4 fcntl(4, F_GETFD) = 0 fcntl(4, F_SETFD, FD_CLOEXEC) = 0 open("/etc/passwd", O_RDONLY) = 5 fcntl(5, F_GETFD) = 0 fcntl(5, F_SETFD, FD_CLOEXEC) = 0 fstat(5, {st_mode=S_IFREG|0644, st_size=987, ...}) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40014000 _llseek(5, 0, [0], SEEK_CUR) = 0 read(5, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 987 close(5) = 0 munmap(0x40014000, 4096) = 0 close(4) = 0 open("/etc/shadow", O_RDONLY) = 4 fcntl(4, F_GETFD) = 0 fcntl(4, F_SETFD, FD_CLOEXEC) = 0 open("/etc/shadow", O_RDONLY) = 5 fcntl(5, F_GETFD) = 0 fcntl(5, F_SETFD, FD_CLOEXEC) = 0 fstat(5, {st_mode=S_IFREG|0640, st_size=768, ...}) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40014000 _llseek(5, 0, [0], SEEK_CUR) = 0 read(5, "root:$1$pr8rRlVB$Bp0cngWMIniJeaB"..., 4096) = 768 close(5) = 0 munmap(0x40014000, 4096) = 0 close(4) = 0 close(3) = 0 write(2, "passwd: Critical error - immedia"..., 41passwd: Critical error - immediate abort ) = 41 munmap(0x40150000, 31072) = 0 munmap(0x40159000, 46208) = 0 munmap(0x40165000, 93652) = 0 _exit(10) = ? I'm looking in the 0.75 source code, but nothing is jumping out at me.