Here's a patch to allow multiple '-nolisten' options on the command
line. To disable both IPv4 and IPv6 transports, one needs to say:

      X -nolisten tcp -nolisten inet6 

I'll add a documentation patch too later. 

Index: xc/programs/Xserver/include/os.h
===================================================================
RCS file: /cvs/xf86/xc/programs/Xserver/include/os.h,v
retrieving revision 3.45
diff -u -r3.45 os.h
--- xc/programs/Xserver/include/os.h    4 Jul 2003 16:24:29 -0000       3.45
+++ xc/programs/Xserver/include/os.h    23 Jul 2003 20:34:47 -0000
@@ -480,5 +480,12 @@
 extern void AbortDDX(void);
 extern void ddxGiveUp(void);
 extern int TimeSinceLastInputEvent(void);
+
+typedef struct NoListenList {
+       char *name;
+       struct NoListenList *next;
+} *NoListenListPtr;
+
+extern NoListenListPtr noListenList;
 
 #endif /* OS_H */
Index: xc/programs/Xserver/os/connection.c
===================================================================
RCS file: /cvs/xf86/xc/programs/Xserver/os/connection.c,v
retrieving revision 3.61
diff -u -r3.61 connection.c
--- xc/programs/Xserver/os/connection.c 16 Jul 2003 01:39:00 -0000      3.61
+++ xc/programs/Xserver/os/connection.c 23 Jul 2003 20:34:47 -0000
@@ -186,7 +186,7 @@
 
 Bool RunFromSmartParent;       /* send SIGUSR1 to parent process */
 Bool PartialNetwork;           /* continue even if unable to bind all addrs */
-char *protNoListen;             /* don't listen on this protocol */
+NoListenListPtr noListenList;  /* don't listen on these protocols */
 static Pid_t ParentProcess;
 #ifdef __UNIXOS2__
 Pid_t GetPPID(Pid_t pid);
@@ -309,6 +309,7 @@
     int                i;
     int                partial;
     char       port[20];
+    NoListenListPtr p;
 
     FD_ZERO(&AllSockets);
     FD_ZERO(&AllClients);
@@ -323,13 +324,13 @@
 
     FD_ZERO (&WellKnownConnections);
 
-    sprintf (port, "%d", atoi (display));
+    snprintf (port, sizeof(port), "%d", atoi (display));
 
-    if (protNoListen)
-        if (_XSERVTransNoListen(protNoListen))
-        {
-           FatalError ("Failed to disable listen for %s", protNoListen);
-       }
+    for (p = noListenList; p != NULL; p = p->next) {
+           if (_XSERVTransNoListen(p->name)) {
+                   FatalError("Failed to disable listen for %s", p->name);
+           }
+    }
     
     if ((_XSERVTransMakeAllCOTSServerListeners (port, &partial,
        &ListenTransCount, &ListenTransConns) >= 0) &&
Index: xc/programs/Xserver/os/utils.c
===================================================================
RCS file: /cvs/xf86/xc/programs/Xserver/os/utils.c,v
retrieving revision 3.89
diff -u -r3.89 utils.c
--- xc/programs/Xserver/os/utils.c      9 Jul 2003 15:27:35 -0000       3.89
+++ xc/programs/Xserver/os/utils.c      23 Jul 2003 20:34:47 -0000
@@ -602,6 +602,7 @@
 {
     int i, skip;
 
+    noListenList = NULL;
     defaultKeyboardControl.autoRepeat = TRUE;
 
 #ifdef PART_NET
@@ -816,8 +823,13 @@
 #endif
        else if ( strcmp( argv[i], "-nolisten") == 0)
        {
-            if(++i < argc)
-               protNoListen = argv[i];
+           if(++i < argc) {
+               NoListenListPtr p = 
+                   (NoListenListPtr)xalloc(sizeof(struct NoListenList));
+               p->name = argv[i];
+               p->next = noListenList;
+               noListenList = p;
+           }
            else
                UseMsg();
        }


                                        Matthieu
_______________________________________________
Devel mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/devel

Reply via email to