dccifd 1.2.49 dying, any help?

Henrik Edlund henrik@edlund.org
Sat Jun 12 00:59:01 UTC 2004


I upgraded from 1.2.36 to 1.2.49 and now dccifd segfaults when a client 
(SpamAssassin) connects to its socket and communicates. (SA reports 
"DCCifd -> check skipped: Illegal seek Died at [...]")

Here is a full "strace -f":

execve("/usr/local/sw/dcc/libexec/dccifd", ["/usr/local/sw/dcc/libexec/dccifd"], [/* 11 vars */]) = 0
brk(0)                                  = 0x80e9f64
open("/etc/ld.so.preload", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=29840, ...}) = 0
old_mmap(NULL, 29840, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40015000
close(3)                                = 0
open("/lib/libm.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0207\0"..., 1024) = 1024
fstat64(3, {st_mode=S_IFREG|0755, st_size=147720, ...}) = 0
old_mmap(NULL, 134400, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x4001d000
mprotect(0x4003d000, 3328, PROT_NONE)   = 0
old_mmap(0x4003d000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x1f000) = 0x4003d000
close(3)                                = 0
open("/lib/libpthread.so.0", O_RDONLY)  = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\340B\0"..., 1024) = 1024
fstat64(3, {st_mode=S_IFREG|0755, st_size=88592, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4003e000
old_mmap(NULL, 85368, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x4003f000
mprotect(0x4004d000, 28024, PROT_NONE)  = 0
old_mmap(0x4004d000, 28672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0xe000) = 0x4004d000
close(3)                                = 0
open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0`\222\1"..., 1024) = 1024
fstat64(3, {st_mode=S_IFREG|0755, st_size=1237712, ...}) = 0
old_mmap(NULL, 1190752, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x40054000
mprotect(0x4016d000, 39776, PROT_NONE)  = 0
old_mmap(0x4016d000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x119000) = 0x4016d000
old_mmap(0x40173000, 15200, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40173000
close(3)                                = 0
munmap(0x40015000, 29840)               = 0
getrlimit(0x3, 0xbffffc4c)              = 0
setrlimit(RLIMIT_STACK, {rlim_cur=2044*1024, rlim_max=RLIM_INFINITY}) = 0
getpid()                                = 9578
uname({sys="Linux", node="ticalc", ...}) = 0
rt_sigaction(SIGRTMIN, {0x40047628, [], 0x4000000}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x400476bc, [], 0x4000000}, NULL, 8) = 0
rt_sigaction(SIGRT_2, {0x400477c8, [], 0x4000000}, NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [RTMIN], NULL, 8) = 0
_sysctl({{CTL_KERN, KERN_VERSION}, 2, 0xbffffa54, 36, (nil), 0}) = 0
fstat64(1, {st_mode=S_IFCHR|0720, st_rdev=makedev(136, 1), ...}) = 0
fstat64(2, {st_mode=S_IFREG|0644, st_size=2630, ...}) = 0
getrlimit(0x7, 0xbffffd5c)              = 0
chdir("/usr/local/sw/dcc-1.2.49")       = 0
stat64("/usr/local/sw/dcc-1.2.49/dccifd", 0xbffffb0c) = -1 ENOENT (No such file or directory)
socket(PF_UNIX, SOCK_STREAM, 0)         = 3
connect(3, {sin_family=AF_UNIX, path="/usr/local/sw/dcc-1.2.49/dccifd"}, 110) = -1 ENOENT (No such file or directory)
close(3)                                = 0
socket(PF_UNIX, SOCK_STREAM, 0)         = 3
bind(3, {sin_family=AF_UNIX, path="/usr/local/sw/dcc-1.2.49/dccifd"}, 110) = 0
chmod("/usr/local/sw/dcc-1.2.49/dccifd", 0666) = 0
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
fcntl64(3, F_GETFL)                     = 0x2 (flags O_RDWR)
fcntl64(3, F_SETFL, O_RDWR|O_NONBLOCK)  = 0
listen(3, 10)                           = 0
brk(0)                                  = 0x80e9f64
brk(0x80e9f94)                          = 0x80e9f94
brk(0x80ea000)                          = 0x80ea000
old_mmap(NULL, 5419008, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40177000
old_mmap(NULL, 3371008, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x406a2000
fork()                                  = 9579
[pid  9579] getpid()                    = 9579
[pid  9579] getrlimit(0x3, 0xbffffc14 <unfinished ...>
[pid  9578] _exit(0)                    = ?
[pid  9579] <... getrlimit resumed> )   = 0
[pid  9579] setrlimit(RLIMIT_STACK, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0
[pid  9579] setsid()                    = 9579
[pid  9579] open("/dev/null", O_RDWR)   = 4
[pid  9579] fstat64(4, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
[pid  9579] dup2(4, 0)                  = 0
[pid  9579] dup2(4, 1)                  = 1
[pid  9579] dup2(4, 2)                  = 2
[pid  9579] close(4)                    = 0
[pid  9579] unlink("/var/run/dcc/dccifd.pid") = 0
brk(0x80eb000)                          = 0x80eb000
open("/var/run/dcc/dccifd.pid", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 4
getpid()                                = 9579
fstat64(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40015000
write(4, "9579\n", 5)                   = 5
close(4)                                = 0
munmap(0x40015000, 4096)                = 0
rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_DFL}, 8) = 0
rt_sigaction(SIGHUP, {0x40048078, [HUP], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = 0
rt_sigaction(SIGTERM, {0x40048078, [TERM], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = 0
rt_sigaction(SIGINT, {0x40048078, [INT], SA_RESTART|0x4000000}, {SIG_DFL}, 8) = 0
brk(0x80ed000)                          = 0x80ed000
pipe([4, 5])                            = 0
clone(child_stack=0x80ebf68, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND) = 9580
[pid  9579] write(5, "os\0@\5\0\0\0\263\222\4\10\0\0\0\0\231p\0@dC\1@a\0\0\0"..., 148 <unfinished ...>
[pid  9580] rt_sigprocmask(SIG_SETMASK, ~[TRAP 33],  <unfinished ...>
[pid  9579] <... write resumed> )       = 148
[pid  9580] <... rt_sigprocmask resumed> NULL, 8) = 0
[pid  9579] rt_sigprocmask(SIG_SETMASK, NULL,  <unfinished ...>
[pid  9580] read(4,  <unfinished ...>
[pid  9579] <... rt_sigprocmask resumed> [RTMIN], 8) = 0
[pid  9580] <... read resumed> "os\0@\5\0\0\0\263\222\4\10\0\0\0\0\231p\0@dC\1@a\0\0\0"..., 148) = 148
[pid  9579] write(5, "\200\20\5@\0\0\0\0\0\0\0\0d\347\4\10\0\0\0\0\0\0\0\200"..., 148 <unfinished ...>
[pid  9580] poll( <unfinished ...>
[pid  9579] <... write resumed> )       = 148
[pid  9580] <... poll resumed> [{fd=4, events=POLLIN, revents=POLLIN}], 1, 2000) = 1
[pid  9579] rt_sigprocmask(SIG_SETMASK, NULL,  <unfinished ...>
[pid  9580] getppid( <unfinished ...>
[pid  9579] <... rt_sigprocmask resumed> [RTMIN], 8) = 0
[pid  9580] <... getppid resumed> )     = 9579
[pid  9579] rt_sigsuspend([] <unfinished ...>
[pid  9580] read(4, "\200\20\5@\0\0\0\0\0\0\0\0d\347\4\10\0\0\0\0\0\0\0\200"..., 148) = 148
[pid  9580] old_mmap(0xbf600000, 2097152, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xbf600000
[pid  9580] mprotect(0xbf600000, 4096, PROT_NONE) = 0
[pid  9580] clone(child_stack=0xbf7ffbf8, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|0x21) = 9581
[pid  9581] rt_sigprocmask(SIG_BLOCK, [HUP INT TERM],  <unfinished ...>
[pid  9580] kill(9579, SIGRTMIN <unfinished ...>
[pid  9581] <... rt_sigprocmask resumed> NULL, 8) = 0
[pid  9580] <... kill resumed> )        = 0
[pid  9579] --- SIGRTMIN (Real-time signal 0) ---
[pid  9581] rt_sigprocmask(SIG_SETMASK, NULL,  <unfinished ...>
[pid  9580] poll( <unfinished ...>
[pid  9581] <... rt_sigprocmask resumed> [HUP INT TERM RTMIN], 8) = 0
[pid  9579] <... rt_sigsuspend resumed> ) = -1 EINTR (Interrupted system call)
[pid  9581] rt_sigsuspend([HUP INT TERM] <unfinished ...>
[pid  9579] sigreturn()                 = ? (mask now [RTMIN])
[pid  9579] open("/usr/local/sw/dcc-1.2.49/map", O_RDWR) = 6
[pid  9579] fstat64(6, {st_mode=S_IFREG|0600, st_size=4460, ...}) = 0
[pid  9579] old_mmap(NULL, 4460, PROT_READ|PROT_WRITE, MAP_SHARED, 6, 0) = 0x40015000
[pid  9579] open("/etc/hostid", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
[pid  9579] open("/etc/hostid", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
[pid  9579] uname({sys="Linux", node="ticalc", ...}) = 0
[pid  9579] gettimeofday({1087001363, 355781}, NULL) = 0
[pid  9579] getpid()                    = 9579
[pid  9579] open("/etc/resolv.conf", O_RDONLY) = 7
[pid  9579] fstat64(7, {st_mode=S_IFREG|0644, st_size=41, ...}) = 0
[pid  9579] old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40017000
[pid  9579] read(7, "search ticalc.org\nnameserver 62."..., 4096) = 41
[pid  9579] read(7, "", 4096)           = 0
[pid  9579] close(7)                    = 0
[pid  9579] munmap(0x40017000, 4096)    = 0
[pid  9579] socket(PF_UNIX, SOCK_STREAM, 0) = 7
[pid  9579] connect(7, {sin_family=AF_UNIX, path="/var/run/.nscd_socket"}, 110) = -1 ENOENT (No such file or directory)
[pid  9579] close(7)                    = 0
[pid  9579] open("/etc/nsswitch.conf", O_RDONLY) = 7
[pid  9579] fstat64(7, {st_mode=S_IFREG|0644, st_size=1108, ...}) = 0
[pid  9579] old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40017000
[pid  9579] read(7, "#\n# /etc/nsswitch.conf\n#\n# An ex"..., 4096) = 1108
[pid  9579] read(7, "", 4096)           = 0
[pid  9579] close(7)                    = 0
[pid  9579] munmap(0x40017000, 4096)    = 0
[pid  9579] open("/etc/ld.so.cache", O_RDONLY) = 7
[pid  9579] fstat64(7, {st_mode=S_IFREG|0644, st_size=29840, ...}) = 0
[pid  9579] old_mmap(NULL, 29840, PROT_READ, MAP_PRIVATE, 7, 0) = 0x409d9000
[pid  9579] close(7)                    = 0
[pid  9579] open("/lib/libnss_files.so.2", O_RDONLY) = 7
[pid  9579] read(7, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\320\34"..., 1024) = 1024
[pid  9579] fstat64(7, {st_mode=S_IFREG|0755, st_size=35472, ...}) = 0
[pid  9579] old_mmap(NULL, 33740, PROT_READ|PROT_EXEC, MAP_PRIVATE, 7, 0) = 0x409e1000
[pid  9579] mprotect(0x409e9000, 972, PROT_NONE) = 0
[pid  9579] old_mmap(0x409e9000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 7, 0x8000) = 0x409e9000
[pid  9579] close(7)                    = 0
[pid  9579] munmap(0x409d9000, 29840)   = 0
[pid  9579] open("/etc/host.conf", O_RDONLY) = 7
[pid  9579] fstat64(7, {st_mode=S_IFREG|0644, st_size=27, ...}) = 0
[pid  9579] old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40017000
[pid  9579] read(7, "order hosts, bind\nmulti on\n", 4096) = 27
[pid  9579] read(7, "", 4096)           = 0
[pid  9579] close(7)                    = 0
[pid  9579] munmap(0x40017000, 4096)    = 0
[pid  9579] open("/etc/hosts", O_RDONLY) = 7
[pid  9579] fcntl64(7, F_GETFD)         = 0
[pid  9579] fcntl64(7, F_SETFD, FD_CLOEXEC) = 0
[pid  9579] fstat64(7, {st_mode=S_IFREG|0644, st_size=671, ...}) = 0
[pid  9579] old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40017000
[pid  9579] read(7, "#\n# hosts\t\tThis file describes a"..., 4096) = 671
[pid  9579] read(7, "", 4096)           = 0
[pid  9579] close(7)                    = 0
[pid  9579] munmap(0x40017000, 4096)    = 0
[pid  9579] uname({sys="Linux", node="ticalc", ...}) = 0
[pid  9579] write(2, "1.2.49 listening to /usr/local/s"..., 51) = 51
[pid  9579] write(2, "\n", 1)           = 1
[pid  9579] brk(0x80f0000)              = 0x80f0000
[pid  9579] time([1087001363])          = 1087001363
[pid  9579] open("/etc/localtime", O_RDONLY) = 7
[pid  9579] fstat64(7, {st_mode=S_IFREG|0644, st_size=675, ...}) = 0
[pid  9579] old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40017000
[pid  9579] read(7, "TZif\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0\0\0\4\0"..., 4096) = 675
[pid  9579] close(7)                    = 0
[pid  9579] munmap(0x40017000, 4096)    = 0
[pid  9579] getpid()                    = 9579
[pid  9579] rt_sigaction(SIGPIPE, {0x40048078, [], 0x4000000}, {SIG_IGN}, 8) = 0
[pid  9579] socket(PF_UNIX, SOCK_DGRAM, 0) = 7
[pid  9579] fcntl64(7, F_SETFD, FD_CLOEXEC) = 0
[pid  9579] connect(7, {sin_family=AF_UNIX, path="/dev/log"}, 16) = 0
[pid  9579] send(7, "<21>Jun 12 02:49:23 dccifd[9579]"..., 85, 0) = 85
[pid  9579] rt_sigaction(SIGPIPE, {SIG_IGN}, NULL, 8) = 0
[pid  9579] time(NULL)                  = 1087001363
[pid  9579] time(NULL)                  = 1087001363
[pid  9579] select(4, [3], NULL, NULL, {2, 0} <unfinished ...>
[pid  9580] <... poll resumed> [{fd=4, events=POLLIN}], 1, 2000) = 0
[pid  9580] getppid()                   = 9579
[pid  9580] poll( <unfinished ...>
[pid  9579] <... select resumed> )      = 0 (Timeout)
[pid  9579] time(NULL)                  = 1087001365
[pid  9579] select(4, [3], NULL, NULL, {2, 0} <unfinished ...>
[pid  9580] <... poll resumed> [{fd=4, events=POLLIN}], 1, 2000) = 0
[pid  9580] getppid()                   = 9579
[pid  9580] poll( <unfinished ...>
[pid  9579] <... select resumed> )      = 0 (Timeout)
[pid  9579] time(NULL)                  = 1087001367
[pid  9579] select(4, [3], NULL, NULL, {2, 0} <unfinished ...>
[pid  9580] <... poll resumed> [{fd=4, events=POLLIN}], 1, 2000) = 0
[pid  9580] getppid()                   = 9579
[pid  9580] poll( <unfinished ...>
[pid  9579] <... select resumed> )      = 0 (Timeout)
[pid  9579] time(NULL)                  = 1087001369
[pid  9579] select(4, [3], NULL, NULL, {2, 0} <unfinished ...>
[pid  9580] <... poll resumed> [{fd=4, events=POLLIN}], 1, 2000) = 0
[pid  9579] <... select resumed> )      = 0 (Timeout)
[pid  9580] getppid( <unfinished ...>
[pid  9579] time( <unfinished ...>
[pid  9580] <... getppid resumed> )     = 9579
[pid  9579] <... time resumed> NULL)    = 1087001371
[pid  9580] poll( <unfinished ...>
[pid  9579] select(4, [3], NULL, NULL, {2, 0}) = 0 (Timeout)
[pid  9579] time(NULL)                  = 1087001373
[pid  9579] select(4, [3], NULL, NULL, {2, 0} <unfinished ...>
[pid  9580] <... poll resumed> [{fd=4, events=POLLIN}], 1, 2000) = 0
[pid  9580] getppid()                   = 9579
[pid  9580] poll( <unfinished ...>
[pid  9579] <... select resumed> )      = 1 (in [3], left {1, 160000})
[pid  9579] accept(3, {sin_family=AF_UNIX, path=@}, [2]) = 8
[pid  9579] fcntl64(8, F_SETFD, FD_CLOEXEC) = 0
[pid  9579] fcntl64(8, F_GETFL)         = 0x2 (flags O_RDWR)
[pid  9579] fcntl64(8, F_SETFL, O_RDWR|O_NONBLOCK) = 0
[pid  9579] rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
[pid  9579] write(5, "\200\20\5@\0\0\0\0\0\0\0\0008\325\4\10\10p\27@\0\0\0\200"..., 148 <unfinished ...>
[pid  9580] <... poll resumed> [{fd=4, events=POLLIN, revents=POLLIN}], 1, 2000) = 1
[pid  9579] <... write resumed> )       = 148
[pid  9580] getppid( <unfinished ...>
[pid  9579] rt_sigprocmask(SIG_SETMASK, NULL,  <unfinished ...>
[pid  9580] <... getppid resumed> )     = 9579
[pid  9579] <... rt_sigprocmask resumed> [RTMIN], 8) = 0
[pid  9580] read(4,  <unfinished ...>
[pid  9579] rt_sigsuspend([] <unfinished ...>
[pid  9580] <... read resumed> "\200\20\5@\0\0\0\0\0\0\0\0008\325\4\10\10p\27@\0\0\0\200"..., 148) = 148
[pid  9580] old_mmap(0xbf400000, 2097152, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xbf400000
[pid  9580] mprotect(0xbf400000, 4096, PROT_NONE) = 0
[pid  9580] clone(child_stack=0xbf5ffbf8, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|0x21) = 9592
[pid  9592] getpid()                    = 9592
[pid  9592] rt_sigprocmask(SIG_SETMASK, [RTMIN], NULL, 8) = 0
[pid  9592] rt_sigprocmask(SIG_BLOCK, [], NULL, 8) = 0
[pid  9592] select(9, [8], NULL, NULL, {5, 0}) = 1 (in [8], left {5, 0})
[pid  9592] read(8, "header\n0.0.0.0\n\n\nunknown\r\n\nFrom "..., 8192) = 660
[pid  9592] --- SIGSEGV (Segmentation fault) ---
[pid  9580] --- SIGRT_1 (Real-time signal 1) ---
[pid  9580] sigreturn()                 = ? (mask now ~[TRAP KILL STOP])
[pid  9580] kill(9579, SIGRTMIN)        = 0
[pid  9579] --- SIGRTMIN (Real-time signal 0) ---
[pid  9579] <... rt_sigsuspend resumed> ) = -1 EINTR (Interrupted system call)
[pid  9579] sigreturn()                 = ? (mask now [RTMIN])
[pid  9579] time(NULL)                  = 1087001374
[pid  9579] select(4, [3], NULL, NULL, {2, 0} <unfinished ...>
[pid  9580] poll( <unfinished ...>
[pid  9579] <... select resumed> )      = 0 (Timeout)
[pid  9579] time(NULL)                  = 1087001376
[pid  9579] select(4, [3], NULL, NULL, {2, 0} <unfinished ...>
[pid  9580] <... poll resumed> [{fd=4, events=POLLIN}], 1, 2000) = 0
[pid  9580] getppid()                   = 9579
[pid  9580] wait4(-1, [WIFSIGNALED(s) && WTERMSIG(s) == SIGSEGV], WNOHANG|__WCLONE, NULL) = 9592
[pid  9580] munmap(0xbf400000, 2097152) = 0
[pid  9580] kill(9581, SIGSEGV)         = 0
[pid  9581] --- SIGSEGV (Segmentation fault) ---
[pid  9580] kill(9579, SIGSEGV)         = 0
[pid  9579] <... select resumed> )      = ? ERESTARTNOHAND (To be restarted)
[pid  9580] --- SIGRT_1 (Real-time signal 1) ---
[pid  9579] --- SIGSEGV (Segmentation fault) ---
sigreturn()                             = ? (mask now ~[TRAP KILL STOP])
_exit(0)                                = ?



More information about the DCC mailing list

Contact vjs@rhyolite.com by mail or use the form.