tedious 1.12.3 → 1.14.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.
Files changed (62) hide show
  1. package/README.md +1 -1
  2. package/appveyor.yml +9 -5
  3. package/benchmarks/README.md +33 -0
  4. package/benchmarks/common.js +82 -0
  5. package/benchmarks/index.js +34 -0
  6. package/benchmarks/query/many-result-rows.js +49 -0
  7. package/benchmarks/query/nvarchar-large.js +44 -0
  8. package/benchmarks/query/nvarchar-small.js +44 -0
  9. package/benchmarks/query/varbinary-4.js +42 -0
  10. package/benchmarks/query/varbinary-huge.js +46 -0
  11. package/benchmarks/query/varbinary-large.js +46 -0
  12. package/benchmarks/query/varbinary-small.js +42 -0
  13. package/benchmarks/token-parser/colmetadata-token.js +42 -0
  14. package/benchmarks/token-parser/done-token.js +42 -0
  15. package/benchmarks/token-parser/simple-tokens.js +366 -0
  16. package/lib/all-headers.js +9 -11
  17. package/lib/buffertools.js +17 -13
  18. package/lib/bulk-load.js +196 -169
  19. package/lib/collation.js +80 -2
  20. package/lib/connection.js +1086 -1060
  21. package/lib/data-type.js +450 -253
  22. package/lib/debug.js +57 -51
  23. package/lib/errors.js +40 -55
  24. package/lib/guid-parser.js +12 -36
  25. package/lib/instance-lookup.js +57 -54
  26. package/lib/library.js +3 -2
  27. package/lib/login7-payload.js +187 -180
  28. package/lib/message-io.js +169 -199
  29. package/lib/metadata-parser.js +169 -255
  30. package/lib/ntlm-payload.js +173 -160
  31. package/lib/packet.js +166 -152
  32. package/lib/prelogin-payload.js +170 -160
  33. package/lib/request.js +122 -122
  34. package/lib/rpcrequest-payload.js +64 -38
  35. package/lib/special-stored-procedure.js +3 -2
  36. package/lib/sqlbatch-payload.js +20 -16
  37. package/lib/stream-parser.js +116 -104
  38. package/lib/tds-versions.js +5 -8
  39. package/lib/tedious.js +8 -14
  40. package/lib/token/colmetadata-token-parser.js +79 -125
  41. package/lib/token/done-token-parser.js +47 -129
  42. package/lib/token/env-change-token-parser.js +90 -126
  43. package/lib/token/infoerror-token-parser.js +47 -125
  44. package/lib/token/loginack-token-parser.js +36 -74
  45. package/lib/token/nbcrow-token-parser.js +40 -64
  46. package/lib/token/order-token-parser.js +26 -43
  47. package/lib/token/returnstatus-token-parser.js +11 -23
  48. package/lib/token/returnvalue-token-parser.js +31 -54
  49. package/lib/token/row-token-parser.js +39 -52
  50. package/lib/token/sspi-token-parser.js +14 -32
  51. package/lib/token/stream-parser.js +424 -304
  52. package/lib/token/token-stream-parser.js +39 -34
  53. package/lib/token/token.js +3 -6
  54. package/lib/tracking-buffer/bigint.js +45 -48
  55. package/lib/tracking-buffer/readable-tracking-buffer.js +238 -223
  56. package/lib/tracking-buffer/tracking-buffer.js +3 -9
  57. package/lib/tracking-buffer/writable-tracking-buffer.js +272 -244
  58. package/lib/transaction.js +112 -102
  59. package/lib/value-parser.js +559 -1154
  60. package/package.json +10 -9
  61. package/benchmarks/benchmarks.coffee +0 -122
  62. package/benchmarks/query.coffee +0 -57
@@ -1,177 +1,190 @@
1
- // Generated by CoffeeScript 1.10.0
2
- var BigInteger, NTLMResponsePayload, WritableTrackingBuffer, crypto, hex;
1
+ 'use strict';
3
2
 
4
- BigInteger = require('big-number').n;
3
+ var _createClass = require('babel-runtime/helpers/create-class')['default'];
5
4
 
6
- crypto = require('crypto');
5
+ var _classCallCheck = require('babel-runtime/helpers/class-call-check')['default'];
7
6
 
8
- hex = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
7
+ var WritableTrackingBuffer = require('./tracking-buffer/writable-tracking-buffer');
8
+ var crypto = require('crypto');
9
+ var BigInteger = require('big-number').n;
9
10
 
10
- WritableTrackingBuffer = require('./tracking-buffer/writable-tracking-buffer');
11
+ var hex = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
11
12
 
12
- NTLMResponsePayload = (function () {
13
+ module.exports = (function () {
13
14
  function NTLMResponsePayload(loginData) {
15
+ _classCallCheck(this, NTLMResponsePayload);
16
+
14
17
  this.data = this.createResponse(loginData);
15
18
  }
16
19
 
17
- NTLMResponsePayload.prototype.toString = function (indent) {
18
- indent || (indent = '');
19
- return indent + 'NTLM Auth';
20
- };
21
-
22
- NTLMResponsePayload.prototype.createResponse = function (challenge) {
23
- var baseIdx, bufferLength, client_nonce, data, dnIdx, domain, genTime, l2Idx, lmv2Data, lmv2len, ntIdx, ntlmData, ntlmv2len, password, server_data, server_nonce, timestamp, unIdx, username;
24
- client_nonce = this.createClientNonce();
25
- lmv2len = 24;
26
- ntlmv2len = 16;
27
- domain = challenge.domain;
28
- username = challenge.userName;
29
- password = challenge.password;
30
- ntlmData = challenge.ntlmpacket;
31
- server_data = ntlmData.target;
32
- server_nonce = ntlmData.nonce;
33
- bufferLength = 64 + domain.length * 2 + username.length * 2 + lmv2len + ntlmv2len + 8 + 8 + 8 + 4 + server_data.length + 4;
34
- data = new WritableTrackingBuffer(bufferLength);
35
- data.position = 0;
36
- data.writeString('NTLMSSP\u0000', 'utf8');
37
- data.writeUInt32LE(0x03);
38
- baseIdx = 64;
39
- dnIdx = baseIdx;
40
- unIdx = dnIdx + domain.length * 2;
41
- l2Idx = unIdx + username.length * 2;
42
- ntIdx = l2Idx + lmv2len;
43
- data.writeUInt16LE(lmv2len);
44
- data.writeUInt16LE(lmv2len);
45
- data.writeUInt32LE(l2Idx);
46
- data.writeUInt16LE(ntlmv2len);
47
- data.writeUInt16LE(ntlmv2len);
48
- data.writeUInt32LE(ntIdx);
49
- data.writeUInt16LE(domain.length * 2);
50
- data.writeUInt16LE(domain.length * 2);
51
- data.writeUInt32LE(dnIdx);
52
- data.writeUInt16LE(username.length * 2);
53
- data.writeUInt16LE(username.length * 2);
54
- data.writeUInt32LE(unIdx);
55
- data.writeUInt16LE(0);
56
- data.writeUInt16LE(0);
57
- data.writeUInt32LE(baseIdx);
58
- data.writeUInt16LE(0);
59
- data.writeUInt16LE(0);
60
- data.writeUInt32LE(baseIdx);
61
- data.writeUInt16LE(0x8201);
62
- data.writeUInt16LE(0x08);
63
- data.writeString(domain, 'ucs2');
64
- data.writeString(username, 'ucs2');
65
- lmv2Data = this.lmv2Response(domain, username, password, server_nonce, client_nonce);
66
- data.copyFrom(lmv2Data);
67
- genTime = new Date().getTime();
68
- ntlmData = this.ntlmv2Response(domain, username, password, server_nonce, server_data, client_nonce, genTime);
69
- data.copyFrom(ntlmData);
70
- data.writeUInt32LE(0x0101);
71
- data.writeUInt32LE(0x0000);
72
- timestamp = this.createTimestamp(genTime);
73
- data.copyFrom(timestamp);
74
- data.copyFrom(client_nonce);
75
- data.writeUInt32LE(0x0000);
76
- data.copyFrom(server_data);
77
- data.writeUInt32LE(0x0000);
78
- return data.data;
79
- };
80
-
81
- NTLMResponsePayload.prototype.createClientNonce = function () {
82
- var client_nonce, nidx;
83
- client_nonce = new Buffer(8);
84
- nidx = 0;
85
- while (nidx < 8) {
86
- client_nonce.writeUInt8(Math.ceil(Math.random() * 255), nidx);
87
- nidx++;
20
+ _createClass(NTLMResponsePayload, [{
21
+ key: 'toString',
22
+ value: function toString(indent) {
23
+ indent || (indent = '');
24
+ return indent + 'NTLM Auth';
25
+ }
26
+ }, {
27
+ key: 'createResponse',
28
+ value: function createResponse(challenge) {
29
+ var client_nonce = this.createClientNonce();
30
+ var lmv2len = 24;
31
+ var ntlmv2len = 16;
32
+ var domain = challenge.domain;
33
+ var username = challenge.userName;
34
+ var password = challenge.password;
35
+ var ntlmData = challenge.ntlmpacket;
36
+ var server_data = ntlmData.target;
37
+ var server_nonce = ntlmData.nonce;
38
+ var bufferLength = 64 + domain.length * 2 + username.length * 2 + lmv2len + ntlmv2len + 8 + 8 + 8 + 4 + server_data.length + 4;
39
+ var data = new WritableTrackingBuffer(bufferLength);
40
+ data.position = 0;
41
+ data.writeString('NTLMSSP\u0000', 'utf8');
42
+ data.writeUInt32LE(0x03);
43
+ var baseIdx = 64;
44
+ var dnIdx = baseIdx;
45
+ var unIdx = dnIdx + domain.length * 2;
46
+ var l2Idx = unIdx + username.length * 2;
47
+ var ntIdx = l2Idx + lmv2len;
48
+ data.writeUInt16LE(lmv2len);
49
+ data.writeUInt16LE(lmv2len);
50
+ data.writeUInt32LE(l2Idx);
51
+ data.writeUInt16LE(ntlmv2len);
52
+ data.writeUInt16LE(ntlmv2len);
53
+ data.writeUInt32LE(ntIdx);
54
+ data.writeUInt16LE(domain.length * 2);
55
+ data.writeUInt16LE(domain.length * 2);
56
+ data.writeUInt32LE(dnIdx);
57
+ data.writeUInt16LE(username.length * 2);
58
+ data.writeUInt16LE(username.length * 2);
59
+ data.writeUInt32LE(unIdx);
60
+ data.writeUInt16LE(0);
61
+ data.writeUInt16LE(0);
62
+ data.writeUInt32LE(baseIdx);
63
+ data.writeUInt16LE(0);
64
+ data.writeUInt16LE(0);
65
+ data.writeUInt32LE(baseIdx);
66
+ data.writeUInt16LE(0x8201);
67
+ data.writeUInt16LE(0x08);
68
+ data.writeString(domain, 'ucs2');
69
+ data.writeString(username, 'ucs2');
70
+ var lmv2Data = this.lmv2Response(domain, username, password, server_nonce, client_nonce);
71
+ data.copyFrom(lmv2Data);
72
+ var genTime = new Date().getTime();
73
+ ntlmData = this.ntlmv2Response(domain, username, password, server_nonce, server_data, client_nonce, genTime);
74
+ data.copyFrom(ntlmData);
75
+ data.writeUInt32LE(0x0101);
76
+ data.writeUInt32LE(0x0000);
77
+ var timestamp = this.createTimestamp(genTime);
78
+ data.copyFrom(timestamp);
79
+ data.copyFrom(client_nonce);
80
+ data.writeUInt32LE(0x0000);
81
+ data.copyFrom(server_data);
82
+ data.writeUInt32LE(0x0000);
83
+ return data.data;
84
+ }
85
+ }, {
86
+ key: 'createClientNonce',
87
+ value: function createClientNonce() {
88
+ var client_nonce = new Buffer(8);
89
+ var nidx = 0;
90
+ while (nidx < 8) {
91
+ client_nonce.writeUInt8(Math.ceil(Math.random() * 255), nidx);
92
+ nidx++;
93
+ }
94
+ return client_nonce;
88
95
  }
89
- return client_nonce;
90
- };
91
-
92
- NTLMResponsePayload.prototype.ntlmv2Response = function (domain, user, password, serverNonce, targetInfo, clientNonce, mytime) {
93
- var data, dataLength, hash, timestamp;
94
- timestamp = this.createTimestamp(mytime);
95
- hash = this.ntv2Hash(domain, user, password);
96
- dataLength = 40 + targetInfo.length;
97
- data = new Buffer(dataLength);
98
- serverNonce.copy(data, 0, 0, 8);
99
- data.writeUInt32LE(0x101, 8);
100
- data.writeUInt32LE(0x0, 12);
101
- timestamp.copy(data, 16, 0, 8);
102
- clientNonce.copy(data, 24, 0, 8);
103
- data.writeUInt32LE(0x0, 32);
104
- targetInfo.copy(data, 36, 0, targetInfo.length);
105
- data.writeUInt32LE(0x0, 36 + targetInfo.length);
106
- return this.hmacMD5(data, hash);
107
- };
108
-
109
- NTLMResponsePayload.prototype.createTimestamp = function (time) {
110
- var hexArray, idx, pair, tenthsOfAMicrosecond;
111
- tenthsOfAMicrosecond = new BigInteger(time).plus(11644473600).multiply(10000000);
112
- hexArray = [];
113
- pair = [];
114
- while (tenthsOfAMicrosecond.val() !== '0') {
115
- idx = tenthsOfAMicrosecond.mod(16);
116
- pair.unshift(hex[idx]);
117
- if (pair.length === 2) {
118
- hexArray.push(pair.join(''));
119
- pair = [];
96
+ }, {
97
+ key: 'ntlmv2Response',
98
+ value: function ntlmv2Response(domain, user, password, serverNonce, targetInfo, clientNonce, mytime) {
99
+ var timestamp = this.createTimestamp(mytime);
100
+ var hash = this.ntv2Hash(domain, user, password);
101
+ var dataLength = 40 + targetInfo.length;
102
+ var data = new Buffer(dataLength);
103
+ serverNonce.copy(data, 0, 0, 8);
104
+ data.writeUInt32LE(0x101, 8);
105
+ data.writeUInt32LE(0x0, 12);
106
+ timestamp.copy(data, 16, 0, 8);
107
+ clientNonce.copy(data, 24, 0, 8);
108
+ data.writeUInt32LE(0x0, 32);
109
+ targetInfo.copy(data, 36, 0, targetInfo.length);
110
+ data.writeUInt32LE(0x0, 36 + targetInfo.length);
111
+ return this.hmacMD5(data, hash);
112
+ }
113
+ }, {
114
+ key: 'createTimestamp',
115
+ value: function createTimestamp(time) {
116
+ var tenthsOfAMicrosecond = new BigInteger(time).plus(11644473600).multiply(10000000);
117
+ var hexArray = [];
118
+
119
+ var pair = [];
120
+ while (tenthsOfAMicrosecond.val() !== '0') {
121
+ var idx = tenthsOfAMicrosecond.mod(16);
122
+ pair.unshift(hex[idx]);
123
+ if (pair.length === 2) {
124
+ hexArray.push(pair.join(''));
125
+ pair = [];
126
+ }
127
+ }
128
+
129
+ if (pair.length > 0) {
130
+ hexArray.push(pair[0] + '0');
120
131
  }
132
+
133
+ return new Buffer(hexArray.join(''), 'hex');
121
134
  }
122
- if (pair.length > 0) {
123
- hexArray.push(pair[0] + '0');
135
+ }, {
136
+ key: 'lmv2Response',
137
+ value: function lmv2Response(domain, user, password, serverNonce, clientNonce) {
138
+ var hash = this.ntv2Hash(domain, user, password);
139
+ var data = new Buffer(serverNonce.length + clientNonce.length);
140
+
141
+ serverNonce.copy(data);
142
+ clientNonce.copy(data, serverNonce.length, 0, clientNonce.length);
143
+
144
+ var newhash = this.hmacMD5(data, hash);
145
+ var response = new Buffer(newhash.length + clientNonce.length);
146
+
147
+ newhash.copy(response);
148
+ clientNonce.copy(response, newhash.length, 0, clientNonce.length);
149
+
150
+ return response;
124
151
  }
125
- return new Buffer(hexArray.join(''), 'hex');
126
- };
127
-
128
- NTLMResponsePayload.prototype.lmv2Response = function (domain, user, password, serverNonce, clientNonce) {
129
- var data, hash, newhash, response;
130
- hash = this.ntv2Hash(domain, user, password);
131
- data = new Buffer(serverNonce.length + clientNonce.length);
132
- serverNonce.copy(data);
133
- clientNonce.copy(data, serverNonce.length, 0, clientNonce.length);
134
- newhash = this.hmacMD5(data, hash);
135
- response = new Buffer(newhash.length + clientNonce.length);
136
- newhash.copy(response);
137
- clientNonce.copy(response, newhash.length, 0, clientNonce.length);
138
- return response;
139
- };
140
-
141
- NTLMResponsePayload.prototype.ntv2Hash = function (domain, user, password) {
142
- var hash, identity;
143
- hash = this.ntHash(password);
144
- identity = new Buffer(user.toUpperCase() + domain.toUpperCase(), 'ucs2');
145
- return this.hmacMD5(identity, hash);
146
- };
147
-
148
- NTLMResponsePayload.prototype.ntHash = function (text) {
149
- var hash, md4, unicodeString;
150
- hash = new Buffer(21);
151
- hash.fill(0);
152
- unicodeString = new Buffer(text, 'ucs2');
153
- md4 = crypto.createHash('md4').update(unicodeString).digest();
154
- if (md4.copy) {
155
- md4.copy(hash);
156
- } else {
157
- new Buffer(md4, 'ascii').copy(hash);
152
+ }, {
153
+ key: 'ntv2Hash',
154
+ value: function ntv2Hash(domain, user, password) {
155
+ var hash = this.ntHash(password);
156
+ var identity = new Buffer(user.toUpperCase() + domain.toUpperCase(), 'ucs2');
157
+ return this.hmacMD5(identity, hash);
158
158
  }
159
- return hash;
160
- };
161
-
162
- NTLMResponsePayload.prototype.hmacMD5 = function (data, key) {
163
- var hmac, result;
164
- hmac = crypto.createHmac('MD5', key);
165
- hmac.update(data);
166
- result = hmac.digest();
167
- if (result.copy) {
168
- return result;
169
- } else {
170
- return new Buffer(result, 'ascii').slice(0, 16);
159
+ }, {
160
+ key: 'ntHash',
161
+ value: function ntHash(text) {
162
+ var hash = new Buffer(21);
163
+ hash.fill(0);
164
+
165
+ var unicodeString = new Buffer(text, 'ucs2');
166
+ var md4 = crypto.createHash('md4').update(unicodeString).digest();
167
+ if (md4.copy) {
168
+ md4.copy(hash);
169
+ } else {
170
+ new Buffer(md4, 'ascii').copy(hash);
171
+ }
172
+ return hash;
173
+ }
174
+ }, {
175
+ key: 'hmacMD5',
176
+ value: function hmacMD5(data, key) {
177
+ var hmac = crypto.createHmac('MD5', key);
178
+ hmac.update(data);
179
+
180
+ var result = hmac.digest();
181
+ if (result.copy) {
182
+ return result;
183
+ } else {
184
+ return new Buffer(result, 'ascii').slice(0, 16);
185
+ }
171
186
  }
172
- };
187
+ }]);
173
188
 
174
189
  return NTLMResponsePayload;
175
- })();
176
-
177
- module.exports = NTLMResponsePayload;
190
+ })();