Standardize Socks Outbound Authentication Behavior

This commit is contained in:
RPRX 2021-01-28 03:11:17 +00:00 committed by GitHub
parent c880b916ee
commit 303fd6e261
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -422,16 +422,6 @@ func ClientHandshake(request *protocol.RequestHeader, reader io.Reader, writer i
defer b.Release() defer b.Release()
common.Must2(b.Write([]byte{socks5Version, 0x01, authByte})) common.Must2(b.Write([]byte{socks5Version, 0x01, authByte}))
if authByte == authPassword {
account := request.User.Account.(*Account)
common.Must(b.WriteByte(0x01))
common.Must(b.WriteByte(byte(len(account.Username))))
common.Must2(b.WriteString(account.Username))
common.Must(b.WriteByte(byte(len(account.Password))))
common.Must2(b.WriteString(account.Password))
}
if err := buf.WriteAllBytes(writer, b.Bytes()); err != nil { if err := buf.WriteAllBytes(writer, b.Bytes()); err != nil {
return nil, err return nil, err
} }
@ -449,6 +439,17 @@ func ClientHandshake(request *protocol.RequestHeader, reader io.Reader, writer i
} }
if authByte == authPassword { if authByte == authPassword {
b.Clear()
account := request.User.Account.(*Account)
common.Must(b.WriteByte(0x01))
common.Must(b.WriteByte(byte(len(account.Username))))
common.Must2(b.WriteString(account.Username))
common.Must(b.WriteByte(byte(len(account.Password))))
common.Must2(b.WriteString(account.Password))
if err := buf.WriteAllBytes(writer, b.Bytes()); err != nil {
return nil, err
}
b.Clear() b.Clear()
if _, err := b.ReadFullFrom(reader, 2); err != nil { if _, err := b.ReadFullFrom(reader, 2); err != nil {
return nil, err return nil, err