-/* SmoothWall install program.\r
- *\r
- * This program is distributed under the terms of the GNU General Public\r
- * Licence. See the file COPYING for details.\r
- *\r
- * (c) Lawrence Manning, 2001\r
- * CDROM menu. Get "misc" driver name etc. \r
- *\r
- * $Id: cdrom.c,v 1.6.2.1 2004/04/14 22:05:39 gespinasse Exp $\r
- *\r
- */\r
-\r
-#include "install.h"\r
-\r
-extern FILE *flog;\r
-extern char *mylog;\r
-\r
-extern char **ctr;\r
-\r
-/* Ejects the CDROM. returns 0 for failure, 1 for success. */\r
-int ejectcdrom(char *dev)\r
-{\r
- int fd;\r
-\r
- if ((fd = open(dev, O_RDONLY|O_NONBLOCK)) == -1)\r
- return 0;\r
- \r
- if (ioctl(fd, CDROMEJECT) == -1)\r
- {\r
- close(fd);\r
- return 0;\r
- }\r
- close(fd);\r
- \r
- return 1;\r
-}\r
+/* SmoothWall install program.
+ *
+ * This program is distributed under the terms of the GNU General Public
+ * Licence. See the file COPYING for details.
+ *
+ * (c) Lawrence Manning, 2001
+ * CDROM menu. Get "misc" driver name etc.
+ *
+ * $Id: cdrom.c,v 1.6.2.1 2004/04/14 22:05:39 gespinasse Exp $
+ *
+ */
+
+#include "install.h"
+
+extern FILE *flog;
+extern char *mylog;
+
+extern char **ctr;
+
+/* Ejects the CDROM. returns 0 for failure, 1 for success. */
+int ejectcdrom(char *dev)
+{
+ int fd;
+
+ if ((fd = open(dev, O_RDONLY|O_NONBLOCK)) == -1)
+ return 0;
+
+ if (ioctl(fd, CDROMEJECT) == -1)
+ {
+ close(fd);
+ return 0;
+ }
+ close(fd);
+
+ return 1;
+}
-/* SmoothWall install program.\r
- *\r
- * This program is distributed under the terms of the GNU General Public\r
- * Licence. See the file COPYING for details.\r
- *\r
- * (c) Lawrence Manning, 2001\r
- * Write the config and get password stuff.\r
- * \r
- * $Id: config.c,v 1.6.2.3 2005/12/07 20:42:48 franck78 Exp $\r
- * \r
- */\r
-\r
-#include "install.h"\r
-extern char **ctr; // text translation table\r
-\r
-/* called to write out all config files using the keyvalue interface. */\r
-int write_disk_configs(struct devparams *dp)\r
-{\r
- char devnode[STRING_SIZE];\r
- char partition[STRING_SIZE];\r
- char *messages[5] = { NULL,\r
- ctr[TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1],\r
- ctr[TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2],\r
- ctr[TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3],\r
- ctr[TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4] \r
- };\r
- /* dev node links. */\r
- sprintf(devnode, "%s", dp->devnode_disk_run);\r
- if (symlink(devnode, "/harddisk/dev/harddisk"))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK]);\r
- return 0;\r
- }\r
- \r
- int j;\r
- for (j=1; j<5; j++) {\r
- sprintf(devnode, "%s%d", dp->devnode_part_run,j);\r
- sprintf(partition,"/harddisk/dev/harddisk%d",j);\r
- if (symlink(devnode, partition))\r
- {\r
- errorbox( messages[j] );\r
- return 0;\r
- }\r
- }\r
-\r
- /* Add /dev/root symlink linking to the root filesystem to \r
- * keep updfstab happy */\r
- sprintf(devnode, "%s4", dp->devnode_part_run);\r
- if (symlink(devnode, "/harddisk/dev/root"))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT]);\r
- return 0;\r
- }\r
-\r
- return 1;\r
-}\r
-\r
-int write_lang_configs( char *lang)\r
-{\r
- struct keyvalue *kv = initkeyvalues();\r
- \r
- /* default stuff for main/settings. */\r
- replacekeyvalue(kv, "LANGUAGE", lang);\r
- replacekeyvalue(kv, "HOSTNAME", SNAME);\r
- writekeyvalues(kv, "/harddisk" CONFIG_ROOT "/main/settings");\r
- freekeyvalues(kv);\r
- \r
- return 1;\r
-}\r
-\r
-int write_ethernet_configs(struct keyvalue *ethernetkv)\r
-{\r
- /* Write out the network settings we got from a few mins ago. */\r
- writekeyvalues(ethernetkv, "/harddisk" CONFIG_ROOT "/ethernet/settings");\r
- return 1;\r
-}\r
-\r
-/* Taken from the cdrom one. */\r
-int getpassword(char *password, char *text)\r
-{\r
- char *values[] = { NULL, NULL, NULL }; /* pointers for the values. */\r
- struct newtWinEntry entries[] =\r
- { \r
- { ctr[TR_PASSWORD_PROMPT], &values[0], 2 },\r
- { ctr[TR_AGAIN_PROMPT], &values[1], 2 },\r
- { NULL, NULL, 0 }\r
- };\r
- char title[STRING_SIZE];\r
- int rc;\r
- int done;\r
- \r
- do\r
- {\r
- done = 1;\r
- sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN);\r
- rc = newtWinEntries(title, text,\r
- 50, 5, 5, 20, entries, ctr[TR_OK], ctr[TR_CANCEL], NULL);\r
- \r
- if (rc != 2)\r
- {\r
- if (strlen(values[0]) == 0 || strlen(values[1]) == 0)\r
- {\r
- errorbox(ctr[TR_PASSWORD_CANNOT_BE_BLANK]);\r
- done = 0;\r
- strcpy(values[0], "");\r
- strcpy(values[1], ""); \r
- }\r
- else if (strcmp(values[0], values[1]) != 0)\r
- {\r
- errorbox(ctr[TR_PASSWORDS_DO_NOT_MATCH]);\r
- done = 0;\r
- strcpy(values[0], "");\r
- strcpy(values[1], ""); \r
- }\r
- }\r
- }\r
- while (!done);\r
-\r
- strncpy(password, values[0], STRING_SIZE);\r
-\r
- if (values[0]) free(values[0]);\r
- if (values[1]) free(values[1]);\r
-\r
- return rc;\r
-}\r
+/* SmoothWall install program.
+ *
+ * This program is distributed under the terms of the GNU General Public
+ * Licence. See the file COPYING for details.
+ *
+ * (c) Lawrence Manning, 2001
+ * Write the config and get password stuff.
+ *
+ * $Id: config.c,v 1.6.2.3 2005/12/07 20:42:48 franck78 Exp $
+ *
+ */
+
+#include "install.h"
+extern char **ctr; // text translation table
+
+/* called to write out all config files using the keyvalue interface. */
+int write_disk_configs(struct devparams *dp)
+{
+ char devnode[STRING_SIZE];
+ char partition[STRING_SIZE];
+ char *messages[5] = { NULL,
+ ctr[TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1],
+ ctr[TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2],
+ ctr[TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3],
+ ctr[TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4]
+ };
+ /* dev node links. */
+ sprintf(devnode, "%s", dp->devnode_disk_run);
+ if (symlink(devnode, "/harddisk/dev/harddisk"))
+ {
+ errorbox(ctr[TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK]);
+ return 0;
+ }
+
+ int j;
+ for (j=1; j<5; j++) {
+ sprintf(devnode, "%s%d", dp->devnode_part_run,j);
+ sprintf(partition,"/harddisk/dev/harddisk%d",j);
+ if (symlink(devnode, partition))
+ {
+ errorbox( messages[j] );
+ return 0;
+ }
+ }
+
+ /* Add /dev/root symlink linking to the root filesystem to
+ * keep updfstab happy */
+ sprintf(devnode, "%s4", dp->devnode_part_run);
+ if (symlink(devnode, "/harddisk/dev/root"))
+ {
+ errorbox(ctr[TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT]);
+ return 0;
+ }
+
+ return 1;
+}
+
+int write_lang_configs( char *lang)
+{
+ struct keyvalue *kv = initkeyvalues();
+
+ /* default stuff for main/settings. */
+ replacekeyvalue(kv, "LANGUAGE", lang);
+ replacekeyvalue(kv, "HOSTNAME", SNAME);
+ writekeyvalues(kv, "/harddisk" CONFIG_ROOT "/main/settings");
+ freekeyvalues(kv);
+
+ return 1;
+}
+
+int write_ethernet_configs(struct keyvalue *ethernetkv)
+{
+ /* Write out the network settings we got from a few mins ago. */
+ writekeyvalues(ethernetkv, "/harddisk" CONFIG_ROOT "/ethernet/settings");
+ return 1;
+}
+
+/* Taken from the cdrom one. */
+int getpassword(char *password, char *text)
+{
+ char *values[] = { NULL, NULL, NULL }; /* pointers for the values. */
+ struct newtWinEntry entries[] =
+ {
+ { ctr[TR_PASSWORD_PROMPT], &values[0], 2 },
+ { ctr[TR_AGAIN_PROMPT], &values[1], 2 },
+ { NULL, NULL, 0 }
+ };
+ char title[STRING_SIZE];
+ int rc;
+ int done;
+
+ do
+ {
+ done = 1;
+ sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN);
+ rc = newtWinEntries(title, text,
+ 50, 5, 5, 20, entries, ctr[TR_OK], ctr[TR_CANCEL], NULL);
+
+ if (rc != 2)
+ {
+ if (strlen(values[0]) == 0 || strlen(values[1]) == 0)
+ {
+ errorbox(ctr[TR_PASSWORD_CANNOT_BE_BLANK]);
+ done = 0;
+ strcpy(values[0], "");
+ strcpy(values[1], "");
+ }
+ else if (strcmp(values[0], values[1]) != 0)
+ {
+ errorbox(ctr[TR_PASSWORDS_DO_NOT_MATCH]);
+ done = 0;
+ strcpy(values[0], "");
+ strcpy(values[1], "");
+ }
+ }
+ }
+ while (!done);
+
+ strncpy(password, values[0], STRING_SIZE);
+
+ if (values[0]) free(values[0]);
+ if (values[1]) free(values[1]);
+
+ return rc;
+}
-/* SmoothWall install program.\r
- *\r
- * This program is distributed under the terms of the GNU General Public\r
- * Licence. See the file COPYING for details.\r
- *\r
- * (c) Lawrence Manning, 2001\r
- * Contains some functs for scanning /proc for ide info on CDROMS and\r
- * harddisks.\r
- * \r
- * $Id: ide.c,v 1.4 2003/12/11 11:25:53 riddles Exp $\r
- * \r
- */\r
-\r
-#include "install.h"\r
-\r
-/* checkide(). Scans the named drive letter and returns the IDE_??? type. */\r
-int checkide(char letter)\r
-{\r
- FILE *f = NULL;\r
- char filename[STRING_SIZE];\r
- char buffer[STRING_SIZE];\r
- \r
- sprintf(filename, "/proc/ide/hd%c/media", letter);\r
- \r
- if (!(f = fopen(filename, "r")))\r
- return IDE_EMPTY;\r
- \r
- if (!(fgets(buffer, STRING_SIZE, f)))\r
- {\r
- printf("Couldn't read from %s\n", filename);\r
- fclose(f);\r
- return IDE_EMPTY;\r
- }\r
- \r
- fclose(f);\r
- \r
- stripnl(buffer);\r
- \r
- if (strcmp(buffer, "cdrom") == 0)\r
- return IDE_CDROM;\r
- else if (strcmp(buffer, "disk") == 0)\r
- return IDE_HD;\r
- else\r
- return IDE_UNKNOWN;\r
-}\r
-\r
-/* findidetype(). Finds the first ide deveice of the given IDE_?? type. */\r
-char findidetype(int type)\r
-{\r
- char letter;\r
- \r
- for (letter = 'a'; letter <= 'z'; letter++)\r
- {\r
- if ((checkide(letter)) == type)\r
- {\r
- return letter;\r
- }\r
- }\r
- return '\0';\r
-}\r
-\r
+/* SmoothWall install program.
+ *
+ * This program is distributed under the terms of the GNU General Public
+ * Licence. See the file COPYING for details.
+ *
+ * (c) Lawrence Manning, 2001
+ * Contains some functs for scanning /proc for ide info on CDROMS and
+ * harddisks.
+ *
+ * $Id: ide.c,v 1.4 2003/12/11 11:25:53 riddles Exp $
+ *
+ */
+
+#include "install.h"
+
+/* checkide(). Scans the named drive letter and returns the IDE_??? type. */
+int checkide(char letter)
+{
+ FILE *f = NULL;
+ char filename[STRING_SIZE];
+ char buffer[STRING_SIZE];
+
+ sprintf(filename, "/proc/ide/hd%c/media", letter);
+
+ if (!(f = fopen(filename, "r")))
+ return IDE_EMPTY;
+
+ if (!(fgets(buffer, STRING_SIZE, f)))
+ {
+ printf("Couldn't read from %s\n", filename);
+ fclose(f);
+ return IDE_EMPTY;
+ }
+
+ fclose(f);
+
+ stripnl(buffer);
+
+ if (strcmp(buffer, "cdrom") == 0)
+ return IDE_CDROM;
+ else if (strcmp(buffer, "disk") == 0)
+ return IDE_HD;
+ else
+ return IDE_UNKNOWN;
+}
+
+/* findidetype(). Finds the first ide deveice of the given IDE_?? type. */
+char findidetype(int type)
+{
+ char letter;
+
+ for (letter = 'a'; letter <= 'z'; letter++)
+ {
+ if ((checkide(letter)) == type)
+ {
+ return letter;
+ }
+ }
+ return '\0';
+}
+
-/* SmoothWall install program.\r
- *\r
- * This program is distributed under the terms of the GNU General Public\r
- * Licence. See the file COPYING for details.\r
- *\r
- * (c) Lawrence Manning, 2001\r
- * Main include file.\r
- * \r
- * $Id: install.h,v 1.10.2.4 2006/01/11 01:01:38 franck78 Exp $\r
- * \r
- */\r
-\r
-#include "../libsmooth/libsmooth.h"\r
-\r
-#define IDE_EMPTY 0\r
-#define IDE_CDROM 1\r
-#define IDE_HD 2\r
-#define IDE_UNKNOWN 3\r
-\r
-/* CDROMS and harddisks. */\r
-struct devparams\r
-{\r
- char devnode_disk[30]; // when single partition is addressed\r
- char devnode_part[30]; // when the RAID partition is addressed\r
- char devnode_disk_run[30]; // the same dev but after installation \r
- char devnode_part_run[30];\r
- char modulename[STRING_SIZE];\r
- char options[STRING_SIZE];\r
-// int module;\r
-};\r
-\r
-/* ide.c */\r
-int checkide(char letter);\r
-char findidetype(int type);\r
-\r
-/* cdrom.c */\r
-int ejectcdrom(char *dev);\r
-\r
-/* nic.c */\r
-int networkmenu(struct keyvalue *ethernetkv);\r
-\r
-/* net.c */\r
-int checktarball(char *);\r
-\r
-/* config.c */\r
-int write_disk_configs(struct devparams *dp);\r
-int write_lang_configs( char *lang);\r
-int write_ethernet_configs(struct keyvalue *ethernetkv);\r
-\r
-/* pcmcia.c */\r
-char * initialize_pcmcia (void);\r
-\r
-/* upgrade_v12_v13.c */\r
-int upgrade_v12_v13();\r
-\r
-/* upgrade_v130_v131.c */\r
-int upgrade_v130_v140();\r
-\r
-/* usb.c */\r
-int initialize_usb();\r
-int write_usb_modules_conf();\r
-int checkusb (char *partition);\r
-\r
-/* scsi.c */\r
-int try_scsi(char *dev);\r
-int get_boot(char *dev);\r
-\r
-/*main.c */\r
-int modprobe (char *mod);\r
-int rmmod (char *mod);\r
-\r
-extern char *bz_tr[];\r
-extern char *cs_tr[];\r
-extern char *da_tr[];\r
-extern char *en_tr[];\r
-extern char *es_tr[];\r
-extern char *fi_tr[];\r
-extern char *fr_tr[];\r
-extern char *hu_tr[];\r
-extern char *la_tr[];\r
-extern char *nl_tr[];\r
-extern char *de_tr[];\r
-extern char *tr_tr[];\r
-extern char *it_tr[];\r
-extern char *el_tr[];\r
-extern char *pl_tr[];\r
-extern char *pt_tr[];\r
-extern char *sk_tr[];\r
-extern char *so_tr[];\r
-extern char *sv_tr[];\r
-extern char *no_tr[];\r
-extern char *vi_tr[];\r
+/* SmoothWall install program.
+ *
+ * This program is distributed under the terms of the GNU General Public
+ * Licence. See the file COPYING for details.
+ *
+ * (c) Lawrence Manning, 2001
+ * Main include file.
+ *
+ * $Id: install.h,v 1.10.2.4 2006/01/11 01:01:38 franck78 Exp $
+ *
+ */
+
+#include "../libsmooth/libsmooth.h"
+
+#define IDE_EMPTY 0
+#define IDE_CDROM 1
+#define IDE_HD 2
+#define IDE_UNKNOWN 3
+
+/* CDROMS and harddisks. */
+struct devparams
+{
+ char devnode_disk[30]; // when single partition is addressed
+ char devnode_part[30]; // when the RAID partition is addressed
+ char devnode_disk_run[30]; // the same dev but after installation
+ char devnode_part_run[30];
+ char modulename[STRING_SIZE];
+ char options[STRING_SIZE];
+// int module;
+};
+
+/* ide.c */
+int checkide(char letter);
+char findidetype(int type);
+
+/* cdrom.c */
+int ejectcdrom(char *dev);
+
+/* nic.c */
+int networkmenu(struct keyvalue *ethernetkv);
+
+/* net.c */
+int checktarball(char *);
+
+/* config.c */
+int write_disk_configs(struct devparams *dp);
+int write_lang_configs( char *lang);
+int write_ethernet_configs(struct keyvalue *ethernetkv);
+
+/* pcmcia.c */
+char * initialize_pcmcia (void);
+
+/* upgrade_v12_v13.c */
+int upgrade_v12_v13();
+
+/* upgrade_v130_v131.c */
+int upgrade_v130_v140();
+
+/* usb.c */
+int initialize_usb();
+int write_usb_modules_conf();
+int checkusb (char *partition);
+
+/* scsi.c */
+int try_scsi(char *dev);
+int get_boot(char *dev);
+
+/*main.c */
+int modprobe (char *mod);
+int rmmod (char *mod);
+
+extern char *bz_tr[];
+extern char *cs_tr[];
+extern char *da_tr[];
+extern char *en_tr[];
+extern char *es_tr[];
+extern char *fi_tr[];
+extern char *fr_tr[];
+extern char *hu_tr[];
+extern char *la_tr[];
+extern char *nl_tr[];
+extern char *de_tr[];
+extern char *tr_tr[];
+extern char *it_tr[];
+extern char *el_tr[];
+extern char *pl_tr[];
+extern char *pt_tr[];
+extern char *sk_tr[];
+extern char *so_tr[];
+extern char *sv_tr[];
+extern char *no_tr[];
+extern char *vi_tr[];
-/* IPCop install2 program.\r
- *\r
- * This program is distributed under the terms of the GNU General Public\r
- * Licence. See the file COPYING for details.\r
- *\r
- * (c) Lawrence Manning, 2001\r
- * (c) Franck Bourdonnec, 2006\r
- * Contains update/restore code\r
- * \r
- * $Id: install2.c,v 1.1.2.3 2006/01/31 00:51:50 franck78 Exp $\r
- * \r
- */\r
-#include "install.h"\r
-\r
-FILE *flog = NULL;\r
-char *mylog;\r
-char **ctr;\r
-\r
-/* \r
- To include a translated string in the final installer, you must reference\r
- it here with a simplr comment. This save a lot a space in the installer\r
-*/\r
-\r
-/* TR_BUILDING_INITRD */\r
-/* TR_HELPLINE */\r
-/* TR_SKIP */\r
-/* TR_RESTORE_CONFIGURATION */\r
-/* TR_RESTORE */\r
-/* TR_OK */\r
-/* TR_CANCEL */\r
-/* TR_ERROR */\r
-/* TR_INSTALLING_FILES */\r
-/* TR_FAILED_TO_FIND */\r
-/* TR_UNABLE_TO_INSTALL_FILES */\r
-/* TR_LOADING_PCMCIA */\r
-\r
-//libsmooth\r
-/* TR_INTERFACE */\r
-/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */\r
-/* TR_STATIC */\r
-/* TR_DHCP_HOSTNAME */\r
-/* TR_IP_ADDRESS_PROMPT */\r
-/* TR_NETMASK_PROMPT */\r
-/* TR_INVALID_FIELDS */\r
-/* TR_IP_ADDRESS_CR */\r
-/* TR_NETWORK_MASK_CR */\r
-/* TR_DHCP_HOSTNAME_CR */\r
-/* TR_LOOKING_FOR_NIC */\r
-/* TR_MANUAL */\r
-/* TR_SELECT_NETWORK_DRIVER */\r
-/* TR_SELECT_NETWORK_DRIVER_LONG */\r
-/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */\r
-/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */\r
-/* TR_MODULE_PARAMETERS */\r
-/* TR_LOADING_MODULE */\r
-/* TR_MODULE_NAME_CANNOT_BE_BLANK */\r
-\r
-//upgrade 120\r
-/* TR_UNABLE_TO_OPEN_SETTINGS_FILE */\r
-/* TR_DOMAINNAME */\r
-/* TR_ENTER_DOMAINNAME */\r
-/* TR_DOMAINNAME_CANNOT_CONTAIN_SPACES */\r
-/* TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM */\r
-/* TR_UNABLE_TO_WRITE_ETC_FSTAB */\r
-\r
-// dir to find files, chrooted or not...\r
-#define TMP_EXTRACT_CH "/tmp/ipcop"\r
-#define TMP_EXTRACT "/harddisk" TMP_EXTRACT_CH\r
-#define MOUNT_BACKUP_CH "/mnt/usb"\r
-#define MOUNT_BACKUP "/harddisk" MOUNT_BACKUP_CH\r
-/*\r
- return 0 when dev contains a backup set\r
- leave dev mounted\r
-*/\r
-int try_mount (char *dev, char *testfile) {\r
- char commandstring[STRING_SIZE];\r
- mysystem("/bin/umount " MOUNT_BACKUP);\r
- sprintf(commandstring, "/bin/mount -t vfat -o ro %s " MOUNT_BACKUP, dev);\r
- mysystem(commandstring);\r
-\r
- /*verify it's what we want */\r
- sprintf(commandstring, MOUNT_BACKUP "/%s.dat", testfile);\r
- FILE *handle = fopen(commandstring, "r");\r
- if (handle == NULL) {\r
- return 1; /* bad disk ! */\r
- }\r
- fclose(handle);\r
- \r
- handle = fopen(MOUNT_BACKUP "/backup.key", "r");\r
- if (handle == NULL) {\r
- return 1; /* bad disk ! */\r
- }\r
- fclose(handle);\r
- return 0; //success\r
-}\r
-\r
-/* try to mount usb device until backup.tgz is found except the \r
- destination device (scsi names are identical with usb key)\r
- check "sda sdb sdc sdd"\r
-*/\r
-int mountbackup (char *testfile, char *destination_device) {\r
- char sourcedev[30];\r
- char i,j;\r
- for (i = 'a'; i < 'e'; i++) {\r
- sprintf (sourcedev,"/dev/sd%c ",i);\r
- if (strcmp (destination_device, sourcedev) != 0) {\r
- if (!try_mount (sourcedev, testfile)) return 0;\r
- }\r
- for (j = '1'; j < '5'; j++) {\r
- sourcedev[8] = j;\r
- if (strcmp (destination_device, sourcedev) != 0) {\r
- if (!try_mount (sourcedev, testfile)) return 0;\r
- }\r
- }\r
- }\r
- return 1;\r
-}\r
-\r
-int floppy_locate() {\r
- /* Temporarily mount /proc under /harddisk/proc,\r
- run updfstab to locate the floppy, and unmount /harddisk/proc\r
- again. This should be run each time the user tries to restore\r
- so it can properly detect removable devices */\r
- if (mysystem("/bin/mount -n -t proc /proc /harddisk/proc")) {\r
- errorbox(ctr[TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM]);\r
- return 1;\r
- }\r
- if (mysystem("/bin/chroot /harddisk /usr/sbin/updfstab")) {\r
- errorbox(ctr[TR_UNABLE_TO_WRITE_ETC_FSTAB]);\r
- return 1;\r
- }\r
- mysystem("/bin/umount /harddisk/proc");\r
- return 0;\r
-}\r
-\r
-/* Check the SQUID acl file exists, if not use our 1.4 copy */\r
-void fixup_squidacl() {\r
- FILE *aclreadfile;\r
- if ((aclreadfile = fopen ("/harddisk" CONFIG_ROOT "/proxy/acl", "r"))) {\r
- unlink ("/harddisk" CONFIG_ROOT "/proxy/acl-1.4");\r
- fclose(aclreadfile);\r
- } else {\r
- rename ("/harddisk" CONFIG_ROOT "/proxy/acl-1.4",\r
- "/harddisk" CONFIG_ROOT "/proxy/acl");\r
- }\r
- chown ("/harddisk" CONFIG_ROOT "/proxy/acl", 99, 99);\r
-}\r
-/* if we detected SCSI then fixup */\r
-void fixup_initrd() {\r
- FILE *handle;\r
- char line[STRING_SIZE];\r
- char commandstring[STRING_SIZE];\r
- \r
- if (!(handle = fopen("/scsidriver", "r"))) \r
- return;\r
-\r
- char *driver;\r
- fgets(line, STRING_SIZE-1, handle);\r
- fclose(handle);\r
- line[strlen(line) - 1] = 0;\r
- driver = strtok(line, ".");\r
- fprintf(flog, "Detected SCSI driver %s\n", driver);\r
- if (!strlen(driver) > 1) \r
- return;\r
- \r
- fprintf(flog, "Fixing up ipcoprd.img\n");\r
- mysystem("/bin/chroot /harddisk /sbin/modprobe loop");\r
- mkdir("/harddisk/initrd", S_IRWXU|S_IRWXG|S_IRWXO);\r
- sprintf(commandstring, "/bin/chroot /harddisk /sbin/mkinitrd"\r
- " --with=scsi_mod --with=%s --with=sd_mod"\r
- " --with=sr_mod --with=libata"\r
- " --with=ataraid /boot/ipcoprd.img "KERNEL_VERSION,\r
- driver );\r
- runcommandwithstatus(commandstring, ctr[TR_BUILDING_INITRD]);\r
-#ifdef __i386__\r
- sprintf(commandstring, "/bin/chroot /harddisk /sbin/mkinitrd"\r
- " --with=scsi_mod --with=%s --with=sd_mod"\r
- " --with=sr_mod --with=libata"\r
- " --with=ataraid /boot/ipcoprd-smp.img "KERNEL_VERSION"-smp",\r
- driver );\r
- runcommandwithstatus(commandstring, ctr[TR_BUILDING_INITRD]);\r
- mysystem("/bin/chroot /harddisk /bin/mv /boot/grub/scsigrub.conf /boot/grub/grub.conf");\r
-#endif\r
-#ifdef __alpha__\r
- runcommandwithstatus("/bin/chroot /harddisk /bin/mv /boot/etc/scsiaboot.conf /boot/etc/aboot.conf", ctr[TR_BUILDING_INITRD]);\r
-#endif\r
-}\r
-/* when backup is ready in tmpdir, move files to definitive location */\r
-void do_copy_files(int upgrade_level) {\r
- mysystem("/bin/chroot /harddisk /bin/cp -af "TMP_EXTRACT_CH"/. /");\r
- /* Upgrade necessary files from v1.2 to v1.3 to v1.4 */\r
- switch (upgrade_level) {\r
- case 1:\r
- upgrade_v12_v13();\r
- upgrade_v130_v140();\r
- case 2: //some 1.4 files format changed\r
- //between 1.4.0 & 1.4.11 If possible de determine backup/version\r
- //the update code should go here\r
- }\r
-}\r
-\r
-int main(int argc, char *argv[]) {\r
-#define LANG argv[1]\r
-#define DEST_DEV argv[2]\r
-#define WGET argv[3]\r
-\r
-#ifdef LANG_EN_ONLY\r
- char **langtrs[] = { en_tr, NULL };\r
-#else\r
- char **langtrs[] = { bz_tr, cs_tr, da_tr, de_tr, en_tr, es_tr, fr_tr, el_tr, it_tr, la_tr, hu_tr, nl_tr, no_tr, pl_tr, pt_tr, sk_tr, so_tr, fi_tr, sv_tr, tr_tr, vi_tr, NULL };\r
-#endif\r
- char message[1000];\r
- char title[STRING_SIZE];\r
- char commandstring[STRING_SIZE];\r
-\r
- setlocale (LC_ALL, ""); \r
- /* Log file/terminal stuff. */\r
- mylog = "/dev/tty2";\r
- ctr = langtrs[ atoi(LANG) ];\r
-\r
- if (!(flog = fopen(mylog, "w+")))\r
- {\r
- printf("Couldn't open log terminal\n");\r
- return 0;\r
- }\r
- fprintf(flog, "Install2 program started.\n");\r
- newtInit();\r
- newtCls();\r
- strcpy (title, NAME " v" VERSION " - " SLOGAN);\r
- newtDrawRootText(14, 0, title);\r
- newtPushHelpLine(ctr[TR_HELPLINE]);\r
-/*\r
- // build now the device node\r
- runcommandwithstatus("echo 'cd /dev; ./make_devices'>/harddisk/X;" \r
- "chroot /harddisk chmod +x /X;"\r
- "chroot /harddisk /X;"\r
- "chroot /harddisk rm /X" \r
- , ctr[TR_INSTALLING_FILES]);\r
-*/\r
- /* working dirs... */\r
- mkdir(MOUNT_BACKUP, S_IRWXU|S_IRWXG|S_IRWXO);\r
-\r
- //create the GUI screen and objects\r
- newtComponent form, header, labelfile, labelkey, file, key, radio0, radio1, radio2, radio3, radio4, ok;\r
-\r
- newtCenteredWindow (55,20,ctr[TR_RESTORE]);\r
- form = newtForm (NULL, NULL,0);\r
-\r
- sprintf(message, ctr[TR_RESTORE_CONFIGURATION], NAME);\r
- header = newtTextboxReflowed (2,1,message,51,0,0,0);\r
- newtFormAddComponent(form, header);\r
-\r
- // The four method of restauration\r
- int start1=1, start2=0, start3=0, start4=0;\r
- radio1 = newtRadiobutton (17, 5, ctr[TR_SKIP], start1, NULL);\r
- radio2 = newtRadiobutton (17, 6, "Floppy (legacy)", start2, radio1);\r
- radio3 = newtRadiobutton (17, 7, "Usb-storage/CDROM", start3, radio2);\r
- if (strcmp(WGET,"none"))\r
- radio4 = newtRadiobutton (17, 8, "HTTP/FTP", start4, radio3);\r
- else\r
- radio4 = NULL;\r
- newtFormAddComponents(form, radio1, radio2, radio3, radio4, NULL);\r
-\r
- // The optionnal filename for 'backup'\r
- labelfile=newtTextbox(12, 10, 35, 1, 0);\r
- newtTextboxSetText (labelfile, "Filename");\r
- newtFormAddComponent(form, labelfile);\r
- char *filevalue;\r
- char fileinit[STRING_SIZE] = "backup";\r
- file = newtEntry (17, 11, fileinit, 20, &filevalue, 0);\r
- newtFormAddComponent(form, file);\r
-\r
- // The optionnal password for the key\r
- labelkey=newtTextbox(12, 13, 35, 1, 0);\r
- newtTextboxSetText (labelkey, "Backup key password");\r
- newtFormAddComponent(form, labelkey);\r
- char *keyvalue;\r
- char keyinit[STRING_SIZE] = "";\r
- key = newtEntry (17, 14, keyinit, 20, &keyvalue, 0);\r
- newtFormAddComponent(form, key);\r
-\r
- // The OK button\r
- ok=newtButton (23, 16, ctr[TR_OK]);\r
- newtFormAddComponent(form, ok);\r
-\r
- /* loop until succeeds or user skips out */\r
- int retcode = -1;\r
- while ( retcode<0 ) {\r
-\r
- // run the windows\r
- struct newtExitStruct reponse;\r
- newtFormRun (form, &reponse);\r
- radio0 = newtRadioGetCurrent(radio1);\r
- int radio;\r
- radio = radio0 == radio1 ? 1 : radio0 == radio2 ? 2 : radio0 == radio3 ? 3 : radio0 == radio4 ? 4 : 0;\r
- strcpy(keyinit,keyvalue); //reuse actual value\r
- strcpy(fileinit,filevalue);\r
-\r
- if (radio==1) {\r
- retcode = 1; // no restore: nothing special\r
- break; // out of the while loop\r
- }\r
-\r
- mkdir(TMP_EXTRACT, S_IRWXU|S_IRWXG|S_IRWXO);\r
- statuswindow(45, 4, title, ctr[TR_INSTALLING_FILES]);\r
- switch (radio) {\r
- case 4: // network\r
- sprintf(commandstring,"/bin/wget -P " TMP_EXTRACT " %s/%s.dat", WGET, filevalue);\r
- mysystem (commandstring);\r
- sprintf(commandstring,"/bin/wget -P " TMP_EXTRACT " %s/%s.key", WGET, filevalue);\r
- if (mysystem (commandstring)) {\r
- errorbox(ctr[TR_FAILED_TO_FIND]);\r
- break;\r
- };\r
- goto COMMON;\r
- case 3: // normal backup\r
- if (mountbackup( filevalue, DEST_DEV )) {\r
- errorbox(ctr[TR_UNABLE_TO_INSTALL_FILES]);//mess=no device with backup found\r
- break;\r
- };\r
- // link files to a COMMON location\r
- sprintf (commandstring, "chroot /harddisk ln -s "MOUNT_BACKUP_CH"/%s.dat " TMP_EXTRACT_CH "/%s.dat", filevalue, filevalue);\r
- mysystem (commandstring);\r
- sprintf (commandstring, "chroot /harddisk ln -s "MOUNT_BACKUP_CH"/%s.key " TMP_EXTRACT_CH "/%s.key", filevalue, filevalue);\r
- mysystem (commandstring);\r
-\r
- COMMON: // DECRYPT THE TARBALL\r
- // Copy the key to a new location because we decrypt it! \r
- if (strcmp(keyvalue, "")) { // password provided: decrypt the key\r
- sprintf(commandstring, "/bin/chroot /harddisk /usr/bin/openssl enc"\r
- " -a -d -aes256 -salt"\r
- " -pass pass:%s"\r
- " -in " TMP_EXTRACT_CH "/%s.key"\r
- " -out " TMP_EXTRACT_CH "/__tmp.key",\r
- keyvalue, filevalue);\r
- } else { //just copy to new name\r
- sprintf(commandstring, "/bin/chroot /harddisk cp"\r
- " " TMP_EXTRACT_CH "/%s.key"\r
- " " TMP_EXTRACT_CH "/__tmp.key",\r
- filevalue);\r
- }\r
- mysystem (commandstring);\r
-\r
- sprintf(commandstring, "/bin/chroot /harddisk /usr/bin/openssl des3"\r
- " -d -salt"\r
- " -in " TMP_EXTRACT_CH "/%s.dat"\r
- " -out " TMP_EXTRACT_CH "/backup.tgz"\r
- " -kfile " TMP_EXTRACT_CH "/__tmp.key",\r
- filevalue);\r
-\r
- if (mysystem (commandstring)) {\r
- errorbox(ctr[TR_UNABLE_TO_INSTALL_FILES]);//mess=decrypt error:invalid key?\r
- break;\r
- }\r
- strcpy(commandstring, "/bin/chroot /harddisk /bin/tar"\r
- " -X " CONFIG_ROOT "/backup/exclude.system"\r
- " -C " TMP_EXTRACT_CH\r
- " -xzf " TMP_EXTRACT_CH "/backup.tgz");\r
-\r
- if (mysystem(commandstring)) {\r
- errorbox(ctr[TR_UNABLE_TO_INSTALL_FILES]);\r
- break;\r
- }\r
- sprintf(commandstring, TMP_EXTRACT "/%s.dat", filevalue);\r
- unlink(commandstring ); //dont need them anymore\r
- unlink( TMP_EXTRACT "/backup.tgz");\r
- sprintf(commandstring, TMP_EXTRACT "/%s.key", filevalue);\r
- unlink(commandstring );\r
- unlink( TMP_EXTRACT "/__tmp.key");\r
-\r
- /* Now copy to correct location */\r
- do_copy_files(0);\r
- retcode = 0; /* successfully restored */\r
- break;\r
- case 2:\r
- // diskette change\r
- if (floppy_locate()) {\r
- retcode = 2; // this an error!\r
- break;\r
- }\r
-\r
- /* Always extract to /tmp/ipcop for temporary extraction\r
- just in case floppy fails.\r
- try a compressed backup first because it's quicker to fail.\r
- In exclude.system, files name must be without leading / or \r
- on extraction, name will never match\r
- */\r
- sprintf(commandstring,\r
- "/bin/chroot /harddisk /bin/tar -X " CONFIG_ROOT "/backup/exclude.system -C "TMP_EXTRACT_CH" -xvzf /dev/floppy > %s 2> /dev/null", mylog);\r
- if (system(commandstring)) {\r
- /* if it's not compressed, try uncompressed first before failing*/\r
- sprintf(commandstring,\r
- "/bin/chroot /harddisk /bin/tar -X " CONFIG_ROOT "/backup/exclude.system -C "TMP_EXTRACT_CH" -xvf /dev/floppy > %s 2> /dev/null", mylog);\r
- if (system(commandstring)) {\r
- /* command failed trying to read from floppy */\r
- errorbox(ctr[TR_UNABLE_TO_INSTALL_FILES]);\r
- break;\r
- } \r
- }\r
- /* Now copy to correct location */\r
- do_copy_files(1);\r
- retcode = 0; /* successfully restored */\r
- }//switch\r
- /* remove possible badly restored files */\r
- mysystem("/bin/chroot /harddisk /bin/rm -rf " TMP_EXTRACT_CH );\r
- newtPopWindow(); // close windows\r
- }//while\r
- newtFormDestroy(form);\r
-\r
- /* cleanup */\r
- mysystem("/bin/umount " MOUNT_BACKUP);\r
- mysystem("/bin/chroot /harddisk /bin/rmdir " MOUNT_BACKUP_CH);\r
-\r
- /* others operations moved from install to install2 */\r
- fixup_squidacl();\r
- fixup_initrd();\r
-\r
- fprintf(flog, "Install2 program ended.\n");\r
- fflush(flog);\r
- fclose(flog);\r
- newtFinished();\r
- return retcode;\r
-}\r
-\r
+/* IPCop install2 program.
+ *
+ * This program is distributed under the terms of the GNU General Public
+ * Licence. See the file COPYING for details.
+ *
+ * (c) Lawrence Manning, 2001
+ * (c) Franck Bourdonnec, 2006
+ * Contains update/restore code
+ *
+ * $Id: install2.c,v 1.1.2.5 2006/02/10 06:53:57 gespinasse Exp $
+ *
+ */
+#include "install.h"
+
+FILE *flog = NULL;
+char *mylog;
+char **ctr;
+
+/*
+ To include a translated string in the final installer, you must reference
+ it here with a simplr comment. This save a lot a space in the installer
+*/
+
+/* TR_BUILDING_INITRD */
+/* TR_HELPLINE */
+/* TR_SKIP */
+/* TR_RESTORE_CONFIGURATION */
+/* TR_RESTORE */
+/* TR_OK */
+/* TR_CANCEL */
+/* TR_ERROR */
+/* TR_INSTALLING_FILES */
+/* TR_FAILED_TO_FIND */
+/* TR_UNABLE_TO_INSTALL_FILES */
+/* TR_LOADING_PCMCIA */
+
+//libsmooth
+/* TR_INTERFACE */
+/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */
+/* TR_STATIC */
+/* TR_DHCP_HOSTNAME */
+/* TR_IP_ADDRESS_PROMPT */
+/* TR_NETMASK_PROMPT */
+/* TR_INVALID_FIELDS */
+/* TR_IP_ADDRESS_CR */
+/* TR_NETWORK_MASK_CR */
+/* TR_DHCP_HOSTNAME_CR */
+/* TR_LOOKING_FOR_NIC */
+/* TR_MANUAL */
+/* TR_SELECT_NETWORK_DRIVER */
+/* TR_SELECT_NETWORK_DRIVER_LONG */
+/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */
+/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */
+/* TR_MODULE_PARAMETERS */
+/* TR_LOADING_MODULE */
+/* TR_MODULE_NAME_CANNOT_BE_BLANK */
+
+//upgrade 120
+/* TR_UNABLE_TO_OPEN_SETTINGS_FILE */
+/* TR_DOMAINNAME */
+/* TR_ENTER_DOMAINNAME */
+/* TR_DOMAINNAME_CANNOT_CONTAIN_SPACES */
+/* TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM */
+/* TR_UNABLE_TO_WRITE_ETC_FSTAB */
+
+// dir to find files, chrooted or not...
+#define TMP_EXTRACT_CH "/tmp/ipcop"
+#define TMP_EXTRACT "/harddisk" TMP_EXTRACT_CH
+#define MOUNT_BACKUP_CH "/mnt/usb"
+#define MOUNT_BACKUP "/harddisk" MOUNT_BACKUP_CH
+/*
+ return 0 when dev contains a backup set
+ leave dev mounted
+*/
+int try_mount (char *dev, char *testfile) {
+ char commandstring[STRING_SIZE];
+ mysystem("/bin/umount " MOUNT_BACKUP);
+ sprintf(commandstring, "/bin/mount -t vfat -o ro %s " MOUNT_BACKUP, dev);
+ mysystem(commandstring);
+
+ /*verify it's what we want */
+ sprintf(commandstring, MOUNT_BACKUP "/%s.dat", testfile);
+ FILE *handle = fopen(commandstring, "r");
+ if (handle == NULL) {
+ return 1; /* bad disk ! */
+ }
+ fclose(handle);
+
+ handle = fopen(MOUNT_BACKUP "/backup.key", "r");
+ if (handle == NULL) {
+ return 1; /* bad disk ! */
+ }
+ fclose(handle);
+ return 0; //success
+}
+
+/* try to mount usb device until backup.tgz is found except the
+ destination device (scsi names are identical with usb key)
+ check "sda sdb sdc sdd"
+*/
+int mountbackup (char *testfile, char *destination_device) {
+ char sourcedev[30];
+ char i,j;
+ for (i = 'a'; i < 'e'; i++) {
+ sprintf (sourcedev,"/dev/sd%c ",i);
+ if (strcmp (destination_device, sourcedev) != 0) {
+ if (!try_mount (sourcedev, testfile)) return 0;
+ }
+ for (j = '1'; j < '5'; j++) {
+ sourcedev[8] = j;
+ if (strcmp (destination_device, sourcedev) != 0) {
+ if (!try_mount (sourcedev, testfile)) return 0;
+ }
+ }
+ }
+ return 1;
+}
+
+int floppy_locate() {
+ /* Temporarily mount /proc under /harddisk/proc,
+ run updfstab to locate the floppy, and unmount /harddisk/proc
+ again. This should be run each time the user tries to restore
+ so it can properly detect removable devices */
+ if (mysystem("/bin/mount -n -t proc /proc /harddisk/proc")) {
+ errorbox(ctr[TR_UNABLE_TO_MOUNT_PROC_FILESYSTEM]);
+ return 1;
+ }
+ if (mysystem("/bin/chroot /harddisk /usr/sbin/updfstab")) {
+ errorbox(ctr[TR_UNABLE_TO_WRITE_ETC_FSTAB]);
+ return 1;
+ }
+ mysystem("/bin/umount /harddisk/proc");
+ return 0;
+}
+
+/* Check the SQUID acl file exists, if not use our 1.4 copy */
+void fixup_squidacl() {
+ FILE *aclreadfile;
+ if ((aclreadfile = fopen ("/harddisk" CONFIG_ROOT "/proxy/acl", "r"))) {
+ unlink ("/harddisk" CONFIG_ROOT "/proxy/acl-1.4");
+ fclose(aclreadfile);
+ } else {
+ rename ("/harddisk" CONFIG_ROOT "/proxy/acl-1.4",
+ "/harddisk" CONFIG_ROOT "/proxy/acl");
+ }
+ chown ("/harddisk" CONFIG_ROOT "/proxy/acl", 99, 99);
+}
+/* if we detected SCSI then fixup */
+void fixup_initrd() {
+ FILE *handle;
+ char line[STRING_SIZE];
+ char commandstring[STRING_SIZE];
+
+ if (!(handle = fopen("/scsidriver", "r")))
+ return;
+
+ char *driver;
+ fgets(line, STRING_SIZE-1, handle);
+ fclose(handle);
+ line[strlen(line) - 1] = 0;
+ driver = strtok(line, ".");
+ fprintf(flog, "Detected SCSI driver %s\n", driver);
+ if (!strlen(driver) > 1)
+ return;
+
+ fprintf(flog, "Fixing up ipcoprd.img\n");
+ mysystem("/bin/chroot /harddisk /sbin/modprobe loop");
+ mkdir("/harddisk/initrd", S_IRWXU|S_IRWXG|S_IRWXO);
+ sprintf(commandstring, "/bin/chroot /harddisk /sbin/mkinitrd"
+ " --with=scsi_mod --with=%s --with=sd_mod"
+ " --with=sr_mod --with=libata"
+ " --with=ataraid /boot/ipcoprd.img "KERNEL_VERSION,
+ driver );
+ runcommandwithstatus(commandstring, ctr[TR_BUILDING_INITRD]);
+#ifdef __i386__
+ sprintf(commandstring, "/bin/chroot /harddisk /sbin/mkinitrd"
+ " --with=scsi_mod --with=%s --with=sd_mod"
+ " --with=sr_mod --with=libata"
+ " --with=ataraid /boot/ipcoprd-smp.img "KERNEL_VERSION"-smp",
+ driver );
+ runcommandwithstatus(commandstring, ctr[TR_BUILDING_INITRD]);
+ mysystem("/bin/chroot /harddisk /bin/mv /boot/grub/scsigrub.conf /boot/grub/grub.conf");
+#endif
+#ifdef __alpha__
+ runcommandwithstatus("/bin/chroot /harddisk /bin/mv /boot/etc/scsiaboot.conf /boot/etc/aboot.conf", ctr[TR_BUILDING_INITRD]);
+#endif
+}
+/* when backup is ready in tmpdir, move files to definitive location */
+void do_copy_files() {
+ mysystem("/bin/chroot /harddisk /bin/cp -af "TMP_EXTRACT_CH"/. /");
+ /* Upgrade necessary files from v1.2 to v1.3 to v1.4 */
+ upgrade_v12_v13();
+ upgrade_v130_v140();
+ /* Upgrade configuration files starting from 1.4.11 */
+ mysystem("/bin/chroot /harddisk /usr/local/bin/upgrade");
+}
+
+int main(int argc, char *argv[]) {
+#define LANG argv[1]
+#define DEST_DEV argv[2]
+#define WGET argv[3]
+
+#ifdef LANG_EN_ONLY
+ char **langtrs[] = { en_tr, NULL };
+#else
+ char **langtrs[] = { bz_tr, cs_tr, da_tr, de_tr, en_tr, es_tr, fr_tr, el_tr, it_tr, la_tr, hu_tr, nl_tr, no_tr, pl_tr, pt_tr, sk_tr, so_tr, fi_tr, sv_tr, tr_tr, vi_tr, NULL };
+#endif
+ char message[1000];
+ char title[STRING_SIZE];
+ char commandstring[STRING_SIZE];
+
+ setlocale (LC_ALL, "");
+ /* Log file/terminal stuff. */
+ mylog = "/dev/tty2";
+ ctr = langtrs[ atoi(LANG) ];
+
+ if (!(flog = fopen(mylog, "w+")))
+ {
+ printf("Couldn't open log terminal\n");
+ return 0;
+ }
+ fprintf(flog, "Install2 program started.\n");
+ newtInit();
+ newtCls();
+ strcpy (title, NAME " v" VERSION " - " SLOGAN);
+ newtDrawRootText(14, 0, title);
+ newtPushHelpLine(ctr[TR_HELPLINE]);
+
+ /* working dirs... */
+ mkdir(MOUNT_BACKUP, S_IRWXU|S_IRWXG|S_IRWXO);
+
+ //create the GUI screen and objects
+ newtComponent form, header, labelfile, labelkey, file, key, radio0, radio1, radio2, radio3, radio4, ok;
+
+ newtCenteredWindow (55,20,ctr[TR_RESTORE]);
+ form = newtForm (NULL, NULL,0);
+
+ sprintf(message, ctr[TR_RESTORE_CONFIGURATION], NAME);
+ header = newtTextboxReflowed (2,1,message,51,0,0,0);
+ newtFormAddComponent(form, header);
+
+ // The four method of restauration
+ int start1=1, start2=0, start3=0, start4=0;
+ radio1 = newtRadiobutton (17, 5, ctr[TR_SKIP], start1, NULL);
+ radio2 = newtRadiobutton (17, 6, "Floppy (legacy)", start2, radio1);
+ radio3 = newtRadiobutton (17, 7, "Usb-storage/CDROM", start3, radio2);
+ if (strcmp(WGET,"none"))
+ radio4 = newtRadiobutton (17, 8, "HTTP/FTP", start4, radio3);
+ else
+ radio4 = NULL;
+ newtFormAddComponents(form, radio1, radio2, radio3, radio4, NULL);
+
+ // The optionnal filename for 'backup'
+ labelfile=newtTextbox(12, 10, 35, 1, 0);
+ newtTextboxSetText (labelfile, "Filename");
+ newtFormAddComponent(form, labelfile);
+ char *filevalue;
+ char fileinit[STRING_SIZE] = "backup";
+ file = newtEntry (17, 11, fileinit, 20, &filevalue, 0);
+ newtFormAddComponent(form, file);
+
+ // The optionnal password for the key
+ labelkey=newtTextbox(12, 13, 35, 1, 0);
+ newtTextboxSetText (labelkey, "Backup key password");
+ newtFormAddComponent(form, labelkey);
+ char *keyvalue;
+ char keyinit[STRING_SIZE] = "";
+ key = newtEntry (17, 14, keyinit, 20, &keyvalue, 0);
+ newtFormAddComponent(form, key);
+
+ // The OK button
+ ok=newtButton (23, 16, ctr[TR_OK]);
+ newtFormAddComponent(form, ok);
+
+ /* loop until succeeds or user skips out */
+ int retcode = -1;
+ while ( retcode<0 ) {
+
+ // run the windows
+ struct newtExitStruct reponse;
+ newtFormRun (form, &reponse);
+ radio0 = newtRadioGetCurrent(radio1);
+ int radio;
+ radio = radio0 == radio1 ? 1 : radio0 == radio2 ? 2 : radio0 == radio3 ? 3 : radio0 == radio4 ? 4 : 0;
+ strcpy(keyinit,keyvalue); //reuse actual value
+ strcpy(fileinit,filevalue);
+
+ if (radio==1) {
+ retcode = 1; // no restore: nothing special
+ break; // out of the while loop
+ }
+
+ mkdir(TMP_EXTRACT, S_IRWXU|S_IRWXG|S_IRWXO);
+ statuswindow(45, 4, title, ctr[TR_INSTALLING_FILES]);
+ switch (radio) {
+ case 4: // network
+ sprintf(commandstring,"/bin/wget -P " TMP_EXTRACT " %s/%s.dat", WGET, filevalue);
+ mysystem (commandstring);
+ sprintf(commandstring,"/bin/wget -P " TMP_EXTRACT " %s/%s.key", WGET, filevalue);
+ if (mysystem (commandstring)) {
+ errorbox(ctr[TR_FAILED_TO_FIND]);
+ break;
+ };
+ goto COMMON;
+ case 3: // normal backup
+ if (mountbackup( filevalue, DEST_DEV )) {
+ errorbox(ctr[TR_UNABLE_TO_INSTALL_FILES]);//mess=no device with backup found
+ break;
+ };
+ // link files to a COMMON location
+ sprintf (commandstring, "chroot /harddisk ln -s "MOUNT_BACKUP_CH"/%s.dat " TMP_EXTRACT_CH "/%s.dat", filevalue, filevalue);
+ mysystem (commandstring);
+ sprintf (commandstring, "chroot /harddisk ln -s "MOUNT_BACKUP_CH"/%s.key " TMP_EXTRACT_CH "/%s.key", filevalue, filevalue);
+ mysystem (commandstring);
+
+ COMMON: // DECRYPT THE TARBALL
+ // Copy the key to a new location because we decrypt it!
+ if (strcmp(keyvalue, "")) { // password provided: decrypt the key
+ sprintf(commandstring, "/bin/chroot /harddisk /usr/bin/openssl enc"
+ " -a -d -aes256 -salt"
+ " -pass pass:%s"
+ " -in " TMP_EXTRACT_CH "/%s.key"
+ " -out " TMP_EXTRACT_CH "/__tmp.key",
+ keyvalue, filevalue);
+ } else { //just copy to new name
+ sprintf(commandstring, "/bin/chroot /harddisk cp"
+ " " TMP_EXTRACT_CH "/%s.key"
+ " " TMP_EXTRACT_CH "/__tmp.key",
+ filevalue);
+ }
+ mysystem (commandstring);
+
+ sprintf(commandstring, "/bin/chroot /harddisk /usr/bin/openssl des3"
+ " -d -salt"
+ " -in " TMP_EXTRACT_CH "/%s.dat"
+ " -out " TMP_EXTRACT_CH "/backup.tgz"
+ " -kfile " TMP_EXTRACT_CH "/__tmp.key",
+ filevalue);
+
+ if (mysystem (commandstring)) {
+ errorbox(ctr[TR_UNABLE_TO_INSTALL_FILES]);//mess=decrypt error:invalid key?
+ break;
+ }
+ strcpy(commandstring, "/bin/chroot /harddisk /bin/tar"
+ " -X " CONFIG_ROOT "/backup/exclude.system"
+ " -C " TMP_EXTRACT_CH
+ " -xzf " TMP_EXTRACT_CH "/backup.tgz");
+
+ if (mysystem(commandstring)) {
+ errorbox(ctr[TR_UNABLE_TO_INSTALL_FILES]);
+ break;
+ }
+ sprintf(commandstring, TMP_EXTRACT "/%s.dat", filevalue);
+ unlink(commandstring ); //dont need them anymore
+ unlink( TMP_EXTRACT "/backup.tgz");
+ sprintf(commandstring, TMP_EXTRACT "/%s.key", filevalue);
+ unlink(commandstring );
+ unlink( TMP_EXTRACT "/__tmp.key");
+
+ /* Now copy to correct location */
+ do_copy_files();
+ retcode = 0; /* successfully restored */
+ break;
+ case 2:
+ // diskette change
+ if (floppy_locate()) {
+ retcode = 2; // this an error!
+ break;
+ }
+
+ /* Always extract to /tmp/ipcop for temporary extraction
+ just in case floppy fails.
+ try a compressed backup first because it's quicker to fail.
+ In exclude.system, files name must be without leading / or
+ on extraction, name will never match
+ */
+ sprintf(commandstring,
+ "/bin/chroot /harddisk /bin/tar -X " CONFIG_ROOT "/backup/exclude.system -C "TMP_EXTRACT_CH" -xvzf /dev/floppy > %s 2> /dev/null", mylog);
+ if (system(commandstring)) {
+ /* if it's not compressed, try uncompressed first before failing*/
+ sprintf(commandstring,
+ "/bin/chroot /harddisk /bin/tar -X " CONFIG_ROOT "/backup/exclude.system -C "TMP_EXTRACT_CH" -xvf /dev/floppy > %s 2> /dev/null", mylog);
+ if (system(commandstring)) {
+ /* command failed trying to read from floppy */
+ errorbox(ctr[TR_UNABLE_TO_INSTALL_FILES]);
+ break;
+ }
+ }
+ /* Now copy to correct location */
+ do_copy_files();
+ retcode = 0; /* successfully restored */
+ }//switch
+ /* remove possible badly restored files */
+ mysystem("/bin/chroot /harddisk /bin/rm -rf " TMP_EXTRACT_CH );
+ newtPopWindow(); // close windows
+ }//while
+ newtFormDestroy(form);
+
+ /* cleanup */
+ mysystem("/bin/umount " MOUNT_BACKUP);
+ mysystem("/bin/chroot /harddisk /bin/rmdir " MOUNT_BACKUP_CH);
+
+ /* others operations moved from install to install2 */
+ fixup_squidacl();
+ fixup_initrd();
+
+ fprintf(flog, "Install2 program ended.\n");
+ fflush(flog);
+ fclose(flog);
+ newtFinished();
+ return retcode;
+}
+
-/* SmoothWall install program.\r
- *\r
- * This program is distributed under the terms of the GNU General Public\r
- * Licence. See the file COPYING for details.\r
- *\r
- * (c) Lawrence Manning, 2001\r
- * Contains main entry point, and misc functions.\r
- * \r
- * $Id: main.c,v 1.63.2.64 2006/01/11 01:01:38 franck78 Exp $\r
- * \r
- */\r
-#include "install.h"\r
-\r
-#define CDROM_INSTALL 0\r
-#define URL_INSTALL 1\r
-\r
-int raid_disk = 0;\r
-FILE *flog = NULL;\r
-char *mylog;\r
-char **ctr;\r
-\r
-char *pcmcia = NULL;\r
-extern char url[STRING_SIZE];\r
-\r
-/* \r
- To include a translated string in the final installer, you must reference\r
- it here with a simplr comment. This save a lot a space in the installer\r
-*/\r
-/* TR_WELCOME */\r
-/* TR_HELPLINE */\r
-/* TR_OK */\r
-/* TR_ERROR */\r
-/* TR_SELECT_INSTALLATION_MEDIA_LONG */\r
-/* TR_SELECT_INSTALLATION_MEDIA */\r
-/* TR_CANCEL */\r
-/* TR_INSERT_FLOPPY */\r
-/* TR_INSTALLATION_CANCELED */\r
-/* TR_EXTRACTING_MODULES */\r
-/* TR_UNABLE_TO_EXTRACT_MODULES */\r
-/* TR_LOADING_PCMCIA */\r
-/* TR_PROBING_SCSI */\r
-/* TR_NO_CDROM */\r
-/* TR_INSERT_CDROM */\r
-/* TR_USB_KEY_VFAT_ERR */\r
-/* TR_NETWORK_SETUP_FAILED */\r
-/* TR_NO_IPCOP_TARBALL_FOUND */\r
-/* TR_NO_SCSI_IMAGE_FOUND */\r
-/* TR_INSTALLING_FILES */\r
-/* TR_UNABLE_TO_INSTALL_FILES */\r
-/* TR_NO_HARDDISK */\r
-/* TR_PREPARE_HARDDISK */\r
-/* TR_DISK_TOO_SMALL */\r
-/* TR_CONTINUE_NO_SWAP */\r
-/* TR_PARTITIONING_DISK */\r
-/* TR_UNABLE_TO_PARTITION */\r
-/* TR_MAKING_BOOT_FILESYSTEM */\r
-/* TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM */\r
-/* TR_MAKING_LOG_FILESYSTEM */\r
-/* TR_UNABLE_TO_MAKE_LOG_FILESYSTEM */\r
-/* TR_MAKING_ROOT_FILESYSTEM */\r
-/* TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM */\r
-/* TR_MOUNTING_ROOT_FILESYSTEM */\r
-/* TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM */\r
-/* TR_MAKING_SWAPSPACE */\r
-/* TR_UNABLE_TO_MAKE_SWAPSPACE */\r
-/* TR_MOUNTING_SWAP_PARTITION */\r
-/* TR_UNABLE_TO_MOUNT_SWAP_PARTITION */\r
-/* TR_MOUNTING_BOOT_FILESYSTEM */\r
-/* TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM */\r
-/* TR_MOUNTING_LOG_FILESYSTEM */\r
-/* TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM */\r
-/* TR_ERROR_WRITING_CONFIG */\r
-/* TR_INSTALLING_GRUB */\r
-/* TR_UNABLE_TO_INSTALL_GRUB */\r
-/* TR_UNABLE_TO_UNMOUNT_CDROM */\r
-/* TR_UNABLE_TO_EJECT_CDROM */\r
-/* TR_CONGRATULATIONS_LONG */\r
-/* TR_CONGRATULATIONS */\r
-/* TR_PRESS_OK_TO_REBOOT */\r
-\r
-// in nic.c\r
-/* TR_CONFIGURE_NETWORKING */\r
-/* TR_PROBE */\r
-/* TR_SELECT */\r
-/* TR_CONFIGURE_NETWORKING_LONG */\r
-/* TR_PROBE_FAILED */\r
-/* TR_FOUND_NIC */\r
-/* TR_INTERFACE_FAILED_TO_COME_UP */\r
-\r
-//netc.c\r
-/* TR_CHECKING */\r
-/* TR_FAILED_TO_FIND */\r
-/* TR_ENTER_URL */\r
-\r
-//setup.c\r
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1 */\r
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2 */\r
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3 */\r
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4 */\r
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK */\r
-/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT */\r
-/* TR_PASSWORD_PROMPT */\r
-/* TR_AGAIN_PROMPT */\r
-/* TR_PASSWORD_CANNOT_BE_BLANK */\r
-/* TR_PASSWORDS_DO_NOT_MATCH */\r
-\r
-//libsmooth\r
-/* TR_INTERFACE */\r
-/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */\r
-/* TR_STATIC */\r
-/* TR_DHCP_HOSTNAME */\r
-/* TR_IP_ADDRESS_PROMPT */\r
-/* TR_NETMASK_PROMPT */\r
-/* TR_INVALID_FIELDS */\r
-/* TR_IP_ADDRESS_CR */\r
-/* TR_NETWORK_MASK_CR */\r
-/* TR_DHCP_HOSTNAME_CR */\r
-/* TR_LOOKING_FOR_NIC */\r
-/* TR_MANUAL */\r
-/* TR_SELECT_NETWORK_DRIVER */\r
-/* TR_SELECT_NETWORK_DRIVER_LONG */\r
-/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */\r
-/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */\r
-/* TR_MODULE_PARAMETERS */\r
-/* TR_LOADING_MODULE */\r
-/* TR_MODULE_NAME_CANNOT_BE_BLANK */\r
-\r
-\r
-int main(int argc, char *argv[])\r
-{\r
-#ifdef LANG_EN_ONLY\r
- char *langnames[] = { "English", NULL };\r
- char *shortlangnames[] = { "en", NULL };\r
- char **langtrs[] = { en_tr, NULL };\r
-#else\r
- char *langnames[] = { "Brasil", "Cestina", "Dansk", "Deutsch", "English", "Español", "Français", "Hellenic", "Italiano", "Spanish Latino", "Magyar", "Nederlands", "Norsk", "Polski", "Português", "Slovak", "Soomali", "Suomi", "Svenska", "Türkçe", "Tieng Viet", NULL };\r
- char *shortlangnames[] = { "bz", "cs", "da", "de", "en", "es", "fr", "el", "it", "la", "hu", "nl", "no", "pl", "pt", "sk", "so", "fi", "sv", "tr", "vi", NULL };\r
- char **langtrs[] = { bz_tr, cs_tr, da_tr, de_tr, en_tr, es_tr, fr_tr, el_tr, it_tr, la_tr, hu_tr, nl_tr, no_tr, pl_tr, pt_tr, sk_tr, so_tr, fi_tr, sv_tr, tr_tr, vi_tr, NULL };\r
-#endif\r
- char hdletter, cdletter;\r
- char harddrive[5], cdromdrive[5]; /* Device holder. */\r
- struct devparams hdparams, cdromparams; /* Params for CDROM and HD */\r
- int cdmounted = 0; /* Loop flag for inserting a cd. */ \r
- int rc;\r
- char commandstring[STRING_SIZE];\r
- char *installtypes[] = { "CDROM/USB-KEY", "HTTP/FTP", NULL };\r
- int installtype = CDROM_INSTALL; \r
- char insertmessage[STRING_SIZE];\r
- char insertdevnode[STRING_SIZE];\r
- int choice;\r
- char shortlangname[10];\r
- char message[1000];\r
- char title[STRING_SIZE];\r
- int allok = 0;\r
- int no_restore=0;\r
- int unmount_before=0;\r
- struct keyvalue *ethernetkv = initkeyvalues();\r
- FILE *handle, *cmdfile;\r
- char line[STRING_SIZE];\r
- char string[STRING_SIZE];\r
- int maximum_free = 0, current_free;\r
- int memory = 0;\r
- int log_partition, boot_partition, root_partition, swap_file;\r
- int scsi_disk = 0;\r
- int pcmcia_disk = 0;\r
- int pcmcia_cdrom = 0;\r
- int scsi_cdrom = 0;\r
- int ide_cdrom = 0;\r
- int fdisk = 0;\r
- int usb_cdrom = 0;\r
-\r
- setlocale (LC_ALL, "");\r
- sethostname(SNAME, 10);\r
- \r
- memset(&hdparams, 0, sizeof(struct devparams));\r
- memset(&cdromparams, 0, sizeof(struct devparams));\r
-\r
- /* Log file/terminal stuff. */\r
- if (argc >= 2)\r
- { \r
- if (!(flog = fopen(argv[1], "w+")))\r
- return 0;\r
- }\r
- else\r
- return 0;\r
- \r
- mylog = argv[1];\r
- \r
- fprintf(flog, "Install program started.\n");\r
- \r
- newtInit();\r
- newtCls();\r
-\r
- /* Do usb detection first for usb keyboard */\r
- if (! (cmdfile = fopen("/proc/cmdline", "r")))\r
- {\r
- fprintf(flog, "Couldn't open commandline: /proc/cmdline\n");\r
- } else {\r
- fgets(line, STRING_SIZE, cmdfile);\r
- if (strstr (line, "fdisk") != NULL) {\r
- fprintf(flog, "Manual FDISK selected.\n");\r
- fdisk = 1;\r
- }\r
- if (strstr (line, "nopcmcia") == NULL) {\r
- fprintf(flog, "Initializing PCMCIA controllers.\n");\r
- pcmcia = initialize_pcmcia();\r
- if (pcmcia) {\r
- fprintf (flog, "Detected PCMCIA Controller: %s.\n", pcmcia);\r
- sprintf(commandstring, "/sbin/modprobe %s", pcmcia);\r
- mysystem("/sbin/modprobe pcmcia_core");\r
- mysystem(commandstring);\r
- mysystem("/sbin/modprobe ds");\r
- /* pcmcia netcard drivers are not available from Boot floppy,\r
- * they will be loaded from Drivers floppy later */\r
- } else {\r
- fprintf (flog, "Detected No PCMCIA Controller.\n");\r
- }\r
- } else {\r
- fprintf(flog, "Skipping PCMCIA detection.\n");\r
- }\r
- if (strstr (line, "nousb") == NULL) {\r
- fprintf(flog, "Initializing USB controllers.\n");\r
- initialize_usb();\r
- } else {\r
- fprintf(flog, "Skipping USB detection.\n");\r
- }\r
- }\r
- \r
- /* English is the default */\r
- for (choice = 0; langnames[choice]; choice++)\r
- {\r
- if (strcmp(langnames[choice], "English") == 0)\r
- break;\r
- }\r
- if (!langnames[choice])\r
- goto EXIT;\r
-\r
-#ifdef LANG_EN_ONLY\r
- /* No need to ask. "choice" already has the index for English */\r
-#else\r
- rc = newtWinMenu("Language selection",\r
- "Select the language you wish to use for the " NAME ".", 50, 5, 5, 8,\r
- langnames, &choice, "Ok", NULL);\r
-#endif\r
- ctr = langtrs[choice];\r
- strcpy(shortlangname, shortlangnames[choice]);\r
- if (strcmp(shortlangname, "el") == 0)\r
- mysystem("/bin/setfont iso07u-16");\r
- else if (strcmp(shortlangname, "pt") == 0)\r
- mysystem("/bin/setfont lat1-16");\r
- else if (strcmp(shortlangname, "bz") == 0)\r
- mysystem("/bin/setfont lat1-16");\r
- else if (strcmp(shortlangname, "cs") == 0)\r
- mysystem("/bin/setfont lat2-16");\r
- else if (strcmp(shortlangname, "hu") == 0)\r
- mysystem("/bin/setfont lat2-16");\r
- else if (strcmp(shortlangname, "pl") == 0)\r
- mysystem("/bin/setfont lat2-16");\r
- else if (strcmp(shortlangname, "sk") == 0)\r
- mysystem("/bin/setfont lat2-16");\r
- else if (strcmp(shortlangname, "tr") == 0)\r
- mysystem("/bin/setfont lat5-16");\r
- else if (strcmp(shortlangname, "vi") == 0)\r
- mysystem("/bin/setfont viscii10-8x16");\r
- else\r
- mysystem("/bin/setfont lat0-16");\r
-\r
- /* need this for reading from formatted device */\r
- modprobe("vfat");\r
-\r
- newtDrawRootText(14, 0, NAME " v" VERSION " - " SLOGAN );\r
- newtPushHelpLine(ctr[TR_HELPLINE]);\r
-\r
- snprintf(message, STRING_SIZE, ctr[TR_WELCOME], NAME);\r
- snprintf (title, STRING_SIZE, "%s v%s - %s", NAME, VERSION, SLOGAN);\r
- newtWinMessage(title, ctr[TR_OK], message);\r
-\r
- snprintf(message,STRING_SIZE, ctr[TR_SELECT_INSTALLATION_MEDIA_LONG], NAME);\r
- rc = newtWinMenu(ctr[TR_SELECT_INSTALLATION_MEDIA], message,\r
- 50, 5, 5, 6, installtypes, &installtype, ctr[TR_OK],\r
- ctr[TR_CANCEL], NULL);\r
-\r
- if (rc == 2)\r
- goto EXIT;\r
-\r
- if (installtype == CDROM_INSTALL) // CD or USB-key\r
- {\r
-\r
- /* try usb key in superfloppy format only */\r
- if (checkusb("sda")) {\r
- sprintf(cdromdrive, "sda");\r
- usb_cdrom = 1;\r
- goto FOUND_SOURCE;\r
- }\r
- if (checkusb("sdb")) {\r
- sprintf(cdromdrive, "sdb");\r
- usb_cdrom = 1;\r
- goto FOUND_SOURCE;\r
- }\r
-\r
- /* look for an IDE CDROM. */\r
- if ((cdletter = findidetype(IDE_CDROM)))\r
- {\r
- sprintf(cdromdrive, "hd%c", cdletter);\r
- ide_cdrom = 1;\r
- goto FOUND_SOURCE;\r
- }\r
-\r
- /* If we have a USB attached CDROM then it will\r
- * have already appeared at /dev/scd0, so we\r
- * try to access it first, before asking for the\r
- * SCSI drivers disk.\r
- */\r
- if (try_scsi("scd0")) {\r
- sprintf(cdromdrive, "scd0");\r
- scsi_cdrom = 1;\r
- goto FOUND_SOURCE;\r
- }\r
-\r
- /* ask for supplemental SCSI driver */\r
- snprintf(insertmessage, STRING_SIZE, ctr[TR_INSERT_FLOPPY], NAME" SCSI");\r
- if (newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], insertmessage) != 1)\r
- {\r
- errorbox(ctr[TR_INSTALLATION_CANCELED]);\r
- goto EXIT;\r
- }\r
-\r
- /* extract new modules */\r
- if (runcommandwithstatus("/bin/tar -C / -xvzf /dev/floppy", ctr[TR_EXTRACTING_MODULES]))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_EXTRACT_MODULES]);\r
- goto EXIT;\r
- }\r
- /* and load PCMCIA */\r
- if (pcmcia)\r
- {\r
- /* trying to support SCSI pcmcia :-) */\r
- runcommandwithstatus("cardmgr -o -c /etc/pcmcia/scsi",\r
- ctr[TR_LOADING_PCMCIA]);\r
- if (try_scsi("scd0")) {\r
- sprintf(cdromdrive, "scd0");\r
- pcmcia_cdrom = 1;\r
- goto FOUND_SOURCE;\r
- }\r
- }\r
-\r
- /* try loading all SCSI modules with default options */\r
- /* Should expand this to allow options later though */\r
- runcommandwithstatus("/bin/probescsi.sh", ctr[TR_PROBING_SCSI]);\r
-\r
- /* If it fails, give up. */\r
- if (try_scsi("scd0")) {\r
- sprintf(cdromdrive, "scd0");\r
- scsi_cdrom = 1;\r
- goto FOUND_SOURCE;\r
- }\r
-\r
- /* Unable to find a valid source, give up */\r
- errorbox(ctr[TR_NO_CDROM]);\r
- goto EXIT;\r
-\r
- FOUND_SOURCE:\r
- sprintf(cdromparams.devnode_disk, "/dev/%s", cdromdrive);\r
-// cdromparams.module = 0;\r
-\r
- snprintf(insertmessage,STRING_SIZE ,ctr[TR_INSERT_CDROM], NAME);\r
- strcpy (insertdevnode, cdromparams.devnode_disk);\r
- }\r
- else /* don't understand why this follows... */\r
- {\r
- /* If we've done a PXE boot, we can skip the Drivers floppy,\r
- * as we've already got the modules in our instroot.gz */\r
- if (!(handle = fopen("/CDROMBOOT", "r"))) {\r
- snprintf(insertmessage, STRING_SIZE-12, ctr[TR_INSERT_FLOPPY], NAME);\r
- strcpy (insertdevnode , "/dev/floppy");\r
- } else {\r
- fclose(handle);\r
- cdmounted = 1;\r
- unmount_before = 1;\r
- }\r
- }\r
-\r
- /* Try to mount /cdrom with the device discovered */\r
- if (scsi_cdrom || ide_cdrom || usb_cdrom) {\r
- snprintf(commandstring, STRING_SIZE, "/bin/mount -o ro %s /cdrom", insertdevnode);\r
- int skip_dialog = 1;\r
- int sd_test = 0;\r
- while (!cdmounted)\r
- {\r
- /* for usb-key, we have to try sda then sda1. The key cannot be unpluged */\r
- if (sd_test == 1) { //change to sda1\r
- sprintf(commandstring, "/bin/mount -o ro %s1 /cdrom", insertdevnode);\r
- }\r
- if (sd_test == 2) { //the key do not contains a vfat file system\r
- errorbox(ctr[TR_USB_KEY_VFAT_ERR]);\r
- goto EXIT;\r
- }\r
- if (usb_cdrom) sd_test++; // next USB test\r
- \r
- if (!skip_dialog && !usb_cdrom) {\r
- rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], insertmessage);\r
- if (rc != 1)\r
- {\r
- errorbox(ctr[TR_INSTALLATION_CANCELED]);\r
- goto EXIT;\r
- }\r
- }\r
- skip_dialog = 0;\r
- if (mysystem(commandstring))\r
- continue; //mount failed, try again\r
-\r
- /*verify it's what we want */\r
- handle = fopen ("/cdrom/" SNAME "-" VERSION ".tgz", "r");\r
- if (handle == NULL) {\r
- mysystem ("/bin/umount /cdrom");\r
- continue; /* bad disk ! */\r
- }\r
-\r
- fclose (handle);\r
- cdmounted = 1;\r
- /* If we've booted from CDROM, then\r
- * we've already got the drivers,\r
- * so we can skip this unpack. */\r
- if ((handle = fopen("/CDROMBOOT", "r"))) {\r
- fclose(handle);\r
- break; /* ok we go everything */\r
- }\r
- /* unpack drivers */\r
- if (runcommandwithprogress(60, 4, title,\r
- "/bin/tar -C / -xvzf /cdrom/images/drivers-"VERSION".img",\r
- 175, ctr[TR_EXTRACTING_MODULES]))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_EXTRACT_MODULES]);\r
- goto EXIT;\r
- }\r
- }\r
- } else { /* no cd device were discovered, ask second diskette */\r
- sprintf(commandstring, "/bin/tar -C / -xvzf /dev/floppy");\r
- while (!cdmounted)\r
- {\r
- rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], insertmessage);\r
- if (rc != 1)\r
- {\r
- errorbox(ctr[TR_INSTALLATION_CANCELED]);\r
- goto EXIT;\r
- }\r
- if (runcommandwithprogress(60, 4, title, \r
- commandstring,\r
- 175, ctr[TR_EXTRACTING_MODULES]))\r
- {\r
-#if 0 /* disable this, so we allow for people putting in the wrong disk */\r
- errorbox(ctr[TR_UNABLE_TO_EXTRACT_MODULES]);\r
- goto EXIT;\r
-#endif\r
- }\r
- else\r
- {\r
- handle = fopen ("/bin/mke2fs", "r");\r
- if (handle != NULL) {\r
- fclose (handle);\r
- cdmounted = 1;\r
- }\r
- }\r
- }\r
- }\r
-\r
- /* PCMCIA controller is already detected\r
- * On Boot floppy, we didn't have the PCMCIA drivers\r
- * so load them now because they are installed from Drivers. */\r
- if (!(handle = fopen("/CDROMBOOT", "r"))) {\r
- if (strstr (line, "nopcmcia") == NULL) {\r
- fprintf(flog,"Floppy boot detected, loading PCMCIA drivers.\n");\r
- if (pcmcia) {\r
- fprintf (flog, "Detected PCMCIA Controller: %s.\n", pcmcia);\r
- sprintf(commandstring, "/sbin/modprobe %s", pcmcia);\r
- mysystem("/sbin/modprobe pcmcia_core");\r
- mysystem(commandstring);\r
- mysystem("/sbin/modprobe ds");\r
- } else {\r
- fprintf (flog, "Detected No PCMCIA Controller.\n");\r
- }\r
- } else {\r
- fprintf(flog, "Skipping PCMCIA detection.\n");\r
- }\r
- if (strstr (line, "nousb") == NULL) {\r
- fprintf(flog, "Initializing USB controllers.\n");\r
- initialize_usb();\r
- } else {\r
- fprintf(flog, "Skipping USB detection.\n");\r
- }\r
- } else\r
- fclose(handle);\r
-\r
- /* Configure the network now! */\r
- if (installtype == URL_INSTALL)\r
- {\r
- /* Network driver and params. */\r
- if (!(networkmenu(ethernetkv)))\r
- {\r
- errorbox(ctr[TR_NETWORK_SETUP_FAILED]);\r
- goto EXIT;\r
- }\r
-\r
- /* Check for ipcop-<VERSION>.tgz */\r
- if (!(checktarball(SNAME "-" VERSION ".tgz")))\r
- {\r
- errorbox(ctr[TR_NO_IPCOP_TARBALL_FOUND]);\r
- goto EXIT;\r
- }\r
- }\r
-\r
- /* Get device for the HD. This has to succeed. */\r
- /* first try an IDE disk */\r
- if ((hdletter = findidetype(IDE_HD)))\r
- {\r
- sprintf(harddrive, "hd%c", hdletter);\r
- goto FOUND_DESTINATION;\r
- }\r
- /* unpack SCSI driver if not done during CD detection */\r
- if (installtype == URL_INSTALL)\r
- {\r
- /* If we've done a PXE boot, we can skip the SCSI\r
- * floppy as we've already got the modules in our \r
- * instroot.gz */\r
- if (!(handle = fopen("/CDROMBOOT", "r"))) \r
- {\r
- /* search img where it is on a mounted loop iso */\r
- if (!(checktarball("images/scsidrv-"VERSION".img")))\r
- {\r
- /* Couldn't find the SCSI drivers on the URL page,\r
- * so after 3 failed attempts, ask the user for the\r
- * SCSI drivers floppy disk. */\r
- errorbox(ctr[TR_NO_SCSI_IMAGE_FOUND]);\r
- snprintf(insertmessage, STRING_SIZE, ctr[TR_INSERT_FLOPPY], NAME" SCSI");\r
- rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], insertmessage);\r
- if (rc != 1)\r
- {\r
- errorbox(ctr[TR_INSTALLATION_CANCELED]);\r
- goto EXIT;\r
- }\r
-\r
- if (runcommandwithstatus("/bin/tar -C / -xvzf /dev/floppy", ctr[TR_EXTRACTING_MODULES]))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_EXTRACT_MODULES]);\r
- goto EXIT;\r
- }\r
- } else {\r
- /* unpack... THIS DO NOT WORK BECAUSE var "string" is empty*/\r
- snprintf(commandstring, STRING_SIZE,\r
- "/bin/wget -O - %s/%s | /bin/tar -C / -xvzf -",\r
- url, string);\r
- if (runcommandwithprogress(60, 4, title, commandstring,\r
- 4500, ctr[TR_INSTALLING_FILES]))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_INSTALL_FILES]);\r
- goto EXIT;\r
- }\r
- }\r
- } else\r
- fclose(handle);\r
- } else { /* cdrom/usb install, install SCSI id not done */\r
- if (ide_cdrom) {\r
- if (runcommandwithstatus("/bin/tar -C / -xvzf /cdrom/images/scsidrv-"VERSION".img", ctr[TR_EXTRACTING_MODULES]))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_EXTRACT_MODULES]);\r
- goto EXIT;\r
- }\r
- }\r
- }\r
-\r
- /* load SCSI/pcmcia drivers if not done during CD detection */\r
- if (!scsi_cdrom) {\r
-#if 0 /* not yet */\r
- if (pcmcia)\r
- {\r
- /* trying to support SCSI pcmcia :-) */\r
- runcommandwithstatus("cardmgr -o -c /etc/pcmcia/scsi", \r
- ctr[TR_LOADING_PCMCIA]);\r
- if (try_scsi(usb_cdrom ? "sdb":"sda")) {\r
- scsi_disk = 1;\r
- pcmcia_disk = 1;\r
- }\r
- if (checkusb("sdb") && try_scsi("sdc")) {\r
- scsi_disk = 1;\r
- pcmcia_disk = 1;\r
- }\r
- }\r
-#endif\r
- /* try loading all SCSI modules with default options */\r
- /* Should expand this to allow options later though */\r
- if (!pcmcia_disk)\r
- runcommandwithstatus("/bin/probescsi.sh",\r
- ctr[TR_PROBING_SCSI]);\r
- }\r
- /* Now try to find destination device... \r
- Need to clean this up at some point\r
- scsi disk is sdb/sdc when sda/sdb is used for usb-key\r
- if scsi-disk is is sdd or more, it is not discovered\r
- */\r
- if (try_scsi(usb_cdrom ? "sdb":"sda")) {\r
- scsi_disk = 1;\r
- sprintf(harddrive, usb_cdrom ? "sdb":"sda");\r
- goto FOUND_DESTINATION;\r
- }\r
- if (checkusb("sdb") && try_scsi("sdc")) {\r
- scsi_disk = 1;\r
- sprintf(harddrive, "sdc");\r
- goto FOUND_DESTINATION;\r
- }\r
- if (try_scsi("ida/c0d0")) {\r
- raid_disk = 1;\r
- sprintf(harddrive, "ida/c0d0");\r
- goto FOUND_DESTINATION;\r
- }\r
- if (try_scsi("cciss/c0d0")) {\r
- raid_disk = 1;\r
- sprintf(harddrive, "cciss/c0d0");\r
- goto FOUND_DESTINATION;\r
- }\r
- if (try_scsi("rd/c0d0")) {\r
- raid_disk = 1;\r
- sprintf(harddrive, "rd/c0d0");\r
- goto FOUND_DESTINATION;\r
- }\r
- if (try_scsi("ataraid/d0")) {\r
- raid_disk = 1;\r
- sprintf(harddrive, "ataraid/d0");\r
- goto FOUND_DESTINATION;\r
- }\r
- /* nothing worked, give up */\r
- errorbox(ctr[TR_NO_HARDDISK]);\r
- goto EXIT;\r
-\r
- FOUND_DESTINATION:\r
- /* Make the hdparms struct and print the contents.\r
- With USB-KEY install and SCSI disk, while installing, the disk\r
- is named 'sdb,sdc,...' (following keys)\r
- On reboot, it will become 'sda'\r
- To avoid many test, all names are built in the struct.\r
- */\r
- sprintf(hdparams.devnode_disk, "/dev/%s", harddrive);\r
- /* Address the partition or raid partition (eg dev/sda or /dev/sdap1 */\r
- sprintf(hdparams.devnode_part, "/dev/%s%s", harddrive,raid_disk ? "p" : "");\r
- /* now the names after the machine is booted. Today only scsi is affected \r
- and we only install on the first scsi disk.\r
- */\r
- { char tmp[30];\r
- strcpy(tmp, scsi_disk ? "sda" : harddrive);\r
- sprintf(hdparams.devnode_disk_run, "/dev/%s", tmp);\r
- sprintf(hdparams.devnode_part_run, "/dev/%s%s", tmp, raid_disk ? "p" : "");\r
- }\r
-\r
- rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL],\r
- ctr[TR_PREPARE_HARDDISK], hdparams.devnode_disk_run);\r
- if (rc != 1)\r
- goto EXIT;\r
-\r
- /* Calculate amount of memory in machine */\r
- if ((handle = fopen("/proc/meminfo", "r")))\r
- {\r
- while (fgets(line, STRING_SIZE-1, handle)) {\r
- if (sscanf (line, "MemTotal: %s kB", string)) {\r
- memory = atoi(string) / 1024 ;\r
- }\r
- }\r
- fclose(handle);\r
- }\r
-\r
- /* Partition, mkswp, mkfs.\r
- * before partitioning, first determine the sizes of each\r
- * partition. In order to do that we need to know the size of\r
- * the disk. \r
- */\r
- /* Don't use mysystem here so we can redirect output */\r
- sprintf(commandstring, "/bin/sfdisk -s /dev/%s > /disksize 2> /dev/null", harddrive);\r
- system(commandstring);\r
-\r
- /* Calculate amount of disk space */\r
- if ((handle = fopen("/disksize", "r")))\r
- {\r
- fgets(line, STRING_SIZE-1, handle);\r
- if (sscanf (line, "%s", string)) {\r
- maximum_free = atoi(string) / 1024;\r
- }\r
- fclose(handle);\r
- }\r
- \r
- fprintf(flog, "maximum_free = %d, memory = %d", maximum_free, memory);\r
- \r
- /* If you need more than this, you should really add physical memory */\r
- /* Minimum: 192 = 64 real + 128 swap */\r
- swap_file = memory < 64 ? 2 * memory : 192 - memory ;\r
- swap_file = swap_file < 32 ? 32 : swap_file ;\r
-\r
- if (maximum_free < 135 + swap_file )\r
- {\r
- if (maximum_free < 135) {\r
- errorbox(ctr[TR_DISK_TOO_SMALL]);\r
- goto EXIT;\r
- }\r
-\r
- rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], ctr[TR_CONTINUE_NO_SWAP]);\r
- if (rc != 1)\r
- goto EXIT;\r
- swap_file = 0;\r
- }\r
-\r
- boot_partition = 8; /* in MB */\r
- current_free = maximum_free - boot_partition - swap_file;\r
-\r
- /* Give more place for add-on, extend root to 25% of current_free, upper limit to 8 gigas */\r
- root_partition = current_free / 4 ;\r
- root_partition = root_partition > 8192 ? 8192 : root_partition ;\r
- root_partition = current_free < 860 ? 235 : root_partition;\r
- root_partition = current_free < 380 ? 110 : root_partition;\r
-\r
- current_free = current_free - root_partition;\r
- root_partition = root_partition + swap_file;\r
-\r
- log_partition = current_free;\r
-\r
- fprintf(flog, "boot = %d, swap = %d, mylog = %d, root = %d\n",\r
- boot_partition, swap_file, log_partition, root_partition);\r
-\r
-#ifdef __alpha__\r
- fdisk = 1;\r
-#endif\r
-\r
- if (fdisk) {\r
- rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], "NOW FDISK");\r
- if (rc != 1)\r
- goto EXIT;\r
- } else {\r
-#ifdef __i386__\r
- handle = fopen("/tmp/partitiontable", "w");\r
-\r
- fprintf(handle, ",%d,83,*\n,%d,83,\n,0,0,\n,,83,\n",\r
- boot_partition, log_partition);\r
-\r
- fclose(handle); \r
-\r
- sprintf(commandstring, "/bin/sfdisk -uM %s < /tmp/partitiontable", hdparams.devnode_disk);\r
- if (runcommandwithstatus(commandstring, ctr[TR_PARTITIONING_DISK]))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_PARTITION]);\r
- goto EXIT;\r
- }\r
-#endif\r
- }\r
- /* create filesystem boot partition 1 */\r
- sprintf(commandstring, "/bin/mke2fs -m 0 -j %s1", hdparams.devnode_part);\r
- if (runcommandwithstatus(commandstring, ctr[TR_MAKING_BOOT_FILESYSTEM]))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM]);\r
- goto EXIT;\r
- }\r
-\r
- /* create filesystem log partition 2 */\r
- sprintf(commandstring, "/bin/mke2fs -j %s2", hdparams.devnode_part);\r
- if (runcommandwithstatus(commandstring, ctr[TR_MAKING_LOG_FILESYSTEM]))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_MAKE_LOG_FILESYSTEM]);\r
- goto EXIT;\r
- }\r
-\r
- /* create filesystem root partition 4 */\r
- sprintf(commandstring, "/bin/mke2fs -m 1 -j %s4", hdparams.devnode_part);\r
- if (runcommandwithstatus(commandstring, ctr[TR_MAKING_ROOT_FILESYSTEM]))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM]);\r
- goto EXIT;\r
- }\r
-\r
- /* Mount root on partition 4 */\r
- sprintf(commandstring, "/sbin/mount -t ext2 %s4 /harddisk", hdparams.devnode_part);\r
- if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_ROOT_FILESYSTEM]))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM]);\r
- goto EXIT;\r
- }\r
- mkdir("/harddisk/boot", S_IRWXU|S_IRWXG|S_IRWXO);\r
- mkdir("/harddisk/var", S_IRWXU|S_IRWXG|S_IRWXO); \r
- mkdir("/harddisk/var/log", S_IRWXU|S_IRWXG|S_IRWXO);\r
-\r
- /* Make,mount swapfile */\r
- if (swap_file) {\r
- sprintf(commandstring, "/bin/dd if=/dev/zero of=/harddisk/swapfile bs=1024k count=%d", swap_file);\r
- if (runcommandwithstatus(commandstring, ctr[TR_MAKING_SWAPSPACE]))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_MAKE_SWAPSPACE]);\r
- goto EXIT;\r
- }\r
- if (runcommandwithstatus("/bin/mkswap /harddisk/swapfile", ctr[TR_MAKING_SWAPSPACE]))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_MAKE_SWAPSPACE]);\r
- goto EXIT;\r
- }\r
- if (runcommandwithstatus("/bin/swapon /harddisk/swapfile", ctr[TR_MOUNTING_SWAP_PARTITION]))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_MOUNT_SWAP_PARTITION]);\r
- goto EXIT;\r
- }\r
- }\r
-\r
- /* Mount boot on partition 1 */\r
- sprintf(commandstring, "/sbin/mount -t ext2 %s1 /harddisk/boot", hdparams.devnode_part);\r
- if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_BOOT_FILESYSTEM]))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM]);\r
- goto EXIT;\r
- }\r
-\r
- /* Mount log on partition 2 */\r
- sprintf(commandstring, "/sbin/mount -t ext2 %s2 /harddisk/var/log", hdparams.devnode_part);\r
- if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_LOG_FILESYSTEM]))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM]);\r
- goto EXIT;\r
- }\r
- \r
- /* Either use tarball from cdrom or download. */\r
- if (installtype == CDROM_INSTALL)\r
- snprintf(commandstring, STRING_SIZE, \r
- "/bin/tar -C /harddisk -xvzf /cdrom/" SNAME "-" VERSION ".tgz");\r
- else\r
- snprintf(commandstring, STRING_SIZE, \r
- "/bin/wget -O - %s/" SNAME "-" VERSION ".tgz | /bin/tar -C /harddisk -xvzf -", url);\r
- \r
- if (runcommandwithprogress(60, 4, title, commandstring, 4600,\r
- ctr[TR_INSTALLING_FILES]))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_INSTALL_FILES]);\r
- goto EXIT;\r
- }\r
- \r
- /* Save USB controller type to modules.conf */\r
- write_usb_modules_conf();\r
-\r
- /* touch the modules.dep files */\r
- mysystem("/bin/chroot /harddisk /bin/touch /lib/modules/"KERNEL_VERSION"/modules.dep");\r
-#ifdef __i386__\r
- mysystem("/bin/chroot /harddisk /bin/touch /lib/modules/"KERNEL_VERSION"-smp/modules.dep");\r
-#endif\r
-\r
- /* Rename uname */\r
- rename ("/harddisk/bin/uname.bak", "/harddisk/bin/uname");\r
-\r
- /* Write PCMCIA Config */\r
- if (pcmcia) {\r
- handle = fopen("/harddisk/etc/modules.conf", "a");\r
- if (handle != NULL) {\r
- fprintf (handle, "# PCMCIA Settings\n");\r
- fprintf (handle, "alias pcmcia-controller %s\n", pcmcia);\r
- fclose(handle);\r
- }\r
- }\r
-\r
- handle = fopen("/harddisk/etc/pcmcia.conf", "w");\r
- if (handle != NULL) {\r
- if (pcmcia) {\r
- fprintf (handle, "PCMCIA=yes\n");\r
- fprintf (handle, "PCIC=%s\n", pcmcia);\r
- } else {\r
- fprintf (handle, "PCMCIA=no\n");\r
- fprintf (handle, "PCIC=\n");\r
- }\r
- fprintf (handle, "CARDMGR_OPTS=\n");\r
- fprintf (handle, "SCHEME=\n");\r
- fclose(handle);\r
- }\r
-\r
- /* *always* write disk configuration */\r
- if (!(write_disk_configs(&hdparams))){\r
- errorbox(ctr[TR_ERROR_WRITING_CONFIG]);\r
- goto EXIT;\r
- }\r
-\r
- /* \r
- Allow the user to restore their configuration from a floppy.\r
- It uses tar. If the tar fails for any reason, show user an\r
- error and go back to the restore/skip question. This gives\r
- the user the chance to have another go. */\r
- \r
- /* Program is outside install to save space on floppy \r
- */\r
- fprintf(flog, "Passing control to install2.\n"); \r
- fflush(flog);\r
- //newtSuspend();\r
- /* pass needed parameter for install 2 by position\r
- choice: index of langage selected\r
- devnode_disk: to prevent unmounting of it\r
- url: if network, allow restaure from it\r
- */\r
- sprintf(commandstring, "/harddisk/usr/local/bin/install2 %d %s %s",\r
- choice,\r
- strlen(cdromparams.devnode_disk ) ? cdromparams.devnode_disk : "none",\r
- strlen(url) ? url : "none"\r
- );\r
- no_restore = system(commandstring);\r
- //newtResume();\r
- \r
- /* if we installed from CD ROM then we didn't set up the\r
- network interface yet. Therefore, set up Network\r
- driver and params just before we need them.\r
- */\r
- if (no_restore && (installtype == CDROM_INSTALL)) { \r
- if (!(networkmenu(ethernetkv))){\r
- errorbox(ctr[TR_NETWORK_SETUP_FAILED]);\r
- goto EXIT;\r
- }\r
- }\r
-\r
- /* Build cache lang file */\r
- mysystem("/bin/chroot /harddisk /usr/bin/perl -e \"require '" CONFIG_ROOT "/lang.pl'; &Lang::BuildCacheLang\"");\r
- \r
- /* write ethernet and lang configs only if they have not\r
- been restored from floppy already. */\r
- if (no_restore) {\r
- if (!write_ethernet_configs(ethernetkv)||\r
- !write_lang_configs(shortlangname)) {\r
- errorbox(ctr[TR_ERROR_WRITING_CONFIG]);\r
- goto EXIT;\r
- }\r
- }\r
-\r
-\r
-#if 0 /* not yet */\r
- if (pcmcia_disk)\r
- {\r
- fprintf(flog, "Detected SCSI driver PCMCIA\n");\r
- fprintf(flog, "Fixing up ipcoprd.img\n");\r
- mysystem("/bin/chroot /harddisk /sbin/modprobe loop");\r
- mkdir("/harddisk/initrd", S_IRWXU|S_IRWXG|S_IRWXO);\r
- mysystem("/bin/chroot /harddisk /sbin/pcinitrd -r "KERNEL_VERSION" /boot/ipcoprd.img");\r
-#ifdef __i386__\r
- mysystem("/bin/chroot /harddisk /bin/mv /boot/grub/scsigrub.conf /boot/grub/grub.conf");\r
-#endif\r
-#ifdef __alpha__\r
- mysystem("/bin/chroot /harddisk /bin/mv /boot/etc/scsiaboot.conf /boot/etc/aboot.conf");\r
-#endif\r
- }\r
-#endif\r
-\r
-#ifdef __i386__\r
- // to verify: with USB-key grubbatch install on sdb and boot sda....\r
- replace( "/harddisk/boot/grub/grubbatch", "DEVICE", hdparams.devnode_disk);\r
- /* restore permissions */\r
- chmod("/harddisk/boot/grub/grubbatch", S_IXUSR | S_IRUSR | S_IXGRP | S_IRGRP | S_IXOTH | S_IROTH);\r
-\r
- sprintf(string, "root=%s4", hdparams.devnode_part_run);\r
- replace( "/harddisk/boot/grub/grub.conf", "root=ROOT", string);\r
-\r
- mysystem("/bin/chroot /harddisk /bin/mount -n -t proc none /proc");\r
-\r
- if (runcommandwithstatus("/bin/chroot /harddisk /boot/grub/grubbatch", ctr[TR_INSTALLING_GRUB]))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_INSTALL_GRUB]);\r
- goto EXIT;\r
- }\r
- mysystem("/bin/chroot /harddisk /bin/umount -n /proc");\r
-#endif\r
-#ifdef __alpha__\r
- sprintf(commandstring, "/bin/chroot /harddisk /sbin/swriteboot -f3 %s /boot/bootlx", hdparams.devnode_disk);\r
- mysystem(commandstring);\r
- sprintf(commandstring, "/bin/chroot /harddisk /sbin/abootconf %s 1", hdparams.devnode_disk_run);\r
- mysystem(commandstring);\r
- sprintf(string, "root=%s4", hdparams.devnode_part_run);\r
- replace( "/harddisk/boot/etc/aboot.conf", "root=ROOT", string);\r
-#endif\r
-\r
- /* unmounting happens everywhere because there are places\r
- which require device is to be unmounted under certain\r
- circumstances. This is the last place we can unmount\r
- anything and still succeed.\r
- */\r
-\r
- if (!unmount_before && !usb_cdrom && installtype == CDROM_INSTALL){\r
- if (mysystem("/sbin/umount /cdrom"))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_UNMOUNT_CDROM]);\r
- goto EXIT;\r
- }\r
- }\r
-\r
- if ((installtype == CDROM_INSTALL) && !usb_cdrom)\r
- {\r
- if (!(ejectcdrom(cdromparams.devnode_disk)))\r
- {\r
- errorbox(ctr[TR_UNABLE_TO_EJECT_CDROM]);\r
- // goto EXIT;\r
- }\r
- }\r
-\r
- snprintf(message, STRING_SIZE, ctr[TR_CONGRATULATIONS_LONG],\r
- NAME, SNAME, SNAME, NAME, NAME, NAME);\r
- newtWinMessage(ctr[TR_CONGRATULATIONS], ctr[TR_OK], message);\r
- \r
- allok = 1;\r
-\r
-EXIT:\r
- fprintf(flog, "Install program ended.\n");\r
- fflush(flog);\r
- fclose(flog);\r
-\r
- if (!allok)\r
- newtWinMessage(title, ctr[TR_OK], ctr[TR_PRESS_OK_TO_REBOOT]); \r
-\r
- newtFinished();\r
-\r
- freekeyvalues(ethernetkv);\r
- //no more needed\r
- mysystem("/bin/chroot /harddisk /bin/rm /usr/local/bin/install2");\r
-\r
- /* run setup only if config not restored from floppy already. */\r
- if (allok && no_restore)\r
- {\r
- /* /proc is needed by the module checker. We have to mount it\r
- * so it can be seen by setup, which is run chrooted. */\r
- if (system("/sbin/mount proc -t proc /harddisk/proc"))\r
- printf("Unable to mount proc in /harddisk.");\r
- else\r
- {\r
- if (system("/bin/chroot /harddisk /usr/local/sbin/setup /dev/tty2 INSTALL"))\r
- printf("Unable to run setup.\n");\r
- if (system("/sbin/umount /harddisk/proc"))\r
- printf("Unable to umount /harddisk/proc.\n");\r
- }\r
- }\r
-\r
- fcloseall();\r
-\r
- system("/bin/swapoff /harddisk/swapfile");\r
- system("/sbin/umount /harddisk/var/log");\r
- system("/sbin/umount /harddisk/boot");\r
- system("/sbin/umount /harddisk");\r
- system("/etc/halt");\r
-\r
- return 0;\r
-}\r
-\r
-int modprobe (char *mod) {\r
- char commandstring[STRING_SIZE];\r
- sprintf (commandstring,"/sbin/modprobe %s", mod);\r
- return mysystem (commandstring); \r
-}\r
-\r
-int rmmod (char *mod) {\r
- char commandstring[STRING_SIZE];\r
- sprintf (commandstring,"/sbin/rmmod %s", mod);\r
- return mysystem (commandstring); \r
-}\r
+/* SmoothWall install program.
+ *
+ * This program is distributed under the terms of the GNU General Public
+ * Licence. See the file COPYING for details.
+ *
+ * (c) Lawrence Manning, 2001
+ * Contains main entry point, and misc functions.
+ *
+ * $Id: main.c,v 1.63.2.64 2006/01/11 01:01:38 franck78 Exp $
+ *
+ */
+#include "install.h"
+
+#define CDROM_INSTALL 0
+#define URL_INSTALL 1
+
+int raid_disk = 0;
+FILE *flog = NULL;
+char *mylog;
+char **ctr;
+
+char *pcmcia = NULL;
+extern char url[STRING_SIZE];
+
+/*
+ To include a translated string in the final installer, you must reference
+ it here with a simplr comment. This save a lot a space in the installer
+*/
+/* TR_WELCOME */
+/* TR_HELPLINE */
+/* TR_OK */
+/* TR_ERROR */
+/* TR_SELECT_INSTALLATION_MEDIA_LONG */
+/* TR_SELECT_INSTALLATION_MEDIA */
+/* TR_CANCEL */
+/* TR_INSERT_FLOPPY */
+/* TR_INSTALLATION_CANCELED */
+/* TR_EXTRACTING_MODULES */
+/* TR_UNABLE_TO_EXTRACT_MODULES */
+/* TR_LOADING_PCMCIA */
+/* TR_PROBING_SCSI */
+/* TR_NO_CDROM */
+/* TR_INSERT_CDROM */
+/* TR_USB_KEY_VFAT_ERR */
+/* TR_NETWORK_SETUP_FAILED */
+/* TR_NO_IPCOP_TARBALL_FOUND */
+/* TR_NO_SCSI_IMAGE_FOUND */
+/* TR_INSTALLING_FILES */
+/* TR_UNABLE_TO_INSTALL_FILES */
+/* TR_NO_HARDDISK */
+/* TR_PREPARE_HARDDISK */
+/* TR_DISK_TOO_SMALL */
+/* TR_CONTINUE_NO_SWAP */
+/* TR_PARTITIONING_DISK */
+/* TR_UNABLE_TO_PARTITION */
+/* TR_MAKING_BOOT_FILESYSTEM */
+/* TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM */
+/* TR_MAKING_LOG_FILESYSTEM */
+/* TR_UNABLE_TO_MAKE_LOG_FILESYSTEM */
+/* TR_MAKING_ROOT_FILESYSTEM */
+/* TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM */
+/* TR_MOUNTING_ROOT_FILESYSTEM */
+/* TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM */
+/* TR_MAKING_SWAPSPACE */
+/* TR_UNABLE_TO_MAKE_SWAPSPACE */
+/* TR_MOUNTING_SWAP_PARTITION */
+/* TR_UNABLE_TO_MOUNT_SWAP_PARTITION */
+/* TR_MOUNTING_BOOT_FILESYSTEM */
+/* TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM */
+/* TR_MOUNTING_LOG_FILESYSTEM */
+/* TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM */
+/* TR_ERROR_WRITING_CONFIG */
+/* TR_INSTALLING_GRUB */
+/* TR_UNABLE_TO_INSTALL_GRUB */
+/* TR_UNABLE_TO_UNMOUNT_CDROM */
+/* TR_UNABLE_TO_EJECT_CDROM */
+/* TR_CONGRATULATIONS_LONG */
+/* TR_CONGRATULATIONS */
+/* TR_PRESS_OK_TO_REBOOT */
+
+// in nic.c
+/* TR_CONFIGURE_NETWORKING */
+/* TR_PROBE */
+/* TR_SELECT */
+/* TR_CONFIGURE_NETWORKING_LONG */
+/* TR_PROBE_FAILED */
+/* TR_FOUND_NIC */
+/* TR_INTERFACE_FAILED_TO_COME_UP */
+
+//netc.c
+/* TR_CHECKING */
+/* TR_FAILED_TO_FIND */
+/* TR_ENTER_URL */
+
+//setup.c
+/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK1 */
+/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK2 */
+/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK3 */
+/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK4 */
+/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_HARDDISK */
+/* TR_UNABLE_TO_MAKE_SYMLINK_DEV_ROOT */
+/* TR_PASSWORD_PROMPT */
+/* TR_AGAIN_PROMPT */
+/* TR_PASSWORD_CANNOT_BE_BLANK */
+/* TR_PASSWORDS_DO_NOT_MATCH */
+
+//libsmooth
+/* TR_INTERFACE */
+/* TR_ENTER_THE_IP_ADDRESS_INFORMATION */
+/* TR_STATIC */
+/* TR_DHCP_HOSTNAME */
+/* TR_IP_ADDRESS_PROMPT */
+/* TR_NETMASK_PROMPT */
+/* TR_INVALID_FIELDS */
+/* TR_IP_ADDRESS_CR */
+/* TR_NETWORK_MASK_CR */
+/* TR_DHCP_HOSTNAME_CR */
+/* TR_LOOKING_FOR_NIC */
+/* TR_MANUAL */
+/* TR_SELECT_NETWORK_DRIVER */
+/* TR_SELECT_NETWORK_DRIVER_LONG */
+/* TR_UNABLE_TO_LOAD_DRIVER_MODULE */
+/* TR_THIS_DRIVER_MODULE_IS_ALREADY_LOADED */
+/* TR_MODULE_PARAMETERS */
+/* TR_LOADING_MODULE */
+/* TR_MODULE_NAME_CANNOT_BE_BLANK */
+
+
+int main(int argc, char *argv[])
+{
+#ifdef LANG_EN_ONLY
+ char *langnames[] = { "English", NULL };
+ char *shortlangnames[] = { "en", NULL };
+ char **langtrs[] = { en_tr, NULL };
+#else
+ char *langnames[] = { "Brasil", "Cestina", "Dansk", "Deutsch", "English", "Español", "Français", "Hellenic", "Italiano", "Spanish Latino", "Magyar", "Nederlands", "Norsk", "Polski", "Português", "Slovak", "Soomali", "Suomi", "Svenska", "Türkçe", "Tieng Viet", NULL };
+ char *shortlangnames[] = { "bz", "cs", "da", "de", "en", "es", "fr", "el", "it", "la", "hu", "nl", "no", "pl", "pt", "sk", "so", "fi", "sv", "tr", "vi", NULL };
+ char **langtrs[] = { bz_tr, cs_tr, da_tr, de_tr, en_tr, es_tr, fr_tr, el_tr, it_tr, la_tr, hu_tr, nl_tr, no_tr, pl_tr, pt_tr, sk_tr, so_tr, fi_tr, sv_tr, tr_tr, vi_tr, NULL };
+#endif
+ char hdletter, cdletter;
+ char harddrive[5], cdromdrive[5]; /* Device holder. */
+ struct devparams hdparams, cdromparams; /* Params for CDROM and HD */
+ int cdmounted = 0; /* Loop flag for inserting a cd. */
+ int rc;
+ char commandstring[STRING_SIZE];
+ char *installtypes[] = { "CDROM/USB-KEY", "HTTP/FTP", NULL };
+ int installtype = CDROM_INSTALL;
+ char insertmessage[STRING_SIZE];
+ char insertdevnode[STRING_SIZE];
+ int choice;
+ char shortlangname[10];
+ char message[1000];
+ char title[STRING_SIZE];
+ int allok = 0;
+ int no_restore=0;
+ int unmount_before=0;
+ struct keyvalue *ethernetkv = initkeyvalues();
+ FILE *handle, *cmdfile;
+ char line[STRING_SIZE];
+ char string[STRING_SIZE];
+ int maximum_free = 0, current_free;
+ int memory = 0;
+ int log_partition, boot_partition, root_partition, swap_file;
+ int scsi_disk = 0;
+ int pcmcia_disk = 0;
+ int pcmcia_cdrom = 0;
+ int scsi_cdrom = 0;
+ int ide_cdrom = 0;
+ int fdisk = 0;
+ int usb_cdrom = 0;
+
+ setlocale (LC_ALL, "");
+ sethostname(SNAME, 10);
+
+ memset(&hdparams, 0, sizeof(struct devparams));
+ memset(&cdromparams, 0, sizeof(struct devparams));
+
+ /* Log file/terminal stuff. */
+ if (argc >= 2)
+ {
+ if (!(flog = fopen(argv[1], "w+")))
+ return 0;
+ }
+ else
+ return 0;
+
+ mylog = argv[1];
+
+ fprintf(flog, "Install program started.\n");
+
+ newtInit();
+ newtCls();
+
+ /* Do usb detection first for usb keyboard */
+ if (! (cmdfile = fopen("/proc/cmdline", "r")))
+ {
+ fprintf(flog, "Couldn't open commandline: /proc/cmdline\n");
+ } else {
+ fgets(line, STRING_SIZE, cmdfile);
+ if (strstr (line, "fdisk") != NULL) {
+ fprintf(flog, "Manual FDISK selected.\n");
+ fdisk = 1;
+ }
+ if (strstr (line, "nopcmcia") == NULL) {
+ fprintf(flog, "Initializing PCMCIA controllers.\n");
+ pcmcia = initialize_pcmcia();
+ if (pcmcia) {
+ fprintf (flog, "Detected PCMCIA Controller: %s.\n", pcmcia);
+ sprintf(commandstring, "/sbin/modprobe %s", pcmcia);
+ mysystem("/sbin/modprobe pcmcia_core");
+ mysystem(commandstring);
+ mysystem("/sbin/modprobe ds");
+ /* pcmcia netcard drivers are not available from Boot floppy,
+ * they will be loaded from Drivers floppy later */
+ } else {
+ fprintf (flog, "Detected No PCMCIA Controller.\n");
+ }
+ } else {
+ fprintf(flog, "Skipping PCMCIA detection.\n");
+ }
+ if (strstr (line, "nousb") == NULL) {
+ fprintf(flog, "Initializing USB controllers.\n");
+ initialize_usb();
+ } else {
+ fprintf(flog, "Skipping USB detection.\n");
+ }
+ }
+
+ /* English is the default */
+ for (choice = 0; langnames[choice]; choice++)
+ {
+ if (strcmp(langnames[choice], "English") == 0)
+ break;
+ }
+ if (!langnames[choice])
+ goto EXIT;
+
+#ifdef LANG_EN_ONLY
+ /* No need to ask. "choice" already has the index for English */
+#else
+ rc = newtWinMenu("Language selection",
+ "Select the language you wish to use for the " NAME ".", 50, 5, 5, 8,
+ langnames, &choice, "Ok", NULL);
+#endif
+ ctr = langtrs[choice];
+ strcpy(shortlangname, shortlangnames[choice]);
+ if (strcmp(shortlangname, "el") == 0)
+ mysystem("/bin/setfont iso07u-16");
+ else if (strcmp(shortlangname, "pt") == 0)
+ mysystem("/bin/setfont lat1-16");
+ else if (strcmp(shortlangname, "bz") == 0)
+ mysystem("/bin/setfont lat1-16");
+ else if (strcmp(shortlangname, "cs") == 0)
+ mysystem("/bin/setfont lat2-16");
+ else if (strcmp(shortlangname, "hu") == 0)
+ mysystem("/bin/setfont lat2-16");
+ else if (strcmp(shortlangname, "pl") == 0)
+ mysystem("/bin/setfont lat2-16");
+ else if (strcmp(shortlangname, "sk") == 0)
+ mysystem("/bin/setfont lat2-16");
+ else if (strcmp(shortlangname, "tr") == 0)
+ mysystem("/bin/setfont lat5-16");
+ else if (strcmp(shortlangname, "vi") == 0)
+ mysystem("/bin/setfont viscii10-8x16");
+ else
+ mysystem("/bin/setfont lat0-16");
+
+ /* need this for reading from formatted device */
+ modprobe("vfat");
+
+ newtDrawRootText(14, 0, NAME " v" VERSION " - " SLOGAN );
+ newtPushHelpLine(ctr[TR_HELPLINE]);
+
+ snprintf(message, STRING_SIZE, ctr[TR_WELCOME], NAME);
+ snprintf (title, STRING_SIZE, "%s v%s - %s", NAME, VERSION, SLOGAN);
+ newtWinMessage(title, ctr[TR_OK], message);
+
+ snprintf(message,STRING_SIZE, ctr[TR_SELECT_INSTALLATION_MEDIA_LONG], NAME);
+ rc = newtWinMenu(ctr[TR_SELECT_INSTALLATION_MEDIA], message,
+ 50, 5, 5, 6, installtypes, &installtype, ctr[TR_OK],
+ ctr[TR_CANCEL], NULL);
+
+ if (rc == 2)
+ goto EXIT;
+
+ if (installtype == CDROM_INSTALL) // CD or USB-key
+ {
+
+ /* try usb key in superfloppy format only */
+ if (checkusb("sda")) {
+ sprintf(cdromdrive, "sda");
+ usb_cdrom = 1;
+ goto FOUND_SOURCE;
+ }
+ if (checkusb("sdb")) {
+ sprintf(cdromdrive, "sdb");
+ usb_cdrom = 1;
+ goto FOUND_SOURCE;
+ }
+
+ /* look for an IDE CDROM. */
+ if ((cdletter = findidetype(IDE_CDROM)))
+ {
+ sprintf(cdromdrive, "hd%c", cdletter);
+ ide_cdrom = 1;
+ goto FOUND_SOURCE;
+ }
+
+ /* If we have a USB attached CDROM then it will
+ * have already appeared at /dev/scd0, so we
+ * try to access it first, before asking for the
+ * SCSI drivers disk.
+ */
+ if (try_scsi("scd0")) {
+ sprintf(cdromdrive, "scd0");
+ scsi_cdrom = 1;
+ goto FOUND_SOURCE;
+ }
+
+ /* ask for supplemental SCSI driver */
+ snprintf(insertmessage, STRING_SIZE, ctr[TR_INSERT_FLOPPY], NAME" SCSI");
+ if (newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], insertmessage) != 1)
+ {
+ errorbox(ctr[TR_INSTALLATION_CANCELED]);
+ goto EXIT;
+ }
+
+ /* extract new modules */
+ if (runcommandwithstatus("/bin/tar -C / -xvzf /dev/floppy", ctr[TR_EXTRACTING_MODULES]))
+ {
+ errorbox(ctr[TR_UNABLE_TO_EXTRACT_MODULES]);
+ goto EXIT;
+ }
+ /* and load PCMCIA */
+ if (pcmcia)
+ {
+ /* trying to support SCSI pcmcia :-) */
+ runcommandwithstatus("cardmgr -o -c /etc/pcmcia/scsi",
+ ctr[TR_LOADING_PCMCIA]);
+ if (try_scsi("scd0")) {
+ sprintf(cdromdrive, "scd0");
+ pcmcia_cdrom = 1;
+ goto FOUND_SOURCE;
+ }
+ }
+
+ /* try loading all SCSI modules with default options */
+ /* Should expand this to allow options later though */
+ runcommandwithstatus("/bin/probescsi.sh", ctr[TR_PROBING_SCSI]);
+
+ /* If it fails, give up. */
+ if (try_scsi("scd0")) {
+ sprintf(cdromdrive, "scd0");
+ scsi_cdrom = 1;
+ goto FOUND_SOURCE;
+ }
+
+ /* Unable to find a valid source, give up */
+ errorbox(ctr[TR_NO_CDROM]);
+ goto EXIT;
+
+ FOUND_SOURCE:
+ sprintf(cdromparams.devnode_disk, "/dev/%s", cdromdrive);
+// cdromparams.module = 0;
+
+ snprintf(insertmessage,STRING_SIZE ,ctr[TR_INSERT_CDROM], NAME);
+ strcpy (insertdevnode, cdromparams.devnode_disk);
+ }
+ else /* don't understand why this follows... */
+ {
+ /* If we've done a PXE boot, we can skip the Drivers floppy,
+ * as we've already got the modules in our instroot.gz */
+ if (!(handle = fopen("/CDROMBOOT", "r"))) {
+ snprintf(insertmessage, STRING_SIZE-12, ctr[TR_INSERT_FLOPPY], NAME);
+ strcpy (insertdevnode , "/dev/floppy");
+ } else {
+ fclose(handle);
+ cdmounted = 1;
+ unmount_before = 1;
+ }
+ }
+
+ /* Try to mount /cdrom with the device discovered */
+ if (scsi_cdrom || ide_cdrom || usb_cdrom) {
+ snprintf(commandstring, STRING_SIZE, "/bin/mount -o ro %s /cdrom", insertdevnode);
+ int skip_dialog = 1;
+ int sd_test = 0;
+ while (!cdmounted)
+ {
+ /* for usb-key, we have to try sda then sda1. The key cannot be unpluged */
+ if (sd_test == 1) { //change to sda1
+ sprintf(commandstring, "/bin/mount -o ro %s1 /cdrom", insertdevnode);
+ }
+ if (sd_test == 2) { //the key do not contains a vfat file system
+ errorbox(ctr[TR_USB_KEY_VFAT_ERR]);
+ goto EXIT;
+ }
+ if (usb_cdrom) sd_test++; // next USB test
+
+ if (!skip_dialog && !usb_cdrom) {
+ rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], insertmessage);
+ if (rc != 1)
+ {
+ errorbox(ctr[TR_INSTALLATION_CANCELED]);
+ goto EXIT;
+ }
+ }
+ skip_dialog = 0;
+ if (mysystem(commandstring))
+ continue; //mount failed, try again
+
+ /*verify it's what we want */
+ handle = fopen ("/cdrom/" SNAME "-" VERSION ".tgz", "r");
+ if (handle == NULL) {
+ mysystem ("/bin/umount /cdrom");
+ continue; /* bad disk ! */
+ }
+
+ fclose (handle);
+ cdmounted = 1;
+ /* If we've booted from CDROM, then
+ * we've already got the drivers,
+ * so we can skip this unpack. */
+ if ((handle = fopen("/CDROMBOOT", "r"))) {
+ fclose(handle);
+ break; /* ok we go everything */
+ }
+ /* unpack drivers */
+ if (runcommandwithprogress(60, 4, title,
+ "/bin/tar -C / -xvzf /cdrom/images/drivers-"VERSION".img",
+ 175, ctr[TR_EXTRACTING_MODULES]))
+ {
+ errorbox(ctr[TR_UNABLE_TO_EXTRACT_MODULES]);
+ goto EXIT;
+ }
+ }
+ } else { /* no cd device were discovered, ask second diskette */
+ sprintf(commandstring, "/bin/tar -C / -xvzf /dev/floppy");
+ while (!cdmounted)
+ {
+ rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], insertmessage);
+ if (rc != 1)
+ {
+ errorbox(ctr[TR_INSTALLATION_CANCELED]);
+ goto EXIT;
+ }
+ if (runcommandwithprogress(60, 4, title,
+ commandstring,
+ 175, ctr[TR_EXTRACTING_MODULES]))
+ {
+#if 0 /* disable this, so we allow for people putting in the wrong disk */
+ errorbox(ctr[TR_UNABLE_TO_EXTRACT_MODULES]);
+ goto EXIT;
+#endif
+ }
+ else
+ {
+ handle = fopen ("/bin/mke2fs", "r");
+ if (handle != NULL) {
+ fclose (handle);
+ cdmounted = 1;
+ }
+ }
+ }
+ }
+
+ /* PCMCIA controller is already detected
+ * On Boot floppy, we didn't have the PCMCIA drivers
+ * so load them now because they are installed from Drivers. */
+ if (!(handle = fopen("/CDROMBOOT", "r"))) {
+ if (strstr (line, "nopcmcia") == NULL) {
+ fprintf(flog,"Floppy boot detected, loading PCMCIA drivers.\n");
+ if (pcmcia) {
+ fprintf (flog, "Detected PCMCIA Controller: %s.\n", pcmcia);
+ sprintf(commandstring, "/sbin/modprobe %s", pcmcia);
+ mysystem("/sbin/modprobe pcmcia_core");
+ mysystem(commandstring);
+ mysystem("/sbin/modprobe ds");
+ } else {
+ fprintf (flog, "Detected No PCMCIA Controller.\n");
+ }
+ } else {
+ fprintf(flog, "Skipping PCMCIA detection.\n");
+ }
+ if (strstr (line, "nousb") == NULL) {
+ fprintf(flog, "Initializing USB controllers.\n");
+ initialize_usb();
+ } else {
+ fprintf(flog, "Skipping USB detection.\n");
+ }
+ } else
+ fclose(handle);
+
+ /* Configure the network now! */
+ if (installtype == URL_INSTALL)
+ {
+ /* Network driver and params. */
+ if (!(networkmenu(ethernetkv)))
+ {
+ errorbox(ctr[TR_NETWORK_SETUP_FAILED]);
+ goto EXIT;
+ }
+
+ /* Check for ipcop-<VERSION>.tgz */
+ if (!(checktarball(SNAME "-" VERSION ".tgz")))
+ {
+ errorbox(ctr[TR_NO_IPCOP_TARBALL_FOUND]);
+ goto EXIT;
+ }
+ }
+
+ /* Get device for the HD. This has to succeed. */
+ /* first try an IDE disk */
+ if ((hdletter = findidetype(IDE_HD)))
+ {
+ sprintf(harddrive, "hd%c", hdletter);
+ goto FOUND_DESTINATION;
+ }
+ /* unpack SCSI driver if not done during CD detection */
+ if (installtype == URL_INSTALL)
+ {
+ /* If we've done a PXE boot, we can skip the SCSI
+ * floppy as we've already got the modules in our
+ * instroot.gz */
+ if (!(handle = fopen("/CDROMBOOT", "r")))
+ {
+ /* search img where it is on a mounted loop iso */
+ if (!(checktarball("images/scsidrv-"VERSION".img")))
+ {
+ /* Couldn't find the SCSI drivers on the URL page,
+ * so after 3 failed attempts, ask the user for the
+ * SCSI drivers floppy disk. */
+ errorbox(ctr[TR_NO_SCSI_IMAGE_FOUND]);
+ snprintf(insertmessage, STRING_SIZE, ctr[TR_INSERT_FLOPPY], NAME" SCSI");
+ rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], insertmessage);
+ if (rc != 1)
+ {
+ errorbox(ctr[TR_INSTALLATION_CANCELED]);
+ goto EXIT;
+ }
+
+ if (runcommandwithstatus("/bin/tar -C / -xvzf /dev/floppy", ctr[TR_EXTRACTING_MODULES]))
+ {
+ errorbox(ctr[TR_UNABLE_TO_EXTRACT_MODULES]);
+ goto EXIT;
+ }
+ } else {
+ /* unpack... THIS DO NOT WORK BECAUSE var "string" is empty*/
+ snprintf(commandstring, STRING_SIZE,
+ "/bin/wget -O - %s/%s | /bin/tar -C / -xvzf -",
+ url, string);
+ if (runcommandwithprogress(60, 4, title, commandstring,
+ 4500, ctr[TR_INSTALLING_FILES]))
+ {
+ errorbox(ctr[TR_UNABLE_TO_INSTALL_FILES]);
+ goto EXIT;
+ }
+ }
+ } else
+ fclose(handle);
+ } else { /* cdrom/usb install, install SCSI id not done */
+ if (ide_cdrom) {
+ if (runcommandwithstatus("/bin/tar -C / -xvzf /cdrom/images/scsidrv-"VERSION".img", ctr[TR_EXTRACTING_MODULES]))
+ {
+ errorbox(ctr[TR_UNABLE_TO_EXTRACT_MODULES]);
+ goto EXIT;
+ }
+ }
+ }
+
+ /* load SCSI/pcmcia drivers if not done during CD detection */
+ if (!scsi_cdrom) {
+#if 0 /* not yet */
+ if (pcmcia)
+ {
+ /* trying to support SCSI pcmcia :-) */
+ runcommandwithstatus("cardmgr -o -c /etc/pcmcia/scsi",
+ ctr[TR_LOADING_PCMCIA]);
+ if (try_scsi(usb_cdrom ? "sdb":"sda")) {
+ scsi_disk = 1;
+ pcmcia_disk = 1;
+ }
+ if (checkusb("sdb") && try_scsi("sdc")) {
+ scsi_disk = 1;
+ pcmcia_disk = 1;
+ }
+ }
+#endif
+ /* try loading all SCSI modules with default options */
+ /* Should expand this to allow options later though */
+ if (!pcmcia_disk)
+ runcommandwithstatus("/bin/probescsi.sh",
+ ctr[TR_PROBING_SCSI]);
+ }
+ /* Now try to find destination device...
+ Need to clean this up at some point
+ scsi disk is sdb/sdc when sda/sdb is used for usb-key
+ if scsi-disk is is sdd or more, it is not discovered
+ */
+ if (try_scsi(usb_cdrom ? "sdb":"sda")) {
+ scsi_disk = 1;
+ sprintf(harddrive, usb_cdrom ? "sdb":"sda");
+ goto FOUND_DESTINATION;
+ }
+ if (checkusb("sdb") && try_scsi("sdc")) {
+ scsi_disk = 1;
+ sprintf(harddrive, "sdc");
+ goto FOUND_DESTINATION;
+ }
+ if (try_scsi("ida/c0d0")) {
+ raid_disk = 1;
+ sprintf(harddrive, "ida/c0d0");
+ goto FOUND_DESTINATION;
+ }
+ if (try_scsi("cciss/c0d0")) {
+ raid_disk = 1;
+ sprintf(harddrive, "cciss/c0d0");
+ goto FOUND_DESTINATION;
+ }
+ if (try_scsi("rd/c0d0")) {
+ raid_disk = 1;
+ sprintf(harddrive, "rd/c0d0");
+ goto FOUND_DESTINATION;
+ }
+ if (try_scsi("ataraid/d0")) {
+ raid_disk = 1;
+ sprintf(harddrive, "ataraid/d0");
+ goto FOUND_DESTINATION;
+ }
+ /* nothing worked, give up */
+ errorbox(ctr[TR_NO_HARDDISK]);
+ goto EXIT;
+
+ FOUND_DESTINATION:
+ /* Make the hdparms struct and print the contents.
+ With USB-KEY install and SCSI disk, while installing, the disk
+ is named 'sdb,sdc,...' (following keys)
+ On reboot, it will become 'sda'
+ To avoid many test, all names are built in the struct.
+ */
+ sprintf(hdparams.devnode_disk, "/dev/%s", harddrive);
+ /* Address the partition or raid partition (eg dev/sda or /dev/sdap1 */
+ sprintf(hdparams.devnode_part, "/dev/%s%s", harddrive,raid_disk ? "p" : "");
+ /* now the names after the machine is booted. Today only scsi is affected
+ and we only install on the first scsi disk.
+ */
+ { char tmp[30];
+ strcpy(tmp, scsi_disk ? "sda" : harddrive);
+ sprintf(hdparams.devnode_disk_run, "/dev/%s", tmp);
+ sprintf(hdparams.devnode_part_run, "/dev/%s%s", tmp, raid_disk ? "p" : "");
+ }
+
+ rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL],
+ ctr[TR_PREPARE_HARDDISK], hdparams.devnode_disk_run);
+ if (rc != 1)
+ goto EXIT;
+
+ /* Calculate amount of memory in machine */
+ if ((handle = fopen("/proc/meminfo", "r")))
+ {
+ while (fgets(line, STRING_SIZE-1, handle)) {
+ if (sscanf (line, "MemTotal: %s kB", string)) {
+ memory = atoi(string) / 1024 ;
+ }
+ }
+ fclose(handle);
+ }
+
+ /* Partition, mkswp, mkfs.
+ * before partitioning, first determine the sizes of each
+ * partition. In order to do that we need to know the size of
+ * the disk.
+ */
+ /* Don't use mysystem here so we can redirect output */
+ sprintf(commandstring, "/bin/sfdisk -s /dev/%s > /disksize 2> /dev/null", harddrive);
+ system(commandstring);
+
+ /* Calculate amount of disk space */
+ if ((handle = fopen("/disksize", "r")))
+ {
+ fgets(line, STRING_SIZE-1, handle);
+ if (sscanf (line, "%s", string)) {
+ maximum_free = atoi(string) / 1024;
+ }
+ fclose(handle);
+ }
+
+ fprintf(flog, "maximum_free = %d, memory = %d", maximum_free, memory);
+
+ /* If you need more than this, you should really add physical memory */
+ /* Minimum: 192 = 64 real + 128 swap */
+ swap_file = memory < 64 ? 2 * memory : 192 - memory ;
+ swap_file = swap_file < 32 ? 32 : swap_file ;
+
+ if (maximum_free < 135 + swap_file )
+ {
+ if (maximum_free < 135) {
+ errorbox(ctr[TR_DISK_TOO_SMALL]);
+ goto EXIT;
+ }
+
+ rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], ctr[TR_CONTINUE_NO_SWAP]);
+ if (rc != 1)
+ goto EXIT;
+ swap_file = 0;
+ }
+
+ boot_partition = 8; /* in MB */
+ current_free = maximum_free - boot_partition - swap_file;
+
+ /* Give more place for add-on, extend root to 25% of current_free, upper limit to 8 gigas */
+ root_partition = current_free / 4 ;
+ root_partition = root_partition > 8192 ? 8192 : root_partition ;
+ root_partition = current_free < 860 ? 235 : root_partition;
+ root_partition = current_free < 380 ? 110 : root_partition;
+
+ current_free = current_free - root_partition;
+ root_partition = root_partition + swap_file;
+
+ log_partition = current_free;
+
+ fprintf(flog, "boot = %d, swap = %d, mylog = %d, root = %d\n",
+ boot_partition, swap_file, log_partition, root_partition);
+
+#ifdef __alpha__
+ fdisk = 1;
+#endif
+
+ if (fdisk) {
+ rc = newtWinChoice(title, ctr[TR_OK], ctr[TR_CANCEL], "NOW FDISK");
+ if (rc != 1)
+ goto EXIT;
+ } else {
+#ifdef __i386__
+ handle = fopen("/tmp/partitiontable", "w");
+
+ fprintf(handle, ",%d,83,*\n,%d,83,\n,0,0,\n,,83,\n",
+ boot_partition, log_partition);
+
+ fclose(handle);
+
+ sprintf(commandstring, "/bin/sfdisk -uM %s < /tmp/partitiontable", hdparams.devnode_disk);
+ if (runcommandwithstatus(commandstring, ctr[TR_PARTITIONING_DISK]))
+ {
+ errorbox(ctr[TR_UNABLE_TO_PARTITION]);
+ goto EXIT;
+ }
+#endif
+ }
+ /* create filesystem boot partition 1 */
+ sprintf(commandstring, "/bin/mke2fs -m 0 -j %s1", hdparams.devnode_part);
+ if (runcommandwithstatus(commandstring, ctr[TR_MAKING_BOOT_FILESYSTEM]))
+ {
+ errorbox(ctr[TR_UNABLE_TO_MAKE_BOOT_FILESYSTEM]);
+ goto EXIT;
+ }
+
+ /* create filesystem log partition 2 */
+ sprintf(commandstring, "/bin/mke2fs -j %s2", hdparams.devnode_part);
+ if (runcommandwithstatus(commandstring, ctr[TR_MAKING_LOG_FILESYSTEM]))
+ {
+ errorbox(ctr[TR_UNABLE_TO_MAKE_LOG_FILESYSTEM]);
+ goto EXIT;
+ }
+
+ /* create filesystem root partition 4 */
+ sprintf(commandstring, "/bin/mke2fs -m 1 -j %s4", hdparams.devnode_part);
+ if (runcommandwithstatus(commandstring, ctr[TR_MAKING_ROOT_FILESYSTEM]))
+ {
+ errorbox(ctr[TR_UNABLE_TO_MAKE_ROOT_FILESYSTEM]);
+ goto EXIT;
+ }
+
+ /* Mount root on partition 4 */
+ sprintf(commandstring, "/sbin/mount -t ext2 %s4 /harddisk", hdparams.devnode_part);
+ if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_ROOT_FILESYSTEM]))
+ {
+ errorbox(ctr[TR_UNABLE_TO_MOUNT_ROOT_FILESYSTEM]);
+ goto EXIT;
+ }
+ mkdir("/harddisk/boot", S_IRWXU|S_IRWXG|S_IRWXO);
+ mkdir("/harddisk/var", S_IRWXU|S_IRWXG|S_IRWXO);
+ mkdir("/harddisk/var/log", S_IRWXU|S_IRWXG|S_IRWXO);
+
+ /* Make,mount swapfile */
+ if (swap_file) {
+ sprintf(commandstring, "/bin/dd if=/dev/zero of=/harddisk/swapfile bs=1024k count=%d", swap_file);
+ if (runcommandwithstatus(commandstring, ctr[TR_MAKING_SWAPSPACE]))
+ {
+ errorbox(ctr[TR_UNABLE_TO_MAKE_SWAPSPACE]);
+ goto EXIT;
+ }
+ if (runcommandwithstatus("/bin/mkswap /harddisk/swapfile", ctr[TR_MAKING_SWAPSPACE]))
+ {
+ errorbox(ctr[TR_UNABLE_TO_MAKE_SWAPSPACE]);
+ goto EXIT;
+ }
+ if (runcommandwithstatus("/bin/swapon /harddisk/swapfile", ctr[TR_MOUNTING_SWAP_PARTITION]))
+ {
+ errorbox(ctr[TR_UNABLE_TO_MOUNT_SWAP_PARTITION]);
+ goto EXIT;
+ }
+ }
+
+ /* Mount boot on partition 1 */
+ sprintf(commandstring, "/sbin/mount -t ext2 %s1 /harddisk/boot", hdparams.devnode_part);
+ if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_BOOT_FILESYSTEM]))
+ {
+ errorbox(ctr[TR_UNABLE_TO_MOUNT_BOOT_FILESYSTEM]);
+ goto EXIT;
+ }
+
+ /* Mount log on partition 2 */
+ sprintf(commandstring, "/sbin/mount -t ext2 %s2 /harddisk/var/log", hdparams.devnode_part);
+ if (runcommandwithstatus(commandstring, ctr[TR_MOUNTING_LOG_FILESYSTEM]))
+ {
+ errorbox(ctr[TR_UNABLE_TO_MOUNT_LOG_FILESYSTEM]);
+ goto EXIT;
+ }
+
+ /* Either use tarball from cdrom or download. */
+ if (installtype == CDROM_INSTALL)
+ snprintf(commandstring, STRING_SIZE,
+ "/bin/tar -C /harddisk -xvzf /cdrom/" SNAME "-" VERSION ".tgz");
+ else
+ snprintf(commandstring, STRING_SIZE,
+ "/bin/wget -O - %s/" SNAME "-" VERSION ".tgz | /bin/tar -C /harddisk -xvzf -", url);
+
+ if (runcommandwithprogress(60, 4, title, commandstring, 4600,
+ ctr[TR_INSTALLING_FILES]))
+ {
+ errorbox(ctr[TR_UNABLE_TO_INSTALL_FILES]);
+ goto EXIT;
+ }
+
+ /* Save USB controller type to modules.conf */
+ write_usb_modules_conf();
+
+ /* touch the modules.dep files */
+ mysystem("/bin/chroot /harddisk /bin/touch /lib/modules/"KERNEL_VERSION"/modules.dep");
+#ifdef __i386__
+ mysystem("/bin/chroot /harddisk /bin/touch /lib/modules/"KERNEL_VERSION"-smp/modules.dep");
+#endif
+
+ /* Rename uname */
+ rename ("/harddisk/bin/uname.bak", "/harddisk/bin/uname");
+
+ /* Write PCMCIA Config */
+ if (pcmcia) {
+ handle = fopen("/harddisk/etc/modules.conf", "a");
+ if (handle != NULL) {
+ fprintf (handle, "# PCMCIA Settings\n");
+ fprintf (handle, "alias pcmcia-controller %s\n", pcmcia);
+ fclose(handle);
+ }
+ }
+
+ handle = fopen("/harddisk/etc/pcmcia.conf", "w");
+ if (handle != NULL) {
+ if (pcmcia) {
+ fprintf (handle, "PCMCIA=yes\n");
+ fprintf (handle, "PCIC=%s\n", pcmcia);
+ } else {
+ fprintf (handle, "PCMCIA=no\n");
+ fprintf (handle, "PCIC=\n");
+ }
+ fprintf (handle, "CARDMGR_OPTS=\n");
+ fprintf (handle, "SCHEME=\n");
+ fclose(handle);
+ }
+
+ /* *always* write disk configuration */
+ if (!(write_disk_configs(&hdparams))){
+ errorbox(ctr[TR_ERROR_WRITING_CONFIG]);
+ goto EXIT;
+ }
+
+ /*
+ Allow the user to restore their configuration from a floppy.
+ It uses tar. If the tar fails for any reason, show user an
+ error and go back to the restore/skip question. This gives
+ the user the chance to have another go. */
+
+ /* Program is outside install to save space on floppy
+ */
+ fprintf(flog, "Passing control to install2.\n");
+ fflush(flog);
+ //newtSuspend();
+ /* pass needed parameter for install 2 by position
+ choice: index of langage selected
+ devnode_disk: to prevent unmounting of it
+ url: if network, allow restaure from it
+ */
+ sprintf(commandstring, "/harddisk/usr/local/bin/install2 %d %s %s",
+ choice,
+ strlen(cdromparams.devnode_disk ) ? cdromparams.devnode_disk : "none",
+ strlen(url) ? url : "none"
+ );
+ no_restore = system(commandstring);
+ //newtResume();
+
+ /* if we installed from CD ROM then we didn't set up the
+ network interface yet. Therefore, set up Network
+ driver and params just before we need them.
+ */
+ if (no_restore && (installtype == CDROM_INSTALL)) {
+ if (!(networkmenu(ethernetkv))){
+ errorbox(ctr[TR_NETWORK_SETUP_FAILED]);
+ goto EXIT;
+ }
+ }
+
+ /* Build cache lang file */
+ mysystem("/bin/chroot /harddisk /usr/bin/perl -e \"require '" CONFIG_ROOT "/lang.pl'; &Lang::BuildCacheLang\"");
+
+ /* write ethernet and lang configs only if they have not
+ been restored from floppy already. */
+ if (no_restore) {
+ if (!write_ethernet_configs(ethernetkv)||
+ !write_lang_configs(shortlangname)) {
+ errorbox(ctr[TR_ERROR_WRITING_CONFIG]);
+ goto EXIT;
+ }
+ }
+
+
+#if 0 /* not yet */
+ if (pcmcia_disk)
+ {
+ fprintf(flog, "Detected SCSI driver PCMCIA\n");
+ fprintf(flog, "Fixing up ipcoprd.img\n");
+ mysystem("/bin/chroot /harddisk /sbin/modprobe loop");
+ mkdir("/harddisk/initrd", S_IRWXU|S_IRWXG|S_IRWXO);
+ mysystem("/bin/chroot /harddisk /sbin/pcinitrd -r "KERNEL_VERSION" /boot/ipcoprd.img");
+#ifdef __i386__
+ mysystem("/bin/chroot /harddisk /bin/mv /boot/grub/scsigrub.conf /boot/grub/grub.conf");
+#endif
+#ifdef __alpha__
+ mysystem("/bin/chroot /harddisk /bin/mv /boot/etc/scsiaboot.conf /boot/etc/aboot.conf");
+#endif
+ }
+#endif
+
+#ifdef __i386__
+ // to verify: with USB-key grubbatch install on sdb and boot sda....
+ replace( "/harddisk/boot/grub/grubbatch", "DEVICE", hdparams.devnode_disk);
+ /* restore permissions */
+ chmod("/harddisk/boot/grub/grubbatch", S_IXUSR | S_IRUSR | S_IXGRP | S_IRGRP | S_IXOTH | S_IROTH);
+
+ sprintf(string, "root=%s4", hdparams.devnode_part_run);
+ replace( "/harddisk/boot/grub/grub.conf", "root=ROOT", string);
+
+ mysystem("/bin/chroot /harddisk /bin/mount -n -t proc none /proc");
+
+ if (runcommandwithstatus("/bin/chroot /harddisk /boot/grub/grubbatch", ctr[TR_INSTALLING_GRUB]))
+ {
+ errorbox(ctr[TR_UNABLE_TO_INSTALL_GRUB]);
+ goto EXIT;
+ }
+ mysystem("/bin/chroot /harddisk /bin/umount -n /proc");
+#endif
+#ifdef __alpha__
+ sprintf(commandstring, "/bin/chroot /harddisk /sbin/swriteboot -f3 %s /boot/bootlx", hdparams.devnode_disk);
+ mysystem(commandstring);
+ sprintf(commandstring, "/bin/chroot /harddisk /sbin/abootconf %s 1", hdparams.devnode_disk_run);
+ mysystem(commandstring);
+ sprintf(string, "root=%s4", hdparams.devnode_part_run);
+ replace( "/harddisk/boot/etc/aboot.conf", "root=ROOT", string);
+#endif
+
+ /* unmounting happens everywhere because there are places
+ which require device is to be unmounted under certain
+ circumstances. This is the last place we can unmount
+ anything and still succeed.
+ */
+
+ if (!unmount_before && !usb_cdrom && installtype == CDROM_INSTALL){
+ if (mysystem("/sbin/umount /cdrom"))
+ {
+ errorbox(ctr[TR_UNABLE_TO_UNMOUNT_CDROM]);
+ goto EXIT;
+ }
+ }
+
+ if ((installtype == CDROM_INSTALL) && !usb_cdrom)
+ {
+ if (!(ejectcdrom(cdromparams.devnode_disk)))
+ {
+ errorbox(ctr[TR_UNABLE_TO_EJECT_CDROM]);
+ // goto EXIT;
+ }
+ }
+
+ snprintf(message, STRING_SIZE, ctr[TR_CONGRATULATIONS_LONG],
+ NAME, SNAME, SNAME, NAME, NAME, NAME);
+ newtWinMessage(ctr[TR_CONGRATULATIONS], ctr[TR_OK], message);
+
+ allok = 1;
+
+EXIT:
+ fprintf(flog, "Install program ended.\n");
+ fflush(flog);
+ fclose(flog);
+
+ if (!allok)
+ newtWinMessage(title, ctr[TR_OK], ctr[TR_PRESS_OK_TO_REBOOT]);
+
+ newtFinished();
+
+ freekeyvalues(ethernetkv);
+ //no more needed
+ mysystem("/bin/chroot /harddisk /bin/rm /usr/local/bin/install2");
+
+ /* run setup only if config not restored from floppy already. */
+ if (allok && no_restore)
+ {
+ /* /proc is needed by the module checker. We have to mount it
+ * so it can be seen by setup, which is run chrooted. */
+ if (system("/sbin/mount proc -t proc /harddisk/proc"))
+ printf("Unable to mount proc in /harddisk.");
+ else
+ {
+ if (system("/bin/chroot /harddisk /usr/local/sbin/setup /dev/tty2 INSTALL"))
+ printf("Unable to run setup.\n");
+ if (system("/sbin/umount /harddisk/proc"))
+ printf("Unable to umount /harddisk/proc.\n");
+ }
+ }
+
+ fcloseall();
+
+ system("/bin/swapoff /harddisk/swapfile");
+ system("/sbin/umount /harddisk/var/log");
+ system("/sbin/umount /harddisk/boot");
+ system("/sbin/umount /harddisk");
+ system("/etc/halt");
+
+ return 0;
+}
+
+int modprobe (char *mod) {
+ char commandstring[STRING_SIZE];
+ sprintf (commandstring,"/sbin/modprobe %s", mod);
+ return mysystem (commandstring);
+}
+
+int rmmod (char *mod) {
+ char commandstring[STRING_SIZE];
+ sprintf (commandstring,"/sbin/rmmod %s", mod);
+ return mysystem (commandstring);
+}
-/* SmoothWall install program.\r
- *\r
- * This program is distributed under the terms of the GNU General Public\r
- * Licence. See the file COPYING for details.\r
- *\r
- * (c) Lawrence Manning, 2001\r
- * Stuff for downloading the smoothwall tarball using wget.\r
- * \r
- * $Id: net.c,v 1.8.2.2 2004/04/14 22:05:40 gespinasse Exp $\r
- * \r
- */\r
- \r
-#include "install.h"\r
-\r
-extern FILE *flog;\r
-extern char *mylog;\r
-\r
-extern char **ctr;\r
-\r
-static int got_url = 0;\r
-\r
-char url[STRING_SIZE];\r
-\r
-static int gettarballurl();\r
-\r
-int checktarball(char *file)\r
-{\r
- int done;\r
- int tries = 0;\r
- char commandstring[STRING_SIZE];\r
-\r
- done = 0;\r
- while (!done)\r
- {\r
- if (!got_url && gettarballurl() != 1)\r
- return 0;\r
-\r
- /* remove any successive /'s */\r
- while (url[strlen(url)-1] == '/') { url[strlen(url)-1] = '\0'; }\r
-\r
- snprintf(commandstring, STRING_SIZE, "/bin/wget -s -O /dev/null %s/%s", url, file);\r
- if (!(runcommandwithstatus(commandstring, ctr[TR_CHECKING])))\r
- {\r
- done = 1;\r
- got_url = 1;\r
- } \r
- else \r
- {\r
- errorbox(ctr[TR_FAILED_TO_FIND]);\r
- got_url = 0;\r
- if (tries == 3)\r
- return 0;\r
- }\r
- tries++;\r
- }\r
-\r
- return 1;\r
-}\r
-\r
-static int gettarballurl()\r
-{\r
- char *values[] = { NULL, NULL }; /* pointers for the values. */\r
- struct newtWinEntry entries[] =\r
- { { "", &values[0], 0,}, { NULL, NULL, 0 } };\r
- char title[STRING_SIZE];\r
- char message[1000];\r
- int rc;\r
-\r
- sprintf(message, ctr[TR_ENTER_URL]);\r
- sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN);\r
- rc = newtWinEntries(title, message,\r
- 60, 5, 5, 50, entries, ctr[TR_OK], ctr[TR_CANCEL], NULL);\r
- \r
- strncpy(url, values[0], STRING_SIZE);\r
-\r
- return rc;\r
-}\r
+/* SmoothWall install program.
+ *
+ * This program is distributed under the terms of the GNU General Public
+ * Licence. See the file COPYING for details.
+ *
+ * (c) Lawrence Manning, 2001
+ * Stuff for downloading the smoothwall tarball using wget.
+ *
+ * $Id: net.c,v 1.8.2.2 2004/04/14 22:05:40 gespinasse Exp $
+ *
+ */
+
+#include "install.h"
+
+extern FILE *flog;
+extern char *mylog;
+
+extern char **ctr;
+
+static int got_url = 0;
+
+char url[STRING_SIZE];
+
+static int gettarballurl();
+
+int checktarball(char *file)
+{
+ int done;
+ int tries = 0;
+ char commandstring[STRING_SIZE];
+
+ done = 0;
+ while (!done)
+ {
+ if (!got_url && gettarballurl() != 1)
+ return 0;
+
+ /* remove any successive /'s */
+ while (url[strlen(url)-1] == '/') { url[strlen(url)-1] = '\0'; }
+
+ snprintf(commandstring, STRING_SIZE, "/bin/wget -s -O /dev/null %s/%s", url, file);
+ if (!(runcommandwithstatus(commandstring, ctr[TR_CHECKING])))
+ {
+ done = 1;
+ got_url = 1;
+ }
+ else
+ {
+ errorbox(ctr[TR_FAILED_TO_FIND]);
+ got_url = 0;
+ if (tries == 3)
+ return 0;
+ }
+ tries++;
+ }
+
+ return 1;
+}
+
+static int gettarballurl()
+{
+ char *values[] = { NULL, NULL }; /* pointers for the values. */
+ struct newtWinEntry entries[] =
+ { { "", &values[0], 0,}, { NULL, NULL, 0 } };
+ char title[STRING_SIZE];
+ char message[1000];
+ int rc;
+
+ sprintf(message, ctr[TR_ENTER_URL]);
+ sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN);
+ rc = newtWinEntries(title, message,
+ 60, 5, 5, 50, entries, ctr[TR_OK], ctr[TR_CANCEL], NULL);
+
+ strncpy(url, values[0], STRING_SIZE);
+
+ return rc;
+}
-/* SmoothWall install program.\r
- *\r
- * This program is distributed under the terms of the GNU General Public\r
- * Licence. See the file COPYING for details.\r
- *\r
- * (c) Lawrence Manning, 2001\r
- * Contains stuff related to firing up the network card, including a crude\r
- * autodector.\r
- * \r
- * $Id: nic.c,v 1.8.2.2 2005/12/24 09:08:26 franck78 Exp $\r
- * \r
- */\r
-\r
-#include "install.h"\r
-\r
-#include <sys/socket.h>\r
-#include <netinet/in.h>\r
-#include <arpa/inet.h>\r
-\r
-extern FILE *flog;\r
-extern char *mylog;\r
-extern char **ctr;\r
-extern struct nic nics[];\r
-\r
-int networkmenu(struct keyvalue *ethernetkv)\r
-{\r
- int rc;\r
- char driver[STRING_SIZE] = "";\r
- char driveroptions[STRING_SIZE] = "";\r
- int result = 0;\r
- char commandstring[STRING_SIZE];\r
- char address[STRING_SIZE], netmask[STRING_SIZE];\r
- int done;\r
- char description[1000];\r
- char message[1000];\r
- char title[STRING_SIZE];\r
- done = 0;\r
-\r
- while (!done)\r
- {\r
- rc = newtWinTernary(ctr[TR_CONFIGURE_NETWORKING], ctr[TR_PROBE], \r
- ctr[TR_SELECT], ctr[TR_CANCEL], ctr[TR_CONFIGURE_NETWORKING_LONG]);\r
- \r
- if (rc == 0 || rc == 1)\r
- {\r
- probecards(driver, driveroptions);\r
- if (!strlen(driver))\r
- errorbox(ctr[TR_PROBE_FAILED]);\r
- else\r
- {\r
- findnicdescription(driver, description);\r
- sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN);\r
- sprintf(message, ctr[TR_FOUND_NIC], NAME, description);\r
- newtWinMessage(title, ctr[TR_OK], message);\r
- } \r
- } \r
- else if (rc == 2)\r
- choosecards(driver, driveroptions);\r
- else\r
- done = 1; \r
- \r
- if (strlen(driver))\r
- done = 1;\r
- }\r
- \r
- if (!strlen(driver))\r
- goto EXIT;\r
-\r
- /* Default is a GREEN nic only. */\r
- /* Smoothie is not untarred yet, so we have to delay actually writing the\r
- * settings till later. */\r
- replacekeyvalue(ethernetkv, "CONFIG_TYPE", "0");\r
- replacekeyvalue(ethernetkv, "GREEN_DRIVER", driver);\r
- replacekeyvalue(ethernetkv, "GREEN_DRIVER_OPTIONS", driveroptions);\r
- replacekeyvalue(ethernetkv, "GREEN_DEV", "eth0");\r
- replacekeyvalue(ethernetkv, "GREEN_DISPLAYDRIVER", driver);\r
- \r
- if (!(changeaddress(ethernetkv, "GREEN", 0, "")))\r
- goto EXIT;\r
- \r
- strcpy(address, ""); findkey(ethernetkv, "GREEN_ADDRESS", address);\r
- strcpy(netmask, ""); findkey(ethernetkv, "GREEN_NETMASK", netmask);\r
-\r
- snprintf(commandstring, STRING_SIZE, "/bin/ifconfig eth0 %s netmask %s up", \r
- address, netmask);\r
- if (mysystem(commandstring))\r
- {\r
- errorbox(ctr[TR_INTERFACE_FAILED_TO_COME_UP]);\r
- goto EXIT;\r
- }\r
-\r
- result = 1;\r
- \r
-EXIT:\r
- \r
- return result;\r
-}\r
-\r
+/* SmoothWall install program.
+ *
+ * This program is distributed under the terms of the GNU General Public
+ * Licence. See the file COPYING for details.
+ *
+ * (c) Lawrence Manning, 2001
+ * Contains stuff related to firing up the network card, including a crude
+ * autodector.
+ *
+ * $Id: nic.c,v 1.8.2.2 2005/12/24 09:08:26 franck78 Exp $
+ *
+ */
+
+#include "install.h"
+
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+extern FILE *flog;
+extern char *mylog;
+extern char **ctr;
+extern struct nic nics[];
+
+int networkmenu(struct keyvalue *ethernetkv)
+{
+ int rc;
+ char driver[STRING_SIZE] = "";
+ char driveroptions[STRING_SIZE] = "";
+ int result = 0;
+ char commandstring[STRING_SIZE];
+ char address[STRING_SIZE], netmask[STRING_SIZE];
+ int done;
+ char description[1000];
+ char message[1000];
+ char title[STRING_SIZE];
+ done = 0;
+
+ while (!done)
+ {
+ rc = newtWinTernary(ctr[TR_CONFIGURE_NETWORKING], ctr[TR_PROBE],
+ ctr[TR_SELECT], ctr[TR_CANCEL], ctr[TR_CONFIGURE_NETWORKING_LONG]);
+
+ if (rc == 0 || rc == 1)
+ {
+ probecards(driver, driveroptions);
+ if (!strlen(driver))
+ errorbox(ctr[TR_PROBE_FAILED]);
+ else
+ {
+ findnicdescription(driver, description);
+ sprintf (title, "%s v%s - %s", NAME, VERSION, SLOGAN);
+ sprintf(message, ctr[TR_FOUND_NIC], NAME, description);
+ newtWinMessage(title, ctr[TR_OK], message);
+ }
+ }
+ else if (rc == 2)
+ choosecards(driver, driveroptions);
+ else
+ done = 1;
+
+ if (strlen(driver))
+ done = 1;
+ }
+
+ if (!strlen(driver))
+ goto EXIT;
+
+ /* Default is a GREEN nic only. */
+ /* Smoothie is not untarred yet, so we have to delay actually writing the
+ * settings till later. */
+ replacekeyvalue(ethernetkv, "CONFIG_TYPE", "0");
+ replacekeyvalue(ethernetkv, "GREEN_DRIVER", driver);
+ replacekeyvalue(ethernetkv, "GREEN_DRIVER_OPTIONS", driveroptions);
+ replacekeyvalue(ethernetkv, "GREEN_DEV", "eth0");
+ replacekeyvalue(ethernetkv, "GREEN_DISPLAYDRIVER", driver);
+
+ if (!(changeaddress(ethernetkv, "GREEN", 0, "")))
+ goto EXIT;
+
+ strcpy(address, ""); findkey(ethernetkv, "GREEN_ADDRESS", address);
+ strcpy(netmask, ""); findkey(ethernetkv, "GREEN_NETMASK", netmask);
+
+ snprintf(commandstring, STRING_SIZE, "/bin/ifconfig eth0 %s netmask %s up",
+ address, netmask);
+ if (mysystem(commandstring))
+ {
+ errorbox(ctr[TR_INTERFACE_FAILED_TO_COME_UP]);
+ goto EXIT;
+ }
+
+ result = 1;
+
+EXIT:
+
+ return result;
+}
+
-/*\r
- * PCMCIA bridge device probe\r
- *\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
- * The initial developer of the original code is David A. Hinds\r
- * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds\r
- * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.\r
- *\r
- * $Id: pcmcia.c,v 1.6.2.4 2005/12/08 02:12:28 franck78 Exp $\r
- *\r
- */\r
-\r
-#include "install.h"\r
-#include "pcmcia.h"\r
-\r
-#ifdef __GLIBC__\r
-#include <sys/io.h>\r
-#else\r
-#include <asm/io.h>\r
-#endif\r
-\r
-extern FILE *flog;\r
-extern int modprobe(char *);\r
-\r
-/*====================================================================*/\r
-\r
-typedef struct {\r
- u_short vendor, device;\r
- char *modname;\r
- char *name;\r
-} pci_id_t;\r
-\r
-pci_id_t pci_id[] = {\r
- { 0x1013, 0x1100, "i82365", "Cirrus Logic CL 6729" },\r
- { 0x1013, 0x1110, "yenta_socket", "Cirrus Logic PD 6832" },\r
- { 0x10b3, 0xb106, "yenta_socket", "SMC 34C90" },\r
- { 0x1180, 0x0465, "yenta_socket", "Ricoh RL5C465" },\r
- { 0x1180, 0x0466, "yenta_socket", "Ricoh RL5C466" },\r
- { 0x1180, 0x0475, "yenta_socket", "Ricoh RL5C475" },\r
- { 0x1180, 0x0476, "yenta_socket", "Ricoh RL5C476" },\r
- { 0x1180, 0x0477, "yenta_socket", "Ricoh RL5C477" },\r
- { 0x1180, 0x0478, "yenta_socket", "Ricoh RL5C478" },\r
- { 0x104c, 0xac12, "yenta_socket", "Texas Instruments PCI1130" }, \r
- { 0x104c, 0xac13, "yenta_socket", "Texas Instruments PCI1031" }, \r
- { 0x104c, 0xac15, "yenta_socket", "Texas Instruments PCI1131" }, \r
- { 0x104c, 0xac1a, "yenta_socket", "Texas Instruments PCI1210" }, \r
- { 0x104c, 0xac1e, "yenta_socket", "Texas Instruments PCI1211" }, \r
- { 0x104c, 0xac17, "yenta_socket", "Texas Instruments PCI1220" }, \r
- { 0x104c, 0xac19, "yenta_socket", "Texas Instruments PCI1221" }, \r
- { 0x104c, 0xac1c, "yenta_socket", "Texas Instruments PCI1225" }, \r
- { 0x104c, 0xac16, "yenta_socket", "Texas Instruments PCI1250" }, \r
- { 0x104c, 0xac1d, "yenta_socket", "Texas Instruments PCI1251A" }, \r
- { 0x104c, 0xac1f, "yenta_socket", "Texas Instruments PCI1251B" }, \r
- { 0x104c, 0xac50, "yenta_socket", "Texas Instruments PCI1410" }, \r
- { 0x104c, 0xac51, "yenta_socket", "Texas Instruments PCI1420" }, \r
- { 0x104c, 0xac1b, "yenta_socket", "Texas Instruments PCI1450" }, \r
- { 0x104c, 0xac52, "yenta_socket", "Texas Instruments PCI1451" }, \r
- { 0x104c, 0xac56, "yenta_socket", "Texas Instruments PCI1510" }, \r
- { 0x104c, 0xac55, "yenta_socket", "Texas Instruments PCI1520" }, \r
- { 0x104c, 0xac54, "yenta_socket", "Texas Instruments PCI1620" }, \r
- { 0x104c, 0xac41, "yenta_socket", "Texas Instruments PCI4410" }, \r
- { 0x104c, 0xac40, "yenta_socket", "Texas Instruments PCI4450" }, \r
- { 0x104c, 0xac42, "yenta_socket", "Texas Instruments PCI4451" }, \r
- { 0x104c, 0xac44, "yenta_socket", "Texas Instruments PCI4510" }, \r
- { 0x104c, 0xac46, "yenta_socket", "Texas Instruments PCI4520" }, \r
- { 0x104c, 0xac49, "yenta_socket", "Texas Instruments PCI7410" }, \r
- { 0x104c, 0xac47, "yenta_socket", "Texas Instruments PCI7510" }, \r
- { 0x104c, 0xac48, "yenta_socket", "Texas Instruments PCI7610" }, \r
- { 0x1217, 0x6729, "i82365", "O2 Micro 6729" }, \r
- { 0x1217, 0x673a, "i82365", "O2 Micro 6730" }, \r
- { 0x1217, 0x6832, "yenta_socket", "O2 Micro 6832/6833" }, \r
- { 0x1217, 0x6836, "yenta_socket", "O2 Micro 6836/6860" }, \r
- { 0x1217, 0x6872, "yenta_socket", "O2 Micro 6812" }, \r
- { 0x1217, 0x6925, "yenta_socket", "O2 Micro 6922" }, \r
- { 0x1217, 0x6933, "yenta_socket", "O2 Micro 6933" }, \r
- { 0x1217, 0x6972, "yenta_socket", "O2 Micro 6912" }, \r
- { 0x1179, 0x0603, "i82365", "Toshiba ToPIC95-A" }, \r
- { 0x1179, 0x060a, "yenta_socket", "Toshiba ToPIC95-B" }, \r
- { 0x1179, 0x060f, "yenta_socket", "Toshiba ToPIC97" }, \r
- { 0x1179, 0x0617, "yenta_socket", "Toshiba ToPIC100" }, \r
- { 0x119b, 0x1221, "i82365", "Omega Micro 82C092G" }, \r
- { 0x8086, 0x1221, "i82092", "Intel 82092AA_0" }, \r
- { 0x8086, 0x1222, "i82092", "Intel 82092AA_1" }, \r
- { 0x1524, 0x1211, "yenta_socket", "ENE 1211" },\r
- { 0x1524, 0x1225, "yenta_socket", "ENE 1225" },\r
- { 0x1524, 0x1410, "yenta_socket", "ENE 1410" },\r
- { 0x1524, 0x1420, "yenta_socket", "ENE 1420" },\r
-};\r
-#define PCI_COUNT (sizeof(pci_id)/sizeof(pci_id_t))\r
-\r
-static char * pci_probe()\r
-{\r
- char s[256], *modname = NULL;\r
- u_int device, vendor, i;\r
- FILE *f;\r
- \r
- if ((f = fopen("/proc/bus/pci/devices", "r")) != NULL) {\r
- while (fgets(s, 256, f) != NULL) {\r
- u_int n = strtoul(s+5, NULL, 16);\r
- vendor = (n >> 16); device = (n & 0xffff);\r
- for (i = 0; i < PCI_COUNT; i++)\r
- if ((vendor == pci_id[i].vendor) &&\r
- (device == pci_id[i].device)) break;\r
-\r
- if (i < PCI_COUNT) {\r
- modname = pci_id[i].modname;\r
- break;\r
- }\r
- }\r
- }\r
- \r
- return modname;\r
-}\r
-\r
-/*====================================================================*/\r
-\r
-#ifndef __alpha__\r
-typedef u_short ioaddr_t;\r
-\r
-static ioaddr_t i365_base = 0x03e0;\r
-\r
-static u_char i365_get(u_short sock, u_short reg)\r
-{\r
- u_char val = I365_REG(sock, reg);\r
- outb(val, i365_base); val = inb(i365_base+1);\r
- return val;\r
-}\r
-\r
-#if 0 // the following code do nothing usefull, it ends with return 0 anyway\r
-\r
-static void i365_set(u_short sock, u_short reg, u_char data)\r
-{\r
- u_char val = I365_REG(sock, reg);\r
- outb(val, i365_base); outb(data, i365_base+1);\r
-}\r
-\r
-static void i365_bset(u_short sock, u_short reg, u_char mask)\r
-{\r
- u_char d = i365_get(sock, reg);\r
- d |= mask;\r
- i365_set(sock, reg, d);\r
-}\r
-\r
-static void i365_bclr(u_short sock, u_short reg, u_char mask)\r
-{\r
- u_char d = i365_get(sock, reg);\r
- d &= ~mask;\r
- i365_set(sock, reg, d);\r
-}\r
-#endif\r
-\r
-int i365_probe()\r
-{\r
- int val, slot, sock, done;\r
-// char *name = "i82365sl";\r
-\r
- ioperm(i365_base, 4, 1);\r
- ioperm(0x80, 1, 1);\r
- for (slot = 0; slot < 2; slot++) {\r
- for (sock = done = 0; sock < 2; sock++) {\r
- val = i365_get(sock, I365_IDENT);\r
- switch (val) {\r
- case 0x82:\r
-// name = "i82365sl A step";\r
-// break;\r
- case 0x83:\r
-// name = "i82365sl B step";\r
-// break;\r
- case 0x84:\r
-// name = "VLSI 82C146";\r
-// break;\r
- case 0x88: case 0x89: case 0x8a:\r
-// name = "IBM Clone";\r
-// break;\r
- case 0x8b: case 0x8c:\r
- break;\r
- default:\r
- done = 1;\r
- }\r
- if (done) break;\r
- }\r
- if (done && sock) break;\r
- i365_base += 2;\r
- }\r
-\r
- if (sock == 0) {\r
- return -1;\r
- }\r
-\r
-#if 0 // the following code do nothing usefull, it ends with return 0 anyway\r
- if ((sock == 2) && (strcmp(name, "VLSI 82C146") == 0))\r
- name = "i82365sl DF";\r
-\r
- /* Check for Vadem chips */\r
- outb(0x0e, i365_base);\r
- outb(0x37, i365_base);\r
- i365_bset(0, VG468_MISC, VG468_MISC_VADEMREV);\r
- val = i365_get(0, I365_IDENT);\r
- if (val & I365_IDENT_VADEM) {\r
- if ((val & 7) < 4)\r
- name = "Vadem VG-468";\r
- else\r
- name = "Vadem VG-469";\r
- i365_bclr(0, VG468_MISC, VG468_MISC_VADEMREV);\r
- }\r
- \r
- /* Check for Cirrus CL-PD67xx chips */\r
- i365_set(0, PD67_CHIP_INFO, 0);\r
- val = i365_get(0, PD67_CHIP_INFO);\r
- if ((val & PD67_INFO_CHIP_ID) == PD67_INFO_CHIP_ID) {\r
- val = i365_get(0, PD67_CHIP_INFO);\r
- if ((val & PD67_INFO_CHIP_ID) == 0) {\r
- if (val & PD67_INFO_SLOTS)\r
- name = "Cirrus CL-PD672x";\r
- else {\r
- name = "Cirrus CL-PD6710";\r
- sock = 1;\r
- }\r
- i365_set(0, PD67_EXT_INDEX, 0xe5);\r
- if (i365_get(0, PD67_EXT_INDEX) != 0xe5)\r
- name = "VIA VT83C469";\r
- }\r
- }\r
-#endif\r
- return 0;\r
- \r
-} /* i365_probe */\r
-#endif\r
-\r
-/*====================================================================*/\r
-\r
-#ifndef __alpha__\r
-static u_short tcic_getw(ioaddr_t base, u_char reg)\r
-{\r
- u_short val = inw(base+reg);\r
- return val;\r
-}\r
-\r
-static void tcic_setw(ioaddr_t base, u_char reg, u_short data)\r
-{\r
- outw(data, base+reg);\r
-}\r
-\r
-int tcic_probe_at(ioaddr_t base)\r
-{\r
- int i;\r
- u_short old;\r
- \r
- /* Anything there?? */\r
- for (i = 0; i < 0x10; i += 2)\r
- if (tcic_getw(base, i) == 0xffff)\r
- return -1;\r
-\r
- /* Try to reset the chip */\r
- tcic_setw(base, TCIC_SCTRL, TCIC_SCTRL_RESET);\r
- tcic_setw(base, TCIC_SCTRL, 0);\r
- \r
- /* Can we set the addr register? */\r
- old = tcic_getw(base, TCIC_ADDR);\r
- tcic_setw(base, TCIC_ADDR, 0);\r
- if (tcic_getw(base, TCIC_ADDR) != 0) {\r
- tcic_setw(base, TCIC_ADDR, old);\r
- return -2;\r
- }\r
- \r
- tcic_setw(base, TCIC_ADDR, 0xc3a5);\r
- if (tcic_getw(base, TCIC_ADDR) != 0xc3a5)\r
- return -3;\r
-\r
- return 2;\r
-}\r
-\r
-int tcic_probe(ioaddr_t base)\r
-{\r
- int sock;\r
-\r
- ioperm(base, 16, 1);\r
- ioperm(0x80, 1, 1);\r
- sock = tcic_probe_at(base);\r
- \r
- if (sock <= 0) {\r
- return -1;\r
- }\r
-\r
- return 0;\r
- \r
-} /* tcic_probe */\r
-#endif\r
-\r
-/*====================================================================*/\r
-char * initialize_pcmcia (void)\r
-{\r
-#ifndef __alpha__\r
- ioaddr_t tcic_base = TCIC_BASE;\r
-#endif\r
- char* pcmcia;\r
- \r
- if ((pcmcia = pci_probe()))\r
- return pcmcia; /* we're all done */\r
-#ifndef __alpha__\r
- else if (i365_probe() == 0)\r
- return "i82365";\r
- else if (tcic_probe(tcic_base) == 0)\r
- return "tcic";\r
-#endif\r
- else {\r
- /* Detect ISAPNP based i82365 controllers */\r
- FILE *f;\r
- modprobe("i82365");\r
- if ((f = fopen("/proc/bus/pccard/00/info", "r"))) {\r
- fclose(f);\r
- return "i82365";\r
- }\r
- }\r
-\r
- return NULL;\r
-}\r
+/*
+ * PCMCIA bridge device probe
+ *
+ * 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
+ *
+ * The initial developer of the original code is David A. Hinds
+ * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
+ * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
+ *
+ * $Id: pcmcia.c,v 1.6.2.4 2005/12/08 02:12:28 franck78 Exp $
+ *
+ */
+
+#include "install.h"
+#include "pcmcia.h"
+
+#ifdef __GLIBC__
+#include <sys/io.h>
+#else
+#include <asm/io.h>
+#endif
+
+extern FILE *flog;
+extern int modprobe(char *);
+
+/*====================================================================*/
+
+typedef struct {
+ u_short vendor, device;
+ char *modname;
+ char *name;
+} pci_id_t;
+
+pci_id_t pci_id[] = {
+ { 0x1013, 0x1100, "i82365", "Cirrus Logic CL 6729" },
+ { 0x1013, 0x1110, "yenta_socket", "Cirrus Logic PD 6832" },
+ { 0x10b3, 0xb106, "yenta_socket", "SMC 34C90" },
+ { 0x1180, 0x0465, "yenta_socket", "Ricoh RL5C465" },
+ { 0x1180, 0x0466, "yenta_socket", "Ricoh RL5C466" },
+ { 0x1180, 0x0475, "yenta_socket", "Ricoh RL5C475" },
+ { 0x1180, 0x0476, "yenta_socket", "Ricoh RL5C476" },
+ { 0x1180, 0x0477, "yenta_socket", "Ricoh RL5C477" },
+ { 0x1180, 0x0478, "yenta_socket", "Ricoh RL5C478" },
+ { 0x104c, 0xac12, "yenta_socket", "Texas Instruments PCI1130" },
+ { 0x104c, 0xac13, "yenta_socket", "Texas Instruments PCI1031" },
+ { 0x104c, 0xac15, "yenta_socket", "Texas Instruments PCI1131" },
+ { 0x104c, 0xac1a, "yenta_socket", "Texas Instruments PCI1210" },
+ { 0x104c, 0xac1e, "yenta_socket", "Texas Instruments PCI1211" },
+ { 0x104c, 0xac17, "yenta_socket", "Texas Instruments PCI1220" },
+ { 0x104c, 0xac19, "yenta_socket", "Texas Instruments PCI1221" },
+ { 0x104c, 0xac1c, "yenta_socket", "Texas Instruments PCI1225" },
+ { 0x104c, 0xac16, "yenta_socket", "Texas Instruments PCI1250" },
+ { 0x104c, 0xac1d, "yenta_socket", "Texas Instruments PCI1251A" },
+ { 0x104c, 0xac1f, "yenta_socket", "Texas Instruments PCI1251B" },
+ { 0x104c, 0xac50, "yenta_socket", "Texas Instruments PCI1410" },
+ { 0x104c, 0xac51, "yenta_socket", "Texas Instruments PCI1420" },
+ { 0x104c, 0xac1b, "yenta_socket", "Texas Instruments PCI1450" },
+ { 0x104c, 0xac52, "yenta_socket", "Texas Instruments PCI1451" },
+ { 0x104c, 0xac56, "yenta_socket", "Texas Instruments PCI1510" },
+ { 0x104c, 0xac55, "yenta_socket", "Texas Instruments PCI1520" },
+ { 0x104c, 0xac54, "yenta_socket", "Texas Instruments PCI1620" },
+ { 0x104c, 0xac41, "yenta_socket", "Texas Instruments PCI4410" },
+ { 0x104c, 0xac40, "yenta_socket", "Texas Instruments PCI4450" },
+ { 0x104c, 0xac42, "yenta_socket", "Texas Instruments PCI4451" },
+ { 0x104c, 0xac44, "yenta_socket", "Texas Instruments PCI4510" },
+ { 0x104c, 0xac46, "yenta_socket", "Texas Instruments PCI4520" },
+ { 0x104c, 0xac49, "yenta_socket", "Texas Instruments PCI7410" },
+ { 0x104c, 0xac47, "yenta_socket", "Texas Instruments PCI7510" },
+ { 0x104c, 0xac48, "yenta_socket", "Texas Instruments PCI7610" },
+ { 0x1217, 0x6729, "i82365", "O2 Micro 6729" },
+ { 0x1217, 0x673a, "i82365", "O2 Micro 6730" },
+ { 0x1217, 0x6832, "yenta_socket", "O2 Micro 6832/6833" },
+ { 0x1217, 0x6836, "yenta_socket", "O2 Micro 6836/6860" },
+ { 0x1217, 0x6872, "yenta_socket", "O2 Micro 6812" },
+ { 0x1217, 0x6925, "yenta_socket", "O2 Micro 6922" },
+ { 0x1217, 0x6933, "yenta_socket", "O2 Micro 6933" },
+ { 0x1217, 0x6972, "yenta_socket", "O2 Micro 6912" },
+ { 0x1179, 0x0603, "i82365", "Toshiba ToPIC95-A" },
+ { 0x1179, 0x060a, "yenta_socket", "Toshiba ToPIC95-B" },
+ { 0x1179, 0x060f, "yenta_socket", "Toshiba ToPIC97" },
+ { 0x1179, 0x0617, "yenta_socket", "Toshiba ToPIC100" },
+ { 0x119b, 0x1221, "i82365", "Omega Micro 82C092G" },
+ { 0x8086, 0x1221, "i82092", "Intel 82092AA_0" },
+ { 0x8086, 0x1222, "i82092", "Intel 82092AA_1" },
+ { 0x1524, 0x1211, "yenta_socket", "ENE 1211" },
+ { 0x1524, 0x1225, "yenta_socket", "ENE 1225" },
+ { 0x1524, 0x1410, "yenta_socket", "ENE 1410" },
+ { 0x1524, 0x1420, "yenta_socket", "ENE 1420" },
+};
+#define PCI_COUNT (sizeof(pci_id)/sizeof(pci_id_t))
+
+static char * pci_probe()
+{
+ char s[256], *modname = NULL;
+ u_int device, vendor, i;
+ FILE *f;
+
+ if ((f = fopen("/proc/bus/pci/devices", "r")) != NULL) {
+ while (fgets(s, 256, f) != NULL) {
+ u_int n = strtoul(s+5, NULL, 16);
+ vendor = (n >> 16); device = (n & 0xffff);
+ for (i = 0; i < PCI_COUNT; i++)
+ if ((vendor == pci_id[i].vendor) &&
+ (device == pci_id[i].device)) break;
+
+ if (i < PCI_COUNT) {
+ modname = pci_id[i].modname;
+ break;
+ }
+ }
+ }
+
+ return modname;
+}
+
+/*====================================================================*/
+
+#ifndef __alpha__
+typedef u_short ioaddr_t;
+
+static ioaddr_t i365_base = 0x03e0;
+
+static u_char i365_get(u_short sock, u_short reg)
+{
+ u_char val = I365_REG(sock, reg);
+ outb(val, i365_base); val = inb(i365_base+1);
+ return val;
+}
+
+#if 0 // the following code do nothing usefull, it ends with return 0 anyway
+
+static void i365_set(u_short sock, u_short reg, u_char data)
+{
+ u_char val = I365_REG(sock, reg);
+ outb(val, i365_base); outb(data, i365_base+1);
+}
+
+static void i365_bset(u_short sock, u_short reg, u_char mask)
+{
+ u_char d = i365_get(sock, reg);
+ d |= mask;
+ i365_set(sock, reg, d);
+}
+
+static void i365_bclr(u_short sock, u_short reg, u_char mask)
+{
+ u_char d = i365_get(sock, reg);
+ d &= ~mask;
+ i365_set(sock, reg, d);
+}
+#endif
+
+int i365_probe()
+{
+ int val, slot, sock, done;
+// char *name = "i82365sl";
+
+ ioperm(i365_base, 4, 1);
+ ioperm(0x80, 1, 1);
+ for (slot = 0; slot < 2; slot++) {
+ for (sock = done = 0; sock < 2; sock++) {
+ val = i365_get(sock, I365_IDENT);
+ switch (val) {
+ case 0x82:
+// name = "i82365sl A step";
+// break;
+ case 0x83:
+// name = "i82365sl B step";
+// break;
+ case 0x84:
+// name = "VLSI 82C146";
+// break;
+ case 0x88: case 0x89: case 0x8a:
+// name = "IBM Clone";
+// break;
+ case 0x8b: case 0x8c:
+ break;
+ default:
+ done = 1;
+ }
+ if (done) break;
+ }
+ if (done && sock) break;
+ i365_base += 2;
+ }
+
+ if (sock == 0) {
+ return -1;
+ }
+
+#if 0 // the following code do nothing usefull, it ends with return 0 anyway
+ if ((sock == 2) && (strcmp(name, "VLSI 82C146") == 0))
+ name = "i82365sl DF";
+
+ /* Check for Vadem chips */
+ outb(0x0e, i365_base);
+ outb(0x37, i365_base);
+ i365_bset(0, VG468_MISC, VG468_MISC_VADEMREV);
+ val = i365_get(0, I365_IDENT);
+ if (val & I365_IDENT_VADEM) {
+ if ((val & 7) < 4)
+ name = "Vadem VG-468";
+ else
+ name = "Vadem VG-469";
+ i365_bclr(0, VG468_MISC, VG468_MISC_VADEMREV);
+ }
+
+ /* Check for Cirrus CL-PD67xx chips */
+ i365_set(0, PD67_CHIP_INFO, 0);
+ val = i365_get(0, PD67_CHIP_INFO);
+ if ((val & PD67_INFO_CHIP_ID) == PD67_INFO_CHIP_ID) {
+ val = i365_get(0, PD67_CHIP_INFO);
+ if ((val & PD67_INFO_CHIP_ID) == 0) {
+ if (val & PD67_INFO_SLOTS)
+ name = "Cirrus CL-PD672x";
+ else {
+ name = "Cirrus CL-PD6710";
+ sock = 1;
+ }
+ i365_set(0, PD67_EXT_INDEX, 0xe5);
+ if (i365_get(0, PD67_EXT_INDEX) != 0xe5)
+ name = "VIA VT83C469";
+ }
+ }
+#endif
+ return 0;
+
+} /* i365_probe */
+#endif
+
+/*====================================================================*/
+
+#ifndef __alpha__
+static u_short tcic_getw(ioaddr_t base, u_char reg)
+{
+ u_short val = inw(base+reg);
+ return val;
+}
+
+static void tcic_setw(ioaddr_t base, u_char reg, u_short data)
+{
+ outw(data, base+reg);
+}
+
+int tcic_probe_at(ioaddr_t base)
+{
+ int i;
+ u_short old;
+
+ /* Anything there?? */
+ for (i = 0; i < 0x10; i += 2)
+ if (tcic_getw(base, i) == 0xffff)
+ return -1;
+
+ /* Try to reset the chip */
+ tcic_setw(base, TCIC_SCTRL, TCIC_SCTRL_RESET);
+ tcic_setw(base, TCIC_SCTRL, 0);
+
+ /* Can we set the addr register? */
+ old = tcic_getw(base, TCIC_ADDR);
+ tcic_setw(base, TCIC_ADDR, 0);
+ if (tcic_getw(base, TCIC_ADDR) != 0) {
+ tcic_setw(base, TCIC_ADDR, old);
+ return -2;
+ }
+
+ tcic_setw(base, TCIC_ADDR, 0xc3a5);
+ if (tcic_getw(base, TCIC_ADDR) != 0xc3a5)
+ return -3;
+
+ return 2;
+}
+
+int tcic_probe(ioaddr_t base)
+{
+ int sock;
+
+ ioperm(base, 16, 1);
+ ioperm(0x80, 1, 1);
+ sock = tcic_probe_at(base);
+
+ if (sock <= 0) {
+ return -1;
+ }
+
+ return 0;
+
+} /* tcic_probe */
+#endif
+
+/*====================================================================*/
+char * initialize_pcmcia (void)
+{
+#ifndef __alpha__
+ ioaddr_t tcic_base = TCIC_BASE;
+#endif
+ char* pcmcia;
+
+ if ((pcmcia = pci_probe()))
+ return pcmcia; /* we're all done */
+#ifndef __alpha__
+ else if (i365_probe() == 0)
+ return "i82365";
+ else if (tcic_probe(tcic_base) == 0)
+ return "tcic";
+#endif
+ else {
+ /* Detect ISAPNP based i82365 controllers */
+ FILE *f;
+ modprobe("i82365");
+ if ((f = fopen("/proc/bus/pccard/00/info", "r"))) {
+ fclose(f);
+ return "i82365";
+ }
+ }
+
+ return NULL;
+}
-/*\r
- * PCMCIA bridge device probe\r
- *\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
- * The initial developer of the original code is David A. Hinds\r
- * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds\r
- * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.\r
- *\r
- * $Id: pcmcia.h,v 1.1 2004/01/25 09:34:59 riddles Exp $\r
- *\r
- */\r
-\r
-#define TCIC_BASE 0x240\r
-\r
-/* offsets of registers from TCIC_BASE */\r
-#define TCIC_DATA 0x00\r
-#define TCIC_ADDR 0x02\r
-#define TCIC_SCTRL 0x06\r
-#define TCIC_SSTAT 0x07\r
-#define TCIC_MODE 0x08\r
-#define TCIC_PWR 0x09\r
-#define TCIC_EDC 0x0A\r
-#define TCIC_ICSR 0x0C\r
-#define TCIC_IENA 0x0D\r
-#define TCIC_AUX 0x0E\r
-\r
-#define TCIC_SS_SHFT 12\r
-#define TCIC_SS_MASK 0x7000\r
-\r
-/* Flags for TCIC_ADDR */\r
-#define TCIC_ADR2_REG 0x8000\r
-#define TCIC_ADR2_INDREG 0x0800\r
-\r
-#define TCIC_ADDR_REG 0x80000000\r
-#define TCIC_ADDR_SS_SHFT (TCIC_SS_SHFT+16)\r
-#define TCIC_ADDR_SS_MASK (TCIC_SS_MASK<<16)\r
-#define TCIC_ADDR_INDREG 0x08000000\r
-#define TCIC_ADDR_IO 0x04000000\r
-#define TCIC_ADDR_MASK 0x03ffffff\r
-\r
-/* Flags for TCIC_SCTRL */\r
-#define TCIC_SCTRL_ENA 0x01\r
-#define TCIC_SCTRL_INCMODE 0x18\r
-#define TCIC_SCTRL_INCMODE_HOLD 0x00\r
-#define TCIC_SCTRL_INCMODE_WORD 0x08\r
-#define TCIC_SCTRL_INCMODE_REG 0x10\r
-#define TCIC_SCTRL_INCMODE_AUTO 0x18\r
-#define TCIC_SCTRL_EDCSUM 0x20\r
-#define TCIC_SCTRL_RESET 0x80\r
-\r
-/* Flags for TCIC_SSTAT */\r
-#define TCIC_SSTAT_6US 0x01\r
-#define TCIC_SSTAT_10US 0x02\r
-#define TCIC_SSTAT_PROGTIME 0x04\r
-#define TCIC_SSTAT_LBAT1 0x08\r
-#define TCIC_SSTAT_LBAT2 0x10\r
-#define TCIC_SSTAT_RDY 0x20 /* Inverted */\r
-#define TCIC_SSTAT_WP 0x40\r
-#define TCIC_SSTAT_CD 0x80 /* Card detect */\r
-\r
-/* Flags for TCIC_MODE */\r
-#define TCIC_MODE_PGMMASK 0x1f\r
-#define TCIC_MODE_NORMAL 0x00\r
-#define TCIC_MODE_PGMWR 0x01\r
-#define TCIC_MODE_PGMRD 0x02\r
-#define TCIC_MODE_PGMCE 0x04\r
-#define TCIC_MODE_PGMDBW 0x08\r
-#define TCIC_MODE_PGMWORD 0x10\r
-#define TCIC_MODE_AUXSEL_MASK 0xe0\r
-\r
-/* Registers accessed through TCIC_AUX, by setting TCIC_MODE */\r
-#define TCIC_AUX_TCTL (0<<5)\r
-#define TCIC_AUX_PCTL (1<<5)\r
-#define TCIC_AUX_WCTL (2<<5)\r
-#define TCIC_AUX_EXTERN (3<<5)\r
-#define TCIC_AUX_PDATA (4<<5)\r
-#define TCIC_AUX_SYSCFG (5<<5)\r
-#define TCIC_AUX_ILOCK (6<<5)\r
-#define TCIC_AUX_TEST (7<<5)\r
-\r
-/* Flags for TCIC_PWR */\r
-#define TCIC_PWR_VCC(sock) (0x01<<(sock))\r
-#define TCIC_PWR_VCC_MASK 0x03\r
-#define TCIC_PWR_VPP(sock) (0x08<<(sock))\r
-#define TCIC_PWR_VPP_MASK 0x18\r
-#define TCIC_PWR_CLIMENA 0x40\r
-#define TCIC_PWR_CLIMSTAT 0x80\r
-\r
-/* Flags for TCIC_ICSR */\r
-#define TCIC_ICSR_CLEAR 0x01\r
-#define TCIC_ICSR_SET 0x02\r
-#define TCIC_ICSR_JAM (TCIC_ICSR_CLEAR|TCIC_ICSR_SET)\r
-#define TCIC_ICSR_STOPCPU 0x04\r
-#define TCIC_ICSR_ILOCK 0x08\r
-#define TCIC_ICSR_PROGTIME 0x10\r
-#define TCIC_ICSR_ERR 0x20\r
-#define TCIC_ICSR_CDCHG 0x40\r
-#define TCIC_ICSR_IOCHK 0x80\r
-\r
-/* Flags for TCIC_IENA */\r
-#define TCIC_IENA_CFG_MASK 0x03\r
-#define TCIC_IENA_CFG_OFF 0x00 /* disabled */\r
-#define TCIC_IENA_CFG_OD 0x01 /* active low, open drain */\r
-#define TCIC_IENA_CFG_LOW 0x02 /* active low, totem pole */\r
-#define TCIC_IENA_CFG_HIGH 0x03 /* active high, totem pole */\r
-#define TCIC_IENA_ILOCK 0x08\r
-#define TCIC_IENA_PROGTIME 0x10\r
-#define TCIC_IENA_ERR 0x20 /* overcurrent or iochk */\r
-#define TCIC_IENA_CDCHG 0x40\r
-\r
-/* Flags for TCIC_AUX_WCTL */\r
-#define TCIC_WAIT_COUNT_MASK 0x001f\r
-#define TCIC_WAIT_ASYNC 0x0020\r
-#define TCIC_WAIT_SENSE 0x0040\r
-#define TCIC_WAIT_SRC 0x0080\r
-#define TCIC_WCTL_WR 0x0100\r
-#define TCIC_WCTL_RD 0x0200\r
-#define TCIC_WCTL_CE 0x0400\r
-#define TCIC_WCTL_LLBAT1 0x0800\r
-#define TCIC_WCTL_LLBAT2 0x1000\r
-#define TCIC_WCTL_LRDY 0x2000\r
-#define TCIC_WCTL_LWP 0x4000\r
-#define TCIC_WCTL_LCD 0x8000\r
-\r
-/* Flags for TCIC_AUX_SYSCFG */\r
-#define TCIC_SYSCFG_IRQ_MASK 0x000f\r
-#define TCIC_SYSCFG_MCSFULL 0x0010\r
-#define TCIC_SYSCFG_IO1723 0x0020\r
-#define TCIC_SYSCFG_MCSXB 0x0040\r
-#define TCIC_SYSCFG_ICSXB 0x0080\r
-#define TCIC_SYSCFG_NOPDN 0x0100\r
-#define TCIC_SYSCFG_MPSEL_SHFT 9\r
-#define TCIC_SYSCFG_MPSEL_MASK 0x0e00\r
-#define TCIC_SYSCFG_MPSENSE 0x2000\r
-#define TCIC_SYSCFG_AUTOBUSY 0x4000\r
-#define TCIC_SYSCFG_ACC 0x8000\r
-\r
-#define TCIC_ILOCK_OUT 0x01\r
-#define TCIC_ILOCK_SENSE 0x02\r
-#define TCIC_ILOCK_CRESET 0x04\r
-#define TCIC_ILOCK_CRESENA 0x08\r
-#define TCIC_ILOCK_CWAIT 0x10\r
-#define TCIC_ILOCK_CWAITSNS 0x20\r
-#define TCIC_ILOCK_HOLD_MASK 0xc0\r
-#define TCIC_ILOCK_HOLD_CCLK 0xc0\r
-\r
-#define TCIC_ILOCKTEST_ID_SH 8\r
-#define TCIC_ILOCKTEST_ID_MASK 0x7f00\r
-#define TCIC_ILOCKTEST_MCIC_1 0x8000\r
-\r
-#define TCIC_ID_DB86082 0x02\r
-#define TCIC_ID_DB86082A 0x03\r
-#define TCIC_ID_DB86084 0x04\r
-#define TCIC_ID_DB86084A 0x08\r
-#define TCIC_ID_DB86072 0x15\r
-#define TCIC_ID_DB86184 0x14\r
-#define TCIC_ID_DB86082B 0x17\r
-\r
-#define TCIC_TEST_DIAG 0x8000\r
-\r
-/*\r
- * Indirectly addressed registers\r
- */\r
-\r
-#define TCIC_SCF1(sock) ((sock)<<3)\r
-#define TCIC_SCF2(sock) (((sock)<<3)+2)\r
-\r
-/* Flags for SCF1 */\r
-#define TCIC_SCF1_IRQ_MASK 0x000f\r
-#define TCIC_SCF1_IRQ_OFF 0x0000\r
-#define TCIC_SCF1_IRQOC 0x0010\r
-#define TCIC_SCF1_PCVT 0x0020\r
-#define TCIC_SCF1_IRDY 0x0040\r
-#define TCIC_SCF1_ATA 0x0080\r
-#define TCIC_SCF1_DMA_SHIFT 8\r
-#define TCIC_SCF1_DMA_MASK 0x0700\r
-#define TCIC_SCF1_DMA_OFF 0\r
-#define TCIC_SCF1_DREQ2 2\r
-#define TCIC_SCF1_IOSTS 0x0800\r
-#define TCIC_SCF1_SPKR 0x1000\r
-#define TCIC_SCF1_FINPACK 0x2000\r
-#define TCIC_SCF1_DELWR 0x4000\r
-#define TCIC_SCF1_HD7IDE 0x8000\r
-\r
-/* Flags for SCF2 */\r
-#define TCIC_SCF2_RI 0x0001\r
-#define TCIC_SCF2_IDBR 0x0002\r
-#define TCIC_SCF2_MDBR 0x0004\r
-#define TCIC_SCF2_MLBAT1 0x0008\r
-#define TCIC_SCF2_MLBAT2 0x0010\r
-#define TCIC_SCF2_MRDY 0x0020\r
-#define TCIC_SCF2_MWP 0x0040\r
-#define TCIC_SCF2_MCD 0x0080\r
-#define TCIC_SCF2_MALL 0x00f8\r
-\r
-/* Indirect addresses for memory window registers */\r
-#define TCIC_MWIN(sock,map) (0x100+(((map)+((sock)<<2))<<3))\r
-#define TCIC_MBASE_X 2\r
-#define TCIC_MMAP_X 4\r
-#define TCIC_MCTL_X 6\r
-\r
-#define TCIC_MBASE_4K_BIT 0x4000\r
-#define TCIC_MBASE_HA_SHFT 12\r
-#define TCIC_MBASE_HA_MASK 0x0fff\r
-\r
-#define TCIC_MMAP_REG 0x8000\r
-#define TCIC_MMAP_CA_SHFT 12\r
-#define TCIC_MMAP_CA_MASK 0x3fff\r
-\r
-#define TCIC_MCTL_WSCNT_MASK 0x001f\r
-#define TCIC_MCTL_WCLK 0x0020\r
-#define TCIC_MCTL_WCLK_CCLK 0x0000\r
-#define TCIC_MCTL_WCLK_BCLK 0x0020\r
-#define TCIC_MCTL_QUIET 0x0040\r
-#define TCIC_MCTL_WP 0x0080\r
-#define TCIC_MCTL_ACC 0x0100\r
-#define TCIC_MCTL_KE 0x0200\r
-#define TCIC_MCTL_EDC 0x0400\r
-#define TCIC_MCTL_B8 0x0800\r
-#define TCIC_MCTL_SS_SHFT TCIC_SS_SHFT\r
-#define TCIC_MCTL_SS_MASK TCIC_SS_MASK\r
-#define TCIC_MCTL_ENA 0x8000\r
-\r
-/* Indirect addresses for I/O window registers */\r
-#define TCIC_IWIN(sock,map) (0x200+(((map)+((sock)<<1))<<2))\r
-#define TCIC_IBASE_X 0\r
-#define TCIC_ICTL_X 2\r
-\r
-#define TCIC_ICTL_WSCNT_MASK TCIC_MCTL_WSCNT_MASK\r
-#define TCIC_ICTL_QUIET TCIC_MCTL_QUIET\r
-#define TCIC_ICTL_1K 0x0080\r
-#define TCIC_ICTL_PASS16 0x0100\r
-#define TCIC_ICTL_ACC TCIC_MCTL_ACC\r
-#define TCIC_ICTL_TINY 0x0200\r
-#define TCIC_ICTL_B16 0x0400\r
-#define TCIC_ICTL_B8 TCIC_MCTL_B8\r
-#define TCIC_ICTL_BW_MASK (TCIC_ICTL_B16|TCIC_ICTL_B8)\r
-#define TCIC_ICTL_BW_DYN 0\r
-#define TCIC_ICTL_BW_8 TCIC_ICTL_B8\r
-#define TCIC_ICTL_BW_16 TCIC_ICTL_B16\r
-#define TCIC_ICTL_BW_ATA (TCIC_ICTL_B16|TCIC_ICTL_B8)\r
-#define TCIC_ICTL_SS_SHFT TCIC_SS_SHFT\r
-#define TCIC_ICTL_SS_MASK TCIC_SS_MASK\r
-#define TCIC_ICTL_ENA TCIC_MCTL_ENA\r
-\r
-/* register definitions for the Intel 82365SL PCMCIA controller */\r
-\r
-/* Offsets for PCIC registers */\r
-#define I365_IDENT 0x00 /* Identification and revision */\r
-#define I365_STATUS 0x01 /* Interface status */\r
-#define I365_POWER 0x02 /* Power and RESETDRV control */\r
-#define I365_INTCTL 0x03 /* Interrupt and general control */\r
-#define I365_CSC 0x04 /* Card status change */\r
-#define I365_CSCINT 0x05 /* Card status change interrupt control */\r
-#define I365_ADDRWIN 0x06 /* Address window enable */\r
-#define I365_IOCTL 0x07 /* I/O control */\r
-#define I365_GENCTL 0x16 /* Card detect and general control */\r
-#define I365_GBLCTL 0x1E /* Global control register */\r
-\r
-/* Offsets for I/O and memory window registers */\r
-#define I365_IO(map) (0x08+((map)<<2))\r
-#define I365_MEM(map) (0x10+((map)<<3))\r
-#define I365_W_START 0\r
-#define I365_W_STOP 2\r
-#define I365_W_OFF 4\r
-\r
-/* Flags for I365_STATUS */\r
-#define I365_CS_BVD1 0x01\r
-#define I365_CS_STSCHG 0x01\r
-#define I365_CS_BVD2 0x02\r
-#define I365_CS_SPKR 0x02\r
-#define I365_CS_DETECT 0x0C\r
-#define I365_CS_WRPROT 0x10\r
-#define I365_CS_READY 0x20 /* Inverted */\r
-#define I365_CS_POWERON 0x40\r
-#define I365_CS_GPI 0x80\r
-\r
-/* Flags for I365_POWER */\r
-#define I365_PWR_OFF 0x00 /* Turn off the socket */\r
-#define I365_PWR_OUT 0x80 /* Output enable */\r
-#define I365_PWR_NORESET 0x40 /* Disable RESETDRV on resume */\r
-#define I365_PWR_AUTO 0x20 /* Auto pwr switch enable */\r
-#define I365_VCC_MASK 0x18 /* Mask for turning off Vcc */\r
-/* There are different layouts for B-step and DF-step chips: the B\r
- step has independent Vpp1/Vpp2 control, and the DF step has only\r
- Vpp1 control, plus 3V control */\r
-#define I365_VCC_5V 0x10 /* Vcc = 5.0v */\r
-#define I365_VCC_3V 0x18 /* Vcc = 3.3v */\r
-#define I365_VPP2_MASK 0x0c /* Mask for turning off Vpp2 */\r
-#define I365_VPP2_5V 0x04 /* Vpp2 = 5.0v */\r
-#define I365_VPP2_12V 0x08 /* Vpp2 = 12.0v */\r
-#define I365_VPP1_MASK 0x03 /* Mask for turning off Vpp1 */\r
-#define I365_VPP1_5V 0x01 /* Vpp2 = 5.0v */\r
-#define I365_VPP1_12V 0x02 /* Vpp2 = 12.0v */\r
-\r
-/* Flags for I365_INTCTL */\r
-#define I365_RING_ENA 0x80\r
-#define I365_PC_RESET 0x40\r
-#define I365_PC_IOCARD 0x20\r
-#define I365_INTR_ENA 0x10\r
-#define I365_IRQ_MASK 0x0F\r
-\r
-/* Flags for I365_CSC and I365_CSCINT*/\r
-#define I365_CSC_BVD1 0x01\r
-#define I365_CSC_STSCHG 0x01\r
-#define I365_CSC_BVD2 0x02\r
-#define I365_CSC_READY 0x04\r
-#define I365_CSC_DETECT 0x08\r
-#define I365_CSC_ANY 0x0F\r
-#define I365_CSC_GPI 0x10\r
-\r
-/* Flags for I365_ADDRWIN */\r
-#define I365_ADDR_MEMCS16 0x20\r
-#define I365_ENA_IO(map) (0x40 << (map))\r
-#define I365_ENA_MEM(map) (0x01 << (map))\r
-\r
-/* Flags for I365_IOCTL */\r
-#define I365_IOCTL_MASK(map) (0x0F << (map<<2))\r
-#define I365_IOCTL_WAIT(map) (0x08 << (map<<2))\r
-#define I365_IOCTL_0WS(map) (0x04 << (map<<2))\r
-#define I365_IOCTL_IOCS16(map) (0x02 << (map<<2))\r
-#define I365_IOCTL_16BIT(map) (0x01 << (map<<2))\r
-\r
-/* Flags for I365_GENCTL */\r
-#define I365_CTL_16DELAY 0x01\r
-#define I365_CTL_RESET 0x02\r
-#define I365_CTL_GPI_ENA 0x04\r
-#define I365_CTL_GPI_CTL 0x08\r
-#define I365_CTL_RESUME 0x10\r
-#define I365_CTL_SW_IRQ 0x20\r
-\r
-/* Flags for I365_GBLCTL */\r
-#define I365_GBL_PWRDOWN 0x01\r
-#define I365_GBL_CSC_LEV 0x02\r
-#define I365_GBL_WRBACK 0x04\r
-#define I365_GBL_IRQ_0_LEV 0x08\r
-#define I365_GBL_IRQ_1_LEV 0x10\r
-\r
-/* Flags for memory window registers */\r
-#define I365_MEM_16BIT 0x8000 /* In memory start high byte */\r
-#define I365_MEM_0WS 0x4000\r
-#define I365_MEM_WS1 0x8000 /* In memory stop high byte */\r
-#define I365_MEM_WS0 0x4000\r
-#define I365_MEM_WRPROT 0x8000 /* In offset high byte */\r
-#define I365_MEM_REG 0x4000\r
-\r
-#define I365_REG(slot, reg) (((slot) << 6) | (reg))\r
-\r
-/* Default ISA interrupt mask */\r
-#define I365_ISA_IRQ_MASK 0xdeb8 /* irq's 3-5,7,9-12,14,15 */\r
-\r
-/* Device ID's for PCI-to-PCMCIA bridges */\r
-\r
-#ifndef PCI_VENDOR_ID_INTEL\r
-#define PCI_VENDOR_ID_INTEL 0x8086\r
-#endif\r
-#ifndef PCI_DEVICE_ID_INTEL_82092AA_0\r
-#define PCI_DEVICE_ID_INTEL_82092AA_0 0x1221\r
-#endif\r
-#ifndef PCI_VENDOR_ID_OMEGA\r
-#define PCI_VENDOR_ID_OMEGA 0x119b\r
-#endif\r
-#ifndef PCI_DEVICE_ID_OMEGA_82C092G\r
-#define PCI_DEVICE_ID_OMEGA_82C092G 0x1221\r
-#endif\r
-\r
-#ifndef PCI_VENDOR_ID_CIRRUS\r
-#define PCI_VENDOR_ID_CIRRUS 0x1013\r
-#endif\r
-#ifndef PCI_DEVICE_ID_CIRRUS_6729\r
-#define PCI_DEVICE_ID_CIRRUS_6729 0x1100\r
-#endif\r
-#ifndef PCI_DEVICE_ID_CIRRUS_6832\r
-#define PCI_DEVICE_ID_CIRRUS_6832 0x1110\r
-#endif\r
-\r
-#define PD67_MISC_CTL_1 0x16 /* Misc control 1 */\r
-#define PD67_FIFO_CTL 0x17 /* FIFO control */\r
-#define PD67_MISC_CTL_2 0x1E /* Misc control 2 */\r
-#define PD67_CHIP_INFO 0x1f /* Chip information */\r
-#define PD67_ATA_CTL 0x026 /* 6730: ATA control */\r
-#define PD67_EXT_INDEX 0x2e /* Extension index */\r
-#define PD67_EXT_DATA 0x2f /* Extension data */\r
-\r
-#define pd67_ext_get(s, r) \\r
- (i365_set(s, PD67_EXT_INDEX, r), i365_get(s, PD67_EXT_DATA))\r
-#define pd67_ext_set(s, r, v) \\r
- (i365_set(s, PD67_EXT_INDEX, r), i365_set(s, PD67_EXT_DATA, v))\r
-\r
-/* PD6722 extension registers -- indexed in PD67_EXT_INDEX */\r
-#define PD67_DATA_MASK0 0x01 /* Data mask 0 */\r
-#define PD67_DATA_MASK1 0x02 /* Data mask 1 */\r
-#define PD67_DMA_CTL 0x03 /* DMA control */\r
-\r
-/* PD6730 extension registers -- indexed in PD67_EXT_INDEX */\r
-#define PD67_EXT_CTL_1 0x03 /* Extension control 1 */\r
-#define PD67_MEM_PAGE(n) ((n)+5) /* PCI window bits 31:24 */\r
-#define PD67_EXTERN_DATA 0x0a\r
-#define PD67_EXT_CTL_2 0x0b\r
-#define PD67_MISC_CTL_3 0x25\r
-#define PD67_SMB_PWR_CTL 0x26\r
-\r
-/* I/O window address offset */\r
-#define PD67_IO_OFF(w) (0x36+((w)<<1))\r
-\r
-/* Timing register sets */\r
-#define PD67_TIME_SETUP(n) (0x3a + 3*(n))\r
-#define PD67_TIME_CMD(n) (0x3b + 3*(n))\r
-#define PD67_TIME_RECOV(n) (0x3c + 3*(n))\r
-\r
-/* Flags for PD67_MISC_CTL_1 */\r
-#define PD67_MC1_5V_DET 0x01 /* 5v detect */\r
-#define PD67_MC1_MEDIA_ENA 0x01 /* 6730: Multimedia enable */\r
-#define PD67_MC1_VCC_3V 0x02 /* 3.3v Vcc */\r
-#define PD67_MC1_PULSE_MGMT 0x04\r
-#define PD67_MC1_PULSE_IRQ 0x08\r
-#define PD67_MC1_SPKR_ENA 0x10\r
-#define PD67_MC1_INPACK_ENA 0x80\r
-\r
-/* Flags for PD67_FIFO_CTL */\r
-#define PD67_FIFO_EMPTY 0x80\r
-\r
-/* Flags for PD67_MISC_CTL_2 */\r
-#define PD67_MC2_FREQ_BYPASS 0x01\r
-#define PD67_MC2_DYNAMIC_MODE 0x02\r
-#define PD67_MC2_SUSPEND 0x04\r
-#define PD67_MC2_5V_CORE 0x08\r
-#define PD67_MC2_LED_ENA 0x10 /* IRQ 12 is LED enable */\r
-#define PD67_MC2_FAST_PCI 0x10 /* 6729: PCI bus > 25 MHz */\r
-#define PD67_MC2_3STATE_BIT7 0x20 /* Floppy change bit */\r
-#define PD67_MC2_DMA_MODE 0x40\r
-#define PD67_MC2_IRQ15_RI 0x80 /* IRQ 15 is ring enable */\r
-\r
-/* Flags for PD67_CHIP_INFO */\r
-#define PD67_INFO_SLOTS 0x20 /* 0 = 1 slot, 1 = 2 slots */\r
-#define PD67_INFO_CHIP_ID 0xc0\r
-#define PD67_INFO_REV 0x1c\r
-\r
-/* Fields in PD67_TIME_* registers */\r
-#define PD67_TIME_SCALE 0xc0\r
-#define PD67_TIME_SCALE_1 0x00\r
-#define PD67_TIME_SCALE_16 0x40\r
-#define PD67_TIME_SCALE_256 0x80\r
-#define PD67_TIME_SCALE_4096 0xc0\r
-#define PD67_TIME_MULT 0x3f\r
-\r
-/* Fields in PD67_DMA_CTL */\r
-#define PD67_DMA_MODE 0xc0\r
-#define PD67_DMA_OFF 0x00\r
-#define PD67_DMA_DREQ_INPACK 0x40\r
-#define PD67_DMA_DREQ_WP 0x80\r
-#define PD67_DMA_DREQ_BVD2 0xc0\r
-#define PD67_DMA_PULLUP 0x20 /* Disable socket pullups? */\r
-\r
-/* Fields in PD67_EXT_CTL_1 */\r
-#define PD67_EC1_VCC_PWR_LOCK 0x01\r
-#define PD67_EC1_AUTO_PWR_CLEAR 0x02\r
-#define PD67_EC1_LED_ENA 0x04\r
-#define PD67_EC1_INV_CARD_IRQ 0x08\r
-#define PD67_EC1_INV_MGMT_IRQ 0x10\r
-#define PD67_EC1_PULLUP_CTL 0x20\r
-\r
-/* Fields in PD67_EXTERN_DATA */\r
-#define PD67_EXD_VS1(s) (0x01 << ((s)<<1))\r
-#define PD67_EXD_VS2(s) (0x02 << ((s)<<1))\r
-\r
-/* Fields in PD67_EXT_CTL_2 */\r
-#define PD67_EC2_GPSTB_TOTEM 0x04\r
-#define PD67_EC2_GPSTB_IOR 0x08\r
-#define PD67_EC2_GPSTB_IOW 0x10\r
-#define PD67_EC2_GPSTB_HIGH 0x20\r
-\r
-/* Fields in PD67_MISC_CTL_3 */\r
-#define PD67_MC3_IRQ_MASK 0x03\r
-#define PD67_MC3_IRQ_PCPCI 0x00\r
-#define PD67_MC3_IRQ_EXTERN 0x01\r
-#define PD67_MC3_IRQ_PCIWAY 0x02\r
-#define PD67_MC3_IRQ_PCI 0x03\r
-#define PD67_MC3_PWR_MASK 0x0c\r
-#define PD67_MC3_PWR_SERIAL 0x00\r
-#define PD67_MC3_PWR_TI2202 0x08\r
-#define PD67_MC3_PWR_SMB 0x0c\r
-\r
-/* Register definitions for Cirrus PD6832 PCI-to-CardBus bridge */\r
-\r
-/* PD6832 extension registers -- indexed in PD67_EXT_INDEX */\r
-#define PD68_PCI_SPACE 0x22\r
-#define PD68_PCCARD_SPACE 0x23\r
-#define PD68_WINDOW_TYPE 0x24\r
-#define PD68_EXT_CSC 0x2e\r
-#define PD68_MISC_CTL_4 0x2f\r
-#define PD68_MISC_CTL_5 0x30\r
-#define PD68_MISC_CTL_6 0x31\r
-\r
-/* Extra flags in PD67_MISC_CTL_3 */\r
-#define PD68_MC3_HW_SUSP 0x10\r
-#define PD68_MC3_MM_EXPAND 0x40\r
-#define PD68_MC3_MM_ARM 0x80\r
-\r
-/* Bridge Control Register */\r
-#define PD6832_BCR_MGMT_IRQ_ENA 0x0800\r
-\r
-/* Socket Number Register */\r
-#define PD6832_SOCKET_NUMBER 0x004c /* 8 bit */\r
-\r
-/* Data structure for tracking vendor-specific state */\r
-typedef struct cirrus_state_t {\r
- u_char misc1; /* PD67_MISC_CTL_1 */\r
- u_char misc2; /* PD67_MISC_CTL_2 */\r
- u_char ectl1; /* PD67_EXT_CTL_1 */\r
- u_char timer[6]; /* PD67_TIME_* */\r
-} cirrus_state_t;\r
-\r
-#define CIRRUS_PCIC_ID \\r
- IS_PD6729, IS_PD6730, IS_PD6832\r
-\r
-#define CIRRUS_PCIC_INFO \\r
- { "Cirrus PD6729", IS_CIRRUS|IS_PCI, ID(CIRRUS, 6729) }, \\r
- { "Cirrus PD6730", IS_CIRRUS|IS_PCI, PCI_VENDOR_ID_CIRRUS, -1 }, \\r
- { "Cirrus PD6832", IS_CIRRUS|IS_CARDBUS, ID(CIRRUS, 6832) }\r
-\r
-/* Special bit in I365_IDENT used for Vadem chip detection */\r
-#define I365_IDENT_VADEM 0x08\r
-\r
-/* Special definitions in I365_POWER */\r
-#define VG468_VPP2_MASK 0x0c\r
-#define VG468_VPP2_5V 0x04\r
-#define VG468_VPP2_12V 0x08\r
-\r
-/* Unique Vadem registers */\r
-#define VG469_VSENSE 0x1f /* Card voltage sense */\r
-#define VG469_VSELECT 0x2f /* Card voltage select */\r
-#define VG468_CTL 0x38 /* Control register */\r
-#define VG468_TIMER 0x39 /* Timer control */\r
-#define VG468_MISC 0x3a /* Miscellaneous */\r
-#define VG468_GPIO_CFG 0x3b /* GPIO configuration */\r
-#define VG469_EXT_MODE 0x3c /* Extended mode register */\r
-#define VG468_SELECT 0x3d /* Programmable chip select */\r
-#define VG468_SELECT_CFG 0x3e /* Chip select configuration */\r
-#define VG468_ATA 0x3f /* ATA control */\r
-\r
-/* Flags for VG469_VSENSE */\r
-#define VG469_VSENSE_A_VS1 0x01\r
-#define VG469_VSENSE_A_VS2 0x02\r
-#define VG469_VSENSE_B_VS1 0x04\r
-#define VG469_VSENSE_B_VS2 0x08\r
-\r
-/* Flags for VG469_VSELECT */\r
-#define VG469_VSEL_VCC 0x03\r
-#define VG469_VSEL_5V 0x00\r
-#define VG469_VSEL_3V 0x03\r
-#define VG469_VSEL_MAX 0x0c\r
-#define VG469_VSEL_EXT_STAT 0x10\r
-#define VG469_VSEL_EXT_BUS 0x20\r
-#define VG469_VSEL_MIXED 0x40\r
-#define VG469_VSEL_ISA 0x80\r
-\r
-/* Flags for VG468_CTL */\r
-#define VG468_CTL_SLOW 0x01 /* 600ns memory timing */\r
-#define VG468_CTL_ASYNC 0x02 /* Asynchronous bus clocking */\r
-#define VG468_CTL_TSSI 0x08 /* Tri-state some outputs */\r
-#define VG468_CTL_DELAY 0x10 /* Card detect debounce */\r
-#define VG468_CTL_INPACK 0x20 /* Obey INPACK signal? */\r
-#define VG468_CTL_POLARITY 0x40 /* VCCEN polarity */\r
-#define VG468_CTL_COMPAT 0x80 /* Compatibility stuff */\r
-\r
-#define VG469_CTL_WS_COMPAT 0x04 /* Wait state compatibility */\r
-#define VG469_CTL_STRETCH 0x10 /* LED stretch */\r
-\r
-/* Flags for VG468_TIMER */\r
-#define VG468_TIMER_ZEROPWR 0x10 /* Zero power control */\r
-#define VG468_TIMER_SIGEN 0x20 /* Power up */\r
-#define VG468_TIMER_STATUS 0x40 /* Activity timer status */\r
-#define VG468_TIMER_RES 0x80 /* Timer resolution */\r
-#define VG468_TIMER_MASK 0x0f /* Activity timer timeout */\r
-\r
-/* Flags for VG468_MISC */\r
-#define VG468_MISC_GPIO 0x04 /* General-purpose IO */\r
-#define VG468_MISC_DMAWSB 0x08 /* DMA wait state control */\r
-#define VG469_MISC_LEDENA 0x10 /* LED enable */\r
-#define VG468_MISC_VADEMREV 0x40 /* Vadem revision control */\r
-#define VG468_MISC_UNLOCK 0x80 /* Unique register lock */\r
-\r
-/* Flags for VG469_EXT_MODE_A */\r
-#define VG469_MODE_VPPST 0x03 /* Vpp steering control */\r
-#define VG469_MODE_INT_SENSE 0x04 /* Internal voltage sense */\r
-#define VG469_MODE_CABLE 0x08\r
-#define VG469_MODE_COMPAT 0x10 /* i82365sl B or DF step */\r
-#define VG469_MODE_TEST 0x20\r
-#define VG469_MODE_RIO 0x40 /* Steer RIO to INTR? */\r
-\r
-/* Flags for VG469_EXT_MODE_B */\r
-#define VG469_MODE_B_3V 0x01 /* 3.3v for socket B */\r
-\r
-/* Data structure for tracking vendor-specific state */\r
-typedef struct vg46x_state_t {\r
- u_char ctl; /* VG468_CTL */\r
- u_char ema; /* VG468_EXT_MODE_A */\r
-} vg46x_state_t;\r
+/*
+ * PCMCIA bridge device probe
+ *
+ * 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
+ *
+ * The initial developer of the original code is David A. Hinds
+ * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
+ * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
+ *
+ * $Id: pcmcia.h,v 1.1 2004/01/25 09:34:59 riddles Exp $
+ *
+ */
+
+#define TCIC_BASE 0x240
+
+/* offsets of registers from TCIC_BASE */
+#define TCIC_DATA 0x00
+#define TCIC_ADDR 0x02
+#define TCIC_SCTRL 0x06
+#define TCIC_SSTAT 0x07
+#define TCIC_MODE 0x08
+#define TCIC_PWR 0x09
+#define TCIC_EDC 0x0A
+#define TCIC_ICSR 0x0C
+#define TCIC_IENA 0x0D
+#define TCIC_AUX 0x0E
+
+#define TCIC_SS_SHFT 12
+#define TCIC_SS_MASK 0x7000
+
+/* Flags for TCIC_ADDR */
+#define TCIC_ADR2_REG 0x8000
+#define TCIC_ADR2_INDREG 0x0800
+
+#define TCIC_ADDR_REG 0x80000000
+#define TCIC_ADDR_SS_SHFT (TCIC_SS_SHFT+16)
+#define TCIC_ADDR_SS_MASK (TCIC_SS_MASK<<16)
+#define TCIC_ADDR_INDREG 0x08000000
+#define TCIC_ADDR_IO 0x04000000
+#define TCIC_ADDR_MASK 0x03ffffff
+
+/* Flags for TCIC_SCTRL */
+#define TCIC_SCTRL_ENA 0x01
+#define TCIC_SCTRL_INCMODE 0x18
+#define TCIC_SCTRL_INCMODE_HOLD 0x00
+#define TCIC_SCTRL_INCMODE_WORD 0x08
+#define TCIC_SCTRL_INCMODE_REG 0x10
+#define TCIC_SCTRL_INCMODE_AUTO 0x18
+#define TCIC_SCTRL_EDCSUM 0x20
+#define TCIC_SCTRL_RESET 0x80
+
+/* Flags for TCIC_SSTAT */
+#define TCIC_SSTAT_6US 0x01
+#define TCIC_SSTAT_10US 0x02
+#define TCIC_SSTAT_PROGTIME 0x04
+#define TCIC_SSTAT_LBAT1 0x08
+#define TCIC_SSTAT_LBAT2 0x10
+#define TCIC_SSTAT_RDY 0x20 /* Inverted */
+#define TCIC_SSTAT_WP 0x40
+#define TCIC_SSTAT_CD 0x80 /* Card detect */
+
+/* Flags for TCIC_MODE */
+#define TCIC_MODE_PGMMASK 0x1f
+#define TCIC_MODE_NORMAL 0x00
+#define TCIC_MODE_PGMWR 0x01
+#define TCIC_MODE_PGMRD 0x02
+#define TCIC_MODE_PGMCE 0x04
+#define TCIC_MODE_PGMDBW 0x08
+#define TCIC_MODE_PGMWORD 0x10
+#define TCIC_MODE_AUXSEL_MASK 0xe0
+
+/* Registers accessed through TCIC_AUX, by setting TCIC_MODE */
+#define TCIC_AUX_TCTL (0<<5)
+#define TCIC_AUX_PCTL (1<<5)
+#define TCIC_AUX_WCTL (2<<5)
+#define TCIC_AUX_EXTERN (3<<5)
+#define TCIC_AUX_PDATA (4<<5)
+#define TCIC_AUX_SYSCFG (5<<5)
+#define TCIC_AUX_ILOCK (6<<5)
+#define TCIC_AUX_TEST (7<<5)
+
+/* Flags for TCIC_PWR */
+#define TCIC_PWR_VCC(sock) (0x01<<(sock))
+#define TCIC_PWR_VCC_MASK 0x03
+#define TCIC_PWR_VPP(sock) (0x08<<(sock))
+#define TCIC_PWR_VPP_MASK 0x18
+#define TCIC_PWR_CLIMENA 0x40
+#define TCIC_PWR_CLIMSTAT 0x80
+
+/* Flags for TCIC_ICSR */
+#define TCIC_ICSR_CLEAR 0x01
+#define TCIC_ICSR_SET 0x02
+#define TCIC_ICSR_JAM (TCIC_ICSR_CLEAR|TCIC_ICSR_SET)
+#define TCIC_ICSR_STOPCPU 0x04
+#define TCIC_ICSR_ILOCK 0x08
+#define TCIC_ICSR_PROGTIME 0x10
+#define TCIC_ICSR_ERR 0x20
+#define TCIC_ICSR_CDCHG 0x40
+#define TCIC_ICSR_IOCHK 0x80
+
+/* Flags for TCIC_IENA */
+#define TCIC_IENA_CFG_MASK 0x03
+#define TCIC_IENA_CFG_OFF 0x00 /* disabled */
+#define TCIC_IENA_CFG_OD 0x01 /* active low, open drain */
+#define TCIC_IENA_CFG_LOW 0x02 /* active low, totem pole */
+#define TCIC_IENA_CFG_HIGH 0x03 /* active high, totem pole */
+#define TCIC_IENA_ILOCK 0x08
+#define TCIC_IENA_PROGTIME 0x10
+#define TCIC_IENA_ERR 0x20 /* overcurrent or iochk */
+#define TCIC_IENA_CDCHG 0x40
+
+/* Flags for TCIC_AUX_WCTL */
+#define TCIC_WAIT_COUNT_MASK 0x001f
+#define TCIC_WAIT_ASYNC 0x0020
+#define TCIC_WAIT_SENSE 0x0040
+#define TCIC_WAIT_SRC 0x0080
+#define TCIC_WCTL_WR 0x0100
+#define TCIC_WCTL_RD 0x0200
+#define TCIC_WCTL_CE 0x0400
+#define TCIC_WCTL_LLBAT1 0x0800
+#define TCIC_WCTL_LLBAT2 0x1000
+#define TCIC_WCTL_LRDY 0x2000
+#define TCIC_WCTL_LWP 0x4000
+#define TCIC_WCTL_LCD 0x8000
+
+/* Flags for TCIC_AUX_SYSCFG */
+#define TCIC_SYSCFG_IRQ_MASK 0x000f
+#define TCIC_SYSCFG_MCSFULL 0x0010
+#define TCIC_SYSCFG_IO1723 0x0020
+#define TCIC_SYSCFG_MCSXB 0x0040
+#define TCIC_SYSCFG_ICSXB 0x0080
+#define TCIC_SYSCFG_NOPDN 0x0100
+#define TCIC_SYSCFG_MPSEL_SHFT 9
+#define TCIC_SYSCFG_MPSEL_MASK 0x0e00
+#define TCIC_SYSCFG_MPSENSE 0x2000
+#define TCIC_SYSCFG_AUTOBUSY 0x4000
+#define TCIC_SYSCFG_ACC 0x8000
+
+#define TCIC_ILOCK_OUT 0x01
+#define TCIC_ILOCK_SENSE 0x02
+#define TCIC_ILOCK_CRESET 0x04
+#define TCIC_ILOCK_CRESENA 0x08
+#define TCIC_ILOCK_CWAIT 0x10
+#define TCIC_ILOCK_CWAITSNS 0x20
+#define TCIC_ILOCK_HOLD_MASK 0xc0
+#define TCIC_ILOCK_HOLD_CCLK 0xc0
+
+#define TCIC_ILOCKTEST_ID_SH 8
+#define TCIC_ILOCKTEST_ID_MASK 0x7f00
+#define TCIC_ILOCKTEST_MCIC_1 0x8000
+
+#define TCIC_ID_DB86082 0x02
+#define TCIC_ID_DB86082A 0x03
+#define TCIC_ID_DB86084 0x04
+#define TCIC_ID_DB86084A 0x08
+#define TCIC_ID_DB86072 0x15
+#define TCIC_ID_DB86184 0x14
+#define TCIC_ID_DB86082B 0x17
+
+#define TCIC_TEST_DIAG 0x8000
+
+/*
+ * Indirectly addressed registers
+ */
+
+#define TCIC_SCF1(sock) ((sock)<<3)
+#define TCIC_SCF2(sock) (((sock)<<3)+2)
+
+/* Flags for SCF1 */
+#define TCIC_SCF1_IRQ_MASK 0x000f
+#define TCIC_SCF1_IRQ_OFF 0x0000
+#define TCIC_SCF1_IRQOC 0x0010
+#define TCIC_SCF1_PCVT 0x0020
+#define TCIC_SCF1_IRDY 0x0040
+#define TCIC_SCF1_ATA 0x0080
+#define TCIC_SCF1_DMA_SHIFT 8
+#define TCIC_SCF1_DMA_MASK 0x0700
+#define TCIC_SCF1_DMA_OFF 0
+#define TCIC_SCF1_DREQ2 2
+#define TCIC_SCF1_IOSTS 0x0800
+#define TCIC_SCF1_SPKR 0x1000
+#define TCIC_SCF1_FINPACK 0x2000
+#define TCIC_SCF1_DELWR 0x4000
+#define TCIC_SCF1_HD7IDE 0x8000
+
+/* Flags for SCF2 */
+#define TCIC_SCF2_RI 0x0001
+#define TCIC_SCF2_IDBR 0x0002
+#define TCIC_SCF2_MDBR 0x0004
+#define TCIC_SCF2_MLBAT1 0x0008
+#define TCIC_SCF2_MLBAT2 0x0010
+#define TCIC_SCF2_MRDY 0x0020
+#define TCIC_SCF2_MWP 0x0040
+#define TCIC_SCF2_MCD 0x0080
+#define TCIC_SCF2_MALL 0x00f8
+
+/* Indirect addresses for memory window registers */
+#define TCIC_MWIN(sock,map) (0x100+(((map)+((sock)<<2))<<3))
+#define TCIC_MBASE_X 2
+#define TCIC_MMAP_X 4
+#define TCIC_MCTL_X 6
+
+#define TCIC_MBASE_4K_BIT 0x4000
+#define TCIC_MBASE_HA_SHFT 12
+#define TCIC_MBASE_HA_MASK 0x0fff
+
+#define TCIC_MMAP_REG 0x8000
+#define TCIC_MMAP_CA_SHFT 12
+#define TCIC_MMAP_CA_MASK 0x3fff
+
+#define TCIC_MCTL_WSCNT_MASK 0x001f
+#define TCIC_MCTL_WCLK 0x0020
+#define TCIC_MCTL_WCLK_CCLK 0x0000
+#define TCIC_MCTL_WCLK_BCLK 0x0020
+#define TCIC_MCTL_QUIET 0x0040
+#define TCIC_MCTL_WP 0x0080
+#define TCIC_MCTL_ACC 0x0100
+#define TCIC_MCTL_KE 0x0200
+#define TCIC_MCTL_EDC 0x0400
+#define TCIC_MCTL_B8 0x0800
+#define TCIC_MCTL_SS_SHFT TCIC_SS_SHFT
+#define TCIC_MCTL_SS_MASK TCIC_SS_MASK
+#define TCIC_MCTL_ENA 0x8000
+
+/* Indirect addresses for I/O window registers */
+#define TCIC_IWIN(sock,map) (0x200+(((map)+((sock)<<1))<<2))
+#define TCIC_IBASE_X 0
+#define TCIC_ICTL_X 2
+
+#define TCIC_ICTL_WSCNT_MASK TCIC_MCTL_WSCNT_MASK
+#define TCIC_ICTL_QUIET TCIC_MCTL_QUIET
+#define TCIC_ICTL_1K 0x0080
+#define TCIC_ICTL_PASS16 0x0100
+#define TCIC_ICTL_ACC TCIC_MCTL_ACC
+#define TCIC_ICTL_TINY 0x0200
+#define TCIC_ICTL_B16 0x0400
+#define TCIC_ICTL_B8 TCIC_MCTL_B8
+#define TCIC_ICTL_BW_MASK (TCIC_ICTL_B16|TCIC_ICTL_B8)
+#define TCIC_ICTL_BW_DYN 0
+#define TCIC_ICTL_BW_8 TCIC_ICTL_B8
+#define TCIC_ICTL_BW_16 TCIC_ICTL_B16
+#define TCIC_ICTL_BW_ATA (TCIC_ICTL_B16|TCIC_ICTL_B8)
+#define TCIC_ICTL_SS_SHFT TCIC_SS_SHFT
+#define TCIC_ICTL_SS_MASK TCIC_SS_MASK
+#define TCIC_ICTL_ENA TCIC_MCTL_ENA
+
+/* register definitions for the Intel 82365SL PCMCIA controller */
+
+/* Offsets for PCIC registers */
+#define I365_IDENT 0x00 /* Identification and revision */
+#define I365_STATUS 0x01 /* Interface status */
+#define I365_POWER 0x02 /* Power and RESETDRV control */
+#define I365_INTCTL 0x03 /* Interrupt and general control */
+#define I365_CSC 0x04 /* Card status change */
+#define I365_CSCINT 0x05 /* Card status change interrupt control */
+#define I365_ADDRWIN 0x06 /* Address window enable */
+#define I365_IOCTL 0x07 /* I/O control */
+#define I365_GENCTL 0x16 /* Card detect and general control */
+#define I365_GBLCTL 0x1E /* Global control register */
+
+/* Offsets for I/O and memory window registers */
+#define I365_IO(map) (0x08+((map)<<2))
+#define I365_MEM(map) (0x10+((map)<<3))
+#define I365_W_START 0
+#define I365_W_STOP 2
+#define I365_W_OFF 4
+
+/* Flags for I365_STATUS */
+#define I365_CS_BVD1 0x01
+#define I365_CS_STSCHG 0x01
+#define I365_CS_BVD2 0x02
+#define I365_CS_SPKR 0x02
+#define I365_CS_DETECT 0x0C
+#define I365_CS_WRPROT 0x10
+#define I365_CS_READY 0x20 /* Inverted */
+#define I365_CS_POWERON 0x40
+#define I365_CS_GPI 0x80
+
+/* Flags for I365_POWER */
+#define I365_PWR_OFF 0x00 /* Turn off the socket */
+#define I365_PWR_OUT 0x80 /* Output enable */
+#define I365_PWR_NORESET 0x40 /* Disable RESETDRV on resume */
+#define I365_PWR_AUTO 0x20 /* Auto pwr switch enable */
+#define I365_VCC_MASK 0x18 /* Mask for turning off Vcc */
+/* There are different layouts for B-step and DF-step chips: the B
+ step has independent Vpp1/Vpp2 control, and the DF step has only
+ Vpp1 control, plus 3V control */
+#define I365_VCC_5V 0x10 /* Vcc = 5.0v */
+#define I365_VCC_3V 0x18 /* Vcc = 3.3v */
+#define I365_VPP2_MASK 0x0c /* Mask for turning off Vpp2 */
+#define I365_VPP2_5V 0x04 /* Vpp2 = 5.0v */
+#define I365_VPP2_12V 0x08 /* Vpp2 = 12.0v */
+#define I365_VPP1_MASK 0x03 /* Mask for turning off Vpp1 */
+#define I365_VPP1_5V 0x01 /* Vpp2 = 5.0v */
+#define I365_VPP1_12V 0x02 /* Vpp2 = 12.0v */
+
+/* Flags for I365_INTCTL */
+#define I365_RING_ENA 0x80
+#define I365_PC_RESET 0x40
+#define I365_PC_IOCARD 0x20
+#define I365_INTR_ENA 0x10
+#define I365_IRQ_MASK 0x0F
+
+/* Flags for I365_CSC and I365_CSCINT*/
+#define I365_CSC_BVD1 0x01
+#define I365_CSC_STSCHG 0x01
+#define I365_CSC_BVD2 0x02
+#define I365_CSC_READY 0x04
+#define I365_CSC_DETECT 0x08
+#define I365_CSC_ANY 0x0F
+#define I365_CSC_GPI 0x10
+
+/* Flags for I365_ADDRWIN */
+#define I365_ADDR_MEMCS16 0x20
+#define I365_ENA_IO(map) (0x40 << (map))
+#define I365_ENA_MEM(map) (0x01 << (map))
+
+/* Flags for I365_IOCTL */
+#define I365_IOCTL_MASK(map) (0x0F << (map<<2))
+#define I365_IOCTL_WAIT(map) (0x08 << (map<<2))
+#define I365_IOCTL_0WS(map) (0x04 << (map<<2))
+#define I365_IOCTL_IOCS16(map) (0x02 << (map<<2))
+#define I365_IOCTL_16BIT(map) (0x01 << (map<<2))
+
+/* Flags for I365_GENCTL */
+#define I365_CTL_16DELAY 0x01
+#define I365_CTL_RESET 0x02
+#define I365_CTL_GPI_ENA 0x04
+#define I365_CTL_GPI_CTL 0x08
+#define I365_CTL_RESUME 0x10
+#define I365_CTL_SW_IRQ 0x20
+
+/* Flags for I365_GBLCTL */
+#define I365_GBL_PWRDOWN 0x01
+#define I365_GBL_CSC_LEV 0x02
+#define I365_GBL_WRBACK 0x04
+#define I365_GBL_IRQ_0_LEV 0x08
+#define I365_GBL_IRQ_1_LEV 0x10
+
+/* Flags for memory window registers */
+#define I365_MEM_16BIT 0x8000 /* In memory start high byte */
+#define I365_MEM_0WS 0x4000
+#define I365_MEM_WS1 0x8000 /* In memory stop high byte */
+#define I365_MEM_WS0 0x4000
+#define I365_MEM_WRPROT 0x8000 /* In offset high byte */
+#define I365_MEM_REG 0x4000
+
+#define I365_REG(slot, reg) (((slot) << 6) | (reg))
+
+/* Default ISA interrupt mask */
+#define I365_ISA_IRQ_MASK 0xdeb8 /* irq's 3-5,7,9-12,14,15 */
+
+/* Device ID's for PCI-to-PCMCIA bridges */
+
+#ifndef PCI_VENDOR_ID_INTEL
+#define PCI_VENDOR_ID_INTEL 0x8086
+#endif
+#ifndef PCI_DEVICE_ID_INTEL_82092AA_0
+#define PCI_DEVICE_ID_INTEL_82092AA_0 0x1221
+#endif
+#ifndef PCI_VENDOR_ID_OMEGA
+#define PCI_VENDOR_ID_OMEGA 0x119b
+#endif
+#ifndef PCI_DEVICE_ID_OMEGA_82C092G
+#define PCI_DEVICE_ID_OMEGA_82C092G 0x1221
+#endif
+
+#ifndef PCI_VENDOR_ID_CIRRUS
+#define PCI_VENDOR_ID_CIRRUS 0x1013
+#endif
+#ifndef PCI_DEVICE_ID_CIRRUS_6729
+#define PCI_DEVICE_ID_CIRRUS_6729 0x1100
+#endif
+#ifndef PCI_DEVICE_ID_CIRRUS_6832
+#define PCI_DEVICE_ID_CIRRUS_6832 0x1110
+#endif
+
+#define PD67_MISC_CTL_1 0x16 /* Misc control 1 */
+#define PD67_FIFO_CTL 0x17 /* FIFO control */
+#define PD67_MISC_CTL_2 0x1E /* Misc control 2 */
+#define PD67_CHIP_INFO 0x1f /* Chip information */
+#define PD67_ATA_CTL 0x026 /* 6730: ATA control */
+#define PD67_EXT_INDEX 0x2e /* Extension index */
+#define PD67_EXT_DATA 0x2f /* Extension data */
+
+#define pd67_ext_get(s, r) \
+ (i365_set(s, PD67_EXT_INDEX, r), i365_get(s, PD67_EXT_DATA))
+#define pd67_ext_set(s, r, v) \
+ (i365_set(s, PD67_EXT_INDEX, r), i365_set(s, PD67_EXT_DATA, v))
+
+/* PD6722 extension registers -- indexed in PD67_EXT_INDEX */
+#define PD67_DATA_MASK0 0x01 /* Data mask 0 */
+#define PD67_DATA_MASK1 0x02 /* Data mask 1 */
+#define PD67_DMA_CTL 0x03 /* DMA control */
+
+/* PD6730 extension registers -- indexed in PD67_EXT_INDEX */
+#define PD67_EXT_CTL_1 0x03 /* Extension control 1 */
+#define PD67_MEM_PAGE(n) ((n)+5) /* PCI window bits 31:24 */
+#define PD67_EXTERN_DATA 0x0a
+#define PD67_EXT_CTL_2 0x0b
+#define PD67_MISC_CTL_3 0x25
+#define PD67_SMB_PWR_CTL 0x26
+
+/* I/O window address offset */
+#define PD67_IO_OFF(w) (0x36+((w)<<1))
+
+/* Timing register sets */
+#define PD67_TIME_SETUP(n) (0x3a + 3*(n))
+#define PD67_TIME_CMD(n) (0x3b + 3*(n))
+#define PD67_TIME_RECOV(n) (0x3c + 3*(n))
+
+/* Flags for PD67_MISC_CTL_1 */
+#define PD67_MC1_5V_DET 0x01 /* 5v detect */
+#define PD67_MC1_MEDIA_ENA 0x01 /* 6730: Multimedia enable */
+#define PD67_MC1_VCC_3V 0x02 /* 3.3v Vcc */
+#define PD67_MC1_PULSE_MGMT 0x04
+#define PD67_MC1_PULSE_IRQ 0x08
+#define PD67_MC1_SPKR_ENA 0x10
+#define PD67_MC1_INPACK_ENA 0x80
+
+/* Flags for PD67_FIFO_CTL */
+#define PD67_FIFO_EMPTY 0x80
+
+/* Flags for PD67_MISC_CTL_2 */
+#define PD67_MC2_FREQ_BYPASS 0x01
+#define PD67_MC2_DYNAMIC_MODE 0x02
+#define PD67_MC2_SUSPEND 0x04
+#define PD67_MC2_5V_CORE 0x08
+#define PD67_MC2_LED_ENA 0x10 /* IRQ 12 is LED enable */
+#define PD67_MC2_FAST_PCI 0x10 /* 6729: PCI bus > 25 MHz */
+#define PD67_MC2_3STATE_BIT7 0x20 /* Floppy change bit */
+#define PD67_MC2_DMA_MODE 0x40
+#define PD67_MC2_IRQ15_RI 0x80 /* IRQ 15 is ring enable */
+
+/* Flags for PD67_CHIP_INFO */
+#define PD67_INFO_SLOTS 0x20 /* 0 = 1 slot, 1 = 2 slots */
+#define PD67_INFO_CHIP_ID 0xc0
+#define PD67_INFO_REV 0x1c
+
+/* Fields in PD67_TIME_* registers */
+#define PD67_TIME_SCALE 0xc0
+#define PD67_TIME_SCALE_1 0x00
+#define PD67_TIME_SCALE_16 0x40
+#define PD67_TIME_SCALE_256 0x80
+#define PD67_TIME_SCALE_4096 0xc0
+#define PD67_TIME_MULT 0x3f
+
+/* Fields in PD67_DMA_CTL */
+#define PD67_DMA_MODE 0xc0
+#define PD67_DMA_OFF 0x00
+#define PD67_DMA_DREQ_INPACK 0x40
+#define PD67_DMA_DREQ_WP 0x80
+#define PD67_DMA_DREQ_BVD2 0xc0
+#define PD67_DMA_PULLUP 0x20 /* Disable socket pullups? */
+
+/* Fields in PD67_EXT_CTL_1 */
+#define PD67_EC1_VCC_PWR_LOCK 0x01
+#define PD67_EC1_AUTO_PWR_CLEAR 0x02
+#define PD67_EC1_LED_ENA 0x04
+#define PD67_EC1_INV_CARD_IRQ 0x08
+#define PD67_EC1_INV_MGMT_IRQ 0x10
+#define PD67_EC1_PULLUP_CTL 0x20
+
+/* Fields in PD67_EXTERN_DATA */
+#define PD67_EXD_VS1(s) (0x01 << ((s)<<1))
+#define PD67_EXD_VS2(s) (0x02 << ((s)<<1))
+
+/* Fields in PD67_EXT_CTL_2 */
+#define PD67_EC2_GPSTB_TOTEM 0x04
+#define PD67_EC2_GPSTB_IOR 0x08
+#define PD67_EC2_GPSTB_IOW 0x10
+#define PD67_EC2_GPSTB_HIGH 0x20
+
+/* Fields in PD67_MISC_CTL_3 */
+#define PD67_MC3_IRQ_MASK 0x03
+#define PD67_MC3_IRQ_PCPCI 0x00
+#define PD67_MC3_IRQ_EXTERN 0x01
+#define PD67_MC3_IRQ_PCIWAY 0x02
+#define PD67_MC3_IRQ_PCI 0x03
+#define PD67_MC3_PWR_MASK 0x0c
+#define PD67_MC3_PWR_SERIAL 0x00
+#define PD67_MC3_PWR_TI2202 0x08
+#define PD67_MC3_PWR_SMB 0x0c
+
+/* Register definitions for Cirrus PD6832 PCI-to-CardBus bridge */
+
+/* PD6832 extension registers -- indexed in PD67_EXT_INDEX */
+#define PD68_PCI_SPACE 0x22
+#define PD68_PCCARD_SPACE 0x23
+#define PD68_WINDOW_TYPE 0x24
+#define PD68_EXT_CSC 0x2e
+#define PD68_MISC_CTL_4 0x2f
+#define PD68_MISC_CTL_5 0x30
+#define PD68_MISC_CTL_6 0x31
+
+/* Extra flags in PD67_MISC_CTL_3 */
+#define PD68_MC3_HW_SUSP 0x10
+#define PD68_MC3_MM_EXPAND 0x40
+#define PD68_MC3_MM_ARM 0x80
+
+/* Bridge Control Register */
+#define PD6832_BCR_MGMT_IRQ_ENA 0x0800
+
+/* Socket Number Register */
+#define PD6832_SOCKET_NUMBER 0x004c /* 8 bit */
+
+/* Data structure for tracking vendor-specific state */
+typedef struct cirrus_state_t {
+ u_char misc1; /* PD67_MISC_CTL_1 */
+ u_char misc2; /* PD67_MISC_CTL_2 */
+ u_char ectl1; /* PD67_EXT_CTL_1 */
+ u_char timer[6]; /* PD67_TIME_* */
+} cirrus_state_t;
+
+#define CIRRUS_PCIC_ID \
+ IS_PD6729, IS_PD6730, IS_PD6832
+
+#define CIRRUS_PCIC_INFO \
+ { "Cirrus PD6729", IS_CIRRUS|IS_PCI, ID(CIRRUS, 6729) }, \
+ { "Cirrus PD6730", IS_CIRRUS|IS_PCI, PCI_VENDOR_ID_CIRRUS, -1 }, \
+ { "Cirrus PD6832", IS_CIRRUS|IS_CARDBUS, ID(CIRRUS, 6832) }
+
+/* Special bit in I365_IDENT used for Vadem chip detection */
+#define I365_IDENT_VADEM 0x08
+
+/* Special definitions in I365_POWER */
+#define VG468_VPP2_MASK 0x0c
+#define VG468_VPP2_5V 0x04
+#define VG468_VPP2_12V 0x08
+
+/* Unique Vadem registers */
+#define VG469_VSENSE 0x1f /* Card voltage sense */
+#define VG469_VSELECT 0x2f /* Card voltage select */
+#define VG468_CTL 0x38 /* Control register */
+#define VG468_TIMER 0x39 /* Timer control */
+#define VG468_MISC 0x3a /* Miscellaneous */
+#define VG468_GPIO_CFG 0x3b /* GPIO configuration */
+#define VG469_EXT_MODE 0x3c /* Extended mode register */
+#define VG468_SELECT 0x3d /* Programmable chip select */
+#define VG468_SELECT_CFG 0x3e /* Chip select configuration */
+#define VG468_ATA 0x3f /* ATA control */
+
+/* Flags for VG469_VSENSE */
+#define VG469_VSENSE_A_VS1 0x01
+#define VG469_VSENSE_A_VS2 0x02
+#define VG469_VSENSE_B_VS1 0x04
+#define VG469_VSENSE_B_VS2 0x08
+
+/* Flags for VG469_VSELECT */
+#define VG469_VSEL_VCC 0x03
+#define VG469_VSEL_5V 0x00
+#define VG469_VSEL_3V 0x03
+#define VG469_VSEL_MAX 0x0c
+#define VG469_VSEL_EXT_STAT 0x10
+#define VG469_VSEL_EXT_BUS 0x20
+#define VG469_VSEL_MIXED 0x40
+#define VG469_VSEL_ISA 0x80
+
+/* Flags for VG468_CTL */
+#define VG468_CTL_SLOW 0x01 /* 600ns memory timing */
+#define VG468_CTL_ASYNC 0x02 /* Asynchronous bus clocking */
+#define VG468_CTL_TSSI 0x08 /* Tri-state some outputs */
+#define VG468_CTL_DELAY 0x10 /* Card detect debounce */
+#define VG468_CTL_INPACK 0x20 /* Obey INPACK signal? */
+#define VG468_CTL_POLARITY 0x40 /* VCCEN polarity */
+#define VG468_CTL_COMPAT 0x80 /* Compatibility stuff */
+
+#define VG469_CTL_WS_COMPAT 0x04 /* Wait state compatibility */
+#define VG469_CTL_STRETCH 0x10 /* LED stretch */
+
+/* Flags for VG468_TIMER */
+#define VG468_TIMER_ZEROPWR 0x10 /* Zero power control */
+#define VG468_TIMER_SIGEN 0x20 /* Power up */
+#define VG468_TIMER_STATUS 0x40 /* Activity timer status */
+#define VG468_TIMER_RES 0x80 /* Timer resolution */
+#define VG468_TIMER_MASK 0x0f /* Activity timer timeout */
+
+/* Flags for VG468_MISC */
+#define VG468_MISC_GPIO 0x04 /* General-purpose IO */
+#define VG468_MISC_DMAWSB 0x08 /* DMA wait state control */
+#define VG469_MISC_LEDENA 0x10 /* LED enable */
+#define VG468_MISC_VADEMREV 0x40 /* Vadem revision control */
+#define VG468_MISC_UNLOCK 0x80 /* Unique register lock */
+
+/* Flags for VG469_EXT_MODE_A */
+#define VG469_MODE_VPPST 0x03 /* Vpp steering control */
+#define VG469_MODE_INT_SENSE 0x04 /* Internal voltage sense */
+#define VG469_MODE_CABLE 0x08
+#define VG469_MODE_COMPAT 0x10 /* i82365sl B or DF step */
+#define VG469_MODE_TEST 0x20
+#define VG469_MODE_RIO 0x40 /* Steer RIO to INTR? */
+
+/* Flags for VG469_EXT_MODE_B */
+#define VG469_MODE_B_3V 0x01 /* 3.3v for socket B */
+
+/* Data structure for tracking vendor-specific state */
+typedef struct vg46x_state_t {
+ u_char ctl; /* VG468_CTL */
+ u_char ema; /* VG468_EXT_MODE_A */
+} vg46x_state_t;
-#!/bin/sh\r
-OLDDIR=`pwd`\r
-cd /lib/modules/*/kernel/drivers/scsi\r
-/bin/modprobe scsi_mod.o.gz > /dev/null 2>&1\r
-/bin/modprobe sd_mod.o.gz > /dev/null 2>&1\r
-/bin/modprobe sr_mod.o.gz > /dev/null 2>&1\r
-/bin/modprobe sg.o.gz > /dev/null 2>&1\r
-/bin/modprobe libata.o.gz > /dev/null 2>&1\r
-echo "Trying cpqarray"; \r
-if /bin/modprobe cpqarray > /dev/null 2>&1; then\r
- echo "cpqarray.o.gz" > /scsidriver;\r
- exit 0;\r
-fi\r
-echo "Trying cciss";\r
-if /bin/modprobe cciss > /dev/null 2>&1; then\r
- echo "cciss.o.gz" > /scsidriver;\r
- exit 0;\r
-fi\r
-echo "Trying DAC960";\r
-if /bin/modprobe DAC960 > /dev/null 2>&1; then\r
- echo "DAC960.o.gz" > /scsidriver;\r
- exit 0;\r
-fi\r
-/bin/modprobe ataraid.o.gz > /dev/null 2>&1\r
-echo "Trying medley";\r
-if /bin/modprobe medley > /dev/null 2>&1; then\r
- echo "medley.o.gz" > /scsidriver;\r
- exit 0;\r
-fi\r
-echo "Trying hptraid";\r
-if /bin/modprobe hptraid > /dev/null 2>&1; then\r
- echo "hptraid.o.gz" > /scsidriver;\r
- exit 0;\r
-fi\r
-echo "Trying pdcraid";\r
-if /bin/modprobe pdcraid > /dev/null 2>&1; then\r
- echo "pdcraid.o.gz" > /scsidriver;\r
- exit 0;\r
-fi\r
-echo "Trying silraid";\r
-if /bin/modprobe silraid > /dev/null 2>&1; then\r
- echo "silraid.o.gz" > /scsidriver;\r
- exit 0;\r
-fi\r
-for i in * message/fusion/mptscsih.o.gz ; \r
-do \r
-# Skip the generic scsi modules and ancillary support modules\r
-# Added eata_dma to skip list because it crashes some machines. Probe last.\r
-if [ $i != "scsi_mod.o.gz" -a $i != "sd_mod.o.gz" -a $i != "sg.o.gz" -a $i != "sr_mod.o.gz" -a $i != "53c700.o.gz" -a $i != "NCR53C9x.o.gz" -a $i != "eata_dma.o.gz" -a $i != "libata.o.gz" ]; then\r
- DRIVER=`echo $i | sed 's/.o.gz//'`\r
- echo "Trying $DRIVER"; \r
- if /bin/modprobe $DRIVER > /dev/null 2>&1; then\r
- echo $i > /scsidriver;\r
- /bin/cat /proc/scsi/scsi;\r
- exit 0;\r
- fi;\r
-fi;\r
-done\r
-echo "Trying eata_dma";\r
-if /bin/modprobe eata_dma > /dev/null 2>&1; then\r
- echo "eata_dma.o.gz" > /scsidriver;\r
- exit 0;\r
-fi\r
-cd $OLDDIR\r
+#!/bin/sh
+OLDDIR=`pwd`
+cd /lib/modules/*/kernel/drivers/scsi
+/bin/modprobe scsi_mod.o.gz > /dev/null 2>&1
+/bin/modprobe sd_mod.o.gz > /dev/null 2>&1
+/bin/modprobe sr_mod.o.gz > /dev/null 2>&1
+/bin/modprobe sg.o.gz > /dev/null 2>&1
+/bin/modprobe libata.o.gz > /dev/null 2>&1
+echo "Trying cpqarray";
+if /bin/modprobe cpqarray > /dev/null 2>&1; then
+ echo "cpqarray.o.gz" > /scsidriver;
+ exit 0;
+fi
+echo "Trying cciss";
+if /bin/modprobe cciss > /dev/null 2>&1; then
+ echo "cciss.o.gz" > /scsidriver;
+ exit 0;
+fi
+echo "Trying DAC960";
+if /bin/modprobe DAC960 > /dev/null 2>&1; then
+ echo "DAC960.o.gz" > /scsidriver;
+ exit 0;
+fi
+/bin/modprobe ataraid.o.gz > /dev/null 2>&1
+echo "Trying medley";
+if /bin/modprobe medley > /dev/null 2>&1; then
+ echo "medley.o.gz" > /scsidriver;
+ exit 0;
+fi
+echo "Trying hptraid";
+if /bin/modprobe hptraid > /dev/null 2>&1; then
+ echo "hptraid.o.gz" > /scsidriver;
+ exit 0;
+fi
+echo "Trying pdcraid";
+if /bin/modprobe pdcraid > /dev/null 2>&1; then
+ echo "pdcraid.o.gz" > /scsidriver;
+ exit 0;
+fi
+echo "Trying silraid";
+if /bin/modprobe silraid > /dev/null 2>&1; then
+ echo "silraid.o.gz" > /scsidriver;
+ exit 0;
+fi
+for i in * message/fusion/mptscsih.o.gz ;
+do
+# Skip the generic scsi modules and ancillary support modules
+# Added eata_dma to skip list because it crashes some machines. Probe last.
+if [ $i != "scsi_mod.o.gz" -a $i != "sd_mod.o.gz" -a $i != "sg.o.gz" -a $i != "sr_mod.o.gz" -a $i != "53c700.o.gz" -a $i != "NCR53C9x.o.gz" -a $i != "eata_dma.o.gz" -a $i != "libata.o.gz" ]; then
+ DRIVER=`echo $i | sed 's/.o.gz//'`
+ echo "Trying $DRIVER";
+ if /bin/modprobe $DRIVER > /dev/null 2>&1; then
+ echo $i > /scsidriver;
+ /bin/cat /proc/scsi/scsi;
+ exit 0;
+ fi;
+fi;
+done
+echo "Trying eata_dma";
+if /bin/modprobe eata_dma > /dev/null 2>&1; then
+ echo "eata_dma.o.gz" > /scsidriver;
+ exit 0;
+fi
+cd $OLDDIR
-/* IPCop install program.\r
- *\r
- * This program is distributed under the terms of the GNU General Public\r
- * Licence. See the file COPYING for details.\r
- *\r
- * (c) Alan Hourihane, 2003 <alanh@fairlite.demon.co.uk>\r
- * \r
- * $Id: scsi.c\r
- * \r
- */\r
-\r
-#include "install.h"\r
-\r
-int\r
-try_scsi(char *disk_device)\r
-{\r
- int fd;\r
- char dev[10];\r
-\r
- sprintf(dev, "/dev/%s", disk_device);\r
-\r
- if ((fd = open(dev, O_RDONLY)) < 0)\r
- return 0;\r
-\r
- close(fd);\r
- // remove usb scsi\r
- return ( checkusb(disk_device) ? 0:1 );\r
-}\r
+/* IPCop install program.
+ *
+ * This program is distributed under the terms of the GNU General Public
+ * Licence. See the file COPYING for details.
+ *
+ * (c) Alan Hourihane, 2003 <alanh@fairlite.demon.co.uk>
+ *
+ * $Id: scsi.c
+ *
+ */
+
+#include "install.h"
+
+int
+try_scsi(char *disk_device)
+{
+ int fd;
+ char dev[10];
+
+ sprintf(dev, "/dev/%s", disk_device);
+
+ if ((fd = open(dev, O_RDONLY)) < 0)
+ return 0;
+
+ close(fd);
+ // remove usb scsi
+ return ( checkusb(disk_device) ? 0:1 );
+}
-/*\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-v12-v13.c,v 1.2.2.3 2004/11/11 09:39:25 alanh Exp $\r
- * \r
- */\r
-\r
-#include "install.h"\r
-\r
-void _convert_ppp_settings() {\r
- DIR *dirp;\r
- struct dirent *dp;\r
- char filename[STRING_SIZE];\r
- \r
- dirp = opendir( "/harddisk/var/ipcop/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/var/ipcop/ppp", dp->d_name);\r
-\r
- /* reduce furthur replacements from commands below */\r
- replace (filename, "TYPE=modem", "");\r
- replace (filename, "COMPORT=ttyS0", "TYPE=modem\nCOMPORT=ttyS0");\r
- replace (filename, "COMPORT=ttyS1", "TYPE=modem\nCOMPORT=ttyS1");\r
- replace (filename, "COMPORT=ttyS2", "TYPE=modem\nCOMPORT=ttyS2");\r
- replace (filename, "COMPORT=ttyS3", "TYPE=modem\nCOMPORT=ttyS3");\r
- /* reduce furthur replacements from commands below */\r
- replace (filename, "TYPE=isdn", "");\r
- replace (filename, "COMPORT=isdn1", "TYPE=isdn\nCOMPORT=isdn1");\r
- replace (filename, "COMPORT=isdn2", "TYPE=isdn\nCOMPORT=isdn2");\r
- replace (filename, "COMPORT=pppoe", "TYPE=pppoe");\r
- replace (filename, "COMPORT=pptp", "TYPE=pptp");\r
- replace (filename, "COMPORT=usbadsl", "TYPE=alcatelusb");\r
- replace (filename, "COMPORT=pppoa", "TYPE=pulsardsl");\r
-\r
- chown (filename, 99, 99);\r
- } \r
- }\r
- (void) closedir( dirp );\r
-}\r
-\r
-int _convert_xtaccess() {\r
- int count=1, count2=0;\r
- FILE *portfw1, *portfw2;\r
- char portsrctemp[STRING_SIZE], portdsttemp[STRING_SIZE];\r
- char *portproto, *portsrcip, *portsrcport, *portdstip, *portdstport, *portenabled, *portremip;\r
-\r
- FILE *xtaccess1, *xtaccess2;\r
- char xtsrctemp[STRING_SIZE], xtdsttemp[STRING_SIZE];\r
- char *xtproto, *xtsrcip, *xtdstip, *xtdstport, *xtenabled;\r
- \r
- if (!(portfw1 = fopen ("/harddisk/var/ipcop/portfw/config", "r"))) return 1;\r
- if (!(portfw2 = fopen ("/harddisk/var/ipcop/portfw/config.new", "w"))) \r
- {\r
- fclose(portfw1);\r
- return 1;\r
- }\r
-\r
- while (fgets (portsrctemp, STRING_SIZE, portfw1) != NULL) {\r
- count2 = 0;\r
- portproto = NULL;\r
- portsrcip = NULL;\r
- portsrcport = NULL;\r
- portdstip = NULL;\r
- portdstport = NULL;\r
- portremip = NULL;\r
- portenabled = NULL;\r
- \r
- if (!(xtaccess1 = fopen ("/harddisk/var/ipcop/xtaccess/config", "r"))) \r
- {\r
- fclose(portfw1);\r
- fclose(portfw2);\r
- return 1;\r
- }\r
- if (!(xtaccess2 = fopen ("/harddisk/var/ipcop/xtaccess/config.new", "w"))) \r
- {\r
- fclose(portfw1);\r
- fclose(portfw2);\r
- fclose(xtaccess1);\r
- return 1;\r
- }\r
-\r
- if (isdigit (portsrctemp[0])) {\r
- /* Already converted to new format */\r
- fputs(portsrctemp, portfw2);\r
- continue;\r
- }\r
-\r
- if (portsrctemp[strlen(portsrctemp) - 1] == '\n')\r
- portsrctemp[strlen(portsrctemp) - 1] = '\0';\r
- portproto = strtok (portsrctemp, ",");\r
- portsrcport = strtok (NULL, ",");\r
- portdstip = strtok (NULL, ",");\r
- portdstport = strtok (NULL, ",");\r
- portenabled = strtok (NULL, ",");\r
- portsrcip = strtok (NULL, ",");\r
- portremip = strtok (NULL, ",");\r
- if (!(portproto && portsrcport && portdstip && \r
- portdstport && portenabled ))\r
- continue;\r
-\r
- if (portsrcip == NULL) portsrcip = strdup ("0.0.0.0");\r
-\r
- while (fgets (xtsrctemp, STRING_SIZE, xtaccess1)) {\r
- xtproto = NULL;\r
- xtsrcip = NULL;\r
- xtdstip = NULL;\r
- xtdstport = NULL;\r
- xtenabled = NULL;\r
-\r
- if (xtsrctemp[strlen(xtsrctemp) - 1] == '\n')\r
- xtsrctemp[strlen(xtsrctemp) - 1] = '\0';\r
- xtproto = strtok (xtsrctemp, ",");\r
- xtsrcip = strtok (NULL, ",");\r
- xtdstport = strtok (NULL, ",");\r
- xtenabled = strtok (NULL, ",");\r
- xtdstip = strtok (NULL, ",");\r
- if (!(xtproto && xtsrcip && xtdstport && xtenabled)) continue;\r
-\r
- if (xtdstip == NULL) xtdstip = strdup ("0.0.0.0");\r
-\r
- if (strcmp (portproto, xtproto) == 0 &&\r
- strcmp (portsrcport, xtdstport) == 0 &&\r
- strcmp (portsrcip, xtdstip) == 0) {\r
- portremip = strdup (xtsrcip);\r
- if ((strcmp (portremip, "0.0.0.0/0") == 0) && (count2 == 0)) {\r
- sprintf (portdsttemp, "%d,%d,%s,%s,%s,%s,%s,%s,%s\n",\r
- count, count2, portproto, portsrcport, portdstip,\r
- portdstport, portenabled, portsrcip, portremip);\r
- fputs(portdsttemp, portfw2);\r
- } else {\r
- if (count2 == 0) {\r
- sprintf (portdsttemp, "%d,%d,%s,%s,%s,%s,%s,%s,%d\n",\r
- count,count2,portproto, portsrcport, portdstip,\r
- portdstport, portenabled, portsrcip, 0);\r
- fputs(portdsttemp, portfw2);\r
- count2++;\r
- }\r
- sprintf (portdsttemp, "%d,%d,%s,%d,%s,%s,%s,%d,%s\n",\r
- count,count2,portproto, 0, portdstip,\r
- portdstport, portenabled, 0, portremip);\r
- fputs(portdsttemp, portfw2);\r
- }\r
- count2++;\r
- } else {\r
- sprintf (xtdsttemp, "%s,%s,%s,%s,%s\n",\r
- xtproto, xtsrcip, xtdstport, xtenabled, xtdstip);\r
- fputs(xtdsttemp, xtaccess2);\r
- }\r
- }\r
-\r
- /* Close source and destination xtaccess files */\r
- fclose (xtaccess1);\r
- fclose (xtaccess2);\r
-\r
- /* Move the new xtaccess file */\r
- rename ("/harddisk/var/ipcop/xtaccess/config.new",\r
- "/harddisk/var/ipcop/xtaccess/config");\r
-\r
- /* If no external access line existed, add a no access line */\r
- if (count2 == 0) {\r
- if (portremip == NULL) portremip = strdup ("127.0.0.1/32");\r
-\r
- /* Print new port forwarding line to file */\r
- sprintf (portdsttemp, "%d,%d,%s,%s,%s,%s,%s,%s,%s\n",\r
- count, count2, portproto, portsrcport, portdstip, \r
- portdstport, portenabled, portsrcip, portremip);\r
- fputs(portdsttemp, portfw2);\r
- }\r
- count++;\r
- }\r
-\r
- /* Close source and destination portfw files */\r
- fclose (portfw1);\r
- fclose (portfw2);\r
-\r
- /* Move the new portfw file */\r
- rename ("/harddisk/var/ipcop/portfw/config.new",\r
- "/harddisk/var/ipcop/portfw/config");\r
- chown ("/harddisk/var/ipcop/xtaccess/config", 99, 99);\r
- chown ("/harddisk/var/ipcop/portfw/config", 99, 99);\r
-\r
- return 0;\r
-}\r
-\r
-int _convert_pulsardsl() {\r
- DIR *dirp;\r
- struct dirent *dp;\r
- char filename[STRING_SIZE];\r
- FILE *settings, *pulsardsl;\r
- char line[STRING_SIZE];\r
- \r
- if (!(pulsardsl = fopen ("/harddisk/var/ipcop/pciadsl/settings", "r"))) return 1;\r
- \r
- dirp = opendir( "/harddisk/var/ipcop/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/var/ipcop/ppp", dp->d_name);\r
- if (!(settings = fopen (filename, "r+"))) {\r
- closedir(dirp);\r
- fclose(pulsardsl);\r
- return 1;\r
- }\r
- while (fgets (line, STRING_SIZE, settings) != NULL) {\r
- if (strstr (line, "TYPE=pulsardsl") == line) {\r
- fseek(settings,0,SEEK_END);\r
- rewind(pulsardsl);\r
- while (fgets(line, STRING_SIZE, pulsardsl) != NULL) {\r
- fputs (line, settings);\r
- }\r
- fclose (settings);\r
- chown (filename, 99, 99);\r
- }\r
- }\r
- }\r
- }\r
- fclose(pulsardsl);\r
- (void) closedir( dirp );\r
-\r
-\r
- return 0;\r
-}\r
-\r
-int _convert_pulsardsl_ethernet() {\r
- DIR *dirp;\r
- struct dirent *dp;\r
- FILE *ethernet, *settings;\r
- char line[STRING_SIZE];\r
- char type[STRING_SIZE];\r
- char ip[STRING_SIZE];\r
- char filename[STRING_SIZE];\r
- \r
- if (!(ethernet = fopen ("/harddisk/var/ipcop/ethernet/settings", "r"))) return 1;\r
-\r
- while (fgets (line, STRING_SIZE, ethernet) != NULL) {\r
- if (strstr (line, "RED_DRIVER=pciadsl") == line) {\r
- rewind (ethernet);\r
- while (fgets (line, STRING_SIZE, ethernet) != NULL) {\r
- if (strstr (line, "RED_TYPE") == line) {\r
- strcpy (type, line + 9*sizeof(char));\r
- if (type[strlen(type) - 1] == '\n')\r
- type[strlen(type) - 1] = '\0';\r
- }\r
- if (strstr (line, "RED_ADDRESS") == line) {\r
- strcpy (ip, line + 12*sizeof(char));\r
- if (ip[strlen(ip) - 1] == '\n')\r
- type[strlen(ip) - 1] = '\0';\r
- }\r
- fclose (ethernet);\r
-\r
- replace ("/harddisk/var/ipcop/ethernet/settings", "RED_DEV=eth1", "RED_DEV=");\r
- replace ("/harddisk/var/ipcop/ethernet/settings", "CONFIG_TYPE=2", "CONFIG_TYPE=0");\r
- replace ("/harddisk/var/ipcop/ethernet/settings", "CONFIG_TYPE=3", "CONFIG_TYPE=1");\r
- replace ("/harddisk/var/ipcop/ethernet/settings", "RED_DEV=eth2", "RED_DEV=");\r
- chown ("/harddisk/var/ipcop/ethernet/settings", 99, 99);\r
- \r
- dirp = opendir( "/harddisk/var/ipcop/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/var/ipcop/ppp", dp->d_name);\r
- if (!(settings = fopen (filename, "r+"))) \r
- {\r
- closedir(dirp);\r
- return 1;\r
- }\r
- while (fgets (line, STRING_SIZE, settings) != NULL) {\r
- if (strstr (line, "TYPE=pulsardsl") == line) {\r
- fseek(settings,0,SEEK_END);\r
- fprintf (settings, "METHOD=%s\n", type);\r
- fprintf (settings, "IP=%s\n", ip);\r
- fclose (settings);\r
- chown (filename, 99, 99);\r
- }\r
- }\r
- }\r
- }\r
- (void) closedir( dirp );\r
- }\r
- }\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-int upgrade_v12_v13() {\r
- struct stat s;\r
- replace ("/harddisk/var/ipcop/ethernet/settings", "rtl8139", "8139too");\r
- replace ("/harddisk/var/ipcop/vpn/ipsec.conf", "auto=add", "auto=start");\r
- chown ("/harddisk/var/ipcop/vpn/ipsec.conf", 99, 99);\r
- chown ("/harddisk/var/ipcop/ethernet/settings", 99, 99);\r
- chown ("/harddisk/var/ipcop/main/settings", 99, 99);\r
- _convert_ppp_settings();\r
- _convert_xtaccess();\r
- _convert_pulsardsl();\r
- _convert_pulsardsl_ethernet();\r
-\r
- /* Rename usbadsl directory */\r
- stat ("/harddisk/var/ipcop/usbadsl", &s);\r
- if (S_ISDIR(s.st_mode)) {\r
- remove ("/harddisk/var/ipcop/usbadsl/settings");\r
- if (! system("/bin/chroot /harddisk /bin/rm -rf /var/ipcop/alcatelusb"))\r
- rename ("/harddisk/var/ipcop/usbadsl", "/harddisk/var/ipcop/alcatelusb");\r
- }\r
- \r
- /* Rename pciadsl module and directory */\r
- remove ("/harddisk/var/ipcop/pulsar/settings");\r
- rename ("/harddisk/var/ipcop/pciadsl/pciadsl.o", "/harddisk/var/ipcop/pciadsl/pulsar.o");\r
- stat ("/harddisk/var/ipcop/pciadsl", &s);\r
- if (S_ISDIR(s.st_mode)) {\r
- if (! system("/bin/chroot /harddisk /bin/rm -rf /var/ipcop/pulsardsl"))\r
- rename ("/harddisk/var/ipcop/pciadsl", "/harddisk/var/ipcop/pulsardsl");\r
- }\r
-\r
- /* Change squid cache directory */\r
- replace ("/harddisk/var/ipcop/proxy/squid.conf", "/var/spool/squid", "/var/log/cache");\r
- chown ("/harddisk/var/ipcop/proxy/squid.conf", 99, 99);\r
- \r
- /* Change setup user shell */\r
- replace ("/harddisk/etc/passwd", ":/usr/local/sbin/setup", ":/bin/bash -c /usr/local/sbin/setup");\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-v12-v13.c,v 1.2.2.3 2004/11/11 09:39:25 alanh Exp $
+ *
+ */
+
+#include "install.h"
+
+void _convert_ppp_settings() {
+ DIR *dirp;
+ struct dirent *dp;
+ char filename[STRING_SIZE];
+
+ dirp = opendir( "/harddisk/var/ipcop/ppp" );
+ while ( (dp = readdir( dirp )) != NULL ) {
+ if ( strstr( dp->d_name, "settings" ) == dp->d_name ) {
+ snprintf (filename, STRING_SIZE-1, "%s/%s",
+ "/harddisk/var/ipcop/ppp", dp->d_name);
+
+ /* reduce furthur replacements from commands below */
+ replace (filename, "TYPE=modem", "");
+ replace (filename, "COMPORT=ttyS0", "TYPE=modem\nCOMPORT=ttyS0");
+ replace (filename, "COMPORT=ttyS1", "TYPE=modem\nCOMPORT=ttyS1");
+ replace (filename, "COMPORT=ttyS2", "TYPE=modem\nCOMPORT=ttyS2");
+ replace (filename, "COMPORT=ttyS3", "TYPE=modem\nCOMPORT=ttyS3");
+ /* reduce furthur replacements from commands below */
+ replace (filename, "TYPE=isdn", "");
+ replace (filename, "COMPORT=isdn1", "TYPE=isdn\nCOMPORT=isdn1");
+ replace (filename, "COMPORT=isdn2", "TYPE=isdn\nCOMPORT=isdn2");
+ replace (filename, "COMPORT=pppoe", "TYPE=pppoe");
+ replace (filename, "COMPORT=pptp", "TYPE=pptp");
+ replace (filename, "COMPORT=usbadsl", "TYPE=alcatelusb");
+ replace (filename, "COMPORT=pppoa", "TYPE=pulsardsl");
+
+ chown (filename, 99, 99);
+ }
+ }
+ (void) closedir( dirp );
+}
+
+int _convert_xtaccess() {
+ int count=1, count2=0;
+ FILE *portfw1, *portfw2;
+ char portsrctemp[STRING_SIZE], portdsttemp[STRING_SIZE];
+ char *portproto, *portsrcip, *portsrcport, *portdstip, *portdstport, *portenabled, *portremip;
+
+ FILE *xtaccess1, *xtaccess2;
+ char xtsrctemp[STRING_SIZE], xtdsttemp[STRING_SIZE];
+ char *xtproto, *xtsrcip, *xtdstip, *xtdstport, *xtenabled;
+
+ if (!(portfw1 = fopen ("/harddisk/var/ipcop/portfw/config", "r"))) return 1;
+ if (!(portfw2 = fopen ("/harddisk/var/ipcop/portfw/config.new", "w")))
+ {
+ fclose(portfw1);
+ return 1;
+ }
+
+ while (fgets (portsrctemp, STRING_SIZE, portfw1) != NULL) {
+ count2 = 0;
+ portproto = NULL;
+ portsrcip = NULL;
+ portsrcport = NULL;
+ portdstip = NULL;
+ portdstport = NULL;
+ portremip = NULL;
+ portenabled = NULL;
+
+ if (!(xtaccess1 = fopen ("/harddisk/var/ipcop/xtaccess/config", "r")))
+ {
+ fclose(portfw1);
+ fclose(portfw2);
+ return 1;
+ }
+ if (!(xtaccess2 = fopen ("/harddisk/var/ipcop/xtaccess/config.new", "w")))
+ {
+ fclose(portfw1);
+ fclose(portfw2);
+ fclose(xtaccess1);
+ return 1;
+ }
+
+ if (isdigit (portsrctemp[0])) {
+ /* Already converted to new format */
+ fputs(portsrctemp, portfw2);
+ continue;
+ }
+
+ if (portsrctemp[strlen(portsrctemp) - 1] == '\n')
+ portsrctemp[strlen(portsrctemp) - 1] = '\0';
+ portproto = strtok (portsrctemp, ",");
+ portsrcport = strtok (NULL, ",");
+ portdstip = strtok (NULL, ",");
+ portdstport = strtok (NULL, ",");
+ portenabled = strtok (NULL, ",");
+ portsrcip = strtok (NULL, ",");
+ portremip = strtok (NULL, ",");
+ if (!(portproto && portsrcport && portdstip &&
+ portdstport && portenabled ))
+ continue;
+
+ if (portsrcip == NULL) portsrcip = strdup ("0.0.0.0");
+
+ while (fgets (xtsrctemp, STRING_SIZE, xtaccess1)) {
+ xtproto = NULL;
+ xtsrcip = NULL;
+ xtdstip = NULL;
+ xtdstport = NULL;
+ xtenabled = NULL;
+
+ if (xtsrctemp[strlen(xtsrctemp) - 1] == '\n')
+ xtsrctemp[strlen(xtsrctemp) - 1] = '\0';
+ xtproto = strtok (xtsrctemp, ",");
+ xtsrcip = strtok (NULL, ",");
+ xtdstport = strtok (NULL, ",");
+ xtenabled = strtok (NULL, ",");
+ xtdstip = strtok (NULL, ",");
+ if (!(xtproto && xtsrcip && xtdstport && xtenabled)) continue;
+
+ if (xtdstip == NULL) xtdstip = strdup ("0.0.0.0");
+
+ if (strcmp (portproto, xtproto) == 0 &&
+ strcmp (portsrcport, xtdstport) == 0 &&
+ strcmp (portsrcip, xtdstip) == 0) {
+ portremip = strdup (xtsrcip);
+ if ((strcmp (portremip, "0.0.0.0/0") == 0) && (count2 == 0)) {
+ sprintf (portdsttemp, "%d,%d,%s,%s,%s,%s,%s,%s,%s\n",
+ count, count2, portproto, portsrcport, portdstip,
+ portdstport, portenabled, portsrcip, portremip);
+ fputs(portdsttemp, portfw2);
+ } else {
+ if (count2 == 0) {
+ sprintf (portdsttemp, "%d,%d,%s,%s,%s,%s,%s,%s,%d\n",
+ count,count2,portproto, portsrcport, portdstip,
+ portdstport, portenabled, portsrcip, 0);
+ fputs(portdsttemp, portfw2);
+ count2++;
+ }
+ sprintf (portdsttemp, "%d,%d,%s,%d,%s,%s,%s,%d,%s\n",
+ count,count2,portproto, 0, portdstip,
+ portdstport, portenabled, 0, portremip);
+ fputs(portdsttemp, portfw2);
+ }
+ count2++;
+ } else {
+ sprintf (xtdsttemp, "%s,%s,%s,%s,%s\n",
+ xtproto, xtsrcip, xtdstport, xtenabled, xtdstip);
+ fputs(xtdsttemp, xtaccess2);
+ }
+ }
+
+ /* Close source and destination xtaccess files */
+ fclose (xtaccess1);
+ fclose (xtaccess2);
+
+ /* Move the new xtaccess file */
+ rename ("/harddisk/var/ipcop/xtaccess/config.new",
+ "/harddisk/var/ipcop/xtaccess/config");
+
+ /* If no external access line existed, add a no access line */
+ if (count2 == 0) {
+ if (portremip == NULL) portremip = strdup ("127.0.0.1/32");
+
+ /* Print new port forwarding line to file */
+ sprintf (portdsttemp, "%d,%d,%s,%s,%s,%s,%s,%s,%s\n",
+ count, count2, portproto, portsrcport, portdstip,
+ portdstport, portenabled, portsrcip, portremip);
+ fputs(portdsttemp, portfw2);
+ }
+ count++;
+ }
+
+ /* Close source and destination portfw files */
+ fclose (portfw1);
+ fclose (portfw2);
+
+ /* Move the new portfw file */
+ rename ("/harddisk/var/ipcop/portfw/config.new",
+ "/harddisk/var/ipcop/portfw/config");
+ chown ("/harddisk/var/ipcop/xtaccess/config", 99, 99);
+ chown ("/harddisk/var/ipcop/portfw/config", 99, 99);
+
+ return 0;
+}
+
+int _convert_pulsardsl() {
+ DIR *dirp;
+ struct dirent *dp;
+ char filename[STRING_SIZE];
+ FILE *settings, *pulsardsl;
+ char line[STRING_SIZE];
+
+ if (!(pulsardsl = fopen ("/harddisk/var/ipcop/pciadsl/settings", "r"))) return 1;
+
+ dirp = opendir( "/harddisk/var/ipcop/ppp" );
+ while ( (dp = readdir( dirp )) != NULL ) {
+ if ( strstr( dp->d_name, "settings" ) == dp->d_name ) {
+ snprintf (filename, STRING_SIZE-1, "%s/%s",
+ "/harddisk/var/ipcop/ppp", dp->d_name);
+ if (!(settings = fopen (filename, "r+"))) {
+ closedir(dirp);
+ fclose(pulsardsl);
+ return 1;
+ }
+ while (fgets (line, STRING_SIZE, settings) != NULL) {
+ if (strstr (line, "TYPE=pulsardsl") == line) {
+ fseek(settings,0,SEEK_END);
+ rewind(pulsardsl);
+ while (fgets(line, STRING_SIZE, pulsardsl) != NULL) {
+ fputs (line, settings);
+ }
+ fclose (settings);
+ chown (filename, 99, 99);
+ }
+ }
+ }
+ }
+ fclose(pulsardsl);
+ (void) closedir( dirp );
+
+
+ return 0;
+}
+
+int _convert_pulsardsl_ethernet() {
+ DIR *dirp;
+ struct dirent *dp;
+ FILE *ethernet, *settings;
+ char line[STRING_SIZE];
+ char type[STRING_SIZE];
+ char ip[STRING_SIZE];
+ char filename[STRING_SIZE];
+
+ if (!(ethernet = fopen ("/harddisk/var/ipcop/ethernet/settings", "r"))) return 1;
+
+ while (fgets (line, STRING_SIZE, ethernet) != NULL) {
+ if (strstr (line, "RED_DRIVER=pciadsl") == line) {
+ rewind (ethernet);
+ while (fgets (line, STRING_SIZE, ethernet) != NULL) {
+ if (strstr (line, "RED_TYPE") == line) {
+ strcpy (type, line + 9*sizeof(char));
+ if (type[strlen(type) - 1] == '\n')
+ type[strlen(type) - 1] = '\0';
+ }
+ if (strstr (line, "RED_ADDRESS") == line) {
+ strcpy (ip, line + 12*sizeof(char));
+ if (ip[strlen(ip) - 1] == '\n')
+ type[strlen(ip) - 1] = '\0';
+ }
+ fclose (ethernet);
+
+ replace ("/harddisk/var/ipcop/ethernet/settings", "RED_DEV=eth1", "RED_DEV=");
+ replace ("/harddisk/var/ipcop/ethernet/settings", "CONFIG_TYPE=2", "CONFIG_TYPE=0");
+ replace ("/harddisk/var/ipcop/ethernet/settings", "CONFIG_TYPE=3", "CONFIG_TYPE=1");
+ replace ("/harddisk/var/ipcop/ethernet/settings", "RED_DEV=eth2", "RED_DEV=");
+ chown ("/harddisk/var/ipcop/ethernet/settings", 99, 99);
+
+ dirp = opendir( "/harddisk/var/ipcop/ppp" );
+ while ( (dp = readdir( dirp )) != NULL ) {
+ if ( strstr( dp->d_name, "settings-" ) == dp->d_name ) {
+ snprintf (filename, STRING_SIZE-1, "%s/%s",
+ "/harddisk/var/ipcop/ppp", dp->d_name);
+ if (!(settings = fopen (filename, "r+")))
+ {
+ closedir(dirp);
+ return 1;
+ }
+ while (fgets (line, STRING_SIZE, settings) != NULL) {
+ if (strstr (line, "TYPE=pulsardsl") == line) {
+ fseek(settings,0,SEEK_END);
+ fprintf (settings, "METHOD=%s\n", type);
+ fprintf (settings, "IP=%s\n", ip);
+ fclose (settings);
+ chown (filename, 99, 99);
+ }
+ }
+ }
+ }
+ (void) closedir( dirp );
+ }
+ }
+ }
+
+ return 0;
+}
+
+int upgrade_v12_v13() {
+ struct stat s;
+ replace ("/harddisk/var/ipcop/ethernet/settings", "rtl8139", "8139too");
+ replace ("/harddisk/var/ipcop/vpn/ipsec.conf", "auto=add", "auto=start");
+ chown ("/harddisk/var/ipcop/vpn/ipsec.conf", 99, 99);
+ chown ("/harddisk/var/ipcop/ethernet/settings", 99, 99);
+ chown ("/harddisk/var/ipcop/main/settings", 99, 99);
+ _convert_ppp_settings();
+ _convert_xtaccess();
+ _convert_pulsardsl();
+ _convert_pulsardsl_ethernet();
+
+ /* Rename usbadsl directory */
+ stat ("/harddisk/var/ipcop/usbadsl", &s);
+ if (S_ISDIR(s.st_mode)) {
+ remove ("/harddisk/var/ipcop/usbadsl/settings");
+ if (! system("/bin/chroot /harddisk /bin/rm -rf /var/ipcop/alcatelusb"))
+ rename ("/harddisk/var/ipcop/usbadsl", "/harddisk/var/ipcop/alcatelusb");
+ }
+
+ /* Rename pciadsl module and directory */
+ remove ("/harddisk/var/ipcop/pulsar/settings");
+ rename ("/harddisk/var/ipcop/pciadsl/pciadsl.o", "/harddisk/var/ipcop/pciadsl/pulsar.o");
+ stat ("/harddisk/var/ipcop/pciadsl", &s);
+ if (S_ISDIR(s.st_mode)) {
+ if (! system("/bin/chroot /harddisk /bin/rm -rf /var/ipcop/pulsardsl"))
+ rename ("/harddisk/var/ipcop/pciadsl", "/harddisk/var/ipcop/pulsardsl");
+ }
+
+ /* Change squid cache directory */
+ replace ("/harddisk/var/ipcop/proxy/squid.conf", "/var/spool/squid", "/var/log/cache");
+ chown ("/harddisk/var/ipcop/proxy/squid.conf", 99, 99);
+
+ /* Change setup user shell */
+ replace ("/harddisk/etc/passwd", ":/usr/local/sbin/setup", ":/bin/bash -c /usr/local/sbin/setup");
+
+ return 0;
+}
-/*\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;
+}
-/*\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: usb.c,v 1.9.2.8 2005/12/10 00:18:23 franck78 Exp $\r
- * \r
- */\r
-\r
-#include "install.h"\r
-\r
-int usbuhci = 0;\r
-int usbohci = 0;\r
-int ehcihcd = 0;\r
-\r
-int initialize_usb() {\r
- modprobe("sd_mod");\r
- modprobe("sr_mod");\r
- modprobe("usb-storage");\r
-\r
- if (ehcihcd) {\r
- rmmod("ehci-hcd");\r
- ehcihcd = 0;\r
- }\r
- if (usbohci) {\r
- rmmod("usb-ohci");\r
- usbohci = 0;\r
- }\r
- if (usbuhci) {\r
- rmmod("usb-uhci");\r
- usbuhci = 0;\r
- }\r
-\r
- if (modprobe("ehci-hcd") == 0) ehcihcd = 1;\r
- if (modprobe("usb-ohci") == 0) usbohci = 1;\r
- if (modprobe("usb-uhci") == 0) usbuhci = 1;\r
-\r
- modprobe("hid");\r
- modprobe("keybdev");\r
- return 0;\r
-}\r
-\r
-int write_usb_modules_conf() {\r
- int index = 0;\r
- FILE *handle;\r
-\r
- if (!(handle = fopen("/harddisk/etc/modules.conf", "a")))\r
- return 0;\r
-\r
-#if 0 /* we don't do this yet, because one of the drivers has a problem \r
- * with it */\r
- if (ehcihcd) {\r
- fprintf(handle,"alias usb-controller");\r
- if (index)\r
- fprintf(handle,"%d",index);\r
- fprintf(handle," ehci-hcd\n");\r
- index++;\r
- }\r
-#endif\r
-\r
- if (usbohci) {\r
- fprintf(handle,"alias usb-controller");\r
- if (index)\r
- fprintf(handle,"%d",index);\r
- fprintf(handle," usb-ohci\n");\r
- index++;\r
- }\r
-\r
- if (usbuhci) {\r
- fprintf(handle,"alias usb-controller");\r
- if (index)\r
- fprintf(handle,"%d",index);\r
- fprintf(handle," usb-uhci\n");\r
- index++;\r
- }\r
- fclose(handle);\r
- \r
- return 0;\r
-}\r
-\r
-/* checkusb().\r
- Scans the named partitions and returns true if USB-removable.\r
- a bug? in "cat /proc/partitions" with superfloppy scheme device\r
- make them appearing always with four 'false' partitions:\r
- sda and sda1 sda2 sda3 sda4.\r
- No easy way to decide if /dev/sda1 exists or not.\r
-*/\r
-int checkusb(char *partition)\r
-{\r
- FILE *f = NULL;\r
- char filename[STRING_SIZE];\r
- char buffer[STRING_SIZE];\r
- char *pchar = &buffer[0];\r
- if (!(f = fopen("/proc/partitions", "r")))\r
- return 0;\r
-\r
- short int major = 0, minor = 0; \r
- while (fgets(buffer, STRING_SIZE, f)) {\r
- /* look for partition*/ \r
- if (strstr (buffer, partition)) {\r
- major = atoi (buffer);\r
- if (major != 8) break ; /* not scsi */\r
- //get minor\r
- while (*pchar != '8') pchar++;\r
- minor = atoi (++pchar);\r
- break;\r
- }\r
- }\r
- fclose(f);\r
- if (major != 8) return 0; /* nothing found */\r
- \r
- //now check for usb-storage-MINOR\r
- minor >>= 4; // get index from minor\r
- sprintf (filename, "/proc/scsi/usb-storage-%d/%d", minor,minor);\r
-\r
- if (!(f = fopen(filename, "r")))\r
- return 0;\r
- int count = 0;\r
- while (fgets(buffer, STRING_SIZE, f)) {\r
- if (strstr(buffer,"usb-storage")) count++;\r
- if (strstr(buffer,"SCSI")) count++;\r
- if (strstr(buffer,"Attached: Yes")) count++;\r
- }\r
- fclose(f);\r
- \r
- return (count==3 ? 1 : 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: usb.c,v 1.9.2.8 2005/12/10 00:18:23 franck78 Exp $
+ *
+ */
+
+#include "install.h"
+
+int usbuhci = 0;
+int usbohci = 0;
+int ehcihcd = 0;
+
+int initialize_usb() {
+ modprobe("sd_mod");
+ modprobe("sr_mod");
+ modprobe("usb-storage");
+
+ if (ehcihcd) {
+ rmmod("ehci-hcd");
+ ehcihcd = 0;
+ }
+ if (usbohci) {
+ rmmod("usb-ohci");
+ usbohci = 0;
+ }
+ if (usbuhci) {
+ rmmod("usb-uhci");
+ usbuhci = 0;
+ }
+
+ if (modprobe("ehci-hcd") == 0) ehcihcd = 1;
+ if (modprobe("usb-ohci") == 0) usbohci = 1;
+ if (modprobe("usb-uhci") == 0) usbuhci = 1;
+
+ modprobe("hid");
+ modprobe("keybdev");
+ return 0;
+}
+
+int write_usb_modules_conf() {
+ int index = 0;
+ FILE *handle;
+
+ if (!(handle = fopen("/harddisk/etc/modules.conf", "a")))
+ return 0;
+
+#if 0 /* we don't do this yet, because one of the drivers has a problem
+ * with it */
+ if (ehcihcd) {
+ fprintf(handle,"alias usb-controller");
+ if (index)
+ fprintf(handle,"%d",index);
+ fprintf(handle," ehci-hcd\n");
+ index++;
+ }
+#endif
+
+ if (usbohci) {
+ fprintf(handle,"alias usb-controller");
+ if (index)
+ fprintf(handle,"%d",index);
+ fprintf(handle," usb-ohci\n");
+ index++;
+ }
+
+ if (usbuhci) {
+ fprintf(handle,"alias usb-controller");
+ if (index)
+ fprintf(handle,"%d",index);
+ fprintf(handle," usb-uhci\n");
+ index++;
+ }
+ fclose(handle);
+
+ return 0;
+}
+
+/* checkusb().
+ Scans the named partitions and returns true if USB-removable.
+ a bug? in "cat /proc/partitions" with superfloppy scheme device
+ make them appearing always with four 'false' partitions:
+ sda and sda1 sda2 sda3 sda4.
+ No easy way to decide if /dev/sda1 exists or not.
+*/
+int checkusb(char *partition)
+{
+ FILE *f = NULL;
+ char filename[STRING_SIZE];
+ char buffer[STRING_SIZE];
+ char *pchar = &buffer[0];
+ if (!(f = fopen("/proc/partitions", "r")))
+ return 0;
+
+ short int major = 0, minor = 0;
+ while (fgets(buffer, STRING_SIZE, f)) {
+ /* look for partition*/
+ if (strstr (buffer, partition)) {
+ major = atoi (buffer);
+ if (major != 8) break ; /* not scsi */
+ //get minor
+ while (*pchar != '8') pchar++;
+ minor = atoi (++pchar);
+ break;
+ }
+ }
+ fclose(f);
+ if (major != 8) return 0; /* nothing found */
+
+ //now check for usb-storage-MINOR
+ minor >>= 4; // get index from minor
+ sprintf (filename, "/proc/scsi/usb-storage-%d/%d", minor,minor);
+
+ if (!(f = fopen(filename, "r")))
+ return 0;
+ int count = 0;
+ while (fgets(buffer, STRING_SIZE, f)) {
+ if (strstr(buffer,"usb-storage")) count++;
+ if (strstr(buffer,"SCSI")) count++;
+ if (strstr(buffer,"Attached: Yes")) count++;
+ }
+ fclose(f);
+
+ return (count==3 ? 1 : 0);
+}