+
+use strict;
+use esmith::ConfigDB;
+use DBI;
+
+# Exit early if there is nothing to do
+exit 0 unless (-f '/var/lib/mysql/horde/imp_addr.frm');
+die("horde db must exist") unless ( -d "/var/lib/mysql/horde/");
+die("turba db must exist") unless ( -f "/var/lib/mysql/horde/turba_objects.frm");
+
+my $conf = esmith::ConfigDB->open() || die 'Unable to open config db';
+
+# FIXME - what are these for?
+$ENV{'PATH'} = '';
+$ENV{'SHELL'} = '/bin/bash';
+delete $ENV{'ENV'};
+delete $ENV{'BASH_ENV'};
+
+our $location = 'localhost';
+our $port_num = '3306';
+our $username = 'horde';
+our $password = $conf->get_prop('horde', 'DbPassword') || 'horde';
+
+our $IMP_DATABASE = 'horde';
+our $IMP_TABLE = 'imp_addr';
+our $TURBA_DATABASE = 'horde';
+our $TURBA_TABLE = 'turba_objects';
+our $domain = $conf->get('DomainName') || 'localhost';
+
+unless ($domain eq "localhost")
+{
+ $domain = $domain->value || "localhost";
+}
+
+our $dbi_options = {RaiseError => 1, ChopBlanks => 1, AutoCommit => 1};
+
+my $db_imphandle = DBI->connect
+ ("DBI:mysql:$IMP_DATABASE:$location:$port_num",
+ $username, $password, $dbi_options )
+ || die ("Connection error: $DBI::errstr");
+
+my $db_turbahandle = DBI->connect
+ ("DBI:mysql:$TURBA_DATABASE",
+ $username, $password, $dbi_options )
+ || die ("Connection error: $DBI::errstr");
+
+
+my $imp_statement = $db_imphandle->prepare("SELECT * FROM $IMP_TABLE");
+$imp_statement->execute();
+my $turba_statement;
+
+while (my ($owner, $address, $nickname, $fullname) =
+ $imp_statement->fetchrow_array())
+{
+ my @chars = ( "A" .. "Z", "a" .. "z", 0 .. 9, qw(! @ $ % ^ & *) );
+ my $unique_key = join("", @chars[ map { rand @chars } ( 1 .. 31 ) ]);
+
+ # Remove the @domain.com part from the $owner, doesn't work in Turba
+ $owner =~ s/\@.*$//;
+ $owner .= "\@$domain";
+
+ # Quote the strings appropriately for the database
+ my $quoted_key = $db_imphandle->quote($unique_key);
+ my $quoted_owner = $db_imphandle->quote($owner);
+ my $quoted_fullname = $db_imphandle->quote($fullname);
+ my $quoted_address = $db_imphandle->quote($address);
+ my $quoted_nickname = $db_imphandle->quote($nickname);
+
+ $turba_statement = "INSERT INTO $TURBA_TABLE VALUES
+ ($quoted_key, $quoted_owner, $quoted_fullname,
+ $quoted_nickname,$quoted_address, '','','','','','','','','','','')";
+ $turba_statement = $db_turbahandle->prepare($turba_statement)
+ || die "prepare: $$turba_statement: $DBI::errstr";
+ $turba_statement->execute || die "execute: $$turba_statement: $DBI::errstr";
+}
+
+$imp_statement = "DROP TABLE $IMP_TABLE";
+$imp_statement = $db_imphandle->prepare($imp_statement)
+ || die "prepare: $$imp_statement: $DBI::errstr";
+$imp_statement->execute || die "execute: $$imp_statement: $DBI::errstr";
+$imp_statement->finish();
+# turba_statement will be undef if the imp_addr table is empty, so we check
+$turba_statement->finish() if $turba_statement;
+
+$db_imphandle->disconnect;
+$db_turbahandle->disconnect;
diff --git a/root/etc/e-smith/events/actions/turba_upgrade b/root/etc/e-smith/events/actions/turba_upgrade
new file mode 100644
index 0000000..3b2f84d
--- /dev/null
+++ b/root/etc/e-smith/events/actions/turba_upgrade
@@ -0,0 +1,598 @@
+#!/usr/bin/perl -w
+#----------------------------------------------------------------------
+# copyright (C) 2002-2005 Mitel Networks Corporation
+#
+# This program 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.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# Technical support for this program is available from Mitel Networks
+# Please visit our web site www.mitel.com/sme/ for details.
+#----------------------------------------------------------------------
+
+use strict;
+use DBI;
+use esmith::ConfigDB;
+use esmith::util;
+
+# Exit early if there is nothing to do
+die("horde db must exist") unless ( -d "/var/lib/mysql/horde/");
+die("turba db must exist") unless ( -f "/var/lib/mysql/horde/turba_objects.frm");
+
+
+# This is a translation of the script 'mysql_upgrade_1.1_to_1.2.sql
+# that is safe to run multiple times, and which can be run on a 1.2
+# installation without barfing.
+
+my $conf = esmith::ConfigDB->open_ro
+ or die "Can't open configuration database: $!\n";
+our $username = 'root';
+our $password = esmith::util::LdapPassword();
+our $TURBA_DATABASE = 'horde';
+our $dbi_options = {RaiseError => 1, ChopBlanks => 1, AutoCommit => 1};
+
+my $db_turbahandle = DBI->connect
+ ("DBI:mysql:$TURBA_DATABASE",
+ $username, $password, $dbi_options )
+ || die ("Connection error: $DBI::errstr");
+
+#This section commented out for Turba 2.2 since on a new install this isn't needed
+#and on a 6.x and 7.x install, this would have already been run. John H. Bennett III
+# These are all safe to run multiple times
+
+my @statements = (
+ "ALTER TABLE turba_shares CHANGE share_owner share_owner VARCHAR(255)",
+ "ALTER TABLE turba_shares CHANGE share_flags share_flags SMALLINT DEFAULT 0 NOT NULL",
+ "ALTER TABLE turba_shares CHANGE perm_creator perm_creator SMALLINT DEFAULT 0 NOT NULL",
+ "ALTER TABLE turba_shares CHANGE perm_default perm_default SMALLINT DEFAULT 0 NOT NULL",
+ "ALTER TABLE turba_shares CHANGE perm_guest perm_guest SMALLINT DEFAULT 0 NOT NULL",
+ "ALTER TABLE turba_shares_users CHANGE user_uid user_uid VARCHAR(255)",
+ "ALTER TABLE turba_shares_groups CHANGE group_uid group_uid VARCHAR(255)",
+);
+
+foreach my $statement (@statements)
+{
+ $statement =
+ $db_turbahandle->prepare("$statement")
+ or die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+# We now need to create some columns, but we need to first check
+# whether they exist already
+my $sth = $db_turbahandle->prepare("show columns from turba_objects");
+$sth->execute;
+my $turba_objects = $sth->fetchall_hashref('Field');
+
+my $sth1 = $db_turbahandle->prepare("show columns from turba_shares");
+$sth1->execute;
+my $turba_shares = $sth1->fetchall_hashref('Field');
+
+my $sth2 = $db_turbahandle->prepare("show columns from turba_shares_groups");
+$sth2->execute;
+my $turba_shares_groups = $sth2->fetchall_hashref('Field');
+
+my $sth3 = $db_turbahandle->prepare("show columns from turba_shares_users");
+$sth3->execute;
+my $turba_shares_users = $sth3->fetchall_hashref('Field');
+
+
+#print "Field object_type is ",
+# defined $turba_objects->{object_type} ? "already " : "un",
+# "defined\n";
+
+ # We need to be careful about these as they will fail if the
+ # column exists, so we check the error.
+
+ unless (defined $turba_objects->{object_firstname})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_firstname ".
+ "VARCHAR(255)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_lastname})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_lastname ".
+ "VARCHAR(255)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+
+ my $statement1 =
+ "UPDATE turba_objects SET object_lastname = object_name";
+ $statement1 = $db_turbahandle->prepare($statement1) or
+ die "prepare: $$statement1: $DBI::errstr";
+ $statement1->execute or die "execute: $$statement1: $DBI::errstr";
+}
+
+ unless (!defined $turba_objects->{object_name})
+{
+ my $statement =
+ "ALTER TABLE turba_objects DROP COLUMN object_name";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_middlenames})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_middlenames ".
+ "VARCHAR(255)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_nameprefix})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_nameprefix ".
+ "VARCHAR(255)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_namesuffix})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_namesuffix ".
+ "VARCHAR(32)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_phototype})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_phototype ".
+ "VARCHAR(10)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_bday})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_bday ".
+ "VARCHAR(10)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_spouse})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_spouse ".
+ "VARCHAR(255)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_anniversary})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_anniversary ".
+ "VARCHAR(10)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_children})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_children ".
+ "VARCHAR(255)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_homestreet})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_homestreet ".
+ "VARCHAR(255)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+
+ my $statement1 =
+ "UPDATE turba_objects SET object_homestreet = object_homeaddress";
+ $statement1 = $db_turbahandle->prepare($statement1) or
+ die "prepare: $$statement1: $DBI::errstr";
+ $statement1->execute or die "execute: $$statement1: $DBI::errstr";
+}
+
+ unless (!defined $turba_objects->{object_homeaddress})
+{
+ my $statement =
+ "ALTER TABLE turba_objects DROP COLUMN object_homeaddress";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_homepob})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_homepob ".
+ "VARCHAR(10)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_homecity})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_homecity ".
+ "VARCHAR(255)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_homeprovince})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_homeprovince ".
+ "VARCHAR(255)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_homepostalcode})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_homepostalcode ".
+ "VARCHAR(255)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_homecountry})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_homecountry ".
+ "VARCHAR(255)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_workstreet})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_workstreet ".
+ "VARCHAR(255)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+
+ my $statement1 =
+ "UPDATE turba_objects SET object_workstreet = object_workaddress";
+ $statement1 = $db_turbahandle->prepare($statement1) or
+ die "prepare: $$statement1: $DBI::errstr";
+ $statement1->execute or die "execute: $$statement1: $DBI::errstr";
+}
+
+ unless (!defined $turba_objects->{object_workaddress})
+{
+ my $statement =
+ "ALTER TABLE turba_objects DROP COLUMN object_workaddress";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_workpob})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_workpob ".
+ "VARCHAR(10)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_workcity})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_workcity ".
+ "VARCHAR(255)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_workprovince})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_workprovince ".
+ "VARCHAR(255)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_workpostalcode})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_workpostalcode ".
+ "VARCHAR(255)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_workcountry})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_workcountry ".
+ "VARCHAR(255)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_tz})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_tz ".
+ "VARCHAR(32)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_geo})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_geo ".
+ "VARCHAR(255)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_pager})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_pager ".
+ "VARCHAR(25)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_role})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_role ".
+ "VARCHAR(255)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_logotype})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_logotype ".
+ "VARCHAR(10)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_category})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_category ".
+ "VARCHAR(80)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_url})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_url ".
+ "VARCHAR(255)";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_photo})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_photo BLOB";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+ unless (defined $turba_objects->{object_logo})
+{
+ my $statement =
+ "ALTER TABLE turba_objects ADD COLUMN object_logo BLOB";
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+# Create an index for owner_id if needed
+unless ($turba_objects->{owner_id}->{Key})
+{
+ my $statement = 'alter table turba_objects ' .
+ 'add index turba_owner_idx (owner_id)';
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+# Create an index for object_email_id if needed
+unless ($turba_objects->{object_email}->{Key})
+{
+ my $statement = 'alter table turba_objects ' .
+ 'add index turba_email_idx (object_email)';
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+# Create an index for object_firstname if needed
+unless ($turba_objects->{object_firstname}->{Key})
+{
+ my $statement = 'alter table turba_objects ' .
+ 'add index turba_firstname_idx (object_firstname)';
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+# Create an index for owner_lastname needed
+unless ($turba_objects->{object_lastname}->{Key})
+{
+ my $statement = 'alter table turba_objects ' .
+ 'add index turba_lastname_idx (object_lastname)';
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+# Create an index for share_name if needed
+unless ($turba_shares->{share_name}->{Key})
+{
+ my $statement = 'alter table turba_shares ' .
+ 'add index turba_shares_share_name_idx (share_name)';
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+# Create an index for share_owner if needed
+unless ($turba_shares->{share_owner}->{Key})
+{
+ my $statement = 'alter table turba_shares ' .
+ 'add index turba_shares_share_owner_idx (share_owner)';
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+# Create an index for perm_creator if needed
+unless ($turba_shares->{perm_creator}->{Key})
+{
+ my $statement = 'alter table turba_shares ' .
+ 'add index turba_shares_perm_creator_idx (perm_creator)';
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+# Create an index for perm_default if needed
+unless ($turba_shares->{perm_default}->{Key})
+{
+ my $statement = 'alter table turba_shares ' .
+ 'add index turba_shares_perm_default_idx (perm_default)';
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+# Create an index for perm_guest if needed
+unless ($turba_shares->{perm_guest}->{Key})
+{
+ my $statement = 'alter table turba_shares ' .
+ 'add index turba_shares_perm_guest_idx (perm_guest)';
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+# Create an index for share_id if needed
+unless ($turba_shares_groups->{share_id}->{Key})
+{
+ my $statement = 'alter table turba_shares_groups ' .
+ 'add index turba_shares_groups_share_id_idx (share_id)';
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+# Create an index for group_uid if needed
+unless ($turba_shares_groups->{group_uid}->{Key})
+{
+ my $statement = 'alter table turba_shares_groups ' .
+ 'add index turba_shares_groups_group_uid_idx (group_uid)';
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+# Create an index for perm if needed
+unless ($turba_shares_groups->{perm}->{Key})
+{
+ my $statement = 'alter table turba_shares_groups ' .
+ 'add index turba_shares_groups_perm_idx (perm)';
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+# Create an index for share_id if needed
+unless ($turba_shares_users->{share_id}->{Key})
+{
+ my $statement = 'alter table turba_shares_users ' .
+ 'add index turba_shares_users_share_id_idx (share_id)';
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+# Create an index for user_uid if needed
+unless ($turba_shares_users->{user_uid}->{Key})
+{
+ my $statement = 'alter table turba_shares_users ' .
+ 'add index turba_shares_users_user_uid_idx (user_uid)';
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
+
+# Create an index for perm if needed
+unless ($turba_shares_users->{perm}->{Key})
+{
+ my $statement = 'alter table turba_shares_users ' .
+ 'add index turba_shares_users_perm_idx (perm)';
+ $statement = $db_turbahandle->prepare($statement) or
+ die "prepare: $$statement: $DBI::errstr";
+ $statement->execute or die "execute: $$statement: $DBI::errstr";
+}
diff --git a/root/etc/e-smith/events/bootstrap-console-save/.gitignore b/root/etc/e-smith/events/bootstrap-console-save/.gitignore
new file mode 100644
index 0000000..e69de29
diff --git a/root/etc/e-smith/events/email-update/.gitignore b/root/etc/e-smith/events/email-update/.gitignore
new file mode 100644
index 0000000..e69de29
diff --git a/root/etc/e-smith/events/post-install/.gitignore b/root/etc/e-smith/events/post-install/.gitignore
new file mode 100644
index 0000000..e69de29
diff --git a/root/etc/e-smith/events/post-upgrade/.gitignore b/root/etc/e-smith/events/post-upgrade/.gitignore
new file mode 100644
index 0000000..e69de29
diff --git a/root/etc/e-smith/templates.metadata/etc/e-smith/sql/init/40mysql.create.turba b/root/etc/e-smith/templates.metadata/etc/e-smith/sql/init/40mysql.create.turba
new file mode 100644
index 0000000..ff25203
--- /dev/null
+++ b/root/etc/e-smith/templates.metadata/etc/e-smith/sql/init/40mysql.create.turba
@@ -0,0 +1 @@
+PERMS=0544
diff --git a/root/etc/e-smith/templates.metadata/etc/e-smith/sql/init/50turba_upgrade b/root/etc/e-smith/templates.metadata/etc/e-smith/sql/init/50turba_upgrade
new file mode 100644
index 0000000..ff25203
--- /dev/null
+++ b/root/etc/e-smith/templates.metadata/etc/e-smith/sql/init/50turba_upgrade
@@ -0,0 +1 @@
+PERMS=0544
diff --git a/root/etc/e-smith/templates.metadata/etc/e-smith/sql/init/57turba_mysql_reset_addressbook_pref b/root/etc/e-smith/templates.metadata/etc/e-smith/sql/init/57turba_mysql_reset_addressbook_pref
new file mode 100644
index 0000000..ff25203
--- /dev/null
+++ b/root/etc/e-smith/templates.metadata/etc/e-smith/sql/init/57turba_mysql_reset_addressbook_pref
@@ -0,0 +1 @@
+PERMS=0544
diff --git a/root/etc/e-smith/templates.metadata/etc/e-smith/sql/init/60migrate-imp-to-turba b/root/etc/e-smith/templates.metadata/etc/e-smith/sql/init/60migrate-imp-to-turba
new file mode 100644
index 0000000..ff25203
--- /dev/null
+++ b/root/etc/e-smith/templates.metadata/etc/e-smith/sql/init/60migrate-imp-to-turba
@@ -0,0 +1 @@
+PERMS=0544
diff --git a/root/etc/e-smith/templates.metadata/home/httpd/html/horde/turba/config/attributes.php b/root/etc/e-smith/templates.metadata/home/httpd/html/horde/turba/config/attributes.php
new file mode 100644
index 0000000..22a075e
--- /dev/null
+++ b/root/etc/e-smith/templates.metadata/home/httpd/html/horde/turba/config/attributes.php
@@ -0,0 +1,2 @@
+PERMS=0640
+GID="www"
diff --git a/root/etc/e-smith/templates.metadata/home/httpd/html/horde/turba/config/conf.php b/root/etc/e-smith/templates.metadata/home/httpd/html/horde/turba/config/conf.php
new file mode 100644
index 0000000..22a075e
--- /dev/null
+++ b/root/etc/e-smith/templates.metadata/home/httpd/html/horde/turba/config/conf.php
@@ -0,0 +1,2 @@
+PERMS=0640
+GID="www"
diff --git a/root/etc/e-smith/templates.metadata/home/httpd/html/horde/turba/config/prefs.php b/root/etc/e-smith/templates.metadata/home/httpd/html/horde/turba/config/prefs.php
new file mode 100644
index 0000000..22a075e
--- /dev/null
+++ b/root/etc/e-smith/templates.metadata/home/httpd/html/horde/turba/config/prefs.php
@@ -0,0 +1,2 @@
+PERMS=0640
+GID="www"
diff --git a/root/etc/e-smith/templates.metadata/home/httpd/html/horde/turba/config/sources.php b/root/etc/e-smith/templates.metadata/home/httpd/html/horde/turba/config/sources.php
new file mode 100644
index 0000000..22a075e
--- /dev/null
+++ b/root/etc/e-smith/templates.metadata/home/httpd/html/horde/turba/config/sources.php
@@ -0,0 +1,2 @@
+PERMS=0640
+GID="www"
diff --git a/root/etc/e-smith/templates/etc/e-smith/sql/init/40mysql.create.turba b/root/etc/e-smith/templates/etc/e-smith/sql/init/40mysql.create.turba
new file mode 100644
index 0000000..e605d6c
--- /dev/null
+++ b/root/etc/e-smith/templates/etc/e-smith/sql/init/40mysql.create.turba
@@ -0,0 +1,3 @@
+#! /bin/sh
+#test -f /var/lib/mysql/horde/turba_objects.frm && exit 0
+exec mysql horde < /home/httpd/html/horde/smeserver/turba.sql
diff --git a/root/etc/e-smith/templates/etc/e-smith/sql/init/50turba_upgrade b/root/etc/e-smith/templates/etc/e-smith/sql/init/50turba_upgrade
new file mode 100644
index 0000000..0c1c8bb
--- /dev/null
+++ b/root/etc/e-smith/templates/etc/e-smith/sql/init/50turba_upgrade
@@ -0,0 +1,2 @@
+#! /bin/sh
+exec /etc/e-smith/events/actions/turba_upgrade
diff --git a/root/etc/e-smith/templates/etc/e-smith/sql/init/57turba_mysql_reset_addressbook_pref b/root/etc/e-smith/templates/etc/e-smith/sql/init/57turba_mysql_reset_addressbook_pref
new file mode 100644
index 0000000..85ecb83
--- /dev/null
+++ b/root/etc/e-smith/templates/etc/e-smith/sql/init/57turba_mysql_reset_addressbook_pref
@@ -0,0 +1,2 @@
+#! /bin/sh
+exec mysql < /home/httpd/html/horde/smeserver/turba_mysql_reset_addressbook_pref.sql
diff --git a/root/etc/e-smith/templates/etc/e-smith/sql/init/60migrate-imp-to-turba b/root/etc/e-smith/templates/etc/e-smith/sql/init/60migrate-imp-to-turba
new file mode 100644
index 0000000..9ee9f3b
--- /dev/null
+++ b/root/etc/e-smith/templates/etc/e-smith/sql/init/60migrate-imp-to-turba
@@ -0,0 +1,3 @@
+#! /bin/sh
+test -f /var/lib/mysql/horde/imp_addr.frm && exit 0
+exec /etc/e-smith/events/actions/migrate-imp-to-turba
diff --git a/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/85TurbaAccess b/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/85TurbaAccess
new file mode 100644
index 0000000..97fadf7
--- /dev/null
+++ b/root/etc/e-smith/templates/etc/httpd/conf/httpd.conf/85TurbaAccess
@@ -0,0 +1,29 @@
+{
+ my $status = $imp{status} || 'disabled';
+ if ($status eq 'enabled')
+ {
+ $OUT .= qq(
+# IMP specific access configuration
+
+
+ order deny,allow
+ deny from all
+
+
+
+ order deny,allow
+ deny from all
+
+
+
+ order deny,allow
+ deny from all
+
+
+
+ order deny,allow
+ deny from all
+
+);
+ }
+}
diff --git a/root/etc/e-smith/templates/etc/openldap/slapd.conf/12hordeschema b/root/etc/e-smith/templates/etc/openldap/slapd.conf/12hordeschema
new file mode 100644
index 0000000..e69de29
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/conf.menu.apps.php/02AppTurba b/root/etc/e-smith/templates/home/httpd/html/horde/conf.menu.apps.php/02AppTurba
new file mode 100644
index 0000000..84e5046
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/conf.menu.apps.php/02AppTurba
@@ -0,0 +1,5 @@
+{
+my $TurbaMenu = $turba{MenuArray} || "enabled"; return "" unless ($TurbaMenu eq "enabled");
+$apps{turba} = 1;
+$OUT = '';
+}
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/config/registry.php/210AppRegistryTurba b/root/etc/e-smith/templates/home/httpd/html/horde/config/registry.php/210AppRegistryTurba
new file mode 100644
index 0000000..370b008
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/config/registry.php/210AppRegistryTurba
@@ -0,0 +1,17 @@
+// 210AppRegistryTurba
+$this->applications['turba'] = array(
+ 'fileroot' => dirname(__FILE__) . '/../turba',
+ 'webroot' => $this->applications['horde']['webroot'] . '/turba',
+ 'name' => _("Address Book"),
+ 'status' => 'active',
+ 'provides' => array('contacts', 'clients/getClientSource', 'clients/clientFields', 'clients/getClient', 'clients/getClients', 'clients/addClient', 'clients/updateClient', 'clients/deleteClient', 'clients/searchClients'),
+ 'menu_parent' => 'organizing'
+);
+
+$this->applications['turba-menu'] = array(
+ 'status' => 'block',
+ 'app' => 'turba',
+ 'blockname' => 'tree_menu',
+ 'menu_parent' => 'turba',
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/attributes.php/10Attributes b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/attributes.php/10Attributes
new file mode 100644
index 0000000..101b26a
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/attributes.php/10Attributes
@@ -0,0 +1,611 @@
+/**
+ * Turba Attributes File.
+ *
+ * This file contains examples of attributes that Turba understands, and their
+ * types. It may be safely edited by hand. Use attributes.php.dist as a
+ * reference.
+ *
+ * The syntax of this array is as follows:
+ * label - The text that the user will see attached to this
+ * field.
+ * type - One of the following:
+ * - spacer - header
+ * - description - html
+ * - number - int
+ * - intlist - text
+ * - longtext - countedtext
+ * - address - file
+ * - boolean - link
+ * - email - emailconfirm
+ * - password - passwordconfirm
+ * - enum - multienum
+ * - radio - set
+ * - date - time
+ * - monthyear - monthdayyear
+ * - colorpicker - sorter
+ * - creditcard - invalid
+ * - stringlist - addresslink (requires Horde-3.2)
+ * required - Boolean whether this field is mandatory.
+ * readonly - Boolean whether this field is editable.
+ * desc - Any help text attached to the field.
+ * time_object_label - The text to describe the time object category.
+ * Only valid for monthdayyear types and removing this
+ * from a monthdayyear type will hide it from the
+ * listTimeObjects api.
+ * params - Any other parameters that need to be passed to the
+ * field. For a documentation of available field
+ * paramaters see
+ * http://wiki.horde.org/Doc/Dev/FormTypes.
+ *
+ *
+ * $Horde: turba/config/attributes.php.dist,v 1.36.6.18 2008-11-12 06:29:26 wrobel Exp $
+ */
+
+/* Personal stuff. */
+$attributes['name'] = array(
+ 'label' => _("Name"),
+ 'type' => 'text',
+ 'required' => true,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['firstname'] = array(
+ 'label' => _("First Name"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['lastname'] = array(
+ 'label' => _("Last Name"),
+ 'type' => 'text',
+ 'required' => true,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['middlenames'] = array(
+ 'label' => _("Middle Names"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['namePrefix'] = array(
+ 'label' => _("Name Prefixes"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 32, 'maxlength' => 32)
+);
+$attributes['nameSuffix'] = array(
+ 'label' => _("Name Suffixes"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 32, 'maxlength' => 32)
+);
+$attributes['alias'] = array(
+ 'label' => _("Alias"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 32)
+);
+$attributes['nickname'] = array(
+ 'label' => _("Nickname"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 32, 'maxlength' => 32)
+);
+$attributes['birthday'] = array(
+ 'label' => _("Birthday"),
+ 'type' => 'monthdayyear',
+ 'required' => false,
+ 'params' => array('start_year' => 1900, 'end_year' => null, 'picker' => true, 'format_in' => '%Y-%m-%d', 'format_out' => $GLOBALS['prefs']->getValue('date_format')),
+ 'time_object_label' => _("Birthdays"),
+);
+$attributes['anniversary'] = array(
+ 'label' => _("Anniversary"),
+ 'type' => 'monthdayyear',
+ 'params' => array('start_year' => 1900, 'end_year' => null, 'picker' => true, 'format_in' => '%Y-%m-%d', 'format_out' => $GLOBALS['prefs']->getValue('date_format')),
+ 'required' => false,
+ 'time_object_label' => _("Anniversaries"),
+);
+$attributes['spouse'] = array(
+ 'label' => _("Spouse"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['children'] = array(
+ 'label' => _("Children"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['photo'] = array(
+ 'label' => _("Photo"),
+ 'type' => 'image',
+ 'required' => false,
+ 'params' => array('show_upload' => true, 'show_keeporig' => true, 'max_filesize' => null),
+);
+$attributes['phototype'] = array(
+ 'label' => _("Photo MIME Type"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+
+/* Locations, addresses. */
+$attributes['homeAddress'] = array(
+ 'label' => _("Home Address"),
+ 'type' => 'address',
+ 'required' => false,
+ 'params' => array('rows' => 3, 'cols' => 40)
+);
+$attributes['homeStreet'] = array(
+ 'label' => _("Home Street Address"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['homePOBox'] = array(
+ 'label' => _("Home Post Office Box"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 10, 'maxlength' => 10)
+);
+$attributes['homeCity'] = array(
+ 'label' => _("Home City"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['homeProvince'] = array(
+ 'label' => _("Home State/Province"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['homePostalCode'] = array(
+ 'label' => _("Home Postal Code"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 10, 'maxlength' => 10)
+);
+$attributes['homeCountry'] = array(
+ 'label' => _("Home Country"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+/* If using Horde 3.2 or higher, you can display a drop down with a country
+ * list. */
+// $attributes['homeCountry'] = array(
+// 'label' => _("Home Country"),
+// 'type' => 'country',
+// 'required' => false,
+// 'params' => array('prompt' => true)
+// );
+$attributes['workAddress'] = array(
+ 'label' => _("Work Address"),
+ 'type' => 'address',
+ 'required' => false,
+ 'params' => array('rows' => 3, 'cols' => 40)
+);
+$attributes['workStreet'] = array(
+ 'label' => _("Work Street Address"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['workPOBox'] = array(
+ 'label' => _("Work Post Office Box"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 10, 'maxlength' => 10)
+);
+$attributes['workCity'] = array(
+ 'label' => _("Work City"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['workProvince'] = array(
+ 'label' => _("Work State/Province"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['workPostalCode'] = array(
+ 'label' => _("Work Postal Code"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 10, 'maxlength' => 10)
+);
+$attributes['workCountry'] = array(
+ 'label' => _("Work Country"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+/* If using Horde 3.2 or higher, you can display a drop down with a country
+ * list. */
+// $attributes['workCountry'] = array(
+// 'label' => _("Work Country"),
+// 'type' => 'country',
+// 'required' => false,
+// 'params' => array('prompt' => true)
+// );
+$attributes['companyAddress'] = array(
+ 'label' => _("Company Address"),
+ 'type' => 'address',
+ 'required' => false,
+ 'params' => array('rows' => 3, 'cols' => 40)
+);
+$attributes['timezone'] = array(
+ 'label' => _("Time Zone"),
+ 'type' => 'enum',
+ 'params' => array('values' => $GLOBALS['tz'], 'prompt' => true),
+ 'required' => false
+);
+
+/* Communication. */
+$attributes['email'] = array(
+ 'label' => _("Email"),
+ 'type' => 'email',
+ 'required' => false,
+ 'params' => array('allow_multi' => true, 'strip_domain' => false, 'link_compose' => true)
+);
+$attributes['emails'] = array(
+ 'label' => _("Emails"),
+ 'type' => 'email',
+ 'required' => false,
+ 'params' => array('allow_multi' => true, 'strip_domain' => false, 'link_compose' => true)
+);
+$attributes['homePhone'] = array(
+ 'label' => _("Home Phone"),
+ 'type' => 'phone',
+ 'required' => false
+);
+$attributes['workPhone'] = array(
+ 'label' => _("Work Phone"),
+ 'type' => 'phone',
+ 'required' => false
+);
+$attributes['cellPhone'] = array(
+ 'label' => _("Mobile Phone"),
+ 'type' => 'cellphone',
+ 'required' => false
+);
+$attributes['fax'] = array(
+ 'label' => _("Fax"),
+ 'type' => 'phone',
+ 'required' => false
+);
+$attributes['pager'] = array(
+ 'label' => _("Pager"),
+ 'type' => 'phone',
+ 'required' => false
+);
+
+/* Job, company, organization. */
+$attributes['title'] = array(
+ 'label' => _("Job Title"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['role'] = array(
+ 'label' => _("Occupation"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['businessCategory'] = array(
+ 'label' => _("Business Category"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['company'] = array(
+ 'label' => _("Company"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['department'] = array(
+ 'label' => _("Department"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['office'] = array(
+ 'label' => _("Office"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['logo'] = array(
+ 'label' => _("Logo"),
+ 'type' => 'image',
+ 'required' => false,
+ 'params' => array('show_upload' => true, 'show_keeporig' => true, 'max_filesize' => null),
+);
+$attributes['logotype'] = array(
+ 'label' => _("Logo MIME Type"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+
+/* Other */
+$attributes['notes'] = array(
+ 'label' => _("Notes"),
+ 'type' => 'longtext',
+ 'required' => false,
+ 'params' => array('rows' => 3, 'cols' => 40)
+);
+$attributes['website'] = array(
+ 'label' => _("Website URL"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['freebusyUrl'] = array(
+ 'label' => _("Freebusy URL"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['pgpPublicKey'] = array(
+ 'label' => _("PGP Public Key"),
+ 'type' => 'longtext',
+ 'required' => false,
+ 'params' => array('rows' => 3, 'cols' => 40)
+);
+$attributes['smimePublicKey'] = array(
+ 'label' => _("S/MIME Public Certificate"),
+ 'type' => 'longtext',
+ 'required' => false,
+ 'params' => array('rows' => 3, 'cols' => 40)
+);
+/* If using Horde 3.3 or later, you can enable the following attributes to
+ * enable pretty rendering of PGP and S/MIME keys. */
+// $attributes['pgpPublicKey'] = array(
+// 'label' => _("PGP Public Key"),
+// 'type' => 'pgp',
+// 'required' => false,
+// 'params' => array('gpg' => '/usr/bin/gpg', 'temp_dir' => Horde::getTempDir(), 'rows' => 3, 'cols' => 40)
+// );
+// $attributes['smimePublicKey'] = array(
+// 'label' => _("S/MIME Public Certificate"),
+// 'type' => 'smime',
+// 'required' => false,
+// 'params' => array('temp_dir' => Horde::getTempDir(), 'rows' => 3, 'cols' => 40)
+// );
+/* This attribute uses Horde's categories and is an example how to use an enum
+ * field. Don't forget to add a 'map' entry to config/sources.php if you want
+ * to use this attribute. */
+require_once 'Horde/Prefs/CategoryManager.php';
+require_once 'Horde/Array.php';
+$cManager = new Prefs_CategoryManager();
+$attributes['category'] = array(
+ 'label' => _("Category"),
+ 'type' => 'enum',
+ 'params' => array(
+ 'values' => array_merge(array('' => _("Unfiled")), Horde_Array::valuesToKeys($cManager->get())),
+ 'prompt' => false),
+ 'required' => false
+);
+/* If using Horde 3.2 or later, you can use the following category attribute
+ * instead which shows category colors and allows to add new categories. */
+// $attributes['category'] = array(
+// 'label' => _("Category"),
+// 'type' => 'category',
+// 'params' => array(),
+// 'required' => false
+// );
+
+/* Additional attributes supported by Kolab */
+$attributes['kolabHomeServer'] = array(
+ 'label' => _("Kolab Home Server"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['initials'] = array(
+ 'label' => _("Initials"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['instantMessenger'] = array(
+ 'label' => _("Instant Messenger"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['manager'] = array(
+ 'label' => _("Manager"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['assistant'] = array(
+ 'label' => _("Assistant"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['gender'] = array(
+ 'label' => _("Gender"),
+ 'type' => 'enum',
+ 'required' => false,
+ 'params' => array('values' => array(_("male"), _("female")), 'prompt' => true),
+);
+$attributes['language'] = array(
+ 'label' => _("Language"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['latitude'] = array(
+ 'label' => _("Latitude"),
+ 'type' => 'number',
+ 'required' => false,
+);
+$attributes['longitude'] = array(
+ 'label' => _("Longitude"),
+ 'type' => 'number',
+ 'required' => false,
+);
+
+/* Additional attributes supported by some SyncML clients */
+$attributes['workEmail'] = array(
+ 'label' => _("Work Email"),
+ 'type' => 'email',
+ 'required' => false,
+ 'params' => array('allow_multi' => false, 'strip_domain' => false, 'link_compose' => true)
+);
+$attributes['homeEmail'] = array(
+ 'label' => _("Home Email"),
+ 'type' => 'email',
+ 'required' => false,
+ 'params' => array('allow_multi' => false, 'strip_domain' => false, 'link_compose' => true)
+);
+$attributes['phone'] = array(
+ 'label' => _("Common Phone"),
+ 'type' => 'phone',
+ 'required' => false
+);
+$attributes['workFax'] = array(
+ 'label' => _("Work Fax"),
+ 'type' => 'phone',
+ 'required' => false
+);
+$attributes['homeFax'] = array(
+ 'label' => _("Home Fax"),
+ 'type' => 'phone',
+ 'required' => false
+);
+$attributes['workCellPhone'] = array(
+ 'label' => _("Work Mobile Phone"),
+ 'type' => 'cellphone',
+ 'required' => false
+);
+$attributes['homeCellPhone'] = array(
+ 'label' => _("Home Mobile Phone"),
+ 'type' => 'cellphone',
+ 'required' => false
+);
+$attributes['videoCall'] = array(
+ 'label' => _("Common Video Call"),
+ 'type' => 'phone',
+ 'required' => false
+);
+$attributes['workVideoCall'] = array(
+ 'label' => _("Work Video Call"),
+ 'type' => 'phone',
+ 'required' => false
+);
+$attributes['homeVideoCall'] = array(
+ 'label' => _("Home Video Call"),
+ 'type' => 'phone',
+ 'required' => false
+);
+$attributes['voip'] = array(
+ 'label' => _("VoIP"),
+ 'type' => 'phone',
+ 'required' => false
+);
+$attributes['sip'] = array(
+ 'label' => _("SIP"),
+ 'type' => 'email',
+ 'required' => false,
+ 'params' => array('allow_multi' => true, 'strip_domain' => false, 'link_compose' => true)
+);
+$attributes['ptt'] = array(
+ 'label' => _("PTT"),
+ 'type' => 'phone',
+ 'required' => false
+);
+$attributes['commonExtended'] = array(
+ 'label' => _("Common Address Extended"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['commonStreet'] = array(
+ 'label' => _("Common Street"),
+ 'type' => 'address',
+ 'required' => false,
+ 'params' => array('rows' => 3, 'cols' => 40)
+);
+$attributes['commonPOBox'] = array(
+ 'label' => _("Common Post Office Box"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 10, 'maxlength' => 10)
+);
+$attributes['commonCity'] = array(
+ 'label' => _("Common City"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['commonProvince'] = array(
+ 'label' => _("Common State/Province"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['commonPostalCode'] = array(
+ 'label' => _("Common Postal Code"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 10, 'maxlength' => 10)
+);
+$attributes['commonCountry'] = array(
+ 'label' => _("Common Country"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['workWebsite'] = array(
+ 'label' => _("Work Website URL"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['workExtended'] = array(
+ 'label' => _("Work Address Extended"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['workLatitude'] = array(
+ 'label' => _("Work Latitude"),
+ 'type' => 'number',
+ 'required' => false,
+);
+$attributes['workLongitude'] = array(
+ 'label' => _("Work Longitude"),
+ 'type' => 'number',
+ 'required' => false,
+);
+$attributes['homeWebsite'] = array(
+ 'label' => _("Home Website URL"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['homeExtended'] = array(
+ 'label' => _("Home Address Extended"),
+ 'type' => 'text',
+ 'required' => false,
+ 'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['homeLatitude'] = array(
+ 'label' => _("Home Latitude"),
+ 'type' => 'number',
+ 'required' => false,
+);
+$attributes['homeLongitude'] = array(
+ 'label' => _("Home Longitude"),
+ 'type' => 'number',
+ 'required' => false,
+);
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/attributes.php/20SMEAttributes b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/attributes.php/20SMEAttributes
new file mode 100644
index 0000000..260e550
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/attributes.php/20SMEAttributes
@@ -0,0 +1,13 @@
+
+/* SME Server attributes */
+$attributes['groupdescription'] = array(
+ 'label' => _("Group Description"),
+ 'type' => 'text',
+ 'required' => false
+);
+$attributes['groupmembers'] = array(
+ 'label' => _("Group Members"),
+ 'type' => 'text',
+ 'required' => false
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/conf.php/00header b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/conf.php/00header
new file mode 100644
index 0000000..0162b3a
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/conf.php/00header
@@ -0,0 +1,3 @@
+/* CONFIG START. DO NOT CHANGE ANYTHING IN OR AFTER THIS LINE. */
+// $Horde: turba/config/conf.xml,v 1.6.2.6 2008/06/25 15:52:54 jan Exp $
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/conf.php/100Conf b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/conf.php/100Conf
new file mode 100644
index 0000000..b8de27c
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/conf.php/100Conf
@@ -0,0 +1,7 @@
+// 100Conf
+$conf['menu']['import_export'] = true;
+$conf['client']['addressbook'] = 'localsql';
+$conf['shares']['source'] = 'localsql';
+$conf['comments']['allow'] = true;
+$conf['documents']['type'] = 'horde';
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/conf.php/120MenuSettings b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/conf.php/120MenuSettings
new file mode 100644
index 0000000..ca89495
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/conf.php/120MenuSettings
@@ -0,0 +1,3 @@
+// 120MenuSettings
+include '/home/httpd/html/horde/conf.menu.apps.php';
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/conf.php/999footer b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/conf.php/999footer
new file mode 100644
index 0000000..ab8f810
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/conf.php/999footer
@@ -0,0 +1,2 @@
+// 999Footer
+/* CONFIG END. DO NOT CHANGE ANYTHING IN OR BEFORE THIS LINE. */
\ No newline at end of file
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/00header b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/00header
new file mode 100644
index 0000000..96bd263
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/00header
@@ -0,0 +1,7 @@
+//00header
+/**
+ * $Horde: turba/config/prefs.php.dist,v 1.28.10.10 2008/07/10 22:52:41 jan Exp $
+ *
+ * See horde/config/prefs.php for documentation on the structure of this file.
+ */
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/100displayoptions b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/100displayoptions
new file mode 100644
index 0000000..02a1538
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/100displayoptions
@@ -0,0 +1,8 @@
+//100displayoptions
+$prefGroups['addressbooks'] = array(
+ 'column' => _("Display Options"),
+ 'label' => _("Address Books"),
+ 'desc' => _("Choose which address books to use."),
+ 'members' => array('default_dir', 'addressbookselect', 'sync_books'),
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/110columnoptions b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/110columnoptions
new file mode 100644
index 0000000..80eb369
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/110columnoptions
@@ -0,0 +1,8 @@
+//110columnoptions
+$prefGroups['columns'] = array(
+ 'column' => _("Display Options"),
+ 'label' => _("Column Options"),
+ 'desc' => _("Select which fields to display in the address lists."),
+ 'members' => array('columnselect'),
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/120display b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/120display
new file mode 100644
index 0000000..5bfe671
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/120display
@@ -0,0 +1,8 @@
+//120display
+$prefGroups['display'] = array(
+ 'column' => _("Display Options"),
+ 'label' => _("Display"),
+ 'desc' => _("Select view to display by default and paging options."),
+ 'members' => array('initial_page', 'maxpage', 'perpage'),
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/130format b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/130format
new file mode 100644
index 0000000..ff26ea1
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/130format
@@ -0,0 +1,8 @@
+//130format
+$prefGroups['format'] = array(
+ 'column' => _("Display Options"),
+ 'label' => _("Name Format"),
+ 'desc' => _("Select which format to display names."),
+ 'members' => array('name_format'),
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/160addressbookselect b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/160addressbookselect
new file mode 100644
index 0000000..f4a4127
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/160addressbookselect
@@ -0,0 +1,7 @@
+//160addressbookselect
+// Address Book selection widget
+$_prefs['addressbookselect'] = array(
+ 'locked' => false,
+ 'type' => 'special',
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/170addressbooks b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/170addressbooks
new file mode 100644
index 0000000..15f44c6
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/170addressbooks
@@ -0,0 +1,14 @@
+//170addressbooks
+// Address books to be displayed in the address book selection widget
+// and in the Browse menu item. The address book name is stored using
+// the source key from sources.php (e.g. "localsql"). Separate
+// entries with "\n" , e. g. 'value' => "localsql\nlocalldap" (the
+// double quotes are REQUIRED). If 'value' is empty (''), all address
+// books that the user has permissions to will be listed.
+$_prefs['addressbooks'] = array(
+ 'value' => '',
+ 'locked' => false,
+ 'shared' => false,
+ 'type' => 'implicit',
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/180syncbooks b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/180syncbooks
new file mode 100644
index 0000000..b6fc912
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/180syncbooks
@@ -0,0 +1,10 @@
+//180syncbooks
+// Address books use for synchronization
+$_prefs['sync_books'] = array(
+ 'value' => 'a:0:\{\}',
+ 'locked' => false,
+ 'shared' => false,
+ 'type' => 'multienum',
+ 'desc' => _("Select the address books that should be used for synchronization with external devices:"),
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/185columnselect b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/185columnselect
new file mode 100644
index 0000000..8d0332a
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/185columnselect
@@ -0,0 +1,7 @@
+//185columnselect
+// columns selection widget
+$_prefs['columnselect'] = array(
+ 'locked' => false,
+ 'type' => 'special',
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/190columns b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/190columns
new file mode 100644
index 0000000..79c2f70
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/190columns
@@ -0,0 +1,13 @@
+//190columns
+// Columns to be displayed in Browse and Search results, with entries
+// for the columns displayed for each address book. Separate address
+// book stanzas with \n and columns with \t. The "name" column is
+// currently always displayed first and so cannot be modified here.
+// Double quotes MUST be used as in the example.
+$_prefs['columns'] = array(
+ 'value' => "netcenter\temail\nverisign\temail\nlocalsql\temail",
+ 'locked' => false,
+ 'shared' => false,
+ 'type' => 'implicit',
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/200sortorder b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/200sortorder
new file mode 100644
index 0000000..d000113
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/200sortorder
@@ -0,0 +1,10 @@
+//200sortorder
+// user preferred sorting column
+// serialized array of hashes containing 'field' and 'ascending' keys
+$_prefs['sortorder'] = array(
+ 'value' => 'a:1:\{i:0;a:2:\{s:5:"field";s:8:"lastname";s:9:"ascending";b:1;\}\}',
+ 'locked' => false,
+ 'shared' => false,
+ 'type' => 'implicit',
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/220maxpage b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/220maxpage
new file mode 100644
index 0000000..94490b7
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/220maxpage
@@ -0,0 +1,10 @@
+//220maxpage
+// number of maximum pages and items per page
+$_prefs['maxpage'] = array(
+ 'value' => 10,
+ 'locked' => false,
+ 'shared' => false,
+ 'type' => 'number',
+ 'desc' => _("Maximum number of pages"),
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/230perpage b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/230perpage
new file mode 100644
index 0000000..d27f0b7
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/230perpage
@@ -0,0 +1,9 @@
+//230perpage
+$_prefs['perpage'] = array(
+ 'value' => 20,
+ 'locked' => false,
+ 'shared' => false,
+ 'type' => 'number',
+ 'desc' => _("Number of items per page"),
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/240initialpage b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/240initialpage
new file mode 100644
index 0000000..3e5ed38
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/240initialpage
@@ -0,0 +1,12 @@
+//240initialpage
+// the page to display. Either 'browse.php' or 'search.php'
+$_prefs['initial_page'] = array(
+ 'value' => 'search.php',
+ 'locked' => false,
+ 'shared' => false,
+ 'type' => 'enum',
+ 'desc' => _("View to display by default:"),
+ 'enum' => array('browse.php' => _("Address Book Listing"),
+ 'search.php' => _("Search")),
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/250nameformat b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/250nameformat
new file mode 100644
index 0000000..9dd5d73
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/250nameformat
@@ -0,0 +1,13 @@
+//250nameformat
+// the format to display names. Either 'last_first' or 'first_last'
+$_prefs['name_format'] = array(
+ 'value' => 'last_first',
+ 'locked' => false,
+ 'shared' => false,
+ 'type' => 'enum',
+ 'desc' => _("Select the format used to display names:"),
+ 'enum' => array('last_first' => _("\"Lastname, Firstname\" (ie. Doe, John)"),
+ 'first_last' => _("\"Firstname Lastname\" (ie. John Doe)"),
+ 'none' => _("no formatting")),
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/260defaultdir b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/260defaultdir
new file mode 100644
index 0000000..ceab6f6
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/260defaultdir
@@ -0,0 +1,11 @@
+//260defaultdir
+// Default directory
+$_prefs['default_dir'] = array(
+ //'value' => '',
+ 'value' => 'localsql',
+ 'locked' => false,
+ 'shared' => false,
+ 'type' => 'select',
+ 'desc' => _("This will be the default address book when adding or importing contacts."),
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/265prefbooks b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/265prefbooks
new file mode 100644
index 0000000..7e80367
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/265prefbooks
@@ -0,0 +1,9 @@
+//265prefbooks
+// preference for holding any preferences-based addressbooks.
+$_prefs['prefbooks'] = array(
+ 'value' => '',
+ 'locked' => false,
+ 'shared' => false,
+ 'type' => 'implicit',
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/270turbamaintenancetasks b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/270turbamaintenancetasks
new file mode 100644
index 0000000..660dff2
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/270turbamaintenancetasks
@@ -0,0 +1,9 @@
+//270turbamaintenancetasks
+// Used to keep track of which turba maintenance tasks have been run.
+$_prefs['turba_maintenance_tasks'] = array(
+ 'value' => 'a:0:\{\}',
+ 'locked' => false,
+ 'shared' => false,
+ 'type' => 'implicit'
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/275owncontact b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/275owncontact
new file mode 100644
index 0000000..ef19c22
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/prefs.php/275owncontact
@@ -0,0 +1,10 @@
+//275owncontact
+// Personal contact.
+$_prefs['own_contact'] = array(
+ // The format is 'source_name;contact_id'.
+ 'value' => '',
+ 'locked' => false,
+ 'shared' => false,
+ 'type' => 'implicit'
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/00begin b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/00begin
new file mode 100644
index 0000000..2685a72
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/00begin
@@ -0,0 +1,6 @@
+{
+
+ use esmith::util;
+ $basedn = esmith::util::ldapBase ($DomainName);
+ $OUT = '';
+}
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/00header b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/00header
new file mode 100644
index 0000000..2d84a21
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/00header
@@ -0,0 +1,4 @@
+//00header
+/**
+ * $Horde: turba/config/sources.php.dist,v 1.97.6.41 2009/08/05 21:06:10 jan Exp $
+ */
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/10Netcenter b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/10Netcenter
new file mode 100644
index 0000000..e69de29
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/20Bigfoot b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/20Bigfoot
new file mode 100644
index 0000000..e69de29
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/30Verisign b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/30Verisign
new file mode 100644
index 0000000..e69de29
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/40LocalSQL b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/40LocalSQL
new file mode 100644
index 0000000..b8b9213
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/40LocalSQL
@@ -0,0 +1,132 @@
+//40LocalSQL
+/**
+ * A local address book in an SQL database. This implements a private
+ * per-user address book. Sharing of this source with other users may be
+ * accomplished by enabling Horde_Share for this source by setting
+ * 'use_shares' => true.
+ *
+ * Be sure to create a turba_objects table in your Horde database from the
+ * schema in turba/scripts/db/turba.sql if you use this source.
+ */
+$cfgSources['localsql'] = array(
+ 'title' => _("My Address Book"),
+ 'type' => 'sql',
+ // The default connection details are pulled from the Horde-wide SQL
+ // connection configuration.
+ 'params' => array_merge($GLOBALS['conf']['sql'], array('table' => 'turba_objects')),
+ // Using two tables as datasource.
+ // 'params' => array_merge($GLOBALS['conf']['sql'],
+ // array('table' => 'leaddetails LEFT JOIN leadaddress ON leaddetails.leadid = leadaddress.leadaddressid',
+ // 'filter' => 'leaddetails.converted = 0')),
+ 'map' => array(
+ '__key' => 'object_id',
+ '__owner' => 'owner_id',
+ '__type' => 'object_type',
+ '__members' => 'object_members',
+ '__uid' => 'object_uid',
+ 'firstname' => 'object_firstname',
+ 'lastname' => 'object_lastname',
+ 'middlenames' => 'object_middlenames',
+ 'namePrefix' => 'object_nameprefix',
+ 'nameSuffix' => 'object_namesuffix',
+ 'name' => array('fields' => array('namePrefix', 'firstname',
+ 'middlenames', 'lastname',
+ 'nameSuffix'),
+ 'format' => '%s %s %s %s %s',
+ 'parse' => array(
+ array('fields' => array('firstname', 'middlenames',
+ 'lastname'),
+ 'format' => '%s %s %s'),
+ array('fields' => array('firstname', 'lastname'),
+ 'format' => '%s %s'))),
+ // This is a shorter version of a "name" composite field which only
+ // consists of the first name and last name.
+ // 'name' => array('fields' => array('firstname', 'lastname'),
+ // 'format' => '%s %s'),
+ 'alias' => 'object_alias',
+ 'birthday' => 'object_bday',
+ 'spouse' => 'object_spouse',
+ 'anniversary' => 'object_anniversary',
+ 'children' => 'object_children',
+ // The photo field requires at least Horde 3.3 and a matching type
+ // field.
+ 'photo' => 'object_photo',
+ 'phototype' => 'object_phototype',
+ 'homeStreet' => 'object_homestreet',
+ 'homePOBox' => 'object_homepob',
+ 'homeCity' => 'object_homecity',
+ 'homeProvince' => 'object_homeprovince',
+ 'homePostalCode' => 'object_homepostalcode',
+ 'homeCountry' => 'object_homecountry',
+ // This is an example composite field for addresses, so you can display
+ // the various map links. If you use this, be sure to add 'homeAddress'
+ // to the 'tabs' parameter below.
+ 'homeAddress' => array('fields' => array('homeStreet', 'homeCity',
+ 'homeProvince',
+ 'homePostalCode'),
+ 'format' => "%s \n %s, %s %s"),
+ 'workStreet' => 'object_workstreet',
+ 'workPOBox' => 'object_workpob',
+ 'workCity' => 'object_workcity',
+ 'workProvince' => 'object_workprovince',
+ 'workPostalCode' => 'object_workpostalcode',
+ 'workCountry' => 'object_workcountry',
+ 'workAddress' => array('fields' => array('workStreet', 'workCity',
+ 'workProvince',
+ 'workPostalCode'),
+ 'format' => "%s \n %s, %s %s"),
+ 'timezone' => 'object_tz',
+ 'email' => 'object_email',
+ 'homePhone' => 'object_homephone',
+ 'workPhone' => 'object_workphone',
+ 'cellPhone' => 'object_cellphone',
+ 'fax' => 'object_fax',
+ 'pager' => 'object_pager',
+ 'title' => 'object_title',
+ 'role' => 'object_role',
+ 'company' => 'object_company',
+ // The logo field requires at least Horde 3.3 and a matching type
+ // field.
+ 'logo' => 'object_logo',
+ 'logotype' => 'object_logotype',
+ 'category' => 'object_category',
+ 'notes' => 'object_notes',
+ 'website' => 'object_url',
+ 'freebusyUrl' => 'object_freebusyurl',
+ 'pgpPublicKey' => 'object_pgppublickey',
+ 'smimePublicKey' => 'object_smimepublickey',
+ ),
+ 'tabs' => array(
+ _("Personal") => array('firstname', 'lastname', 'middlenames',
+ 'namePrefix', 'nameSuffix', 'name', 'alias',
+ 'birthday', 'spouse', 'anniversary', 'children' , 'photo'),
+ _("Location") => array('homeStreet', 'homePOBox', 'homeCity',
+ 'homeProvince', 'homePostalCode', 'homeCountry',
+ 'homeAddress', 'workStreet', 'workPOBox', 'workCity',
+ 'workProvince', 'workPostalCode', 'workCountry', 'workAddress',
+ 'timezone'),
+ _("Communications") => array('email', 'homePhone', 'workPhone',
+ 'cellPhone', 'fax', 'pager'),
+ _("Organization") => array('title', 'role', 'company', 'logo'),
+ _("Other") => array('category', 'notes', 'website', 'freebusyUrl',
+ 'pgpPublicKey', 'smimePublicKey'),
+ ),
+ 'search' => array(
+ 'name',
+ 'email'
+ ),
+ 'strict' => array(
+ 'object_id',
+ 'owner_id',
+ 'object_type',
+ ),
+ 'export' => true,
+ 'browse' => true,
+{
+ my $sab = ($horde{SharedAddressBooks} || 'disabled') eq 'enabled' ? 'true' : 'false';
+ $OUT = " 'use_shares' => $sab,";
+}
+ 'list_name_field' => 'lastname',
+ 'alternative_name' => 'company',
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/50LocalLDAP b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/50LocalLDAP
new file mode 100644
index 0000000..ea54b0f
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/50LocalLDAP
@@ -0,0 +1,136 @@
+//50LocalLDAP
+/**
+ * A local address book in an LDAP directory. This implements a public
+ * (shared) address book.
+ *
+ * To store distribution lists in the LDAP directory, you'll need to include
+ * horde/scripts/ldap/horde.schema in your LDAP configuration.
+ *
+ * To store freebusy information in the LDAP directory, you'll need to include
+ * turba/scripts/ldap/rfc2739.schema in your LDAP configuration.
+ */
+$cfgSources['localldap'] = array(
+ 'title' => _("Local LDAP"),
+ 'type' => 'ldap',
+ 'params' => array(
+ 'server' => 'localhost',
+ 'port' => 389,
+ 'tls' => false,
+{
+ $OUT .= qq( 'root' => '$basedn',);
+}
+// 'bind_dn' => 'cn=admin,ou=users,dc=example,dc=com',
+// // For Active Directory:
+// // 'bind_dn' => 'username@example.com',
+// 'bind_password' => '********',
+ 'sizelimit' => 200,
+// // For Active Directory:
+// // 'sizelimit' => 0,
+ 'dn' => array('cn'),
+ 'objectclass' => array('top',
+ 'person',
+ 'organizationalPerson',
+{
+ if (($horde{freebusy} || "disabled") eq "enabled") {
+ $OUT =< array('organizationalPerson',
+// // 'user',
+// // 'group',
+// // 'contact'),
+ 'scope' => 'sub',
+// // For Active Directory:
+// // 'scope' => 'sub',
+ 'charset' => 'UTF-8',
+// // Consult the LDAP schema to verify that all required attributes for
+// // an entry are set and add them if needed.
+ 'checkrequired' => false,
+// // Value used to fill in missing required attributes.
+ 'checkrequired_string' => ' ',
+// // Check LDAP schema for valid syntax. If this is false an address
+// // field is assumed to have postalAddress syntax; otherwise the schema
+// // is consulted for the syntax to use.
+// 'checksyntax' => false,
+ 'version' => 3,
+ 'filter' => '&(!(mail=admin@{$DomainName}))',
+//
+// // For Active Directory you probably want to also set the following
+// // parameters:
+// // 'deref' => LDAP_DEREF_ALWAYS,
+// // 'filter' => '&(SAMAccountName=*)(mail=*)',
+// // 'referrals' => 0,
+ ),
+ 'map' => array(
+ '__key' => 'dn',
+
+// // Remove this mapping if using Active Directory server:
+// '__uid' => 'uid',
+ '__uid' => 'uid',
+
+// // From horde.schema. Make sure you have 'turbaContact' objectClass
+// // included above:
+// '__type' => 'turbaType',
+// '__members' => 'turbaMembers',
+//
+ 'name' => 'cn',
+ 'email' => 'mail',
+ 'homePhone' => 'homephone',
+ 'workPhone' => 'telephonenumber',
+ 'cellPhone' => 'mobiletelephonenumber',
+ 'homeAddress' => 'street',
+//
+// // From rfc2739.schema:
+{
+ if (($horde{freebusy} || "disabled") eq "enabled") {
+ $OUT =< 'calFBURL',
+HERE
+} else {
+ $OUT =< 'displayname',
+// // 'title' => 'title',
+// // 'cellPhone' => 'mobile',
+// // 'department' => 'department',
+// // 'company' => 'company',
+ ),
+ 'search' => array(
+ 'name',
+ 'email',
+ 'homePhone',
+ 'workPhone',
+ 'cellPhone',
+ 'homeAddress'
+ ),
+ 'strict' => array(
+ 'dn',
+ ),
+ 'approximate' => array(
+ 'cn',
+ ),
+// // For Active Directory servers:
+// // 'approximate' => array(
+// // 'displayname',
+// // 'samaccountname',
+// // ),
+ 'export' => true,
+ 'browse' => true,
+);
+
diff --git a/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/60LocalLDAPGroups b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/60LocalLDAPGroups
new file mode 100644
index 0000000..6aad46a
--- /dev/null
+++ b/root/etc/e-smith/templates/home/httpd/html/horde/turba/config/sources.php/60LocalLDAPGroups
@@ -0,0 +1,53 @@
+//60LocalLDAPGroups
+/**
+ * A local address book in an LDAP directory. This implements a public
+ * (shared) address book.
+ *
+ * To store distribution lists in the LDAP directory, you'll need to include
+ * horde/scripts/ldap/horde.schema in your LDAP configuration.
+ *
+ * To store freebusy information in the LDAP directory, you'll need to include
+ * turba/scripts/ldap/rfc2739.schema in your LDAP configuration.
+ */
+$cfgSources['localldapgroups'] = array(
+ 'title' => _("Local LDAP Groups"),
+ 'type' => 'ldap',
+ 'params' => array(
+ 'server' => 'localhost',
+ 'port' => 389,
+ 'tls' => false,
+{
+ $OUT .= qq( 'root' => '$basedn',);
+}
+ 'sizelimit' => 200,
+ 'dn' => array('cn'),
+ 'objectclass' => array('posixGroup'),
+ 'scope' => 'sub',
+ 'charset' => 'UTF-8',
+ 'checkrequired' => false,
+ 'checkrequired_string' => ' ',
+ 'version' => 3,
+ ),
+ 'map' => array(
+ '__key' => 'dn',
+ '__uid' => 'uid',
+ 'name' => 'cn',
+ 'email' => 'mail',
+ 'groupdescription' => 'description',
+ 'groupmembers' => 'memberUid',
+ ),
+ 'search' => array(
+ 'displayName',
+ 'groupdescription',
+ 'groupmembers',
+ ),
+ 'strict' => array(
+ 'dn',
+ ),
+ 'approximate' => array(
+ 'cn',
+ ),
+ 'export' => true,
+ 'browse' => true,
+);
+
diff --git a/root/etc/openldap/schema/horde.schema b/root/etc/openldap/schema/horde.schema
new file mode 100644
index 0000000..89c94b4
--- /dev/null
+++ b/root/etc/openldap/schema/horde.schema
@@ -0,0 +1,583 @@
+# $Horde: horde/scripts/ldap/horde.schema,v 1.20.10.6 2007/12/20 15:03:02 jan Exp $
+#
+# The offical horde OID assigned by IANA is 13040.
+#
+# This schema depends on:
+# - core.schema
+#
+#
+# Horde attribute branch 1.3.6.1.4.1.13040.2.1.*
+# IMP attribute branch 1.3.6.1.4.1.13040.3.1.*
+# Turba attribute branch 1.3.6.1.4.1.13040.4.1.*
+# Kronolith attribute branch 1.3.6.1.4.1.13040.5.1.*
+# Nag attribute branch 1.3.6.1.4.1.13040.6.1.*
+# Gollem attribute branch 1.3.6.1.4.1.13040.7.1.*
+# Chora attribute branch 1.3.6.1.4.1.13040.8.1.*
+# Mnemo attribute branch 1.3.6.1.4.1.13040.9.1.*
+# Troll attribute branch 1.3.6.1.4.1.13040.10.1.*
+# Klutz attribute branch 1.3.6.1.4.1.13040.11.1.*
+# Jonah attribute branch 1.3.6.1.4.1.13040.12.1.*
+# Hermes attribute branch 1.3.6.1.4.1.13040.13.1.*
+# Juno attribute branch 1.3.6.1.4.1.13040.14.1.*
+# Trean attribute branch 1.3.6.1.4.1.13040.15.1.*
+# Whups attribute branch 1.3.6.1.4.1.13040.16.1.*
+# Ingo attribute branch 1.3.6.1.4.1.13040.17.1.*
+# Ansel attribute branch 1.3.6.1.4.1.13040.18.1.*
+# Genie attribute branch 1.3.6.1.4.1.13040.19.1.*
+# Scry attribute branch 1.3.6.1.4.1.13040.20.1.*
+# Wicked attribute branch 1.3.6.1.4.1.13040.21.1.*
+# Agora attribute branch 1.3.6.1.4.1.13040.22.1.*
+# Goops attribute branch 1.3.6.1.4.1.13040.24.1.*
+# Merk attribute branch 1.3.6.1.4.1.13040.25.1.*
+# Mimp attribute branch 1.3.6.1.4.1.13040.26.1.*
+# Mottle attribute branch 1.3.6.1.4.1.13040.27.1.*
+# Nic attribute branch 1.3.6.1.4.1.13040.28.1.*
+# Occam attribute branch 1.3.6.1.4.1.13040.29.1.*
+# Odin attribute branch 1.3.6.1.4.1.13040.30.1.*
+# Rakim attribute branch 1.3.6.1.4.1.13040.31.1.*
+# Sesha attribute branch 1.3.6.1.4.1.13040.32.1.*
+# Swoosh attribute branch 1.3.6.1.4.1.13040.33.1.*
+# Thor attribute branch 1.3.6.1.4.1.13040.34.1.*
+# Ulaform attribute branch 1.3.6.1.4.1.13040.35.1.*
+# Volos attribute branch 1.3.6.1.4.1.13040.36.1.*
+# Jeta attribute branch 1.3.6.1.4.1.13040.37.1.*
+#
+# Horde objectclass branch 1.3.6.1.4.1.13040.2.2.*
+# IMP objectclass branch 1.3.6.1.4.1.13040.3.2.*
+# Turba objectclass branch 1.3.6.1.4.1.13040.4.2.*
+# Kronolith objectclass branch 1.3.6.1.4.1.13040.5.2.*
+# NAG objectclass branch 1.3.6.1.4.1.13040.6.2.*
+# Gollem objectclass branch 1.3.6.1.4.1.13040.7.2.*
+# Chora objectclass branch 1.3.6.1.4.1.13040.8.2.*
+# Mnemo objectclass branch 1.3.6.1.4.1.13040.9.2.*
+# Troll objectclass branch 1.3.6.1.4.1.13040.10.2.*
+# Klutz objectclass branch 1.3.6.1.4.1.13040.11.2.*
+# Jonah objectclass branch 1.3.6.1.4.1.13040.12.2.*
+# Hermes objectclass branch 1.3.6.1.4.1.13040.13.2.*
+# Juno objectclass branch 1.3.6.1.4.1.13040.14.2.*
+# Trean objectclass branch 1.3.6.1.4.1.13040.15.2.*
+# Whups objectclass branch 1.3.6.1.4.1.13040.16.2.*
+# Ingo objectclass branch 1.3.6.1.4.1.13040.17.2.*
+# Ansel objectclass branch 1.3.6.1.4.1.13040.18.2.*
+# Genie objectclass branch 1.3.6.1.4.1.13040.19.2.*
+# Scry objectclass branch 1.3.6.1.4.1.13040.20.2.*
+# Wicked objectclass branch 1.3.6.1.4.1.13040.21.2.*
+# Agora objectclass branch 1.3.6.1.4.1.13040.22.2.*
+# Goops objectclass branch 1.3.6.1.4.1.13040.24.2.*
+# Merk objectclass branch 1.3.6.1.4.1.13040.25.2.*
+# Mimp objectclass branch 1.3.6.1.4.1.13040.26.2.*
+# Mottle objectclass branch 1.3.6.1.4.1.13040.27.2.*
+# Nic objectclass branch 1.3.6.1.4.1.13040.28.2.*
+# Occam objectclass branch 1.3.6.1.4.1.13040.29.2.*
+# Odin objectclass branch 1.3.6.1.4.1.13040.30.2.*
+# Rakim objectclass branch 1.3.6.1.4.1.13040.31.2.*
+# Sesha objectclass branch 1.3.6.1.4.1.13040.32.2.*
+# Swoosh objectclass branch 1.3.6.1.4.1.13040.33.2.*
+# Thor objectclass branch 1.3.6.1.4.1.13040.34.2.*
+# Ulaform objectclass branch 1.3.6.1.4.1.13040.35.2.*
+# Volos objectclass branch 1.3.6.1.4.1.13040.36.2.*
+# Jeta objectclass branch 1.3.6.1.4.1.13040.37.2.*
+
+#
+# Horde attribute branch 1.3.6.1.4.1.13040.2.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.2.1.1
+ NAME 'hordePrefs'
+ DESC 'Horde Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# IMP attribute branch 1.3.6.1.4.1.13040.3.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.3.1.1
+ NAME 'impPrefs'
+ DESC 'IMP Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Turba attribute branch 1.3.6.1.4.1.13040.4.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.4.1.1
+ NAME 'turbaPrefs'
+ DESC 'Turba Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+attributetype ( 1.3.6.1.4.1.13040.4.1.2
+ NAME 'turbaType'
+ DESC 'Turba Object Type: Contact/List'
+ EQUALITY caseIgnoreIA5Match
+ SUBSTR caseIgnoreIA5SubstringsMatch
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{8} )
+
+attributetype ( 1.3.6.1.4.1.13040.4.1.3
+ NAME 'turbaMembers'
+ DESC 'Encoded members of a Turba list'
+ SUP name )
+
+attributetype ( 1.3.6.1.4.1.13040.4.1.4
+ NAME 'turbaPGPPublicKey'
+ DESC 'PGP/GPG Public Key'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{4000} )
+
+#
+# Kronolith attribute branch 1.3.6.1.4.1.13040.5.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.5.1.1
+ NAME 'kronolithPrefs'
+ DESC 'Kronolith Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Nag attribute branch 1.3.6.1.4.1.13040.6.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.6.1.1
+ NAME 'nagPrefs'
+ DESC 'Nag Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Gollem attribute branch 1.3.6.1.4.1.13040.7.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.7.1.1
+ NAME 'gollemPrefs'
+ DESC 'Gollem Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Chora attribute branch 1.3.6.1.4.1.13040.8.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.8.1.1
+ NAME 'choraPrefs'
+ DESC 'Chora Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Mnemo attribute branch 1.3.6.1.4.1.13040.9.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.9.1.1
+ NAME 'mnemoPrefs'
+ DESC 'Mnemo Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Troll attribute branch 1.3.6.1.4.1.13040.10.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.10.1.1
+ NAME 'trollPrefs'
+ DESC 'Troll Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Klutz attribute branch 1.3.6.1.4.1.13040.11.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.11.1.1
+ NAME 'klutzPrefs'
+ DESC 'Klutz Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Jonah attribute branch 1.3.6.1.4.1.13040.12.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.12.1.1
+ NAME 'jonahPrefs'
+ DESC 'Jonah Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Hermes attribute branch 1.3.6.1.4.1.13040.13.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.13.1.1
+ NAME 'hermesPrefs'
+ DESC 'Hermes Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Juno attribute branch 1.3.6.1.4.1.13040.14.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.14.1.1
+ NAME 'junoPrefs'
+ DESC 'Juno Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Trean attribute branch 1.3.6.1.4.1.13040.15.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.15.1.1
+ NAME 'treanPrefs'
+ DESC 'Trean Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Whups attribute branch 1.3.6.1.4.1.13040.16.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.16.1.1
+ NAME 'whupsPrefs'
+ DESC 'Whups Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Ingo attribute branch 1.3.6.1.4.1.13040.17.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.17.1.1
+ NAME 'ingoPrefs'
+ DESC 'Ingo Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Ansel attribute branch 1.3.6.1.4.1.13040.18.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.18.1.1
+ NAME 'anselPrefs'
+ DESC 'Ansel Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Genie attribute branch 1.3.6.1.4.1.13040.19.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.19.1.1
+ NAME 'geniePrefs'
+ DESC 'Genie Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Scry attribute branch 1.3.6.1.4.1.13040.20.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.20.1.1
+ NAME 'scryPrefs'
+ DESC 'Scry Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Wicked attribute branch 1.3.6.1.4.1.13040.21.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.21.1.1
+ NAME 'wickedPrefs'
+ DESC 'Wicked Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Agora attribute branch 1.3.6.1.4.1.13040.22.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.22.1.1
+ NAME 'agoraPrefs'
+ DESC 'Agora Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Goops attribute branch 1.3.6.1.4.1.13040.24.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.24.1.1
+ NAME 'goopsPrefs'
+ DESC 'Goops Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Merk attribute branch 1.3.6.1.4.1.13040.25.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.25.1.1
+ NAME 'merkPrefs'
+ DESC 'Merk Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Mimp attribute branch 1.3.6.1.4.1.13040.26.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.26.1.1
+ NAME 'mimpPrefs'
+ DESC 'MIMP Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Mottle attribute branch 1.3.6.1.4.1.13040.27.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.27.1.1
+ NAME 'mottlePrefs'
+ DESC 'Mottle Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Nic attribute branch 1.3.6.1.4.1.13040.28.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.28.1.1
+ NAME 'nicPrefs'
+ DESC 'NIC Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Occam attribute branch 1.3.6.1.4.1.13040.29.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.29.1.1
+ NAME 'occamPrefs'
+ DESC 'Occam Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Odin attribute branch 1.3.6.1.4.1.13040.30.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.30.1.1
+ NAME 'odinPrefs'
+ DESC 'Odin Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Rakim attribute branch 1.3.6.1.4.1.13040.31.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.31.1.1
+ NAME 'rakimPrefs'
+ DESC 'Rakim Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Sesha attribute branch 1.3.6.1.4.1.13040.32.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.32.1.1
+ NAME 'seshaPrefs'
+ DESC 'Sesha Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Swoosh attribute branch 1.3.6.1.4.1.13040.33.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.33.1.1
+ NAME 'swooshPrefs'
+ DESC 'Swoosh Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Thor attribute branch 1.3.6.1.4.1.13040.34.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.34.1.1
+ NAME 'thorPrefs'
+ DESC 'Thor Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Ulaform attribute branch 1.3.6.1.4.1.13040.35.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.35.1.1
+ NAME 'ulaformPrefs'
+ DESC 'Ulaform Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Volos attribute branch 1.3.6.1.4.1.13040.36.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.36.1.1
+ NAME 'volosPrefs'
+ DESC 'Volos Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Jeta attribute branch 1.3.6.1.4.1.13040.37.1.*
+#
+attributetype ( 1.3.6.1.4.1.13040.37.1.1
+ NAME 'jetaPrefs'
+ DESC 'Jeta Preferences'
+ EQUALITY caseIgnoreIA5Match
+ SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{1024} )
+
+#
+# Horde objectclass branch 1.3.6.1.4.1.13040.2.2.*
+#
+objectclass ( 1.3.6.1.4.1.13040.2.2.1
+ NAME 'hordePerson'
+ DESC 'Horde Preferences'
+ SUP top
+ AUXILIARY
+ MAY ( mail $ hordePrefs $ impPrefs $ turbaPrefs $
+ gollemPrefs $ kronolithPrefs $ mnemoPrefs $
+ trollPrefs $ nagPrefs $ klutzPrefs $
+ jonahPrefs $ hermesPrefs $ junoPrefs $
+ treanPrefs $ whupsPrefs $ ingoPrefs $
+ geniePrefs $ scryPrefs $ anselPrefs $
+ wickedPrefs $ choraPrefs $ agoraPrefs $
+ goopsPrefs $ merkPrefs $ volosPrefs $
+ mimpPrefs $ mottlePrefs $ nicPrefs $
+ occamPrefs $ odinPrefs $ rakimPrefs $
+ seshaPrefs $ swooshPrefs $ thorPrefs $
+ ulaformPrefs
+ ) )
+
+objectclass ( 1.3.6.1.4.1.13040.2.2.2
+ NAME 'hordeGroup'
+ DESC 'Horde Group'
+ SUP top
+ AUXILIARY
+ MAY ( mail ) )
+
+#
+# IMP objectclass branch 1.3.6.1.4.1.13040.3.2.*
+#
+
+# Turba objectclass branch 1.3.6.1.4.1.13040.4.2.*
+objectclass ( 1.3.6.1.4.1.13040.4.2.1
+ NAME 'turbaContact'
+ DESC 'Turba Contact'
+ SUP top
+ AUXILIARY
+ MAY ( turbaType $ turbaMembers $ calFBURL )
+ )
+
+#
+# Kronolith objectclass branch 1.3.6.1.4.1.13040.5.2.*
+#
+
+#
+# Nag objectclass branch 1.3.6.1.4.1.13040.6.2.*
+#
+
+#
+# Gollem objectclass branch 1.3.6.1.4.1.13040.7.2.*
+#
+
+#
+# Chora objectclass branch 1.3.6.1.4.1.13040.8.2.*
+#
+
+#
+# Mnemo objectclass branch 1.3.6.1.4.1.13040.9.2.*
+#
+
+#
+# Troll objectclass branch 1.3.6.1.4.1.13040.10.2.*
+#
+
+#
+# Klutz objectclass branch 1.3.6.1.4.1.13040.11.2.*
+#
+
+#
+# Jonah objectclass branch 1.3.6.1.4.1.13040.12.2.*
+#
+
+#
+# Hermes objectclass branch 1.3.6.1.4.1.13040.13.2.*
+#
+
+#
+# Juno objectclass branch 1.3.6.1.4.1.13040.14.2.*
+#
+
+#
+# Trean objectclass branch 1.3.6.1.4.1.13040.15.2.*
+#
+
+#
+# Whups objectclass branch 1.3.6.1.4.1.13040.16.2.*
+#
+
+#
+# Ingo objectclass branch 1.3.6.1.4.1.13040.17.2.*
+#
+
+#
+# Ansel objectclass branch 1.3.6.1.4.1.13040.18.2.*
+#
+
+#
+# Genie objectclass branch 1.3.6.1.4.1.13040.19.2.*
+#
+
+#
+# Scry objectclass branch 1.3.6.1.4.1.13040.20.2.*
+#
+
+#
+# Wicked objectclass branch 1.3.6.1.4.1.13040.21.2.*
+#
+
+#
+# Agora objectclass branch 1.3.6.1.4.1.13040.22.2.*
+#
+
+#
+# Goops objectclass branch 1.3.6.1.4.1.13040.24.2.*
+#
+
+#
+# Merk objectclass branch 1.3.6.1.4.1.13040.25.2.*
+#
+
+#
+# Mimp objectclass branch 1.3.6.1.4.1.13040.26.2.*
+#
+
+#
+# Mottle objectclass branch 1.3.6.1.4.1.13040.27.2.*
+#
+
+#
+# Nic objectclass branch 1.3.6.1.4.1.13040.28.2.*
+#
+
+#
+# Occam objectclass branch 1.3.6.1.4.1.13040.29.2.*
+#
+
+#
+# Odin objectclass branch 1.3.6.1.4.1.13040.30.2.*
+#
+
+#
+# Rakim objectclass branch 1.3.6.1.4.1.13040.31.2.*
+#
+
+#
+# Sesha objectclass branch 1.3.6.1.4.1.13040.32.2.*
+#
+
+#
+# Swoosh objectclass branch 1.3.6.1.4.1.13040.33.2.*
+#
+
+#
+# Thor objectclass branch 1.3.6.1.4.1.13040.34.2.*
+#
+
+#
+# Ulaform objectclass branch 1.3.6.1.4.1.13040.35.2.*
+#
+
+#
+# Volos objectclass branch 1.3.6.1.4.1.13040.36.2.*
+#
+
+#
+# Jeta objectclass branch 1.3.6.1.4.1.13040.37.2.*
+#
+
diff --git a/root/etc/rc.d/rc7.d/.gitignore b/root/etc/rc.d/rc7.d/.gitignore
new file mode 100644
index 0000000..e69de29
diff --git a/root/home/httpd/html/horde/smeserver/turba.sql b/root/home/httpd/html/horde/smeserver/turba.sql
new file mode 100644
index 0000000..a12f97e
--- /dev/null
+++ b/root/home/httpd/html/horde/smeserver/turba.sql
@@ -0,0 +1,77 @@
+-- $Horde: turba/scripts/sql/turba.sql,v 1.1.2.9 2009-10-20 21:44:34 jan Exp $
+
+CREATE TABLE IF NOT EXISTS turba_objects (
+ object_id VARCHAR(32) NOT NULL,
+ owner_id VARCHAR(255) NOT NULL,
+ object_type VARCHAR(255) DEFAULT 'Object' NOT NULL,
+ object_uid VARCHAR(255),
+ object_members BLOB,
+ object_firstname VARCHAR(255),
+ object_lastname VARCHAR(255),
+ object_middlenames VARCHAR(255),
+ object_nameprefix VARCHAR(32),
+ object_namesuffix VARCHAR(32),
+ object_alias VARCHAR(32),
+ object_photo BLOB,
+ object_phototype VARCHAR(10),
+ object_bday VARCHAR(10),
+ object_homestreet VARCHAR(255),
+ object_homepob VARCHAR(10),
+ object_homecity VARCHAR(255),
+ object_homeprovince VARCHAR(255),
+ object_homepostalcode VARCHAR(10),
+ object_homecountry VARCHAR(255),
+ object_workstreet VARCHAR(255),
+ object_workpob VARCHAR(10),
+ object_workcity VARCHAR(255),
+ object_workprovince VARCHAR(255),
+ object_workpostalcode VARCHAR(10),
+ object_workcountry VARCHAR(255),
+ object_tz VARCHAR(32),
+ object_geo VARCHAR(255),
+ object_email VARCHAR(255),
+ object_homephone VARCHAR(25),
+ object_workphone VARCHAR(25),
+ object_cellphone VARCHAR(25),
+ object_fax VARCHAR(25),
+ object_pager VARCHAR(25),
+ object_title VARCHAR(255),
+ object_role VARCHAR(255),
+ object_logo BLOB,
+ object_logotype VARCHAR(10),
+ object_company VARCHAR(255),
+ object_category VARCHAR(80),
+ object_notes TEXT,
+ object_url VARCHAR(255),
+ object_freebusyurl VARCHAR(255),
+ object_pgppublickey TEXT,
+ object_smimepublickey TEXT,
+ PRIMARY KEY(object_id)
+);
+
+CREATE TABLE IF NOT EXISTS turba_shares (
+ share_id INT NOT NULL,
+ share_name VARCHAR(255) NOT NULL,
+ share_owner VARCHAR(255) NOT NULL,
+ share_flags SMALLINT DEFAULT 0 NOT NULL,
+ perm_creator SMALLINT DEFAULT 0 NOT NULL,
+ perm_default SMALLINT DEFAULT 0 NOT NULL,
+ perm_guest SMALLINT DEFAULT 0 NOT NULL,
+ attribute_name VARCHAR(255) NOT NULL,
+ attribute_desc VARCHAR(255),
+ attribute_params TEXT,
+ PRIMARY KEY (share_id)
+);
+
+CREATE TABLE IF NOT EXISTS turba_shares_groups (
+ share_id INT NOT NULL,
+ group_uid VARCHAR(255) NOT NULL,
+ perm SMALLINT NOT NULL
+);
+
+CREATE TABLE IF NOT EXISTS turba_shares_users (
+ share_id INT NOT NULL,
+ user_uid VARCHAR(255) NOT NULL,
+ perm SMALLINT NOT NULL
+);
+
diff --git a/root/home/httpd/html/horde/smeserver/turba_mysql_reset_addressbook_pref.sql b/root/home/httpd/html/horde/smeserver/turba_mysql_reset_addressbook_pref.sql
new file mode 100644
index 0000000..9407ffe
--- /dev/null
+++ b/root/home/httpd/html/horde/smeserver/turba_mysql_reset_addressbook_pref.sql
@@ -0,0 +1,5 @@
+CONNECT horde;
+
+update horde_prefs set pref_value = '' where pref_scope = 'turba' and pref_name= 'addressbooks' and pref_value = 'localsql\nlocalldap';
+
+FLUSH PRIVILEGES;