Using pserver, commands appear to complete successfully, but the
connection hangs at the exit point.

I've been using cvs 1.11.1p1 with xinetd 2.3.3 perfectly until now. The
problem appeared when I upgraded to 1.11.2. I haven't touched the xinetd
config:

service cvspserver
{
        socket_type     = stream
        protocol        = tcp
        wait            = no
        user            = cvsuser
        server          = /usr/local/bin/cvs
        server_args     = -f --allow-root=/home/cvsroot pserver
        disable         = no
} 

I upgraded to xinetd 2.3.4 but that didn't solve the problem. Other
xinetd services are working fine.

Someone suggested I strace the cvs process and use lsof to see what it
is accessing.

The strace output is attached. The blank line near the bottom shows
where it is hanging. When I pressed ^C on the client side, it resumed.

Here is the lsof output at the problem point. It appears to be locking
on a read from the socket.

$ sudo /tmp/lsof | grep -i cvs
xinetd     2199    root    9u  IPv4    1198383               TCP
*:cvspserver (LISTEN)
strace     2399 cvsuser  cwd    DIR        3,5    4096         2 /
strace     2399 cvsuser  rtd    DIR        3,5    4096         2 /
strace     2399 cvsuser  txt    REG        3,5  175463     98275
/usr/local/bin/strace
strace     2399 cvsuser  mem    REG        3,5  424492    290313
/lib/ld-2.2.4.so
strace     2399 cvsuser  mem    REG        3,5 5006920    290312
/lib/libc-2.2.4.so
strace     2399 cvsuser    0u  IPv4    1200226               TCP
bouncer:cvspserver->gecko:32777 (ESTABLISHED)
strace     2399 cvsuser    1u  IPv4    1200226               TCP
bouncer:cvspserver->gecko:32777 (ESTABLISHED)
strace     2399 cvsuser    2u  IPv4    1200226               TCP
bouncer:cvspserver->gecko:32777 (ESTABLISHED)
strace     2399 cvsuser    3r  FIFO        0,6           1198377 pipe
strace     2399 cvsuser    4w  FIFO        0,6           1198377 pipe
strace     2399 cvsuser    5w   REG        3,5   10474    241943
/tmp/strace.out
cvs        2400 cvsuser  cwd    DIR        3,5    4096     98553
/tmp/cvs-serv2400
cvs        2400 cvsuser  rtd    DIR        3,5    4096         2 /
cvs        2400 cvsuser  txt    REG        3,5 1571028     98342
/usr/local/bin/cvs
cvs        2400 cvsuser  mem    REG        3,5  424492    290313
/lib/ld-2.2.4.so
cvs        2400 cvsuser  mem    REG        3,5   73338    290319
/lib/libcrypt-2.2.4.so
cvs        2400 cvsuser  mem    REG        3,5 5006920    290312
/lib/libc-2.2.4.so
cvs        2400 cvsuser  mem    REG        3,5  233130    290324
/lib/libnss_files-2.2.4.so
cvs        2400 cvsuser    0u  IPv4    1200226               TCP
bouncer:cvspserver->gecko:32777 (ESTABLISHED)
cvs        2400 cvsuser    1u  IPv4    1200226               TCP
bouncer:cvspserver->gecko:32777 (ESTABLISHED)
cvs        2400 cvsuser    2u  IPv4    1200226               TCP
bouncer:cvspserver->gecko:32777 (ESTABLISHED)
cvs        2400 cvsuser    3r  FIFO        0,6           1198377 pipe
cvs        2400 cvsuser    4w  FIFO        0,6           1198377 pipe

This is what it looks like from the client side:

$ cvs version
Client: Concurrent Versions System (CVS) 1.11.1p1 (client/server)
Server: Concurrent Versions System (CVS) 1.11.2 (client/server)
(hangs here)
^C
cvs [version aborted]: received interrupt signal
$

The problem exists regardless of the cvs command I use. These examples
where for "cvs version". cvs works perfectly if run locally on the
server, so it seems to be a xinetd/pserver problem.

Zach.
execve("/usr/local/bin/cvs", ["/usr/local/bin/cvs", "-f", 
"--allow-root=/home/cvsroot", "pserver"], [/* 19 vars */]) = 0
brk(0)                                  = 0x80d7f54
open("/etc/ld.so.preload", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 5
fstat64(5, {st_mode=S_IFREG|0644, st_size=10653, ...}) = 0
old_mmap(NULL, 10653, PROT_READ, MAP_PRIVATE, 5, 0) = 0x40016000
close(5)                                = 0
open("/lib/libcrypt.so.1", O_RDONLY)    = 5
read(5, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\240\20"..., 1024) = 1024
fstat64(5, {st_mode=S_IFREG|0755, st_size=73338, ...}) = 0
old_mmap(NULL, 183932, PROT_READ|PROT_EXEC, MAP_PRIVATE, 5, 0) = 0x40019000
mprotect(0x4001e000, 163452, PROT_NONE) = 0
old_mmap(0x4001e000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 5, 0x4000) = 
0x4001e000
old_mmap(0x4001f000, 159356, PROT_READ|PROT_WRITE, 
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4001f000
close(5)                                = 0
open("/lib/libc.so.6", O_RDONLY)        = 5
read(5, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\310\331"..., 1024) = 1024
fstat64(5, {st_mode=S_IFREG|0755, st_size=5006920, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x40046000
old_mmap(NULL, 1202372, PROT_READ|PROT_EXEC, MAP_PRIVATE, 5, 0) = 0x40047000
mprotect(0x40162000, 43204, PROT_NONE)  = 0
old_mmap(0x40162000, 28672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 5, 0x11a000) 
= 0x40162000
old_mmap(0x40169000, 14532, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, 
-1, 0) = 0x40169000
close(5)                                = 0
munmap(0x40016000, 10653)               = 0
brk(0)                                  = 0x80d7f54
brk(0x80d7f7c)                          = 0x80d7f7c
brk(0x80d8000)                          = 0x80d8000
brk(0x80d9000)                          = 0x80d9000
open("/etc/localtime", O_RDONLY)        = 5
fstat64(5, {st_mode=S_IFREG|0644, st_size=870, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x40016000
read(5, "TZif\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\5\0"..., 4096) = 870
close(5)                                = 0
munmap(0x40016000, 4096)                = 0
setsockopt(0, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
fstat64(0, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x40016000
read(0, "BEGIN AUTH REQUEST\n/home/cvsroot"..., 4096) = 63
open("/home/cvsroot/CVSROOT/config", O_RDONLY) = 5
fstat64(5, {st_mode=S_IFREG|0664, st_size=527, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x40017000
read(5, "# Set this to \"no\" if pserver sh"..., 4096) = 527
read(5, "", 4096)                       = 0
close(5)                                = 0
munmap(0x40017000, 4096)                = 0
open("/home/cvsroot/CVSROOT/passwd", O_RDONLY) = 5
fstat64(5, {st_mode=S_IFREG|0664, st_size=41, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x40017000
read(5, "zach:RA18mrdm2obtI:cvsuser\nanon:"..., 4096) = 41
close(5)                                = 0
munmap(0x40017000, 4096)                = 0
socket(PF_UNIX, SOCK_STREAM, 0)         = 5
connect(5, {sin_family=AF_UNIX, path="/var/run/.nscd_socket"}, 110) = -1 ENOENT (No 
such file or directory)
close(5)                                = 0
open("/etc/nsswitch.conf", O_RDONLY)    = 5
fstat64(5, {st_mode=S_IFREG|0644, st_size=238, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x40017000
read(5, "# Begin /etc/nsswitch.conf\n\npass"..., 4096) = 238
read(5, "", 4096)                       = 0
close(5)                                = 0
munmap(0x40017000, 4096)                = 0
open("/etc/ld.so.cache", O_RDONLY)      = 5
fstat64(5, {st_mode=S_IFREG|0644, st_size=10653, ...}) = 0
old_mmap(NULL, 10653, PROT_READ, MAP_PRIVATE, 5, 0) = 0x4016d000
close(5)                                = 0
open("/lib/libnss_files.so.2", O_RDONLY) = 5
read(5, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\200\"\0"..., 1024) = 1024
fstat64(5, {st_mode=S_IFREG|0755, st_size=233130, ...}) = 0
old_mmap(NULL, 38244, PROT_READ|PROT_EXEC, MAP_PRIVATE, 5, 0) = 0x40170000
mprotect(0x40179000, 1380, PROT_NONE)   = 0
old_mmap(0x40179000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 5, 0x8000) = 
0x40179000
close(5)                                = 0
munmap(0x4016d000, 10653)               = 0
brk(0x80da000)                          = 0x80da000
open("/etc/passwd", O_RDONLY)           = 5
fcntl64(5, F_GETFD)                     = 0
fcntl64(5, F_SETFD, FD_CLOEXEC)         = 0
fstat64(5, {st_mode=S_IFREG|0644, st_size=342, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x40017000
read(5, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 342
close(5)                                = 0
munmap(0x40017000, 4096)                = 0
open("/etc/group", O_RDONLY)            = 5
fcntl64(5, F_GETFD)                     = 0
fcntl64(5, F_SETFD, FD_CLOEXEC)         = 0
fstat64(5, {st_mode=S_IFREG|0644, st_size=249, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x40017000
_llseek(5, 0, [0], SEEK_CUR)            = 0
read(5, "root:x:0:\nbin:x:1:\nsys:x:2:\nkmem"..., 4096) = 249
read(5, "", 4096)                       = 0
close(5)                                = 0
munmap(0x40017000, 4096)                = 0
setgroups32(0x1, 0x80d8f90)             = -1 EPERM (Operation not permitted)
setgid32(0x3ef)                         = 0
setuid32(0x3ee)                         = 0
umask(0)                                = 022
fstat64(1, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 
0x40017000
write(1, "I LOVE YOU\n", 11)            = 11
brk(0x80dd000)                          = 0x80dd000
rt_sigprocmask(SIG_BLOCK, [ABRT], [], 8) = 0
rt_sigaction(SIGABRT, {0x80aa6fc, [], 0x4000000}, {SIG_DFL}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP], [], 8) = 0
rt_sigaction(SIGHUP, {0x80aa6fc, [], 0x4000000}, {SIG_DFL}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
rt_sigaction(SIGINT, {0x80aa6fc, [], 0x4000000}, {SIG_DFL}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [QUIT], [], 8) = 0
rt_sigaction(SIGQUIT, {0x80aa6fc, [], 0x4000000}, {SIG_DFL}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [PIPE], [], 8) = 0
rt_sigaction(SIGPIPE, {0x80aa6fc, [], 0x4000000}, {SIG_DFL}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [TERM], [], 8) = 0
rt_sigaction(SIGTERM, {0x80aa6fc, [], 0x4000000}, {SIG_DFL}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
uname({sys="Linux", node="bouncer", ...}) = 0
getpid()                                = 2219
mkdir("/tmp", 0777)                     = -1 EEXIST (File exists)
mkdir("/tmp/cvs-serv2219", 0777)        = 0
chmod("/tmp/cvs-serv2219", 0700)        = 0
chdir("/tmp/cvs-serv2219")              = 0
rt_sigprocmask(SIG_BLOCK, [ABRT], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [HUP], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [QUIT], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [PIPE], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [TERM], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
brk(0x80ef000)                          = 0x80ef000
read(0, "Root /home/cvsroot\nValid-respons"..., 4096) = 376
access("/home/cvsroot/CVSROOT", R_OK|X_OK) = 0
write(1, "Valid-requests Root Valid-respon"..., 544) = 544
read(0, "UseUnchanged\n", 4096)         = 13
read(0, "Gzip-stream 3\nx^*K-*\316\314\317\343\2\0\0\0\377\377", 4096) = 30
brk(0x8100000)                          = 0x8100000
brk(0x8111000)                          = 0x8111000
brk(0x8122000)                          = 0x8122000
brk(0x8133000)                          = 0x8133000
brk(0x813c000)                          = 0x813c000
pipe([5, 6])                            = 0
pipe([7, 8])                            = 0
pipe([9, 10])                           = 0
pipe([11, 12])                          = 0
fcntl64(11, F_GETFL)                    = 0 (flags O_RDONLY)
fcntl64(11, F_SETFL, O_RDONLY|O_NONBLOCK) = 0
fcntl64(12, F_GETFL)                    = 0x1 (flags O_WRONLY)
fcntl64(12, F_SETFL, O_WRONLY|O_NONBLOCK) = 0
open("/dev/null", O_RDONLY)             = 13
write(1, "x^\2\0\0\0\377\377", 8)       = 8
fork()                                  = 2220
--- SIGCHLD (Child exited) ---
fcntl64(1, F_GETFL)                     = 0x2 (flags O_RDWR)
fcntl64(1, F_SETFL, O_RDWR|O_NONBLOCK)  = 0
fcntl64(5, F_GETFL)                     = 0 (flags O_RDONLY)
fcntl64(5, F_SETFL, O_RDONLY|O_NONBLOCK) = 0
fcntl64(7, F_GETFL)                     = 0 (flags O_RDONLY)
fcntl64(7, F_SETFL, O_RDONLY|O_NONBLOCK) = 0
fcntl64(9, F_GETFL)                     = 0 (flags O_RDONLY)
fcntl64(9, F_SETFL, O_RDONLY|O_NONBLOCK) = 0
close(6)                                = 0
close(8)                                = 0
close(10)                               = 0
close(11)                               = 0
close(13)                               = 0
select(10, [5 7 9], [], NULL, NULL)     = 3 (in [5 7 9])
read(9, "", 4096)                       = 0
close(9)                                = 0
read(5, "Concurrent Versions System (CVS)"..., 4096) = 56
read(7, "", 4096)                       = 0
close(7)                                = 0
select(10, [5], [], NULL, NULL)         = 1 (in [5])
read(5, "", 4096)                       = 0
close(5)                                = 0
close(12)                               = 0
wait4(2220, [WIFEXITED(s) && WEXITSTATUS(s) == 0], 0, NULL) = 2220
fcntl64(1, F_GETFL)                     = 0x802 (flags O_RDWR|O_NONBLOCK)
fcntl64(1, F_SETFL, O_RDWR)             = 0
write(1, "\362Up\316\317K.-*J\315+Q\10K-*\316\314\317+V\10\256,."..., 63) = 63
write(1, "\312\317\346\2\0\0\0\377\377", 9) = 9
read(0, "\3\0\17=\3\21", 4096)          = 6
fstat64(0, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0
read(0,

"", 4096)                       = 0
shutdown(0, 0 /* receive */)            = 0
close(0)                                = 0
munmap(0x40016000, 4096)                = 0
chdir("/tmp")                           = 0
stat64("/tmp/cvs-serv2219", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
rmdir("/tmp/cvs-serv2219")              = 0
brk(0x810e000)                          = 0x810e000
brk(0x80ee000)                          = 0x80ee000
write(1, "\3\0\204\271\23\361", 6)      = 6
munmap(0x40017000, 4096)                = 0
_exit(0)                                = ?

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to