| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- // Package krberror provides error type and functions for gokrb5.
- package krberror
- import (
- "fmt"
- "strings"
- )
- // Error type descriptions.
- const (
- separator = " < "
- EncodingError = "Encoding_Error"
- NetworkingError = "Networking_Error"
- DecryptingError = "Decrypting_Error"
- EncryptingError = "Encrypting_Error"
- ChksumError = "Checksum_Error"
- KRBMsgError = "KRBMessage_Handling_Error"
- ConfigError = "Configuration_Error"
- KDCError = "KDC_Error"
- )
- // Krberror is an error type for gokrb5
- type Krberror struct {
- RootCause string
- EText []string
- }
- // Error function to implement the error interface.
- func (e Krberror) Error() string {
- return fmt.Sprintf("[Root cause: %s] ", e.RootCause) + strings.Join(e.EText, separator)
- }
- // Add another error statement to the error.
- func (e *Krberror) Add(et string, s string) {
- e.EText = append([]string{fmt.Sprintf("%s: %s", et, s)}, e.EText...)
- }
- // New creates a new instance of Krberror.
- func New(et, s string) Krberror {
- return Krberror{
- RootCause: et,
- EText: []string{s},
- }
- }
- // Errorf appends to or creates a new Krberror.
- func Errorf(err error, et, format string, a ...interface{}) Krberror {
- if e, ok := err.(Krberror); ok {
- e.Add(et, fmt.Sprintf(format, a...))
- return e
- }
- return NewErrorf(et, format+": %s", append(a, err)...)
- }
- // NewErrorf creates a new Krberror from a formatted string.
- func NewErrorf(et, format string, a ...interface{}) Krberror {
- var s string
- if len(a) > 0 {
- s = fmt.Sprintf("%s: %s", et, fmt.Sprintf(format, a...))
- } else {
- s = fmt.Sprintf("%s: %s", et, format)
- }
- return Krberror{
- RootCause: et,
- EText: []string{s},
- }
- }
|