xref: /original-bsd/usr.bin/mesg/mesg.c (revision 2301fdfb)
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