From c9fdc26e96493175668fbde61a04fc70abff300d Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 10 Jul 2014 23:33:55 +0200 Subject: [PATCH] nss-myhostname: move NSS boilerplate to nss-util.h --- Makefile.am | 3 +- src/nss-myhostname/nss-myhostname.c | 97 ++-------------------- src/nss-myhostname/nss-myhostname.sym | 6 +- src/shared/nss-util.h | 114 ++++++++++++++++++++++++++ 4 files changed, 125 insertions(+), 95 deletions(-) create mode 100644 src/shared/nss-util.h diff --git a/Makefile.am b/Makefile.am index 2dd36c8f0..5c6c0c11b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -836,7 +836,8 @@ libsystemd_shared_la_SOURCES = \ src/shared/copy.c \ src/shared/copy.h \ src/shared/base-filesystem.c \ - src/shared/base-filesystem.h + src/shared/base-filesystem.h \ + src/shared/nss-util.h nodist_libsystemd_shared_la_SOURCES = \ src/shared/errno-from-name.h \ diff --git a/src/nss-myhostname/nss-myhostname.c b/src/nss-myhostname/nss-myhostname.c index 15a35f302..06bd842fc 100644 --- a/src/nss-myhostname/nss-myhostname.c +++ b/src/nss-myhostname/nss-myhostname.c @@ -32,6 +32,8 @@ #include "local-addresses.h" #include "macro.h" +#include "nss-util.h" +#include "util.h" /* Ensure that glibc's assert is used. We cannot use assert from macro.h, as * libnss_myhostname will be linked into arbitrary programs which will, in turn @@ -47,49 +49,8 @@ #define LOCALADDRESS_IPV6 &in6addr_loopback #define LOOPBACK_INTERFACE "lo" -enum nss_status _nss_myhostname_gethostbyname4_r( - const char *name, - struct gaih_addrtuple **pat, - char *buffer, size_t buflen, - int *errnop, int *h_errnop, - int32_t *ttlp) _public_; - -enum nss_status _nss_myhostname_gethostbyname3_r( - const char *name, - int af, - struct hostent *host, - char *buffer, size_t buflen, - int *errnop, int *h_errnop, - int32_t *ttlp, - char **canonp) _public_; - -enum nss_status _nss_myhostname_gethostbyname2_r( - const char *name, - int af, - struct hostent *host, - char *buffer, size_t buflen, - int *errnop, int *h_errnop) _public_; - -enum nss_status _nss_myhostname_gethostbyname_r( - const char *name, - struct hostent *host, - char *buffer, size_t buflen, - int *errnop, int *h_errnop) _public_; - -enum nss_status _nss_myhostname_gethostbyaddr2_r( - const void* addr, socklen_t len, - int af, - struct hostent *host, - char *buffer, size_t buflen, - int *errnop, int *h_errnop, - int32_t *ttlp) _public_; - -enum nss_status _nss_myhostname_gethostbyaddr_r( - const void* addr, socklen_t len, - int af, - struct hostent *host, - char *buffer, size_t buflen, - int *errnop, int *h_errnop) _public_; +NSS_GETHOSTBYNAME_PROTOTYPES(myhostname); +NSS_GETHOSTBYADDR_PROTOTYPES(myhostname); enum nss_status _nss_myhostname_gethostbyname4_r( const char *name, @@ -411,39 +372,6 @@ enum nss_status _nss_myhostname_gethostbyname3_r( canonp); } -enum nss_status _nss_myhostname_gethostbyname2_r( - const char *name, - int af, - struct hostent *host, - char *buffer, size_t buflen, - int *errnop, int *h_errnop) { - - return _nss_myhostname_gethostbyname3_r( - name, - af, - host, - buffer, buflen, - errnop, h_errnop, - NULL, - NULL); -} - -enum nss_status _nss_myhostname_gethostbyname_r( - const char *name, - struct hostent *host, - char *buffer, size_t buflen, - int *errnop, int *h_errnop) { - - return _nss_myhostname_gethostbyname3_r( - name, - AF_UNSPEC, - host, - buffer, buflen, - errnop, h_errnop, - NULL, - NULL); -} - enum nss_status _nss_myhostname_gethostbyaddr2_r( const void* addr, socklen_t len, int af, @@ -538,18 +466,5 @@ found: } -enum nss_status _nss_myhostname_gethostbyaddr_r( - const void* addr, socklen_t len, - int af, - struct hostent *host, - char *buffer, size_t buflen, - int *errnop, int *h_errnop) { - - return _nss_myhostname_gethostbyaddr2_r( - addr, len, - af, - host, - buffer, buflen, - errnop, h_errnop, - NULL); -} +NSS_GETHOSTBYNAME_FALLBACKS(myhostname); +NSS_GETHOSTBYADDR_FALLBACKS(myhostname); diff --git a/src/nss-myhostname/nss-myhostname.sym b/src/nss-myhostname/nss-myhostname.sym index dcfc2e400..78646c38b 100644 --- a/src/nss-myhostname/nss-myhostname.sym +++ b/src/nss-myhostname/nss-myhostname.sym @@ -9,11 +9,11 @@ { global: - _nss_myhostname_gethostbyaddr2_r; - _nss_myhostname_gethostbyaddr_r; + _nss_myhostname_gethostbyname_r; _nss_myhostname_gethostbyname2_r; _nss_myhostname_gethostbyname3_r; _nss_myhostname_gethostbyname4_r; - _nss_myhostname_gethostbyname_r; + _nss_myhostname_gethostbyaddr_r; + _nss_myhostname_gethostbyaddr2_r; local: *; }; diff --git a/src/shared/nss-util.h b/src/shared/nss-util.h new file mode 100644 index 000000000..2c897d852 --- /dev/null +++ b/src/shared/nss-util.h @@ -0,0 +1,114 @@ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ + +#pragma once + +/*** + This file is part of systemd. + + Copyright 2014 Lennart Poettering + + systemd 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. + + systemd 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 systemd; If not, see . +***/ + +#include +#include + +#define NSS_GETHOSTBYNAME_PROTOTYPES(module) \ +enum nss_status _nss_##module##_gethostbyname4_r( \ + const char *name, \ + struct gaih_addrtuple **pat, \ + char *buffer, size_t buflen, \ + int *errnop, int *h_errnop, \ + int32_t *ttlp) _public_; \ +enum nss_status _nss_##module##_gethostbyname3_r( \ + const char *name, \ + int af, \ + struct hostent *host, \ + char *buffer, size_t buflen, \ + int *errnop, int *h_errnop, \ + int32_t *ttlp, \ + char **canonp) _public_; \ +enum nss_status _nss_##module##_gethostbyname2_r( \ + const char *name, \ + int af, \ + struct hostent *host, \ + char *buffer, size_t buflen, \ + int *errnop, int *h_errnop) _public_; \ +enum nss_status _nss_##module##_gethostbyname_r( \ + const char *name, \ + struct hostent *host, \ + char *buffer, size_t buflen, \ + int *errnop, int *h_errnop) _public_ + +#define NSS_GETHOSTBYADDR_PROTOTYPES(module) \ +enum nss_status _nss_##module##_gethostbyaddr2_r( \ + const void* addr, socklen_t len, \ + int af, \ + struct hostent *host, \ + char *buffer, size_t buflen, \ + int *errnop, int *h_errnop, \ + int32_t *ttlp) _public_; \ +enum nss_status _nss_##module##_gethostbyaddr_r( \ + const void* addr, socklen_t len, \ + int af, \ + struct hostent *host, \ + char *buffer, size_t buflen, \ + int *errnop, int *h_errnop) _public_ + +#define NSS_GETHOSTBYNAME_FALLBACKS(module) \ +enum nss_status _nss_##module##_gethostbyname2_r( \ + const char *name, \ + int af, \ + struct hostent *host, \ + char *buffer, size_t buflen, \ + int *errnop, int *h_errnop) { \ + return _nss_##module##_gethostbyname3_r( \ + name, \ + af, \ + host, \ + buffer, buflen, \ + errnop, h_errnop, \ + NULL, \ + NULL); \ +} \ +enum nss_status _nss_##module##_gethostbyname_r( \ + const char *name, \ + struct hostent *host, \ + char *buffer, size_t buflen, \ + int *errnop, int *h_errnop) { \ + return _nss_##module##_gethostbyname3_r( \ + name, \ + AF_UNSPEC, \ + host, \ + buffer, buflen, \ + errnop, h_errnop, \ + NULL, \ + NULL); \ +} + +#define NSS_GETHOSTBYADDR_FALLBACKS(module) \ +enum nss_status _nss_##module##_gethostbyaddr_r( \ + const void* addr, socklen_t len, \ + int af, \ + struct hostent *host, \ + char *buffer, size_t buflen, \ + int *errnop, int *h_errnop) { \ + return _nss_##module##_gethostbyaddr2_r( \ + addr, len, \ + af, \ + host, \ + buffer, buflen, \ + errnop, h_errnop, \ + NULL); \ +} -- 2.30.2