Example #1
0
int
ni_addrconf_lease_nis_data_from_xml(ni_addrconf_lease_t *lease, const xml_node_t *node)
{
	const xml_node_t *child, *gc;
	ni_nis_info_t *nis;

	if (!(nis = ni_nis_info_new()))
		return -1;

	if (lease->nis) {
		ni_nis_info_free(lease->nis);
		lease->nis = NULL;
	}

	nis->default_binding = NI_NISCONF_STATIC;
	for (child = node->children; child; child = child->next) {
		if (ni_string_eq(child->name, "default")) {
			for (gc = child->children; gc; gc = gc->next) {
				if (ni_string_eq(gc->name, "domain") &&
					!ni_string_empty(gc->cdata)) {
					ni_string_dup(&nis->domainname, gc->cdata);
				} else
				if (ni_string_eq(gc->name, "binding") &&
					ni_string_eq(gc->cdata, "broadcast")) {
					nis->default_binding = NI_NISCONF_BROADCAST;
				} else
				if (ni_string_eq(gc->name, "server") &&
					!ni_string_empty(gc->cdata)) {
					ni_string_array_append(&nis->default_servers,
								gc->cdata);
				}
			}
		} else
		if (ni_string_eq(child->name, "domain")) {
			if (__ni_addrconf_lease_nis_domain_from_xml(nis, child) != 0)
				continue;
		}
	}

	if (nis->default_binding == NI_NISCONF_STATIC &&
	    ni_string_empty(nis->domainname) &&
	    nis->default_servers.count == 0 &&
	    nis->domains.count == 0) {
		ni_nis_info_free(nis);
		return 1;
	}
	lease->nis = nis;
	return 0;
}
Example #2
0
void
ni_addrconf_lease_destroy(ni_addrconf_lease_t *lease)
{
	ni_addrconf_updater_free(&lease->updater);
	if (lease->old) {
		ni_addrconf_lease_free(lease->old);
		lease->old = NULL;
	}

	ni_string_free(&lease->owner);
	ni_string_free(&lease->hostname);

	ni_address_list_destroy(&lease->addrs);
	ni_route_tables_destroy(&lease->routes);

	if (lease->nis) {
		ni_nis_info_free(lease->nis);
		lease->nis = NULL;
	}
	if (lease->resolver) {
		ni_resolver_info_free(lease->resolver);
		lease->resolver = NULL;
	}

	ni_string_array_destroy(&lease->ntp_servers);
	ni_string_array_destroy(&lease->nds_servers);
	ni_string_array_destroy(&lease->nds_context);
	ni_string_free(&lease->nds_tree);
	ni_string_array_destroy(&lease->netbios_name_servers);
	ni_string_array_destroy(&lease->netbios_dd_servers);
	ni_string_free(&lease->netbios_scope);
	ni_string_array_destroy(&lease->slp_servers);
	ni_string_array_destroy(&lease->slp_scopes);
	ni_string_array_destroy(&lease->sip_servers);
	ni_string_array_destroy(&lease->lpr_servers);
	ni_string_array_destroy(&lease->log_servers);

	ni_string_free(&lease->posix_tz_string);
	ni_string_free(&lease->posix_tz_dbname);

	switch (lease->type) {
	case NI_ADDRCONF_DHCP:

		switch (lease->family) {
		case AF_INET:
			ni_addrconf_lease_dhcp4_destroy(&lease->dhcp4);
			break;

		case AF_INET6:
			ni_addrconf_lease_dhcp6_destroy(&lease->dhcp6);
			break;

		default: ;
		}

		break;

	default: ;
	}
}