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]