-/*\r
- * This file is part of the IPCop Firewall.\r
- *\r
- * IPCop is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * IPCop is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with IPCop; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
- *\r
- * Copyright 2002: Mark Wormgoor <mark@wormgoor.com>\r
- * \r
- * $Id: upgrade-v130-v140.c,v 1.12.2.35 2004/11/11 09:40:03 alanh Exp $\r
- * \r
- */\r
-\r
-#include "install.h"\r
-\r
-extern char **ctr;\r
- \r
-int _handledomainname(void)\r
-{\r
- char domainname[STRING_SIZE] = "localdomain";\r
- struct keyvalue *kv = initkeyvalues();\r
- char *values[] = { domainname, NULL }; /* pointers for the values. */\r
- struct newtWinEntry entries[] =\r
- { { "", &values[0], 0,}, { NULL, NULL, 0 } };\r
- int rc;\r
- int result;\r
- \r
- if (!(readkeyvalues(kv, "/harddisk" CONFIG_ROOT "/main/settings")))\r
- {\r
- freekeyvalues(kv);\r
- errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);\r
- return 0;\r
- } \r
- \r
- findkey(kv, "DOMAINNAME", domainname);\r
-\r
- /* already have a domainname */\r
- if (strlen(domainname))\r
- return 0;\r
- \r
- for (;;)\r
- { \r
- rc = newtWinEntries(ctr[TR_DOMAINNAME], ctr[TR_ENTER_DOMAINNAME],\r
- 50, 5, 5, 40, entries, ctr[TR_OK], ctr[TR_CANCEL], NULL); \r
- \r
- if (rc == 1)\r
- {\r
- strcpy(domainname, values[0]);\r
- if (strchr(domainname, ' '))\r
- errorbox(ctr[TR_DOMAINNAME_CANNOT_CONTAIN_SPACES]);\r
- else\r
- { \r
- replacekeyvalue(kv, "DOMAINNAME", domainname);\r
- writekeyvalues(kv, "/harddisk" CONFIG_ROOT "/main/settings");\r
- result = 1;\r
- break;\r
- }\r
- }\r
- else\r
- {\r
- result = 0;\r
- break;\r
- }\r
- }\r
- free(values[0]);\r
- freekeyvalues(kv);\r
- \r
- return result;\r
-} \r
-\r
-int _add_logwatch_user() {\r
- mysystem("/bin/chroot /harddisk /usr/sbin/userdel logwatch");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/groupdel logwatch");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/groupadd -g 102 logwatch");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/useradd -u 102 -g logwatch -d /var/log/logwatch -s /bin/false logwatch");\r
- \r
- return 0;\r
-}\r
-\r
-int _fixsquid() {\r
- FILE *squidreadfile;\r
- FILE *squidwritefile;\r
- FILE *aclreadfile;\r
- char hostname[STRING_SIZE] = "";\r
- char domainname[STRING_SIZE] = "";\r
- char squidtemp[STRING_SIZE];\r
- struct keyvalue *kv = initkeyvalues();\r
- int already_upgraded = 0;\r
- int updated = 0;\r
-\r
- if (!(squidreadfile = fopen ("/harddisk" CONFIG_ROOT "/proxy/squid.conf", "r"))) return 1;\r
- if (!(squidwritefile = fopen ("/harddisk" CONFIG_ROOT "/proxy/squid.conf.new", "w"))) \r
- {\r
- fclose(squidreadfile);\r
- return 1;\r
- }\r
-\r
- if (!(readkeyvalues(kv, "/harddisk" CONFIG_ROOT "/main/settings")))\r
- {\r
- fclose (squidwritefile);\r
- fclose (squidreadfile);\r
- freekeyvalues(kv);\r
- errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);\r
- return 1;\r
- }\r
-\r
- findkey(kv, "HOSTNAME", hostname);\r
- findkey(kv, "DOMAINNAME", domainname);\r
- freekeyvalues(kv);\r
-\r
- while (fgets (squidtemp, STRING_SIZE, squidreadfile) != NULL) {\r
- /* this will fail if we've already been upgraded, which is ok */\r
- if (!strncmp(squidtemp, "reply_body_max_size 0 KB", 24)) {\r
- sprintf(squidtemp, "reply_body_max_size 0 allow all\n");\r
- }\r
- if (!strncmp(squidtemp, "cache_store_log /var/log/squid/store.log", 40)) {\r
- sprintf(squidtemp, "cache_store_log none\n");\r
- }\r
- fputs(squidtemp, squidwritefile);\r
-\r
- /* so for us developers we skip already upgraded squiddies */\r
- if (!strncmp(squidtemp, "visible_hostname", 16)) {\r
- already_upgraded = 1;\r
- }\r
-\r
- /* Check for the new acl's */\r
- if (!strncmp(squidtemp, "__GREEN_IP__", 12)) {\r
- updated = 1;\r
- }\r
- }\r
- if (!already_upgraded) {\r
- sprintf(squidtemp, "visible_hostname %s.%s\n", hostname, domainname);\r
- fputs(squidtemp, squidwritefile);\r
- }\r
-\r
- fclose (squidwritefile);\r
- fclose (squidreadfile);\r
-\r
- rename ("/harddisk" CONFIG_ROOT "/proxy/squid.conf.new",\r
- "/harddisk" CONFIG_ROOT "/proxy/squid.conf");\r
-\r
- replace("/harddisk" CONFIG_ROOT "/proxy/squid.conf", "cache_dir ufs", "cache_dir aufs");\r
-\r
- if (!updated) {\r
- rename ("/harddisk" CONFIG_ROOT "/proxy/acl",\r
- "/harddisk" CONFIG_ROOT "/proxy/acl.old");\r
- rename ("/harddisk" CONFIG_ROOT "/proxy/acl-1.4",\r
- "/harddisk" CONFIG_ROOT "/proxy/acl");\r
- } else {\r
- if (!(aclreadfile = fopen ("/harddisk" CONFIG_ROOT "/proxy/acl", "r"))) {\r
- rename ("/harddisk" CONFIG_ROOT "/proxy/acl-1.4",\r
- "/harddisk" CONFIG_ROOT "/proxy/acl");\r
- } else {\r
- unlink ("/harddisk" CONFIG_ROOT "/proxy/acl-1.4");\r
- fclose(aclreadfile);\r
- }\r
- }\r
-\r
- chown ("/harddisk" CONFIG_ROOT "/proxy/squid.conf", 99, 99);\r
- chown ("/harddisk" CONFIG_ROOT "/proxy/acl", 99, 99);\r
- return 0;\r
-}\r
-\r
-int _fixeagleusb() {\r
- FILE *eaglereadfile;\r
- FILE *eaglewritefile;\r
- char eagletemp[STRING_SIZE];\r
- int already_upgraded = 0;\r
-\r
- if (!(eaglereadfile = fopen ("/harddisk" CONFIG_ROOT "/eagle-usb/eagle-usb.conf", "r"))) return 1;\r
- if (!(eaglewritefile = fopen ("/harddisk" CONFIG_ROOT "/eagle-usb/eagle-usb.conf.new", "w"))) \r
- {\r
- fclose(eaglereadfile);\r
- return 1;\r
- }\r
-\r
- while (fgets (eagletemp, STRING_SIZE, eaglereadfile) != NULL) {\r
- /* so for us developers we skip already upgraded configs */\r
- if (!strncmp(eagletemp, "<eaglectrl>", 11)) {\r
- already_upgraded = 1;\r
- }\r
- }\r
-\r
- rewind(eaglereadfile);\r
- if (!already_upgraded)\r
- fprintf(eaglewritefile, "<eaglectrl>\n");\r
- while (fgets (eagletemp, STRING_SIZE, eaglereadfile) != NULL)\r
- fputs(eagletemp, eaglewritefile);\r
- if (!already_upgraded)\r
- fprintf(eaglewritefile, "</eaglectrl>\n");\r
-\r
- fclose (eaglewritefile);\r
- fclose (eaglereadfile);\r
-\r
- rename ("/harddisk" CONFIG_ROOT "/eagle-usb/eagle-usb.conf.new",\r
- "/harddisk" CONFIG_ROOT "/eagle-usb/eagle-usb.conf");\r
-\r
- replace("/harddisk" CONFIG_ROOT "/eagle-usb/eagle-usb.conf", "Linetype=00000001", "Linetype=0A");\r
-\r
- chown ("/harddisk" CONFIG_ROOT "/eagle-usb/eagle-usb.conf", 99, 99);\r
- unlink("/harddisk" CONFIG_ROOT "/eagle-usb/dsp_code_pots.bin");\r
- unlink("/harddisk" CONFIG_ROOT "/eagle-usb/dsp_code_isdn.bin");\r
- return 0;\r
-}\r
-\r
-int _fixdhcp_30() {\r
- FILE *dhcpreadfile;\r
- FILE *dhcpwritefile;\r
- char dhcptemp[STRING_SIZE];\r
-\r
- if (!(dhcpreadfile = fopen ("/harddisk" CONFIG_ROOT "/dhcp/dhcpd.conf", "r"))) return 1;\r
- if (!(dhcpwritefile = fopen ("/harddisk" CONFIG_ROOT "/dhcp/dhcpd.conf.new", "w"))) \r
- {\r
- fclose(dhcpreadfile);\r
- return 1;\r
- }\r
- fprintf (dhcpwritefile, "authoritative;\n");\r
- fprintf (dhcpwritefile, "deny bootp;\n");\r
- fprintf (dhcpwritefile, "ddns-update-style none;\n");\r
- while (fgets (dhcptemp, STRING_SIZE, dhcpreadfile) != NULL) {\r
- int write = 1;\r
-\r
- /* so for us developers we skip already upgraded dhcp files */\r
- if (!strncmp(dhcptemp, "authoritative", 13)) {\r
- write = 0;\r
- }\r
- /* so for us developers we skip already upgraded dhcp files */\r
- if (!strncmp(dhcptemp, "ddns-update-style", 17)) {\r
- write = 0;\r
- }\r
- /* so for us developers we skip already upgraded dhcp files */\r
- if (!strncmp(dhcptemp, "deny bootp", 10)) {\r
- write = 0;\r
- }\r
-\r
- if (write)\r
- fputs(dhcptemp, dhcpwritefile);\r
- }\r
-\r
- fclose(dhcpreadfile);\r
- fclose(dhcpwritefile);\r
-\r
- rename ("/harddisk" CONFIG_ROOT "/dhcp/dhcpd.conf.new",\r
- "/harddisk" CONFIG_ROOT "/dhcp/dhcpd.conf");\r
- chown ("/harddisk" CONFIG_ROOT "/dhcp/dhcpd.conf", 99, 99);\r
-\r
- /* This one will get converted again furthur down */\r
- replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "WINS=", "WINS1=");\r
-\r
- replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "START_ADDR=", "START_ADDR_GREEN=");\r
- replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "END_ADDR=", "END_ADDR_GREEN=");\r
- replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "DOMAIN_NAME=", "DOMAIN_NAME_GREEN=");\r
- replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "DEFAULT_LEASE_TIME=", "DEFAULT_LEASE_TIME_GREEN=");\r
- replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "MAX_LEASE_TIME=", "MAX_LEASE_TIME_GREEN=");\r
- replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "DNS1=", "DNS1_GREEN=");\r
- replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "DNS2=", "DNS2_GREEN=");\r
- replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "WINS1=", "WINS1_GREEN=");\r
- replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "WINS2=", "WINS2_GREEN=");\r
- replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "ENABLE=", "ENABLE_GREEN=");\r
- replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "range dynamic-bootp", "range");\r
- chown ("/harddisk" CONFIG_ROOT "/dhcp/settings", 99, 99);\r
-\r
- if ((dhcpreadfile = fopen ("/harddisk" CONFIG_ROOT "/dhcp/enable", "r")))\r
- {\r
- fclose(dhcpreadfile);\r
- rename ("/harddisk" CONFIG_ROOT "/dhcp/enable",\r
- "/harddisk" CONFIG_ROOT "/dhcp/enable_green");\r
- chown ("/harddisk" CONFIG_ROOT "/dhcp/enable_green", 99, 99);\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-int _add_sshd_user() {\r
- mysystem("/bin/chroot /harddisk /usr/sbin/userdel sshd");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/groupdel sshd");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/groupadd -g 74 sshd");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/useradd -u 74 -g sshd -d /var/empty/sshd -s /bin/false -M sshd");\r
- \r
- return 0;\r
-}\r
-\r
-int _add_dnsmasq_user() {\r
- mysystem("/bin/chroot /harddisk /usr/sbin/userdel dnsmasq");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/groupdel dnsmasq");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/groupadd -g 103 dnsmasq");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/useradd -u 103 -g dnsmasq -d / -s /bin/false -M dnsmasq");\r
- \r
- return 0;\r
-}\r
-\r
-int _add_cron_user() {\r
- mysystem("/bin/chroot /harddisk /usr/sbin/userdel cron");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/groupdel cron");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/groupadd -g 104 cron");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/useradd -u 104 -g cron -d / -s /bin/false -M cron");\r
- \r
- return 0;\r
-}\r
-\r
-int _add_sysklogd_user() {\r
- mysystem("/bin/chroot /harddisk /usr/sbin/userdel syslogd");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/groupdel syslogd");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/groupadd -g 105 syslogd");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/useradd -u 105 -g syslogd -d / -s /bin/false -M syslogd");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/userdel klogd");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/groupdel klogd");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/groupadd -g 106 klogd");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/useradd -u 106 -g klogd -d / -s /bin/false -M klogd");\r
- \r
- return 0;\r
-}\r
-\r
-int _del_setup_user() {\r
- mysystem("/bin/chroot /harddisk /usr/sbin/userdel setup");\r
- \r
- return 0;\r
-}\r
-\r
-int _create_nobody_dir(){\r
- mysystem("/bin/chroot /harddisk /usr/sbin/usermod -d /home/nobody nobody");\r
-\r
- return 0;\r
-}\r
-\r
-int _del_useless_user_group()\r
-{\r
- mysystem("/bin/chroot /harddisk /usr/sbin/userdel games");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/groupdel games");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/userdel news");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/groupdel news");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/userdel ftp");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/userdel gopher");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/userdel lp");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/userdel uucp");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/userdel adm");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/groupdel adm");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/userdel operator");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/userdel sync");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/userdel shutdown");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/userdel halt");\r
- mysystem("/bin/chroot /harddisk /usr/sbin/groupdel man");\r
- return 0;\r
-}\r
-\r
-void _del_pulsardsl_dir()\r
-{\r
- mysystem("/bin/chroot /harddisk /bin/rm -rf " CONFIG_ROOT "/pulsardsl");\r
-}\r
-\r
-void _del_fritzdsl_dir()\r
-{\r
- mysystem("/bin/chroot /harddisk /bin/rm -rf " CONFIG_ROOT "/fritzdsl");\r
-}\r
-\r
-int _convert_vpn() {\r
- int count=1;\r
- FILE *vpn1, *vpn2;\r
- char vpnip[STRING_SIZE] = "";\r
- char greennetaddr[STRING_SIZE] = "";\r
- struct keyvalue *kv = initkeyvalues();\r
- char vpnsrctemp[STRING_SIZE], vpndsttemp[STRING_SIZE];\r
- char *name, *left, *left_nexthop, *left_subnet, *right, *right_nexthop, *right_subnet, *secret, *enabled, *compression;\r
-\r
- if (!(vpn1 = fopen ("/harddisk" CONFIG_ROOT "/vpn/config", "r"))) return 1;\r
- if (!(vpn2 = fopen ("/harddisk" CONFIG_ROOT "/vpn/config.new", "w"))) \r
- {\r
- fclose(vpn1);\r
- return 1;\r
- }\r
-\r
- if (!(readkeyvalues(kv, "/harddisk" CONFIG_ROOT "/ethernet/settings")))\r
- {\r
- fclose (vpn1);\r
- fclose (vpn2);\r
- freekeyvalues(kv);\r
- errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);\r
- return 0;\r
- }\r
-\r
- findkey(kv, "GREEN_NETADDRESS", greennetaddr);\r
- freekeyvalues(kv);\r
-\r
- kv = initkeyvalues();\r
- if (!(readkeyvalues(kv, "/harddisk" CONFIG_ROOT "/vpn/settings")))\r
- {\r
- fclose (vpn1);\r
- fclose (vpn2);\r
- freekeyvalues(kv);\r
- errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);\r
- return 0;\r
- } \r
- \r
- /* if no VPN_IP is defined, we must turn it off to force the user\r
- * to enter a value once upgraded */\r
- findkey(kv, "VPN_IP", vpnip);\r
- if (strlen(vpnip) == 0) {\r
- replacekeyvalue(kv, "ENABLED", "off");\r
- writekeyvalues(kv, "/harddisk" CONFIG_ROOT "/vpn/settings");\r
- }\r
- freekeyvalues(kv);\r
-\r
- while (fgets (vpnsrctemp, STRING_SIZE, vpn1) != NULL) {\r
- if (isdigit (vpnsrctemp[0])) {\r
- /* Already converted to new format */\r
- fputs(vpnsrctemp, vpn2);\r
- continue;\r
- }\r
-\r
- name = NULL;\r
- left = NULL;\r
- left_nexthop = NULL;\r
- left_subnet = NULL;\r
- right = NULL;\r
- right_nexthop = NULL;\r
- right_subnet = NULL;\r
- secret = NULL;\r
- enabled = NULL;\r
- compression = NULL;\r
- \r
- if (vpnsrctemp[strlen(vpnsrctemp) - 1] == '\n')\r
- vpnsrctemp[strlen(vpnsrctemp) - 1] = '\0';\r
- name = strtok (vpnsrctemp, ",");\r
- left = strtok (NULL, ",");\r
- left_nexthop = strtok (NULL, ",");\r
- left_subnet = strtok (NULL, ",");\r
- right = strtok (NULL, ",");\r
- right_nexthop = strtok (NULL, ",");\r
- right_subnet = strtok (NULL, ",");\r
- secret = strtok (NULL, ",");\r
- enabled = strtok (NULL, ",");\r
- compression = strtok (NULL, ",");\r
- if (!(name && left && left_subnet &&\r
- right && right_subnet &&\r
- secret && enabled && compression ))\r
- continue;\r
-\r
- /* Try and guess what side IPCop is on; defaults to left */\r
- if (strstr(greennetaddr, right_subnet)) {\r
- sprintf (vpndsttemp, "%d,%s,%s,,net,psk,%s,right,,%s,,%s,%s,,%s,,,,,,,,,,,,,RED\n",\r
- count, enabled, name, secret, right_subnet,\r
- left, left_subnet, compression);\r
- } else {\r
- sprintf (vpndsttemp, "%d,%s,%s,,net,psk,%s,left,,%s,,%s,%s,,%s,,,,,,,,,,,,,RED\n",\r
- count, enabled, name, secret, left_subnet,\r
- right, right_subnet, compression);\r
- }\r
- fputs(vpndsttemp, vpn2);\r
-\r
- count++;\r
- }\r
-\r
- /* Close source and destination vpn files */\r
- fclose (vpn1);\r
- fclose (vpn2);\r
-\r
- /* Move the new vpn file */\r
- rename ("/harddisk" CONFIG_ROOT "/vpn/config.new",\r
- "/harddisk" CONFIG_ROOT "/vpn/config");\r
- chown ("/harddisk" CONFIG_ROOT "/vpn/config", 99, 99);\r
-\r
- return 0;\r
-}\r
-\r
-void _convert_ppp_settings_V140() {\r
- DIR *dirp;\r
- struct dirent *dp;\r
- char filename[STRING_SIZE];\r
- \r
- dirp = opendir( "/harddisk" CONFIG_ROOT "/ppp" );\r
- while ( (dp = readdir( dirp )) != NULL ) {\r
- if ( strstr( dp->d_name, "settings" ) == dp->d_name ) {\r
- snprintf (filename, STRING_SIZE-1, "%s/%s", \r
- "/harddisk" CONFIG_ROOT "/ppp", dp->d_name);\r
- replace (filename, "PERSISTENT=on", "RECONNECTION=persistent");\r
- replace (filename, "DIALONDEMAND=on", "RECONNECTION=dialondemand");\r
- replace (filename, "MODULATION=GDTM", "MODULATION=GDMT");\r
- chown (filename, 99, 99);\r
- } \r
- }\r
- (void) closedir( dirp );\r
-}\r
-\r
-void _convert_net_settings_V140(){\r
- replace ("/harddisk" CONFIG_ROOT "/ethernet/settings", "eepro100", "e100");\r
- chown ("/harddisk" CONFIG_ROOT "/ethernet/settings", 99, 99);\r
-}\r
-\r
-void _convert_keymap() {\r
- replace("/harddisk" CONFIG_ROOT "/main/settings", "KEYMAP=/lib/kbd", "KEYMAP=/usr/share/kbd");\r
- replace("/harddisk" CONFIG_ROOT "/main/settings", ".kmap.gz", ".map.gz");\r
- chown ("/harddisk" CONFIG_ROOT "/main/settings", 99, 99);\r
-}\r
-\r
-void _convert_speedtouch() {\r
- FILE *speedtchbootfile;\r
- FILE *speedtchfirmfile;\r
-\r
- if (( speedtchfirmfile = fopen ("/harddisk" CONFIG_ROOT "/alcatelusb/firmware.v4.bin", "r")))\r
- {\r
- fclose (speedtchfirmfile);\r
- if ((speedtchbootfile = fopen ("/harddisk" CONFIG_ROOT "/alcatelusb/boot.v4.bin", "r"))) {\r
- fclose (speedtchbootfile);\r
- system("/bin/cat /harddisk" CONFIG_ROOT "/alcatelusb/boot.v4.bin "\r
- "/harddisk" CONFIG_ROOT "/alcatelusb/firmware.v4.bin"\r
- "> /harddisk" CONFIG_ROOT "/alcatelusb/firmware.v4_b.bin");\r
- remove ("/harddisk" CONFIG_ROOT "/alcatelusb/boot.v4.bin");\r
- remove ("/harddisk" CONFIG_ROOT "/alcatelusb/firmware.v4.bin");\r
- chown ("/harddisk" CONFIG_ROOT "/alcatelusb/firmware.v4_b.bin", 99, 99);\r
- }\r
- }\r
-\r
- if (( speedtchfirmfile = fopen ("/harddisk" CONFIG_ROOT "/alcatelusb/firmware.v123.bin", "r"))) {\r
- fclose (speedtchfirmfile);\r
- system("/bin/cat /harddisk" CONFIG_ROOT "/alcatelusb/boot.v123.bin "\r
- "/harddisk" CONFIG_ROOT "/alcatelusb/firmware.v123.bin"\r
- "> /harddisk" CONFIG_ROOT "/alcatelusb/firmware.v0123.bin");\r
- remove ("/harddisk" CONFIG_ROOT "/alcatelusb/firmware.v123.bin");\r
- }\r
-\r
- remove ("/harddisk" CONFIG_ROOT "/alcatelusb/boot.v123.bin");\r
-\r
- rename ("/harddisk" CONFIG_ROOT "/alcatelusb/mgmt.o", "/harddisk" CONFIG_ROOT "/alcatelusb/firmware.v0123.bin");\r
- chown ("/harddisk" CONFIG_ROOT "/alcatelusb/firmware.v0123.bin", 99, 99);\r
-}\r
-\r
-void _convert_isapnp() {\r
- FILE *isapnpfile;\r
-\r
- mkdir ("/harddisk" CONFIG_ROOT "/isapnp", S_IRWXU|S_IRWXG|S_IRWXO );\r
- if (( isapnpfile = fopen ("/harddisk/etc/isapnp.conf", "r"))) {\r
- fclose (isapnpfile);\r
- rename ("/harddisk/etc/isapnp.conf", "/harddisk" CONFIG_ROOT "/isapnp/isapnp.conf");\r
- } else {\r
- if (( isapnpfile = fopen ("/harddisk" CONFIG_ROOT "/isapnp/isapnp.conf", "r"))) {\r
- fclose(isapnpfile);\r
- } else {\r
- isapnpfile = fopen ("/harddisk" CONFIG_ROOT "/isapnp/isapnp.conf", "w");\r
- fclose(isapnpfile);\r
- }\r
- }\r
-}\r
-\r
-int upgrade_v130_v140() {\r
- _del_setup_user();\r
- _del_useless_user_group();\r
- _add_logwatch_user();\r
- _add_sshd_user();\r
- _add_dnsmasq_user();\r
- _add_cron_user();\r
- _add_sysklogd_user();\r
- _del_pulsardsl_dir();\r
- _del_fritzdsl_dir();\r
- _convert_vpn();\r
- _handledomainname();\r
- _fixsquid();\r
- _fixeagleusb();\r
- _create_nobody_dir();\r
- _convert_ppp_settings_V140();\r
- _convert_net_settings_V140();\r
- _fixdhcp_30();\r
- _convert_keymap();\r
- _convert_speedtouch();\r
- _convert_isapnp();\r
-\r
- return 0;\r
-}\r
+/*
+ * This file is part of the IPCop Firewall.
+ *
+ * IPCop is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * IPCop is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with IPCop; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Copyright 2002: Mark Wormgoor <mark@wormgoor.com>
+ *
+ * $Id: upgrade-v130-v140.c,v 1.12.2.35 2004/11/11 09:40:03 alanh Exp $
+ *
+ */
+
+#include "install.h"
+
+extern char **ctr;
+
+int _handledomainname(void)
+{
+ char domainname[STRING_SIZE] = "localdomain";
+ struct keyvalue *kv = initkeyvalues();
+ char *values[] = { domainname, NULL }; /* pointers for the values. */
+ struct newtWinEntry entries[] =
+ { { "", &values[0], 0,}, { NULL, NULL, 0 } };
+ int rc;
+ int result;
+
+ if (!(readkeyvalues(kv, "/harddisk" CONFIG_ROOT "/main/settings")))
+ {
+ freekeyvalues(kv);
+ errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+ return 0;
+ }
+
+ findkey(kv, "DOMAINNAME", domainname);
+
+ /* already have a domainname */
+ if (strlen(domainname))
+ return 0;
+
+ for (;;)
+ {
+ rc = newtWinEntries(ctr[TR_DOMAINNAME], ctr[TR_ENTER_DOMAINNAME],
+ 50, 5, 5, 40, entries, ctr[TR_OK], ctr[TR_CANCEL], NULL);
+
+ if (rc == 1)
+ {
+ strcpy(domainname, values[0]);
+ if (strchr(domainname, ' '))
+ errorbox(ctr[TR_DOMAINNAME_CANNOT_CONTAIN_SPACES]);
+ else
+ {
+ replacekeyvalue(kv, "DOMAINNAME", domainname);
+ writekeyvalues(kv, "/harddisk" CONFIG_ROOT "/main/settings");
+ result = 1;
+ break;
+ }
+ }
+ else
+ {
+ result = 0;
+ break;
+ }
+ }
+ free(values[0]);
+ freekeyvalues(kv);
+
+ return result;
+}
+
+int _add_logwatch_user() {
+ mysystem("/bin/chroot /harddisk /usr/sbin/userdel logwatch");
+ mysystem("/bin/chroot /harddisk /usr/sbin/groupdel logwatch");
+ mysystem("/bin/chroot /harddisk /usr/sbin/groupadd -g 102 logwatch");
+ mysystem("/bin/chroot /harddisk /usr/sbin/useradd -u 102 -g logwatch -d /var/log/logwatch -s /bin/false logwatch");
+
+ return 0;
+}
+
+int _fixsquid() {
+ FILE *squidreadfile;
+ FILE *squidwritefile;
+ FILE *aclreadfile;
+ char hostname[STRING_SIZE] = "";
+ char domainname[STRING_SIZE] = "";
+ char squidtemp[STRING_SIZE];
+ struct keyvalue *kv = initkeyvalues();
+ int already_upgraded = 0;
+ int updated = 0;
+
+ if (!(squidreadfile = fopen ("/harddisk" CONFIG_ROOT "/proxy/squid.conf", "r"))) return 1;
+ if (!(squidwritefile = fopen ("/harddisk" CONFIG_ROOT "/proxy/squid.conf.new", "w")))
+ {
+ fclose(squidreadfile);
+ return 1;
+ }
+
+ if (!(readkeyvalues(kv, "/harddisk" CONFIG_ROOT "/main/settings")))
+ {
+ fclose (squidwritefile);
+ fclose (squidreadfile);
+ freekeyvalues(kv);
+ errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+ return 1;
+ }
+
+ findkey(kv, "HOSTNAME", hostname);
+ findkey(kv, "DOMAINNAME", domainname);
+ freekeyvalues(kv);
+
+ while (fgets (squidtemp, STRING_SIZE, squidreadfile) != NULL) {
+ /* this will fail if we've already been upgraded, which is ok */
+ if (!strncmp(squidtemp, "reply_body_max_size 0 KB", 24)) {
+ sprintf(squidtemp, "reply_body_max_size 0 allow all\n");
+ }
+ if (!strncmp(squidtemp, "cache_store_log /var/log/squid/store.log", 40)) {
+ sprintf(squidtemp, "cache_store_log none\n");
+ }
+ fputs(squidtemp, squidwritefile);
+
+ /* so for us developers we skip already upgraded squiddies */
+ if (!strncmp(squidtemp, "visible_hostname", 16)) {
+ already_upgraded = 1;
+ }
+
+ /* Check for the new acl's */
+ if (!strncmp(squidtemp, "__GREEN_IP__", 12)) {
+ updated = 1;
+ }
+ }
+ if (!already_upgraded) {
+ sprintf(squidtemp, "visible_hostname %s.%s\n", hostname, domainname);
+ fputs(squidtemp, squidwritefile);
+ }
+
+ fclose (squidwritefile);
+ fclose (squidreadfile);
+
+ rename ("/harddisk" CONFIG_ROOT "/proxy/squid.conf.new",
+ "/harddisk" CONFIG_ROOT "/proxy/squid.conf");
+
+ replace("/harddisk" CONFIG_ROOT "/proxy/squid.conf", "cache_dir ufs", "cache_dir aufs");
+
+ if (!updated) {
+ rename ("/harddisk" CONFIG_ROOT "/proxy/acl",
+ "/harddisk" CONFIG_ROOT "/proxy/acl.old");
+ rename ("/harddisk" CONFIG_ROOT "/proxy/acl-1.4",
+ "/harddisk" CONFIG_ROOT "/proxy/acl");
+ } else {
+ if (!(aclreadfile = fopen ("/harddisk" CONFIG_ROOT "/proxy/acl", "r"))) {
+ rename ("/harddisk" CONFIG_ROOT "/proxy/acl-1.4",
+ "/harddisk" CONFIG_ROOT "/proxy/acl");
+ } else {
+ unlink ("/harddisk" CONFIG_ROOT "/proxy/acl-1.4");
+ fclose(aclreadfile);
+ }
+ }
+
+ chown ("/harddisk" CONFIG_ROOT "/proxy/squid.conf", 99, 99);
+ chown ("/harddisk" CONFIG_ROOT "/proxy/acl", 99, 99);
+ return 0;
+}
+
+int _fixeagleusb() {
+ FILE *eaglereadfile;
+ FILE *eaglewritefile;
+ char eagletemp[STRING_SIZE];
+ int already_upgraded = 0;
+
+ if (!(eaglereadfile = fopen ("/harddisk" CONFIG_ROOT "/eagle-usb/eagle-usb.conf", "r"))) return 1;
+ if (!(eaglewritefile = fopen ("/harddisk" CONFIG_ROOT "/eagle-usb/eagle-usb.conf.new", "w")))
+ {
+ fclose(eaglereadfile);
+ return 1;
+ }
+
+ while (fgets (eagletemp, STRING_SIZE, eaglereadfile) != NULL) {
+ /* so for us developers we skip already upgraded configs */
+ if (!strncmp(eagletemp, "<eaglectrl>", 11)) {
+ already_upgraded = 1;
+ }
+ }
+
+ rewind(eaglereadfile);
+ if (!already_upgraded)
+ fprintf(eaglewritefile, "<eaglectrl>\n");
+ while (fgets (eagletemp, STRING_SIZE, eaglereadfile) != NULL)
+ fputs(eagletemp, eaglewritefile);
+ if (!already_upgraded)
+ fprintf(eaglewritefile, "</eaglectrl>\n");
+
+ fclose (eaglewritefile);
+ fclose (eaglereadfile);
+
+ rename ("/harddisk" CONFIG_ROOT "/eagle-usb/eagle-usb.conf.new",
+ "/harddisk" CONFIG_ROOT "/eagle-usb/eagle-usb.conf");
+
+ replace("/harddisk" CONFIG_ROOT "/eagle-usb/eagle-usb.conf", "Linetype=00000001", "Linetype=0A");
+
+ chown ("/harddisk" CONFIG_ROOT "/eagle-usb/eagle-usb.conf", 99, 99);
+ unlink("/harddisk" CONFIG_ROOT "/eagle-usb/dsp_code_pots.bin");
+ unlink("/harddisk" CONFIG_ROOT "/eagle-usb/dsp_code_isdn.bin");
+ return 0;
+}
+
+int _fixdhcp_30() {
+ FILE *dhcpreadfile;
+ FILE *dhcpwritefile;
+ char dhcptemp[STRING_SIZE];
+
+ if (!(dhcpreadfile = fopen ("/harddisk" CONFIG_ROOT "/dhcp/dhcpd.conf", "r"))) return 1;
+ if (!(dhcpwritefile = fopen ("/harddisk" CONFIG_ROOT "/dhcp/dhcpd.conf.new", "w")))
+ {
+ fclose(dhcpreadfile);
+ return 1;
+ }
+ fprintf (dhcpwritefile, "authoritative;\n");
+ fprintf (dhcpwritefile, "deny bootp;\n");
+ fprintf (dhcpwritefile, "ddns-update-style none;\n");
+ while (fgets (dhcptemp, STRING_SIZE, dhcpreadfile) != NULL) {
+ int write = 1;
+
+ /* so for us developers we skip already upgraded dhcp files */
+ if (!strncmp(dhcptemp, "authoritative", 13)) {
+ write = 0;
+ }
+ /* so for us developers we skip already upgraded dhcp files */
+ if (!strncmp(dhcptemp, "ddns-update-style", 17)) {
+ write = 0;
+ }
+ /* so for us developers we skip already upgraded dhcp files */
+ if (!strncmp(dhcptemp, "deny bootp", 10)) {
+ write = 0;
+ }
+
+ if (write)
+ fputs(dhcptemp, dhcpwritefile);
+ }
+
+ fclose(dhcpreadfile);
+ fclose(dhcpwritefile);
+
+ rename ("/harddisk" CONFIG_ROOT "/dhcp/dhcpd.conf.new",
+ "/harddisk" CONFIG_ROOT "/dhcp/dhcpd.conf");
+ chown ("/harddisk" CONFIG_ROOT "/dhcp/dhcpd.conf", 99, 99);
+
+ /* This one will get converted again furthur down */
+ replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "WINS=", "WINS1=");
+
+ replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "START_ADDR=", "START_ADDR_GREEN=");
+ replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "END_ADDR=", "END_ADDR_GREEN=");
+ replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "DOMAIN_NAME=", "DOMAIN_NAME_GREEN=");
+ replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "DEFAULT_LEASE_TIME=", "DEFAULT_LEASE_TIME_GREEN=");
+ replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "MAX_LEASE_TIME=", "MAX_LEASE_TIME_GREEN=");
+ replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "DNS1=", "DNS1_GREEN=");
+ replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "DNS2=", "DNS2_GREEN=");
+ replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "WINS1=", "WINS1_GREEN=");
+ replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "WINS2=", "WINS2_GREEN=");
+ replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "ENABLE=", "ENABLE_GREEN=");
+ replace("/harddisk" CONFIG_ROOT "/dhcp/settings", "range dynamic-bootp", "range");
+ chown ("/harddisk" CONFIG_ROOT "/dhcp/settings", 99, 99);
+
+ if ((dhcpreadfile = fopen ("/harddisk" CONFIG_ROOT "/dhcp/enable", "r")))
+ {
+ fclose(dhcpreadfile);
+ rename ("/harddisk" CONFIG_ROOT "/dhcp/enable",
+ "/harddisk" CONFIG_ROOT "/dhcp/enable_green");
+ chown ("/harddisk" CONFIG_ROOT "/dhcp/enable_green", 99, 99);
+ }
+
+ return 0;
+}
+
+int _add_sshd_user() {
+ mysystem("/bin/chroot /harddisk /usr/sbin/userdel sshd");
+ mysystem("/bin/chroot /harddisk /usr/sbin/groupdel sshd");
+ mysystem("/bin/chroot /harddisk /usr/sbin/groupadd -g 74 sshd");
+ mysystem("/bin/chroot /harddisk /usr/sbin/useradd -u 74 -g sshd -d /var/empty/sshd -s /bin/false -M sshd");
+
+ return 0;
+}
+
+int _add_dnsmasq_user() {
+ mysystem("/bin/chroot /harddisk /usr/sbin/userdel dnsmasq");
+ mysystem("/bin/chroot /harddisk /usr/sbin/groupdel dnsmasq");
+ mysystem("/bin/chroot /harddisk /usr/sbin/groupadd -g 103 dnsmasq");
+ mysystem("/bin/chroot /harddisk /usr/sbin/useradd -u 103 -g dnsmasq -d / -s /bin/false -M dnsmasq");
+
+ return 0;
+}
+
+int _add_cron_user() {
+ mysystem("/bin/chroot /harddisk /usr/sbin/userdel cron");
+ mysystem("/bin/chroot /harddisk /usr/sbin/groupdel cron");
+ mysystem("/bin/chroot /harddisk /usr/sbin/groupadd -g 104 cron");
+ mysystem("/bin/chroot /harddisk /usr/sbin/useradd -u 104 -g cron -d / -s /bin/false -M cron");
+
+ return 0;
+}
+
+int _add_sysklogd_user() {
+ mysystem("/bin/chroot /harddisk /usr/sbin/userdel syslogd");
+ mysystem("/bin/chroot /harddisk /usr/sbin/groupdel syslogd");
+ mysystem("/bin/chroot /harddisk /usr/sbin/groupadd -g 105 syslogd");
+ mysystem("/bin/chroot /harddisk /usr/sbin/useradd -u 105 -g syslogd -d / -s /bin/false -M syslogd");
+ mysystem("/bin/chroot /harddisk /usr/sbin/userdel klogd");
+ mysystem("/bin/chroot /harddisk /usr/sbin/groupdel klogd");
+ mysystem("/bin/chroot /harddisk /usr/sbin/groupadd -g 106 klogd");
+ mysystem("/bin/chroot /harddisk /usr/sbin/useradd -u 106 -g klogd -d / -s /bin/false -M klogd");
+
+ return 0;
+}
+
+int _del_setup_user() {
+ mysystem("/bin/chroot /harddisk /usr/sbin/userdel setup");
+
+ return 0;
+}
+
+int _create_nobody_dir(){
+ mysystem("/bin/chroot /harddisk /usr/sbin/usermod -d /home/nobody nobody");
+
+ return 0;
+}
+
+int _del_useless_user_group()
+{
+ mysystem("/bin/chroot /harddisk /usr/sbin/userdel games");
+ mysystem("/bin/chroot /harddisk /usr/sbin/groupdel games");
+ mysystem("/bin/chroot /harddisk /usr/sbin/userdel news");
+ mysystem("/bin/chroot /harddisk /usr/sbin/groupdel news");
+ mysystem("/bin/chroot /harddisk /usr/sbin/userdel ftp");
+ mysystem("/bin/chroot /harddisk /usr/sbin/userdel gopher");
+ mysystem("/bin/chroot /harddisk /usr/sbin/userdel lp");
+ mysystem("/bin/chroot /harddisk /usr/sbin/userdel uucp");
+ mysystem("/bin/chroot /harddisk /usr/sbin/userdel adm");
+ mysystem("/bin/chroot /harddisk /usr/sbin/groupdel adm");
+ mysystem("/bin/chroot /harddisk /usr/sbin/userdel operator");
+ mysystem("/bin/chroot /harddisk /usr/sbin/userdel sync");
+ mysystem("/bin/chroot /harddisk /usr/sbin/userdel shutdown");
+ mysystem("/bin/chroot /harddisk /usr/sbin/userdel halt");
+ mysystem("/bin/chroot /harddisk /usr/sbin/groupdel man");
+ return 0;
+}
+
+void _del_pulsardsl_dir()
+{
+ mysystem("/bin/chroot /harddisk /bin/rm -rf " CONFIG_ROOT "/pulsardsl");
+}
+
+void _del_fritzdsl_dir()
+{
+ mysystem("/bin/chroot /harddisk /bin/rm -rf " CONFIG_ROOT "/fritzdsl");
+}
+
+int _convert_vpn() {
+ int count=1;
+ FILE *vpn1, *vpn2;
+ char vpnip[STRING_SIZE] = "";
+ char greennetaddr[STRING_SIZE] = "";
+ struct keyvalue *kv = initkeyvalues();
+ char vpnsrctemp[STRING_SIZE], vpndsttemp[STRING_SIZE];
+ char *name, *left, *left_nexthop, *left_subnet, *right, *right_nexthop, *right_subnet, *secret, *enabled, *compression;
+
+ if (!(vpn1 = fopen ("/harddisk" CONFIG_ROOT "/vpn/config", "r"))) return 1;
+ if (!(vpn2 = fopen ("/harddisk" CONFIG_ROOT "/vpn/config.new", "w")))
+ {
+ fclose(vpn1);
+ return 1;
+ }
+
+ if (!(readkeyvalues(kv, "/harddisk" CONFIG_ROOT "/ethernet/settings")))
+ {
+ fclose (vpn1);
+ fclose (vpn2);
+ freekeyvalues(kv);
+ errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+ return 0;
+ }
+
+ findkey(kv, "GREEN_NETADDRESS", greennetaddr);
+ freekeyvalues(kv);
+
+ kv = initkeyvalues();
+ if (!(readkeyvalues(kv, "/harddisk" CONFIG_ROOT "/vpn/settings")))
+ {
+ fclose (vpn1);
+ fclose (vpn2);
+ freekeyvalues(kv);
+ errorbox(ctr[TR_UNABLE_TO_OPEN_SETTINGS_FILE]);
+ return 0;
+ }
+
+ /* if no VPN_IP is defined, we must turn it off to force the user
+ * to enter a value once upgraded */
+ findkey(kv, "VPN_IP", vpnip);
+ if (strlen(vpnip) == 0) {
+ replacekeyvalue(kv, "ENABLED", "off");
+ writekeyvalues(kv, "/harddisk" CONFIG_ROOT "/vpn/settings");
+ }
+ freekeyvalues(kv);
+
+ while (fgets (vpnsrctemp, STRING_SIZE, vpn1) != NULL) {
+ if (isdigit (vpnsrctemp[0])) {
+ /* Already converted to new format */
+ fputs(vpnsrctemp, vpn2);
+ continue;
+ }
+
+ name = NULL;
+ left = NULL;
+ left_nexthop = NULL;
+ left_subnet = NULL;
+ right = NULL;
+ right_nexthop = NULL;
+ right_subnet = NULL;
+ secret = NULL;
+ enabled = NULL;
+ compression = NULL;
+
+ if (vpnsrctemp[strlen(vpnsrctemp) - 1] == '\n')
+ vpnsrctemp[strlen(vpnsrctemp) - 1] = '\0';
+ name = strtok (vpnsrctemp, ",");
+ left = strtok (NULL, ",");
+ left_nexthop = strtok (NULL, ",");
+ left_subnet = strtok (NULL, ",");
+ right = strtok (NULL, ",");
+ right_nexthop = strtok (NULL, ",");
+ right_subnet = strtok (NULL, ",");
+ secret = strtok (NULL, ",");
+ enabled = strtok (NULL, ",");
+ compression = strtok (NULL, ",");
+ if (!(name && left && left_subnet &&
+ right && right_subnet &&
+ secret && enabled && compression ))
+ continue;
+
+ /* Try and guess what side IPCop is on; defaults to left */
+ if (strstr(greennetaddr, right_subnet)) {
+ sprintf (vpndsttemp, "%d,%s,%s,,net,psk,%s,right,,%s,,%s,%s,,%s,,,,,,,,,,,,,RED\n",
+ count, enabled, name, secret, right_subnet,
+ left, left_subnet, compression);
+ } else {
+ sprintf (vpndsttemp, "%d,%s,%s,,net,psk,%s,left,,%s,,%s,%s,,%s,,,,,,,,,,,,,RED\n",
+ count, enabled, name, secret, left_subnet,
+ right, right_subnet, compression);
+ }
+ fputs(vpndsttemp, vpn2);
+
+ count++;
+ }
+
+ /* Close source and destination vpn files */
+ fclose (vpn1);
+ fclose (vpn2);
+
+ /* Move the new vpn file */
+ rename ("/harddisk" CONFIG_ROOT "/vpn/config.new",
+ "/harddisk" CONFIG_ROOT "/vpn/config");
+ chown ("/harddisk" CONFIG_ROOT "/vpn/config", 99, 99);
+
+ return 0;
+}
+
+void _convert_ppp_settings_V140() {
+ DIR *dirp;
+ struct dirent *dp;
+ char filename[STRING_SIZE];
+
+ dirp = opendir( "/harddisk" CONFIG_ROOT "/ppp" );
+ while ( (dp = readdir( dirp )) != NULL ) {
+ if ( strstr( dp->d_name, "settings" ) == dp->d_name ) {
+ snprintf (filename, STRING_SIZE-1, "%s/%s",
+ "/harddisk" CONFIG_ROOT "/ppp", dp->d_name);
+ replace (filename, "PERSISTENT=on", "RECONNECTION=persistent");
+ replace (filename, "DIALONDEMAND=on", "RECONNECTION=dialondemand");
+ replace (filename, "MODULATION=GDTM", "MODULATION=GDMT");
+ chown (filename, 99, 99);
+ }
+ }
+ (void) closedir( dirp );
+}
+
+void _convert_net_settings_V140(){
+ replace ("/harddisk" CONFIG_ROOT "/ethernet/settings", "eepro100", "e100");
+ chown ("/harddisk" CONFIG_ROOT "/ethernet/settings", 99, 99);
+}
+
+void _convert_keymap() {
+ replace("/harddisk" CONFIG_ROOT "/main/settings", "KEYMAP=/lib/kbd", "KEYMAP=/usr/share/kbd");
+ replace("/harddisk" CONFIG_ROOT "/main/settings", ".kmap.gz", ".map.gz");
+ chown ("/harddisk" CONFIG_ROOT "/main/settings", 99, 99);
+}
+
+void _convert_speedtouch() {
+ FILE *speedtchbootfile;
+ FILE *speedtchfirmfile;
+
+ if (( speedtchfirmfile = fopen ("/harddisk" CONFIG_ROOT "/alcatelusb/firmware.v4.bin", "r")))
+ {
+ fclose (speedtchfirmfile);
+ if ((speedtchbootfile = fopen ("/harddisk" CONFIG_ROOT "/alcatelusb/boot.v4.bin", "r"))) {
+ fclose (speedtchbootfile);
+ system("/bin/cat /harddisk" CONFIG_ROOT "/alcatelusb/boot.v4.bin "
+ "/harddisk" CONFIG_ROOT "/alcatelusb/firmware.v4.bin"
+ "> /harddisk" CONFIG_ROOT "/alcatelusb/firmware.v4_b.bin");
+ remove ("/harddisk" CONFIG_ROOT "/alcatelusb/boot.v4.bin");
+ remove ("/harddisk" CONFIG_ROOT "/alcatelusb/firmware.v4.bin");
+ chown ("/harddisk" CONFIG_ROOT "/alcatelusb/firmware.v4_b.bin", 99, 99);
+ }
+ }
+
+ if (( speedtchfirmfile = fopen ("/harddisk" CONFIG_ROOT "/alcatelusb/firmware.v123.bin", "r"))) {
+ fclose (speedtchfirmfile);
+ system("/bin/cat /harddisk" CONFIG_ROOT "/alcatelusb/boot.v123.bin "
+ "/harddisk" CONFIG_ROOT "/alcatelusb/firmware.v123.bin"
+ "> /harddisk" CONFIG_ROOT "/alcatelusb/firmware.v0123.bin");
+ remove ("/harddisk" CONFIG_ROOT "/alcatelusb/firmware.v123.bin");
+ }
+
+ remove ("/harddisk" CONFIG_ROOT "/alcatelusb/boot.v123.bin");
+
+ rename ("/harddisk" CONFIG_ROOT "/alcatelusb/mgmt.o", "/harddisk" CONFIG_ROOT "/alcatelusb/firmware.v0123.bin");
+ chown ("/harddisk" CONFIG_ROOT "/alcatelusb/firmware.v0123.bin", 99, 99);
+}
+
+void _convert_isapnp() {
+ FILE *isapnpfile;
+
+ mkdir ("/harddisk" CONFIG_ROOT "/isapnp", S_IRWXU|S_IRWXG|S_IRWXO );
+ if (( isapnpfile = fopen ("/harddisk/etc/isapnp.conf", "r"))) {
+ fclose (isapnpfile);
+ rename ("/harddisk/etc/isapnp.conf", "/harddisk" CONFIG_ROOT "/isapnp/isapnp.conf");
+ } else {
+ if (( isapnpfile = fopen ("/harddisk" CONFIG_ROOT "/isapnp/isapnp.conf", "r"))) {
+ fclose(isapnpfile);
+ } else {
+ isapnpfile = fopen ("/harddisk" CONFIG_ROOT "/isapnp/isapnp.conf", "w");
+ fclose(isapnpfile);
+ }
+ }
+}
+
+int upgrade_v130_v140() {
+ _del_setup_user();
+ _del_useless_user_group();
+ _add_logwatch_user();
+ _add_sshd_user();
+ _add_dnsmasq_user();
+ _add_cron_user();
+ _add_sysklogd_user();
+ _del_pulsardsl_dir();
+ _del_fritzdsl_dir();
+ _convert_vpn();
+ _handledomainname();
+ _fixsquid();
+ _fixeagleusb();
+ _create_nobody_dir();
+ _convert_ppp_settings_V140();
+ _convert_net_settings_V140();
+ _fixdhcp_30();
+ _convert_keymap();
+ _convert_speedtouch();
+ _convert_isapnp();
+
+ return 0;
+}