Esempio n. 1
0
    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.')
Esempio n. 2
0
    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'])
Esempio n. 3
0
 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)
Esempio n. 4
0
    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))
Esempio n. 5
0
    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)
Esempio n. 6
0
    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)
Esempio n. 7
0
    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])
Esempio n. 8
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))
Esempio n. 9
0
    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)
Esempio n. 10
0
    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)
Esempio n. 11
0
 def testLdapConf(self):
     '''
     Test connecting via ldap.conf
     '''
     self.assertTrue(
         ad.Connection(BINDDN, BINDPW) is not None, 'Connection failed.')
Esempio n. 12
0
    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'))