diff options
-rw-r--r-- | compat/Makefile.am | 3 | ||||
-rw-r--r-- | compat/ether.c | 52 | ||||
-rw-r--r-- | compat/ether.h | 49 | ||||
-rw-r--r-- | configure.ac | 6 | ||||
-rw-r--r-- | nslcd/ether.c | 4 |
5 files changed, 108 insertions, 6 deletions
diff --git a/compat/Makefile.am b/compat/Makefile.am index d71d087..601b65b 100644 --- a/compat/Makefile.am +++ b/compat/Makefile.am @@ -24,7 +24,8 @@ AM_CFLAGS = -fPIC EXTRA_DIST = getopt_long.c getopt_long.h \ daemon.c daemon.h \ - pagectrl.c pagectrl.h + pagectrl.c pagectrl.h \ + ether.c ether.h libcompat_a_SOURCES = getpeercred.c getpeercred.h libcompat_a_LIBADD = @LIBOBJS@ diff --git a/compat/ether.c b/compat/ether.c new file mode 100644 index 0000000..1374f97 --- /dev/null +++ b/compat/ether.c @@ -0,0 +1,52 @@ +/* + ether.c - useful ethernet functions for systems lacking those + + Copyright (C) 2008 Arthur de Jong + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301 USA +*/ + +#include "config.h" + +#include <string.h> + +#include "ether.h" + +/* these functions are not really reentrant */ + +#ifndef HAVE_ETHER_NTOA_R +char *ether_ntoa_r(const struct ether_addr *addr,char *buf) +{ + char *tmp; + tmp=ether_ntoa(addr); + if (tmp==NULL) + return NULL; + strcpy(buf,tmp); + return buf; +} +#endif /* not HAVE_ETHER_NTOA_R */ + +#ifndef HAVE_ETHER_ATON_R +struct ether_addr *ether_aton_r(const char *asc,struct ether_addr *addr) +{ + struct ether_addr *tmp; + tmp=ether_aton(asc); + if (tmp==NULL) + return NULL; + memcpy(addr,tmp,sizeof(struct ether_addr)); + return addr; +} +#endif /* not HAVE_ETHER_ATON_R */ diff --git a/compat/ether.h b/compat/ether.h new file mode 100644 index 0000000..fc4a2ff --- /dev/null +++ b/compat/ether.h @@ -0,0 +1,49 @@ +/* + ether.h - ethernet definitions for systems lacking those + + Copyright (C) 2008 Arthur de Jong + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301 USA +*/ + +#ifndef _COMPAT_ETHER_H +#define _COMPAT_ETHER_H 1 + +#include <sys/types.h> +#include <sys/socket.h> +#include <net/if.h> +#include <netinet/in.h> +#include <netinet/if_ether.h> +#ifdef HAVE_NETINET_ETHER_H +#include <netinet/ether.h> +#endif + +#ifndef HAVE_STRUCT_ETHER_ADDR +struct ether_addr { + uint8_t ether_addr_octet[6]; +}; +#endif /* not HAVE_STRUCT_ETHER_ADDR */ + +#ifndef HAVE_ENTHER_NTOA_R +char *ether_ntoa_r(const struct ether_addr *addr,char *buf); +#endif /* not HAVE_ENTHER_NTOA_R */ + +#ifndef HAVE_ENTHER_NTOA_R +struct ether_addr *ether_aton_r(const char *asc,struct ether_addr *addr); +#endif /* not HAVE_ENTHER_NTOA_R */ + +#endif /* not _COMPAT_ETHER_H */ + diff --git a/configure.ac b/configure.ac index 7692a44..ba66a7e 100644 --- a/configure.ac +++ b/configure.ac @@ -189,18 +189,20 @@ LIBS="$save_LIBS" AC_CHECK_FUNCS(sigaction) AC_CHECK_FUNCS(snprintf) AC_CHECK_FUNCS(gethostbyname) -AC_CHECK_FUNCS(ether_aton_r) -AC_CHECK_FUNCS(ether_ntoa_r) AC_CHECK_FUNCS(setgroups) AC_CHECK_FUNCS(getpeereid) AC_CHECK_FUNCS(getpeerucred) AC_CHECK_FUNCS(__nss_configure_lookup) + # replace getopt_long() function if it is not on the system AC_REPLACE_FUNCS(getopt_long) # replace daemon() function if it is not on the system AC_SEARCH_LIBS(daemon,bsd) AC_REPLACE_FUNCS(daemon) +# replace ether_ntoa_r() and ether_aton_r() if they are not found +AC_CHECK_FUNCS(ether_aton_r ether_ntoa_r,,[AC_CHECK_FUNCS(ether_aton ether_ntoa) + AC_LIBOBJ(ether)]) # checks for types AC_C_CONST diff --git a/nslcd/ether.c b/nslcd/ether.c index e6d739c..3cfbc9e 100644 --- a/nslcd/ether.c +++ b/nslcd/ether.c @@ -28,9 +28,6 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#ifdef HAVE_NETINET_ETHER_H -#include <netinet/ether.h> -#endif #ifdef HAVE_STDINT_H #include <stdint.h> #endif /* HAVE_STDINT_H */ @@ -40,6 +37,7 @@ #include "myldap.h" #include "cfg.h" #include "attmap.h" +#include "compat/ether.h" #ifndef HAVE_STRUCT_ETHER_ADDR struct ether_addr { |