4 * Functions which handle Internet domain configuration etc.
14 #include <sys/types.h>
16 #include <sys/socket.h>
19 #include <netinet/in.h>
31 void display_inetconf(void)
48 char *ic_spec[ic_max];
51 char *ic_keyword[] = {
60 char *ic_boxtitle[] = {
70 "(domains for which this host receives mail)",
71 "(domains mapped with the Global Address Book)",
72 "(domains whose subdomains match Citadel hosts)",
73 "(if present, forward all outbound mail to one of these hosts)",
74 "(hosts running a Realtime Blackhole List)",
75 "(hosts running the SpamAssassin service)",
78 for (i=0; i<ic_max; ++i) {
79 ic_spec[i] = strdup("");
83 serv_printf("CONF GETSYS|application/x-citadel-internet-config");
85 if (buf[0] == '1') while (serv_gets(buf), strcmp(buf, "000")) {
87 extract(ename, buf, 0);
88 extract(etype, buf, 1);
90 for (i=0; i<ic_max; ++i) {
91 if (!strcasecmp(etype, ic_keyword[i])) {
97 ic_spec[which] = realloc(ic_spec[which], strlen(ic_spec[which]) + strlen(ename) + 2);
98 if (strlen(ic_spec[which]) > 0) strcat(ic_spec[which], "\n");
99 strcat(ic_spec[which], ename);
102 ic_misc = realloc(ic_misc, strlen(ic_misc) + strlen(buf) + 2);
103 if (strlen(ic_misc) > 0) strcat(ic_misc, "\n");
104 strcat(ic_misc, buf);
109 output_headers(1, 1, 2, 0, 0, 0, 0);
110 wprintf("<div id=\"banner\">\n");
111 wprintf("<TABLE WIDTH=100%% BORDER=0 BGCOLOR=\"#444455\"><TR><TD>");
112 wprintf("<SPAN CLASS=\"titlebar\">Internet configuration</SPAN>\n");
113 wprintf("</TD></TR></TABLE>\n");
114 wprintf("</div>\n<div id=\"content\">\n");
116 wprintf("<center><table border=0 width=99%%><tr><td valign=top>\n");
117 for (which=0; which<ic_max; ++which) {
118 if (which == (ic_max / 2)) {
119 wprintf("</TD><TD VALIGN=TOP>");
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 wprintf("</td></tr></table></center>\n");
154 for (i=0; i<ic_max; ++i) {
161 void save_inetconf(void) {
170 newconfig = malloc(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"));