|
|
6cf099 |
From 65976fe3f9db1fc9581bb00060be38c48512b672 Mon Sep 17 00:00:00 2001
|
|
|
6cf099 |
From: Pavel Reichl <preichl@redhat.com>
|
|
|
6cf099 |
Date: Tue, 14 Jul 2015 04:21:34 -0400
|
|
|
6cf099 |
Subject: [PATCH 17/19] DYNDNS: special value '*' for dyndns_iface option
|
|
|
6cf099 |
|
|
|
6cf099 |
Option dyndns_iface has now special value '*' which implies that IPs
|
|
|
6cf099 |
from add interfaces should be sent during DDNS update.
|
|
|
6cf099 |
---
|
|
|
6cf099 |
src/man/sssd-ad.5.xml | 6 ++++--
|
|
|
6cf099 |
src/man/sssd-ipa.5.xml | 9 ++++-----
|
|
|
6cf099 |
src/providers/dp_dyndns.c | 20 ++++++++++++++++----
|
|
|
6cf099 |
3 files changed, 24 insertions(+), 11 deletions(-)
|
|
|
6cf099 |
|
|
|
6cf099 |
diff --git a/src/man/sssd-ad.5.xml b/src/man/sssd-ad.5.xml
|
|
|
6cf099 |
index ff43ea37066514a87934d07b141e680416dcc05b..3cbc10520098372d984d00425d03832d002d6672 100644
|
|
|
6cf099 |
--- a/src/man/sssd-ad.5.xml
|
|
|
6cf099 |
+++ b/src/man/sssd-ad.5.xml
|
|
|
6cf099 |
@@ -756,10 +756,12 @@ ad_gpo_map_deny = +my_pam_service
|
|
|
6cf099 |
Optional. Applicable only when dyndns_update
|
|
|
6cf099 |
is true. Choose the interface or a list of interfaces
|
|
|
6cf099 |
whose IP addresses should be used for dynamic DNS
|
|
|
6cf099 |
- updates.
|
|
|
6cf099 |
+ updates. Special value <quote>*</quote> implies that
|
|
|
6cf099 |
+ IPs from all interfaces should be used.
|
|
|
6cf099 |
</para>
|
|
|
6cf099 |
<para>
|
|
|
6cf099 |
- Default: Use the IP address of the AD LDAP connection
|
|
|
6cf099 |
+ Default: Use the IP addresses of the interface which
|
|
|
6cf099 |
+ is used for AD LDAP connection
|
|
|
6cf099 |
</para>
|
|
|
6cf099 |
<para>
|
|
|
6cf099 |
Example: dyndns_iface = em1, vnet1, vnet2
|
|
|
6cf099 |
diff --git a/src/man/sssd-ipa.5.xml b/src/man/sssd-ipa.5.xml
|
|
|
6cf099 |
index d450c2fadbb1713096ff766bf536702195cfd137..2e985991fde10827aff0e7c8e67f29a009683450 100644
|
|
|
6cf099 |
--- a/src/man/sssd-ipa.5.xml
|
|
|
6cf099 |
+++ b/src/man/sssd-ipa.5.xml
|
|
|
6cf099 |
@@ -168,10 +168,8 @@
|
|
|
6cf099 |
Optional. Applicable only when dyndns_update
|
|
|
6cf099 |
is true. Choose the interface or a list of interfaces
|
|
|
6cf099 |
whose IP addresses should be used for dynamic DNS
|
|
|
6cf099 |
- updates.
|
|
|
6cf099 |
- </para>
|
|
|
6cf099 |
- <para>
|
|
|
6cf099 |
- NOTE: This option currently supports multiple interfaces.
|
|
|
6cf099 |
+ updates. Special value <quote>*</quote> implies that
|
|
|
6cf099 |
+ IPs from all interfaces should be used.
|
|
|
6cf099 |
</para>
|
|
|
6cf099 |
<para>
|
|
|
6cf099 |
NOTE: While it is still possible to use the old
|
|
|
6cf099 |
@@ -180,7 +178,8 @@
|
|
|
6cf099 |
in their config file.
|
|
|
6cf099 |
</para>
|
|
|
6cf099 |
<para>
|
|
|
6cf099 |
- Default: Use the IP address of the IPA LDAP connection
|
|
|
6cf099 |
+ Default: Use the IP addresses of the interface which
|
|
|
6cf099 |
+ is used for IPA LDAP connection
|
|
|
6cf099 |
</para>
|
|
|
6cf099 |
<para>
|
|
|
6cf099 |
Example: dyndns_iface = em1, vnet1, vnet2
|
|
|
6cf099 |
diff --git a/src/providers/dp_dyndns.c b/src/providers/dp_dyndns.c
|
|
|
6cf099 |
index 76562840ef1d427629e41617b871caaedab779d4..03389acfba13e566540ca8b0570c0d009173575f 100644
|
|
|
6cf099 |
--- a/src/providers/dp_dyndns.c
|
|
|
6cf099 |
+++ b/src/providers/dp_dyndns.c
|
|
|
6cf099 |
@@ -42,6 +42,9 @@
|
|
|
6cf099 |
#define DYNDNS_TIMEOUT 15
|
|
|
6cf099 |
#endif /* DYNDNS_TIMEOUT */
|
|
|
6cf099 |
|
|
|
6cf099 |
+/* MASK represents special value for matching all interfaces */
|
|
|
6cf099 |
+#define MASK "*"
|
|
|
6cf099 |
+
|
|
|
6cf099 |
struct sss_iface_addr {
|
|
|
6cf099 |
struct sss_iface_addr *next;
|
|
|
6cf099 |
struct sss_iface_addr *prev;
|
|
|
6cf099 |
@@ -171,6 +174,16 @@ ok_for_dns(struct sockaddr *sa)
|
|
|
6cf099 |
return true;
|
|
|
6cf099 |
}
|
|
|
6cf099 |
|
|
|
6cf099 |
+static bool supported_address_family(sa_family_t sa_family)
|
|
|
6cf099 |
+{
|
|
|
6cf099 |
+ return sa_family == AF_INET || sa_family == AF_INET6;
|
|
|
6cf099 |
+}
|
|
|
6cf099 |
+
|
|
|
6cf099 |
+static bool matching_name(const char *ifname, const char *ifname2)
|
|
|
6cf099 |
+{
|
|
|
6cf099 |
+ return (strcmp(MASK, ifname) == 0) || (strcasecmp(ifname, ifname2) == 0);
|
|
|
6cf099 |
+}
|
|
|
6cf099 |
+
|
|
|
6cf099 |
/* Collect IP addresses associated with an interface */
|
|
|
6cf099 |
errno_t
|
|
|
6cf099 |
sss_iface_addr_list_get(TALLOC_CTX *mem_ctx, const char *ifname,
|
|
|
6cf099 |
@@ -200,10 +213,9 @@ sss_iface_addr_list_get(TALLOC_CTX *mem_ctx, const char *ifname,
|
|
|
6cf099 |
if (!ifa->ifa_addr) continue;
|
|
|
6cf099 |
|
|
|
6cf099 |
/* Add IP addresses to the list */
|
|
|
6cf099 |
- if ((ifa->ifa_addr->sa_family == AF_INET ||
|
|
|
6cf099 |
- ifa->ifa_addr->sa_family == AF_INET6) &&
|
|
|
6cf099 |
- strcasecmp(ifa->ifa_name, ifname) == 0 &&
|
|
|
6cf099 |
- ok_for_dns(ifa->ifa_addr)) {
|
|
|
6cf099 |
+ if (supported_address_family(ifa->ifa_addr->sa_family)
|
|
|
6cf099 |
+ && matching_name(ifname, ifa->ifa_name)
|
|
|
6cf099 |
+ && ok_for_dns(ifa->ifa_addr)) {
|
|
|
6cf099 |
|
|
|
6cf099 |
/* Add this address to the IP address list */
|
|
|
6cf099 |
address = talloc_zero(mem_ctx, struct sss_iface_addr);
|
|
|
6cf099 |
--
|
|
|
6cf099 |
2.4.3
|
|
|
6cf099 |
|