pwcheck doesn't work after system restart

Stewart stewart at f8.com.au
Wed May 21 23:14:19 EDT 2003


On Thursday, May 22, 2003, at 12:10  PM, Mark Keasling wrote:

> Hi,
>
> The Cyrus learning curve is fairly steep.  It requires patience.
> Lots of it.  You may have to take out a loan. :) I'm still no expert.

heh. it's not like uw-imap that's always 'just worked' for me, that's 
for sure. unfortunately uw-imap wasn't really 'just working' for a 
number of my users with >100Mb inboxes. hence the change...

> Cyrus 1.5.x is fairly old.  Assuming an upgrade is available for your
> system you might consider a more recent version.

curse of apt-get i think. or my decision to use debian-stable. i'll see 
what's in unstable - i'm not quite so desperate that i'm ready to 
compile from source.... yet. but that may be the only way to get more 
current.

> If you don't mind, could you post your imapd.conf, cyrus.conf and log
> files so we can see your setup and log output?

OK.. this'll be long but here goes....

imapd.conf is:
==========
# Debian Cyrus imapd.conf
# See imapd.conf(5) for more information

# Configuration directory
configdirectory: /var/lib/cyrus

# Which partition to use for default mailboxes
defaultpartition: default
partition-default: /var/spool/cyrus/mail

# News setup
partition-news: /var/spool/cyrus/news
newsspool: /var/spool/news

# Uncomment the following and add the space-separated users who
# have admin rights
admins: stewart  #yes i know i ought not use my uname for admin, will 
sort that later..

# No anonymous logins
allowanonymouslogin: no

# Minimum time between POP mail fetches in minutes
popminpoll: 1

# umask used by Cyrus programs
umask: 077
=========

there is no cyrus.conf. !!?!

fwiw the relevant part of xinetd.conf is:

service imap2
{
         socket_type     = stream
         protocol        = tcp
         wait            = no
         user            = cyrus
         server          = /usr/sbin/imapd
}

=========
the /etc/init.d/pwcheck script is (in part)

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/pwcheck
NAME=pwcheck
DESC="Cyrus pwcheck daemon"

test -f $DAEMON || exit 0

set -e

# Now we need to check where /usr/sbin/pwcheck points
PWCHECK_DEST=`ls -lL /usr/sbin/pwcheck`
PWCHECK_STANDARD=`ls -l /usr/sbin/pwcheck_standard | sed "s/_.*//g"`
PWCHECK_PAM=`ls -l /usr/sbin/pwcheck_pam | sed "s/_.*//g"`

if [ "$PWCHECK_DEST" = "$PWCHECK_STANDARD" ]; then
                 PWCHECK="STANDARD"
                 DESC="Cyrus standard pwcheck daemon"
         else
                 PWCHECK="PAM"
                 DESC="Cyrus PAM pwcheck daemon"
fi


case "$1" in
   start)
         echo -n "Starting $DESC: "
         if [ "$PWCHECK" = "STANDARD" ]; then
                         start-stop-daemon --start --quiet --background 
--chuid cyrus --exec $DAEMON
                 else
                         start-stop-daemon --start --quiet --background 
--exec $DAEMON
         fi
         echo "$NAME."
         ;;

=========

nothing is logged anywhere, that i can find, when i run the script. 
have yet to run syslog in debug mode but we have just done an strace 
and got this (which is getting into deep geekery that i can only just 
follow  :)

execve("/usr/sbin/pwcheck", ["/usr/sbin/pwcheck"], [/* 14 vars */]) = 0
uname({sys="Linux", node="humphrey", ...}) = 0
brk(0)                                  = 0x10011604
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 
0) = 0x30014000
open("/etc/ld.so.preload", O_RDONLY)    = -1 ENOENT (No such file or 
directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(0x3, 0x7ffff0d8)                = -1 ENOSYS (Function not 
implemented)
fstat(3, {st_mode=S_IFREG|0644, st_size=6998, ...}) = 0
mmap(NULL, 6998, PROT_READ, MAP_PRIVATE, 3, 0) = 0x30015000
close(3)                                = 0
open("/lib/libcrypt.so.1", O_RDONLY)    = 3
read(3, "\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\24\0\0\0\1\0\0\v"..., 
1024) = 1024
fstat(3, {st_mode=S_IFREG|0644, st_size=20864, ...}) = 0
mmap(0xffb4000, 245384, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 
0xffb4000
mprotect(0xffb8000, 229000, PROT_NONE)  = 0
mmap(0xffc4000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 
0) = 0xffc4000
mmap(0xffc9000, 159368, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xffc9000
close(3)                                = 0
open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\2\1\0\0\0\0\0\0\0\0\0\0\3\0\24\0\0\0\1\0\2]\264"..., 
1024) = 1024
fstat(3, {st_mode=S_IFREG|0755, st_size=1270932, ...}) = 0
mmap(0xfe59000, 1353556, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 
0xfe59000
mprotect(0xff6f000, 214868, PROT_NONE)  = 0
mmap(0xff79000, 155648, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 
0x110000) = 0xff79000
mmap(0xff9f000, 18260, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xff9f000
close(3)                                = 0
munmap(0x30015000, 6998)                = 0
socket(PF_UNIX, SOCK_DGRAM, 0)          = 3
fcntl64(3, F_SETFD, FD_CLOEXEC)         = -1 ENOSYS (Function not 
implemented)
fcntl(3, F_SETFD, FD_CLOEXEC)           = 0
connect(3, {sin_family=AF_UNIX, path="/dev/log"}, 16) = 0
fork()                                  = 844
exit(0)                                 = ?


i'm told the fork() at the end means it's starting process ID 844 but 
that must be dying or something because it doesn't show up in the 
process list at all. up the top it's complaining that it can't find 
/etc/ld.so.preload which strikes me as strange that you'd go looking 
for a library in /etc.., if i'm right in thinking ld.so.preload is in 
fact a linked or static library? but like i say i only just follow what 
that's all about... [while writing this my colleague has researched 
some more and says he thinks the lack of /etc/ld.so.* may not be 
significant..]

==========

/var/log/mail/mail.log says this when i try to check mail from my 
laptop using test username 'mark' which is a local unix user and worked 
fine last night..

May 22 12:30:37 humphrey imapd[724]: badlogin: [192.168.1.15] plaintext 
mark cannot connect to pwcheck server

==========

in README.pwcheck it mentions having a /var/pwcheck directory for the 
socket. this doesn't exist but /var/state/pwcheck does. we've tried 
copying (with permissions) /var/state/pwcheck to /var/ but that made no 
difference.

==========

> Do you remember how pwcheck was started the first time?

i wasn't aware it even existed until it stopped working. :) presume the 
debian installer did it for me. but i've rebooted the machine a number 
of times already since installing cyrus and it kept working, til this 
morning.

> Check the /etc/init.d/pwcheck script and trying running pwcheck via
> the command line.  It may produce informative output.

have looked at the script and run it from command line without any 
useful output beyond the 'starting pwcheck daemon' msg on the console.

>  I assume that you know that and are already running it as root.

yup. :)

> That's about it off the top of my head where hair once grew. :)

heh. trying to not lose my own down here after all this.. :)

thanks for your help...

..S.





More information about the Info-cyrus mailing list