1 /*-
2 * Copyright (c) 1983, 1985
3 * The Regents of the University of California. All rights reserved.
4 *
5 * %sccs.include.redist.c%
6 */
7
8 #ifndef lint
9 static char sccsid[] = "@(#)get_names.c 5.1 (Berkeley) 6/6/85";
10 #endif not lint
11
12 #include "talk.h"
13 #include "ctl.h"
14 #include <netdb.h>
15 #include <stdlib.h>
16 #include <string.h>
17 #include <unistd.h>
18
19 extern CTL_MSG msg;
20
21 /*
22 * Determine the local and remote user, tty, and machines
23 */
24 void
get_names(argc,argv)25 get_names(argc, argv)
26 int argc;
27 char *argv[];
28 {
29 char hostname[HOST_NAME_LENGTH];
30 char *his_name;
31 char *my_name;
32 char *my_machine_name;
33 char *his_machine_name;
34 char *my_tty;
35 char *his_tty;
36 char *ptr;
37
38 if (argc < 2 ) {
39 printf("Usage: talk user [ttyname]\n");
40 exit(-1);
41 }
42 if (!isatty(0)) {
43 printf("Standard input must be a tty, not a pipe or a file\n");
44 exit(-1);
45 }
46 my_name = getlogin();
47 if (my_name == NULL) {
48 printf("You don't exist. Go away.\n");
49 exit(-1);
50 }
51 gethostname(hostname, sizeof (hostname));
52 my_machine_name = hostname;
53 my_tty = rindex(ttyname(0), '/') + 1;
54 /* check for, and strip out, the machine name of the target */
55 for (ptr = argv[1]; *ptr != '\0' && *ptr != '@' && *ptr != ':' &&
56 *ptr != '!' && *ptr != '.'; ptr++)
57 ;
58 if (*ptr == '\0') {
59 /* this is a local to local talk */
60 his_name = argv[1];
61 his_machine_name = my_machine_name;
62 } else {
63 if (*ptr == '@') {
64 /* user@host */
65 his_name = argv[1];
66 his_machine_name = ptr + 1;
67 } else {
68 /* host.user or host!user or host:user */
69 his_name = ptr + 1;
70 his_machine_name = argv[1];
71 }
72 *ptr = '\0';
73 }
74 if (argc > 2)
75 his_tty = argv[2]; /* tty name is arg 2 */
76 else
77 his_tty = "";
78 get_addrs(my_machine_name, his_machine_name);
79 /* Load these useful values into the standard message header */
80 msg.id_num = 0;
81 strncpy(msg.l_name, my_name, NAME_SIZE);
82 msg.l_name[NAME_SIZE - 1] = '\0';
83 strncpy(msg.r_name, his_name, NAME_SIZE);
84 msg.r_name[NAME_SIZE - 1] = '\0';
85 strncpy(msg.r_tty, his_tty, TTY_SIZE);
86 msg.r_tty[TTY_SIZE - 1] = '\0';
87 }
88