This is the mail archive of the cygwin-developers@cygwin.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]

AF_UNIX on win95?


Egor's magic cookie on win95 is failing for me... "accept from
unauthorized server". 

I'm attaching the current daemon state. I can't get past a failure on
connect, due to the above :[. I'm about to disable that cookie
completely in my sandbox, but I was wondering if
a) it's meant to work on 95, and 
b) the best way to go about debugging it. 

FWIW waitforsingleobject in fhandler_scoket::check_peer_secret_event is
returning 258.

Chris - if this is better on cygwin@ let me know, I suspect its
developer only fodder though).

Rob
? currentstate.patch
? cygserver.cc
? cygserver.cygwin.ChangeLog
? cygserver.diff
? cygserver.utils.ChangeLog
? cygserver_client.cc
? daemon.patch
? daemon2.patch
? fhandler_ums.cc
? host_dependent.cc
? mutexsviacriticalsections.patch
? pthchange
? umsdos_gen.h
? virtualquery.patch
? include/cygwin/cygserver.h
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/Makefile.in,v
retrieving revision 1.60
diff -u -p -r1.60 Makefile.in
--- Makefile.in	2001/09/11 20:01:00	1.60
+++ Makefile.in	2001/09/12 15:41:38
@@ -116,13 +116,13 @@ MALLOC_OFILES=@MALLOC_OFILES@
 
 DLL_IMPORTS:=$(w32api_lib)/libkernel32.a
 
-DLL_OFILES:=assert.o autoload.o cygheap.o dcrt0.o debug.o delqueue.o dir.o \
+DLL_OFILES:=assert.o autoload.o cygheap.o cygserver_client.o dcrt0.o debug.o delqueue.o dir.o \
 	dlfcn.o dll_init.o dtable.o environ.o  errno.o exceptions.o exec.o \
 	external.o fcntl.o fhandler.o fhandler_clipboard.o fhandler_console.o \
 	fhandler_dsp.o fhandler_floppy.o fhandler_mem.o fhandler_random.o \
 	fhandler_raw.o fhandler_serial.o fhandler_socket.o fhandler_tape.o \
 	fhandler_termios.o fhandler_tty.o fhandler_windows.o fhandler_zero.o \
-	fork.o glob.o grp.o heap.o init.o ioctl.o localtime.o malloc.o \
+	fork.o glob.o grp.o heap.o host_dependent.o init.o ioctl.o localtime.o malloc.o \
 	miscfuncs.o mmap.o net.o ntea.o passwd.o path.o pinfo.o pipe.o poll.o \
 	pthread.o regexp.o regerror.o regsub.o registry.o resource.o scandir.o \
 	sched.o sec_acl.o sec_helper.o security.o select.o shared.o shortcut.o signal.o sigproc.o \
@@ -144,14 +144,17 @@ install_host=@install_host@
 
 all: new-$(DLL_NAME) $(all_host) all_target
 
-all_target: $(LIBGMON_A) $(LIB_NAME) automode.o binmode.o textmode.o
+all_target: $(LIBGMON_A) $(LIB_NAME) automode.o binmode.o textmode.o cygserver.exe
 
 all_host: new-$(LIB_NAME) cygrun.exe
 
 force:
 
-install: install-libs install-headers $(install_host) $(install_target)
+install: install-bin install-libs install-headers $(install_host) $(install_target)
 
+install-bin: cygserver.exe
+	$(INSTALL_PROGRAM) cygserver.exe $(bindir)/cygserver.exe	
+
 install-libs: $(LIB_NAME)
 	$(INSTALL_DATA) new-$(DLL_NAME) $(bindir)/$(DLL_NAME); \
 	for i in $(LIB_NAME) $(GMON_START) $(LIBGMON_A) automode.o binmode.o textmode.o ; do \
@@ -213,11 +216,20 @@ winver_stamp: mkvers.sh include/cygwin/v
 	@echo "Making version.o and winver.o";\
 	$(SHELL) ${word 1,$^} ${word 2,$^} ${word 3,$^} $(WINDRES) && \
 	touch $@ && \
-	$(COMPILE_CXX) -o version.o version.cc
+	$(CXX) -o version.o version.cc
 
 cygrun.exe : cygrun.o $(LIB_NAME) $(w32api_lib)/libuser32.a \
 	     $(w32api_lib)/libshell32.a $(w32api_lib)/libkernel32.a
 	$(CC) -nodefaultlibs -o $@ $^
+
+cygserver.exe: cygserver.o host_dependent.o smallprint.o 
+	$(CXX) -o $@ $^
+#ifdef VERBOSE
+#	$(CXX) $(MINGW_CXXFLAGS) -o $@ ${wordlist 1,3,$^} -B$(mingw_build)/ $(MINGW_LDFLAGS)
+#else
+#	@echo $(CXX) -o $@ ${wordlist 1,3,$^} ${filter-out -B%, $(MINGW_CXXFLAGS) $(MINGW_LDFLAGS)};\
+#	$(CXX) $(MINGW_CXXFLAGS) -o $@ ${wordlist 1,3,$^} -B$(mingw_build)/ $(MINGW_LDFLAGS)
+#endif
 
 #
 
Index: dcrt0.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/dcrt0.cc,v
retrieving revision 1.108
diff -u -p -r1.108 dcrt0.cc
--- dcrt0.cc	2001/09/11 08:15:39	1.108
+++ dcrt0.cc	2001/09/12 15:41:41
@@ -35,6 +35,7 @@ details. */
 #include "cygwin_version.h"
 #include "dll_init.h"
 #include "host_dependent.h"
+#include "cygwin/cygserver.h"
 
 #define MAX_AT_FILE_LEVEL 10
 
@@ -155,94 +156,8 @@ do_global_ctors (void (**in_pfunc)(), in
     atexit (do_global_dtors);
 }
 
-/* remember the type of Win32 OS being run for future use. */
-os_type NO_COPY os_being_run;
-char NO_COPY osname[40];
-bool iswinnt;
-
-/* set_os_type: Set global variable os_being_run with type of Win32
-   operating system being run.  This information is used internally
-   to manage the inconsistency in Win32 API calls between Win32 OSes. */
-/* Cygwin internal */
-static void
-set_os_type ()
-{
-  OSVERSIONINFO os_version_info;
-  const char *os;
-
-  memset (&os_version_info, 0, sizeof os_version_info);
-  os_version_info.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
-  GetVersionEx (&os_version_info);
-
-  iswinnt = 0;
-  switch (os_version_info.dwPlatformId)
-    {
-      case VER_PLATFORM_WIN32_NT:
-	os_being_run = winNT;
-	os = "NT";
-	iswinnt = 1;
-	break;
-      case VER_PLATFORM_WIN32_WINDOWS:
-	if (os_version_info.dwMinorVersion == 0)
-	  {
-	    os_being_run = win95;
-	    os = "95";
-	  }
-	else if (os_version_info.dwMinorVersion < 90)
-	  {
-	    os_being_run = win98;
-	    os = "98";
-	  }
-	else /* os_version_info.dwMinorVersion == 90 */
-	  {
-	    os_being_run = winME;
-	    os = "ME";
-	  }
-	break;
-      default:
-	os_being_run = unknown;
-	os = "??";
-	break;
-    }
-  __small_sprintf (osname, "%s-%d.%d", os, os_version_info.dwMajorVersion,
-		   os_version_info.dwMinorVersion);
-}
-
 host_dependent_constants NO_COPY host_dependent;
 
-/* Constructor for host_dependent_constants.  */
-
-void
-host_dependent_constants::init ()
-{
-  extern DWORD chunksize;
-  /* fhandler_disk_file::lock needs a platform specific upper word
-     value for locking entire files.
-
-     fhandler_base::open requires host dependent file sharing
-     attributes.  */
-
-  switch (os_being_run)
-    {
-    case winNT:
-      win32_upper = 0xffffffff;
-      shared = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE;
-      break;
-
-    case winME:
-    case win98:
-    case win95:
-    case win32s:
-      win32_upper = 0x00000000;
-      shared = FILE_SHARE_READ | FILE_SHARE_WRITE;
-      chunksize = 32 * 1024 * 1024;
-      break;
-
-    default:
-      api_fatal ("unrecognized system type");
-    }
-}
-
 /*
  * Replaces -@file in the command line with the contents of the file.
  * There may be multiple -@file's in a single command line
@@ -777,6 +692,8 @@ dll_crt0_1 ()
 
   /* Initialize signal/subprocess handling. */
   sigproc_init ();
+
+  cygserver_init ();
 
   /* Connect to tty. */
   tty_init ();
Index: fhandler.h
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/fhandler.h,v
retrieving revision 1.76
diff -u -p -r1.76 fhandler.h
--- fhandler.h	2001/09/11 20:01:00	1.76
+++ fhandler.h	2001/09/12 15:41:43
@@ -832,6 +832,8 @@ public:
   off_t lseek (off_t, int) { return 0; }
   select_record *select_read (select_record *s);
   int ready_for_read (int fd, DWORD howlong, int ignra);
+
+  int cygserver_attach_tty (HANDLE*, HANDLE*);
 };
 
 class fhandler_pty_master: public fhandler_tty_common
Index: fhandler_socket.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/fhandler_socket.cc,v
retrieving revision 1.21
diff -u -p -r1.21 fhandler_socket.cc
--- fhandler_socket.cc	2001/09/07 21:32:04	1.21
+++ fhandler_socket.cc	2001/09/12 15:41:44
@@ -148,7 +148,7 @@ fhandler_socket::check_peer_secret_event
   if (ev)
     {
       DWORD rc = WaitForSingleObject (ev, 10000);
-      debug_printf ("WFSO rc=%d", rc);
+      debug_printf ("WFSO rc=%d;", rc);
       CloseHandle (ev);
       return (rc == WAIT_OBJECT_0 ? 1 : 0 );
     }
Index: fhandler_tty.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/fhandler_tty.cc,v
retrieving revision 1.47
diff -u -p -r1.47 fhandler_tty.cc
--- fhandler_tty.cc	2001/09/07 21:32:04	1.47
+++ fhandler_tty.cc	2001/09/12 15:41:46
@@ -25,6 +25,7 @@ details. */
 #include "pinfo.h"
 #include "cygheap.h"
 #include "shared_info.h"
+#include "cygwin/cygserver.h"
 
 /* Tty master stuff */
 
@@ -523,42 +524,74 @@ fhandler_tty_slave::open (const char *, 
       return 0;
     }
 
-  HANDLE tty_owner = OpenProcess (PROCESS_DUP_HANDLE, FALSE,
-				     get_ttyp ()->master_pid);
-  if (tty_owner == NULL)
-    {
-      termios_printf ("can't open tty (%d) handle process %d",
-		      ttynum, get_ttyp ()->master_pid);
-      __seterrno ();
-      return 0;
-    }
+  HANDLE from_master_local, to_master_local;
 
-  HANDLE nh;
-  if (!DuplicateHandle (tty_owner, get_ttyp ()->from_master, hMainProc, &nh, 0, TRUE,
-			DUPLICATE_SAME_ACCESS))
+  if (!cygserver_running || !cygserver_attach_tty ( &from_master_local, &to_master_local))
     {
-      termios_printf ("can't duplicate input, %E");
-      __seterrno ();
-      return 0;
-    }
-  set_io_handle (nh);
-  ProtectHandle1 (nh, from_pty);
-  termios_printf ("duplicated from_master %p->%p from tty_owner %p",
-		  get_ttyp ()->from_master, nh, tty_owner);
-  if (!DuplicateHandle (tty_owner, get_ttyp ()->to_master, hMainProc, &nh, 0, TRUE,
-			DUPLICATE_SAME_ACCESS))
-    {
-      termios_printf ("can't duplicate output, %E");
-      __seterrno ();
-      return 0;
-    }
-  set_output_handle (nh);
-  ProtectHandle1 (nh, to_pty);
-  CloseHandle (tty_owner);
+      termios_printf ("cannot dup handles via server. using old method.");
 
+      HANDLE tty_owner = OpenProcess (PROCESS_DUP_HANDLE, FALSE,
+				         get_ttyp ()->master_pid);
+      if (tty_owner == NULL)
+        {
+          termios_printf ("can't open tty (%d) handle process %d",
+	 	          ttynum, get_ttyp ()->master_pid);
+          __seterrno ();
+          return 0;
+        }
+
+      if (!DuplicateHandle (tty_owner, get_ttyp ()->from_master, 
+			  hMainProc, &from_master_local, 0, TRUE,
+			    DUPLICATE_SAME_ACCESS))
+        {
+          termios_printf ("can't duplicate input, %E");
+          __seterrno ();
+          return 0;
+        }
+      termios_printf ("duplicated from_master %p->%p from tty_owner %p",
+		     get_ttyp ()->from_master, from_master_local, tty_owner);
+
+      if (!DuplicateHandle (tty_owner, get_ttyp ()->to_master, 
+			  hMainProc, &to_master_local, 0, TRUE,
+			  DUPLICATE_SAME_ACCESS))
+        {
+          termios_printf ("can't duplicate output, %E");
+          __seterrno ();
+          return 0;
+        }
+      termios_printf ("duplicated to_master %p->%p from tty_owner %p",
+      		     get_ttyp ()->to_master, to_master_local, tty_owner);
+      CloseHandle (tty_owner);
+    }
+
+  set_io_handle (from_master_local);
+  ProtectHandle1 (from_master_local, from_pty);
+  set_output_handle (to_master_local);
+  ProtectHandle1 (to_master_local, to_pty);
+
   set_open_status ();
   termios_printf ("tty%d opened", ttynum);
 
+  return 1;
+}
+
+int
+fhandler_tty_slave::cygserver_attach_tty (HANDLE* from_master_ptr,
+                                        HANDLE* to_master_ptr)
+{
+  if (!from_master_ptr || !to_master_ptr)
+    return 0;
+
+  struct request_attach_tty req;
+  INIT_REQUEST (req, CYGSERVER_REQUEST_ATTACH_TTY);
+  req.pid = GetCurrentProcessId ();
+  req.master_pid = get_ttyp ()->master_pid;
+  req.from_master = get_ttyp ()->from_master;
+  req.to_master = get_ttyp ()->to_master;
+  if (cygserver_request ((struct request_header*) &req) != 0)
+    return 0;
+  *from_master_ptr = req.from_master;
+  *to_master_ptr = req.to_master;
   return 1;
 }
 
Index: fork.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/fork.cc,v
retrieving revision 1.62
diff -u -p -r1.62 fork.cc
--- fork.cc	2001/09/11 08:15:39	1.62
+++ fork.cc	2001/09/12 15:41:48
@@ -35,7 +35,7 @@ static int npid_max;
 static pid_t fork_pids[100];
 #endif
 
-DWORD NO_COPY chunksize = 0;
+extern DWORD chunksize;
 /* Timeout to wait for child to start, parent to init child, etc.  */
 /* FIXME: Once things stabilize, bump up to a few minutes.  */
 #define FORK_WAIT_TIMEOUT (300 * 1000)     /* 300 seconds */
Index: host_dependent.h
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/host_dependent.h,v
retrieving revision 1.2
diff -u -p -r1.2 host_dependent.h
--- host_dependent.h	2001/06/24 22:26:51	1.2
+++ host_dependent.h	2001/09/12 15:41:48
@@ -28,3 +28,4 @@ class host_dependent_constants
 };
 
 extern host_dependent_constants host_dependent;
+extern void set_os_type();
Index: tty.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/tty.cc,v
retrieving revision 1.28
diff -u -p -r1.28 tty.cc
--- tty.cc	2001/09/06 04:41:59	1.28
+++ tty.cc	2001/09/12 15:41:49
@@ -23,6 +23,7 @@ details. */
 #include "sync.h"
 #include "sigproc.h"
 #include "pinfo.h"
+#include "cygwin/cygserver.h"
 #include "shared_info.h"
 
 extern fhandler_tty_master *tty_master;
@@ -393,6 +394,7 @@ tty::common_init (fhandler_pty_master *p
   /* Allow the others to open us (for handle duplication) */
 
   if ((iswinnt) &&
+      !cygserver_running &&
       (SetKernelObjectSecurity (hMainProc, DACL_SECURITY_INFORMATION,
 			       get_null_sd ()) == FALSE))
     small_printf ("Can't set process security, %E");
Index: winsup.h
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/winsup.h,v
retrieving revision 1.68
diff -u -p -r1.68 winsup.h
--- winsup.h	2001/09/09 16:52:37	1.68
+++ winsup.h	2001/09/12 15:41:50
@@ -72,6 +72,8 @@ extern bool iswinnt;
 enum codepage_type {ansi_cp, oem_cp};
 extern codepage_type current_codepage;
 
+extern int cygserver_running;
+
 /* Used to check if Cygwin DLL is dynamically loaded. */
 extern int dynamically_loaded;
 

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