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