tag v0.155.0 Tagger: imagebuilder-bot <imagebuilder-bots+imagebuilder-bot@redhat.com> Changes with 0.155.0 ---------------- * Fedora 43: add shadow-utils when LockRoot is enabled, update cloud-init service name (osbuild/images#1618) * Author: Achilleas Koutsou, Reviewers: Gianluca Zuccarelli, Michael Vogt * Update osbuild dependency commit ID to latest (osbuild/images#1609) * Author: SchutzBot, Reviewers: Achilleas Koutsou, Simon de Vlieger, Tomáš Hozza * Update snapshots to 20250626 (osbuild/images#1623) * Author: SchutzBot, Reviewers: Achilleas Koutsou, Simon de Vlieger * distro/rhel9: xz compress azure-cvm image type [HMS-8587] (osbuild/images#1620) * Author: Achilleas Koutsou, Reviewers: Simon de Vlieger, Tomáš Hozza * distro/rhel: introduce new image type: Azure SAP Apps [HMS-8738] (osbuild/images#1612) * Author: Achilleas Koutsou, Reviewers: Simon de Vlieger, Tomáš Hozza * distro/rhel: move ansible-core to sap_extras_pkgset (osbuild/images#1624) * Author: Achilleas Koutsou, Reviewers: Brian C. Lane, Tomáš Hozza * github/create-tag: allow passing the version when run manually (osbuild/images#1621) * Author: Achilleas Koutsou, Reviewers: Lukáš Zapletal, Tomáš Hozza * rhel9: move image-config into pure YAML (HMS-8593) (osbuild/images#1616) * Author: Michael Vogt, Reviewers: Achilleas Koutsou, Simon de Vlieger * test: split manifest checksums into separate files (osbuild/images#1625) * Author: Achilleas Koutsou, Reviewers: Simon de Vlieger, Tomáš Hozza — Somewhere on the Internet, 2025-06-30 --- tag v0.156.0 Tagger: imagebuilder-bot <imagebuilder-bots+imagebuilder-bot@redhat.com> Changes with 0.156.0 ---------------- * Many: delete repositories for EOL distributions (HMS-7044) (osbuild/images#1607) * Author: Tomáš Hozza, Reviewers: Michael Vogt, Simon de Vlieger * RHSM/facts: add 'image-builder CLI' API type (osbuild/images#1640) * Author: Tomáš Hozza, Reviewers: Brian C. Lane, Simon de Vlieger * Update dependencies 2025-06-29 (osbuild/images#1628) * Author: SchutzBot, Reviewers: Simon de Vlieger, Tomáš Hozza * Update osbuild dependency commit ID to latest (osbuild/images#1627) * Author: SchutzBot, Reviewers: Simon de Vlieger, Tomáš Hozza * [RFC] image: drop `InstallWeakDeps` from image.DiskImage (osbuild/images#1642) * Author: Michael Vogt, Reviewers: Brian C. Lane, Simon de Vlieger, Tomáš Hozza * build(deps): bump the go-deps group across 1 directory with 3 updates (osbuild/images#1632) * Author: dependabot[bot], Reviewers: SchutzBot, Tomáš Hozza * distro/rhel10: xz compress azure-cvm image type (osbuild/images#1638) * Author: Achilleas Koutsou, Reviewers: Brian C. Lane, Simon de Vlieger * distro: cleanup/refactor distro/{defs,generic} (HMS-8744) (osbuild/images#1570) * Author: Michael Vogt, Reviewers: Simon de Vlieger, Tomáš Hozza * distro: remove some hardcoded values from generic/images.go (osbuild/images#1636) * Author: Michael Vogt, Reviewers: Simon de Vlieger, Tomáš Hozza * distro: small tweaks for the YAML based imagetypes (osbuild/images#1622) * Author: Michael Vogt, Reviewers: Brian C. Lane, Simon de Vlieger * fedora/wsl: packages and locale (osbuild/images#1635) * Author: Simon de Vlieger, Reviewers: Michael Vogt, Tomáš Hozza * image/many: make compression more generic (osbuild/images#1634) * Author: Simon de Vlieger, Reviewers: Brian C. Lane, Michael Vogt * manifest: handle content template name with spaces (osbuild/images#1641) * Author: Bryttanie, Reviewers: Brian C. Lane, Michael Vogt, Tomáš Hozza * many: implement gzip (osbuild/images#1633) * Author: Simon de Vlieger, Reviewers: Michael Vogt, Tomáš Hozza * rhel/azure: set GRUB_TERMINAL based on architecture [RHEL-91383] (osbuild/images#1626) * Author: Achilleas Koutsou, Reviewers: Simon de Vlieger, Tomáš Hozza — Somewhere on the Internet, 2025-07-07 ---
127 lines
3.4 KiB
Go
127 lines
3.4 KiB
Go
package spiffeid
|
|
|
|
import (
|
|
"net/url"
|
|
"strings"
|
|
)
|
|
|
|
// TrustDomain represents the trust domain portion of a SPIFFE ID (e.g.
|
|
// example.org).
|
|
type TrustDomain struct {
|
|
name string
|
|
}
|
|
|
|
// TrustDomainFromString returns a new TrustDomain from a string. The string
|
|
// can either be a trust domain name (e.g. example.org), or a valid SPIFFE ID
|
|
// URI (e.g. spiffe://example.org), otherwise an error is returned.
|
|
// See https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md#21-trust-domain.
|
|
func TrustDomainFromString(idOrName string) (TrustDomain, error) {
|
|
switch {
|
|
case idOrName == "":
|
|
return TrustDomain{}, errMissingTrustDomain
|
|
case strings.Contains(idOrName, ":/"):
|
|
// The ID looks like it has something like a scheme separator, let's
|
|
// try to parse as an ID. We use :/ instead of :// since the
|
|
// diagnostics are better for a bad input like spiffe:/trustdomain.
|
|
id, err := FromString(idOrName)
|
|
if err != nil {
|
|
return TrustDomain{}, err
|
|
}
|
|
return id.TrustDomain(), nil
|
|
default:
|
|
for i := 0; i < len(idOrName); i++ {
|
|
if !isValidTrustDomainChar(idOrName[i]) {
|
|
return TrustDomain{}, errBadTrustDomainChar
|
|
}
|
|
}
|
|
return TrustDomain{name: idOrName}, nil
|
|
}
|
|
}
|
|
|
|
// TrustDomainFromURI returns a new TrustDomain from a URI. The URI must be a
|
|
// valid SPIFFE ID (see FromURI) or an error is returned. The trust domain is
|
|
// extracted from the host field.
|
|
func TrustDomainFromURI(uri *url.URL) (TrustDomain, error) {
|
|
id, err := FromURI(uri)
|
|
if err != nil {
|
|
return TrustDomain{}, err
|
|
}
|
|
|
|
return id.TrustDomain(), nil
|
|
}
|
|
|
|
// Name returns the trust domain name as a string, e.g. example.org.
|
|
func (td TrustDomain) Name() string {
|
|
return td.name
|
|
}
|
|
|
|
// String returns the trust domain name as a string, e.g. example.org.
|
|
func (td TrustDomain) String() string {
|
|
return td.name
|
|
}
|
|
|
|
// ID returns the SPIFFE ID of the trust domain.
|
|
func (td TrustDomain) ID() ID {
|
|
if id, err := makeID(td, ""); err == nil {
|
|
return id
|
|
}
|
|
return ID{}
|
|
}
|
|
|
|
// IDString returns a string representation of the the SPIFFE ID of the trust
|
|
// domain, e.g. "spiffe://example.org".
|
|
func (td TrustDomain) IDString() string {
|
|
return td.ID().String()
|
|
}
|
|
|
|
// IsZero returns true if the trust domain is the zero value.
|
|
func (td TrustDomain) IsZero() bool {
|
|
return td.name == ""
|
|
}
|
|
|
|
// Compare returns an integer comparing the trust domain to another
|
|
// lexicographically. The result will be 0 if td==other, -1 if td < other, and
|
|
// +1 if td > other.
|
|
func (td TrustDomain) Compare(other TrustDomain) int {
|
|
return strings.Compare(td.name, other.name)
|
|
}
|
|
|
|
// MarshalText returns a text representation of the trust domain. If the trust
|
|
// domain is the zero value, nil is returned.
|
|
func (td TrustDomain) MarshalText() ([]byte, error) {
|
|
if td.IsZero() {
|
|
return nil, nil
|
|
}
|
|
return []byte(td.String()), nil
|
|
}
|
|
|
|
// UnmarshalText decodes a text representation of the trust domain. If the text
|
|
// is empty, the trust domain is set to the zero value.
|
|
func (td *TrustDomain) UnmarshalText(text []byte) error {
|
|
if len(text) == 0 {
|
|
*td = TrustDomain{}
|
|
return nil
|
|
}
|
|
|
|
unmarshaled, err := TrustDomainFromString(string(text))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
*td = unmarshaled
|
|
return nil
|
|
}
|
|
|
|
func isValidTrustDomainChar(c uint8) bool {
|
|
switch {
|
|
case c >= 'a' && c <= 'z':
|
|
return true
|
|
case c >= '0' && c <= '9':
|
|
return true
|
|
case c == '-', c == '.', c == '_':
|
|
return true
|
|
case isBackcompatTrustDomainChar(c):
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|