53
56
entry_list = g_slist_remove(entry_list, entry);
58
if (resolver && resolver->remove)
56
59
resolver->remove(entry->interface, entry->domain,
133
136
remove_entries(matches);
137
* connman_resolver_append:
138
* @interface: network interface
139
* @domain: domain limitation
140
* @server: server address
142
* Append resolver server address to current list
144
int connman_resolver_append(const char *interface, const char *domain,
139
static int append_resolver(const char *interface, const char *domain,
140
const char *server, unsigned int flags)
147
142
struct entry_data *entry;
150
DBG("interface %s domain %s server %s", interface, domain, server);
145
DBG("interface %s domain %s server %s flags %d",
146
interface, domain, server, flags);
152
148
if (server == NULL)
159
155
entry->interface = g_strdup(interface);
160
156
entry->domain = g_strdup(domain);
161
157
entry->server = g_strdup(server);
158
entry->flags = flags;
163
160
entry_list = g_slist_append(entry_list, entry);
178
* connman_resolver_append:
179
* @interface: network interface
180
* @domain: domain limitation
181
* @server: server address
183
* Append resolver server address to current list
185
int connman_resolver_append(const char *interface, const char *domain,
188
DBG("interface %s domain %s server %s", interface, domain, server);
190
return append_resolver(interface, domain, server, 0);
194
* connman_resolver_remove:
195
* @interface: network interface
196
* @domain: domain limitation
197
* @server: server address
199
* Remover resolver server address from current list
201
int connman_resolver_remove(const char *interface, const char *domain,
204
GSList *list, *matches = NULL;
206
DBG("interface %s domain %s server %s", interface, domain, server);
211
for (list = entry_list; list; list = list->next) {
212
struct entry_data *entry = list->data;
214
if (interface != NULL &&
215
g_strcmp0(entry->interface, interface) != 0)
218
if (domain != NULL && g_strcmp0(entry->domain, domain) != 0)
221
if (g_strcmp0(entry->server, server) != 0)
224
matches = g_slist_append(matches, entry);
230
remove_entries(matches);
181
236
* connman_resolver_remove_all:
182
237
* @interface: network interface
190
245
DBG("interface %s", interface);
247
if (interface == NULL)
192
250
for (list = entry_list; list; list = list->next) {
193
251
struct entry_data *entry = list->data;
195
if (g_str_equal(entry->interface, interface) == FALSE)
253
if (g_strcmp0(entry->interface, interface) != 0)
198
256
matches = g_slist_append(matches, entry);
201
262
remove_entries(matches);
268
* connman_resolver_append_public_server:
269
* @server: server address
271
* Append public resolver server address to current list
273
int connman_resolver_append_public_server(const char *server)
275
DBG("server %s", server);
277
return append_resolver(NULL, NULL, server, RESOLVER_FLAG_PUBLIC);
281
* connman_resolver_remove_public_server:
282
* @server: server address
284
* Remove public resolver server address to current list
286
int connman_resolver_remove_public_server(const char *server)
288
DBG("server %s", server);
290
return connman_resolver_remove(NULL, NULL, server);
206
293
static int selftest_append(const char *interface, const char *domain,
207
294
const char *server)
235
322
connman_resolver_append("eth0", "moblin.org", "192.168.42.1");
236
323
connman_resolver_append("wlan0", "lwn.net", "192.168.0.2");
325
connman_resolver_append_public_server("8.8.8.8");
327
connman_resolver_remove_public_server("8.8.8.8");
238
329
connman_resolver_remove_all("wlan0");
240
331
connman_resolver_unregister(&selftest_resolver);
249
340
int fd, len, err;
251
343
DBG("interface %s server %s", interface, server);
345
if (interface == NULL)
348
old_umask = umask(022);
253
350
fd = open("/etc/resolv.conf", O_RDWR | O_CREAT,
254
351
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
258
err = ftruncate(fd, 0);
357
if (ftruncate(fd, 0) < 0) {
260
364
cmd = g_strdup_printf("# Generated by Connection Manager\n"
261
366
"nameserver %s\n", server);
263
368
len = write(fd, cmd, strlen(cmd));
272
383
static int resolvfile_remove(const char *interface, const char *domain,