Hi cipux-devel, hi debian edu, we were recently asked to provide a method to automatically remove user directories of deleted users. To accomplish that task we wrote a python script which can be called by cron an which reads all users in the ldap database. That user list is compared with the list of directories in /skole/tjener/home0, and all directories which do not fit to a user name and which are not owned by root are removed. Use that script at your own risk - it can severly damage your system! Regards, Roland -- Roland Wolters Tel.: +49 (0) 21 61 / 46 43-181 Mobil: +49 (0) 160 / 74 52 624 pgp fingerprint: D2DE 4612 9C7D 7B7A 420D 84A8 E900 29F9 C16C 2283 credativ GmbH, HRB Mönchengladbach 12080 Hohenzollernstr. 133, 41061 Mönchengladbach Geschäftsführung: Dr. Michael Meskes, Jörg Folz
#!/usr/bin/python # -*- coding: utf-8 -*- # ### Author: # Roland Wolters (roland.wolters@credativ.de) # Timo Wedemeier # ### Description: # This script checks for all active users in the ldap directory # and compares that list against the existing user directories of # of a SkoleLinux installation. User directories which are not # named after an existing user and do not belong to root are # removed. # ### Version # v0.1, 2009-08-26 # ### Usage: # The script doesn't take any arguments. Just call it and watch. # ### Licence and Responsibility: # # Copyright (c) 2009, credativ GmbH # All rights reserved. # # Redistribution and use in source and binary forms, with or # without modification, are permitted provided that the following # conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following # disclaimer in the documentation and/or other materials provided # with the distribution. # * Neither the name of the credativ GmbH nor the names of its # contributors may be used to endorse or promote products derived # from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. import os, ldap, sys import shutil from sets import Set ## Our global variables homedir ='/skole/tjener/home0' ### Our functions. def list_home_dirs(homedir): dir_list = os.listdir(homedir) return dir_list def list_ldap_users(): ldap_server=ldap.initialize("ldap://tjener.intern:389") ldap_search = ldap_server.search_s('ou=Group,dc=skole,dc=skolelinux,dc=no', ldap.SCOPE_SUBTREE, '(cn=*)', ['sn']) user_list = [] for i in range(len(ldap_search)): user_list.append(ldap_search[i][0].split(',',1)[0].split('=')[1]) return user_list def compare(list,list2): set1 = set(list2) set2 = set(list) set_diff = set2-set1 return set_diff def del_home(homedir,set_diff): for i in set_diff: if os.lstat(homedir+'/'+i)[4]!=0: shutil.rmtree(homedir+'/'+i) # print 'Directory deleted: '+i ### Main part home_dirs = list_home_dirs(homedir) real_users = list_ldap_users() set_diff = compare(home_dirs,real_users) del_home(homedir,set_diff)
Attachment:
signature.asc
Description: This is a digitally signed message part.