@@ -39,6 +39,7 @@ type GSSAPIConfig struct {
39
39
Password string
40
40
Realm string
41
41
DisablePAFXFAST bool
42
+ BuildSpn BuildSpnFunc
42
43
}
43
44
44
45
type GSSAPIKerberosAuth struct {
@@ -57,6 +58,8 @@ type KerberosClient interface {
57
58
Destroy ()
58
59
}
59
60
61
+ type BuildSpnFunc func (serviceName , host string ) string
62
+
60
63
// writePackage appends length in big endian before the payload, and sends it to kafka
61
64
func (krbAuth * GSSAPIKerberosAuth ) writePackage (broker * Broker , payload []byte ) (int , error ) {
62
65
length := uint64 (len (payload ))
@@ -211,10 +214,15 @@ func (krbAuth *GSSAPIKerberosAuth) Authorize(broker *Broker) error {
211
214
return err
212
215
}
213
216
// Construct SPN using serviceName and host
214
- // SPN format: <SERVICE>/<FQDN>
217
+ // default SPN format: <SERVICE>/<FQDN>
215
218
216
219
host := strings .SplitN (broker .addr , ":" , 2 )[0 ] // Strip port part
217
- spn := fmt .Sprintf ("%s/%s" , broker .conf .Net .SASL .GSSAPI .ServiceName , host )
220
+ var spn string
221
+ if krbAuth .Config .BuildSpn != nil {
222
+ spn = krbAuth .Config .BuildSpn (broker .conf .Net .SASL .GSSAPI .ServiceName , host )
223
+ } else {
224
+ spn = fmt .Sprintf ("%s/%s" , broker .conf .Net .SASL .GSSAPI .ServiceName , host )
225
+ }
218
226
219
227
ticket , encKey , err := kerberosClient .GetServiceTicket (spn )
220
228
if err != nil {
0 commit comments