xref: /openbsd/usr.sbin/mopd/mopchk/mopchk.c (revision 73471bf0)
1 /*	$OpenBSD: mopchk.c,v 1.19 2021/10/24 21:24:19 deraadt Exp $	*/
2 
3 /*
4  * Copyright (c) 1995-96 Mats O Jansson.  All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26 
27 /*
28  * mopchk - MOP Check Utility
29  *
30  * Usage:	mopchk [-av] [file ...]
31  */
32 
33 #include "os.h"
34 #include "common/common.h"
35 #include "common/mopdef.h"
36 #include "common/device.h"
37 #include "common/pf.h"
38 #include "common/file.h"
39 
40 /*
41  * The list of all interfaces that are being listened to.
42  */
43 struct if_info *iflist;
44 
45 void   Usage(void);
46 void   mopProcess(struct if_info *, u_char *);
47 
48 int     AllFlag = 0;		/* listen on "all" interfaces  */
49 int	VersionFlag = 0;	/* Show version */
50 int	promisc = 0;		/* promisc mode not needed */
51 extern char *__progname;
52 extern char version[];
53 
54 int
55 main(argc, argv)
56 	int     argc;
57 	char  **argv;
58 {
59 	struct dllist dl;
60 	int     op, i;
61 	char   *filename, *p;
62 	struct if_info *ii;
63 	int	error;
64 
65 	/* All error reporting is done through syslogs. */
66 	openlog(__progname, LOG_PID | LOG_CONS, LOG_DAEMON);
67 
68 	opterr = 0;
69 	while ((op = getopt(argc, argv, "av")) != -1) {
70 		switch (op) {
71 		case 'a':
72 			AllFlag = 1;
73 			break;
74 		case 'v':
75 			VersionFlag = 1;
76 			break;
77 		default:
78 			Usage();
79 			/* NOTREACHED */
80 		}
81 	}
82 
83 	if (VersionFlag)
84 		printf("%s: Version %s\n", __progname, version);
85 
86 	if (AllFlag) {
87 		if (VersionFlag)
88 			printf("\n");
89 		iflist = NULL;
90 		deviceInitAll();
91 		if (iflist == NULL) {
92 			printf("No interface\n");
93 		} else {
94 			printf("Interface Address\n");
95 			p = NULL;
96 			for (ii = iflist; ii; ii = ii->next) {
97 				if (p != NULL) {
98 					if (strcmp(p,ii->if_name) == 0)
99 						continue;
100 				}
101 				printf("%-9s %x:%x:%x:%x:%x:%x\n",
102 				       ii->if_name,
103 				       ii->eaddr[0],ii->eaddr[1],ii->eaddr[2],
104 				       ii->eaddr[3],ii->eaddr[4],ii->eaddr[5]);
105 				p = ii->if_name;
106 			}
107 		}
108 	}
109 
110 	if (VersionFlag || AllFlag)
111 		i = 1;
112 	else
113 		i = 0;
114 
115 	while (argc > optind) {
116 		if (i)	printf("\n");
117 		i++;
118 		filename = argv[optind++];
119 		printf("Checking: %s\n",filename);
120 		dl.ldfd = open(filename, O_RDONLY);
121 		if (dl.ldfd == -1) {
122 			printf("Unknown file.\n");
123 		} else {
124 			if ((error = CheckElfFile(dl.ldfd)) == 0) {
125 				if (GetElf32FileInfo(&dl, INFO_PRINT) < 0 &&
126 				    GetElf64FileInfo(&dl, INFO_PRINT) < 0) {
127 					printf("Some failure in GetElfXXFileInfo\n");
128 				}
129 			} else if ((error = CheckAOutFile(dl.ldfd)) == 0) {
130 				if (GetAOutFileInfo(&dl, INFO_PRINT) < 0) {
131 					printf("Some failure in GetAOutFileInfo\n");
132 				}
133 			} else if ((error = CheckMopFile(dl.ldfd)) == 0) {
134 				if (GetMopFileInfo(&dl, INFO_PRINT) < 0) {
135 					printf("Some failure in GetMopFileInfo\n");
136 				}
137 			};
138 		}
139 		(void)close(dl.ldfd);
140 	}
141 	return 0;
142 }
143 
144 void
145 Usage()
146 {
147 	fprintf(stderr, "usage: %s [-av] [file ...]\n", __progname);
148 	exit(1);
149 }
150 
151 /*
152  * Process incoming packages, NOT.
153  */
154 /* ARGSUSED */
155 void
156 mopProcess(ii, pkt)
157 	struct if_info *ii;
158 	u_char *pkt;
159 {
160 }
161 
162