Zimbra offers Open Source email server software and shared calendar for Linux and the Mac
 
Go Back   Zimbra - Forums > Zimbra Collaboration Suite > Installation

Welcome to the Zimbra - Forums!
Welcome, if you would like to post a comment please register. We also encourage you to explore all things Zimbra with our team and members of the community.

Reply
 
LinkBack Thread Tools Display Modes
  #1 (permalink)  
Old 10-03-2009, 01:35 PM
Junior Member
 
Posts: 8
Question Integrating with Active Directory

hi there

i have just integrated an Active Directory account in Zimbra but i wanna know one thing,

how do i sync the AD users with Zimbra users automatically or do i need to do it manually..

Thanks and Regards,
Reply With Quote
  #2 (permalink)  
Old 10-05-2009, 01:44 AM
Moderator
 
Posts: 5,806
Default

You will need to script it manually.
__________________
SplatNIX IT Services :: Innovation through Collaboration™


http://www.messagefortress.com
Reply With Quote
  #3 (permalink)  
Old 10-05-2009, 01:59 AM
Junior Member
 
Posts: 8
Lightbulb

Thanks but can you guide me to any script or piece of code.

I will be very thankful to you.

Thanks and Regards.
Reply With Quote
  #4 (permalink)  
Old 10-05-2009, 02:00 AM
Moderator
 
Posts: 5,806
Default

Which will be your source Zimbra or AD ?
__________________
SplatNIX IT Services :: Innovation through Collaboration™


http://www.messagefortress.com
Reply With Quote
  #5 (permalink)  
Old 10-05-2009, 02:04 AM
Junior Member
 
Posts: 8
Lightbulb

Ok, i need all my 'active directory' users to be created in 'zimbra', i think in that case the source will be 'AD' ?

Every time i create a user in 'AD', it will be created in 'zimbra' automatically.
Reply With Quote
  #6 (permalink)  
Old 10-05-2009, 02:15 AM
Moderator
 
Posts: 5,806
Default

Well there are two ways you could do this :-

1) Extract you AD users and compare to list of ZCS users
2) Use PHP and AdLDAP to create the AD users; and if you search the forums for PHP there are some classes for creating users in ZCS
__________________
SplatNIX IT Services :: Innovation through Collaboration™


http://www.messagefortress.com
Reply With Quote
  #7 (permalink)  
Old 10-05-2009, 03:05 AM
Senior Member
 
Posts: 59
Default

I recently dug up this post, which seems to do exactly what you need. It's a python script and here's the code:

Code:
#!/usr/bin/python

# 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; GPLv3
#      
# 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.
#              
# To obtain a copy of the GNU General Public License, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
#
#--------------------------------------------------------------------------------------------------
# Notes:
# This script automatically creates zimbra accounts from active directory, the actrive directory account must have
# the employeeType=STUDENT attributed set. If accounts are in the 'banned' active directory group then the
# account will automatically be locked when the script is run, and unlocked if they are no longer in the AD 
# banned group                       
#--------------------------------------------------------------------------------------------------

# Variables can be changed here:
banned =  'CN=Banned,CN=Users,DC=college,DC=internal'
# an OU for banned users
scope   = 'ou=OU,dc=college,dc=internal'
#the search scope
domain = "domain.college.internal" # "example.com"
ldapserver="server1"
#ldap server
port="389" 
#ldap port (389 default)
emaildomain="zimbra.school.sch.uk"
#the email domain
ldapbinddomain="DOMAIN"
#the domain of the ldap bind account
ldapbind="ldapusername"
#the account name of the account to bind to ldap
ldappassword="password"
#the ldap password
pathtozmprov="/opt/zimbra/bin/zmprov"
#--------------------------------------------------------------------------------------------------
import ldap, string, os, time, sys

#output the list of all accounts from zmprov gaa (get all accounts)
f = os.popen(pathtozmprov +' gaa')
zmprovgaa= []
zmprovgaa = f.readlines()
           
l=ldap.initialize("ldap://"+ldapserver+"."+domain+":"+port) 
l.simple_bind_s(ldapbinddomain+"\"+ldapbind,ldappassword) #bind to the ldap server using name/password 

try:
    res = l.search_s(scope, 
    ldap.SCOPE_SUBTREE, "(&(ObjectCategory=user) (userAccountControl=512)(employeeType=STUDENT))", ['sAMAccountName','givenName','sn','memberOf'])
#userAccountControl  512 = normal , 514 = disabled account
    for (dn, vals) in res:
      accountname = vals['sAMAccountName'][0].lower()
      try:
        sirname = vals['sn'][0].lower()
      except: 
        sirname = vals['sAMAccountName'][0].lower()
      try:
        givenname = vals['givenName'][0]          
      except:
        givenname = vals['sAMAccountName'][0].lower()
      try:
        groups = vals['memberOf']
      except:
        groups = 'none'
      initial = givenname[:1].upper()
      sirname = sirname.replace(' ', '')
      sirname = sirname.replace('\'', '')
      sirname = sirname.replace('-', '')
      sirname = sirname.capitalize()
      name = initial + "." + sirname
      accountname = accountname + "@" + emaildomain
      password = "  \'\' "
      sys.stdout.flush()
      
      # if the account doesn't exist in the output of zmprov gaa create the account
      if accountname +"\n" not in zmprovgaa:
        
        print  accountname," exists in active directory but not in zimbra, the  account is being created\n"
        time.sleep(1)
        os.system(pathtozmprov +' ca %s %s displayName %s' % (accountname,password,name))  


      # if the account is in the group 'banned' check to see if account already locked
      if banned in groups:
        zmprovga = os.popen(pathtozmprov + ' ga %s' % (accountname))
        ga= []
        ga = zmprovga.readlines()
        locked = "zimbraAccountStatus: locked\n"
        if locked not in ga: #if account not locked then lock it
          print accountname, " has been BANNED from the internet. The email account has been locked "
          os.system(pathtozmprov + ' ma %s zimbraAccountStatus locked' % (accountname))
          time.sleep(1)
        else:
          print accountname, " has a locked email account because they are in the 'banned' group"
       
       #set any accounts to 'active' if they are not in the banned group and the account is currently locked
      else:
        zmprovga = os.popen(pathtozmprov + ' ga %s' % (accountname))
        ga= []
        ga = zmprovga.readlines()
        locked = "zimbraAccountStatus: locked\n"
        if locked in ga:
          os.system(pathtozmprov + ' ma %s zimbraAccountStatus active' % (accountname))
          time.sleep(1)
          print accountname, " is no longer in the 'banned' group, therefore the account has been activated"                            

           
except ldap.LDAPError, error_message:
  print error_message          

l.unbind_s()
Just to be clear: I didn't write this code, CyberNerd published this at the EduGeek forums.
Reply With Quote
Reply


Thread Tools
Display Modes


Similar Threads

Why Join?

Registering let's you ask questions, makes it easier to search, displays any files attached to posts, and notifies you about replies.

Zimbrablog.com




 

Search Engine Optimization by vBSEO 3.1.0