summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStephen Gallagher <sgallagh@redhat.com>2012-11-27 15:51:05 -0500
committerJakub Hrozek <jhrozek@redhat.com>2012-12-02 21:57:48 +0100
commitff5934cbe9c02ca3e3d2a851460339f3126202b7 (patch)
treef4855a4f98905a02e032e8ad844d4d64611d14a2 /src
parentb510d909cbe8d8216b60ee070730dd5c41294303 (diff)
downloadsssd-ff5934cbe9c02ca3e3d2a851460339f3126202b7.tar.gz
sssd-ff5934cbe9c02ca3e3d2a851460339f3126202b7.tar.bz2
sssd-ff5934cbe9c02ca3e3d2a851460339f3126202b7.zip
IPA: Handle bad results from c-ares lookup
In some situations, the c-ares lookup can return NULL instead of a list of addresses. In this situation, we need to avoid dereferencing NULL. This patch adds a log message and sets the count to zero so it is handled appropriately below.
Diffstat (limited to 'src')
-rw-r--r--src/providers/ipa/ipa_dyndns.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/providers/ipa/ipa_dyndns.c b/src/providers/ipa/ipa_dyndns.c
index 3f430a33..9d7a5b6c 100644
--- a/src/providers/ipa/ipa_dyndns.c
+++ b/src/providers/ipa/ipa_dyndns.c
@@ -733,7 +733,17 @@ ipa_dyndns_update_get_addrs_done(struct tevent_req *subreq)
/* EOK */
- for (count=0; rhostent->addr_list[count]; count++);
+ if (rhostent->addr_list) {
+ for (count=0; rhostent->addr_list[count]; count++);
+ } else {
+ /* The address list is NULL. This is probably a bug in
+ * c-ares, but we need to handle it gracefully.
+ */
+ DEBUG(SSSDBG_MINOR_FAILURE,
+ ("Lookup of [%s] returned no addresses. Skipping.\n",
+ rhostent->name));
+ count = 0;
+ }
state->addrlist = talloc_realloc(state, state->addrlist, char *,
state->count + count + 1);