And that didn't work either. At least now I get the error from the server
saying that it didn't work. Any ideas, please :)
On Friday, February 8, 2013 12:18:45 PM UTC-6, Jeremy wrote:
>
> Please ignore my stupidity, I had a typo. Fixed and now working. But in
> case anyone wants to know, 2nd call didn't have port, host, path..
>
> var NTLMCall = function(options, callback){
> var host = options.host;
> var port = options.port;
> var user = options.user;
> var pass = options.pass;
> var domain = options.domain;
> var path = options.path||'/';
> var hostname = options.hostname||require('os').hostname();
>
> var head = function(options, callback){
> options.method = 'HEAD';
> var req = http.request(options, function(res){
> callback(null, res.headers);
> });
> req.end();
> };
>
> // Generate Type 1 to send to server in HTTP Request:
> var buf = ntlm.encodeType1(hostname, domain);
> // Should be capturing the connection here for re-use
> head({headers: {Authorization: 'NTLM ' + buf.toString('base64')}, host:
> host, port: port, path: '/'}, function(err, headers){
> var hdr = headers['www-authenticate'];
> var m = /^NTLM (.*)$/.exec(hdr);
> var inbuf = new Buffer(m[1], 'base64');
> // Extract Type 2 from HTTP Response header, and use it here:
> var serverNonce = ntlm.decodeType2(inbuf);
> // Generate Type 3 to send as authentication to server:
> var buf = ntlm.encodeType3(user, hostname, domain, serverNonce, pass);
> // Should be re-using the captured connection for this, it fails as is
> var req = http.request({headers: {Authorization: 'NTLM ' +
> buf.toString('base64')}, host: host, port: port, path: path}, function(res){
> var data = '';
> res.setEncoding('utf8');
> res.on('data', function (chunk){
> data += chunk;
> });
> res.on('end', function(){
> callback(null, data);
> });
> res.on('error', function(err){
> callback(err);
> });
> }).on('error', function(err){
> callback(err);
> });
> req.end();
> });
> };
>
> On Friday, February 8, 2013 11:58:41 AM UTC-6, Jeremy wrote:
>>
>> I've been working on using SMBHash (
>> https://github.com/jclulow/node-smbhash) to add NTLM authentication to a
>> client request as part of a project I am working on. Problem is that for
>> NTLM to work properly you have to make a head request to get the Type2
>> header then use the same connection with data you get back and make your
>> Type3 request to get the final response.
>>
>> The code shown on the GitHub page is suggestive, but doesn't work since
>> you can't do HTTP that way any more.
>>
>> So, I've tried what I can find but it seems I can't find any details on
>> how to re-use the connection object for all of my requests until done.
>>
>> The code I'm using requires you to download SMBHash has the author hasn't
>> published the current version to NPM, the current version is on GitHub. In
>> case someone wants to try running this code.
>>
>> Here is the code I'm using today, I've noted the two places I know I need
>> to make changes, but don't know what changes to make:
>>
>> var ntlm = require('smbhash').ntlm;
>>
>> var NTLMCall = function(options, callback){
>> var host = options.host;
>> var port = options.port;
>> var user = options.user;
>> var pass = options.pass;
>> var domain = options.domain;
>> var hostname = options.hostname||require('os').hostname();
>>
>> var head = function(options, callback){
>> options.method = 'HEAD';
>> var req = http.request(options, function(res){
>> callback(null, res.headers);
>> });
>> req.end();
>> };
>>
>> // Generate Type 1 to send to server in HTTP Request:
>> var buf = ntlm.encodeType1(hostname, domain);
>> // Should be capturing the connection here for re-use
>> head({headers: {Authorization: 'NTLM ' + buf.toString('base64')}, host:
>> host, port: port, path: '/'}, function(err, headers){
>> var hdr = headers['www-authenticate'];
>> var m = /^NTLM (.*)$/.exec(hdr);
>> var inbuf = new Buffer(m[1], 'base64');
>> // Extract Type 2 from HTTP Response header, and use it here:
>> var serverNonce = ntlm.decodeType2(inbuf);
>> // Generate Type 3 to send as authentication to server:
>> var buf = ntlm.encodeType3(user, hostname, domain, serverNonce, pass);
>> // Should be re-using the captured connection for this, it fails as is
>> var req = http.request({headers: {Authorization: 'NTLM ' +
>> buf.toString('base64')}}, function(res){
>> var data = '';
>> res.setEncoding('utf8');
>> res.on('data', function (chunk){
>> data += chunk;
>> });
>> res.on('end', function(){
>> callback(null, data);
>> });
>> res.on('error', function(err){
>> callback(err);
>> });
>> }).on('error', function(err){
>> callback(err);
>> });
>> req.end();
>> });
>> };
>>
>> To use:
>> NTLMCall({
>> host : servername,
>> port : serverport,
>> user : user,
>> pass : pass,
>> domain: domain
>> }, callback);
>>
>> Thanks,
>> - Jeremy
>>
>
--
--
Job Board: http://jobs.nodejs.org/
Posting guidelines:
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en
---
You received this message because you are subscribed to the Google Groups
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.