immunio 1.0.13 → 1.0.14

Sign up to get free protection for your applications and to get access to all the features.
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: