Statistics
| Branch: | Tag: | Revision:

root / image_creator / os_type / windows.py @ c71f38be

History | View | Annotate | Download (2.8 kB)

1
# -*- coding: utf-8 -*-
2
#
3
# Copyright 2012 GRNET S.A. All rights reserved.
4
#
5
# Redistribution and use in source and binary forms, with or
6
# without modification, are permitted provided that the following
7
# conditions are met:
8
#
9
#   1. Redistributions of source code must retain the above
10
#      copyright notice, this list of conditions and the following
11
#      disclaimer.
12
#
13
#   2. Redistributions in binary form must reproduce the above
14
#      copyright notice, this list of conditions and the following
15
#      disclaimer in the documentation and/or other materials
16
#      provided with the distribution.
17
#
18
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
19
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
22
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
25
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
28
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
# POSSIBILITY OF SUCH DAMAGE.
30
#
31
# The views and conclusions contained in the software and
32
# documentation are those of the authors and should not be
33
# interpreted as representing official policies, either expressed
34
# or implied, of GRNET S.A.
35

    
36
"""This module hosts OS-specific code common for the various Microsoft
37
Windows OSs."""
38

    
39
from image_creator.os_type import OSBase
40

    
41
import hivex
42
import tempfile
43
import os
44

    
45

    
46
class Windows(OSBase):
47
    """OS class for Windows"""
48

    
49
    def _do_collect_metadata(self):
50
        """Collect metadata about the OS"""
51
        super(Windows, self)._do_collect_metadata()
52
        self.meta["USERS"] = " ".join(self._get_users())
53

    
54
    def _get_users(self):
55
        """Returns a list of users found in the images"""
56
        samfd, sam = tempfile.mkstemp()
57
        try:
58
            systemroot = self.g.inspect_get_windows_systemroot(self.root)
59
            path = "%s/system32/config/sam" % systemroot
60
            path = self.g.case_sensitive_path(path)
61
            self.g.download(path, sam)
62

    
63
            h = hivex.Hivex(sam)
64

    
65
            key = h.root()
66

    
67
            # Navigate to /SAM/Domains/Account/Users/Names
68
            for child in ('SAM', 'Domains', 'Account', 'Users', 'Names'):
69
                key = h.node_get_child(key, child)
70

    
71
            users = [h.node_name(x) for x in h.node_children(key)]
72

    
73
        finally:
74
            os.unlink(sam)
75

    
76
        # Filter out the guest account
77
        return filter(lambda x: x != "Guest", users)
78

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