diff options
author | Stephen Gallagher <sgallagh@redhat.com> | 2012-11-27 15:51:05 -0500 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2012-12-06 11:22:25 +0100 |
commit | c594c2e6423420c968761b0c95cec57441bbdcf4 (patch) | |
tree | dbb49af146ad41d3c40f31b6abf0cc798b7f3e66 /src | |
parent | f935805d67c3fef6c1660e446927993321a36eca (diff) | |
download | sssd-c594c2e6423420c968761b0c95cec57441bbdcf4.tar.gz sssd-c594c2e6423420c968761b0c95cec57441bbdcf4.tar.xz sssd-c594c2e6423420c968761b0c95cec57441bbdcf4.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.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/providers/ipa/ipa_dyndns.c b/src/providers/ipa/ipa_dyndns.c index 66515e840..22a16a11a 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); |