def testServerParameter(self): ''' Pass in a parameter ''' try: ad.Connection(BINDDN, BINDPW, BADSERVER) self.assertTrue(False, 'Connection was created with a bad server') except Exception: pass self.assertTrue( ad.Connection(BINDDN, BINDPW, GOODSERVER) is not None, 'Connection failed.')
def testUserSearch(self): ''' Test search for users (ie default objectClass and search domain) ''' c = ad.Connection(BINDDN, BINDPW, GOODSERVER) userdata = c.search(distinguishedName=GOODUSERDN) self.assertTrue( len(userdata) == 1, 'Incorrect number of users returned: %d' % len(userdata)) self.assertTrue( userdata[0][0] == GOODUSERDN, 'Incorrect DN returned from search: %s' % userdata[0][0]) userdata = c.search(distinguishedName=BADUSERDN) self.assertTrue(len(userdata) == 0, 'User data returned for bad user!') try: userdata = c.search(distinguishedName=GOODUSERDN, domain=NOTADOMAIN) self.assertTrue(False, 'Result was returned for bad domain') except Exception: pass userdata = c.search(sAMAccountName=GOODUSERNAME) self.assertTrue( len(userdata) == 1, 'Wrong number of results returned: %d' % len(userdata)) self.assertTrue(userdata[0][0] == GOODUSERDN, 'Wrong user returned: %s' % userdata[0][0]) self.assertTrue( userdata[0][1]['sAMAccountName'][0] == GOODUSERNAME, 'Wrong username returned: %s' % userdata[0][1]['sAMAccountName'])
def testServerEnv(self): ''' Server list from environment. First one will fail, but second should connect ''' os.environ['RCDCS'] = ','.join([BADSERVER, GOODSERVER]) c = ad.Connection(BINDDN, BINDPW) self.assertTrue(c is not None, 'Connection failed') self.assertTrue(GOODSERVER in c.server, 'Server is %s' % c.server)
def testLargeGroupSearch(self): ''' Get users for a group that is larger than page size ''' c = ad.Connection(BINDDN, BINDPW, GOODSERVER) users = c.search(memberOf=LARGEGROUPDN) self.assertTrue( len(users) > ad.PAGESIZE, 'Group %s has %d members, but should have more than %d' % (LARGEGROUPDN, len(users), ad.PAGESIZE)) for user in users: self.assertTrue( LARGEGROUPDN in user[1]['memberOf'], 'User %s is was erroneously returned in search of %s' % (user[0], LARGEGROUPDN))
def tearDown(self): c = ad.Connection(BINDDN, BINDPW) for dn in ['CN=%s,%s' % (NEWUSER['cn'], user.NEW_ACCOUNT_OU)]: try: c.delete(dn) except Exception: pass if user.DEFAULT_HOME_ROOT is None or user.DEFAULT_HOME_ROOT == '': raise Exception( 'If you unset user.DEFAULT_HOME_ROOT and run this test, you will remove your entire file system.' ) os.system('sudo rm -rf %s > /dev/null' % user.DEFAULT_HOME_ROOT) os.system('sudo rm -rf %s > /dev/null' % user.NCF_HOME_ROOT) shutil.rmtree(TEMP_HOME, ignore_errors=True)
def testNcfUser(self): ''' Ensure that an NCF user gets created with a correct home directory ''' # Create the user c = ad.Connection(BINDDN, BINDPW) userdn = user.addNewAccount(c, **NEWUSER) self.assertTrue( userdn == 'CN=%s,%s' % (NEWUSER['cn'], user.NEW_ACCOUNT_OU), 'Returned dn was incorrect: %s' % userdn) # Initially the default result = c.search(distinguishedName=userdn) self.assertTrue( result[0][1]['unixHomeDirectory'][0] == user.DEFAULT_UNIX_HOME, 'Incorrect default home dir set: %s' % result[0][1]['unixHomeDirectory'][0]) user.setPrimaryGroup(c, userdn, groupdn=USELESS_GROUP_DN, gid=USELESS_GID) # Don't create the home dir since user is not in cluster users or ncf users try: user.makeHomedir(c, userdn) self.assertTrue( False, 'No exception was thrown though no cluster user group was set.' ) except Exception as e: self.assertTrue( 'Cannot create a home directory for user that is not in one of the cluster user groups' in str(e), 'Error message is incorrect: %s' % str(e)) # Add the user to the group user.addToGroup(c, userdn, user.NCF_USER_GROUP_DN) # make the homedir user.makeHomedir(c, userdn) home = os.path.join(user.NCF_HOME_ROOT, NEWUSER['username']) self.assertTrue(os.path.exists(home), 'Home dir not created %s' % home)
def testPresetHomedir(self): ''' Test for handling old account tool logic in which the home directory is set by the account tool. ''' c = ad.Connection(BINDDN, BINDPW) userdn = user.addNewAccount(c, **NEWUSER) self.assertTrue( userdn == 'CN=%s,%s' % (NEWUSER['cn'], user.NEW_ACCOUNT_OU), 'Returned dn was incorrect: %s' % userdn) result = c.search(distinguishedName=userdn) self.assertTrue( result[0][1]['unixHomeDirectory'][0] == user.DEFAULT_UNIX_HOME, 'Incorrect default home dir set: %s' % result[0][1]['unixHomeDirectory'][0]) # Set unixHomeDirectory to an appropriate value home = os.path.join(user.DEFAULT_HOME_ROOT, GOOD_HOME, NEWUSER['username']) c.setAttributes(userdn, unixHomeDirectory=home) # Set a primary group user.setPrimaryGroup(c, userdn, groupdn=USELESS_GROUP_DN, gid=USELESS_GID) # Make sure he's in a cluster user group user.addToGroup(c, userdn, user.CLUSTER_USERS_GROUP_DNS[0]) user.makeHomedir(c, userdn) # Check that it has the contents of skel and the rsa key cmd = "sudo su - %s -c 'cd && ls -l .ssh/id_rsa'" % NEWUSER['username'] p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = p.communicate() print(stdout) self.assertTrue(p.returncode == 0, 'Attempt to ls public key failed %s' % stderr) self.assertTrue( stdout.decode('utf-8').split()[0] == '-rw-------', 'Incorrect result from ls: %s' % stdout.decode('utf-8').split()[0])
def testGroupSearch(self): ''' Use the search functionality to find a group ''' c = ad.Connection(BINDDN, BINDPW, GOODSERVER) groupdata = c.search(domain=ad.GROUP_DOMAIN, objectclass='Group', gidNumber=GOODGID) self.assertTrue( len(groupdata) == 1, 'Wrong number of group search results: %d' % len(groupdata)) self.assertTrue(groupdata[0][0] == GOODGROUPDN, 'Incorrect group dn returned: %s' % groupdata[0][0]) groupdata = c.search(domain=ad.GROUP_DOMAIN, objectclass='Group', gidNumber=BADGID) self.assertTrue( len(groupdata) == 0, 'Wrong number of group search results: %d' % len(groupdata))
def testAddToGroup(self): ''' Test adding and removing a user from a group ''' c = ad.Connection(BINDDN, BINDPW, MODSERVER) [user] = c.search(distinguishedName=GOODUSERDN) self.assertTrue(user[0] == GOODUSERDN, 'User search failed') self.assertTrue(ADDGROUPDN not in user[1]['memberOf'], 'Group %s found in group list\n' % ADDGROUPDN) # Add user to group c.addUsersToGroups(GOODUSERDN, ADDGROUPDN) [user] = c.search(distinguishedName=GOODUSERDN) self.assertTrue(user[0] == GOODUSERDN, 'User search failed') self.assertTrue(ADDGROUPDN in user[1]['memberOf'], 'Group %s found in group list\n' % ADDGROUPDN) # Remove user from group c.removeUsersFromGroups(GOODUSERDN, ADDGROUPDN) [user] = c.search(distinguishedName=GOODUSERDN) self.assertTrue(user[0] == GOODUSERDN, 'User search failed') self.assertTrue(ADDGROUPDN not in user[1]['memberOf'], 'Group %s found in group list\n' % ADDGROUPDN)
def setUp(self): self.assertTrue( os.system('grep "%s:x:%d" < /etc/group > /dev/null' % (NEWUSER_GROUP['name'], NEWUSER_GROUP['gid'])) == 0, 'Test group does not exist') c = ad.Connection(BINDDN, BINDPW) c.removeUsersFromGroups( 'CN=%s,%s' % (NEWUSER['cn'], user.NEW_ACCOUNT_OU), USELESS_GROUP_DN) for dn in ['CN=%s,%s' % (NEWUSER['cn'], user.NEW_ACCOUNT_OU)]: try: c.delete(dn) except Exception: pass if user.DEFAULT_HOME_ROOT is None or user.DEFAULT_HOME_ROOT == '': raise Exception( 'If you unset user.DEFAULT_HOME_ROOT and run this test, you will remove your entire file system.' ) os.system('sudo rm -rf %s > /dev/null' % user.DEFAULT_HOME_ROOT) os.system('sudo rm -rf %s > /dev/null' % user.NCF_HOME_ROOT) shutil.rmtree(TEMP_HOME, ignore_errors=True)
def testLdapConf(self): ''' Test connecting via ldap.conf ''' self.assertTrue( ad.Connection(BINDDN, BINDPW) is not None, 'Connection failed.')
def testMkHomedir(self): ''' Create home directories ''' c = ad.Connection(BINDDN, BINDPW) dn = user.addNewAccount(c, **NEWUSER) self.assertTrue( dn == 'CN=%s,%s' % (NEWUSER['cn'], user.NEW_ACCOUNT_OU), 'Returned dn was incorrect: %s' % dn) result = c.search(distinguishedName=dn) self.assertTrue( result[0][1]['unixHomeDirectory'][0] == user.DEFAULT_UNIX_HOME, 'Incorrect default home dir set: %s' % result[0][1]['unixHomeDirectory'][0]) # Fail because primary group is not set try: user.makeHomedir(c, dn) self.assertTrue( False, 'No exception was thrown though primary group was not set.') except Exception as e: self.assertTrue('has no primary group set' in str(e), 'Error message is incorrect: %s' % str(e)) user.setPrimaryGroup(c, dn, groupdn=USELESS_GROUP_DN, gid=USELESS_GID) # Don't create the home dir since user is not in cluster users or ncf users try: user.makeHomedir(c, dn) self.assertTrue( False, 'No exception was thrown though no cluster user group was set.' ) except Exception as e: self.assertTrue( 'Cannot create a home directory for user that is not in one of the cluster user groups' in str(e), 'Error message is incorrect: %s' % str(e)) user.addToGroup(c, dn, user.CLUSTER_USERS_GROUP_DNS[0]) # Fail to create the directory because it already exists self.createAllTheHomes() try: user.makeHomedir(c, dn) self.assertTrue( False, 'No exception was thrown, though dir was already made.') except Exception as e: self.assertTrue('already exists' in str(e), 'Incorrect error message: %s' % str(e)) # Make sure it is still the old default after the error result = c.search(distinguishedName=dn) self.assertTrue( result[0][1]['unixHomeDirectory'][0] == user.DEFAULT_UNIX_HOME, 'Incorrect default home dir set: %s' % result[0][1]['unixHomeDirectory'][0]) self.removeAllTheHomes() # Fail becuase you can't create a dir there try: user.makeHomedir(c, dn, '/proc/junk/stuff') self.assertTrue( False, 'No exception was thrown, though you cannot write to the dir') except Exception as e: self.assertTrue('No such file or directory' in str(e), 'Incorrect error message: %s' % str(e)) # Make sure it is still the old default after the error result = c.search(distinguishedName=dn) self.assertTrue( result[0][1]['unixHomeDirectory'][0] == user.DEFAULT_UNIX_HOME, 'Incorrect default home dir set: %s' % result[0][1]['unixHomeDirectory'][0]) # Fail because the skel dir doesn't exist try: user.makeHomedir(c, dn, home=TEMP_HOME, skeldir='/this/doesnot/exist') self.assertTrue( False, 'No exception thrown, though the skeldir does not exist.') except Exception as e: self.assertTrue('No such file or directory' in str(e), 'Incorrect error message: %s' % str(e)) # Make sure it is still the old default after the error result = c.search(distinguishedName=dn) self.assertTrue( result[0][1]['unixHomeDirectory'][0] == user.DEFAULT_UNIX_HOME, 'Incorrect default home dir set: %s' % result[0][1]['unixHomeDirectory'][0]) goodhome = os.path.join(user.DEFAULT_HOME_ROOT, GOOD_HOME, NEWUSER['username']) # Set to a usable primary group c.removeUsersFromGroups(dn, USELESS_GROUP_DN) user.setPrimaryGroup(c, dn, groupdn=USELESS_GROUP_DN, gid=NEWUSER_GROUP['gid']) # Set the uidnumber for the user c.setAttributes(dn, uidNumber=NEWUSERUID) # Make a home dir for real user.makeHomedir(c, dn, home=goodhome, skeldir=GOOD_SKEL) # Check that it has the contents of skel and the rsa key cmd = 'sudo su - %s -c "ls -l ~/.ssh/id_rsa"' % NEWUSER['username'] p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = p.communicate() self.assertTrue(p.returncode == 0, 'Attempt to ls public key failed %s' % stderr) self.assertTrue( stdout.decode('utf-8').split()[0] == '-rw-------', 'Incorrect result from ls: %s' % stdout.decode('utf-8').split()[0]) cmd = 'sudo su - %s -c "cat .bashrc"' % NEWUSER['username'] p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = p.communicate() self.assertTrue(p.returncode == 0, 'Attempt to ls public key failed %s' % stderr) self.assertTrue( 'new-modules' not in stdout.decode('utf-8'), 'new-modules is in the stdout! : %s' % stdout.decode('utf-8'))