@contrast/agent 4.5.0 → 4.7.0
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.
- package/bin/VERSION +1 -1
- package/bin/linux/contrast-service +0 -0
- package/bin/mac/contrast-service +0 -0
- package/bin/windows/contrast-service.exe +0 -0
- package/lib/assess/membrane/source-membrane.js +4 -18
- package/lib/assess/policy/propagators.json +11 -21
- package/lib/assess/policy/rules.json +5 -0
- package/lib/assess/policy/signatures.json +15 -0
- package/lib/assess/propagators/dustjs/escape-html.js +22 -0
- package/lib/assess/propagators/dustjs/escape-js.js +22 -0
- package/lib/assess/propagators/encode-uri/encode-uri-component.js +22 -0
- package/lib/assess/propagators/encode-uri/encode-uri.js +22 -0
- package/lib/assess/propagators/index.js +0 -2
- package/lib/assess/propagators/joi/values.js +26 -11
- package/lib/assess/propagators/mustache/escape.js +22 -0
- package/lib/assess/propagators/path/common.js +155 -46
- package/lib/assess/propagators/path/join.js +5 -1
- package/lib/assess/propagators/path/normalize.js +1 -2
- package/lib/assess/propagators/path/resolve.js +11 -2
- package/lib/assess/propagators/template-escape.js +84 -0
- package/lib/assess/propagators/templates.js +2 -3
- package/lib/assess/sinks/dustjs-linkedin-xss.js +131 -0
- package/lib/core/arch-components/dynamodb.js +1 -2
- package/lib/core/arch-components/dynamodbv3.js +44 -0
- package/lib/core/arch-components/index.js +1 -0
- package/lib/core/arch-components/rethinkdb.js +53 -0
- package/lib/core/async-storage/hooks/bluebird.js +20 -0
- package/lib/core/config/options.js +2 -1
- package/lib/core/stacktrace.js +3 -4
- package/lib/feature-set.js +2 -1
- package/lib/hooks/frameworks/base.js +8 -2
- package/lib/hooks/frameworks/http.js +23 -16
- package/lib/hooks/frameworks/http2.js +73 -0
- package/lib/hooks/frameworks/index.js +8 -3
- package/lib/hooks/http.js +112 -128
- package/lib/hooks/patcher.js +69 -48
- package/lib/hooks/require.js +16 -22
- package/lib/instrumentation.js +0 -3
- package/lib/protect/rules/cmd-injection-command-backdoors/backdoor-detector.js +3 -3
- package/lib/protect/rules/signatures/reflected-xss/helpers/function-call.js +1 -1
- package/lib/protect/rules/xss/helpers/function-call.js +1 -1
- package/lib/util/clean-stack.js +1 -1
- package/lib/util/clean-string/brackets.js +3 -3
- package/lib/util/ip-analyzer.js +1 -1
- package/lib/util/some.js +27 -0
- package/lib/util/source-map.js +1 -1
- package/lib/util/xml-analyzer/external-entity-finder.js +1 -1
- package/package.json +14 -16
- package/lib/hooks/frameworks/https.js +0 -42
- package/node_modules/bindings/LICENSE.md +0 -22
- package/node_modules/bindings/README.md +0 -98
- package/node_modules/bindings/bindings.js +0 -221
- package/node_modules/bindings/package.json +0 -32
- package/node_modules/file-uri-to-path/.npmignore +0 -1
- package/node_modules/file-uri-to-path/.travis.yml +0 -30
- package/node_modules/file-uri-to-path/History.md +0 -21
- package/node_modules/file-uri-to-path/LICENSE +0 -20
- package/node_modules/file-uri-to-path/README.md +0 -74
- package/node_modules/file-uri-to-path/index.d.ts +0 -2
- package/node_modules/file-uri-to-path/index.js +0 -66
- package/node_modules/file-uri-to-path/package.json +0 -36
- package/node_modules/file-uri-to-path/test/test.js +0 -24
- package/node_modules/file-uri-to-path/test/tests.json +0 -13
- package/node_modules/glossy/LICENSE +0 -19
- package/node_modules/glossy/README.md +0 -129
- package/node_modules/glossy/index.js +0 -12
- package/node_modules/glossy/lib/glossy/parse.js +0 -520
- package/node_modules/glossy/lib/glossy/produce.js +0 -459
- package/node_modules/glossy/package.json +0 -47
- package/node_modules/glossy/test/decide.js +0 -7
- package/node_modules/glossy/test/decode_pri.js +0 -24
- package/node_modules/glossy/test/parse_3164.js +0 -104
- package/node_modules/glossy/test/parse_5424.js +0 -106
- package/node_modules/glossy/test/parse_5848.js +0 -40
- package/node_modules/glossy/test/parse_8601.js +0 -14
- package/node_modules/glossy/test/parse_rfc3339.js +0 -9
- package/node_modules/glossy/test/produce.js +0 -162
- package/node_modules/glossy/test/runner.js +0 -40
- package/node_modules/glossy/test/structure_data.js +0 -24
- package/node_modules/nan/CHANGELOG.md +0 -537
- package/node_modules/nan/LICENSE.md +0 -13
- package/node_modules/nan/README.md +0 -455
- package/node_modules/nan/doc/asyncworker.md +0 -146
- package/node_modules/nan/doc/buffers.md +0 -54
- package/node_modules/nan/doc/callback.md +0 -76
- package/node_modules/nan/doc/converters.md +0 -41
- package/node_modules/nan/doc/errors.md +0 -226
- package/node_modules/nan/doc/json.md +0 -62
- package/node_modules/nan/doc/maybe_types.md +0 -583
- package/node_modules/nan/doc/methods.md +0 -664
- package/node_modules/nan/doc/new.md +0 -147
- package/node_modules/nan/doc/node_misc.md +0 -123
- package/node_modules/nan/doc/object_wrappers.md +0 -263
- package/node_modules/nan/doc/persistent.md +0 -296
- package/node_modules/nan/doc/scopes.md +0 -73
- package/node_modules/nan/doc/script.md +0 -38
- package/node_modules/nan/doc/string_bytes.md +0 -62
- package/node_modules/nan/doc/v8_internals.md +0 -199
- package/node_modules/nan/doc/v8_misc.md +0 -85
- package/node_modules/nan/include_dirs.js +0 -1
- package/node_modules/nan/nan.h +0 -2898
- package/node_modules/nan/nan_callbacks.h +0 -88
- package/node_modules/nan/nan_callbacks_12_inl.h +0 -514
- package/node_modules/nan/nan_callbacks_pre_12_inl.h +0 -520
- package/node_modules/nan/nan_converters.h +0 -72
- package/node_modules/nan/nan_converters_43_inl.h +0 -68
- package/node_modules/nan/nan_converters_pre_43_inl.h +0 -42
- package/node_modules/nan/nan_define_own_property_helper.h +0 -29
- package/node_modules/nan/nan_implementation_12_inl.h +0 -430
- package/node_modules/nan/nan_implementation_pre_12_inl.h +0 -263
- package/node_modules/nan/nan_json.h +0 -166
- package/node_modules/nan/nan_maybe_43_inl.h +0 -356
- package/node_modules/nan/nan_maybe_pre_43_inl.h +0 -268
- package/node_modules/nan/nan_new.h +0 -340
- package/node_modules/nan/nan_object_wrap.h +0 -156
- package/node_modules/nan/nan_persistent_12_inl.h +0 -132
- package/node_modules/nan/nan_persistent_pre_12_inl.h +0 -242
- package/node_modules/nan/nan_private.h +0 -73
- package/node_modules/nan/nan_string_bytes.h +0 -305
- package/node_modules/nan/nan_typedarray_contents.h +0 -96
- package/node_modules/nan/nan_weak.h +0 -437
- package/node_modules/nan/package.json +0 -41
- package/node_modules/nan/tools/1to2.js +0 -412
- package/node_modules/nan/tools/README.md +0 -14
- package/node_modules/nan/tools/package.json +0 -19
- package/node_modules/unix-dgram/LICENSE +0 -13
- package/node_modules/unix-dgram/README.md +0 -107
- package/node_modules/unix-dgram/binding.gyp +0 -20
- package/node_modules/unix-dgram/build/Makefile +0 -324
- package/node_modules/unix-dgram/build/Release/.deps/Release/obj.target/unix_dgram/src/unix_dgram.o.d +0 -58
- package/node_modules/unix-dgram/build/Release/.deps/Release/obj.target/unix_dgram.node.d +0 -1
- package/node_modules/unix-dgram/build/Release/.deps/Release/unix_dgram.node.d +0 -1
- package/node_modules/unix-dgram/build/Release/obj.target/unix_dgram/src/unix_dgram.o +0 -0
- package/node_modules/unix-dgram/build/Release/obj.target/unix_dgram.node +0 -0
- package/node_modules/unix-dgram/build/Release/unix_dgram.node +0 -0
- package/node_modules/unix-dgram/build/binding.Makefile +0 -6
- package/node_modules/unix-dgram/build/config.gypi +0 -213
- package/node_modules/unix-dgram/build/unix_dgram.target.mk +0 -159
- package/node_modules/unix-dgram/lib/unix_dgram.js +0 -168
- package/node_modules/unix-dgram/package.json +0 -36
- package/node_modules/unix-dgram/src/unix_dgram.cc +0 -404
- package/node_modules/unix-dgram/src/win_dummy.cc +0 -7
- package/node_modules/unix-dgram/test/test-connect-callback.js +0 -68
- package/node_modules/unix-dgram/test/test-connect.js +0 -53
- package/node_modules/unix-dgram/test/test-dgram-unix.js +0 -58
- package/node_modules/unix-dgram/test/test-send-error.js +0 -26
- package/node_modules/winston-syslog/.eslintrc +0 -7
- package/node_modules/winston-syslog/.travis.yml +0 -14
- package/node_modules/winston-syslog/CHANGELOG.md +0 -9
- package/node_modules/winston-syslog/LICENSE +0 -20
- package/node_modules/winston-syslog/README.md +0 -135
- package/node_modules/winston-syslog/lib/utils.js +0 -26
- package/node_modules/winston-syslog/lib/winston-syslog.js +0 -385
- package/node_modules/winston-syslog/package.json +0 -56
- package/node_modules/winston-syslog/test/format-test.js +0 -122
- package/node_modules/winston-syslog/test/syslog-test.js +0 -95
- package/node_modules/winston-syslog/test/unix-connect-test.js +0 -133
|
@@ -1,459 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Glossy Producer - Generate valid syslog messages
|
|
3
|
-
*
|
|
4
|
-
* Copyright Squeeks <privacymyass@gmail.com>.
|
|
5
|
-
* This is free software licensed under the MIT License -
|
|
6
|
-
* see the LICENSE file that should be included with this package.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
/*
|
|
10
|
-
* These values replace the integers in message that define the facility.
|
|
11
|
-
*/
|
|
12
|
-
var FacilityIndex = {
|
|
13
|
-
'kern': 0, // kernel messages
|
|
14
|
-
'user': 1, // user-level messages
|
|
15
|
-
'mail': 2, // mail system
|
|
16
|
-
'daemon': 3, // system daemons
|
|
17
|
-
'auth': 4, // security/authorization messages
|
|
18
|
-
'syslog': 5, // messages generated internally by syslogd
|
|
19
|
-
'lpr': 6, // line printer subsystem
|
|
20
|
-
'news': 7, // network news subsystem
|
|
21
|
-
'uucp': 8, // UUCP subsystem
|
|
22
|
-
'clock': 9, // clock daemon
|
|
23
|
-
'sec': 10, // security/authorization messages
|
|
24
|
-
'ftp': 11, // FTP daemon
|
|
25
|
-
'ntp': 12, // NTP subsystem
|
|
26
|
-
'audit': 13, // log audit
|
|
27
|
-
'alert': 14, // log alert
|
|
28
|
-
// 'clock': 15, // clock daemon (note 2)
|
|
29
|
-
'local0': 16, // local use 0 (local0)
|
|
30
|
-
'local1': 17, // local use 1 (local1)
|
|
31
|
-
'local2': 18, // local use 2 (local2)
|
|
32
|
-
'local3': 19, // local use 3 (local3)
|
|
33
|
-
'local4': 20, // local use 4 (local4)
|
|
34
|
-
'local5': 21, // local use 5 (local5)
|
|
35
|
-
'local6': 22, // local use 6 (local6)
|
|
36
|
-
'local7': 23 // local use 7 (local7)
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
// Note 1 - Various operating systems have been found to utilize
|
|
40
|
-
// Facilities 4, 10, 13 and 14 for security/authorization,
|
|
41
|
-
// audit, and alert messages which seem to be similar.
|
|
42
|
-
|
|
43
|
-
// Note 2 - Various operating systems have been found to utilize
|
|
44
|
-
// both Facilities 9 and 15 for clock (cron/at) messages.
|
|
45
|
-
|
|
46
|
-
/*
|
|
47
|
-
* These values replace the integers in message that define the severity.
|
|
48
|
-
*/
|
|
49
|
-
var SeverityIndex = {
|
|
50
|
-
'emerg': 0, // Emergency: system is unusable
|
|
51
|
-
'emergency': 0,
|
|
52
|
-
|
|
53
|
-
'alert': 1, // Alert: action must be taken immediately
|
|
54
|
-
|
|
55
|
-
'crit': 2, // Critical: critical conditions
|
|
56
|
-
'critical': 2,
|
|
57
|
-
|
|
58
|
-
'err': 3, // Error: error conditions
|
|
59
|
-
'error': 3,
|
|
60
|
-
|
|
61
|
-
'warn': 4, // Warning: warning conditions
|
|
62
|
-
'warning': 4,
|
|
63
|
-
|
|
64
|
-
'notice': 5, // Notice: normal but significant condition
|
|
65
|
-
|
|
66
|
-
'info': 6 , // Informational: informational messages
|
|
67
|
-
'information': 6,
|
|
68
|
-
'informational': 6,
|
|
69
|
-
|
|
70
|
-
'debug': 7 // Debug: debug-level messages
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
/*
|
|
75
|
-
* Defines the range matching BSD style months to integers.
|
|
76
|
-
*/
|
|
77
|
-
var BSDDateIndex = [
|
|
78
|
-
'Jan',
|
|
79
|
-
'Feb',
|
|
80
|
-
'Mar',
|
|
81
|
-
'Apr',
|
|
82
|
-
'May',
|
|
83
|
-
'Jun',
|
|
84
|
-
'Jul',
|
|
85
|
-
'Aug',
|
|
86
|
-
'Sep',
|
|
87
|
-
'Oct',
|
|
88
|
-
'Nov',
|
|
89
|
-
'Dec'
|
|
90
|
-
];
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
/*
|
|
94
|
-
* GlossyProducer class
|
|
95
|
-
* @param {Object} provides persistent details of all messages:
|
|
96
|
-
* facility: The facility index
|
|
97
|
-
* severity: Severity index
|
|
98
|
-
* host: Host address, either name or IP
|
|
99
|
-
* appName: Application/Process name
|
|
100
|
-
* pid: Process ID
|
|
101
|
-
* msgID: Message ID (RFC5424 only)
|
|
102
|
-
* type: RFC3164/RFC5424 message type
|
|
103
|
-
* @return {Object} GlossyProducer object
|
|
104
|
-
*/
|
|
105
|
-
var GlossyProducer = function(options) {
|
|
106
|
-
if(options && typeof options =='object' && options.type) {
|
|
107
|
-
this.type = options.type.match(/bsd|3164/i) ? "RFC3164" : "RFC5424";
|
|
108
|
-
} else if(options && typeof options == 'string') {
|
|
109
|
-
this.type = options.match(/bsd|3164/i) ? "RFC3164" : "RFC5424";
|
|
110
|
-
} else {
|
|
111
|
-
this.type = "RFC5424";
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
if(options && options.facility && FacilityIndex[options.facility]) {
|
|
115
|
-
this.facility = options.facility;
|
|
116
|
-
}
|
|
117
|
-
if(options && options.pid && parseInt(options.pid, 10)) {
|
|
118
|
-
this.pid = options.pid;
|
|
119
|
-
}
|
|
120
|
-
if(options && options.host) this.host = options.host.replace(/\s+/g, '');
|
|
121
|
-
if(options && options.appName) this.appName = options.appName.replace(/\s+/g, '');
|
|
122
|
-
if(options && options.msgID) this.msgID = options.msgID.replace(/\s+/g, '');
|
|
123
|
-
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
/*
|
|
128
|
-
* @param {Object} options object containing details of the message:
|
|
129
|
-
* facility: The facility index
|
|
130
|
-
* severity: Severity index
|
|
131
|
-
* prival: RFC5424 PRIVAL field - will override facility/severity if in valid [0-191] range and both provided
|
|
132
|
-
* see ABNF at: (http://tools.ietf.org/html/rfc5424#section-6)
|
|
133
|
-
* host: Host address, either name or IP
|
|
134
|
-
* appName: Application ID
|
|
135
|
-
* pid: Process ID
|
|
136
|
-
* date: Timestamp to be applied, uses current GMT by default
|
|
137
|
-
* time: Optional Date() argument may be used in lieu of 'date' - allows parse() output to be used for produce args
|
|
138
|
-
* msgID: Message ID (RFC5424 only)
|
|
139
|
-
* structuredData: Object of structured data (RFC5424 only)
|
|
140
|
-
* message: The message to be sent
|
|
141
|
-
*
|
|
142
|
-
* @param {Function} callback a callback run once the message is built
|
|
143
|
-
* @return {String} compiledMessage on completion, false on failure
|
|
144
|
-
*/
|
|
145
|
-
GlossyProducer.prototype.produce = function(options, callback) {
|
|
146
|
-
// TODO: next breaking api change make key output from parse() consistent with produce input options
|
|
147
|
-
if(options.time instanceof Date && !options.date) options.date = options.time;
|
|
148
|
-
|
|
149
|
-
var msgData = [];
|
|
150
|
-
if(!options.date instanceof Date) {
|
|
151
|
-
options.date = new Date(Date());
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
if(!options.facility) options.facility = this.facility;
|
|
155
|
-
|
|
156
|
-
if(this.type == 'RFC5424') {
|
|
157
|
-
if(options.hasOwnProperty('prival') && options.prival >= 0 && options.prival <= 191) {
|
|
158
|
-
var prival = '<' + options.prival + '>1';
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
var prival = calculatePrival({
|
|
162
|
-
facility: options.facility,
|
|
163
|
-
severity: options.severity,
|
|
164
|
-
version: 1
|
|
165
|
-
});
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
if(prival === false) return false;
|
|
169
|
-
|
|
170
|
-
msgData.push(prival);
|
|
171
|
-
msgData.push(generateDate(options.date));
|
|
172
|
-
|
|
173
|
-
msgData.push(options.host || this.host || '-');
|
|
174
|
-
msgData.push(options.appName || this.appName || '-');
|
|
175
|
-
msgData.push(options.pid || this.pid || '-');
|
|
176
|
-
msgData.push(options.msgID || this.msgID || '-');
|
|
177
|
-
if(options.structuredData) {
|
|
178
|
-
msgData.push(generateStructuredData(options.structuredData) || '-');
|
|
179
|
-
} else {
|
|
180
|
-
msgData.push('-');
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
if(!options.message) options.message = '-';
|
|
184
|
-
|
|
185
|
-
} else {
|
|
186
|
-
options.timestamp = generateBSDDate(options.date);
|
|
187
|
-
msgData.push(
|
|
188
|
-
calculatePrival({
|
|
189
|
-
facility: options.facility,
|
|
190
|
-
severity: options.severity
|
|
191
|
-
}) + options.timestamp
|
|
192
|
-
);
|
|
193
|
-
|
|
194
|
-
msgData.push(options.host || this.host);
|
|
195
|
-
msgData.push();
|
|
196
|
-
if(options.appName || this.appName) {
|
|
197
|
-
var app = options.appName || this.appName;
|
|
198
|
-
var pid = options.pid || this.pid;
|
|
199
|
-
|
|
200
|
-
if(parseInt(pid, 10)) {
|
|
201
|
-
msgData.push(app + '[' + pid + ']:');
|
|
202
|
-
} else {
|
|
203
|
-
msgData.push(app + ':');
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
var compiledMessage = msgData.filter(function (messageElement) {
|
|
209
|
-
// Filter null/ undefined values
|
|
210
|
-
return messageElement;
|
|
211
|
-
}).map(function (messageElement) {
|
|
212
|
-
// Trim messages to remove successive whitespace
|
|
213
|
-
return String(messageElement).trim();
|
|
214
|
-
}).join(' ');
|
|
215
|
-
compiledMessage += ' ' + options.message || '';
|
|
216
|
-
msgData.push(compiledMessage);
|
|
217
|
-
|
|
218
|
-
if(callback) {
|
|
219
|
-
return callback(compiledMessage);
|
|
220
|
-
} else {
|
|
221
|
-
return compiledMessage;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
};
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
/*
|
|
228
|
-
* @param {Object} options object containing details of the message with
|
|
229
|
-
* the severity as 'debug'
|
|
230
|
-
* @param {Function} callback a callback run once the message is built
|
|
231
|
-
* @return {String} compiledMessage on completion, false on failure
|
|
232
|
-
*/
|
|
233
|
-
GlossyProducer.prototype.debug = function(options, callback) {
|
|
234
|
-
options.severity = 'debug';
|
|
235
|
-
return this.produce(options, callback);
|
|
236
|
-
};
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
/*
|
|
240
|
-
* @param {Object} options object containing details of the message with
|
|
241
|
-
* the severity as 'info'
|
|
242
|
-
* @param {Function} callback a callback run once the message is built
|
|
243
|
-
* @return {String} compiledMessage on completion, false on failure
|
|
244
|
-
*/
|
|
245
|
-
GlossyProducer.prototype.info = function(options, callback) {
|
|
246
|
-
options.severity = 'info';
|
|
247
|
-
return this.produce(options, callback);
|
|
248
|
-
};
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
/*
|
|
252
|
-
* @param {Object} options object containing details of the message with
|
|
253
|
-
* the severity as 'notice'
|
|
254
|
-
* @param {Function} callback a callback run once the message is built
|
|
255
|
-
* @return {String} compiledMessage on completion, false on failure
|
|
256
|
-
*/
|
|
257
|
-
GlossyProducer.prototype.notice = function(options, callback) {
|
|
258
|
-
options.severity = 'notice';
|
|
259
|
-
return this.produce(options, callback);
|
|
260
|
-
};
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
/*
|
|
264
|
-
* @param {Object} options object containing details of the message with
|
|
265
|
-
* the severity as 'warn'
|
|
266
|
-
* @param {Function} callback a callback run once the message is built
|
|
267
|
-
* @return {String} compiledMessage on completion, false on failure
|
|
268
|
-
*/
|
|
269
|
-
GlossyProducer.prototype.warn = function(options, callback) {
|
|
270
|
-
options.severity = 'warn';
|
|
271
|
-
return this.produce(options, callback);
|
|
272
|
-
};
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
/*
|
|
276
|
-
* @param {Object} options object containing details of the message with
|
|
277
|
-
* the severity as 'crit'
|
|
278
|
-
* @param {Function} callback a callback run once the message is built
|
|
279
|
-
* @return {String} compiledMessage on completion, false on failure
|
|
280
|
-
*/
|
|
281
|
-
GlossyProducer.prototype.crit = function(options, callback) {
|
|
282
|
-
options.severity = 'crit';
|
|
283
|
-
return this.produce(options, callback);
|
|
284
|
-
};
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
/*
|
|
288
|
-
* @param {Object} options object containing details of the message with
|
|
289
|
-
* the severity as 'alert'
|
|
290
|
-
* @param {Function} callback a callback run once the message is built
|
|
291
|
-
* @return {String} compiledMessage on completion, false on failure
|
|
292
|
-
*/
|
|
293
|
-
GlossyProducer.prototype.alert = function(options, callback) {
|
|
294
|
-
options.severity = 'alert';
|
|
295
|
-
return this.produce(options, callback);
|
|
296
|
-
};
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
/*
|
|
300
|
-
* @param {Object} options object containing details of the message with
|
|
301
|
-
* the severity as 'emergency'
|
|
302
|
-
* @param {Function} callback a callback run once the message is built
|
|
303
|
-
* @return {String} compiledMessage on completion, false on failure
|
|
304
|
-
*/
|
|
305
|
-
GlossyProducer.prototype.emergency = function(options, callback) {
|
|
306
|
-
options.severity = 'emergency';
|
|
307
|
-
return this.produce(options, callback);
|
|
308
|
-
};
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
/*
|
|
312
|
-
* Prepend a zero to a number less than 10
|
|
313
|
-
* @param {Number} n
|
|
314
|
-
* @return {String}
|
|
315
|
-
*
|
|
316
|
-
* Where's sprintf when you need it?
|
|
317
|
-
*/
|
|
318
|
-
function leadZero(n) {
|
|
319
|
-
if(typeof n != 'number') return n;
|
|
320
|
-
n = n < 10 ? '0' + n : n ;
|
|
321
|
-
return n;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
/*
|
|
326
|
-
* Get current date in RFC 3164 format. If no date is supplied, the default
|
|
327
|
-
* is the current time in GMT + 0.
|
|
328
|
-
* @param {Date} dateObject optional Date object
|
|
329
|
-
* @returns {String}
|
|
330
|
-
*
|
|
331
|
-
* Features code taken from https://github.com/akaspin/ain
|
|
332
|
-
*/
|
|
333
|
-
function generateBSDDate(dateObject) {
|
|
334
|
-
if(!(dateObject instanceof Date)) dateObject = new Date(Date());
|
|
335
|
-
var hours = leadZero(dateObject.getHours());
|
|
336
|
-
var minutes = leadZero(dateObject.getMinutes());
|
|
337
|
-
var seconds = leadZero(dateObject.getSeconds());
|
|
338
|
-
var month = dateObject.getMonth();
|
|
339
|
-
var day = dateObject.getDate();
|
|
340
|
-
if(day < 10) (day = ' ' + day);
|
|
341
|
-
return BSDDateIndex[month] + " " + day + " " + hours + ":" + minutes + ":" + seconds;
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
/*
|
|
346
|
-
* Generate date in RFC 3339 format. If no date is supplied, the default is
|
|
347
|
-
* the current time in GMT + 0.
|
|
348
|
-
* @param {Date} dateObject optional Date object
|
|
349
|
-
* @returns {String} formatted date
|
|
350
|
-
*/
|
|
351
|
-
function generateDate(dateObject) {
|
|
352
|
-
if(!(dateObject instanceof Date)) dateObject = new Date(Date());
|
|
353
|
-
|
|
354
|
-
// Calcutate the offset
|
|
355
|
-
var timeOffset;
|
|
356
|
-
var minutes = Math.abs(dateObject.getTimezoneOffset());
|
|
357
|
-
var hours = 0;
|
|
358
|
-
while(minutes >= 60) {
|
|
359
|
-
hours++;
|
|
360
|
-
minutes -= 60;
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
if(dateObject.getTimezoneOffset() < 0) {
|
|
364
|
-
// Ahead of UTC
|
|
365
|
-
timeOffset = '+' + leadZero(hours) + '' + ':' + leadZero(minutes);
|
|
366
|
-
} else if(dateObject.getTimezoneOffset() > 0) {
|
|
367
|
-
// Behind UTC
|
|
368
|
-
timeOffset = '-' + leadZero(hours) + '' + ':' + leadZero(minutes);
|
|
369
|
-
} else {
|
|
370
|
-
// UTC
|
|
371
|
-
timeOffset = 'Z';
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
// Date
|
|
376
|
-
formattedDate = dateObject.getUTCFullYear() + '-' +
|
|
377
|
-
// N.B. Javascript Date objects return months of the year indexed from
|
|
378
|
-
// zero, while the RFC 5424 syslog standard expects months indexed from
|
|
379
|
-
// one.
|
|
380
|
-
leadZero(dateObject.getUTCMonth() + 1) + '-' +
|
|
381
|
-
// N.B. Javascript Date objects return days of the month indexed from one
|
|
382
|
-
// (unlike months of year), so this does not need any correction.
|
|
383
|
-
leadZero(dateObject.getUTCDate()) + 'T' +
|
|
384
|
-
// Time
|
|
385
|
-
leadZero(dateObject.getUTCHours()) + ':' +
|
|
386
|
-
leadZero(dateObject.getUTCMinutes()) + ':' +
|
|
387
|
-
leadZero(dateObject.getUTCSeconds()) + '.' +
|
|
388
|
-
leadZero(dateObject.getUTCMilliseconds()) +
|
|
389
|
-
timeOffset;
|
|
390
|
-
|
|
391
|
-
return formattedDate;
|
|
392
|
-
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
/*
|
|
397
|
-
* Calculate the PRIVAL for a given facility
|
|
398
|
-
* @param {Object} values Contains the three key arguments
|
|
399
|
-
* facility {Number}/{String} the Facility Index
|
|
400
|
-
* severity {Number}
|
|
401
|
-
* version {Number} For RFC 5424 messages, this should be 1
|
|
402
|
-
*
|
|
403
|
-
* @return {String}
|
|
404
|
-
*/
|
|
405
|
-
function calculatePrival(values) {
|
|
406
|
-
|
|
407
|
-
var pri = {};
|
|
408
|
-
// Facility
|
|
409
|
-
if(typeof values.facility == 'string' && !values.facility.match(/^\d+$/)) {
|
|
410
|
-
pri.facility = FacilityIndex[values.facility.toLowerCase()];
|
|
411
|
-
} else if( parseInt(values.facility, 10) && parseInt(values.facility, 10) < 24) {
|
|
412
|
-
pri.facility = parseInt(values.facility, 10);
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
//Severity
|
|
416
|
-
if(typeof values.severity == 'string' && !values.severity.match(/^\d+$/)) {
|
|
417
|
-
pri.severity = SeverityIndex[values.severity.toLowerCase()];
|
|
418
|
-
} else if( parseInt(values.severity, 10) && parseInt(values.severity, 10) < 8) {
|
|
419
|
-
pri.severity = parseInt(values.severity, 10);
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
if(!isNaN(pri.severity) && !isNaN(pri.facility)) {
|
|
423
|
-
pri.prival = (pri.facility * 8) + pri.severity;
|
|
424
|
-
pri.str = values.version ? '<' + pri.prival + '>' + values.version : '<' + pri.prival + '>';
|
|
425
|
-
return pri.str;
|
|
426
|
-
} else {
|
|
427
|
-
return false;
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
/*
|
|
434
|
-
* Serialise objects into the structured data segment
|
|
435
|
-
* @param {Object} struct The object to serialise
|
|
436
|
-
* @return {String} structuredData the serialised data
|
|
437
|
-
*/
|
|
438
|
-
function generateStructuredData(struct) {
|
|
439
|
-
if(typeof struct != 'object') return false;
|
|
440
|
-
|
|
441
|
-
var structuredData = '';
|
|
442
|
-
|
|
443
|
-
for(var sdID in struct) {
|
|
444
|
-
sdElement = struct[sdID];
|
|
445
|
-
structuredData += '[' + sdID;
|
|
446
|
-
for(var key in sdElement) {
|
|
447
|
-
sdElement[key] = sdElement[key].toString().replace(/(\]|\\|")/g, '\\$1');
|
|
448
|
-
structuredData += ' ' + key + '="' + sdElement[key] + '"';
|
|
449
|
-
}
|
|
450
|
-
structuredData += ']';
|
|
451
|
-
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
return structuredData;
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
if(typeof module == 'object') {
|
|
458
|
-
module.exports = GlossyProducer;
|
|
459
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name" : "glossy",
|
|
3
|
-
"version" : "0.1.7",
|
|
4
|
-
"description" : "Syslog parser and producer",
|
|
5
|
-
"keywords" : ["syslog", "logging"],
|
|
6
|
-
"url" : "http://github.com/squeeks/glossy",
|
|
7
|
-
"main" : "./index.js",
|
|
8
|
-
"author" : "Squeeks <privacymyass@gmail.com>",
|
|
9
|
-
"maintainers" : [
|
|
10
|
-
{ "name" : "Squeeks", "email" : "privacymyass@gmail.com" }
|
|
11
|
-
],
|
|
12
|
-
"contributors" : [
|
|
13
|
-
{ "name": "artifi", "email": "artifipl@gmail.com" },
|
|
14
|
-
{ "name": "Matt Bornski", "email": "matt@bornski.com" },
|
|
15
|
-
{ "name": "Fyodor Y", "email": "fygrave@o0o.nu" },
|
|
16
|
-
{ "name": "Stan Carney", "email": "stan.carney@rootsh.me" },
|
|
17
|
-
{ "name": "Alexander Metzner", "email": "alexander.metzner@thomann.de" },
|
|
18
|
-
{ "name": "zaphod1984", "email": "zaphod84@gmx.de" },
|
|
19
|
-
{ "name": "Eric Cornelius", "email": "eric.cornelius@mandiant.com" },
|
|
20
|
-
{ "name": "horpto", "email": "_singleton__@hackerdom.ru" }
|
|
21
|
-
],
|
|
22
|
-
"directories" : {
|
|
23
|
-
"lib": "./lib",
|
|
24
|
-
"test": "./test"
|
|
25
|
-
},
|
|
26
|
-
"scripts" : {
|
|
27
|
-
"test": "node test/runner.js"
|
|
28
|
-
},
|
|
29
|
-
"repository" : {
|
|
30
|
-
"type": "git",
|
|
31
|
-
"url": "http://github.com/squeeks/glossy.git"
|
|
32
|
-
},
|
|
33
|
-
"bugs" : {
|
|
34
|
-
"url": "http://github.com/squeeks/glossy/issues"
|
|
35
|
-
},
|
|
36
|
-
"licenses" : [
|
|
37
|
-
{
|
|
38
|
-
"type": "MIT",
|
|
39
|
-
"url": "http://www.opensource.org/licenses/MIT"
|
|
40
|
-
}
|
|
41
|
-
],
|
|
42
|
-
"engines" : { "node": ">= 0.2.5" }
|
|
43
|
-
|
|
44
|
-
,"_resolved": "https://registry.npmjs.org/glossy/-/glossy-0.1.7.tgz"
|
|
45
|
-
,"_integrity": "sha1-dptZhKlvYGarnqdYIkgl7mwhDws="
|
|
46
|
-
,"_from": "glossy@0.1.7"
|
|
47
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
var syslogParser = require('../lib/glossy/parse.js'),
|
|
2
|
-
assert = require('assert');
|
|
3
|
-
|
|
4
|
-
assert.ok(syslogParser, 'parser loaded');
|
|
5
|
-
assert.equal(syslogParser.decideValue(1), "1");
|
|
6
|
-
assert.equal(syslogParser.decideValue('-'), null);
|
|
7
|
-
assert.equal(syslogParser.decideValue('ー'), 'ー');
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
var syslogParser = require('../lib/glossy/parse.js'),
|
|
2
|
-
assert = require('assert');
|
|
3
|
-
|
|
4
|
-
assert.ok(syslogParser, 'parser loaded');
|
|
5
|
-
assert.deepEqual(syslogParser.decodePri('<16>'), {
|
|
6
|
-
prival: 16,
|
|
7
|
-
facilityID: 2,
|
|
8
|
-
severityID: 0,
|
|
9
|
-
facility: 'mail',
|
|
10
|
-
severity: 'emerg'
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
assert.deepEqual(syslogParser.decodePri('<66>1'), {
|
|
14
|
-
prival: 66,
|
|
15
|
-
facilityID: 8,
|
|
16
|
-
severityID: 2,
|
|
17
|
-
facility: 'uucp',
|
|
18
|
-
severity: 'crit'
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
assert.equal(syslogParser.decodePri('1<16>'), false);
|
|
23
|
-
assert.equal(syslogParser.decodePri('<200>'), false);
|
|
24
|
-
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
var syslogParser = require('../lib/glossy/parse.js'),
|
|
2
|
-
syslogGenerator = require('../lib/glossy/produce.js'),
|
|
3
|
-
assert = require('assert');
|
|
4
|
-
|
|
5
|
-
assert.ok(syslogParser, 'parser loaded');
|
|
6
|
-
|
|
7
|
-
var gen = new syslogGenerator({type: 'bsd'});
|
|
8
|
-
|
|
9
|
-
var doubleSpaced = "<13>Feb 5 17:32:18 10.0.0.99 Use the BFG!";
|
|
10
|
-
syslogParser.parse(doubleSpaced, function(parsedMessage){
|
|
11
|
-
var msg = gen.produce(parsedMessage);
|
|
12
|
-
assert.equal(doubleSpaced, msg);
|
|
13
|
-
|
|
14
|
-
var expectedData = {
|
|
15
|
-
originalMessage: doubleSpaced,
|
|
16
|
-
prival: 13,
|
|
17
|
-
facilityID: 1,
|
|
18
|
-
severityID: 5,
|
|
19
|
-
facility: 'user',
|
|
20
|
-
severity: 'notice',
|
|
21
|
-
type: 'RFC3164',
|
|
22
|
-
host: '10.0.0.99',
|
|
23
|
-
message: 'Use the BFG!' };
|
|
24
|
-
|
|
25
|
-
delete parsedMessage.date;
|
|
26
|
-
delete parsedMessage.time;
|
|
27
|
-
delete parsedMessage.timestamp;
|
|
28
|
-
|
|
29
|
-
assert.deepEqual(parsedMessage, expectedData);
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
var withCommand = "<34>Oct 11 22:14:15 mymachine su: 'su root' failed for lonvick on /dev/pts/8";
|
|
33
|
-
syslogParser.parse(withCommand, function(parsedMessage){
|
|
34
|
-
var expectedData = {
|
|
35
|
-
originalMessage: withCommand,
|
|
36
|
-
prival: 34,
|
|
37
|
-
facilityID: 4,
|
|
38
|
-
severityID: 2,
|
|
39
|
-
facility: 'auth',
|
|
40
|
-
severity: 'crit',
|
|
41
|
-
type: 'RFC3164',
|
|
42
|
-
host: 'mymachine',
|
|
43
|
-
message: "su: 'su root' failed for lonvick on /dev/pts/8" };
|
|
44
|
-
|
|
45
|
-
var parsedDate = parsedMessage.time;
|
|
46
|
-
delete parsedMessage.time;
|
|
47
|
-
|
|
48
|
-
assert.equal(parsedDate.getUTCMonth(), 9);
|
|
49
|
-
assert.equal(parsedDate.getUTCHours(), 20);
|
|
50
|
-
assert.deepEqual(parsedMessage, expectedData);
|
|
51
|
-
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
var withDifficultTime = "<191>94103: 51w2d: DHCPD: assigned IP address 10.10.1.94 to client 0100.01c4.21d3.b3";
|
|
55
|
-
syslogParser.parse(withDifficultTime, function(parsedMessage){
|
|
56
|
-
var expectedData = {
|
|
57
|
-
originalMessage: withDifficultTime,
|
|
58
|
-
prival: 191,
|
|
59
|
-
facilityID: 23,
|
|
60
|
-
severityID: 7,
|
|
61
|
-
facility: 'local7',
|
|
62
|
-
severity: 'debug',
|
|
63
|
-
type: 'RFC3164',
|
|
64
|
-
time: undefined,
|
|
65
|
-
message: '51w2d: DHCPD: assigned IP address 10.10.1.94 to client 0100.01c4.21d3.b3'};
|
|
66
|
-
|
|
67
|
-
assert.deepEqual(parsedMessage, expectedData);
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
var withYear = "<32>Mar 05 2011 22:21:02: %ASA-6-302013: Built inbound TCP connection 401 for outside:123.123.123.123/4413 (123.123.123.123/4413) to net:BOX/25 (BOX/25)";
|
|
71
|
-
syslogParser.parse(withYear, function(parsedMessage){
|
|
72
|
-
var expectedData = {
|
|
73
|
-
originalMessage: withYear,
|
|
74
|
-
prival: 32,
|
|
75
|
-
facilityID: 4,
|
|
76
|
-
severityID: 0,
|
|
77
|
-
facility: 'auth',
|
|
78
|
-
severity: 'emerg',
|
|
79
|
-
type: 'RFC3164',
|
|
80
|
-
time: undefined,
|
|
81
|
-
host: '22:21:02:',
|
|
82
|
-
message: '%ASA-6-302013: Built inbound TCP connection 401 for outside:123.123.123.123/4413 (123.123.123.123/4413) to net:BOX/25 (BOX/25)' };
|
|
83
|
-
|
|
84
|
-
assert.deepEqual(parsedMessage, expectedData);
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
var withSpaces = "<13>Mar 15 11:22:40 myhost.com 0 11,03/15/12,11:22:38,§ó·s,10.10.10.171,,40C6A91373B6,";
|
|
88
|
-
syslogParser.parse(withSpaces, function(parsedMessage){
|
|
89
|
-
var expectedData = {
|
|
90
|
-
originalMessage: withSpaces,
|
|
91
|
-
prival: 13,
|
|
92
|
-
facilityID: 1,
|
|
93
|
-
severityID: 5,
|
|
94
|
-
facility: 'user',
|
|
95
|
-
severity: 'notice',
|
|
96
|
-
type: 'RFC3164',
|
|
97
|
-
host: 'myhost.com',
|
|
98
|
-
message: ' 0 11,03/15/12,11:22:38,§ó·s,10.10.10.171,,40C6A91373B6,' };
|
|
99
|
-
|
|
100
|
-
delete parsedMessage.time;
|
|
101
|
-
assert.deepEqual(parsedMessage, expectedData);
|
|
102
|
-
|
|
103
|
-
});
|
|
104
|
-
|