Revision 9fe161f8 image_creator/os_type/freebsd.py

b/image_creator/os_type/freebsd.py
33 33

  
34 34
from image_creator.os_type.unix import Unix
35 35

  
36
import re
37

  
36 38

  
37 39
class Freebsd(Unix):
38 40
    """OS class for FreeBSD Unix-like os"""
39
    pass
41
    def __init__(self, rootdev, ghandler, output):
42
        super(Freebsd, self).__init__(rootdev, ghandler, output)
43

  
44
        self.meta["USERS"] = " ".join(self._get_passworded_users())
45

  
46
        # Delete the USERS metadata if empty
47
        if not len(self.meta['USERS']):
48
            self.out.warn("No passworded users found!")
49
            del self.meta['USERS']
50

  
51
    def _get_passworded_users(self):
52
        users = []
53
        regexp = re.compile(
54
            '^([^:]+):((?:![^:]+)|(?:[^!*][^:]+)|):(?:[^:]*:){7}(?:[^:]*)'
55
        )
56

  
57
        for line in self.g.cat('/etc/master.passwd').splitlines():
58
            line = line.split('#')[0]
59
            match = regexp.match(line)
60
            if not match:
61
                continue
62

  
63
            user, passwd = match.groups()
64
            if len(passwd) > 0 and passwd[0] == '!':
65
                self.out.warn("Ignoring locked %s account." % user)
66
            else:
67
                users.append(user)
68

  
69
        return users
40 70

  
41 71
# vim: set sta sts=4 shiftwidth=4 sw=4 et ai :

Also available in: Unified diff