immunio 1.0.13 → 1.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d5de4fe5e22b12a72cb97953b87a947c447f0803
4
- data.tar.gz: 3c004b6a90391a8b23fe5d54b48bf770adbd4c01
3
+ metadata.gz: 4f381a24b73b7115c320e46e538564da3d4001f2
4
+ data.tar.gz: 12b66439e36175bddd908eca2f94ec5269c6ccb4
5
5
  SHA512:
6
- metadata.gz: 5a94e59b6b6e0defbdb18aa08b955de7ce3700c053b2f8f247db61931dd67ff788379584c791503d844d47c220e394aa93e753d7f40953220683199e6a05be1c
7
- data.tar.gz: 83ad5fc59f7bd320e2881f11bcbdad261c21a2734645921c4df4ab58e5849b167c0d6e2905d5eb242c6fee76711bb9d215b7ba1a2c37fd6ecfe4c65bb3b00868
6
+ metadata.gz: 75b54a277712434f4cfc18dd8f1a7e2bbe0c061dd7f4053f9e98048a9608107c1dc22e2c4b92334191970b68560ac83632661aae561efc332a28eb8c0c0830a1
7
+ data.tar.gz: d37adcced6010eb26a12990217d59d93f8520122b583d0489d0a7df85c795f2fea3102d02767d12285eaed411149fce6903e0c4bdb999f4d27141aae5bb211c0
@@ -256,7 +256,35 @@ module Immunio
256
256
  end
257
257
  end
258
258
 
259
+ ENCODED_IMMUNIO_TOKENS_RE = Regexp.compile(/(?:{|%7b)immunio-(var|fragment)(?::|%3a)(\d+)(?::|%3a)([0-9a-f]{1,4})(?:}|%7d)(.*?)(?:{|%7b)(?:\/|%2f)immunio-\1(?::|%3a)\2(?::|%3a)\3(?:}|%7d)/i)
260
+ def self.decode_immunio_tokens(rendered)
261
+ # Look for URI or JS encoded immunio tokens in the rendering and decode them
262
+ if rendered.respond_to? :to_str
263
+ was_html_safe = rendered.html_safe?
264
+ was_frozen = rendered.frozen?
265
+
266
+ if was_frozen
267
+ # This is not an airtight solution. Object#dup does not copy methods
268
+ # defined on the instance, and may be overridden by subclasses to do
269
+ # things that would cause problems for us. But most likely there is no
270
+ # problem with using dup. We can't use Object#clone because the clone
271
+ # retains the frozen status of the original, preventing us from
272
+ # modifying the string contents.
273
+ rendered = rendered.dup
274
+ end
275
+
276
+ rendered.gsub! ENCODED_IMMUNIO_TOKENS_RE, "{immunio-\\1:\\2:\\3}\\4{/immunio-\\1:\\2:\\3}"
277
+
278
+ rendered.instance_variable_set(:@html_safe, true) if was_html_safe
279
+ rendered.freeze if was_frozen
280
+ end
281
+
282
+ rendered
283
+ end
284
+
259
285
  def self.render_var(code, rendered, template_id, template_sha, file, line, escape, is_text, handler)
286
+ rendered = decode_immunio_tokens rendered
287
+
260
288
  if rendered.instance_variable_get("@__immunio_processed") then
261
289
  # Ignore buffers marked as __immunio_processed in render as these are full templates or partials
262
290
  return rendered
@@ -289,23 +317,23 @@ module Immunio
289
317
  rendering_stack.first.mark_and_defer_fragment_write(*args)
290
318
  end
291
319
 
292
- private
293
- # Stack of the templates currently being rendered.
294
- def self.rendering_stack
295
- Thread.current["immunio.rendering_stack"] ||= []
296
- end
320
+ # Stack of the templates currently being rendered.
321
+ def self.rendering_stack
322
+ Thread.current["immunio.rendering_stack"] ||= []
323
+ end
297
324
 
298
- def self.wrap_code(code, handler, options = {})
299
- case
300
- when handler == 'ActionView::Template::Handlers::ERB'
301
- modifier = options[:escape] ? '=' : '=='
302
- "<%#{modifier} #{code} %>"
303
- when handler == 'Haml::Plugin'
304
- modifier = options[:escape] ? '=' : '!='
305
- "#{modifier} #{code}"
306
- end
325
+ def self.wrap_code(code, handler, options = {})
326
+ case
327
+ when handler == 'ActionView::Template::Handlers::ERB'
328
+ modifier = options[:escape] ? '=' : '=='
329
+ "<%#{modifier} #{code} %>"
330
+ when handler == 'Haml::Plugin'
331
+ modifier = options[:escape] ? '=' : '!='
332
+ "#{modifier} #{code}"
307
333
  end
334
+ end
308
335
 
336
+ private
309
337
  def rendering_stack
310
338
  self.class.rendering_stack
311
339
  end
@@ -110,17 +110,20 @@ module Immunio
110
110
  Request.current = nil
111
111
  end
112
112
 
113
- def make_safe_meta(meta)
114
- # Some versions of rails, like 4.2.0, fail to JSONify some objects properly.
115
- safe_meta = {}
116
- meta.each do |key, value|
117
- if value.is_a?(Numeric) || value.is_a?(String) || value.is_a?(TrueClass) || value.is_a?(FalseClass)
118
- safe_meta[key] = value
119
- else
120
- safe_meta[key] = value.inspect
121
- end
113
+ # Some versions of rails, like 4.2.0, fail to make JSONifiable model
114
+ # instances because they have bugs where superfluous sub-objects of
115
+ # unserializable classes, like IO, are added. Filter non-array, non-hash,
116
+ # non-primitive values from data to be JSONified.
117
+ def make_safe_data(data)
118
+ if data.is_a?(Hash)
119
+ data.each_with_object({}) { |(key, value), obj| obj[key] = make_safe_data(value) }
120
+ elsif data.is_a?(Array)
121
+ data.map(&method(:make_safe_data))
122
+ elsif [Numeric, String, TrueClass, FalseClass].any? { |c| data.is_a? c }
123
+ data
124
+ else
125
+ data.inspect
122
126
  end
123
- safe_meta
124
127
  end
125
128
 
126
129
  # Run the `hook` and return a hash eg.: `{ "allow": true }`.
@@ -193,7 +196,7 @@ module Immunio
193
196
  timestamp: timestamp,
194
197
  plugin: plugin,
195
198
  hook: hook,
196
- meta: make_safe_meta(meta),
199
+ meta: make_safe_data(meta),
197
200
  vmcode_version: request.vm.code_version,
198
201
  vmdata_version: request.vm.data_version
199
202
  }
@@ -211,7 +214,7 @@ module Immunio
211
214
  timestamp: timestamp,
212
215
  plugin: plugin,
213
216
  hook: hook,
214
- meta: make_safe_meta(meta),
217
+ meta: make_safe_data(meta),
215
218
  vmcode_version: request.vm.code_version,
216
219
  vmdata_version: request.vm.data_version
217
220
 
@@ -1,5 +1,5 @@
1
1
  module Immunio
2
2
  AGENT_TYPE = "agent-ruby"
3
- VERSION = "1.0.13"
3
+ VERSION = "1.0.14"
4
4
  VM_VERSION = "2.2.0"
5
5
  end
data/lua-hooks/Makefile CHANGED
@@ -27,7 +27,9 @@ LUA_SRC = \
27
27
  lib/lexgraph.lua \
28
28
  lib/neturl.lua \
29
29
  lib/paths.lua \
30
+ lib/perf.lua \
30
31
  lib/permit.lua \
32
+ lib/real_ip.lua \
31
33
  lib/sanitize_sql.lua \
32
34
  lib/sanitize_command.lua \
33
35
  lib/semver.lua \
@@ -103,7 +105,7 @@ endif
103
105
  all: ${CLI} ${INIT_HOOK} ${HOOKS_TARBALL} ${HOOKS_SRCS_TARBALL}
104
106
 
105
107
  %.o: %.c
106
- MACOSX_DEPLOYMENT_TARGET="10.9" ${CC} ${CFLAGS} -c ${INCS} -o $@ $<
108
+ MACOSX_DEPLOYMENT_TARGET="10.8" ${CC} ${CFLAGS} -c ${INCS} -o $@ $<
107
109
 
108
110
  # There is a huge performance advantage compiling sha1.o with just -O
109
111
  # -O2 or -O3 *reduce* the speed of the algorithm 30%
@@ -123,7 +125,7 @@ ${LUAJIT_OUT}: ${LUAJIT_OBJ}
123
125
  cp $^ $@
124
126
 
125
127
  ${LUAJIT_OBJ}:
126
- cd ext/luajit && MACOSX_DEPLOYMENT_TARGET="10.9" make CROSS="${CROSS}" CC=cc HOST_CC=cc TARGET_SYS=${SYS} XCFLAGS="${LUAJIT_XCFLAGS}"
128
+ cd ext/luajit && MACOSX_DEPLOYMENT_TARGET="10.8" make CROSS="${CROSS}" CC=cc HOST_CC=cc TARGET_SYS=${SYS} XCFLAGS="${LUAJIT_XCFLAGS}"
127
129
 
128
130
  # Build lua executable for testing and compilation
129
131
  # Seperate compilation as we need the LUA_UNSAFE_MODE flag set...
data/lua-hooks/ext/all.c CHANGED
@@ -17,6 +17,11 @@
17
17
  #include "lua-snapshot/snapshot.c"
18
18
  #include "sha1/luasha1.c"
19
19
  #include "sha2/luasha256.c"
20
+ #include "perf/luacpu.c"
21
+ #include "perf/lualoadavg.c"
22
+ #include "perf/luameminfo.c"
23
+ #include "perf/luaoslib.c"
24
+
20
25
 
21
26
  static const luaL_Reg lj_lib_load[] = {
22
27
  // Default Lua modules
@@ -46,6 +51,10 @@ static const luaL_Reg lj_lib_load[] = {
46
51
  {"snapshot", luaopen_snapshot},
47
52
  {"sha1", luaopen_sha1},
48
53
  {"sha2", luaopen_sha256},
54
+ {"perf", luaopen_cpuload},
55
+ {"perf", luaopen_loadavg},
56
+ {"perf", luaopen_meminfo},
57
+ {"perf", luaopen_luaos},
49
58
 
50
59
  { NULL, NULL }
51
60
  };
@@ -0,0 +1,114 @@
1
+ #include <stdio.h>
2
+ #include <unistd.h>
3
+
4
+ #define LUA_LIB
5
+ #include "lua.h"
6
+ #include "lauxlib.h"
7
+
8
+ /* Show overall CPU utilization of the system
9
+ * This is a part of the post http://phoxis.org/2013/09/05/finding-overall-and-per-core-cpu-utilization
10
+ */
11
+
12
+ #define BUF_MAX 1024
13
+
14
+ int
15
+ read_fields (FILE *fp, unsigned long long int *fields) {
16
+ int retval;
17
+ char buffer[BUF_MAX];
18
+ if (!fgets (buffer, BUF_MAX, fp)) {
19
+ perror ("Error");
20
+ }
21
+ retval = sscanf (buffer, "cpu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu",
22
+ &fields[0],
23
+ &fields[1],
24
+ &fields[2],
25
+ &fields[3],
26
+ &fields[4],
27
+ &fields[5],
28
+ &fields[6],
29
+ &fields[7],
30
+ &fields[8],
31
+ &fields[9]);
32
+ if (retval < 4) {
33
+ fprintf (stderr, "Error reading /proc/stat cpu field\n");
34
+ return 0;
35
+ }
36
+ return 1;
37
+ }
38
+
39
+ /* Immunio Lua bindings */
40
+
41
+ static int
42
+ lua_cpuload(lua_State *L) {
43
+ FILE *fp;
44
+ unsigned long long int fields[10], total_tick, total_tick_old, idle, idle_old, del_total_tick, del_idle;
45
+ int i;
46
+ double percent_usage;
47
+ char str[100];
48
+
49
+ fp = fopen ("/proc/stat", "r");
50
+ if (fp == NULL) {
51
+ perror ("Error");
52
+ }
53
+
54
+ if (!read_fields (fp, fields)) {
55
+ return 0;
56
+ }
57
+
58
+ for (i=0, total_tick = 0; i<10; i++) {
59
+ total_tick += fields[i];
60
+ }
61
+ idle = fields[3]; /* idle ticks index */
62
+ sleep (1);
63
+ total_tick_old = total_tick;
64
+ idle_old = idle;
65
+ fseek (fp, 0, SEEK_SET);
66
+ fflush (fp);
67
+ if (!read_fields (fp, fields)) {
68
+ return 0;
69
+ }
70
+
71
+ for (i=0, total_tick = 0; i<10; i++) {
72
+ total_tick += fields[i];
73
+ }
74
+ idle = fields[3];
75
+
76
+ del_total_tick = total_tick - total_tick_old;
77
+ del_idle = idle - idle_old;
78
+
79
+ percent_usage = ((del_total_tick - del_idle) / (double) del_total_tick) * 100; /* 3 is index of idle time */
80
+ sprintf(str,"%f",percent_usage);
81
+ lua_pushstring(L, str);
82
+ fclose(fp);
83
+ return 1;
84
+ }
85
+
86
+ static int
87
+ lua_stat(lua_State *L) {
88
+ FILE *fp;
89
+ char buf[3000];
90
+ if ((fp=fopen("/proc/stat","r"))==NULL) {
91
+ printf("Error! opening file");
92
+ }
93
+ else {
94
+ fread(buf, 1, 3000, fp);
95
+ size_t fsize = ftell(fp);
96
+ buf[fsize] = '\0';
97
+ lua_pushstring(L, buf);
98
+ }
99
+ fclose(fp);
100
+ return 1;
101
+ }
102
+
103
+ static const luaL_Reg libcpuload[] = {
104
+ {"cpuload", lua_cpuload},
105
+ {"stat", lua_stat},
106
+ {NULL, NULL}
107
+ };
108
+
109
+ int
110
+ luaopen_cpuload(lua_State *L) {
111
+ luaL_checkversion(L);
112
+ luaL_register(L, "perf", libcpuload);
113
+ return 1;
114
+ }
@@ -0,0 +1,40 @@
1
+ #include <stdio.h>
2
+ #include <stdlib.h>
3
+
4
+ #define LUA_LIB
5
+ #include "lua.h"
6
+ #include "lauxlib.h"
7
+
8
+
9
+ /*https://www.centos.org/docs/5/html/5.1/Deployment_Guide/s2-proc-loadavg.html
10
+ Gives load average in regard to both the CPU and IO over time, as well as additional
11
+ data used by uptime and other commands.
12
+ */
13
+
14
+ /* Immunio Lua bindings */
15
+
16
+ static int
17
+ lua_loadavg(lua_State *L) {
18
+ char c[100];
19
+ FILE *fp;
20
+ if ((fp=fopen("/proc/loadavg","r"))==NULL) {
21
+ printf("Error! opening file");
22
+ }
23
+ if (fgets(c, 100, fp) != NULL) {
24
+ lua_pushstring(L, c);
25
+ }
26
+ fclose(fp);
27
+ return 1;
28
+ }
29
+
30
+ static const luaL_Reg libloadavg[] = {
31
+ {"loadavg", lua_loadavg},
32
+ {NULL, NULL}
33
+ };
34
+
35
+ int
36
+ luaopen_loadavg(lua_State *L) {
37
+ luaL_checkversion(L);
38
+ luaL_register(L, "perf", libloadavg);
39
+ return 1;
40
+ }
@@ -0,0 +1,38 @@
1
+ #include <stdio.h>
2
+
3
+ #define LUA_LIB
4
+ #include "lua.h"
5
+ #include "lauxlib.h"
6
+
7
+ /*https://www.centos.org/docs/5/html/5.1/Deployment_Guide/s2-proc-meminfo.html
8
+ Gives information about RAM*/
9
+ /* Immunio Lua bindings */
10
+
11
+ static int
12
+ lua_meminfo(lua_State *L) {
13
+ FILE *fp;
14
+ char buf[2000];
15
+ if ((fp=fopen("/proc/meminfo","r"))==NULL) {
16
+ printf("Error! opening file");
17
+ }
18
+ else {
19
+ fread(buf, 1, 2000, fp);
20
+ size_t fsize = ftell(fp);
21
+ buf[fsize] = '\0';
22
+ lua_pushstring(L,buf);
23
+ }
24
+ fclose(fp);
25
+ return 1;
26
+ }
27
+
28
+ static const luaL_Reg libmeminfo[] = {
29
+ {"meminfo", lua_meminfo},
30
+ {NULL, NULL}
31
+ };
32
+
33
+ int
34
+ luaopen_meminfo(lua_State *L) {
35
+ luaL_checkversion(L);
36
+ luaL_register(L, "perf", libmeminfo);
37
+ return 1;
38
+ }
@@ -0,0 +1,80 @@
1
+ #include <time.h>
2
+
3
+ #define lib_os_c
4
+ #define LUA_LIB
5
+
6
+ #include "lua.h"
7
+ #include "lauxlib.h"
8
+ #include "lj_err.h"
9
+
10
+ static int os_clock(lua_State *L) {
11
+ setnumV(L->top++, ((lua_Number)clock())*(1.0/(lua_Number)CLOCKS_PER_SEC));
12
+ return 1;
13
+ }
14
+
15
+ static int getboolfield(lua_State *L, const char *key) {
16
+ int res;
17
+ lua_getfield(L, -1, key);
18
+ res = lua_isnil(L, -1) ? -1 : lua_toboolean(L, -1);
19
+ lua_pop(L, 1);
20
+ return res;
21
+ }
22
+
23
+ static int getfield(lua_State *L, const char *key, int d) {
24
+ int res;
25
+ lua_getfield(L, -1, key);
26
+ if (lua_isnumber(L, -1)) {
27
+ res = (int)lua_tointeger(L, -1);
28
+ } else {
29
+ if (d < 0)
30
+ lj_err_callerv(L, LJ_ERR_OSDATEF, key);
31
+ res = d;
32
+ }
33
+ lua_pop(L, 1);
34
+ return res;
35
+ }
36
+
37
+ static int os_time(lua_State *L) {
38
+ time_t t;
39
+ if (lua_isnoneornil(L, 1)) { /* called without args? */
40
+ t = time(NULL); /* get current time */
41
+ } else {
42
+ struct tm ts;
43
+ luaL_checktype(L, 1, LUA_TTABLE);
44
+ lua_settop(L, 1); /* make sure table is at the top */
45
+ ts.tm_sec = getfield(L, "sec", 0);
46
+ ts.tm_min = getfield(L, "min", 0);
47
+ ts.tm_hour = getfield(L, "hour", 12);
48
+ ts.tm_mday = getfield(L, "day", -1);
49
+ ts.tm_mon = getfield(L, "month", -1) - 1;
50
+ ts.tm_year = getfield(L, "year", -1) - 1900;
51
+ ts.tm_isdst = getboolfield(L, "isdst");
52
+ t = mktime(&ts);
53
+ }
54
+ if (t == (time_t)(-1))
55
+ lua_pushnil(L);
56
+ else
57
+ lua_pushnumber(L, (lua_Number)t);
58
+ return 1;
59
+ }
60
+
61
+ static int os_difftime(lua_State *L) {
62
+ lua_pushnumber(L, difftime((time_t)(luaL_checknumber(L, 1)),
63
+ (time_t)(luaL_optnumber(L, 2, (lua_Number)0))));
64
+ return 1;
65
+ }
66
+
67
+ static const luaL_Reg libluaos[] = {
68
+ {"clock", os_clock},
69
+ {"time", os_time},
70
+ {"difftime", os_difftime},
71
+
72
+ {NULL, NULL}
73
+ };
74
+
75
+ int
76
+ luaopen_luaos(lua_State *L) {
77
+ luaL_checkversion(L);
78
+ luaL_register(L, "perf", libluaos);
79
+ return 1;
80
+ }
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: immunio
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.13
4
+ version: 1.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Immunio
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-17 00:00:00.000000000 Z
11
+ date: 2016-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3.2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: thor
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.14.6
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.14.6
41
41
  - !ruby/object:Gem::Dependency
@@ -56,56 +56,56 @@ dependencies:
56
56
  name: msgpack
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0.5'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0.5'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: faraday
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ~>
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0.8'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ~>
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0.8'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: faraday_middleware
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ~>
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0.9'
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - "~>"
94
+ - - ~>
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0.9'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: binding_of_caller
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
101
+ - - ~>
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0.7'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - "~>"
108
+ - - ~>
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0.7'
111
111
  description: |
@@ -124,9 +124,6 @@ extensions:
124
124
  - ext/immunio/Rakefile
125
125
  extra_rdoc_files: []
126
126
  files:
127
- - LICENSE
128
- - README.md
129
- - bin/immunio
130
127
  - ext/immunio/Rakefile
131
128
  - lib/immunio.rb
132
129
  - lib/immunio/agent.rb
@@ -415,11 +412,18 @@ files:
415
412
  - lua-hooks/ext/luautf8/README.md
416
413
  - lua-hooks/ext/luautf8/lutf8lib.c
417
414
  - lua-hooks/ext/luautf8/unidata.h
415
+ - lua-hooks/ext/perf/luacpu.c
416
+ - lua-hooks/ext/perf/lualoadavg.c
417
+ - lua-hooks/ext/perf/luameminfo.c
418
+ - lua-hooks/ext/perf/luaoslib.c
418
419
  - lua-hooks/ext/sha1/luasha1.c
419
420
  - lua-hooks/ext/sha1/sha1.c
420
421
  - lua-hooks/ext/sha2/luasha256.c
421
422
  - lua-hooks/ext/sha2/sha256.c
423
+ - README.md
424
+ - LICENSE
422
425
  - lua-hooks/lib/boot.lua
426
+ - bin/immunio
423
427
  homepage: http://immun.io/
424
428
  licenses:
425
429
  - Immunio
@@ -431,19 +435,18 @@ require_paths:
431
435
  - lib
432
436
  required_ruby_version: !ruby/object:Gem::Requirement
433
437
  requirements:
434
- - - ">="
438
+ - - '>='
435
439
  - !ruby/object:Gem::Version
436
440
  version: 1.9.3
437
441
  required_rubygems_version: !ruby/object:Gem::Requirement
438
442
  requirements:
439
- - - ">="
443
+ - - '>='
440
444
  - !ruby/object:Gem::Version
441
445
  version: '0'
442
446
  requirements: []
443
447
  rubyforge_project:
444
- rubygems_version: 2.4.5
448
+ rubygems_version: 2.0.14
445
449
  signing_key:
446
450
  specification_version: 4
447
451
  summary: Immunio Ruby agent
448
452
  test_files: []
449
- has_rdoc: