/** * connman_resolver_remove_all: * @interface: network interface * * Remove all resolver server address for the specified interface */ int connman_resolver_remove_all(const char *interface) { GSList *list, *matches = NULL; DBG("interface %s", interface); if (interface == NULL) return -EINVAL; for (list = entry_list; list; list = list->next) { struct entry_data *entry = list->data; if (g_strcmp0(entry->interface, interface) != 0) continue; matches = g_slist_append(matches, entry); } if (matches == NULL) return -ENOENT; remove_entries(matches); return 0; }
/** * connman_resolver_remove: * @interface: network interface * @domain: domain limitation * @server: server address * * Remover resolver server address from current list */ int connman_resolver_remove(const char *interface, const char *domain, const char *server) { GSList *list, *matches = NULL; DBG("interface %s domain %s server %s", interface, domain, server); if (server == NULL) return -EINVAL; for (list = entry_list; list; list = list->next) { struct entry_data *entry = list->data; if (interface != NULL && g_strcmp0(entry->interface, interface) != 0) continue; if (domain != NULL && g_strcmp0(entry->domain, domain) != 0) continue; if (g_strcmp0(entry->server, server) != 0) continue; matches = g_slist_append(matches, entry); } if (matches == NULL) return -ENOENT; remove_entries(matches); return 0; }
static gboolean resolver_expire_cb(gpointer user_data) { struct entry_data *entry = user_data; GSList *list; DBG("interface %s domain %s server %s", entry->interface, entry->domain, entry->server); list = g_slist_append(NULL, entry); remove_entries(list); return FALSE; }
static void func_die (void *vo) { struct instance *o = vo; struct global *g = ModuleGlobal(o->i); // remove from instances LinkedList1_Remove(&g->instances, &o->instances_node); // set servers set_servers(g); // free servers remove_entries(o); NCDModuleInst_Backend_Dead(o->i); }
static gboolean resolver_expire_cb(gpointer user_data) { struct entry_data *entry = user_data; GSList *list; int index; DBG("interface %s domain %s server %s", entry->interface, entry->domain, entry->server); list = g_slist_append(NULL, entry); index = connman_inet_ifindex(entry->interface); if (index >= 0) { struct connman_service *service; service = __connman_service_lookup_from_index(index); if (service != NULL) __connman_service_nameserver_remove(service, entry->server, TRUE); } remove_entries(list); return FALSE; }
void flat_playlist::remove_entry(uri const &uri_, bool const emit_signal) { remove_entries(boost::assign::list_of(uri_), emit_signal); }
static void func_new_resolvconf (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params) { struct global *g = ModuleGlobal(i); struct instance *o = vo; o->i = i; // init servers list LinkedList1_Init(&o->entries); // get arguments NCDValRef lines_arg; NCDValRef priority_arg; if (!NCDVal_ListRead(params->args, 2, &lines_arg, &priority_arg)) { ModuleLog(o->i, BLOG_ERROR, "wrong arity"); goto fail1; } if (!NCDVal_IsList(lines_arg) || !NCDVal_IsString(priority_arg)) { ModuleLog(o->i, BLOG_ERROR, "wrong type"); goto fail1; } uintmax_t priority; if (!ncd_read_uintmax(priority_arg, &priority) || priority > INT_MAX) { ModuleLog(o->i, BLOG_ERROR, "wrong priority"); goto fail1; } // read lines size_t count = NCDVal_ListCount(lines_arg); for (size_t j = 0; j < count; j++) { int loop_failed = 1; NCDValRef line = NCDVal_ListGet(lines_arg, j); if (!NCDVal_IsList(line) || NCDVal_ListCount(line) != 2) { ModuleLog(o->i, BLOG_ERROR, "lines element is not a list with two elements"); goto loop_fail0; } NCDValRef type = NCDVal_ListGet(line, 0); NCDValRef value = NCDVal_ListGet(line, 1); if (!NCDVal_IsStringNoNulls(type) || !NCDVal_IsStringNoNulls(value)) { ModuleLog(o->i, BLOG_ERROR, "wrong type of type or value"); goto loop_fail0; } NCDValNullTermString type_nts; if (!NCDVal_StringNullTerminate(type, &type_nts)) { ModuleLog(o->i, BLOG_ERROR, "NCDVal_StringNullTerminate failed"); goto loop_fail0; } NCDValNullTermString value_nts; if (!NCDVal_StringNullTerminate(value, &value_nts)) { ModuleLog(o->i, BLOG_ERROR, "NCDVal_StringNullTerminate failed"); goto loop_fail1; } if (!add_dns_entry(o, type_nts.data, value_nts.data, priority)) { ModuleLog(o->i, BLOG_ERROR, "failed to add dns entry"); goto loop_fail2; } loop_failed = 0; loop_fail2: NCDValNullTermString_Free(&value_nts); loop_fail1: NCDValNullTermString_Free(&type_nts); loop_fail0: if (loop_failed) { goto fail1; } } // add to instances LinkedList1_Append(&g->instances, &o->instances_node); // set servers if (!set_servers(g)) { ModuleLog(o->i, BLOG_ERROR, "failed to set DNS servers"); goto fail2; } // signal up NCDModuleInst_Backend_Up(o->i); return; fail2: LinkedList1_Remove(&g->instances, &o->instances_node); fail1: remove_entries(o); NCDModuleInst_Backend_DeadError(i); }
static void func_new (void *vo, NCDModuleInst *i, const struct NCDModuleInst_new_params *params) { struct global *g = ModuleGlobal(i); struct instance *o = vo; o->i = i; // init servers list LinkedList1_Init(&o->entries); // get arguments NCDValRef servers_arg; NCDValRef priority_arg; if (!NCDVal_ListRead(params->args, 2, &servers_arg, &priority_arg)) { ModuleLog(o->i, BLOG_ERROR, "wrong arity"); goto fail1; } if (!NCDVal_IsList(servers_arg) || !NCDVal_IsString(priority_arg)) { ModuleLog(o->i, BLOG_ERROR, "wrong type"); goto fail1; } uintmax_t priority; if (!ncd_read_uintmax(priority_arg, &priority) || priority > INT_MAX) { ModuleLog(o->i, BLOG_ERROR, "wrong priority"); goto fail1; } // read servers size_t count = NCDVal_ListCount(servers_arg); for (size_t j = 0; j < count; j++) { NCDValRef server_arg = NCDVal_ListGet(servers_arg, j); if (!NCDVal_IsString(server_arg)) { ModuleLog(o->i, BLOG_ERROR, "wrong type"); goto fail1; } uint32_t addr; if (!ipaddr_parse_ipv4_addr_bin((char *)NCDVal_StringData(server_arg), NCDVal_StringLength(server_arg), &addr)) { ModuleLog(o->i, BLOG_ERROR, "wrong addr"); goto fail1; } char addr_str[IPADDR_PRINT_MAX]; ipaddr_print_addr(addr, addr_str); if (!add_dns_entry(o, "nameserver", addr_str, priority)) { ModuleLog(o->i, BLOG_ERROR, "failed to add dns entry"); goto fail1; } } // add to instances LinkedList1_Append(&g->instances, &o->instances_node); // set servers if (!set_servers(g)) { ModuleLog(o->i, BLOG_ERROR, "failed to set DNS servers"); goto fail2; } // signal up NCDModuleInst_Backend_Up(o->i); return; fail2: LinkedList1_Remove(&g->instances, &o->instances_node); fail1: remove_entries(o); NCDModuleInst_Backend_DeadError(i); }