Skip to content
Snippets Groups Projects
Commit 6ae06377 authored by Chris Hines's avatar Chris Hines
Browse files

Merge branch 'addSkelCopy' into 'master'

copy skel files into user home

new functions were tested independently, but the entire j2 script is untested
if skelroot is given, it looks for skelroot/common/skel and copies all within to $home
otherwise, it looks for $home/../common/skel and copies that to $home

See merge request !73

Former-commit-id: b953cb75
parents 910efb7c 62749f0e
No related branches found
No related tags found
No related merge requests found
......@@ -3,6 +3,8 @@ import ldap
import traceback
import os
import stat
#import shutil
import subprocess
class ldapSearchConfig:
def __init__(self):
......@@ -18,8 +20,7 @@ class genericUser:
self.dn=""
self.cn=""
self.entry=""
self.uid=""
self.uid=""
def get_users(server):
# ldap.set_option(ldap.OPT_X_TLS_CACERTFILE,server.cacertfile)
......@@ -42,7 +43,6 @@ def get_users(server):
allusers[dn].entry=attrs
return allusers
def mk_homedir(path,uidNumber,gidNumber):
try:
statinfo = os.stat(path)
......@@ -56,6 +56,37 @@ def mk_homedir(path,uidNumber,gidNumber):
else:
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 dname in dirs:
os.chown(os.path.join(root, dname), uidNumber, gidNumber)
for fname in files:
os.chown(os.path.join(root, fname), uidNumber, gidNumber)
def 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))
subprocess.call(['/bin/cp', '-r', "%s/*" % skelpath, path])
# os.system("/bin/cp %s/\.* %s" % (skelpath, path))
subprocess.call(['/bin/cp', "%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.ldapserver="{{ ldapURI }}"
s.binddn="{{ ldapBindDN }}"
......@@ -65,15 +96,15 @@ s.searchFilter = "{{ search_filter }}"
homeDirEntry= "{{ homeDirEntry }}"
mnthome = "{{ mnthome }}"
users=get_users(s)
for user in users:
try:
if mnthome != "":
path=mnthome+"/"+users[user].entry[homeDirEntry][0].rsplit("/",1)[1]
else:
path=users[user].entry[homeDirEntry][0]
mk_homedir(path,int(users[user].entry['uidNumber'][0]),int(users[user].entry['gidNumber'][0]))
if mnthome != "":
path=mnthome+"/"+users[user].entry[homeDirEntry][0].rsplit("/",1)[1]
else:
path=users[user].entry[homeDirEntry][0]
mk_homedir(None, 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:
print traceback.format_exc()
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