#include <errno.h>
#include <netdb.h>
#include <nss.h>
+#include <pthread.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include "strv.h"
#include "varlink.h"
+static JsonDispatchFlags json_dispatch_flags = 0;
+
+static void setup_logging(void) {
+ log_parse_environment();
+
+ if (DEBUG_LOGGING)
+ json_dispatch_flags = JSON_LOG;
+}
+
+static void setup_logging_once(void) {
+ static pthread_once_t once = PTHREAD_ONCE_INIT;
+ assert_se(pthread_once(&once, setup_logging) == 0);
+}
+
+#define NSS_ENTRYPOINT_BEGIN \
+ BLOCK_SIGNALS(NSS_SIGNALS_BLOCK); \
+ setup_logging_once()
+
NSS_GETHOSTBYNAME_PROTOTYPES(resolve);
NSS_GETHOSTBYADDR_PROTOTYPES(resolve);
int r;
PROTECT_ERRNO;
- BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+ NSS_ENTRYPOINT_BEGIN;
assert(name);
assert(pat);
goto fail;
}
- r = json_dispatch(rparams, resolve_hostname_reply_dispatch_table, NULL, 0, &p);
+ r = json_dispatch(rparams, resolve_hostname_reply_dispatch_table, NULL, json_dispatch_flags, &p);
if (r < 0)
goto fail;
if (json_variant_is_blank_object(p.addresses))
JSON_VARIANT_ARRAY_FOREACH(entry, p.addresses) {
AddressParameters q = {};
- r = json_dispatch(entry, address_parameters_dispatch_table, NULL, 0, &q);
+ r = json_dispatch(entry, address_parameters_dispatch_table, NULL, json_dispatch_flags, &q);
if (r < 0)
goto fail;
JSON_VARIANT_ARRAY_FOREACH(entry, p.addresses) {
AddressParameters q = {};
- r = json_dispatch(entry, address_parameters_dispatch_table, NULL, 0, &q);
+ r = json_dispatch(entry, address_parameters_dispatch_table, NULL, json_dispatch_flags, &q);
if (r < 0)
goto fail;
int r;
PROTECT_ERRNO;
- BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+ NSS_ENTRYPOINT_BEGIN;
assert(name);
assert(result);
goto fail;
}
- r = json_dispatch(rparams, resolve_hostname_reply_dispatch_table, NULL, 0, &p);
+ r = json_dispatch(rparams, resolve_hostname_reply_dispatch_table, NULL, json_dispatch_flags, &p);
if (r < 0)
goto fail;
if (json_variant_is_blank_object(p.addresses))
JSON_VARIANT_ARRAY_FOREACH(entry, p.addresses) {
AddressParameters q = {};
- r = json_dispatch(entry, address_parameters_dispatch_table, NULL, 0, &q);
+ r = json_dispatch(entry, address_parameters_dispatch_table, NULL, json_dispatch_flags, &q);
if (r < 0)
goto fail;
JSON_VARIANT_ARRAY_FOREACH(entry, p.addresses) {
AddressParameters q = {};
- r = json_dispatch(entry, address_parameters_dispatch_table, NULL, 0, &q);
+ r = json_dispatch(entry, address_parameters_dispatch_table, NULL, json_dispatch_flags, &q);
if (r < 0)
goto fail;
int r;
PROTECT_ERRNO;
- BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+ NSS_ENTRYPOINT_BEGIN;
assert(addr);
assert(result);
goto fail;
}
- r = json_dispatch(rparams, resolve_address_reply_dispatch_table, NULL, 0, &p);
+ r = json_dispatch(rparams, resolve_address_reply_dispatch_table, NULL, json_dispatch_flags, &p);
if (r < 0)
goto fail;
if (json_variant_is_blank_object(p.names))
JSON_VARIANT_ARRAY_FOREACH(entry, p.names) {
_cleanup_(name_parameters_destroy) NameParameters q = {};
- r = json_dispatch(entry, name_parameters_dispatch_table, NULL, 0, &q);
+ r = json_dispatch(entry, name_parameters_dispatch_table, NULL, json_dispatch_flags, &q);
if (r < 0)
goto fail;
size_t l;
char *z;
- r = json_dispatch(entry, name_parameters_dispatch_table, NULL, 0, &q);
+ r = json_dispatch(entry, name_parameters_dispatch_table, NULL, json_dispatch_flags, &q);
if (r < 0)
goto fail;