#include "env-util.h"
#include "errno-util.h"
#include "fd-util.h"
+#include "log.h"
#include "macro.h"
#include "nss-systemd.h"
#include "nss-util.h"
.mutex = PTHREAD_MUTEX_INITIALIZER
};
+static void setup_logging(void) {
+ /* We need a dummy function because log_parse_environment is a macro. */
+ log_parse_environment();
+}
+
+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_GETPW_PROTOTYPES(systemd);
NSS_GETGR_PROTOTYPES(systemd);
NSS_PWENT_PROTOTYPES(systemd);
int e;
PROTECT_ERRNO;
- BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+ NSS_ENTRYPOINT_BEGIN;
assert(name);
assert(pwd);
int e;
PROTECT_ERRNO;
- BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+ NSS_ENTRYPOINT_BEGIN;
assert(pwd);
assert(errnop);
int e;
PROTECT_ERRNO;
- BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+ NSS_ENTRYPOINT_BEGIN;
assert(name);
assert(gr);
int e;
PROTECT_ERRNO;
- BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+ NSS_ENTRYPOINT_BEGIN;
assert(gr);
assert(errnop);
static enum nss_status nss_systemd_endent(GetentData *p) {
PROTECT_ERRNO;
- BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+ NSS_ENTRYPOINT_BEGIN;
assert(p);
enum nss_status _nss_systemd_setpwent(int stayopen) {
PROTECT_ERRNO;
- BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+ NSS_ENTRYPOINT_BEGIN;
if (_nss_systemd_is_blocked())
return NSS_STATUS_NOTFOUND;
enum nss_status _nss_systemd_setgrent(int stayopen) {
PROTECT_ERRNO;
- BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+ NSS_ENTRYPOINT_BEGIN;
if (_nss_systemd_is_blocked())
return NSS_STATUS_NOTFOUND;
int r;
PROTECT_ERRNO;
- BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+ NSS_ENTRYPOINT_BEGIN;
assert(result);
assert(errnop);
int r;
PROTECT_ERRNO;
- BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+ NSS_ENTRYPOINT_BEGIN;
assert(result);
assert(errnop);
int r;
PROTECT_ERRNO;
- BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+ NSS_ENTRYPOINT_BEGIN;
assert(user_name);
assert(start);