tbrehm
2006-02-24 87a4a65f40ef4ad5a00483671e83ef31b9af85e2
server base system
8 files modified
6 files added
1496 ■■■■ changed files
interface/lib/classes/tform.inc.php 5 ●●●● patch | view | raw | blame | history
interface/lib/server_conf.master 25 ●●●●● patch | view | raw | blame | history
interface/sql/ispconfig3db.sql 566 ●●●●● patch | view | raw | blame | history
interface/web/admin/form/server.tform.php 12 ●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/en_server.lng 5 ●●●●● patch | view | raw | blame | history
interface/web/admin/lib/lang/en_server_list.lng 5 ●●●●● patch | view | raw | blame | history
interface/web/admin/list/server.list.php 13 ●●●● patch | view | raw | blame | history
interface/web/admin/templates/server_edit_services.htm 12 ●●●●● patch | view | raw | blame | history
interface/web/admin/templates/server_list.htm 10 ●●●●● patch | view | raw | blame | history
server/lib/app.inc.php 128 ●●●●● patch | view | raw | blame | history
server/lib/classes/db_mysql.inc.php 480 ●●●●● patch | view | raw | blame | history
server/lib/classes/ini_parser.inc.php 69 ●●●●● patch | view | raw | blame | history
server/lib/config.inc.php 69 ●●●●● patch | view | raw | blame | history
server/server.php 97 ●●●●● patch | view | raw | blame | history
interface/lib/classes/tform.inc.php
@@ -806,12 +806,15 @@
                        }
                }
                // Insert the server_id, if the record has a server_id
                $server_id = ($record_old["server_id"] > 0)?$record_old["server_id"]:0;
                if(count($diffrec) > 0) {
                        $diffstr = $app->db->quote(serialize($diffrec));
                        $username = $app->db->quote($_SESSION["s"]["user"]["username"]);
                        $dbidx = $this->formDef['db_table_idx'].":".$primary_id;
                        $action = ($action == 'INSERT')?'i':'u';
                        $sql = "INSERT INTO sys_datalog (dbtable,dbidx,action,tstamp,user,data) VALUES ('".$this->formDef['db_table']."','$dbidx','$action','".time()."','$username','$diffstr')";
                        $sql = "INSERT INTO sys_datalog (dbtable,dbidx,server_id,action,tstamp,user,data) VALUES ('".$this->formDef['db_table']."','$dbidx','$server_id','$action','".time()."','$username','$diffstr')";
                        $app->db->query($sql);
                }
interface/lib/server_conf.master
New file
@@ -0,0 +1,25 @@
[global]
webserver=apache
mailserver=exim
dnsserver=mydns
[mail]
module=exim_mysql
maildir_path=/var/spool/mail/[domain]/[localpart]
mailuser_uid=0
mailuser_gid=0
[web]
module=generic
[dns]
module=generic
[db]
module=generic
[file]
module=generic
[vserver]
module=generic
interface/sql/ispconfig3db.sql
@@ -3,7 +3,7 @@
# http://www.phpmyadmin.net/ (download page)
#
# Host: localhost
# Erstellungszeit: 16. Februar 2006 um 22:34
# Erstellungszeit: 24. Februar 2006 um 10:32
# Server Version: 4.0.23
# PHP-Version: 5.0.3
# Datenbank: `ispconfig3`
@@ -28,6 +28,12 @@
  PRIMARY KEY  (blacklist_id),
  KEY server_id (server_id,address,recipient)
) TYPE=MyISAM;
#
# Daten für Tabelle `mail_blacklist`
#
INSERT INTO mail_blacklist VALUES (2, 1, 0, 'riud', 'riud', '', 1, 'till@test.int', 'till@test.int', '0');
# --------------------------------------------------------
#
@@ -57,6 +63,13 @@
  PRIMARY KEY  (mailbox_id),
  KEY server_id (server_id,email)
) TYPE=MyISAM;
#
# Daten für Tabelle `mail_box`
#
INSERT INTO mail_box VALUES (1, 1, 0, 'riud', 'riud', '', 1, 'tt@test.int', '$1$tRlfKeOB$iHJgCn8mH8x/dh/XWy6v0/', '', '', 0, 0, '/var/spool/mail/till', '100', '0', '', '1');
INSERT INTO mail_box VALUES (2, 1, 0, 'riud', 'riud', '', 1, 'moin@test.int', '$1$Ee/.7y3.$wZ4BLXs/Pa80ka9X4ikN8.', '', '', 0, 0, '/var/spool/mail/test.int/moin', '10', '0', '', '1');
# --------------------------------------------------------
#
@@ -79,6 +92,13 @@
  PRIMARY KEY  (domain_id),
  KEY server_id (server_id,domain,type)
) TYPE=MyISAM;
#
# Daten für Tabelle `mail_domain`
#
INSERT INTO mail_domain VALUES (1, 1, 0, 'riud', 'riud', '', 1, 'test.int', 'local', '', 1);
INSERT INTO mail_domain VALUES (2, 1, 0, 'riud', 'riud', '', 1, 'test2.int', 'alias', 'test.int', 1);
# --------------------------------------------------------
#
@@ -100,6 +120,12 @@
  PRIMARY KEY  (domain_catchall_id),
  KEY server_id (server_id,domain)
) TYPE=MyISAM;
#
# Daten für Tabelle `mail_domain_catchall`
#
INSERT INTO mail_domain_catchall VALUES (1, 1, 1, 'riud', 'riud', '', 1, 'test.int', 'till@test.int', '1');
# --------------------------------------------------------
#
@@ -117,6 +143,11 @@
  create_time datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (greylist_id)
) TYPE=MyISAM;
#
# Daten für Tabelle `mail_greylist`
#
# --------------------------------------------------------
#
@@ -134,6 +165,11 @@
  mm_group varchar(50) NOT NULL default '',
  PRIMARY KEY  (mailman_id,server_id,domain)
) TYPE=MyISAM;
#
# Daten für Tabelle `mail_mailman_domain`
#
# --------------------------------------------------------
#
@@ -156,6 +192,12 @@
  PRIMARY KEY  (redirect_id),
  KEY server_id (server_id,email)
) TYPE=MyISAM;
#
# Daten für Tabelle `mail_redirect`
#
INSERT INTO mail_redirect VALUES (1, 1, 0, 'riud', 'riud', '', 1, 'tom@test.int', 'tt@test.int', 'alias', '1');
# --------------------------------------------------------
#
@@ -182,6 +224,13 @@
  PRIMARY KEY  (spamfilter_id),
  KEY server_id (server_id,email)
) TYPE=MyISAM;
#
# Daten für Tabelle `mail_spamfilter`
#
INSERT INTO mail_spamfilter VALUES (1, 0, 0, '', '', '', 1, 'till@test.int', 100, 100, 1, '***SPAM mag ich nicht***', '/var/spool/mail/spam', 0, '1');
INSERT INTO mail_spamfilter VALUES (2, 1, 0, 'riud', 'riud', '', 1, 'till2@test.int', 500, 1500, 700, '***SPAM***', '/var/spool/mail/till', 14, '1');
# --------------------------------------------------------
#
@@ -204,6 +253,11 @@
  KEY server_id (server_id,destination),
  KEY server_id_2 (server_id,domain)
) TYPE=MyISAM;
#
# Daten für Tabelle `mail_transport`
#
# --------------------------------------------------------
#
@@ -225,57 +279,92 @@
  PRIMARY KEY  (whitelist_id),
  KEY server_id (server_id,address)
) TYPE=MyISAM;
#
# Daten für Tabelle `mail_whitelist`
#
# --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `reseller`
--
#
# Tabellenstruktur für Tabelle `reseller`
#
DROP TABLE IF EXISTS `reseller`;
CREATE TABLE `reseller` (
  `reseller_id` bigint(20) NOT NULL auto_increment,
  `sys_userid` int(11) NOT NULL default '0',
  `sys_groupid` int(11) NOT NULL default '0',
  `sys_perm_user` varchar(5) NOT NULL default '',
  `sys_perm_group` varchar(5) NOT NULL default '',
  `sys_perm_other` varchar(5) NOT NULL default '',
  `company` varchar(255) NOT NULL default '',
  `title` varchar(255) NOT NULL default '',
  `firstname` varchar(255) NOT NULL default '',
  `surname` varchar(255) NOT NULL default '',
  `street` varchar(255) NOT NULL default '',
  `zip` varchar(255) NOT NULL default '',
  `city` varchar(255) NOT NULL default '',
  `country` varchar(255) NOT NULL default '',
  `telephone` varchar(255) NOT NULL default '',
  `mobile` varchar(255) NOT NULL default '',
  `fax` varchar(255) NOT NULL default '',
  `email` varchar(255) NOT NULL default '',
  `internet` varchar(255) NOT NULL default '',
  `icq` varchar(255) NOT NULL default '',
  `notes` text NOT NULL,
  `limit_client` int(11) NOT NULL default '-1',
  `limit_domain` int(11) NOT NULL default '-1',
  `limit_subdomain` int(11) NOT NULL default '-1',
  `limit_mailbox` int(11) NOT NULL default '-1',
  `limit_mailalias` int(11) NOT NULL default '-1',
  `limit_webquota` int(11) NOT NULL default '-1',
  `limit_mailquota` int(11) NOT NULL default '-1',
  `limit_database` int(11) NOT NULL default '-1',
  `ip_address` text NOT NULL,
  PRIMARY KEY  (`reseller_id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
DROP TABLE IF EXISTS reseller;
CREATE TABLE reseller (
  reseller_id bigint(20) NOT NULL auto_increment,
  sys_userid int(11) NOT NULL default '0',
  sys_groupid int(11) NOT NULL default '0',
  sys_perm_user varchar(5) NOT NULL default '',
  sys_perm_group varchar(5) NOT NULL default '',
  sys_perm_other varchar(5) NOT NULL default '',
  company varchar(255) NOT NULL default '',
  title varchar(255) NOT NULL default '',
  firstname varchar(255) NOT NULL default '',
  surname varchar(255) NOT NULL default '',
  street varchar(255) NOT NULL default '',
  zip varchar(255) NOT NULL default '',
  city varchar(255) NOT NULL default '',
  country varchar(255) NOT NULL default '',
  telephone varchar(255) NOT NULL default '',
  mobile varchar(255) NOT NULL default '',
  fax varchar(255) NOT NULL default '',
  email varchar(255) NOT NULL default '',
  internet varchar(255) NOT NULL default '',
  icq varchar(255) NOT NULL default '',
  notes text NOT NULL,
  limit_client int(11) NOT NULL default '-1',
  limit_domain int(11) NOT NULL default '-1',
  limit_subdomain int(11) NOT NULL default '-1',
  limit_mailbox int(11) NOT NULL default '-1',
  limit_mailalias int(11) NOT NULL default '-1',
  limit_webquota int(11) NOT NULL default '-1',
  limit_mailquota int(11) NOT NULL default '-1',
  limit_database int(11) NOT NULL default '-1',
  ip_address text NOT NULL,
  PRIMARY KEY  (reseller_id)
) TYPE=MyISAM;
--
-- Daten für Tabelle `reseller`
--
#
# Daten für Tabelle `reseller`
#
# --------------------------------------------------------
-- --------------------------------------------------------
#
# Tabellenstruktur für Tabelle `rr`
#
--
-- Tabellenstruktur für Tabelle `server`
--
DROP TABLE IF EXISTS rr;
CREATE TABLE rr (
  id int(10) unsigned NOT NULL auto_increment,
  zone int(10) unsigned NOT NULL default '0',
  name varchar(64) NOT NULL default '',
  type enum('A','AAAA','ALIAS','CNAME','HINFO','MX','NS','PTR','RP','SRV','TXT') default NULL,
  data varchar(128) NOT NULL default '',
  aux int(10) unsigned NOT NULL default '0',
  ttl int(10) unsigned NOT NULL default '86400',
  sys_userid int(11) NOT NULL default '0',
  sys_groupid int(11) NOT NULL default '0',
  sys_perm_user varchar(5) NOT NULL default '',
  sys_perm_group varchar(5) NOT NULL default '',
  sys_perm_other varchar(5) NOT NULL default '',
  PRIMARY KEY  (id),
  UNIQUE KEY rr (zone,name,type,data)
) TYPE=MyISAM;
#
# Daten für Tabelle `rr`
#
INSERT INTO rr VALUES (1, 2, '1', 'PTR', 'www.ensign.de.', 0, 86400, 1, 0, 'riud', 'riud', '');
INSERT INTO rr VALUES (2, 1, 'www', 'A', '192.168.0.1', 0, 86400, 1, 0, 'riud', 'riud', '');
INSERT INTO rr VALUES (3, 1, 'ensign.de', 'A', '192.168.0.1', 0, 86400, 1, 0, 'riud', 'riud', '');
# --------------------------------------------------------
#
# Tabellenstruktur für Tabelle `server`
#
DROP TABLE IF EXISTS server;
CREATE TABLE server (
@@ -286,226 +375,197 @@
  sys_perm_group varchar(5) NOT NULL default '',
  sys_perm_other varchar(5) NOT NULL default '',
  server_name varchar(255) NOT NULL default '',
  mail_server int(11) NOT NULL default '0',
  web_server int(11) NOT NULL default '0',
  dns_server int(11) NOT NULL default '0',
  file_server int(11) NOT NULL default '0',
  mysql_server int(11) NOT NULL default '0',
  postgresql_server int(11) NOT NULL default '0',
  firebird_server int(11) NOT NULL default '0',
  mail_server tinyint(4) NOT NULL default '0',
  web_server tinyint(4) NOT NULL default '0',
  dns_server tinyint(4) NOT NULL default '0',
  file_server tinyint(4) NOT NULL default '0',
  db_server tinyint(4) NOT NULL default '0',
  vserver_server tinyint(4) NOT NULL default '0',
  config text NOT NULL,
  active int(11) NOT NULL default '1',
  update tinyint(4) NOT NULL default '0',
  active tinyint(4) NOT NULL default '1',
  PRIMARY KEY  (server_id)
) TYPE=MyISAM;
--
-- Daten für Tabelle `server`
--
#
# Daten für Tabelle `server`
#
INSERT INTO `server` (`server_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `mysql_server`, `postgresql_server`, `firebird_server`, `active`) VALUES (1, 1, 1, 'riud', 'riud', '', 'Server 1', 1, 0, 0, 0, 0, 0, 0, 1);
INSERT INTO server VALUES (1, 1, 1, 'riud', 'riud', '', 'Server 1', 1, 0, 0, 0, 0, 0, '[global]\r\nwebserver=apache\r\nmailserver=exim\r\ndnsserver=mydns\r\n\r\n[mail]\r\nmodule=exim_mysql\r\nmaildir_path=/var/spool/mail/[domain]/[localpart]\r\nmailuser_uid=0\r\nmailuser_gid=0', 0, 1);
# --------------------------------------------------------
-- --------------------------------------------------------
#
# Tabellenstruktur für Tabelle `soa`
#
--
-- Tabellenstruktur für Tabelle `sys_datalog`
--
DROP TABLE IF EXISTS `sys_datalog`;
CREATE TABLE `sys_datalog` (
  `datalog_id` bigint(20) NOT NULL auto_increment,
  `dbtable` varchar(255) NOT NULL default '',
  `dbidx` varchar(255) NOT NULL default '',
  `action` char(1) NOT NULL default '',
  `tstamp` bigint(20) NOT NULL default '0',
  `user` varchar(255) NOT NULL default '',
  `data` text NOT NULL,
  PRIMARY KEY  (`datalog_id`)
) TYPE=MyISAM AUTO_INCREMENT=48 ;
--
-- Daten für Tabelle `sys_datalog`
--
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `sys_dbsync`
--
DROP TABLE IF EXISTS `sys_dbsync`;
CREATE TABLE `sys_dbsync` (
  `id` bigint(20) NOT NULL auto_increment,
  `jobname` varchar(255) NOT NULL default '',
  `sync_interval_minutes` int(11) NOT NULL default '0',
  `db_type` varchar(255) NOT NULL default '',
  `db_host` varchar(255) NOT NULL default '',
  `db_name` varchar(255) NOT NULL default '',
  `db_username` varchar(255) NOT NULL default '',
  `db_password` varchar(255) NOT NULL default '',
  `db_tables` varchar(255) NOT NULL default 'admin,forms',
  `empty_datalog` int(11) NOT NULL default '0',
  `sync_datalog_external` int(11) NOT NULL default '0',
  `active` int(11) NOT NULL default '1',
  `last_datalog_id` bigint(20) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `last_datalog_id` (`last_datalog_id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
--
-- Daten für Tabelle `sys_dbsync`
--
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `sys_filesync`
--
DROP TABLE IF EXISTS `sys_filesync`;
CREATE TABLE `sys_filesync` (
  `id` bigint(20) NOT NULL auto_increment,
  `jobname` varchar(255) NOT NULL default '',
  `sync_interval_minutes` int(11) NOT NULL default '0',
  `ftp_host` varchar(255) NOT NULL default '',
  `ftp_path` varchar(255) NOT NULL default '',
  `ftp_username` varchar(255) NOT NULL default '',
  `ftp_password` varchar(255) NOT NULL default '',
  `local_path` varchar(255) NOT NULL default '',
  `wput_options` varchar(255) NOT NULL default '--timestamping --reupload --dont-continue',
  `active` int(11) NOT NULL default '1',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
--
-- Daten für Tabelle `sys_filesync`
--
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `sys_group`
--
DROP TABLE IF EXISTS `sys_group`;
CREATE TABLE `sys_group` (
  `groupid` int(11) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL default '',
  `description` text NOT NULL,
  PRIMARY KEY  (`groupid`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;
--
-- Daten für Tabelle `sys_group`
--
INSERT INTO `sys_group` (`groupid`, `name`, `description`) VALUES (1, 'admin', 'Administrators group');
INSERT INTO `sys_group` (`groupid`, `name`, `description`) VALUES (2, 'user', 'Users Group');
-- --------------------------------------------------------
--
-- Tabellenstruktur für Tabelle `sys_user`
--
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
  `userid` int(11) NOT NULL auto_increment,
  `sys_userid` int(11) NOT NULL default '0',
  `sys_groupid` int(11) NOT NULL default '0',
  `sys_perm_user` varchar(5) NOT NULL default '',
  `sys_perm_group` varchar(5) NOT NULL default '',
  `sys_perm_other` varchar(5) NOT NULL default '',
  `username` varchar(100) NOT NULL default '',
  `passwort` varchar(100) NOT NULL default '',
  `modules` varchar(255) NOT NULL default '',
  `startmodule` varchar(255) NOT NULL default '',
  `app_theme` varchar(100) NOT NULL default 'default',
  `typ` varchar(20) NOT NULL default 'user',
  `active` tinyint(4) NOT NULL default '1',
  `name` varchar(100) NOT NULL default '',
  `vorname` varchar(100) NOT NULL default '',
  `unternehmen` varchar(100) NOT NULL default '',
  `strasse` varchar(100) NOT NULL default '',
  `ort` varchar(100) NOT NULL default '',
  `plz` varchar(10) NOT NULL default '',
  `land` varchar(50) NOT NULL default '',
  `email` varchar(100) NOT NULL default '',
  `url` varchar(255) NOT NULL default '',
  `telefon` varchar(100) NOT NULL default '',
  `fax` varchar(100) NOT NULL default '',
  `language` varchar(10) NOT NULL default 'de',
  `groups` varchar(255) NOT NULL default '',
  `default_group` int(11) NOT NULL default '0',
  PRIMARY KEY  (`userid`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;
--
-- Daten für Tabelle `sys_user`
--
INSERT INTO `sys_user` (`userid`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `username`, `passwort`, `modules`, `startmodule`, `app_theme`, `typ`, `active`, `name`, `vorname`, `unternehmen`, `strasse`, `ort`, `plz`, `land`, `email`, `url`, `telefon`, `fax`, `language`, `groups`, `default_group`) VALUES (1, 1, 0, 'riud', 'riud', '', 'admin', '21232f297a57a5a743894a0e4a801fc3', 'admin,designer,sites,dns', 'admin', 'default', 'admin', 1, '', 'Administrator', '', '', '', '', '', '', '', '', '', 'en', '1,2', 0);
--
-- Table structure for table `rr`
--
DROP TABLE IF EXISTS `rr`;
CREATE TABLE `rr` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `zone` int(10) unsigned NOT NULL default '0',
  `name` varchar(64) NOT NULL default '',
  `type` enum('A','AAAA','ALIAS','CNAME','HINFO','MX','NS','PTR','RP','SRV','TXT') default NULL,
  `data` varchar(128) NOT NULL default '',
  `aux` int(10) unsigned NOT NULL default '0',
  `ttl` int(10) unsigned NOT NULL default '86400',
  `sys_userid` int(11) NOT NULL default '0',
  `sys_groupid` int(11) NOT NULL default '0',
  `sys_perm_user` varchar(5) NOT NULL default '',
  `sys_perm_group` varchar(5) NOT NULL default '',
  `sys_perm_other` varchar(5) NOT NULL default '',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `rr` (`zone`,`name`,`type`,`data`)
DROP TABLE IF EXISTS soa;
CREATE TABLE soa (
  id int(10) unsigned NOT NULL auto_increment,
  origin varchar(255) NOT NULL default '',
  ns varchar(255) NOT NULL default '',
  mbox varchar(255) NOT NULL default '',
  serial int(10) unsigned NOT NULL default '1',
  refresh int(10) unsigned NOT NULL default '28800',
  retry int(10) unsigned NOT NULL default '7200',
  expire int(10) unsigned NOT NULL default '604800',
  minimum int(10) unsigned NOT NULL default '86400',
  ttl int(10) unsigned NOT NULL default '86400',
  active enum('Y','N') NOT NULL default 'Y',
  xfer varchar(255) NOT NULL default '',
  sys_userid int(11) NOT NULL default '0',
  sys_groupid int(11) NOT NULL default '0',
  sys_perm_user varchar(5) NOT NULL default '',
  sys_perm_group varchar(5) NOT NULL default '',
  sys_perm_other varchar(5) NOT NULL default '',
  PRIMARY KEY  (id),
  UNIQUE KEY origin (origin),
  KEY active (active)
) TYPE=MyISAM;
--
-- Dumping data for table `rr`
--
#
# Daten für Tabelle `soa`
#
INSERT INTO soa VALUES (1, 'ensign.de.', 'ns1.example.com.', 'admin.example.com.', 2006012103, 28800, 7200, 604800, 86400, 86400, 'Y', '', 1, 0, 'riud', 'riud', '');
INSERT INTO soa VALUES (2, '0.168.192.in-addr.arpa.', 'ns1.example.com.', 'admin.example.com.', 2006012101, 28800, 7200, 604800, 86400, 86400, 'Y', '', 1, 0, 'riud', 'riud', '');
# --------------------------------------------------------
-- --------------------------------------------------------
#
# Tabellenstruktur für Tabelle `sys_datalog`
#
--
-- Table structure for table `soa`
--
DROP TABLE IF EXISTS `soa`;
CREATE TABLE `soa` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `origin` varchar(255) NOT NULL default '',
  `ns` varchar(255) NOT NULL default '',
  `mbox` varchar(255) NOT NULL default '',
  `serial` int(10) unsigned NOT NULL default '1',
  `refresh` int(10) unsigned NOT NULL default '28800',
  `retry` int(10) unsigned NOT NULL default '7200',
  `expire` int(10) unsigned NOT NULL default '604800',
  `minimum` int(10) unsigned NOT NULL default '86400',
  `ttl` int(10) unsigned NOT NULL default '86400',
  `active` enum('Y','N') NOT NULL default 'Y',
  `xfer` varchar(255) NOT NULL default '',
  `sys_userid` int(11) NOT NULL default '0',
  `sys_groupid` int(11) NOT NULL default '0',
  `sys_perm_user` varchar(5) NOT NULL default '',
  `sys_perm_group` varchar(5) NOT NULL default '',
  `sys_perm_other` varchar(5) NOT NULL default '',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `origin` (`origin`),
  KEY `active` (`active`)
DROP TABLE IF EXISTS sys_datalog;
CREATE TABLE sys_datalog (
  datalog_id bigint(20) NOT NULL auto_increment,
  dbtable varchar(255) NOT NULL default '',
  dbidx varchar(255) NOT NULL default '',
  server_id int(11) NOT NULL default '0',
  action char(1) NOT NULL default '',
  tstamp bigint(20) NOT NULL default '0',
  user varchar(255) NOT NULL default '',
  data text NOT NULL,
  PRIMARY KEY  (datalog_id)
) TYPE=MyISAM;
--
-- Dumping data for table `soa`
--
#
# Daten für Tabelle `sys_datalog`
#
-- --------------------------------------------------------
# --------------------------------------------------------
#
# Tabellenstruktur für Tabelle `sys_dbsync`
#
DROP TABLE IF EXISTS sys_dbsync;
CREATE TABLE sys_dbsync (
  id bigint(20) NOT NULL auto_increment,
  jobname varchar(255) NOT NULL default '',
  sync_interval_minutes int(11) NOT NULL default '0',
  db_type varchar(255) NOT NULL default '',
  db_host varchar(255) NOT NULL default '',
  db_name varchar(255) NOT NULL default '',
  db_username varchar(255) NOT NULL default '',
  db_password varchar(255) NOT NULL default '',
  db_tables varchar(255) NOT NULL default 'admin,forms',
  empty_datalog int(11) NOT NULL default '0',
  sync_datalog_external int(11) NOT NULL default '0',
  active int(11) NOT NULL default '1',
  last_datalog_id bigint(20) NOT NULL default '0',
  PRIMARY KEY  (id),
  KEY last_datalog_id (last_datalog_id)
) TYPE=MyISAM;
#
# Daten für Tabelle `sys_dbsync`
#
# --------------------------------------------------------
#
# Tabellenstruktur für Tabelle `sys_filesync`
#
DROP TABLE IF EXISTS sys_filesync;
CREATE TABLE sys_filesync (
  id bigint(20) NOT NULL auto_increment,
  jobname varchar(255) NOT NULL default '',
  sync_interval_minutes int(11) NOT NULL default '0',
  ftp_host varchar(255) NOT NULL default '',
  ftp_path varchar(255) NOT NULL default '',
  ftp_username varchar(255) NOT NULL default '',
  ftp_password varchar(255) NOT NULL default '',
  local_path varchar(255) NOT NULL default '',
  wput_options varchar(255) NOT NULL default '--timestamping --reupload --dont-continue',
  active int(11) NOT NULL default '1',
  PRIMARY KEY  (id)
) TYPE=MyISAM;
#
# Daten für Tabelle `sys_filesync`
#
# --------------------------------------------------------
#
# Tabellenstruktur für Tabelle `sys_group`
#
DROP TABLE IF EXISTS sys_group;
CREATE TABLE sys_group (
  groupid int(11) NOT NULL auto_increment,
  name varchar(255) NOT NULL default '',
  description text NOT NULL,
  PRIMARY KEY  (groupid)
) TYPE=MyISAM;
#
# Daten für Tabelle `sys_group`
#
INSERT INTO sys_group VALUES (1, 'admin', 'Administrators group');
INSERT INTO sys_group VALUES (2, 'user', 'Users Group');
# --------------------------------------------------------
#
# Tabellenstruktur für Tabelle `sys_user`
#
DROP TABLE IF EXISTS sys_user;
CREATE TABLE sys_user (
  userid int(11) NOT NULL auto_increment,
  sys_userid int(11) NOT NULL default '0',
  sys_groupid int(11) NOT NULL default '0',
  sys_perm_user varchar(5) NOT NULL default '',
  sys_perm_group varchar(5) NOT NULL default '',
  sys_perm_other varchar(5) NOT NULL default '',
  username varchar(100) NOT NULL default '',
  passwort varchar(100) NOT NULL default '',
  modules varchar(255) NOT NULL default '',
  startmodule varchar(255) NOT NULL default '',
  app_theme varchar(100) NOT NULL default 'default',
  typ varchar(20) NOT NULL default 'user',
  active tinyint(4) NOT NULL default '1',
  name varchar(100) NOT NULL default '',
  vorname varchar(100) NOT NULL default '',
  unternehmen varchar(100) NOT NULL default '',
  strasse varchar(100) NOT NULL default '',
  ort varchar(100) NOT NULL default '',
  plz varchar(10) NOT NULL default '',
  land varchar(50) NOT NULL default '',
  email varchar(100) NOT NULL default '',
  url varchar(255) NOT NULL default '',
  telefon varchar(100) NOT NULL default '',
  fax varchar(100) NOT NULL default '',
  language varchar(10) NOT NULL default 'de',
  groups varchar(255) NOT NULL default '',
  default_group int(11) NOT NULL default '0',
  PRIMARY KEY  (userid)
) TYPE=MyISAM;
#
# Daten für Tabelle `sys_user`
#
INSERT INTO sys_user VALUES (1, 1, 0, 'riud', 'riud', '', 'admin', '21232f297a57a5a743894a0e4a801fc3', 'admin,designer,mail,dns', 'admin', 'default', 'admin', 1, '', 'Administrator', '', '', '', '', '', '', '', '', '', 'en', '1,2', 0);
interface/web/admin/form/server.tform.php
@@ -90,23 +90,23 @@
            'default'    => '0',
            'value'        => '1'
        ),
        'mysql_server' => array (
        'db_server' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'CHECKBOX',
            'default'    => '0',
            'value'        => '1'
        ),
        'postgresql_server' => array (
        'vserver_server' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'CHECKBOX',
            'default'    => '0',
            'value'        => '1'
        ),
        'firebird_server' => array (
        'update' => array (
            'datatype'    => 'INTEGER',
            'formtype'    => 'CHECKBOX',
            'default'    => '0',
            'value'        => '1'
            'formtype'    => 'SELECT',
            'default'    => '1',
            'value'        => array(0 => 'No', 1 => 'Yes')
        ),
        'active' => array (
            'datatype'    => 'INTEGER',
interface/web/admin/lib/lang/en_server.lng
@@ -4,9 +4,8 @@
$wb["web_server_txt"] = 'Webserver';
$wb["dns_server_txt"] = 'DNS-Server';
$wb["file_server_txt"] = 'Fileserver';
$wb["mysql_server_txt"] = 'MySQL-Server';
$wb["postgresql_server_txt"] = 'PostgreSQL-Server';
$wb["firebird_server_txt"] = 'Firebird-Server';
$wb["db_server_txt"] = 'DB-Server';
$wb["vserver_server_txt"] = 'VServer-Server';
$wb["active_txt"] = 'Active';
$wb["btn_save_txt"] = 'Save';
$wb["btn_cancel_txt"] = 'Cancel';
interface/web/admin/lib/lang/en_server_list.lng
@@ -5,9 +5,8 @@
$wb["web_server_txt"] = 'Web';
$wb["dns_server_txt"] = 'DNS';
$wb["file_server_txt"] = 'File';
$wb["mysql_server_txt"] = 'MySQL';
$wb["postgresql_server_txt"] = 'PostgreSQL';
$wb["firebird_server_txt"] = 'Firebird';
$wb["db_server_txt"] = 'DB';
$wb["vserver_server_txt"] = 'VServer';
$wb["page_txt"] = 'Page';
$wb["page_of_txt"] = 'of';
$wb["page_next_txt"] = 'Next';
interface/web/admin/list/server.list.php
@@ -92,7 +92,7 @@
                            'width'        => "",
                            'value'        => "");
$liste["item"][] = array(    'field'        => "mysql_server",
$liste["item"][] = array(    'field'        => "db_server",
                            'datatype'    => "VARCHAR",
                            'formtype'    => "TEXT",
                            'op'        => "like",
@@ -102,7 +102,7 @@
                            'value'        => "");
$liste["item"][] = array(    'field'        => "postgresql_server",
$liste["item"][] = array(    'field'        => "vserver_server",
                            'datatype'    => "VARCHAR",
                            'formtype'    => "TEXT",
                            'op'        => "like",
@@ -111,13 +111,4 @@
                            'width'        => "",
                            'value'        => "");
$liste["item"][] = array(    'field'        => "firebird_server",
                            'datatype'    => "VARCHAR",
                            'formtype'    => "TEXT",
                            'op'        => "like",
                            'prefix'    => "%",
                            'suffix'    => "%",
                            'width'        => "",
                            'value'        => "");
?>
interface/web/admin/templates/server_edit_services.htm
@@ -24,16 +24,12 @@
    <td class="frmText11">{tmpl_var name='file_server_txt'}</td>
  </tr>
  <tr>
    <td class="frmText11">{tmpl_var name='mysql_server'}</td>
    <td class="frmText11">{tmpl_var name='mysql_server_txt'}</td>
    <td class="frmText11">{tmpl_var name='db_server'}</td>
    <td class="frmText11">{tmpl_var name='db_server_txt'}</td>
  </tr>
  <tr>
    <td class="frmText11">{tmpl_var name='postgresql_server'}</td>
    <td class="frmText11">{tmpl_var name='postgresql_server_txt'}</td>
  </tr>
  <tr>
    <td class="frmText11">{tmpl_var name='firebird_server'}</td>
    <td class="frmText11">{tmpl_var name='firebird_server_txt'}</td>
    <td class="frmText11">{tmpl_var name='vserver_server'}</td>
    <td class="frmText11">{tmpl_var name='vserver_server_txt'}</td>
  </tr>
  </table>
  </fieldset>
interface/web/admin/templates/server_list.htm
@@ -18,9 +18,8 @@
    <td class="frmText11"><input type="text" name="search_web_server" value="{tmpl_var name='search_web_server'}" class="text" size="2" /></td>
    <td class="frmText11"><input type="text" name="search_dns_server" value="{tmpl_var name='search_dns_server'}" class="text" size="2" /></td>
    <td class="frmText11"><input type="text" name="search_file_server" value="{tmpl_var name='search_file_server'}" class="text" size="2" /></td>
    <td class="frmText11"><input type="text" name="search_mysql_server" value="{tmpl_var name='search_mysql_server'}" class="text" size="2" /></td>
    <td class="frmText11"><input type="text" name="search_postgresql_server" value="{tmpl_var name='search_postgresql_server'}" class="text" size="2" /></td>
    <td class="frmText11"><input type="text" name="search_firebird_server" value="{tmpl_var name='search_firebird_server'}" class="text" size="2" /></td>
    <td class="frmText11"><input type="text" name="search_mysql_server" value="{tmpl_var name='search_db_server'}" class="text" size="2" /></td>
    <td class="frmText11"><input type="text" name="search_postgresql_server" value="{tmpl_var name='search_vserver_server'}" class="text" size="2" /></td>
    <td class="frmText11" align="right"><input name="Filter" type="submit" id="Filter" value="{tmpl_var name="filter_txt"}"></td>
  </tr>
  <tmpl_loop name="records">
@@ -30,9 +29,8 @@
    <td class="frmText11"><a href="server_edit.php?id={tmpl_var name='id'}" class="frmText11">{tmpl_var name="web_server"}</a></td>
    <td class="frmText11"><a href="server_edit.php?id={tmpl_var name='id'}" class="frmText11">{tmpl_var name="dns_server"}</a></td>
    <td class="frmText11"><a href="server_edit.php?id={tmpl_var name='id'}" class="frmText11">{tmpl_var name="file_server"}</a></td>
    <td class="frmText11"><a href="server_edit.php?id={tmpl_var name='id'}" class="frmText11">{tmpl_var name="mysql_server"}</a></td>
    <td class="frmText11"><a href="server_edit.php?id={tmpl_var name='id'}" class="frmText11">{tmpl_var name="postgresql_server"}</a></td>
    <td class="frmText11"><a href="server_edit.php?id={tmpl_var name='id'}" class="frmText11">{tmpl_var name="firebird_server"}</a></td>
    <td class="frmText11"><a href="server_edit.php?id={tmpl_var name='id'}" class="frmText11">{tmpl_var name="db_server"}</a></td>
    <td class="frmText11"><a href="server_edit.php?id={tmpl_var name='id'}" class="frmText11">{tmpl_var name="vserver_server"}</a></td>
    <td class="frmText11" align="right">[<a href="javascript: del_record('server_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}');" class="frmText11">{tmpl_var name='delete_txt'}</a>]</td>
  </tr>
  </tmpl_loop>
server/lib/app.inc.php
New file
@@ -0,0 +1,128 @@
<?php
/*
Copyright (c) 2006, Till Brehm, projektfarm Gmbh
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
    * Neither the name of ISPConfig nor the names of its contributors
      may be used to endorse or promote products derived from this software without
      specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
class app {
        function app() {
                global $conf;
                if($conf["start_db"] == true) {
                    $this->load('db_'.$conf["db_type"]);
                    $this->db = new db;
                }
        }
        function uses($classes) {
                global $conf;
                $cl = explode(',',$classes);
                if(is_array($cl)) {
                        foreach($cl as $classname) {
                                if(!is_object($this->$classname)) {
                                        include_once($conf['classpath'] . "/".$classname.".inc.php");
                                        $this->$classname = new $classname;
                                }
                        }
                }
        }
        function load($files) {
                global $conf;
                $fl = explode(',',$files);
                if(is_array($fl)) {
                        foreach($fl as $file) {
                                include_once($conf['classpath'] . "/".$file.".inc.php");
                        }
                }
        }
        /*
         0 = DEBUG
         1 = WARNING
         2 = ERROR
        */
        function log($msg, $priority = 0) {
                global $conf;
                if($priority >= $conf["log_priority"]) {
                        if (is_writable($conf["log_file"])) {
                            if (!$fp = fopen ($conf["log_file"], "a")) {
                                die("Unable to open Logfile.");
                            }
                            switch ($priority) {
                                case: 0;
                                    $priority_txt = "DEBUG";
                                break;
                                case: 1;
                                    $priority_txt = "WARNING";
                                break;
                                case: 2;
                                    $priority_txt = "ERROR";
                                break;
                            }
                            if (!fwrite($fp, date("d.m.Y-H:i")." - ".$priority_txt." - ". $msg."\r\n")) {
                                die("Unable to write to logfile.");
                            }
                            fclose($fp);
                        } else {
                            $this->error("Logfile ist nicht beschreibbar.");
                        }
                } // if
        } // func
        /*
         0 = DEBUG
         1 = WARNING
         2 = ERROR
        */
        function error($msg) {
            $this->log($msg,3);
            die();
        }
}
/*
 Initialize application (app) object
*/
$app = new app;
?>
server/lib/classes/db_mysql.inc.php
New file
@@ -0,0 +1,480 @@
<?php
/*
Copyright (c) 2005, Till Brehm, projektfarm Gmbh
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
    * Neither the name of ISPConfig nor the names of its contributors
      may be used to endorse or promote products derived from this software without
      specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
    class db
    {
        var $dbHost = "";        // hostname of the MySQL server
        var $dbName = "";        // logical database name on that server
        var $dbUser = "";        // database authorized user
        var $dbPass = "";        // user's password
        var $linkId = 0;        // last result of mysql_connect()
        var $queryId = 0;        // last result of mysql_query()
        var $record    = array();    // last record fetched
        var $autoCommit = 1;    // Autocommit Transactions
        var $currentRow;        // current row number
        var $errorNumber = 0;    // last error number
        var $errorMessage = "";    // last error message
        var $errorLocation = "";// last error location
        var $show_error_messages = false;
        // constructor
        function db()
        {
            global $conf;
            $this->dbHost = $conf["db_host"];
            $this->dbName = $conf["db_database"];
            $this->dbUser = $conf["db_user"];
            $this->dbPass = $conf["db_password"];
            //$this->connect();
        }
        // error handler
        function updateError($location)
        {
            $this->errorNumber = mysql_errno();
            $this->errorMessage = mysql_error();
            $this->errorLocation = $location;
            if($this->errorNumber && $this->show_error_messages)
            {
                echo('<br /><b>'.$this->errorLocation.'</b><br />'.$this->errorMessage);
                flush();
            }
        }
        function connect()
        {
            if($this->linkId == 0)
            {
                $this->linkId = mysql_connect($this->dbHost, $this->dbUser, $this->dbPass);
                if(!$this->linkId)
                {
                    $this->updateError('DB::connect()<br />mysql_connect');
                    return false;
                }
            }
            return true;
        }
        function query($queryString)
        {
            if(!$this->connect())
            {
                return false;
            }
            if(!mysql_select_db($this->dbName, $this->linkId))
            {
                $this->updateError('DB::connect()<br />mysql_select_db');
                return false;
            }
            $this->queryId = @mysql_query($queryString, $this->linkId);
            $this->updateError('DB::query('.$queryString.')<br />mysql_query');
            if(!$this->queryId)
            {
                return false;
            }
            $this->currentRow = 0;
            return $this->queryId;
        }
        // returns all records in an array
        function queryAllRecords($queryString)
        {
            if(!$this->query($queryString))
            {
                return false;
            }
            $ret = array();
            while($line = $this->nextRecord())
            {
                $ret[] = $line;
            }
            return $ret;
        }
        // returns one record in an array
        function queryOneRecord($queryString)
        {
            if(!$this->query($queryString) || $this->numRows() == 0)
            {
                return false;
            }
            return $this->nextRecord();
        }
        // returns the next record in an array
        function nextRecord()
        {
            $this->record = mysql_fetch_assoc($this->queryId);
            $this->updateError('DB::nextRecord()<br />mysql_fetch_array');
            if(!$this->record || !is_array($this->record))
            {
                return false;
            }
            $this->currentRow++;
            return $this->record;
        }
        // returns number of rows returned by the last select query
        function numRows()
        {
            return mysql_num_rows($this->queryId);
        }
        // returns mySQL insert id
        function insertID()
        {
            return mysql_insert_id($this->linkId);
        }
        // Check der variablen
        // deprecated, now use quote
        function check($formfield)
        {
            return $this->quote($formfield);
        }
        // Check der variablen
        function quote($formfield)
        {
            return addslashes($formfield);
        }
        // Check der variablen
        function unquote($formfield)
        {
            return stripslashes($formfield);
        }
        function toLower($record) {
            if(is_array($record)) {
                foreach($record as $key => $val) {
                    $key = strtolower($key);
                    $out[$key] = $val;
                }
            }
        return $out;
        }
       function insert($tablename,$form,$debug = 0)
       {
         if(is_array($form)){
           foreach($form as $key => $value)
               {
               $sql_key .= "$key, ";
            $sql_value .= "'".$this->check($value)."', ";
               }
           $sql_key = substr($sql_key,0,strlen($sql_key) - 2);
        $sql_value = substr($sql_value,0,strlen($sql_value) - 2);
           $sql = "INSERT INTO $tablename (" . $sql_key . ") VALUES (" . $sql_value .")";
               if($debug == 1) echo "SQL-Statement: ".$sql."<br><br>";
               $this->query($sql);
               if($debug == 1) echo "mySQL Error Message: ".$this->errorMessage;
          }
       }
       function update($tablename,$form,$bedingung,$debug = 0)
       {
         if(is_array($form)){
           foreach($form as $key => $value)
               {
               $insql .= "$key = '".$this->check($value)."', ";
               }
                   $insql = substr($insql,0,strlen($insql) - 2);
                   $sql = "UPDATE $tablename SET " . $insql . " WHERE $bedingung";
               if($debug == 1) echo "SQL-Statement: ".$sql."<br><br>";
               $this->query($sql);
               if($debug == 1) echo "mySQL Error Message: ".$this->errorMessage;
           }
       }
       function closeConn() {
       }
       function freeResult() {
       }
       function delete() {
       }
       function Transaction($action) {
       //action = begin, commit oder rollback
       }
       /*
       $columns = array(action =>   add | alter | drop
                        name =>     Spaltenname
                        name_new => neuer Spaltenname, nur bei 'alter' belegt
                        type =>     42go-Meta-Type: int16, int32, int64, double, char, varchar, text, blob
                        typeValue => Wert z.B. bei Varchar
                        defaultValue =>  Default Wert
                        notNull =>   true | false
                        autoInc =>   true | false
                        option =>   unique | primary | index)
       */
       function createTable($table_name,$columns) {
       $index = "";
       $sql = "CREATE TABLE $table_name (";
       foreach($columns as $col){
            $sql .= $col["name"]." ".$this->mapType($col["type"],$col["typeValue"])." ";
            if($col["defaultValue"] != "") $sql .= "DEFAULT '".$col["defaultValue"]."' ";
            if($col["notNull"] == true) {
                $sql .= "NOT NULL ";
            } else {
                $sql .= "NULL ";
            }
            if($col["autoInc"] == true) $sql .= "auto_increment ";
            $sql.= ",";
            // key Definitionen
            if($col["option"] == "primary") $index .= "PRIMARY KEY (".$col["name"]."),";
            if($col["option"] == "index") $index .= "INDEX (".$col["name"]."),";
            if($col["option"] == "unique") $index .= "UNIQUE (".$col["name"]."),";
       }
       $sql .= $index;
       $sql = substr($sql,0,-1);
       $sql .= ")";
       $this->query($sql);
       return true;
       }
       /*
       $columns = array(action =>   add | alter | drop
                        name =>     Spaltenname
                        name_new => neuer Spaltenname, nur bei 'alter' belegt
                        type =>     42go-Meta-Type: int16, int32, int64, double, char, varchar, text, blob
                        typeValue => Wert z.B. bei Varchar
                        defaultValue =>  Default Wert
                        notNull =>   true | false
                        autoInc =>   true | false
                        option =>   unique | primary | index)
       */
       function alterTable($table_name,$columns) {
       $index = "";
       $sql = "ALTER TABLE $table_name ";
       foreach($columns as $col){
            if($col["action"] == 'add') {
                $sql .= "ADD ".$col["name"]." ".$this->mapType($col["type"],$col["typeValue"])." ";
            } elseif ($col["action"] == 'alter') {
                $sql .= "CHANGE ".$col["name"]." ".$col["name_new"]." ".$this->mapType($col["type"],$col["typeValue"])." ";
            } elseif ($col["action"] == 'drop') {
                $sql .= "DROP ".$col["name"]." ";
            }
            if($col["action"] != 'drop') {
            if($col["defaultValue"] != "") $sql .= "DEFAULT '".$col["defaultValue"]."' ";
            if($col["notNull"] == true) {
                $sql .= "NOT NULL ";
            } else {
                $sql .= "NULL ";
            }
            if($col["autoInc"] == true) $sql .= "auto_increment ";
            $sql.= ",";
            // key Definitionen
            if($col["option"] == "primary") $index .= "PRIMARY KEY (".$col["name"]."),";
            if($col["option"] == "index") $index .= "INDEX (".$col["name"]."),";
            if($col["option"] == "unique") $index .= "UNIQUE (".$col["name"]."),";
            }
       }
       $sql .= $index;
       $sql = substr($sql,0,-1);
       //die($sql);
       $this->query($sql);
       return true;
       }
       function dropTable($table_name) {
       $this->check($table_name);
       $sql = "DROP TABLE '". $table_name."'";
       return $this->query($sql);
       }
       // gibt Array mit Tabellennamen zurück
       function getTables($database_name = '') {
            if($database_name == '') $database_name = $this->dbName;
            $result = mysql_list_tables($database_name);
            for ($i = 0; $i < mysql_num_rows($result); $i++) {
                $tb_names[$i] = mysql_tablename($result, $i);
            }
            return $tb_names;
       }
       // gibt Feldinformationen zur Tabelle zurück
       /*
       $columns = array(action =>   add | alter | drop
                        name =>     Spaltenname
                        name_new => neuer Spaltenname, nur bei 'alter' belegt
                        type =>     42go-Meta-Type: int16, int32, int64, double, char, varchar, text, blob
                        typeValue => Wert z.B. bei Varchar
                        defaultValue =>  Default Wert
                        notNull =>   true | false
                        autoInc =>   true | false
                        option =>   unique | primary | index)
       */
       function tableInfo($table_name) {
       global $go_api,$go_info;
       // Tabellenfelder einlesen
        if($rows = $go_api->db->queryAllRecords("SHOW FIELDS FROM ".$table_name)){
        foreach($rows as $row) {
            $name = $row[0];
            $default = $row[4];
            $key = $row[3];
            $extra = $row[5];
            $isnull = $row[2];
            $type = $row[1];
            $column = array();
            $column["name"] = $name;
            //$column["type"] = $type;
            $column["defaultValue"] = $default;
            if(stristr($key,"PRI")) $column["option"] = "primary";
            if(stristr($isnull,"YES")) {
                $column["notNull"] = false;
            } else {
               $column["notNull"] = true;
            }
            if($extra == 'auto_increment') $column["autoInc"] = true;
            // Type in Metatype umsetzen
            if(stristr($type,"int(")) $metaType = 'int32';
            if(stristr($type,"bigint")) $metaType = 'int64';
            if(stristr($type,"char")) {
                $metaType = 'char';
                $tmp_typeValue = explode('(',$type);
                $column["typeValue"] = substr($tmp_typeValue[1],0,-1);
            }
            if(stristr($type,"varchar")) {
                $metaType = 'varchar';
                $tmp_typeValue = explode('(',$type);
                $column["typeValue"] = substr($tmp_typeValue[1],0,-1);
            }
            if(stristr($type,"text")) $metaType = 'text';
            if(stristr($type,"double")) $metaType = 'double';
            if(stristr($type,"blob")) $metaType = 'blob';
            $column["type"] = $metaType;
        $columns[] = $column;
        }
            return $columns;
        } else {
            return false;
        }
        //$this->createTable('tester',$columns);
        /*
        $result = mysql_list_fields($go_info["server"]["db_name"],$table_name);
        $fields = mysql_num_fields ($result);
        $i = 0;
        $table = mysql_field_table ($result, $i);
        while ($i < $fields) {
            $name  = mysql_field_name  ($result, $i);
            $type  = mysql_field_type  ($result, $i);
            $len   = mysql_field_len   ($result, $i);
            $flags = mysql_field_flags ($result, $i);
            print_r($flags);
            $columns = array(name => $name,
                        type =>     "",
                        defaultValue =>  "",
                        isnull =>   1,
                        option =>   "");
            $returnvar[] = $columns;
            $i++;
        }
        */
       }
       function mapType($metaType,$typeValue) {
       global $go_api;
       $metaType = strtolower($metaType);
       switch ($metaType) {
       case 'int16':
            return 'smallint';
       break;
       case 'int32':
            return 'int';
       break;
       case 'int64':
            return 'bigint';
       break;
       case 'double':
            return 'double';
       break;
       case 'char':
            return 'char';
       break;
       case 'varchar':
            if($typeValue < 1) die("Datenbank Fehler: Für diesen Datentyp ist eine Längenangabe notwendig.");
            return 'varchar('.$typeValue.')';
       break;
       case 'text':
            return 'text';
       break;
       case 'blob':
            return 'blob';
       break;
       }
       }
    }
?>
server/lib/classes/ini_parser.inc.php
New file
@@ -0,0 +1,69 @@
<?php
/*
Copyright (c) 2006, Till Brehm, projektfarm Gmbh
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
    * Neither the name of ISPConfig nor the names of its contributors
      may be used to endorse or promote products derived from this software without
      specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
class ini_parser {
    var $config;
    function parse_ini_string($ini) {
        $ini = str_replace("\r\n","\n",$ini);
        $lines = explode("\n",$ini);
        foreach($lines as $line) {
            if($line != '') {
                $line = trim($line);
                if(preg_match("/^\[([\w\d_]+)\]$/", $line, $matches)) {
                    $section = strtolower($matches[1]);
                } elseif(preg_match("/^([\w\d_]+)=(.*)$/", $line, $matches) && $section != null) {
                    $item = trim($matches[1]);
                    $this->config[$section][$item] = trim($matches[2]);
                }
            }
        }
        return $this->config;
    }
    function get_ini_string($file) {
        $content = '';
        foreach($this->config as $section => $data) {
            $content .= "[$section]\n";
            foreach($data as $item => $value) {
                if($value != '') $content .= "$item=$value\n";
            }
        }
        return $content;
    }
}
?>
server/lib/config.inc.php
New file
@@ -0,0 +1,69 @@
<?php
/*
Copyright (c) 2006, Till Brehm, Falko Timme, projektfarm Gmbh
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
    * Neither the name of ISPConfig nor the names of its contributors
      may be used to endorse or promote products derived from this software without
      specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
$conf["server_id"]         = "1";
$conf["app_version"]     = "3.0.0";
//$conf["rootpath"]        = "F:\\server\\www\\ispconfig3\\server";
$conf["rootpath"]        = "D:\\www\\ispconfig3\\server";
//$conf["rootpath"]        = "/home/www/ispconfig3/web/cms";
$conf["fs_div"]            = "/"; // File system divider, \\ on windows and / on linux and unix
$conf["classpath"]        = $conf["rootpath"].$conf["fs_div"]."lib".$conf["fs_div"]."classes";
$conf["temppath"]        = $conf["rootpath"].$conf["fs_div"]."temp";
/*
        Logging
*/
$conf["log_file"]        = $conf["rootpath"].$conf["fs_div"]."ispconfig.log";
$conf["log_priority"]    = 0 // 0 = Debug, 1 = Warning, 2 = Error
/*
        Database Settings
*/
$conf["db_type"]        = 'mysql';
$conf["db_host"]        = 'localhost';
$conf["db_database"]    = 'ispconfig3';
$conf["db_user"]        = 'root';
$conf["db_password"]    = '';
/*
        Auto Load Modules
*/
$conf["start_db"]            = true;
$conf["load_server_config"]    = true;
?>
server/server.php
New file
@@ -0,0 +1,97 @@
<?php
/*
Copyright (c) 2006, Till Brehm, projektfarm Gmbh
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
    * Neither the name of ISPConfig nor the names of its contributors
      may be used to endorse or promote products derived from this software without
      specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
require("lib/config.inc.php");
require("lib/app.inc.php");
set_time_limit(0);
// make sure server_id is always an int
$conf["server_id"] = intval($conf["server_id"]);
// Get server record, if updates where available for this server
$server_db_record = $app->db->queryOneRecord("SELECT * FROM server WHERE update = 1 AND server_id = ".$conf["server_id"])
if($server_db_record == false) {
    $app->log("Nothing to update for server_id ".$conf["server_id"]);
    die();
} else {
    // Set update status to 0, so we dont start the update process twice
    $app->db->query("UPDATE server SET update = 0 WHERE server_id = ".$conf["server_id"]);
    $app->log("Begin update.");
}
// Check if another process is running
if(is_file($conf["temppath"].$conf["fs_div"].".ispconfig_lock")){
  clearstatcache();
  for($i=0;$i<120;$i++){ // Wait max. 120 sec, then proceed
    if(is_file($conf["temppath"].$conf["fs_div"].".ispconfig_lock")){
      sleep(1);
      clearstatcache();
    }
  }
}
// Set Lockfile
@touch($conf["temppath"].$conf["fs_div"].".ispconfig_lock");
$app->log("Set Lock: ".$conf["temppath"].$conf["fs_div"].".ispconfig_lock");
// Get server configuration
$this->uses('ini_parser');
$conf["serverconfig"] = $app->ini_parser->parse_ini_string(stripslashes($server_db_record["config"]));
// Run the configuration modules
if($server_db_record["mail_server"] == 1) {
    $app->uses('mod_mail_'.$conf["serverconfig"]["mail"]["module"]);
}
if($server_db_record["web_server"] == 1) {
    $app->uses('mod_web_'.$conf["serverconfig"]["web"]["module"]);
}
if($server_db_record["dns_server"] == 1) {
    $app->uses('mod_dns_'.$conf["serverconfig"]["dns"]["module"]);
}
if($server_db_record["file_server"] == 1) {
    $app->uses('mod_file_'.$conf["serverconfig"]["file"]["module"]);
}
if($server_db_record["db_server"] == 1) {
    $app->uses('mod_db_'.$conf["serverconfig"]["db"]["module"]);
}
if($server_db_record["vserver_server"] == 1) {
    $app->uses('mod_vserver_'.$conf["serverconfig"]["vserver"]["module"]);
}
// Remove lock
@unlink($conf["temppath"].$conf["fs_div"].".ispconfig_lock");
$app->log("Remove Lock: ".$conf["temppath"].$conf["fs_div"].".ispconfig_lock");
?>