2 * This file is part of the IPCop Firewall.
4 * IPCop is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * IPCop is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with IPCop; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 * Copyright 2002: Mark Wormgoor <mark@wormgoor.com>
20 * $Id: upgrade-v130-v140.c,v 1.12.2.35 2004/11/11 09:40:03 alanh Exp $
28 int _handledomainname(void)
30 char domainname
[STRING_SIZE
] = "localdomain";
31 struct keyvalue
*kv
= initkeyvalues();
32 char *values
[] = { domainname
, NULL
}; /* pointers for the values. */
33 struct newtWinEntry entries
[] =
34 { { "", &values
[0], 0,}, { NULL
, NULL
, 0 } };
38 if (!(readkeyvalues(kv
, "/harddisk" CONFIG_ROOT
"/main/settings")))
41 errorbox(ctr
[TR_UNABLE_TO_OPEN_SETTINGS_FILE
]);
45 findkey(kv
, "DOMAINNAME", domainname
);
47 /* already have a domainname */
48 if (strlen(domainname
))
53 rc
= newtWinEntries(ctr
[TR_DOMAINNAME
], ctr
[TR_ENTER_DOMAINNAME
],
54 50, 5, 5, 40, entries
, ctr
[TR_OK
], ctr
[TR_CANCEL
], NULL
);
58 strcpy(domainname
, values
[0]);
59 if (strchr(domainname
, ' '))
60 errorbox(ctr
[TR_DOMAINNAME_CANNOT_CONTAIN_SPACES
]);
63 replacekeyvalue(kv
, "DOMAINNAME", domainname
);
64 writekeyvalues(kv
, "/harddisk" CONFIG_ROOT
"/main/settings");
81 int _add_logwatch_user() {
82 mysystem("/bin/chroot /harddisk /usr/sbin/userdel logwatch");
83 mysystem("/bin/chroot /harddisk /usr/sbin/groupdel logwatch");
84 mysystem("/bin/chroot /harddisk /usr/sbin/groupadd -g 102 logwatch");
85 mysystem("/bin/chroot /harddisk /usr/sbin/useradd -u 102 -g logwatch -d /var/log/logwatch -s /bin/false logwatch");
94 char hostname
[STRING_SIZE
] = "";
95 char domainname
[STRING_SIZE
] = "";
96 char squidtemp
[STRING_SIZE
];
97 struct keyvalue
*kv
= initkeyvalues();
98 int already_upgraded
= 0;
101 if (!(squidreadfile
= fopen ("/harddisk" CONFIG_ROOT
"/proxy/squid.conf", "r"))) return 1;
102 if (!(squidwritefile
= fopen ("/harddisk" CONFIG_ROOT
"/proxy/squid.conf.new", "w")))
104 fclose(squidreadfile
);
108 if (!(readkeyvalues(kv
, "/harddisk" CONFIG_ROOT
"/main/settings")))
110 fclose (squidwritefile
);
111 fclose (squidreadfile
);
113 errorbox(ctr
[TR_UNABLE_TO_OPEN_SETTINGS_FILE
]);
117 findkey(kv
, "HOSTNAME", hostname
);
118 findkey(kv
, "DOMAINNAME", domainname
);
121 while (fgets (squidtemp
, STRING_SIZE
, squidreadfile
) != NULL
) {
122 /* this will fail if we've already been upgraded, which is ok */
123 if (!strncmp(squidtemp
, "reply_body_max_size 0 KB", 24)) {
124 sprintf(squidtemp
, "reply_body_max_size 0 allow all\n");
126 if (!strncmp(squidtemp
, "cache_store_log /var/log/squid/store.log", 40)) {
127 sprintf(squidtemp
, "cache_store_log none\n");
129 fputs(squidtemp
, squidwritefile
);
131 /* so for us developers we skip already upgraded squiddies */
132 if (!strncmp(squidtemp
, "visible_hostname", 16)) {
133 already_upgraded
= 1;
136 /* Check for the new acl's */
137 if (!strncmp(squidtemp
, "__GREEN_IP__", 12)) {
141 if (!already_upgraded
) {
142 sprintf(squidtemp
, "visible_hostname %s.%s\n", hostname
, domainname
);
143 fputs(squidtemp
, squidwritefile
);
146 fclose (squidwritefile
);
147 fclose (squidreadfile
);
149 rename ("/harddisk" CONFIG_ROOT
"/proxy/squid.conf.new",
150 "/harddisk" CONFIG_ROOT
"/proxy/squid.conf");
152 replace("/harddisk" CONFIG_ROOT
"/proxy/squid.conf", "cache_dir ufs", "cache_dir aufs");
155 rename ("/harddisk" CONFIG_ROOT
"/proxy/acl",
156 "/harddisk" CONFIG_ROOT
"/proxy/acl.old");
157 rename ("/harddisk" CONFIG_ROOT
"/proxy/acl-1.4",
158 "/harddisk" CONFIG_ROOT
"/proxy/acl");
160 if (!(aclreadfile
= fopen ("/harddisk" CONFIG_ROOT
"/proxy/acl", "r"))) {
161 rename ("/harddisk" CONFIG_ROOT
"/proxy/acl-1.4",
162 "/harddisk" CONFIG_ROOT
"/proxy/acl");
164 unlink ("/harddisk" CONFIG_ROOT
"/proxy/acl-1.4");
169 chown ("/harddisk" CONFIG_ROOT
"/proxy/squid.conf", 99, 99);
170 chown ("/harddisk" CONFIG_ROOT
"/proxy/acl", 99, 99);
176 FILE *eaglewritefile
;
177 char eagletemp
[STRING_SIZE
];
178 int already_upgraded
= 0;
180 if (!(eaglereadfile
= fopen ("/harddisk" CONFIG_ROOT
"/eagle-usb/eagle-usb.conf", "r"))) return 1;
181 if (!(eaglewritefile
= fopen ("/harddisk" CONFIG_ROOT
"/eagle-usb/eagle-usb.conf.new", "w")))
183 fclose(eaglereadfile
);
187 while (fgets (eagletemp
, STRING_SIZE
, eaglereadfile
) != NULL
) {
188 /* so for us developers we skip already upgraded configs */
189 if (!strncmp(eagletemp
, "<eaglectrl>", 11)) {
190 already_upgraded
= 1;
194 rewind(eaglereadfile
);
195 if (!already_upgraded
)
196 fprintf(eaglewritefile
, "<eaglectrl>\n");
197 while (fgets (eagletemp
, STRING_SIZE
, eaglereadfile
) != NULL
)
198 fputs(eagletemp
, eaglewritefile
);
199 if (!already_upgraded
)
200 fprintf(eaglewritefile
, "</eaglectrl>\n");
202 fclose (eaglewritefile
);
203 fclose (eaglereadfile
);
205 rename ("/harddisk" CONFIG_ROOT
"/eagle-usb/eagle-usb.conf.new",
206 "/harddisk" CONFIG_ROOT
"/eagle-usb/eagle-usb.conf");
208 replace("/harddisk" CONFIG_ROOT
"/eagle-usb/eagle-usb.conf", "Linetype=00000001", "Linetype=0A");
210 chown ("/harddisk" CONFIG_ROOT
"/eagle-usb/eagle-usb.conf", 99, 99);
211 unlink("/harddisk" CONFIG_ROOT
"/eagle-usb/dsp_code_pots.bin");
212 unlink("/harddisk" CONFIG_ROOT
"/eagle-usb/dsp_code_isdn.bin");
219 char dhcptemp
[STRING_SIZE
];
221 if (!(dhcpreadfile
= fopen ("/harddisk" CONFIG_ROOT
"/dhcp/dhcpd.conf", "r"))) return 1;
222 if (!(dhcpwritefile
= fopen ("/harddisk" CONFIG_ROOT
"/dhcp/dhcpd.conf.new", "w")))
224 fclose(dhcpreadfile
);
227 fprintf (dhcpwritefile
, "authoritative;\n");
228 fprintf (dhcpwritefile
, "deny bootp;\n");
229 fprintf (dhcpwritefile
, "ddns-update-style none;\n");
230 while (fgets (dhcptemp
, STRING_SIZE
, dhcpreadfile
) != NULL
) {
233 /* so for us developers we skip already upgraded dhcp files */
234 if (!strncmp(dhcptemp
, "authoritative", 13)) {
237 /* so for us developers we skip already upgraded dhcp files */
238 if (!strncmp(dhcptemp
, "ddns-update-style", 17)) {
241 /* so for us developers we skip already upgraded dhcp files */
242 if (!strncmp(dhcptemp
, "deny bootp", 10)) {
247 fputs(dhcptemp
, dhcpwritefile
);
250 fclose(dhcpreadfile
);
251 fclose(dhcpwritefile
);
253 rename ("/harddisk" CONFIG_ROOT
"/dhcp/dhcpd.conf.new",
254 "/harddisk" CONFIG_ROOT
"/dhcp/dhcpd.conf");
255 chown ("/harddisk" CONFIG_ROOT
"/dhcp/dhcpd.conf", 99, 99);
257 /* This one will get converted again furthur down */
258 replace("/harddisk" CONFIG_ROOT
"/dhcp/settings", "WINS=", "WINS1=");
260 replace("/harddisk" CONFIG_ROOT
"/dhcp/settings", "START_ADDR=", "START_ADDR_GREEN=");
261 replace("/harddisk" CONFIG_ROOT
"/dhcp/settings", "END_ADDR=", "END_ADDR_GREEN=");
262 replace("/harddisk" CONFIG_ROOT
"/dhcp/settings", "DOMAIN_NAME=", "DOMAIN_NAME_GREEN=");
263 replace("/harddisk" CONFIG_ROOT
"/dhcp/settings", "DEFAULT_LEASE_TIME=", "DEFAULT_LEASE_TIME_GREEN=");
264 replace("/harddisk" CONFIG_ROOT
"/dhcp/settings", "MAX_LEASE_TIME=", "MAX_LEASE_TIME_GREEN=");
265 replace("/harddisk" CONFIG_ROOT
"/dhcp/settings", "DNS1=", "DNS1_GREEN=");
266 replace("/harddisk" CONFIG_ROOT
"/dhcp/settings", "DNS2=", "DNS2_GREEN=");
267 replace("/harddisk" CONFIG_ROOT
"/dhcp/settings", "WINS1=", "WINS1_GREEN=");
268 replace("/harddisk" CONFIG_ROOT
"/dhcp/settings", "WINS2=", "WINS2_GREEN=");
269 replace("/harddisk" CONFIG_ROOT
"/dhcp/settings", "ENABLE=", "ENABLE_GREEN=");
270 replace("/harddisk" CONFIG_ROOT
"/dhcp/settings", "range dynamic-bootp", "range");
271 chown ("/harddisk" CONFIG_ROOT
"/dhcp/settings", 99, 99);
273 if ((dhcpreadfile
= fopen ("/harddisk" CONFIG_ROOT
"/dhcp/enable", "r")))
275 fclose(dhcpreadfile
);
276 rename ("/harddisk" CONFIG_ROOT
"/dhcp/enable",
277 "/harddisk" CONFIG_ROOT
"/dhcp/enable_green");
278 chown ("/harddisk" CONFIG_ROOT
"/dhcp/enable_green", 99, 99);
284 int _add_sshd_user() {
285 mysystem("/bin/chroot /harddisk /usr/sbin/userdel sshd");
286 mysystem("/bin/chroot /harddisk /usr/sbin/groupdel sshd");
287 mysystem("/bin/chroot /harddisk /usr/sbin/groupadd -g 74 sshd");
288 mysystem("/bin/chroot /harddisk /usr/sbin/useradd -u 74 -g sshd -d /var/empty/sshd -s /bin/false -M sshd");
293 int _add_dnsmasq_user() {
294 mysystem("/bin/chroot /harddisk /usr/sbin/userdel dnsmasq");
295 mysystem("/bin/chroot /harddisk /usr/sbin/groupdel dnsmasq");
296 mysystem("/bin/chroot /harddisk /usr/sbin/groupadd -g 103 dnsmasq");
297 mysystem("/bin/chroot /harddisk /usr/sbin/useradd -u 103 -g dnsmasq -d / -s /bin/false -M dnsmasq");
302 int _add_cron_user() {
303 mysystem("/bin/chroot /harddisk /usr/sbin/userdel cron");
304 mysystem("/bin/chroot /harddisk /usr/sbin/groupdel cron");
305 mysystem("/bin/chroot /harddisk /usr/sbin/groupadd -g 104 cron");
306 mysystem("/bin/chroot /harddisk /usr/sbin/useradd -u 104 -g cron -d / -s /bin/false -M cron");
311 int _add_sysklogd_user() {
312 mysystem("/bin/chroot /harddisk /usr/sbin/userdel syslogd");
313 mysystem("/bin/chroot /harddisk /usr/sbin/groupdel syslogd");
314 mysystem("/bin/chroot /harddisk /usr/sbin/groupadd -g 105 syslogd");
315 mysystem("/bin/chroot /harddisk /usr/sbin/useradd -u 105 -g syslogd -d / -s /bin/false -M syslogd");
316 mysystem("/bin/chroot /harddisk /usr/sbin/userdel klogd");
317 mysystem("/bin/chroot /harddisk /usr/sbin/groupdel klogd");
318 mysystem("/bin/chroot /harddisk /usr/sbin/groupadd -g 106 klogd");
319 mysystem("/bin/chroot /harddisk /usr/sbin/useradd -u 106 -g klogd -d / -s /bin/false -M klogd");
324 int _del_setup_user() {
325 mysystem("/bin/chroot /harddisk /usr/sbin/userdel setup");
330 int _create_nobody_dir(){
331 mysystem("/bin/chroot /harddisk /usr/sbin/usermod -d /home/nobody nobody");
336 int _del_useless_user_group()
338 mysystem("/bin/chroot /harddisk /usr/sbin/userdel games");
339 mysystem("/bin/chroot /harddisk /usr/sbin/groupdel games");
340 mysystem("/bin/chroot /harddisk /usr/sbin/userdel news");
341 mysystem("/bin/chroot /harddisk /usr/sbin/groupdel news");
342 mysystem("/bin/chroot /harddisk /usr/sbin/userdel ftp");
343 mysystem("/bin/chroot /harddisk /usr/sbin/userdel gopher");
344 mysystem("/bin/chroot /harddisk /usr/sbin/userdel lp");
345 mysystem("/bin/chroot /harddisk /usr/sbin/userdel uucp");
346 mysystem("/bin/chroot /harddisk /usr/sbin/userdel adm");
347 mysystem("/bin/chroot /harddisk /usr/sbin/groupdel adm");
348 mysystem("/bin/chroot /harddisk /usr/sbin/userdel operator");
349 mysystem("/bin/chroot /harddisk /usr/sbin/userdel sync");
350 mysystem("/bin/chroot /harddisk /usr/sbin/userdel shutdown");
351 mysystem("/bin/chroot /harddisk /usr/sbin/userdel halt");
352 mysystem("/bin/chroot /harddisk /usr/sbin/groupdel man");
356 void _del_pulsardsl_dir()
358 mysystem("/bin/chroot /harddisk /bin/rm -rf " CONFIG_ROOT
"/pulsardsl");
361 void _del_fritzdsl_dir()
363 mysystem("/bin/chroot /harddisk /bin/rm -rf " CONFIG_ROOT
"/fritzdsl");
369 char vpnip
[STRING_SIZE
] = "";
370 char greennetaddr
[STRING_SIZE
] = "";
371 struct keyvalue
*kv
= initkeyvalues();
372 char vpnsrctemp
[STRING_SIZE
], vpndsttemp
[STRING_SIZE
];
373 char *name
, *left
, *left_nexthop
, *left_subnet
, *right
, *right_nexthop
, *right_subnet
, *secret
, *enabled
, *compression
;
375 if (!(vpn1
= fopen ("/harddisk" CONFIG_ROOT
"/vpn/config", "r"))) return 1;
376 if (!(vpn2
= fopen ("/harddisk" CONFIG_ROOT
"/vpn/config.new", "w")))
382 if (!(readkeyvalues(kv
, "/harddisk" CONFIG_ROOT
"/ethernet/settings")))
387 errorbox(ctr
[TR_UNABLE_TO_OPEN_SETTINGS_FILE
]);
391 findkey(kv
, "GREEN_NETADDRESS", greennetaddr
);
394 kv
= initkeyvalues();
395 if (!(readkeyvalues(kv
, "/harddisk" CONFIG_ROOT
"/vpn/settings")))
400 errorbox(ctr
[TR_UNABLE_TO_OPEN_SETTINGS_FILE
]);
404 /* if no VPN_IP is defined, we must turn it off to force the user
405 * to enter a value once upgraded */
406 findkey(kv
, "VPN_IP", vpnip
);
407 if (strlen(vpnip
) == 0) {
408 replacekeyvalue(kv
, "ENABLED", "off");
409 writekeyvalues(kv
, "/harddisk" CONFIG_ROOT
"/vpn/settings");
413 while (fgets (vpnsrctemp
, STRING_SIZE
, vpn1
) != NULL
) {
414 if (isdigit (vpnsrctemp
[0])) {
415 /* Already converted to new format */
416 fputs(vpnsrctemp
, vpn2
);
425 right_nexthop
= NULL
;
431 if (vpnsrctemp
[strlen(vpnsrctemp
) - 1] == '\n')
432 vpnsrctemp
[strlen(vpnsrctemp
) - 1] = '\0';
433 name
= strtok (vpnsrctemp
, ",");
434 left
= strtok (NULL
, ",");
435 left_nexthop
= strtok (NULL
, ",");
436 left_subnet
= strtok (NULL
, ",");
437 right
= strtok (NULL
, ",");
438 right_nexthop
= strtok (NULL
, ",");
439 right_subnet
= strtok (NULL
, ",");
440 secret
= strtok (NULL
, ",");
441 enabled
= strtok (NULL
, ",");
442 compression
= strtok (NULL
, ",");
443 if (!(name
&& left
&& left_subnet
&&
444 right
&& right_subnet
&&
445 secret
&& enabled
&& compression
))
448 /* Try and guess what side IPCop is on; defaults to left */
449 if (strstr(greennetaddr
, right_subnet
)) {
450 sprintf (vpndsttemp
, "%d,%s,%s,,net,psk,%s,right,,%s,,%s,%s,,%s,,,,,,,,,,,,,RED\n",
451 count
, enabled
, name
, secret
, right_subnet
,
452 left
, left_subnet
, compression
);
454 sprintf (vpndsttemp
, "%d,%s,%s,,net,psk,%s,left,,%s,,%s,%s,,%s,,,,,,,,,,,,,RED\n",
455 count
, enabled
, name
, secret
, left_subnet
,
456 right
, right_subnet
, compression
);
458 fputs(vpndsttemp
, vpn2
);
463 /* Close source and destination vpn files */
467 /* Move the new vpn file */
468 rename ("/harddisk" CONFIG_ROOT
"/vpn/config.new",
469 "/harddisk" CONFIG_ROOT
"/vpn/config");
470 chown ("/harddisk" CONFIG_ROOT
"/vpn/config", 99, 99);
475 void _convert_ppp_settings_V140() {
478 char filename
[STRING_SIZE
];
480 dirp
= opendir( "/harddisk" CONFIG_ROOT
"/ppp" );
481 while ( (dp
= readdir( dirp
)) != NULL
) {
482 if ( strstr( dp
->d_name
, "settings" ) == dp
->d_name
) {
483 snprintf (filename
, STRING_SIZE
-1, "%s/%s",
484 "/harddisk" CONFIG_ROOT
"/ppp", dp
->d_name
);
485 replace (filename
, "PERSISTENT=on", "RECONNECTION=persistent");
486 replace (filename
, "DIALONDEMAND=on", "RECONNECTION=dialondemand");
487 replace (filename
, "MODULATION=GDTM", "MODULATION=GDMT");
488 chown (filename
, 99, 99);
491 (void) closedir( dirp
);
494 void _convert_net_settings_V140(){
495 replace ("/harddisk" CONFIG_ROOT
"/ethernet/settings", "eepro100", "e100");
496 chown ("/harddisk" CONFIG_ROOT
"/ethernet/settings", 99, 99);
499 void _convert_keymap() {
500 replace("/harddisk" CONFIG_ROOT
"/main/settings", "KEYMAP=/lib/kbd", "KEYMAP=/usr/share/kbd");
501 replace("/harddisk" CONFIG_ROOT
"/main/settings", ".kmap.gz", ".map.gz");
502 chown ("/harddisk" CONFIG_ROOT
"/main/settings", 99, 99);
505 void _convert_speedtouch() {
506 FILE *speedtchbootfile
;
507 FILE *speedtchfirmfile
;
509 if (( speedtchfirmfile
= fopen ("/harddisk" CONFIG_ROOT
"/alcatelusb/firmware.v4.bin", "r")))
511 fclose (speedtchfirmfile
);
512 if ((speedtchbootfile
= fopen ("/harddisk" CONFIG_ROOT
"/alcatelusb/boot.v4.bin", "r"))) {
513 fclose (speedtchbootfile
);
514 system("/bin/cat /harddisk" CONFIG_ROOT
"/alcatelusb/boot.v4.bin "
515 "/harddisk" CONFIG_ROOT
"/alcatelusb/firmware.v4.bin"
516 "> /harddisk" CONFIG_ROOT
"/alcatelusb/firmware.v4_b.bin");
517 remove ("/harddisk" CONFIG_ROOT
"/alcatelusb/boot.v4.bin");
518 remove ("/harddisk" CONFIG_ROOT
"/alcatelusb/firmware.v4.bin");
519 chown ("/harddisk" CONFIG_ROOT
"/alcatelusb/firmware.v4_b.bin", 99, 99);
523 if (( speedtchfirmfile
= fopen ("/harddisk" CONFIG_ROOT
"/alcatelusb/firmware.v123.bin", "r"))) {
524 fclose (speedtchfirmfile
);
525 system("/bin/cat /harddisk" CONFIG_ROOT
"/alcatelusb/boot.v123.bin "
526 "/harddisk" CONFIG_ROOT
"/alcatelusb/firmware.v123.bin"
527 "> /harddisk" CONFIG_ROOT
"/alcatelusb/firmware.v0123.bin");
528 remove ("/harddisk" CONFIG_ROOT
"/alcatelusb/firmware.v123.bin");
531 remove ("/harddisk" CONFIG_ROOT
"/alcatelusb/boot.v123.bin");
533 rename ("/harddisk" CONFIG_ROOT
"/alcatelusb/mgmt.o", "/harddisk" CONFIG_ROOT
"/alcatelusb/firmware.v0123.bin");
534 chown ("/harddisk" CONFIG_ROOT
"/alcatelusb/firmware.v0123.bin", 99, 99);
537 void _convert_isapnp() {
540 mkdir ("/harddisk" CONFIG_ROOT
"/isapnp", S_IRWXU
|S_IRWXG
|S_IRWXO
);
541 if (( isapnpfile
= fopen ("/harddisk/etc/isapnp.conf", "r"))) {
543 rename ("/harddisk/etc/isapnp.conf", "/harddisk" CONFIG_ROOT
"/isapnp/isapnp.conf");
545 if (( isapnpfile
= fopen ("/harddisk" CONFIG_ROOT
"/isapnp/isapnp.conf", "r"))) {
548 isapnpfile
= fopen ("/harddisk" CONFIG_ROOT
"/isapnp/isapnp.conf", "w");
554 int upgrade_v130_v140() {
556 _del_useless_user_group();
557 _add_logwatch_user();
561 _add_sysklogd_user();
562 _del_pulsardsl_dir();
568 _create_nobody_dir();
569 _convert_ppp_settings_V140();
570 _convert_net_settings_V140();
573 _convert_speedtouch();