Exemplo n.º 1
0
    def parse_mnt(self, data):
        '''
        We use seen for 3.x kernels with mount namespaces 
        The same mount can be in multiple namespaces and we do not want to repeat output
        '''
        for (mnt, ns) in data:

            dev_name = mnt.mnt_devname.dereference_as(
                "String", length=linux_common.MAX_STRING_LENGTH)

            if not dev_name.is_valid() or len(dev_name) == 0:
                continue

            fstype = mnt.mnt_sb.s_type.name.dereference_as(
                "String", length=linux_common.MAX_STRING_LENGTH)

            if not fstype.is_valid() or len(fstype) == 0:
                continue

            path = linux_common.do_get_path(mnt.mnt_sb.s_root, mnt.mnt_parent,
                                            mnt.mnt_root, mnt)

            if path == []:
                continue

            mnt_string = self.calc_mnt_string(mnt)

            if (mnt.mnt_flags & 0x40) or (mnt.mnt_sb.s_flags & 0x1):
                rr = "ro"
            else:
                rr = "rw"

            if not ns or ns == mnt.mnt_ns:
                yield mnt.mnt_sb, dev_name, path, fstype, rr, mnt_string
Exemplo n.º 2
0
    def _parse_mnt(self, mnt, ns, fs_types):
        if not mnt.mnt_root.is_valid():
            return

        dev_name = mnt.mnt_devname.dereference_as("String", length = linux_common.MAX_STRING_LENGTH)
       
        if not dev_name.is_valid():
            return

        fstype = mnt.mnt_sb.s_type.name.dereference_as("String", length = linux_common.MAX_STRING_LENGTH)

        if not fstype.is_valid():
            return 

        if str(fstype) not in fs_types:
            return 

        path = linux_common.do_get_path(mnt.mnt_sb.s_root, mnt.mnt_parent, mnt.mnt_root, mnt)

        if path == []:
            return

        mnt_string = self._calc_mnt_string(mnt)

        if (mnt.mnt_flags & 0x40) or (mnt.mnt_sb.s_flags & 0x1):
            rr = "ro"
        else:
            rr = "rw"
        
        yield mnt.mnt_sb, dev_name, path, fstype, rr, mnt_string
Exemplo n.º 3
0
    def parse_mnt(self, data):
        '''
        We use seen for 3.x kernels with mount namespaces 
        The same mount can be in multiple namespaces and we do not want to repeat output
        '''
        for (mnt, ns) in data:

            dev_name = mnt.mnt_devname.dereference_as("String", length = linux_common.MAX_STRING_LENGTH)

            if not dev_name.is_valid() or len(dev_name) == 0:
                continue

            fstype = mnt.mnt_sb.s_type.name.dereference_as("String", length = linux_common.MAX_STRING_LENGTH)

            if not fstype.is_valid() or len(fstype) == 0:
                continue

            path = linux_common.do_get_path(mnt.mnt_sb.s_root, mnt.mnt_parent, mnt.mnt_root, mnt)

            if path == []:
                continue

            mnt_string = self.calc_mnt_string(mnt)

            if (mnt.mnt_flags & 0x40) or (mnt.mnt_sb.s_flags & 0x1):
                rr = "ro"
            else:
                rr = "rw"

            if not ns or ns == mnt.mnt_ns:
                yield mnt.mnt_sb, dev_name, path, fstype, rr, mnt_string
Exemplo n.º 4
0
    def _parse_mnt(self, mnt, ns, fs_types):
        dev_name = mnt.mnt_devname.dereference_as(
            "String", length=linux_common.MAX_STRING_LENGTH)

        #if not dev_name.is_valid() or len(dev_name) < 2:
        #    return

        fstype = mnt.mnt_sb.s_type.name.dereference_as(
            "String", length=linux_common.MAX_STRING_LENGTH)

        if not fstype.is_valid():
            return

        if str(fstype) not in fs_types:
            return

        path = linux_common.do_get_path(mnt.mnt_sb.s_root, mnt.mnt_parent,
                                        mnt.mnt_root, mnt)

        if path == []:
            return

        mnt_string = self._calc_mnt_string(mnt)

        if (mnt.mnt_flags & 0x40) or (mnt.mnt_sb.s_flags & 0x1):
            rr = "ro"
        else:
            rr = "rw"

        yield mnt.mnt_sb, dev_name, path, fstype, rr, mnt_string
Exemplo n.º 5
0
    def _parse_mnt(self, mnt, ns, fs_types):
        ret = None

        if not mnt.mnt_root.is_valid():
            return ret

        dev_name = mnt.mnt_devname.dereference_as("String", length = linux_common.MAX_STRING_LENGTH)
        if not dev_name.is_valid():
            return ret

        if len(dev_name) < 3:
            return ret

        new_name = False

        for nn in str(dev_name)[:3]:
            n = ord(nn)
            if n < 32 or n > 126 or n == 63: # 63 = ?
                new_name = True
                break
 
        if new_name == True:
            s = obj.Object("Pointer", offset = mnt.mnt_devname.obj_offset + 16, vm = self.addr_space)
            if not s.is_valid():
                return ret

            dev_name = s.dereference_as("String", length = linux_common.MAX_STRING_LENGTH)
            if not dev_name.is_valid() or len(dev_name) < 3:
                return ret

            for nn in str(dev_name)[:3]:
                n = ord(nn)
                if n < 32 or n > 126 or n == 63: # 63 = ?
                    return ret
 
        fstype = mnt.mnt_sb.s_type.name.dereference_as("String", length = linux_common.MAX_STRING_LENGTH)

        if not fstype.is_valid() or len(fstype) < 3:
            return ret

        for nn in str(fstype)[:3]:
            n = ord(nn)
            if n < 32 or n > 126 or n == 63: # 63 = ?
                return ret

        path = linux_common.do_get_path(mnt.mnt_sb.s_root, mnt.mnt_parent, mnt.mnt_root, mnt)
        if path == []:
            return ret

        mnt_string = self._calc_mnt_string(mnt)

        if (mnt.mnt_flags & 0x40) or (mnt.mnt_sb.s_flags & 0x1):
            rr = "ro"
        else:
            rr = "rw"
        
        return mnt.mnt_sb, str(dev_name), path, fstype, rr, mnt_string
Exemplo n.º 6
0
    def _parse_mnt(self, mnt, ns, fs_types):
        ret = None

        if not mnt.mnt_root.is_valid():
            return ret

        dev_name = mnt.mnt_devname.dereference_as(
            "String", length=linux_common.MAX_STRING_LENGTH)
        if not dev_name.is_valid():
            return ret

        if len(dev_name) < 3:
            return ret

        new_name = False

        for nn in str(dev_name)[:3]:
            n = ord(nn)
            if n < 32 or n > 126 or n == 63:  # 63 = ?
                new_name = True
                break

        if new_name == True:
            s = obj.Object("Pointer",
                           offset=mnt.mnt_devname.obj_offset + 16,
                           vm=self.addr_space)
            if not s.is_valid():
                return ret

            dev_name = s.dereference_as("String",
                                        length=linux_common.MAX_STRING_LENGTH)
            if not dev_name.is_valid() or len(dev_name) < 3:
                return ret

        fstype = mnt.mnt_sb.s_type.name.dereference_as(
            "String", length=linux_common.MAX_STRING_LENGTH)

        if not fstype.is_valid():
            return ret

        path = linux_common.do_get_path(mnt.mnt_sb.s_root, mnt.mnt_parent,
                                        mnt.mnt_root, mnt)
        if path == []:
            return ret

        mnt_string = self._calc_mnt_string(mnt)

        if (mnt.mnt_flags & 0x40) or (mnt.mnt_sb.s_flags & 0x1):
            rr = "ro"
        else:
            rr = "rw"

        return mnt.mnt_sb, str(dev_name), path, fstype, rr, mnt_string