mirror of
https://github.com/systemd/systemd.git
synced 2025-03-14 04:58:28 +03:00
Merge pull request #17928 from keszybz/nss-logging
Enable logging in nss modules
This commit is contained in:
commit
ba9385d91f
@ -30,15 +30,16 @@ typedef struct StaticDestructor {
|
||||
_alignptr_ \
|
||||
/* Make sure this is not dropped from the image because not explicitly referenced */ \
|
||||
_used_ \
|
||||
/* Make sure that AddressSanitizer doesn't pad this variable: we want everything in this section packed next to each other so that we can enumerate it. */ \
|
||||
/* Make sure that AddressSanitizer doesn't pad this variable: we want everything in this section
|
||||
* packed next to each other so that we can enumerate it. */ \
|
||||
_variable_no_sanitize_address_ \
|
||||
static const StaticDestructor UNIQ_T(static_destructor_entry, uq) = { \
|
||||
.data = &(variable), \
|
||||
.destroy = UNIQ_T(static_destructor_wrapper, uq), \
|
||||
}
|
||||
|
||||
/* Beginning and end of our section listing the destructors. We define these as weak as we want this to work even if
|
||||
* there's not a single destructor is defined in which case the section will be missing. */
|
||||
/* Beginning and end of our section listing the destructors. We define these as weak as we want this to work
|
||||
* even if no destructors are defined and the section is missing. */
|
||||
extern const struct StaticDestructor _weak_ __start_SYSTEMD_STATIC_DESTRUCT[];
|
||||
extern const struct StaticDestructor _weak_ __stop_SYSTEMD_STATIC_DESTRUCT[];
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
#include <netdb.h>
|
||||
#include <nss.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#include "sd-bus.h"
|
||||
#include "sd-login.h"
|
||||
@ -14,12 +15,27 @@
|
||||
#include "format-util.h"
|
||||
#include "hostname-util.h"
|
||||
#include "in-addr-util.h"
|
||||
#include "log.h"
|
||||
#include "macro.h"
|
||||
#include "memory-util.h"
|
||||
#include "nss-util.h"
|
||||
#include "signal-util.h"
|
||||
#include "string-util.h"
|
||||
|
||||
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_GETHOSTBYNAME_PROTOTYPES(mymachines);
|
||||
NSS_GETPW_PROTOTYPES(mymachines);
|
||||
NSS_GETGR_PROTOTYPES(mymachines);
|
||||
@ -94,7 +110,7 @@ enum nss_status _nss_mymachines_gethostbyname4_r(
|
||||
int n_ifindices, r;
|
||||
|
||||
PROTECT_ERRNO;
|
||||
BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
|
||||
NSS_ENTRYPOINT_BEGIN;
|
||||
|
||||
assert(name);
|
||||
assert(pat);
|
||||
@ -244,7 +260,7 @@ enum nss_status _nss_mymachines_gethostbyname3_r(
|
||||
int r;
|
||||
|
||||
PROTECT_ERRNO;
|
||||
BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
|
||||
NSS_ENTRYPOINT_BEGIN;
|
||||
|
||||
assert(name);
|
||||
assert(result);
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include <errno.h>
|
||||
#include <netdb.h>
|
||||
#include <nss.h>
|
||||
#include <pthread.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
@ -17,6 +18,24 @@
|
||||
#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);
|
||||
|
||||
@ -183,7 +202,7 @@ enum nss_status _nss_resolve_gethostbyname4_r(
|
||||
int r;
|
||||
|
||||
PROTECT_ERRNO;
|
||||
BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
|
||||
NSS_ENTRYPOINT_BEGIN;
|
||||
|
||||
assert(name);
|
||||
assert(pat);
|
||||
@ -214,7 +233,7 @@ enum nss_status _nss_resolve_gethostbyname4_r(
|
||||
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))
|
||||
@ -223,7 +242,7 @@ enum nss_status _nss_resolve_gethostbyname4_r(
|
||||
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;
|
||||
|
||||
@ -260,7 +279,7 @@ enum nss_status _nss_resolve_gethostbyname4_r(
|
||||
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;
|
||||
|
||||
@ -327,7 +346,7 @@ enum nss_status _nss_resolve_gethostbyname3_r(
|
||||
int r;
|
||||
|
||||
PROTECT_ERRNO;
|
||||
BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
|
||||
NSS_ENTRYPOINT_BEGIN;
|
||||
|
||||
assert(name);
|
||||
assert(result);
|
||||
@ -361,7 +380,7 @@ enum nss_status _nss_resolve_gethostbyname3_r(
|
||||
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))
|
||||
@ -370,7 +389,7 @@ enum nss_status _nss_resolve_gethostbyname3_r(
|
||||
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;
|
||||
|
||||
@ -415,7 +434,7 @@ enum nss_status _nss_resolve_gethostbyname3_r(
|
||||
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;
|
||||
|
||||
@ -527,7 +546,7 @@ enum nss_status _nss_resolve_gethostbyaddr2_r(
|
||||
int r;
|
||||
|
||||
PROTECT_ERRNO;
|
||||
BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
|
||||
NSS_ENTRYPOINT_BEGIN;
|
||||
|
||||
assert(addr);
|
||||
assert(result);
|
||||
@ -565,7 +584,7 @@ enum nss_status _nss_resolve_gethostbyaddr2_r(
|
||||
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))
|
||||
@ -574,7 +593,7 @@ enum nss_status _nss_resolve_gethostbyaddr2_r(
|
||||
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;
|
||||
|
||||
@ -615,7 +634,7 @@ enum nss_status _nss_resolve_gethostbyaddr2_r(
|
||||
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;
|
||||
|
||||
|
@ -6,6 +6,7 @@
|
||||
#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"
|
||||
@ -72,6 +73,20 @@ static GetentData getgrent_data = {
|
||||
.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);
|
||||
@ -88,7 +103,7 @@ enum nss_status _nss_systemd_getpwnam_r(
|
||||
int e;
|
||||
|
||||
PROTECT_ERRNO;
|
||||
BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
|
||||
NSS_ENTRYPOINT_BEGIN;
|
||||
|
||||
assert(name);
|
||||
assert(pwd);
|
||||
@ -139,7 +154,7 @@ enum nss_status _nss_systemd_getpwuid_r(
|
||||
int e;
|
||||
|
||||
PROTECT_ERRNO;
|
||||
BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
|
||||
NSS_ENTRYPOINT_BEGIN;
|
||||
|
||||
assert(pwd);
|
||||
assert(errnop);
|
||||
@ -188,7 +203,7 @@ enum nss_status _nss_systemd_getgrnam_r(
|
||||
int e;
|
||||
|
||||
PROTECT_ERRNO;
|
||||
BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
|
||||
NSS_ENTRYPOINT_BEGIN;
|
||||
|
||||
assert(name);
|
||||
assert(gr);
|
||||
@ -236,7 +251,7 @@ enum nss_status _nss_systemd_getgrgid_r(
|
||||
int e;
|
||||
|
||||
PROTECT_ERRNO;
|
||||
BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
|
||||
NSS_ENTRYPOINT_BEGIN;
|
||||
|
||||
assert(gr);
|
||||
assert(errnop);
|
||||
@ -275,7 +290,7 @@ enum nss_status _nss_systemd_getgrgid_r(
|
||||
|
||||
static enum nss_status nss_systemd_endent(GetentData *p) {
|
||||
PROTECT_ERRNO;
|
||||
BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
|
||||
NSS_ENTRYPOINT_BEGIN;
|
||||
|
||||
assert(p);
|
||||
|
||||
@ -298,7 +313,7 @@ enum nss_status _nss_systemd_endgrent(void) {
|
||||
|
||||
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;
|
||||
@ -322,7 +337,7 @@ enum nss_status _nss_systemd_setpwent(int stayopen) {
|
||||
|
||||
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;
|
||||
@ -349,7 +364,7 @@ enum nss_status _nss_systemd_getpwent_r(
|
||||
int r;
|
||||
|
||||
PROTECT_ERRNO;
|
||||
BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
|
||||
NSS_ENTRYPOINT_BEGIN;
|
||||
|
||||
assert(result);
|
||||
assert(errnop);
|
||||
@ -396,7 +411,7 @@ enum nss_status _nss_systemd_getgrent_r(
|
||||
int r;
|
||||
|
||||
PROTECT_ERRNO;
|
||||
BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
|
||||
NSS_ENTRYPOINT_BEGIN;
|
||||
|
||||
assert(result);
|
||||
assert(errnop);
|
||||
@ -525,7 +540,7 @@ enum nss_status _nss_systemd_initgroups_dyn(
|
||||
int r;
|
||||
|
||||
PROTECT_ERRNO;
|
||||
BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
|
||||
NSS_ENTRYPOINT_BEGIN;
|
||||
|
||||
assert(user_name);
|
||||
assert(start);
|
||||
|
@ -3854,6 +3854,16 @@ int json_log_internal(
|
||||
"CONFIG_COLUMN=%u", source_column,
|
||||
LOG_MESSAGE("%s:%u:%u: %s", source, source_line, source_column, buffer),
|
||||
NULL);
|
||||
else if (source_line > 0 && source_column > 0)
|
||||
return log_struct_internal(
|
||||
LOG_REALM_PLUS_LEVEL(LOG_REALM_SYSTEMD, level),
|
||||
error,
|
||||
file, line, func,
|
||||
"MESSAGE_ID=" SD_MESSAGE_INVALID_CONFIGURATION_STR,
|
||||
"CONFIG_LINE=%u", source_line,
|
||||
"CONFIG_COLUMN=%u", source_column,
|
||||
LOG_MESSAGE("(string):%u:%u: %s", source_line, source_column, buffer),
|
||||
NULL);
|
||||
else
|
||||
return log_struct_internal(
|
||||
LOG_REALM_PLUS_LEVEL(LOG_REALM_SYSTEMD, level),
|
||||
|
Loading…
x
Reference in New Issue
Block a user