diff options
Diffstat (limited to 'lib-src')
| -rw-r--r-- | lib-src/ChangeLog | 11 | ||||
| -rw-r--r-- | lib-src/emacsclient.c | 48 |
2 files changed, 27 insertions, 32 deletions
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index 3e66cba3563..6ea0e8be97a 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog | |||
| @@ -1,8 +1,19 @@ | |||
| 1 | 2004-01-27 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 2 | |||
| 3 | * emacsclient.c (main): Don't use the hostname in the socket name. | ||
| 4 | Look for relative socket names in the /tmp dir rather than in cwd. | ||
| 5 | |||
| 1 | 2004-01-24 Richard M. Stallman <rms@gnu.org> | 6 | 2004-01-24 Richard M. Stallman <rms@gnu.org> |
| 2 | 7 | ||
| 3 | * emacsclient.c (main): Restore errno from saved_errno, | 8 | * emacsclient.c (main): Restore errno from saved_errno, |
| 4 | so the error message comes from socket_status. | 9 | so the error message comes from socket_status. |
| 5 | 10 | ||
| 11 | 2004-01-20 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 12 | |||
| 13 | * emacsclient.c (main): Stop if socket name too long. | ||
| 14 | Only try su-fallback if the socket name was not explicit. | ||
| 15 | Check socket name length in su-fallback case as well. | ||
| 16 | |||
| 6 | 2004-01-08 Andreas Schwab <schwab@suse.de> | 17 | 2004-01-08 Andreas Schwab <schwab@suse.de> |
| 7 | 18 | ||
| 8 | * emacsclient.c (main): Save errno from socket_status. | 19 | * emacsclient.c (main): Save errno from socket_status. |
diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index d70be8c7491..0f42f096643 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c | |||
| @@ -382,8 +382,6 @@ main (argc, argv) | |||
| 382 | int argc; | 382 | int argc; |
| 383 | char **argv; | 383 | char **argv; |
| 384 | { | 384 | { |
| 385 | char *system_name; | ||
| 386 | int system_name_length; | ||
| 387 | int s, i, needlf = 0; | 385 | int s, i, needlf = 0; |
| 388 | FILE *out, *in; | 386 | FILE *out, *in; |
| 389 | struct sockaddr_un server; | 387 | struct sockaddr_un server; |
| @@ -418,39 +416,24 @@ main (argc, argv) | |||
| 418 | server.sun_family = AF_UNIX; | 416 | server.sun_family = AF_UNIX; |
| 419 | 417 | ||
| 420 | { | 418 | { |
| 421 | char *dot; | ||
| 422 | system_name_length = 32; | ||
| 423 | |||
| 424 | while (1) | ||
| 425 | { | ||
| 426 | system_name = (char *) xmalloc (system_name_length + 1); | ||
| 427 | |||
| 428 | /* system_name must be null-terminated string. */ | ||
| 429 | system_name[system_name_length] = '\0'; | ||
| 430 | |||
| 431 | if (gethostname (system_name, system_name_length) == 0) | ||
| 432 | break; | ||
| 433 | |||
| 434 | free (system_name); | ||
| 435 | system_name_length *= 2; | ||
| 436 | } | ||
| 437 | |||
| 438 | /* We always use the non-dotted host name, for simplicity. */ | ||
| 439 | dot = index (system_name, '.'); | ||
| 440 | if (dot) | ||
| 441 | *dot = '\0'; | ||
| 442 | } | ||
| 443 | |||
| 444 | { | ||
| 445 | int sock_status = 0; | 419 | int sock_status = 0; |
| 446 | int default_sock = !socket_name; | 420 | int default_sock = !socket_name; |
| 447 | int saved_errno = 0; | 421 | int saved_errno = 0; |
| 448 | 422 | ||
| 449 | if (default_sock) | 423 | char *server_name = "server"; |
| 424 | |||
| 425 | if (socket_name && !index (socket_name, '/') && !index (socket_name, '\\')) | ||
| 426 | { /* socket_name is a file name component. */ | ||
| 427 | server_name = socket_name; | ||
| 428 | socket_name = NULL; | ||
| 429 | default_sock = 1; /* Try both UIDs. */ | ||
| 430 | } | ||
| 431 | |||
| 432 | if (default_sock) | ||
| 450 | { | 433 | { |
| 451 | socket_name = alloca (system_name_length + 100); | 434 | socket_name = alloca (100 + strlen (server_name)); |
| 452 | sprintf (socket_name, "/tmp/emacs%d-%s/server", | 435 | sprintf (socket_name, "/tmp/emacs%d/%s", |
| 453 | (int) geteuid (), system_name); | 436 | (int) geteuid (), server_name); |
| 454 | } | 437 | } |
| 455 | 438 | ||
| 456 | if (strlen (socket_name) < sizeof (server.sun_path)) | 439 | if (strlen (socket_name) < sizeof (server.sun_path)) |
| @@ -484,8 +467,9 @@ main (argc, argv) | |||
| 484 | if (pw && (pw->pw_uid != geteuid ())) | 467 | if (pw && (pw->pw_uid != geteuid ())) |
| 485 | { | 468 | { |
| 486 | /* We're running under su, apparently. */ | 469 | /* We're running under su, apparently. */ |
| 487 | sprintf (socket_name, "/tmp/emacs%d-%s/server", | 470 | socket_name = alloca (100 + strlen (server_name)); |
| 488 | (int) pw->pw_uid, system_name); | 471 | sprintf (socket_name, "/tmp/emacs%d/%s", |
| 472 | (int) pw->pw_uid, server_name); | ||
| 489 | 473 | ||
| 490 | if (strlen (socket_name) < sizeof (server.sun_path)) | 474 | if (strlen (socket_name) < sizeof (server.sun_path)) |
| 491 | strcpy (server.sun_path, socket_name); | 475 | strcpy (server.sun_path, socket_name); |