1 /* 2 * Copyright (c) 1987 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 char copyright[] = 20 "@(#) Copyright (c) 1987 Regents of the University of California.\n\ 21 All rights reserved.\n"; 22 #endif /* not lint */ 23 24 #ifndef lint 25 static char sccsid[] = "@(#)mesg.c 4.5 (Berkeley) 06/29/88"; 26 #endif /* not lint */ 27 28 /* 29 * mesg -- set current tty to accept or 30 * forbid write permission. 31 * 32 * mesg [y] [n] 33 * y allow messages 34 * n forbid messages 35 */ 36 37 #include <sys/types.h> 38 #include <sys/stat.h> 39 #include <stdio.h> 40 41 static char *tty; 42 43 main(argc, argv) 44 int argc; 45 char **argv; 46 { 47 struct stat sbuf; 48 char *ttyname(); 49 50 if (!(tty = ttyname(2))) { 51 fputs("mesg: not a device in /dev.\n", stderr); 52 exit(-1); 53 } 54 if (stat(tty, &sbuf) < 0) { 55 perror("mesg"); 56 exit(-1); 57 } 58 if (argc < 2) { 59 if (sbuf.st_mode & 020) { 60 fputs("is y\n", stderr); 61 exit(0); 62 } 63 fputs("is n\n", stderr); 64 exit(1); 65 } 66 #define OTHER_WRITE 020 67 switch(*argv[1]) { 68 case 'y': 69 newmode(sbuf.st_mode | OTHER_WRITE); 70 exit(0); 71 case 'n': 72 newmode(sbuf.st_mode &~ OTHER_WRITE); 73 exit(1); 74 default: 75 fputs("usage: mesg [y] [n]\n", stderr); 76 exit(-1); 77 } 78 /*NOTREACHED*/ 79 } 80 81 static 82 newmode(m) 83 u_short m; 84 { 85 if (chmod(tty, m) < 0) { 86 perror("mesg"); 87 exit(-1); 88 } 89 } 90