pub struct PyKrb5PrincipalName { /* private fields */ }Expand description
RFC 4556 KRB5PrincipalName — Kerberos principal embedded in a PKINIT
certificate as an OtherName Subject Alternative Name.
KRB5PrincipalName is defined in RFC 4556 §3.2.2 as:
KRB5PrincipalName ::= SEQUENCE {
realm [0] Realm, -- GeneralString
principalName [1] PrincipalName -- RFC 4120 §5.2.2
}
PrincipalName ::= SEQUENCE {
name-type [0] Int32,
name-string [1] SEQUENCE OF KerberosString -- GeneralString
}The OtherName OID for this type is 1.3.6.1.5.2.2,
available as synta.krb5.KRB5_PRINCIPAL_NAME_OID.
Name types — use the NT_* module constants:
NT_PRINCIPAL(1) — user principal, e.g.alice@EXAMPLE.COMNT_SRV_INST(2) — service + instance, e.g.krbtgt/EXAMPLE.COMNT_SRV_HST(3) — service + hostname, e.g.host/server.example.comNT_ENTERPRISE(10) — enterprise (UPN-style), e.g.user@domain.example
Display format: Kerberos principal strings conventionally use
/ to join components and @ to separate from the realm:
service/instance@REALM. This class stores the components and realm
individually; format them yourself if you need a display string.
Example — PKINIT TGT principal for EXAMPLE.COM:
import synta.krb5
name = synta.krb5.Krb5PrincipalName(
realm="EXAMPLE.COM",
name_type=synta.krb5.NT_SRV_INST,
components=["krbtgt", "EXAMPLE.COM"],
)
# OID for OtherName: synta.krb5.KRB5_PRINCIPAL_NAME_OID (1.3.6.1.5.2.2)
der_bytes = name.to_der() # DER SEQUENCE bytes for OtherName.valueExample — decode from an OtherName SAN value:
parsed = synta.krb5.Krb5PrincipalName.from_der(der_bytes)
print(parsed.realm) # "EXAMPLE.COM"
print("/".join(parsed.components) + "@" + parsed.realm)
# "krbtgt/EXAMPLE.COM@EXAMPLE.COM"Trait Implementations§
Source§impl<'py> IntoPyObject<'py> for PyKrb5PrincipalName
impl<'py> IntoPyObject<'py> for PyKrb5PrincipalName
Source§type Target = PyKrb5PrincipalName
type Target = PyKrb5PrincipalName
Source§type Output = Bound<'py, <PyKrb5PrincipalName as IntoPyObject<'py>>::Target>
type Output = Bound<'py, <PyKrb5PrincipalName as IntoPyObject<'py>>::Target>
Source§fn into_pyobject(
self,
py: Python<'py>,
) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
fn into_pyobject( self, py: Python<'py>, ) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
Source§impl PyClass for PyKrb5PrincipalName
impl PyClass for PyKrb5PrincipalName
Source§impl PyClassImpl for PyKrb5PrincipalName
impl PyClassImpl for PyKrb5PrincipalName
Source§const IS_BASETYPE: bool = false
const IS_BASETYPE: bool = false
Source§const IS_SUBCLASS: bool = false
const IS_SUBCLASS: bool = false
Source§const IS_MAPPING: bool = false
const IS_MAPPING: bool = false
Source§const IS_SEQUENCE: bool = false
const IS_SEQUENCE: bool = false
Source§const IS_IMMUTABLE_TYPE: bool = false
const IS_IMMUTABLE_TYPE: bool = false
Source§const RAW_DOC: &'static CStr = /// RFC 4556 ``KRB5PrincipalName`` — Kerberos principal embedded in a PKINIT
/// certificate as an ``OtherName`` Subject Alternative Name.
///
/// ``KRB5PrincipalName`` is defined in RFC 4556 §3.2.2 as:
///
/// ```text
/// KRB5PrincipalName ::= SEQUENCE {
/// realm [0] Realm, -- GeneralString
/// principalName [1] PrincipalName -- RFC 4120 §5.2.2
/// }
///
/// PrincipalName ::= SEQUENCE {
/// name-type [0] Int32,
/// name-string [1] SEQUENCE OF KerberosString -- GeneralString
/// }
/// ```
///
/// The ``OtherName`` OID for this type is ``1.3.6.1.5.2.2``,
/// available as ``synta.krb5.KRB5_PRINCIPAL_NAME_OID``.
///
/// **Name types** — use the ``NT_*`` module constants:
///
/// * ``NT_PRINCIPAL`` (1) — user principal, e.g. ``alice@EXAMPLE.COM``
/// * ``NT_SRV_INST`` (2) — service + instance, e.g. ``krbtgt/EXAMPLE.COM``
/// * ``NT_SRV_HST`` (3) — service + hostname, e.g. ``host/server.example.com``
/// * ``NT_ENTERPRISE`` (10) — enterprise (UPN-style), e.g. ``user@domain.example``
///
/// **Display format**: Kerberos principal strings conventionally use
/// ``/`` to join components and ``@`` to separate from the realm:
/// ``service/instance@REALM``. This class stores the components and realm
/// individually; format them yourself if you need a display string.
///
/// Example — PKINIT TGT principal for ``EXAMPLE.COM``:
///
/// ```python
/// import synta.krb5
///
/// name = synta.krb5.Krb5PrincipalName(
/// realm="EXAMPLE.COM",
/// name_type=synta.krb5.NT_SRV_INST,
/// components=["krbtgt", "EXAMPLE.COM"],
/// )
/// # OID for OtherName: synta.krb5.KRB5_PRINCIPAL_NAME_OID (1.3.6.1.5.2.2)
/// der_bytes = name.to_der() # DER SEQUENCE bytes for OtherName.value
/// ```
///
/// Example — decode from an OtherName SAN value:
///
/// ```python
/// parsed = synta.krb5.Krb5PrincipalName.from_der(der_bytes)
/// print(parsed.realm) # "EXAMPLE.COM"
/// print("/".join(parsed.components) + "@" + parsed.realm)
/// # "krbtgt/EXAMPLE.COM@EXAMPLE.COM"
/// ```
const RAW_DOC: &'static CStr = /// RFC 4556 ``KRB5PrincipalName`` — Kerberos principal embedded in a PKINIT /// certificate as an ``OtherName`` Subject Alternative Name. /// /// ``KRB5PrincipalName`` is defined in RFC 4556 §3.2.2 as: /// /// ```text /// KRB5PrincipalName ::= SEQUENCE { /// realm [0] Realm, -- GeneralString /// principalName [1] PrincipalName -- RFC 4120 §5.2.2 /// } /// /// PrincipalName ::= SEQUENCE { /// name-type [0] Int32, /// name-string [1] SEQUENCE OF KerberosString -- GeneralString /// } /// ``` /// /// The ``OtherName`` OID for this type is ``1.3.6.1.5.2.2``, /// available as ``synta.krb5.KRB5_PRINCIPAL_NAME_OID``. /// /// **Name types** — use the ``NT_*`` module constants: /// /// * ``NT_PRINCIPAL`` (1) — user principal, e.g. ``alice@EXAMPLE.COM`` /// * ``NT_SRV_INST`` (2) — service + instance, e.g. ``krbtgt/EXAMPLE.COM`` /// * ``NT_SRV_HST`` (3) — service + hostname, e.g. ``host/server.example.com`` /// * ``NT_ENTERPRISE`` (10) — enterprise (UPN-style), e.g. ``user@domain.example`` /// /// **Display format**: Kerberos principal strings conventionally use /// ``/`` to join components and ``@`` to separate from the realm: /// ``service/instance@REALM``. This class stores the components and realm /// individually; format them yourself if you need a display string. /// /// Example — PKINIT TGT principal for ``EXAMPLE.COM``: /// /// ```python /// import synta.krb5 /// /// name = synta.krb5.Krb5PrincipalName( /// realm="EXAMPLE.COM", /// name_type=synta.krb5.NT_SRV_INST, /// components=["krbtgt", "EXAMPLE.COM"], /// ) /// # OID for OtherName: synta.krb5.KRB5_PRINCIPAL_NAME_OID (1.3.6.1.5.2.2) /// der_bytes = name.to_der() # DER SEQUENCE bytes for OtherName.value /// ``` /// /// Example — decode from an OtherName SAN value: /// /// ```python /// parsed = synta.krb5.Krb5PrincipalName.from_der(der_bytes) /// print(parsed.realm) # "EXAMPLE.COM" /// print("/".join(parsed.components) + "@" + parsed.realm) /// # "krbtgt/EXAMPLE.COM@EXAMPLE.COM" /// ```
Source§const DOC: &'static CStr
const DOC: &'static CStr
text_signature if a constructor is defined. Read moreSource§type ThreadChecker = SendablePyClass<PyKrb5PrincipalName>
type ThreadChecker = SendablePyClass<PyKrb5PrincipalName>
Source§type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::ImmutableChild
type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::ImmutableChild
Source§type BaseNativeType = PyAny
type BaseNativeType = PyAny
PyAny by default, and when you declare
#[pyclass(extends=PyDict)], it’s PyDict.fn items_iter() -> PyClassItemsIter
fn lazy_type_object() -> &'static LazyTypeObject<Self>
fn dict_offset() -> Option<isize>
fn weaklist_offset() -> Option<isize>
Source§impl PyClassNewTextSignature for PyKrb5PrincipalName
impl PyClassNewTextSignature for PyKrb5PrincipalName
const TEXT_SIGNATURE: &'static str = "(realm, name_type, components)"
Source§impl PyClass__eq__SlotFragment<PyKrb5PrincipalName> for PyClassImplCollector<PyKrb5PrincipalName>
impl PyClass__eq__SlotFragment<PyKrb5PrincipalName> for PyClassImplCollector<PyKrb5PrincipalName>
Source§impl PyMethods<PyKrb5PrincipalName> for PyClassImplCollector<PyKrb5PrincipalName>
impl PyMethods<PyKrb5PrincipalName> for PyClassImplCollector<PyKrb5PrincipalName>
fn py_methods(self) -> &'static PyClassItems
Source§impl PyTypeInfo for PyKrb5PrincipalName
impl PyTypeInfo for PyKrb5PrincipalName
Source§fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
Source§fn type_object(py: Python<'_>) -> Bound<'_, PyType>
fn type_object(py: Python<'_>) -> Bound<'_, PyType>
impl DerefToPyAny for PyKrb5PrincipalName
impl ExtractPyClassWithClone for PyKrb5PrincipalName
Auto Trait Implementations§
impl Freeze for PyKrb5PrincipalName
impl RefUnwindSafe for PyKrb5PrincipalName
impl Send for PyKrb5PrincipalName
impl Sync for PyKrb5PrincipalName
impl Unpin for PyKrb5PrincipalName
impl UnsafeUnpin for PyKrb5PrincipalName
impl UnwindSafe for PyKrb5PrincipalName
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
Source§fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
self into an owned Python object, dropping type information.Source§impl<T> PyErrArguments for T
impl<T> PyErrArguments for T
Source§impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
Source§const NAME: &'static str = T::NAME
const NAME: &'static str = T::NAME
Use ::classinfo_object() instead and format the type name at runtime. Note that using built-in cast features is often better than manual PyTypeCheck usage.