diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2004-01-20 23:25:33 +0000 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2004-01-20 23:25:33 +0000 |
commit | 5c9659d3f6a8d29925bec34376f3e21f4a2deade (patch) | |
tree | 2fa6f33ac1d0940bc0602bd154a3b8286ac7682a /lib-src/emacsclient.c | |
parent | 9adcb5f2c83b756efe7c12ddaae03a9fcd678eea (diff) | |
download | emacs-5c9659d3f6a8d29925bec34376f3e21f4a2deade.tar.gz |
(main): Stop if socket name too long.
Only try su-fallback if the socket name was not explicit.
Check socket name length in su-fallback case as well.
Diffstat (limited to 'lib-src/emacsclient.c')
-rw-r--r-- | lib-src/emacsclient.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index 9f8eb04011a..49ebada768f 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c @@ -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. @@ -358,9 +358,10 @@ main (argc, argv) { int sock_status = 0; + int default_sock = !socket_name; int saved_errno; - if (! socket_name) + if (default_sock) { socket_name = alloca (system_name_length + 100); sprintf (socket_name, "/tmp/emacs%d-%s/server", @@ -370,13 +371,16 @@ main (argc, argv) 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); + { + fprintf (stderr, "%s: socket-name %s too long", + argv[0], socket_name); + exit (1); + } /* 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 @@ -393,8 +397,18 @@ main (argc, argv) 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; } |