diff lib-src/emacsclient.c @ 83019:82c3b4da43ca

Merged in changes from CVS HEAD Patches applied: * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-33 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-34 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-35 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-36 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-37 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-38 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-39 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-40 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-41 Make fringe-drawing stuff compile without a window-system * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-42 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-43 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-44 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-45 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-46 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-47 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-48 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-49 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-50 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-59
author Karoly Lorentey <lorentey@elte.hu>
date Thu, 22 Jan 2004 15:37:19 +0000
parents 4aa172a45af1 8c55b1b400d5
children c66ebcc29777
line wrap: on
line diff
--- a/lib-src/emacsclient.c	Thu Jan 22 02:36:55 2004 +0000
+++ b/lib-src/emacsclient.c	Thu Jan 22 15:37:19 2004 +0000
@@ -1,5 +1,5 @@
 /* Client process that communicates with GNU Emacs acting as server.
-   Copyright (C) 1986, 1987, 1994, 1999, 2000, 2001, 2003
+   Copyright (C) 1986, 1987, 1994, 1999, 2000, 2001, 2003, 2004
    Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
@@ -438,9 +438,10 @@
 
   {
     int sock_status = 0;
+    int default_sock = !socket_name;
     int saved_errno = 0;
     
-    if (! socket_name)
+    if (default_sock)
       {
 	socket_name = alloca (system_name_length + 100);
 	sprintf (socket_name, "/tmp/emacs%d-%s/server",
@@ -459,7 +460,7 @@
     /* See if the socket exists, and if it's owned by us. */
     sock_status = socket_status (server.sun_path);
     saved_errno = errno;
-    if (sock_status)
+    if (sock_status && default_sock)
       {
 	/* Failing that, see if LOGNAME or USER exist and differ from
 	   our euid.  If so, look for a socket based on the UID
@@ -476,8 +477,18 @@
 	    if (pw && (pw->pw_uid != geteuid ()))
 	      {
 		/* We're running under su, apparently. */
-		sprintf (server.sun_path, "/tmp/emacs%d-%s/server",
+		sprintf (socket_name, "/tmp/emacs%d-%s/server",
 			 (int) pw->pw_uid, system_name);
+
+		if (strlen (socket_name) < sizeof (server.sun_path))
+		  strcpy (server.sun_path, socket_name);
+		else
+		  {
+		    fprintf (stderr, "%s: socket-name %s too long",
+			     argv[0], socket_name);
+		    exit (1);
+		  }
+
 		sock_status = socket_status (server.sun_path);
                 saved_errno = errno;
 	      }