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; }
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: ; } }