* emacs client/server mode hardcodes /tmp path @ 2008-03-06 15:43 Diego 'Flameeyes' Pettenò 2008-03-06 17:48 ` Stefan Monnier 0 siblings, 1 reply; 13+ messages in thread From: Diego 'Flameeyes' Pettenò @ 2008-03-06 15:43 UTC (permalink / raw) To: emacs-devel [-- Attachment #1: Type: text/plain, Size: 535 bytes --] Hi, I'm working to make use of pam_mktemp in my systems by default, pam_mktemp is a PAM module that creates a private temporary directory per-user inside /tmp and sets TMP and TMPDIR accondingly. Unfortunately emacs (server.el) and emacsclient hardcodes the path for the socket to use to /tmp (/tmp/emacs${userid}/${servername}), rather than checking TMPDIR (as [1] tells to do, by the way). [1] http://www.gnu.org/prep/standards/standards.html#Semantics -- Diego "Flameeyes" Pettenò http://blog.flameeyes.eu/ [-- Attachment #2: Type: application/pgp-signature, Size: 188 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: emacs client/server mode hardcodes /tmp path 2008-03-06 15:43 emacs client/server mode hardcodes /tmp path Diego 'Flameeyes' Pettenò @ 2008-03-06 17:48 ` Stefan Monnier 2008-03-06 17:58 ` Diego 'Flameeyes' Pettenò 2008-10-28 13:38 ` Ulrich Mueller 0 siblings, 2 replies; 13+ messages in thread From: Stefan Monnier @ 2008-03-06 17:48 UTC (permalink / raw) To: Diego 'Flameeyes' Petten\x1fFFFFFF; +Cc: emacs-devel > I'm working to make use of pam_mktemp in my systems by default, > pam_mktemp is a PAM module that creates a private temporary directory > per-user inside /tmp and sets TMP and TMPDIR accondingly. Indeed. I'm not sure what should be done here. The reason for the hard-coded /tmp is that the emacsclient process and the emacs server process may be executed from different contexts (different login sessions for example), so it's not clear that they would use the same $TMPDIR setting. What do others think? Should we take the risk and obey $TMPDIR? Stefan ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: emacs client/server mode hardcodes /tmp path 2008-03-06 17:48 ` Stefan Monnier @ 2008-03-06 17:58 ` Diego 'Flameeyes' Pettenò 2008-10-28 13:38 ` Ulrich Mueller 1 sibling, 0 replies; 13+ messages in thread From: Diego 'Flameeyes' Pettenò @ 2008-03-06 17:58 UTC (permalink / raw) To: emacs-devel [-- Attachment #1: Type: text/plain, Size: 562 bytes --] Stefan Monnier <monnier@iro.umontreal.ca> writes: > Indeed. I'm not sure what should be done here. The reason for the > hard-coded /tmp is that the emacsclient process and the emacs server > process may be executed from different contexts (different login > sessions for example), so it's not clear that they would use the same > $TMPDIR setting. If one wants to open a client for a different server it might either use the --socket-name option or change TMPDIR for emacsclient itself. -- Diego "Flameeyes" Pettenò http://blog.flameeyes.eu/ [-- Attachment #2: Type: application/pgp-signature, Size: 188 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: emacs client/server mode hardcodes /tmp path 2008-03-06 17:48 ` Stefan Monnier 2008-03-06 17:58 ` Diego 'Flameeyes' Pettenò @ 2008-10-28 13:38 ` Ulrich Mueller 2008-10-28 14:29 ` Stefan Monnier 1 sibling, 1 reply; 13+ messages in thread From: Ulrich Mueller @ 2008-10-28 13:38 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs, Diego Petteno, emacs-devel >>>>> On Thu, 06 Mar 2008, Stefan Monnier wrote: >> I'm working to make use of pam_mktemp in my systems by default, >> pam_mktemp is a PAM module that creates a private temporary >> directory per-user inside /tmp and sets TMP and TMPDIR accondingly. > Indeed. I'm not sure what should be done here. The reason for the > hard-coded /tmp is that the emacsclient process and the emacs server > process may be executed from different contexts (different login > sessions for example), so it's not clear that they would use the > same $TMPDIR setting. > What do others think? Should we take the risk and obey $TMPDIR? Hi, coming back to this old subject, has any decision been taken on this? GNU Coding Standards [1] explicitely say: # If you make temporary files, check the TMPDIR environment variable; # if that variable is defined, use the specified directory instead of # /tmp. Ulrich [1] http://www.gnu.org/prep/standards/standards.html#Semantics ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: emacs client/server mode hardcodes /tmp path 2008-10-28 13:38 ` Ulrich Mueller @ 2008-10-28 14:29 ` Stefan Monnier 2008-10-29 7:51 ` Ulrich Mueller 0 siblings, 1 reply; 13+ messages in thread From: Stefan Monnier @ 2008-10-28 14:29 UTC (permalink / raw) To: Ulrich Mueller; +Cc: emacs, Diego Petteno, emacs-devel >>> I'm working to make use of pam_mktemp in my systems by default, >>> pam_mktemp is a PAM module that creates a private temporary >>> directory per-user inside /tmp and sets TMP and TMPDIR accondingly. >> Indeed. I'm not sure what should be done here. The reason for the >> hard-coded /tmp is that the emacsclient process and the emacs server >> process may be executed from different contexts (different login >> sessions for example), so it's not clear that they would use the >> same $TMPDIR setting. >> What do others think? Should we take the risk and obey $TMPDIR? Yes, I think we should obey TMPDIR (of course consistently between emacsclient.c and server.el). Stefan ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: emacs client/server mode hardcodes /tmp path 2008-10-28 14:29 ` Stefan Monnier @ 2008-10-29 7:51 ` Ulrich Mueller 2008-10-29 9:15 ` Juanma Barranquero 0 siblings, 1 reply; 13+ messages in thread From: Ulrich Mueller @ 2008-10-29 7:51 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs, Ulrich Mueller, Diego Petteno, emacs-devel >>>>> On Tue, 28 Oct 2008, Stefan Monnier wrote: > Yes, I think we should obey TMPDIR (of course consistently between > emacsclient.c and server.el). A patch is included below. Ulrich 2008-10-29 Ulrich Mueller <ulm@gentoo.org> * emacsclient.c (set_local_socket): Use TMPDIR (default /tmp) instead of hardcoded /tmp. 2008-10-29 Ulrich Mueller <ulm@gentoo.org> * server.el (server-socket-dir): Use TMPDIR (default /tmp) instead of hardcoded /tmp. --- lib-src/emacsclient.c 13 Oct 2008 02:32:51 -0000 1.133 +++ lib-src/emacsclient.c 29 Oct 2008 07:42:54 -0000 @@ -1128,6 +1128,7 @@ int default_sock = !socket_name; int saved_errno = 0; char *server_name = "server"; + char *tmpdir; if (socket_name && !index (socket_name, '/') && !index (socket_name, '\\')) { /* socket_name is a file name component. */ @@ -1138,9 +1139,12 @@ if (default_sock) { - socket_name = alloca (100 + strlen (server_name)); - sprintf (socket_name, "/tmp/emacs%d/%s", - (int) geteuid (), server_name); + tmpdir = egetenv ("TMPDIR"); + if (!tmpdir) + tmpdir = "/tmp"; + socket_name = alloca (96 + strlen (tmpdir) + strlen (server_name)); + sprintf (socket_name, "%s/emacs%d/%s", + tmpdir, (int) geteuid (), server_name); } if (strlen (socket_name) < sizeof (server.sun_path)) @@ -1174,9 +1178,10 @@ if (pw && (pw->pw_uid != geteuid ())) { /* We're running under su, apparently. */ - socket_name = alloca (100 + strlen (server_name)); - sprintf (socket_name, "/tmp/emacs%d/%s", - (int) pw->pw_uid, server_name); + socket_name = alloca (96 + strlen (tmpdir) + + strlen (server_name)); + sprintf (socket_name, "%s/emacs%d/%s", + tmpdir, (int) pw->pw_uid, server_name); if (strlen (socket_name) < sizeof (server.sun_path)) strcpy (server.sun_path, socket_name); --- lisp/server.el 24 Oct 2008 09:39:32 -0000 1.169 +++ lisp/server.el 29 Oct 2008 07:42:56 -0000 @@ -202,7 +202,8 @@ (defvar server-name "server") -(defvar server-socket-dir (format "/tmp/emacs%d" (user-uid)) +(defvar server-socket-dir + (format "%s/emacs%d" (or (getenv "TMPDIR") "/tmp") (user-uid)) "The directory in which to place the server socket.") (defun server-clients-with (property value) ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: emacs client/server mode hardcodes /tmp path 2008-10-29 7:51 ` Ulrich Mueller @ 2008-10-29 9:15 ` Juanma Barranquero 2008-10-29 9:28 ` Ulrich Mueller 0 siblings, 1 reply; 13+ messages in thread From: Juanma Barranquero @ 2008-10-29 9:15 UTC (permalink / raw) To: Ulrich Mueller; +Cc: Diego Petteno, emacs-devel, Stefan Monnier, emacs On Wed, Oct 29, 2008 at 08:51, Ulrich Mueller <ulm@gentoo.org> wrote: > - socket_name = alloca (100 + strlen (server_name)); > - sprintf (socket_name, "/tmp/emacs%d/%s", > - (int) geteuid (), server_name); > + tmpdir = egetenv ("TMPDIR"); > + if (!tmpdir) > + tmpdir = "/tmp"; > + socket_name = alloca (96 + strlen (tmpdir) + strlen (server_name)); > + sprintf (socket_name, "%s/emacs%d/%s", > + tmpdir, (int) geteuid (), server_name); There was neither much point in allocating an extra 100 bytes, nor in allocating 96 now. The formatted uid is not going to be 88 characters long. Juanma ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: emacs client/server mode hardcodes /tmp path 2008-10-29 9:15 ` Juanma Barranquero @ 2008-10-29 9:28 ` Ulrich Mueller 2008-10-29 9:37 ` Juanma Barranquero 0 siblings, 1 reply; 13+ messages in thread From: Ulrich Mueller @ 2008-10-29 9:28 UTC (permalink / raw) To: Juanma Barranquero; +Cc: Diego Petteno, emacs-devel, Stefan Monnier, emacs >>>>> On Wed, 29 Oct 2008, Juanma Barranquero wrote: >> + socket_name = alloca (96 + strlen (tmpdir) + strlen (server_name)); >> + sprintf (socket_name, "%s/emacs%d/%s", >> + tmpdir, (int) geteuid (), server_name); > There was neither much point in allocating an extra 100 bytes, nor > in allocating 96 now. The formatted uid is not going to be 88 > characters long. You really want to optimise this? ;-) If we assume that uid_t will never have more than 64 bits, then a value of 28 should be sufficient for the constant. Ulrich (voting for 42) ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: emacs client/server mode hardcodes /tmp path 2008-10-29 9:28 ` Ulrich Mueller @ 2008-10-29 9:37 ` Juanma Barranquero 2008-10-29 14:41 ` Stefan Monnier 0 siblings, 1 reply; 13+ messages in thread From: Juanma Barranquero @ 2008-10-29 9:37 UTC (permalink / raw) To: Ulrich Mueller; +Cc: Diego Petteno, emacs-devel, Stefan Monnier, emacs On Wed, Oct 29, 2008 at 10:28, Ulrich Mueller <ulm@gentoo.org> wrote: > You really want to optimise this? ;-) It's a psychological optimization. Every time I see that 100 I look at the code to see what I'm missing. 96 would be even worse, because it does look meaningful. > Ulrich (voting for 42) 42 is fine :-) Juanma ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: emacs client/server mode hardcodes /tmp path 2008-10-29 9:37 ` Juanma Barranquero @ 2008-10-29 14:41 ` Stefan Monnier 2008-10-29 14:55 ` Juanma Barranquero 0 siblings, 1 reply; 13+ messages in thread From: Stefan Monnier @ 2008-10-29 14:41 UTC (permalink / raw) To: Juanma Barranquero; +Cc: Ulrich Mueller, Diego Petteno, emacs-devel, emacs >> You really want to optimise this? ;-) > It's a psychological optimization. Every time I see that 100 I look at > the code to see what I'm missing. 96 would be even worse, because it > does look meaningful. >> Ulrich (voting for 42) > 42 is fine :-) Please just leave it as 100. The rest of the code uses 100 everywhere. Otherwise, define a macro (which you can set to 42 if you really insist) and use it everywhere. Stefan ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: emacs client/server mode hardcodes /tmp path 2008-10-29 14:41 ` Stefan Monnier @ 2008-10-29 14:55 ` Juanma Barranquero 2008-10-29 15:03 ` Stefan Monnier 0 siblings, 1 reply; 13+ messages in thread From: Juanma Barranquero @ 2008-10-29 14:55 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel On Wed, Oct 29, 2008 at 15:41, Stefan Monnier <monnier@iro.umontreal.ca> wrote: > Please just leave it as 100. The rest of the code uses 100 everywhere. Not in emacsclient.c. In src/, I see 100 mostly used as char tmp_buf[100]; and similar; but as a size for alloca (), xmalloc () etc. it appears only a few times, alone or as part of an expression. > Otherwise, define a macro (which you can set to 42 if you really insist) > and use it everywhere. I've already checked the patch with 32, which seems a fine default: a power of two and small (and it is used a few times already on emacsclient.c). 42 was obviously only a joke. But if you insist I can change all these 32 to 100. Or use a macro for all these EXTRA_SPACE, if you suggest a good name for it. Juanma ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: emacs client/server mode hardcodes /tmp path 2008-10-29 14:55 ` Juanma Barranquero @ 2008-10-29 15:03 ` Stefan Monnier 2008-10-29 15:12 ` Juanma Barranquero 0 siblings, 1 reply; 13+ messages in thread From: Stefan Monnier @ 2008-10-29 15:03 UTC (permalink / raw) To: Juanma Barranquero; +Cc: emacs-devel >> Please just leave it as 100. The rest of the code uses 100 everywhere. > Not in emacsclient.c. In src/, I see 100 mostly used as > char tmp_buf[100]; > and similar; but as a size for alloca (), xmalloc () etc. it appears > only a few times, alone or as part of an expression. Whether it's for a static or dynamic allocation doesn't matter: the places where some arbitrary number is used, it's usually 100. >> Otherwise, define a macro (which you can set to 42 if you really insist) >> and use it everywhere. > I've already checked the patch with 32, which seems a fine default: a > power of two and small (and it is used a few times already on > emacsclient.c). 42 was obviously only a joke. Actually 32 is no better than 42 or 100. The important part is that people shouldn't feel compelled to change 100 to 96 (or 32 to 28) when they reduce a size by 4. > But if you insist I can change all these 32 to 100. Or use a macro for > all these EXTRA_SPACE, if you suggest a good name for it. EXTRA_SPACE sounds fine, Stefan ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: emacs client/server mode hardcodes /tmp path 2008-10-29 15:03 ` Stefan Monnier @ 2008-10-29 15:12 ` Juanma Barranquero 0 siblings, 0 replies; 13+ messages in thread From: Juanma Barranquero @ 2008-10-29 15:12 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel On Wed, Oct 29, 2008 at 16:03, Stefan Monnier <monnier@iro.umontreal.ca> wrote: > Actually 32 is no better than 42 or 100. The important part is that > people shouldn't feel compelled to change 100 to 96 (or 32 to 28) when > they reduce a size by 4. That Ulrich felt the compulsion to change 100 to 96 shows how intuitive is that 100 (or 32, of course). > EXTRA_SPACE sounds fine, OK. Juanma ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2008-10-29 15:12 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-03-06 15:43 emacs client/server mode hardcodes /tmp path Diego 'Flameeyes' Pettenò 2008-03-06 17:48 ` Stefan Monnier 2008-03-06 17:58 ` Diego 'Flameeyes' Pettenò 2008-10-28 13:38 ` Ulrich Mueller 2008-10-28 14:29 ` Stefan Monnier 2008-10-29 7:51 ` Ulrich Mueller 2008-10-29 9:15 ` Juanma Barranquero 2008-10-29 9:28 ` Ulrich Mueller 2008-10-29 9:37 ` Juanma Barranquero 2008-10-29 14:41 ` Stefan Monnier 2008-10-29 14:55 ` Juanma Barranquero 2008-10-29 15:03 ` Stefan Monnier 2008-10-29 15:12 ` Juanma Barranquero
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).