Skip to content
Snippets Groups Projects
Commit 4854dbad authored by Philip Chan's avatar Philip Chan
Browse files

copy skel files into user home

Former-commit-id: c09b07f6
parent 4268beb4
No related branches found
No related tags found
No related merge requests found
...@@ -3,6 +3,7 @@ import ldap ...@@ -3,6 +3,7 @@ import ldap
import traceback import traceback
import os import os
import stat import stat
import shutil
class ldapSearchConfig: class ldapSearchConfig:
def __init__(self): def __init__(self):
...@@ -18,8 +19,7 @@ class genericUser: ...@@ -18,8 +19,7 @@ class genericUser:
self.dn="" self.dn=""
self.cn="" self.cn=""
self.entry="" self.entry=""
self.uid="" self.uid=""
def get_users(server): def get_users(server):
# ldap.set_option(ldap.OPT_X_TLS_CACERTFILE,server.cacertfile) # ldap.set_option(ldap.OPT_X_TLS_CACERTFILE,server.cacertfile)
...@@ -42,7 +42,6 @@ def get_users(server): ...@@ -42,7 +42,6 @@ def get_users(server):
allusers[dn].entry=attrs allusers[dn].entry=attrs
return allusers return allusers
def mk_homedir(path,uidNumber,gidNumber): def mk_homedir(path,uidNumber,gidNumber):
try: try:
statinfo = os.stat(path) statinfo = os.stat(path)
...@@ -56,6 +55,35 @@ def mk_homedir(path,uidNumber,gidNumber): ...@@ -56,6 +55,35 @@ def mk_homedir(path,uidNumber,gidNumber):
else: else:
raise Exception("users homedirectory is not a directory %s"%path) raise Exception("users homedirectory is not a directory %s"%path)
# adapted from http://stackoverflow.com/questions/5994840/how-to-change-the-user-and-group-permissions-for-a-directory-by-name
def recursive_chown(path,uidNumber,gidNumber):
si = os.stat(path)
# just a precaution before we recursively apply uid/gid to a path
if si.st_uid != uidNumber or si.st_gid != gidNumber:
raise Exception("user home %s uid %d != %d, gid %d != %d mismatch" % (path,si.st_uid,uidNumber,si.st_gid,gidNumber))
for root, dirs, files in os.walk(path):
for momo in dirs:
os.chown(os.path.join(root, momo), uidNumber, gidNumber)
for momo in files:
os.chown(os.path.join(root, momo), uidNumber, gidNumber)
def mk_home_cp_skel(skelroot, path, uidNumber, gidNumber):
if skelroot is None:
# assumes NO trailing / on the home path or dead meat
skelroot = path.rsplit("/", 1)[0]
# fix this later if your common/skel is located elsewhere
skelpath = os.path.join(skelroot, 'common', 'skel')
if os.path.isdir(skelpath):
# copy the skel into the user $HOME
os.system("/bin/cp -r %s/* %s" % (skelpath, path))
os.system("/bin/cp %s/\.* %s" % (skelpath, path))
# ideally use this, but it assumes 'path' does not exist
# shutil.copytree(skelpath, path)
# chown to user ownership
recursive_chown(path, uidNumber, gidNumber)
else:
raise Exception("skel path is missing %s" % skelpath)
s=ldapSearchConfig() s=ldapSearchConfig()
s.ldapserver="{{ ldapURI }}" s.ldapserver="{{ ldapURI }}"
s.binddn="{{ ldapBindDN }}" s.binddn="{{ ldapBindDN }}"
...@@ -65,15 +93,15 @@ s.searchFilter = "{{ search_filter }}" ...@@ -65,15 +93,15 @@ s.searchFilter = "{{ search_filter }}"
homeDirEntry= "{{ homeDirEntry }}" homeDirEntry= "{{ homeDirEntry }}"
mnthome = "{{ mnthome }}" mnthome = "{{ mnthome }}"
users=get_users(s) users=get_users(s)
for user in users: for user in users:
try: try:
if mnthome != "": if mnthome != "":
path=mnthome+"/"+users[user].entry[homeDirEntry][0].rsplit("/",1)[1] path=mnthome+"/"+users[user].entry[homeDirEntry][0].rsplit("/",1)[1]
else: else:
path=users[user].entry[homeDirEntry][0] path=users[user].entry[homeDirEntry][0]
mk_homedir(path,int(users[user].entry['uidNumber'][0]),int(users[user].entry['gidNumber'][0])) mk_homedir(path,int(users[user].entry['uidNumber'][0]),int(users[user].entry['gidNumber'][0]))
cp_skel(None, path, int(users[user].entry['uidNumber'][0]), int(users[user].entry['gidNumber'][0]))
except: except:
print traceback.format_exc() print traceback.format_exc()
pass pass
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment