Use `errno_t` in all uspace and kernel code.
[helenos.git] / uspace / app / dnscfg / dnscfg.c
blobeacca0a2ea3a5897083b6cc5ae783a5847b926d9
1 /*
2 * Copyright (c) 2013 Jiri Svoboda
3 * All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 /** @addtogroup dnscfg
30 * @{
32 /** @file DNS configuration utility.
34 * Controls the DNS resolution server (@c dnsrsrv).
37 #include <errno.h>
38 #include <inet/addr.h>
39 #include <inet/dnsr.h>
40 #include <ipc/services.h>
41 #include <loc.h>
42 #include <stdio.h>
43 #include <stdlib.h>
44 #include <stdint.h>
45 #include <str_error.h>
47 #define NAME "dnscfg"
49 static void print_syntax(void)
51 printf("Syntax:\n");
52 printf("\t%s get-ns\n", NAME);
53 printf("\t%s set-ns <server-addr>\n", NAME);
54 printf("\t%s unset-ns\n", NAME);
57 static errno_t dnscfg_set_ns(int argc, char *argv[])
59 if (argc < 1) {
60 printf("%s: Missing arguments.\n", NAME);
61 print_syntax();
62 return EINVAL;
65 if (argc > 1) {
66 printf("%s: Too many arguments.\n", NAME);
67 print_syntax();
68 return EINVAL;
71 char *srv_addr = argv[0];
73 inet_addr_t addr;
74 errno_t rc = inet_addr_parse(srv_addr, &addr, NULL);
76 if (rc != EOK) {
77 printf("%s: Invalid address format '%s'.\n", NAME, srv_addr);
78 return rc;
81 rc = dnsr_set_srvaddr(&addr);
82 if (rc != EOK) {
83 printf("%s: Failed setting nameserver address '%s' (%s)\n",
84 NAME, srv_addr, str_error(rc));
85 return rc;
88 return EOK;
91 static errno_t dnscfg_unset_ns(void)
93 inet_addr_t addr;
94 inet_addr_any(&addr);
96 errno_t rc = dnsr_set_srvaddr(&addr);
97 if (rc != EOK) {
98 printf("%s: Failed unsetting server address (%s)\n",
99 NAME, str_error(rc));
100 return rc;
103 return EOK;
106 static errno_t dnscfg_print(void)
108 inet_addr_t addr;
109 errno_t rc = dnsr_get_srvaddr(&addr);
110 if (rc != EOK) {
111 printf("%s: Failed getting DNS server address.\n", NAME);
112 return rc;
115 char *addr_str;
116 rc = inet_addr_format(&addr, &addr_str);
117 if (rc != EOK) {
118 printf("%s: Out of memory.\n", NAME);
119 return rc;
122 printf("Nameserver: %s\n", addr_str);
123 free(addr_str);
124 return EOK;
127 int main(int argc, char *argv[])
129 if ((argc < 2) || (str_cmp(argv[1], "get-ns") == 0))
130 return dnscfg_print();
131 else if (str_cmp(argv[1], "set-ns") == 0)
132 return dnscfg_set_ns(argc - 2, argv + 2);
133 else if (str_cmp(argv[1], "unset-ns") == 0)
134 return dnscfg_unset_ns();
135 else {
136 printf("%s: Unknown command '%s'.\n", NAME, argv[1]);
137 print_syntax();
138 return 1;
141 return 0;
144 /** @}