Skip to content
Snippets Groups Projects
Commit b953cb75 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
parents 906363a9 661d57cc
No related branches found
No related tags found
1 merge request!73copy skel files into user home
......@@ -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