Installer: fix a (possible) crash in show_ifconfig()
[dragonfly.git] / usr.sbin / installer / dfuibe_installer / fn_diagnostic.c
1 /*
2  * Copyright (c)2004 The DragonFly Project.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  *   Redistributions of source code must retain the above copyright
9  *   notice, this list of conditions and the following disclaimer.
10  *
11  *   Redistributions in binary form must reproduce the above copyright
12  *   notice, this list of conditions and the following disclaimer in
13  *   the documentation and/or other materials provided with the
14  *   distribution.
15  *
16  *   Neither the name of the DragonFly Project nor the names of its
17  *   contributors may be used to endorse or promote products derived
18  *   from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
25  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
29  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
31  * OF THE POSSIBILITY OF SUCH DAMAGE.
32  */
33
34 /*
35  * fn_diagnostic.c
36  * Diagnostic functions for installer.
37  * $Id: fn_diagnostic.c,v 1.21 2005/03/13 01:53:58 cpressey Exp $
38  */
39
40 #include <sys/types.h>
41
42 #include <dirent.h>
43 #include <stdarg.h>
44 #include <stdio.h>
45 #include <stdlib.h>
46 #include <string.h>
47
48 #ifdef ENABLE_NLS
49 #include <libintl.h>
50 #define _(String) gettext (String)
51 #else
52 #define _(String) (String)
53 #endif
54
55 #include "libaura/mem.h"
56 #include "libaura/buffer.h"
57
58 #include "libdfui/dfui.h"
59
60 #include "libinstaller/commands.h"
61 #include "libinstaller/confed.h"
62 #include "libinstaller/diskutil.h"
63 #include "libinstaller/functions.h"
64 #include "libinstaller/package.h"
65 #include "libinstaller/uiutil.h"
66
67 #include "fn.h"
68 #include "pathnames.h"
69
70 /*** DIAGNOSTIC FUNCTIONS ***/
71
72 void
73 fn_show_dmesg(struct i_fn_args *a)
74 {
75         struct aura_buffer *e;
76         struct dfui_form *f;
77         struct dfui_response *r;
78
79         e = aura_buffer_new(1024);
80         aura_buffer_cat_file(e, "%s%s", a->os_root, cmd_name(a, "DMESG_BOOT"));
81
82         f = dfui_form_create(
83             "dmesg",
84             _("System Startup Messages (dmesg)"),
85             aura_buffer_buf(e),
86             "",
87
88             "p", "role", "informative",
89             "p", "minimum_width", "72",
90             "p", "monospaced", "true",
91
92             "a", "ok", _("OK"), "", "",
93             "p", "accelerator", "ESC",
94
95             NULL
96         );
97
98         if (!dfui_be_present(a->c, f, &r))
99                 abort_backend();
100
101         dfui_form_free(f);
102         dfui_response_free(r);
103
104         aura_buffer_free(e);
105 }
106
107 void
108 fn_show_pciconf(struct i_fn_args *a)
109 {
110         struct aura_buffer *e;
111         struct dfui_form *f;
112         struct dfui_response *r;
113
114         e = aura_buffer_new(1024);
115         aura_buffer_cat_pipe(e, "pciconf -l -v");
116
117         f = dfui_form_create(
118             "pciconf",
119             _("PCI Devices"),
120             aura_buffer_buf(e),
121             "",
122
123             "p", "role", "informative",
124             "p", "minimum_width", "72",
125             "p", "monospaced", "true",
126
127             "a", "ok", _("OK"), "", "",
128             "p", "accelerator", "ESC",
129
130             NULL
131         );
132
133         if (!dfui_be_present(a->c, f, &r))
134                 abort_backend();
135
136         dfui_form_free(f);
137         dfui_response_free(r);
138
139         aura_buffer_free(e);
140 }
141
142 void
143 fn_show_pnpinfo(struct i_fn_args *a)
144 {
145         struct aura_buffer *e;
146         struct dfui_form *f;
147         struct dfui_response *r;
148
149         e = aura_buffer_new(1024);
150         aura_buffer_cat_pipe(e, "pnpinfo");
151
152         f = dfui_form_create(
153             "pnpinfo",
154             _("ISA PnP Devices"),
155             aura_buffer_buf(e),
156             "",
157
158             "p", "role", "informative",
159             "p", "minimum_width", "72",
160             "p", "monospaced", "true",
161
162             "a", "ok", _("OK"), "", "",
163             "p", "accelerator", "ESC",
164
165             NULL
166         );
167
168         if (!dfui_be_present(a->c, f, &r))
169                 abort_backend();
170
171         dfui_form_free(f);
172         dfui_response_free(r);
173
174         aura_buffer_free(e);
175 }
176
177 void
178 fn_show_natacontrol(struct i_fn_args *a)
179 {
180         struct aura_buffer *e;
181         struct dfui_form *f;
182         struct dfui_response *r;
183
184         e = aura_buffer_new(1024);
185         aura_buffer_cat_pipe(e, "natacontrol list");
186
187         f = dfui_form_create(
188             "natacontrol",
189             _("ATA Devices"),
190             aura_buffer_buf(e),
191             "",
192
193             "p", "role", "informative",
194             "p", "minimum_width", "72",
195             "p", "monospaced", "true",
196
197             "a", "ok", _("OK"), "", "",
198             "p", "accelerator", "ESC",
199
200             NULL
201         );
202
203         if (!dfui_be_present(a->c, f, &r))
204                 abort_backend();
205
206         dfui_form_free(f);
207         dfui_response_free(r);
208
209         aura_buffer_free(e);
210 }
211
212 void
213 show_ifconfig(struct dfui_connection *c, char *ifname)
214 {
215         struct aura_buffer *e;
216
217         e = aura_buffer_new(1024);
218         aura_buffer_cat_pipe(e, "/sbin/ifconfig %s", ifname);
219         inform(c, "%s", aura_buffer_buf(e));
220         aura_buffer_free(e);
221 }