// Package kadmin provides Kerberos administration capabilities.
package kadmin import ( ) // ChangePasswdMsg generate a change password request and also return the key needed to decrypt the reply. func ( types.PrincipalName, , string, messages.Ticket, types.EncryptionKey) ( Request, types.EncryptionKey, error) { // Create change password data struct and marshal to bytes := ChangePasswdData{ NewPasswd: []byte(), TargName: , TargRealm: , } , := .Marshal() if != nil { = krberror.Errorf(, krberror.KRBMsgError, "error marshaling change passwd data") return } // Generate authenticator , := types.NewAuthenticator(, ) if != nil { = krberror.Errorf(, krberror.KRBMsgError, "error generating new authenticator") return } , := crypto.GetEtype(.KeyType) if != nil { = krberror.Errorf(, krberror.KRBMsgError, "error generating subkey etype") return } = .GenerateSeqNumberAndSubKey(.GetETypeID(), .GetKeyByteSize()) if != nil { = krberror.Errorf(, krberror.KRBMsgError, "error generating subkey") return } = .SubKey // Generate AP_REQ , := messages.NewAPReq(, , ) if != nil { return } // Form the KRBPriv encpart data := messages.EncKrbPrivPart{ UserData: , Timestamp: .CTime, Usec: .Cusec, SequenceNumber: .SeqNumber, } := messages.NewKRBPriv() = .EncryptEncPart() if != nil { = krberror.Errorf(, krberror.EncryptingError, "error encrypting change passwd data") return } = Request{ APREQ: , KRBPriv: , } return }