mschapv2 working

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
Jens Langhammer
2025-05-24 15:21:45 +02:00
parent 67f627a925
commit 3027cdcc4b
4 changed files with 18 additions and 10 deletions

View File

@ -30,7 +30,10 @@ func (ctx *context) Log() *log.Entry { return ctx.log }
func (ctx *context) HandleInnerEAP(p protocol.Payload, st protocol.StateManager) (protocol.Payload, error) { func (ctx *context) HandleInnerEAP(p protocol.Payload, st protocol.StateManager) (protocol.Payload, error) {
return ctx.handleInner(p, st) return ctx.handleInner(p, st)
} }
func (ctx *context) Inner(p protocol.Payload, t protocol.Type) protocol.Context { func (ctx *context) Inner(p protocol.Payload, t protocol.Type, pmf func(p *radius.Packet) *radius.Packet) protocol.Context {
if ctx.endModifier == nil {
ctx.endModifier = pmf
}
return &context{ return &context{
req: ctx.req, req: ctx.req,
rootPayload: ctx.rootPayload, rootPayload: ctx.rootPayload,
@ -51,12 +54,9 @@ func (ctx *context) EndInnerProtocol(st protocol.Status, mf func(p *radius.Packe
return return
} }
ctx.endStatus = st ctx.endStatus = st
if mf == nil { if mf != nil {
mf = func(p *radius.Packet) *radius.Packet { ctx.endModifier = mf
return p
}
} }
ctx.endModifier = mf
} }
func (ctx *context) callEndModifier(p *radius.Packet) *radius.Packet { func (ctx *context) callEndModifier(p *radius.Packet) *radius.Packet {
@ -64,6 +64,7 @@ func (ctx *context) callEndModifier(p *radius.Packet) *radius.Packet {
p = ctx.parent.callEndModifier(p) p = ctx.parent.callEndModifier(p)
} }
if ctx.endModifier != nil { if ctx.endModifier != nil {
ctx.log.Debug("Running end modifier")
p = ctx.endModifier(p) p = ctx.endModifier(p)
} }
return p return p

View File

@ -106,7 +106,7 @@ func (p *Packet) handleEAP(pp protocol.Payload, stm protocol.StateManager, paren
var ctx *context var ctx *context
if parentContext != nil { if parentContext != nil {
ctx = parentContext.Inner(np, t).(*context) ctx = parentContext.Inner(np, t, nil).(*context)
} else { } else {
ctx = &context{ ctx = &context{
req: p.r, req: p.r,
@ -116,7 +116,7 @@ func (p *Packet) handleEAP(pp protocol.Payload, stm protocol.StateManager, paren
settings: stm.GetEAPSettings().ProtocolSettings[t], settings: stm.GetEAPSettings().ProtocolSettings[t],
} }
ctx.handleInner = func(pp protocol.Payload, sm protocol.StateManager) (protocol.Payload, error) { ctx.handleInner = func(pp protocol.Payload, sm protocol.StateManager) (protocol.Payload, error) {
return p.handleEAP(pp, sm, ctx.Inner(pp, pp.Type()).(*context)) return p.handleEAP(pp, sm, ctx.Inner(pp, pp.Type(), nil).(*context))
} }
} }
if !np.Offerable() { if !np.Offerable() {

View File

@ -25,7 +25,7 @@ type Context interface {
IsProtocolStart(p Type) bool IsProtocolStart(p Type) bool
HandleInnerEAP(Payload, StateManager) (Payload, error) HandleInnerEAP(Payload, StateManager) (Payload, error)
Inner(Payload, Type) Context Inner(Payload, Type, func(p *radius.Packet) *radius.Packet) Context
EndInnerProtocol(Status, func(p *radius.Packet) *radius.Packet) EndInnerProtocol(Status, func(p *radius.Packet) *radius.Packet)
Log() *log.Entry Log() *log.Entry

View File

@ -2,6 +2,8 @@ package tls
import ( import (
"goauthentik.io/internal/outpost/radius/eap/protocol" "goauthentik.io/internal/outpost/radius/eap/protocol"
"layeh.com/radius"
"layeh.com/radius/vendors/microsoft"
) )
func (p *Payload) innerHandler(ctx protocol.Context) { func (p *Payload) innerHandler(ctx protocol.Context) {
@ -23,7 +25,12 @@ func (p *Payload) innerHandler(ctx protocol.Context) {
ctx.EndInnerProtocol(protocol.StatusError, nil) ctx.EndInnerProtocol(protocol.StatusError, nil)
return return
} }
pl := p.Inner.Handle(ctx.Inner(p.Inner, p.Inner.Type())) pl := p.Inner.Handle(ctx.Inner(p.Inner, p.Inner.Type(), func(r *radius.Packet) *radius.Packet {
ctx.Log().Debug("TLS: Adding MPPE Keys")
microsoft.MSMPPERecvKey_Set(r, p.st.MPPEKey[:32])
microsoft.MSMPPESendKey_Set(r, p.st.MPPEKey[64:64+32])
return r
}))
enc, err := pl.Encode() enc, err := pl.Encode()
if err != nil { if err != nil {
ctx.Log().WithError(err).Warning("TLS: failed to encode inner protocol") ctx.Log().WithError(err).Warning("TLS: failed to encode inner protocol")