cygcheck bug when listing services (Was Re: Parallel writes to a single FIFO do not queue, and deadlock cygwin)

Igor Pechtchanski pechtcha@cs.nyu.edu
Mon Dec 5 14:40:00 GMT 2005


On Sun, 4 Dec 2005, Mark Piper wrote:

> P.S.  Here is the full output from cygcheck
>
> $ /bin/cygcheck.exe -s
>
> Cygwin Configuration Diagnostics
> [snip]
>   1265k 2005/07/03 C:\cygwin\bin\cygwin1.dll
>     Cygwin DLL version info:
>         DLL version: 1.5.18
>         DLL epoch: 19
>         DLL bad signal mask: 19005
>         DLL old termios: 5
>         DLL malloc env: 28
>         API major: 0
>         API minor: 132
>         Shared data: 4
>         DLL identifier: cygwin1
>         Mount /usr/bin/cygrunsrv: Exactly one of --install, --remove,
> --start, --stop, --query, or --list is required
> Try `/usr/bin/cygrunsrv --help' for more information.
> registry: 2
>         Cygnus registry name: Cygnus Solutions
>         Cygwin registry name: Cygwin
>         Program options name: Program Options
>         Cygwin mount registry name: mounts v2
>         Cygdrive flags: cygdrive flags
>         Cygdrive prefix: cygdrive prefix
>         Cygdrive default prefix:
>         Build date: Sat Jul 2 20:30:04 EDT 2005
>         Shared id: cygwin1S4
>
>
> Service             : sshd
> Display name        : CYGWIN sshd
> Current State       : Running
> Controls Accepted   : Stop
> Command             : /usr/sbin/sshd -D

Note the cygrunsrv error message above.  I was able to reproduce it in
non-verbose mode.

Running cygcheck under strace shows that after listing all the available
services, it invokes "cygrunsrv --query grunsrv.exe --list", which results
in the above message.  I think this may be because the output of
"cygrunsrv --list" doesn't contain a trailing '\n', and so strtok gets
confused.  The following patch (against a slightly older cygcheck) fixes
it for me, but I haven't had the time to test it extensively:

Index: cygcheck.cc
===================================================================
RCS file: /cvs/src/src/winsup/utils/cygcheck.cc,v
retrieving revision 1.77
diff -u -p -r1.77 cygcheck.cc
--- cygcheck.cc 17 Aug 2005 00:52:43 -0000      1.77
+++ cygcheck.cc 5 Dec 2005 14:37:58 -0000
@@ -950,8 +950,8 @@ dump_sysinfo_services ()
   else
     {
       /* read the output of --list, and then run --query for each service */
-      size_t nchars = fread ((void *) buf, 1, sizeof (buf) - 1, f);
-      buf[nchars] = 0;
+      size_t nchars = fread ((void *) buf, 1, sizeof (buf) - 2, f);
+      buf[nchars] = buf[nchars+1] = 0;
       pclose (f);

       if (nchars > 0)

HTH,
	Igor
-- 
				http://cs.nyu.edu/~pechtcha/
      |\      _,,,---,,_		pechtcha@cs.nyu.edu
ZZZzz /,`.-'`'    -.  ;-;;,_		igor@watson.ibm.com
     |,4-  ) )-,_. ,\ (  `'-'		Igor Pechtchanski, Ph.D.
    '---''(_/--'  `-'\_) fL	a.k.a JaguaR-R-R-r-r-r-.-.-.  Meow!

If there's any real truth it's that the entire multidimensional infinity
of the Universe is almost certainly being run by a bunch of maniacs. /DA

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list