]> git.ipfire.org Git - ipfire-2.x.git/blob - src/setup/misc.c
0710c5b955a6488c62ea4c5ff71793a19bd78a7b
[ipfire-2.x.git] / src / setup / misc.c
1 /* SmoothWall setup program.
2 *
3 * This program is distributed under the terms of the GNU General Public
4 * Licence. See the file COPYING for details.
5 *
6 * (c) Lawrence Manning, 2001
7 * Misc. stuff for the lib.
8 *
9 */
10
11 // Translation
12 #include <libintl.h>
13 #define _(x) dgettext("setup", x)
14
15 #include "setup.h"
16
17 extern FILE *flog;
18 extern char *mylog;
19
20 extern int automode;
21
22 /* This will rewrite /etc/hosts, /etc/hosts.*, and the apache ServerName file. */
23 int writehostsfiles(void)
24 {
25 char address[STRING_SIZE] = "";
26 char netaddress[STRING_SIZE] = "";
27 char netmask[STRING_SIZE] = "";
28 char message[1000];
29 FILE *file, *hosts;
30 struct keyvalue *kv;
31 char hostname[STRING_SIZE];
32 char domainname[STRING_SIZE] = "localdomain";
33 char commandstring[STRING_SIZE];
34 char buffer[STRING_SIZE];
35
36 kv = initkeyvalues();
37 if (!(readkeyvalues(kv, CONFIG_ROOT "/ethernet/settings")))
38 {
39 freekeyvalues(kv);
40 errorbox(_("Unable to open settings file"));
41 return 0;
42 }
43 findkey(kv, "GREEN_ADDRESS", address);
44 findkey(kv, "GREEN_NETADDRESS", netaddress);
45 findkey(kv, "GREEN_NETMASK", netmask);
46 freekeyvalues(kv);
47
48 kv = initkeyvalues();
49 if (!(readkeyvalues(kv, CONFIG_ROOT "/main/settings")))
50 {
51 freekeyvalues(kv);
52 errorbox(_("Unable to open settings file"));
53 return 0;
54 }
55 strcpy(hostname, SNAME );
56 findkey(kv, "HOSTNAME", hostname);
57 findkey(kv, "DOMAINNAME", domainname);
58 freekeyvalues(kv);
59
60 if (!(file = fopen(CONFIG_ROOT "/main/hosts", "r")))
61 {
62 errorbox(_("Unable to open main hosts file."));
63 return 0;
64 }
65 if (!(hosts = fopen("/etc/hosts", "w")))
66 {
67 errorbox(_("Unable to write /etc/hosts."));
68 return 0;
69 }
70 fprintf(hosts, "127.0.0.1\tlocalhost\n");
71 if (strlen(domainname))
72 fprintf(hosts, "%s\t%s.%s\t%s\n",address,hostname,domainname,hostname);
73 else
74 fprintf(hosts, "%s\t%s\n",address,hostname);
75 while (fgets(buffer, STRING_SIZE, file))
76 {
77 char *token, *ip, *host, *domain;
78
79 buffer[strlen(buffer) - 1] = 0;
80
81 token = strtok(buffer, ",");
82
83 ip = strtok(NULL, ",");
84 host = strtok(NULL, ",");
85 domain = strtok(NULL, ",");
86
87 if (!(ip && host))
88 break;
89
90 if (strlen(ip) < 7 || strlen(ip) > 15
91 || strspn(ip, "0123456789.") != strlen(ip))
92 break;
93
94 if (strspn(host, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-") != strlen(host))
95 break;
96
97 if (domain)
98 fprintf(hosts, "%s\t%s.%s\t%s\n",ip,host,domain,host);
99 else
100 fprintf(hosts, "%s\t%s\n",ip,host);
101 }
102 fclose(file);
103 fclose(hosts);
104
105 /* TCP wrappers stuff. */
106 if (!(file = fopen("/etc/hosts.deny", "w")))
107 {
108 errorbox(_("Unable to write /etc/hosts.deny."));
109 return 0;
110 }
111 fprintf(file, "ALL : ALL\n");
112 fclose(file);
113
114 if (!(file = fopen("/etc/hosts.allow", "w")))
115 {
116 errorbox(_("Unable to write /etc/hosts.allow."));
117 return 0;
118 }
119 fprintf(file, "sshd : ALL\n");
120 fprintf(file, "ALL : localhost\n");
121 fprintf(file, "ALL : %s/%s\n", netaddress, netmask);
122 fclose(file);
123
124 sprintf(commandstring, "/bin/hostname %s.%s", hostname, domainname);
125 if (mysystem(NULL, commandstring))
126 {
127 errorbox(_("Unable to set hostname."));
128 return 0;
129 }
130
131 return 1;
132 }