4 * Functions which handle Internet domain configuration etc.
15 #include <sys/types.h>
17 #include <sys/socket.h>
20 #include <netinet/in.h>
32 void display_inetconf(void)
49 char *ic_spec[ic_max];
52 char *ic_keyword[] = {
61 char *ic_boxtitle[] = {
71 "(domains for which this host receives mail)",
72 "(domains whose subdomains match Citadel hosts)",
73 "(domains mapped with the Global Address Book)",
74 "(hosts running the SpamAssassin service)",
75 "(hosts running a Realtime Blackhole List)",
76 "(if present, forward all outbound mail to one of these hosts)"
79 for (i=0; i<ic_max; ++i) {
80 ic_spec[i] = strdup("");
85 wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>");
86 wprintf("<SPAN CLASS=\"titlebar\">Internet configuration</SPAN>\n");
87 wprintf("</TD></TR></TABLE>\n");
89 serv_printf("CONF GETSYS|application/x-citadel-internet-config");
91 if (buf[0] == '1') while (serv_gets(buf), strcmp(buf, "000")) {
93 extract(ename, buf, 0);
94 extract(etype, buf, 1);
96 for (i=0; i<ic_max; ++i) {
97 if (!strcasecmp(etype, ic_keyword[i])) {
103 ic_spec[which] = realloc(ic_spec[which], strlen(ic_spec[which]) + strlen(ename) + 2);
104 if (strlen(ic_spec[which]) > 0) strcat(ic_spec[which], "\n");
105 strcat(ic_spec[which], ename);
108 ic_misc = realloc(ic_misc, strlen(ic_misc) + strlen(buf) + 2);
109 if (strlen(ic_misc) > 0) strcat(ic_misc, "\n");
110 strcat(ic_misc, buf);
115 wprintf("<TABLE border=0 width=100%%>\n");
116 for (which=0; which<ic_max; ++which) {
117 if (which % 2 == 0) {
121 svprintf("BOXTITLE", WCS_STRING, ic_boxtitle[which]);
122 do_template("beginbox");
123 wprintf("<span class=\"menudesc\">");
124 escputs(ic_desc[which]);
125 wprintf("</span><br>");
126 wprintf("<TABLE border=0 cellspacing=0 cellpadding=0 width=100%%>\n");
127 if (strlen(ic_spec[which]) > 0) {
128 for (i=0; i<num_tokens(ic_spec[which], '\n'); ++i) {
129 wprintf("<TR><TD ALIGN=LEFT>");
130 extract_token(buf, ic_spec[which], i, '\n');
132 wprintf("</TD><TD ALIGN=RIGHT>"
133 "<A HREF=\"/save_inetconf?oper=delete&ename=");
135 wprintf("&etype=%s\" ", ic_keyword[which]);
136 wprintf("onClick=\"return confirm('Delete ");
139 wprintf("<font size=-1>(Delete)</font></a></TD></TR>\n");
142 wprintf("<FORM METHOD=\"POST\" ACTION=\"/save_inetconf\">\n"
144 "<INPUT TYPE=\"text\" NAME=\"ename\" MAXLENGTH=\"64\">"
145 "<INPUT TYPE=\"hidden\" NAME=\"etype\" VALUE=\"%s\">", ic_keyword[which]);
146 wprintf("</TD><TD ALIGN=RIGHT>"
147 "<INPUT TYPE=\"submit\" NAME=\"oper\" VALUE=\"Add\">"
148 "</TD></TR></TABLE></FORM>\n");
149 do_template("endbox");
151 if (which % 2 != 0) {
155 wprintf("</TABLE>\n");
159 for (i=0; i<ic_max; ++i) {
166 void save_inetconf(void) {
170 char newconfig[65536];
172 strcpy(newconfig, "");
173 serv_printf("CONF GETSYS|application/x-citadel-internet-config");
175 if (buf[0] == '1') while (serv_gets(buf), strcmp(buf, "000")) {
176 extract(ename, buf, 0);
177 extract(etype, buf, 1);
178 if (strlen(buf) == 0) {
179 /* skip blank lines */
181 else if ((!strcasecmp(ename, bstr("ename")))
182 && (!strcasecmp(etype, bstr("etype")))
183 && (!strcasecmp(bstr("oper"), "delete"))
185 sprintf(WC->ImportantMessage, "%s deleted.", ename);
188 if (strlen(newconfig) > 0) strcat(newconfig, "\n");
189 strcat(newconfig, buf);
193 serv_printf("CONF PUTSYS|application/x-citadel-internet-config");
196 serv_puts(newconfig);
197 if (!strcasecmp(bstr("oper"), "add")) {
198 serv_printf("%s|%s", bstr("ename"), bstr("etype") );
199 sprintf(WC->ImportantMessage, "%s added.", bstr("ename"));