summaryrefslogtreecommitdiff
path: root/src/nss-mymachines/nss-mymachines.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2016-01-26 22:34:46 +0100
committerLennart Poettering <lennart@poettering.net>2016-01-27 02:22:58 +0100
commit0c5eb0562abec6f845f07c30b2ad2515900ec1e5 (patch)
tree10a05b9191642ce96812a96ed53031b9338f3528 /src/nss-mymachines/nss-mymachines.c
parentfccd4b67b5fd296cb5840d1b8e0ea8455cb6a1ed (diff)
nss: block various signals while running NSS lookups
Let's make sure our poll() calls don't get interrupted where they shouldn't (SIGALRM, ...), but allow them to be interrupted where they should (SIGINT, ...). Fixes #1965
Diffstat (limited to 'src/nss-mymachines/nss-mymachines.c')
-rw-r--r--src/nss-mymachines/nss-mymachines.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/nss-mymachines/nss-mymachines.c b/src/nss-mymachines/nss-mymachines.c
index dcdbc31a78..3cd29500d0 100644
--- a/src/nss-mymachines/nss-mymachines.c
+++ b/src/nss-mymachines/nss-mymachines.c
@@ -31,6 +31,7 @@
#include "in-addr-util.h"
#include "macro.h"
#include "nss-util.h"
+#include "signal-util.h"
#include "string-util.h"
#include "user-util.h"
#include "util.h"
@@ -94,6 +95,8 @@ enum nss_status _nss_mymachines_gethostbyname4_r(
char *r_name;
int n_ifindices, r;
+ BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+
assert(name);
assert(pat);
assert(buffer);
@@ -242,6 +245,8 @@ enum nss_status _nss_mymachines_gethostbyname3_r(
size_t l, idx, ms, alen;
int r;
+ BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+
assert(name);
assert(result);
assert(buffer);
@@ -404,6 +409,8 @@ enum nss_status _nss_mymachines_getpwnam_r(
size_t l;
int r;
+ BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+
assert(name);
assert(pwd);
@@ -491,6 +498,8 @@ enum nss_status _nss_mymachines_getpwuid_r(
uint32_t mapped;
int r;
+ BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+
if (!uid_is_valid(uid)) {
r = -EINVAL;
goto fail;
@@ -564,6 +573,8 @@ enum nss_status _nss_mymachines_getgrnam_r(
size_t l;
int r;
+ BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+
assert(name);
assert(gr);
@@ -649,6 +660,8 @@ enum nss_status _nss_mymachines_getgrgid_r(
uint32_t mapped;
int r;
+ BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+
if (!gid_is_valid(gid)) {
r = -EINVAL;
goto fail;