This is the mail archive of the cygwin@sources.redhat.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

patch for inetutils


I have produced a patch that fixes some of the known problems with inetutils
on cygwin:

1) rlogin - does not terminate cleanly
This is because of an error in setting signals - specifically catch_client
does not get installed as the handler for SIGCHLD so that the parent process
does not tidy up correctly when its child terminates. My fix is a very minor
change to libinetutils/setsig.c

2) rshd - must wait 10 minutes between connections from same client
This is caused by the abnormally long TIME_WAIT state employed by winsock
sockets. My fix is to repeatedly call the pair rresvport(..); connect(..)
with a decreasing port, until either the connect succeeds or we run out of
valid ports.

3) rshd - always segvs without execing the command (on my system at least).
Occurs when syslog is called to log the request. The variable "hostname"
appears to be a "wild" pointer where it is passed to syslog just before the
call to execl. My fix is just to remove the syslog call - not ideal but at
least not I can rsh onto my NT box again!

4) rsh - cannot invoke it as rsh.exe
I have modified the test of argv[0] in rsh.c so that either rsh or rsh.exe
are accepted as being not host names.


The patch follows:

diff -Naur inetutils-1.3.2/libinetutils/setsig.c
inetutils-1.3.2-patched/libinetutils/setsig.c
--- inetutils-1.3.2/libinetutils/setsig.c Wed Jul  5 11:44:40 2000
+++ inetutils-1.3.2-patched/libinetutils/setsig.c Wed Sep 27 09:27:38 2000
@@ -42,7 +42,7 @@
   sa.sa_flags = SA_RESTART;
 #endif
   sa.sa_handler = handler;
-  sigaction (sig, &sa, &sa);
+  sigaction (sig, &sa, NULL);
   return sa.sa_handler;
 #else /* !HAVE_SIGACTION */
 #ifdef HAVE_SIGVEC
diff -Naur inetutils-1.3.2/rsh/rsh.c inetutils-1.3.2-patched/rsh/rsh.c
--- inetutils-1.3.2/rsh/rsh.c Thu Jul  6 12:25:40 2000
+++ inetutils-1.3.2-patched/rsh/rsh.c Wed Sep 27 09:38:07 2000
@@ -218,10 +218,10 @@
   ++p;
  else
   p = argv[0];
- if (strcmp(p, "rsh"))
-  host = p;
+ if (!strcmp(p, "rsh") || !strcmp(p, "rsh.exe"))
+   asrsh = 1;
  else
-  asrsh = 1;
+  host = p;

  /* handle "rsh host flags" */
  if (!host && argc > 2 && argv[1][0] != '-') {
diff -Naur inetutils-1.3.2/rshd/rshd.c inetutils-1.3.2-patched/rshd/rshd.c
--- inetutils-1.3.2/rshd/rshd.c Wed Jul  5 11:44:42 2000
+++ inetutils-1.3.2-patched/rshd/rshd.c Wed Sep 27 10:13:52 2000
@@ -333,23 +333,51 @@
  (void) alarm(0);
  if (port != 0) {
   int lport = IPPORT_RESERVED - 1;
+
+#ifndef __CYGWIN__
   s = rresvport(&lport);
   if (s < 0) {
    syslog(LOG_ERR, "can't get stderr port: %m");
    exit(1);
   }
+#endif /* ! __CYGWIN__ */
+
 #ifdef KERBEROS
   if (!use_kerberos)
 #endif
    if (port >= IPPORT_RESERVED) {
-    syslog(LOG_ERR, "2nd port not reserved\n");
+    syslog(LOG_ERR, "2nd port not reserved");
     exit(1);
    }
   fromp->sin_port = htons(port);
+
+#ifdef __CYGWIN__
+                while(lport >= 512) {
+                   if ((s = rresvport(&lport)) >= 0) {
+        if (connect(s, (struct sockaddr *)fromp, sizeof (*fromp)) >= 0) {
+           break;
+        }
+        else {
+           close(s);
+    s = -1;
+    --lport;
+        }
+     }
+     else {
+   syslog(LOG_ERR, "can't get stderr port: %m");
+   exit(1);
+     }
+  }
+  if (s < 0) {
+   syslog(LOG_INFO, "connect second port %d: %m", port);
+   exit(1);
+  }
+#else
   if (connect(s, (struct sockaddr *)fromp, sizeof (*fromp)) < 0) {
    syslog(LOG_INFO, "connect second port %d: %m", port);
    exit(1);
   }
+#endif /* __CYGWIN */
  }

 #ifdef KERBEROS
@@ -778,8 +806,10 @@
    hostname, locuser, cmdbuf);
   else
 #endif
+#ifndef __CYGWIN__
       syslog(LOG_INFO|LOG_AUTH, "%s@%s as %s: cmd='%.80s'",
    remuser, hostname, locuser, cmdbuf);
+#endif /* !__CYGWIN__ */
  }
  execl(pwd->pw_shell, cp, "-c", cmdbuf, 0);
  perror(pwd->pw_shell);



--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe@sourceware.cygnus.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]