summaryrefslogtreecommitdiffstats
path: root/iptables/getethertype.c
diff options
context:
space:
mode:
authorPhil Sutter <phil@nwl.cc>2018-09-19 15:16:44 +0200
committerFlorian Westphal <fw@strlen.de>2018-09-24 11:23:46 +0200
commit31f1434dfe3770ecbdac1bacb8e0fc4a17b3d671 (patch)
tree0816392be62930436e984e1300c088fdf8f4d551 /iptables/getethertype.c
parent7ae4fb1348874afbfd760d6b7a24e4ea2d6e67ab (diff)
libxtables: Integrate getethertype.c from xtables core
This moves getethertype.c into libxtables so that both extensions and xtables-nft-multi may use the implementations therein. New users are libebt_arp and libebt_vlan which drop their own duplicated implementations of getethertypebyname() for the shared one. This change originated from a covscan report of extensions' implementations not checking fopen() return value which should be implicitly fixed by this as well. Signed-off-by: Phil Sutter <phil@nwl.cc> Signed-off-by: Florian Westphal <fw@strlen.de>
Diffstat (limited to 'iptables/getethertype.c')
-rw-r--r--iptables/getethertype.c161
1 files changed, 0 insertions, 161 deletions
diff --git a/iptables/getethertype.c b/iptables/getethertype.c
deleted file mode 100644
index 027ef4ad..00000000
--- a/iptables/getethertype.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
-* getethertype.c
-*
-* This file was part of the NYS Library.
-*
-** The NYS Library is free software; you can redistribute it and/or
-** modify it under the terms of the GNU Library General Public License as
-** published by the Free Software Foundation; either version 2 of the
-** License, or (at your option) any later version.
-*
-* This program is free software; you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation; either version 2 of the License, or
-* (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-/********************************************************************
-* Description: Ethertype name service switch and the ethertypes
-* database access functions
-* Author: Nick Fedchik <fnm@ukrsat.com>
-* Checker: Bart De Schuymer <bdschuym@pandora.be>
-* Origin: uClibc-0.9.16/libc/inet/getproto.c
-* Created at: Mon Nov 11 12:20:11 EET 2002
-********************************************************************/
-
-#include <ctype.h>
-#include <features.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <netinet/ether.h>
-#include <net/ethernet.h>
-
-#include <ebtables/ethernetdb.h>
-
-#define MAXALIASES 35
-
-static FILE *etherf = NULL;
-static char line[BUFSIZ + 1];
-static struct ethertypeent et_ent;
-static char *ethertype_aliases[MAXALIASES];
-static int ethertype_stayopen;
-
-void setethertypeent(int f)
-{
- if (etherf == NULL)
- etherf = fopen(_PATH_ETHERTYPES, "r");
- else
- rewind(etherf);
- ethertype_stayopen |= f;
-}
-
-void endethertypeent(void)
-{
- if (etherf) {
- fclose(etherf);
- etherf = NULL;
- }
- ethertype_stayopen = 0;
-}
-
-struct ethertypeent *getethertypeent(void)
-{
- char *e;
- char *endptr;
- register char *cp, **q;
-
- if (etherf == NULL
- && (etherf = fopen(_PATH_ETHERTYPES, "r")) == NULL) {
- return (NULL);
- }
-
-again:
- if ((e = fgets(line, BUFSIZ, etherf)) == NULL) {
- return (NULL);
- }
- if (*e == '#')
- goto again;
- cp = strpbrk(e, "#\n");
- if (cp == NULL)
- goto again;
- *cp = '\0';
- et_ent.e_name = e;
- cp = strpbrk(e, " \t");
- if (cp == NULL)
- goto again;
- *cp++ = '\0';
- while (*cp == ' ' || *cp == '\t')
- cp++;
- e = strpbrk(cp, " \t");
- if (e != NULL)
- *e++ = '\0';
-// Check point
- et_ent.e_ethertype = strtol(cp, &endptr, 16);
- if (*endptr != '\0'
- || (et_ent.e_ethertype < ETH_ZLEN
- || et_ent.e_ethertype > 0xFFFF))
- goto again; // Skip invalid etherproto type entry
- q = et_ent.e_aliases = ethertype_aliases;
- if (e != NULL) {
- cp = e;
- while (cp && *cp) {
- if (*cp == ' ' || *cp == '\t') {
- cp++;
- continue;
- }
- if (q < &ethertype_aliases[MAXALIASES - 1])
- *q++ = cp;
- cp = strpbrk(cp, " \t");
- if (cp != NULL)
- *cp++ = '\0';
- }
- }
- *q = NULL;
- return (&et_ent);
-}
-
-
-struct ethertypeent *getethertypebyname(const char *name)
-{
- register struct ethertypeent *e;
- register char **cp;
-
- setethertypeent(ethertype_stayopen);
- while ((e = getethertypeent()) != NULL) {
- if (strcasecmp(e->e_name, name) == 0)
- break;
- for (cp = e->e_aliases; *cp != 0; cp++)
- if (strcasecmp(*cp, name) == 0)
- goto found;
- }
-found:
- if (!ethertype_stayopen)
- endethertypeent();
- return (e);
-}
-
-struct ethertypeent *getethertypebynumber(int type)
-{
- register struct ethertypeent *e;
-
- setethertypeent(ethertype_stayopen);
- while ((e = getethertypeent()) != NULL)
- if (e->e_ethertype == type)
- break;
- if (!ethertype_stayopen)
- endethertypeent();
- return (e);
-}