Samba 3 to Samba 4 UUID migration
authorLars Kneschke <l.kneschke@metaways.de>
Wed, 27 May 2015 14:25:01 +0000 (16:25 +0200)
committerPhilipp Schüle <p.schuele@metaways.de>
Wed, 5 Aug 2015 08:36:18 +0000 (10:36 +0200)
* adds new properties for uuid and username

Change-Id: Ief57f0fc1f0f911aef69ddd8d9d9c0e9e9e7f901
Reviewed-on: http://gerrit.tine20.com/customers/1955
Reviewed-by: Philipp Schüle <p.schuele@metaways.de>
Tested-by: Philipp Schüle <p.schuele@metaways.de>
scripts/syncuuids/lib/Sync.php
scripts/syncuuids/syncuuids.php

index 4bcb4fb..f4ee2d2 100644 (file)
@@ -3,7 +3,9 @@
  * Tine 2.0
  *
  * @package     Sync
  * Tine 2.0
  *
  * @package     Sync
- * @author      Philipp Schüle <p.schuele@metaways.de>
+ * @author      Philipp Schüle <p.schuele@metaways.de
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @copyright   Copyright (c) 2008-2015 Metaways Infosystems GmbH (http://www.metaways.de)
  */
 
 /**
  */
 
 /**
@@ -33,23 +35,49 @@ class Sync
      * @var Zend_Ldap
      */
     protected $_ldap = NULL;
      * @var Zend_Ldap
      */
     protected $_ldap = NULL;
-    
-    /**
+
+   /**
     * the basic group ldap filter (for example the objectclass)
     * the basic group ldap filter (for example the objectclass)
-     *
+    *
+    * default LDAP:  'objectclass=posixgroup'
+    * Samba:         'objectclass=group'
+    *
     * @var string
     */
     * @var string
     */
-    protected $_groupBaseFilter = 'objectclass=posixgroup';
+    protected $_groupBaseFilter = 'objectclass=group';
     
     
-    /**
-     * the basic user ldap filter (for example the objectclass)
+   /**
+    * the basic user ldap filter (for example the objectclass)
+    *
+    * default LDAP:  'objectclass=posixaccount'
+    * Samba:         'objectclass=user'
     *
     * @var string
     */
     *
     * @var string
     */
-    protected $_userBaseFilter = 'objectclass=posixaccount';
-    
+    protected $_userBaseFilter = 'objectclass=user';
+
+    /**
+     * username property
+     *
+     * default LDAP: 'uid'
+     * Samba:        'samaccountname'
+     *
+     * @var string
+     */
+    protected $_usernameProperty = 'samaccountname';
+
     /**
     /**
-     * the tine user backend
+     * uuid property
+     *
+     * default LDAP: 'entryuuid'
+     * Samba:        'objectguid'
+     *
+     * @var string
+     */
+    protected $_uuidProperty = 'objectguid';
+
+    /**
+    * the tine user backend
     *
     * @var Tinebase_User_Sql
     */
     *
     * @var Tinebase_User_Sql
     */
@@ -206,8 +234,11 @@ class Sync
         $mapping = array();
         $ldapUsers = $this->_ldap->search($filter, $this->_config->ldap->baseDn, $this->_userSearchScope, array('*', '+'));
         foreach ($ldapUsers as $user) {
         $mapping = array();
         $ldapUsers = $this->_ldap->search($filter, $this->_config->ldap->baseDn, $this->_userSearchScope, array('*', '+'));
         foreach ($ldapUsers as $user) {
-            $username = $user['uid'][0];
-            $ldapUuid = $user['entryuuid'][0];
+            $username = $user[$this->_usernameProperty][0];
+            $ldapUuid = ($this->_uuidProperty === 'objectguid')
+                ? Tinebase_Ldap::decodeGuid($user['objectguid'][0])
+                : $user[$this->_uuidProperty][0];
+
             try {
                 $tineUser = $this->_tineUserBackend->getFullUserByLoginName($username);
                 $this->_logger->debug(__METHOD__ . '::' . __LINE__ . ' User ' . $username . ': ' . $tineUser->getId() . ' -> ' . $ldapUuid);
             try {
                 $tineUser = $this->_tineUserBackend->getFullUserByLoginName($username);
                 $this->_logger->debug(__METHOD__ . '::' . __LINE__ . ' User ' . $username . ': ' . $tineUser->getId() . ' -> ' . $ldapUuid);
@@ -241,7 +272,10 @@ class Sync
         $ldapGroups = $this->_ldap->search($filter, $this->_config->ldap->baseDn, $this->_groupSearchScope, array('*', '+'));
         foreach ($ldapGroups as $group) {
             $groupname = (isset($groupNameMapping[$group['cn'][0]])) ? $groupNameMapping[$group['cn'][0]] : $group['cn'][0];
         $ldapGroups = $this->_ldap->search($filter, $this->_config->ldap->baseDn, $this->_groupSearchScope, array('*', '+'));
         foreach ($ldapGroups as $group) {
             $groupname = (isset($groupNameMapping[$group['cn'][0]])) ? $groupNameMapping[$group['cn'][0]] : $group['cn'][0];
-            $ldapUuid = $group['entryuuid'][0];
+            $ldapUuid = ($this->_uuidProperty === 'objectguid')
+                ? Tinebase_Ldap::decodeGuid($group['objectguid'][0])
+                : $group[$this->_uuidProperty][0];
+
             try {
                 $tineGroup = $this->_tineGroupBackend->getGroupByName($groupname);
                 $this->_logger->debug(__METHOD__ . '::' . __LINE__ . ' Group ' . $groupname . ' (' .$group['cn'][0] . '): ' . $tineGroup->getId() . ' -> ' . $ldapUuid);
             try {
                 $tineGroup = $this->_tineGroupBackend->getGroupByName($groupname);
                 $this->_logger->debug(__METHOD__ . '::' . __LINE__ . ' Group ' . $groupname . ' (' .$group['cn'][0] . '): ' . $tineGroup->getId() . ' -> ' . $ldapUuid);
index d9d91ae..6e844a3 100644 (file)
@@ -15,7 +15,7 @@
  */
 
 // set include path to find all needed classes
  */
 
 // set include path to find all needed classes
-set_include_path('./lib' . PATH_SEPARATOR . '/var/www/tine20' . PATH_SEPARATOR . '/var/www/tine20/library' .   PATH_SEPARATOR . get_include_path());
+set_include_path('./lib' . PATH_SEPARATOR . '/usr/share/tine20' . PATH_SEPARATOR . '/usr/share/tine20/library' . PATH_SEPARATOR . '/etc/tine20' .   PATH_SEPARATOR . get_include_path());
 
 require_once 'Zend/Loader/Autoloader.php';
 $autoloader = Zend_Loader_Autoloader::getInstance();
 
 require_once 'Zend/Loader/Autoloader.php';
 $autoloader = Zend_Loader_Autoloader::getInstance();