Re: NIS API changes
- From: Dan Williams <dcbw redhat com>
- To: tambet gmail com
- Cc: networkmanager-list gnome org
- Subject: Re: NIS API changes
- Date: Thu, 07 Aug 2008 16:57:29 -0400
On Thu, 2008-08-07 at 16:53 -0400, Dan Williams wrote:
> Hi,
>
> Specifically, the "nis-domainname" and "nis-servers" properties have
> been removed from the NMIP4Config object as exported over D-Bus and from
> libnm-glib. I've removed any code dealing with NIS from NM itself; this
> is better handled through dispatcher scripts.
>
> The NIS information in reality only comes via DHCP, and thus doesn't
> need to be composited with anything. I've attached a compile-tested
> dispatcher script that moves the code that was previously in
> NetworkManagerSuSE.c into a standalone helper. To enable this, I
> earlier committed functionality in the dispatcher to dump available DHCP
> options into the dispatcher script environment.
This time with the attachment...
Dan
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include "shvar.h"
#define SYSCONFDIR "/etc"
static void
update_nis (void)
{
shvarFile *file;
char *nis_domain, *buf, *tmp, *name;
nis_domain = getenv ("DHCP4_NIS_DOMAIN");
name = g_strdup_printf (SYSCONFDIR"/sysconfig/network/dhcp");
file = svNewFile (name);
g_free (name);
if (!file)
return;
buf = svGetValue (file, "DHCLIENT_SET_DOMAINNAME");
if (!buf)
goto out_close;
if ((!strcmp (buf, "yes")) && nis_domain && (setdomainname (nis_domain, strlen (nis_domain)) < 0))
g_warning ("Could not set nis domain name.");
free (buf);
buf = svGetValue (file, "DHCLIENT_MODIFY_NIS_CONF");
if (!buf)
goto out_close;
if (strcmp (buf, "yes"))
goto out_free_buf;
tmp = getenv ("DHCP4_NIS_SERVERS");
if (tmp && strlen (tmp)) {
char **nis_servers, **p;
struct stat sb;
FILE *ypconf = NULL;
nis_servers = g_strsplit (tmp, " ", 0);
/* write out yp.conf and restart the daemon */
ypconf = fopen ("/etc/yp.conf", "w");
if (ypconf) {
fprintf (ypconf, "# generated by NetworkManager, do not edit!\n\n");
for (p = nis_servers; *p; p++) {
struct in_addr temp_addr;
char addr_buf[INET_ADDRSTRLEN+1];
if (inet_pton (AF_INET, *p, &temp_addr) > 0)
fprintf (ypconf, "domain %s server %s\n", nis_domain, *p);
else
g_warning ("%s: error validating IP4 address %s", __func__, *p);
}
fprintf (ypconf, "\n");
fclose (ypconf);
} else
g_warning ("Could not commit NIS changes to /etc/yp.conf.");
g_strfreev (nis_servers);
if (stat ("/usr/sbin/rcautofs", &sb) != -1) {
g_message ("Restarting autofs.");
system ("/usr/sbin/rcautofs reload");
}
}
out_free_buf:
free (buf);
out_close:
svCloseFile (file);
}
int main (int argc, char *argv[])
{
const char *iface;
const char *action;
if (argc < 3)
return 1;
iface = argv[1];
action = argv[2];
if (strcmp (action, "up"))
update_nis ();
return 0;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]