Skip to content

Commit 58fe97b

Browse files
committed
Reset NTLM auth state on every exit from replay loop
1 parent 36533b3 commit 58fe97b

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

lib/authorizer/ntlm.js

+15-10
Original file line numberDiff line numberDiff line change
@@ -157,13 +157,18 @@ module.exports = {
157157
challengeMessage, // type 2
158158
authenticateMessage, // type 3
159159
ntlmType2Header,
160-
parsedParameters;
160+
parsedParameters,
161161

162-
if (response.code !== 401 && response.code !== 403) {
163-
auth.set(STATE, STATES.INITIALIZED);
164-
auth.set(NTLM_HEADER, undefined);
162+
// resets the state and NTLM header and exits replay loop
163+
resetStateAndStop = function (err) {
164+
auth.set(STATE, STATES.INITIALIZED);
165+
auth.set(NTLM_HEADER, undefined);
165166

166-
return done(null, true);
167+
return done(err || null, true);
168+
};
169+
170+
if (response.code !== 401 && response.code !== 403) {
171+
return resetStateAndStop();
167172
}
168173

169174
// we try to extract domain from username if not specified.
@@ -178,7 +183,7 @@ module.exports = {
178183
// Nothing to do if the server does not ask us for auth in the first place.
179184
if (!(response.headers.has(WWW_AUTHENTICATE, NTLM) ||
180185
response.headers.has(WWW_AUTHENTICATE, NEGOTIATE))) {
181-
return done(null, true);
186+
return resetStateAndStop();
182187
}
183188

184189
// Create a type 1 message to send to the server
@@ -208,13 +213,13 @@ module.exports = {
208213
});
209214

210215
if (!ntlmType2Header) {
211-
return done(new Error('ntlm: server did not send NTLM type 2 message'));
216+
return resetStateAndStop(new Error('ntlm: server did not send NTLM type 2 message'));
212217
}
213218

214219
challengeMessage = ntlmUtil.parseType2Message(ntlmType2Header.valueOf(), _.noop);
215220

216221
if (!challengeMessage) {
217-
return done(new Error('ntlm: server did not correctly process authentication request'));
222+
return resetStateAndStop(new Error('ntlm: server did not correctly process authentication request'));
218223
}
219224

220225
authenticateMessage = ntlmUtil.createType3Message(challengeMessage, {
@@ -233,11 +238,11 @@ module.exports = {
233238
}
234239
else if (state === STATES.T3_MSG_CREATED) {
235240
// Means we have tried to authenticate, so we should stop here without worrying about anything
236-
return done(null, true);
241+
return resetStateAndStop();
237242
}
238243

239244
// We are in an undefined state
240-
return done(null, true);
245+
return resetStateAndStop();
241246
},
242247

243248
/**

0 commit comments

Comments
 (0)