This file is indexed.

/usr/share/ettercap/lua/third-party/fstable.lua is in ettercap-common 1:0.8.2-10build4.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
--- Tables mapped to the filing system
-- Only string keys are permitted; package.dirsep characters are
-- converted to underscores.
-- Values are stored as strings (converted by tostring).
-- As with disk operations, a table's elements must be set to nil
-- (deleted) before the table itself can be set to nil.

require "io_ext"
require "table_ext"

require "io_ext"
require "lfs"
require "posix"

local new

local function fsnext (dir)
  local f
  repeat
    f = dir:next ()
  until f ~= "." and f ~= ".."
  return f
end

-- Metamethods for persistent tables
local metatable = {}

metatable.__index =
function (t, k)
  local path = io.catfile (getmetatable (t).directory, k)
  local attrs = lfs.attributes (path)
  if attrs then
    if attrs.mode == "file" then
      return io.slurp (path)
    elseif attrs.mode == "directory" then
      return new (path)
    end
  end
  return attrs
end

metatable.__newindex =
function (t, k, v)
  local ty = type (v)
  if ty == "thread" or ty == "function" or ty == "userdata" then
    error ("cannot persist a " .. ty .. "")
  elseif type (k) ~= "string" then
    error ("keys of persistent tables must be of type string")
  else
    k = string.gsub (k, package.dirsep, "_")
    local path = io.catfile (getmetatable (t).directory, k)
    local vm = getmetatable (v)
    if v == nil then
      os.remove (path)
    elseif type (v) ~= "table" then
      local h = io.open (path, "w")
      h:write (tostring (v))
      h:close ()
    elseif type (vm) == "table" and vm.metatable == metatable then
      -- To match Lua semantics we'd hardlink, but that's not allowed for directories
      local ok, errmsg = posix.link (vm.directory, path, true)
    else
      local ok, errmsg = lfs.mkdir (path)
      if not ok then
        error (errmsg)
      end
      new (path, v)
    end
  end
end

metatable.__pairs =
function (t)
  local _, dir = lfs.dir (getmetatable (t).directory)
  return function (dir)
           local f = fsnext (dir)
           if f then
             return f, t[f]
           end
         end,
  dir
end

metatable.__ipairs =
function (t)
  local _, dir = lfs.dir (getmetatable (t).directory)
  return function (dir, i)
           local f = fsnext (dir)
           if f then
             return i + 1, f
           end
         end,
  dir, 0
end

--- Bind a directory to a table
-- @param path directory path
-- @param t table to merge with directory
-- @return table bound to directory
function new (path, t)
  if not path:find ("^" .. package.dirsep) then
    path = io.catfile (lfs.currentdir (), path)
  end
  if lfs.attributes (path, "mode") ~= "directory" then
    error ("`" .. path .. "' does not exist or is not a directory")
  end
  local m = table.clone (metatable)
  m.directory = path
  m.metatable = metatable
  local d = setmetatable ({}, m)
  if t then
    for i, v in pairs (t) do
      d[i] = v
    end
  end
  return d
end

local M = {
  new = new,
}

return M