--- ./var/kolab/www/horde/turba/config/sources.php.org 2008-09-26 06:58:06.000000000 -0700 +++ ./var/kolab/www/horde/turba/config/sources.php 2008-09-26 07:17:10.000000000 -0700 @@ -769,6 +769,7 @@ * read-only public directory, stored in the default Kolab LDAP server. * The user accessing this should have read permissions to the shared * directory in LDAP. */ + list($uname,$udomain)=split("@",$_SESSION['imp']['user']); $cfgSources['kolab_global'] = array( 'title' => _("Global Address Book"), 'type' => 'ldap', @@ -776,7 +777,7 @@ 'server' => $_kolab_server, 'port' => $GLOBALS['conf']['kolab']['ldap']['port'], 'tls' => false, - 'root' => $GLOBALS['conf']['kolab']['ldap']['basedn'], + 'root' => "cn=$udomain,cn=domains,".$GLOBALS['conf']['kolab']['ldap']['basedn'], 'sizelimit' => 200, 'dn' => array('cn'), 'objectclass' => array( --- ./var/kolab/www/admin/settings/index.php.org 2008-09-25 15:25:00.000000000 -0700 +++ ./var/kolab/www/admin/settings/index.php 2008-09-29 08:13:04.000000000 -0700 @@ -103,7 +103,7 @@ 'cn' => $gadr, 'mail' => $gadr, 'member' => $dn ); - if( !ldap_add( $ldap->connection, "cn=$gadr,".$_SESSION['base_dn'], $attrs ) ) { + if( !ldap_add( $ldap->connection, "cn=$gadr,cn=$domain,cn=domains,".$_SESSION['base_dn'], $attrs ) ) { $errors[] = sprintf(_("LDAP Error: Failed to add distribution list %s: %s"), $gadr, $ldap->error()); } else { $messages[] = sprintf( _("Successfully created distribution list %s"), $gadr); @@ -235,6 +235,25 @@ $errors[] = sprintf(_("LDAP Error: failed to modify kolab configuration object: %s"), ldap_error($ldap->connection)); } + foreach ($postfixmydestination as $domain) { + // Try to add the Domains cn silently, Dont complain if it is already there + $attrs = array( 'objectClass' => array( 'top', 'kolabNamedObject' ), + 'cn' => $domain ); + if( $result = ldap_add( $ldap->connection, "cn=$domain,cn=domains,".$_SESSION['base_dn'], $attrs ) ) { + // If successful, add the subentrys + $attrs = array( 'objectClass' => array( 'top', 'kolabNamedObject' ), + 'cn' => 'internal' ); + ldap_add( $ldap->connection, "cn=internal,cn=$domain,cn=domains,".$_SESSION['base_dn'], $attrs ) ; + + $attrs = array( 'objectClass' => array( 'top', 'kolabNamedObject' ), + 'cn' => 'groups' ); + ldap_add( $ldap->connection, "cn=groups,cn=$domain,cn=domains,".$_SESSION['base_dn'], $attrs ) ; + + $attrs = array( 'objectClass' => array( 'top', 'kolabNamedObject' ), + 'cn' => 'resources' ); + ldap_add( $ldap->connection, "cn=resources,cn=$domain,cn=domains,".$_SESSION['base_dn'], $attrs ) ; + } + } } } --- ./var/kolab/www/admin/distributionlist/list.php.org 2008-09-25 15:32:05.000000000 -0700 +++ ./var/kolab/www/admin/distributionlist/list.php 2008-09-26 04:16:13.000000000 -0700 @@ -184,7 +184,8 @@ if ($action == "save") { if (!$errors) { - if (!empty($ldap_object['cn'])) $newdn = "cn=".$ldap_object['cn'].",".$dl_root; + list($uname,$udomain)=split("@",$ldap_object['cn']); + if (!empty($ldap_object['cn'])) $newdn = "cn=".$ldap_object['cn'].",cn=$udomain,cn=domains,".$dl_root; else $newdn = $dn; if (strcmp($dn,$newdn) != 0) { if (($result=ldap_read($ldap->connection,$dn,"(objectclass=*)")) && @@ -226,7 +227,8 @@ // firstsave if (!$errors) { if( !$ldap_object['member'] ) unset($ldap_object['member']); - $dn = "cn=".$ldap_object['cn'].",".$dl_root; + list($u,$udomain)=split("@",$ldap_object['cn']); + $dn = "cn=".$ldap_object['cn'].",cn=$udomain,cn=domains,".$dl_root; if ($dn && !ldap_add($ldap->connection, $dn, $ldap_object)) { array_push($errors, sprintf( _("LDAP Error: Could not add object %s: %s"), $dn, ldap_error($ldap->connection))); --- ./lib/php/Kolab/Webadmin/user.class.php.org 2008-09-26 06:20:41.000000000 -0700 +++ ./lib/php/Kolab/Webadmin/user.class.php 2008-09-26 06:22:40.000000000 -0700 @@ -184,7 +184,7 @@ if( $type < 0 || $type > 3 ) { $type = 3; } - $domain_dn = $this->acctyp[$type] . $this->_params['base_dn']; + $domain_dn = $this->acctyp[$type] . "cn=".$userdata['domainmail'].",cn=domains," .$this->_params['base_dn']; } --- ./etc/kolab/kolab_bootstrap.org 2008-09-26 06:24:09.000000000 -0700 +++ ./etc/kolab/kolab_bootstrap 2008-09-26 06:28:18.000000000 -0700 @@ -537,6 +537,46 @@ $mesg && $mesg->code && warn "failed to write entry: ", $mesg->error; undef $ldapobject; + # create domains groups topnode + $ldapobject = newOrExistingLDAPEntry( $ldap, "cn=domains,$base_dn" ); + $ldapobject->replace('cn' => 'domains', 'objectclass' => ['top','kolabnamedobject']); + $ldapobject->dn("cn=domains,$base_dn"); + $mesg = $ldapobject->update($ldap); + $mesg && $mesg->code && warn "failed to write entry: ", $mesg->error; + undef $ldapobject; + + # create first domain groups topnode + $ldapobject = newOrExistingLDAPEntry( $ldap, "cn=$domain,cn=domains,$base_dn" ); + $ldapobject->replace('cn' => $domain, 'objectclass' => ['top','kolabnamedobject']); + $ldapobject->dn("cn=$domain,cn=domains,$base_dn"); + $mesg = $ldapobject->update($ldap); + $mesg && $mesg->code && warn "failed to write entry: ", $mesg->error; + undef $ldapobject; + + # create first domain internal topnode + $ldapobject = newOrExistingLDAPEntry( $ldap, "cn=internal,cn=$domain,cn=domains,$base_dn" ); + $ldapobject->replace('cn' => 'internal', 'objectclass' => ['top','kolabnamedobject']); + $ldapobject->dn("cn=internal,cn=$domain,cn=domains,$base_dn"); + $mesg = $ldapobject->update($ldap); + $mesg && $mesg->code && warn "failed to write entry: ", $mesg->error; + undef $ldapobject; + + # create first domain groups topnode + $ldapobject = newOrExistingLDAPEntry( $ldap, "cn=groups,cn=$domain,cn=domains,$base_dn" ); + $ldapobject->replace('cn' => 'groups', 'objectclass' => ['top','kolabnamedobject']); + $ldapobject->dn("cn=groups,cn=$domain,cn=domains,$base_dn"); + $mesg = $ldapobject->update($ldap); + $mesg && $mesg->code && warn "failed to write entry: ", $mesg->error; + undef $ldapobject; + + # create first domain resources topnode + $ldapobject = newOrExistingLDAPEntry( $ldap, "cn=resources,cn=$domain,cn=domains,$base_dn" ); + $ldapobject->replace('cn' => 'resources', 'objectclass' => ['top','kolabnamedobject']); + $ldapobject->dn("cn=resources,cn=$domain,cn=domains,$base_dn"); + $mesg = $ldapobject->update($ldap); + $mesg && $mesg->code && warn "failed to write entry: ", $mesg->error; + undef $ldapobject; + # create external user topnode $ldapobject = newOrExistingLDAPEntry( $ldap, "cn=external,$base_dn" ); $ldapobject->replace('cn' => 'external', 'objectclass' => ['top','kolabnamedobject']); --- ./var/kolab/www/admin/user/user.php.orig 2008-07-09 09:57:30.000000000 -0700 +++ ./var/kolab/www/admin/user/user.php 2008-09-26 06:07:19.000000000 -0700 @@ -567,15 +582,16 @@ } } } - if( $_POST['accttype'] == 0 ) $dn_accttype=''; - else if( $_POST['accttype'] == 1 ) $dn_accttype='cn=internal,'; - else if( $_POST['accttype'] == 2 ) $dn_accttype='cn=groups,'; - else if( $_POST['accttype'] == 3 ) $dn_accttype='cn=resources,'; + list($uname,$udomain) = split('@',$ldap_object['mail']); + if( $_POST['accttype'] == 0 ) $dn_accttype="cn=$udomain,cn=domains,"; + else if( $_POST['accttype'] == 1 ) $dn_accttype="cn=internal,cn=$udomain,cn=domains,"; + else if( $_POST['accttype'] == 2 ) $dn_accttype="cn=groups,cn=$udomain,cn=domains,"; + else if( $_POST['accttype'] == 3 ) $dn_accttype="cn=resources,cn=$udomain,cn=domains,"; $domain_dn = $dn_accttype.domain_dn(); if ($action == "save") { if (!$errors) { - if (!empty($ldap_object['cn'])) $newdn = "cn=".$ldap->dn_escape($ldap_object['cn']).",".$domain_dn; + if (!empty($ldap_object['mail'])) $newdn = "mail=".$ldap->dn_escape($ldap_object['mail']).",".$domain_dn; else $newdn = $dn; if (strcmp($dn,$newdn) != 0) { // Check for distribution lists with this user as member @@ -613,7 +629,7 @@ if ( !$errors ) { // Try to rename the object - if (!ldap_rename($ldap->connection, $dn, "cn=" . $ldap_object['cn'], $domain_dn, true)) { + if (!ldap_rename($ldap->connection, $dn, "mail=" . $ldap_object['mail'] , $domain_dn, true)) { array_push($errors, sprintf(_("LDAP Error: could not rename %s to %s: %s"), $dn, $newdn, ldap_error($ldap->connection))); } @@ -680,7 +696,7 @@ } else { // firstsave if (!$errors) { - $dn = "cn=".$ldap->dn_escape($ldap_object['cn']).$dn_add.",".$domain_dn; + $dn = "mail=".$ldap->dn_escape($ldap_object['mail']).$dn_add.",".$domain_dn; foreach( $ldap_object as $k => $v ) { if( $v == array() ) unset($ldap_object[$k]); }