Sam Varshavchik wrote:
> On Thu, 10 Aug 2000, Sergey Nikolaev wrote:
>
> > When I try to login via sqwebmail, it says no such user or password.
> > I am running sqwebmail as a simple web user (I removed a setuid bit from
> > sqwebmail executable).
>
> That's your problem right there. sqwebmail must be setuid root. It's not
> installed that way by accident.
>
> > When I ran sqwebmail with setuid bit set and root ownership, I could not run it
> > at all. The error log file would say something like
> > cgi srcipt didn't produce a valid header. I ran truss on my ns-httpd to find out
> > that
> > sqwebmail failed because it could not find gdbm library even though
> > LD_LIBRARY_PATH is set properly in the start script.
>
> But since sqwebmail is executed by the http server, is LD_LIBRARY_PATH set
> in that environment?
As I mentioned, LD_LIBRARY_PATH is set in the start script that starts the http
server.
To make sure that LD_LIBRARY_PATH is in sqwebmail's environment I did some tests. Look
below
# ls -l /usr/local/lib
total 15418
drwxr-xr-x 3 bin bin 512 Jul 31 10:03 gcc-lib
-rw-r--r-- 1 root other 1432616 Aug 2 12:11 libcrypto.a
-rw-r--r-- 1 bin bin 48876 Mar 24 20:13 libgdbm.a
-rwxr-xr-x 1 bin bin 472 Mar 24 20:13 libgdbm.la
lrwxrwxrwx 1 root other 16 Aug 1 17:14 libgdbm.so -> libgdbm.so.2.0.0
lrwxrwxrwx 1 root other 16 Aug 1 17:14 libgdbm.so.2 -> libgdbm.so.2.0.0
-rwxr-xr-x 1 bin bin 30664 Mar 24 20:13 libgdbm.so.2.0.0
-rw-r--r-- 1 bin bin 328848 Feb 7 2000 libiberty.a
-rw-r--r-- 1 root other 135996 Aug 2 13:39 liblber.a
-rw-r--r-- 1 root other 646 Aug 2 13:39 liblber.la
-rw-r--r-- 1 root other 1222404 Aug 2 13:39 libldap.a
-rw-r--r-- 1 root other 646 Aug 2 13:39 libldap.la
-rw-r--r-- 1 root other 280644 Aug 2 12:11 libssl.a
-rw-r--r-- 1 bin bin 2114340 Feb 7 2000 libstdc++.a.2.10.0
-r-xr-xr-x 1 bin bin 2199324 Feb 7 2000 libstdc++.so.2.10.0
drwxr-xr-x 4 bin bin 512 Aug 1 17:55 perl5
# ls -l /opt/sqwebmail/cgi-bin/sqwebmail
-rwsr-xr-x 1 root other 247944 Aug 7 17:26 /opt/sqwebmail/cgi-bin/sqwebmail
# ps -ef|grep ns-http
alias 1293 1264 0 10:27:00 ? 0:18 ns-httpd -d
/var/netscape/server4/https-mail-gw1.atlassoft.com/config
root 1269 1268 0 10:25:46 ? 0:04 ns-httpd -d
/var/netscape/server4/https-admserv/config
root 1421 229 1 12:28:27 pts/0 0:00 grep ns-http
# truss -r 33,34,36,37 -w 33,34,36,37 -afel -p 1293
1293/1: psargs: ns-httpd -d
/var/netscape/server4/https-mail-gw1.atlassoft.com/c
1293/5: Received signal #14, SIGALRM, in lwp_sema_wait() [caught]
some stuff skipped ....
1293/3: poll(0xE9FD0AF0, 1, 5000) = 1
1293/3: accept(260, 0x004E42C0, 0xE9FD0BE4, 1) = 33
1293/3: fcntl(33, F_GETFL, 0x00000000) = 130
1293/3: fstat64(33, 0xE9FD09E8) = 0
1293/3: getsockopt(33, 65535, 8192, 0xE9FD0AE8, 0xE9FD0AE0, 4350025) = 0
1293/3: fstat64(33, 0xE9FD09E8) = 0
1293/3: getsockopt(33, 65535, 8192, 0xE9FD0AE8, 0xE9FD0AE4, 4350025) = 0
1293/3: setsockopt(33, 65535, 8192, 0xE9FD0AE8, 4, 4350025) = 0
1293/3: fcntl(33, F_SETFL, 0x00000082) = 0
1293/3: setsockopt(33, 65535, 8, 0xE9FD0B54, 4, 1) = 0
1293/3: lwp_sema_post(0xEE958E78) = 0
1293/4: lwp_sema_wait(0xEE958E78) = 0
1293/3: read(33, 0x004E22C0, 8192) = 377
1293/3: G E T / c g i - b i n / s q w e b m a i l H T T P / 1 . 0\r
1293/3: \n C o n n e c t i o n : K e e p - A l i v e\r\n U s e r - A g
1293/3: e n t : M o z i l l a / 4 . 7 3 [ e n ] ( X 1 1 ; U ;
1293/3: S u n O S 5 . 7 s u n 4 u )\r\n P r a g m a : n o - c a c
1293/3: h e\r\n H o s t : m a i l - g w 1 . a t l a s s o f t . c o m
1293/3: \r\n A c c e p t : i m a g e / g i f , i m a g e / x - x b i
1293/3: t m a p , i m a g e / j p e g , i m a g e / p j p e g , i
1293/3: m a g e / p n g , * / *\r\n A c c e p t - E n c o d i n g :
1293/3: g z i p\r\n A c c e p t - L a n g u a g e : e n\r\n A c c e p
1293/3: t - C h a r s e t : i s o - 8 8 5 9 - 1 , * , u t f - 8\r\n C
1293/3: o o k i e : S I T E S E R V E R = I D = 7 5 c 7 7 3 d 1 6 f 8
1293/3: 5 1 e 2 7 8 8 e d 6 0 a 6 a 8 e 3 5 d a 1\r\n\r\n
1293/4: accept(260, 0x004EC890, 0xE9FAEBE4, 1) Err#11 EAGAIN
1293/3: getsockname(33, 0x004E1AA8, 0xE9FD0824, 1) = 0
1293/3: stat("/opt/sqwebmail/cgi-bin/sqwebmail", 0xE9FD02A0) = 0
1293/3: stat("/opt/sqwebmail/cgi-bin/sqwebmail", 0x004E4E08) = 0
1293/3: getuid() = 100 [100]
1293/3: getgid() = 100 [100]
1293/3: write(34, 0x0061D490, 1096) = 1096
1293/3: \0\004 H\0\0\001\0\0\001\0\0\0\0\001\0 % / o p t / s q w e b m a
1293/3: i l / c g i - b i n / s q w e b m a i l\0\0\0\0\002\00E s q w e
1293/3: b m a i l\0\0\0\00403FF H T T P _ C O N N E C T I O N = K e e p
1293/3: - A l i v e\0 H T T P _ U S E R _ A G E N T = M o z i l l a / 4
1293/3: . 7 3 [ e n ] ( X 1 1 ; U ; S u n O S 5 . 7 s u n 4
1293/3: u )\0 H T T P _ P R A G M A = n o - c a c h e\0 H T T P _ H O S
1293/3: T = m a i l - g w 1 . a t l a s s o f t . c o m\0 H T T P _ A C
1293/3: C E P T = i m a g e / g i f , i m a g e / x - x b i t m a p ,
1293/3: i m a g e / j p e g , i m a g e / p j p e g , i m a g e /
1293/3: p n g , * / *\0 H T T P _ A C C E P T _ E N C O D I N G = g z
1293/3: i p\0 H T T P _ A C C E P T _ L A N G U A G E = e n\0 H T T P _
1293/3: A C C E P T _ C H A R S E T = i s o - 8 8 5 9 - 1 , * , u t f -
1293/3: 8\0 H T T P _ C O O K I E = S I T E S E R V E R = I D = 7 5 c 7
1293/3: 7 3 d 1 6 f 8 5 1 e 2 7 8 8 e d 6 0 a 6 a 8 e 3 5 d a 1\0 P A T
1293/3: H = / v a r / n e t s c a p e / s e r v e r 4 / b i n / h t t p
1293/3: s / b i n : / u s r / b i n : / u s r / s b i n : / u s r / c c
1293/3: s / b i n : / u s r / l o c a l / b i n : / v a r / q m a i l /
1293/3: b i n\0 T Z = U S / E a s t e r n\0 L D _ L I B R A R Y _ P A T
1293/3: H = / v a r / n e t s c a p e / s e r v e r 4 / b i n / h t t p
1293/3: s / j r e / l i b / s p a r c / c l a s s i c : / v a r / n e t
1293/3: s c a p e / s e r v e r 4 / b i n / h t t p s / j r e / l i b /
1293/3: s p a r c / n a t i v e _ t h r e a d s : / v a r / n e t s c a
1293/3: p e / s e r v e r 4 / b i n / h t t p s / j r e / l i b / s p a
1293/3: r c : / v a r / n e t s c a p e / s e r v e r 4 / b i n / h t t
1293/3: p s / l i b : / u s r / l o c a l / l i b\0 S E R V E R _ S O F
NOTE /usr/local/lib in LD_LIBRARY_PATH above
1293/3: T W A R E = i P l a n e t - W e b S e r v e r - E n t e r p r i
1293/3: s e / 4 . 1\0 S E R V E R _ P O R T = 8 0\0 S E R V E R _ N A M
1293/3: E = m a i l - g w 1 . a t l a s s o f t . c o m\0 S E R V E R _
1293/3: U R L = h t t p : / / m a i l - g w 1 . a t l a s s o f t . c o
1293/3: m\0 R E M O T E _ H O S T = 6 3 . 1 0 5 . 2 3 9 . 2 4 0\0 R E M
1293/3: O T E _ A D D R = 6 3 . 1 0 5 . 2 3 9 . 2 4 0\0 H T T P S = O F
1293/3: F\0 G A T E W A Y _ I N T E R F A C E = C G I / 1 . 1\0 S E R V
1293/3: E R _ P R O T O C O L = H T T P / 1 . 0\0 R E Q U E S T _ M E T
1293/3: H O D = G E T\0 S C R I P T _ N A M E = / c g i - b i n / s q w
1293/3: e b m a i l\0\0
1293/3: recvmsg(34, 0xE9FD0400, 0) = 20
1293/3: fcntl(36, F_GETFL, 0x00000000) = 2
1293/3: fstat64(36, 0xE9FD02E0) = 0
1293/3: fstat64(36, 0xE9FD02E0) = 0
1293/3: fcntl(36, F_SETFL, 0x00000082) = 0
1293/3: setsockopt(36, 65535, 8, 0xE9FD044C, 4, 1) Err#95 ENOTSOCK
1293/3: fcntl(37, F_GETFL, 0x00000000) = 2
1293/3: fstat64(37, 0xE9FD02E0) = 0
1293/3: fstat64(37, 0xE9FD02E0) = 0
1293/3: fcntl(37, F_SETFL, 0x00000082) = 0
1293/3: setsockopt(37, 65535, 8, 0xE9FD044C, 4, 1) Err#95 ENOTSOCK
1293/3: close(36) = 0
1293/3: read(37, 0x004E5AE0, 8192) = 80
1293/3: l d . s o . 1 : s q w e b m a i l : f a t a l : l i b g d
1293/3: b m . s o . 2 : o p e n f a i l e d : N o s u c h f i
1293/3: l e o r d i r e c t o r y\n
Note this above
1293/3: read(37, 0x004E5AE0, 8192) = 0
1293/3: time() = 965924918
1293/3: time() = 965924918
1293/3: getpid() = 1293 [1264]
1293/3: write(7, " [ 1 0 / A u g / 2 0 0 0".., 306) = 306
1293/3: close(37) = 0
1293/3: getpid() = 1293 [1264]
1293/3: kill(1423, SIGTERM) Err#3 ESRCH
1293/3: getpid() = 1293 [1264]
1293/3: kill(1423, SIG#0) Err#3 ESRCH
1293/3: getpid() = 1293 [1264]
1293/3: kill(1423, SIGKILL) Err#3 ESRCH
1293/3: write(33, 0x004E7C78, 164) = 164
1293/3: H T T P / 1 . 1 5 0 0 S e r v e r E r r o r\r\n S e r v e
1293/3: r : N e t s c a p e - E n t e r p r i s e / 4 . 1\r\n D a t e
1293/3: : T h u , 1 0 A u g 2 0 0 0 1 6 : 2 8 : 3 7 G M T\r
1293/3: \n C o n t e n t - l e n g t h : 3 0 5\r\n C o n t e n t - t y
1293/3: p e : t e x t / h t m l\r\n C o n n e c t i o n : c l o s e
1293/3: \r\n\r\n
1293/3: write(33, 0xE9FCF660, 305) = 305
1293/3: < H T M L > < H E A D > < T I T L E > S e r v e r E r r o r <
1293/3: / T I T L E > < / H E A D >\n < B O D Y > < H 1 > S e r v e r
1293/3: E r r o r < / H 1 >\n T h i s s e r v e r h a s e n c o u
1293/3: n t e r e d a n i n t e r n a l e r r o r w h i c h p
1293/3: r e v e n t s i t f r o m f u l f i l l i n g y o u r
1293/3: r e q u e s t . T h e m o s t l i k e l y c a u s e i
1293/3: s a m i s c o n f i g u r a t i o n . P l e a s e a s k
1293/3: t h e a d m i n i s t r a t o r t o l o o k f o r m
1293/3: e s s a g e s i n t h e s e r v e r ' s e r r o r l o
1293/3: g .\n < / B O D Y > < / H T M L >
1293/3: shutdown(33, 1, 1) = 0
1293/3: read(33, 0xE9FCF800, 4096) Err#11 EAGAIN
1293/3: poll(0xE9FCF6A0, 1, 1000) = 1
1293/3: read(33, 0xE9FCF800, 4096) = 0
1293/3: close(33) = 0
1293/3: brk(0x00657498) = 0
1293/3: brk(0x00659498) = 0
This proves that even though LD_LIBRARY_PATH IS in the environment of
sqwebmail it cann't find gdbm library. Strangely, if I remove the setuid to root, then
it finds
the gdbm library fine.
I even tried to run an cgi script like this
# cat /opt/sqwebmail/cgi-bin/test
#!/bin/sh
LD_LIBRARY_PATH=/usr/local/lib
export LD_LIBRARY_PATH
env LD_LIBRARY_PATH=/usr/local/lib /opt/sqwebmail/cgi-bin/sqwebmail $*
with the same result.
Any clues? It looks like when sqwebmail changes to root it is losing its environment.
Is it normal?
Sergey
>
>
> --
> Sam