summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
authorbrian <brian@FreeBSD.org>2000-01-12 21:53:46 +0000
committerbrian <brian@FreeBSD.org>2000-01-12 21:53:46 +0000
commit1e3f91cfff7a8c5321271c132f7e4f705cb23bf3 (patch)
tree4a6dbf6b996e83674e46947ebcaa858b49a7437e /usr.sbin
parentdd5364f05aa0be5c6fb5456f094a5cb14b4fd510 (diff)
downloadFreeBSD-src-1e3f91cfff7a8c5321271c132f7e4f705cb23bf3.zip
FreeBSD-src-1e3f91cfff7a8c5321271c132f7e4f705cb23bf3.tar.gz
As we parse the interface list, ignore sockaddr_dl's that
don't have an interface index that's the same as the if_msghdr interface index. This prevents the occasional perror("SIOCGIFFLAGS") from appearing at boot time. While I'm there: Make a couple of error messages more useful. Add a missing include. Add some braces to silence gccs dumb complaints. Add some consts Ansify decls Add copyright to pmap_check.h (well, you could say it's been rewritten)
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/portmap/from_local.c34
-rw-r--r--usr.sbin/portmap/pmap_check.c60
-rw-r--r--usr.sbin/portmap/pmap_check.h43
-rw-r--r--usr.sbin/portmap/pmap_dump/pmap_dump.c10
-rw-r--r--usr.sbin/portmap/pmap_set/pmap_set.c15
-rw-r--r--usr.sbin/portmap/portmap.c49
6 files changed, 108 insertions, 103 deletions
diff --git a/usr.sbin/portmap/from_local.c b/usr.sbin/portmap/from_local.c
index dbff1d6..7f84455 100644
--- a/usr.sbin/portmap/from_local.c
+++ b/usr.sbin/portmap/from_local.c
@@ -54,7 +54,10 @@ static const char rcsid[] =
#include <sys/time.h>
#include <netdb.h>
+#include <errno.h>
+#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <syslog.h>
#include <unistd.h>
@@ -62,6 +65,8 @@ static const char rcsid[] =
#include <net/if_dl.h>
#include <netinet/in.h>
+#include "pmap_check.h"
+
#ifndef TRUE
#define TRUE 1
#define FALSE 0
@@ -75,8 +80,8 @@ static struct in_addr *addrs;
/* find_local - find all IP addresses for this host */
-int
-find_local()
+static int
+find_local(void)
{
int mib[6], n, s, alloced;
size_t needed;
@@ -122,19 +127,25 @@ find_local()
for (ptr = buf; ptr < end; ptr += ifm->ifm_msglen) {
ifm = (struct if_msghdr *)ptr;
dl = (struct sockaddr_dl *)(ifm + 1);
+
+ if (ifm->ifm_index != dl->sdl_index || dl->sdl_nlen == 0)
+ /* We only want to see each interface once */
+ continue;
+
n = dl->sdl_nlen > sizeof ifr.ifr_name ?
sizeof ifr.ifr_name : dl->sdl_nlen;
- if (n == 0)
- continue;
strncpy(ifr.ifr_name, dl->sdl_data, n);
if (n < sizeof ifr.ifr_name)
ifr.ifr_name[n] = '\0';
+
/* we only want the first address from each interface */
if (ioctl(s, SIOCGIFFLAGS, &ifr) < 0)
- perror("SIOCGIFFLAGS");
- else if (ifr.ifr_flags & IFF_UP) /* active interface */
+ fprintf(stderr, "%.*s: SIOCGIFFLAGS: %s\n", n, ifr.ifr_name,
+ strerror(errno));
+ else if (ifr.ifr_flags & IFF_UP) { /* active interface */
if (ioctl(s, SIOCGIFADDR, &ifr) < 0)
- perror("SIOCGIFADDR");
+ fprintf(stderr, "%.*s: SIOCGIFADDR: %s\n", n, ifr.ifr_name,
+ strerror(errno));
else {
if (alloced < num_local + 1) {
alloced += ESTIMATED_LOCAL;
@@ -150,6 +161,7 @@ find_local()
}
addrs[num_local++] = ((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr;
}
+ }
}
free(buf);
close(s);
@@ -160,8 +172,7 @@ find_local()
/* from_local - determine whether request comes from the local system */
int
-from_local(addr)
-struct sockaddr_in *addr;
+from_local(struct sockaddr_in *addr)
{
int i;
@@ -178,7 +189,8 @@ struct sockaddr_in *addr;
#ifdef TEST
-main()
+int
+main(int argc, char **argv)
{
char *inet_ntoa();
int i;
@@ -186,6 +198,8 @@ main()
find_local();
for (i = 0; i < num_local; i++)
printf("%s\n", inet_ntoa(addrs[i]));
+
+ return 0;
}
#endif
diff --git a/usr.sbin/portmap/pmap_check.c b/usr.sbin/portmap/pmap_check.c
index 818c0d1..0776388 100644
--- a/usr.sbin/portmap/pmap_check.c
+++ b/usr.sbin/portmap/pmap_check.c
@@ -63,8 +63,9 @@ static const char rcsid[] =
#define YPPROC_DOMAIN_NONACK ((u_long) 2)
#define MOUNTPROC_MNT ((u_long) 1)
-static void logit();
-static void toggle_verboselog();
+static void logit(int, struct sockaddr_in *, u_long, u_long, const char *);
+static void toggle_verboselog(int);
+
int verboselog = 0;
int allow_severity = LOG_INFO;
int deny_severity = LOG_WARNING;
@@ -93,7 +94,8 @@ int deny_severity = LOG_WARNING;
/* check_startup - additional startup code */
-void check_startup()
+void
+check_startup()
{
/*
@@ -110,10 +112,7 @@ void check_startup()
/* check_default - additional checks for NULL, DUMP, GETPORT and unknown */
int
-check_default(addr, proc, prog)
-struct sockaddr_in *addr;
-u_long proc;
-u_long prog;
+check_default(struct sockaddr_in *addr, u_long proc, u_long prog)
{
#ifdef HOSTS_ACCESS
if (!(from_local(addr) || good_client(addr))) {
@@ -129,11 +128,8 @@ u_long prog;
/* check_privileged_port - additional checks for privileged-port updates */
int
-check_privileged_port(addr, proc, prog, port)
-struct sockaddr_in *addr;
-u_long proc;
-u_long prog;
-u_long port;
+check_privileged_port(struct sockaddr_in *addr, u_long proc, u_long prog,
+ u_long port)
{
#ifdef CHECK_PORT
if (!legal_port(addr, port)) {
@@ -147,11 +143,7 @@ u_long port;
/* check_setunset - additional checks for update requests */
int
-check_setunset(addr, proc, prog, port)
-struct sockaddr_in *addr;
-u_long proc;
-u_long prog;
-u_long port;
+check_setunset(struct sockaddr_in *addr, u_long proc, u_long prog, u_long port)
{
if (!from_local(addr)) {
#ifdef HOSTS_ACCESS
@@ -170,11 +162,7 @@ u_long port;
/* check_callit - additional checks for forwarded requests */
int
-check_callit(addr, proc, prog, aproc)
-struct sockaddr_in *addr;
-u_long proc;
-u_long prog;
-u_long aproc;
+check_callit(struct sockaddr_in *addr, u_long proc, u_long prog, u_long aproc)
{
#ifdef HOSTS_ACCESS
if (!(from_local(addr) || good_client(addr))) {
@@ -195,8 +183,8 @@ u_long aproc;
/* toggle_verboselog - toggle verbose logging flag */
-static void toggle_verboselog(sig)
-int sig;
+static void
+toggle_verboselog(int sig)
{
(void) signal(sig, toggle_verboselog);
verboselog = !verboselog;
@@ -204,21 +192,18 @@ int sig;
/* logit - report events of interest via the syslog daemon */
-static void logit(severity, addr, procnum, prognum, text)
-int severity;
-struct sockaddr_in *addr;
-u_long procnum;
-u_long prognum;
-char *text;
+static void
+logit(int severity, struct sockaddr_in *addr, u_long procnum, u_long prognum,
+ const char *text)
{
- char *procname;
+ const char *procname;
char procbuf[4 * sizeof(u_long)];
- char *progname;
+ const char *progname;
char progbuf[4 * sizeof(u_long)];
struct rpcent *rpc;
struct proc_map {
u_long code;
- char *proc;
+ const char *proc;
};
struct proc_map *procp;
static struct proc_map procmap[] = {
@@ -245,15 +230,18 @@ char *text;
} else if ((rpc = getrpcbynumber((int) prognum))) {
progname = rpc->r_name;
} else {
- sprintf(progname = progbuf, "%lu", prognum);
+ sprintf(progbuf, "%lu", prognum);
+ progname = progbuf;
}
/* Try to map procedure number to name. */
for (procp = procmap; procp->proc && procp->code != procnum; procp++)
/* void */ ;
- if ((procname = procp->proc) == 0)
- sprintf(procname = procbuf, "%lu", (u_long) procnum);
+ if ((procname = procp->proc) == 0) {
+ sprintf(procbuf, "%lu", (u_long) procnum);
+ procname = procbuf;
+ }
/* Write syslog record. */
diff --git a/usr.sbin/portmap/pmap_check.h b/usr.sbin/portmap/pmap_check.h
index 2c240df..c5927a4 100644
--- a/usr.sbin/portmap/pmap_check.h
+++ b/usr.sbin/portmap/pmap_check.h
@@ -1,11 +1,40 @@
-/* @(#) pmap_check.h 1.3 93/11/21 16:18:53 */
+/*-
+ * Copyright (c) 2000 Brian Somers <brian@Awfulhak.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#) pmap_check.h 1.3 93/11/21 16:18:53
+ *
+ * $FreeBSD$
+ */
+
+extern int from_local(struct sockaddr_in *);
+extern void check_startup(void);
+extern int check_default(struct sockaddr_in *, u_long, u_long);
+extern int check_setunset(struct sockaddr_in *, u_long, u_long, u_long);
+extern int check_privileged_port(struct sockaddr_in *, u_long, u_long, u_long);
+extern int check_callit(struct sockaddr_in *, u_long, u_long, u_long);
-extern int from_local();
-extern void check_startup();
-extern int check_default();
-extern int check_setunset();
-extern int check_privileged_port();
-extern int check_callit();
extern int verboselog;
extern int allow_severity;
extern int deny_severity;
diff --git a/usr.sbin/portmap/pmap_dump/pmap_dump.c b/usr.sbin/portmap/pmap_dump/pmap_dump.c
index 944081f..a23896e 100644
--- a/usr.sbin/portmap/pmap_dump/pmap_dump.c
+++ b/usr.sbin/portmap/pmap_dump/pmap_dump.c
@@ -25,12 +25,10 @@ static const char rcsid[] =
#include <rpc/pmap_clnt.h>
#include <rpc/pmap_prot.h>
-static char *protoname();
+static const char *protoname(u_long);
int
-main(argc, argv)
-int argc;
-char **argv;
+main(int argc, char **argv)
{
struct sockaddr_in addr;
register struct pmaplist *list;
@@ -51,8 +49,8 @@ char **argv;
return (fclose(stdout) ? (perror(argv[0]), 1) : 0);
}
-static char *protoname(proto)
-u_long proto;
+static const char *
+protoname(u_long proto)
{
static char buf[BUFSIZ];
diff --git a/usr.sbin/portmap/pmap_set/pmap_set.c b/usr.sbin/portmap/pmap_set/pmap_set.c
index 34b4bc1..deeb686 100644
--- a/usr.sbin/portmap/pmap_set/pmap_set.c
+++ b/usr.sbin/portmap/pmap_set/pmap_set.c
@@ -22,12 +22,10 @@ static const char rcsid[] =
#include <rpc/rpc.h>
#include <rpc/pmap_clnt.h>
-int parse_line __P((char *, u_long *, u_long *, int *, unsigned *));
+static int parse_line (char *, u_long *, u_long *, int *, unsigned *);
int
-main(argc, argv)
-int argc;
-char **argv;
+main(int argc, char **argv)
{
struct sockaddr_in addr;
char buf[BUFSIZ];
@@ -51,13 +49,8 @@ char **argv;
/* parse_line - convert line to numbers */
-int
-parse_line(buf, prog, vers, prot, port)
-char *buf;
-u_long *prog;
-u_long *vers;
-int *prot;
-unsigned *port;
+static int
+parse_line(char *buf, u_long *prog, u_long *vers, int *prot, unsigned *port)
{
char proto_name[BUFSIZ];
diff --git a/usr.sbin/portmap/portmap.c b/usr.sbin/portmap/portmap.c
index 28dbda4..38efae4 100644
--- a/usr.sbin/portmap/portmap.c
+++ b/usr.sbin/portmap/portmap.c
@@ -102,18 +102,16 @@ static char sccsid[] = "@(#)portmap.c 1.32 87/08/06 Copyr 1984 Sun Micro";
#include "pmap_check.h"
-void reg_service();
-void reap();
-static void callit();
-static void usage __P((void));
+static void reg_service(struct svc_req *, SVCXPRT *);
+static void reap(int);
+static void callit(struct svc_req *, SVCXPRT *);
+static void usage(void);
struct pmaplist *pmaplist;
int debugging = 0;
int
-main(argc, argv)
- int argc;
- char **argv;
+main(int argc, char **argv)
{
SVCXPRT *xprt;
int sock, c;
@@ -220,8 +218,7 @@ perror(what)
#endif
static struct pmaplist *
-find_service(prog, vers, prot)
- u_long prog, vers, prot;
+find_service(u_long prog, u_long vers, u_long prot)
{
register struct pmaplist *hit = NULL;
register struct pmaplist *pml;
@@ -240,10 +237,8 @@ find_service(prog, vers, prot)
/*
* 1 OK, 0 not
*/
-void
-reg_service(rqstp, xprt)
- struct svc_req *rqstp;
- SVCXPRT *xprt;
+static void
+reg_service(struct svc_req *rqstp, SVCXPRT *xprt)
{
struct pmap reg;
struct pmaplist *pml, *prevpml, *fnd;
@@ -453,9 +448,7 @@ struct encap_parms {
};
static bool_t
-xdr_encap_parms(xdrs, epp)
- XDR *xdrs;
- struct encap_parms *epp;
+xdr_encap_parms(XDR *xdrs, struct encap_parms *epp)
{
return (xdr_bytes(xdrs, &(epp->args), &(epp->arglen), ARGSIZE));
@@ -470,9 +463,7 @@ struct rmtcallargs {
};
static bool_t
-xdr_rmtcall_args(xdrs, cap)
- register XDR *xdrs;
- register struct rmtcallargs *cap;
+xdr_rmtcall_args(XDR *xdrs, struct rmtcallargs *cap)
{
/* does not get a port number */
@@ -485,9 +476,7 @@ xdr_rmtcall_args(xdrs, cap)
}
static bool_t
-xdr_rmtcall_result(xdrs, cap)
- register XDR *xdrs;
- register struct rmtcallargs *cap;
+xdr_rmtcall_result(XDR *xdrs, struct rmtcallargs *cap)
{
if (xdr_u_long(xdrs, &(cap->rmt_port)))
return (xdr_encap_parms(xdrs, &(cap->rmt_args)));
@@ -499,9 +488,7 @@ xdr_rmtcall_result(xdrs, cap)
* The arglen must already be set!!
*/
static bool_t
-xdr_opaque_parms(xdrs, cap)
- XDR *xdrs;
- struct rmtcallargs *cap;
+xdr_opaque_parms(XDR *xdrs, struct rmtcallargs *cap)
{
return (xdr_opaque(xdrs, cap->rmt_args.args, cap->rmt_args.arglen));
@@ -512,9 +499,7 @@ xdr_opaque_parms(xdrs, cap)
* and then calls xdr_opaque_parms.
*/
static bool_t
-xdr_len_opaque_parms(xdrs, cap)
- register XDR *xdrs;
- struct rmtcallargs *cap;
+xdr_len_opaque_parms(XDR *xdrs, struct rmtcallargs *cap)
{
register u_int beginpos, lowpos, highpos, currpos, pos;
@@ -545,9 +530,7 @@ xdr_len_opaque_parms(xdrs, cap)
* back to the portmapper.
*/
static void
-callit(rqstp, xprt)
- struct svc_req *rqstp;
- SVCXPRT *xprt;
+callit(struct svc_req *rqstp, SVCXPRT *xprt)
{
struct rmtcallargs a;
struct pmaplist *pml;
@@ -602,8 +585,8 @@ callit(rqstp, xprt)
exit(0);
}
-void
-reap()
+static void
+reap(int sig)
{
int save_errno;
OpenPOWER on IntegriCloud