Mercurial > emacs
comparison lib-src/emacsclient.c @ 53734:132739917566
(main): Don't use the hostname in the socket name.
Look for relative socket names in the /tmp dir rather than in cwd.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Tue, 27 Jan 2004 23:04:52 +0000 |
parents | 04e9ebd16fcd |
children | ddc4b99f4f8c 1d2f73785d9d |
comparison
equal
deleted
inserted
replaced
53733:d5f680b60b41 | 53734:132739917566 |
---|---|
297 int | 297 int |
298 main (argc, argv) | 298 main (argc, argv) |
299 int argc; | 299 int argc; |
300 char **argv; | 300 char **argv; |
301 { | 301 { |
302 char *system_name; | |
303 int system_name_length; | |
304 int s, i, needlf = 0; | 302 int s, i, needlf = 0; |
305 FILE *out, *in; | 303 FILE *out, *in; |
306 struct sockaddr_un server; | 304 struct sockaddr_un server; |
307 char *cwd, *str; | 305 char *cwd, *str; |
308 char string[BUFSIZ]; | 306 char string[BUFSIZ]; |
331 } | 329 } |
332 | 330 |
333 server.sun_family = AF_UNIX; | 331 server.sun_family = AF_UNIX; |
334 | 332 |
335 { | 333 { |
336 char *dot; | |
337 system_name_length = 32; | |
338 | |
339 while (1) | |
340 { | |
341 system_name = (char *) xmalloc (system_name_length + 1); | |
342 | |
343 /* system_name must be null-terminated string. */ | |
344 system_name[system_name_length] = '\0'; | |
345 | |
346 if (gethostname (system_name, system_name_length) == 0) | |
347 break; | |
348 | |
349 free (system_name); | |
350 system_name_length *= 2; | |
351 } | |
352 | |
353 /* We always use the non-dotted host name, for simplicity. */ | |
354 dot = index (system_name, '.'); | |
355 if (dot) | |
356 *dot = '\0'; | |
357 } | |
358 | |
359 { | |
360 int sock_status = 0; | 334 int sock_status = 0; |
361 int default_sock = !socket_name; | 335 int default_sock = !socket_name; |
362 int saved_errno; | 336 int saved_errno; |
337 char *server_name = "server"; | |
338 | |
339 if (socket_name && !index (socket_name, '/') && !index (socket_name, '\\')) | |
340 { /* socket_name is a file name component. */ | |
341 server_name = socket_name; | |
342 socket_name = NULL; | |
343 default_sock = 1; /* Try both UIDs. */ | |
344 } | |
363 | 345 |
364 if (default_sock) | 346 if (default_sock) |
365 { | 347 { |
366 socket_name = alloca (system_name_length + 100); | 348 socket_name = alloca (100 + strlen (server_name)); |
367 sprintf (socket_name, "/tmp/emacs%d-%s/server", | 349 sprintf (socket_name, "/tmp/emacs%d/%s", |
368 (int) geteuid (), system_name); | 350 (int) geteuid (), server_name); |
369 } | 351 } |
370 | 352 |
371 if (strlen (socket_name) < sizeof (server.sun_path)) | 353 if (strlen (socket_name) < sizeof (server.sun_path)) |
372 strcpy (server.sun_path, socket_name); | 354 strcpy (server.sun_path, socket_name); |
373 else | 355 else |
397 struct passwd *pw = getpwnam (user_name); | 379 struct passwd *pw = getpwnam (user_name); |
398 | 380 |
399 if (pw && (pw->pw_uid != geteuid ())) | 381 if (pw && (pw->pw_uid != geteuid ())) |
400 { | 382 { |
401 /* We're running under su, apparently. */ | 383 /* We're running under su, apparently. */ |
402 sprintf (socket_name, "/tmp/emacs%d-%s/server", | 384 socket_name = alloca (100 + strlen (server_name)); |
403 (int) pw->pw_uid, system_name); | 385 sprintf (socket_name, "/tmp/emacs%d/%s", |
386 (int) pw->pw_uid, server_name); | |
404 | 387 |
405 if (strlen (socket_name) < sizeof (server.sun_path)) | 388 if (strlen (socket_name) < sizeof (server.sun_path)) |
406 strcpy (server.sun_path, socket_name); | 389 strcpy (server.sun_path, socket_name); |
407 else | 390 else |
408 { | 391 { |