* Allow editing of the "disable self-service user account creation" site config option
[citadel.git] / webcit / netconf.c
1
2
3
4 #include <ctype.h>
5 #include <stdlib.h>
6 #include <unistd.h>
7 #include <stdio.h>
8 #include <fcntl.h>
9 #include <signal.h>
10 #include <sys/types.h>
11 #include <sys/wait.h>
12 #include <sys/socket.h>
13 #include <sys/time.h>
14 #include <limits.h>
15 #include <netinet/in.h>
16 #include <netdb.h>
17 #include <string.h>
18 #include <pwd.h>
19 #include <errno.h>
20 #include <stdarg.h>
21 #include <pthread.h>
22 #include <signal.h>
23 #include "webcit.h"
24
25
26
27
28
29
30
31 void edit_node(void) {
32         char buf[SIZ];
33         char node[SIZ];
34         char cnode[SIZ];
35         FILE *fp;
36
37         if (!strcmp(bstr("sc"), "OK")) {
38                 strcpy(node, bstr("node") );
39                 fp = tmpfile();
40                 if (fp != NULL) {
41                         serv_puts("CONF getsys|application/x-citadel-ignet-config");
42                         serv_gets(buf);
43                         if (buf[0] == '1') {
44                                 while (serv_gets(buf), strcmp(buf, "000")) {
45                                         extract(cnode, buf, 0);
46                                         if (strcasecmp(node, cnode)) {
47                                                 fprintf(fp, "%s\n", buf);
48                                         }
49                                 }
50                         fprintf(fp, "%s|%s|%s|%s\n", 
51                                 bstr("node"),
52                                 bstr("secret"),
53                                 bstr("host"),
54                                 bstr("port") );
55                         }
56                         rewind(fp);
57
58                         serv_puts("CONF putsys|application/x-citadel-ignet-config");
59                         serv_gets(buf);
60                         if (buf[0] == '4') {
61                                 while (fgets(buf, sizeof buf, fp) != NULL) {
62                                         buf[strlen(buf)-1] = 0;
63                                         serv_puts(buf);
64                                 }
65                                 serv_puts("000");
66                         }
67                         fclose(fp);
68                 }
69         }
70
71         display_netconf();
72 }
73
74
75
76 void display_add_node(void)
77 {
78         output_headers(1);
79         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=000077><TR><TD>");
80         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
81         wprintf("<B>Add new node</B>");
82         wprintf("</FONT></TD></TR></TABLE>\n");
83
84         wprintf("<FORM METHOD=\"POST\" ACTION=\"/edit_node\">\n");
85         wprintf("<CENTER><TABLE border=0>\n");
86         wprintf("<TR><TD>Node name</TD>");
87         wprintf("<TD><INPUT TYPE=\"text\" NAME=\"node\" MAXLENGTH=\"8\"></TD></TR>\n");
88         wprintf("<TR><TD>Shared secret</TD>");
89         wprintf("<TD><INPUT TYPE=\"password\" NAME=\"secret\" MAXLENGTH=\"8\"></TD></TR>\n");
90         wprintf("<TR><TD>Host or IP</TD>");
91         wprintf("<TD><INPUT TYPE=\"text\" NAME=\"host\" MAXLENGTH=\"32\"></TD></TR>\n");
92         wprintf("<TR><TD>Port</TD>");
93         wprintf("<TD><INPUT TYPE=\"text\" NAME=\"port\" MAXLENGTH=\"8\"></TD></TR>\n");
94         wprintf("</TABLE><BR>");
95         wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"OK\">");
96         wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">");
97         wprintf("</CENTER></FORM>\n");
98
99         wDumpContent(1);
100 }
101
102 void display_edit_node(void)
103 {
104         char buf[SIZ];
105         char node[SIZ];
106         char cnode[SIZ];
107         char csecret[SIZ];
108         char chost[SIZ];
109         char cport[SIZ];
110
111         strcpy(node, bstr("node"));
112
113         output_headers(1);
114         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=000077><TR><TD>");
115         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
116         wprintf("<B>Edit node configuration for ");
117         escputs(node);
118         wprintf("</B>\n");
119         wprintf("</FONT></TD></TR></TABLE>\n");
120
121         serv_puts("CONF getsys|application/x-citadel-ignet-config");
122         serv_gets(buf);
123         if (buf[0] == '1') {
124                 while (serv_gets(buf), strcmp(buf, "000")) {
125                         extract(cnode, buf, 0);
126                         extract(csecret, buf, 1);
127                         extract(chost, buf, 2);
128                         extract(cport, buf, 3);
129
130                         if (!strcasecmp(node, cnode)) {
131                                 wprintf("<FORM METHOD=\"POST\" ACTION=\"/edit_node\">\n");
132                                 wprintf("<CENTER><TABLE border=0>\n");
133                                 wprintf("<TR><TD>Node name</TD>");
134                                 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"node\" MAXLENGTH=\"8\" VALUE=\"%s\"></TD></TR>\n", cnode);
135                                 wprintf("<TR><TD>Shared secret</TD>");
136                                 wprintf("<TD><INPUT TYPE=\"password\" NAME=\"secret\" MAXLENGTH=\"8\" VALUE=\"%s\"></TD></TR>\n", csecret);
137                                 wprintf("<TR><TD>Host or IP</TD>");
138                                 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"host\" MAXLENGTH=\"32\" VALUE=\"%s\"></TD></TR>\n", chost);
139                                 wprintf("<TR><TD>Port</TD>");
140                                 wprintf("<TD><INPUT TYPE=\"text\" NAME=\"port\" MAXLENGTH=\"8\" VALUE=\"%s\"></TD></TR>\n", cport);
141                                 wprintf("</TABLE><BR>");
142                                 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"OK\">");
143                                 wprintf("<INPUT TYPE=\"submit\" NAME=\"sc\" VALUE=\"Cancel\">");
144                                 wprintf("</CENTER></FORM>\n");
145                         }
146
147                 }
148         }
149
150         else {          /* command error getting configuration */
151                 wprintf("%s<BR>\n", &buf[4]);
152         }
153
154         wDumpContent(1);
155 }
156
157
158
159 void display_netconf(void)
160 {
161         char buf[SIZ];
162         char node[SIZ];
163
164         output_headers(1);
165         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=770000><TR><TD>");
166         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
167         wprintf("<B>Network configuration</B>\n");
168         wprintf("</FONT></TD></TR></TABLE>\n");
169
170         wprintf("<CENTER>");
171         wprintf("<A HREF=\"/display_add_node\">");
172         wprintf("Add a new node</A><BR>\n");
173         wprintf("</CENTER>");
174
175         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=000077><TR><TD>");
176         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
177         wprintf("<B>Currently configured nodes</B>\n");
178         wprintf("</FONT></TD></TR></TABLE>\n");
179         serv_puts("CONF getsys|application/x-citadel-ignet-config");
180         serv_gets(buf);
181         if (buf[0] == '1') {
182                 wprintf("<CENTER><TABLE border=0>\n");
183                 while (serv_gets(buf), strcmp(buf, "000")) {
184                         extract(node, buf, 0);
185                         wprintf("<TR><TD><FONT SIZE=+1>");
186                         escputs(node);
187                         wprintf("</FONT></TD>");
188                         wprintf("<TD><A HREF=\"/display_edit_node&node=");
189                         urlescputs(node);
190                         wprintf("\">(Edit)</A></TD>");
191                         wprintf("<TD><A HREF=\"/display_confirm_delete_node&node=");
192                         urlescputs(node);
193                         wprintf("\">(Delete)</A></TD>");
194                         wprintf("</TR>\n");
195                 }
196                 wprintf("</TABLE></CENTER>\n");
197         }
198         wDumpContent(1);
199 }
200
201
202 void display_confirm_delete_node(void)
203 {
204         char node[SIZ];
205
206         output_headers(1);
207         wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=770000><TR><TD>");
208         wprintf("<FONT SIZE=+1 COLOR=\"FFFFFF\"");
209         wprintf("<B>Confirm delete</B>\n");
210         wprintf("</FONT></TD></TR></TABLE>\n");
211
212         strcpy(node, bstr("node"));
213         wprintf("<CENTER>Are you sure you want to delete <FONT SIZE=+1>");
214         escputs(node);
215         wprintf("</FONT>?<BR>\n");
216         wprintf("<A HREF=\"/delete_node&node=");
217         urlescputs(node);
218         wprintf("\">Yes</A>&nbsp;&nbsp;&nbsp;");
219         wprintf("<A HREF=\"/display_netconf\">No</A><BR>\n");
220         wDumpContent(1);
221 }
222
223
224 void delete_node(void)
225 {
226         char buf[SIZ];
227         char node[SIZ];
228         char cnode[SIZ];
229         FILE *fp;
230
231         strcpy(node, bstr("node") );
232         fp = tmpfile();
233         if (fp != NULL) {
234                 serv_puts("CONF getsys|application/x-citadel-ignet-config");
235                 serv_gets(buf);
236                 if (buf[0] == '1') {
237                         while (serv_gets(buf), strcmp(buf, "000")) {
238                                 extract(cnode, buf, 0);
239                                 if (strcasecmp(node, cnode)) {
240                                         fprintf(fp, "%s\n", buf);
241                                 }
242                         }
243                 }
244                 rewind(fp);
245
246                 serv_puts("CONF putsys|application/x-citadel-ignet-config");
247                 serv_gets(buf);
248                 if (buf[0] == '4') {
249                         while (fgets(buf, sizeof buf, fp) != NULL) {
250                                 buf[strlen(buf)-1] = 0;
251                                 serv_puts(buf);
252                         }
253                         serv_puts("000");
254                 }
255                 fclose(fp);
256         }
257
258         display_netconf();
259 }
260
261
262 void add_node(void)
263 {
264         char node[SIZ];
265         char buf[SIZ];
266         char sc[SIZ];
267
268         strcpy(node, bstr("node"));
269         strcpy(sc, bstr("sc"));
270
271         if (!strcmp(sc, "Add")) {
272                 sprintf(buf, "NSET addnode|%s", node);
273                 serv_puts(buf);
274                 serv_gets(buf);
275                 if (buf[0] == '1') {
276                         output_headers(1);
277                         server_to_text();
278                         wprintf("<A HREF=\"/display_netconf\">Back to menu</A>\n");
279                         wDumpContent(1);
280                 } else {
281                         display_error(&buf[4]);
282                 }
283         }
284 }
285
286