Initial legacy version
This commit is contained in:
commit
4991f6dc12
3 changed files with 176 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
*~
|
||||||
|
.*.swp
|
48
README.md
Normal file
48
README.md
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
# Update memberOf
|
||||||
|
|
||||||
|
Tool to force update memberOf attributes of users on OpenLDAP directory using memberOf overlay.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
* [python-mylib](https://gogs.zionetrix.net/bn8/python-mylib) (legacy branch)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone https://gogs.zionetrix.net/bn8/updateMemberOf.git /usr/local/src/updateMemberOf
|
||||||
|
ln -s /usr/local/src/updateMemberOf/updateMemberOf /usr/local/sbin/updateMemberOf
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```
|
||||||
|
usage: updateMemberOf [-h] [-d] [-H HOST] [-D DN] [-P PWD] [-f FILTER] [-b BASE] [--v2] [-a ATTR] [-p]
|
||||||
|
|
||||||
|
Update memberOf attributes
|
||||||
|
|
||||||
|
optional arguments:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-d, --debug Enable debug mode
|
||||||
|
-H HOST, --host HOST LDAP server URI (default: ldapi:///)
|
||||||
|
-D DN, --dn DN LDAP bind DN
|
||||||
|
-P PWD, --password PWD
|
||||||
|
LDAP bind password
|
||||||
|
-f FILTER, --filter FILTER
|
||||||
|
LDAP groups filter (default: (objectClass=posixGroup))
|
||||||
|
-b BASE, --base BASE LDAP group base DN
|
||||||
|
--v2 Utiliser le protocole LDAP v2.
|
||||||
|
-a ATTR, --attr ATTR Group members attribute (default: uniqueMember)
|
||||||
|
-p, --progress Show progress bar
|
||||||
|
```
|
||||||
|
|
||||||
|
## Copyright
|
||||||
|
|
||||||
|
Copyright (c) 2013-2021 Benjamin Renard <brenard@zionetrix.net>
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 3 as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
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.
|
126
updateMemberOf
Executable file
126
updateMemberOf
Executable file
|
@ -0,0 +1,126 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import getpass
|
||||||
|
import logging
|
||||||
|
import sys
|
||||||
|
|
||||||
|
sys.path.insert(0,'/usr/local/src/python-mylib/')
|
||||||
|
import LdapServer
|
||||||
|
import Pbar
|
||||||
|
|
||||||
|
default_host = 'ldapi:///'
|
||||||
|
default_filter = '(objectClass=posixGroup)'
|
||||||
|
default_attr = 'uniqueMember'
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description="Update memberOf attributes")
|
||||||
|
|
||||||
|
# options
|
||||||
|
parser.add_argument(
|
||||||
|
'-d', '--debug',
|
||||||
|
action='store_true',
|
||||||
|
dest='debug',
|
||||||
|
help='Enable debug mode',
|
||||||
|
default=False
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'-H', '--host',
|
||||||
|
action="store",
|
||||||
|
type=str,
|
||||||
|
dest="host",
|
||||||
|
help="LDAP server URI (default: %s)" % default_host,
|
||||||
|
default=default_host
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'-D', '--dn',
|
||||||
|
action="store",
|
||||||
|
type=str,
|
||||||
|
dest="dn",
|
||||||
|
help="LDAP bind DN",
|
||||||
|
default=None
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'-P', '--password',
|
||||||
|
action="store",
|
||||||
|
type=str,
|
||||||
|
dest="pwd",
|
||||||
|
help="LDAP bind password",
|
||||||
|
default=None
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'-f', '--filter',
|
||||||
|
action="store",
|
||||||
|
type=str,
|
||||||
|
dest="filter",
|
||||||
|
help="LDAP groups filter (default: %s)" % default_filter,
|
||||||
|
default=default_filter
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'-b', '--base',
|
||||||
|
action="store",
|
||||||
|
type=str,
|
||||||
|
dest="base",
|
||||||
|
help="LDAP group base DN",
|
||||||
|
default=None
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--v2',
|
||||||
|
action="store_true",
|
||||||
|
dest="ldapv2",
|
||||||
|
help="Utiliser le protocole LDAP v2.",
|
||||||
|
default=None
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'-a', '--attr',
|
||||||
|
action="store",
|
||||||
|
type=str,
|
||||||
|
dest="attr",
|
||||||
|
help="Group members attribute (default: %s)" % default_attr,
|
||||||
|
default=default_attr
|
||||||
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'-p', '--progress',
|
||||||
|
action='store_true',
|
||||||
|
dest='progress',
|
||||||
|
help='Show progress bar',
|
||||||
|
default=False
|
||||||
|
)
|
||||||
|
|
||||||
|
options = parser.parse_args()
|
||||||
|
|
||||||
|
if options.debug:
|
||||||
|
logging.basicConfig(level=logging.DEBUG,format='%(asctime)s - %(levelname)s - %(message)s')
|
||||||
|
else:
|
||||||
|
logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s')
|
||||||
|
|
||||||
|
if options.base is None:
|
||||||
|
parser.error('You must specify base DN using --base parameter')
|
||||||
|
|
||||||
|
if options.dn and not options.pwd:
|
||||||
|
options.pwd=getpass.getpass()
|
||||||
|
|
||||||
|
# Start LDAP connection
|
||||||
|
myldap = LdapServer.LdapServer(options.host, options.dn, options.pwd, options.ldapv2)
|
||||||
|
myldap.connect()
|
||||||
|
|
||||||
|
ldap_data=myldap.search(options.base, options.filter, [ options.attr ])
|
||||||
|
|
||||||
|
logging.info('%s groups found', len(ldap_data))
|
||||||
|
|
||||||
|
pbar = Pbar.Pbar('Update memberOf', len(ldap_data), enabled=options.progress)
|
||||||
|
for dn in ldap_data:
|
||||||
|
old = myldap.get_attr(ldap_data[dn], options.attr, all=True)
|
||||||
|
if old is None:
|
||||||
|
continue
|
||||||
|
|
||||||
|
logging.debug('Update - remove values of %s', dn)
|
||||||
|
if myldap.update_object(
|
||||||
|
dn, {options.attr: old}, {options.attr: []}
|
||||||
|
):
|
||||||
|
logging.debug('Update - restore values of %s', dn)
|
||||||
|
myldap.update_object(dn, {options.attr: []}, {options.attr: old})
|
||||||
|
|
||||||
|
pbar.increment()
|
||||||
|
|
||||||
|
pbar.finish()
|
||||||
|
|
Loading…
Reference in a new issue