示例#1
0
  def testLoadLibraryUsesWellKnownPathAsFallback(self, load_library_mock,
                                                 find_library_mock):
    mock_cdll = mock.Mock()
    find_library_mock.return_value = None
    load_library_mock.side_effect = [OSError("not found"), mock_cdll]

    result = objc.LoadLibrary("Foobazzle")

    self.assertGreaterEqual(load_library_mock.call_count, 1)
    load_library_mock.assert_called_with(
        "/System/Library/Frameworks/Foobazzle.framework/Foobazzle")
    self.assertIs(result, mock_cdll)
示例#2
0
文件: osx.py 项目: khanhgithead/grr
def EnumerateInterfacesFromClient(args):
  """Enumerate all MAC addresses."""
  del args  # Unused

  libc = objc.LoadLibrary("c")
  ifa = Ifaddrs()
  p_ifa = ctypes.pointer(ifa)
  libc.getifaddrs(ctypes.pointer(p_ifa))

  for iface in ParseIfaddrs(p_ifa):
    yield iface

  libc.freeifaddrs(p_ifa)
示例#3
0
  def testLoadLibraryTriesLoadingSharedLoadedLibrary(self, load_library_mock,
                                                     find_library_mock):
    mock_cdll = mock.Mock()

    def _LoadLibrary(libpath):
      if libpath is None:
        return mock_cdll
      else:
        raise OSError("not found")

    find_library_mock.return_value = None
    load_library_mock.side_effect = _LoadLibrary

    loaded_lib_name = next(iter(objc._LOADED_SHARED_LIBRARIES))
    result = objc.LoadLibrary(loaded_lib_name)

    self.assertGreaterEqual(load_library_mock.call_count, 1)
    load_library_mock.assert_called_with(None)
    self.assertIs(result, mock_cdll)
示例#4
0
def GetFileSystems():
    """Make syscalls to get the mounted filesystems.

  Returns:
    A list of Struct objects.

  Based on the information for getfsstat
    http://developer.apple.com/library/mac/#documentation/Darwin/
      Reference/ManPages/man2/getfsstat.2.html
  """
    version = OSXVersion()
    major, minor = version.VersionAsMajorMinor()

    libc = objc.LoadLibrary("c")

    if major <= 10 and minor <= 5:
        use_64 = False
        fs_struct = StatFSStruct
    else:
        use_64 = True
        fs_struct = StatFS64Struct

    # Get max 20 file systems.
    struct_size = fs_struct.GetSize()
    buf_size = struct_size * 20

    cbuf = ctypes.create_string_buffer(buf_size)

    if use_64:
        # MNT_NOWAIT = 2 - don't ask the filesystems, just return cache.
        ret = libc.getfsstat64(ctypes.byref(cbuf), buf_size, 2)
    else:
        ret = libc.getfsstat(ctypes.byref(cbuf), buf_size, 2)

    if ret == 0:
        logging.debug("getfsstat failed err: %s", ret)
        return []
    return ParseFileSystemsStruct(fs_struct, ret, cbuf)