|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1983 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms are permitted ! 6: * provided that the above copyright notice and this paragraph are ! 7: * duplicated in all such forms and that any documentation, ! 8: * advertising materials, and other materials related to such ! 9: * distribution and use acknowledge that the software was developed ! 10: * by the University of California, Berkeley. The name of the ! 11: * University may not be used to endorse or promote products derived ! 12: * from this software without specific prior written permission. ! 13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 16: */ ! 17: ! 18: #ifndef lint ! 19: static char sccsid[] = "@(#)get_names.c 5.5 (Berkeley) 6/29/88"; ! 20: #endif /* not lint */ ! 21: ! 22: #include "talk.h" ! 23: #include <sys/param.h> ! 24: #include <protocols/talkd.h> ! 25: #include <pwd.h> ! 26: ! 27: char *getlogin(); ! 28: char *ttyname(); ! 29: char *rindex(); ! 30: extern CTL_MSG msg; ! 31: ! 32: /* ! 33: * Determine the local and remote user, tty, and machines ! 34: */ ! 35: get_names(argc, argv) ! 36: int argc; ! 37: char *argv[]; ! 38: { ! 39: char hostname[MAXHOSTNAMELEN]; ! 40: char *his_name, *my_name; ! 41: char *my_machine_name, *his_machine_name; ! 42: char *my_tty, *his_tty; ! 43: register char *cp; ! 44: ! 45: if (argc < 2 ) { ! 46: printf("Usage: talk user [ttyname]\n"); ! 47: exit(-1); ! 48: } ! 49: if (!isatty(0)) { ! 50: printf("Standard input must be a tty, not a pipe or a file\n"); ! 51: exit(-1); ! 52: } ! 53: if ((my_name = getlogin()) == NULL) { ! 54: struct passwd *pw; ! 55: ! 56: if ((pw = getpwuid(getuid())) == NULL) { ! 57: printf("You don't exist. Go away.\n"); ! 58: exit(-1); ! 59: } ! 60: my_name = pw->pw_name; ! 61: } ! 62: gethostname(hostname, sizeof (hostname)); ! 63: my_machine_name = hostname; ! 64: /* check for, and strip out, the machine name of the target */ ! 65: for (cp = argv[1]; *cp && !any(*cp, "@:!."); cp++) ! 66: ; ! 67: if (*cp == '\0') { ! 68: /* this is a local to local talk */ ! 69: his_name = argv[1]; ! 70: his_machine_name = my_machine_name; ! 71: } else { ! 72: if (*cp++ == '@') { ! 73: /* user@host */ ! 74: his_name = argv[1]; ! 75: his_machine_name = cp; ! 76: } else { ! 77: /* host.user or host!user or host:user */ ! 78: his_name = cp; ! 79: his_machine_name = argv[1]; ! 80: } ! 81: *--cp = '\0'; ! 82: } ! 83: if (argc > 2) ! 84: his_tty = argv[2]; /* tty name is arg 2 */ ! 85: else ! 86: his_tty = ""; ! 87: get_addrs(my_machine_name, his_machine_name); ! 88: /* ! 89: * Initialize the message template. ! 90: */ ! 91: msg.vers = TALK_VERSION; ! 92: msg.addr.sa_family = htons(AF_INET); ! 93: msg.ctl_addr.sa_family = htons(AF_INET); ! 94: msg.id_num = htonl(0); ! 95: strncpy(msg.l_name, my_name, NAME_SIZE); ! 96: msg.l_name[NAME_SIZE - 1] = '\0'; ! 97: strncpy(msg.r_name, his_name, NAME_SIZE); ! 98: msg.r_name[NAME_SIZE - 1] = '\0'; ! 99: strncpy(msg.r_tty, his_tty, TTY_SIZE); ! 100: msg.r_tty[TTY_SIZE - 1] = '\0'; ! 101: } ! 102: ! 103: static ! 104: any(c, cp) ! 105: register char c, *cp; ! 106: { ! 107: ! 108: while (*cp) ! 109: if (c == *cp++) ! 110: return (1); ! 111: return (0); ! 112: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.