Pārlūkot izejas kodu

Merge pull request #476 from slingamn/doubleauth

disallow AUTHENTICATE when already auth'ed
tags/v1.1.0-rc1
Daniel Oaks 5 gadus atpakaļ
vecāks
revīzija
939729a7c0
Revīzijas autora e-pasta adrese nav piesaistīta nevienam kontam
1 mainītis faili ar 12 papildinājumiem un 6 dzēšanām
  1. 12
    6
      irc/handlers.go

+ 12
- 6
irc/handlers.go Parādīt failu

298
 
298
 
299
 // AUTHENTICATE [<mechanism>|<data>|*]
299
 // AUTHENTICATE [<mechanism>|<data>|*]
300
 func authenticateHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
300
 func authenticateHandler(server *Server, client *Client, msg ircmsg.IrcMessage, rb *ResponseBuffer) bool {
301
+	details := client.Details()
302
+	if details.account != "" {
303
+		rb.Add(nil, server.name, ERR_SASLALREADY, details.nick, client.t("You're already logged into an account"))
304
+		return false
305
+	}
306
+
301
 	// sasl abort
307
 	// sasl abort
302
 	if !server.AccountConfig().AuthenticationEnabled || len(msg.Params) == 1 && msg.Params[0] == "*" {
308
 	if !server.AccountConfig().AuthenticationEnabled || len(msg.Params) == 1 && msg.Params[0] == "*" {
303
-		rb.Add(nil, server.name, ERR_SASLABORTED, client.nick, client.t("SASL authentication aborted"))
309
+		rb.Add(nil, server.name, ERR_SASLABORTED, details.nick, client.t("SASL authentication aborted"))
304
 		client.saslInProgress = false
310
 		client.saslInProgress = false
305
 		client.saslMechanism = ""
311
 		client.saslMechanism = ""
306
 		client.saslValue = ""
312
 		client.saslValue = ""
317
 			client.saslMechanism = mechanism
323
 			client.saslMechanism = mechanism
318
 			rb.Add(nil, server.name, "AUTHENTICATE", "+")
324
 			rb.Add(nil, server.name, "AUTHENTICATE", "+")
319
 		} else {
325
 		} else {
320
-			rb.Add(nil, server.name, ERR_SASLFAIL, client.nick, client.t("SASL authentication failed"))
326
+			rb.Add(nil, server.name, ERR_SASLFAIL, details.nick, client.t("SASL authentication failed"))
321
 		}
327
 		}
322
 
328
 
323
 		return false
329
 		return false
327
 	rawData := msg.Params[0]
333
 	rawData := msg.Params[0]
328
 
334
 
329
 	if len(rawData) > 400 {
335
 	if len(rawData) > 400 {
330
-		rb.Add(nil, server.name, ERR_SASLTOOLONG, client.nick, client.t("SASL message too long"))
336
+		rb.Add(nil, server.name, ERR_SASLTOOLONG, details.nick, client.t("SASL message too long"))
331
 		client.saslInProgress = false
337
 		client.saslInProgress = false
332
 		client.saslMechanism = ""
338
 		client.saslMechanism = ""
333
 		client.saslValue = ""
339
 		client.saslValue = ""
336
 		client.saslValue += rawData
342
 		client.saslValue += rawData
337
 		// allow 4 'continuation' lines before rejecting for length
343
 		// allow 4 'continuation' lines before rejecting for length
338
 		if len(client.saslValue) > 400*4 {
344
 		if len(client.saslValue) > 400*4 {
339
-			rb.Add(nil, server.name, ERR_SASLFAIL, client.nick, client.t("SASL authentication failed: Passphrase too long"))
345
+			rb.Add(nil, server.name, ERR_SASLFAIL, details.nick, client.t("SASL authentication failed: Passphrase too long"))
340
 			client.saslInProgress = false
346
 			client.saslInProgress = false
341
 			client.saslMechanism = ""
347
 			client.saslMechanism = ""
342
 			client.saslValue = ""
348
 			client.saslValue = ""
353
 	if client.saslValue != "+" {
359
 	if client.saslValue != "+" {
354
 		data, err = base64.StdEncoding.DecodeString(client.saslValue)
360
 		data, err = base64.StdEncoding.DecodeString(client.saslValue)
355
 		if err != nil {
361
 		if err != nil {
356
-			rb.Add(nil, server.name, ERR_SASLFAIL, client.nick, client.t("SASL authentication failed: Invalid b64 encoding"))
362
+			rb.Add(nil, server.name, ERR_SASLFAIL, details.nick, client.t("SASL authentication failed: Invalid b64 encoding"))
357
 			client.saslInProgress = false
363
 			client.saslInProgress = false
358
 			client.saslMechanism = ""
364
 			client.saslMechanism = ""
359
 			client.saslValue = ""
365
 			client.saslValue = ""
366
 
372
 
367
 	// like 100% not required, but it's good to be safe I guess
373
 	// like 100% not required, but it's good to be safe I guess
368
 	if !handlerExists {
374
 	if !handlerExists {
369
-		rb.Add(nil, server.name, ERR_SASLFAIL, client.nick, client.t("SASL authentication failed"))
375
+		rb.Add(nil, server.name, ERR_SASLFAIL, details.nick, client.t("SASL authentication failed"))
370
 		client.saslInProgress = false
376
 		client.saslInProgress = false
371
 		client.saslMechanism = ""
377
 		client.saslMechanism = ""
372
 		client.saslValue = ""
378
 		client.saslValue = ""

Notiek ielāde…
Atcelt
Saglabāt