dns: send NIS servers and domain to SUSE's netconfig
This commit is contained in:
@@ -105,6 +105,8 @@ typedef struct {
|
|||||||
GPtrArray *nameservers;
|
GPtrArray *nameservers;
|
||||||
const char *domain;
|
const char *domain;
|
||||||
GPtrArray *searches;
|
GPtrArray *searches;
|
||||||
|
const char *nis_domain;
|
||||||
|
GPtrArray *nis_servers;
|
||||||
} NMResolvConfData;
|
} NMResolvConfData;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -155,6 +157,23 @@ merge_one_ip4_config (NMResolvConfData *rc, NMIP4Config *src)
|
|||||||
num = nm_ip4_config_get_num_searches (src);
|
num = nm_ip4_config_get_num_searches (src);
|
||||||
for (i = 0; i < num; i++)
|
for (i = 0; i < num; i++)
|
||||||
add_string_item (rc->searches, nm_ip4_config_get_search (src, i));
|
add_string_item (rc->searches, nm_ip4_config_get_search (src, i));
|
||||||
|
|
||||||
|
/* NIS stuff */
|
||||||
|
num = nm_ip4_config_get_num_nis_servers (src);
|
||||||
|
for (i = 0; i < num; i++) {
|
||||||
|
struct in_addr addr;
|
||||||
|
char buf[INET_ADDRSTRLEN];
|
||||||
|
|
||||||
|
addr.s_addr = nm_ip4_config_get_nis_server (src, i);
|
||||||
|
if (inet_ntop (AF_INET, &addr, buf, INET_ADDRSTRLEN) > 0)
|
||||||
|
add_string_item (rc->nis_servers, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nm_ip4_config_get_nis_domain (src)) {
|
||||||
|
/* FIXME: handle multiple domains */
|
||||||
|
if (!rc->nis_domain)
|
||||||
|
rc->nis_domain = nm_ip4_config_get_nis_domain (src);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -246,6 +265,8 @@ static gboolean
|
|||||||
dispatch_netconfig (const char *domain,
|
dispatch_netconfig (const char *domain,
|
||||||
char **searches,
|
char **searches,
|
||||||
char **nameservers,
|
char **nameservers,
|
||||||
|
const char *nis_domain,
|
||||||
|
char **nis_servers,
|
||||||
const char *iface,
|
const char *iface,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
@@ -290,6 +311,15 @@ dispatch_netconfig (const char *domain,
|
|||||||
g_free (str);
|
g_free (str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (nis_domain)
|
||||||
|
write_to_netconfig (fd, "NISDOMAIN", nis_domain);
|
||||||
|
|
||||||
|
if (nis_servers) {
|
||||||
|
str = g_strjoinv (" ", nis_servers);
|
||||||
|
write_to_netconfig (fd, "NISSERVERS", str);
|
||||||
|
g_free (str);
|
||||||
|
}
|
||||||
|
|
||||||
close (fd);
|
close (fd);
|
||||||
|
|
||||||
/* Wait until the process exits */
|
/* Wait until the process exits */
|
||||||
@@ -509,8 +539,10 @@ rewrite_resolv_conf (NMNamedManager *mgr, const char *iface, GError **error)
|
|||||||
NMResolvConfData rc;
|
NMResolvConfData rc;
|
||||||
GSList *iter;
|
GSList *iter;
|
||||||
const char *domain = NULL;
|
const char *domain = NULL;
|
||||||
|
const char *nis_domain = NULL;
|
||||||
char **searches = NULL;
|
char **searches = NULL;
|
||||||
char **nameservers = NULL;
|
char **nameservers = NULL;
|
||||||
|
char **nis_servers = NULL;
|
||||||
int num, i, len;
|
int num, i, len;
|
||||||
gboolean success = FALSE;
|
gboolean success = FALSE;
|
||||||
|
|
||||||
@@ -527,6 +559,7 @@ rewrite_resolv_conf (NMNamedManager *mgr, const char *iface, GError **error)
|
|||||||
rc.nameservers = g_ptr_array_new ();
|
rc.nameservers = g_ptr_array_new ();
|
||||||
rc.domain = NULL;
|
rc.domain = NULL;
|
||||||
rc.searches = g_ptr_array_new ();
|
rc.searches = g_ptr_array_new ();
|
||||||
|
rc.nis_servers = g_ptr_array_new ();
|
||||||
|
|
||||||
if (priv->ip4_vpn_config)
|
if (priv->ip4_vpn_config)
|
||||||
merge_one_ip4_config (&rc, priv->ip4_vpn_config);
|
merge_one_ip4_config (&rc, priv->ip4_vpn_config);
|
||||||
@@ -595,13 +628,24 @@ rewrite_resolv_conf (NMNamedManager *mgr, const char *iface, GError **error)
|
|||||||
} else
|
} else
|
||||||
g_ptr_array_free (rc.nameservers, TRUE);
|
g_ptr_array_free (rc.nameservers, TRUE);
|
||||||
|
|
||||||
|
if (rc.nis_servers->len) {
|
||||||
|
g_ptr_array_add (rc.nis_servers, NULL);
|
||||||
|
nis_servers = (char **) g_ptr_array_free (rc.nis_servers, FALSE);
|
||||||
|
} else
|
||||||
|
g_ptr_array_free (rc.nis_servers, TRUE);
|
||||||
|
|
||||||
|
nis_domain = rc.nis_domain;
|
||||||
|
|
||||||
#ifdef RESOLVCONF_PATH
|
#ifdef RESOLVCONF_PATH
|
||||||
success = dispatch_resolvconf (domain, searches, nameservers, iface, error);
|
success = dispatch_resolvconf (domain, searches, nameservers, iface, error);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef TARGET_SUSE
|
#ifdef TARGET_SUSE
|
||||||
if (success == FALSE)
|
if (success == FALSE) {
|
||||||
success = dispatch_netconfig (domain, searches, nameservers, iface, error);
|
success = dispatch_netconfig (domain, searches, nameservers,
|
||||||
|
nis_domain, nis_servers,
|
||||||
|
iface, error);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (success == FALSE)
|
if (success == FALSE)
|
||||||
@@ -614,6 +658,8 @@ rewrite_resolv_conf (NMNamedManager *mgr, const char *iface, GError **error)
|
|||||||
g_strfreev (searches);
|
g_strfreev (searches);
|
||||||
if (nameservers)
|
if (nameservers)
|
||||||
g_strfreev (nameservers);
|
g_strfreev (nameservers);
|
||||||
|
if (nis_servers)
|
||||||
|
g_strfreev (nis_servers);
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user