1%% Generated by Sphinx. 2\def\sphinxdocclass{report} 3\documentclass[letterpaper,10pt,english]{sphinxmanual} 4\ifdefined\pdfpxdimen 5 \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen 6\fi \sphinxpxdimen=.75bp\relax 7 8\usepackage[utf8]{inputenc} 9\ifdefined\DeclareUnicodeCharacter 10 \ifdefined\DeclareUnicodeCharacterAsOptional 11 \DeclareUnicodeCharacter{"00A0}{\nobreakspace} 12 \DeclareUnicodeCharacter{"2500}{\sphinxunichar{2500}} 13 \DeclareUnicodeCharacter{"2502}{\sphinxunichar{2502}} 14 \DeclareUnicodeCharacter{"2514}{\sphinxunichar{2514}} 15 \DeclareUnicodeCharacter{"251C}{\sphinxunichar{251C}} 16 \DeclareUnicodeCharacter{"2572}{\textbackslash} 17 \else 18 \DeclareUnicodeCharacter{00A0}{\nobreakspace} 19 \DeclareUnicodeCharacter{2500}{\sphinxunichar{2500}} 20 \DeclareUnicodeCharacter{2502}{\sphinxunichar{2502}} 21 \DeclareUnicodeCharacter{2514}{\sphinxunichar{2514}} 22 \DeclareUnicodeCharacter{251C}{\sphinxunichar{251C}} 23 \DeclareUnicodeCharacter{2572}{\textbackslash} 24 \fi 25\fi 26\usepackage{cmap} 27\usepackage[T1]{fontenc} 28\usepackage{amsmath,amssymb,amstext} 29\usepackage{babel} 30\usepackage{times} 31\usepackage[Bjarne]{fncychap} 32\usepackage[dontkeepoldnames]{sphinx} 33 34\usepackage{geometry} 35 36% Include hyperref last. 37\usepackage{hyperref} 38% Fix anchor placement for figures with captions. 39\usepackage{hypcap}% it must be loaded after hyperref. 40% Set up styles of URL: it should be placed after hyperref. 41\urlstyle{same} 42 43\addto\captionsenglish{\renewcommand{\figurename}{Fig.}} 44\addto\captionsenglish{\renewcommand{\tablename}{Table}} 45\addto\captionsenglish{\renewcommand{\literalblockname}{Listing}} 46 47\addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}} 48\addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}} 49 50\addto\extrasenglish{\def\pageautorefname{page}} 51 52\setcounter{tocdepth}{0} 53 54 55 56\title{Kerberos Application Developer Guide} 57\date{ } 58\release{1.19.2} 59\author{MIT} 60\newcommand{\sphinxlogo}{\vbox{}} 61\renewcommand{\releasename}{Release} 62\makeindex 63 64\begin{document} 65 66\maketitle 67\sphinxtableofcontents 68\phantomsection\label{\detokenize{appdev/index::doc}} 69 70 71 72\chapter{Developing with GSSAPI} 73\label{\detokenize{appdev/gssapi:for-application-developers}}\label{\detokenize{appdev/gssapi::doc}}\label{\detokenize{appdev/gssapi:developing-with-gssapi}} 74The GSSAPI (Generic Security Services API) allows applications to 75communicate securely using Kerberos 5 or other security mechanisms. 76We recommend using the GSSAPI (or a higher-level framework which 77encompasses GSSAPI, such as SASL) for secure network communication 78over using the libkrb5 API directly. 79 80GSSAPIv2 is specified in \index{RFC!RFC 2743}\sphinxhref{https://tools.ietf.org/html/rfc2743.html}{\sphinxstylestrong{RFC 2743}} and \index{RFC!RFC 2744}\sphinxhref{https://tools.ietf.org/html/rfc2744.html}{\sphinxstylestrong{RFC 2744}}. Also see 81\index{RFC!RFC 7546}\sphinxhref{https://tools.ietf.org/html/rfc7546.html}{\sphinxstylestrong{RFC 7546}} for a description of how to use the GSSAPI in a client or 82server program. 83 84This documentation will describe how various ways of using the 85GSSAPI will behave with the krb5 mechanism as implemented in MIT krb5, 86as well as krb5-specific extensions to the GSSAPI. 87 88 89\section{Name types} 90\label{\detokenize{appdev/gssapi:name-types}} 91A GSSAPI application can name a local or remote entity by calling 92\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.16}{gss\_import\_name}, specifying a name type and a value. The following 93name types are supported by the krb5 mechanism: 94\begin{itemize} 95\item {} 96\sphinxstylestrong{GSS\_C\_NT\_HOSTBASED\_SERVICE}: The value should be a string of the 97form \sphinxcode{service} or \sphinxcode{service@hostname}. This is the most common 98way to name target services when initiating a security context, and 99is the most likely name type to work across multiple mechanisms. 100 101\item {} 102\sphinxstylestrong{GSS\_KRB5\_NT\_PRINCIPAL\_NAME}: The value should be a principal name 103string. This name type only works with the krb5 mechanism, and is 104defined in the \sphinxcode{\textless{}gssapi/gssapi\_krb5.h\textgreater{}} header. 105 106\item {} 107\sphinxstylestrong{GSS\_C\_NT\_USER\_NAME} or \sphinxstylestrong{GSS\_C\_NULL\_OID}: The value is treated 108as an unparsed principal name string, as above. These name types 109may work with mechanisms other than krb5, but will have different 110interpretations in those mechanisms. \sphinxstylestrong{GSS\_C\_NT\_USER\_NAME} is 111intended to be used with a local username, which will parse into a 112single-component principal in the default realm. 113 114\item {} 115\sphinxstylestrong{GSS\_C\_NT\_ANONYMOUS}: The value is ignored. The anonymous 116principal is used, allowing a client to authenticate to a server 117without asserting a particular identity (which may or may not be 118allowed by a particular server or Kerberos realm). 119 120\item {} 121\sphinxstylestrong{GSS\_C\_NT\_MACHINE\_UID\_NAME}: The value is uid\_t object. On 122Unix-like systems, the username of the uid is looked up in the 123system user database and the resulting username is parsed as a 124principal name. 125 126\item {} 127\sphinxstylestrong{GSS\_C\_NT\_STRING\_UID\_NAME}: As above, but the value is a decimal 128string representation of the uid. 129 130\item {} 131\sphinxstylestrong{GSS\_C\_NT\_EXPORT\_NAME}: The value must be the result of a 132\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.13}{gss\_export\_name} call. 133 134\item {} 135\sphinxstylestrong{GSS\_KRB5\_NT\_ENTERPRISE\_NAME}: The value should be a krb5 136enterprise name string (see \index{RFC!RFC 6806}\sphinxhref{https://tools.ietf.org/html/rfc6806.html}{\sphinxstylestrong{RFC 6806}} section 5), in the form 137\sphinxcode{user@suffix}. This name type is used to convey alias names, and 138is defined in the \sphinxcode{\textless{}gssapi/gssapi\_krb5.h\textgreater{}} header. (New in 139release 1.17.) 140 141\item {} 142\sphinxstylestrong{GSS\_KRB5\_NT\_X509\_CERT}: The value should be an X.509 certificate 143encoded according to \index{RFC!RFC 5280}\sphinxhref{https://tools.ietf.org/html/rfc5280.html}{\sphinxstylestrong{RFC 5280}}. This name form can be used for 144the desired\_name parameter of gss\_acquire\_cred\_impersonate\_name(), 145to identify the S4U2Self user by certificate. (New in release 1461.19.) 147 148\end{itemize} 149 150 151\section{Initiator credentials} 152\label{\detokenize{appdev/gssapi:initiator-credentials}} 153A GSSAPI client application uses \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.19}{gss\_init\_sec\_context} to establish a 154security context. The \sphinxstyleemphasis{initiator\_cred\_handle} parameter determines 155what tickets are used to establish the connection. An application can 156either pass \sphinxstylestrong{GSS\_C\_NO\_CREDENTIAL} to use the default client 157credential, or it can use \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred} beforehand to acquire an 158initiator credential. The call to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred} may include a 159\sphinxstyleemphasis{desired\_name} parameter, or it may pass \sphinxstylestrong{GSS\_C\_NO\_NAME} if it does 160not have a specific name preference. 161 162If the desired name for a krb5 initiator credential is a host-based 163name, it is converted to a principal name of the form 164\sphinxcode{service/hostname} in the local realm, where \sphinxstyleemphasis{hostname} is the local 165hostname if not specified. The hostname will be canonicalized using 166forward name resolution, and possibly also using reverse name 167resolution depending on the value of the \sphinxstylestrong{rdns} variable in 168\DUrole{xref,std,std-ref}{libdefaults}. 169 170If a desired name is specified in the call to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred}, the 171krb5 mechanism will attempt to find existing tickets for that client 172principal name in the default credential cache or collection. If the 173default cache type does not support a collection, and the default 174cache contains credentials for a different principal than the desired 175name, a \sphinxstylestrong{GSS\_S\_CRED\_UNAVAIL} error will be returned with a minor 176code indicating a mismatch. 177 178If no existing tickets are available for the desired name, but the 179name has an entry in the default client \DUrole{xref,std,std-ref}{keytab\_definition}, the 180krb5 mechanism will acquire initial tickets for the name using the 181default client keytab. 182 183If no desired name is specified, credential acquisition will be 184deferred until the credential is used in a call to 185\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.19}{gss\_init\_sec\_context} or \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.21}{gss\_inquire\_cred}. If the call is to 186\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.19}{gss\_init\_sec\_context}, the target name will be used to choose a client 187principal name using the credential cache selection facility. (This 188facility might, for instance, try to choose existing tickets for a 189client principal in the same realm as the target service). If there 190are no existing tickets for the chosen principal, but it is present in 191the default client keytab, the krb5 mechanism will acquire initial 192tickets using the keytab. 193 194If the target name cannot be used to select a client principal 195(because the credentials are used in a call to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.21}{gss\_inquire\_cred}), or 196if the credential cache selection facility cannot choose a principal 197for it, the default credential cache will be selected if it exists and 198contains tickets. 199 200If the default credential cache does not exist, but the default client 201keytab does, the krb5 mechanism will try to acquire initial tickets 202for the first principal in the default client keytab. 203 204If the krb5 mechanism acquires initial tickets using the default 205client keytab, the resulting tickets will be stored in the default 206cache or collection, and will be refreshed by future calls to 207\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred} as they approach their expire time. 208 209 210\section{Acceptor names} 211\label{\detokenize{appdev/gssapi:acceptor-names}} 212A GSSAPI server application uses \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.1}{gss\_accept\_sec\_context} to establish 213a security context based on tokens provided by the client. The 214\sphinxstyleemphasis{acceptor\_cred\_handle} parameter determines what 215\DUrole{xref,std,std-ref}{keytab\_definition} entries may be authenticated to by the 216client, if the krb5 mechanism is used. 217 218The simplest choice is to pass \sphinxstylestrong{GSS\_C\_NO\_CREDENTIAL} as the acceptor 219credential. In this case, clients may authenticate to any service 220principal in the default keytab (typically \DUrole{xref,std,std-ref}{DEFKTNAME}, or the value of 221the \sphinxstylestrong{KRB5\_KTNAME} environment variable). This is the recommended 222approach if the server application has no specific requirements to the 223contrary. 224 225A server may acquire an acceptor credential with \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred} and 226a \sphinxstyleemphasis{cred\_usage} of \sphinxstylestrong{GSS\_C\_ACCEPT} or \sphinxstylestrong{GSS\_C\_BOTH}. If the 227\sphinxstyleemphasis{desired\_name} parameter is \sphinxstylestrong{GSS\_C\_NO\_NAME}, then clients will be 228allowed to authenticate to any service principal in the default 229keytab, just as if no acceptor credential was supplied. 230 231If a server wishes to specify a \sphinxstyleemphasis{desired\_name} to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred}, 232the most common choice is a host-based name. If the host-based 233\sphinxstyleemphasis{desired\_name} contains just a \sphinxstyleemphasis{service}, then clients will be allowed 234to authenticate to any host-based service principal (that is, a 235principal of the form \sphinxcode{service/hostname@REALM}) for the named 236service, regardless of hostname or realm, as long as it is present in 237the default keytab. If the input name contains both a \sphinxstyleemphasis{service} and a 238\sphinxstyleemphasis{hostname}, clients will be allowed to authenticate to any host-based 239principal for the named service and hostname, regardless of realm. 240 241\begin{sphinxadmonition}{note}{Note:} 242If a \sphinxstyleemphasis{hostname} is specified, it will be canonicalized 243using forward name resolution, and possibly also using 244reverse name resolution depending on the value of the 245\sphinxstylestrong{rdns} variable in \DUrole{xref,std,std-ref}{libdefaults}. 246\end{sphinxadmonition} 247 248\begin{sphinxadmonition}{note}{Note:} 249If the \sphinxstylestrong{ignore\_acceptor\_hostname} variable in 250\DUrole{xref,std,std-ref}{libdefaults} is enabled, then \sphinxstyleemphasis{hostname} will be 251ignored even if one is specified in the input name. 252\end{sphinxadmonition} 253 254\begin{sphinxadmonition}{note}{Note:} 255In MIT krb5 versions prior to 1.10, and in Heimdal’s 256implementation of the krb5 mechanism, an input name with 257just a \sphinxstyleemphasis{service} is treated like an input name of 258\sphinxcode{service@localhostname}, where \sphinxstyleemphasis{localhostname} is the 259string returned by gethostname(). 260\end{sphinxadmonition} 261 262If the \sphinxstyleemphasis{desired\_name} is a krb5 principal name or a local system name 263type which is mapped to a krb5 principal name, clients will only be 264allowed to authenticate to that principal in the default keytab. 265 266 267\section{Name Attributes} 268\label{\detokenize{appdev/gssapi:name-attributes}} 269In release 1.8 or later, the \sphinxhref{https://tools.ietf.org/html/rfc6680.txt\#section-7.4}{gss\_inquire\_name} and 270\sphinxhref{https://tools.ietf.org/html/6680.html\#section-7.5}{gss\_get\_name\_attribute} functions, specified in \index{RFC!RFC 6680}\sphinxhref{https://tools.ietf.org/html/rfc6680.html}{\sphinxstylestrong{RFC 6680}}, can be 271used to retrieve name attributes from the \sphinxstyleemphasis{src\_name} returned by 272\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.1}{gss\_accept\_sec\_context}. The following attributes are defined when 273the krb5 mechanism is used: 274 275\phantomsection\label{\detokenize{appdev/gssapi:gssapi-authind-attr}}\begin{itemize} 276\item {} 277“auth-indicators” attribute: 278 279\end{itemize} 280 281This attribute will be included in the \sphinxhref{https://tools.ietf.org/html/rfc6680.txt\#section-7.4}{gss\_inquire\_name} output if the 282ticket contains \DUrole{xref,std,std-ref}{authentication indicators}. 283One indicator is returned per invocation of \sphinxhref{https://tools.ietf.org/html/6680.html\#section-7.5}{gss\_get\_name\_attribute}, 284so multiple invocations may be necessary to retrieve all of the 285indicators from the ticket. (New in release 1.15.) 286 287 288\section{Credential store extensions} 289\label{\detokenize{appdev/gssapi:credential-store-extensions}} 290Beginning with release 1.11, the following GSSAPI extensions declared 291in \sphinxcode{\textless{}gssapi/gssapi\_ext.h\textgreater{}} can be used to specify how credentials 292are acquired or stored: 293 294\fvset{hllines={, ,}}% 295\begin{sphinxVerbatim}[commandchars=\\\{\}] 296\PYG{n}{struct} \PYG{n}{gss\PYGZus{}key\PYGZus{}value\PYGZus{}element\PYGZus{}struct} \PYG{p}{\PYGZob{}} 297 \PYG{n}{const} \PYG{n}{char} \PYG{o}{*}\PYG{n}{key}\PYG{p}{;} 298 \PYG{n}{const} \PYG{n}{char} \PYG{o}{*}\PYG{n}{value}\PYG{p}{;} 299\PYG{p}{\PYGZcb{}}\PYG{p}{;} 300\PYG{n}{typedef} \PYG{n}{struct} \PYG{n}{gss\PYGZus{}key\PYGZus{}value\PYGZus{}element\PYGZus{}struct} \PYG{n}{gss\PYGZus{}key\PYGZus{}value\PYGZus{}element\PYGZus{}desc}\PYG{p}{;} 301 302\PYG{n}{struct} \PYG{n}{gss\PYGZus{}key\PYGZus{}value\PYGZus{}set\PYGZus{}struct} \PYG{p}{\PYGZob{}} 303 \PYG{n}{OM\PYGZus{}uint32} \PYG{n}{count}\PYG{p}{;} 304 \PYG{n}{gss\PYGZus{}key\PYGZus{}value\PYGZus{}element\PYGZus{}desc} \PYG{o}{*}\PYG{n}{elements}\PYG{p}{;} 305\PYG{p}{\PYGZcb{}}\PYG{p}{;} 306\PYG{n}{typedef} \PYG{n}{const} \PYG{n}{struct} \PYG{n}{gss\PYGZus{}key\PYGZus{}value\PYGZus{}set\PYGZus{}struct} \PYG{n}{gss\PYGZus{}key\PYGZus{}value\PYGZus{}set\PYGZus{}desc}\PYG{p}{;} 307\PYG{n}{typedef} \PYG{n}{const} \PYG{n}{gss\PYGZus{}key\PYGZus{}value\PYGZus{}set\PYGZus{}desc} \PYG{o}{*}\PYG{n}{gss\PYGZus{}const\PYGZus{}key\PYGZus{}value\PYGZus{}set\PYGZus{}t}\PYG{p}{;} 308 309\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}acquire\PYGZus{}cred\PYGZus{}from}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,} 310 \PYG{n}{const} \PYG{n}{gss\PYGZus{}name\PYGZus{}t} \PYG{n}{desired\PYGZus{}name}\PYG{p}{,} 311 \PYG{n}{OM\PYGZus{}uint32} \PYG{n}{time\PYGZus{}req}\PYG{p}{,} 312 \PYG{n}{const} \PYG{n}{gss\PYGZus{}OID\PYGZus{}set} \PYG{n}{desired\PYGZus{}mechs}\PYG{p}{,} 313 \PYG{n}{gss\PYGZus{}cred\PYGZus{}usage\PYGZus{}t} \PYG{n}{cred\PYGZus{}usage}\PYG{p}{,} 314 \PYG{n}{gss\PYGZus{}const\PYGZus{}key\PYGZus{}value\PYGZus{}set\PYGZus{}t} \PYG{n}{cred\PYGZus{}store}\PYG{p}{,} 315 \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{o}{*}\PYG{n}{output\PYGZus{}cred\PYGZus{}handle}\PYG{p}{,} 316 \PYG{n}{gss\PYGZus{}OID\PYGZus{}set} \PYG{o}{*}\PYG{n}{actual\PYGZus{}mechs}\PYG{p}{,} 317 \PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{time\PYGZus{}rec}\PYG{p}{)}\PYG{p}{;} 318 319\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}store\PYGZus{}cred\PYGZus{}into}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,} 320 \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{n}{input\PYGZus{}cred\PYGZus{}handle}\PYG{p}{,} 321 \PYG{n}{gss\PYGZus{}cred\PYGZus{}usage\PYGZus{}t} \PYG{n}{cred\PYGZus{}usage}\PYG{p}{,} 322 \PYG{n}{const} \PYG{n}{gss\PYGZus{}OID} \PYG{n}{desired\PYGZus{}mech}\PYG{p}{,} 323 \PYG{n}{OM\PYGZus{}uint32} \PYG{n}{overwrite\PYGZus{}cred}\PYG{p}{,} 324 \PYG{n}{OM\PYGZus{}uint32} \PYG{n}{default\PYGZus{}cred}\PYG{p}{,} 325 \PYG{n}{gss\PYGZus{}const\PYGZus{}key\PYGZus{}value\PYGZus{}set\PYGZus{}t} \PYG{n}{cred\PYGZus{}store}\PYG{p}{,} 326 \PYG{n}{gss\PYGZus{}OID\PYGZus{}set} \PYG{o}{*}\PYG{n}{elements\PYGZus{}stored}\PYG{p}{,} 327 \PYG{n}{gss\PYGZus{}cred\PYGZus{}usage\PYGZus{}t} \PYG{o}{*}\PYG{n}{cred\PYGZus{}usage\PYGZus{}stored}\PYG{p}{)}\PYG{p}{;} 328\end{sphinxVerbatim} 329 330The additional \sphinxstyleemphasis{cred\_store} parameter allows the caller to specify 331information about how the credentials should be obtained and stored. 332The following options are supported by the krb5 mechanism: 333\begin{itemize} 334\item {} 335\sphinxstylestrong{ccache}: For acquiring initiator credentials, the name of the 336\DUrole{xref,std,std-ref}{credential cache} to which the handle will 337refer. For storing credentials, the name of the cache where the 338credentials should be stored. If a collection name is given, the 339primary cache of the collection will be used; this behavior may 340change in future releases to select a cache from the collection. 341 342\item {} 343\sphinxstylestrong{client\_keytab}: For acquiring initiator credentials, the name of 344the \DUrole{xref,std,std-ref}{keytab} which will be used, if 345necessary, to refresh the credentials in the cache. 346 347\item {} 348\sphinxstylestrong{keytab}: For acquiring acceptor credentials, the name of the 349\DUrole{xref,std,std-ref}{keytab} to which the handle will refer. 350In release 1.19 and later, this option also determines the keytab to 351be used for verification when initiator credentials are acquired 352using a password and verified. 353 354\item {} 355\sphinxstylestrong{password}: For acquiring initiator credentials, this option 356instructs the mechanism to acquire fresh credentials into a unique 357memory credential cache. This option may not be used with the 358\sphinxstylestrong{ccache} or \sphinxstylestrong{client\_keytab} options, and a \sphinxstyleemphasis{desired\_name} must 359be specified. (New in release 1.19.) 360 361\item {} 362\sphinxstylestrong{rcache}: For acquiring acceptor credentials, the name of the 363\DUrole{xref,std,std-ref}{replay cache} to be used when processing 364the initiator tokens. (New in release 1.13.) 365 366\item {} 367\sphinxstylestrong{verify}: For acquiring initiator credentials, this option 368instructs the mechanism to verify the credentials by obtaining a 369ticket to a service with a known key. The service key is obtained 370from the keytab specified with the \sphinxstylestrong{keytab} option or the default 371keytab. The value may be the name of a principal in the keytab, or 372the empty string. If the empty string is given, any \sphinxcode{host} 373service principal in the keytab may be used. (New in release 1.19.) 374 375\end{itemize} 376 377 378\section{Importing and exporting credentials} 379\label{\detokenize{appdev/gssapi:importing-and-exporting-credentials}} 380The following GSSAPI extensions can be used to import and export 381credentials (declared in \sphinxcode{\textless{}gssapi/gssapi\_ext.h\textgreater{}}): 382 383\fvset{hllines={, ,}}% 384\begin{sphinxVerbatim}[commandchars=\\\{\}] 385\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}export\PYGZus{}cred}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,} 386 \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{n}{cred\PYGZus{}handle}\PYG{p}{,} 387 \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{token}\PYG{p}{)}\PYG{p}{;} 388 389\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}import\PYGZus{}cred}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,} 390 \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{token}\PYG{p}{,} 391 \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{o}{*}\PYG{n}{cred\PYGZus{}handle}\PYG{p}{)}\PYG{p}{;} 392\end{sphinxVerbatim} 393 394The first function serializes a GSSAPI credential handle into a 395buffer; the second unseralizes a buffer into a GSSAPI credential 396handle. Serializing a credential does not destroy it. If any of the 397mechanisms used in \sphinxstyleemphasis{cred\_handle} do not support serialization, 398gss\_export\_cred will return \sphinxstylestrong{GSS\_S\_UNAVAILABLE}. As with other 399GSSAPI serialization functions, these extensions are only intended to 400work with a matching implementation on the other side; they do not 401serialize credentials in a standardized format. 402 403A serialized credential may contain secret information such as ticket 404session keys. The serialization format does not protect this 405information from eavesdropping or tampering. The calling application 406must take care to protect the serialized credential when communicating 407it over an insecure channel or to an untrusted party. 408 409A krb5 GSSAPI credential may contain references to a credential cache, 410a client keytab, an acceptor keytab, and a replay cache. These 411resources are normally serialized as references to their external 412locations (such as the filename of the credential cache). Because of 413this, a serialized krb5 credential can only be imported by a process 414with similar privileges to the exporter. A serialized credential 415should not be trusted if it originates from a source with lower 416privileges than the importer, as it may contain references to external 417credential cache, keytab, or replay cache resources not accessible to 418the originator. 419 420An exception to the above rule applies when a krb5 GSSAPI credential 421refers to a memory credential cache, as is normally the case for 422delegated credentials received by \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.1}{gss\_accept\_sec\_context}. In this 423case, the contents of the credential cache are serialized, so that the 424resulting token may be imported even if the original memory credential 425cache no longer exists. 426 427 428\section{Constrained delegation (S4U)} 429\label{\detokenize{appdev/gssapi:constrained-delegation-s4u}} 430The Microsoft S4U2Self and S4U2Proxy Kerberos protocol extensions 431allow an intermediate service to acquire credentials from a client to 432a target service without requiring the client to delegate a 433ticket-granting ticket, if the KDC is configured to allow it. 434 435To perform a constrained delegation operation, the intermediate 436service must submit to the KDC an “evidence ticket” from the client to 437the intermediate service. An evidence ticket can be acquired when the 438client authenticates to the intermediate service with Kerberos, or 439with an S4U2Self request if the KDC allows it. The MIT krb5 GSSAPI 440library represents an evidence ticket using a “proxy credential”, 441which is a special kind of gss\_cred\_id\_t object whose underlying 442credential cache contains the evidence ticket and a krbtgt ticket for 443the intermediate service. 444 445To acquire a proxy credential during client authentication, the 446service should first create an acceptor credential using the 447\sphinxstylestrong{GSS\_C\_BOTH} usage. The application should then pass this 448credential as the \sphinxstyleemphasis{acceptor\_cred\_handle} to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.1}{gss\_accept\_sec\_context}, 449and also pass a \sphinxstyleemphasis{delegated\_cred\_handle} output parameter to receive a 450proxy credential containing the evidence ticket. The output value of 451\sphinxstyleemphasis{delegated\_cred\_handle} may be a delegated ticket-granting ticket if 452the client sent one, or a proxy credential if not. If the library can 453determine that the client’s ticket is not a valid evidence ticket, it 454will place \sphinxstylestrong{GSS\_C\_NO\_CREDENTIAL} in \sphinxstyleemphasis{delegated\_cred\_handle}. 455 456To acquire a proxy credential using an S4U2Self request, the service 457can use the following GSSAPI extension: 458 459\fvset{hllines={, ,}}% 460\begin{sphinxVerbatim}[commandchars=\\\{\}] 461\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}acquire\PYGZus{}cred\PYGZus{}impersonate\PYGZus{}name}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,} 462 \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{n}{icred}\PYG{p}{,} 463 \PYG{n}{gss\PYGZus{}name\PYGZus{}t} \PYG{n}{desired\PYGZus{}name}\PYG{p}{,} 464 \PYG{n}{OM\PYGZus{}uint32} \PYG{n}{time\PYGZus{}req}\PYG{p}{,} 465 \PYG{n}{gss\PYGZus{}OID\PYGZus{}set} \PYG{n}{desired\PYGZus{}mechs}\PYG{p}{,} 466 \PYG{n}{gss\PYGZus{}cred\PYGZus{}usage\PYGZus{}t} \PYG{n}{cred\PYGZus{}usage}\PYG{p}{,} 467 \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{o}{*}\PYG{n}{output\PYGZus{}cred}\PYG{p}{,} 468 \PYG{n}{gss\PYGZus{}OID\PYGZus{}set} \PYG{o}{*}\PYG{n}{actual\PYGZus{}mechs}\PYG{p}{,} 469 \PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{time\PYGZus{}rec}\PYG{p}{)}\PYG{p}{;} 470\end{sphinxVerbatim} 471 472The parameters to this function are similar to those of 473\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred}, except that \sphinxstyleemphasis{icred} is used to make an S4U2Self 474request to the KDC for a ticket from \sphinxstyleemphasis{desired\_name} to the 475intermediate service. Both \sphinxstyleemphasis{icred} and \sphinxstyleemphasis{desired\_name} are required 476for this function; passing \sphinxstylestrong{GSS\_C\_NO\_CREDENTIAL} or 477\sphinxstylestrong{GSS\_C\_NO\_NAME} will cause the call to fail. \sphinxstyleemphasis{icred} must contain a 478krbtgt ticket for the intermediate service. The result of this 479operation is a proxy credential. (Prior to release 1.18, the result 480of this operation may be a regular credential for \sphinxstyleemphasis{desired\_name}, if 481the KDC issues a non-forwardable ticket.) 482 483Once the intermediate service has a proxy credential, it can simply 484pass it to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.19}{gss\_init\_sec\_context} as the \sphinxstyleemphasis{initiator\_cred\_handle} 485parameter, and the desired service as the \sphinxstyleemphasis{target\_name} parameter. 486The GSSAPI library will present the krbtgt ticket and evidence ticket 487in the proxy credential to the KDC in an S4U2Proxy request; if the 488intermediate service has the appropriate permissions, the KDC will 489issue a ticket from the client to the target service. The GSSAPI 490library will then use this ticket to authenticate to the target 491service. 492 493If an application needs to find out whether a credential it holds is a 494proxy credential and the name of the intermediate service, it can 495query the credential with the \sphinxstylestrong{GSS\_KRB5\_GET\_CRED\_IMPERSONATOR} OID 496(new in release 1.16, declared in \sphinxcode{\textless{}gssapi/gssapi\_krb5.h\textgreater{}}) using 497the gss\_inquire\_cred\_by\_oid extension (declared in 498\sphinxcode{\textless{}gssapi/gssapi\_ext.h\textgreater{}}): 499 500\fvset{hllines={, ,}}% 501\begin{sphinxVerbatim}[commandchars=\\\{\}] 502\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}inquire\PYGZus{}cred\PYGZus{}by\PYGZus{}oid}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,} 503 \PYG{n}{const} \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{n}{cred\PYGZus{}handle}\PYG{p}{,} 504 \PYG{n}{gss\PYGZus{}OID} \PYG{n}{desired\PYGZus{}object}\PYG{p}{,} 505 \PYG{n}{gss\PYGZus{}buffer\PYGZus{}set\PYGZus{}t} \PYG{o}{*}\PYG{n}{data\PYGZus{}set}\PYG{p}{)}\PYG{p}{;} 506\end{sphinxVerbatim} 507 508If the call succeeds and \sphinxstyleemphasis{cred\_handle} is a proxy credential, 509\sphinxstyleemphasis{data\_set} will be set to a single-element buffer set containing the 510unparsed principal name of the intermediate service. If \sphinxstyleemphasis{cred\_handle} 511is not a proxy credential, \sphinxstyleemphasis{data\_set} will be set to an empty buffer 512set. If the library does not support the query, 513gss\_inquire\_cred\_by\_oid will return \sphinxstylestrong{GSS\_S\_UNAVAILABLE}. 514 515 516\section{AEAD message wrapping} 517\label{\detokenize{appdev/gssapi:aead-message-wrapping}} 518The following GSSAPI extensions (declared in 519\sphinxcode{\textless{}gssapi/gssapi\_ext.h\textgreater{}}) can be used to wrap and unwrap messages 520with additional “associated data” which is integrity-checked but is 521not included in the output buffer: 522 523\fvset{hllines={, ,}}% 524\begin{sphinxVerbatim}[commandchars=\\\{\}] 525\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}wrap\PYGZus{}aead}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,} 526 \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,} 527 \PYG{n+nb}{int} \PYG{n}{conf\PYGZus{}req\PYGZus{}flag}\PYG{p}{,} \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{n}{qop\PYGZus{}req}\PYG{p}{,} 528 \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{input\PYGZus{}assoc\PYGZus{}buffer}\PYG{p}{,} 529 \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{input\PYGZus{}payload\PYGZus{}buffer}\PYG{p}{,} 530 \PYG{n+nb}{int} \PYG{o}{*}\PYG{n}{conf\PYGZus{}state}\PYG{p}{,} 531 \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{output\PYGZus{}message\PYGZus{}buffer}\PYG{p}{)}\PYG{p}{;} 532 533\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}unwrap\PYGZus{}aead}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,} 534 \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,} 535 \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{input\PYGZus{}message\PYGZus{}buffer}\PYG{p}{,} 536 \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{input\PYGZus{}assoc\PYGZus{}buffer}\PYG{p}{,} 537 \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{output\PYGZus{}payload\PYGZus{}buffer}\PYG{p}{,} 538 \PYG{n+nb}{int} \PYG{o}{*}\PYG{n}{conf\PYGZus{}state}\PYG{p}{,} 539 \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{o}{*}\PYG{n}{qop\PYGZus{}state}\PYG{p}{)}\PYG{p}{;} 540\end{sphinxVerbatim} 541 542Wrap tokens created with gss\_wrap\_aead will successfully unwrap only 543if the same \sphinxstyleemphasis{input\_assoc\_buffer} contents are presented to 544gss\_unwrap\_aead. 545 546 547\section{IOV message wrapping} 548\label{\detokenize{appdev/gssapi:iov-message-wrapping}} 549The following extensions (declared in \sphinxcode{\textless{}gssapi/gssapi\_ext.h\textgreater{}}) can 550be used for in-place encryption, fine-grained control over wrap token 551layout, and for constructing wrap tokens compatible with Microsoft DCE 552RPC: 553 554\fvset{hllines={, ,}}% 555\begin{sphinxVerbatim}[commandchars=\\\{\}] 556\PYG{n}{typedef} \PYG{n}{struct} \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc\PYGZus{}struct} \PYG{p}{\PYGZob{}} 557 \PYG{n}{OM\PYGZus{}uint32} \PYG{n+nb}{type}\PYG{p}{;} 558 \PYG{n}{gss\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{buffer}\PYG{p}{;} 559\PYG{p}{\PYGZcb{}} \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc}\PYG{p}{,} \PYG{o}{*}\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}t}\PYG{p}{;} 560 561\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}wrap\PYGZus{}iov}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,} 562 \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,} 563 \PYG{n+nb}{int} \PYG{n}{conf\PYGZus{}req\PYGZus{}flag}\PYG{p}{,} \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{n}{qop\PYGZus{}req}\PYG{p}{,} 564 \PYG{n+nb}{int} \PYG{o}{*}\PYG{n}{conf\PYGZus{}state}\PYG{p}{,} 565 \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,} \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;} 566 567\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}unwrap\PYGZus{}iov}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,} 568 \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,} 569 \PYG{n+nb}{int} \PYG{o}{*}\PYG{n}{conf\PYGZus{}state}\PYG{p}{,} \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{o}{*}\PYG{n}{qop\PYGZus{}state}\PYG{p}{,} 570 \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,} \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;} 571 572\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}wrap\PYGZus{}iov\PYGZus{}length}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,} 573 \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,} 574 \PYG{n+nb}{int} \PYG{n}{conf\PYGZus{}req\PYGZus{}flag}\PYG{p}{,} 575 \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{n}{qop\PYGZus{}req}\PYG{p}{,} \PYG{n+nb}{int} \PYG{o}{*}\PYG{n}{conf\PYGZus{}state}\PYG{p}{,} 576 \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,} 577 \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;} 578 579\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}release\PYGZus{}iov\PYGZus{}buffer}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,} 580 \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,} 581 \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;} 582\end{sphinxVerbatim} 583 584The caller of gss\_wrap\_iov provides an array of gss\_iov\_buffer\_desc 585structures, each containing a type and a gss\_buffer\_desc structure. 586Valid types include: 587\begin{itemize} 588\item {} 589\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_DATA}: A data buffer to be included in the 590token, and to be encrypted or decrypted in-place if the token is 591confidentiality-protected. 592 593\item {} 594\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_HEADER}: The GSSAPI wrap token header and 595underlying cryptographic header. 596 597\item {} 598\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_TRAILER}: The cryptographic trailer, if one is 599required. 600 601\item {} 602\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_PADDING}: Padding to be combined with the data 603during encryption and decryption. (The implementation may choose to 604place padding in the trailer buffer, in which case it will set the 605padding buffer length to 0.) 606 607\item {} 608\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_STREAM}: For unwrapping only, a buffer 609containing a complete wrap token in standard format to be unwrapped. 610 611\item {} 612\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_SIGN\_ONLY}: A buffer to be included in the 613token’s integrity protection checksum, but not to be encrypted or 614included in the token itself. 615 616\end{itemize} 617 618For gss\_wrap\_iov, the IOV list should contain one HEADER buffer, 619followed by zero or more SIGN\_ONLY buffers, followed by one or more 620DATA buffers, followed by a TRAILER buffer. The memory pointed to by 621the buffers is not required to be contiguous or in any particular 622order. If \sphinxstyleemphasis{conf\_req\_flag} is true, DATA buffers will be encrypted 623in-place, while SIGN\_ONLY buffers will not be modified. 624 625The type of an output buffer may be combined with 626\sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATE} to request that gss\_wrap\_iov allocate 627the buffer contents. If gss\_wrap\_iov allocates a buffer, it sets the 628\sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATED} flag on the buffer type. 629gss\_release\_iov\_buffer can be used to release all allocated buffers 630within an iov list and unset their allocated flags. Here is an 631example of how gss\_wrap\_iov can be used with allocation requested 632(\sphinxstyleemphasis{ctx} is assumed to be a previously established gss\_ctx\_id\_t): 633 634\fvset{hllines={, ,}}% 635\begin{sphinxVerbatim}[commandchars=\\\{\}] 636\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;} 637\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{4}\PYG{p}{]}\PYG{p}{;} 638\PYG{n}{char} \PYG{n+nb}{str}\PYG{p}{[}\PYG{p}{]} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{message}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{;} 639 640\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}HEADER} \PYG{o}{\textbar{}} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}FLAG\PYGZus{}ALLOCATE}\PYG{p}{;} 641\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}DATA}\PYG{p}{;} 642\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{n+nb}{str}\PYG{p}{;} 643\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{=} \PYG{n}{strlen}\PYG{p}{(}\PYG{n+nb}{str}\PYG{p}{)}\PYG{p}{;} 644\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}PADDING} \PYG{o}{\textbar{}} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}FLAG\PYGZus{}ALLOCATE}\PYG{p}{;} 645\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{3}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}TRAILER} \PYG{o}{\textbar{}} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}FLAG\PYGZus{}ALLOCATE}\PYG{p}{;} 646 647\PYG{n}{major} \PYG{o}{=} \PYG{n}{gss\PYGZus{}wrap\PYGZus{}iov}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{minor}\PYG{p}{,} \PYG{n}{ctx}\PYG{p}{,} \PYG{l+m+mi}{1}\PYG{p}{,} \PYG{n}{GSS\PYGZus{}C\PYGZus{}QOP\PYGZus{}DEFAULT}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} 648 \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{4}\PYG{p}{)}\PYG{p}{;} 649\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)} 650 \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;} 651 652\PYG{o}{/}\PYG{o}{*} \PYG{n}{Transmit} \PYG{o+ow}{or} \PYG{n}{otherwise} \PYG{n}{use} \PYG{n}{resulting} \PYG{n}{buffers}\PYG{o}{.} \PYG{o}{*}\PYG{o}{/} 653 654\PYG{p}{(}\PYG{n}{void}\PYG{p}{)}\PYG{n}{gss\PYGZus{}release\PYGZus{}iov\PYGZus{}buffer}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{minor}\PYG{p}{,} \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{4}\PYG{p}{)}\PYG{p}{;} 655\end{sphinxVerbatim} 656 657If the caller does not choose to request buffer allocation by 658gss\_wrap\_iov, it should first call gss\_wrap\_iov\_length to query the 659lengths of the HEADER, PADDING, and TRAILER buffers. DATA buffers 660must be provided in the iov list so that padding length can be 661computed correctly, but the output buffers need not be initialized. 662Here is an example of using gss\_wrap\_iov\_length and gss\_wrap\_iov: 663 664\fvset{hllines={, ,}}% 665\begin{sphinxVerbatim}[commandchars=\\\{\}] 666\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;} 667\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{4}\PYG{p}{]}\PYG{p}{;} 668\PYG{n}{char} \PYG{n+nb}{str}\PYG{p}{[}\PYG{l+m+mi}{1024}\PYG{p}{]} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{message}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,} \PYG{o}{*}\PYG{n}{ptr}\PYG{p}{;} 669 670\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}HEADER}\PYG{p}{;} 671\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}DATA}\PYG{p}{;} 672\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{n+nb}{str}\PYG{p}{;} 673\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{=} \PYG{n}{strlen}\PYG{p}{(}\PYG{n+nb}{str}\PYG{p}{)}\PYG{p}{;} 674 675\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}PADDING}\PYG{p}{;} 676\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{3}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}TRAILER}\PYG{p}{;} 677 678\PYG{n}{major} \PYG{o}{=} \PYG{n}{gss\PYGZus{}wrap\PYGZus{}iov\PYGZus{}length}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{minor}\PYG{p}{,} \PYG{n}{ctx}\PYG{p}{,} \PYG{l+m+mi}{1}\PYG{p}{,} \PYG{n}{GSS\PYGZus{}C\PYGZus{}QOP\PYGZus{}DEFAULT}\PYG{p}{,} 679 \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{4}\PYG{p}{)}\PYG{p}{;} 680\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)} 681 \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;} 682\PYG{k}{if} \PYG{p}{(}\PYG{n}{strlen}\PYG{p}{(}\PYG{n+nb}{str}\PYG{p}{)} \PYG{o}{+} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{+} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{+} 683 \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{3}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{\PYGZgt{}} \PYG{n}{sizeof}\PYG{p}{(}\PYG{n+nb}{str}\PYG{p}{)}\PYG{p}{)} 684 \PYG{n}{handle\PYGZus{}out\PYGZus{}of\PYGZus{}space\PYGZus{}error}\PYG{p}{(}\PYG{p}{)}\PYG{p}{;} 685\PYG{n}{ptr} \PYG{o}{=} \PYG{n+nb}{str} \PYG{o}{+} \PYG{n}{strlen}\PYG{p}{(}\PYG{n+nb}{str}\PYG{p}{)}\PYG{p}{;} 686\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{n}{ptr}\PYG{p}{;} 687\PYG{n}{ptr} \PYG{o}{+}\PYG{o}{=} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length}\PYG{p}{;} 688\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{n}{ptr}\PYG{p}{;} 689\PYG{n}{ptr} \PYG{o}{+}\PYG{o}{=} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length}\PYG{p}{;} 690\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{3}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{n}{ptr}\PYG{p}{;} 691 692\PYG{n}{major} \PYG{o}{=} \PYG{n}{gss\PYGZus{}wrap\PYGZus{}iov}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{minor}\PYG{p}{,} \PYG{n}{ctx}\PYG{p}{,} \PYG{l+m+mi}{1}\PYG{p}{,} \PYG{n}{GSS\PYGZus{}C\PYGZus{}QOP\PYGZus{}DEFAULT}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} 693 \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{4}\PYG{p}{)}\PYG{p}{;} 694\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)} 695 \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;} 696\end{sphinxVerbatim} 697 698If the context was established using the \sphinxstylestrong{GSS\_C\_DCE\_STYLE} flag 699(described in \index{RFC!RFC 4757}\sphinxhref{https://tools.ietf.org/html/rfc4757.html}{\sphinxstylestrong{RFC 4757}}), wrap tokens compatible with Microsoft DCE 700RPC can be constructed. In this case, the IOV list must include a 701SIGN\_ONLY buffer, a DATA buffer, a second SIGN\_ONLY buffer, and a 702HEADER buffer in that order (the order of the buffer contents remains 703arbitrary). The application must pad the DATA buffer to a multiple of 70416 bytes as no padding or trailer buffer is used. 705 706gss\_unwrap\_iov may be called with an IOV list just like one which 707would be provided to gss\_wrap\_iov. DATA buffers will be decrypted 708in-place if they were encrypted, and SIGN\_ONLY buffers will not be 709modified. 710 711Alternatively, gss\_unwrap\_iov may be called with a single STREAM 712buffer, zero or more SIGN\_ONLY buffers, and a single DATA buffer. The 713STREAM buffer is interpreted as a complete wrap token. The STREAM 714buffer will be modified in-place to decrypt its contents. The DATA 715buffer will be initialized to point to the decrypted data within the 716STREAM buffer, unless it has the \sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATE} flag 717set, in which case it will be initialized with a copy of the decrypted 718data. Here is an example (\sphinxstyleemphasis{token} and \sphinxstyleemphasis{token\_len} are assumed to be a 719pre-existing pointer and length for a modifiable region of data): 720 721\fvset{hllines={, ,}}% 722\begin{sphinxVerbatim}[commandchars=\\\{\}] 723\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;} 724\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{p}{;} 725 726\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}STREAM}\PYG{p}{;} 727\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{n}{token}\PYG{p}{;} 728\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{=} \PYG{n}{token\PYGZus{}len}\PYG{p}{;} 729\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}DATA}\PYG{p}{;} 730\PYG{n}{major} \PYG{o}{=} \PYG{n}{gss\PYGZus{}unwrap\PYGZus{}iov}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{minor}\PYG{p}{,} \PYG{n}{ctx}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{2}\PYG{p}{)}\PYG{p}{;} 731\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)} 732 \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;} 733 734\PYG{o}{/}\PYG{o}{*} \PYG{n}{Decrypted} \PYG{n}{data} \PYG{o+ow}{is} \PYG{o+ow}{in} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{p}{,} \PYG{n}{pointing} \PYG{n}{to} \PYG{n}{a} \PYG{n}{subregion} \PYG{n}{of} 735 \PYG{o}{*} \PYG{n}{token}\PYG{o}{.} \PYG{o}{*}\PYG{o}{/} 736\end{sphinxVerbatim} 737 738 739\section{IOV MIC tokens} 740\label{\detokenize{appdev/gssapi:gssapi-mic-token}}\label{\detokenize{appdev/gssapi:iov-mic-tokens}} 741The following extensions (declared in \sphinxcode{\textless{}gssapi/gssapi\_ext.h\textgreater{}}) can 742be used in release 1.12 or later to construct and verify MIC tokens 743using an IOV list: 744 745\fvset{hllines={, ,}}% 746\begin{sphinxVerbatim}[commandchars=\\\{\}] 747\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}get\PYGZus{}mic\PYGZus{}iov}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,} 748 \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,} 749 \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{n}{qop\PYGZus{}req}\PYG{p}{,} 750 \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,} 751 \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;} 752 753\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}get\PYGZus{}mic\PYGZus{}iov\PYGZus{}length}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,} 754 \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,} 755 \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{n}{qop\PYGZus{}req}\PYG{p}{,} 756 \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,} 757 \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;} 758 759\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}verify\PYGZus{}mic\PYGZus{}iov}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,} 760 \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,} 761 \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{o}{*}\PYG{n}{qop\PYGZus{}state}\PYG{p}{,} 762 \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,} 763 \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;} 764\end{sphinxVerbatim} 765 766The caller of gss\_get\_mic\_iov provides an array of gss\_iov\_buffer\_desc 767structures, each containing a type and a gss\_buffer\_desc structure. 768Valid types include: 769\begin{itemize} 770\item {} 771\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_DATA} and \sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_SIGN\_ONLY}: The 772corresponding buffer for each of these types will be signed for the 773MIC token, in the order provided. 774 775\item {} 776\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_MIC\_TOKEN}: The GSSAPI MIC token. 777 778\end{itemize} 779 780The type of the MIC\_TOKEN buffer may be combined with 781\sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATE} to request that gss\_get\_mic\_iov 782allocate the buffer contents. If gss\_get\_mic\_iov allocates the 783buffer, it sets the \sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATED} flag on the buffer 784type. gss\_release\_iov\_buffer can be used to release all allocated 785buffers within an iov list and unset their allocated flags. Here is 786an example of how gss\_get\_mic\_iov can be used with allocation 787requested (\sphinxstyleemphasis{ctx} is assumed to be a previously established 788gss\_ctx\_id\_t): 789 790\fvset{hllines={, ,}}% 791\begin{sphinxVerbatim}[commandchars=\\\{\}] 792\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;} 793\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{3}\PYG{p}{]}\PYG{p}{;} 794 795\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}DATA}\PYG{p}{;} 796\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{sign1}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{;} 797\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{=} \PYG{l+m+mi}{5}\PYG{p}{;} 798\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}SIGN\PYGZus{}ONLY}\PYG{p}{;} 799\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{sign2}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{;} 800\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{=} \PYG{l+m+mi}{5}\PYG{p}{;} 801\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}MIC\PYGZus{}TOKEN} \PYG{o}{\textbar{}} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}FLAG\PYGZus{}ALLOCATE}\PYG{p}{;} 802 803\PYG{n}{major} \PYG{o}{=} \PYG{n}{gss\PYGZus{}get\PYGZus{}mic\PYGZus{}iov}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{minor}\PYG{p}{,} \PYG{n}{ctx}\PYG{p}{,} \PYG{n}{GSS\PYGZus{}C\PYGZus{}QOP\PYGZus{}DEFAULT}\PYG{p}{,} \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{3}\PYG{p}{)}\PYG{p}{;} 804\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)} 805 \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;} 806 807\PYG{o}{/}\PYG{o}{*} \PYG{n}{Transmit} \PYG{o+ow}{or} \PYG{n}{otherwise} \PYG{n}{use} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.} \PYG{o}{*}\PYG{o}{/} 808 809\PYG{p}{(}\PYG{n}{void}\PYG{p}{)}\PYG{n}{gss\PYGZus{}release\PYGZus{}iov\PYGZus{}buffer}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{minor}\PYG{p}{,} \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{3}\PYG{p}{)}\PYG{p}{;} 810\end{sphinxVerbatim} 811 812If the caller does not choose to request buffer allocation by 813gss\_get\_mic\_iov, it should first call gss\_get\_mic\_iov\_length to query 814the length of the MIC\_TOKEN buffer. Here is an example of using 815gss\_get\_mic\_iov\_length and gss\_get\_mic\_iov: 816 817\fvset{hllines={, ,}}% 818\begin{sphinxVerbatim}[commandchars=\\\{\}] 819\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;} 820\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{p}{;} 821\PYG{n}{char} \PYG{n}{data}\PYG{p}{[}\PYG{l+m+mi}{1024}\PYG{p}{]}\PYG{p}{;} 822 823\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}MIC\PYGZus{}TOKEN}\PYG{p}{;} 824\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}DATA}\PYG{p}{;} 825\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{message}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{;} 826\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{=} \PYG{l+m+mi}{7}\PYG{p}{;} 827 828\PYG{n}{major} \PYG{o}{=} \PYG{n}{gss\PYGZus{}get\PYGZus{}mic\PYGZus{}iov\PYGZus{}length}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{minor}\PYG{p}{,} \PYG{n}{ctx}\PYG{p}{,} \PYG{n}{GSS\PYGZus{}C\PYGZus{}QOP\PYGZus{}DEFAULT}\PYG{p}{,} \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{2}\PYG{p}{)}\PYG{p}{;} 829\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)} 830 \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;} 831\PYG{k}{if} \PYG{p}{(}\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{\PYGZgt{}} \PYG{n}{sizeof}\PYG{p}{(}\PYG{n}{data}\PYG{p}{)}\PYG{p}{)} 832 \PYG{n}{handle\PYGZus{}out\PYGZus{}of\PYGZus{}space\PYGZus{}error}\PYG{p}{(}\PYG{p}{)}\PYG{p}{;} 833\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{n}{data}\PYG{p}{;} 834 835\PYG{n}{major} \PYG{o}{=} \PYG{n}{gss\PYGZus{}get\PYGZus{}mic\PYGZus{}iov}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{minor}\PYG{p}{,} \PYG{n}{ctx}\PYG{p}{,} \PYG{n}{GSS\PYGZus{}C\PYGZus{}QOP\PYGZus{}DEFAULT}\PYG{p}{,} \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{2}\PYG{p}{)}\PYG{p}{;} 836\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)} 837 \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;} 838\end{sphinxVerbatim} 839 840 841\chapter{Year 2038 considerations for uses of krb5\_timestamp} 842\label{\detokenize{appdev/y2038::doc}}\label{\detokenize{appdev/y2038:year-2038-considerations-for-uses-of-krb5-timestamp}} 843POSIX time values, which measure the number of seconds since January 1 8441970, will exceed the maximum value representable in a signed 32-bit 845integer in January 2038. This documentation describes considerations 846for consumers of the MIT krb5 libraries. 847 848Applications or libraries which use libkrb5 and consume the timestamps 849included in credentials or other structures make use of the 850{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\sphinxcode{krb5\_timestamp}}}} type. For historical reasons, krb5\_timestamp 851is a signed 32-bit integer, even on platforms where a larger type is 852natively used to represent time values. To behave properly for time 853values after January 2038, calling code should cast krb5\_timestamp 854values to uint32\_t, and then to time\_t: 855 856\fvset{hllines={, ,}}% 857\begin{sphinxVerbatim}[commandchars=\\\{\}] 858\PYG{p}{(}\PYG{n}{time\PYGZus{}t}\PYG{p}{)}\PYG{p}{(}\PYG{n}{uint32\PYGZus{}t}\PYG{p}{)}\PYG{n}{timestamp} 859\end{sphinxVerbatim} 860 861Used in this way, krb5\_timestamp values can represent time values up 862until February 2106, provided that the platform uses a 64-bit or 863larger time\_t type. This usage will also remain safe if a later 864version of MIT krb5 changes krb5\_timestamp to an unsigned 32-bit 865integer. 866 867The GSSAPI only uses representations of time intervals, not absolute 868times. Callers of the GSSAPI should require no changes to behave 869correctly after January 2038, provided that they use MIT krb5 release 8701.16 or later. 871 872 873\chapter{Differences between Heimdal and MIT Kerberos API} 874\label{\detokenize{appdev/h5l_mit_apidiff:differences-between-heimdal-and-mit-kerberos-api}}\label{\detokenize{appdev/h5l_mit_apidiff::doc}} 875 876\begin{savenotes}\sphinxattablestart 877\centering 878\begin{tabulary}{\linewidth}[t]{|l|l|} 879\hline 880 881{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_getaddrs:c.krb5_auth_con_getaddrs}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_getaddrs()}}}} 882& 883H5l: If either of the pointers to local\_addr 884and remote\_addr is not NULL, it is freed 885first and then reallocated before being 886populated with the content of corresponding 887address from authentication context. 888\\ 889\hline 890{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setaddrs:c.krb5_auth_con_setaddrs}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_setaddrs()}}}} 891& 892H5l: If either address is NULL, the previous 893address remains in place 894\\ 895\hline 896{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setports:c.krb5_auth_con_setports}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_setports()}}}} 897& 898H5l: Not implemented as of version 1.3.3 899\\ 900\hline 901{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey:c.krb5_auth_con_setrecvsubkey}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_setrecvsubkey()}}}} 902& 903H5l: If either port is NULL, the previous 904port remains in place 905\\ 906\hline 907{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey:c.krb5_auth_con_setsendsubkey}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_setsendsubkey()}}}} 908& 909H5l: Not implemented as of version 1.3.3 910\\ 911\hline 912{\hyperref[\detokenize{appdev/refs/api/krb5_cc_set_config:c.krb5_cc_set_config}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_set\_config()}}}} 913& 914MIT: Before version 1.10 it was assumed that 915the last argument \sphinxstyleemphasis{data} is ALWAYS non-zero. 916\\ 917\hline 918\sphinxcode{krb5\_cccol\_last\_change\_time()} 919& 920MIT: not implemented 921\\ 922\hline 923{\hyperref[\detokenize{appdev/refs/api/krb5_set_default_realm:c.krb5_set_default_realm}]{\sphinxcrossref{\sphinxcode{krb5\_set\_default\_realm()}}}} 924& 925H5l: Caches the computed default realm context 926field. If the second argument is NULL, 927it tries to retrieve it from libdefaults or DNS. 928MIT: Computes the default realm each time 929if it wasn’t explicitly set in the context 930\\ 931\hline 932\end{tabulary} 933\par 934\sphinxattableend\end{savenotes} 935 936 937\chapter{Initial credentials} 938\label{\detokenize{appdev/init_creds:initial-credentials}}\label{\detokenize{appdev/init_creds::doc}} 939Software that performs tasks such as logging users into a computer 940when they type their Kerberos password needs to get initial 941credentials (usually ticket granting tickets) from Kerberos. Such 942software shares some behavior with the \DUrole{xref,std,std-ref}{kinit(1)} program. 943 944Whenever a program grants access to a resource (such as a local login 945session on a desktop computer) based on a user successfully getting 946initial Kerberos credentials, it must verify those credentials against 947a secure shared secret (e.g., a host keytab) to ensure that the user 948credentials actually originate from a legitimate KDC. Failure to 949perform this verification is a critical vulnerability, because a 950malicious user can execute the “Zanarotti attack”: the user constructs 951a fake response that appears to come from the legitimate KDC, but 952whose contents come from an attacker-controlled KDC. 953 954Some applications read a Kerberos password over the network (ideally 955over a secure channel), which they then verify against the KDC. While 956this technique may be the only practical way to integrate Kerberos 957into some existing legacy systems, its use is contrary to the original 958design goals of Kerberos. 959 960The function {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_password()}}}} will get initial 961credentials for a client using a password. An application that needs 962to verify the credentials can call {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds()}}}}. 963Here is an example of code to obtain and verify TGT credentials, given 964strings \sphinxstyleemphasis{princname} and \sphinxstyleemphasis{password} for the client principal name and 965password: 966 967\fvset{hllines={, ,}}% 968\begin{sphinxVerbatim}[commandchars=\\\{\}] 969\PYG{n}{krb5\PYGZus{}error\PYGZus{}code} \PYG{n}{ret}\PYG{p}{;} 970\PYG{n}{krb5\PYGZus{}creds} \PYG{n}{creds}\PYG{p}{;} 971\PYG{n}{krb5\PYGZus{}principal} \PYG{n}{client\PYGZus{}princ} \PYG{o}{=} \PYG{n}{NULL}\PYG{p}{;} 972 973\PYG{n}{memset}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{,} \PYG{n}{sizeof}\PYG{p}{(}\PYG{n}{creds}\PYG{p}{)}\PYG{p}{)}\PYG{p}{;} 974\PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}parse\PYGZus{}name}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{princname}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{client\PYGZus{}princ}\PYG{p}{)}\PYG{p}{;} 975\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)} 976 \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;} 977\PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}password}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{n}{client\PYGZus{}princ}\PYG{p}{,} 978 \PYG{n}{password}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{)}\PYG{p}{;} 979\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)} 980 \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;} 981\PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}verify\PYGZus{}init\PYGZus{}creds}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{)}\PYG{p}{;} 982 983\PYG{n}{cleanup}\PYG{p}{:} 984\PYG{n}{krb5\PYGZus{}free\PYGZus{}principal}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{client\PYGZus{}princ}\PYG{p}{)}\PYG{p}{;} 985\PYG{n}{krb5\PYGZus{}free\PYGZus{}cred\PYGZus{}contents}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{)}\PYG{p}{;} 986\PYG{k}{return} \PYG{n}{ret}\PYG{p}{;} 987\end{sphinxVerbatim} 988 989 990\section{Options for get\_init\_creds} 991\label{\detokenize{appdev/init_creds:options-for-get-init-creds}} 992The function {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_password()}}}} takes an options 993parameter (which can be a null pointer). Use the function 994{\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_alloc:c.krb5_get_init_creds_opt_alloc}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_alloc()}}}} to allocate an options 995structure, and {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_free:c.krb5_get_init_creds_opt_free}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_free()}}}} to free it. For 996example: 997 998\fvset{hllines={, ,}}% 999\begin{sphinxVerbatim}[commandchars=\\\{\}] 1000\PYG{n}{krb5\PYGZus{}error\PYGZus{}code} \PYG{n}{ret}\PYG{p}{;} 1001\PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt} \PYG{o}{*}\PYG{n}{opt} \PYG{o}{=} \PYG{n}{NULL}\PYG{p}{;} 1002\PYG{n}{krb5\PYGZus{}creds} \PYG{n}{creds}\PYG{p}{;} 1003 1004\PYG{n}{memset}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{,} \PYG{n}{sizeof}\PYG{p}{(}\PYG{n}{creds}\PYG{p}{)}\PYG{p}{)}\PYG{p}{;} 1005\PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt\PYGZus{}alloc}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{opt}\PYG{p}{)}\PYG{p}{;} 1006\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)} 1007 \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;} 1008\PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt\PYGZus{}set\PYGZus{}tkt\PYGZus{}life}\PYG{p}{(}\PYG{n}{opt}\PYG{p}{,} \PYG{l+m+mi}{24} \PYG{o}{*} \PYG{l+m+mi}{60} \PYG{o}{*} \PYG{l+m+mi}{60}\PYG{p}{)}\PYG{p}{;} 1009\PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}password}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{n}{client\PYGZus{}princ}\PYG{p}{,} 1010 \PYG{n}{password}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{opt}\PYG{p}{)}\PYG{p}{;} 1011\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)} 1012 \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;} 1013 1014\PYG{n}{cleanup}\PYG{p}{:} 1015\PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt\PYGZus{}free}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{opt}\PYG{p}{)}\PYG{p}{;} 1016\PYG{n}{krb5\PYGZus{}free\PYGZus{}cred\PYGZus{}contents}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{)}\PYG{p}{;} 1017\PYG{k}{return} \PYG{n}{ret}\PYG{p}{;} 1018\end{sphinxVerbatim} 1019 1020 1021\section{Getting anonymous credentials} 1022\label{\detokenize{appdev/init_creds:getting-anonymous-credentials}} 1023As of release 1.8, it is possible to obtain fully anonymous or 1024partially anonymous (realm-exposed) credentials, if the KDC supports 1025it. The MIT KDC supports issuing fully anonymous credentials as of 1026release 1.8 if configured appropriately (see \DUrole{xref,std,std-ref}{anonymous\_pkinit}), 1027but does not support issuing realm-exposed anonymous credentials at 1028this time. 1029 1030To obtain fully anonymous credentials, call 1031{\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_anonymous:c.krb5_get_init_creds_opt_set_anonymous}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_set\_anonymous()}}}} on the options 1032structure to set the anonymous flag, and specify a client principal 1033with the KDC’s realm and a single empty data component (the principal 1034obtained by parsing \sphinxcode{@}\sphinxstyleemphasis{realmname}). Authentication will take 1035place using anonymous PKINIT; if successful, the client principal of 1036the resulting tickets will be 1037\sphinxcode{WELLKNOWN/ANONYMOUS@WELLKNOWN:ANONYMOUS}. Here is an example: 1038 1039\fvset{hllines={, ,}}% 1040\begin{sphinxVerbatim}[commandchars=\\\{\}] 1041\PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt\PYGZus{}set\PYGZus{}anonymous}\PYG{p}{(}\PYG{n}{opt}\PYG{p}{,} \PYG{l+m+mi}{1}\PYG{p}{)}\PYG{p}{;} 1042\PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}build\PYGZus{}principal}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{client\PYGZus{}princ}\PYG{p}{,} \PYG{n}{strlen}\PYG{p}{(}\PYG{n}{myrealm}\PYG{p}{)}\PYG{p}{,} 1043 \PYG{n}{myrealm}\PYG{p}{,} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,} \PYG{p}{(}\PYG{n}{char} \PYG{o}{*}\PYG{p}{)}\PYG{n}{NULL}\PYG{p}{)}\PYG{p}{;} 1044\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)} 1045 \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;} 1046\PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}password}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{n}{client\PYGZus{}princ}\PYG{p}{,} 1047 \PYG{n}{password}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{opt}\PYG{p}{)}\PYG{p}{;} 1048\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)} 1049 \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;} 1050\end{sphinxVerbatim} 1051 1052To obtain realm-exposed anonymous credentials, set the anonymous flag 1053on the options structure as above, but specify a normal client 1054principal in order to prove membership in the realm. Authentication 1055will take place as it normally does; if successful, the client 1056principal of the resulting tickets will be \sphinxcode{WELLKNOWN/ANONYMOUS@}\sphinxstyleemphasis{realmname}. 1057 1058 1059\section{User interaction} 1060\label{\detokenize{appdev/init_creds:user-interaction}} 1061Authenticating a user usually requires the entry of secret 1062information, such as a password. A password can be supplied directly 1063to {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_password()}}}} via the \sphinxstyleemphasis{password} 1064parameter, or the application can supply prompter and/or responder 1065callbacks instead. If callbacks are used, the user can also be 1066queried for other secret information such as a PIN, informed of 1067impending password expiration, or prompted to change a password which 1068has expired. 1069 1070 1071\subsection{Prompter callback} 1072\label{\detokenize{appdev/init_creds:prompter-callback}} 1073A prompter callback can be specified via the \sphinxstyleemphasis{prompter} and \sphinxstyleemphasis{data} 1074parameters to {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_password()}}}}. The prompter 1075will be invoked each time the krb5 library has a question to ask or 1076information to present. When the prompter callback is invoked, the 1077\sphinxstyleemphasis{banner} argument (if not null) is intended to be displayed to the 1078user, and the questions to be answered are specified in the \sphinxstyleemphasis{prompts} 1079array. Each prompt contains a text question in the \sphinxstyleemphasis{prompt} field, a 1080\sphinxstyleemphasis{hidden} bit to indicate whether the answer should be hidden from 1081display, and a storage area for the answer in the \sphinxstyleemphasis{reply} field. The 1082callback should fill in each question’s \sphinxcode{reply-\textgreater{}data} with the 1083answer, up to a maximum number of \sphinxcode{reply-\textgreater{}length} bytes, and then 1084reset \sphinxcode{reply-\textgreater{}length} to the length of the answer. 1085 1086A prompter callback can call {\hyperref[\detokenize{appdev/refs/api/krb5_get_prompt_types:c.krb5_get_prompt_types}]{\sphinxcrossref{\sphinxcode{krb5\_get\_prompt\_types()}}}} to get an 1087array of type constants corresponding to the prompts, to get 1088programmatic information about the semantic meaning of the questions. 1089{\hyperref[\detokenize{appdev/refs/api/krb5_get_prompt_types:c.krb5_get_prompt_types}]{\sphinxcrossref{\sphinxcode{krb5\_get\_prompt\_types()}}}} may return a null pointer if no prompt 1090type information is available. 1091 1092Text-based applications can use a built-in text prompter 1093implementation by supplying {\hyperref[\detokenize{appdev/refs/api/krb5_prompter_posix:c.krb5_prompter_posix}]{\sphinxcrossref{\sphinxcode{krb5\_prompter\_posix()}}}} as the 1094\sphinxstyleemphasis{prompter} parameter and a null pointer as the \sphinxstyleemphasis{data} parameter. For 1095example: 1096 1097\fvset{hllines={, ,}}% 1098\begin{sphinxVerbatim}[commandchars=\\\{\}] 1099\PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}password}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{n}{client\PYGZus{}princ}\PYG{p}{,} 1100 \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{krb5\PYGZus{}prompter\PYGZus{}posix}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{,} 1101 \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{)}\PYG{p}{;} 1102\end{sphinxVerbatim} 1103 1104 1105\subsection{Responder callback} 1106\label{\detokenize{appdev/init_creds:responder-callback}} 1107A responder callback can be specified through the init\_creds options 1108using the {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_responder:c.krb5_get_init_creds_opt_set_responder}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_set\_responder()}}}} function. 1109Responder callbacks can present a more sophisticated user interface 1110for authentication secrets. The responder callback is usually invoked 1111only once per authentication, with a list of questions produced by all 1112of the allowed preauthentication mechanisms. 1113 1114When the responder callback is invoked, the \sphinxstyleemphasis{rctx} argument can be 1115accessed to obtain the list of questions and to answer them. The 1116{\hyperref[\detokenize{appdev/refs/api/krb5_responder_list_questions:c.krb5_responder_list_questions}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_list\_questions()}}}} function retrieves an array of 1117question types. For each question type, the 1118{\hyperref[\detokenize{appdev/refs/api/krb5_responder_get_challenge:c.krb5_responder_get_challenge}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_get\_challenge()}}}} function retrieves additional 1119information about the question, if applicable, and the 1120{\hyperref[\detokenize{appdev/refs/api/krb5_responder_set_answer:c.krb5_responder_set_answer}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_set\_answer()}}}} function sets the answer. 1121 1122Responder question types, challenges, and answers are UTF-8 strings. 1123The question type is a well-known string; the meaning of the challenge 1124and answer depend on the question type. If an application does not 1125understand a question type, it cannot interpret the challenge or 1126provide an answer. Failing to answer a question typically results in 1127the prompter callback being used as a fallback. 1128 1129 1130\subsubsection{Password question} 1131\label{\detokenize{appdev/init_creds:password-question}} 1132The \sphinxcode{KRB5\_RESPONDER\_QUESTION\_PASSWORD} (or \sphinxcode{"password"}) 1133question type requests the user’s password. This question does not 1134have a challenge, and the response is simply the password string. 1135 1136 1137\subsubsection{One-time password question} 1138\label{\detokenize{appdev/init_creds:one-time-password-question}} 1139The \sphinxcode{KRB5\_RESPONDER\_QUESTION\_OTP} (or \sphinxcode{"otp"}) question 1140type requests a choice among one-time password tokens and the PIN and 1141value for the chosen token. The challenge and answer are JSON-encoded 1142strings, but an application can use convenience functions to avoid 1143doing any JSON processing itself. 1144 1145The {\hyperref[\detokenize{appdev/refs/api/krb5_responder_otp_get_challenge:c.krb5_responder_otp_get_challenge}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_otp\_get\_challenge()}}}} function decodes the 1146challenge into a krb5\_responder\_otp\_challenge structure. The 1147{\hyperref[\detokenize{appdev/refs/api/krb5_responder_otp_set_answer:c.krb5_responder_otp_set_answer}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_otp\_set\_answer()}}}} function selects one of the 1148token information elements from the challenge and supplies the value 1149and pin for that token. 1150 1151 1152\subsubsection{PKINIT password or PIN question} 1153\label{\detokenize{appdev/init_creds:pkinit-password-or-pin-question}} 1154The \sphinxcode{KRB5\_RESPONDER\_QUESTION\_PKINIT} (or \sphinxcode{"pkinit"}) question 1155type requests PINs for hardware devices and/or passwords for encrypted 1156credentials which are stored on disk, potentially also supplying 1157information about the state of the hardware devices. The challenge and 1158answer are JSON-encoded strings, but an application can use convenience 1159functions to avoid doing any JSON processing itself. 1160 1161The {\hyperref[\detokenize{appdev/refs/api/krb5_responder_pkinit_get_challenge:c.krb5_responder_pkinit_get_challenge}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_pkinit\_get\_challenge()}}}} function decodes the 1162challenges into a krb5\_responder\_pkinit\_challenge structure. The 1163{\hyperref[\detokenize{appdev/refs/api/krb5_responder_pkinit_set_answer:c.krb5_responder_pkinit_set_answer}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_pkinit\_set\_answer()}}}} function can be used to 1164supply the PIN or password for a particular client credential, and can 1165be called multiple times. 1166 1167 1168\subsubsection{Example} 1169\label{\detokenize{appdev/init_creds:example}} 1170Here is an example of using a responder callback: 1171 1172\fvset{hllines={, ,}}% 1173\begin{sphinxVerbatim}[commandchars=\\\{\}] 1174\PYG{n}{static} \PYG{n}{krb5\PYGZus{}error\PYGZus{}code} 1175\PYG{n}{my\PYGZus{}responder}\PYG{p}{(}\PYG{n}{krb5\PYGZus{}context} \PYG{n}{context}\PYG{p}{,} \PYG{n}{void} \PYG{o}{*}\PYG{n}{data}\PYG{p}{,} 1176 \PYG{n}{krb5\PYGZus{}responder\PYGZus{}context} \PYG{n}{rctx}\PYG{p}{)} 1177\PYG{p}{\PYGZob{}} 1178 \PYG{n}{krb5\PYGZus{}error\PYGZus{}code} \PYG{n}{ret}\PYG{p}{;} 1179 \PYG{n}{krb5\PYGZus{}responder\PYGZus{}otp\PYGZus{}challenge} \PYG{o}{*}\PYG{n}{chl}\PYG{p}{;} 1180 1181 \PYG{k}{if} \PYG{p}{(}\PYG{n}{krb5\PYGZus{}responder\PYGZus{}get\PYGZus{}challenge}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{rctx}\PYG{p}{,} 1182 \PYG{n}{KRB5\PYGZus{}RESPONDER\PYGZus{}QUESTION\PYGZus{}PASSWORD}\PYG{p}{)}\PYG{p}{)} \PYG{p}{\PYGZob{}} 1183 \PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}responder\PYGZus{}set\PYGZus{}answer}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{rctx}\PYG{p}{,} 1184 \PYG{n}{KRB5\PYGZus{}RESPONDER\PYGZus{}QUESTION\PYGZus{}PASSWORD}\PYG{p}{,} 1185 \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{open sesame}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{)}\PYG{p}{;} 1186 \PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)} 1187 \PYG{k}{return} \PYG{n}{ret}\PYG{p}{;} 1188 \PYG{p}{\PYGZcb{}} 1189 \PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}responder\PYGZus{}otp\PYGZus{}get\PYGZus{}challenge}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{rctx}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{chl}\PYG{p}{)}\PYG{p}{;} 1190 \PYG{k}{if} \PYG{p}{(}\PYG{n}{ret} \PYG{o}{==} \PYG{l+m+mi}{0} \PYG{o}{\PYGZam{}}\PYG{o}{\PYGZam{}} \PYG{n}{chl} \PYG{o}{!=} \PYG{n}{NULL}\PYG{p}{)} \PYG{p}{\PYGZob{}} 1191 \PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}responder\PYGZus{}otp\PYGZus{}set\PYGZus{}answer}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{rctx}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{,} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{1234}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,} 1192 \PYG{n}{NULL}\PYG{p}{)}\PYG{p}{;} 1193 \PYG{n}{krb5\PYGZus{}responder\PYGZus{}otp\PYGZus{}challenge\PYGZus{}free}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{rctx}\PYG{p}{,} \PYG{n}{chl}\PYG{p}{)}\PYG{p}{;} 1194 \PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)} 1195 \PYG{k}{return} \PYG{n}{ret}\PYG{p}{;} 1196 \PYG{p}{\PYGZcb{}} 1197 \PYG{k}{return} \PYG{l+m+mi}{0}\PYG{p}{;} 1198\PYG{p}{\PYGZcb{}} 1199 1200\PYG{n}{static} \PYG{n}{krb5\PYGZus{}error\PYGZus{}code} 1201\PYG{n}{get\PYGZus{}creds}\PYG{p}{(}\PYG{n}{krb5\PYGZus{}context} \PYG{n}{context}\PYG{p}{,} \PYG{n}{krb5\PYGZus{}principal} \PYG{n}{client\PYGZus{}princ}\PYG{p}{)} 1202\PYG{p}{\PYGZob{}} 1203 \PYG{n}{krb5\PYGZus{}error\PYGZus{}code} \PYG{n}{ret}\PYG{p}{;} 1204 \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt} \PYG{o}{*}\PYG{n}{opt} \PYG{o}{=} \PYG{n}{NULL}\PYG{p}{;} 1205 \PYG{n}{krb5\PYGZus{}creds} \PYG{n}{creds}\PYG{p}{;} 1206 1207 \PYG{n}{memset}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{,} \PYG{n}{sizeof}\PYG{p}{(}\PYG{n}{creds}\PYG{p}{)}\PYG{p}{)}\PYG{p}{;} 1208 \PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt\PYGZus{}alloc}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{opt}\PYG{p}{)}\PYG{p}{;} 1209 \PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)} 1210 \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;} 1211 \PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt\PYGZus{}set\PYGZus{}responder}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{opt}\PYG{p}{,} \PYG{n}{my\PYGZus{}responder}\PYG{p}{,} 1212 \PYG{n}{NULL}\PYG{p}{)}\PYG{p}{;} 1213 \PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)} 1214 \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;} 1215 \PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}password}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{n}{client\PYGZus{}princ}\PYG{p}{,} 1216 \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{opt}\PYG{p}{)}\PYG{p}{;} 1217 1218\PYG{n}{cleanup}\PYG{p}{:} 1219 \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt\PYGZus{}free}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{opt}\PYG{p}{)}\PYG{p}{;} 1220 \PYG{n}{krb5\PYGZus{}free\PYGZus{}cred\PYGZus{}contents}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{)}\PYG{p}{;} 1221 \PYG{k}{return} \PYG{n}{ret}\PYG{p}{;} 1222\PYG{p}{\PYGZcb{}} 1223\end{sphinxVerbatim} 1224 1225 1226\section{Verifying initial credentials} 1227\label{\detokenize{appdev/init_creds:verifying-initial-credentials}} 1228Use the function {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds()}}}} to verify initial 1229credentials. It takes an options structure (which can be a null 1230pointer). Use {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_init:c.krb5_verify_init_creds_opt_init}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds\_opt\_init()}}}} to initialize 1231the caller-allocated options structure, and 1232{\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_set_ap_req_nofail:c.krb5_verify_init_creds_opt_set_ap_req_nofail}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds\_opt\_set\_ap\_req\_nofail()}}}} to set the 1233“nofail” option. For example: 1234 1235\fvset{hllines={, ,}}% 1236\begin{sphinxVerbatim}[commandchars=\\\{\}] 1237\PYG{n}{krb5\PYGZus{}verify\PYGZus{}init\PYGZus{}creds\PYGZus{}opt} \PYG{n}{vopt}\PYG{p}{;} 1238 1239\PYG{n}{krb5\PYGZus{}verify\PYGZus{}init\PYGZus{}creds\PYGZus{}opt\PYGZus{}init}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{vopt}\PYG{p}{)}\PYG{p}{;} 1240\PYG{n}{krb5\PYGZus{}verify\PYGZus{}init\PYGZus{}creds\PYGZus{}opt\PYGZus{}set\PYGZus{}ap\PYGZus{}req\PYGZus{}nofail}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{vopt}\PYG{p}{,} \PYG{l+m+mi}{1}\PYG{p}{)}\PYG{p}{;} 1241\PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}verify\PYGZus{}init\PYGZus{}creds}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{vopt}\PYG{p}{)}\PYG{p}{;} 1242\end{sphinxVerbatim} 1243 1244The confusingly named “nofail” option, when set, means that the 1245verification must actually succeed in order for 1246{\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds()}}}} to indicate success. The default 1247state of this option (cleared) means that if there is no key material 1248available to verify the user credentials, the verification will 1249succeed anyway. (The default can be changed by a configuration file 1250setting.) 1251 1252This accommodates a use case where a large number of unkeyed shared 1253desktop workstations need to allow users to log in using Kerberos. 1254The security risks from this practice are mitigated by the absence of 1255valuable state on the shared workstations—any valuable resources 1256that the users would access reside on networked servers. 1257 1258 1259\chapter{Principal manipulation and parsing} 1260\label{\detokenize{appdev/princ_handle:principal-manipulation-and-parsing}}\label{\detokenize{appdev/princ_handle::doc}} 1261Kerberos principal structure 1262 1263{\hyperref[\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_data}}}} 1264 1265{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\sphinxcode{krb5\_principal}}}} 1266 1267Create and free principal 1268 1269{\hyperref[\detokenize{appdev/refs/api/krb5_build_principal:c.krb5_build_principal}]{\sphinxcrossref{\sphinxcode{krb5\_build\_principal()}}}} 1270 1271{\hyperref[\detokenize{appdev/refs/api/krb5_build_principal_alloc_va:c.krb5_build_principal_alloc_va}]{\sphinxcrossref{\sphinxcode{krb5\_build\_principal\_alloc\_va()}}}} 1272 1273{\hyperref[\detokenize{appdev/refs/api/krb5_build_principal_ext:c.krb5_build_principal_ext}]{\sphinxcrossref{\sphinxcode{krb5\_build\_principal\_ext()}}}} 1274 1275{\hyperref[\detokenize{appdev/refs/api/krb5_copy_principal:c.krb5_copy_principal}]{\sphinxcrossref{\sphinxcode{krb5\_copy\_principal()}}}} 1276 1277{\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}} 1278 1279{\hyperref[\detokenize{appdev/refs/api/krb5_cc_get_principal:c.krb5_cc_get_principal}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_get\_principal()}}}} 1280 1281Comparing 1282 1283{\hyperref[\detokenize{appdev/refs/api/krb5_principal_compare:c.krb5_principal_compare}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_compare()}}}} 1284 1285{\hyperref[\detokenize{appdev/refs/api/krb5_principal_compare_flags:c.krb5_principal_compare_flags}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_compare\_flags()}}}} 1286 1287{\hyperref[\detokenize{appdev/refs/api/krb5_principal_compare_any_realm:c.krb5_principal_compare_any_realm}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_compare\_any\_realm()}}}} 1288 1289{\hyperref[\detokenize{appdev/refs/api/krb5_sname_match:c.krb5_sname_match}]{\sphinxcrossref{\sphinxcode{krb5\_sname\_match()}}}} 1290 1291{\hyperref[\detokenize{appdev/refs/api/krb5_sname_to_principal:c.krb5_sname_to_principal}]{\sphinxcrossref{\sphinxcode{krb5\_sname\_to\_principal()}}}} 1292 1293Parsing: 1294 1295{\hyperref[\detokenize{appdev/refs/api/krb5_parse_name:c.krb5_parse_name}]{\sphinxcrossref{\sphinxcode{krb5\_parse\_name()}}}} 1296 1297{\hyperref[\detokenize{appdev/refs/api/krb5_parse_name_flags:c.krb5_parse_name_flags}]{\sphinxcrossref{\sphinxcode{krb5\_parse\_name\_flags()}}}} 1298 1299{\hyperref[\detokenize{appdev/refs/api/krb5_unparse_name:c.krb5_unparse_name}]{\sphinxcrossref{\sphinxcode{krb5\_unparse\_name()}}}} 1300 1301{\hyperref[\detokenize{appdev/refs/api/krb5_unparse_name_flags:c.krb5_unparse_name_flags}]{\sphinxcrossref{\sphinxcode{krb5\_unparse\_name\_flags()}}}} 1302 1303Utilities: 1304 1305{\hyperref[\detokenize{appdev/refs/api/krb5_is_config_principal:c.krb5_is_config_principal}]{\sphinxcrossref{\sphinxcode{krb5\_is\_config\_principal()}}}} 1306 1307{\hyperref[\detokenize{appdev/refs/api/krb5_kuserok:c.krb5_kuserok}]{\sphinxcrossref{\sphinxcode{krb5\_kuserok()}}}} 1308 1309{\hyperref[\detokenize{appdev/refs/api/krb5_set_password:c.krb5_set_password}]{\sphinxcrossref{\sphinxcode{krb5\_set\_password()}}}} 1310 1311{\hyperref[\detokenize{appdev/refs/api/krb5_set_password_using_ccache:c.krb5_set_password_using_ccache}]{\sphinxcrossref{\sphinxcode{krb5\_set\_password\_using\_ccache()}}}} 1312 1313{\hyperref[\detokenize{appdev/refs/api/krb5_set_principal_realm:c.krb5_set_principal_realm}]{\sphinxcrossref{\sphinxcode{krb5\_set\_principal\_realm()}}}} 1314 1315{\hyperref[\detokenize{appdev/refs/api/krb5_realm_compare:c.krb5_realm_compare}]{\sphinxcrossref{\sphinxcode{krb5\_realm\_compare()}}}} 1316 1317 1318\chapter{Complete reference - API and datatypes} 1319\label{\detokenize{appdev/refs/index:complete-reference-api-and-datatypes}}\label{\detokenize{appdev/refs/index::doc}} 1320 1321\section{krb5 API} 1322\label{\detokenize{appdev/refs/api/index:krb5-api}}\label{\detokenize{appdev/refs/api/index::doc}} 1323 1324\subsection{Frequently used public interfaces} 1325\label{\detokenize{appdev/refs/api/index:frequently-used-public-interfaces}} 1326 1327\subsubsection{krb5\_build\_principal - Build a principal name using null-terminated strings.} 1328\label{\detokenize{appdev/refs/api/krb5_build_principal:krb5-build-principal-build-a-principal-name-using-null-terminated-strings}}\label{\detokenize{appdev/refs/api/krb5_build_principal::doc}}\index{krb5\_build\_principal (C function)} 1329 1330\begin{fulllineitems} 1331\phantomsection\label{\detokenize{appdev/refs/api/krb5_build_principal:c.krb5_build_principal}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_build\_principal}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ princ}, unsigned int\sphinxstyleemphasis{ rlen}, const char *\sphinxstyleemphasis{ realm}, ...}{} 1332\end{fulllineitems} 1333 1334\begin{quote}\begin{description} 1335\item[{param}] \leavevmode 1336\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1337 1338\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ} - Principal name 1339 1340\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rlen} - Realm name length 1341 1342\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm name 1343 1344\end{description}\end{quote} 1345\begin{quote}\begin{description} 1346\item[{retval}] \leavevmode\begin{itemize} 1347\item {} 13480 Success 1349 1350\end{itemize} 1351 1352\item[{return}] \leavevmode\begin{itemize} 1353\item {} 1354Kerberos error codes 1355 1356\end{itemize} 1357 1358\end{description}\end{quote} 1359 1360Call {\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}} to free \sphinxstyleemphasis{princ} when it is no longer needed. 1361 1362\begin{sphinxadmonition}{note}{Note:} 1363{\hyperref[\detokenize{appdev/refs/api/krb5_build_principal:c.krb5_build_principal}]{\sphinxcrossref{\sphinxcode{krb5\_build\_principal()}}}} and {\hyperref[\detokenize{appdev/refs/api/krb5_build_principal_alloc_va:c.krb5_build_principal_alloc_va}]{\sphinxcrossref{\sphinxcode{krb5\_build\_principal\_alloc\_va()}}}} perform the same task. {\hyperref[\detokenize{appdev/refs/api/krb5_build_principal:c.krb5_build_principal}]{\sphinxcrossref{\sphinxcode{krb5\_build\_principal()}}}} takes variadic arguments. {\hyperref[\detokenize{appdev/refs/api/krb5_build_principal_alloc_va:c.krb5_build_principal_alloc_va}]{\sphinxcrossref{\sphinxcode{krb5\_build\_principal\_alloc\_va()}}}} takes a pre-computed \sphinxstyleemphasis{varargs} pointer. 1364\end{sphinxadmonition} 1365 1366 1367\subsubsection{krb5\_build\_principal\_alloc\_va - Build a principal name, using a precomputed variable argument list.} 1368\label{\detokenize{appdev/refs/api/krb5_build_principal_alloc_va:krb5-build-principal-alloc-va-build-a-principal-name-using-a-precomputed-variable-argument-list}}\label{\detokenize{appdev/refs/api/krb5_build_principal_alloc_va::doc}}\index{krb5\_build\_principal\_alloc\_va (C function)} 1369 1370\begin{fulllineitems} 1371\phantomsection\label{\detokenize{appdev/refs/api/krb5_build_principal_alloc_va:c.krb5_build_principal_alloc_va}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_build\_principal\_alloc\_va}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ princ}, unsigned int\sphinxstyleemphasis{ rlen}, const char *\sphinxstyleemphasis{ realm}, va\_list\sphinxstyleemphasis{ ap}}{} 1372\end{fulllineitems} 1373 1374\begin{quote}\begin{description} 1375\item[{param}] \leavevmode 1376\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1377 1378\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ} - Principal structure 1379 1380\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rlen} - Realm name length 1381 1382\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm name 1383 1384\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap} - List of char * components, ending with NULL 1385 1386\end{description}\end{quote} 1387\begin{quote}\begin{description} 1388\item[{retval}] \leavevmode\begin{itemize} 1389\item {} 13900 Success 1391 1392\end{itemize} 1393 1394\item[{return}] \leavevmode\begin{itemize} 1395\item {} 1396Kerberos error codes 1397 1398\end{itemize} 1399 1400\end{description}\end{quote} 1401 1402Similar to {\hyperref[\detokenize{appdev/refs/api/krb5_build_principal:c.krb5_build_principal}]{\sphinxcrossref{\sphinxcode{krb5\_build\_principal()}}}} , this function builds a principal name, but its name components are specified as a va\_list. 1403 1404Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}} to deallocate \sphinxstyleemphasis{princ} when it is no longer needed. 1405 1406 1407\subsubsection{krb5\_build\_principal\_ext - Build a principal name using length-counted strings.} 1408\label{\detokenize{appdev/refs/api/krb5_build_principal_ext:krb5-build-principal-ext-build-a-principal-name-using-length-counted-strings}}\label{\detokenize{appdev/refs/api/krb5_build_principal_ext::doc}}\index{krb5\_build\_principal\_ext (C function)} 1409 1410\begin{fulllineitems} 1411\phantomsection\label{\detokenize{appdev/refs/api/krb5_build_principal_ext:c.krb5_build_principal_ext}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_build\_principal\_ext}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ princ}, unsigned int\sphinxstyleemphasis{ rlen}, const char *\sphinxstyleemphasis{ realm}, ...}{} 1412\end{fulllineitems} 1413 1414\begin{quote}\begin{description} 1415\item[{param}] \leavevmode 1416\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1417 1418\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ} - Principal name 1419 1420\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rlen} - Realm name length 1421 1422\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm name 1423 1424\end{description}\end{quote} 1425\begin{quote}\begin{description} 1426\item[{retval}] \leavevmode\begin{itemize} 1427\item {} 14280 Success 1429 1430\end{itemize} 1431 1432\item[{return}] \leavevmode\begin{itemize} 1433\item {} 1434Kerberos error codes 1435 1436\end{itemize} 1437 1438\end{description}\end{quote} 1439 1440This function creates a principal from a length-counted string and a variable-length list of length-counted components. The list of components ends with the first 0 length argument (so it is not possible to specify an empty component with this function). Call {\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}} to free allocated memory for principal when it is no longer needed. 1441 1442 1443\subsubsection{krb5\_cc\_close - Close a credential cache handle.} 1444\label{\detokenize{appdev/refs/api/krb5_cc_close:krb5-cc-close-close-a-credential-cache-handle}}\label{\detokenize{appdev/refs/api/krb5_cc_close::doc}}\index{krb5\_cc\_close (C function)} 1445 1446\begin{fulllineitems} 1447\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_close:c.krb5_cc_close}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_close}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}}{} 1448\end{fulllineitems} 1449 1450\begin{quote}\begin{description} 1451\item[{param}] \leavevmode 1452\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1453 1454\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle 1455 1456\end{description}\end{quote} 1457\begin{quote}\begin{description} 1458\item[{retval}] \leavevmode\begin{itemize} 1459\item {} 14600 Success 1461 1462\end{itemize} 1463 1464\item[{return}] \leavevmode\begin{itemize} 1465\item {} 1466Kerberos error codes 1467 1468\end{itemize} 1469 1470\end{description}\end{quote} 1471 1472This function closes a credential cache handle \sphinxstyleemphasis{cache} without affecting the contents of the cache. 1473 1474 1475\subsubsection{krb5\_cc\_default - Resolve the default credential cache name.} 1476\label{\detokenize{appdev/refs/api/krb5_cc_default::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_default:krb5-cc-default-resolve-the-default-credential-cache-name}}\index{krb5\_cc\_default (C function)} 1477 1478\begin{fulllineitems} 1479\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_default:c.krb5_cc_default}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_default}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}} *\sphinxstyleemphasis{ ccache}}{} 1480\end{fulllineitems} 1481 1482\begin{quote}\begin{description} 1483\item[{param}] \leavevmode 1484\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1485 1486\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ccache} - Pointer to credential cache name 1487 1488\end{description}\end{quote} 1489\begin{quote}\begin{description} 1490\item[{retval}] \leavevmode\begin{itemize} 1491\item {} 14920 Success 1493 1494\item {} 1495KV5M\_CONTEXT Bad magic number for \_krb5\_context structure 1496 1497\item {} 1498KRB5\_FCC\_INTERNAL The name of the default credential cache cannot be obtained 1499 1500\end{itemize} 1501 1502\item[{return}] \leavevmode\begin{itemize} 1503\item {} 1504Kerberos error codes 1505 1506\end{itemize} 1507 1508\end{description}\end{quote} 1509 1510Create a handle to the default credential cache as given by {\hyperref[\detokenize{appdev/refs/api/krb5_cc_default_name:c.krb5_cc_default_name}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_default\_name()}}}} . 1511 1512 1513\subsubsection{krb5\_cc\_default\_name - Return the name of the default credential cache.} 1514\label{\detokenize{appdev/refs/api/krb5_cc_default_name::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_default_name:krb5-cc-default-name-return-the-name-of-the-default-credential-cache}}\index{krb5\_cc\_default\_name (C function)} 1515 1516\begin{fulllineitems} 1517\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_default_name:c.krb5_cc_default_name}}\pysiglinewithargsret{const char * \sphinxbfcode{krb5\_cc\_default\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}}{} 1518\end{fulllineitems} 1519 1520\begin{quote}\begin{description} 1521\item[{param}] \leavevmode 1522\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1523 1524\end{description}\end{quote} 1525\begin{quote}\begin{description} 1526\item[{return}] \leavevmode\begin{itemize} 1527\item {} 1528Name of default credential cache for the current user. 1529 1530\end{itemize} 1531 1532\end{description}\end{quote} 1533 1534Return a pointer to the default credential cache name for \sphinxstyleemphasis{context} , as determined by a prior call to {\hyperref[\detokenize{appdev/refs/api/krb5_cc_set_default_name:c.krb5_cc_set_default_name}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_set\_default\_name()}}}} , by the KRB5CCNAME environment variable, by the default\_ccache\_name profile variable, or by the operating system or build-time default value. The returned value must not be modified or freed by the caller. The returned value becomes invalid when \sphinxstyleemphasis{context} is destroyed {\hyperref[\detokenize{appdev/refs/api/krb5_free_context:c.krb5_free_context}]{\sphinxcrossref{\sphinxcode{krb5\_free\_context()}}}} or if a subsequent call to {\hyperref[\detokenize{appdev/refs/api/krb5_cc_set_default_name:c.krb5_cc_set_default_name}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_set\_default\_name()}}}} is made on \sphinxstyleemphasis{context} . 1535 1536The default credential cache name is cached in \sphinxstyleemphasis{context} between calls to this function, so if the value of KRB5CCNAME changes in the process environment after the first call to this function on, that change will not be reflected in later calls with the same context. The caller can invoke {\hyperref[\detokenize{appdev/refs/api/krb5_cc_set_default_name:c.krb5_cc_set_default_name}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_set\_default\_name()}}}} with a NULL value of \sphinxstyleemphasis{name} to clear the cached value and force the default name to be recomputed. 1537 1538 1539\subsubsection{krb5\_cc\_destroy - Destroy a credential cache.} 1540\label{\detokenize{appdev/refs/api/krb5_cc_destroy:krb5-cc-destroy-destroy-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_destroy::doc}}\index{krb5\_cc\_destroy (C function)} 1541 1542\begin{fulllineitems} 1543\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_destroy:c.krb5_cc_destroy}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_destroy}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}}{} 1544\end{fulllineitems} 1545 1546\begin{quote}\begin{description} 1547\item[{param}] \leavevmode 1548\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1549 1550\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle 1551 1552\end{description}\end{quote} 1553\begin{quote}\begin{description} 1554\item[{retval}] \leavevmode\begin{itemize} 1555\item {} 15560 Success 1557 1558\end{itemize} 1559 1560\item[{return}] \leavevmode\begin{itemize} 1561\item {} 1562Permission errors 1563 1564\end{itemize} 1565 1566\end{description}\end{quote} 1567 1568This function destroys any existing contents of \sphinxstyleemphasis{cache} and closes the handle to it. 1569 1570 1571\subsubsection{krb5\_cc\_dup - Duplicate ccache handle.} 1572\label{\detokenize{appdev/refs/api/krb5_cc_dup:krb5-cc-dup-duplicate-ccache-handle}}\label{\detokenize{appdev/refs/api/krb5_cc_dup::doc}}\index{krb5\_cc\_dup (C function)} 1573 1574\begin{fulllineitems} 1575\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_dup:c.krb5_cc_dup}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_dup}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ in}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}} *\sphinxstyleemphasis{ out}}{} 1576\end{fulllineitems} 1577 1578\begin{quote}\begin{description} 1579\item[{param}] \leavevmode 1580\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1581 1582\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in} - Credential cache handle to be duplicated 1583 1584\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Credential cache handle 1585 1586\end{description}\end{quote} 1587 1588Create a new handle referring to the same cache as \sphinxstyleemphasis{in} . The new handle and \sphinxstyleemphasis{in} can be closed independently. 1589 1590 1591\subsubsection{krb5\_cc\_get\_name - Retrieve the name, but not type of a credential cache.} 1592\label{\detokenize{appdev/refs/api/krb5_cc_get_name::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_get_name:krb5-cc-get-name-retrieve-the-name-but-not-type-of-a-credential-cache}}\index{krb5\_cc\_get\_name (C function)} 1593 1594\begin{fulllineitems} 1595\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_get_name:c.krb5_cc_get_name}}\pysiglinewithargsret{const char * \sphinxbfcode{krb5\_cc\_get\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}}{} 1596\end{fulllineitems} 1597 1598\begin{quote}\begin{description} 1599\item[{param}] \leavevmode 1600\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1601 1602\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle 1603 1604\end{description}\end{quote} 1605\begin{quote}\begin{description} 1606\item[{return}] \leavevmode\begin{itemize} 1607\item {} 1608On success - the name of the credential cache. 1609 1610\end{itemize} 1611 1612\end{description}\end{quote} 1613 1614\begin{sphinxadmonition}{warning}{Warning:} 1615Returns the name of the credential cache. The result is an alias into \sphinxstyleemphasis{cache} and should not be freed or modified by the caller. This name does not include the cache type, so should not be used as input to {\hyperref[\detokenize{appdev/refs/api/krb5_cc_resolve:c.krb5_cc_resolve}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_resolve()}}}} . 1616\end{sphinxadmonition} 1617 1618 1619\subsubsection{krb5\_cc\_get\_principal - Get the default principal of a credential cache.} 1620\label{\detokenize{appdev/refs/api/krb5_cc_get_principal:krb5-cc-get-principal-get-the-default-principal-of-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_get_principal::doc}}\index{krb5\_cc\_get\_principal (C function)} 1621 1622\begin{fulllineitems} 1623\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_get_principal:c.krb5_cc_get_principal}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_get\_principal}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ principal}}{} 1624\end{fulllineitems} 1625 1626\begin{quote}\begin{description} 1627\item[{param}] \leavevmode 1628\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1629 1630\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle 1631 1632\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{principal} - Primary principal 1633 1634\end{description}\end{quote} 1635\begin{quote}\begin{description} 1636\item[{retval}] \leavevmode\begin{itemize} 1637\item {} 16380 Success 1639 1640\end{itemize} 1641 1642\item[{return}] \leavevmode\begin{itemize} 1643\item {} 1644Kerberos error codes 1645 1646\end{itemize} 1647 1648\end{description}\end{quote} 1649 1650Returns the default client principal of a credential cache as set by {\hyperref[\detokenize{appdev/refs/api/krb5_cc_initialize:c.krb5_cc_initialize}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_initialize()}}}} . 1651 1652Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}} to free \sphinxstyleemphasis{principal} when it is no longer needed. 1653 1654 1655\subsubsection{krb5\_cc\_get\_type - Retrieve the type of a credential cache.} 1656\label{\detokenize{appdev/refs/api/krb5_cc_get_type:krb5-cc-get-type-retrieve-the-type-of-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_get_type::doc}}\index{krb5\_cc\_get\_type (C function)} 1657 1658\begin{fulllineitems} 1659\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_get_type:c.krb5_cc_get_type}}\pysiglinewithargsret{const char * \sphinxbfcode{krb5\_cc\_get\_type}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}}{} 1660\end{fulllineitems} 1661 1662\begin{quote}\begin{description} 1663\item[{param}] \leavevmode 1664\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1665 1666\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle 1667 1668\end{description}\end{quote} 1669\begin{quote}\begin{description} 1670\item[{return}] \leavevmode\begin{itemize} 1671\item {} 1672The type of a credential cache as an alias that must not be modified or freed by the caller. 1673 1674\end{itemize} 1675 1676\end{description}\end{quote} 1677 1678 1679\subsubsection{krb5\_cc\_initialize - Initialize a credential cache.} 1680\label{\detokenize{appdev/refs/api/krb5_cc_initialize::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_initialize:krb5-cc-initialize-initialize-a-credential-cache}}\index{krb5\_cc\_initialize (C function)} 1681 1682\begin{fulllineitems} 1683\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_initialize:c.krb5_cc_initialize}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_initialize}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ principal}}{} 1684\end{fulllineitems} 1685 1686\begin{quote}\begin{description} 1687\item[{param}] \leavevmode 1688\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1689 1690\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle 1691 1692\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Default principal name 1693 1694\end{description}\end{quote} 1695\begin{quote}\begin{description} 1696\item[{retval}] \leavevmode\begin{itemize} 1697\item {} 16980 Success 1699 1700\end{itemize} 1701 1702\item[{return}] \leavevmode\begin{itemize} 1703\item {} 1704System errors; Permission errors; Kerberos error codes 1705 1706\end{itemize} 1707 1708\end{description}\end{quote} 1709 1710Destroy any existing contents of \sphinxstyleemphasis{cache} and initialize it for the default principal \sphinxstyleemphasis{principal} . 1711 1712 1713\subsubsection{krb5\_cc\_new\_unique - Create a new credential cache of the specified type with a unique name.} 1714\label{\detokenize{appdev/refs/api/krb5_cc_new_unique:krb5-cc-new-unique-create-a-new-credential-cache-of-the-specified-type-with-a-unique-name}}\label{\detokenize{appdev/refs/api/krb5_cc_new_unique::doc}}\index{krb5\_cc\_new\_unique (C function)} 1715 1716\begin{fulllineitems} 1717\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_new_unique:c.krb5_cc_new_unique}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_new\_unique}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ type}, const char *\sphinxstyleemphasis{ hint}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}} *\sphinxstyleemphasis{ id}}{} 1718\end{fulllineitems} 1719 1720\begin{quote}\begin{description} 1721\item[{param}] \leavevmode 1722\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1723 1724\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - Credential cache type name 1725 1726\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{hint} - Unused 1727 1728\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{id} - Credential cache handle 1729 1730\end{description}\end{quote} 1731\begin{quote}\begin{description} 1732\item[{retval}] \leavevmode\begin{itemize} 1733\item {} 17340 Success 1735 1736\end{itemize} 1737 1738\item[{return}] \leavevmode\begin{itemize} 1739\item {} 1740Kerberos error codes 1741 1742\end{itemize} 1743 1744\end{description}\end{quote} 1745 1746 1747\subsubsection{krb5\_cc\_resolve - Resolve a credential cache name.} 1748\label{\detokenize{appdev/refs/api/krb5_cc_resolve:krb5-cc-resolve-resolve-a-credential-cache-name}}\label{\detokenize{appdev/refs/api/krb5_cc_resolve::doc}}\index{krb5\_cc\_resolve (C function)} 1749 1750\begin{fulllineitems} 1751\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_resolve:c.krb5_cc_resolve}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_resolve}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ name}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}} *\sphinxstyleemphasis{ cache}}{} 1752\end{fulllineitems} 1753 1754\begin{quote}\begin{description} 1755\item[{param}] \leavevmode 1756\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1757 1758\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - Credential cache name to be resolved 1759 1760\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cache} - Credential cache handle 1761 1762\end{description}\end{quote} 1763\begin{quote}\begin{description} 1764\item[{retval}] \leavevmode\begin{itemize} 1765\item {} 17660 Success 1767 1768\end{itemize} 1769 1770\item[{return}] \leavevmode\begin{itemize} 1771\item {} 1772Kerberos error codes 1773 1774\end{itemize} 1775 1776\end{description}\end{quote} 1777 1778Fills in \sphinxstyleemphasis{cache} with a \sphinxstyleemphasis{cache} handle that corresponds to the name in \sphinxstyleemphasis{name} . \sphinxstyleemphasis{name} should be of the form \sphinxstylestrong{type:residual} , and \sphinxstyleemphasis{type} must be a type known to the library. If the \sphinxstyleemphasis{name} does not contain a colon, interpret it as a file name. 1779 1780 1781\subsubsection{krb5\_change\_password - Change a password for an existing Kerberos account.} 1782\label{\detokenize{appdev/refs/api/krb5_change_password:krb5-change-password-change-a-password-for-an-existing-kerberos-account}}\label{\detokenize{appdev/refs/api/krb5_change_password::doc}}\index{krb5\_change\_password (C function)} 1783 1784\begin{fulllineitems} 1785\phantomsection\label{\detokenize{appdev/refs/api/krb5_change_password:c.krb5_change_password}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_change\_password}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, const char *\sphinxstyleemphasis{ newpw}, int *\sphinxstyleemphasis{ result\_code}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ result\_code\_string}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ result\_string}}{} 1786\end{fulllineitems} 1787 1788\begin{quote}\begin{description} 1789\item[{param}] \leavevmode 1790\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1791 1792\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Credentials for kadmin/changepw service 1793 1794\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{newpw} - New password 1795 1796\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code} - Numeric error code from server 1797 1798\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code\_string} - String equivalent to \sphinxstyleemphasis{result\_code} 1799 1800\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_string} - Change password response from the KDC 1801 1802\end{description}\end{quote} 1803\begin{quote}\begin{description} 1804\item[{retval}] \leavevmode\begin{itemize} 1805\item {} 18060 Success; otherwise - Kerberos error codes 1807 1808\end{itemize} 1809 1810\end{description}\end{quote} 1811 1812Change the password for the existing principal identified by \sphinxstyleemphasis{creds} . 1813 1814The possible values of the output \sphinxstyleemphasis{result\_code} are: 1815\begin{itemize} 1816\item {} 1817{\hyperref[\detokenize{appdev/refs/macros/KRB5_KPASSWD_SUCCESS:KRB5_KPASSWD_SUCCESS}]{\sphinxcrossref{\sphinxcode{KRB5\_KPASSWD\_SUCCESS}}}} (0) - success 1818 1819\item {} 1820{\hyperref[\detokenize{appdev/refs/macros/KRB5_KPASSWD_MALFORMED:KRB5_KPASSWD_MALFORMED}]{\sphinxcrossref{\sphinxcode{KRB5\_KPASSWD\_MALFORMED}}}} (1) - Malformed request error 1821 1822\item {} 1823{\hyperref[\detokenize{appdev/refs/macros/KRB5_KPASSWD_HARDERROR:KRB5_KPASSWD_HARDERROR}]{\sphinxcrossref{\sphinxcode{KRB5\_KPASSWD\_HARDERROR}}}} (2) - Server error 1824 1825\item {} 1826{\hyperref[\detokenize{appdev/refs/macros/KRB5_KPASSWD_AUTHERROR:KRB5_KPASSWD_AUTHERROR}]{\sphinxcrossref{\sphinxcode{KRB5\_KPASSWD\_AUTHERROR}}}} (3) - Authentication error 1827 1828\item {} 1829{\hyperref[\detokenize{appdev/refs/macros/KRB5_KPASSWD_SOFTERROR:KRB5_KPASSWD_SOFTERROR}]{\sphinxcrossref{\sphinxcode{KRB5\_KPASSWD\_SOFTERROR}}}} (4) - Password change rejected 1830 1831\end{itemize} 1832 1833 1834\subsubsection{krb5\_chpw\_message - Get a result message for changing or setting a password.} 1835\label{\detokenize{appdev/refs/api/krb5_chpw_message:krb5-chpw-message-get-a-result-message-for-changing-or-setting-a-password}}\label{\detokenize{appdev/refs/api/krb5_chpw_message::doc}}\index{krb5\_chpw\_message (C function)} 1836 1837\begin{fulllineitems} 1838\phantomsection\label{\detokenize{appdev/refs/api/krb5_chpw_message:c.krb5_chpw_message}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_chpw\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ server\_string}, char **\sphinxstyleemphasis{ message\_out}}{} 1839\end{fulllineitems} 1840 1841\begin{quote}\begin{description} 1842\item[{param}] \leavevmode 1843\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1844 1845\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server\_string} - Data returned from the remote system 1846 1847\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{message\_out} - A message displayable to the user 1848 1849\end{description}\end{quote} 1850\begin{quote}\begin{description} 1851\item[{retval}] \leavevmode\begin{itemize} 1852\item {} 18530 Success 1854 1855\end{itemize} 1856 1857\item[{return}] \leavevmode\begin{itemize} 1858\item {} 1859Kerberos error codes 1860 1861\end{itemize} 1862 1863\end{description}\end{quote} 1864 1865This function processes the \sphinxstyleemphasis{server\_string} returned in the \sphinxstyleemphasis{result\_string} parameter of {\hyperref[\detokenize{appdev/refs/api/krb5_change_password:c.krb5_change_password}]{\sphinxcrossref{\sphinxcode{krb5\_change\_password()}}}} , {\hyperref[\detokenize{appdev/refs/api/krb5_set_password:c.krb5_set_password}]{\sphinxcrossref{\sphinxcode{krb5\_set\_password()}}}} , and related functions, and returns a displayable string. If \sphinxstyleemphasis{server\_string} contains Active Directory structured policy information, it will be converted into human-readable text. 1866 1867Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_string:c.krb5_free_string}]{\sphinxcrossref{\sphinxcode{krb5\_free\_string()}}}} to free \sphinxstyleemphasis{message\_out} when it is no longer needed. 1868 1869\begin{sphinxadmonition}{note}{Note:} 1870New in 1.11 1871\end{sphinxadmonition} 1872 1873 1874\subsubsection{krb5\_expand\_hostname - Canonicalize a hostname, possibly using name service.} 1875\label{\detokenize{appdev/refs/api/krb5_expand_hostname:krb5-expand-hostname-canonicalize-a-hostname-possibly-using-name-service}}\label{\detokenize{appdev/refs/api/krb5_expand_hostname::doc}}\index{krb5\_expand\_hostname (C function)} 1876 1877\begin{fulllineitems} 1878\phantomsection\label{\detokenize{appdev/refs/api/krb5_expand_hostname:c.krb5_expand_hostname}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_expand\_hostname}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ host}, char **\sphinxstyleemphasis{ canonhost\_out}}{} 1879\end{fulllineitems} 1880 1881\begin{quote}\begin{description} 1882\item[{param}] \leavevmode 1883\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1884 1885\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{host} - Input hostname 1886 1887\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{canonhost\_out} - Canonicalized hostname 1888 1889\end{description}\end{quote} 1890 1891This function canonicalizes orig\_hostname, possibly using name service lookups if configuration permits. Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_string:c.krb5_free_string}]{\sphinxcrossref{\sphinxcode{krb5\_free\_string()}}}} to free \sphinxstyleemphasis{canonhost\_out} when it is no longer needed. 1892 1893\begin{sphinxadmonition}{note}{Note:} 1894New in 1.15 1895\end{sphinxadmonition} 1896 1897 1898\subsubsection{krb5\_free\_context - Free a krb5 library context.} 1899\label{\detokenize{appdev/refs/api/krb5_free_context:krb5-free-context-free-a-krb5-library-context}}\label{\detokenize{appdev/refs/api/krb5_free_context::doc}}\index{krb5\_free\_context (C function)} 1900 1901\begin{fulllineitems} 1902\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_context:c.krb5_free_context}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_context}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}}{} 1903\end{fulllineitems} 1904 1905\begin{quote}\begin{description} 1906\item[{param}] \leavevmode 1907\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1908 1909\end{description}\end{quote} 1910 1911This function frees a \sphinxstyleemphasis{context} that was created by {\hyperref[\detokenize{appdev/refs/api/krb5_init_context:c.krb5_init_context}]{\sphinxcrossref{\sphinxcode{krb5\_init\_context()}}}} or {\hyperref[\detokenize{appdev/refs/api/krb5_init_secure_context:c.krb5_init_secure_context}]{\sphinxcrossref{\sphinxcode{krb5\_init\_secure\_context()}}}} . 1912 1913 1914\subsubsection{krb5\_free\_error\_message - Free an error message generated by krb5\_get\_error\_message() .} 1915\label{\detokenize{appdev/refs/api/krb5_free_error_message:krb5-free-error-message-free-an-error-message-generated-by-krb5-get-error-message}}\label{\detokenize{appdev/refs/api/krb5_free_error_message::doc}}\index{krb5\_free\_error\_message (C function)} 1916 1917\begin{fulllineitems} 1918\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_error_message:c.krb5_free_error_message}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, const char *\sphinxstyleemphasis{ msg}}{} 1919\end{fulllineitems} 1920 1921\begin{quote}\begin{description} 1922\item[{param}] \leavevmode 1923\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 1924 1925\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{msg} - Pointer to error message 1926 1927\end{description}\end{quote} 1928 1929 1930\subsubsection{krb5\_free\_principal - Free the storage assigned to a principal.} 1931\label{\detokenize{appdev/refs/api/krb5_free_principal::doc}}\label{\detokenize{appdev/refs/api/krb5_free_principal:krb5-free-principal-free-the-storage-assigned-to-a-principal}}\index{krb5\_free\_principal (C function)} 1932 1933\begin{fulllineitems} 1934\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_principal}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ val}}{} 1935\end{fulllineitems} 1936 1937\begin{quote}\begin{description} 1938\item[{param}] \leavevmode 1939\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1940 1941\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Principal to be freed 1942 1943\end{description}\end{quote} 1944 1945 1946\subsubsection{krb5\_fwd\_tgt\_creds - Get a forwarded TGT and format a KRB-CRED message.} 1947\label{\detokenize{appdev/refs/api/krb5_fwd_tgt_creds:krb5-fwd-tgt-creds-get-a-forwarded-tgt-and-format-a-krb-cred-message}}\label{\detokenize{appdev/refs/api/krb5_fwd_tgt_creds::doc}}\index{krb5\_fwd\_tgt\_creds (C function)} 1948 1949\begin{fulllineitems} 1950\phantomsection\label{\detokenize{appdev/refs/api/krb5_fwd_tgt_creds:c.krb5_fwd_tgt_creds}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_fwd\_tgt\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, const char *\sphinxstyleemphasis{ rhost}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ client}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ server}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cc}, int\sphinxstyleemphasis{ forwardable}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ outbuf}}{} 1951\end{fulllineitems} 1952 1953\begin{quote}\begin{description} 1954\item[{param}] \leavevmode 1955\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 1956 1957\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 1958 1959\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rhost} - Remote host 1960 1961\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal of TGT 1962 1963\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Principal of server to receive TGT 1964 1965\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cc} - Credential cache handle (NULL to use default) 1966 1967\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{forwardable} - Whether TGT should be forwardable 1968 1969\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} - KRB-CRED message 1970 1971\end{description}\end{quote} 1972\begin{quote}\begin{description} 1973\item[{retval}] \leavevmode\begin{itemize} 1974\item {} 19750 Success 1976 1977\item {} 1978ENOMEM Insufficient memory 1979 1980\item {} 1981KRB5\_PRINC\_NOMATCH Requested principal and ticket do not match 1982 1983\item {} 1984KRB5\_NO\_TKT\_SUPPLIED Request did not supply a ticket 1985 1986\item {} 1987KRB5\_CC\_BADNAME Credential cache name or principal name malformed 1988 1989\end{itemize} 1990 1991\item[{return}] \leavevmode\begin{itemize} 1992\item {} 1993Kerberos error codes 1994 1995\end{itemize} 1996 1997\end{description}\end{quote} 1998 1999Get a TGT for use at the remote host \sphinxstyleemphasis{rhost} and format it into a KRB-CRED message. If \sphinxstyleemphasis{rhost} is NULL and \sphinxstyleemphasis{server} is of type {\hyperref[\detokenize{appdev/refs/macros/KRB5_NT_SRV_HST:KRB5_NT_SRV_HST}]{\sphinxcrossref{\sphinxcode{KRB5\_NT\_SRV\_HST}}}} , the second component of \sphinxstyleemphasis{server} will be used. 2000 2001 2002\subsubsection{krb5\_get\_default\_realm - Retrieve the default realm.} 2003\label{\detokenize{appdev/refs/api/krb5_get_default_realm:krb5-get-default-realm-retrieve-the-default-realm}}\label{\detokenize{appdev/refs/api/krb5_get_default_realm::doc}}\index{krb5\_get\_default\_realm (C function)} 2004 2005\begin{fulllineitems} 2006\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_default_realm:c.krb5_get_default_realm}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_default\_realm}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, char **\sphinxstyleemphasis{ lrealm}}{} 2007\end{fulllineitems} 2008 2009\begin{quote}\begin{description} 2010\item[{param}] \leavevmode 2011\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2012 2013\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{lrealm} - Default realm name 2014 2015\end{description}\end{quote} 2016\begin{quote}\begin{description} 2017\item[{retval}] \leavevmode\begin{itemize} 2018\item {} 20190 Success 2020 2021\end{itemize} 2022 2023\item[{return}] \leavevmode\begin{itemize} 2024\item {} 2025Kerberos error codes 2026 2027\end{itemize} 2028 2029\end{description}\end{quote} 2030 2031Retrieves the default realm to be used if no user-specified realm is available. 2032 2033Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_default_realm:c.krb5_free_default_realm}]{\sphinxcrossref{\sphinxcode{krb5\_free\_default\_realm()}}}} to free \sphinxstyleemphasis{lrealm} when it is no longer needed. 2034 2035 2036\subsubsection{krb5\_get\_error\_message - Get the (possibly extended) error message for a code.} 2037\label{\detokenize{appdev/refs/api/krb5_get_error_message::doc}}\label{\detokenize{appdev/refs/api/krb5_get_error_message:krb5-get-error-message-get-the-possibly-extended-error-message-for-a-code}}\index{krb5\_get\_error\_message (C function)} 2038 2039\begin{fulllineitems} 2040\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_error_message:c.krb5_get_error_message}}\pysiglinewithargsret{const char * \sphinxbfcode{krb5\_get\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}}\sphinxstyleemphasis{ code}}{} 2041\end{fulllineitems} 2042 2043\begin{quote}\begin{description} 2044\item[{param}] \leavevmode 2045\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 2046 2047\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code 2048 2049\end{description}\end{quote} 2050 2051The behavior of {\hyperref[\detokenize{appdev/refs/api/krb5_get_error_message:c.krb5_get_error_message}]{\sphinxcrossref{\sphinxcode{krb5\_get\_error\_message()}}}} is only defined the first time it is called after a failed call to a krb5 function using the same context, and only when the error code passed in is the same as that returned by the krb5 function. 2052 2053This function never returns NULL, so its result may be used unconditionally as a C string. 2054 2055The string returned by this function must be freed using {\hyperref[\detokenize{appdev/refs/api/krb5_free_error_message:c.krb5_free_error_message}]{\sphinxcrossref{\sphinxcode{krb5\_free\_error\_message()}}}} 2056 2057\begin{sphinxadmonition}{note}{Note:} 2058Future versions may return the same string for the second and following calls. 2059\end{sphinxadmonition} 2060 2061 2062\subsubsection{krb5\_get\_host\_realm - Get the Kerberos realm names for a host.} 2063\label{\detokenize{appdev/refs/api/krb5_get_host_realm:krb5-get-host-realm-get-the-kerberos-realm-names-for-a-host}}\label{\detokenize{appdev/refs/api/krb5_get_host_realm::doc}}\index{krb5\_get\_host\_realm (C function)} 2064 2065\begin{fulllineitems} 2066\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_host_realm:c.krb5_get_host_realm}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_host\_realm}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ host}, char ***\sphinxstyleemphasis{ realmsp}}{} 2067\end{fulllineitems} 2068 2069\begin{quote}\begin{description} 2070\item[{param}] \leavevmode 2071\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2072 2073\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{host} - Host name (or NULL) 2074 2075\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realmsp} - Null-terminated list of realm names 2076 2077\end{description}\end{quote} 2078\begin{quote}\begin{description} 2079\item[{retval}] \leavevmode\begin{itemize} 2080\item {} 20810 Success 2082 2083\item {} 2084ENOMEM Insufficient memory 2085 2086\end{itemize} 2087 2088\item[{return}] \leavevmode\begin{itemize} 2089\item {} 2090Kerberos error codes 2091 2092\end{itemize} 2093 2094\end{description}\end{quote} 2095 2096Fill in \sphinxstyleemphasis{realmsp} with a pointer to a null-terminated list of realm names. If there are no known realms for the host, a list containing the referral (empty) realm is returned. 2097 2098If \sphinxstyleemphasis{host} is NULL, the local host’s realms are determined. 2099 2100Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_host_realm:c.krb5_free_host_realm}]{\sphinxcrossref{\sphinxcode{krb5\_free\_host\_realm()}}}} to release \sphinxstyleemphasis{realmsp} when it is no longer needed. 2101 2102 2103\subsubsection{krb5\_get\_credentials - Get an additional ticket.} 2104\label{\detokenize{appdev/refs/api/krb5_get_credentials:krb5-get-credentials-get-an-additional-ticket}}\label{\detokenize{appdev/refs/api/krb5_get_credentials::doc}}\index{krb5\_get\_credentials (C function)} 2105 2106\begin{fulllineitems} 2107\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_credentials:c.krb5_get_credentials}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_credentials}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ options}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ in\_creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} **\sphinxstyleemphasis{ out\_creds}}{} 2108\end{fulllineitems} 2109 2110\begin{quote}\begin{description} 2111\item[{param}] \leavevmode 2112\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2113 2114\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{options} - Options 2115 2116\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache handle 2117 2118\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_creds} - Input credentials 2119 2120\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out\_creds} - Output updated credentials 2121 2122\end{description}\end{quote} 2123\begin{quote}\begin{description} 2124\item[{retval}] \leavevmode\begin{itemize} 2125\item {} 21260 Success 2127 2128\end{itemize} 2129 2130\item[{return}] \leavevmode\begin{itemize} 2131\item {} 2132Kerberos error codes 2133 2134\end{itemize} 2135 2136\end{description}\end{quote} 2137 2138Use \sphinxstyleemphasis{ccache} or a TGS exchange to get a service ticket matching \sphinxstyleemphasis{in\_creds} . 2139 2140Valid values for \sphinxstyleemphasis{options} are: 2141\begin{quote} 2142\begin{itemize} 2143\item {} 2144{\hyperref[\detokenize{appdev/refs/macros/KRB5_GC_CACHED:KRB5_GC_CACHED}]{\sphinxcrossref{\sphinxcode{KRB5\_GC\_CACHED}}}} Search only credential cache for the ticket 2145 2146\item {} 2147{\hyperref[\detokenize{appdev/refs/macros/KRB5_GC_USER_USER:KRB5_GC_USER_USER}]{\sphinxcrossref{\sphinxcode{KRB5\_GC\_USER\_USER}}}} Return a user to user authentication ticket 2148 2149\end{itemize} 2150 2151\sphinxstyleemphasis{in\_creds} must be non-null. \sphinxstyleemphasis{in\_creds-\textgreater{}client} and \sphinxstyleemphasis{in\_creds-\textgreater{}server} must be filled in to specify the client and the server respectively. If any authorization data needs to be requested for the service ticket (such as restrictions on how the ticket can be used), specify it in \sphinxstyleemphasis{in\_creds-\textgreater{}authdata} ; otherwise set \sphinxstyleemphasis{in\_creds-\textgreater{}authdata} to NULL. The session key type is specified in \sphinxstyleemphasis{in\_creds-\textgreater{}keyblock.enctype} , if it is nonzero. 2152\end{quote} 2153 2154The expiration date is specified in \sphinxstyleemphasis{in\_creds-\textgreater{}times.endtime} . The KDC may return tickets with an earlier expiration date. If \sphinxstyleemphasis{in\_creds-\textgreater{}times.endtime} is set to 0, the latest possible expiration date will be requested. 2155 2156Any returned ticket and intermediate ticket-granting tickets are stored in \sphinxstyleemphasis{ccache} . 2157 2158Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_creds:c.krb5_free_creds}]{\sphinxcrossref{\sphinxcode{krb5\_free\_creds()}}}} to free \sphinxstyleemphasis{out\_creds} when it is no longer needed. 2159 2160 2161\subsubsection{krb5\_get\_fallback\_host\_realm} 2162\label{\detokenize{appdev/refs/api/krb5_get_fallback_host_realm:krb5-get-fallback-host-realm}}\label{\detokenize{appdev/refs/api/krb5_get_fallback_host_realm::doc}}\index{krb5\_get\_fallback\_host\_realm (C function)} 2163 2164\begin{fulllineitems} 2165\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_fallback_host_realm:c.krb5_get_fallback_host_realm}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_fallback\_host\_realm}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ hdata}, char ***\sphinxstyleemphasis{ realmsp}}{} 2166\end{fulllineitems} 2167 2168\begin{quote}\begin{description} 2169\item[{param}] \leavevmode 2170\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2171 2172\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{hdata} - Host name (or NULL) 2173 2174\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realmsp} - Null-terminated list of realm names 2175 2176\end{description}\end{quote} 2177 2178Fill in \sphinxstyleemphasis{realmsp} with a pointer to a null-terminated list of realm names obtained through heuristics or insecure resolution methods which have lower priority than KDC referrals. 2179 2180If \sphinxstyleemphasis{host} is NULL, the local host’s realms are determined. 2181 2182Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_host_realm:c.krb5_free_host_realm}]{\sphinxcrossref{\sphinxcode{krb5\_free\_host\_realm()}}}} to release \sphinxstyleemphasis{realmsp} when it is no longer needed. 2183 2184 2185\subsubsection{krb5\_get\_init\_creds\_keytab - Get initial credentials using a key table.} 2186\label{\detokenize{appdev/refs/api/krb5_get_init_creds_keytab:krb5-get-init-creds-keytab-get-initial-credentials-using-a-key-table}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_keytab::doc}}\index{krb5\_get\_init\_creds\_keytab (C function)} 2187 2188\begin{fulllineitems} 2189\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_keytab:c.krb5_get_init_creds_keytab}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_keytab}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ client}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ arg\_keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{krb5\_deltat}}}\sphinxstyleemphasis{ start\_time}, const char *\sphinxstyleemphasis{ in\_tkt\_service}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ k5\_gic\_options}}{} 2190\end{fulllineitems} 2191 2192\begin{quote}\begin{description} 2193\item[{param}] \leavevmode 2194\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2195 2196\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - New credentials 2197 2198\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal 2199 2200\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{arg\_keytab} - Key table handle 2201 2202\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{start\_time} - Time when ticket becomes valid (0 for now) 2203 2204\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_tkt\_service} - Service name of initial credentials (or NULL) 2205 2206\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k5\_gic\_options} - Initial credential options 2207 2208\end{description}\end{quote} 2209\begin{quote}\begin{description} 2210\item[{retval}] \leavevmode\begin{itemize} 2211\item {} 22120 Success 2213 2214\end{itemize} 2215 2216\item[{return}] \leavevmode\begin{itemize} 2217\item {} 2218Kerberos error codes 2219 2220\end{itemize} 2221 2222\end{description}\end{quote} 2223 2224This function requests KDC for an initial credentials for \sphinxstyleemphasis{client} using a client key stored in \sphinxstyleemphasis{arg\_keytab} . If \sphinxstyleemphasis{in\_tkt\_service} is specified, it is parsed as a principal name (with the realm ignored) and used as the service principal for the request; otherwise the ticket-granting service is used. 2225 2226 2227\subsubsection{krb5\_get\_init\_creds\_opt\_alloc - Allocate a new initial credential options structure.} 2228\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_alloc:krb5-get-init-creds-opt-alloc-allocate-a-new-initial-credential-options-structure}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_alloc::doc}}\index{krb5\_get\_init\_creds\_opt\_alloc (C function)} 2229 2230\begin{fulllineitems} 2231\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_alloc:c.krb5_get_init_creds_opt_alloc}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_alloc}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} **\sphinxstyleemphasis{ opt}}{} 2232\end{fulllineitems} 2233 2234\begin{quote}\begin{description} 2235\item[{param}] \leavevmode 2236\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2237 2238\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{opt} - New options structure 2239 2240\end{description}\end{quote} 2241\begin{quote}\begin{description} 2242\item[{retval}] \leavevmode\begin{itemize} 2243\item {} 22440 - Success; Kerberos errors otherwise. 2245 2246\end{itemize} 2247 2248\end{description}\end{quote} 2249 2250This function is the preferred way to create an options structure for getting initial credentials, and is required to make use of certain options. Use {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_free:c.krb5_get_init_creds_opt_free}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_free()}}}} to free \sphinxstyleemphasis{opt} when it is no longer needed. 2251 2252 2253\subsubsection{krb5\_get\_init\_creds\_opt\_free - Free initial credential options.} 2254\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_free::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_free:krb5-get-init-creds-opt-free-free-initial-credential-options}}\index{krb5\_get\_init\_creds\_opt\_free (C function)} 2255 2256\begin{fulllineitems} 2257\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_free:c.krb5_get_init_creds_opt_free}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_free}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}}{} 2258\end{fulllineitems} 2259 2260\begin{quote}\begin{description} 2261\item[{param}] \leavevmode 2262\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2263 2264\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure to free 2265 2266\end{description}\end{quote} 2267 2268 2269\sphinxstrong{See also:} 2270 2271 2272{\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_alloc:c.krb5_get_init_creds_opt_alloc}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_alloc()}}}} 2273 2274 2275 2276 2277\subsubsection{krb5\_get\_init\_creds\_opt\_get\_fast\_flags - Retrieve FAST flags from initial credential options.} 2278\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_get_fast_flags::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_get_fast_flags:krb5-get-init-creds-opt-get-fast-flags-retrieve-fast-flags-from-initial-credential-options}}\index{krb5\_get\_init\_creds\_opt\_get\_fast\_flags (C function)} 2279 2280\begin{fulllineitems} 2281\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_get_fast_flags:c.krb5_get_init_creds_opt_get_fast_flags}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_get\_fast\_flags}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}} *\sphinxstyleemphasis{ out\_flags}}{} 2282\end{fulllineitems} 2283 2284\begin{quote}\begin{description} 2285\item[{param}] \leavevmode 2286\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2287 2288\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options 2289 2290\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out\_flags} - FAST flags 2291 2292\end{description}\end{quote} 2293\begin{quote}\begin{description} 2294\item[{retval}] \leavevmode\begin{itemize} 2295\item {} 22960 - Success; Kerberos errors otherwise. 2297 2298\end{itemize} 2299 2300\end{description}\end{quote} 2301 2302 2303\subsubsection{krb5\_get\_init\_creds\_opt\_set\_address\_list - Set address restrictions in initial credential options.} 2304\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_address_list:krb5-get-init-creds-opt-set-address-list-set-address-restrictions-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_address_list::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_address\_list (C function)} 2305 2306\begin{fulllineitems} 2307\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_address_list:c.krb5_get_init_creds_opt_set_address_list}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_address\_list}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} **\sphinxstyleemphasis{ addresses}}{} 2308\end{fulllineitems} 2309 2310\begin{quote}\begin{description} 2311\item[{param}] \leavevmode 2312\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure 2313 2314\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addresses} - Null-terminated array of addresses 2315 2316\end{description}\end{quote} 2317 2318 2319\subsubsection{krb5\_get\_init\_creds\_opt\_set\_anonymous - Set or unset the anonymous flag in initial credential options.} 2320\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_anonymous:krb5-get-init-creds-opt-set-anonymous-set-or-unset-the-anonymous-flag-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_anonymous::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_anonymous (C function)} 2321 2322\begin{fulllineitems} 2323\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_anonymous:c.krb5_get_init_creds_opt_set_anonymous}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_anonymous}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, int\sphinxstyleemphasis{ anonymous}}{} 2324\end{fulllineitems} 2325 2326\begin{quote}\begin{description} 2327\item[{param}] \leavevmode 2328\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure 2329 2330\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{anonymous} - Whether to make an anonymous request 2331 2332\end{description}\end{quote} 2333 2334This function may be used to request anonymous credentials from the KDC by setting \sphinxstyleemphasis{anonymous} to non-zero. Note that anonymous credentials are only a request; clients must verify that credentials are anonymous if that is a requirement. 2335 2336 2337\subsubsection{krb5\_get\_init\_creds\_opt\_set\_canonicalize - Set or unset the canonicalize flag in initial credential options.} 2338\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_canonicalize:krb5-get-init-creds-opt-set-canonicalize-set-or-unset-the-canonicalize-flag-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_canonicalize::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_canonicalize (C function)} 2339 2340\begin{fulllineitems} 2341\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_canonicalize:c.krb5_get_init_creds_opt_set_canonicalize}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_canonicalize}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, int\sphinxstyleemphasis{ canonicalize}}{} 2342\end{fulllineitems} 2343 2344\begin{quote}\begin{description} 2345\item[{param}] \leavevmode 2346\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure 2347 2348\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{canonicalize} - Whether to canonicalize client principal 2349 2350\end{description}\end{quote} 2351 2352 2353\subsubsection{krb5\_get\_init\_creds\_opt\_set\_change\_password\_prompt - Set or unset change-password-prompt flag in initial credential options.} 2354\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_change_password_prompt::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_change_password_prompt:krb5-get-init-creds-opt-set-change-password-prompt-set-or-unset-change-password-prompt-flag-in-initial-credential-options}}\index{krb5\_get\_init\_creds\_opt\_set\_change\_password\_prompt (C function)} 2355 2356\begin{fulllineitems} 2357\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_change_password_prompt:c.krb5_get_init_creds_opt_set_change_password_prompt}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_change\_password\_prompt}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, int\sphinxstyleemphasis{ prompt}}{} 2358\end{fulllineitems} 2359 2360\begin{quote}\begin{description} 2361\item[{param}] \leavevmode 2362\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure 2363 2364\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompt} - Whether to prompt to change password 2365 2366\end{description}\end{quote} 2367 2368This flag is on by default. It controls whether {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_password()}}}} will react to an expired-password error by prompting for a new password and attempting to change the old one. 2369 2370 2371\subsubsection{krb5\_get\_init\_creds\_opt\_set\_etype\_list - Set allowable encryption types in initial credential options.} 2372\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_etype_list:krb5-get-init-creds-opt-set-etype-list-set-allowable-encryption-types-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_etype_list::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_etype\_list (C function)} 2373 2374\begin{fulllineitems} 2375\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_etype_list:c.krb5_get_init_creds_opt_set_etype_list}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_etype\_list}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} *\sphinxstyleemphasis{ etype\_list}, int\sphinxstyleemphasis{ etype\_list\_length}}{} 2376\end{fulllineitems} 2377 2378\begin{quote}\begin{description} 2379\item[{param}] \leavevmode 2380\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure 2381 2382\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{etype\_list} - Array of encryption types 2383 2384\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{etype\_list\_length} - Length of \sphinxstyleemphasis{etype\_list} 2385 2386\end{description}\end{quote} 2387 2388 2389\subsubsection{krb5\_get\_init\_creds\_opt\_set\_expire\_callback - Set an expiration callback in initial credential options.} 2390\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_expire_callback::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_expire_callback:krb5-get-init-creds-opt-set-expire-callback-set-an-expiration-callback-in-initial-credential-options}}\index{krb5\_get\_init\_creds\_opt\_set\_expire\_callback (C function)} 2391 2392\begin{fulllineitems} 2393\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_expire_callback:c.krb5_get_init_creds_opt_set_expire_callback}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_expire\_callback}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_expire_callback_func:c.krb5_expire_callback_func}]{\sphinxcrossref{krb5\_expire\_callback\_func}}}\sphinxstyleemphasis{ cb}, void *\sphinxstyleemphasis{ data}}{} 2394\end{fulllineitems} 2395 2396\begin{quote}\begin{description} 2397\item[{param}] \leavevmode 2398\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2399 2400\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure 2401 2402\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cb} - Callback function 2403 2404\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Callback argument 2405 2406\end{description}\end{quote} 2407 2408Set a callback to receive password and account expiration times. 2409\begin{quote} 2410 2411\sphinxstyleemphasis{cb} will be invoked if and only if credentials are successfully acquired. The callback will receive the \sphinxstyleemphasis{context} from the calling function and the \sphinxstyleemphasis{data} argument supplied with this API. The remaining arguments should be interpreted as follows: 2412\end{quote} 2413 2414If \sphinxstyleemphasis{is\_last\_req} is true, then the KDC reply contained last-req entries which unambiguously indicated the password expiration, account expiration, or both. (If either value was not present, the corresponding argument will be 0.) Furthermore, a non-zero \sphinxstyleemphasis{password\_expiration} should be taken as a suggestion from the KDC that a warning be displayed. 2415 2416If \sphinxstyleemphasis{is\_last\_req} is false, then \sphinxstyleemphasis{account\_expiration} will be 0 and \sphinxstyleemphasis{password\_expiration} will contain the expiration time of either the password or account, or 0 if no expiration time was indicated in the KDC reply. The callback should independently decide whether to display a password expiration warning. 2417 2418Note that \sphinxstyleemphasis{cb} may be invoked even if credentials are being acquired for the kadmin/changepw service in order to change the password. It is the caller’s responsibility to avoid displaying a password expiry warning in this case. 2419 2420\begin{sphinxadmonition}{warning}{Warning:} 2421Setting an expire callback with this API will cause {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_password()}}}} not to send password expiry warnings to the prompter, as it ordinarily may. 2422\end{sphinxadmonition} 2423 2424\begin{sphinxadmonition}{note}{Note:} 2425New in 1.9 2426\end{sphinxadmonition} 2427 2428 2429\subsubsection{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache - Set FAST armor cache in initial credential options.} 2430\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache:krb5-get-init-creds-opt-set-fast-ccache-set-fast-armor-cache-in-initial-credential-options}}\index{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache (C function)} 2431 2432\begin{fulllineitems} 2433\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache:c.krb5_get_init_creds_opt_set_fast_ccache}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}}{} 2434\end{fulllineitems} 2435 2436\begin{quote}\begin{description} 2437\item[{param}] \leavevmode 2438\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2439 2440\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options 2441 2442\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache handle 2443 2444\end{description}\end{quote} 2445 2446This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache_name:c.krb5_get_init_creds_opt_set_fast_ccache_name}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache\_name()}}}} , but uses a credential cache handle instead of a name. 2447 2448\begin{sphinxadmonition}{note}{Note:} 2449New in 1.9 2450\end{sphinxadmonition} 2451 2452 2453\subsubsection{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache\_name - Set location of FAST armor ccache in initial credential options.} 2454\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache_name:krb5-get-init-creds-opt-set-fast-ccache-name-set-location-of-fast-armor-ccache-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache_name::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache\_name (C function)} 2455 2456\begin{fulllineitems} 2457\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache_name:c.krb5_get_init_creds_opt_set_fast_ccache_name}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, const char *\sphinxstyleemphasis{ fast\_ccache\_name}}{} 2458\end{fulllineitems} 2459 2460\begin{quote}\begin{description} 2461\item[{param}] \leavevmode 2462\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2463 2464\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options 2465 2466\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fast\_ccache\_name} - Credential cache name 2467 2468\end{description}\end{quote} 2469 2470Sets the location of a credential cache containing an armor ticket to protect an initial credential exchange using the FAST protocol extension. 2471 2472In version 1.7, setting an armor ccache requires that FAST be used for the exchange. In version 1.8 or later, setting the armor ccache causes FAST to be used if the KDC supports it; {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_flags:c.krb5_get_init_creds_opt_set_fast_flags}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_set\_fast\_flags()}}}} must be used to require that FAST be used. 2473 2474 2475\subsubsection{krb5\_get\_init\_creds\_opt\_set\_fast\_flags - Set FAST flags in initial credential options.} 2476\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_flags:krb5-get-init-creds-opt-set-fast-flags-set-fast-flags-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_flags::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_fast\_flags (C function)} 2477 2478\begin{fulllineitems} 2479\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_flags:c.krb5_get_init_creds_opt_set_fast_flags}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_fast\_flags}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ flags}}{} 2480\end{fulllineitems} 2481 2482\begin{quote}\begin{description} 2483\item[{param}] \leavevmode 2484\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2485 2486\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options 2487 2488\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - FAST flags 2489 2490\end{description}\end{quote} 2491\begin{quote}\begin{description} 2492\item[{retval}] \leavevmode\begin{itemize} 2493\item {} 24940 - Success; Kerberos errors otherwise. 2495 2496\end{itemize} 2497 2498\end{description}\end{quote} 2499 2500The following flag values are valid: 2501\begin{itemize} 2502\item {} 2503{\hyperref[\detokenize{appdev/refs/macros/KRB5_FAST_REQUIRED:KRB5_FAST_REQUIRED}]{\sphinxcrossref{\sphinxcode{KRB5\_FAST\_REQUIRED}}}} - Require FAST to be used 2504 2505\end{itemize} 2506 2507 2508\subsubsection{krb5\_get\_init\_creds\_opt\_set\_forwardable - Set or unset the forwardable flag in initial credential options.} 2509\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_forwardable:krb5-get-init-creds-opt-set-forwardable-set-or-unset-the-forwardable-flag-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_forwardable::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_forwardable (C function)} 2510 2511\begin{fulllineitems} 2512\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_forwardable:c.krb5_get_init_creds_opt_set_forwardable}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_forwardable}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, int\sphinxstyleemphasis{ forwardable}}{} 2513\end{fulllineitems} 2514 2515\begin{quote}\begin{description} 2516\item[{param}] \leavevmode 2517\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure 2518 2519\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{forwardable} - Whether credentials should be forwardable 2520 2521\end{description}\end{quote} 2522 2523 2524\subsubsection{krb5\_get\_init\_creds\_opt\_set\_in\_ccache - Set an input credential cache in initial credential options.} 2525\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_in_ccache::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_in_ccache:krb5-get-init-creds-opt-set-in-ccache-set-an-input-credential-cache-in-initial-credential-options}}\index{krb5\_get\_init\_creds\_opt\_set\_in\_ccache (C function)} 2526 2527\begin{fulllineitems} 2528\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_in_ccache:c.krb5_get_init_creds_opt_set_in_ccache}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_in\_ccache}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}}{} 2529\end{fulllineitems} 2530 2531\begin{quote}\begin{description} 2532\item[{param}] \leavevmode 2533\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2534 2535\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options 2536 2537\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache handle 2538 2539\end{description}\end{quote} 2540 2541If an input credential cache is set, then the krb5\_get\_init\_creds family of APIs will read settings from it. Setting an input ccache is desirable when the application wishes to perform authentication in the same way (using the same preauthentication mechanisms, and making the same non-security- sensitive choices) as the previous authentication attempt, which stored information in the passed-in ccache. 2542 2543\begin{sphinxadmonition}{note}{Note:} 2544New in 1.11 2545\end{sphinxadmonition} 2546 2547 2548\subsubsection{krb5\_get\_init\_creds\_opt\_set\_out\_ccache - Set an output credential cache in initial credential options.} 2549\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_out_ccache:krb5-get-init-creds-opt-set-out-ccache-set-an-output-credential-cache-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_out_ccache::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_out\_ccache (C function)} 2550 2551\begin{fulllineitems} 2552\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_out_ccache:c.krb5_get_init_creds_opt_set_out_ccache}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_out\_ccache}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}}{} 2553\end{fulllineitems} 2554 2555\begin{quote}\begin{description} 2556\item[{param}] \leavevmode 2557\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2558 2559\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options 2560 2561\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache handle 2562 2563\end{description}\end{quote} 2564 2565If an output credential cache is set, then the krb5\_get\_init\_creds family of APIs will write credentials to it. Setting an output ccache is desirable both because it simplifies calling code and because it permits the krb5\_get\_init\_creds APIs to write out configuration information about the realm to the ccache. 2566 2567 2568\subsubsection{krb5\_get\_init\_creds\_opt\_set\_pa - Supply options for preauthentication in initial credential options.} 2569\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_pa::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_pa:krb5-get-init-creds-opt-set-pa-supply-options-for-preauthentication-in-initial-credential-options}}\index{krb5\_get\_init\_creds\_opt\_set\_pa (C function)} 2570 2571\begin{fulllineitems} 2572\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_pa:c.krb5_get_init_creds_opt_set_pa}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_pa}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, const char *\sphinxstyleemphasis{ attr}, const char *\sphinxstyleemphasis{ value}}{} 2573\end{fulllineitems} 2574 2575\begin{quote}\begin{description} 2576\item[{param}] \leavevmode 2577\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2578 2579\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure 2580 2581\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{attr} - Preauthentication option name 2582 2583\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{value} - Preauthentication option value 2584 2585\end{description}\end{quote} 2586 2587This function allows the caller to supply options for preauthentication. The values of \sphinxstyleemphasis{attr} and \sphinxstyleemphasis{value} are supplied to each preauthentication module available within \sphinxstyleemphasis{context} . 2588 2589 2590\subsubsection{krb5\_get\_init\_creds\_opt\_set\_pac\_request - Ask the KDC to include or not include a PAC in the ticket.} 2591\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_pac_request:krb5-get-init-creds-opt-set-pac-request-ask-the-kdc-to-include-or-not-include-a-pac-in-the-ticket}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_pac_request::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_pac\_request (C function)} 2592 2593\begin{fulllineitems} 2594\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_pac_request:c.krb5_get_init_creds_opt_set_pac_request}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_pac\_request}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}}\sphinxstyleemphasis{ req\_pac}}{} 2595\end{fulllineitems} 2596 2597\begin{quote}\begin{description} 2598\item[{param}] \leavevmode 2599\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2600 2601\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure 2602 2603\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{req\_pac} - Whether to request a PAC or not 2604 2605\end{description}\end{quote} 2606 2607If this option is set, the AS request will include a PAC-REQUEST pa-data item explicitly asking the KDC to either include or not include a privilege attribute certificate in the ticket authorization data. By default, no request is made; typically the KDC will default to including a PAC if it supports them. 2608 2609\begin{sphinxadmonition}{note}{Note:} 2610New in 1.15 2611\end{sphinxadmonition} 2612 2613 2614\subsubsection{krb5\_get\_init\_creds\_opt\_set\_preauth\_list - Set preauthentication types in initial credential options.} 2615\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_preauth_list:krb5-get-init-creds-opt-set-preauth-list-set-preauthentication-types-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_preauth_list::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_preauth\_list (C function)} 2616 2617\begin{fulllineitems} 2618\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_preauth_list:c.krb5_get_init_creds_opt_set_preauth_list}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_preauth\_list}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}]{\sphinxcrossref{krb5\_preauthtype}}} *\sphinxstyleemphasis{ preauth\_list}, int\sphinxstyleemphasis{ preauth\_list\_length}}{} 2619\end{fulllineitems} 2620 2621\begin{quote}\begin{description} 2622\item[{param}] \leavevmode 2623\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure 2624 2625\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{preauth\_list} - Array of preauthentication types 2626 2627\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{preauth\_list\_length} - Length of \sphinxstyleemphasis{preauth\_list} 2628 2629\end{description}\end{quote} 2630 2631This function can be used to perform optimistic preauthentication when getting initial credentials, in combination with {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_salt:c.krb5_get_init_creds_opt_set_salt}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_set\_salt()}}}} and {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_pa:c.krb5_get_init_creds_opt_set_pa}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_set\_pa()}}}} . 2632 2633 2634\subsubsection{krb5\_get\_init\_creds\_opt\_set\_proxiable - Set or unset the proxiable flag in initial credential options.} 2635\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_proxiable::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_proxiable:krb5-get-init-creds-opt-set-proxiable-set-or-unset-the-proxiable-flag-in-initial-credential-options}}\index{krb5\_get\_init\_creds\_opt\_set\_proxiable (C function)} 2636 2637\begin{fulllineitems} 2638\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_proxiable:c.krb5_get_init_creds_opt_set_proxiable}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_proxiable}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, int\sphinxstyleemphasis{ proxiable}}{} 2639\end{fulllineitems} 2640 2641\begin{quote}\begin{description} 2642\item[{param}] \leavevmode 2643\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure 2644 2645\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{proxiable} - Whether credentials should be proxiable 2646 2647\end{description}\end{quote} 2648 2649 2650\subsubsection{krb5\_get\_init\_creds\_opt\_set\_renew\_life - Set the ticket renewal lifetime in initial credential options.} 2651\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_renew_life::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_renew_life:krb5-get-init-creds-opt-set-renew-life-set-the-ticket-renewal-lifetime-in-initial-credential-options}}\index{krb5\_get\_init\_creds\_opt\_set\_renew\_life (C function)} 2652 2653\begin{fulllineitems} 2654\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_renew_life:c.krb5_get_init_creds_opt_set_renew_life}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_renew\_life}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{krb5\_deltat}}}\sphinxstyleemphasis{ renew\_life}}{} 2655\end{fulllineitems} 2656 2657\begin{quote}\begin{description} 2658\item[{param}] \leavevmode 2659\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Pointer to \sphinxstyleemphasis{options} field 2660 2661\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{renew\_life} - Ticket renewal lifetime 2662 2663\end{description}\end{quote} 2664 2665 2666\subsubsection{krb5\_get\_init\_creds\_opt\_set\_responder - Set the responder function in initial credential options.} 2667\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_responder:krb5-get-init-creds-opt-set-responder-set-the-responder-function-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_responder::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_responder (C function)} 2668 2669\begin{fulllineitems} 2670\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_responder:c.krb5_get_init_creds_opt_set_responder}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_responder}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_fn:c.krb5_responder_fn}]{\sphinxcrossref{krb5\_responder\_fn}}}\sphinxstyleemphasis{ responder}, void *\sphinxstyleemphasis{ data}}{} 2671\end{fulllineitems} 2672 2673\begin{quote}\begin{description} 2674\item[{param}] \leavevmode 2675\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2676 2677\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure 2678 2679\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{responder} - Responder function 2680 2681\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Responder data argument 2682 2683\end{description}\end{quote} 2684 2685\begin{sphinxadmonition}{note}{Note:} 2686New in 1.11 2687\end{sphinxadmonition} 2688 2689 2690\subsubsection{krb5\_get\_init\_creds\_opt\_set\_salt - Set salt for optimistic preauthentication in initial credential options.} 2691\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_salt:krb5-get-init-creds-opt-set-salt-set-salt-for-optimistic-preauthentication-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_salt::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_salt (C function)} 2692 2693\begin{fulllineitems} 2694\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_salt:c.krb5_get_init_creds_opt_set_salt}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_salt}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ salt}}{} 2695\end{fulllineitems} 2696 2697\begin{quote}\begin{description} 2698\item[{param}] \leavevmode 2699\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure 2700 2701\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{salt} - Salt data 2702 2703\end{description}\end{quote} 2704 2705When getting initial credentials with a password, a salt string it used to convert the password to a key. Normally this salt is obtained from the first KDC reply, but when performing optimistic preauthentication, the client may need to supply the salt string with this function. 2706 2707 2708\subsubsection{krb5\_get\_init\_creds\_opt\_set\_tkt\_life - Set the ticket lifetime in initial credential options.} 2709\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_tkt_life:krb5-get-init-creds-opt-set-tkt-life-set-the-ticket-lifetime-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_tkt_life::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_tkt\_life (C function)} 2710 2711\begin{fulllineitems} 2712\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_tkt_life:c.krb5_get_init_creds_opt_set_tkt_life}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_tkt\_life}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{krb5\_deltat}}}\sphinxstyleemphasis{ tkt\_life}}{} 2713\end{fulllineitems} 2714 2715\begin{quote}\begin{description} 2716\item[{param}] \leavevmode 2717\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure 2718 2719\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{tkt\_life} - Ticket lifetime 2720 2721\end{description}\end{quote} 2722 2723 2724\subsubsection{krb5\_get\_init\_creds\_password - Get initial credentials using a password.} 2725\label{\detokenize{appdev/refs/api/krb5_get_init_creds_password::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_password:krb5-get-init-creds-password-get-initial-credentials-using-a-password}}\index{krb5\_get\_init\_creds\_password (C function)} 2726 2727\begin{fulllineitems} 2728\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_password}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ client}, const char *\sphinxstyleemphasis{ password}, {\hyperref[\detokenize{appdev/refs/types/krb5_prompter_fct:c.krb5_prompter_fct}]{\sphinxcrossref{krb5\_prompter\_fct}}}\sphinxstyleemphasis{ prompter}, void *\sphinxstyleemphasis{ data}, {\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{krb5\_deltat}}}\sphinxstyleemphasis{ start\_time}, const char *\sphinxstyleemphasis{ in\_tkt\_service}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ k5\_gic\_options}}{} 2729\end{fulllineitems} 2730 2731\begin{quote}\begin{description} 2732\item[{param}] \leavevmode 2733\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2734 2735\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - New credentials 2736 2737\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal 2738 2739\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{password} - Password (or NULL) 2740 2741\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompter} - Prompter function 2742 2743\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Prompter callback data 2744 2745\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{start\_time} - Time when ticket becomes valid (0 for now) 2746 2747\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_tkt\_service} - Service name of initial credentials (or NULL) 2748 2749\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k5\_gic\_options} - Initial credential options 2750 2751\end{description}\end{quote} 2752\begin{quote}\begin{description} 2753\item[{retval}] \leavevmode\begin{itemize} 2754\item {} 27550 Success 2756 2757\item {} 2758EINVAL Invalid argument 2759 2760\item {} 2761KRB5\_KDC\_UNREACH Cannot contact any KDC for requested realm 2762 2763\item {} 2764KRB5\_PREAUTH\_FAILED Generic Pre-athentication failure 2765 2766\item {} 2767KRB5\_LIBOS\_PWDINTR Password read interrupted 2768 2769\item {} 2770KRB5\_REALM\_CANT\_RESOLVE Cannot resolve network address for KDC in requested realm 2771 2772\item {} 2773KRB5KDC\_ERR\_KEY\_EXP Password has expired 2774 2775\item {} 2776KRB5\_LIBOS\_BADPWDMATCH Password mismatch 2777 2778\item {} 2779KRB5\_CHPW\_PWDNULL New password cannot be zero length 2780 2781\item {} 2782KRB5\_CHPW\_FAIL Password change failed 2783 2784\end{itemize} 2785 2786\item[{return}] \leavevmode\begin{itemize} 2787\item {} 2788Kerberos error codes 2789 2790\end{itemize} 2791 2792\end{description}\end{quote} 2793 2794This function requests KDC for an initial credentials for \sphinxstyleemphasis{client} using \sphinxstyleemphasis{password} . If \sphinxstyleemphasis{password} is NULL, a password will be prompted for using \sphinxstyleemphasis{prompter} if necessary. If \sphinxstyleemphasis{in\_tkt\_service} is specified, it is parsed as a principal name (with the realm ignored) and used as the service principal for the request; otherwise the ticket-granting service is used. 2795 2796 2797\subsubsection{krb5\_get\_profile - Retrieve configuration profile from the context.} 2798\label{\detokenize{appdev/refs/api/krb5_get_profile::doc}}\label{\detokenize{appdev/refs/api/krb5_get_profile:krb5-get-profile-retrieve-configuration-profile-from-the-context}}\index{krb5\_get\_profile (C function)} 2799 2800\begin{fulllineitems} 2801\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_profile:c.krb5_get_profile}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_profile}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, struct \_profile\_t **\sphinxstyleemphasis{ profile}}{} 2802\end{fulllineitems} 2803 2804\begin{quote}\begin{description} 2805\item[{param}] \leavevmode 2806\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2807 2808\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{profile} - Pointer to data read from a configuration file 2809 2810\end{description}\end{quote} 2811\begin{quote}\begin{description} 2812\item[{retval}] \leavevmode\begin{itemize} 2813\item {} 28140 Success 2815 2816\end{itemize} 2817 2818\item[{return}] \leavevmode\begin{itemize} 2819\item {} 2820Kerberos error codes 2821 2822\end{itemize} 2823 2824\end{description}\end{quote} 2825 2826This function creates a new \sphinxstyleemphasis{profile} object that reflects profile in the supplied \sphinxstyleemphasis{context} . 2827 2828The \sphinxstyleemphasis{profile} object may be freed with profile\_release() function. See profile.h and profile API for more details. 2829 2830 2831\subsubsection{krb5\_get\_prompt\_types - Get prompt types array from a context.} 2832\label{\detokenize{appdev/refs/api/krb5_get_prompt_types::doc}}\label{\detokenize{appdev/refs/api/krb5_get_prompt_types:krb5-get-prompt-types-get-prompt-types-array-from-a-context}}\index{krb5\_get\_prompt\_types (C function)} 2833 2834\begin{fulllineitems} 2835\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_prompt_types:c.krb5_get_prompt_types}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_prompt_type:c.krb5_prompt_type}]{\sphinxcrossref{krb5\_prompt\_type}}} * \sphinxbfcode{krb5\_get\_prompt\_types}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}}{} 2836\end{fulllineitems} 2837 2838\begin{quote}\begin{description} 2839\item[{param}] \leavevmode 2840\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2841 2842\end{description}\end{quote} 2843\begin{quote}\begin{description} 2844\item[{return}] \leavevmode\begin{itemize} 2845\item {} 2846Pointer to an array of prompt types corresponding to the prompter’s prompts arguments. Each type has one of the following values: KRB5\_PROMPT\_TYPE\_PASSWORD KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD\_AGAIN KRB5\_PROMPT\_TYPE\_PREAUTH 2847 2848\end{itemize} 2849 2850\end{description}\end{quote} 2851 2852 2853\subsubsection{krb5\_get\_renewed\_creds - Get renewed credential from KDC using an existing credential.} 2854\label{\detokenize{appdev/refs/api/krb5_get_renewed_creds:krb5-get-renewed-creds-get-renewed-credential-from-kdc-using-an-existing-credential}}\label{\detokenize{appdev/refs/api/krb5_get_renewed_creds::doc}}\index{krb5\_get\_renewed\_creds (C function)} 2855 2856\begin{fulllineitems} 2857\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_renewed_creds:c.krb5_get_renewed_creds}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_renewed\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ client}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, const char *\sphinxstyleemphasis{ in\_tkt\_service}}{} 2858\end{fulllineitems} 2859 2860\begin{quote}\begin{description} 2861\item[{param}] \leavevmode 2862\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2863 2864\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - Renewed credentials 2865 2866\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal name 2867 2868\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache 2869 2870\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_tkt\_service} - Server principal string (or NULL) 2871 2872\end{description}\end{quote} 2873\begin{quote}\begin{description} 2874\item[{retval}] \leavevmode\begin{itemize} 2875\item {} 28760 Success 2877 2878\end{itemize} 2879 2880\item[{return}] \leavevmode\begin{itemize} 2881\item {} 2882Kerberos error codes 2883 2884\end{itemize} 2885 2886\end{description}\end{quote} 2887 2888This function gets a renewed credential using an existing one from \sphinxstyleemphasis{ccache} . If \sphinxstyleemphasis{in\_tkt\_service} is specified, it is parsed (with the realm part ignored) and used as the server principal of the credential; otherwise, the ticket-granting service is used. 2889 2890If successful, the renewed credential is placed in \sphinxstyleemphasis{creds} . 2891 2892 2893\subsubsection{krb5\_get\_validated\_creds - Get validated credentials from the KDC.} 2894\label{\detokenize{appdev/refs/api/krb5_get_validated_creds:krb5-get-validated-creds-get-validated-credentials-from-the-kdc}}\label{\detokenize{appdev/refs/api/krb5_get_validated_creds::doc}}\index{krb5\_get\_validated\_creds (C function)} 2895 2896\begin{fulllineitems} 2897\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_validated_creds:c.krb5_get_validated_creds}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_validated\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ client}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, const char *\sphinxstyleemphasis{ in\_tkt\_service}}{} 2898\end{fulllineitems} 2899 2900\begin{quote}\begin{description} 2901\item[{param}] \leavevmode 2902\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 2903 2904\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - Validated credentials 2905 2906\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal name 2907 2908\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache 2909 2910\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_tkt\_service} - Server principal string (or NULL) 2911 2912\end{description}\end{quote} 2913\begin{quote}\begin{description} 2914\item[{retval}] \leavevmode\begin{itemize} 2915\item {} 29160 Success 2917 2918\item {} 2919KRB5\_NO\_2ND\_TKT Request missing second ticket 2920 2921\item {} 2922KRB5\_NO\_TKT\_SUPPLIED Request did not supply a ticket 2923 2924\item {} 2925KRB5\_PRINC\_NOMATCH Requested principal and ticket do not match 2926 2927\item {} 2928KRB5\_KDCREP\_MODIFIED KDC reply did not match expectations 2929 2930\item {} 2931KRB5\_KDCREP\_SKEW Clock skew too great in KDC reply 2932 2933\end{itemize} 2934 2935\item[{return}] \leavevmode\begin{itemize} 2936\item {} 2937Kerberos error codes 2938 2939\end{itemize} 2940 2941\end{description}\end{quote} 2942 2943This function gets a validated credential using a postdated credential from \sphinxstyleemphasis{ccache} . If \sphinxstyleemphasis{in\_tkt\_service} is specified, it is parsed (with the realm part ignored) and used as the server principal of the credential; otherwise, the ticket-granting service is used. 2944 2945If successful, the validated credential is placed in \sphinxstyleemphasis{creds} . 2946 2947 2948\subsubsection{krb5\_init\_context - Create a krb5 library context.} 2949\label{\detokenize{appdev/refs/api/krb5_init_context:krb5-init-context-create-a-krb5-library-context}}\label{\detokenize{appdev/refs/api/krb5_init_context::doc}}\index{krb5\_init\_context (C function)} 2950 2951\begin{fulllineitems} 2952\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_context:c.krb5_init_context}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_context}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}} *\sphinxstyleemphasis{ context}}{} 2953\end{fulllineitems} 2954 2955\begin{quote}\begin{description} 2956\item[{param}] \leavevmode 2957\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{context} - Library context 2958 2959\end{description}\end{quote} 2960\begin{quote}\begin{description} 2961\item[{retval}] \leavevmode\begin{itemize} 2962\item {} 29630 Success 2964 2965\end{itemize} 2966 2967\item[{return}] \leavevmode\begin{itemize} 2968\item {} 2969Kerberos error codes 2970 2971\end{itemize} 2972 2973\end{description}\end{quote} 2974 2975The \sphinxstyleemphasis{context} must be released by calling {\hyperref[\detokenize{appdev/refs/api/krb5_free_context:c.krb5_free_context}]{\sphinxcrossref{\sphinxcode{krb5\_free\_context()}}}} when it is no longer needed. 2976 2977\begin{sphinxadmonition}{warning}{Warning:} 2978Any program or module that needs the Kerberos code to not trust the environment must use {\hyperref[\detokenize{appdev/refs/api/krb5_init_secure_context:c.krb5_init_secure_context}]{\sphinxcrossref{\sphinxcode{krb5\_init\_secure\_context()}}}} , or clean out the environment. 2979\end{sphinxadmonition} 2980 2981 2982\subsubsection{krb5\_init\_secure\_context - Create a krb5 library context using only configuration files.} 2983\label{\detokenize{appdev/refs/api/krb5_init_secure_context::doc}}\label{\detokenize{appdev/refs/api/krb5_init_secure_context:krb5-init-secure-context-create-a-krb5-library-context-using-only-configuration-files}}\index{krb5\_init\_secure\_context (C function)} 2984 2985\begin{fulllineitems} 2986\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_secure_context:c.krb5_init_secure_context}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_secure\_context}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}} *\sphinxstyleemphasis{ context}}{} 2987\end{fulllineitems} 2988 2989\begin{quote}\begin{description} 2990\item[{param}] \leavevmode 2991\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{context} - Library context 2992 2993\end{description}\end{quote} 2994\begin{quote}\begin{description} 2995\item[{retval}] \leavevmode\begin{itemize} 2996\item {} 29970 Success 2998 2999\end{itemize} 3000 3001\item[{return}] \leavevmode\begin{itemize} 3002\item {} 3003Kerberos error codes 3004 3005\end{itemize} 3006 3007\end{description}\end{quote} 3008 3009Create a context structure, using only system configuration files. All information passed through the environment variables is ignored. 3010 3011The \sphinxstyleemphasis{context} must be released by calling {\hyperref[\detokenize{appdev/refs/api/krb5_free_context:c.krb5_free_context}]{\sphinxcrossref{\sphinxcode{krb5\_free\_context()}}}} when it is no longer needed. 3012 3013 3014\subsubsection{krb5\_is\_config\_principal - Test whether a principal is a configuration principal.} 3015\label{\detokenize{appdev/refs/api/krb5_is_config_principal:krb5-is-config-principal-test-whether-a-principal-is-a-configuration-principal}}\label{\detokenize{appdev/refs/api/krb5_is_config_principal::doc}}\index{krb5\_is\_config\_principal (C function)} 3016 3017\begin{fulllineitems} 3018\phantomsection\label{\detokenize{appdev/refs/api/krb5_is_config_principal:c.krb5_is_config_principal}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_is\_config\_principal}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}}{} 3019\end{fulllineitems} 3020 3021\begin{quote}\begin{description} 3022\item[{param}] \leavevmode 3023\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3024 3025\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal to check 3026 3027\end{description}\end{quote} 3028\begin{quote}\begin{description} 3029\item[{return}] \leavevmode\begin{itemize} 3030\item {} 3031TRUE if the principal is a configuration principal (generated part of krb5\_cc\_set\_config() ); FALSE otherwise. 3032 3033\end{itemize} 3034 3035\end{description}\end{quote} 3036 3037 3038\subsubsection{krb5\_is\_thread\_safe - Test whether the Kerberos library was built with multithread support.} 3039\label{\detokenize{appdev/refs/api/krb5_is_thread_safe::doc}}\label{\detokenize{appdev/refs/api/krb5_is_thread_safe:krb5-is-thread-safe-test-whether-the-kerberos-library-was-built-with-multithread-support}}\index{krb5\_is\_thread\_safe (C function)} 3040 3041\begin{fulllineitems} 3042\phantomsection\label{\detokenize{appdev/refs/api/krb5_is_thread_safe:c.krb5_is_thread_safe}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_is\_thread\_safe}}{void\sphinxstyleemphasis{ None}}{} 3043\end{fulllineitems} 3044 3045\begin{quote}\begin{description} 3046\item[{param}] \leavevmode 3047\sphinxstylestrong{None} 3048 3049\end{description}\end{quote} 3050\begin{quote}\begin{description} 3051\item[{retval}] \leavevmode\begin{itemize} 3052\item {} 3053TRUE if the library is threadsafe; FALSE otherwise 3054 3055\end{itemize} 3056 3057\end{description}\end{quote} 3058 3059 3060\subsubsection{krb5\_kt\_close - Close a key table handle.} 3061\label{\detokenize{appdev/refs/api/krb5_kt_close:krb5-kt-close-close-a-key-table-handle}}\label{\detokenize{appdev/refs/api/krb5_kt_close::doc}}\index{krb5\_kt\_close (C function)} 3062 3063\begin{fulllineitems} 3064\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_close:c.krb5_kt_close}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_close}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}}{} 3065\end{fulllineitems} 3066 3067\begin{quote}\begin{description} 3068\item[{param}] \leavevmode 3069\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3070 3071\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle 3072 3073\end{description}\end{quote} 3074\begin{quote}\begin{description} 3075\item[{retval}] \leavevmode\begin{itemize} 3076\item {} 30770 None 3078 3079\end{itemize} 3080 3081\end{description}\end{quote} 3082 3083 3084\subsubsection{krb5\_kt\_client\_default - Resolve the default client key table.} 3085\label{\detokenize{appdev/refs/api/krb5_kt_client_default::doc}}\label{\detokenize{appdev/refs/api/krb5_kt_client_default:krb5-kt-client-default-resolve-the-default-client-key-table}}\index{krb5\_kt\_client\_default (C function)} 3086 3087\begin{fulllineitems} 3088\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_client_default:c.krb5_kt_client_default}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_client\_default}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}} *\sphinxstyleemphasis{ keytab\_out}}{} 3089\end{fulllineitems} 3090 3091\begin{quote}\begin{description} 3092\item[{param}] \leavevmode 3093\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3094 3095\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keytab\_out} - Key table handle 3096 3097\end{description}\end{quote} 3098\begin{quote}\begin{description} 3099\item[{retval}] \leavevmode\begin{itemize} 3100\item {} 31010 Success 3102 3103\end{itemize} 3104 3105\item[{return}] \leavevmode\begin{itemize} 3106\item {} 3107Kerberos error codes 3108 3109\end{itemize} 3110 3111\end{description}\end{quote} 3112 3113Fill \sphinxstyleemphasis{keytab\_out} with a handle to the default client key table. 3114 3115\begin{sphinxadmonition}{note}{Note:} 3116New in 1.11 3117\end{sphinxadmonition} 3118 3119 3120\subsubsection{krb5\_kt\_default - Resolve the default key table.} 3121\label{\detokenize{appdev/refs/api/krb5_kt_default:krb5-kt-default-resolve-the-default-key-table}}\label{\detokenize{appdev/refs/api/krb5_kt_default::doc}}\index{krb5\_kt\_default (C function)} 3122 3123\begin{fulllineitems} 3124\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_default:c.krb5_kt_default}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_default}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}} *\sphinxstyleemphasis{ id}}{} 3125\end{fulllineitems} 3126 3127\begin{quote}\begin{description} 3128\item[{param}] \leavevmode 3129\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3130 3131\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{id} - Key table handle 3132 3133\end{description}\end{quote} 3134\begin{quote}\begin{description} 3135\item[{retval}] \leavevmode\begin{itemize} 3136\item {} 31370 Success 3138 3139\end{itemize} 3140 3141\item[{return}] \leavevmode\begin{itemize} 3142\item {} 3143Kerberos error codes 3144 3145\end{itemize} 3146 3147\end{description}\end{quote} 3148 3149Set \sphinxstyleemphasis{id} to a handle to the default key table. The key table is not opened. 3150 3151 3152\subsubsection{krb5\_kt\_default\_name - Get the default key table name.} 3153\label{\detokenize{appdev/refs/api/krb5_kt_default_name::doc}}\label{\detokenize{appdev/refs/api/krb5_kt_default_name:krb5-kt-default-name-get-the-default-key-table-name}}\index{krb5\_kt\_default\_name (C function)} 3154 3155\begin{fulllineitems} 3156\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_default_name:c.krb5_kt_default_name}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_default\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, char *\sphinxstyleemphasis{ name}, int\sphinxstyleemphasis{ name\_size}}{} 3157\end{fulllineitems} 3158 3159\begin{quote}\begin{description} 3160\item[{param}] \leavevmode 3161\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3162 3163\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} - Default key table name 3164 3165\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name\_size} - Space available in \sphinxstyleemphasis{name} 3166 3167\end{description}\end{quote} 3168\begin{quote}\begin{description} 3169\item[{retval}] \leavevmode\begin{itemize} 3170\item {} 31710 Success 3172 3173\item {} 3174KRB5\_CONFIG\_NOTENUFSPACE Buffer is too short 3175 3176\end{itemize} 3177 3178\item[{return}] \leavevmode\begin{itemize} 3179\item {} 3180Kerberos error codes 3181 3182\end{itemize} 3183 3184\end{description}\end{quote} 3185 3186Fill \sphinxstyleemphasis{name} with the name of the default key table for \sphinxstyleemphasis{context} . 3187 3188 3189\subsubsection{krb5\_kt\_dup - Duplicate keytab handle.} 3190\label{\detokenize{appdev/refs/api/krb5_kt_dup:krb5-kt-dup-duplicate-keytab-handle}}\label{\detokenize{appdev/refs/api/krb5_kt_dup::doc}}\index{krb5\_kt\_dup (C function)} 3191 3192\begin{fulllineitems} 3193\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_dup:c.krb5_kt_dup}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_dup}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ in}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}} *\sphinxstyleemphasis{ out}}{} 3194\end{fulllineitems} 3195 3196\begin{quote}\begin{description} 3197\item[{param}] \leavevmode 3198\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3199 3200\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in} - Key table handle to be duplicated 3201 3202\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Key table handle 3203 3204\end{description}\end{quote} 3205 3206Create a new handle referring to the same key table as \sphinxstyleemphasis{in} . The new handle and \sphinxstyleemphasis{in} can be closed independently. 3207 3208\begin{sphinxadmonition}{note}{Note:} 3209New in 1.12 3210\end{sphinxadmonition} 3211 3212 3213\subsubsection{krb5\_kt\_get\_name - Get a key table name.} 3214\label{\detokenize{appdev/refs/api/krb5_kt_get_name::doc}}\label{\detokenize{appdev/refs/api/krb5_kt_get_name:krb5-kt-get-name-get-a-key-table-name}}\index{krb5\_kt\_get\_name (C function)} 3215 3216\begin{fulllineitems} 3217\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_get_name:c.krb5_kt_get_name}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_get\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}, char *\sphinxstyleemphasis{ name}, unsigned int\sphinxstyleemphasis{ namelen}}{} 3218\end{fulllineitems} 3219 3220\begin{quote}\begin{description} 3221\item[{param}] \leavevmode 3222\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3223 3224\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle 3225 3226\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} - Key table name 3227 3228\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{namelen} - Maximum length to fill in name 3229 3230\end{description}\end{quote} 3231\begin{quote}\begin{description} 3232\item[{retval}] \leavevmode\begin{itemize} 3233\item {} 32340 Success 3235 3236\item {} 3237KRB5\_KT\_NAME\_TOOLONG Key table name does not fit in namelen bytes 3238 3239\end{itemize} 3240 3241\item[{return}] \leavevmode\begin{itemize} 3242\item {} 3243Kerberos error codes 3244 3245\end{itemize} 3246 3247\end{description}\end{quote} 3248 3249Fill \sphinxstyleemphasis{name} with the name of \sphinxstyleemphasis{keytab} including the type and delimiter. 3250 3251 3252\subsubsection{krb5\_kt\_get\_type - Return the type of a key table.} 3253\label{\detokenize{appdev/refs/api/krb5_kt_get_type:krb5-kt-get-type-return-the-type-of-a-key-table}}\label{\detokenize{appdev/refs/api/krb5_kt_get_type::doc}}\index{krb5\_kt\_get\_type (C function)} 3254 3255\begin{fulllineitems} 3256\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_get_type:c.krb5_kt_get_type}}\pysiglinewithargsret{const char * \sphinxbfcode{krb5\_kt\_get\_type}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}}{} 3257\end{fulllineitems} 3258 3259\begin{quote}\begin{description} 3260\item[{param}] \leavevmode 3261\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3262 3263\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle 3264 3265\end{description}\end{quote} 3266\begin{quote}\begin{description} 3267\item[{return}] \leavevmode\begin{itemize} 3268\item {} 3269The type of a key table as an alias that must not be modified or freed by the caller. 3270 3271\end{itemize} 3272 3273\end{description}\end{quote} 3274 3275 3276\subsubsection{krb5\_kt\_resolve - Get a handle for a key table.} 3277\label{\detokenize{appdev/refs/api/krb5_kt_resolve:krb5-kt-resolve-get-a-handle-for-a-key-table}}\label{\detokenize{appdev/refs/api/krb5_kt_resolve::doc}}\index{krb5\_kt\_resolve (C function)} 3278 3279\begin{fulllineitems} 3280\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_resolve:c.krb5_kt_resolve}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_resolve}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ name}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}} *\sphinxstyleemphasis{ ktid}}{} 3281\end{fulllineitems} 3282 3283\begin{quote}\begin{description} 3284\item[{param}] \leavevmode 3285\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3286 3287\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - Name of the key table 3288 3289\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ktid} - Key table handle 3290 3291\end{description}\end{quote} 3292\begin{quote}\begin{description} 3293\item[{retval}] \leavevmode\begin{itemize} 3294\item {} 32950 Success 3296 3297\end{itemize} 3298 3299\item[{return}] \leavevmode\begin{itemize} 3300\item {} 3301Kerberos error codes 3302 3303\end{itemize} 3304 3305\end{description}\end{quote} 3306 3307Resolve the key table name \sphinxstyleemphasis{name} and set \sphinxstyleemphasis{ktid} to a handle identifying the key table. Use {\hyperref[\detokenize{appdev/refs/api/krb5_kt_close:c.krb5_kt_close}]{\sphinxcrossref{\sphinxcode{krb5\_kt\_close()}}}} to free \sphinxstyleemphasis{ktid} when it is no longer needed. 3308\begin{quote} 3309 3310\sphinxstyleemphasis{name} must be of the form \sphinxstylestrong{type:residual} , where \sphinxstyleemphasis{type} must be a type known to the library and \sphinxstyleemphasis{residual} portion should be specific to the particular keytab type. If no \sphinxstyleemphasis{type} is given, the default is \sphinxstylestrong{FILE} . 3311\end{quote} 3312 3313If \sphinxstyleemphasis{name} is of type \sphinxstylestrong{FILE} , the keytab file is not opened by this call. 3314 3315 3316\subsubsection{krb5\_kuserok - Determine if a principal is authorized to log in as a local user.} 3317\label{\detokenize{appdev/refs/api/krb5_kuserok:krb5-kuserok-determine-if-a-principal-is-authorized-to-log-in-as-a-local-user}}\label{\detokenize{appdev/refs/api/krb5_kuserok::doc}}\index{krb5\_kuserok (C function)} 3318 3319\begin{fulllineitems} 3320\phantomsection\label{\detokenize{appdev/refs/api/krb5_kuserok:c.krb5_kuserok}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_kuserok}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ principal}, const char *\sphinxstyleemphasis{ luser}}{} 3321\end{fulllineitems} 3322 3323\begin{quote}\begin{description} 3324\item[{param}] \leavevmode 3325\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3326 3327\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal name 3328 3329\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{luser} - Local username 3330 3331\end{description}\end{quote} 3332\begin{quote}\begin{description} 3333\item[{retval}] \leavevmode\begin{itemize} 3334\item {} 3335TRUE Principal is authorized to log in as user; FALSE otherwise. 3336 3337\end{itemize} 3338 3339\end{description}\end{quote} 3340 3341Determine whether \sphinxstyleemphasis{principal} is authorized to log in as a local user \sphinxstyleemphasis{luser} . 3342 3343 3344\subsubsection{krb5\_parse\_name - Convert a string principal name to a krb5\_principal structure.} 3345\label{\detokenize{appdev/refs/api/krb5_parse_name::doc}}\label{\detokenize{appdev/refs/api/krb5_parse_name:krb5-parse-name-convert-a-string-principal-name-to-a-krb5-principal-structure}}\index{krb5\_parse\_name (C function)} 3346 3347\begin{fulllineitems} 3348\phantomsection\label{\detokenize{appdev/refs/api/krb5_parse_name:c.krb5_parse_name}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_parse\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ name}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ principal\_out}}{} 3349\end{fulllineitems} 3350 3351\begin{quote}\begin{description} 3352\item[{param}] \leavevmode 3353\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3354 3355\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - String representation of a principal name 3356 3357\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{principal\_out} - New principal 3358 3359\end{description}\end{quote} 3360\begin{quote}\begin{description} 3361\item[{retval}] \leavevmode\begin{itemize} 3362\item {} 33630 Success 3364 3365\end{itemize} 3366 3367\item[{return}] \leavevmode\begin{itemize} 3368\item {} 3369Kerberos error codes 3370 3371\end{itemize} 3372 3373\end{description}\end{quote} 3374 3375Convert a string representation of a principal name to a krb5\_principal structure. 3376 3377A string representation of a Kerberos name consists of one or more principal name components, separated by slashes, optionally followed by the @ character and a realm name. If the realm name is not specified, the local realm is used. 3378 3379To use the slash and @ symbols as part of a component (quoted) instead of using them as a component separator or as a realm prefix), put a backslash () character in front of the symbol. Similarly, newline, tab, backspace, and NULL characters can be included in a component by using \sphinxstylestrong{n} , \sphinxstylestrong{t} , \sphinxstylestrong{b} or \sphinxstylestrong{0} , respectively. 3380 3381Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}} to free \sphinxstyleemphasis{principal\_out} when it is no longer needed. 3382 3383\begin{sphinxadmonition}{note}{Note:} 3384The realm in a Kerberos \sphinxstyleemphasis{name} cannot contain slash, colon, or NULL characters. 3385\end{sphinxadmonition} 3386 3387 3388\subsubsection{krb5\_parse\_name\_flags - Convert a string principal name to a krb5\_principal with flags.} 3389\label{\detokenize{appdev/refs/api/krb5_parse_name_flags:krb5-parse-name-flags-convert-a-string-principal-name-to-a-krb5-principal-with-flags}}\label{\detokenize{appdev/refs/api/krb5_parse_name_flags::doc}}\index{krb5\_parse\_name\_flags (C function)} 3390 3391\begin{fulllineitems} 3392\phantomsection\label{\detokenize{appdev/refs/api/krb5_parse_name_flags:c.krb5_parse_name_flags}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_parse\_name\_flags}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ name}, int\sphinxstyleemphasis{ flags}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ principal\_out}}{} 3393\end{fulllineitems} 3394 3395\begin{quote}\begin{description} 3396\item[{param}] \leavevmode 3397\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3398 3399\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - String representation of a principal name 3400 3401\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flag 3402 3403\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{principal\_out} - New principal 3404 3405\end{description}\end{quote} 3406\begin{quote}\begin{description} 3407\item[{retval}] \leavevmode\begin{itemize} 3408\item {} 34090 Success 3410 3411\end{itemize} 3412 3413\item[{return}] \leavevmode\begin{itemize} 3414\item {} 3415Kerberos error codes 3416 3417\end{itemize} 3418 3419\end{description}\end{quote} 3420 3421Similar to {\hyperref[\detokenize{appdev/refs/api/krb5_parse_name:c.krb5_parse_name}]{\sphinxcrossref{\sphinxcode{krb5\_parse\_name()}}}} , this function converts a single-string representation of a principal name to a krb5\_principal structure. 3422 3423The following flags are valid: 3424\begin{quote} 3425\begin{itemize} 3426\item {} 3427{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_REALM:KRB5_PRINCIPAL_PARSE_NO_REALM}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM}}}} - no realm must be present in \sphinxstyleemphasis{name} 3428 3429\item {} 3430{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_REQUIRE_REALM:KRB5_PRINCIPAL_PARSE_REQUIRE_REALM}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_REQUIRE\_REALM}}}} - realm must be present in \sphinxstyleemphasis{name} 3431 3432\item {} 3433{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE:KRB5_PRINCIPAL_PARSE_ENTERPRISE}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE}}}} - create single-component enterprise principal 3434 3435\item {} 3436{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_IGNORE_REALM:KRB5_PRINCIPAL_PARSE_IGNORE_REALM}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM}}}} - ignore realm if present in \sphinxstyleemphasis{name} 3437 3438\end{itemize} 3439 3440If \sphinxstylestrong{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM} or \sphinxstylestrong{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM} is specified in \sphinxstyleemphasis{flags} , the realm of the new principal will be empty. Otherwise, the default realm for \sphinxstyleemphasis{context} will be used if \sphinxstyleemphasis{name} does not specify a realm. 3441\end{quote} 3442 3443Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}} to free \sphinxstyleemphasis{principal\_out} when it is no longer needed. 3444 3445 3446\subsubsection{krb5\_principal\_compare - Compare two principals.} 3447\label{\detokenize{appdev/refs/api/krb5_principal_compare:krb5-principal-compare-compare-two-principals}}\label{\detokenize{appdev/refs/api/krb5_principal_compare::doc}}\index{krb5\_principal\_compare (C function)} 3448 3449\begin{fulllineitems} 3450\phantomsection\label{\detokenize{appdev/refs/api/krb5_principal_compare:c.krb5_principal_compare}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_principal\_compare}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ1}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ2}}{} 3451\end{fulllineitems} 3452 3453\begin{quote}\begin{description} 3454\item[{param}] \leavevmode 3455\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3456 3457\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ1} - First principal 3458 3459\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ2} - Second principal 3460 3461\end{description}\end{quote} 3462\begin{quote}\begin{description} 3463\item[{retval}] \leavevmode\begin{itemize} 3464\item {} 3465TRUE if the principals are the same; FALSE otherwise 3466 3467\end{itemize} 3468 3469\end{description}\end{quote} 3470 3471 3472\subsubsection{krb5\_principal\_compare\_any\_realm - Compare two principals ignoring realm components.} 3473\label{\detokenize{appdev/refs/api/krb5_principal_compare_any_realm:krb5-principal-compare-any-realm-compare-two-principals-ignoring-realm-components}}\label{\detokenize{appdev/refs/api/krb5_principal_compare_any_realm::doc}}\index{krb5\_principal\_compare\_any\_realm (C function)} 3474 3475\begin{fulllineitems} 3476\phantomsection\label{\detokenize{appdev/refs/api/krb5_principal_compare_any_realm:c.krb5_principal_compare_any_realm}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_principal\_compare\_any\_realm}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ1}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ2}}{} 3477\end{fulllineitems} 3478 3479\begin{quote}\begin{description} 3480\item[{param}] \leavevmode 3481\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3482 3483\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ1} - First principal 3484 3485\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ2} - Second principal 3486 3487\end{description}\end{quote} 3488\begin{quote}\begin{description} 3489\item[{retval}] \leavevmode\begin{itemize} 3490\item {} 3491TRUE if the principals are the same; FALSE otherwise 3492 3493\end{itemize} 3494 3495\end{description}\end{quote} 3496 3497Similar to {\hyperref[\detokenize{appdev/refs/api/krb5_principal_compare:c.krb5_principal_compare}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_compare()}}}} , but do not compare the realm components of the principals. 3498 3499 3500\subsubsection{krb5\_principal\_compare\_flags - Compare two principals with additional flags.} 3501\label{\detokenize{appdev/refs/api/krb5_principal_compare_flags:krb5-principal-compare-flags-compare-two-principals-with-additional-flags}}\label{\detokenize{appdev/refs/api/krb5_principal_compare_flags::doc}}\index{krb5\_principal\_compare\_flags (C function)} 3502 3503\begin{fulllineitems} 3504\phantomsection\label{\detokenize{appdev/refs/api/krb5_principal_compare_flags:c.krb5_principal_compare_flags}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_principal\_compare\_flags}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ1}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ2}, int\sphinxstyleemphasis{ flags}}{} 3505\end{fulllineitems} 3506 3507\begin{quote}\begin{description} 3508\item[{param}] \leavevmode 3509\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3510 3511\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ1} - First principal 3512 3513\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ2} - Second principal 3514 3515\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flags 3516 3517\end{description}\end{quote} 3518\begin{quote}\begin{description} 3519\item[{retval}] \leavevmode\begin{itemize} 3520\item {} 3521TRUE if the principal names are the same; FALSE otherwise 3522 3523\end{itemize} 3524 3525\end{description}\end{quote} 3526 3527Valid flags are: 3528\begin{itemize} 3529\item {} 3530{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_IGNORE_REALM:KRB5_PRINCIPAL_COMPARE_IGNORE_REALM}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_IGNORE\_REALM}}}} - ignore realm component 3531 3532\item {} 3533{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_ENTERPRISE:KRB5_PRINCIPAL_COMPARE_ENTERPRISE}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_ENTERPRISE}}}} - UPNs as real principals 3534 3535\item {} 3536{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD:KRB5_PRINCIPAL_COMPARE_CASEFOLD}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD}}}} case-insensitive 3537 3538\item {} 3539{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8:KRB5_PRINCIPAL_COMPARE_UTF8}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_UTF8}}}} - treat principals as UTF-8 3540 3541\end{itemize} 3542 3543 3544\sphinxstrong{See also:} 3545 3546 3547{\hyperref[\detokenize{appdev/refs/api/krb5_principal_compare:c.krb5_principal_compare}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_compare()}}}} 3548 3549 3550 3551 3552\subsubsection{krb5\_prompter\_posix - Prompt user for password.} 3553\label{\detokenize{appdev/refs/api/krb5_prompter_posix:krb5-prompter-posix-prompt-user-for-password}}\label{\detokenize{appdev/refs/api/krb5_prompter_posix::doc}}\index{krb5\_prompter\_posix (C function)} 3554 3555\begin{fulllineitems} 3556\phantomsection\label{\detokenize{appdev/refs/api/krb5_prompter_posix:c.krb5_prompter_posix}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_prompter\_posix}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, void *\sphinxstyleemphasis{ data}, const char *\sphinxstyleemphasis{ name}, const char *\sphinxstyleemphasis{ banner}, int\sphinxstyleemphasis{ num\_prompts}, {\hyperref[\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt}]{\sphinxcrossref{krb5\_prompt}}}\sphinxstyleemphasis{ prompts}}{} 3557\end{fulllineitems} 3558 3559\begin{quote}\begin{description} 3560\item[{param}] \leavevmode 3561\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3562 3563\sphinxstylestrong{data} - Unused (callback argument) 3564 3565\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - Name to output during prompt 3566 3567\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{banner} - Banner to output during prompt 3568 3569\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_prompts} - Number of prompts in \sphinxstyleemphasis{prompts} 3570 3571\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompts} - Array of prompts and replies 3572 3573\end{description}\end{quote} 3574\begin{quote}\begin{description} 3575\item[{retval}] \leavevmode\begin{itemize} 3576\item {} 35770 Success 3578 3579\end{itemize} 3580 3581\item[{return}] \leavevmode\begin{itemize} 3582\item {} 3583Kerberos error codes 3584 3585\end{itemize} 3586 3587\end{description}\end{quote} 3588 3589This function is intended to be used as a prompter callback for {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_password()}}}} or {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_init:c.krb5_init_creds_init}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_init()}}}} . 3590 3591Writes \sphinxstyleemphasis{name} and \sphinxstyleemphasis{banner} to stdout, each followed by a newline, then writes each prompt field in the \sphinxstyleemphasis{prompts} array, followed by”:”, and sets the reply field of the entry to a line of input read from stdin. If the hidden flag is set for a prompt, then terminal echoing is turned off when input is read. 3592 3593 3594\subsubsection{krb5\_realm\_compare - Compare the realms of two principals.} 3595\label{\detokenize{appdev/refs/api/krb5_realm_compare::doc}}\label{\detokenize{appdev/refs/api/krb5_realm_compare:krb5-realm-compare-compare-the-realms-of-two-principals}}\index{krb5\_realm\_compare (C function)} 3596 3597\begin{fulllineitems} 3598\phantomsection\label{\detokenize{appdev/refs/api/krb5_realm_compare:c.krb5_realm_compare}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_realm\_compare}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ1}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ2}}{} 3599\end{fulllineitems} 3600 3601\begin{quote}\begin{description} 3602\item[{param}] \leavevmode 3603\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3604 3605\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ1} - First principal 3606 3607\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ2} - Second principal 3608 3609\end{description}\end{quote} 3610\begin{quote}\begin{description} 3611\item[{retval}] \leavevmode\begin{itemize} 3612\item {} 3613TRUE if the realm names are the same; FALSE otherwise 3614 3615\end{itemize} 3616 3617\end{description}\end{quote} 3618 3619 3620\subsubsection{krb5\_responder\_get\_challenge - Retrieve the challenge data for a given question in the responder context.} 3621\label{\detokenize{appdev/refs/api/krb5_responder_get_challenge:krb5-responder-get-challenge-retrieve-the-challenge-data-for-a-given-question-in-the-responder-context}}\label{\detokenize{appdev/refs/api/krb5_responder_get_challenge::doc}}\index{krb5\_responder\_get\_challenge (C function)} 3622 3623\begin{fulllineitems} 3624\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_get_challenge:c.krb5_responder_get_challenge}}\pysiglinewithargsret{const char * \sphinxbfcode{krb5\_responder\_get\_challenge}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{krb5\_responder\_context}}}\sphinxstyleemphasis{ rctx}, const char *\sphinxstyleemphasis{ question}}{} 3625\end{fulllineitems} 3626 3627\begin{quote}\begin{description} 3628\item[{param}] \leavevmode 3629\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 3630 3631\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context 3632 3633\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{question} - Question name 3634 3635\end{description}\end{quote} 3636 3637Return a pointer to a C string containing the challenge for \sphinxstyleemphasis{question} within \sphinxstyleemphasis{rctx} , or NULL if the question is not present in \sphinxstyleemphasis{rctx} . The structure of the question depends on the question name, but will always be printable UTF-8 text. The returned pointer is an alias, valid only as long as the lifetime of \sphinxstyleemphasis{rctx} , and should not be modified or freed by the caller. 3638 3639\begin{sphinxadmonition}{note}{Note:} 3640New in 1.11 3641\end{sphinxadmonition} 3642 3643 3644\subsubsection{krb5\_responder\_list\_questions - List the question names contained in the responder context.} 3645\label{\detokenize{appdev/refs/api/krb5_responder_list_questions::doc}}\label{\detokenize{appdev/refs/api/krb5_responder_list_questions:krb5-responder-list-questions-list-the-question-names-contained-in-the-responder-context}}\index{krb5\_responder\_list\_questions (C function)} 3646 3647\begin{fulllineitems} 3648\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_list_questions:c.krb5_responder_list_questions}}\pysiglinewithargsret{const char *const * \sphinxbfcode{krb5\_responder\_list\_questions}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{krb5\_responder\_context}}}\sphinxstyleemphasis{ rctx}}{} 3649\end{fulllineitems} 3650 3651\begin{quote}\begin{description} 3652\item[{param}] \leavevmode 3653\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 3654 3655\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context 3656 3657\end{description}\end{quote} 3658 3659Return a pointer to a null-terminated list of question names which are present in \sphinxstyleemphasis{rctx} . The pointer is an alias, valid only as long as the lifetime of \sphinxstyleemphasis{rctx} , and should not be modified or freed by the caller. A question’s challenge can be retrieved using {\hyperref[\detokenize{appdev/refs/api/krb5_responder_get_challenge:c.krb5_responder_get_challenge}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_get\_challenge()}}}} and answered using {\hyperref[\detokenize{appdev/refs/api/krb5_responder_set_answer:c.krb5_responder_set_answer}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_set\_answer()}}}} . 3660 3661\begin{sphinxadmonition}{note}{Note:} 3662New in 1.11 3663\end{sphinxadmonition} 3664 3665 3666\subsubsection{krb5\_responder\_set\_answer - Answer a named question in the responder context.} 3667\label{\detokenize{appdev/refs/api/krb5_responder_set_answer:krb5-responder-set-answer-answer-a-named-question-in-the-responder-context}}\label{\detokenize{appdev/refs/api/krb5_responder_set_answer::doc}}\index{krb5\_responder\_set\_answer (C function)} 3668 3669\begin{fulllineitems} 3670\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_set_answer:c.krb5_responder_set_answer}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_responder\_set\_answer}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{krb5\_responder\_context}}}\sphinxstyleemphasis{ rctx}, const char *\sphinxstyleemphasis{ question}, const char *\sphinxstyleemphasis{ answer}}{} 3671\end{fulllineitems} 3672 3673\begin{quote}\begin{description} 3674\item[{param}] \leavevmode 3675\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 3676 3677\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context 3678 3679\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{question} - Question name 3680 3681\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{answer} - The string to set (MUST be printable UTF-8) 3682 3683\end{description}\end{quote} 3684\begin{quote}\begin{description} 3685\item[{retval}] \leavevmode\begin{itemize} 3686\item {} 3687EINVAL question is not present within rctx 3688 3689\end{itemize} 3690 3691\end{description}\end{quote} 3692 3693This function supplies an answer to \sphinxstyleemphasis{question} within \sphinxstyleemphasis{rctx} . The appropriate form of the answer depends on the question name. 3694 3695\begin{sphinxadmonition}{note}{Note:} 3696New in 1.11 3697\end{sphinxadmonition} 3698 3699 3700\subsubsection{krb5\_responder\_otp\_get\_challenge - Decode the KRB5\_RESPONDER\_QUESTION\_OTP to a C struct.} 3701\label{\detokenize{appdev/refs/api/krb5_responder_otp_get_challenge:krb5-responder-otp-get-challenge-decode-the-krb5-responder-question-otp-to-a-c-struct}}\label{\detokenize{appdev/refs/api/krb5_responder_otp_get_challenge::doc}}\index{krb5\_responder\_otp\_get\_challenge (C function)} 3702 3703\begin{fulllineitems} 3704\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_otp_get_challenge:c.krb5_responder_otp_get_challenge}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_responder\_otp\_get\_challenge}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{krb5\_responder\_context}}}\sphinxstyleemphasis{ rctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_otp_challenge:c.krb5_responder_otp_challenge}]{\sphinxcrossref{krb5\_responder\_otp\_challenge}}} **\sphinxstyleemphasis{ chl}}{} 3705\end{fulllineitems} 3706 3707\begin{quote}\begin{description} 3708\item[{param}] \leavevmode 3709\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 3710 3711\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context 3712 3713\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{chl} - Challenge structure 3714 3715\end{description}\end{quote} 3716 3717A convenience function which parses the KRB5\_RESPONDER\_QUESTION\_OTP question challenge data, making it available in native C. The main feature of this function is the ability to interact with OTP tokens without parsing the JSON. 3718 3719The returned value must be passed to {\hyperref[\detokenize{appdev/refs/api/krb5_responder_otp_challenge_free:c.krb5_responder_otp_challenge_free}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_otp\_challenge\_free()}}}} to be freed. 3720 3721\begin{sphinxadmonition}{note}{Note:} 3722New in 1.11 3723\end{sphinxadmonition} 3724 3725 3726\subsubsection{krb5\_responder\_otp\_set\_answer - Answer the KRB5\_RESPONDER\_QUESTION\_OTP question.} 3727\label{\detokenize{appdev/refs/api/krb5_responder_otp_set_answer:krb5-responder-otp-set-answer-answer-the-krb5-responder-question-otp-question}}\label{\detokenize{appdev/refs/api/krb5_responder_otp_set_answer::doc}}\index{krb5\_responder\_otp\_set\_answer (C function)} 3728 3729\begin{fulllineitems} 3730\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_otp_set_answer:c.krb5_responder_otp_set_answer}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_responder\_otp\_set\_answer}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{krb5\_responder\_context}}}\sphinxstyleemphasis{ rctx}, size\_t\sphinxstyleemphasis{ ti}, const char *\sphinxstyleemphasis{ value}, const char *\sphinxstyleemphasis{ pin}}{} 3731\end{fulllineitems} 3732 3733\begin{quote}\begin{description} 3734\item[{param}] \leavevmode 3735\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 3736 3737\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context 3738 3739\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ti} - The index of the tokeninfo selected 3740 3741\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{value} - The value to set, or NULL for none 3742 3743\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pin} - The pin to set, or NULL for none 3744 3745\end{description}\end{quote} 3746 3747\begin{sphinxadmonition}{note}{Note:} 3748New in 1.11 3749\end{sphinxadmonition} 3750 3751 3752\subsubsection{krb5\_responder\_otp\_challenge\_free - Free the value returned by krb5\_responder\_otp\_get\_challenge() .} 3753\label{\detokenize{appdev/refs/api/krb5_responder_otp_challenge_free:krb5-responder-otp-challenge-free-free-the-value-returned-by-krb5-responder-otp-get-challenge}}\label{\detokenize{appdev/refs/api/krb5_responder_otp_challenge_free::doc}}\index{krb5\_responder\_otp\_challenge\_free (C function)} 3754 3755\begin{fulllineitems} 3756\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_otp_challenge_free:c.krb5_responder_otp_challenge_free}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_responder\_otp\_challenge\_free}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{krb5\_responder\_context}}}\sphinxstyleemphasis{ rctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_otp_challenge:c.krb5_responder_otp_challenge}]{\sphinxcrossref{krb5\_responder\_otp\_challenge}}} *\sphinxstyleemphasis{ chl}}{} 3757\end{fulllineitems} 3758 3759\begin{quote}\begin{description} 3760\item[{param}] \leavevmode 3761\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 3762 3763\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context 3764 3765\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{chl} - The challenge to free 3766 3767\end{description}\end{quote} 3768 3769\begin{sphinxadmonition}{note}{Note:} 3770New in 1.11 3771\end{sphinxadmonition} 3772 3773 3774\subsubsection{krb5\_responder\_pkinit\_get\_challenge - Decode the KRB5\_RESPONDER\_QUESTION\_PKINIT to a C struct.} 3775\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_get_challenge:krb5-responder-pkinit-get-challenge-decode-the-krb5-responder-question-pkinit-to-a-c-struct}}\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_get_challenge::doc}}\index{krb5\_responder\_pkinit\_get\_challenge (C function)} 3776 3777\begin{fulllineitems} 3778\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_get_challenge:c.krb5_responder_pkinit_get_challenge}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_responder\_pkinit\_get\_challenge}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{krb5\_responder\_context}}}\sphinxstyleemphasis{ rctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:c.krb5_responder_pkinit_challenge}]{\sphinxcrossref{krb5\_responder\_pkinit\_challenge}}} **\sphinxstyleemphasis{ chl\_out}}{} 3779\end{fulllineitems} 3780 3781\begin{quote}\begin{description} 3782\item[{param}] \leavevmode 3783\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 3784 3785\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context 3786 3787\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{chl\_out} - Challenge structure 3788 3789\end{description}\end{quote} 3790 3791A convenience function which parses the KRB5\_RESPONDER\_QUESTION\_PKINIT question challenge data, making it available in native C. The main feature of this function is the ability to read the challenge without parsing the JSON. 3792 3793The returned value must be passed to {\hyperref[\detokenize{appdev/refs/api/krb5_responder_pkinit_challenge_free:c.krb5_responder_pkinit_challenge_free}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_pkinit\_challenge\_free()}}}} to be freed. 3794 3795\begin{sphinxadmonition}{note}{Note:} 3796New in 1.12 3797\end{sphinxadmonition} 3798 3799 3800\subsubsection{krb5\_responder\_pkinit\_set\_answer - Answer the KRB5\_RESPONDER\_QUESTION\_PKINIT question for one identity.} 3801\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_set_answer:krb5-responder-pkinit-set-answer-answer-the-krb5-responder-question-pkinit-question-for-one-identity}}\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_set_answer::doc}}\index{krb5\_responder\_pkinit\_set\_answer (C function)} 3802 3803\begin{fulllineitems} 3804\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_set_answer:c.krb5_responder_pkinit_set_answer}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_responder\_pkinit\_set\_answer}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{krb5\_responder\_context}}}\sphinxstyleemphasis{ rctx}, const char *\sphinxstyleemphasis{ identity}, const char *\sphinxstyleemphasis{ pin}}{} 3805\end{fulllineitems} 3806 3807\begin{quote}\begin{description} 3808\item[{param}] \leavevmode 3809\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 3810 3811\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context 3812 3813\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{identity} - The identity for which a PIN is being supplied 3814 3815\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pin} - The provided PIN, or NULL for none 3816 3817\end{description}\end{quote} 3818 3819\begin{sphinxadmonition}{note}{Note:} 3820New in 1.12 3821\end{sphinxadmonition} 3822 3823 3824\subsubsection{krb5\_responder\_pkinit\_challenge\_free - Free the value returned by krb5\_responder\_pkinit\_get\_challenge() .} 3825\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_challenge_free:krb5-responder-pkinit-challenge-free-free-the-value-returned-by-krb5-responder-pkinit-get-challenge}}\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_challenge_free::doc}}\index{krb5\_responder\_pkinit\_challenge\_free (C function)} 3826 3827\begin{fulllineitems} 3828\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_challenge_free:c.krb5_responder_pkinit_challenge_free}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_responder\_pkinit\_challenge\_free}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{krb5\_responder\_context}}}\sphinxstyleemphasis{ rctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:c.krb5_responder_pkinit_challenge}]{\sphinxcrossref{krb5\_responder\_pkinit\_challenge}}} *\sphinxstyleemphasis{ chl}}{} 3829\end{fulllineitems} 3830 3831\begin{quote}\begin{description} 3832\item[{param}] \leavevmode 3833\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 3834 3835\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context 3836 3837\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{chl} - The challenge to free 3838 3839\end{description}\end{quote} 3840 3841\begin{sphinxadmonition}{note}{Note:} 3842New in 1.12 3843\end{sphinxadmonition} 3844 3845 3846\subsubsection{krb5\_set\_default\_realm - Override the default realm for the specified context.} 3847\label{\detokenize{appdev/refs/api/krb5_set_default_realm::doc}}\label{\detokenize{appdev/refs/api/krb5_set_default_realm:krb5-set-default-realm-override-the-default-realm-for-the-specified-context}}\index{krb5\_set\_default\_realm (C function)} 3848 3849\begin{fulllineitems} 3850\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_default_realm:c.krb5_set_default_realm}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_set\_default\_realm}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ lrealm}}{} 3851\end{fulllineitems} 3852 3853\begin{quote}\begin{description} 3854\item[{param}] \leavevmode 3855\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3856 3857\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{lrealm} - Realm name for the default realm 3858 3859\end{description}\end{quote} 3860\begin{quote}\begin{description} 3861\item[{retval}] \leavevmode\begin{itemize} 3862\item {} 38630 Success 3864 3865\end{itemize} 3866 3867\item[{return}] \leavevmode\begin{itemize} 3868\item {} 3869Kerberos error codes 3870 3871\end{itemize} 3872 3873\end{description}\end{quote} 3874 3875If \sphinxstyleemphasis{lrealm} is NULL, clear the default realm setting. 3876 3877 3878\subsubsection{krb5\_set\_password - Set a password for a principal using specified credentials.} 3879\label{\detokenize{appdev/refs/api/krb5_set_password:krb5-set-password-set-a-password-for-a-principal-using-specified-credentials}}\label{\detokenize{appdev/refs/api/krb5_set_password::doc}}\index{krb5\_set\_password (C function)} 3880 3881\begin{fulllineitems} 3882\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_password:c.krb5_set_password}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_set\_password}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, const char *\sphinxstyleemphasis{ newpw}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ change\_password\_for}, int *\sphinxstyleemphasis{ result\_code}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ result\_code\_string}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ result\_string}}{} 3883\end{fulllineitems} 3884 3885\begin{quote}\begin{description} 3886\item[{param}] \leavevmode 3887\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3888 3889\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Credentials for kadmin/changepw service 3890 3891\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{newpw} - New password 3892 3893\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{change\_password\_for} - Change the password for this principal 3894 3895\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code} - Numeric error code from server 3896 3897\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code\_string} - String equivalent to \sphinxstyleemphasis{result\_code} 3898 3899\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_string} - Data returned from the remote system 3900 3901\end{description}\end{quote} 3902\begin{quote}\begin{description} 3903\item[{retval}] \leavevmode\begin{itemize} 3904\item {} 39050 Success and result\_code is set to KRB5\_KPASSWD\_SUCCESS . 3906 3907\end{itemize} 3908 3909\item[{return}] \leavevmode\begin{itemize} 3910\item {} 3911Kerberos error codes. 3912 3913\end{itemize} 3914 3915\end{description}\end{quote} 3916 3917This function uses the credentials \sphinxstyleemphasis{creds} to set the password \sphinxstyleemphasis{newpw} for the principal \sphinxstyleemphasis{change\_password\_for} . It implements the set password operation of RFC 3244, for interoperability with Microsoft Windows implementations. 3918 3919The error code and strings are returned in \sphinxstyleemphasis{result\_code} , \sphinxstyleemphasis{result\_code\_string} and \sphinxstyleemphasis{result\_string} . 3920 3921\begin{sphinxadmonition}{note}{Note:} 3922If \sphinxstyleemphasis{change\_password\_for} is NULL, the change is performed on the current principal. If \sphinxstyleemphasis{change\_password\_for} is non-null, the change is performed on the principal name passed in \sphinxstyleemphasis{change\_password\_for} . 3923\end{sphinxadmonition} 3924 3925 3926\subsubsection{krb5\_set\_password\_using\_ccache - Set a password for a principal using cached credentials.} 3927\label{\detokenize{appdev/refs/api/krb5_set_password_using_ccache:krb5-set-password-using-ccache-set-a-password-for-a-principal-using-cached-credentials}}\label{\detokenize{appdev/refs/api/krb5_set_password_using_ccache::doc}}\index{krb5\_set\_password\_using\_ccache (C function)} 3928 3929\begin{fulllineitems} 3930\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_password_using_ccache:c.krb5_set_password_using_ccache}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_set\_password\_using\_ccache}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, const char *\sphinxstyleemphasis{ newpw}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ change\_password\_for}, int *\sphinxstyleemphasis{ result\_code}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ result\_code\_string}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ result\_string}}{} 3931\end{fulllineitems} 3932 3933\begin{quote}\begin{description} 3934\item[{param}] \leavevmode 3935\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3936 3937\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache 3938 3939\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{newpw} - New password 3940 3941\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{change\_password\_for} - Change the password for this principal 3942 3943\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code} - Numeric error code from server 3944 3945\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code\_string} - String equivalent to \sphinxstyleemphasis{result\_code} 3946 3947\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_string} - Data returned from the remote system 3948 3949\end{description}\end{quote} 3950\begin{quote}\begin{description} 3951\item[{retval}] \leavevmode\begin{itemize} 3952\item {} 39530 Success 3954 3955\end{itemize} 3956 3957\item[{return}] \leavevmode\begin{itemize} 3958\item {} 3959Kerberos error codes 3960 3961\end{itemize} 3962 3963\end{description}\end{quote} 3964 3965This function uses the cached credentials from \sphinxstyleemphasis{ccache} to set the password \sphinxstyleemphasis{newpw} for the principal \sphinxstyleemphasis{change\_password\_for} . It implements RFC 3244 set password operation (interoperable with MS Windows implementations) using the credential cache. 3966 3967The error code and strings are returned in \sphinxstyleemphasis{result\_code} , \sphinxstyleemphasis{result\_code\_string} and \sphinxstyleemphasis{result\_string} . 3968 3969\begin{sphinxadmonition}{note}{Note:} 3970If \sphinxstyleemphasis{change\_password\_for} is set to NULL, the change is performed on the default principal in \sphinxstyleemphasis{ccache} . If \sphinxstyleemphasis{change\_password\_for} is non null, the change is performed on the specified principal. 3971\end{sphinxadmonition} 3972 3973 3974\subsubsection{krb5\_set\_principal\_realm - Set the realm field of a principal.} 3975\label{\detokenize{appdev/refs/api/krb5_set_principal_realm::doc}}\label{\detokenize{appdev/refs/api/krb5_set_principal_realm:krb5-set-principal-realm-set-the-realm-field-of-a-principal}}\index{krb5\_set\_principal\_realm (C function)} 3976 3977\begin{fulllineitems} 3978\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_principal_realm:c.krb5_set_principal_realm}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_set\_principal\_realm}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ principal}, const char *\sphinxstyleemphasis{ realm}}{} 3979\end{fulllineitems} 3980 3981\begin{quote}\begin{description} 3982\item[{param}] \leavevmode 3983\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 3984 3985\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal name 3986 3987\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm name 3988 3989\end{description}\end{quote} 3990\begin{quote}\begin{description} 3991\item[{retval}] \leavevmode\begin{itemize} 3992\item {} 39930 Success 3994 3995\end{itemize} 3996 3997\item[{return}] \leavevmode\begin{itemize} 3998\item {} 3999Kerberos error codes 4000 4001\end{itemize} 4002 4003\end{description}\end{quote} 4004 4005Set the realm name part of \sphinxstyleemphasis{principal} to \sphinxstyleemphasis{realm} , overwriting the previous realm. 4006 4007 4008\subsubsection{krb5\_set\_trace\_callback - Specify a callback function for trace events.} 4009\label{\detokenize{appdev/refs/api/krb5_set_trace_callback:krb5-set-trace-callback-specify-a-callback-function-for-trace-events}}\label{\detokenize{appdev/refs/api/krb5_set_trace_callback::doc}}\index{krb5\_set\_trace\_callback (C function)} 4010 4011\begin{fulllineitems} 4012\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_trace_callback:c.krb5_set_trace_callback}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_set\_trace\_callback}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_trace_callback:c.krb5_trace_callback}]{\sphinxcrossref{krb5\_trace\_callback}}}\sphinxstyleemphasis{ fn}, void *\sphinxstyleemphasis{ cb\_data}}{} 4013\end{fulllineitems} 4014 4015\begin{quote}\begin{description} 4016\item[{param}] \leavevmode 4017\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4018 4019\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fn} - Callback function 4020 4021\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cb\_data} - Callback data 4022 4023\end{description}\end{quote} 4024\begin{quote}\begin{description} 4025\item[{return}] \leavevmode\begin{itemize} 4026\item {} 4027Returns KRB5\_TRACE\_NOSUPP if tracing is not supported in the library (unless fn is NULL). 4028 4029\end{itemize} 4030 4031\end{description}\end{quote} 4032 4033Specify a callback for trace events occurring in krb5 operations performed within \sphinxstyleemphasis{context} . \sphinxstyleemphasis{fn} will be invoked with \sphinxstyleemphasis{context} as the first argument, \sphinxstyleemphasis{cb\_data} as the last argument, and a pointer to a krb5\_trace\_info as the second argument. If the trace callback is reset via this function or \sphinxstyleemphasis{context} is destroyed, \sphinxstyleemphasis{fn} will be invoked with a NULL second argument so it can clean up \sphinxstyleemphasis{cb\_data} . Supply a NULL value for \sphinxstyleemphasis{fn} to disable trace callbacks within \sphinxstyleemphasis{context} . 4034 4035\begin{sphinxadmonition}{note}{Note:} 4036This function overrides the information passed through the \sphinxstyleemphasis{KRB5\_TRACE} environment variable. 4037\end{sphinxadmonition} 4038 4039\begin{sphinxadmonition}{note}{Note:} 4040New in 1.9 4041\end{sphinxadmonition} 4042 4043 4044\subsubsection{krb5\_set\_trace\_filename - Specify a file name for directing trace events.} 4045\label{\detokenize{appdev/refs/api/krb5_set_trace_filename:krb5-set-trace-filename-specify-a-file-name-for-directing-trace-events}}\label{\detokenize{appdev/refs/api/krb5_set_trace_filename::doc}}\index{krb5\_set\_trace\_filename (C function)} 4046 4047\begin{fulllineitems} 4048\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_trace_filename:c.krb5_set_trace_filename}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_set\_trace\_filename}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ filename}}{} 4049\end{fulllineitems} 4050 4051\begin{quote}\begin{description} 4052\item[{param}] \leavevmode 4053\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4054 4055\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{filename} - File name 4056 4057\end{description}\end{quote} 4058\begin{quote}\begin{description} 4059\item[{retval}] \leavevmode\begin{itemize} 4060\item {} 4061KRB5\_TRACE\_NOSUPP Tracing is not supported in the library. 4062 4063\end{itemize} 4064 4065\end{description}\end{quote} 4066 4067Open \sphinxstyleemphasis{filename} for appending (creating it, if necessary) and set up a callback to write trace events to it. 4068 4069\begin{sphinxadmonition}{note}{Note:} 4070This function overrides the information passed through the \sphinxstyleemphasis{KRB5\_TRACE} environment variable. 4071\end{sphinxadmonition} 4072 4073\begin{sphinxadmonition}{note}{Note:} 4074New in 1.9 4075\end{sphinxadmonition} 4076 4077 4078\subsubsection{krb5\_sname\_match - Test whether a principal matches a matching principal.} 4079\label{\detokenize{appdev/refs/api/krb5_sname_match::doc}}\label{\detokenize{appdev/refs/api/krb5_sname_match:krb5-sname-match-test-whether-a-principal-matches-a-matching-principal}}\index{krb5\_sname\_match (C function)} 4080 4081\begin{fulllineitems} 4082\phantomsection\label{\detokenize{appdev/refs/api/krb5_sname_match:c.krb5_sname_match}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_sname\_match}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ matching}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ}}{} 4083\end{fulllineitems} 4084 4085\begin{quote}\begin{description} 4086\item[{param}] \leavevmode 4087\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4088 4089\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{matching} - Matching principal 4090 4091\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ} - Principal to test 4092 4093\end{description}\end{quote} 4094\begin{quote}\begin{description} 4095\item[{return}] \leavevmode\begin{itemize} 4096\item {} 4097TRUE if princ matches matching , FALSE otherwise. 4098 4099\end{itemize} 4100 4101\end{description}\end{quote} 4102 4103If \sphinxstyleemphasis{matching} is NULL, return TRUE. If \sphinxstyleemphasis{matching} is not a matching principal, return the value of krb5\_principal\_compare(context, matching, princ). 4104 4105\begin{sphinxadmonition}{note}{Note:} 4106A matching principal is a host-based principal with an empty realm and/or second data component (hostname). Profile configuration may cause the hostname to be ignored even if it is present. A principal matches a matching principal if the former has the same non-empty (and non-ignored) components of the latter. 4107\end{sphinxadmonition} 4108 4109 4110\subsubsection{krb5\_sname\_to\_principal - Generate a full principal name from a service name.} 4111\label{\detokenize{appdev/refs/api/krb5_sname_to_principal:krb5-sname-to-principal-generate-a-full-principal-name-from-a-service-name}}\label{\detokenize{appdev/refs/api/krb5_sname_to_principal::doc}}\index{krb5\_sname\_to\_principal (C function)} 4112 4113\begin{fulllineitems} 4114\phantomsection\label{\detokenize{appdev/refs/api/krb5_sname_to_principal:c.krb5_sname_to_principal}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_sname\_to\_principal}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ hostname}, const char *\sphinxstyleemphasis{ sname}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}\sphinxstyleemphasis{ type}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ ret\_princ}}{} 4115\end{fulllineitems} 4116 4117\begin{quote}\begin{description} 4118\item[{param}] \leavevmode 4119\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4120 4121\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{hostname} - Host name, or NULL to use local host 4122 4123\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{sname} - Service name, or NULL to use \sphinxstylestrong{“host”} 4124 4125\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - Principal type 4126 4127\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ret\_princ} - Generated principal 4128 4129\end{description}\end{quote} 4130\begin{quote}\begin{description} 4131\item[{retval}] \leavevmode\begin{itemize} 4132\item {} 41330 Success 4134 4135\end{itemize} 4136 4137\item[{return}] \leavevmode\begin{itemize} 4138\item {} 4139Kerberos error codes 4140 4141\end{itemize} 4142 4143\end{description}\end{quote} 4144 4145This function converts a \sphinxstyleemphasis{hostname} and \sphinxstyleemphasis{sname} into \sphinxstyleemphasis{krb5\_principal} structure \sphinxstyleemphasis{ret\_princ} . The returned principal will be of the form \sphinxstyleemphasis{sname/hostname@REALM} where REALM is determined by {\hyperref[\detokenize{appdev/refs/api/krb5_get_host_realm:c.krb5_get_host_realm}]{\sphinxcrossref{\sphinxcode{krb5\_get\_host\_realm()}}}} . In some cases this may be the referral (empty) realm. 4146 4147The \sphinxstyleemphasis{type} can be one of the following: 4148\begin{quote} 4149\begin{itemize} 4150\item {} 4151{\hyperref[\detokenize{appdev/refs/macros/KRB5_NT_SRV_HST:KRB5_NT_SRV_HST}]{\sphinxcrossref{\sphinxcode{KRB5\_NT\_SRV\_HST}}}} canonicalizes the host name before looking up the realm and generating the principal. 4152 4153\item {} 4154{\hyperref[\detokenize{appdev/refs/macros/KRB5_NT_UNKNOWN:KRB5_NT_UNKNOWN}]{\sphinxcrossref{\sphinxcode{KRB5\_NT\_UNKNOWN}}}} accepts the hostname as given, and does not canonicalize it. 4155 4156\end{itemize} 4157 4158Use krb5\_free\_principal to free \sphinxstyleemphasis{ret\_princ} when it is no longer needed. 4159\end{quote} 4160 4161 4162\subsubsection{krb5\_unparse\_name - Convert a krb5\_principal structure to a string representation.} 4163\label{\detokenize{appdev/refs/api/krb5_unparse_name:krb5-unparse-name-convert-a-krb5-principal-structure-to-a-string-representation}}\label{\detokenize{appdev/refs/api/krb5_unparse_name::doc}}\index{krb5\_unparse\_name (C function)} 4164 4165\begin{fulllineitems} 4166\phantomsection\label{\detokenize{appdev/refs/api/krb5_unparse_name:c.krb5_unparse_name}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_unparse\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, char **\sphinxstyleemphasis{ name}}{} 4167\end{fulllineitems} 4168 4169\begin{quote}\begin{description} 4170\item[{param}] \leavevmode 4171\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4172 4173\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal 4174 4175\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} - String representation of principal name 4176 4177\end{description}\end{quote} 4178\begin{quote}\begin{description} 4179\item[{retval}] \leavevmode\begin{itemize} 4180\item {} 41810 Success 4182 4183\end{itemize} 4184 4185\item[{return}] \leavevmode\begin{itemize} 4186\item {} 4187Kerberos error codes 4188 4189\end{itemize} 4190 4191\end{description}\end{quote} 4192 4193The resulting string representation uses the format and quoting conventions described for {\hyperref[\detokenize{appdev/refs/api/krb5_parse_name:c.krb5_parse_name}]{\sphinxcrossref{\sphinxcode{krb5\_parse\_name()}}}} . 4194 4195Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_unparsed_name:c.krb5_free_unparsed_name}]{\sphinxcrossref{\sphinxcode{krb5\_free\_unparsed\_name()}}}} to free \sphinxstyleemphasis{name} when it is no longer needed. 4196 4197 4198\subsubsection{krb5\_unparse\_name\_ext - Convert krb5\_principal structure to string and length.} 4199\label{\detokenize{appdev/refs/api/krb5_unparse_name_ext:krb5-unparse-name-ext-convert-krb5-principal-structure-to-string-and-length}}\label{\detokenize{appdev/refs/api/krb5_unparse_name_ext::doc}}\index{krb5\_unparse\_name\_ext (C function)} 4200 4201\begin{fulllineitems} 4202\phantomsection\label{\detokenize{appdev/refs/api/krb5_unparse_name_ext:c.krb5_unparse_name_ext}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_unparse\_name\_ext}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, char **\sphinxstyleemphasis{ name}, unsigned int *\sphinxstyleemphasis{ size}}{} 4203\end{fulllineitems} 4204 4205\begin{quote}\begin{description} 4206\item[{param}] \leavevmode 4207\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4208 4209\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal 4210 4211\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{name} - String representation of principal name 4212 4213\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{size} - Size of unparsed name 4214 4215\end{description}\end{quote} 4216\begin{quote}\begin{description} 4217\item[{retval}] \leavevmode\begin{itemize} 4218\item {} 42190 Success 4220 4221\end{itemize} 4222 4223\item[{return}] \leavevmode\begin{itemize} 4224\item {} 4225Kerberos error codes. On failure name is set to NULL 4226 4227\end{itemize} 4228 4229\end{description}\end{quote} 4230 4231This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_unparse_name:c.krb5_unparse_name}]{\sphinxcrossref{\sphinxcode{krb5\_unparse\_name()}}}} , but allows the use of an existing buffer for the result. If size is not NULL, then \sphinxstyleemphasis{name} must point to either NULL or an existing buffer of at least the size pointed to by \sphinxstyleemphasis{size} . The buffer will be allocated or resized if necessary, with the new pointer stored into \sphinxstyleemphasis{name} . Whether or not the buffer is resized, the necessary space for the result, including null terminator, will be stored into \sphinxstyleemphasis{size} . 4232 4233If size is NULL, this function behaves exactly as {\hyperref[\detokenize{appdev/refs/api/krb5_unparse_name:c.krb5_unparse_name}]{\sphinxcrossref{\sphinxcode{krb5\_unparse\_name()}}}} . 4234 4235 4236\subsubsection{krb5\_unparse\_name\_flags - Convert krb5\_principal structure to a string with flags.} 4237\label{\detokenize{appdev/refs/api/krb5_unparse_name_flags::doc}}\label{\detokenize{appdev/refs/api/krb5_unparse_name_flags:krb5-unparse-name-flags-convert-krb5-principal-structure-to-a-string-with-flags}}\index{krb5\_unparse\_name\_flags (C function)} 4238 4239\begin{fulllineitems} 4240\phantomsection\label{\detokenize{appdev/refs/api/krb5_unparse_name_flags:c.krb5_unparse_name_flags}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_unparse\_name\_flags}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, int\sphinxstyleemphasis{ flags}, char **\sphinxstyleemphasis{ name}}{} 4241\end{fulllineitems} 4242 4243\begin{quote}\begin{description} 4244\item[{param}] \leavevmode 4245\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4246 4247\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal 4248 4249\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flags 4250 4251\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} - String representation of principal name 4252 4253\end{description}\end{quote} 4254\begin{quote}\begin{description} 4255\item[{retval}] \leavevmode\begin{itemize} 4256\item {} 42570 Success 4258 4259\end{itemize} 4260 4261\item[{return}] \leavevmode\begin{itemize} 4262\item {} 4263Kerberos error codes. On failure name is set to NULL 4264 4265\end{itemize} 4266 4267\end{description}\end{quote} 4268 4269Similar to {\hyperref[\detokenize{appdev/refs/api/krb5_unparse_name:c.krb5_unparse_name}]{\sphinxcrossref{\sphinxcode{krb5\_unparse\_name()}}}} , this function converts a krb5\_principal structure to a string representation. 4270 4271The following flags are valid: 4272\begin{quote} 4273\begin{itemize} 4274\item {} 4275{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_SHORT:KRB5_PRINCIPAL_UNPARSE_SHORT}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_UNPARSE\_SHORT}}}} - omit realm if it is the local realm 4276 4277\item {} 4278{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_NO_REALM:KRB5_PRINCIPAL_UNPARSE_NO_REALM}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_UNPARSE\_NO\_REALM}}}} - omit realm 4279 4280\item {} 4281{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY:KRB5_PRINCIPAL_UNPARSE_DISPLAY}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY}}}} - do not quote special characters 4282 4283\end{itemize} 4284 4285Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_unparsed_name:c.krb5_free_unparsed_name}]{\sphinxcrossref{\sphinxcode{krb5\_free\_unparsed\_name()}}}} to free \sphinxstyleemphasis{name} when it is no longer needed. 4286\end{quote} 4287 4288 4289\subsubsection{krb5\_unparse\_name\_flags\_ext - Convert krb5\_principal structure to string format with flags.} 4290\label{\detokenize{appdev/refs/api/krb5_unparse_name_flags_ext:krb5-unparse-name-flags-ext-convert-krb5-principal-structure-to-string-format-with-flags}}\label{\detokenize{appdev/refs/api/krb5_unparse_name_flags_ext::doc}}\index{krb5\_unparse\_name\_flags\_ext (C function)} 4291 4292\begin{fulllineitems} 4293\phantomsection\label{\detokenize{appdev/refs/api/krb5_unparse_name_flags_ext:c.krb5_unparse_name_flags_ext}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_unparse\_name\_flags\_ext}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, int\sphinxstyleemphasis{ flags}, char **\sphinxstyleemphasis{ name}, unsigned int *\sphinxstyleemphasis{ size}}{} 4294\end{fulllineitems} 4295 4296\begin{quote}\begin{description} 4297\item[{param}] \leavevmode 4298\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4299 4300\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal 4301 4302\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flags 4303 4304\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} - Single string format of principal name 4305 4306\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{size} - Size of unparsed name buffer 4307 4308\end{description}\end{quote} 4309\begin{quote}\begin{description} 4310\item[{retval}] \leavevmode\begin{itemize} 4311\item {} 43120 Success 4313 4314\end{itemize} 4315 4316\item[{return}] \leavevmode\begin{itemize} 4317\item {} 4318Kerberos error codes. On failure name is set to NULL 4319 4320\end{itemize} 4321 4322\end{description}\end{quote} 4323 4324 4325\subsubsection{krb5\_us\_timeofday - Retrieve the system time of day, in sec and ms, since the epoch.} 4326\label{\detokenize{appdev/refs/api/krb5_us_timeofday:krb5-us-timeofday-retrieve-the-system-time-of-day-in-sec-and-ms-since-the-epoch}}\label{\detokenize{appdev/refs/api/krb5_us_timeofday::doc}}\index{krb5\_us\_timeofday (C function)} 4327 4328\begin{fulllineitems} 4329\phantomsection\label{\detokenize{appdev/refs/api/krb5_us_timeofday:c.krb5_us_timeofday}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_us\_timeofday}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} *\sphinxstyleemphasis{ seconds}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} *\sphinxstyleemphasis{ microseconds}}{} 4330\end{fulllineitems} 4331 4332\begin{quote}\begin{description} 4333\item[{param}] \leavevmode 4334\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4335 4336\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{seconds} - System timeofday, seconds portion 4337 4338\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{microseconds} - System timeofday, microseconds portion 4339 4340\end{description}\end{quote} 4341\begin{quote}\begin{description} 4342\item[{retval}] \leavevmode\begin{itemize} 4343\item {} 43440 Success 4345 4346\end{itemize} 4347 4348\item[{return}] \leavevmode\begin{itemize} 4349\item {} 4350Kerberos error codes 4351 4352\end{itemize} 4353 4354\end{description}\end{quote} 4355 4356This function retrieves the system time of day with the context specific time offset adjustment. 4357 4358 4359\subsubsection{krb5\_verify\_authdata\_kdc\_issued - Unwrap and verify AD-KDCIssued authorization data.} 4360\label{\detokenize{appdev/refs/api/krb5_verify_authdata_kdc_issued:krb5-verify-authdata-kdc-issued-unwrap-and-verify-ad-kdcissued-authorization-data}}\label{\detokenize{appdev/refs/api/krb5_verify_authdata_kdc_issued::doc}}\index{krb5\_verify\_authdata\_kdc\_issued (C function)} 4361 4362\begin{fulllineitems} 4363\phantomsection\label{\detokenize{appdev/refs/api/krb5_verify_authdata_kdc_issued:c.krb5_verify_authdata_kdc_issued}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_verify\_authdata\_kdc\_issued}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, const {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} *\sphinxstyleemphasis{ ad\_kdcissued}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ issuer}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} ***\sphinxstyleemphasis{ authdata}}{} 4364\end{fulllineitems} 4365 4366\begin{quote}\begin{description} 4367\item[{param}] \leavevmode 4368\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4369 4370\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Session key 4371 4372\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ad\_kdcissued} - AD-KDCIssued authorization data to be unwrapped 4373 4374\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{issuer} - Name of issuing principal (or NULL) 4375 4376\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{authdata} - Unwrapped list of authorization data 4377 4378\end{description}\end{quote} 4379 4380This function unwraps an AD-KDCIssued authdatum (see RFC 4120 section 5.2.6.2) and verifies its signature against \sphinxstyleemphasis{key} . The issuer field of the authdatum element is returned in \sphinxstyleemphasis{issuer} , and the unwrapped list of authdata is returned in \sphinxstyleemphasis{authdata} . 4381 4382 4383\subsection{Rarely used public interfaces} 4384\label{\detokenize{appdev/refs/api/index:rarely-used-public-interfaces}} 4385 4386\subsubsection{krb5\_425\_conv\_principal - Convert a Kerberos V4 principal to a Kerberos V5 principal.} 4387\label{\detokenize{appdev/refs/api/krb5_425_conv_principal:krb5-425-conv-principal-convert-a-kerberos-v4-principal-to-a-kerberos-v5-principal}}\label{\detokenize{appdev/refs/api/krb5_425_conv_principal::doc}}\index{krb5\_425\_conv\_principal (C function)} 4388 4389\begin{fulllineitems} 4390\phantomsection\label{\detokenize{appdev/refs/api/krb5_425_conv_principal:c.krb5_425_conv_principal}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_425\_conv\_principal}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ name}, const char *\sphinxstyleemphasis{ instance}, const char *\sphinxstyleemphasis{ realm}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ princ}}{} 4391\end{fulllineitems} 4392 4393\begin{quote}\begin{description} 4394\item[{param}] \leavevmode 4395\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4396 4397\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - V4 name 4398 4399\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{instance} - V4 instance 4400 4401\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm 4402 4403\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ} - V5 principal 4404 4405\end{description}\end{quote} 4406\begin{quote}\begin{description} 4407\item[{retval}] \leavevmode\begin{itemize} 4408\item {} 44090 Success; otherwise - Kerberos error codes 4410 4411\end{itemize} 4412 4413\end{description}\end{quote} 4414 4415This function builds a \sphinxstyleemphasis{princ} from V4 specification based on given input \sphinxstyleemphasis{name.instance@realm} . 4416 4417Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}} to free \sphinxstyleemphasis{princ} when it is no longer needed. 4418 4419 4420\subsubsection{krb5\_524\_conv\_principal - Convert a Kerberos V5 principal to a Kerberos V4 principal.} 4421\label{\detokenize{appdev/refs/api/krb5_524_conv_principal:krb5-524-conv-principal-convert-a-kerberos-v5-principal-to-a-kerberos-v4-principal}}\label{\detokenize{appdev/refs/api/krb5_524_conv_principal::doc}}\index{krb5\_524\_conv\_principal (C function)} 4422 4423\begin{fulllineitems} 4424\phantomsection\label{\detokenize{appdev/refs/api/krb5_524_conv_principal:c.krb5_524_conv_principal}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_524\_conv\_principal}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ}, char *\sphinxstyleemphasis{ name}, char *\sphinxstyleemphasis{ inst}, char *\sphinxstyleemphasis{ realm}}{} 4425\end{fulllineitems} 4426 4427\begin{quote}\begin{description} 4428\item[{param}] \leavevmode 4429\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4430 4431\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ} - V5 Principal 4432 4433\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} - V4 principal’s name to be filled in 4434 4435\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{inst} - V4 principal’s instance name to be filled in 4436 4437\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realm} - Principal’s realm name to be filled in 4438 4439\end{description}\end{quote} 4440\begin{quote}\begin{description} 4441\item[{retval}] \leavevmode\begin{itemize} 4442\item {} 44430 Success 4444 4445\item {} 4446KRB5\_INVALID\_PRINCIPAL Invalid principal name 4447 4448\item {} 4449KRB5\_CONFIG\_CANTOPEN Can’t open or find Kerberos configuration file 4450 4451\end{itemize} 4452 4453\item[{return}] \leavevmode\begin{itemize} 4454\item {} 4455Kerberos error codes 4456 4457\end{itemize} 4458 4459\end{description}\end{quote} 4460 4461This function separates a V5 principal \sphinxstyleemphasis{princ} into \sphinxstyleemphasis{name} , \sphinxstyleemphasis{instance} , and \sphinxstyleemphasis{realm} . 4462 4463 4464\subsubsection{krb5\_address\_compare - Compare two Kerberos addresses.} 4465\label{\detokenize{appdev/refs/api/krb5_address_compare:krb5-address-compare-compare-two-kerberos-addresses}}\label{\detokenize{appdev/refs/api/krb5_address_compare::doc}}\index{krb5\_address\_compare (C function)} 4466 4467\begin{fulllineitems} 4468\phantomsection\label{\detokenize{appdev/refs/api/krb5_address_compare:c.krb5_address_compare}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_address\_compare}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *\sphinxstyleemphasis{ addr1}, const {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *\sphinxstyleemphasis{ addr2}}{} 4469\end{fulllineitems} 4470 4471\begin{quote}\begin{description} 4472\item[{param}] \leavevmode 4473\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4474 4475\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr1} - First address to be compared 4476 4477\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr2} - Second address to be compared 4478 4479\end{description}\end{quote} 4480\begin{quote}\begin{description} 4481\item[{return}] \leavevmode\begin{itemize} 4482\item {} 4483TRUE if the addresses are the same, FALSE otherwise 4484 4485\end{itemize} 4486 4487\end{description}\end{quote} 4488 4489 4490\subsubsection{krb5\_address\_order - Return an ordering of the specified addresses.} 4491\label{\detokenize{appdev/refs/api/krb5_address_order:krb5-address-order-return-an-ordering-of-the-specified-addresses}}\label{\detokenize{appdev/refs/api/krb5_address_order::doc}}\index{krb5\_address\_order (C function)} 4492 4493\begin{fulllineitems} 4494\phantomsection\label{\detokenize{appdev/refs/api/krb5_address_order:c.krb5_address_order}}\pysiglinewithargsret{int \sphinxbfcode{krb5\_address\_order}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *\sphinxstyleemphasis{ addr1}, const {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *\sphinxstyleemphasis{ addr2}}{} 4495\end{fulllineitems} 4496 4497\begin{quote}\begin{description} 4498\item[{param}] \leavevmode 4499\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4500 4501\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr1} - First address 4502 4503\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr2} - Second address 4504 4505\end{description}\end{quote} 4506\begin{quote}\begin{description} 4507\item[{retval}] \leavevmode\begin{itemize} 4508\item {} 45090 The two addresses are the same 4510 4511\item {} 4512\end{itemize} 4513 4514\end{description}\end{quote} 4515 4516 4517\subsubsection{krb5\_address\_search - Search a list of addresses for a specified address.} 4518\label{\detokenize{appdev/refs/api/krb5_address_search:krb5-address-search-search-a-list-of-addresses-for-a-specified-address}}\label{\detokenize{appdev/refs/api/krb5_address_search::doc}}\index{krb5\_address\_search (C function)} 4519 4520\begin{fulllineitems} 4521\phantomsection\label{\detokenize{appdev/refs/api/krb5_address_search:c.krb5_address_search}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_address\_search}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *\sphinxstyleemphasis{ addr}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *const *\sphinxstyleemphasis{ addrlist}}{} 4522\end{fulllineitems} 4523 4524\begin{quote}\begin{description} 4525\item[{param}] \leavevmode 4526\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4527 4528\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr} - Address to search for 4529 4530\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addrlist} - Address list to be searched (or NULL) 4531 4532\end{description}\end{quote} 4533\begin{quote}\begin{description} 4534\item[{return}] \leavevmode\begin{itemize} 4535\item {} 4536TRUE if addr is listed in addrlist , or addrlist is NULL; FALSE otherwise 4537 4538\end{itemize} 4539 4540\end{description}\end{quote} 4541 4542\begin{sphinxadmonition}{note}{Note:} 4543If \sphinxstyleemphasis{addrlist} contains only a NetBIOS addresses, it will be treated as a null list. 4544\end{sphinxadmonition} 4545 4546 4547\subsubsection{krb5\_allow\_weak\_crypto - Allow the application to override the profile’s allow\_weak\_crypto setting.} 4548\label{\detokenize{appdev/refs/api/krb5_allow_weak_crypto::doc}}\label{\detokenize{appdev/refs/api/krb5_allow_weak_crypto:krb5-allow-weak-crypto-allow-the-application-to-override-the-profile-s-allow-weak-crypto-setting}}\index{krb5\_allow\_weak\_crypto (C function)} 4549 4550\begin{fulllineitems} 4551\phantomsection\label{\detokenize{appdev/refs/api/krb5_allow_weak_crypto:c.krb5_allow_weak_crypto}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_allow\_weak\_crypto}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}}\sphinxstyleemphasis{ enable}}{} 4552\end{fulllineitems} 4553 4554\begin{quote}\begin{description} 4555\item[{param}] \leavevmode 4556\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4557 4558\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enable} - Boolean flag 4559 4560\end{description}\end{quote} 4561\begin{quote}\begin{description} 4562\item[{retval}] \leavevmode\begin{itemize} 4563\item {} 45640 (always) 4565 4566\end{itemize} 4567 4568\end{description}\end{quote} 4569 4570This function allows an application to override the allow\_weak\_crypto setting. It is primarily for use by aklog. 4571 4572 4573\subsubsection{krb5\_aname\_to\_localname - Convert a principal name to a local name.} 4574\label{\detokenize{appdev/refs/api/krb5_aname_to_localname::doc}}\label{\detokenize{appdev/refs/api/krb5_aname_to_localname:krb5-aname-to-localname-convert-a-principal-name-to-a-local-name}}\index{krb5\_aname\_to\_localname (C function)} 4575 4576\begin{fulllineitems} 4577\phantomsection\label{\detokenize{appdev/refs/api/krb5_aname_to_localname:c.krb5_aname_to_localname}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_aname\_to\_localname}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ aname}, int\sphinxstyleemphasis{ lnsize\_in}, char *\sphinxstyleemphasis{ lname}}{} 4578\end{fulllineitems} 4579 4580\begin{quote}\begin{description} 4581\item[{param}] \leavevmode 4582\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4583 4584\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{aname} - Principal name 4585 4586\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{lnsize\_in} - Space available in \sphinxstyleemphasis{lname} 4587 4588\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{lname} - Local name buffer to be filled in 4589 4590\end{description}\end{quote} 4591\begin{quote}\begin{description} 4592\item[{retval}] \leavevmode\begin{itemize} 4593\item {} 45940 Success 4595 4596\item {} 4597System errors 4598 4599\end{itemize} 4600 4601\item[{return}] \leavevmode\begin{itemize} 4602\item {} 4603Kerberos error codes 4604 4605\end{itemize} 4606 4607\end{description}\end{quote} 4608 4609If \sphinxstyleemphasis{aname} does not correspond to any local account, KRB5\_LNAME\_NOTRANS is returned. If \sphinxstyleemphasis{lnsize\_in} is too small for the local name, KRB5\_CONFIG\_NOTENUFSPACE is returned. 4610 4611Local names, rather than principal names, can be used by programs that translate to an environment-specific name (for example, a user account name). 4612 4613 4614\subsubsection{krb5\_anonymous\_principal - Build an anonymous principal.} 4615\label{\detokenize{appdev/refs/api/krb5_anonymous_principal:krb5-anonymous-principal-build-an-anonymous-principal}}\label{\detokenize{appdev/refs/api/krb5_anonymous_principal::doc}}\index{krb5\_anonymous\_principal (C function)} 4616 4617\begin{fulllineitems} 4618\phantomsection\label{\detokenize{appdev/refs/api/krb5_anonymous_principal:c.krb5_anonymous_principal}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}} \sphinxbfcode{krb5\_anonymous\_principal}}{void\sphinxstyleemphasis{ None}}{} 4619\end{fulllineitems} 4620 4621\begin{quote}\begin{description} 4622\item[{param}] \leavevmode 4623\sphinxstylestrong{None} 4624 4625\end{description}\end{quote} 4626 4627This function returns constant storage that must not be freed. 4628 4629 4630\sphinxstrong{See also:} 4631 4632 4633{\hyperref[\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_PRINCSTR:KRB5_ANONYMOUS_PRINCSTR}]{\sphinxcrossref{\sphinxcode{KRB5\_ANONYMOUS\_PRINCSTR}}}} 4634 4635 4636 4637 4638\subsubsection{krb5\_anonymous\_realm - Return an anonymous realm data.} 4639\label{\detokenize{appdev/refs/api/krb5_anonymous_realm::doc}}\label{\detokenize{appdev/refs/api/krb5_anonymous_realm:krb5-anonymous-realm-return-an-anonymous-realm-data}}\index{krb5\_anonymous\_realm (C function)} 4640 4641\begin{fulllineitems} 4642\phantomsection\label{\detokenize{appdev/refs/api/krb5_anonymous_realm:c.krb5_anonymous_realm}}\pysiglinewithargsret{const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} * \sphinxbfcode{krb5\_anonymous\_realm}}{void\sphinxstyleemphasis{ None}}{} 4643\end{fulllineitems} 4644 4645\begin{quote}\begin{description} 4646\item[{param}] \leavevmode 4647\sphinxstylestrong{None} 4648 4649\end{description}\end{quote} 4650 4651This function returns constant storage that must not be freed. 4652 4653 4654\sphinxstrong{See also:} 4655 4656 4657{\hyperref[\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR:KRB5_ANONYMOUS_REALMSTR}]{\sphinxcrossref{\sphinxcode{KRB5\_ANONYMOUS\_REALMSTR}}}} 4658 4659 4660 4661 4662\subsubsection{krb5\_appdefault\_boolean - Retrieve a boolean value from the appdefaults section of krb5.conf.} 4663\label{\detokenize{appdev/refs/api/krb5_appdefault_boolean::doc}}\label{\detokenize{appdev/refs/api/krb5_appdefault_boolean:krb5-appdefault-boolean-retrieve-a-boolean-value-from-the-appdefaults-section-of-krb5-conf}}\index{krb5\_appdefault\_boolean (C function)} 4664 4665\begin{fulllineitems} 4666\phantomsection\label{\detokenize{appdev/refs/api/krb5_appdefault_boolean:c.krb5_appdefault_boolean}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_appdefault\_boolean}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ appname}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ realm}, const char *\sphinxstyleemphasis{ option}, int\sphinxstyleemphasis{ default\_value}, int *\sphinxstyleemphasis{ ret\_value}}{} 4667\end{fulllineitems} 4668 4669\begin{quote}\begin{description} 4670\item[{param}] \leavevmode 4671\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4672 4673\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{appname} - Application name 4674 4675\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm name 4676 4677\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{option} - Option to be checked 4678 4679\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{default\_value} - Default value to return if no match is found 4680 4681\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ret\_value} - Boolean value of \sphinxstyleemphasis{option} 4682 4683\end{description}\end{quote} 4684 4685This function gets the application defaults for \sphinxstyleemphasis{option} based on the given \sphinxstyleemphasis{appname} and/or \sphinxstyleemphasis{realm} . 4686 4687 4688\sphinxstrong{See also:} 4689 4690 4691{\hyperref[\detokenize{appdev/refs/api/krb5_appdefault_string:c.krb5_appdefault_string}]{\sphinxcrossref{\sphinxcode{krb5\_appdefault\_string()}}}} 4692 4693 4694 4695 4696\subsubsection{krb5\_appdefault\_string - Retrieve a string value from the appdefaults section of krb5.conf.} 4697\label{\detokenize{appdev/refs/api/krb5_appdefault_string::doc}}\label{\detokenize{appdev/refs/api/krb5_appdefault_string:krb5-appdefault-string-retrieve-a-string-value-from-the-appdefaults-section-of-krb5-conf}}\index{krb5\_appdefault\_string (C function)} 4698 4699\begin{fulllineitems} 4700\phantomsection\label{\detokenize{appdev/refs/api/krb5_appdefault_string:c.krb5_appdefault_string}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_appdefault\_string}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ appname}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ realm}, const char *\sphinxstyleemphasis{ option}, const char *\sphinxstyleemphasis{ default\_value}, char **\sphinxstyleemphasis{ ret\_value}}{} 4701\end{fulllineitems} 4702 4703\begin{quote}\begin{description} 4704\item[{param}] \leavevmode 4705\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4706 4707\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{appname} - Application name 4708 4709\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm name 4710 4711\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{option} - Option to be checked 4712 4713\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{default\_value} - Default value to return if no match is found 4714 4715\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ret\_value} - String value of \sphinxstyleemphasis{option} 4716 4717\end{description}\end{quote} 4718 4719This function gets the application defaults for \sphinxstyleemphasis{option} based on the given \sphinxstyleemphasis{appname} and/or \sphinxstyleemphasis{realm} . 4720 4721 4722\sphinxstrong{See also:} 4723 4724 4725{\hyperref[\detokenize{appdev/refs/api/krb5_appdefault_boolean:c.krb5_appdefault_boolean}]{\sphinxcrossref{\sphinxcode{krb5\_appdefault\_boolean()}}}} 4726 4727 4728 4729 4730\subsubsection{krb5\_auth\_con\_free - Free a krb5\_auth\_context structure.} 4731\label{\detokenize{appdev/refs/api/krb5_auth_con_free:krb5-auth-con-free-free-a-krb5-auth-context-structure}}\label{\detokenize{appdev/refs/api/krb5_auth_con_free::doc}}\index{krb5\_auth\_con\_free (C function)} 4732 4733\begin{fulllineitems} 4734\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_free:c.krb5_auth_con_free}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_free}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}}{} 4735\end{fulllineitems} 4736 4737\begin{quote}\begin{description} 4738\item[{param}] \leavevmode 4739\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4740 4741\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context to be freed 4742 4743\end{description}\end{quote} 4744\begin{quote}\begin{description} 4745\item[{retval}] \leavevmode\begin{itemize} 4746\item {} 47470 (always) 4748 4749\end{itemize} 4750 4751\end{description}\end{quote} 4752 4753This function frees an auth context allocated by {\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_init:c.krb5_auth_con_init}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_init()}}}} . 4754 4755 4756\subsubsection{krb5\_auth\_con\_genaddrs - Generate auth context addresses from a connected socket.} 4757\label{\detokenize{appdev/refs/api/krb5_auth_con_genaddrs::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_genaddrs:krb5-auth-con-genaddrs-generate-auth-context-addresses-from-a-connected-socket}}\index{krb5\_auth\_con\_genaddrs (C function)} 4758 4759\begin{fulllineitems} 4760\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_genaddrs:c.krb5_auth_con_genaddrs}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_genaddrs}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, int\sphinxstyleemphasis{ infd}, int\sphinxstyleemphasis{ flags}}{} 4761\end{fulllineitems} 4762 4763\begin{quote}\begin{description} 4764\item[{param}] \leavevmode 4765\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4766 4767\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 4768 4769\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{infd} - Connected socket descriptor 4770 4771\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flags 4772 4773\end{description}\end{quote} 4774\begin{quote}\begin{description} 4775\item[{retval}] \leavevmode\begin{itemize} 4776\item {} 47770 Success; otherwise - Kerberos error codes 4778 4779\end{itemize} 4780 4781\end{description}\end{quote} 4782 4783This function sets the local and/or remote addresses in \sphinxstyleemphasis{auth\_context} based on the local and remote endpoints of the socket \sphinxstyleemphasis{infd} . The following flags determine the operations performed: 4784\begin{itemize} 4785\item {} 4786{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR:KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_ADDR}}}} Generate local address. 4787 4788\item {} 4789{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR:KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_ADDR}}}} Generate remote address. 4790 4791\item {} 4792{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR:KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_FULL\_ADDR}}}} Generate local address and port. 4793 4794\item {} 4795{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR:KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_FULL\_ADDR}}}} Generate remote address and port. 4796 4797\end{itemize} 4798 4799 4800\subsubsection{krb5\_auth\_con\_get\_checksum\_func - Get the checksum callback from an auth context.} 4801\label{\detokenize{appdev/refs/api/krb5_auth_con_get_checksum_func::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_get_checksum_func:krb5-auth-con-get-checksum-func-get-the-checksum-callback-from-an-auth-context}}\index{krb5\_auth\_con\_get\_checksum\_func (C function)} 4802 4803\begin{fulllineitems} 4804\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_get_checksum_func:c.krb5_auth_con_get_checksum_func}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_get\_checksum\_func}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_mk_req_checksum_func:c.krb5_mk_req_checksum_func}]{\sphinxcrossref{krb5\_mk\_req\_checksum\_func}}} *\sphinxstyleemphasis{ func}, void **\sphinxstyleemphasis{ data}}{} 4805\end{fulllineitems} 4806 4807\begin{quote}\begin{description} 4808\item[{param}] \leavevmode 4809\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4810 4811\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 4812 4813\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{func} - Checksum callback 4814 4815\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} - Callback argument 4816 4817\end{description}\end{quote} 4818\begin{quote}\begin{description} 4819\item[{retval}] \leavevmode\begin{itemize} 4820\item {} 48210 (always) 4822 4823\end{itemize} 4824 4825\end{description}\end{quote} 4826 4827 4828\subsubsection{krb5\_auth\_con\_getaddrs - Retrieve address fields from an auth context.} 4829\label{\detokenize{appdev/refs/api/krb5_auth_con_getaddrs:krb5-auth-con-getaddrs-retrieve-address-fields-from-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getaddrs::doc}}\index{krb5\_auth\_con\_getaddrs (C function)} 4830 4831\begin{fulllineitems} 4832\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getaddrs:c.krb5_auth_con_getaddrs}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getaddrs}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} **\sphinxstyleemphasis{ local\_addr}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} **\sphinxstyleemphasis{ remote\_addr}}{} 4833\end{fulllineitems} 4834 4835\begin{quote}\begin{description} 4836\item[{param}] \leavevmode 4837\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4838 4839\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 4840 4841\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{local\_addr} - Local address (NULL if not needed) 4842 4843\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{remote\_addr} - Remote address (NULL if not needed) 4844 4845\end{description}\end{quote} 4846\begin{quote}\begin{description} 4847\item[{retval}] \leavevmode\begin{itemize} 4848\item {} 48490 Success; otherwise - Kerberos error codes 4850 4851\end{itemize} 4852 4853\end{description}\end{quote} 4854 4855 4856\subsubsection{krb5\_auth\_con\_getauthenticator - Retrieve the authenticator from an auth context.} 4857\label{\detokenize{appdev/refs/api/krb5_auth_con_getauthenticator:krb5-auth-con-getauthenticator-retrieve-the-authenticator-from-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getauthenticator::doc}}\index{krb5\_auth\_con\_getauthenticator (C function)} 4858 4859\begin{fulllineitems} 4860\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getauthenticator:c.krb5_auth_con_getauthenticator}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getauthenticator}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{krb5\_authenticator}}} **\sphinxstyleemphasis{ authenticator}}{} 4861\end{fulllineitems} 4862 4863\begin{quote}\begin{description} 4864\item[{param}] \leavevmode 4865\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4866 4867\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 4868 4869\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{authenticator} - Authenticator 4870 4871\end{description}\end{quote} 4872\begin{quote}\begin{description} 4873\item[{retval}] \leavevmode\begin{itemize} 4874\item {} 48750 Success. Otherwise - Kerberos error codes 4876 4877\end{itemize} 4878 4879\end{description}\end{quote} 4880 4881Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_authenticator:c.krb5_free_authenticator}]{\sphinxcrossref{\sphinxcode{krb5\_free\_authenticator()}}}} to free \sphinxstyleemphasis{authenticator} when it is no longer needed. 4882 4883 4884\subsubsection{krb5\_auth\_con\_getflags - Retrieve flags from a krb5\_auth\_context structure.} 4885\label{\detokenize{appdev/refs/api/krb5_auth_con_getflags:krb5-auth-con-getflags-retrieve-flags-from-a-krb5-auth-context-structure}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getflags::doc}}\index{krb5\_auth\_con\_getflags (C function)} 4886 4887\begin{fulllineitems} 4888\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getflags:c.krb5_auth_con_getflags}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getflags}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} *\sphinxstyleemphasis{ flags}}{} 4889\end{fulllineitems} 4890 4891\begin{quote}\begin{description} 4892\item[{param}] \leavevmode 4893\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4894 4895\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 4896 4897\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{flags} - Flags bit mask 4898 4899\end{description}\end{quote} 4900\begin{quote}\begin{description} 4901\item[{retval}] \leavevmode\begin{itemize} 4902\item {} 49030 (always) 4904 4905\end{itemize} 4906 4907\end{description}\end{quote} 4908 4909Valid values for \sphinxstyleemphasis{flags} are: 4910\begin{itemize} 4911\item {} 4912{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} Use timestamps 4913 4914\item {} 4915{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} Save timestamps 4916 4917\item {} 4918{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} Use sequence numbers 4919 4920\item {} 4921{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} Save sequence numbers 4922 4923\end{itemize} 4924 4925 4926\subsubsection{krb5\_auth\_con\_getkey - Retrieve the session key from an auth context as a keyblock.} 4927\label{\detokenize{appdev/refs/api/krb5_auth_con_getkey::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getkey:krb5-auth-con-getkey-retrieve-the-session-key-from-an-auth-context-as-a-keyblock}}\index{krb5\_auth\_con\_getkey (C function)} 4928 4929\begin{fulllineitems} 4930\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getkey:c.krb5_auth_con_getkey}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getkey}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ keyblock}}{} 4931\end{fulllineitems} 4932 4933\begin{quote}\begin{description} 4934\item[{param}] \leavevmode 4935\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4936 4937\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 4938 4939\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keyblock} - Session key 4940 4941\end{description}\end{quote} 4942\begin{quote}\begin{description} 4943\item[{retval}] \leavevmode\begin{itemize} 4944\item {} 49450 Success. Otherwise - Kerberos error codes 4946 4947\end{itemize} 4948 4949\end{description}\end{quote} 4950 4951This function creates a keyblock containing the session key from \sphinxstyleemphasis{auth\_context} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock:c.krb5_free_keyblock}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock()}}}} to free \sphinxstyleemphasis{keyblock} when it is no longer needed 4952 4953 4954\subsubsection{krb5\_auth\_con\_getkey\_k - Retrieve the session key from an auth context.} 4955\label{\detokenize{appdev/refs/api/krb5_auth_con_getkey_k:krb5-auth-con-getkey-k-retrieve-the-session-key-from-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getkey_k::doc}}\index{krb5\_auth\_con\_getkey\_k (C function)} 4956 4957\begin{fulllineitems} 4958\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getkey_k:c.krb5_auth_con_getkey_k}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getkey\_k}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}} *\sphinxstyleemphasis{ key}}{} 4959\end{fulllineitems} 4960 4961\begin{quote}\begin{description} 4962\item[{param}] \leavevmode 4963\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4964 4965\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 4966 4967\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Session key 4968 4969\end{description}\end{quote} 4970\begin{quote}\begin{description} 4971\item[{retval}] \leavevmode\begin{itemize} 4972\item {} 49730 (always) 4974 4975\end{itemize} 4976 4977\end{description}\end{quote} 4978 4979This function sets \sphinxstyleemphasis{key} to the session key from \sphinxstyleemphasis{auth\_context} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_k_free_key:c.krb5_k_free_key}]{\sphinxcrossref{\sphinxcode{krb5\_k\_free\_key()}}}} to release \sphinxstyleemphasis{key} when it is no longer needed. 4980 4981 4982\subsubsection{krb5\_auth\_con\_getlocalseqnumber - Retrieve the local sequence number from an auth context.} 4983\label{\detokenize{appdev/refs/api/krb5_auth_con_getlocalseqnumber::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getlocalseqnumber:krb5-auth-con-getlocalseqnumber-retrieve-the-local-sequence-number-from-an-auth-context}}\index{krb5\_auth\_con\_getlocalseqnumber (C function)} 4984 4985\begin{fulllineitems} 4986\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getlocalseqnumber:c.krb5_auth_con_getlocalseqnumber}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getlocalseqnumber}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} *\sphinxstyleemphasis{ seqnumber}}{} 4987\end{fulllineitems} 4988 4989\begin{quote}\begin{description} 4990\item[{param}] \leavevmode 4991\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 4992 4993\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 4994 4995\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{seqnumber} - Local sequence number 4996 4997\end{description}\end{quote} 4998\begin{quote}\begin{description} 4999\item[{retval}] \leavevmode\begin{itemize} 5000\item {} 50010 Success; otherwise - Kerberos error codes 5002 5003\end{itemize} 5004 5005\end{description}\end{quote} 5006 5007Retrieve the local sequence number from \sphinxstyleemphasis{auth\_context} and return it in \sphinxstyleemphasis{seqnumber} . The {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} flag must be set in \sphinxstyleemphasis{auth\_context} for this function to be useful. 5008 5009 5010\subsubsection{krb5\_auth\_con\_getrcache - Retrieve the replay cache from an auth context.} 5011\label{\detokenize{appdev/refs/api/krb5_auth_con_getrcache:krb5-auth-con-getrcache-retrieve-the-replay-cache-from-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getrcache::doc}}\index{krb5\_auth\_con\_getrcache (C function)} 5012 5013\begin{fulllineitems} 5014\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getrcache:c.krb5_auth_con_getrcache}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getrcache}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_rcache:c.krb5_rcache}]{\sphinxcrossref{krb5\_rcache}}} *\sphinxstyleemphasis{ rcache}}{} 5015\end{fulllineitems} 5016 5017\begin{quote}\begin{description} 5018\item[{param}] \leavevmode 5019\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5020 5021\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 5022 5023\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rcache} - Replay cache handle 5024 5025\end{description}\end{quote} 5026\begin{quote}\begin{description} 5027\item[{retval}] \leavevmode\begin{itemize} 5028\item {} 50290 (always) 5030 5031\end{itemize} 5032 5033\end{description}\end{quote} 5034 5035This function fetches the replay cache from \sphinxstyleemphasis{auth\_context} . The caller should not close \sphinxstyleemphasis{rcache} . 5036 5037 5038\subsubsection{krb5\_auth\_con\_getrecvsubkey - Retrieve the receiving subkey from an auth context as a keyblock.} 5039\label{\detokenize{appdev/refs/api/krb5_auth_con_getrecvsubkey:krb5-auth-con-getrecvsubkey-retrieve-the-receiving-subkey-from-an-auth-context-as-a-keyblock}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getrecvsubkey::doc}}\index{krb5\_auth\_con\_getrecvsubkey (C function)} 5040 5041\begin{fulllineitems} 5042\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getrecvsubkey:c.krb5_auth_con_getrecvsubkey}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getrecvsubkey}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ keyblock}}{} 5043\end{fulllineitems} 5044 5045\begin{quote}\begin{description} 5046\item[{param}] \leavevmode 5047\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 5048 5049\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context 5050 5051\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keyblock} - Receiving subkey 5052 5053\end{description}\end{quote} 5054\begin{quote}\begin{description} 5055\item[{retval}] \leavevmode\begin{itemize} 5056\item {} 50570 Success; otherwise - Kerberos error codes 5058 5059\end{itemize} 5060 5061\end{description}\end{quote} 5062 5063This function creates a keyblock containing the receiving subkey from \sphinxstyleemphasis{auth\_context} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock:c.krb5_free_keyblock}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock()}}}} to free \sphinxstyleemphasis{keyblock} when it is no longer needed. 5064 5065 5066\subsubsection{krb5\_auth\_con\_getrecvsubkey\_k - Retrieve the receiving subkey from an auth context as a keyblock.} 5067\label{\detokenize{appdev/refs/api/krb5_auth_con_getrecvsubkey_k:krb5-auth-con-getrecvsubkey-k-retrieve-the-receiving-subkey-from-an-auth-context-as-a-keyblock}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getrecvsubkey_k::doc}}\index{krb5\_auth\_con\_getrecvsubkey\_k (C function)} 5068 5069\begin{fulllineitems} 5070\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getrecvsubkey_k:c.krb5_auth_con_getrecvsubkey_k}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getrecvsubkey\_k}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}} *\sphinxstyleemphasis{ key}}{} 5071\end{fulllineitems} 5072 5073\begin{quote}\begin{description} 5074\item[{param}] \leavevmode 5075\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 5076 5077\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context 5078 5079\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Receiving subkey 5080 5081\end{description}\end{quote} 5082\begin{quote}\begin{description} 5083\item[{retval}] \leavevmode\begin{itemize} 5084\item {} 50850 Success; otherwise - Kerberos error codes 5086 5087\end{itemize} 5088 5089\end{description}\end{quote} 5090 5091This function sets \sphinxstyleemphasis{key} to the receiving subkey from \sphinxstyleemphasis{auth\_context} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_k_free_key:c.krb5_k_free_key}]{\sphinxcrossref{\sphinxcode{krb5\_k\_free\_key()}}}} to release \sphinxstyleemphasis{key} when it is no longer needed. 5092 5093 5094\subsubsection{krb5\_auth\_con\_getremoteseqnumber - Retrieve the remote sequence number from an auth context.} 5095\label{\detokenize{appdev/refs/api/krb5_auth_con_getremoteseqnumber:krb5-auth-con-getremoteseqnumber-retrieve-the-remote-sequence-number-from-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getremoteseqnumber::doc}}\index{krb5\_auth\_con\_getremoteseqnumber (C function)} 5096 5097\begin{fulllineitems} 5098\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getremoteseqnumber:c.krb5_auth_con_getremoteseqnumber}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getremoteseqnumber}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} *\sphinxstyleemphasis{ seqnumber}}{} 5099\end{fulllineitems} 5100 5101\begin{quote}\begin{description} 5102\item[{param}] \leavevmode 5103\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5104 5105\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 5106 5107\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{seqnumber} - Remote sequence number 5108 5109\end{description}\end{quote} 5110\begin{quote}\begin{description} 5111\item[{retval}] \leavevmode\begin{itemize} 5112\item {} 51130 Success; otherwise - Kerberos error codes 5114 5115\end{itemize} 5116 5117\end{description}\end{quote} 5118 5119Retrieve the remote sequence number from \sphinxstyleemphasis{auth\_context} and return it in \sphinxstyleemphasis{seqnumber} . The {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} flag must be set in \sphinxstyleemphasis{auth\_context} for this function to be useful. 5120 5121 5122\subsubsection{krb5\_auth\_con\_getsendsubkey - Retrieve the send subkey from an auth context as a keyblock.} 5123\label{\detokenize{appdev/refs/api/krb5_auth_con_getsendsubkey:krb5-auth-con-getsendsubkey-retrieve-the-send-subkey-from-an-auth-context-as-a-keyblock}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getsendsubkey::doc}}\index{krb5\_auth\_con\_getsendsubkey (C function)} 5124 5125\begin{fulllineitems} 5126\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getsendsubkey:c.krb5_auth_con_getsendsubkey}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getsendsubkey}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ keyblock}}{} 5127\end{fulllineitems} 5128 5129\begin{quote}\begin{description} 5130\item[{param}] \leavevmode 5131\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 5132 5133\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context 5134 5135\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keyblock} - Send subkey 5136 5137\end{description}\end{quote} 5138\begin{quote}\begin{description} 5139\item[{retval}] \leavevmode\begin{itemize} 5140\item {} 51410 Success; otherwise - Kerberos error codes 5142 5143\end{itemize} 5144 5145\end{description}\end{quote} 5146 5147This function creates a keyblock containing the send subkey from \sphinxstyleemphasis{auth\_context} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock:c.krb5_free_keyblock}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock()}}}} to free \sphinxstyleemphasis{keyblock} when it is no longer needed. 5148 5149 5150\subsubsection{krb5\_auth\_con\_getsendsubkey\_k - Retrieve the send subkey from an auth context.} 5151\label{\detokenize{appdev/refs/api/krb5_auth_con_getsendsubkey_k:krb5-auth-con-getsendsubkey-k-retrieve-the-send-subkey-from-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getsendsubkey_k::doc}}\index{krb5\_auth\_con\_getsendsubkey\_k (C function)} 5152 5153\begin{fulllineitems} 5154\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getsendsubkey_k:c.krb5_auth_con_getsendsubkey_k}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getsendsubkey\_k}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}} *\sphinxstyleemphasis{ key}}{} 5155\end{fulllineitems} 5156 5157\begin{quote}\begin{description} 5158\item[{param}] \leavevmode 5159\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 5160 5161\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context 5162 5163\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Send subkey 5164 5165\end{description}\end{quote} 5166\begin{quote}\begin{description} 5167\item[{retval}] \leavevmode\begin{itemize} 5168\item {} 51690 Success; otherwise - Kerberos error codes 5170 5171\end{itemize} 5172 5173\end{description}\end{quote} 5174 5175This function sets \sphinxstyleemphasis{key} to the send subkey from \sphinxstyleemphasis{auth\_context} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_k_free_key:c.krb5_k_free_key}]{\sphinxcrossref{\sphinxcode{krb5\_k\_free\_key()}}}} to release \sphinxstyleemphasis{key} when it is no longer needed. 5176 5177 5178\subsubsection{krb5\_auth\_con\_init - Create and initialize an authentication context.} 5179\label{\detokenize{appdev/refs/api/krb5_auth_con_init:krb5-auth-con-init-create-and-initialize-an-authentication-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_init::doc}}\index{krb5\_auth\_con\_init (C function)} 5180 5181\begin{fulllineitems} 5182\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_init:c.krb5_auth_con_init}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_init}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}} *\sphinxstyleemphasis{ auth\_context}}{} 5183\end{fulllineitems} 5184 5185\begin{quote}\begin{description} 5186\item[{param}] \leavevmode 5187\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5188 5189\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{auth\_context} - Authentication context 5190 5191\end{description}\end{quote} 5192\begin{quote}\begin{description} 5193\item[{retval}] \leavevmode\begin{itemize} 5194\item {} 51950 Success; otherwise - Kerberos error codes 5196 5197\end{itemize} 5198 5199\end{description}\end{quote} 5200 5201This function creates an authentication context to hold configuration and state relevant to krb5 functions for authenticating principals and protecting messages once authentication has occurred. 5202 5203By default, flags for the context are set to enable the use of the replay cache ( {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} ), but not sequence numbers. Use {\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setflags:c.krb5_auth_con_setflags}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_setflags()}}}} to change the flags. 5204 5205The allocated \sphinxstyleemphasis{auth\_context} must be freed with {\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_free:c.krb5_auth_con_free}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_free()}}}} when it is no longer needed. 5206 5207 5208\subsubsection{krb5\_auth\_con\_set\_checksum\_func - Set a checksum callback in an auth context.} 5209\label{\detokenize{appdev/refs/api/krb5_auth_con_set_checksum_func:krb5-auth-con-set-checksum-func-set-a-checksum-callback-in-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_set_checksum_func::doc}}\index{krb5\_auth\_con\_set\_checksum\_func (C function)} 5210 5211\begin{fulllineitems} 5212\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_set_checksum_func:c.krb5_auth_con_set_checksum_func}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_set\_checksum\_func}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_mk_req_checksum_func:c.krb5_mk_req_checksum_func}]{\sphinxcrossref{krb5\_mk\_req\_checksum\_func}}}\sphinxstyleemphasis{ func}, void *\sphinxstyleemphasis{ data}}{} 5213\end{fulllineitems} 5214 5215\begin{quote}\begin{description} 5216\item[{param}] \leavevmode 5217\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5218 5219\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 5220 5221\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{func} - Checksum callback 5222 5223\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Callback argument 5224 5225\end{description}\end{quote} 5226\begin{quote}\begin{description} 5227\item[{retval}] \leavevmode\begin{itemize} 5228\item {} 52290 (always) 5230 5231\end{itemize} 5232 5233\end{description}\end{quote} 5234 5235Set a callback to obtain checksum data in {\hyperref[\detokenize{appdev/refs/api/krb5_mk_req:c.krb5_mk_req}]{\sphinxcrossref{\sphinxcode{krb5\_mk\_req()}}}} . The callback will be invoked after the subkey and local sequence number are stored in \sphinxstyleemphasis{auth\_context} . 5236 5237 5238\subsubsection{krb5\_auth\_con\_set\_req\_cksumtype - Set checksum type in an an auth context.} 5239\label{\detokenize{appdev/refs/api/krb5_auth_con_set_req_cksumtype:krb5-auth-con-set-req-cksumtype-set-checksum-type-in-an-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_set_req_cksumtype::doc}}\index{krb5\_auth\_con\_set\_req\_cksumtype (C function)} 5240 5241\begin{fulllineitems} 5242\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_set_req_cksumtype:c.krb5_auth_con_set_req_cksumtype}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_set\_req\_cksumtype}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ cksumtype}}{} 5243\end{fulllineitems} 5244 5245\begin{quote}\begin{description} 5246\item[{param}] \leavevmode 5247\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5248 5249\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 5250 5251\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type 5252 5253\end{description}\end{quote} 5254\begin{quote}\begin{description} 5255\item[{retval}] \leavevmode\begin{itemize} 5256\item {} 52570 Success. Otherwise - Kerberos error codes 5258 5259\end{itemize} 5260 5261\end{description}\end{quote} 5262 5263This function sets the checksum type in \sphinxstyleemphasis{auth\_context} to be used by {\hyperref[\detokenize{appdev/refs/api/krb5_mk_req:c.krb5_mk_req}]{\sphinxcrossref{\sphinxcode{krb5\_mk\_req()}}}} for the authenticator checksum. 5264 5265 5266\subsubsection{krb5\_auth\_con\_setaddrs - Set the local and remote addresses in an auth context.} 5267\label{\detokenize{appdev/refs/api/krb5_auth_con_setaddrs::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setaddrs:krb5-auth-con-setaddrs-set-the-local-and-remote-addresses-in-an-auth-context}}\index{krb5\_auth\_con\_setaddrs (C function)} 5268 5269\begin{fulllineitems} 5270\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setaddrs:c.krb5_auth_con_setaddrs}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_setaddrs}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *\sphinxstyleemphasis{ local\_addr}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *\sphinxstyleemphasis{ remote\_addr}}{} 5271\end{fulllineitems} 5272 5273\begin{quote}\begin{description} 5274\item[{param}] \leavevmode 5275\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5276 5277\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 5278 5279\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{local\_addr} - Local address 5280 5281\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{remote\_addr} - Remote address 5282 5283\end{description}\end{quote} 5284\begin{quote}\begin{description} 5285\item[{retval}] \leavevmode\begin{itemize} 5286\item {} 52870 Success; otherwise - Kerberos error codes 5288 5289\end{itemize} 5290 5291\end{description}\end{quote} 5292 5293This function releases the storage assigned to the contents of the local and remote addresses of \sphinxstyleemphasis{auth\_context} and then sets them to \sphinxstyleemphasis{local\_addr} and \sphinxstyleemphasis{remote\_addr} respectively. 5294 5295 5296\sphinxstrong{See also:} 5297 5298 5299{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_genaddrs:c.krb5_auth_con_genaddrs}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_genaddrs()}}}} 5300 5301 5302 5303 5304\subsubsection{krb5\_auth\_con\_setflags - Set a flags field in a krb5\_auth\_context structure.} 5305\label{\detokenize{appdev/refs/api/krb5_auth_con_setflags:krb5-auth-con-setflags-set-a-flags-field-in-a-krb5-auth-context-structure}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setflags::doc}}\index{krb5\_auth\_con\_setflags (C function)} 5306 5307\begin{fulllineitems} 5308\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setflags:c.krb5_auth_con_setflags}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_setflags}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}\sphinxstyleemphasis{ flags}}{} 5309\end{fulllineitems} 5310 5311\begin{quote}\begin{description} 5312\item[{param}] \leavevmode 5313\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5314 5315\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 5316 5317\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flags bit mask 5318 5319\end{description}\end{quote} 5320\begin{quote}\begin{description} 5321\item[{retval}] \leavevmode\begin{itemize} 5322\item {} 53230 (always) 5324 5325\end{itemize} 5326 5327\end{description}\end{quote} 5328 5329Valid values for \sphinxstyleemphasis{flags} are: 5330\begin{itemize} 5331\item {} 5332{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} Use timestamps 5333 5334\item {} 5335{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} Save timestamps 5336 5337\item {} 5338{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} Use sequence numbers 5339 5340\item {} 5341{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} Save sequence numbers 5342 5343\end{itemize} 5344 5345 5346\subsubsection{krb5\_auth\_con\_setports - Set local and remote port fields in an auth context.} 5347\label{\detokenize{appdev/refs/api/krb5_auth_con_setports:krb5-auth-con-setports-set-local-and-remote-port-fields-in-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setports::doc}}\index{krb5\_auth\_con\_setports (C function)} 5348 5349\begin{fulllineitems} 5350\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setports:c.krb5_auth_con_setports}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_setports}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *\sphinxstyleemphasis{ local\_port}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *\sphinxstyleemphasis{ remote\_port}}{} 5351\end{fulllineitems} 5352 5353\begin{quote}\begin{description} 5354\item[{param}] \leavevmode 5355\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5356 5357\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 5358 5359\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{local\_port} - Local port 5360 5361\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{remote\_port} - Remote port 5362 5363\end{description}\end{quote} 5364\begin{quote}\begin{description} 5365\item[{retval}] \leavevmode\begin{itemize} 5366\item {} 53670 Success; otherwise - Kerberos error codes 5368 5369\end{itemize} 5370 5371\end{description}\end{quote} 5372 5373This function releases the storage assigned to the contents of the local and remote ports of \sphinxstyleemphasis{auth\_context} and then sets them to \sphinxstyleemphasis{local\_port} and \sphinxstyleemphasis{remote\_port} respectively. 5374 5375 5376\sphinxstrong{See also:} 5377 5378 5379{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_genaddrs:c.krb5_auth_con_genaddrs}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_genaddrs()}}}} 5380 5381 5382 5383 5384\subsubsection{krb5\_auth\_con\_setrcache - Set the replay cache in an auth context.} 5385\label{\detokenize{appdev/refs/api/krb5_auth_con_setrcache::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setrcache:krb5-auth-con-setrcache-set-the-replay-cache-in-an-auth-context}}\index{krb5\_auth\_con\_setrcache (C function)} 5386 5387\begin{fulllineitems} 5388\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setrcache:c.krb5_auth_con_setrcache}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_setrcache}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_rcache:c.krb5_rcache}]{\sphinxcrossref{krb5\_rcache}}}\sphinxstyleemphasis{ rcache}}{} 5389\end{fulllineitems} 5390 5391\begin{quote}\begin{description} 5392\item[{param}] \leavevmode 5393\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5394 5395\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 5396 5397\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rcache} - Replay cache haddle 5398 5399\end{description}\end{quote} 5400\begin{quote}\begin{description} 5401\item[{retval}] \leavevmode\begin{itemize} 5402\item {} 54030 Success; otherwise - Kerberos error codes 5404 5405\end{itemize} 5406 5407\end{description}\end{quote} 5408 5409This function sets the replay cache in \sphinxstyleemphasis{auth\_context} to \sphinxstyleemphasis{rcache} . \sphinxstyleemphasis{rcache} will be closed when \sphinxstyleemphasis{auth\_context} is freed, so the caller should relinquish that responsibility. 5410 5411 5412\subsubsection{krb5\_auth\_con\_setrecvsubkey - Set the receiving subkey in an auth context with a keyblock.} 5413\label{\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey:krb5-auth-con-setrecvsubkey-set-the-receiving-subkey-in-an-auth-context-with-a-keyblock}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey::doc}}\index{krb5\_auth\_con\_setrecvsubkey (C function)} 5414 5415\begin{fulllineitems} 5416\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey:c.krb5_auth_con_setrecvsubkey}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_setrecvsubkey}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ keyblock}}{} 5417\end{fulllineitems} 5418 5419\begin{quote}\begin{description} 5420\item[{param}] \leavevmode 5421\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 5422 5423\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context 5424 5425\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} - Receiving subkey 5426 5427\end{description}\end{quote} 5428\begin{quote}\begin{description} 5429\item[{retval}] \leavevmode\begin{itemize} 5430\item {} 54310 Success; otherwise - Kerberos error codes 5432 5433\end{itemize} 5434 5435\end{description}\end{quote} 5436 5437This function sets the receiving subkey in \sphinxstyleemphasis{ac} to a copy of \sphinxstyleemphasis{keyblock} . 5438 5439 5440\subsubsection{krb5\_auth\_con\_setrecvsubkey\_k - Set the receiving subkey in an auth context.} 5441\label{\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey_k::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey_k:krb5-auth-con-setrecvsubkey-k-set-the-receiving-subkey-in-an-auth-context}}\index{krb5\_auth\_con\_setrecvsubkey\_k (C function)} 5442 5443\begin{fulllineitems} 5444\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey_k:c.krb5_auth_con_setrecvsubkey_k}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_setrecvsubkey\_k}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}}{} 5445\end{fulllineitems} 5446 5447\begin{quote}\begin{description} 5448\item[{param}] \leavevmode 5449\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 5450 5451\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context 5452 5453\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Receiving subkey 5454 5455\end{description}\end{quote} 5456\begin{quote}\begin{description} 5457\item[{retval}] \leavevmode\begin{itemize} 5458\item {} 54590 Success; otherwise - Kerberos error codes 5460 5461\end{itemize} 5462 5463\end{description}\end{quote} 5464 5465This function sets the receiving subkey in \sphinxstyleemphasis{ac} to \sphinxstyleemphasis{key} , incrementing its reference count. 5466 5467\begin{sphinxadmonition}{note}{Note:} 5468New in 1.9 5469\end{sphinxadmonition} 5470 5471 5472\subsubsection{krb5\_auth\_con\_setsendsubkey - Set the send subkey in an auth context with a keyblock.} 5473\label{\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey:krb5-auth-con-setsendsubkey-set-the-send-subkey-in-an-auth-context-with-a-keyblock}}\index{krb5\_auth\_con\_setsendsubkey (C function)} 5474 5475\begin{fulllineitems} 5476\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey:c.krb5_auth_con_setsendsubkey}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_setsendsubkey}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ keyblock}}{} 5477\end{fulllineitems} 5478 5479\begin{quote}\begin{description} 5480\item[{param}] \leavevmode 5481\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 5482 5483\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context 5484 5485\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} - Send subkey 5486 5487\end{description}\end{quote} 5488\begin{quote}\begin{description} 5489\item[{retval}] \leavevmode\begin{itemize} 5490\item {} 54910 Success. Otherwise - Kerberos error codes 5492 5493\end{itemize} 5494 5495\end{description}\end{quote} 5496 5497This function sets the send subkey in \sphinxstyleemphasis{ac} to a copy of \sphinxstyleemphasis{keyblock} . 5498 5499 5500\subsubsection{krb5\_auth\_con\_setsendsubkey\_k - Set the send subkey in an auth context.} 5501\label{\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey_k:krb5-auth-con-setsendsubkey-k-set-the-send-subkey-in-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey_k::doc}}\index{krb5\_auth\_con\_setsendsubkey\_k (C function)} 5502 5503\begin{fulllineitems} 5504\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey_k:c.krb5_auth_con_setsendsubkey_k}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_setsendsubkey\_k}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}}{} 5505\end{fulllineitems} 5506 5507\begin{quote}\begin{description} 5508\item[{param}] \leavevmode 5509\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 5510 5511\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context 5512 5513\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Send subkey 5514 5515\end{description}\end{quote} 5516\begin{quote}\begin{description} 5517\item[{retval}] \leavevmode\begin{itemize} 5518\item {} 55190 Success; otherwise - Kerberos error codes 5520 5521\end{itemize} 5522 5523\end{description}\end{quote} 5524 5525This function sets the send subkey in \sphinxstyleemphasis{ac} to \sphinxstyleemphasis{key} , incrementing its reference count. 5526 5527\begin{sphinxadmonition}{note}{Note:} 5528New in 1.9 5529\end{sphinxadmonition} 5530 5531 5532\subsubsection{krb5\_auth\_con\_setuseruserkey - Set the session key in an auth context.} 5533\label{\detokenize{appdev/refs/api/krb5_auth_con_setuseruserkey::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setuseruserkey:krb5-auth-con-setuseruserkey-set-the-session-key-in-an-auth-context}}\index{krb5\_auth\_con\_setuseruserkey (C function)} 5534 5535\begin{fulllineitems} 5536\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setuseruserkey:c.krb5_auth_con_setuseruserkey}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_setuseruserkey}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ keyblock}}{} 5537\end{fulllineitems} 5538 5539\begin{quote}\begin{description} 5540\item[{param}] \leavevmode 5541\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5542 5543\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 5544 5545\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} - User key 5546 5547\end{description}\end{quote} 5548\begin{quote}\begin{description} 5549\item[{retval}] \leavevmode\begin{itemize} 5550\item {} 55510 Success; otherwise - Kerberos error codes 5552 5553\end{itemize} 5554 5555\end{description}\end{quote} 5556 5557 5558\subsubsection{krb5\_cc\_cache\_match - Find a credential cache with a specified client principal.} 5559\label{\detokenize{appdev/refs/api/krb5_cc_cache_match:krb5-cc-cache-match-find-a-credential-cache-with-a-specified-client-principal}}\label{\detokenize{appdev/refs/api/krb5_cc_cache_match::doc}}\index{krb5\_cc\_cache\_match (C function)} 5560 5561\begin{fulllineitems} 5562\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_cache_match:c.krb5_cc_cache_match}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_cache\_match}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ client}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}} *\sphinxstyleemphasis{ cache\_out}}{} 5563\end{fulllineitems} 5564 5565\begin{quote}\begin{description} 5566\item[{param}] \leavevmode 5567\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5568 5569\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal 5570 5571\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cache\_out} - Credential cache handle 5572 5573\end{description}\end{quote} 5574\begin{quote}\begin{description} 5575\item[{retval}] \leavevmode\begin{itemize} 5576\item {} 55770 Success 5578 5579\item {} 5580KRB5\_CC\_NOTFOUND None 5581 5582\end{itemize} 5583 5584\end{description}\end{quote} 5585 5586Find a cache within the collection whose default principal is \sphinxstyleemphasis{client} . Use \sphinxstyleemphasis{krb5\_cc\_close} to close \sphinxstyleemphasis{ccache} when it is no longer needed. 5587 5588\begin{sphinxadmonition}{note}{Note:} 5589New in 1.10 5590\end{sphinxadmonition} 5591 5592 5593\subsubsection{krb5\_cc\_copy\_creds - Copy a credential cache.} 5594\label{\detokenize{appdev/refs/api/krb5_cc_copy_creds::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_copy_creds:krb5-cc-copy-creds-copy-a-credential-cache}}\index{krb5\_cc\_copy\_creds (C function)} 5595 5596\begin{fulllineitems} 5597\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_copy_creds:c.krb5_cc_copy_creds}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_copy\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ incc}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ outcc}}{} 5598\end{fulllineitems} 5599 5600\begin{quote}\begin{description} 5601\item[{param}] \leavevmode 5602\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5603 5604\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{incc} - Credential cache to be copied 5605 5606\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outcc} - Copy of credential cache to be filled in 5607 5608\end{description}\end{quote} 5609\begin{quote}\begin{description} 5610\item[{retval}] \leavevmode\begin{itemize} 5611\item {} 56120 Success; otherwise - Kerberos error codes 5613 5614\end{itemize} 5615 5616\end{description}\end{quote} 5617 5618 5619\subsubsection{krb5\_cc\_end\_seq\_get - Finish a series of sequential processing credential cache entries.} 5620\label{\detokenize{appdev/refs/api/krb5_cc_end_seq_get:krb5-cc-end-seq-get-finish-a-series-of-sequential-processing-credential-cache-entries}}\label{\detokenize{appdev/refs/api/krb5_cc_end_seq_get::doc}}\index{krb5\_cc\_end\_seq\_get (C function)} 5621 5622\begin{fulllineitems} 5623\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_end_seq_get:c.krb5_cc_end_seq_get}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_end\_seq\_get}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_cc_cursor:c.krb5_cc_cursor}]{\sphinxcrossref{krb5\_cc\_cursor}}} *\sphinxstyleemphasis{ cursor}}{} 5624\end{fulllineitems} 5625 5626\begin{quote}\begin{description} 5627\item[{param}] \leavevmode 5628\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5629 5630\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle 5631 5632\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} - Cursor 5633 5634\end{description}\end{quote} 5635\begin{quote}\begin{description} 5636\item[{retval}] \leavevmode\begin{itemize} 5637\item {} 56380 (always) 5639 5640\end{itemize} 5641 5642\end{description}\end{quote} 5643 5644This function finishes processing credential cache entries and invalidates \sphinxstyleemphasis{cursor} . 5645 5646 5647\sphinxstrong{See also:} 5648 5649 5650{\hyperref[\detokenize{appdev/refs/api/krb5_cc_start_seq_get:c.krb5_cc_start_seq_get}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_start\_seq\_get()}}}} , {\hyperref[\detokenize{appdev/refs/api/krb5_cc_next_cred:c.krb5_cc_next_cred}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_next\_cred()}}}} 5651 5652 5653 5654 5655\subsubsection{krb5\_cc\_get\_config - Get a configuration value from a credential cache.} 5656\label{\detokenize{appdev/refs/api/krb5_cc_get_config:krb5-cc-get-config-get-a-configuration-value-from-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_get_config::doc}}\index{krb5\_cc\_get\_config (C function)} 5657 5658\begin{fulllineitems} 5659\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_get_config:c.krb5_cc_get_config}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_get\_config}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ id}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, const char *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}}{} 5660\end{fulllineitems} 5661 5662\begin{quote}\begin{description} 5663\item[{param}] \leavevmode 5664\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5665 5666\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{id} - Credential cache handle 5667 5668\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Configuration for this principal; if NULL, global for the whole cache 5669 5670\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Name of config variable 5671 5672\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} - Data to be fetched 5673 5674\end{description}\end{quote} 5675\begin{quote}\begin{description} 5676\item[{retval}] \leavevmode\begin{itemize} 5677\item {} 56780 Success 5679 5680\end{itemize} 5681 5682\item[{return}] \leavevmode\begin{itemize} 5683\item {} 5684Kerberos error codes 5685 5686\end{itemize} 5687 5688\end{description}\end{quote} 5689 5690Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{data} when it is no longer needed. 5691 5692 5693\subsubsection{krb5\_cc\_get\_flags - Retrieve flags from a credential cache structure.} 5694\label{\detokenize{appdev/refs/api/krb5_cc_get_flags:krb5-cc-get-flags-retrieve-flags-from-a-credential-cache-structure}}\label{\detokenize{appdev/refs/api/krb5_cc_get_flags::doc}}\index{krb5\_cc\_get\_flags (C function)} 5695 5696\begin{fulllineitems} 5697\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_get_flags:c.krb5_cc_get_flags}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_get\_flags}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}} *\sphinxstyleemphasis{ flags}}{} 5698\end{fulllineitems} 5699 5700\begin{quote}\begin{description} 5701\item[{param}] \leavevmode 5702\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5703 5704\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle 5705 5706\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{flags} - Flag bit mask 5707 5708\end{description}\end{quote} 5709\begin{quote}\begin{description} 5710\item[{retval}] \leavevmode\begin{itemize} 5711\item {} 57120 Success; otherwise - Kerberos error codes 5713 5714\end{itemize} 5715 5716\end{description}\end{quote} 5717 5718\begin{sphinxadmonition}{warning}{Warning:} 5719For memory credential cache always returns a flag mask of 0. 5720\end{sphinxadmonition} 5721 5722 5723\subsubsection{krb5\_cc\_get\_full\_name - Retrieve the full name of a credential cache.} 5724\label{\detokenize{appdev/refs/api/krb5_cc_get_full_name::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_get_full_name:krb5-cc-get-full-name-retrieve-the-full-name-of-a-credential-cache}}\index{krb5\_cc\_get\_full\_name (C function)} 5725 5726\begin{fulllineitems} 5727\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_get_full_name:c.krb5_cc_get_full_name}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_get\_full\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, char **\sphinxstyleemphasis{ fullname\_out}}{} 5728\end{fulllineitems} 5729 5730\begin{quote}\begin{description} 5731\item[{param}] \leavevmode 5732\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5733 5734\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle 5735 5736\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{fullname\_out} - Full name of cache 5737 5738\end{description}\end{quote} 5739 5740Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_string:c.krb5_free_string}]{\sphinxcrossref{\sphinxcode{krb5\_free\_string()}}}} to free \sphinxstyleemphasis{fullname\_out} when it is no longer needed. 5741 5742\begin{sphinxadmonition}{note}{Note:} 5743New in 1.10 5744\end{sphinxadmonition} 5745 5746 5747\subsubsection{krb5\_cc\_move - Move a credential cache.} 5748\label{\detokenize{appdev/refs/api/krb5_cc_move:krb5-cc-move-move-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_move::doc}}\index{krb5\_cc\_move (C function)} 5749 5750\begin{fulllineitems} 5751\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_move:c.krb5_cc_move}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_move}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ src}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ dst}}{} 5752\end{fulllineitems} 5753 5754\begin{quote}\begin{description} 5755\item[{param}] \leavevmode 5756\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5757 5758\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{src} - The credential cache to move the content from 5759 5760\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{dst} - The credential cache to move the content to 5761 5762\end{description}\end{quote} 5763\begin{quote}\begin{description} 5764\item[{retval}] \leavevmode\begin{itemize} 5765\item {} 57660 Success; src is closed. 5767 5768\end{itemize} 5769 5770\item[{return}] \leavevmode\begin{itemize} 5771\item {} 5772Kerberos error codes; src is still allocated. 5773 5774\end{itemize} 5775 5776\end{description}\end{quote} 5777 5778This function reinitializes \sphinxstyleemphasis{dst} and populates it with the credentials and default principal of \sphinxstyleemphasis{src} ; then, if successful, destroys \sphinxstyleemphasis{src} . 5779 5780 5781\subsubsection{krb5\_cc\_next\_cred - Retrieve the next entry from the credential cache.} 5782\label{\detokenize{appdev/refs/api/krb5_cc_next_cred::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_next_cred:krb5-cc-next-cred-retrieve-the-next-entry-from-the-credential-cache}}\index{krb5\_cc\_next\_cred (C function)} 5783 5784\begin{fulllineitems} 5785\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_next_cred:c.krb5_cc_next_cred}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_next\_cred}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_cc_cursor:c.krb5_cc_cursor}]{\sphinxcrossref{krb5\_cc\_cursor}}} *\sphinxstyleemphasis{ cursor}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}}{} 5786\end{fulllineitems} 5787 5788\begin{quote}\begin{description} 5789\item[{param}] \leavevmode 5790\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5791 5792\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle 5793 5794\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} - Cursor 5795 5796\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - Next credential cache entry 5797 5798\end{description}\end{quote} 5799\begin{quote}\begin{description} 5800\item[{retval}] \leavevmode\begin{itemize} 5801\item {} 58020 Success; otherwise - Kerberos error codes 5803 5804\end{itemize} 5805 5806\end{description}\end{quote} 5807 5808This function fills in \sphinxstyleemphasis{creds} with the next entry in \sphinxstyleemphasis{cache} and advances \sphinxstyleemphasis{cursor} . 5809 5810Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_cred_contents:c.krb5_free_cred_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_cred\_contents()}}}} to free \sphinxstyleemphasis{creds} when it is no longer needed. 5811 5812 5813\sphinxstrong{See also:} 5814 5815 5816{\hyperref[\detokenize{appdev/refs/api/krb5_cc_start_seq_get:c.krb5_cc_start_seq_get}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_start\_seq\_get()}}}} , krb5\_end\_seq\_get() 5817 5818 5819 5820 5821\subsubsection{krb5\_cc\_remove\_cred - Remove credentials from a credential cache.} 5822\label{\detokenize{appdev/refs/api/krb5_cc_remove_cred:krb5-cc-remove-cred-remove-credentials-from-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_remove_cred::doc}}\index{krb5\_cc\_remove\_cred (C function)} 5823 5824\begin{fulllineitems} 5825\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_remove_cred:c.krb5_cc_remove_cred}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_remove\_cred}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ flags}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}}{} 5826\end{fulllineitems} 5827 5828\begin{quote}\begin{description} 5829\item[{param}] \leavevmode 5830\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5831 5832\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle 5833 5834\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Bitwise-ORed search flags 5835 5836\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Credentials to be matched 5837 5838\end{description}\end{quote} 5839\begin{quote}\begin{description} 5840\item[{retval}] \leavevmode\begin{itemize} 5841\item {} 5842KRB5\_CC\_NOSUPP Not implemented for this cache type 5843 5844\end{itemize} 5845 5846\item[{return}] \leavevmode\begin{itemize} 5847\item {} 5848No matches found; Data cannot be deleted; Kerberos error codes 5849 5850\end{itemize} 5851 5852\end{description}\end{quote} 5853 5854This function accepts the same flag values as {\hyperref[\detokenize{appdev/refs/api/krb5_cc_retrieve_cred:c.krb5_cc_retrieve_cred}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_retrieve\_cred()}}}} . 5855 5856\begin{sphinxadmonition}{warning}{Warning:} 5857This function is not implemented for some cache types. 5858\end{sphinxadmonition} 5859 5860 5861\subsubsection{krb5\_cc\_retrieve\_cred - Retrieve a specified credentials from a credential cache.} 5862\label{\detokenize{appdev/refs/api/krb5_cc_retrieve_cred:krb5-cc-retrieve-cred-retrieve-a-specified-credentials-from-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_retrieve_cred::doc}}\index{krb5\_cc\_retrieve\_cred (C function)} 5863 5864\begin{fulllineitems} 5865\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_retrieve_cred:c.krb5_cc_retrieve_cred}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_retrieve\_cred}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ flags}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ mcreds}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}}{} 5866\end{fulllineitems} 5867 5868\begin{quote}\begin{description} 5869\item[{param}] \leavevmode 5870\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5871 5872\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle 5873 5874\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flags bit mask 5875 5876\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{mcreds} - Credentials to match 5877 5878\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - Credentials matching the requested value 5879 5880\end{description}\end{quote} 5881\begin{quote}\begin{description} 5882\item[{retval}] \leavevmode\begin{itemize} 5883\item {} 58840 Success; otherwise - Kerberos error codes 5885 5886\end{itemize} 5887 5888\end{description}\end{quote} 5889 5890This function searches a credential cache for credentials matching \sphinxstyleemphasis{mcreds} and returns it if found. 5891 5892Valid values for \sphinxstyleemphasis{flags} are: 5893\begin{quote} 5894\begin{itemize} 5895\item {} 5896{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES:KRB5_TC_MATCH_TIMES}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_MATCH\_TIMES}}}} The requested lifetime must be at least as great as in \sphinxstyleemphasis{mcreds} . 5897 5898\item {} 5899{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_MATCH_IS_SKEY:KRB5_TC_MATCH_IS_SKEY}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_MATCH\_IS\_SKEY}}}} The \sphinxstyleemphasis{is\_skey} field much match exactly. 5900 5901\item {} 5902{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS:KRB5_TC_MATCH_FLAGS}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_MATCH\_FLAGS}}}} Flags set in \sphinxstyleemphasis{mcreds} must be set. 5903 5904\item {} 5905{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES_EXACT:KRB5_TC_MATCH_TIMES_EXACT}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_MATCH\_TIMES\_EXACT}}}} The requested lifetime must match exactly. 5906 5907\item {} 5908{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS_EXACT:KRB5_TC_MATCH_FLAGS_EXACT}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_MATCH\_FLAGS\_EXACT}}}} Flags must match exactly. 5909 5910\item {} 5911{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA:KRB5_TC_MATCH_AUTHDATA}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_MATCH\_AUTHDATA}}}} The authorization data must match. 5912 5913\item {} 5914{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_MATCH_SRV_NAMEONLY:KRB5_TC_MATCH_SRV_NAMEONLY}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_MATCH\_SRV\_NAMEONLY}}}} Only the name portion of the principal name must match, not the realm. 5915 5916\item {} 5917{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_MATCH_2ND_TKT:KRB5_TC_MATCH_2ND_TKT}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_MATCH\_2ND\_TKT}}}} The second tickets must match. 5918 5919\item {} 5920{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_MATCH_KTYPE:KRB5_TC_MATCH_KTYPE}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_MATCH\_KTYPE}}}} The encryption key types must match. 5921 5922\item {} 5923{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_SUPPORTED_KTYPES:KRB5_TC_SUPPORTED_KTYPES}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_SUPPORTED\_KTYPES}}}} Check all matching entries that have any supported encryption type and return the one with the encryption type listed earliest. 5924 5925\end{itemize} 5926 5927Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_cred_contents:c.krb5_free_cred_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_cred\_contents()}}}} to free \sphinxstyleemphasis{creds} when it is no longer needed. 5928\end{quote} 5929 5930 5931\subsubsection{krb5\_cc\_select - Select a credential cache to use with a server principal.} 5932\label{\detokenize{appdev/refs/api/krb5_cc_select::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_select:krb5-cc-select-select-a-credential-cache-to-use-with-a-server-principal}}\index{krb5\_cc\_select (C function)} 5933 5934\begin{fulllineitems} 5935\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_select:c.krb5_cc_select}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_select}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ server}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}} *\sphinxstyleemphasis{ cache\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ princ\_out}}{} 5936\end{fulllineitems} 5937 5938\begin{quote}\begin{description} 5939\item[{param}] \leavevmode 5940\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5941 5942\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Server principal 5943 5944\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cache\_out} - Credential cache handle 5945 5946\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ\_out} - Client principal 5947 5948\end{description}\end{quote} 5949\begin{quote}\begin{description} 5950\item[{return}] \leavevmode\begin{itemize} 5951\item {} 5952If an appropriate cache is found, 0 is returned, cache\_out is set to the selected cache, and princ\_out is set to the default principal of that cache. 5953 5954\end{itemize} 5955 5956\end{description}\end{quote} 5957 5958Select a cache within the collection containing credentials most appropriate for use with \sphinxstyleemphasis{server} , according to configured rules and heuristics. 5959 5960Use {\hyperref[\detokenize{appdev/refs/api/krb5_cc_close:c.krb5_cc_close}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_close()}}}} to release \sphinxstyleemphasis{cache\_out} when it is no longer needed. Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}} to release \sphinxstyleemphasis{princ\_out} when it is no longer needed. Note that \sphinxstyleemphasis{princ\_out} is set in some error conditions. 5961 5962If the appropriate client principal can be authoritatively determined but the cache collection contains no credentials for that principal, then KRB5\_CC\_NOTFOUND is returned, \sphinxstyleemphasis{cache\_out} is set to NULL, and \sphinxstyleemphasis{princ\_out} is set to the appropriate client principal. 5963 5964If no configured mechanism can determine the appropriate cache or principal, KRB5\_CC\_NOTFOUND is returned and \sphinxstyleemphasis{cache\_out} and \sphinxstyleemphasis{princ\_out} are set to NULL. 5965 5966Any other error code indicates a fatal error in the processing of a cache selection mechanism. 5967 5968\begin{sphinxadmonition}{note}{Note:} 5969New in 1.10 5970\end{sphinxadmonition} 5971 5972 5973\subsubsection{krb5\_cc\_set\_config - Store a configuration value in a credential cache.} 5974\label{\detokenize{appdev/refs/api/krb5_cc_set_config::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_set_config:krb5-cc-set-config-store-a-configuration-value-in-a-credential-cache}}\index{krb5\_cc\_set\_config (C function)} 5975 5976\begin{fulllineitems} 5977\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_set_config:c.krb5_cc_set_config}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_set\_config}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ id}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, const char *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}}{} 5978\end{fulllineitems} 5979 5980\begin{quote}\begin{description} 5981\item[{param}] \leavevmode 5982\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 5983 5984\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{id} - Credential cache handle 5985 5986\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Configuration for a specific principal; if NULL, global for the whole cache 5987 5988\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Name of config variable 5989 5990\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Data to store, or NULL to remove 5991 5992\end{description}\end{quote} 5993\begin{quote}\begin{description} 5994\item[{retval}] \leavevmode\begin{itemize} 5995\item {} 59960 Success 5997 5998\end{itemize} 5999 6000\item[{return}] \leavevmode\begin{itemize} 6001\item {} 6002Kerberos error codes 6003 6004\end{itemize} 6005 6006\end{description}\end{quote} 6007 6008\begin{sphinxadmonition}{warning}{Warning:} 6009Before version 1.10 \sphinxstyleemphasis{data} was assumed to be always non-null. 6010\end{sphinxadmonition} 6011 6012\begin{sphinxadmonition}{note}{Note:} 6013Existing configuration under the same key is over-written. 6014\end{sphinxadmonition} 6015 6016 6017\subsubsection{krb5\_cc\_set\_default\_name - Set the default credential cache name.} 6018\label{\detokenize{appdev/refs/api/krb5_cc_set_default_name:krb5-cc-set-default-name-set-the-default-credential-cache-name}}\label{\detokenize{appdev/refs/api/krb5_cc_set_default_name::doc}}\index{krb5\_cc\_set\_default\_name (C function)} 6019 6020\begin{fulllineitems} 6021\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_set_default_name:c.krb5_cc_set_default_name}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_set\_default\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ name}}{} 6022\end{fulllineitems} 6023 6024\begin{quote}\begin{description} 6025\item[{param}] \leavevmode 6026\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6027 6028\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - Default credential cache name or NULL 6029 6030\end{description}\end{quote} 6031\begin{quote}\begin{description} 6032\item[{retval}] \leavevmode\begin{itemize} 6033\item {} 60340 Success 6035 6036\item {} 6037KV5M\_CONTEXT Bad magic number for \_krb5\_context structure 6038 6039\end{itemize} 6040 6041\item[{return}] \leavevmode\begin{itemize} 6042\item {} 6043Kerberos error codes 6044 6045\end{itemize} 6046 6047\end{description}\end{quote} 6048 6049Set the default credential cache name to \sphinxstyleemphasis{name} for future operations using \sphinxstyleemphasis{context} . If \sphinxstyleemphasis{name} is NULL, clear any previous application-set default name and forget any cached value of the default name for \sphinxstyleemphasis{context} . 6050 6051Calls to this function invalidate the result of any previous calls to {\hyperref[\detokenize{appdev/refs/api/krb5_cc_default_name:c.krb5_cc_default_name}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_default\_name()}}}} using \sphinxstyleemphasis{context} . 6052 6053 6054\subsubsection{krb5\_cc\_set\_flags - Set options flags on a credential cache.} 6055\label{\detokenize{appdev/refs/api/krb5_cc_set_flags:krb5-cc-set-flags-set-options-flags-on-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_set_flags::doc}}\index{krb5\_cc\_set\_flags (C function)} 6056 6057\begin{fulllineitems} 6058\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_set_flags:c.krb5_cc_set_flags}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_set\_flags}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ flags}}{} 6059\end{fulllineitems} 6060 6061\begin{quote}\begin{description} 6062\item[{param}] \leavevmode 6063\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6064 6065\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle 6066 6067\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flag bit mask 6068 6069\end{description}\end{quote} 6070\begin{quote}\begin{description} 6071\item[{retval}] \leavevmode\begin{itemize} 6072\item {} 60730 Success; otherwise - Kerberos error codes 6074 6075\end{itemize} 6076 6077\end{description}\end{quote} 6078 6079This function resets \sphinxstyleemphasis{cache} flags to \sphinxstyleemphasis{flags} . 6080 6081 6082\subsubsection{krb5\_cc\_start\_seq\_get - Prepare to sequentially read every credential in a credential cache.} 6083\label{\detokenize{appdev/refs/api/krb5_cc_start_seq_get::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_start_seq_get:krb5-cc-start-seq-get-prepare-to-sequentially-read-every-credential-in-a-credential-cache}}\index{krb5\_cc\_start\_seq\_get (C function)} 6084 6085\begin{fulllineitems} 6086\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_start_seq_get:c.krb5_cc_start_seq_get}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_start\_seq\_get}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_cc_cursor:c.krb5_cc_cursor}]{\sphinxcrossref{krb5\_cc\_cursor}}} *\sphinxstyleemphasis{ cursor}}{} 6087\end{fulllineitems} 6088 6089\begin{quote}\begin{description} 6090\item[{param}] \leavevmode 6091\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6092 6093\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle 6094 6095\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cursor} - Cursor 6096 6097\end{description}\end{quote} 6098\begin{quote}\begin{description} 6099\item[{retval}] \leavevmode\begin{itemize} 6100\item {} 61010 Success; otherwise - Kerberos error codes 6102 6103\end{itemize} 6104 6105\end{description}\end{quote} 6106\begin{quote} 6107 6108{\hyperref[\detokenize{appdev/refs/api/krb5_cc_end_seq_get:c.krb5_cc_end_seq_get}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_end\_seq\_get()}}}} must be called to complete the retrieve operation. 6109\end{quote} 6110 6111\begin{sphinxadmonition}{note}{Note:} 6112If the cache represented by \sphinxstyleemphasis{cache} is modified between the time of the call to this function and the time of the final {\hyperref[\detokenize{appdev/refs/api/krb5_cc_end_seq_get:c.krb5_cc_end_seq_get}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_end\_seq\_get()}}}} , these changes may not be reflected in the results of {\hyperref[\detokenize{appdev/refs/api/krb5_cc_next_cred:c.krb5_cc_next_cred}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_next\_cred()}}}} calls. 6113\end{sphinxadmonition} 6114 6115 6116\subsubsection{krb5\_cc\_store\_cred - Store credentials in a credential cache.} 6117\label{\detokenize{appdev/refs/api/krb5_cc_store_cred:krb5-cc-store-cred-store-credentials-in-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_store_cred::doc}}\index{krb5\_cc\_store\_cred (C function)} 6118 6119\begin{fulllineitems} 6120\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_store_cred:c.krb5_cc_store_cred}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_store\_cred}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}}{} 6121\end{fulllineitems} 6122 6123\begin{quote}\begin{description} 6124\item[{param}] \leavevmode 6125\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6126 6127\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle 6128 6129\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Credentials to be stored in cache 6130 6131\end{description}\end{quote} 6132\begin{quote}\begin{description} 6133\item[{retval}] \leavevmode\begin{itemize} 6134\item {} 61350 Success 6136 6137\end{itemize} 6138 6139\item[{return}] \leavevmode\begin{itemize} 6140\item {} 6141Permission errors; storage failure errors; Kerberos error codes 6142 6143\end{itemize} 6144 6145\end{description}\end{quote} 6146 6147This function stores \sphinxstyleemphasis{creds} into \sphinxstyleemphasis{cache} . If \sphinxstyleemphasis{creds-\textgreater{}server} and the server in the decoded ticket \sphinxstyleemphasis{creds-\textgreater{}ticket} differ, the credentials will be stored under both server principal names. 6148 6149 6150\subsubsection{krb5\_cc\_support\_switch - Determine whether a credential cache type supports switching.} 6151\label{\detokenize{appdev/refs/api/krb5_cc_support_switch::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_support_switch:krb5-cc-support-switch-determine-whether-a-credential-cache-type-supports-switching}}\index{krb5\_cc\_support\_switch (C function)} 6152 6153\begin{fulllineitems} 6154\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_support_switch:c.krb5_cc_support_switch}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_cc\_support\_switch}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ type}}{} 6155\end{fulllineitems} 6156 6157\begin{quote}\begin{description} 6158\item[{param}] \leavevmode 6159\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6160 6161\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - Credential cache type 6162 6163\end{description}\end{quote} 6164\begin{quote}\begin{description} 6165\item[{retval}] \leavevmode\begin{itemize} 6166\item {} 6167TRUE if type supports switching 6168 6169\item {} 6170FALSE if it does not or is not a valid credential cache type. 6171 6172\end{itemize} 6173 6174\end{description}\end{quote} 6175 6176\begin{sphinxadmonition}{note}{Note:} 6177New in 1.10 6178\end{sphinxadmonition} 6179 6180 6181\subsubsection{krb5\_cc\_switch - Make a credential cache the primary cache for its collection.} 6182\label{\detokenize{appdev/refs/api/krb5_cc_switch::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_switch:krb5-cc-switch-make-a-credential-cache-the-primary-cache-for-its-collection}}\index{krb5\_cc\_switch (C function)} 6183 6184\begin{fulllineitems} 6185\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_switch:c.krb5_cc_switch}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_switch}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}}{} 6186\end{fulllineitems} 6187 6188\begin{quote}\begin{description} 6189\item[{param}] \leavevmode 6190\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6191 6192\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle 6193 6194\end{description}\end{quote} 6195\begin{quote}\begin{description} 6196\item[{retval}] \leavevmode\begin{itemize} 6197\item {} 61980 Success, or the type of cache doesn’t support switching 6199 6200\end{itemize} 6201 6202\item[{return}] \leavevmode\begin{itemize} 6203\item {} 6204Kerberos error codes 6205 6206\end{itemize} 6207 6208\end{description}\end{quote} 6209 6210If the type of \sphinxstyleemphasis{cache} supports it, set \sphinxstyleemphasis{cache} to be the primary credential cache for the collection it belongs to. 6211 6212 6213\subsubsection{krb5\_cccol\_cursor\_free - Free a credential cache collection cursor.} 6214\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_free::doc}}\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_free:krb5-cccol-cursor-free-free-a-credential-cache-collection-cursor}}\index{krb5\_cccol\_cursor\_free (C function)} 6215 6216\begin{fulllineitems} 6217\phantomsection\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_free:c.krb5_cccol_cursor_free}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cccol\_cursor\_free}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cccol_cursor:c.krb5_cccol_cursor}]{\sphinxcrossref{krb5\_cccol\_cursor}}} *\sphinxstyleemphasis{ cursor}}{} 6218\end{fulllineitems} 6219 6220\begin{quote}\begin{description} 6221\item[{param}] \leavevmode 6222\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6223 6224\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} - Cursor 6225 6226\end{description}\end{quote} 6227\begin{quote}\begin{description} 6228\item[{retval}] \leavevmode\begin{itemize} 6229\item {} 62300 Success; otherwise - Kerberos error codes 6231 6232\end{itemize} 6233 6234\end{description}\end{quote} 6235 6236 6237\sphinxstrong{See also:} 6238 6239 6240{\hyperref[\detokenize{appdev/refs/api/krb5_cccol_cursor_new:c.krb5_cccol_cursor_new}]{\sphinxcrossref{\sphinxcode{krb5\_cccol\_cursor\_new()}}}} , {\hyperref[\detokenize{appdev/refs/api/krb5_cccol_cursor_next:c.krb5_cccol_cursor_next}]{\sphinxcrossref{\sphinxcode{krb5\_cccol\_cursor\_next()}}}} 6241 6242 6243 6244 6245\subsubsection{krb5\_cccol\_cursor\_new - Prepare to iterate over the collection of known credential caches.} 6246\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_new::doc}}\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_new:krb5-cccol-cursor-new-prepare-to-iterate-over-the-collection-of-known-credential-caches}}\index{krb5\_cccol\_cursor\_new (C function)} 6247 6248\begin{fulllineitems} 6249\phantomsection\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_new:c.krb5_cccol_cursor_new}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cccol\_cursor\_new}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cccol_cursor:c.krb5_cccol_cursor}]{\sphinxcrossref{krb5\_cccol\_cursor}}} *\sphinxstyleemphasis{ cursor}}{} 6250\end{fulllineitems} 6251 6252\begin{quote}\begin{description} 6253\item[{param}] \leavevmode 6254\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6255 6256\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cursor} - Cursor 6257 6258\end{description}\end{quote} 6259\begin{quote}\begin{description} 6260\item[{retval}] \leavevmode\begin{itemize} 6261\item {} 62620 Success; otherwise - Kerberos error codes 6263 6264\end{itemize} 6265 6266\end{description}\end{quote} 6267 6268Get a new cache iteration \sphinxstyleemphasis{cursor} that will iterate over all known credential caches independent of type. 6269 6270Use {\hyperref[\detokenize{appdev/refs/api/krb5_cccol_cursor_free:c.krb5_cccol_cursor_free}]{\sphinxcrossref{\sphinxcode{krb5\_cccol\_cursor\_free()}}}} to release \sphinxstyleemphasis{cursor} when it is no longer needed. 6271 6272 6273\sphinxstrong{See also:} 6274 6275 6276{\hyperref[\detokenize{appdev/refs/api/krb5_cccol_cursor_next:c.krb5_cccol_cursor_next}]{\sphinxcrossref{\sphinxcode{krb5\_cccol\_cursor\_next()}}}} 6277 6278 6279 6280 6281\subsubsection{krb5\_cccol\_cursor\_next - Get the next credential cache in the collection.} 6282\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_next::doc}}\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_next:krb5-cccol-cursor-next-get-the-next-credential-cache-in-the-collection}}\index{krb5\_cccol\_cursor\_next (C function)} 6283 6284\begin{fulllineitems} 6285\phantomsection\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_next:c.krb5_cccol_cursor_next}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cccol\_cursor\_next}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cccol_cursor:c.krb5_cccol_cursor}]{\sphinxcrossref{krb5\_cccol\_cursor}}}\sphinxstyleemphasis{ cursor}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}} *\sphinxstyleemphasis{ ccache}}{} 6286\end{fulllineitems} 6287 6288\begin{quote}\begin{description} 6289\item[{param}] \leavevmode 6290\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6291 6292\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} - Cursor 6293 6294\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ccache} - Credential cache handle 6295 6296\end{description}\end{quote} 6297\begin{quote}\begin{description} 6298\item[{retval}] \leavevmode\begin{itemize} 6299\item {} 63000 Success; otherwise - Kerberos error codes 6301 6302\end{itemize} 6303 6304\end{description}\end{quote} 6305 6306Use {\hyperref[\detokenize{appdev/refs/api/krb5_cc_close:c.krb5_cc_close}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_close()}}}} to close \sphinxstyleemphasis{ccache} when it is no longer needed. 6307 6308 6309\sphinxstrong{See also:} 6310 6311 6312{\hyperref[\detokenize{appdev/refs/api/krb5_cccol_cursor_new:c.krb5_cccol_cursor_new}]{\sphinxcrossref{\sphinxcode{krb5\_cccol\_cursor\_new()}}}} , {\hyperref[\detokenize{appdev/refs/api/krb5_cccol_cursor_free:c.krb5_cccol_cursor_free}]{\sphinxcrossref{\sphinxcode{krb5\_cccol\_cursor\_free()}}}} 6313 6314 6315 6316\begin{sphinxadmonition}{note}{Note:} 6317When all caches are iterated over and the end of the list is reached, \sphinxstyleemphasis{ccache} is set to NULL. 6318\end{sphinxadmonition} 6319 6320 6321\subsubsection{krb5\_cccol\_have\_content - Check if the credential cache collection contains any credentials.} 6322\label{\detokenize{appdev/refs/api/krb5_cccol_have_content:krb5-cccol-have-content-check-if-the-credential-cache-collection-contains-any-credentials}}\label{\detokenize{appdev/refs/api/krb5_cccol_have_content::doc}}\index{krb5\_cccol\_have\_content (C function)} 6323 6324\begin{fulllineitems} 6325\phantomsection\label{\detokenize{appdev/refs/api/krb5_cccol_have_content:c.krb5_cccol_have_content}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cccol\_have\_content}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}}{} 6326\end{fulllineitems} 6327 6328\begin{quote}\begin{description} 6329\item[{param}] \leavevmode 6330\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6331 6332\end{description}\end{quote} 6333\begin{quote}\begin{description} 6334\item[{retval}] \leavevmode\begin{itemize} 6335\item {} 63360 Credentials are available in the collection 6337 6338\item {} 6339KRB5\_CC\_NOTFOUND The collection contains no credentials 6340 6341\end{itemize} 6342 6343\end{description}\end{quote} 6344 6345\begin{sphinxadmonition}{note}{Note:} 6346New in 1.11 6347\end{sphinxadmonition} 6348 6349 6350\subsubsection{krb5\_clear\_error\_message - Clear the extended error message in a context.} 6351\label{\detokenize{appdev/refs/api/krb5_clear_error_message:krb5-clear-error-message-clear-the-extended-error-message-in-a-context}}\label{\detokenize{appdev/refs/api/krb5_clear_error_message::doc}}\index{krb5\_clear\_error\_message (C function)} 6352 6353\begin{fulllineitems} 6354\phantomsection\label{\detokenize{appdev/refs/api/krb5_clear_error_message:c.krb5_clear_error_message}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_clear\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}}{} 6355\end{fulllineitems} 6356 6357\begin{quote}\begin{description} 6358\item[{param}] \leavevmode 6359\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 6360 6361\end{description}\end{quote} 6362 6363This function unsets the extended error message in a context, to ensure that it is not mistakenly applied to another occurrence of the same error code. 6364 6365 6366\subsubsection{krb5\_check\_clockskew - Check if a timestamp is within the allowed clock skew of the current time.} 6367\label{\detokenize{appdev/refs/api/krb5_check_clockskew:krb5-check-clockskew-check-if-a-timestamp-is-within-the-allowed-clock-skew-of-the-current-time}}\label{\detokenize{appdev/refs/api/krb5_check_clockskew::doc}}\index{krb5\_check\_clockskew (C function)} 6368 6369\begin{fulllineitems} 6370\phantomsection\label{\detokenize{appdev/refs/api/krb5_check_clockskew:c.krb5_check_clockskew}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_check\_clockskew}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}\sphinxstyleemphasis{ date}}{} 6371\end{fulllineitems} 6372 6373\begin{quote}\begin{description} 6374\item[{param}] \leavevmode 6375\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6376 6377\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{date} - Timestamp to check 6378 6379\end{description}\end{quote} 6380\begin{quote}\begin{description} 6381\item[{retval}] \leavevmode\begin{itemize} 6382\item {} 63830 Success 6384 6385\item {} 6386KRB5KRB\_AP\_ERR\_SKEW date is not within allowable clock skew 6387 6388\end{itemize} 6389 6390\end{description}\end{quote} 6391 6392This function checks if \sphinxstyleemphasis{date} is close enough to the current time according to the configured allowable clock skew. 6393 6394\begin{sphinxadmonition}{note}{Note:} 6395New in 1.10 6396\end{sphinxadmonition} 6397 6398 6399\subsubsection{krb5\_copy\_addresses - Copy an array of addresses.} 6400\label{\detokenize{appdev/refs/api/krb5_copy_addresses:krb5-copy-addresses-copy-an-array-of-addresses}}\label{\detokenize{appdev/refs/api/krb5_copy_addresses::doc}}\index{krb5\_copy\_addresses (C function)} 6401 6402\begin{fulllineitems} 6403\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_addresses:c.krb5_copy_addresses}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_addresses}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *const *\sphinxstyleemphasis{ inaddr}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} ***\sphinxstyleemphasis{ outaddr}}{} 6404\end{fulllineitems} 6405 6406\begin{quote}\begin{description} 6407\item[{param}] \leavevmode 6408\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6409 6410\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inaddr} - Array of addresses to be copied 6411 6412\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outaddr} - Copy of array of addresses 6413 6414\end{description}\end{quote} 6415\begin{quote}\begin{description} 6416\item[{retval}] \leavevmode\begin{itemize} 6417\item {} 64180 Success; otherwise - Kerberos error codes 6419 6420\end{itemize} 6421 6422\end{description}\end{quote} 6423 6424This function creates a new address array containing a copy of \sphinxstyleemphasis{inaddr} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_addresses:c.krb5_free_addresses}]{\sphinxcrossref{\sphinxcode{krb5\_free\_addresses()}}}} to free \sphinxstyleemphasis{outaddr} when it is no longer needed. 6425 6426 6427\subsubsection{krb5\_copy\_authdata - Copy an authorization data list.} 6428\label{\detokenize{appdev/refs/api/krb5_copy_authdata:krb5-copy-authdata-copy-an-authorization-data-list}}\label{\detokenize{appdev/refs/api/krb5_copy_authdata::doc}}\index{krb5\_copy\_authdata (C function)} 6429 6430\begin{fulllineitems} 6431\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_authdata:c.krb5_copy_authdata}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_authdata}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} *const *\sphinxstyleemphasis{ in\_authdat}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} ***\sphinxstyleemphasis{ out}}{} 6432\end{fulllineitems} 6433 6434\begin{quote}\begin{description} 6435\item[{param}] \leavevmode 6436\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6437 6438\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_authdat} - List of \sphinxstyleemphasis{krb5\_authdata} structures 6439 6440\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - New array of \sphinxstyleemphasis{krb5\_authdata} structures 6441 6442\end{description}\end{quote} 6443\begin{quote}\begin{description} 6444\item[{retval}] \leavevmode\begin{itemize} 6445\item {} 64460 Success; otherwise - Kerberos error codes 6447 6448\end{itemize} 6449 6450\end{description}\end{quote} 6451 6452This function creates a new authorization data list containing a copy of \sphinxstyleemphasis{in\_authdat} , which must be null-terminated. Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_authdata:c.krb5_free_authdata}]{\sphinxcrossref{\sphinxcode{krb5\_free\_authdata()}}}} to free \sphinxstyleemphasis{out} when it is no longer needed. 6453 6454\begin{sphinxadmonition}{note}{Note:} 6455The last array entry in \sphinxstyleemphasis{in\_authdat} must be a NULL pointer. 6456\end{sphinxadmonition} 6457 6458 6459\subsubsection{krb5\_copy\_authenticator - Copy a krb5\_authenticator structure.} 6460\label{\detokenize{appdev/refs/api/krb5_copy_authenticator:krb5-copy-authenticator-copy-a-krb5-authenticator-structure}}\label{\detokenize{appdev/refs/api/krb5_copy_authenticator::doc}}\index{krb5\_copy\_authenticator (C function)} 6461 6462\begin{fulllineitems} 6463\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_authenticator:c.krb5_copy_authenticator}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_authenticator}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{krb5\_authenticator}}} *\sphinxstyleemphasis{ authfrom}, {\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{krb5\_authenticator}}} **\sphinxstyleemphasis{ authto}}{} 6464\end{fulllineitems} 6465 6466\begin{quote}\begin{description} 6467\item[{param}] \leavevmode 6468\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6469 6470\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authfrom} - krb5\_authenticator structure to be copied 6471 6472\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{authto} - Copy of krb5\_authenticator structure 6473 6474\end{description}\end{quote} 6475\begin{quote}\begin{description} 6476\item[{retval}] \leavevmode\begin{itemize} 6477\item {} 64780 Success; otherwise - Kerberos error codes 6479 6480\end{itemize} 6481 6482\end{description}\end{quote} 6483 6484This function creates a new krb5\_authenticator structure with the content of \sphinxstyleemphasis{authfrom} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_authenticator:c.krb5_free_authenticator}]{\sphinxcrossref{\sphinxcode{krb5\_free\_authenticator()}}}} to free \sphinxstyleemphasis{authto} when it is no longer needed. 6485 6486 6487\subsubsection{krb5\_copy\_checksum - Copy a krb5\_checksum structure.} 6488\label{\detokenize{appdev/refs/api/krb5_copy_checksum:krb5-copy-checksum-copy-a-krb5-checksum-structure}}\label{\detokenize{appdev/refs/api/krb5_copy_checksum::doc}}\index{krb5\_copy\_checksum (C function)} 6489 6490\begin{fulllineitems} 6491\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_checksum:c.krb5_copy_checksum}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_checksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} *\sphinxstyleemphasis{ ckfrom}, {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} **\sphinxstyleemphasis{ ckto}}{} 6492\end{fulllineitems} 6493 6494\begin{quote}\begin{description} 6495\item[{param}] \leavevmode 6496\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6497 6498\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ckfrom} - Checksum to be copied 6499 6500\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ckto} - Copy of krb5\_checksum structure 6501 6502\end{description}\end{quote} 6503\begin{quote}\begin{description} 6504\item[{retval}] \leavevmode\begin{itemize} 6505\item {} 65060 Success; otherwise - Kerberos error codes 6507 6508\end{itemize} 6509 6510\end{description}\end{quote} 6511 6512This function creates a new krb5\_checksum structure with the contents of \sphinxstyleemphasis{ckfrom} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_checksum:c.krb5_free_checksum}]{\sphinxcrossref{\sphinxcode{krb5\_free\_checksum()}}}} to free \sphinxstyleemphasis{ckto} when it is no longer needed. 6513 6514 6515\subsubsection{krb5\_copy\_context - Copy a krb5\_context structure.} 6516\label{\detokenize{appdev/refs/api/krb5_copy_context:krb5-copy-context-copy-a-krb5-context-structure}}\label{\detokenize{appdev/refs/api/krb5_copy_context::doc}}\index{krb5\_copy\_context (C function)} 6517 6518\begin{fulllineitems} 6519\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_context:c.krb5_copy_context}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_context}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}} *\sphinxstyleemphasis{ nctx\_out}}{} 6520\end{fulllineitems} 6521 6522\begin{quote}\begin{description} 6523\item[{param}] \leavevmode 6524\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 6525 6526\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{nctx\_out} - New context structure 6527 6528\end{description}\end{quote} 6529\begin{quote}\begin{description} 6530\item[{retval}] \leavevmode\begin{itemize} 6531\item {} 65320 Success 6533 6534\end{itemize} 6535 6536\item[{return}] \leavevmode\begin{itemize} 6537\item {} 6538Kerberos error codes 6539 6540\end{itemize} 6541 6542\end{description}\end{quote} 6543 6544The newly created context must be released by calling {\hyperref[\detokenize{appdev/refs/api/krb5_free_context:c.krb5_free_context}]{\sphinxcrossref{\sphinxcode{krb5\_free\_context()}}}} when it is no longer needed. 6545 6546 6547\subsubsection{krb5\_copy\_creds - Copy a krb5\_creds structure.} 6548\label{\detokenize{appdev/refs/api/krb5_copy_creds:krb5-copy-creds-copy-a-krb5-creds-structure}}\label{\detokenize{appdev/refs/api/krb5_copy_creds::doc}}\index{krb5\_copy\_creds (C function)} 6549 6550\begin{fulllineitems} 6551\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_creds:c.krb5_copy_creds}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ incred}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} **\sphinxstyleemphasis{ outcred}}{} 6552\end{fulllineitems} 6553 6554\begin{quote}\begin{description} 6555\item[{param}] \leavevmode 6556\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6557 6558\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{incred} - Credentials structure to be copied 6559 6560\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outcred} - Copy of \sphinxstyleemphasis{incred} 6561 6562\end{description}\end{quote} 6563\begin{quote}\begin{description} 6564\item[{retval}] \leavevmode\begin{itemize} 6565\item {} 65660 Success; otherwise - Kerberos error codes 6567 6568\end{itemize} 6569 6570\end{description}\end{quote} 6571 6572This function creates a new credential with the contents of \sphinxstyleemphasis{incred} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_creds:c.krb5_free_creds}]{\sphinxcrossref{\sphinxcode{krb5\_free\_creds()}}}} to free \sphinxstyleemphasis{outcred} when it is no longer needed. 6573 6574 6575\subsubsection{krb5\_copy\_data - Copy a krb5\_data object.} 6576\label{\detokenize{appdev/refs/api/krb5_copy_data:krb5-copy-data-copy-a-krb5-data-object}}\label{\detokenize{appdev/refs/api/krb5_copy_data::doc}}\index{krb5\_copy\_data (C function)} 6577 6578\begin{fulllineitems} 6579\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_data:c.krb5_copy_data}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_data}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ indata}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} **\sphinxstyleemphasis{ outdata}}{} 6580\end{fulllineitems} 6581 6582\begin{quote}\begin{description} 6583\item[{param}] \leavevmode 6584\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6585 6586\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{indata} - Data object to be copied 6587 6588\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outdata} - Copy of \sphinxstyleemphasis{indata} 6589 6590\end{description}\end{quote} 6591\begin{quote}\begin{description} 6592\item[{retval}] \leavevmode\begin{itemize} 6593\item {} 65940 Success; otherwise - Kerberos error codes 6595 6596\end{itemize} 6597 6598\end{description}\end{quote} 6599 6600This function creates a new krb5\_data object with the contents of \sphinxstyleemphasis{indata} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data:c.krb5_free_data}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data()}}}} to free \sphinxstyleemphasis{outdata} when it is no longer needed. 6601 6602 6603\subsubsection{krb5\_copy\_error\_message - Copy the most recent extended error message from one context to another.} 6604\label{\detokenize{appdev/refs/api/krb5_copy_error_message:krb5-copy-error-message-copy-the-most-recent-extended-error-message-from-one-context-to-another}}\label{\detokenize{appdev/refs/api/krb5_copy_error_message::doc}}\index{krb5\_copy\_error\_message (C function)} 6605 6606\begin{fulllineitems} 6607\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_error_message:c.krb5_copy_error_message}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_copy\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ dest\_ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ src\_ctx}}{} 6608\end{fulllineitems} 6609 6610\begin{quote}\begin{description} 6611\item[{param}] \leavevmode 6612\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{dest\_ctx} - Library context to copy message to 6613 6614\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{src\_ctx} - Library context with current message 6615 6616\end{description}\end{quote} 6617 6618 6619\subsubsection{krb5\_copy\_keyblock - Copy a keyblock.} 6620\label{\detokenize{appdev/refs/api/krb5_copy_keyblock:krb5-copy-keyblock-copy-a-keyblock}}\label{\detokenize{appdev/refs/api/krb5_copy_keyblock::doc}}\index{krb5\_copy\_keyblock (C function)} 6621 6622\begin{fulllineitems} 6623\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_keyblock:c.krb5_copy_keyblock}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_keyblock}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ from}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ to}}{} 6624\end{fulllineitems} 6625 6626\begin{quote}\begin{description} 6627\item[{param}] \leavevmode 6628\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6629 6630\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{from} - Keyblock to be copied 6631 6632\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{to} - Copy of keyblock \sphinxstyleemphasis{from} 6633 6634\end{description}\end{quote} 6635\begin{quote}\begin{description} 6636\item[{retval}] \leavevmode\begin{itemize} 6637\item {} 66380 Success; otherwise - Kerberos error codes 6639 6640\end{itemize} 6641 6642\end{description}\end{quote} 6643 6644This function creates a new keyblock with the same contents as \sphinxstyleemphasis{from} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock:c.krb5_free_keyblock}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock()}}}} to free \sphinxstyleemphasis{to} when it is no longer needed. 6645 6646 6647\subsubsection{krb5\_copy\_keyblock\_contents - Copy the contents of a keyblock.} 6648\label{\detokenize{appdev/refs/api/krb5_copy_keyblock_contents:krb5-copy-keyblock-contents-copy-the-contents-of-a-keyblock}}\label{\detokenize{appdev/refs/api/krb5_copy_keyblock_contents::doc}}\index{krb5\_copy\_keyblock\_contents (C function)} 6649 6650\begin{fulllineitems} 6651\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_keyblock_contents:c.krb5_copy_keyblock_contents}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_keyblock\_contents}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ from}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ to}}{} 6652\end{fulllineitems} 6653 6654\begin{quote}\begin{description} 6655\item[{param}] \leavevmode 6656\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6657 6658\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{from} - Key to be copied 6659 6660\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{to} - Output key 6661 6662\end{description}\end{quote} 6663\begin{quote}\begin{description} 6664\item[{retval}] \leavevmode\begin{itemize} 6665\item {} 66660 Success; otherwise - Kerberos error codes 6667 6668\end{itemize} 6669 6670\end{description}\end{quote} 6671 6672This function copies the contents of \sphinxstyleemphasis{from} to \sphinxstyleemphasis{to} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock_contents:c.krb5_free_keyblock_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock\_contents()}}}} to free \sphinxstyleemphasis{to} when it is no longer needed. 6673 6674 6675\subsubsection{krb5\_copy\_principal - Copy a principal.} 6676\label{\detokenize{appdev/refs/api/krb5_copy_principal:krb5-copy-principal-copy-a-principal}}\label{\detokenize{appdev/refs/api/krb5_copy_principal::doc}}\index{krb5\_copy\_principal (C function)} 6677 6678\begin{fulllineitems} 6679\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_principal:c.krb5_copy_principal}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_principal}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ inprinc}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ outprinc}}{} 6680\end{fulllineitems} 6681 6682\begin{quote}\begin{description} 6683\item[{param}] \leavevmode 6684\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6685 6686\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inprinc} - Principal to be copied 6687 6688\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outprinc} - Copy of \sphinxstyleemphasis{inprinc} 6689 6690\end{description}\end{quote} 6691\begin{quote}\begin{description} 6692\item[{retval}] \leavevmode\begin{itemize} 6693\item {} 66940 Success; otherwise - Kerberos error codes 6695 6696\end{itemize} 6697 6698\end{description}\end{quote} 6699 6700This function creates a new principal structure with the contents of \sphinxstyleemphasis{inprinc} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}} to free \sphinxstyleemphasis{outprinc} when it is no longer needed. 6701 6702 6703\subsubsection{krb5\_copy\_ticket - Copy a krb5\_ticket structure.} 6704\label{\detokenize{appdev/refs/api/krb5_copy_ticket:krb5-copy-ticket-copy-a-krb5-ticket-structure}}\label{\detokenize{appdev/refs/api/krb5_copy_ticket::doc}}\index{krb5\_copy\_ticket (C function)} 6705 6706\begin{fulllineitems} 6707\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_ticket:c.krb5_copy_ticket}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_ticket}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} *\sphinxstyleemphasis{ from}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} **\sphinxstyleemphasis{ pto}}{} 6708\end{fulllineitems} 6709 6710\begin{quote}\begin{description} 6711\item[{param}] \leavevmode 6712\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6713 6714\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{from} - Ticket to be copied 6715 6716\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{pto} - Copy of ticket 6717 6718\end{description}\end{quote} 6719\begin{quote}\begin{description} 6720\item[{retval}] \leavevmode\begin{itemize} 6721\item {} 67220 Success; otherwise - Kerberos error codes 6723 6724\end{itemize} 6725 6726\end{description}\end{quote} 6727 6728This function creates a new krb5\_ticket structure containing the contents of \sphinxstyleemphasis{from} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_ticket:c.krb5_free_ticket}]{\sphinxcrossref{\sphinxcode{krb5\_free\_ticket()}}}} to free \sphinxstyleemphasis{pto} when it is no longer needed. 6729 6730 6731\subsubsection{krb5\_find\_authdata - Find authorization data elements.} 6732\label{\detokenize{appdev/refs/api/krb5_find_authdata:krb5-find-authdata-find-authorization-data-elements}}\label{\detokenize{appdev/refs/api/krb5_find_authdata::doc}}\index{krb5\_find\_authdata (C function)} 6733 6734\begin{fulllineitems} 6735\phantomsection\label{\detokenize{appdev/refs/api/krb5_find_authdata:c.krb5_find_authdata}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_find\_authdata}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} *const *\sphinxstyleemphasis{ ticket\_authdata}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} *const *\sphinxstyleemphasis{ ap\_req\_authdata}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdatatype:c.krb5_authdatatype}]{\sphinxcrossref{krb5\_authdatatype}}}\sphinxstyleemphasis{ ad\_type}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} ***\sphinxstyleemphasis{ results}}{} 6736\end{fulllineitems} 6737 6738\begin{quote}\begin{description} 6739\item[{param}] \leavevmode 6740\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6741 6742\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ticket\_authdata} - Authorization data list from ticket 6743 6744\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_authdata} - Authorization data list from AP request 6745 6746\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ad\_type} - Authorization data type to find 6747 6748\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{results} - List of matching entries 6749 6750\end{description}\end{quote} 6751 6752This function searches \sphinxstyleemphasis{ticket\_authdata} and \sphinxstyleemphasis{ap\_req\_authdata} for elements of type \sphinxstyleemphasis{ad\_type} . Either input list may be NULL, in which case it will not be searched; otherwise, the input lists must be terminated by NULL entries. This function will search inside AD-IF-RELEVANT containers if found in either list. Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_authdata:c.krb5_free_authdata}]{\sphinxcrossref{\sphinxcode{krb5\_free\_authdata()}}}} to free \sphinxstyleemphasis{results} when it is no longer needed. 6753 6754\begin{sphinxadmonition}{note}{Note:} 6755New in 1.10 6756\end{sphinxadmonition} 6757 6758 6759\subsubsection{krb5\_free\_addresses - Free the data stored in array of addresses.} 6760\label{\detokenize{appdev/refs/api/krb5_free_addresses:krb5-free-addresses-free-the-data-stored-in-array-of-addresses}}\label{\detokenize{appdev/refs/api/krb5_free_addresses::doc}}\index{krb5\_free\_addresses (C function)} 6761 6762\begin{fulllineitems} 6763\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_addresses:c.krb5_free_addresses}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_addresses}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} **\sphinxstyleemphasis{ val}}{} 6764\end{fulllineitems} 6765 6766\begin{quote}\begin{description} 6767\item[{param}] \leavevmode 6768\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6769 6770\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Array of addresses to be freed 6771 6772\end{description}\end{quote} 6773 6774This function frees the contents of \sphinxstyleemphasis{val} and the array itself. 6775 6776\begin{sphinxadmonition}{note}{Note:} 6777The last entry in the array must be a NULL pointer. 6778\end{sphinxadmonition} 6779 6780 6781\subsubsection{krb5\_free\_ap\_rep\_enc\_part - Free a krb5\_ap\_rep\_enc\_part structure.} 6782\label{\detokenize{appdev/refs/api/krb5_free_ap_rep_enc_part:krb5-free-ap-rep-enc-part-free-a-krb5-ap-rep-enc-part-structure}}\label{\detokenize{appdev/refs/api/krb5_free_ap_rep_enc_part::doc}}\index{krb5\_free\_ap\_rep\_enc\_part (C function)} 6783 6784\begin{fulllineitems} 6785\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_ap_rep_enc_part:c.krb5_free_ap_rep_enc_part}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_ap\_rep\_enc\_part}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part}]{\sphinxcrossref{krb5\_ap\_rep\_enc\_part}}} *\sphinxstyleemphasis{ val}}{} 6786\end{fulllineitems} 6787 6788\begin{quote}\begin{description} 6789\item[{param}] \leavevmode 6790\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6791 6792\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - AP-REP enc part to be freed 6793 6794\end{description}\end{quote} 6795 6796This function frees the contents of \sphinxstyleemphasis{val} and the structure itself. 6797 6798 6799\subsubsection{krb5\_free\_authdata - Free the storage assigned to array of authentication data.} 6800\label{\detokenize{appdev/refs/api/krb5_free_authdata::doc}}\label{\detokenize{appdev/refs/api/krb5_free_authdata:krb5-free-authdata-free-the-storage-assigned-to-array-of-authentication-data}}\index{krb5\_free\_authdata (C function)} 6801 6802\begin{fulllineitems} 6803\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_authdata:c.krb5_free_authdata}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_authdata}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} **\sphinxstyleemphasis{ val}}{} 6804\end{fulllineitems} 6805 6806\begin{quote}\begin{description} 6807\item[{param}] \leavevmode 6808\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6809 6810\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Array of authentication data to be freed 6811 6812\end{description}\end{quote} 6813 6814This function frees the contents of \sphinxstyleemphasis{val} and the array itself. 6815 6816\begin{sphinxadmonition}{note}{Note:} 6817The last entry in the array must be a NULL pointer. 6818\end{sphinxadmonition} 6819 6820 6821\subsubsection{krb5\_free\_authenticator - Free a krb5\_authenticator structure.} 6822\label{\detokenize{appdev/refs/api/krb5_free_authenticator:krb5-free-authenticator-free-a-krb5-authenticator-structure}}\label{\detokenize{appdev/refs/api/krb5_free_authenticator::doc}}\index{krb5\_free\_authenticator (C function)} 6823 6824\begin{fulllineitems} 6825\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_authenticator:c.krb5_free_authenticator}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_authenticator}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{krb5\_authenticator}}} *\sphinxstyleemphasis{ val}}{} 6826\end{fulllineitems} 6827 6828\begin{quote}\begin{description} 6829\item[{param}] \leavevmode 6830\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6831 6832\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Authenticator structure to be freed 6833 6834\end{description}\end{quote} 6835 6836This function frees the contents of \sphinxstyleemphasis{val} and the structure itself. 6837 6838 6839\subsubsection{krb5\_free\_cred\_contents - Free the contents of a krb5\_creds structure.} 6840\label{\detokenize{appdev/refs/api/krb5_free_cred_contents::doc}}\label{\detokenize{appdev/refs/api/krb5_free_cred_contents:krb5-free-cred-contents-free-the-contents-of-a-krb5-creds-structure}}\index{krb5\_free\_cred\_contents (C function)} 6841 6842\begin{fulllineitems} 6843\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_cred_contents:c.krb5_free_cred_contents}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_cred\_contents}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ val}}{} 6844\end{fulllineitems} 6845 6846\begin{quote}\begin{description} 6847\item[{param}] \leavevmode 6848\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6849 6850\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Credential structure to free contents of 6851 6852\end{description}\end{quote} 6853 6854This function frees the contents of \sphinxstyleemphasis{val} , but not the structure itself. 6855 6856 6857\subsubsection{krb5\_free\_creds - Free a krb5\_creds structure.} 6858\label{\detokenize{appdev/refs/api/krb5_free_creds::doc}}\label{\detokenize{appdev/refs/api/krb5_free_creds:krb5-free-creds-free-a-krb5-creds-structure}}\index{krb5\_free\_creds (C function)} 6859 6860\begin{fulllineitems} 6861\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_creds:c.krb5_free_creds}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ val}}{} 6862\end{fulllineitems} 6863 6864\begin{quote}\begin{description} 6865\item[{param}] \leavevmode 6866\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6867 6868\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Credential structure to be freed. 6869 6870\end{description}\end{quote} 6871 6872This function frees the contents of \sphinxstyleemphasis{val} and the structure itself. 6873 6874 6875\subsubsection{krb5\_free\_data - Free a krb5\_data structure.} 6876\label{\detokenize{appdev/refs/api/krb5_free_data:krb5-free-data-free-a-krb5-data-structure}}\label{\detokenize{appdev/refs/api/krb5_free_data::doc}}\index{krb5\_free\_data (C function)} 6877 6878\begin{fulllineitems} 6879\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_data:c.krb5_free_data}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_data}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ val}}{} 6880\end{fulllineitems} 6881 6882\begin{quote}\begin{description} 6883\item[{param}] \leavevmode 6884\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6885 6886\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Data structure to be freed 6887 6888\end{description}\end{quote} 6889 6890This function frees the contents of \sphinxstyleemphasis{val} and the structure itself. 6891 6892 6893\subsubsection{krb5\_free\_data\_contents - Free the contents of a krb5\_data structure and zero the data field.} 6894\label{\detokenize{appdev/refs/api/krb5_free_data_contents:krb5-free-data-contents-free-the-contents-of-a-krb5-data-structure-and-zero-the-data-field}}\label{\detokenize{appdev/refs/api/krb5_free_data_contents::doc}}\index{krb5\_free\_data\_contents (C function)} 6895 6896\begin{fulllineitems} 6897\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_data\_contents}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ val}}{} 6898\end{fulllineitems} 6899 6900\begin{quote}\begin{description} 6901\item[{param}] \leavevmode 6902\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6903 6904\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Data structure to free contents of 6905 6906\end{description}\end{quote} 6907 6908This function frees the contents of \sphinxstyleemphasis{val} , but not the structure itself. It sets the structure’s data pointer to null and (beginning in release 1.19) sets its length to zero. 6909 6910 6911\subsubsection{krb5\_free\_default\_realm - Free a default realm string returned by krb5\_get\_default\_realm() .} 6912\label{\detokenize{appdev/refs/api/krb5_free_default_realm:krb5-free-default-realm-free-a-default-realm-string-returned-by-krb5-get-default-realm}}\label{\detokenize{appdev/refs/api/krb5_free_default_realm::doc}}\index{krb5\_free\_default\_realm (C function)} 6913 6914\begin{fulllineitems} 6915\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_default_realm:c.krb5_free_default_realm}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_default\_realm}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, char *\sphinxstyleemphasis{ lrealm}}{} 6916\end{fulllineitems} 6917 6918\begin{quote}\begin{description} 6919\item[{param}] \leavevmode 6920\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6921 6922\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{lrealm} - Realm to be freed 6923 6924\end{description}\end{quote} 6925 6926 6927\subsubsection{krb5\_free\_enctypes - Free an array of encryption types.} 6928\label{\detokenize{appdev/refs/api/krb5_free_enctypes::doc}}\label{\detokenize{appdev/refs/api/krb5_free_enctypes:krb5-free-enctypes-free-an-array-of-encryption-types}}\index{krb5\_free\_enctypes (C function)} 6929 6930\begin{fulllineitems} 6931\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_enctypes:c.krb5_free_enctypes}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_enctypes}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} *\sphinxstyleemphasis{ val}}{} 6932\end{fulllineitems} 6933 6934\begin{quote}\begin{description} 6935\item[{param}] \leavevmode 6936\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6937 6938\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Array of enctypes to be freed 6939 6940\end{description}\end{quote} 6941 6942\begin{sphinxadmonition}{note}{Note:} 6943New in 1.12 6944\end{sphinxadmonition} 6945 6946 6947\subsubsection{krb5\_free\_error - Free an error allocated by krb5\_read\_error() or krb5\_sendauth() .} 6948\label{\detokenize{appdev/refs/api/krb5_free_error::doc}}\label{\detokenize{appdev/refs/api/krb5_free_error:krb5-free-error-free-an-error-allocated-by-krb5-read-error-or-krb5-sendauth}}\index{krb5\_free\_error (C function)} 6949 6950\begin{fulllineitems} 6951\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_error:c.krb5_free_error}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_error}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{krb5\_error}}} *\sphinxstyleemphasis{ val}}{} 6952\end{fulllineitems} 6953 6954\begin{quote}\begin{description} 6955\item[{param}] \leavevmode 6956\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6957 6958\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Error data structure to be freed 6959 6960\end{description}\end{quote} 6961 6962This function frees the contents of \sphinxstyleemphasis{val} and the structure itself. 6963 6964 6965\subsubsection{krb5\_free\_host\_realm - Free the memory allocated by krb5\_get\_host\_realm() .} 6966\label{\detokenize{appdev/refs/api/krb5_free_host_realm::doc}}\label{\detokenize{appdev/refs/api/krb5_free_host_realm:krb5-free-host-realm-free-the-memory-allocated-by-krb5-get-host-realm}}\index{krb5\_free\_host\_realm (C function)} 6967 6968\begin{fulllineitems} 6969\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_host_realm:c.krb5_free_host_realm}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_free\_host\_realm}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, char *const *\sphinxstyleemphasis{ realmlist}}{} 6970\end{fulllineitems} 6971 6972\begin{quote}\begin{description} 6973\item[{param}] \leavevmode 6974\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 6975 6976\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realmlist} - List of realm names to be released 6977 6978\end{description}\end{quote} 6979\begin{quote}\begin{description} 6980\item[{retval}] \leavevmode\begin{itemize} 6981\item {} 69820 Success 6983 6984\end{itemize} 6985 6986\item[{return}] \leavevmode\begin{itemize} 6987\item {} 6988Kerberos error codes 6989 6990\end{itemize} 6991 6992\end{description}\end{quote} 6993 6994 6995\subsubsection{krb5\_free\_keyblock - Free a krb5\_keyblock structure.} 6996\label{\detokenize{appdev/refs/api/krb5_free_keyblock:krb5-free-keyblock-free-a-krb5-keyblock-structure}}\label{\detokenize{appdev/refs/api/krb5_free_keyblock::doc}}\index{krb5\_free\_keyblock (C function)} 6997 6998\begin{fulllineitems} 6999\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_keyblock:c.krb5_free_keyblock}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_keyblock}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ val}}{} 7000\end{fulllineitems} 7001 7002\begin{quote}\begin{description} 7003\item[{param}] \leavevmode 7004\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7005 7006\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Keyblock to be freed 7007 7008\end{description}\end{quote} 7009 7010This function frees the contents of \sphinxstyleemphasis{val} and the structure itself. 7011 7012 7013\subsubsection{krb5\_free\_keyblock\_contents - Free the contents of a krb5\_keyblock structure.} 7014\label{\detokenize{appdev/refs/api/krb5_free_keyblock_contents::doc}}\label{\detokenize{appdev/refs/api/krb5_free_keyblock_contents:krb5-free-keyblock-contents-free-the-contents-of-a-krb5-keyblock-structure}}\index{krb5\_free\_keyblock\_contents (C function)} 7015 7016\begin{fulllineitems} 7017\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_keyblock_contents:c.krb5_free_keyblock_contents}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_keyblock\_contents}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}}{} 7018\end{fulllineitems} 7019 7020\begin{quote}\begin{description} 7021\item[{param}] \leavevmode 7022\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7023 7024\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Keyblock to be freed 7025 7026\end{description}\end{quote} 7027 7028This function frees the contents of \sphinxstyleemphasis{key} , but not the structure itself. 7029 7030 7031\subsubsection{krb5\_free\_keytab\_entry\_contents - Free the contents of a key table entry.} 7032\label{\detokenize{appdev/refs/api/krb5_free_keytab_entry_contents:krb5-free-keytab-entry-contents-free-the-contents-of-a-key-table-entry}}\label{\detokenize{appdev/refs/api/krb5_free_keytab_entry_contents::doc}}\index{krb5\_free\_keytab\_entry\_contents (C function)} 7033 7034\begin{fulllineitems} 7035\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_keytab_entry_contents:c.krb5_free_keytab_entry_contents}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_free\_keytab\_entry\_contents}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{krb5\_keytab\_entry}}} *\sphinxstyleemphasis{ entry}}{} 7036\end{fulllineitems} 7037 7038\begin{quote}\begin{description} 7039\item[{param}] \leavevmode 7040\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7041 7042\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{entry} - Key table entry whose contents are to be freed 7043 7044\end{description}\end{quote} 7045\begin{quote}\begin{description} 7046\item[{retval}] \leavevmode\begin{itemize} 7047\item {} 70480 Success; otherwise - Kerberos error codes 7049 7050\end{itemize} 7051 7052\end{description}\end{quote} 7053 7054\begin{sphinxadmonition}{note}{Note:} 7055The pointer is not freed. 7056\end{sphinxadmonition} 7057 7058 7059\subsubsection{krb5\_free\_string - Free a string allocated by a krb5 function.} 7060\label{\detokenize{appdev/refs/api/krb5_free_string:krb5-free-string-free-a-string-allocated-by-a-krb5-function}}\label{\detokenize{appdev/refs/api/krb5_free_string::doc}}\index{krb5\_free\_string (C function)} 7061 7062\begin{fulllineitems} 7063\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_string:c.krb5_free_string}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_string}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, char *\sphinxstyleemphasis{ val}}{} 7064\end{fulllineitems} 7065 7066\begin{quote}\begin{description} 7067\item[{param}] \leavevmode 7068\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7069 7070\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - String to be freed 7071 7072\end{description}\end{quote} 7073 7074\begin{sphinxadmonition}{note}{Note:} 7075New in 1.10 7076\end{sphinxadmonition} 7077 7078 7079\subsubsection{krb5\_free\_ticket - Free a ticket.} 7080\label{\detokenize{appdev/refs/api/krb5_free_ticket:krb5-free-ticket-free-a-ticket}}\label{\detokenize{appdev/refs/api/krb5_free_ticket::doc}}\index{krb5\_free\_ticket (C function)} 7081 7082\begin{fulllineitems} 7083\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_ticket:c.krb5_free_ticket}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_ticket}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} *\sphinxstyleemphasis{ val}}{} 7084\end{fulllineitems} 7085 7086\begin{quote}\begin{description} 7087\item[{param}] \leavevmode 7088\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7089 7090\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Ticket to be freed 7091 7092\end{description}\end{quote} 7093 7094This function frees the contents of \sphinxstyleemphasis{val} and the structure itself. 7095 7096 7097\subsubsection{krb5\_free\_unparsed\_name - Free a string representation of a principal.} 7098\label{\detokenize{appdev/refs/api/krb5_free_unparsed_name::doc}}\label{\detokenize{appdev/refs/api/krb5_free_unparsed_name:krb5-free-unparsed-name-free-a-string-representation-of-a-principal}}\index{krb5\_free\_unparsed\_name (C function)} 7099 7100\begin{fulllineitems} 7101\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_unparsed_name:c.krb5_free_unparsed_name}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_unparsed\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, char *\sphinxstyleemphasis{ val}}{} 7102\end{fulllineitems} 7103 7104\begin{quote}\begin{description} 7105\item[{param}] \leavevmode 7106\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7107 7108\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Name string to be freed 7109 7110\end{description}\end{quote} 7111 7112 7113\subsubsection{krb5\_get\_etype\_info - Retrieve enctype, salt and s2kparams from KDC.} 7114\label{\detokenize{appdev/refs/api/krb5_get_etype_info:krb5-get-etype-info-retrieve-enctype-salt-and-s2kparams-from-kdc}}\label{\detokenize{appdev/refs/api/krb5_get_etype_info::doc}}\index{krb5\_get\_etype\_info (C function)} 7115 7116\begin{fulllineitems} 7117\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_etype_info:c.krb5_get_etype_info}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_etype\_info}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ principal}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} *\sphinxstyleemphasis{ enctype\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ salt\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ s2kparams\_out}}{} 7118\end{fulllineitems} 7119 7120\begin{quote}\begin{description} 7121\item[{param}] \leavevmode 7122\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7123 7124\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal whose information is requested 7125 7126\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Initial credential options 7127 7128\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{enctype\_out} - The enctype chosen by KDC 7129 7130\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{salt\_out} - Salt returned from KDC 7131 7132\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{s2kparams\_out} - String-to-key parameters returned from KDC 7133 7134\end{description}\end{quote} 7135\begin{quote}\begin{description} 7136\item[{retval}] \leavevmode\begin{itemize} 7137\item {} 71380 Success 7139 7140\end{itemize} 7141 7142\item[{return}] \leavevmode\begin{itemize} 7143\item {} 7144A Kerberos error code 7145 7146\end{itemize} 7147 7148\end{description}\end{quote} 7149 7150Send an initial ticket request for \sphinxstyleemphasis{principal} and extract the encryption type, salt type, and string-to-key parameters from the KDC response. If the KDC provides no etype-info, set \sphinxstyleemphasis{enctype\_out} to \sphinxstylestrong{ENCTYPE\_NULL} and set \sphinxstyleemphasis{salt\_out} and \sphinxstyleemphasis{s2kparams\_out} to empty. If the KDC etype-info provides no salt, compute the default salt and place it in \sphinxstyleemphasis{salt\_out} . If the KDC etype-info provides no string-to-key parameters, set \sphinxstyleemphasis{s2kparams\_out} to empty. 7151\begin{quote} 7152 7153\sphinxstyleemphasis{opt} may be used to specify options which affect the initial request, such as request encryption types or a FAST armor cache (see {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_etype_list:c.krb5_get_init_creds_opt_set_etype_list}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_set\_etype\_list()}}}} and {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache_name:c.krb5_get_init_creds_opt_set_fast_ccache_name}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache\_name()}}}} ). 7154\end{quote} 7155 7156Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{salt\_out} and \sphinxstyleemphasis{s2kparams\_out} when they are no longer needed. 7157 7158\begin{sphinxadmonition}{note}{Note:} 7159New in 1.17 7160\end{sphinxadmonition} 7161 7162 7163\subsubsection{krb5\_get\_permitted\_enctypes - Return a list of encryption types permitted for session keys.} 7164\label{\detokenize{appdev/refs/api/krb5_get_permitted_enctypes:krb5-get-permitted-enctypes-return-a-list-of-encryption-types-permitted-for-session-keys}}\label{\detokenize{appdev/refs/api/krb5_get_permitted_enctypes::doc}}\index{krb5\_get\_permitted\_enctypes (C function)} 7165 7166\begin{fulllineitems} 7167\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_permitted_enctypes:c.krb5_get_permitted_enctypes}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_permitted\_enctypes}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} **\sphinxstyleemphasis{ ktypes}}{} 7168\end{fulllineitems} 7169 7170\begin{quote}\begin{description} 7171\item[{param}] \leavevmode 7172\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7173 7174\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ktypes} - Zero-terminated list of encryption types 7175 7176\end{description}\end{quote} 7177\begin{quote}\begin{description} 7178\item[{retval}] \leavevmode\begin{itemize} 7179\item {} 71800 Success; otherwise - Kerberos error codes 7181 7182\end{itemize} 7183 7184\end{description}\end{quote} 7185 7186This function returns the list of encryption types permitted for session keys within \sphinxstyleemphasis{context} , as determined by configuration or by a previous call to {\hyperref[\detokenize{appdev/refs/api/krb5_set_default_tgs_enctypes:c.krb5_set_default_tgs_enctypes}]{\sphinxcrossref{\sphinxcode{krb5\_set\_default\_tgs\_enctypes()}}}} . 7187 7188Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_enctypes:c.krb5_free_enctypes}]{\sphinxcrossref{\sphinxcode{krb5\_free\_enctypes()}}}} to free \sphinxstyleemphasis{ktypes} when it is no longer needed. 7189 7190 7191\subsubsection{krb5\_get\_server\_rcache - Generate a replay cache object for server use and open it.} 7192\label{\detokenize{appdev/refs/api/krb5_get_server_rcache:krb5-get-server-rcache-generate-a-replay-cache-object-for-server-use-and-open-it}}\label{\detokenize{appdev/refs/api/krb5_get_server_rcache::doc}}\index{krb5\_get\_server\_rcache (C function)} 7193 7194\begin{fulllineitems} 7195\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_server_rcache:c.krb5_get_server_rcache}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_server\_rcache}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ piece}, {\hyperref[\detokenize{appdev/refs/types/krb5_rcache:c.krb5_rcache}]{\sphinxcrossref{krb5\_rcache}}} *\sphinxstyleemphasis{ rcptr}}{} 7196\end{fulllineitems} 7197 7198\begin{quote}\begin{description} 7199\item[{param}] \leavevmode 7200\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7201 7202\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{piece} - Unused (replay cache identifier) 7203 7204\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rcptr} - Handle to an open rcache 7205 7206\end{description}\end{quote} 7207\begin{quote}\begin{description} 7208\item[{retval}] \leavevmode\begin{itemize} 7209\item {} 72100 Success; otherwise - Kerberos error codes 7211 7212\end{itemize} 7213 7214\end{description}\end{quote} 7215 7216This function creates a handle to the default replay cache. Use krb5\_rc\_close() to close \sphinxstyleemphasis{rcptr} when it is no longer needed. 7217 7218\begin{sphinxadmonition}{note}{Note:} 7219Prior to release 1.18, this function creates a handle to a different replay cache for each unique value of \sphinxstyleemphasis{piece} . 7220\end{sphinxadmonition} 7221 7222 7223\subsubsection{krb5\_get\_time\_offsets - Return the time offsets from the os context.} 7224\label{\detokenize{appdev/refs/api/krb5_get_time_offsets:krb5-get-time-offsets-return-the-time-offsets-from-the-os-context}}\label{\detokenize{appdev/refs/api/krb5_get_time_offsets::doc}}\index{krb5\_get\_time\_offsets (C function)} 7225 7226\begin{fulllineitems} 7227\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_time_offsets:c.krb5_get_time_offsets}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_time\_offsets}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} *\sphinxstyleemphasis{ seconds}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} *\sphinxstyleemphasis{ microseconds}}{} 7228\end{fulllineitems} 7229 7230\begin{quote}\begin{description} 7231\item[{param}] \leavevmode 7232\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7233 7234\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{seconds} - Time offset, seconds portion 7235 7236\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{microseconds} - Time offset, microseconds portion 7237 7238\end{description}\end{quote} 7239\begin{quote}\begin{description} 7240\item[{retval}] \leavevmode\begin{itemize} 7241\item {} 72420 Success; otherwise - Kerberos error codes 7243 7244\end{itemize} 7245 7246\end{description}\end{quote} 7247 7248This function returns the time offsets in \sphinxstyleemphasis{context} . 7249 7250 7251\subsubsection{krb5\_init\_context\_profile - Create a krb5 library context using a specified profile.} 7252\label{\detokenize{appdev/refs/api/krb5_init_context_profile:krb5-init-context-profile-create-a-krb5-library-context-using-a-specified-profile}}\label{\detokenize{appdev/refs/api/krb5_init_context_profile::doc}}\index{krb5\_init\_context\_profile (C function)} 7253 7254\begin{fulllineitems} 7255\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_context_profile:c.krb5_init_context_profile}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_context\_profile}}{struct \_profile\_t *\sphinxstyleemphasis{ profile}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ flags}, {\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}} *\sphinxstyleemphasis{ context}}{} 7256\end{fulllineitems} 7257 7258\begin{quote}\begin{description} 7259\item[{param}] \leavevmode 7260\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{profile} - Profile object (NULL to create default profile) 7261 7262\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Context initialization flags 7263 7264\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{context} - Library context 7265 7266\end{description}\end{quote} 7267 7268Create a context structure, optionally using a specified profile and initialization flags. If \sphinxstyleemphasis{profile} is NULL, the default profile will be created from config files. If \sphinxstyleemphasis{profile} is non-null, a copy of it will be made for the new context; the caller should still clean up its copy. Valid flag values are: 7269\begin{itemize} 7270\item {} 7271{\hyperref[\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_SECURE:KRB5_INIT_CONTEXT_SECURE}]{\sphinxcrossref{\sphinxcode{KRB5\_INIT\_CONTEXT\_SECURE}}}} Ignore environment variables 7272 7273\item {} 7274{\hyperref[\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_KDC:KRB5_INIT_CONTEXT_KDC}]{\sphinxcrossref{\sphinxcode{KRB5\_INIT\_CONTEXT\_KDC}}}} Use KDC configuration if creating profile 7275 7276\end{itemize} 7277 7278 7279\subsubsection{krb5\_init\_creds\_free - Free an initial credentials context.} 7280\label{\detokenize{appdev/refs/api/krb5_init_creds_free::doc}}\label{\detokenize{appdev/refs/api/krb5_init_creds_free:krb5-init-creds-free-free-an-initial-credentials-context}}\index{krb5\_init\_creds\_free (C function)} 7281 7282\begin{fulllineitems} 7283\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_free:c.krb5_init_creds_free}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_init\_creds\_free}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}}\sphinxstyleemphasis{ ctx}}{} 7284\end{fulllineitems} 7285 7286\begin{quote}\begin{description} 7287\item[{param}] \leavevmode 7288\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7289 7290\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context 7291 7292\end{description}\end{quote} 7293\begin{quote} 7294 7295\sphinxstyleemphasis{context} must be the same as the one passed to {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_init:c.krb5_init_creds_init}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_init()}}}} for this initial credentials context. 7296\end{quote} 7297 7298 7299\subsubsection{krb5\_init\_creds\_get - Acquire credentials using an initial credentials context.} 7300\label{\detokenize{appdev/refs/api/krb5_init_creds_get::doc}}\label{\detokenize{appdev/refs/api/krb5_init_creds_get:krb5-init-creds-get-acquire-credentials-using-an-initial-credentials-context}}\index{krb5\_init\_creds\_get (C function)} 7301 7302\begin{fulllineitems} 7303\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_get:c.krb5_init_creds_get}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_creds\_get}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}}\sphinxstyleemphasis{ ctx}}{} 7304\end{fulllineitems} 7305 7306\begin{quote}\begin{description} 7307\item[{param}] \leavevmode 7308\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7309 7310\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context 7311 7312\end{description}\end{quote} 7313\begin{quote}\begin{description} 7314\item[{retval}] \leavevmode\begin{itemize} 7315\item {} 73160 Success; otherwise - Kerberos error codes 7317 7318\end{itemize} 7319 7320\end{description}\end{quote} 7321 7322This function synchronously obtains credentials using a context created by {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_init:c.krb5_init_creds_init}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_init()}}}} . On successful return, the credentials can be retrieved with {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_get_creds:c.krb5_init_creds_get_creds}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_get\_creds()}}}} . 7323\begin{quote} 7324 7325\sphinxstyleemphasis{context} must be the same as the one passed to {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_init:c.krb5_init_creds_init}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_init()}}}} for this initial credentials context. 7326\end{quote} 7327 7328 7329\subsubsection{krb5\_init\_creds\_get\_creds - Retrieve acquired credentials from an initial credentials context.} 7330\label{\detokenize{appdev/refs/api/krb5_init_creds_get_creds::doc}}\label{\detokenize{appdev/refs/api/krb5_init_creds_get_creds:krb5-init-creds-get-creds-retrieve-acquired-credentials-from-an-initial-credentials-context}}\index{krb5\_init\_creds\_get\_creds (C function)} 7331 7332\begin{fulllineitems} 7333\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_get_creds:c.krb5_init_creds_get_creds}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_creds\_get\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}}{} 7334\end{fulllineitems} 7335 7336\begin{quote}\begin{description} 7337\item[{param}] \leavevmode 7338\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7339 7340\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context 7341 7342\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - Acquired credentials 7343 7344\end{description}\end{quote} 7345\begin{quote}\begin{description} 7346\item[{retval}] \leavevmode\begin{itemize} 7347\item {} 73480 Success; otherwise - Kerberos error codes 7349 7350\end{itemize} 7351 7352\end{description}\end{quote} 7353 7354This function copies the acquired initial credentials from \sphinxstyleemphasis{ctx} into \sphinxstyleemphasis{creds} , after the successful completion of {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_get:c.krb5_init_creds_get}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_get()}}}} or {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_step:c.krb5_init_creds_step}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_step()}}}} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_cred_contents:c.krb5_free_cred_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_cred\_contents()}}}} to free \sphinxstyleemphasis{creds} when it is no longer needed. 7355 7356 7357\subsubsection{krb5\_init\_creds\_get\_error - Get the last error from KDC from an initial credentials context.} 7358\label{\detokenize{appdev/refs/api/krb5_init_creds_get_error:krb5-init-creds-get-error-get-the-last-error-from-kdc-from-an-initial-credentials-context}}\label{\detokenize{appdev/refs/api/krb5_init_creds_get_error::doc}}\index{krb5\_init\_creds\_get\_error (C function)} 7359 7360\begin{fulllineitems} 7361\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_get_error:c.krb5_init_creds_get_error}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_creds\_get\_error}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{krb5\_error}}} **\sphinxstyleemphasis{ error}}{} 7362\end{fulllineitems} 7363 7364\begin{quote}\begin{description} 7365\item[{param}] \leavevmode 7366\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7367 7368\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context 7369 7370\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{error} - Error from KDC, or NULL if none was received 7371 7372\end{description}\end{quote} 7373\begin{quote}\begin{description} 7374\item[{retval}] \leavevmode\begin{itemize} 7375\item {} 73760 Success; otherwise - Kerberos error codes 7377 7378\end{itemize} 7379 7380\end{description}\end{quote} 7381 7382 7383\subsubsection{krb5\_init\_creds\_get\_times - Retrieve ticket times from an initial credentials context.} 7384\label{\detokenize{appdev/refs/api/krb5_init_creds_get_times::doc}}\label{\detokenize{appdev/refs/api/krb5_init_creds_get_times:krb5-init-creds-get-times-retrieve-ticket-times-from-an-initial-credentials-context}}\index{krb5\_init\_creds\_get\_times (C function)} 7385 7386\begin{fulllineitems} 7387\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_get_times:c.krb5_init_creds_get_times}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_creds\_get\_times}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{krb5\_ticket\_times}}} *\sphinxstyleemphasis{ times}}{} 7388\end{fulllineitems} 7389 7390\begin{quote}\begin{description} 7391\item[{param}] \leavevmode 7392\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7393 7394\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context 7395 7396\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{times} - Ticket times for acquired credentials 7397 7398\end{description}\end{quote} 7399\begin{quote}\begin{description} 7400\item[{retval}] \leavevmode\begin{itemize} 7401\item {} 74020 Success; otherwise - Kerberos error codes 7403 7404\end{itemize} 7405 7406\end{description}\end{quote} 7407 7408The initial credentials context must have completed obtaining credentials via either {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_get:c.krb5_init_creds_get}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_get()}}}} or {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_step:c.krb5_init_creds_step}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_step()}}}} . 7409 7410 7411\subsubsection{krb5\_init\_creds\_init - Create a context for acquiring initial credentials.} 7412\label{\detokenize{appdev/refs/api/krb5_init_creds_init::doc}}\label{\detokenize{appdev/refs/api/krb5_init_creds_init:krb5-init-creds-init-create-a-context-for-acquiring-initial-credentials}}\index{krb5\_init\_creds\_init (C function)} 7413 7414\begin{fulllineitems} 7415\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_init:c.krb5_init_creds_init}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_creds\_init}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ client}, {\hyperref[\detokenize{appdev/refs/types/krb5_prompter_fct:c.krb5_prompter_fct}]{\sphinxcrossref{krb5\_prompter\_fct}}}\sphinxstyleemphasis{ prompter}, void *\sphinxstyleemphasis{ data}, {\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{krb5\_deltat}}}\sphinxstyleemphasis{ start\_time}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ options}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}} *\sphinxstyleemphasis{ ctx}}{} 7416\end{fulllineitems} 7417 7418\begin{quote}\begin{description} 7419\item[{param}] \leavevmode 7420\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7421 7422\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal to get initial creds for 7423 7424\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompter} - Prompter callback 7425 7426\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Prompter callback argument 7427 7428\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{start\_time} - Time when credentials become valid (0 for now) 7429 7430\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{options} - Options structure (NULL for default) 7431 7432\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ctx} - New initial credentials context 7433 7434\end{description}\end{quote} 7435\begin{quote}\begin{description} 7436\item[{retval}] \leavevmode\begin{itemize} 7437\item {} 74380 Success; otherwise - Kerberos error codes 7439 7440\end{itemize} 7441 7442\end{description}\end{quote} 7443 7444This function creates a new context for acquiring initial credentials. Use {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_free:c.krb5_init_creds_free}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_free()}}}} to free \sphinxstyleemphasis{ctx} when it is no longer needed. 7445 7446Any subsequent calls to {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_step:c.krb5_init_creds_step}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_step()}}}} , {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_get:c.krb5_init_creds_get}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_get()}}}} , or {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_free:c.krb5_init_creds_free}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_free()}}}} for this initial credentials context must use the same \sphinxstyleemphasis{context} argument as the one passed to this function. 7447 7448 7449\subsubsection{krb5\_init\_creds\_set\_keytab - Specify a keytab to use for acquiring initial credentials.} 7450\label{\detokenize{appdev/refs/api/krb5_init_creds_set_keytab:krb5-init-creds-set-keytab-specify-a-keytab-to-use-for-acquiring-initial-credentials}}\label{\detokenize{appdev/refs/api/krb5_init_creds_set_keytab::doc}}\index{krb5\_init\_creds\_set\_keytab (C function)} 7451 7452\begin{fulllineitems} 7453\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_set_keytab:c.krb5_init_creds_set_keytab}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_creds\_set\_keytab}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}}{} 7454\end{fulllineitems} 7455 7456\begin{quote}\begin{description} 7457\item[{param}] \leavevmode 7458\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7459 7460\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context 7461 7462\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle 7463 7464\end{description}\end{quote} 7465\begin{quote}\begin{description} 7466\item[{retval}] \leavevmode\begin{itemize} 7467\item {} 74680 Success; otherwise - Kerberos error codes 7469 7470\end{itemize} 7471 7472\end{description}\end{quote} 7473 7474This function supplies a keytab containing the client key for an initial credentials request. 7475 7476 7477\subsubsection{krb5\_init\_creds\_set\_password - Set a password for acquiring initial credentials.} 7478\label{\detokenize{appdev/refs/api/krb5_init_creds_set_password:krb5-init-creds-set-password-set-a-password-for-acquiring-initial-credentials}}\label{\detokenize{appdev/refs/api/krb5_init_creds_set_password::doc}}\index{krb5\_init\_creds\_set\_password (C function)} 7479 7480\begin{fulllineitems} 7481\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_set_password:c.krb5_init_creds_set_password}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_creds\_set\_password}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}}\sphinxstyleemphasis{ ctx}, const char *\sphinxstyleemphasis{ password}}{} 7482\end{fulllineitems} 7483 7484\begin{quote}\begin{description} 7485\item[{param}] \leavevmode 7486\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7487 7488\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context 7489 7490\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{password} - Password 7491 7492\end{description}\end{quote} 7493\begin{quote}\begin{description} 7494\item[{retval}] \leavevmode\begin{itemize} 7495\item {} 74960 Success; otherwise - Kerberos error codes 7497 7498\end{itemize} 7499 7500\end{description}\end{quote} 7501 7502This function supplies a password to be used to construct the client key for an initial credentials request. 7503 7504 7505\subsubsection{krb5\_init\_creds\_set\_service - Specify a service principal for acquiring initial credentials.} 7506\label{\detokenize{appdev/refs/api/krb5_init_creds_set_service::doc}}\label{\detokenize{appdev/refs/api/krb5_init_creds_set_service:krb5-init-creds-set-service-specify-a-service-principal-for-acquiring-initial-credentials}}\index{krb5\_init\_creds\_set\_service (C function)} 7507 7508\begin{fulllineitems} 7509\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_set_service:c.krb5_init_creds_set_service}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_creds\_set\_service}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}}\sphinxstyleemphasis{ ctx}, const char *\sphinxstyleemphasis{ service}}{} 7510\end{fulllineitems} 7511 7512\begin{quote}\begin{description} 7513\item[{param}] \leavevmode 7514\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7515 7516\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context 7517 7518\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{service} - Service principal string 7519 7520\end{description}\end{quote} 7521\begin{quote}\begin{description} 7522\item[{retval}] \leavevmode\begin{itemize} 7523\item {} 75240 Success; otherwise - Kerberos error codes 7525 7526\end{itemize} 7527 7528\end{description}\end{quote} 7529 7530This function supplies a service principal string to acquire initial credentials for instead of the default krbtgt service. \sphinxstyleemphasis{service} is parsed as a principal name; any realm part is ignored. 7531 7532 7533\subsubsection{krb5\_init\_creds\_step - Get the next KDC request for acquiring initial credentials.} 7534\label{\detokenize{appdev/refs/api/krb5_init_creds_step::doc}}\label{\detokenize{appdev/refs/api/krb5_init_creds_step:krb5-init-creds-step-get-the-next-kdc-request-for-acquiring-initial-credentials}}\index{krb5\_init\_creds\_step (C function)} 7535 7536\begin{fulllineitems} 7537\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_step:c.krb5_init_creds_step}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_creds\_step}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ in}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ out}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ realm}, unsigned int *\sphinxstyleemphasis{ flags}}{} 7538\end{fulllineitems} 7539 7540\begin{quote}\begin{description} 7541\item[{param}] \leavevmode 7542\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7543 7544\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context 7545 7546\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in} - KDC response (empty on the first call) 7547 7548\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Next KDC request 7549 7550\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realm} - Realm for next KDC request 7551 7552\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{flags} - Output flags 7553 7554\end{description}\end{quote} 7555\begin{quote}\begin{description} 7556\item[{retval}] \leavevmode\begin{itemize} 7557\item {} 75580 Success; otherwise - Kerberos error codes 7559 7560\end{itemize} 7561 7562\end{description}\end{quote} 7563 7564This function constructs the next KDC request in an initial credential exchange, allowing the caller to control the transport of KDC requests and replies. On the first call, \sphinxstyleemphasis{in} should be set to an empty buffer; on subsequent calls, it should be set to the KDC’s reply to the previous request. 7565 7566If more requests are needed, \sphinxstyleemphasis{flags} will be set to {\hyperref[\detokenize{appdev/refs/macros/KRB5_INIT_CREDS_STEP_FLAG_CONTINUE:KRB5_INIT_CREDS_STEP_FLAG_CONTINUE}]{\sphinxcrossref{\sphinxcode{KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE}}}} and the next request will be placed in \sphinxstyleemphasis{out} . If no more requests are needed, \sphinxstyleemphasis{flags} will not contain {\hyperref[\detokenize{appdev/refs/macros/KRB5_INIT_CREDS_STEP_FLAG_CONTINUE:KRB5_INIT_CREDS_STEP_FLAG_CONTINUE}]{\sphinxcrossref{\sphinxcode{KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE}}}} and \sphinxstyleemphasis{out} will be empty. 7567 7568If this function returns \sphinxstylestrong{KRB5KRB\_ERR\_RESPONSE\_TOO\_BIG} , the caller should transmit the next request using TCP rather than UDP. If this function returns any other error, the initial credential exchange has failed. 7569\begin{quote} 7570 7571\sphinxstyleemphasis{context} must be the same as the one passed to {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_init:c.krb5_init_creds_init}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_init()}}}} for this initial credentials context. 7572\end{quote} 7573 7574 7575\subsubsection{krb5\_init\_keyblock - Initialize an empty krb5\_keyblock .} 7576\label{\detokenize{appdev/refs/api/krb5_init_keyblock:krb5-init-keyblock-initialize-an-empty-krb5-keyblock}}\label{\detokenize{appdev/refs/api/krb5_init_keyblock::doc}}\index{krb5\_init\_keyblock (C function)} 7577 7578\begin{fulllineitems} 7579\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_keyblock:c.krb5_init_keyblock}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_keyblock}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, size\_t\sphinxstyleemphasis{ length}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ out}}{} 7580\end{fulllineitems} 7581 7582\begin{quote}\begin{description} 7583\item[{param}] \leavevmode 7584\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7585 7586\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type 7587 7588\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{length} - Length of keyblock (or 0) 7589 7590\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - New keyblock structure 7591 7592\end{description}\end{quote} 7593\begin{quote}\begin{description} 7594\item[{retval}] \leavevmode\begin{itemize} 7595\item {} 75960 Success; otherwise - Kerberos error codes 7597 7598\end{itemize} 7599 7600\end{description}\end{quote} 7601 7602Initialize a new keyblock and allocate storage for the contents of the key. It is legal to pass in a length of 0, in which case contents are left unallocated. Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock:c.krb5_free_keyblock}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock()}}}} to free \sphinxstyleemphasis{out} when it is no longer needed. 7603 7604\begin{sphinxadmonition}{note}{Note:} 7605If \sphinxstyleemphasis{length} is set to 0, contents are left unallocated. 7606\end{sphinxadmonition} 7607 7608 7609\subsubsection{krb5\_is\_referral\_realm - Check for a match with KRB5\_REFERRAL\_REALM.} 7610\label{\detokenize{appdev/refs/api/krb5_is_referral_realm:krb5-is-referral-realm-check-for-a-match-with-krb5-referral-realm}}\label{\detokenize{appdev/refs/api/krb5_is_referral_realm::doc}}\index{krb5\_is\_referral\_realm (C function)} 7611 7612\begin{fulllineitems} 7613\phantomsection\label{\detokenize{appdev/refs/api/krb5_is_referral_realm:c.krb5_is_referral_realm}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_is\_referral\_realm}}{const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ r}}{} 7614\end{fulllineitems} 7615 7616\begin{quote}\begin{description} 7617\item[{param}] \leavevmode 7618\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{r} - Realm to check 7619 7620\end{description}\end{quote} 7621\begin{quote}\begin{description} 7622\item[{return}] \leavevmode\begin{itemize} 7623\item {} 7624TRUE if r is zero-length, FALSE otherwise 7625 7626\end{itemize} 7627 7628\end{description}\end{quote} 7629 7630 7631\subsubsection{krb5\_kt\_add\_entry - Add a new entry to a key table.} 7632\label{\detokenize{appdev/refs/api/krb5_kt_add_entry:krb5-kt-add-entry-add-a-new-entry-to-a-key-table}}\label{\detokenize{appdev/refs/api/krb5_kt_add_entry::doc}}\index{krb5\_kt\_add\_entry (C function)} 7633 7634\begin{fulllineitems} 7635\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_add_entry:c.krb5_kt_add_entry}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_add\_entry}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ id}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{krb5\_keytab\_entry}}} *\sphinxstyleemphasis{ entry}}{} 7636\end{fulllineitems} 7637 7638\begin{quote}\begin{description} 7639\item[{param}] \leavevmode 7640\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7641 7642\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{id} - Key table handle 7643 7644\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{entry} - Entry to be added 7645 7646\end{description}\end{quote} 7647\begin{quote}\begin{description} 7648\item[{retval}] \leavevmode\begin{itemize} 7649\item {} 76500 Success 7651 7652\item {} 7653ENOMEM Insufficient memory 7654 7655\item {} 7656KRB5\_KT\_NOWRITE Key table is not writeable 7657 7658\end{itemize} 7659 7660\item[{return}] \leavevmode\begin{itemize} 7661\item {} 7662Kerberos error codes 7663 7664\end{itemize} 7665 7666\end{description}\end{quote} 7667 7668 7669\subsubsection{krb5\_kt\_end\_seq\_get - Release a keytab cursor.} 7670\label{\detokenize{appdev/refs/api/krb5_kt_end_seq_get::doc}}\label{\detokenize{appdev/refs/api/krb5_kt_end_seq_get:krb5-kt-end-seq-get-release-a-keytab-cursor}}\index{krb5\_kt\_end\_seq\_get (C function)} 7671 7672\begin{fulllineitems} 7673\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_end_seq_get:c.krb5_kt_end_seq_get}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_end\_seq\_get}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_kt_cursor:c.krb5_kt_cursor}]{\sphinxcrossref{krb5\_kt\_cursor}}} *\sphinxstyleemphasis{ cursor}}{} 7674\end{fulllineitems} 7675 7676\begin{quote}\begin{description} 7677\item[{param}] \leavevmode 7678\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7679 7680\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle 7681 7682\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cursor} - Cursor 7683 7684\end{description}\end{quote} 7685\begin{quote}\begin{description} 7686\item[{retval}] \leavevmode\begin{itemize} 7687\item {} 76880 Success 7689 7690\end{itemize} 7691 7692\item[{return}] \leavevmode\begin{itemize} 7693\item {} 7694Kerberos error codes 7695 7696\end{itemize} 7697 7698\end{description}\end{quote} 7699 7700This function should be called to release the cursor created by {\hyperref[\detokenize{appdev/refs/api/krb5_kt_start_seq_get:c.krb5_kt_start_seq_get}]{\sphinxcrossref{\sphinxcode{krb5\_kt\_start\_seq\_get()}}}} . 7701 7702 7703\subsubsection{krb5\_kt\_get\_entry - Get an entry from a key table.} 7704\label{\detokenize{appdev/refs/api/krb5_kt_get_entry:krb5-kt-get-entry-get-an-entry-from-a-key-table}}\label{\detokenize{appdev/refs/api/krb5_kt_get_entry::doc}}\index{krb5\_kt\_get\_entry (C function)} 7705 7706\begin{fulllineitems} 7707\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_get_entry:c.krb5_kt_get_entry}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_get\_entry}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, {\hyperref[\detokenize{appdev/refs/types/krb5_kvno:c.krb5_kvno}]{\sphinxcrossref{krb5\_kvno}}}\sphinxstyleemphasis{ vno}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{krb5\_keytab\_entry}}} *\sphinxstyleemphasis{ entry}}{} 7708\end{fulllineitems} 7709 7710\begin{quote}\begin{description} 7711\item[{param}] \leavevmode 7712\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7713 7714\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle 7715 7716\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal name 7717 7718\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{vno} - Key version number (0 for highest available) 7719 7720\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type (0 zero for any enctype) 7721 7722\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{entry} - Returned entry from key table 7723 7724\end{description}\end{quote} 7725\begin{quote}\begin{description} 7726\item[{retval}] \leavevmode\begin{itemize} 7727\item {} 77280 Success 7729 7730\item {} 7731Kerberos error codes on failure 7732 7733\end{itemize} 7734 7735\end{description}\end{quote} 7736 7737Retrieve an entry from a key table which matches the \sphinxstyleemphasis{keytab} , \sphinxstyleemphasis{principal} , \sphinxstyleemphasis{vno} , and \sphinxstyleemphasis{enctype} . If \sphinxstyleemphasis{vno} is zero, retrieve the highest-numbered kvno matching the other fields. If \sphinxstyleemphasis{enctype} is 0, match any enctype. 7738 7739Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_keytab_entry_contents:c.krb5_free_keytab_entry_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keytab\_entry\_contents()}}}} to free \sphinxstyleemphasis{entry} when it is no longer needed. 7740 7741\begin{sphinxadmonition}{note}{Note:} 7742If \sphinxstyleemphasis{vno} is zero, the function retrieves the highest-numbered-kvno entry that matches the specified principal. 7743\end{sphinxadmonition} 7744 7745 7746\subsubsection{krb5\_kt\_have\_content - Check if a keytab exists and contains entries.} 7747\label{\detokenize{appdev/refs/api/krb5_kt_have_content::doc}}\label{\detokenize{appdev/refs/api/krb5_kt_have_content:krb5-kt-have-content-check-if-a-keytab-exists-and-contains-entries}}\index{krb5\_kt\_have\_content (C function)} 7748 7749\begin{fulllineitems} 7750\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_have_content:c.krb5_kt_have_content}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_have\_content}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}}{} 7751\end{fulllineitems} 7752 7753\begin{quote}\begin{description} 7754\item[{param}] \leavevmode 7755\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7756 7757\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle 7758 7759\end{description}\end{quote} 7760\begin{quote}\begin{description} 7761\item[{retval}] \leavevmode\begin{itemize} 7762\item {} 77630 Keytab exists and contains entries 7764 7765\item {} 7766KRB5\_KT\_NOTFOUND Keytab does not contain entries 7767 7768\end{itemize} 7769 7770\end{description}\end{quote} 7771 7772\begin{sphinxadmonition}{note}{Note:} 7773New in 1.11 7774\end{sphinxadmonition} 7775 7776 7777\subsubsection{krb5\_kt\_next\_entry - Retrieve the next entry from the key table.} 7778\label{\detokenize{appdev/refs/api/krb5_kt_next_entry:krb5-kt-next-entry-retrieve-the-next-entry-from-the-key-table}}\label{\detokenize{appdev/refs/api/krb5_kt_next_entry::doc}}\index{krb5\_kt\_next\_entry (C function)} 7779 7780\begin{fulllineitems} 7781\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_next_entry:c.krb5_kt_next_entry}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_next\_entry}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{krb5\_keytab\_entry}}} *\sphinxstyleemphasis{ entry}, {\hyperref[\detokenize{appdev/refs/types/krb5_kt_cursor:c.krb5_kt_cursor}]{\sphinxcrossref{krb5\_kt\_cursor}}} *\sphinxstyleemphasis{ cursor}}{} 7782\end{fulllineitems} 7783 7784\begin{quote}\begin{description} 7785\item[{param}] \leavevmode 7786\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7787 7788\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle 7789 7790\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{entry} - Returned key table entry 7791 7792\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} - Key table cursor 7793 7794\end{description}\end{quote} 7795\begin{quote}\begin{description} 7796\item[{retval}] \leavevmode\begin{itemize} 7797\item {} 77980 Success 7799 7800\item {} 7801KRB5\_KT\_END - if the last entry was reached 7802 7803\end{itemize} 7804 7805\item[{return}] \leavevmode\begin{itemize} 7806\item {} 7807Kerberos error codes 7808 7809\end{itemize} 7810 7811\end{description}\end{quote} 7812 7813Return the next sequential entry in \sphinxstyleemphasis{keytab} and advance \sphinxstyleemphasis{cursor} . Callers must release the returned entry with {\hyperref[\detokenize{appdev/refs/api/krb5_kt_free_entry:c.krb5_kt_free_entry}]{\sphinxcrossref{\sphinxcode{krb5\_kt\_free\_entry()}}}} . 7814 7815 7816\subsubsection{krb5\_kt\_read\_service\_key - Retrieve a service key from a key table.} 7817\label{\detokenize{appdev/refs/api/krb5_kt_read_service_key::doc}}\label{\detokenize{appdev/refs/api/krb5_kt_read_service_key:krb5-kt-read-service-key-retrieve-a-service-key-from-a-key-table}}\index{krb5\_kt\_read\_service\_key (C function)} 7818 7819\begin{fulllineitems} 7820\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_read_service_key:c.krb5_kt_read_service_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_read\_service\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}}\sphinxstyleemphasis{ keyprocarg}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ principal}, {\hyperref[\detokenize{appdev/refs/types/krb5_kvno:c.krb5_kvno}]{\sphinxcrossref{krb5\_kvno}}}\sphinxstyleemphasis{ vno}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ key}}{} 7821\end{fulllineitems} 7822 7823\begin{quote}\begin{description} 7824\item[{param}] \leavevmode 7825\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7826 7827\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyprocarg} - Name of a key table (NULL to use default name) 7828 7829\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Service principal 7830 7831\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{vno} - Key version number (0 for highest available) 7832 7833\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type (0 for any type) 7834 7835\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Service key from key table 7836 7837\end{description}\end{quote} 7838\begin{quote}\begin{description} 7839\item[{retval}] \leavevmode\begin{itemize} 7840\item {} 78410 Success 7842 7843\end{itemize} 7844 7845\item[{return}] \leavevmode\begin{itemize} 7846\item {} 7847Kerberos error code if not found or keyprocarg is invalid. 7848 7849\end{itemize} 7850 7851\end{description}\end{quote} 7852 7853Open and search the specified key table for the entry identified by \sphinxstyleemphasis{principal} , \sphinxstyleemphasis{enctype} , and \sphinxstyleemphasis{vno} . If no key is found, return an error code. 7854 7855The default key table is used, unless \sphinxstyleemphasis{keyprocarg} is non-null. \sphinxstyleemphasis{keyprocarg} designates a specific key table. 7856 7857Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock:c.krb5_free_keyblock}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock()}}}} to free \sphinxstyleemphasis{key} when it is no longer needed. 7858 7859 7860\subsubsection{krb5\_kt\_remove\_entry - Remove an entry from a key table.} 7861\label{\detokenize{appdev/refs/api/krb5_kt_remove_entry::doc}}\label{\detokenize{appdev/refs/api/krb5_kt_remove_entry:krb5-kt-remove-entry-remove-an-entry-from-a-key-table}}\index{krb5\_kt\_remove\_entry (C function)} 7862 7863\begin{fulllineitems} 7864\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_remove_entry:c.krb5_kt_remove_entry}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_remove\_entry}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ id}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{krb5\_keytab\_entry}}} *\sphinxstyleemphasis{ entry}}{} 7865\end{fulllineitems} 7866 7867\begin{quote}\begin{description} 7868\item[{param}] \leavevmode 7869\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7870 7871\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{id} - Key table handle 7872 7873\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{entry} - Entry to remove from key table 7874 7875\end{description}\end{quote} 7876\begin{quote}\begin{description} 7877\item[{retval}] \leavevmode\begin{itemize} 7878\item {} 78790 Success 7880 7881\item {} 7882KRB5\_KT\_NOWRITE Key table is not writable 7883 7884\end{itemize} 7885 7886\item[{return}] \leavevmode\begin{itemize} 7887\item {} 7888Kerberos error codes 7889 7890\end{itemize} 7891 7892\end{description}\end{quote} 7893 7894 7895\subsubsection{krb5\_kt\_start\_seq\_get - Start a sequential retrieval of key table entries.} 7896\label{\detokenize{appdev/refs/api/krb5_kt_start_seq_get:krb5-kt-start-seq-get-start-a-sequential-retrieval-of-key-table-entries}}\label{\detokenize{appdev/refs/api/krb5_kt_start_seq_get::doc}}\index{krb5\_kt\_start\_seq\_get (C function)} 7897 7898\begin{fulllineitems} 7899\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_start_seq_get:c.krb5_kt_start_seq_get}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_start\_seq\_get}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_kt_cursor:c.krb5_kt_cursor}]{\sphinxcrossref{krb5\_kt\_cursor}}} *\sphinxstyleemphasis{ cursor}}{} 7900\end{fulllineitems} 7901 7902\begin{quote}\begin{description} 7903\item[{param}] \leavevmode 7904\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7905 7906\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle 7907 7908\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cursor} - Cursor 7909 7910\end{description}\end{quote} 7911\begin{quote}\begin{description} 7912\item[{retval}] \leavevmode\begin{itemize} 7913\item {} 79140 Success 7915 7916\end{itemize} 7917 7918\item[{return}] \leavevmode\begin{itemize} 7919\item {} 7920Kerberos error codes 7921 7922\end{itemize} 7923 7924\end{description}\end{quote} 7925 7926Prepare to read sequentially every key in the specified key table. Use {\hyperref[\detokenize{appdev/refs/api/krb5_kt_end_seq_get:c.krb5_kt_end_seq_get}]{\sphinxcrossref{\sphinxcode{krb5\_kt\_end\_seq\_get()}}}} to release the cursor when it is no longer needed. 7927 7928 7929\subsubsection{krb5\_make\_authdata\_kdc\_issued - Encode and sign AD-KDCIssued authorization data.} 7930\label{\detokenize{appdev/refs/api/krb5_make_authdata_kdc_issued:krb5-make-authdata-kdc-issued-encode-and-sign-ad-kdcissued-authorization-data}}\label{\detokenize{appdev/refs/api/krb5_make_authdata_kdc_issued::doc}}\index{krb5\_make\_authdata\_kdc\_issued (C function)} 7931 7932\begin{fulllineitems} 7933\phantomsection\label{\detokenize{appdev/refs/api/krb5_make_authdata_kdc_issued:c.krb5_make_authdata_kdc_issued}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_make\_authdata\_kdc\_issued}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ issuer}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} *const *\sphinxstyleemphasis{ authdata}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} ***\sphinxstyleemphasis{ ad\_kdcissued}}{} 7934\end{fulllineitems} 7935 7936\begin{quote}\begin{description} 7937\item[{param}] \leavevmode 7938\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7939 7940\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Session key 7941 7942\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{issuer} - The name of the issuing principal 7943 7944\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authdata} - List of authorization data to be signed 7945 7946\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ad\_kdcissued} - List containing AD-KDCIssued authdata 7947 7948\end{description}\end{quote} 7949 7950This function wraps a list of authorization data entries \sphinxstyleemphasis{authdata} in an AD-KDCIssued container (see RFC 4120 section 5.2.6.2) signed with \sphinxstyleemphasis{key} . The result is returned in \sphinxstyleemphasis{ad\_kdcissued} as a single-element list. 7951 7952 7953\subsubsection{krb5\_merge\_authdata - Merge two authorization data lists into a new list.} 7954\label{\detokenize{appdev/refs/api/krb5_merge_authdata:krb5-merge-authdata-merge-two-authorization-data-lists-into-a-new-list}}\label{\detokenize{appdev/refs/api/krb5_merge_authdata::doc}}\index{krb5\_merge\_authdata (C function)} 7955 7956\begin{fulllineitems} 7957\phantomsection\label{\detokenize{appdev/refs/api/krb5_merge_authdata:c.krb5_merge_authdata}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_merge\_authdata}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} *const *\sphinxstyleemphasis{ inauthdat1}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} *const *\sphinxstyleemphasis{ inauthdat2}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} ***\sphinxstyleemphasis{ outauthdat}}{} 7958\end{fulllineitems} 7959 7960\begin{quote}\begin{description} 7961\item[{param}] \leavevmode 7962\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7963 7964\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inauthdat1} - First list of \sphinxstyleemphasis{krb5\_authdata} structures 7965 7966\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inauthdat2} - Second list of \sphinxstyleemphasis{krb5\_authdata} structures 7967 7968\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outauthdat} - Merged list of \sphinxstyleemphasis{krb5\_authdata} structures 7969 7970\end{description}\end{quote} 7971\begin{quote}\begin{description} 7972\item[{retval}] \leavevmode\begin{itemize} 7973\item {} 79740 Success; otherwise - Kerberos error codes 7975 7976\end{itemize} 7977 7978\end{description}\end{quote} 7979 7980Merge two authdata arrays, such as the array from a ticket and authenticator. Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_authdata:c.krb5_free_authdata}]{\sphinxcrossref{\sphinxcode{krb5\_free\_authdata()}}}} to free \sphinxstyleemphasis{outauthdat} when it is no longer needed. 7981 7982\begin{sphinxadmonition}{note}{Note:} 7983The last array entry in \sphinxstyleemphasis{inauthdat1} and \sphinxstyleemphasis{inauthdat2} must be a NULL pointer. 7984\end{sphinxadmonition} 7985 7986 7987\subsubsection{krb5\_mk\_1cred - Format a KRB-CRED message for a single set of credentials.} 7988\label{\detokenize{appdev/refs/api/krb5_mk_1cred:krb5-mk-1cred-format-a-krb-cred-message-for-a-single-set-of-credentials}}\label{\detokenize{appdev/refs/api/krb5_mk_1cred::doc}}\index{krb5\_mk\_1cred (C function)} 7989 7990\begin{fulllineitems} 7991\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_1cred:c.krb5_mk_1cred}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_mk\_1cred}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} **\sphinxstyleemphasis{ der\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{krb5\_replay\_data}}} *\sphinxstyleemphasis{ rdata\_out}}{} 7992\end{fulllineitems} 7993 7994\begin{quote}\begin{description} 7995\item[{param}] \leavevmode 7996\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 7997 7998\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 7999 8000\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Pointer to credentials 8001 8002\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{der\_out} - Encoded credentials 8003 8004\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay cache data (NULL if not needed) 8005 8006\end{description}\end{quote} 8007\begin{quote}\begin{description} 8008\item[{retval}] \leavevmode\begin{itemize} 8009\item {} 80100 Success 8011 8012\item {} 8013ENOMEM Insufficient memory 8014 8015\item {} 8016KRB5\_RC\_REQUIRED Message replay detection requires rcache parameter 8017 8018\end{itemize} 8019 8020\item[{return}] \leavevmode\begin{itemize} 8021\item {} 8022Kerberos error codes 8023 8024\end{itemize} 8025 8026\end{description}\end{quote} 8027 8028This is a convenience function that calls {\hyperref[\detokenize{appdev/refs/api/krb5_mk_ncred:c.krb5_mk_ncred}]{\sphinxcrossref{\sphinxcode{krb5\_mk\_ncred()}}}} with a single set of credentials. 8029 8030 8031\subsubsection{krb5\_mk\_error - Format and encode a KRB\_ERROR message.} 8032\label{\detokenize{appdev/refs/api/krb5_mk_error:krb5-mk-error-format-and-encode-a-krb-error-message}}\label{\detokenize{appdev/refs/api/krb5_mk_error::doc}}\index{krb5\_mk\_error (C function)} 8033 8034\begin{fulllineitems} 8035\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_error:c.krb5_mk_error}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_mk\_error}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{krb5\_error}}} *\sphinxstyleemphasis{ dec\_err}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ enc\_err}}{} 8036\end{fulllineitems} 8037 8038\begin{quote}\begin{description} 8039\item[{param}] \leavevmode 8040\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8041 8042\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{dec\_err} - Error structure to be encoded 8043 8044\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{enc\_err} - Encoded error structure 8045 8046\end{description}\end{quote} 8047\begin{quote}\begin{description} 8048\item[{retval}] \leavevmode\begin{itemize} 8049\item {} 80500 Success; otherwise - Kerberos error codes 8051 8052\end{itemize} 8053 8054\end{description}\end{quote} 8055 8056This function creates a \sphinxstylestrong{KRB\_ERROR} message in \sphinxstyleemphasis{enc\_err} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{enc\_err} when it is no longer needed. 8057 8058 8059\subsubsection{krb5\_mk\_ncred - Format a KRB-CRED message for an array of credentials.} 8060\label{\detokenize{appdev/refs/api/krb5_mk_ncred::doc}}\label{\detokenize{appdev/refs/api/krb5_mk_ncred:krb5-mk-ncred-format-a-krb-cred-message-for-an-array-of-credentials}}\index{krb5\_mk\_ncred (C function)} 8061 8062\begin{fulllineitems} 8063\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_ncred:c.krb5_mk_ncred}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_mk\_ncred}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} **\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} **\sphinxstyleemphasis{ der\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{krb5\_replay\_data}}} *\sphinxstyleemphasis{ rdata\_out}}{} 8064\end{fulllineitems} 8065 8066\begin{quote}\begin{description} 8067\item[{param}] \leavevmode 8068\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8069 8070\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 8071 8072\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Null-terminated array of credentials 8073 8074\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{der\_out} - Encoded credentials 8075 8076\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay cache information (NULL if not needed) 8077 8078\end{description}\end{quote} 8079\begin{quote}\begin{description} 8080\item[{retval}] \leavevmode\begin{itemize} 8081\item {} 80820 Success 8083 8084\item {} 8085ENOMEM Insufficient memory 8086 8087\item {} 8088KRB5\_RC\_REQUIRED Message replay detection requires rcache parameter 8089 8090\end{itemize} 8091 8092\item[{return}] \leavevmode\begin{itemize} 8093\item {} 8094Kerberos error codes 8095 8096\end{itemize} 8097 8098\end{description}\end{quote} 8099 8100This function takes an array of credentials \sphinxstyleemphasis{creds} and formats a \sphinxstylestrong{KRB-CRED} message \sphinxstyleemphasis{der\_out} to pass to {\hyperref[\detokenize{appdev/refs/api/krb5_rd_cred:c.krb5_rd_cred}]{\sphinxcrossref{\sphinxcode{krb5\_rd\_cred()}}}} . 8101 8102The local and remote addresses in \sphinxstyleemphasis{auth\_context} are optional; if either is specified, they are used to form the sender and receiver addresses in the KRB-CRED message. 8103 8104If the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} flag is set in \sphinxstyleemphasis{auth\_context} , an entry for the message is entered in an in-memory replay cache to detect if the message is reflected by an attacker. If {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} is not set, no replay cache is used. If {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} is set in \sphinxstyleemphasis{auth\_context} , the timestamp used for the KRB-CRED message is stored in \sphinxstyleemphasis{rdata\_out} . 8105 8106If either {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} is set, the \sphinxstyleemphasis{auth\_context} local sequence number is included in the KRB-CRED message and then incremented. If {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} is set, the sequence number used is stored in \sphinxstyleemphasis{rdata\_out} . 8107 8108Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{der\_out} when it is no longer needed. 8109 8110The message will be encrypted using the send subkey of \sphinxstyleemphasis{auth\_context} if it is present, or the session key otherwise. If neither key is present, the credentials will not be encrypted, and the message should only be sent over a secure channel. No replay cache entry is used in this case. 8111 8112\begin{sphinxadmonition}{note}{Note:} 8113The \sphinxstyleemphasis{rdata\_out} argument is required if the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} flag is set in \sphinxstyleemphasis{auth\_context} . 8114\end{sphinxadmonition} 8115 8116 8117\subsubsection{krb5\_mk\_priv - Format a KRB-PRIV message.} 8118\label{\detokenize{appdev/refs/api/krb5_mk_priv:krb5-mk-priv-format-a-krb-priv-message}}\label{\detokenize{appdev/refs/api/krb5_mk_priv::doc}}\index{krb5\_mk\_priv (C function)} 8119 8120\begin{fulllineitems} 8121\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_priv:c.krb5_mk_priv}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_mk\_priv}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ userdata}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ der\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{krb5\_replay\_data}}} *\sphinxstyleemphasis{ rdata\_out}}{} 8122\end{fulllineitems} 8123 8124\begin{quote}\begin{description} 8125\item[{param}] \leavevmode 8126\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8127 8128\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 8129 8130\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{userdata} - User data for \sphinxstylestrong{KRB-PRIV} message 8131 8132\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{der\_out} - Formatted \sphinxstylestrong{KRB-PRIV} message 8133 8134\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay data (NULL if not needed) 8135 8136\end{description}\end{quote} 8137\begin{quote}\begin{description} 8138\item[{retval}] \leavevmode\begin{itemize} 8139\item {} 81400 Success; otherwise - Kerberos error codes 8141 8142\end{itemize} 8143 8144\end{description}\end{quote} 8145 8146This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_mk_safe:c.krb5_mk_safe}]{\sphinxcrossref{\sphinxcode{krb5\_mk\_safe()}}}} , but the message is encrypted and integrity-protected, not just integrity-protected. 8147 8148The local address in \sphinxstyleemphasis{auth\_context} must be set, and is used to form the sender address used in the KRB-PRIV message. The remote address is optional; if specified, it will be used to form the receiver address used in the message. 8149 8150If the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} flag is set in \sphinxstyleemphasis{auth\_context} , a timestamp is included in the KRB-PRIV message, and an entry for the message is entered in an in-memory replay cache to detect if the message is reflected by an attacker. If {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} is not set, no replay cache is used. If {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} is set in \sphinxstyleemphasis{auth\_context} , a timestamp is included in the KRB-PRIV message and is stored in \sphinxstyleemphasis{rdata\_out} . 8151 8152If either {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} is set, the \sphinxstyleemphasis{auth\_context} local sequence number is included in the KRB-PRIV message and then incremented. If {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} is set, the sequence number used is stored in \sphinxstyleemphasis{rdata\_out} . 8153 8154Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{der\_out} when it is no longer needed. 8155 8156\begin{sphinxadmonition}{note}{Note:} 8157The \sphinxstyleemphasis{rdata\_out} argument is required if the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} flag is set in \sphinxstyleemphasis{auth\_context} . 8158\end{sphinxadmonition} 8159 8160 8161\subsubsection{krb5\_mk\_rep - Format and encrypt a KRB\_AP\_REP message.} 8162\label{\detokenize{appdev/refs/api/krb5_mk_rep:krb5-mk-rep-format-and-encrypt-a-krb-ap-rep-message}}\label{\detokenize{appdev/refs/api/krb5_mk_rep::doc}}\index{krb5\_mk\_rep (C function)} 8163 8164\begin{fulllineitems} 8165\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_rep:c.krb5_mk_rep}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_mk\_rep}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ outbuf}}{} 8166\end{fulllineitems} 8167 8168\begin{quote}\begin{description} 8169\item[{param}] \leavevmode 8170\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8171 8172\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 8173 8174\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} - \sphinxstylestrong{AP-REP} message 8175 8176\end{description}\end{quote} 8177\begin{quote}\begin{description} 8178\item[{retval}] \leavevmode\begin{itemize} 8179\item {} 81800 Success; otherwise - Kerberos error codes 8181 8182\end{itemize} 8183 8184\end{description}\end{quote} 8185 8186This function fills in \sphinxstyleemphasis{outbuf} with an AP-REP message using information from \sphinxstyleemphasis{auth\_context} . 8187 8188If the flags in \sphinxstyleemphasis{auth\_context} indicate that a sequence number should be used (either {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} ) and the local sequence number in \sphinxstyleemphasis{auth\_context} is 0, a new number will be generated with krb5\_generate\_seq\_number(). 8189 8190Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{outbuf} when it is no longer needed. 8191 8192 8193\subsubsection{krb5\_mk\_rep\_dce - Format and encrypt a KRB\_AP\_REP message for DCE RPC.} 8194\label{\detokenize{appdev/refs/api/krb5_mk_rep_dce:krb5-mk-rep-dce-format-and-encrypt-a-krb-ap-rep-message-for-dce-rpc}}\label{\detokenize{appdev/refs/api/krb5_mk_rep_dce::doc}}\index{krb5\_mk\_rep\_dce (C function)} 8195 8196\begin{fulllineitems} 8197\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_rep_dce:c.krb5_mk_rep_dce}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_mk\_rep\_dce}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ outbuf}}{} 8198\end{fulllineitems} 8199 8200\begin{quote}\begin{description} 8201\item[{param}] \leavevmode 8202\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8203 8204\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 8205 8206\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} - \sphinxstylestrong{AP-REP} message 8207 8208\end{description}\end{quote} 8209\begin{quote}\begin{description} 8210\item[{retval}] \leavevmode\begin{itemize} 8211\item {} 82120 Success; otherwise - Kerberos error codes 8213 8214\end{itemize} 8215 8216\end{description}\end{quote} 8217 8218Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{outbuf} when it is no longer needed. 8219 8220 8221\subsubsection{krb5\_mk\_req - Create a KRB\_AP\_REQ message.} 8222\label{\detokenize{appdev/refs/api/krb5_mk_req:krb5-mk-req-create-a-krb-ap-req-message}}\label{\detokenize{appdev/refs/api/krb5_mk_req::doc}}\index{krb5\_mk\_req (C function)} 8223 8224\begin{fulllineitems} 8225\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_req:c.krb5_mk_req}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_mk\_req}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}} *\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ ap\_req\_options}, const char *\sphinxstyleemphasis{ service}, const char *\sphinxstyleemphasis{ hostname}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ in\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ outbuf}}{} 8226\end{fulllineitems} 8227 8228\begin{quote}\begin{description} 8229\item[{param}] \leavevmode 8230\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8231 8232\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} - Pre-existing or newly created auth context 8233 8234\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_options} - \sphinxcode{AP\_OPTS} options 8235 8236\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{service} - Service name, or NULL to use \sphinxstylestrong{“host”} 8237 8238\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{hostname} - Host name, or NULL to use local hostname 8239 8240\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_data} - Application data to be checksummed in the authenticator, or NULL 8241 8242\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache used to obtain credentials for the desired service. 8243 8244\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} - \sphinxstylestrong{AP-REQ} message 8245 8246\end{description}\end{quote} 8247\begin{quote}\begin{description} 8248\item[{retval}] \leavevmode\begin{itemize} 8249\item {} 82500 Success; otherwise - Kerberos error codes 8251 8252\end{itemize} 8253 8254\end{description}\end{quote} 8255 8256This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_mk_req_extended:c.krb5_mk_req_extended}]{\sphinxcrossref{\sphinxcode{krb5\_mk\_req\_extended()}}}} except that it uses a given \sphinxstyleemphasis{hostname} , \sphinxstyleemphasis{service} , and \sphinxstyleemphasis{ccache} to construct a service principal name and obtain credentials. 8257 8258Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{outbuf} when it is no longer needed. 8259 8260 8261\subsubsection{krb5\_mk\_req\_extended - Create a KRB\_AP\_REQ message using supplied credentials.} 8262\label{\detokenize{appdev/refs/api/krb5_mk_req_extended::doc}}\label{\detokenize{appdev/refs/api/krb5_mk_req_extended:krb5-mk-req-extended-create-a-krb-ap-req-message-using-supplied-credentials}}\index{krb5\_mk\_req\_extended (C function)} 8263 8264\begin{fulllineitems} 8265\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_req_extended:c.krb5_mk_req_extended}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_mk\_req\_extended}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}} *\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ ap\_req\_options}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ in\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ in\_creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ outbuf}}{} 8266\end{fulllineitems} 8267 8268\begin{quote}\begin{description} 8269\item[{param}] \leavevmode 8270\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8271 8272\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} - Pre-existing or newly created auth context 8273 8274\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_options} - \sphinxcode{AP\_OPTS} options 8275 8276\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_data} - Application data to be checksummed in the authenticator, or NULL 8277 8278\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_creds} - Credentials for the service with valid ticket and key 8279 8280\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} - \sphinxstylestrong{AP-REQ} message 8281 8282\end{description}\end{quote} 8283\begin{quote}\begin{description} 8284\item[{retval}] \leavevmode\begin{itemize} 8285\item {} 82860 Success; otherwise - Kerberos error codes 8287 8288\end{itemize} 8289 8290\end{description}\end{quote} 8291 8292Valid \sphinxstyleemphasis{ap\_req\_options} are: 8293\begin{quote} 8294\begin{itemize} 8295\item {} 8296{\hyperref[\detokenize{appdev/refs/macros/AP_OPTS_USE_SESSION_KEY:AP_OPTS_USE_SESSION_KEY}]{\sphinxcrossref{\sphinxcode{AP\_OPTS\_USE\_SESSION\_KEY}}}} - Use the session key when creating the request used for user to user authentication. 8297 8298\item {} 8299{\hyperref[\detokenize{appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED:AP_OPTS_MUTUAL_REQUIRED}]{\sphinxcrossref{\sphinxcode{AP\_OPTS\_MUTUAL\_REQUIRED}}}} - Request a mutual authentication packet from the receiver. 8300 8301\item {} 8302{\hyperref[\detokenize{appdev/refs/macros/AP_OPTS_USE_SUBKEY:AP_OPTS_USE_SUBKEY}]{\sphinxcrossref{\sphinxcode{AP\_OPTS\_USE\_SUBKEY}}}} - Generate a subsession key from the current session key obtained from the credentials. 8303 8304\end{itemize} 8305 8306This function creates a KRB\_AP\_REQ message using supplied credentials \sphinxstyleemphasis{in\_creds} . \sphinxstyleemphasis{auth\_context} may point to an existing auth context or to NULL, in which case a new one will be created. If \sphinxstyleemphasis{in\_data} is non-null, a checksum of it will be included in the authenticator contained in the KRB\_AP\_REQ message. Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{outbuf} when it is no longer needed. 8307\end{quote} 8308 8309On successful return, the authenticator is stored in \sphinxstyleemphasis{auth\_context} with the \sphinxstyleemphasis{client} and \sphinxstyleemphasis{checksum} fields nulled out. (This is to prevent pointer-sharing problems; the caller should not need these fields anyway, since the caller supplied them.) 8310 8311 8312\sphinxstrong{See also:} 8313 8314 8315{\hyperref[\detokenize{appdev/refs/api/krb5_mk_req:c.krb5_mk_req}]{\sphinxcrossref{\sphinxcode{krb5\_mk\_req()}}}} 8316 8317 8318 8319 8320\subsubsection{krb5\_mk\_safe - Format a KRB-SAFE message.} 8321\label{\detokenize{appdev/refs/api/krb5_mk_safe:krb5-mk-safe-format-a-krb-safe-message}}\label{\detokenize{appdev/refs/api/krb5_mk_safe::doc}}\index{krb5\_mk\_safe (C function)} 8322 8323\begin{fulllineitems} 8324\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_safe:c.krb5_mk_safe}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_mk\_safe}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ userdata}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ der\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{krb5\_replay\_data}}} *\sphinxstyleemphasis{ rdata\_out}}{} 8325\end{fulllineitems} 8326 8327\begin{quote}\begin{description} 8328\item[{param}] \leavevmode 8329\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8330 8331\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 8332 8333\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{userdata} - User data in the message 8334 8335\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{der\_out} - Formatted \sphinxstylestrong{KRB-SAFE} buffer 8336 8337\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay data. Specify NULL if not needed 8338 8339\end{description}\end{quote} 8340\begin{quote}\begin{description} 8341\item[{retval}] \leavevmode\begin{itemize} 8342\item {} 83430 Success; otherwise - Kerberos error codes 8344 8345\end{itemize} 8346 8347\end{description}\end{quote} 8348 8349This function creates an integrity protected \sphinxstylestrong{KRB-SAFE} message using data supplied by the application. 8350 8351Fields in \sphinxstyleemphasis{auth\_context} specify the checksum type, the keyblock that can be used to seed the checksum, full addresses (host and port) for the sender and receiver, and \sphinxcode{KRB5\_AUTH\_CONTEXT} flags. 8352 8353The local address in \sphinxstyleemphasis{auth\_context} must be set, and is used to form the sender address used in the KRB-SAFE message. The remote address is optional; if specified, it will be used to form the receiver address used in the message. 8354 8355If the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} flag is set in \sphinxstyleemphasis{auth\_context} , a timestamp is included in the KRB-SAFE message, and an entry for the message is entered in an in-memory replay cache to detect if the message is reflected by an attacker. If {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} is not set, no replay cache is used. If {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} is set in \sphinxstyleemphasis{auth\_context} , a timestamp is included in the KRB-SAFE message and is stored in \sphinxstyleemphasis{rdata\_out} . 8356 8357If either {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} is set, the \sphinxstyleemphasis{auth\_context} local sequence number is included in the KRB-SAFE message and then incremented. If {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} is set, the sequence number used is stored in \sphinxstyleemphasis{rdata\_out} . 8358 8359Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{der\_out} when it is no longer needed. 8360 8361\begin{sphinxadmonition}{note}{Note:} 8362The \sphinxstyleemphasis{rdata\_out} argument is required if the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} flag is set in \sphinxstyleemphasis{auth\_context} . 8363\end{sphinxadmonition} 8364 8365 8366\subsubsection{krb5\_os\_localaddr - Return all interface addresses for this host.} 8367\label{\detokenize{appdev/refs/api/krb5_os_localaddr:krb5-os-localaddr-return-all-interface-addresses-for-this-host}}\label{\detokenize{appdev/refs/api/krb5_os_localaddr::doc}}\index{krb5\_os\_localaddr (C function)} 8368 8369\begin{fulllineitems} 8370\phantomsection\label{\detokenize{appdev/refs/api/krb5_os_localaddr:c.krb5_os_localaddr}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_os\_localaddr}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} ***\sphinxstyleemphasis{ addr}}{} 8371\end{fulllineitems} 8372 8373\begin{quote}\begin{description} 8374\item[{param}] \leavevmode 8375\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8376 8377\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{addr} - Array of krb5\_address pointers, ending with NULL 8378 8379\end{description}\end{quote} 8380\begin{quote}\begin{description} 8381\item[{retval}] \leavevmode\begin{itemize} 8382\item {} 83830 Success; otherwise - Kerberos error codes 8384 8385\end{itemize} 8386 8387\end{description}\end{quote} 8388 8389Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_addresses:c.krb5_free_addresses}]{\sphinxcrossref{\sphinxcode{krb5\_free\_addresses()}}}} to free \sphinxstyleemphasis{addr} when it is no longer needed. 8390 8391 8392\subsubsection{krb5\_pac\_add\_buffer - Add a buffer to a PAC handle.} 8393\label{\detokenize{appdev/refs/api/krb5_pac_add_buffer:krb5-pac-add-buffer-add-a-buffer-to-a-pac-handle}}\label{\detokenize{appdev/refs/api/krb5_pac_add_buffer::doc}}\index{krb5\_pac\_add\_buffer (C function)} 8394 8395\begin{fulllineitems} 8396\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_add_buffer:c.krb5_pac_add_buffer}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_add\_buffer}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}}\sphinxstyleemphasis{ pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{krb5\_ui\_4}}}\sphinxstyleemphasis{ type}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}}{} 8397\end{fulllineitems} 8398 8399\begin{quote}\begin{description} 8400\item[{param}] \leavevmode 8401\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8402 8403\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle 8404 8405\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - Buffer type 8406 8407\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - contents 8408 8409\end{description}\end{quote} 8410\begin{quote}\begin{description} 8411\item[{retval}] \leavevmode\begin{itemize} 8412\item {} 84130 Success; otherwise - Kerberos error codes 8414 8415\end{itemize} 8416 8417\end{description}\end{quote} 8418 8419This function adds a buffer of type \sphinxstyleemphasis{type} and contents \sphinxstyleemphasis{data} to \sphinxstyleemphasis{pac} if there isn’t already a buffer of this type present. 8420 8421The valid values of \sphinxstyleemphasis{type} is one of the following: 8422\begin{itemize} 8423\item {} 8424{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_LOGON_INFO:KRB5_PAC_LOGON_INFO}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_LOGON\_INFO}}}} - Logon information 8425 8426\item {} 8427{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_CREDENTIALS_INFO:KRB5_PAC_CREDENTIALS_INFO}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_CREDENTIALS\_INFO}}}} - Credentials information 8428 8429\item {} 8430{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM:KRB5_PAC_SERVER_CHECKSUM}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_SERVER\_CHECKSUM}}}} - Server checksum 8431 8432\item {} 8433{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM:KRB5_PAC_PRIVSVR_CHECKSUM}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_PRIVSVR\_CHECKSUM}}}} - KDC checksum 8434 8435\item {} 8436{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_INFO:KRB5_PAC_CLIENT_INFO}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_CLIENT\_INFO}}}} - Client name and ticket information 8437 8438\item {} 8439{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_DELEGATION_INFO:KRB5_PAC_DELEGATION_INFO}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_DELEGATION\_INFO}}}} - Constrained delegation information 8440 8441\item {} 8442{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_UPN_DNS_INFO:KRB5_PAC_UPN_DNS_INFO}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_UPN\_DNS\_INFO}}}} - User principal name and DNS information 8443 8444\end{itemize} 8445 8446 8447\subsubsection{krb5\_pac\_free - Free a PAC handle.} 8448\label{\detokenize{appdev/refs/api/krb5_pac_free:krb5-pac-free-free-a-pac-handle}}\label{\detokenize{appdev/refs/api/krb5_pac_free::doc}}\index{krb5\_pac\_free (C function)} 8449 8450\begin{fulllineitems} 8451\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_free:c.krb5_pac_free}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_pac\_free}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}}\sphinxstyleemphasis{ pac}}{} 8452\end{fulllineitems} 8453 8454\begin{quote}\begin{description} 8455\item[{param}] \leavevmode 8456\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8457 8458\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC to be freed 8459 8460\end{description}\end{quote} 8461 8462This function frees the contents of \sphinxstyleemphasis{pac} and the structure itself. 8463 8464 8465\subsubsection{krb5\_pac\_get\_buffer - Retrieve a buffer value from a PAC.} 8466\label{\detokenize{appdev/refs/api/krb5_pac_get_buffer::doc}}\label{\detokenize{appdev/refs/api/krb5_pac_get_buffer:krb5-pac-get-buffer-retrieve-a-buffer-value-from-a-pac}}\index{krb5\_pac\_get\_buffer (C function)} 8467 8468\begin{fulllineitems} 8469\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_get_buffer:c.krb5_pac_get_buffer}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_get\_buffer}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}}\sphinxstyleemphasis{ pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{krb5\_ui\_4}}}\sphinxstyleemphasis{ type}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}}{} 8470\end{fulllineitems} 8471 8472\begin{quote}\begin{description} 8473\item[{param}] \leavevmode 8474\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8475 8476\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle 8477 8478\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - Type of buffer to retrieve 8479 8480\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} - Buffer value 8481 8482\end{description}\end{quote} 8483\begin{quote}\begin{description} 8484\item[{retval}] \leavevmode\begin{itemize} 8485\item {} 84860 Success; otherwise - Kerberos error codes 8487 8488\end{itemize} 8489 8490\end{description}\end{quote} 8491 8492Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{data} when it is no longer needed. 8493 8494 8495\subsubsection{krb5\_pac\_get\_types - Return an array of buffer types in a PAC handle.} 8496\label{\detokenize{appdev/refs/api/krb5_pac_get_types:krb5-pac-get-types-return-an-array-of-buffer-types-in-a-pac-handle}}\label{\detokenize{appdev/refs/api/krb5_pac_get_types::doc}}\index{krb5\_pac\_get\_types (C function)} 8497 8498\begin{fulllineitems} 8499\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_get_types:c.krb5_pac_get_types}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_get\_types}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}}\sphinxstyleemphasis{ pac}, size\_t *\sphinxstyleemphasis{ len}, {\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{krb5\_ui\_4}}} **\sphinxstyleemphasis{ types}}{} 8500\end{fulllineitems} 8501 8502\begin{quote}\begin{description} 8503\item[{param}] \leavevmode 8504\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8505 8506\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle 8507 8508\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{len} - Number of entries in \sphinxstyleemphasis{types} 8509 8510\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{types} - Array of buffer types 8511 8512\end{description}\end{quote} 8513\begin{quote}\begin{description} 8514\item[{retval}] \leavevmode\begin{itemize} 8515\item {} 85160 Success; otherwise - Kerberos error codes 8517 8518\end{itemize} 8519 8520\end{description}\end{quote} 8521 8522 8523\subsubsection{krb5\_pac\_init - Create an empty Privilege Attribute Certificate (PAC) handle.} 8524\label{\detokenize{appdev/refs/api/krb5_pac_init:krb5-pac-init-create-an-empty-privilege-attribute-certificate-pac-handle}}\label{\detokenize{appdev/refs/api/krb5_pac_init::doc}}\index{krb5\_pac\_init (C function)} 8525 8526\begin{fulllineitems} 8527\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_init:c.krb5_pac_init}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_init}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}} *\sphinxstyleemphasis{ pac}}{} 8528\end{fulllineitems} 8529 8530\begin{quote}\begin{description} 8531\item[{param}] \leavevmode 8532\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8533 8534\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{pac} - New PAC handle 8535 8536\end{description}\end{quote} 8537\begin{quote}\begin{description} 8538\item[{retval}] \leavevmode\begin{itemize} 8539\item {} 85400 Success; otherwise - Kerberos error codes 8541 8542\end{itemize} 8543 8544\end{description}\end{quote} 8545 8546Use {\hyperref[\detokenize{appdev/refs/api/krb5_pac_free:c.krb5_pac_free}]{\sphinxcrossref{\sphinxcode{krb5\_pac\_free()}}}} to free \sphinxstyleemphasis{pac} when it is no longer needed. 8547 8548 8549\subsubsection{krb5\_pac\_parse - Unparse an encoded PAC into a new handle.} 8550\label{\detokenize{appdev/refs/api/krb5_pac_parse:krb5-pac-parse-unparse-an-encoded-pac-into-a-new-handle}}\label{\detokenize{appdev/refs/api/krb5_pac_parse::doc}}\index{krb5\_pac\_parse (C function)} 8551 8552\begin{fulllineitems} 8553\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_parse:c.krb5_pac_parse}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_parse}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const void *\sphinxstyleemphasis{ ptr}, size\_t\sphinxstyleemphasis{ len}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}} *\sphinxstyleemphasis{ pac}}{} 8554\end{fulllineitems} 8555 8556\begin{quote}\begin{description} 8557\item[{param}] \leavevmode 8558\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8559 8560\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ptr} - PAC buffer 8561 8562\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{len} - Length of \sphinxstyleemphasis{ptr} 8563 8564\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{pac} - PAC handle 8565 8566\end{description}\end{quote} 8567\begin{quote}\begin{description} 8568\item[{retval}] \leavevmode\begin{itemize} 8569\item {} 85700 Success; otherwise - Kerberos error codes 8571 8572\end{itemize} 8573 8574\end{description}\end{quote} 8575 8576Use {\hyperref[\detokenize{appdev/refs/api/krb5_pac_free:c.krb5_pac_free}]{\sphinxcrossref{\sphinxcode{krb5\_pac\_free()}}}} to free \sphinxstyleemphasis{pac} when it is no longer needed. 8577 8578 8579\subsubsection{krb5\_pac\_sign - Sign a PAC.} 8580\label{\detokenize{appdev/refs/api/krb5_pac_sign:krb5-pac-sign-sign-a-pac}}\label{\detokenize{appdev/refs/api/krb5_pac_sign::doc}}\index{krb5\_pac\_sign (C function)} 8581 8582\begin{fulllineitems} 8583\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_sign:c.krb5_pac_sign}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_sign}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}}\sphinxstyleemphasis{ pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}\sphinxstyleemphasis{ authtime}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ server\_key}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ privsvr\_key}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}}{} 8584\end{fulllineitems} 8585 8586\begin{quote}\begin{description} 8587\item[{param}] \leavevmode 8588\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8589 8590\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle 8591 8592\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authtime} - Expected timestamp 8593 8594\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Expected principal name (or NULL) 8595 8596\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server\_key} - Key for server checksum 8597 8598\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{privsvr\_key} - Key for KDC checksum 8599 8600\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} - Signed PAC encoding 8601 8602\end{description}\end{quote} 8603 8604This function signs \sphinxstyleemphasis{pac} using the keys \sphinxstyleemphasis{server\_key} and \sphinxstyleemphasis{privsvr\_key} and returns the signed encoding in \sphinxstyleemphasis{data} . \sphinxstyleemphasis{pac} is modified to include the server and KDC checksum buffers. Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{data} when it is no longer needed. 8605 8606\begin{sphinxadmonition}{note}{Note:} 8607New in 1.10 8608\end{sphinxadmonition} 8609 8610 8611\subsubsection{krb5\_pac\_sign\_ext - Sign a PAC, possibly with a specified realm.} 8612\label{\detokenize{appdev/refs/api/krb5_pac_sign_ext:krb5-pac-sign-ext-sign-a-pac-possibly-with-a-specified-realm}}\label{\detokenize{appdev/refs/api/krb5_pac_sign_ext::doc}}\index{krb5\_pac\_sign\_ext (C function)} 8613 8614\begin{fulllineitems} 8615\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_sign_ext:c.krb5_pac_sign_ext}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_sign\_ext}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}}\sphinxstyleemphasis{ pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}\sphinxstyleemphasis{ authtime}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ server\_key}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ privsvr\_key}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}}\sphinxstyleemphasis{ with\_realm}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}}{} 8616\end{fulllineitems} 8617 8618\begin{quote}\begin{description} 8619\item[{param}] \leavevmode 8620\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8621 8622\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle 8623 8624\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authtime} - Expected timestamp 8625 8626\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal name (or NULL) 8627 8628\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server\_key} - Key for server checksum 8629 8630\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{privsvr\_key} - Key for KDC checksum 8631 8632\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{with\_realm} - If true, include the realm of \sphinxstyleemphasis{principal} 8633 8634\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} - Signed PAC encoding 8635 8636\end{description}\end{quote} 8637 8638This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_pac_sign:c.krb5_pac_sign}]{\sphinxcrossref{\sphinxcode{krb5\_pac\_sign()}}}} , but adds a parameter \sphinxstyleemphasis{with\_realm} . If \sphinxstyleemphasis{with\_realm} is true, the PAC\_CLIENT\_INFO field of the signed PAC will include the realm of \sphinxstyleemphasis{principal} as well as the name. This flag is necessary to generate PACs for cross-realm S4U2Self referrals. 8639 8640\begin{sphinxadmonition}{note}{Note:} 8641New in 1.17 8642\end{sphinxadmonition} 8643 8644 8645\subsubsection{krb5\_pac\_verify - Verify a PAC.} 8646\label{\detokenize{appdev/refs/api/krb5_pac_verify::doc}}\label{\detokenize{appdev/refs/api/krb5_pac_verify:krb5-pac-verify-verify-a-pac}}\index{krb5\_pac\_verify (C function)} 8647 8648\begin{fulllineitems} 8649\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_verify:c.krb5_pac_verify}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_verify}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}}\sphinxstyleemphasis{ pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}\sphinxstyleemphasis{ authtime}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ server}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ privsvr}}{} 8650\end{fulllineitems} 8651 8652\begin{quote}\begin{description} 8653\item[{param}] \leavevmode 8654\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8655 8656\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle 8657 8658\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authtime} - Expected timestamp 8659 8660\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Expected principal name (or NULL) 8661 8662\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Key to validate server checksum (or NULL) 8663 8664\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{privsvr} - Key to validate KDC checksum (or NULL) 8665 8666\end{description}\end{quote} 8667\begin{quote}\begin{description} 8668\item[{retval}] \leavevmode\begin{itemize} 8669\item {} 86700 Success; otherwise - Kerberos error codes 8671 8672\end{itemize} 8673 8674\end{description}\end{quote} 8675 8676This function validates \sphinxstyleemphasis{pac} against the supplied \sphinxstyleemphasis{server} , \sphinxstyleemphasis{privsvr} , \sphinxstyleemphasis{principal} and \sphinxstyleemphasis{authtime} . If \sphinxstyleemphasis{principal} is NULL, the principal and authtime are not verified. If \sphinxstyleemphasis{server} or \sphinxstyleemphasis{privsvr} is NULL, the corresponding checksum is not verified. 8677 8678If successful, \sphinxstyleemphasis{pac} is marked as verified. 8679 8680\begin{sphinxadmonition}{note}{Note:} 8681A checksum mismatch can occur if the PAC was copied from a cross-realm TGT by an ignorant KDC; also macOS Server Open Directory (as of 10.6) generates PACs with no server checksum at all. One should consider not failing the whole authentication because of this reason, but, instead, treating the ticket as if it did not contain a PAC or marking the PAC information as non-verified. 8682\end{sphinxadmonition} 8683 8684 8685\subsubsection{krb5\_pac\_verify\_ext - Verify a PAC, possibly from a specified realm.} 8686\label{\detokenize{appdev/refs/api/krb5_pac_verify_ext:krb5-pac-verify-ext-verify-a-pac-possibly-from-a-specified-realm}}\label{\detokenize{appdev/refs/api/krb5_pac_verify_ext::doc}}\index{krb5\_pac\_verify\_ext (C function)} 8687 8688\begin{fulllineitems} 8689\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_verify_ext:c.krb5_pac_verify_ext}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_verify\_ext}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}}\sphinxstyleemphasis{ pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}\sphinxstyleemphasis{ authtime}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ server}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ privsvr}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}}\sphinxstyleemphasis{ with\_realm}}{} 8690\end{fulllineitems} 8691 8692\begin{quote}\begin{description} 8693\item[{param}] \leavevmode 8694\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8695 8696\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle 8697 8698\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authtime} - Expected timestamp 8699 8700\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Expected principal name (or NULL) 8701 8702\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Key to validate server checksum (or NULL) 8703 8704\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{privsvr} - Key to validate KDC checksum (or NULL) 8705 8706\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{with\_realm} - If true, expect the realm of \sphinxstyleemphasis{principal} 8707 8708\end{description}\end{quote} 8709 8710This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_pac_verify:c.krb5_pac_verify}]{\sphinxcrossref{\sphinxcode{krb5\_pac\_verify()}}}} , but adds a parameter \sphinxstyleemphasis{with\_realm} . If \sphinxstyleemphasis{with\_realm} is true, the PAC\_CLIENT\_INFO field is expected to include the realm of \sphinxstyleemphasis{principal} as well as the name. This flag is necessary to verify PACs in cross-realm S4U2Self referral TGTs. 8711 8712\begin{sphinxadmonition}{note}{Note:} 8713New in 1.17 8714\end{sphinxadmonition} 8715 8716 8717\subsubsection{krb5\_pac\_get\_client\_info} 8718\label{\detokenize{appdev/refs/api/krb5_pac_get_client_info:krb5-pac-get-client-info}}\label{\detokenize{appdev/refs/api/krb5_pac_get_client_info::doc}}\index{krb5\_pac\_get\_client\_info (C function)} 8719 8720\begin{fulllineitems} 8721\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_get_client_info:c.krb5_pac_get_client_info}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_get\_client\_info}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}}\sphinxstyleemphasis{ pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} *\sphinxstyleemphasis{ authtime\_out}, char **\sphinxstyleemphasis{ princname\_out}}{} 8722\end{fulllineitems} 8723 8724\begin{quote}\begin{description} 8725\item[{param}] \leavevmode 8726\sphinxstylestrong{context} 8727 8728\sphinxstylestrong{pac} 8729 8730\sphinxstylestrong{authtime\_out} 8731 8732\sphinxstylestrong{princname\_out} 8733 8734\end{description}\end{quote} 8735 8736 8737\subsubsection{krb5\_prepend\_error\_message - Add a prefix to the message for an error code.} 8738\label{\detokenize{appdev/refs/api/krb5_prepend_error_message:krb5-prepend-error-message-add-a-prefix-to-the-message-for-an-error-code}}\label{\detokenize{appdev/refs/api/krb5_prepend_error_message::doc}}\index{krb5\_prepend\_error\_message (C function)} 8739 8740\begin{fulllineitems} 8741\phantomsection\label{\detokenize{appdev/refs/api/krb5_prepend_error_message:c.krb5_prepend_error_message}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_prepend\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}}\sphinxstyleemphasis{ code}, const char *\sphinxstyleemphasis{ fmt}, ...}{} 8742\end{fulllineitems} 8743 8744\begin{quote}\begin{description} 8745\item[{param}] \leavevmode 8746\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 8747 8748\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code 8749 8750\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} - Format string for error message prefix 8751 8752\end{description}\end{quote} 8753 8754Format a message and prepend it to the current message for \sphinxstyleemphasis{code} . The prefix will be separated from the old message with a colon and space. 8755 8756 8757\subsubsection{krb5\_principal2salt - Convert a principal name into the default salt for that principal.} 8758\label{\detokenize{appdev/refs/api/krb5_principal2salt:krb5-principal2salt-convert-a-principal-name-into-the-default-salt-for-that-principal}}\label{\detokenize{appdev/refs/api/krb5_principal2salt::doc}}\index{krb5\_principal2salt (C function)} 8759 8760\begin{fulllineitems} 8761\phantomsection\label{\detokenize{appdev/refs/api/krb5_principal2salt:c.krb5_principal2salt}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_principal2salt}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ pr}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ ret}}{} 8762\end{fulllineitems} 8763 8764\begin{quote}\begin{description} 8765\item[{param}] \leavevmode 8766\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8767 8768\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pr} - Principal name 8769 8770\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ret} - Default salt for \sphinxstyleemphasis{pr} to be filled in 8771 8772\end{description}\end{quote} 8773\begin{quote}\begin{description} 8774\item[{retval}] \leavevmode\begin{itemize} 8775\item {} 87760 Success; otherwise - Kerberos error codes 8777 8778\end{itemize} 8779 8780\end{description}\end{quote} 8781 8782 8783\subsubsection{krb5\_rd\_cred - Read and validate a KRB-CRED message.} 8784\label{\detokenize{appdev/refs/api/krb5_rd_cred:krb5-rd-cred-read-and-validate-a-krb-cred-message}}\label{\detokenize{appdev/refs/api/krb5_rd_cred::doc}}\index{krb5\_rd\_cred (C function)} 8785 8786\begin{fulllineitems} 8787\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_cred:c.krb5_rd_cred}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_rd\_cred}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ creddata}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} ***\sphinxstyleemphasis{ creds\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{krb5\_replay\_data}}} *\sphinxstyleemphasis{ rdata\_out}}{} 8788\end{fulllineitems} 8789 8790\begin{quote}\begin{description} 8791\item[{param}] \leavevmode 8792\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8793 8794\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 8795 8796\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creddata} - \sphinxstylestrong{KRB-CRED} message 8797 8798\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds\_out} - Null-terminated array of forwarded credentials 8799 8800\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay data (NULL if not needed) 8801 8802\end{description}\end{quote} 8803\begin{quote}\begin{description} 8804\item[{retval}] \leavevmode\begin{itemize} 8805\item {} 88060 Success; otherwise - Kerberos error codes 8807 8808\end{itemize} 8809 8810\end{description}\end{quote} 8811\begin{quote} 8812 8813\sphinxstyleemphasis{creddata} will be decrypted using the receiving subkey if it is present in \sphinxstyleemphasis{auth\_context} , or the session key if the receiving subkey is not present or fails to decrypt the message. 8814\end{quote} 8815 8816Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_tgt_creds:c.krb5_free_tgt_creds}]{\sphinxcrossref{\sphinxcode{krb5\_free\_tgt\_creds()}}}} to free \sphinxstyleemphasis{creds\_out} when it is no longer needed. 8817 8818\begin{sphinxadmonition}{note}{Note:} 8819The \sphinxstyleemphasis{rdata\_out} argument is required if the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} flag is set in \sphinxstyleemphasis{auth\_context} .{}` 8820\end{sphinxadmonition} 8821 8822 8823\subsubsection{krb5\_rd\_error - Decode a KRB-ERROR message.} 8824\label{\detokenize{appdev/refs/api/krb5_rd_error:krb5-rd-error-decode-a-krb-error-message}}\label{\detokenize{appdev/refs/api/krb5_rd_error::doc}}\index{krb5\_rd\_error (C function)} 8825 8826\begin{fulllineitems} 8827\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_error:c.krb5_rd_error}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_rd\_error}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ enc\_errbuf}, {\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{krb5\_error}}} **\sphinxstyleemphasis{ dec\_error}}{} 8828\end{fulllineitems} 8829 8830\begin{quote}\begin{description} 8831\item[{param}] \leavevmode 8832\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8833 8834\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enc\_errbuf} - Encoded error message 8835 8836\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{dec\_error} - Decoded error message 8837 8838\end{description}\end{quote} 8839\begin{quote}\begin{description} 8840\item[{retval}] \leavevmode\begin{itemize} 8841\item {} 88420 Success; otherwise - Kerberos error codes 8843 8844\end{itemize} 8845 8846\end{description}\end{quote} 8847 8848This function processes \sphinxstylestrong{KRB-ERROR} message \sphinxstyleemphasis{enc\_errbuf} and returns an allocated structure \sphinxstyleemphasis{dec\_error} containing the error message. Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_error:c.krb5_free_error}]{\sphinxcrossref{\sphinxcode{krb5\_free\_error()}}}} to free \sphinxstyleemphasis{dec\_error} when it is no longer needed. 8849 8850 8851\subsubsection{krb5\_rd\_priv - Process a KRB-PRIV message.} 8852\label{\detokenize{appdev/refs/api/krb5_rd_priv:krb5-rd-priv-process-a-krb-priv-message}}\label{\detokenize{appdev/refs/api/krb5_rd_priv::doc}}\index{krb5\_rd\_priv (C function)} 8853 8854\begin{fulllineitems} 8855\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_priv:c.krb5_rd_priv}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_rd\_priv}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ inbuf}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ userdata\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{krb5\_replay\_data}}} *\sphinxstyleemphasis{ rdata\_out}}{} 8856\end{fulllineitems} 8857 8858\begin{quote}\begin{description} 8859\item[{param}] \leavevmode 8860\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8861 8862\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication structure 8863 8864\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} - \sphinxstylestrong{KRB-PRIV} message to be parsed 8865 8866\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{userdata\_out} - Data parsed from \sphinxstylestrong{KRB-PRIV} message 8867 8868\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay data. Specify NULL if not needed 8869 8870\end{description}\end{quote} 8871\begin{quote}\begin{description} 8872\item[{retval}] \leavevmode\begin{itemize} 8873\item {} 88740 Success; otherwise - Kerberos error codes 8875 8876\end{itemize} 8877 8878\end{description}\end{quote} 8879 8880This function parses a \sphinxstylestrong{KRB-PRIV} message, verifies its integrity, and stores its unencrypted data into \sphinxstyleemphasis{userdata\_out} . 8881 8882If \sphinxstyleemphasis{auth\_context} has a remote address set, the address will be used to verify the sender address in the KRB-PRIV message. If \sphinxstyleemphasis{auth\_context} has a local address set, it will be used to verify the receiver address in the KRB-PRIV message if the message contains one. 8883 8884If the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} flag is set in \sphinxstyleemphasis{auth\_context} , the sequence number of the KRB-PRIV message is checked against the remote sequence number field of \sphinxstyleemphasis{auth\_context} . Otherwise, the sequence number is not used. 8885 8886If the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} flag is set in \sphinxstyleemphasis{auth\_context} , then the timestamp in the message is verified to be within the permitted clock skew of the current time, and the message is checked against an in-memory replay cache to detect reflections or replays. 8887 8888Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{userdata\_out} when it is no longer needed. 8889 8890\begin{sphinxadmonition}{note}{Note:} 8891The \sphinxstyleemphasis{rdata\_out} argument is required if the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} flag is set in \sphinxstyleemphasis{auth\_context} . 8892\end{sphinxadmonition} 8893 8894 8895\subsubsection{krb5\_rd\_rep - Parse and decrypt a KRB\_AP\_REP message.} 8896\label{\detokenize{appdev/refs/api/krb5_rd_rep::doc}}\label{\detokenize{appdev/refs/api/krb5_rd_rep:krb5-rd-rep-parse-and-decrypt-a-krb-ap-rep-message}}\index{krb5\_rd\_rep (C function)} 8897 8898\begin{fulllineitems} 8899\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_rep:c.krb5_rd_rep}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_rd\_rep}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ inbuf}, {\hyperref[\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part}]{\sphinxcrossref{krb5\_ap\_rep\_enc\_part}}} **\sphinxstyleemphasis{ repl}}{} 8900\end{fulllineitems} 8901 8902\begin{quote}\begin{description} 8903\item[{param}] \leavevmode 8904\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8905 8906\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 8907 8908\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} - AP-REP message 8909 8910\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{repl} - Decrypted reply message 8911 8912\end{description}\end{quote} 8913\begin{quote}\begin{description} 8914\item[{retval}] \leavevmode\begin{itemize} 8915\item {} 89160 Success; otherwise - Kerberos error codes 8917 8918\end{itemize} 8919 8920\end{description}\end{quote} 8921 8922This function parses, decrypts and verifies a message from \sphinxstyleemphasis{inbuf} and fills in \sphinxstyleemphasis{repl} with a pointer to allocated memory containing the fields from the encrypted response. 8923 8924Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_ap_rep_enc_part:c.krb5_free_ap_rep_enc_part}]{\sphinxcrossref{\sphinxcode{krb5\_free\_ap\_rep\_enc\_part()}}}} to free \sphinxstyleemphasis{repl} when it is no longer needed. 8925 8926 8927\subsubsection{krb5\_rd\_rep\_dce - Parse and decrypt a KRB\_AP\_REP message for DCE RPC.} 8928\label{\detokenize{appdev/refs/api/krb5_rd_rep_dce::doc}}\label{\detokenize{appdev/refs/api/krb5_rd_rep_dce:krb5-rd-rep-dce-parse-and-decrypt-a-krb-ap-rep-message-for-dce-rpc}}\index{krb5\_rd\_rep\_dce (C function)} 8929 8930\begin{fulllineitems} 8931\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_rep_dce:c.krb5_rd_rep_dce}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_rd\_rep\_dce}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ inbuf}, {\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{krb5\_ui\_4}}} *\sphinxstyleemphasis{ nonce}}{} 8932\end{fulllineitems} 8933 8934\begin{quote}\begin{description} 8935\item[{param}] \leavevmode 8936\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8937 8938\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 8939 8940\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} - AP-REP message 8941 8942\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{nonce} - Sequence number from the decrypted reply 8943 8944\end{description}\end{quote} 8945\begin{quote}\begin{description} 8946\item[{retval}] \leavevmode\begin{itemize} 8947\item {} 89480 Success; otherwise - Kerberos error codes 8949 8950\end{itemize} 8951 8952\end{description}\end{quote} 8953 8954This function parses, decrypts and verifies a message from \sphinxstyleemphasis{inbuf} and fills in \sphinxstyleemphasis{nonce} with a decrypted reply sequence number. 8955 8956 8957\subsubsection{krb5\_rd\_req - Parse and decrypt a KRB\_AP\_REQ message.} 8958\label{\detokenize{appdev/refs/api/krb5_rd_req::doc}}\label{\detokenize{appdev/refs/api/krb5_rd_req:krb5-rd-req-parse-and-decrypt-a-krb-ap-req-message}}\index{krb5\_rd\_req (C function)} 8959 8960\begin{fulllineitems} 8961\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_req:c.krb5_rd_req}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_rd\_req}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}} *\sphinxstyleemphasis{ auth\_context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ inbuf}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ server}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}} *\sphinxstyleemphasis{ ap\_req\_options}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} **\sphinxstyleemphasis{ ticket}}{} 8962\end{fulllineitems} 8963 8964\begin{quote}\begin{description} 8965\item[{param}] \leavevmode 8966\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 8967 8968\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} - Pre-existing or newly created auth context 8969 8970\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} - AP-REQ message to be parsed 8971 8972\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Matching principal for server, or NULL to allow any principal in keytab 8973 8974\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table, or NULL to use the default 8975 8976\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ap\_req\_options} - If non-null, the AP-REQ flags on output 8977 8978\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ticket} - If non-null, ticket from the AP-REQ message 8979 8980\end{description}\end{quote} 8981\begin{quote}\begin{description} 8982\item[{retval}] \leavevmode\begin{itemize} 8983\item {} 89840 Success; otherwise - Kerberos error codes 8985 8986\end{itemize} 8987 8988\end{description}\end{quote} 8989 8990This function parses, decrypts and verifies a AP-REQ message from \sphinxstyleemphasis{inbuf} and stores the authenticator in \sphinxstyleemphasis{auth\_context} . 8991 8992If a keyblock was specified in \sphinxstyleemphasis{auth\_context} using {\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setuseruserkey:c.krb5_auth_con_setuseruserkey}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_setuseruserkey()}}}} , that key is used to decrypt the ticket in AP-REQ message and \sphinxstyleemphasis{keytab} is ignored. In this case, \sphinxstyleemphasis{server} should be specified as a complete principal name to allow for proper transited-path checking and replay cache selection. 8993 8994Otherwise, the decryption key is obtained from \sphinxstyleemphasis{keytab} , or from the default keytab if it is NULL. In this case, \sphinxstyleemphasis{server} may be a complete principal name, a matching principal (see {\hyperref[\detokenize{appdev/refs/api/krb5_sname_match:c.krb5_sname_match}]{\sphinxcrossref{\sphinxcode{krb5\_sname\_match()}}}} ), or NULL to match any principal name. The keys tried against the encrypted part of the ticket are determined as follows: 8995\begin{itemize} 8996\item {} 8997If \sphinxstyleemphasis{server} is a complete principal name, then its entry in \sphinxstyleemphasis{keytab} is tried. 8998 8999\item {} 9000Otherwise, if \sphinxstyleemphasis{keytab} is iterable, then all entries in \sphinxstyleemphasis{keytab} which match \sphinxstyleemphasis{server} are tried. 9001 9002\item {} 9003Otherwise, the server principal in the ticket must match \sphinxstyleemphasis{server} , and its entry in \sphinxstyleemphasis{keytab} is tried. 9004 9005\end{itemize} 9006 9007The client specified in the decrypted authenticator must match the client specified in the decrypted ticket. 9008 9009If the \sphinxstyleemphasis{remote\_addr} field of \sphinxstyleemphasis{auth\_context} is set, the request must come from that address. 9010 9011If a replay cache handle is provided in the \sphinxstyleemphasis{auth\_context} , the authenticator and ticket are verified against it. If no conflict is found, the new authenticator is then stored in the replay cache of \sphinxstyleemphasis{auth\_context} . 9012 9013Various other checks are performed on the decoded data, including cross-realm policy, clockskew, and ticket validation times. 9014 9015On success the authenticator, subkey, and remote sequence number of the request are stored in \sphinxstyleemphasis{auth\_context} . If the {\hyperref[\detokenize{appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED:AP_OPTS_MUTUAL_REQUIRED}]{\sphinxcrossref{\sphinxcode{AP\_OPTS\_MUTUAL\_REQUIRED}}}} bit is set, the local sequence number is XORed with the remote sequence number in the request. 9016 9017Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_ticket:c.krb5_free_ticket}]{\sphinxcrossref{\sphinxcode{krb5\_free\_ticket()}}}} to free \sphinxstyleemphasis{ticket} when it is no longer needed. 9018 9019 9020\subsubsection{krb5\_rd\_safe - Process KRB-SAFE message.} 9021\label{\detokenize{appdev/refs/api/krb5_rd_safe:krb5-rd-safe-process-krb-safe-message}}\label{\detokenize{appdev/refs/api/krb5_rd_safe::doc}}\index{krb5\_rd\_safe (C function)} 9022 9023\begin{fulllineitems} 9024\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_safe:c.krb5_rd_safe}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_rd\_safe}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ inbuf}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ userdata\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{krb5\_replay\_data}}} *\sphinxstyleemphasis{ rdata\_out}}{} 9025\end{fulllineitems} 9026 9027\begin{quote}\begin{description} 9028\item[{param}] \leavevmode 9029\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 9030 9031\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 9032 9033\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} - \sphinxstylestrong{KRB-SAFE} message to be parsed 9034 9035\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{userdata\_out} - Data parsed from \sphinxstylestrong{KRB-SAFE} message 9036 9037\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay data. Specify NULL if not needed 9038 9039\end{description}\end{quote} 9040\begin{quote}\begin{description} 9041\item[{retval}] \leavevmode\begin{itemize} 9042\item {} 90430 Success; otherwise - Kerberos error codes 9044 9045\end{itemize} 9046 9047\end{description}\end{quote} 9048 9049This function parses a \sphinxstylestrong{KRB-SAFE} message, verifies its integrity, and stores its data into \sphinxstyleemphasis{userdata\_out} . 9050 9051If \sphinxstyleemphasis{auth\_context} has a remote address set, the address will be used to verify the sender address in the KRB-SAFE message. If \sphinxstyleemphasis{auth\_context} has a local address set, it will be used to verify the receiver address in the KRB-SAFE message if the message contains one. 9052 9053If the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} flag is set in \sphinxstyleemphasis{auth\_context} , the sequence number of the KRB-SAFE message is checked against the remote sequence number field of \sphinxstyleemphasis{auth\_context} . Otherwise, the sequence number is not used. 9054 9055If the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} flag is set in \sphinxstyleemphasis{auth\_context} , then the timestamp in the message is verified to be within the permitted clock skew of the current time, and the message is checked against an in-memory replay cache to detect reflections or replays. 9056 9057Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{userdata\_out} when it is no longer needed. 9058 9059\begin{sphinxadmonition}{note}{Note:} 9060The \sphinxstyleemphasis{rdata\_out} argument is required if the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} flag is set in \sphinxstyleemphasis{auth\_context} . 9061\end{sphinxadmonition} 9062 9063 9064\subsubsection{krb5\_read\_password - Read a password from keyboard input.} 9065\label{\detokenize{appdev/refs/api/krb5_read_password:krb5-read-password-read-a-password-from-keyboard-input}}\label{\detokenize{appdev/refs/api/krb5_read_password::doc}}\index{krb5\_read\_password (C function)} 9066 9067\begin{fulllineitems} 9068\phantomsection\label{\detokenize{appdev/refs/api/krb5_read_password:c.krb5_read_password}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_read\_password}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ prompt}, const char *\sphinxstyleemphasis{ prompt2}, char *\sphinxstyleemphasis{ return\_pwd}, unsigned int *\sphinxstyleemphasis{ size\_return}}{} 9069\end{fulllineitems} 9070 9071\begin{quote}\begin{description} 9072\item[{param}] \leavevmode 9073\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 9074 9075\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompt} - First user prompt when reading password 9076 9077\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompt2} - Second user prompt (NULL to prompt only once) 9078 9079\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{return\_pwd} - Returned password 9080 9081\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{size\_return} - On input, maximum size of password; on output, size of password read 9082 9083\end{description}\end{quote} 9084\begin{quote}\begin{description} 9085\item[{retval}] \leavevmode\begin{itemize} 9086\item {} 90870 Success 9088 9089\end{itemize} 9090 9091\item[{return}] \leavevmode\begin{itemize} 9092\item {} 9093Error in reading or verifying the password 9094 9095\item {} 9096Kerberos error codes 9097 9098\end{itemize} 9099 9100\end{description}\end{quote} 9101 9102This function reads a password from keyboard input and stores it in \sphinxstyleemphasis{return\_pwd} . \sphinxstyleemphasis{size\_return} should be set by the caller to the amount of storage space available in \sphinxstyleemphasis{return\_pwd} ; on successful return, it will be set to the length of the password read. 9103\begin{quote} 9104 9105\sphinxstyleemphasis{prompt} is printed to the terminal, followed by”:”, and then a password is read from the keyboard. 9106\end{quote} 9107 9108If \sphinxstyleemphasis{prompt2} is NULL, the password is read only once. Otherwise, \sphinxstyleemphasis{prompt2} is printed to the terminal and a second password is read. If the two passwords entered are not identical, KRB5\_LIBOS\_BADPWDMATCH is returned. 9109 9110Echoing is turned off when the password is read. 9111 9112 9113\subsubsection{krb5\_salttype\_to\_string - Convert a salt type to a string.} 9114\label{\detokenize{appdev/refs/api/krb5_salttype_to_string::doc}}\label{\detokenize{appdev/refs/api/krb5_salttype_to_string:krb5-salttype-to-string-convert-a-salt-type-to-a-string}}\index{krb5\_salttype\_to\_string (C function)} 9115 9116\begin{fulllineitems} 9117\phantomsection\label{\detokenize{appdev/refs/api/krb5_salttype_to_string:c.krb5_salttype_to_string}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_salttype\_to\_string}}{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}\sphinxstyleemphasis{ salttype}, char *\sphinxstyleemphasis{ buffer}, size\_t\sphinxstyleemphasis{ buflen}}{} 9118\end{fulllineitems} 9119 9120\begin{quote}\begin{description} 9121\item[{param}] \leavevmode 9122\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{salttype} - Salttype to convert 9123 9124\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to receive the converted string 9125 9126\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Storage available in \sphinxstyleemphasis{buffer} 9127 9128\end{description}\end{quote} 9129\begin{quote}\begin{description} 9130\item[{retval}] \leavevmode\begin{itemize} 9131\item {} 91320 Success; otherwise - Kerberos error codes 9133 9134\end{itemize} 9135 9136\end{description}\end{quote} 9137 9138 9139\subsubsection{krb5\_server\_decrypt\_ticket\_keytab - Decrypt a ticket using the specified key table.} 9140\label{\detokenize{appdev/refs/api/krb5_server_decrypt_ticket_keytab:krb5-server-decrypt-ticket-keytab-decrypt-a-ticket-using-the-specified-key-table}}\label{\detokenize{appdev/refs/api/krb5_server_decrypt_ticket_keytab::doc}}\index{krb5\_server\_decrypt\_ticket\_keytab (C function)} 9141 9142\begin{fulllineitems} 9143\phantomsection\label{\detokenize{appdev/refs/api/krb5_server_decrypt_ticket_keytab:c.krb5_server_decrypt_ticket_keytab}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_server\_decrypt\_ticket\_keytab}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ kt}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} *\sphinxstyleemphasis{ ticket}}{} 9144\end{fulllineitems} 9145 9146\begin{quote}\begin{description} 9147\item[{param}] \leavevmode 9148\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 9149 9150\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{kt} - Key table 9151 9152\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ticket} - Ticket to be decrypted 9153 9154\end{description}\end{quote} 9155\begin{quote}\begin{description} 9156\item[{retval}] \leavevmode\begin{itemize} 9157\item {} 91580 Success; otherwise - Kerberos error codes 9159 9160\end{itemize} 9161 9162\end{description}\end{quote} 9163 9164This function takes a \sphinxstyleemphasis{ticket} as input and decrypts it using key data from \sphinxstyleemphasis{kt} . The result is placed into \sphinxstyleemphasis{ticket-\textgreater{}enc\_part2} . 9165 9166 9167\subsubsection{krb5\_set\_default\_tgs\_enctypes - Set default TGS encryption types in a krb5\_context structure.} 9168\label{\detokenize{appdev/refs/api/krb5_set_default_tgs_enctypes::doc}}\label{\detokenize{appdev/refs/api/krb5_set_default_tgs_enctypes:krb5-set-default-tgs-enctypes-set-default-tgs-encryption-types-in-a-krb5-context-structure}}\index{krb5\_set\_default\_tgs\_enctypes (C function)} 9169 9170\begin{fulllineitems} 9171\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_default_tgs_enctypes:c.krb5_set_default_tgs_enctypes}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_set\_default\_tgs\_enctypes}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} *\sphinxstyleemphasis{ etypes}}{} 9172\end{fulllineitems} 9173 9174\begin{quote}\begin{description} 9175\item[{param}] \leavevmode 9176\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 9177 9178\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{etypes} - Encryption type(s) to set 9179 9180\end{description}\end{quote} 9181\begin{quote}\begin{description} 9182\item[{retval}] \leavevmode\begin{itemize} 9183\item {} 91840 Success 9185 9186\item {} 9187KRB5\_PROG\_ETYPE\_NOSUPP Program lacks support for encryption type 9188 9189\end{itemize} 9190 9191\item[{return}] \leavevmode\begin{itemize} 9192\item {} 9193Kerberos error codes 9194 9195\end{itemize} 9196 9197\end{description}\end{quote} 9198 9199This function sets the default enctype list for TGS requests made using \sphinxstyleemphasis{context} to \sphinxstyleemphasis{etypes} . 9200 9201\begin{sphinxadmonition}{note}{Note:} 9202This overrides the default list (from config file or built-in). 9203\end{sphinxadmonition} 9204 9205 9206\subsubsection{krb5\_set\_error\_message - Set an extended error message for an error code.} 9207\label{\detokenize{appdev/refs/api/krb5_set_error_message::doc}}\label{\detokenize{appdev/refs/api/krb5_set_error_message:krb5-set-error-message-set-an-extended-error-message-for-an-error-code}}\index{krb5\_set\_error\_message (C function)} 9208 9209\begin{fulllineitems} 9210\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_error_message:c.krb5_set_error_message}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_set\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}}\sphinxstyleemphasis{ code}, const char *\sphinxstyleemphasis{ fmt}, ...}{} 9211\end{fulllineitems} 9212 9213\begin{quote}\begin{description} 9214\item[{param}] \leavevmode 9215\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 9216 9217\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code 9218 9219\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} - Error string for the error code 9220 9221\end{description}\end{quote} 9222 9223 9224\subsubsection{krb5\_set\_kdc\_recv\_hook - Set a KDC post-receive hook function.} 9225\label{\detokenize{appdev/refs/api/krb5_set_kdc_recv_hook::doc}}\label{\detokenize{appdev/refs/api/krb5_set_kdc_recv_hook:krb5-set-kdc-recv-hook-set-a-kdc-post-receive-hook-function}}\index{krb5\_set\_kdc\_recv\_hook (C function)} 9226 9227\begin{fulllineitems} 9228\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_kdc_recv_hook:c.krb5_set_kdc_recv_hook}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_set\_kdc\_recv\_hook}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_post_recv_fn:c.krb5_post_recv_fn}]{\sphinxcrossref{krb5\_post\_recv\_fn}}}\sphinxstyleemphasis{ recv\_hook}, void *\sphinxstyleemphasis{ data}}{} 9229\end{fulllineitems} 9230 9231\begin{quote}\begin{description} 9232\item[{param}] \leavevmode 9233\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - The library context. 9234 9235\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{recv\_hook} - Hook function (or NULL to disable the hook) 9236 9237\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Callback data to be passed to \sphinxstyleemphasis{recv\_hook} 9238 9239\end{description}\end{quote} 9240\begin{quote} 9241 9242\sphinxstyleemphasis{recv\_hook} will be called after a reply is received from a KDC during a call to a library function such as {\hyperref[\detokenize{appdev/refs/api/krb5_get_credentials:c.krb5_get_credentials}]{\sphinxcrossref{\sphinxcode{krb5\_get\_credentials()}}}} . The hook function may inspect or override the reply. This hook will not be executed if the pre-send hook returns a synthetic reply. 9243\end{quote} 9244 9245\begin{sphinxadmonition}{note}{Note:} 9246New in 1.15 9247\end{sphinxadmonition} 9248 9249 9250\subsubsection{krb5\_set\_kdc\_send\_hook - Set a KDC pre-send hook function.} 9251\label{\detokenize{appdev/refs/api/krb5_set_kdc_send_hook:krb5-set-kdc-send-hook-set-a-kdc-pre-send-hook-function}}\label{\detokenize{appdev/refs/api/krb5_set_kdc_send_hook::doc}}\index{krb5\_set\_kdc\_send\_hook (C function)} 9252 9253\begin{fulllineitems} 9254\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_kdc_send_hook:c.krb5_set_kdc_send_hook}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_set\_kdc\_send\_hook}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pre_send_fn:c.krb5_pre_send_fn}]{\sphinxcrossref{krb5\_pre\_send\_fn}}}\sphinxstyleemphasis{ send\_hook}, void *\sphinxstyleemphasis{ data}}{} 9255\end{fulllineitems} 9256 9257\begin{quote}\begin{description} 9258\item[{param}] \leavevmode 9259\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 9260 9261\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{send\_hook} - Hook function (or NULL to disable the hook) 9262 9263\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Callback data to be passed to \sphinxstyleemphasis{send\_hook} 9264 9265\end{description}\end{quote} 9266\begin{quote} 9267 9268\sphinxstyleemphasis{send\_hook} will be called before messages are sent to KDCs by library functions such as {\hyperref[\detokenize{appdev/refs/api/krb5_get_credentials:c.krb5_get_credentials}]{\sphinxcrossref{\sphinxcode{krb5\_get\_credentials()}}}} . The hook function may inspect, override, or synthesize its own reply to the message. 9269\end{quote} 9270 9271\begin{sphinxadmonition}{note}{Note:} 9272New in 1.15 9273\end{sphinxadmonition} 9274 9275 9276\subsubsection{krb5\_set\_real\_time - Set time offset field in a krb5\_context structure.} 9277\label{\detokenize{appdev/refs/api/krb5_set_real_time::doc}}\label{\detokenize{appdev/refs/api/krb5_set_real_time:krb5-set-real-time-set-time-offset-field-in-a-krb5-context-structure}}\index{krb5\_set\_real\_time (C function)} 9278 9279\begin{fulllineitems} 9280\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_real_time:c.krb5_set_real_time}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_set\_real\_time}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}\sphinxstyleemphasis{ seconds}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}\sphinxstyleemphasis{ microseconds}}{} 9281\end{fulllineitems} 9282 9283\begin{quote}\begin{description} 9284\item[{param}] \leavevmode 9285\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 9286 9287\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{seconds} - Real time, seconds portion 9288 9289\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{microseconds} - Real time, microseconds portion 9290 9291\end{description}\end{quote} 9292\begin{quote}\begin{description} 9293\item[{retval}] \leavevmode\begin{itemize} 9294\item {} 92950 Success; otherwise - Kerberos error codes 9296 9297\end{itemize} 9298 9299\end{description}\end{quote} 9300 9301This function sets the time offset in \sphinxstyleemphasis{context} to the difference between the system time and the real time as determined by \sphinxstyleemphasis{seconds} and \sphinxstyleemphasis{microseconds} . 9302 9303 9304\subsubsection{krb5\_string\_to\_cksumtype - Convert a string to a checksum type.} 9305\label{\detokenize{appdev/refs/api/krb5_string_to_cksumtype:krb5-string-to-cksumtype-convert-a-string-to-a-checksum-type}}\label{\detokenize{appdev/refs/api/krb5_string_to_cksumtype::doc}}\index{krb5\_string\_to\_cksumtype (C function)} 9306 9307\begin{fulllineitems} 9308\phantomsection\label{\detokenize{appdev/refs/api/krb5_string_to_cksumtype:c.krb5_string_to_cksumtype}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_string\_to\_cksumtype}}{char *\sphinxstyleemphasis{ string}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}} *\sphinxstyleemphasis{ cksumtypep}}{} 9309\end{fulllineitems} 9310 9311\begin{quote}\begin{description} 9312\item[{param}] \leavevmode 9313\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to be converted 9314 9315\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cksumtypep} - Checksum type to be filled in 9316 9317\end{description}\end{quote} 9318\begin{quote}\begin{description} 9319\item[{retval}] \leavevmode\begin{itemize} 9320\item {} 93210 Success; otherwise - EINVAL 9322 9323\end{itemize} 9324 9325\end{description}\end{quote} 9326 9327 9328\subsubsection{krb5\_string\_to\_deltat - Convert a string to a delta time value.} 9329\label{\detokenize{appdev/refs/api/krb5_string_to_deltat::doc}}\label{\detokenize{appdev/refs/api/krb5_string_to_deltat:krb5-string-to-deltat-convert-a-string-to-a-delta-time-value}}\index{krb5\_string\_to\_deltat (C function)} 9330 9331\begin{fulllineitems} 9332\phantomsection\label{\detokenize{appdev/refs/api/krb5_string_to_deltat:c.krb5_string_to_deltat}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_string\_to\_deltat}}{char *\sphinxstyleemphasis{ string}, {\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{krb5\_deltat}}} *\sphinxstyleemphasis{ deltatp}}{} 9333\end{fulllineitems} 9334 9335\begin{quote}\begin{description} 9336\item[{param}] \leavevmode 9337\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to be converted 9338 9339\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{deltatp} - Delta time to be filled in 9340 9341\end{description}\end{quote} 9342\begin{quote}\begin{description} 9343\item[{retval}] \leavevmode\begin{itemize} 9344\item {} 93450 Success; otherwise - KRB5\_DELTAT\_BADFORMAT 9346 9347\end{itemize} 9348 9349\end{description}\end{quote} 9350 9351 9352\subsubsection{krb5\_string\_to\_enctype - Convert a string to an encryption type.} 9353\label{\detokenize{appdev/refs/api/krb5_string_to_enctype::doc}}\label{\detokenize{appdev/refs/api/krb5_string_to_enctype:krb5-string-to-enctype-convert-a-string-to-an-encryption-type}}\index{krb5\_string\_to\_enctype (C function)} 9354 9355\begin{fulllineitems} 9356\phantomsection\label{\detokenize{appdev/refs/api/krb5_string_to_enctype:c.krb5_string_to_enctype}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_string\_to\_enctype}}{char *\sphinxstyleemphasis{ string}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} *\sphinxstyleemphasis{ enctypep}}{} 9357\end{fulllineitems} 9358 9359\begin{quote}\begin{description} 9360\item[{param}] \leavevmode 9361\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to convert to an encryption type 9362 9363\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{enctypep} - Encryption type 9364 9365\end{description}\end{quote} 9366\begin{quote}\begin{description} 9367\item[{retval}] \leavevmode\begin{itemize} 9368\item {} 93690 Success; otherwise - EINVAL 9370 9371\end{itemize} 9372 9373\end{description}\end{quote} 9374 9375 9376\subsubsection{krb5\_string\_to\_salttype - Convert a string to a salt type.} 9377\label{\detokenize{appdev/refs/api/krb5_string_to_salttype:krb5-string-to-salttype-convert-a-string-to-a-salt-type}}\label{\detokenize{appdev/refs/api/krb5_string_to_salttype::doc}}\index{krb5\_string\_to\_salttype (C function)} 9378 9379\begin{fulllineitems} 9380\phantomsection\label{\detokenize{appdev/refs/api/krb5_string_to_salttype:c.krb5_string_to_salttype}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_string\_to\_salttype}}{char *\sphinxstyleemphasis{ string}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} *\sphinxstyleemphasis{ salttypep}}{} 9381\end{fulllineitems} 9382 9383\begin{quote}\begin{description} 9384\item[{param}] \leavevmode 9385\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to convert to an encryption type 9386 9387\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{salttypep} - Salt type to be filled in 9388 9389\end{description}\end{quote} 9390\begin{quote}\begin{description} 9391\item[{retval}] \leavevmode\begin{itemize} 9392\item {} 93930 Success; otherwise - EINVAL 9394 9395\end{itemize} 9396 9397\end{description}\end{quote} 9398 9399 9400\subsubsection{krb5\_string\_to\_timestamp - Convert a string to a timestamp.} 9401\label{\detokenize{appdev/refs/api/krb5_string_to_timestamp::doc}}\label{\detokenize{appdev/refs/api/krb5_string_to_timestamp:krb5-string-to-timestamp-convert-a-string-to-a-timestamp}}\index{krb5\_string\_to\_timestamp (C function)} 9402 9403\begin{fulllineitems} 9404\phantomsection\label{\detokenize{appdev/refs/api/krb5_string_to_timestamp:c.krb5_string_to_timestamp}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_string\_to\_timestamp}}{char *\sphinxstyleemphasis{ string}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} *\sphinxstyleemphasis{ timestampp}}{} 9405\end{fulllineitems} 9406 9407\begin{quote}\begin{description} 9408\item[{param}] \leavevmode 9409\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to be converted 9410 9411\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{timestampp} - Pointer to timestamp 9412 9413\end{description}\end{quote} 9414\begin{quote}\begin{description} 9415\item[{retval}] \leavevmode\begin{itemize} 9416\item {} 94170 Success; otherwise - EINVAL 9418 9419\end{itemize} 9420 9421\end{description}\end{quote} 9422 9423 9424\subsubsection{krb5\_timeofday - Retrieve the current time with context specific time offset adjustment.} 9425\label{\detokenize{appdev/refs/api/krb5_timeofday:krb5-timeofday-retrieve-the-current-time-with-context-specific-time-offset-adjustment}}\label{\detokenize{appdev/refs/api/krb5_timeofday::doc}}\index{krb5\_timeofday (C function)} 9426 9427\begin{fulllineitems} 9428\phantomsection\label{\detokenize{appdev/refs/api/krb5_timeofday:c.krb5_timeofday}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_timeofday}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} *\sphinxstyleemphasis{ timeret}}{} 9429\end{fulllineitems} 9430 9431\begin{quote}\begin{description} 9432\item[{param}] \leavevmode 9433\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 9434 9435\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{timeret} - Timestamp to fill in 9436 9437\end{description}\end{quote} 9438\begin{quote}\begin{description} 9439\item[{retval}] \leavevmode\begin{itemize} 9440\item {} 94410 Success 9442 9443\end{itemize} 9444 9445\item[{return}] \leavevmode\begin{itemize} 9446\item {} 9447Kerberos error codes 9448 9449\end{itemize} 9450 9451\end{description}\end{quote} 9452 9453This function retrieves the system time of day with the context specific time offset adjustment. 9454 9455 9456\subsubsection{krb5\_timestamp\_to\_sfstring - Convert a timestamp to a string, with optional output padding.} 9457\label{\detokenize{appdev/refs/api/krb5_timestamp_to_sfstring:krb5-timestamp-to-sfstring-convert-a-timestamp-to-a-string-with-optional-output-padding}}\label{\detokenize{appdev/refs/api/krb5_timestamp_to_sfstring::doc}}\index{krb5\_timestamp\_to\_sfstring (C function)} 9458 9459\begin{fulllineitems} 9460\phantomsection\label{\detokenize{appdev/refs/api/krb5_timestamp_to_sfstring:c.krb5_timestamp_to_sfstring}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_timestamp\_to\_sfstring}}{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}\sphinxstyleemphasis{ timestamp}, char *\sphinxstyleemphasis{ buffer}, size\_t\sphinxstyleemphasis{ buflen}, char *\sphinxstyleemphasis{ pad}}{} 9461\end{fulllineitems} 9462 9463\begin{quote}\begin{description} 9464\item[{param}] \leavevmode 9465\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{timestamp} - Timestamp to convert 9466 9467\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to hold the converted timestamp 9468 9469\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Length of buffer 9470 9471\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pad} - Optional value to pad \sphinxstyleemphasis{buffer} if converted timestamp does not fill it 9472 9473\end{description}\end{quote} 9474\begin{quote}\begin{description} 9475\item[{retval}] \leavevmode\begin{itemize} 9476\item {} 94770 Success; otherwise - Kerberos error codes 9478 9479\end{itemize} 9480 9481\end{description}\end{quote} 9482 9483If \sphinxstyleemphasis{pad} is not NULL, \sphinxstyleemphasis{buffer} is padded out to \sphinxstyleemphasis{buflen} - 1 characters with the value of * \sphinxstyleemphasis{pad} . 9484 9485 9486\subsubsection{krb5\_timestamp\_to\_string - Convert a timestamp to a string.} 9487\label{\detokenize{appdev/refs/api/krb5_timestamp_to_string::doc}}\label{\detokenize{appdev/refs/api/krb5_timestamp_to_string:krb5-timestamp-to-string-convert-a-timestamp-to-a-string}}\index{krb5\_timestamp\_to\_string (C function)} 9488 9489\begin{fulllineitems} 9490\phantomsection\label{\detokenize{appdev/refs/api/krb5_timestamp_to_string:c.krb5_timestamp_to_string}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_timestamp\_to\_string}}{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}\sphinxstyleemphasis{ timestamp}, char *\sphinxstyleemphasis{ buffer}, size\_t\sphinxstyleemphasis{ buflen}}{} 9491\end{fulllineitems} 9492 9493\begin{quote}\begin{description} 9494\item[{param}] \leavevmode 9495\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{timestamp} - Timestamp to convert 9496 9497\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to hold converted timestamp 9498 9499\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Storage available in \sphinxstyleemphasis{buffer} 9500 9501\end{description}\end{quote} 9502\begin{quote}\begin{description} 9503\item[{retval}] \leavevmode\begin{itemize} 9504\item {} 95050 Success; otherwise - Kerberos error codes 9506 9507\end{itemize} 9508 9509\end{description}\end{quote} 9510 9511The string is returned in the locale’s appropriate date and time representation. 9512 9513 9514\subsubsection{krb5\_tkt\_creds\_free - Free a TGS request context.} 9515\label{\detokenize{appdev/refs/api/krb5_tkt_creds_free::doc}}\label{\detokenize{appdev/refs/api/krb5_tkt_creds_free:krb5-tkt-creds-free-free-a-tgs-request-context}}\index{krb5\_tkt\_creds\_free (C function)} 9516 9517\begin{fulllineitems} 9518\phantomsection\label{\detokenize{appdev/refs/api/krb5_tkt_creds_free:c.krb5_tkt_creds_free}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_tkt\_creds\_free}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}]{\sphinxcrossref{krb5\_tkt\_creds\_context}}}\sphinxstyleemphasis{ ctx}}{} 9519\end{fulllineitems} 9520 9521\begin{quote}\begin{description} 9522\item[{param}] \leavevmode 9523\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 9524 9525\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - TGS request context 9526 9527\end{description}\end{quote} 9528 9529\begin{sphinxadmonition}{note}{Note:} 9530New in 1.9 9531\end{sphinxadmonition} 9532 9533 9534\subsubsection{krb5\_tkt\_creds\_get - Synchronously obtain credentials using a TGS request context.} 9535\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get:krb5-tkt-creds-get-synchronously-obtain-credentials-using-a-tgs-request-context}}\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get::doc}}\index{krb5\_tkt\_creds\_get (C function)} 9536 9537\begin{fulllineitems} 9538\phantomsection\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get:c.krb5_tkt_creds_get}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_tkt\_creds\_get}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}]{\sphinxcrossref{krb5\_tkt\_creds\_context}}}\sphinxstyleemphasis{ ctx}}{} 9539\end{fulllineitems} 9540 9541\begin{quote}\begin{description} 9542\item[{param}] \leavevmode 9543\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 9544 9545\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - TGS request context 9546 9547\end{description}\end{quote} 9548\begin{quote}\begin{description} 9549\item[{retval}] \leavevmode\begin{itemize} 9550\item {} 95510 Success; otherwise - Kerberos error codes 9552 9553\end{itemize} 9554 9555\end{description}\end{quote} 9556 9557This function synchronously obtains credentials using a context created by {\hyperref[\detokenize{appdev/refs/api/krb5_tkt_creds_init:c.krb5_tkt_creds_init}]{\sphinxcrossref{\sphinxcode{krb5\_tkt\_creds\_init()}}}} . On successful return, the credentials can be retrieved with {\hyperref[\detokenize{appdev/refs/api/krb5_tkt_creds_get_creds:c.krb5_tkt_creds_get_creds}]{\sphinxcrossref{\sphinxcode{krb5\_tkt\_creds\_get\_creds()}}}} . 9558 9559\begin{sphinxadmonition}{note}{Note:} 9560New in 1.9 9561\end{sphinxadmonition} 9562 9563 9564\subsubsection{krb5\_tkt\_creds\_get\_creds - Retrieve acquired credentials from a TGS request context.} 9565\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get_creds:krb5-tkt-creds-get-creds-retrieve-acquired-credentials-from-a-tgs-request-context}}\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get_creds::doc}}\index{krb5\_tkt\_creds\_get\_creds (C function)} 9566 9567\begin{fulllineitems} 9568\phantomsection\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get_creds:c.krb5_tkt_creds_get_creds}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_tkt\_creds\_get\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}]{\sphinxcrossref{krb5\_tkt\_creds\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}}{} 9569\end{fulllineitems} 9570 9571\begin{quote}\begin{description} 9572\item[{param}] \leavevmode 9573\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 9574 9575\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - TGS request context 9576 9577\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - Acquired credentials 9578 9579\end{description}\end{quote} 9580\begin{quote}\begin{description} 9581\item[{retval}] \leavevmode\begin{itemize} 9582\item {} 95830 Success; otherwise - Kerberos error codes 9584 9585\end{itemize} 9586 9587\end{description}\end{quote} 9588 9589This function copies the acquired initial credentials from \sphinxstyleemphasis{ctx} into \sphinxstyleemphasis{creds} , after the successful completion of {\hyperref[\detokenize{appdev/refs/api/krb5_tkt_creds_get:c.krb5_tkt_creds_get}]{\sphinxcrossref{\sphinxcode{krb5\_tkt\_creds\_get()}}}} or {\hyperref[\detokenize{appdev/refs/api/krb5_tkt_creds_step:c.krb5_tkt_creds_step}]{\sphinxcrossref{\sphinxcode{krb5\_tkt\_creds\_step()}}}} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_cred_contents:c.krb5_free_cred_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_cred\_contents()}}}} to free \sphinxstyleemphasis{creds} when it is no longer needed. 9590 9591\begin{sphinxadmonition}{note}{Note:} 9592New in 1.9 9593\end{sphinxadmonition} 9594 9595 9596\subsubsection{krb5\_tkt\_creds\_get\_times - Retrieve ticket times from a TGS request context.} 9597\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get_times:krb5-tkt-creds-get-times-retrieve-ticket-times-from-a-tgs-request-context}}\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get_times::doc}}\index{krb5\_tkt\_creds\_get\_times (C function)} 9598 9599\begin{fulllineitems} 9600\phantomsection\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get_times:c.krb5_tkt_creds_get_times}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_tkt\_creds\_get\_times}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}]{\sphinxcrossref{krb5\_tkt\_creds\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{krb5\_ticket\_times}}} *\sphinxstyleemphasis{ times}}{} 9601\end{fulllineitems} 9602 9603\begin{quote}\begin{description} 9604\item[{param}] \leavevmode 9605\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 9606 9607\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - TGS request context 9608 9609\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{times} - Ticket times for acquired credentials 9610 9611\end{description}\end{quote} 9612\begin{quote}\begin{description} 9613\item[{retval}] \leavevmode\begin{itemize} 9614\item {} 96150 Success; otherwise - Kerberos error codes 9616 9617\end{itemize} 9618 9619\end{description}\end{quote} 9620 9621The TGS request context must have completed obtaining credentials via either {\hyperref[\detokenize{appdev/refs/api/krb5_tkt_creds_get:c.krb5_tkt_creds_get}]{\sphinxcrossref{\sphinxcode{krb5\_tkt\_creds\_get()}}}} or {\hyperref[\detokenize{appdev/refs/api/krb5_tkt_creds_step:c.krb5_tkt_creds_step}]{\sphinxcrossref{\sphinxcode{krb5\_tkt\_creds\_step()}}}} . 9622 9623\begin{sphinxadmonition}{note}{Note:} 9624New in 1.9 9625\end{sphinxadmonition} 9626 9627 9628\subsubsection{krb5\_tkt\_creds\_init - Create a context to get credentials from a KDC’s Ticket Granting Service.} 9629\label{\detokenize{appdev/refs/api/krb5_tkt_creds_init:krb5-tkt-creds-init-create-a-context-to-get-credentials-from-a-kdc-s-ticket-granting-service}}\label{\detokenize{appdev/refs/api/krb5_tkt_creds_init::doc}}\index{krb5\_tkt\_creds\_init (C function)} 9630 9631\begin{fulllineitems} 9632\phantomsection\label{\detokenize{appdev/refs/api/krb5_tkt_creds_init:c.krb5_tkt_creds_init}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_tkt\_creds\_init}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ options}, {\hyperref[\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}]{\sphinxcrossref{krb5\_tkt\_creds\_context}}} *\sphinxstyleemphasis{ ctx}}{} 9633\end{fulllineitems} 9634 9635\begin{quote}\begin{description} 9636\item[{param}] \leavevmode 9637\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 9638 9639\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache handle 9640 9641\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Input credentials 9642 9643\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{options} - \sphinxcode{KRB5\_GC} options for this request. 9644 9645\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ctx} - New TGS request context 9646 9647\end{description}\end{quote} 9648\begin{quote}\begin{description} 9649\item[{retval}] \leavevmode\begin{itemize} 9650\item {} 96510 Success; otherwise - Kerberos error codes 9652 9653\end{itemize} 9654 9655\end{description}\end{quote} 9656 9657This function prepares to obtain credentials matching \sphinxstyleemphasis{creds} , either by retrieving them from \sphinxstyleemphasis{ccache} or by making requests to ticket-granting services beginning with a ticket-granting ticket for the client principal’s realm. 9658 9659The resulting TGS acquisition context can be used asynchronously with {\hyperref[\detokenize{appdev/refs/api/krb5_tkt_creds_step:c.krb5_tkt_creds_step}]{\sphinxcrossref{\sphinxcode{krb5\_tkt\_creds\_step()}}}} or synchronously with {\hyperref[\detokenize{appdev/refs/api/krb5_tkt_creds_get:c.krb5_tkt_creds_get}]{\sphinxcrossref{\sphinxcode{krb5\_tkt\_creds\_get()}}}} . See also {\hyperref[\detokenize{appdev/refs/api/krb5_get_credentials:c.krb5_get_credentials}]{\sphinxcrossref{\sphinxcode{krb5\_get\_credentials()}}}} for synchronous use. 9660 9661Use {\hyperref[\detokenize{appdev/refs/api/krb5_tkt_creds_free:c.krb5_tkt_creds_free}]{\sphinxcrossref{\sphinxcode{krb5\_tkt\_creds\_free()}}}} to free \sphinxstyleemphasis{ctx} when it is no longer needed. 9662 9663\begin{sphinxadmonition}{note}{Note:} 9664New in 1.9 9665\end{sphinxadmonition} 9666 9667 9668\subsubsection{krb5\_tkt\_creds\_step - Get the next KDC request in a TGS exchange.} 9669\label{\detokenize{appdev/refs/api/krb5_tkt_creds_step:krb5-tkt-creds-step-get-the-next-kdc-request-in-a-tgs-exchange}}\label{\detokenize{appdev/refs/api/krb5_tkt_creds_step::doc}}\index{krb5\_tkt\_creds\_step (C function)} 9670 9671\begin{fulllineitems} 9672\phantomsection\label{\detokenize{appdev/refs/api/krb5_tkt_creds_step:c.krb5_tkt_creds_step}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_tkt\_creds\_step}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}]{\sphinxcrossref{krb5\_tkt\_creds\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ in}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ out}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ realm}, unsigned int *\sphinxstyleemphasis{ flags}}{} 9673\end{fulllineitems} 9674 9675\begin{quote}\begin{description} 9676\item[{param}] \leavevmode 9677\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 9678 9679\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - TGS request context 9680 9681\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in} - KDC response (empty on the first call) 9682 9683\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Next KDC request 9684 9685\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realm} - Realm for next KDC request 9686 9687\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{flags} - Output flags 9688 9689\end{description}\end{quote} 9690\begin{quote}\begin{description} 9691\item[{retval}] \leavevmode\begin{itemize} 9692\item {} 96930 Success; otherwise - Kerberos error codes 9694 9695\end{itemize} 9696 9697\end{description}\end{quote} 9698 9699This function constructs the next KDC request for a TGS exchange, allowing the caller to control the transport of KDC requests and replies. On the first call, \sphinxstyleemphasis{in} should be set to an empty buffer; on subsequent calls, it should be set to the KDC’s reply to the previous request. 9700 9701If more requests are needed, \sphinxstyleemphasis{flags} will be set to {\hyperref[\detokenize{appdev/refs/macros/KRB5_TKT_CREDS_STEP_FLAG_CONTINUE:KRB5_TKT_CREDS_STEP_FLAG_CONTINUE}]{\sphinxcrossref{\sphinxcode{KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE}}}} and the next request will be placed in \sphinxstyleemphasis{out} . If no more requests are needed, \sphinxstyleemphasis{flags} will not contain {\hyperref[\detokenize{appdev/refs/macros/KRB5_TKT_CREDS_STEP_FLAG_CONTINUE:KRB5_TKT_CREDS_STEP_FLAG_CONTINUE}]{\sphinxcrossref{\sphinxcode{KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE}}}} and \sphinxstyleemphasis{out} will be empty. 9702 9703If this function returns \sphinxstylestrong{KRB5KRB\_ERR\_RESPONSE\_TOO\_BIG} , the caller should transmit the next request using TCP rather than UDP. If this function returns any other error, the TGS exchange has failed. 9704 9705\begin{sphinxadmonition}{note}{Note:} 9706New in 1.9 9707\end{sphinxadmonition} 9708 9709 9710\subsubsection{krb5\_verify\_init\_creds - Verify initial credentials against a keytab.} 9711\label{\detokenize{appdev/refs/api/krb5_verify_init_creds:krb5-verify-init-creds-verify-initial-credentials-against-a-keytab}}\label{\detokenize{appdev/refs/api/krb5_verify_init_creds::doc}}\index{krb5\_verify\_init\_creds (C function)} 9712 9713\begin{fulllineitems} 9714\phantomsection\label{\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_verify\_init\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ server}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}} *\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt}]{\sphinxcrossref{krb5\_verify\_init\_creds\_opt}}} *\sphinxstyleemphasis{ options}}{} 9715\end{fulllineitems} 9716 9717\begin{quote}\begin{description} 9718\item[{param}] \leavevmode 9719\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 9720 9721\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Initial credentials to be verified 9722 9723\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Server principal (or NULL) 9724 9725\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table (NULL to use default keytab) 9726 9727\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache for fetched creds (or NULL) 9728 9729\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{options} - Verification options (NULL for default options) 9730 9731\end{description}\end{quote} 9732\begin{quote}\begin{description} 9733\item[{retval}] \leavevmode\begin{itemize} 9734\item {} 97350 Success; otherwise - Kerberos error codes 9736 9737\end{itemize} 9738 9739\end{description}\end{quote} 9740 9741This function attempts to verify that \sphinxstyleemphasis{creds} were obtained from a KDC with knowledge of a key in \sphinxstyleemphasis{keytab} , or the default keytab if \sphinxstyleemphasis{keytab} is NULL. If \sphinxstyleemphasis{server} is provided, the highest-kvno key entry for that principal name is used to verify the credentials; otherwise, all unique”host”service principals in the keytab are tried. 9742 9743If the specified keytab does not exist, or is empty, or cannot be read, or does not contain an entry for \sphinxstyleemphasis{server} , then credential verification may be skipped unless configuration demands that it succeed. The caller can control this behavior by providing a verification options structure; see {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_init:c.krb5_verify_init_creds_opt_init}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds\_opt\_init()}}}} and {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_set_ap_req_nofail:c.krb5_verify_init_creds_opt_set_ap_req_nofail}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds\_opt\_set\_ap\_req\_nofail()}}}} . 9744 9745If \sphinxstyleemphasis{ccache} is NULL, any additional credentials fetched during the verification process will be destroyed. If \sphinxstyleemphasis{ccache} points to NULL, a memory ccache will be created for the additional credentials and returned in \sphinxstyleemphasis{ccache} . If \sphinxstyleemphasis{ccache} points to a valid credential cache handle, the additional credentials will be stored in that cache. 9746 9747 9748\subsubsection{krb5\_verify\_init\_creds\_opt\_init - Initialize a credential verification options structure.} 9749\label{\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_init:krb5-verify-init-creds-opt-init-initialize-a-credential-verification-options-structure}}\label{\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_init::doc}}\index{krb5\_verify\_init\_creds\_opt\_init (C function)} 9750 9751\begin{fulllineitems} 9752\phantomsection\label{\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_init:c.krb5_verify_init_creds_opt_init}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_verify\_init\_creds\_opt\_init}}{{\hyperref[\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt}]{\sphinxcrossref{krb5\_verify\_init\_creds\_opt}}} *\sphinxstyleemphasis{ k5\_vic\_options}}{} 9753\end{fulllineitems} 9754 9755\begin{quote}\begin{description} 9756\item[{param}] \leavevmode 9757\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k5\_vic\_options} - Verification options structure 9758 9759\end{description}\end{quote} 9760 9761 9762\subsubsection{krb5\_verify\_init\_creds\_opt\_set\_ap\_req\_nofail - Set whether credential verification is required.} 9763\label{\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_set_ap_req_nofail::doc}}\label{\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_set_ap_req_nofail:krb5-verify-init-creds-opt-set-ap-req-nofail-set-whether-credential-verification-is-required}}\index{krb5\_verify\_init\_creds\_opt\_set\_ap\_req\_nofail (C function)} 9764 9765\begin{fulllineitems} 9766\phantomsection\label{\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_set_ap_req_nofail:c.krb5_verify_init_creds_opt_set_ap_req_nofail}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_verify\_init\_creds\_opt\_set\_ap\_req\_nofail}}{{\hyperref[\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt}]{\sphinxcrossref{krb5\_verify\_init\_creds\_opt}}} *\sphinxstyleemphasis{ k5\_vic\_options}, int\sphinxstyleemphasis{ ap\_req\_nofail}}{} 9767\end{fulllineitems} 9768 9769\begin{quote}\begin{description} 9770\item[{param}] \leavevmode 9771\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k5\_vic\_options} - Verification options structure 9772 9773\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_nofail} - Whether to require successful verification 9774 9775\end{description}\end{quote} 9776 9777This function determines how {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds()}}}} behaves if no keytab information is available. If \sphinxstyleemphasis{ap\_req\_nofail} is \sphinxstylestrong{FALSE} , verification will be skipped in this case and {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds()}}}} will return successfully. If \sphinxstyleemphasis{ap\_req\_nofail} is \sphinxstylestrong{TRUE} , {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds()}}}} will not return successfully unless verification can be performed. 9778 9779If this function is not used, the behavior of {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds()}}}} is determined through configuration. 9780 9781 9782\subsubsection{krb5\_vprepend\_error\_message - Add a prefix to the message for an error code using a va\_list.} 9783\label{\detokenize{appdev/refs/api/krb5_vprepend_error_message::doc}}\label{\detokenize{appdev/refs/api/krb5_vprepend_error_message:krb5-vprepend-error-message-add-a-prefix-to-the-message-for-an-error-code-using-a-va-list}}\index{krb5\_vprepend\_error\_message (C function)} 9784 9785\begin{fulllineitems} 9786\phantomsection\label{\detokenize{appdev/refs/api/krb5_vprepend_error_message:c.krb5_vprepend_error_message}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_vprepend\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}}\sphinxstyleemphasis{ code}, const char *\sphinxstyleemphasis{ fmt}, va\_list\sphinxstyleemphasis{ args}}{} 9787\end{fulllineitems} 9788 9789\begin{quote}\begin{description} 9790\item[{param}] \leavevmode 9791\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 9792 9793\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code 9794 9795\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} - Format string for error message prefix 9796 9797\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{args} - List of vprintf(3) style arguments 9798 9799\end{description}\end{quote} 9800 9801This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_prepend_error_message:c.krb5_prepend_error_message}]{\sphinxcrossref{\sphinxcode{krb5\_prepend\_error\_message()}}}} , but uses a va\_list instead of variadic arguments. 9802 9803 9804\subsubsection{krb5\_vset\_error\_message - Set an extended error message for an error code using a va\_list.} 9805\label{\detokenize{appdev/refs/api/krb5_vset_error_message:krb5-vset-error-message-set-an-extended-error-message-for-an-error-code-using-a-va-list}}\label{\detokenize{appdev/refs/api/krb5_vset_error_message::doc}}\index{krb5\_vset\_error\_message (C function)} 9806 9807\begin{fulllineitems} 9808\phantomsection\label{\detokenize{appdev/refs/api/krb5_vset_error_message:c.krb5_vset_error_message}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_vset\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}}\sphinxstyleemphasis{ code}, const char *\sphinxstyleemphasis{ fmt}, va\_list\sphinxstyleemphasis{ args}}{} 9809\end{fulllineitems} 9810 9811\begin{quote}\begin{description} 9812\item[{param}] \leavevmode 9813\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 9814 9815\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code 9816 9817\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} - Error string for the error code 9818 9819\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{args} - List of vprintf(3) style arguments 9820 9821\end{description}\end{quote} 9822 9823 9824\subsubsection{krb5\_vwrap\_error\_message - Add a prefix to a different error code’s message using a va\_list.} 9825\label{\detokenize{appdev/refs/api/krb5_vwrap_error_message:krb5-vwrap-error-message-add-a-prefix-to-a-different-error-code-s-message-using-a-va-list}}\label{\detokenize{appdev/refs/api/krb5_vwrap_error_message::doc}}\index{krb5\_vwrap\_error\_message (C function)} 9826 9827\begin{fulllineitems} 9828\phantomsection\label{\detokenize{appdev/refs/api/krb5_vwrap_error_message:c.krb5_vwrap_error_message}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_vwrap\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}}\sphinxstyleemphasis{ old\_code}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}}\sphinxstyleemphasis{ code}, const char *\sphinxstyleemphasis{ fmt}, va\_list\sphinxstyleemphasis{ args}}{} 9829\end{fulllineitems} 9830 9831\begin{quote}\begin{description} 9832\item[{param}] \leavevmode 9833\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 9834 9835\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{old\_code} - Previous error code 9836 9837\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code 9838 9839\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} - Format string for error message prefix 9840 9841\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{args} - List of vprintf(3) style arguments 9842 9843\end{description}\end{quote} 9844 9845This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_wrap_error_message:c.krb5_wrap_error_message}]{\sphinxcrossref{\sphinxcode{krb5\_wrap\_error\_message()}}}} , but uses a va\_list instead of variadic arguments. 9846 9847 9848\subsubsection{krb5\_wrap\_error\_message - Add a prefix to a different error code’s message.} 9849\label{\detokenize{appdev/refs/api/krb5_wrap_error_message:krb5-wrap-error-message-add-a-prefix-to-a-different-error-code-s-message}}\label{\detokenize{appdev/refs/api/krb5_wrap_error_message::doc}}\index{krb5\_wrap\_error\_message (C function)} 9850 9851\begin{fulllineitems} 9852\phantomsection\label{\detokenize{appdev/refs/api/krb5_wrap_error_message:c.krb5_wrap_error_message}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_wrap\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}}\sphinxstyleemphasis{ old\_code}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}}\sphinxstyleemphasis{ code}, const char *\sphinxstyleemphasis{ fmt}, ...}{} 9853\end{fulllineitems} 9854 9855\begin{quote}\begin{description} 9856\item[{param}] \leavevmode 9857\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context 9858 9859\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{old\_code} - Previous error code 9860 9861\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code 9862 9863\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} - Format string for error message prefix 9864 9865\end{description}\end{quote} 9866 9867Format a message and prepend it to the message for \sphinxstyleemphasis{old\_code} . The prefix will be separated from the old message with a colon and space. Set the resulting message as the extended error message for \sphinxstyleemphasis{code} . 9868 9869 9870\subsection{Public interfaces that should not be called directly} 9871\label{\detokenize{appdev/refs/api/index:public-interfaces-that-should-not-be-called-directly}} 9872 9873\subsubsection{krb5\_c\_block\_size - Return cipher block size.} 9874\label{\detokenize{appdev/refs/api/krb5_c_block_size:krb5-c-block-size-return-cipher-block-size}}\label{\detokenize{appdev/refs/api/krb5_c_block_size::doc}}\index{krb5\_c\_block\_size (C function)} 9875 9876\begin{fulllineitems} 9877\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_block_size:c.krb5_c_block_size}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_block\_size}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, size\_t *\sphinxstyleemphasis{ blocksize}}{} 9878\end{fulllineitems} 9879 9880\begin{quote}\begin{description} 9881\item[{param}] \leavevmode 9882\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 9883 9884\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type 9885 9886\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{blocksize} - Block size for \sphinxstyleemphasis{enctype} 9887 9888\end{description}\end{quote} 9889\begin{quote}\begin{description} 9890\item[{retval}] \leavevmode\begin{itemize} 9891\item {} 98920 Success; otherwise - Kerberos error codes 9893 9894\end{itemize} 9895 9896\end{description}\end{quote} 9897 9898 9899\subsubsection{krb5\_c\_checksum\_length - Return the length of checksums for a checksum type.} 9900\label{\detokenize{appdev/refs/api/krb5_c_checksum_length:krb5-c-checksum-length-return-the-length-of-checksums-for-a-checksum-type}}\label{\detokenize{appdev/refs/api/krb5_c_checksum_length::doc}}\index{krb5\_c\_checksum\_length (C function)} 9901 9902\begin{fulllineitems} 9903\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_checksum_length:c.krb5_c_checksum_length}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_checksum\_length}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ cksumtype}, size\_t *\sphinxstyleemphasis{ length}}{} 9904\end{fulllineitems} 9905 9906\begin{quote}\begin{description} 9907\item[{param}] \leavevmode 9908\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 9909 9910\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type 9911 9912\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{length} - Checksum length 9913 9914\end{description}\end{quote} 9915\begin{quote}\begin{description} 9916\item[{retval}] \leavevmode\begin{itemize} 9917\item {} 99180 Success; otherwise - Kerberos error codes 9919 9920\end{itemize} 9921 9922\end{description}\end{quote} 9923 9924 9925\subsubsection{krb5\_c\_crypto\_length - Return a length of a message field specific to the encryption type.} 9926\label{\detokenize{appdev/refs/api/krb5_c_crypto_length:krb5-c-crypto-length-return-a-length-of-a-message-field-specific-to-the-encryption-type}}\label{\detokenize{appdev/refs/api/krb5_c_crypto_length::doc}}\index{krb5\_c\_crypto\_length (C function)} 9927 9928\begin{fulllineitems} 9929\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_crypto_length:c.krb5_c_crypto_length}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_crypto\_length}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_cryptotype:c.krb5_cryptotype}]{\sphinxcrossref{krb5\_cryptotype}}}\sphinxstyleemphasis{ type}, unsigned int *\sphinxstyleemphasis{ size}}{} 9930\end{fulllineitems} 9931 9932\begin{quote}\begin{description} 9933\item[{param}] \leavevmode 9934\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 9935 9936\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type 9937 9938\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - Type field (See \sphinxcode{KRB5\_CRYPTO\_TYPE} types) 9939 9940\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{size} - Length of the \sphinxstyleemphasis{type} specific to \sphinxstyleemphasis{enctype} 9941 9942\end{description}\end{quote} 9943\begin{quote}\begin{description} 9944\item[{retval}] \leavevmode\begin{itemize} 9945\item {} 99460 Success; otherwise - Kerberos error codes 9947 9948\end{itemize} 9949 9950\end{description}\end{quote} 9951 9952 9953\subsubsection{krb5\_c\_crypto\_length\_iov - Fill in lengths for header, trailer and padding in a IOV array.} 9954\label{\detokenize{appdev/refs/api/krb5_c_crypto_length_iov:krb5-c-crypto-length-iov-fill-in-lengths-for-header-trailer-and-padding-in-a-iov-array}}\label{\detokenize{appdev/refs/api/krb5_c_crypto_length_iov::doc}}\index{krb5\_c\_crypto\_length\_iov (C function)} 9955 9956\begin{fulllineitems} 9957\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_crypto_length_iov:c.krb5_c_crypto_length_iov}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_crypto\_length\_iov}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{krb5\_crypto\_iov}}} *\sphinxstyleemphasis{ data}, size\_t\sphinxstyleemphasis{ num\_data}}{} 9958\end{fulllineitems} 9959 9960\begin{quote}\begin{description} 9961\item[{param}] \leavevmode 9962\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 9963 9964\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type 9965 9966\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array 9967 9968\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data} 9969 9970\end{description}\end{quote} 9971\begin{quote}\begin{description} 9972\item[{retval}] \leavevmode\begin{itemize} 9973\item {} 99740 Success; otherwise - Kerberos error codes 9975 9976\end{itemize} 9977 9978\end{description}\end{quote} 9979 9980Padding is set to the actual padding required based on the provided \sphinxstyleemphasis{data} buffers. Typically this API is used after setting up the data buffers and {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY:KRB5_CRYPTO_TYPE_SIGN_ONLY}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}}}} buffers, but before actually allocating header, trailer and padding. 9981 9982 9983\subsubsection{krb5\_c\_decrypt - Decrypt data using a key (operates on keyblock).} 9984\label{\detokenize{appdev/refs/api/krb5_c_decrypt::doc}}\label{\detokenize{appdev/refs/api/krb5_c_decrypt:krb5-c-decrypt-decrypt-data-using-a-key-operates-on-keyblock}}\index{krb5\_c\_decrypt (C function)} 9985 9986\begin{fulllineitems} 9987\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_decrypt:c.krb5_c_decrypt}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_decrypt}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ cipher\_state}, const {\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ output}}{} 9988\end{fulllineitems} 9989 9990\begin{quote}\begin{description} 9991\item[{param}] \leavevmode 9992\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 9993 9994\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key 9995 9996\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types) 9997 9998\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed 9999 10000\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Encrypted data 10001 10002\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Decrypted data 10003 10004\end{description}\end{quote} 10005\begin{quote}\begin{description} 10006\item[{retval}] \leavevmode\begin{itemize} 10007\item {} 100080 Success; otherwise - Kerberos error codes 10009 10010\end{itemize} 10011 10012\end{description}\end{quote} 10013 10014This function decrypts the data block \sphinxstyleemphasis{input} and stores the output into \sphinxstyleemphasis{output} . The actual decryption key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the encryption type. If non-null, \sphinxstyleemphasis{cipher\_state} specifies the beginning state for the decryption operation, and is updated with the state to be passed as input to the next operation. 10015 10016\begin{sphinxadmonition}{note}{Note:} 10017The caller must initialize \sphinxstyleemphasis{output} and allocate at least enough space for the result. The usual practice is to allocate an output buffer as long as the ciphertext, and let {\hyperref[\detokenize{appdev/refs/api/krb5_c_decrypt:c.krb5_c_decrypt}]{\sphinxcrossref{\sphinxcode{krb5\_c\_decrypt()}}}} trim \sphinxstyleemphasis{output-\textgreater{}length} . For some enctypes, the resulting \sphinxstyleemphasis{output-\textgreater{}length} may include padding bytes. 10018\end{sphinxadmonition} 10019 10020 10021\subsubsection{krb5\_c\_decrypt\_iov - Decrypt data in place supporting AEAD (operates on keyblock).} 10022\label{\detokenize{appdev/refs/api/krb5_c_decrypt_iov:krb5-c-decrypt-iov-decrypt-data-in-place-supporting-aead-operates-on-keyblock}}\label{\detokenize{appdev/refs/api/krb5_c_decrypt_iov::doc}}\index{krb5\_c\_decrypt\_iov (C function)} 10023 10024\begin{fulllineitems} 10025\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_decrypt_iov:c.krb5_c_decrypt_iov}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_decrypt\_iov}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ keyblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ cipher\_state}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{krb5\_crypto\_iov}}} *\sphinxstyleemphasis{ data}, size\_t\sphinxstyleemphasis{ num\_data}}{} 10026\end{fulllineitems} 10027 10028\begin{quote}\begin{description} 10029\item[{param}] \leavevmode 10030\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10031 10032\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} - Encryption key 10033 10034\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types) 10035 10036\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed 10037 10038\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array. Modified in-place. 10039 10040\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data} 10041 10042\end{description}\end{quote} 10043\begin{quote}\begin{description} 10044\item[{retval}] \leavevmode\begin{itemize} 10045\item {} 100460 Success; otherwise - Kerberos error codes 10047 10048\end{itemize} 10049 10050\end{description}\end{quote} 10051 10052This function decrypts the data block \sphinxstyleemphasis{data} and stores the output in-place. The actual decryption key will be derived from \sphinxstyleemphasis{keyblock} and \sphinxstyleemphasis{usage} if key derivation is specified for the encryption type. If non-null, \sphinxstyleemphasis{cipher\_state} specifies the beginning state for the decryption operation, and is updated with the state to be passed as input to the next operation. The caller must allocate the right number of krb5\_crypto\_iov structures before calling into this API. 10053 10054 10055\sphinxstrong{See also:} 10056 10057 10058{\hyperref[\detokenize{appdev/refs/api/krb5_c_decrypt_iov:c.krb5_c_decrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_decrypt\_iov()}}}} 10059 10060 10061 10062\begin{sphinxadmonition}{note}{Note:} 10063On return from a {\hyperref[\detokenize{appdev/refs/api/krb5_c_decrypt_iov:c.krb5_c_decrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_decrypt\_iov()}}}} call, the \sphinxstyleemphasis{data-\textgreater{}length} in the iov structure are adjusted to reflect actual lengths of the ciphertext used. For example, if the padding length is too large, the length will be reduced. Lengths are never increased. 10064\end{sphinxadmonition} 10065 10066 10067\subsubsection{krb5\_c\_derive\_prfplus - Derive a key using some input data (via RFC 6113 PRF+).} 10068\label{\detokenize{appdev/refs/api/krb5_c_derive_prfplus::doc}}\label{\detokenize{appdev/refs/api/krb5_c_derive_prfplus:krb5-c-derive-prfplus-derive-a-key-using-some-input-data-via-rfc-6113-prf}}\index{krb5\_c\_derive\_prfplus (C function)} 10069 10070\begin{fulllineitems} 10071\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_derive_prfplus:c.krb5_c_derive_prfplus}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_derive\_prfplus}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ k}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ out}}{} 10072\end{fulllineitems} 10073 10074\begin{quote}\begin{description} 10075\item[{param}] \leavevmode 10076\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10077 10078\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k} - KDC contribution key 10079 10080\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Input string 10081 10082\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Output key enctype (or \sphinxstylestrong{ENCTYPE\_NULL} ) 10083 10084\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Derived keyblock 10085 10086\end{description}\end{quote} 10087 10088This function uses PRF+ as defined in RFC 6113 to derive a key from another key and an input string. If \sphinxstyleemphasis{enctype} is \sphinxstylestrong{ENCTYPE\_NULL} , the output key will have the same enctype as the input key. 10089 10090 10091\subsubsection{krb5\_c\_encrypt - Encrypt data using a key (operates on keyblock).} 10092\label{\detokenize{appdev/refs/api/krb5_c_encrypt::doc}}\label{\detokenize{appdev/refs/api/krb5_c_encrypt:krb5-c-encrypt-encrypt-data-using-a-key-operates-on-keyblock}}\index{krb5\_c\_encrypt (C function)} 10093 10094\begin{fulllineitems} 10095\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_encrypt:c.krb5_c_encrypt}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_encrypt}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ cipher\_state}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}} *\sphinxstyleemphasis{ output}}{} 10096\end{fulllineitems} 10097 10098\begin{quote}\begin{description} 10099\item[{param}] \leavevmode 10100\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10101 10102\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key 10103 10104\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types) 10105 10106\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed 10107 10108\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Data to be encrypted 10109 10110\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Encrypted data 10111 10112\end{description}\end{quote} 10113\begin{quote}\begin{description} 10114\item[{retval}] \leavevmode\begin{itemize} 10115\item {} 101160 Success; otherwise - Kerberos error codes 10117 10118\end{itemize} 10119 10120\end{description}\end{quote} 10121 10122This function encrypts the data block \sphinxstyleemphasis{input} and stores the output into \sphinxstyleemphasis{output} . The actual encryption key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the encryption type. If non-null, \sphinxstyleemphasis{cipher\_state} specifies the beginning state for the encryption operation, and is updated with the state to be passed as input to the next operation. 10123 10124\begin{sphinxadmonition}{note}{Note:} 10125The caller must initialize \sphinxstyleemphasis{output} and allocate at least enough space for the result (using {\hyperref[\detokenize{appdev/refs/api/krb5_c_encrypt_length:c.krb5_c_encrypt_length}]{\sphinxcrossref{\sphinxcode{krb5\_c\_encrypt\_length()}}}} to determine the amount of space needed). \sphinxstyleemphasis{output-\textgreater{}length} will be set to the actual length of the ciphertext. 10126\end{sphinxadmonition} 10127 10128 10129\subsubsection{krb5\_c\_encrypt\_iov - Encrypt data in place supporting AEAD (operates on keyblock).} 10130\label{\detokenize{appdev/refs/api/krb5_c_encrypt_iov:krb5-c-encrypt-iov-encrypt-data-in-place-supporting-aead-operates-on-keyblock}}\label{\detokenize{appdev/refs/api/krb5_c_encrypt_iov::doc}}\index{krb5\_c\_encrypt\_iov (C function)} 10131 10132\begin{fulllineitems} 10133\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_encrypt_iov:c.krb5_c_encrypt_iov}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_encrypt\_iov}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ keyblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ cipher\_state}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{krb5\_crypto\_iov}}} *\sphinxstyleemphasis{ data}, size\_t\sphinxstyleemphasis{ num\_data}}{} 10134\end{fulllineitems} 10135 10136\begin{quote}\begin{description} 10137\item[{param}] \leavevmode 10138\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10139 10140\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} - Encryption key 10141 10142\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types) 10143 10144\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed 10145 10146\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array. Modified in-place. 10147 10148\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data} 10149 10150\end{description}\end{quote} 10151\begin{quote}\begin{description} 10152\item[{retval}] \leavevmode\begin{itemize} 10153\item {} 101540 Success; otherwise - Kerberos error codes 10155 10156\end{itemize} 10157 10158\end{description}\end{quote} 10159 10160This function encrypts the data block \sphinxstyleemphasis{data} and stores the output in-place. The actual encryption key will be derived from \sphinxstyleemphasis{keyblock} and \sphinxstyleemphasis{usage} if key derivation is specified for the encryption type. If non-null, \sphinxstyleemphasis{cipher\_state} specifies the beginning state for the encryption operation, and is updated with the state to be passed as input to the next operation. The caller must allocate the right number of krb5\_crypto\_iov structures before calling into this API. 10161 10162 10163\sphinxstrong{See also:} 10164 10165 10166{\hyperref[\detokenize{appdev/refs/api/krb5_c_decrypt_iov:c.krb5_c_decrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_decrypt\_iov()}}}} 10167 10168 10169 10170\begin{sphinxadmonition}{note}{Note:} 10171On return from a {\hyperref[\detokenize{appdev/refs/api/krb5_c_encrypt_iov:c.krb5_c_encrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_encrypt\_iov()}}}} call, the \sphinxstyleemphasis{data-\textgreater{}length} in the iov structure are adjusted to reflect actual lengths of the ciphertext used. For example, if the padding length is too large, the length will be reduced. Lengths are never increased. 10172\end{sphinxadmonition} 10173 10174 10175\subsubsection{krb5\_c\_encrypt\_length - Compute encrypted data length.} 10176\label{\detokenize{appdev/refs/api/krb5_c_encrypt_length:krb5-c-encrypt-length-compute-encrypted-data-length}}\label{\detokenize{appdev/refs/api/krb5_c_encrypt_length::doc}}\index{krb5\_c\_encrypt\_length (C function)} 10177 10178\begin{fulllineitems} 10179\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_encrypt_length:c.krb5_c_encrypt_length}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_encrypt\_length}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, size\_t\sphinxstyleemphasis{ inputlen}, size\_t *\sphinxstyleemphasis{ length}}{} 10180\end{fulllineitems} 10181 10182\begin{quote}\begin{description} 10183\item[{param}] \leavevmode 10184\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10185 10186\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type 10187 10188\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inputlen} - Length of the data to be encrypted 10189 10190\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{length} - Length of the encrypted data 10191 10192\end{description}\end{quote} 10193\begin{quote}\begin{description} 10194\item[{retval}] \leavevmode\begin{itemize} 10195\item {} 101960 Success; otherwise - Kerberos error codes 10197 10198\end{itemize} 10199 10200\end{description}\end{quote} 10201 10202This function computes the length of the ciphertext produced by encrypting \sphinxstyleemphasis{inputlen} bytes including padding, confounder, and checksum. 10203 10204 10205\subsubsection{krb5\_c\_enctype\_compare - Compare two encryption types.} 10206\label{\detokenize{appdev/refs/api/krb5_c_enctype_compare::doc}}\label{\detokenize{appdev/refs/api/krb5_c_enctype_compare:krb5-c-enctype-compare-compare-two-encryption-types}}\index{krb5\_c\_enctype\_compare (C function)} 10207 10208\begin{fulllineitems} 10209\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_enctype_compare:c.krb5_c_enctype_compare}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_enctype\_compare}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ e1}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ e2}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} *\sphinxstyleemphasis{ similar}}{} 10210\end{fulllineitems} 10211 10212\begin{quote}\begin{description} 10213\item[{param}] \leavevmode 10214\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10215 10216\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{e1} - First encryption type 10217 10218\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{e2} - Second encryption type 10219 10220\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{similar} - \sphinxstylestrong{TRUE} if types are similar, \sphinxstylestrong{FALSE} if not 10221 10222\end{description}\end{quote} 10223\begin{quote}\begin{description} 10224\item[{retval}] \leavevmode\begin{itemize} 10225\item {} 102260 Success; otherwise - Kerberos error codes 10227 10228\end{itemize} 10229 10230\end{description}\end{quote} 10231 10232This function determines whether two encryption types use the same kind of keys. 10233 10234 10235\subsubsection{krb5\_c\_free\_state - Free a cipher state previously allocated by krb5\_c\_init\_state() .} 10236\label{\detokenize{appdev/refs/api/krb5_c_free_state:krb5-c-free-state-free-a-cipher-state-previously-allocated-by-krb5-c-init-state}}\label{\detokenize{appdev/refs/api/krb5_c_free_state::doc}}\index{krb5\_c\_free\_state (C function)} 10237 10238\begin{fulllineitems} 10239\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_free_state:c.krb5_c_free_state}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_free\_state}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ state}}{} 10240\end{fulllineitems} 10241 10242\begin{quote}\begin{description} 10243\item[{param}] \leavevmode 10244\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10245 10246\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Key 10247 10248\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{state} - Cipher state to be freed 10249 10250\end{description}\end{quote} 10251\begin{quote}\begin{description} 10252\item[{retval}] \leavevmode\begin{itemize} 10253\item {} 102540 Success; otherwise - Kerberos error codes 10255 10256\end{itemize} 10257 10258\end{description}\end{quote} 10259 10260 10261\subsubsection{krb5\_c\_fx\_cf2\_simple - Compute the KRB-FX-CF2 combination of two keys and pepper strings.} 10262\label{\detokenize{appdev/refs/api/krb5_c_fx_cf2_simple:krb5-c-fx-cf2-simple-compute-the-krb-fx-cf2-combination-of-two-keys-and-pepper-strings}}\label{\detokenize{appdev/refs/api/krb5_c_fx_cf2_simple::doc}}\index{krb5\_c\_fx\_cf2\_simple (C function)} 10263 10264\begin{fulllineitems} 10265\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_fx_cf2_simple:c.krb5_c_fx_cf2_simple}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_fx\_cf2\_simple}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ k1}, const char *\sphinxstyleemphasis{ pepper1}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ k2}, const char *\sphinxstyleemphasis{ pepper2}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ out}}{} 10266\end{fulllineitems} 10267 10268\begin{quote}\begin{description} 10269\item[{param}] \leavevmode 10270\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10271 10272\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k1} - KDC contribution key 10273 10274\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pepper1} - String”PKINIT” 10275 10276\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k2} - Reply key 10277 10278\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pepper2} - String”KeyExchange” 10279 10280\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Output key 10281 10282\end{description}\end{quote} 10283\begin{quote}\begin{description} 10284\item[{retval}] \leavevmode\begin{itemize} 10285\item {} 102860 Success; otherwise - Kerberos error codes 10287 10288\end{itemize} 10289 10290\end{description}\end{quote} 10291 10292This function computes the KRB-FX-CF2 function over its inputs and places the results in a newly allocated keyblock. This function is simple in that it assumes that \sphinxstyleemphasis{pepper1} and \sphinxstyleemphasis{pepper2} are C strings with no internal nulls and that the enctype of the result will be the same as that of \sphinxstyleemphasis{k1} . \sphinxstyleemphasis{k1} and \sphinxstyleemphasis{k2} may be of different enctypes. 10293 10294 10295\subsubsection{krb5\_c\_init\_state - Initialize a new cipher state.} 10296\label{\detokenize{appdev/refs/api/krb5_c_init_state:krb5-c-init-state-initialize-a-new-cipher-state}}\label{\detokenize{appdev/refs/api/krb5_c_init_state::doc}}\index{krb5\_c\_init\_state (C function)} 10297 10298\begin{fulllineitems} 10299\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_init_state:c.krb5_c_init_state}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_init\_state}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ new\_state}}{} 10300\end{fulllineitems} 10301 10302\begin{quote}\begin{description} 10303\item[{param}] \leavevmode 10304\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10305 10306\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Key 10307 10308\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types) 10309 10310\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{new\_state} - New cipher state 10311 10312\end{description}\end{quote} 10313\begin{quote}\begin{description} 10314\item[{retval}] \leavevmode\begin{itemize} 10315\item {} 103160 Success; otherwise - Kerberos error codes 10317 10318\end{itemize} 10319 10320\end{description}\end{quote} 10321 10322 10323\subsubsection{krb5\_c\_is\_coll\_proof\_cksum - Test whether a checksum type is collision-proof.} 10324\label{\detokenize{appdev/refs/api/krb5_c_is_coll_proof_cksum:krb5-c-is-coll-proof-cksum-test-whether-a-checksum-type-is-collision-proof}}\label{\detokenize{appdev/refs/api/krb5_c_is_coll_proof_cksum::doc}}\index{krb5\_c\_is\_coll\_proof\_cksum (C function)} 10325 10326\begin{fulllineitems} 10327\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_is_coll_proof_cksum:c.krb5_c_is_coll_proof_cksum}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_c\_is\_coll\_proof\_cksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ ctype}}{} 10328\end{fulllineitems} 10329 10330\begin{quote}\begin{description} 10331\item[{param}] \leavevmode 10332\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctype} - Checksum type 10333 10334\end{description}\end{quote} 10335\begin{quote}\begin{description} 10336\item[{return}] \leavevmode\begin{itemize} 10337\item {} 10338TRUE if ctype is collision-proof, FALSE if it is not collision-proof or not a valid checksum type. 10339 10340\end{itemize} 10341 10342\end{description}\end{quote} 10343 10344 10345\subsubsection{krb5\_c\_is\_keyed\_cksum - Test whether a checksum type is keyed.} 10346\label{\detokenize{appdev/refs/api/krb5_c_is_keyed_cksum::doc}}\label{\detokenize{appdev/refs/api/krb5_c_is_keyed_cksum:krb5-c-is-keyed-cksum-test-whether-a-checksum-type-is-keyed}}\index{krb5\_c\_is\_keyed\_cksum (C function)} 10347 10348\begin{fulllineitems} 10349\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_is_keyed_cksum:c.krb5_c_is_keyed_cksum}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_c\_is\_keyed\_cksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ ctype}}{} 10350\end{fulllineitems} 10351 10352\begin{quote}\begin{description} 10353\item[{param}] \leavevmode 10354\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctype} - Checksum type 10355 10356\end{description}\end{quote} 10357\begin{quote}\begin{description} 10358\item[{return}] \leavevmode\begin{itemize} 10359\item {} 10360TRUE if ctype is a keyed checksum type, FALSE otherwise. 10361 10362\end{itemize} 10363 10364\end{description}\end{quote} 10365 10366 10367\subsubsection{krb5\_c\_keyed\_checksum\_types - Return a list of keyed checksum types usable with an encryption type.} 10368\label{\detokenize{appdev/refs/api/krb5_c_keyed_checksum_types::doc}}\label{\detokenize{appdev/refs/api/krb5_c_keyed_checksum_types:krb5-c-keyed-checksum-types-return-a-list-of-keyed-checksum-types-usable-with-an-encryption-type}}\index{krb5\_c\_keyed\_checksum\_types (C function)} 10369 10370\begin{fulllineitems} 10371\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_keyed_checksum_types:c.krb5_c_keyed_checksum_types}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_keyed\_checksum\_types}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, unsigned int *\sphinxstyleemphasis{ count}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}} **\sphinxstyleemphasis{ cksumtypes}}{} 10372\end{fulllineitems} 10373 10374\begin{quote}\begin{description} 10375\item[{param}] \leavevmode 10376\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10377 10378\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type 10379 10380\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{count} - Count of allowable checksum types 10381 10382\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cksumtypes} - Array of allowable checksum types 10383 10384\end{description}\end{quote} 10385\begin{quote}\begin{description} 10386\item[{retval}] \leavevmode\begin{itemize} 10387\item {} 103880 Success; otherwise - Kerberos error codes 10389 10390\end{itemize} 10391 10392\end{description}\end{quote} 10393 10394Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_cksumtypes:c.krb5_free_cksumtypes}]{\sphinxcrossref{\sphinxcode{krb5\_free\_cksumtypes()}}}} to free \sphinxstyleemphasis{cksumtypes} when it is no longer needed. 10395 10396 10397\subsubsection{krb5\_c\_keylengths - Return length of the specified key in bytes.} 10398\label{\detokenize{appdev/refs/api/krb5_c_keylengths::doc}}\label{\detokenize{appdev/refs/api/krb5_c_keylengths:krb5-c-keylengths-return-length-of-the-specified-key-in-bytes}}\index{krb5\_c\_keylengths (C function)} 10399 10400\begin{fulllineitems} 10401\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_keylengths:c.krb5_c_keylengths}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_keylengths}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, size\_t *\sphinxstyleemphasis{ keybytes}, size\_t *\sphinxstyleemphasis{ keylength}}{} 10402\end{fulllineitems} 10403 10404\begin{quote}\begin{description} 10405\item[{param}] \leavevmode 10406\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10407 10408\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type 10409 10410\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keybytes} - Number of bytes required to make a key 10411 10412\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keylength} - Length of final key 10413 10414\end{description}\end{quote} 10415\begin{quote}\begin{description} 10416\item[{retval}] \leavevmode\begin{itemize} 10417\item {} 104180 Success; otherwise - Kerberos error codes 10419 10420\end{itemize} 10421 10422\end{description}\end{quote} 10423 10424 10425\subsubsection{krb5\_c\_make\_checksum - Compute a checksum (operates on keyblock).} 10426\label{\detokenize{appdev/refs/api/krb5_c_make_checksum::doc}}\label{\detokenize{appdev/refs/api/krb5_c_make_checksum:krb5-c-make-checksum-compute-a-checksum-operates-on-keyblock}}\index{krb5\_c\_make\_checksum (C function)} 10427 10428\begin{fulllineitems} 10429\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_make_checksum:c.krb5_c_make_checksum}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_make\_checksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ cksumtype}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} *\sphinxstyleemphasis{ cksum}}{} 10430\end{fulllineitems} 10431 10432\begin{quote}\begin{description} 10433\item[{param}] \leavevmode 10434\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10435 10436\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type (0 for mandatory type) 10437 10438\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum 10439 10440\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types) 10441 10442\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Input data 10443 10444\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cksum} - Generated checksum 10445 10446\end{description}\end{quote} 10447\begin{quote}\begin{description} 10448\item[{retval}] \leavevmode\begin{itemize} 10449\item {} 104500 Success; otherwise - Kerberos error codes 10451 10452\end{itemize} 10453 10454\end{description}\end{quote} 10455 10456This function computes a checksum of type \sphinxstyleemphasis{cksumtype} over \sphinxstyleemphasis{input} , using \sphinxstyleemphasis{key} if the checksum type is a keyed checksum. If \sphinxstyleemphasis{cksumtype} is 0 and \sphinxstyleemphasis{key} is non-null, the checksum type will be the mandatory-to-implement checksum type for the key’s encryption type. The actual checksum key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the checksum type. The newly created \sphinxstyleemphasis{cksum} must be released by calling {\hyperref[\detokenize{appdev/refs/api/krb5_free_checksum_contents:c.krb5_free_checksum_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_checksum\_contents()}}}} when it is no longer needed. 10457 10458 10459\sphinxstrong{See also:} 10460 10461 10462{\hyperref[\detokenize{appdev/refs/api/krb5_c_verify_checksum:c.krb5_c_verify_checksum}]{\sphinxcrossref{\sphinxcode{krb5\_c\_verify\_checksum()}}}} 10463 10464 10465 10466\begin{sphinxadmonition}{note}{Note:} 10467This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_k_make_checksum:c.krb5_k_make_checksum}]{\sphinxcrossref{\sphinxcode{krb5\_k\_make\_checksum()}}}} , but operates on keyblock \sphinxstyleemphasis{key} . 10468\end{sphinxadmonition} 10469 10470 10471\subsubsection{krb5\_c\_make\_checksum\_iov - Fill in a checksum element in IOV array (operates on keyblock)} 10472\label{\detokenize{appdev/refs/api/krb5_c_make_checksum_iov:krb5-c-make-checksum-iov-fill-in-a-checksum-element-in-iov-array-operates-on-keyblock}}\label{\detokenize{appdev/refs/api/krb5_c_make_checksum_iov::doc}}\index{krb5\_c\_make\_checksum\_iov (C function)} 10473 10474\begin{fulllineitems} 10475\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_make_checksum_iov:c.krb5_c_make_checksum_iov}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_make\_checksum\_iov}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ cksumtype}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{krb5\_crypto\_iov}}} *\sphinxstyleemphasis{ data}, size\_t\sphinxstyleemphasis{ num\_data}}{} 10476\end{fulllineitems} 10477 10478\begin{quote}\begin{description} 10479\item[{param}] \leavevmode 10480\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10481 10482\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type (0 for mandatory type) 10483 10484\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum 10485 10486\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types) 10487 10488\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array 10489 10490\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data} 10491 10492\end{description}\end{quote} 10493\begin{quote}\begin{description} 10494\item[{retval}] \leavevmode\begin{itemize} 10495\item {} 104960 Success; otherwise - Kerberos error codes 10497 10498\end{itemize} 10499 10500\end{description}\end{quote} 10501 10502Create a checksum in the {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:KRB5_CRYPTO_TYPE_CHECKSUM}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_CHECKSUM}}}} element over {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA:KRB5_CRYPTO_TYPE_DATA}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_DATA}}}} and {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY:KRB5_CRYPTO_TYPE_SIGN_ONLY}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}}}} chunks in \sphinxstyleemphasis{data} . Only the {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:KRB5_CRYPTO_TYPE_CHECKSUM}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_CHECKSUM}}}} region is modified. 10503 10504 10505\sphinxstrong{See also:} 10506 10507 10508{\hyperref[\detokenize{appdev/refs/api/krb5_c_verify_checksum_iov:c.krb5_c_verify_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_verify\_checksum\_iov()}}}} 10509 10510 10511 10512\begin{sphinxadmonition}{note}{Note:} 10513This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_k_make_checksum_iov:c.krb5_k_make_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_k\_make\_checksum\_iov()}}}} , but operates on keyblock \sphinxstyleemphasis{key} . 10514\end{sphinxadmonition} 10515 10516 10517\subsubsection{krb5\_c\_make\_random\_key - Generate an enctype-specific random encryption key.} 10518\label{\detokenize{appdev/refs/api/krb5_c_make_random_key:krb5-c-make-random-key-generate-an-enctype-specific-random-encryption-key}}\label{\detokenize{appdev/refs/api/krb5_c_make_random_key::doc}}\index{krb5\_c\_make\_random\_key (C function)} 10519 10520\begin{fulllineitems} 10521\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_make_random_key:c.krb5_c_make_random_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_make\_random\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ k5\_random\_key}}{} 10522\end{fulllineitems} 10523 10524\begin{quote}\begin{description} 10525\item[{param}] \leavevmode 10526\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10527 10528\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type of the generated key 10529 10530\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{k5\_random\_key} - An allocated and initialized keyblock 10531 10532\end{description}\end{quote} 10533\begin{quote}\begin{description} 10534\item[{retval}] \leavevmode\begin{itemize} 10535\item {} 105360 Success; otherwise - Kerberos error codes 10537 10538\end{itemize} 10539 10540\end{description}\end{quote} 10541 10542Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock_contents:c.krb5_free_keyblock_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock\_contents()}}}} to free \sphinxstyleemphasis{k5\_random\_key} when no longer needed. 10543 10544 10545\subsubsection{krb5\_c\_padding\_length - Return a number of padding octets.} 10546\label{\detokenize{appdev/refs/api/krb5_c_padding_length:krb5-c-padding-length-return-a-number-of-padding-octets}}\label{\detokenize{appdev/refs/api/krb5_c_padding_length::doc}}\index{krb5\_c\_padding\_length (C function)} 10547 10548\begin{fulllineitems} 10549\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_padding_length:c.krb5_c_padding_length}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_padding\_length}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, size\_t\sphinxstyleemphasis{ data\_length}, unsigned int *\sphinxstyleemphasis{ size}}{} 10550\end{fulllineitems} 10551 10552\begin{quote}\begin{description} 10553\item[{param}] \leavevmode 10554\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10555 10556\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type 10557 10558\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data\_length} - Length of the plaintext to pad 10559 10560\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{size} - Number of padding octets 10561 10562\end{description}\end{quote} 10563\begin{quote}\begin{description} 10564\item[{retval}] \leavevmode\begin{itemize} 10565\item {} 105660 Success; otherwise - KRB5\_BAD\_ENCTYPE 10567 10568\end{itemize} 10569 10570\end{description}\end{quote} 10571 10572This function returns the number of the padding octets required to pad \sphinxstyleemphasis{data\_length} octets of plaintext. 10573 10574 10575\subsubsection{krb5\_c\_prf - Generate enctype-specific pseudo-random bytes.} 10576\label{\detokenize{appdev/refs/api/krb5_c_prf:krb5-c-prf-generate-enctype-specific-pseudo-random-bytes}}\label{\detokenize{appdev/refs/api/krb5_c_prf::doc}}\index{krb5\_c\_prf (C function)} 10577 10578\begin{fulllineitems} 10579\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_prf:c.krb5_c_prf}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_prf}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ keyblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ output}}{} 10580\end{fulllineitems} 10581 10582\begin{quote}\begin{description} 10583\item[{param}] \leavevmode 10584\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10585 10586\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} - Key 10587 10588\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Input data 10589 10590\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Output data 10591 10592\end{description}\end{quote} 10593\begin{quote}\begin{description} 10594\item[{retval}] \leavevmode\begin{itemize} 10595\item {} 105960 Success; otherwise - Kerberos error codes 10597 10598\end{itemize} 10599 10600\end{description}\end{quote} 10601 10602This function selects a pseudo-random function based on \sphinxstyleemphasis{keyblock} and computes its value over \sphinxstyleemphasis{input} , placing the result into \sphinxstyleemphasis{output} . The caller must preinitialize \sphinxstyleemphasis{output} and allocate space for the result, using {\hyperref[\detokenize{appdev/refs/api/krb5_c_prf_length:c.krb5_c_prf_length}]{\sphinxcrossref{\sphinxcode{krb5\_c\_prf\_length()}}}} to determine the required length. 10603 10604 10605\subsubsection{krb5\_c\_prfplus - Generate pseudo-random bytes using RFC 6113 PRF+.} 10606\label{\detokenize{appdev/refs/api/krb5_c_prfplus:krb5-c-prfplus-generate-pseudo-random-bytes-using-rfc-6113-prf}}\label{\detokenize{appdev/refs/api/krb5_c_prfplus::doc}}\index{krb5\_c\_prfplus (C function)} 10607 10608\begin{fulllineitems} 10609\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_prfplus:c.krb5_c_prfplus}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_prfplus}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ k}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ output}}{} 10610\end{fulllineitems} 10611 10612\begin{quote}\begin{description} 10613\item[{param}] \leavevmode 10614\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10615 10616\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k} - KDC contribution key 10617 10618\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Input data 10619 10620\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Pseudo-random output buffer 10621 10622\end{description}\end{quote} 10623\begin{quote}\begin{description} 10624\item[{return}] \leavevmode\begin{itemize} 10625\item {} 106260 on success, E2BIG if output-\textgreater{}length is too large for PRF+ to generate, ENOMEM on allocation failure, or an error code from krb5\_c\_prf() 10627 10628\end{itemize} 10629 10630\end{description}\end{quote} 10631 10632This function fills \sphinxstyleemphasis{output} with PRF+(k, input) as defined in RFC 6113 section 5.1. The caller must preinitialize \sphinxstyleemphasis{output} and allocate the desired amount of space. The length of the pseudo-random output will match the length of \sphinxstyleemphasis{output} . 10633 10634\begin{sphinxadmonition}{note}{Note:} 10635RFC 4402 defines a different PRF+ operation. This function does not implement that operation. 10636\end{sphinxadmonition} 10637 10638 10639\subsubsection{krb5\_c\_prf\_length - Get the output length of pseudo-random functions for an encryption type.} 10640\label{\detokenize{appdev/refs/api/krb5_c_prf_length::doc}}\label{\detokenize{appdev/refs/api/krb5_c_prf_length:krb5-c-prf-length-get-the-output-length-of-pseudo-random-functions-for-an-encryption-type}}\index{krb5\_c\_prf\_length (C function)} 10641 10642\begin{fulllineitems} 10643\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_prf_length:c.krb5_c_prf_length}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_prf\_length}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, size\_t *\sphinxstyleemphasis{ len}}{} 10644\end{fulllineitems} 10645 10646\begin{quote}\begin{description} 10647\item[{param}] \leavevmode 10648\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10649 10650\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type 10651 10652\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{len} - Length of PRF output 10653 10654\end{description}\end{quote} 10655\begin{quote}\begin{description} 10656\item[{retval}] \leavevmode\begin{itemize} 10657\item {} 106580 Success; otherwise - Kerberos error codes 10659 10660\end{itemize} 10661 10662\end{description}\end{quote} 10663 10664 10665\subsubsection{krb5\_c\_random\_add\_entropy - Add entropy to the pseudo-random number generator.} 10666\label{\detokenize{appdev/refs/api/krb5_c_random_add_entropy::doc}}\label{\detokenize{appdev/refs/api/krb5_c_random_add_entropy:krb5-c-random-add-entropy-add-entropy-to-the-pseudo-random-number-generator}}\index{krb5\_c\_random\_add\_entropy (C function)} 10667 10668\begin{fulllineitems} 10669\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_random_add_entropy:c.krb5_c_random_add_entropy}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_random\_add\_entropy}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, unsigned int\sphinxstyleemphasis{ randsource}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}}{} 10670\end{fulllineitems} 10671 10672\begin{quote}\begin{description} 10673\item[{param}] \leavevmode 10674\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10675 10676\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{randsource} - Entropy source (see KRB5\_RANDSOURCE types) 10677 10678\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Data 10679 10680\end{description}\end{quote} 10681\begin{quote}\begin{description} 10682\item[{retval}] \leavevmode\begin{itemize} 10683\item {} 106840 Success; otherwise - Kerberos error codes 10685 10686\end{itemize} 10687 10688\end{description}\end{quote} 10689 10690Contribute entropy to the PRNG used by krb5 crypto operations. This may or may not affect the output of the next crypto operation requiring random data. 10691 10692 10693\subsubsection{krb5\_c\_random\_make\_octets - Generate pseudo-random bytes.} 10694\label{\detokenize{appdev/refs/api/krb5_c_random_make_octets::doc}}\label{\detokenize{appdev/refs/api/krb5_c_random_make_octets:krb5-c-random-make-octets-generate-pseudo-random-bytes}}\index{krb5\_c\_random\_make\_octets (C function)} 10695 10696\begin{fulllineitems} 10697\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_random_make_octets:c.krb5_c_random_make_octets}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_random\_make\_octets}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}}{} 10698\end{fulllineitems} 10699 10700\begin{quote}\begin{description} 10701\item[{param}] \leavevmode 10702\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10703 10704\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} - Random data 10705 10706\end{description}\end{quote} 10707\begin{quote}\begin{description} 10708\item[{retval}] \leavevmode\begin{itemize} 10709\item {} 107100 Success; otherwise - Kerberos error codes 10711 10712\end{itemize} 10713 10714\end{description}\end{quote} 10715 10716Fills in \sphinxstyleemphasis{data} with bytes from the PRNG used by krb5 crypto operations. The caller must preinitialize \sphinxstyleemphasis{data} and allocate the desired amount of space. 10717 10718 10719\subsubsection{krb5\_c\_random\_os\_entropy - Collect entropy from the OS if possible.} 10720\label{\detokenize{appdev/refs/api/krb5_c_random_os_entropy:krb5-c-random-os-entropy-collect-entropy-from-the-os-if-possible}}\label{\detokenize{appdev/refs/api/krb5_c_random_os_entropy::doc}}\index{krb5\_c\_random\_os\_entropy (C function)} 10721 10722\begin{fulllineitems} 10723\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_random_os_entropy:c.krb5_c_random_os_entropy}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_random\_os\_entropy}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, int\sphinxstyleemphasis{ strong}, int *\sphinxstyleemphasis{ success}}{} 10724\end{fulllineitems} 10725 10726\begin{quote}\begin{description} 10727\item[{param}] \leavevmode 10728\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10729 10730\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{strong} - Strongest available source of entropy 10731 10732\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{success} - 1 if OS provides entropy, 0 otherwise 10733 10734\end{description}\end{quote} 10735\begin{quote}\begin{description} 10736\item[{retval}] \leavevmode\begin{itemize} 10737\item {} 107380 Success; otherwise - Kerberos error codes 10739 10740\end{itemize} 10741 10742\end{description}\end{quote} 10743 10744If \sphinxstyleemphasis{strong} is non-zero, this function attempts to use the strongest available source of entropy. Setting this flag may cause the function to block on some operating systems. Good uses include seeding the PRNG for kadmind and realm setup. 10745 10746 10747\subsubsection{krb5\_c\_random\_to\_key - Generate an enctype-specific key from random data.} 10748\label{\detokenize{appdev/refs/api/krb5_c_random_to_key:krb5-c-random-to-key-generate-an-enctype-specific-key-from-random-data}}\label{\detokenize{appdev/refs/api/krb5_c_random_to_key::doc}}\index{krb5\_c\_random\_to\_key (C function)} 10749 10750\begin{fulllineitems} 10751\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_random_to_key:c.krb5_c_random_to_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_random\_to\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ random\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ k5\_random\_key}}{} 10752\end{fulllineitems} 10753 10754\begin{quote}\begin{description} 10755\item[{param}] \leavevmode 10756\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10757 10758\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type 10759 10760\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{random\_data} - Random input data 10761 10762\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{k5\_random\_key} - Resulting key 10763 10764\end{description}\end{quote} 10765\begin{quote}\begin{description} 10766\item[{retval}] \leavevmode\begin{itemize} 10767\item {} 107680 Success; otherwise - Kerberos error codes 10769 10770\end{itemize} 10771 10772\end{description}\end{quote} 10773 10774This function takes random input data \sphinxstyleemphasis{random\_data} and produces a valid key \sphinxstyleemphasis{k5\_random\_key} for a given \sphinxstyleemphasis{enctype} . 10775 10776 10777\sphinxstrong{See also:} 10778 10779 10780{\hyperref[\detokenize{appdev/refs/api/krb5_c_keylengths:c.krb5_c_keylengths}]{\sphinxcrossref{\sphinxcode{krb5\_c\_keylengths()}}}} 10781 10782 10783 10784\begin{sphinxadmonition}{note}{Note:} 10785It is assumed that \sphinxstyleemphasis{k5\_random\_key} has already been initialized and \sphinxstyleemphasis{k5\_random\_key-\textgreater{}contents} has been allocated with the correct length. 10786\end{sphinxadmonition} 10787 10788 10789\subsubsection{krb5\_c\_string\_to\_key - Convert a string (such a password) to a key.} 10790\label{\detokenize{appdev/refs/api/krb5_c_string_to_key:krb5-c-string-to-key-convert-a-string-such-a-password-to-a-key}}\label{\detokenize{appdev/refs/api/krb5_c_string_to_key::doc}}\index{krb5\_c\_string\_to\_key (C function)} 10791 10792\begin{fulllineitems} 10793\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_string_to_key:c.krb5_c_string_to_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_string\_to\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ string}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ salt}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}}{} 10794\end{fulllineitems} 10795 10796\begin{quote}\begin{description} 10797\item[{param}] \leavevmode 10798\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10799 10800\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type 10801 10802\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to be converted 10803 10804\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{salt} - Salt value 10805 10806\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Generated key 10807 10808\end{description}\end{quote} 10809\begin{quote}\begin{description} 10810\item[{retval}] \leavevmode\begin{itemize} 10811\item {} 108120 Success; otherwise - Kerberos error codes 10813 10814\end{itemize} 10815 10816\end{description}\end{quote} 10817 10818This function converts \sphinxstyleemphasis{string} to a \sphinxstyleemphasis{key} of encryption type \sphinxstyleemphasis{enctype} , using the specified \sphinxstyleemphasis{salt} . The newly created \sphinxstyleemphasis{key} must be released by calling {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock_contents:c.krb5_free_keyblock_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock\_contents()}}}} when it is no longer needed. 10819 10820 10821\subsubsection{krb5\_c\_string\_to\_key\_with\_params - Convert a string (such as a password) to a key with additional parameters.} 10822\label{\detokenize{appdev/refs/api/krb5_c_string_to_key_with_params::doc}}\label{\detokenize{appdev/refs/api/krb5_c_string_to_key_with_params:krb5-c-string-to-key-with-params-convert-a-string-such-as-a-password-to-a-key-with-additional-parameters}}\index{krb5\_c\_string\_to\_key\_with\_params (C function)} 10823 10824\begin{fulllineitems} 10825\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_string_to_key_with_params:c.krb5_c_string_to_key_with_params}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_string\_to\_key\_with\_params}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ string}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ salt}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ params}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}}{} 10826\end{fulllineitems} 10827 10828\begin{quote}\begin{description} 10829\item[{param}] \leavevmode 10830\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10831 10832\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type 10833 10834\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to be converted 10835 10836\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{salt} - Salt value 10837 10838\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{params} - Parameters 10839 10840\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Generated key 10841 10842\end{description}\end{quote} 10843\begin{quote}\begin{description} 10844\item[{retval}] \leavevmode\begin{itemize} 10845\item {} 108460 Success; otherwise - Kerberos error codes 10847 10848\end{itemize} 10849 10850\end{description}\end{quote} 10851 10852This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_c_string_to_key:c.krb5_c_string_to_key}]{\sphinxcrossref{\sphinxcode{krb5\_c\_string\_to\_key()}}}} , but also takes parameters which may affect the algorithm in an enctype-dependent way. The newly created \sphinxstyleemphasis{key} must be released by calling {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock_contents:c.krb5_free_keyblock_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock\_contents()}}}} when it is no longer needed. 10853 10854 10855\subsubsection{krb5\_c\_valid\_cksumtype - Verify that specified checksum type is a valid Kerberos checksum type.} 10856\label{\detokenize{appdev/refs/api/krb5_c_valid_cksumtype:krb5-c-valid-cksumtype-verify-that-specified-checksum-type-is-a-valid-kerberos-checksum-type}}\label{\detokenize{appdev/refs/api/krb5_c_valid_cksumtype::doc}}\index{krb5\_c\_valid\_cksumtype (C function)} 10857 10858\begin{fulllineitems} 10859\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_valid_cksumtype:c.krb5_c_valid_cksumtype}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_c\_valid\_cksumtype}}{{\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ ctype}}{} 10860\end{fulllineitems} 10861 10862\begin{quote}\begin{description} 10863\item[{param}] \leavevmode 10864\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctype} - Checksum type 10865 10866\end{description}\end{quote} 10867\begin{quote}\begin{description} 10868\item[{return}] \leavevmode\begin{itemize} 10869\item {} 10870TRUE if ctype is valid, FALSE if not 10871 10872\end{itemize} 10873 10874\end{description}\end{quote} 10875 10876 10877\subsubsection{krb5\_c\_valid\_enctype - Verify that a specified encryption type is a valid Kerberos encryption type.} 10878\label{\detokenize{appdev/refs/api/krb5_c_valid_enctype:krb5-c-valid-enctype-verify-that-a-specified-encryption-type-is-a-valid-kerberos-encryption-type}}\label{\detokenize{appdev/refs/api/krb5_c_valid_enctype::doc}}\index{krb5\_c\_valid\_enctype (C function)} 10879 10880\begin{fulllineitems} 10881\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_valid_enctype:c.krb5_c_valid_enctype}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_c\_valid\_enctype}}{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ ktype}}{} 10882\end{fulllineitems} 10883 10884\begin{quote}\begin{description} 10885\item[{param}] \leavevmode 10886\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ktype} - Encryption type 10887 10888\end{description}\end{quote} 10889\begin{quote}\begin{description} 10890\item[{return}] \leavevmode\begin{itemize} 10891\item {} 10892TRUE if ktype is valid, FALSE if not 10893 10894\end{itemize} 10895 10896\end{description}\end{quote} 10897 10898 10899\subsubsection{krb5\_c\_verify\_checksum - Verify a checksum (operates on keyblock).} 10900\label{\detokenize{appdev/refs/api/krb5_c_verify_checksum:krb5-c-verify-checksum-verify-a-checksum-operates-on-keyblock}}\label{\detokenize{appdev/refs/api/krb5_c_verify_checksum::doc}}\index{krb5\_c\_verify\_checksum (C function)} 10901 10902\begin{fulllineitems} 10903\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_verify_checksum:c.krb5_c_verify_checksum}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_verify\_checksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}, const {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} *\sphinxstyleemphasis{ cksum}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} *\sphinxstyleemphasis{ valid}}{} 10904\end{fulllineitems} 10905 10906\begin{quote}\begin{description} 10907\item[{param}] \leavevmode 10908\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10909 10910\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum 10911 10912\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - \sphinxstyleemphasis{key} usage 10913 10914\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Data to be used to compute a new checksum using \sphinxstyleemphasis{key} to compare \sphinxstyleemphasis{cksum} against 10915 10916\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksum} - Checksum to be verified 10917 10918\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{valid} - Non-zero for success, zero for failure 10919 10920\end{description}\end{quote} 10921\begin{quote}\begin{description} 10922\item[{retval}] \leavevmode\begin{itemize} 10923\item {} 109240 Success; otherwise - Kerberos error codes 10925 10926\end{itemize} 10927 10928\end{description}\end{quote} 10929 10930This function verifies that \sphinxstyleemphasis{cksum} is a valid checksum for \sphinxstyleemphasis{data} . If the checksum type of \sphinxstyleemphasis{cksum} is a keyed checksum, \sphinxstyleemphasis{key} is used to verify the checksum. If the checksum type in \sphinxstyleemphasis{cksum} is 0 and \sphinxstyleemphasis{key} is not NULL, the mandatory checksum type for \sphinxstyleemphasis{key} will be used. The actual checksum key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the checksum type. 10931 10932\begin{sphinxadmonition}{note}{Note:} 10933This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_k_verify_checksum:c.krb5_k_verify_checksum}]{\sphinxcrossref{\sphinxcode{krb5\_k\_verify\_checksum()}}}} , but operates on keyblock \sphinxstyleemphasis{key} . 10934\end{sphinxadmonition} 10935 10936 10937\subsubsection{krb5\_c\_verify\_checksum\_iov - Validate a checksum element in IOV array (operates on keyblock).} 10938\label{\detokenize{appdev/refs/api/krb5_c_verify_checksum_iov::doc}}\label{\detokenize{appdev/refs/api/krb5_c_verify_checksum_iov:krb5-c-verify-checksum-iov-validate-a-checksum-element-in-iov-array-operates-on-keyblock}}\index{krb5\_c\_verify\_checksum\_iov (C function)} 10939 10940\begin{fulllineitems} 10941\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_verify_checksum_iov:c.krb5_c_verify_checksum_iov}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_verify\_checksum\_iov}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ cksumtype}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{krb5\_crypto\_iov}}} *\sphinxstyleemphasis{ data}, size\_t\sphinxstyleemphasis{ num\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} *\sphinxstyleemphasis{ valid}}{} 10942\end{fulllineitems} 10943 10944\begin{quote}\begin{description} 10945\item[{param}] \leavevmode 10946\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 10947 10948\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type (0 for mandatory type) 10949 10950\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum 10951 10952\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types) 10953 10954\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - IOV array 10955 10956\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data} 10957 10958\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{valid} - Non-zero for success, zero for failure 10959 10960\end{description}\end{quote} 10961\begin{quote}\begin{description} 10962\item[{retval}] \leavevmode\begin{itemize} 10963\item {} 109640 Success; otherwise - Kerberos error codes 10965 10966\end{itemize} 10967 10968\end{description}\end{quote} 10969 10970Confirm that the checksum in the {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:KRB5_CRYPTO_TYPE_CHECKSUM}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_CHECKSUM}}}} element is a valid checksum of the {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA:KRB5_CRYPTO_TYPE_DATA}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_DATA}}}} and {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY:KRB5_CRYPTO_TYPE_SIGN_ONLY}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}}}} regions in the iov. 10971 10972 10973\sphinxstrong{See also:} 10974 10975 10976{\hyperref[\detokenize{appdev/refs/api/krb5_c_make_checksum_iov:c.krb5_c_make_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_make\_checksum\_iov()}}}} 10977 10978 10979 10980\begin{sphinxadmonition}{note}{Note:} 10981This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_k_verify_checksum_iov:c.krb5_k_verify_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_k\_verify\_checksum\_iov()}}}} , but operates on keyblock \sphinxstyleemphasis{key} . 10982\end{sphinxadmonition} 10983 10984 10985\subsubsection{krb5\_cksumtype\_to\_string - Convert a checksum type to a string.} 10986\label{\detokenize{appdev/refs/api/krb5_cksumtype_to_string::doc}}\label{\detokenize{appdev/refs/api/krb5_cksumtype_to_string:krb5-cksumtype-to-string-convert-a-checksum-type-to-a-string}}\index{krb5\_cksumtype\_to\_string (C function)} 10987 10988\begin{fulllineitems} 10989\phantomsection\label{\detokenize{appdev/refs/api/krb5_cksumtype_to_string:c.krb5_cksumtype_to_string}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cksumtype\_to\_string}}{{\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ cksumtype}, char *\sphinxstyleemphasis{ buffer}, size\_t\sphinxstyleemphasis{ buflen}}{} 10990\end{fulllineitems} 10991 10992\begin{quote}\begin{description} 10993\item[{param}] \leavevmode 10994\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type 10995 10996\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to hold converted checksum type 10997 10998\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Storage available in \sphinxstyleemphasis{buffer} 10999 11000\end{description}\end{quote} 11001\begin{quote}\begin{description} 11002\item[{retval}] \leavevmode\begin{itemize} 11003\item {} 110040 Success; otherwise - Kerberos error codes 11005 11006\end{itemize} 11007 11008\end{description}\end{quote} 11009 11010 11011\subsubsection{krb5\_decode\_authdata\_container - Unwrap authorization data.} 11012\label{\detokenize{appdev/refs/api/krb5_decode_authdata_container::doc}}\label{\detokenize{appdev/refs/api/krb5_decode_authdata_container:krb5-decode-authdata-container-unwrap-authorization-data}}\index{krb5\_decode\_authdata\_container (C function)} 11013 11014\begin{fulllineitems} 11015\phantomsection\label{\detokenize{appdev/refs/api/krb5_decode_authdata_container:c.krb5_decode_authdata_container}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_decode\_authdata\_container}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdatatype:c.krb5_authdatatype}]{\sphinxcrossref{krb5\_authdatatype}}}\sphinxstyleemphasis{ type}, const {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} *\sphinxstyleemphasis{ container}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} ***\sphinxstyleemphasis{ authdata}}{} 11016\end{fulllineitems} 11017 11018\begin{quote}\begin{description} 11019\item[{param}] \leavevmode 11020\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11021 11022\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - \sphinxcode{KRB5\_AUTHDATA} type of \sphinxstyleemphasis{container} 11023 11024\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{container} - Authorization data to be decoded 11025 11026\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{authdata} - List of decoded authorization data 11027 11028\end{description}\end{quote} 11029\begin{quote}\begin{description} 11030\item[{retval}] \leavevmode\begin{itemize} 11031\item {} 110320 Success; otherwise - Kerberos error codes 11033 11034\end{itemize} 11035 11036\end{description}\end{quote} 11037 11038 11039\sphinxstrong{See also:} 11040 11041 11042{\hyperref[\detokenize{appdev/refs/api/krb5_encode_authdata_container:c.krb5_encode_authdata_container}]{\sphinxcrossref{\sphinxcode{krb5\_encode\_authdata\_container()}}}} 11043 11044 11045 11046 11047\subsubsection{krb5\_decode\_ticket - Decode an ASN.1-formatted ticket.} 11048\label{\detokenize{appdev/refs/api/krb5_decode_ticket::doc}}\label{\detokenize{appdev/refs/api/krb5_decode_ticket:krb5-decode-ticket-decode-an-asn-1-formatted-ticket}}\index{krb5\_decode\_ticket (C function)} 11049 11050\begin{fulllineitems} 11051\phantomsection\label{\detokenize{appdev/refs/api/krb5_decode_ticket:c.krb5_decode_ticket}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_decode\_ticket}}{const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ code}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} **\sphinxstyleemphasis{ rep}}{} 11052\end{fulllineitems} 11053 11054\begin{quote}\begin{description} 11055\item[{param}] \leavevmode 11056\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - ASN.1-formatted ticket 11057 11058\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rep} - Decoded ticket information 11059 11060\end{description}\end{quote} 11061\begin{quote}\begin{description} 11062\item[{retval}] \leavevmode\begin{itemize} 11063\item {} 110640 Success; otherwise - Kerberos error codes 11065 11066\end{itemize} 11067 11068\end{description}\end{quote} 11069 11070 11071\subsubsection{krb5\_deltat\_to\_string - Convert a relative time value to a string.} 11072\label{\detokenize{appdev/refs/api/krb5_deltat_to_string::doc}}\label{\detokenize{appdev/refs/api/krb5_deltat_to_string:krb5-deltat-to-string-convert-a-relative-time-value-to-a-string}}\index{krb5\_deltat\_to\_string (C function)} 11073 11074\begin{fulllineitems} 11075\phantomsection\label{\detokenize{appdev/refs/api/krb5_deltat_to_string:c.krb5_deltat_to_string}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_deltat\_to\_string}}{{\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{krb5\_deltat}}}\sphinxstyleemphasis{ deltat}, char *\sphinxstyleemphasis{ buffer}, size\_t\sphinxstyleemphasis{ buflen}}{} 11076\end{fulllineitems} 11077 11078\begin{quote}\begin{description} 11079\item[{param}] \leavevmode 11080\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{deltat} - Relative time value to convert 11081 11082\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to hold time string 11083 11084\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Storage available in \sphinxstyleemphasis{buffer} 11085 11086\end{description}\end{quote} 11087\begin{quote}\begin{description} 11088\item[{retval}] \leavevmode\begin{itemize} 11089\item {} 110900 Success; otherwise - Kerberos error codes 11091 11092\end{itemize} 11093 11094\end{description}\end{quote} 11095 11096 11097\subsubsection{krb5\_encode\_authdata\_container - Wrap authorization data in a container.} 11098\label{\detokenize{appdev/refs/api/krb5_encode_authdata_container::doc}}\label{\detokenize{appdev/refs/api/krb5_encode_authdata_container:krb5-encode-authdata-container-wrap-authorization-data-in-a-container}}\index{krb5\_encode\_authdata\_container (C function)} 11099 11100\begin{fulllineitems} 11101\phantomsection\label{\detokenize{appdev/refs/api/krb5_encode_authdata_container:c.krb5_encode_authdata_container}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_encode\_authdata\_container}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdatatype:c.krb5_authdatatype}]{\sphinxcrossref{krb5\_authdatatype}}}\sphinxstyleemphasis{ type}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} *const *\sphinxstyleemphasis{ authdata}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} ***\sphinxstyleemphasis{ container}}{} 11102\end{fulllineitems} 11103 11104\begin{quote}\begin{description} 11105\item[{param}] \leavevmode 11106\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11107 11108\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - \sphinxcode{KRB5\_AUTHDATA} type of \sphinxstyleemphasis{container} 11109 11110\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authdata} - List of authorization data to be encoded 11111 11112\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{container} - List of encoded authorization data 11113 11114\end{description}\end{quote} 11115\begin{quote}\begin{description} 11116\item[{retval}] \leavevmode\begin{itemize} 11117\item {} 111180 Success; otherwise - Kerberos error codes 11119 11120\end{itemize} 11121 11122\end{description}\end{quote} 11123 11124The result is returned in \sphinxstyleemphasis{container} as a single-element list. 11125 11126 11127\sphinxstrong{See also:} 11128 11129 11130{\hyperref[\detokenize{appdev/refs/api/krb5_decode_authdata_container:c.krb5_decode_authdata_container}]{\sphinxcrossref{\sphinxcode{krb5\_decode\_authdata\_container()}}}} 11131 11132 11133 11134 11135\subsubsection{krb5\_enctype\_to\_name - Convert an encryption type to a name or alias.} 11136\label{\detokenize{appdev/refs/api/krb5_enctype_to_name::doc}}\label{\detokenize{appdev/refs/api/krb5_enctype_to_name:krb5-enctype-to-name-convert-an-encryption-type-to-a-name-or-alias}}\index{krb5\_enctype\_to\_name (C function)} 11137 11138\begin{fulllineitems} 11139\phantomsection\label{\detokenize{appdev/refs/api/krb5_enctype_to_name:c.krb5_enctype_to_name}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_enctype\_to\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}}\sphinxstyleemphasis{ shortest}, char *\sphinxstyleemphasis{ buffer}, size\_t\sphinxstyleemphasis{ buflen}}{} 11140\end{fulllineitems} 11141 11142\begin{quote}\begin{description} 11143\item[{param}] \leavevmode 11144\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type 11145 11146\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{shortest} - Flag 11147 11148\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to hold encryption type string 11149 11150\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Storage available in \sphinxstyleemphasis{buffer} 11151 11152\end{description}\end{quote} 11153\begin{quote}\begin{description} 11154\item[{retval}] \leavevmode\begin{itemize} 11155\item {} 111560 Success; otherwise - Kerberos error codes 11157 11158\end{itemize} 11159 11160\end{description}\end{quote} 11161 11162If \sphinxstyleemphasis{shortest} is FALSE, this function returns the enctype’s canonical name (like”aes128-cts-hmac-sha1-96”). If \sphinxstyleemphasis{shortest} is TRUE, it return the enctype’s shortest alias (like”aes128-cts”). 11163 11164\begin{sphinxadmonition}{note}{Note:} 11165New in 1.9 11166\end{sphinxadmonition} 11167 11168 11169\subsubsection{krb5\_enctype\_to\_string - Convert an encryption type to a string.} 11170\label{\detokenize{appdev/refs/api/krb5_enctype_to_string::doc}}\label{\detokenize{appdev/refs/api/krb5_enctype_to_string:krb5-enctype-to-string-convert-an-encryption-type-to-a-string}}\index{krb5\_enctype\_to\_string (C function)} 11171 11172\begin{fulllineitems} 11173\phantomsection\label{\detokenize{appdev/refs/api/krb5_enctype_to_string:c.krb5_enctype_to_string}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_enctype\_to\_string}}{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, char *\sphinxstyleemphasis{ buffer}, size\_t\sphinxstyleemphasis{ buflen}}{} 11174\end{fulllineitems} 11175 11176\begin{quote}\begin{description} 11177\item[{param}] \leavevmode 11178\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type 11179 11180\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to hold encryption type string 11181 11182\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Storage available in \sphinxstyleemphasis{buffer} 11183 11184\end{description}\end{quote} 11185\begin{quote}\begin{description} 11186\item[{retval}] \leavevmode\begin{itemize} 11187\item {} 111880 Success; otherwise - Kerberos error codes 11189 11190\end{itemize} 11191 11192\end{description}\end{quote} 11193 11194 11195\subsubsection{krb5\_free\_checksum - Free a krb5\_checksum structure.} 11196\label{\detokenize{appdev/refs/api/krb5_free_checksum:krb5-free-checksum-free-a-krb5-checksum-structure}}\label{\detokenize{appdev/refs/api/krb5_free_checksum::doc}}\index{krb5\_free\_checksum (C function)} 11197 11198\begin{fulllineitems} 11199\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_checksum:c.krb5_free_checksum}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_checksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} *\sphinxstyleemphasis{ val}}{} 11200\end{fulllineitems} 11201 11202\begin{quote}\begin{description} 11203\item[{param}] \leavevmode 11204\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11205 11206\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Checksum structure to be freed 11207 11208\end{description}\end{quote} 11209 11210This function frees the contents of \sphinxstyleemphasis{val} and the structure itself. 11211 11212 11213\subsubsection{krb5\_free\_checksum\_contents - Free the contents of a krb5\_checksum structure.} 11214\label{\detokenize{appdev/refs/api/krb5_free_checksum_contents:krb5-free-checksum-contents-free-the-contents-of-a-krb5-checksum-structure}}\label{\detokenize{appdev/refs/api/krb5_free_checksum_contents::doc}}\index{krb5\_free\_checksum\_contents (C function)} 11215 11216\begin{fulllineitems} 11217\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_checksum_contents:c.krb5_free_checksum_contents}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_checksum\_contents}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} *\sphinxstyleemphasis{ val}}{} 11218\end{fulllineitems} 11219 11220\begin{quote}\begin{description} 11221\item[{param}] \leavevmode 11222\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11223 11224\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Checksum structure to free contents of 11225 11226\end{description}\end{quote} 11227 11228This function frees the contents of \sphinxstyleemphasis{val} , but not the structure itself. It sets the checksum’s data pointer to null and (beginning in release 1.19) sets its length to zero. 11229 11230 11231\subsubsection{krb5\_free\_cksumtypes - Free an array of checksum types.} 11232\label{\detokenize{appdev/refs/api/krb5_free_cksumtypes:krb5-free-cksumtypes-free-an-array-of-checksum-types}}\label{\detokenize{appdev/refs/api/krb5_free_cksumtypes::doc}}\index{krb5\_free\_cksumtypes (C function)} 11233 11234\begin{fulllineitems} 11235\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_cksumtypes:c.krb5_free_cksumtypes}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_cksumtypes}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}} *\sphinxstyleemphasis{ val}}{} 11236\end{fulllineitems} 11237 11238\begin{quote}\begin{description} 11239\item[{param}] \leavevmode 11240\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11241 11242\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Array of checksum types to be freed 11243 11244\end{description}\end{quote} 11245 11246 11247\subsubsection{krb5\_free\_tgt\_creds - Free an array of credential structures.} 11248\label{\detokenize{appdev/refs/api/krb5_free_tgt_creds::doc}}\label{\detokenize{appdev/refs/api/krb5_free_tgt_creds:krb5-free-tgt-creds-free-an-array-of-credential-structures}}\index{krb5\_free\_tgt\_creds (C function)} 11249 11250\begin{fulllineitems} 11251\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_tgt_creds:c.krb5_free_tgt_creds}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_tgt\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} **\sphinxstyleemphasis{ tgts}}{} 11252\end{fulllineitems} 11253 11254\begin{quote}\begin{description} 11255\item[{param}] \leavevmode 11256\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11257 11258\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{tgts} - Null-terminated array of credentials to free 11259 11260\end{description}\end{quote} 11261 11262\begin{sphinxadmonition}{note}{Note:} 11263The last entry in the array \sphinxstyleemphasis{tgts} must be a NULL pointer. 11264\end{sphinxadmonition} 11265 11266 11267\subsubsection{krb5\_k\_create\_key - Create a krb5\_key from the enctype and key data in a keyblock.} 11268\label{\detokenize{appdev/refs/api/krb5_k_create_key::doc}}\label{\detokenize{appdev/refs/api/krb5_k_create_key:krb5-k-create-key-create-a-krb5-key-from-the-enctype-and-key-data-in-a-keyblock}}\index{krb5\_k\_create\_key (C function)} 11269 11270\begin{fulllineitems} 11271\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_create_key:c.krb5_k_create_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_create\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}} *\sphinxstyleemphasis{ out}}{} 11272\end{fulllineitems} 11273 11274\begin{quote}\begin{description} 11275\item[{param}] \leavevmode 11276\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11277 11278\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key\_data} - Keyblock 11279 11280\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Opaque key 11281 11282\end{description}\end{quote} 11283\begin{quote}\begin{description} 11284\item[{retval}] \leavevmode\begin{itemize} 11285\item {} 112860 Success; otherwise - KRB5\_BAD\_ENCTYPE 11287 11288\end{itemize} 11289 11290\end{description}\end{quote} 11291 11292The reference count on a key \sphinxstyleemphasis{out} is set to 1. Use {\hyperref[\detokenize{appdev/refs/api/krb5_k_free_key:c.krb5_k_free_key}]{\sphinxcrossref{\sphinxcode{krb5\_k\_free\_key()}}}} to free \sphinxstyleemphasis{out} when it is no longer needed. 11293 11294 11295\subsubsection{krb5\_k\_decrypt - Decrypt data using a key (operates on opaque key).} 11296\label{\detokenize{appdev/refs/api/krb5_k_decrypt:krb5-k-decrypt-decrypt-data-using-a-key-operates-on-opaque-key}}\label{\detokenize{appdev/refs/api/krb5_k_decrypt::doc}}\index{krb5\_k\_decrypt (C function)} 11297 11298\begin{fulllineitems} 11299\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_decrypt:c.krb5_k_decrypt}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_decrypt}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ cipher\_state}, const {\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ output}}{} 11300\end{fulllineitems} 11301 11302\begin{quote}\begin{description} 11303\item[{param}] \leavevmode 11304\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11305 11306\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key 11307 11308\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types) 11309 11310\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed 11311 11312\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Encrypted data 11313 11314\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Decrypted data 11315 11316\end{description}\end{quote} 11317\begin{quote}\begin{description} 11318\item[{retval}] \leavevmode\begin{itemize} 11319\item {} 113200 Success; otherwise - Kerberos error codes 11321 11322\end{itemize} 11323 11324\end{description}\end{quote} 11325 11326This function decrypts the data block \sphinxstyleemphasis{input} and stores the output into \sphinxstyleemphasis{output} . The actual decryption key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the encryption type. If non-null, \sphinxstyleemphasis{cipher\_state} specifies the beginning state for the decryption operation, and is updated with the state to be passed as input to the next operation. 11327 11328\begin{sphinxadmonition}{note}{Note:} 11329The caller must initialize \sphinxstyleemphasis{output} and allocate at least enough space for the result. The usual practice is to allocate an output buffer as long as the ciphertext, and let {\hyperref[\detokenize{appdev/refs/api/krb5_c_decrypt:c.krb5_c_decrypt}]{\sphinxcrossref{\sphinxcode{krb5\_c\_decrypt()}}}} trim \sphinxstyleemphasis{output-\textgreater{}length} . For some enctypes, the resulting \sphinxstyleemphasis{output-\textgreater{}length} may include padding bytes. 11330\end{sphinxadmonition} 11331 11332 11333\subsubsection{krb5\_k\_decrypt\_iov - Decrypt data in place supporting AEAD (operates on opaque key).} 11334\label{\detokenize{appdev/refs/api/krb5_k_decrypt_iov::doc}}\label{\detokenize{appdev/refs/api/krb5_k_decrypt_iov:krb5-k-decrypt-iov-decrypt-data-in-place-supporting-aead-operates-on-opaque-key}}\index{krb5\_k\_decrypt\_iov (C function)} 11335 11336\begin{fulllineitems} 11337\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_decrypt_iov:c.krb5_k_decrypt_iov}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_decrypt\_iov}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ cipher\_state}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{krb5\_crypto\_iov}}} *\sphinxstyleemphasis{ data}, size\_t\sphinxstyleemphasis{ num\_data}}{} 11338\end{fulllineitems} 11339 11340\begin{quote}\begin{description} 11341\item[{param}] \leavevmode 11342\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11343 11344\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key 11345 11346\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types) 11347 11348\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed 11349 11350\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array. Modified in-place. 11351 11352\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data} 11353 11354\end{description}\end{quote} 11355\begin{quote}\begin{description} 11356\item[{retval}] \leavevmode\begin{itemize} 11357\item {} 113580 Success; otherwise - Kerberos error codes 11359 11360\end{itemize} 11361 11362\end{description}\end{quote} 11363 11364This function decrypts the data block \sphinxstyleemphasis{data} and stores the output in-place. The actual decryption key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the encryption type. If non-null, \sphinxstyleemphasis{cipher\_state} specifies the beginning state for the decryption operation, and is updated with the state to be passed as input to the next operation. The caller must allocate the right number of krb5\_crypto\_iov structures before calling into this API. 11365 11366 11367\sphinxstrong{See also:} 11368 11369 11370{\hyperref[\detokenize{appdev/refs/api/krb5_k_encrypt_iov:c.krb5_k_encrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_k\_encrypt\_iov()}}}} 11371 11372 11373 11374\begin{sphinxadmonition}{note}{Note:} 11375On return from a {\hyperref[\detokenize{appdev/refs/api/krb5_c_decrypt_iov:c.krb5_c_decrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_decrypt\_iov()}}}} call, the \sphinxstyleemphasis{data-\textgreater{}length} in the iov structure are adjusted to reflect actual lengths of the ciphertext used. For example, if the padding length is too large, the length will be reduced. Lengths are never increased. 11376\end{sphinxadmonition} 11377 11378 11379\subsubsection{krb5\_k\_encrypt - Encrypt data using a key (operates on opaque key).} 11380\label{\detokenize{appdev/refs/api/krb5_k_encrypt:krb5-k-encrypt-encrypt-data-using-a-key-operates-on-opaque-key}}\label{\detokenize{appdev/refs/api/krb5_k_encrypt::doc}}\index{krb5\_k\_encrypt (C function)} 11381 11382\begin{fulllineitems} 11383\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_encrypt:c.krb5_k_encrypt}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_encrypt}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ cipher\_state}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}} *\sphinxstyleemphasis{ output}}{} 11384\end{fulllineitems} 11385 11386\begin{quote}\begin{description} 11387\item[{param}] \leavevmode 11388\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11389 11390\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key 11391 11392\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types) 11393 11394\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed 11395 11396\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Data to be encrypted 11397 11398\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Encrypted data 11399 11400\end{description}\end{quote} 11401\begin{quote}\begin{description} 11402\item[{retval}] \leavevmode\begin{itemize} 11403\item {} 114040 Success; otherwise - Kerberos error codes 11405 11406\end{itemize} 11407 11408\end{description}\end{quote} 11409 11410This function encrypts the data block \sphinxstyleemphasis{input} and stores the output into \sphinxstyleemphasis{output} . The actual encryption key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the encryption type. If non-null, \sphinxstyleemphasis{cipher\_state} specifies the beginning state for the encryption operation, and is updated with the state to be passed as input to the next operation. 11411 11412\begin{sphinxadmonition}{note}{Note:} 11413The caller must initialize \sphinxstyleemphasis{output} and allocate at least enough space for the result (using {\hyperref[\detokenize{appdev/refs/api/krb5_c_encrypt_length:c.krb5_c_encrypt_length}]{\sphinxcrossref{\sphinxcode{krb5\_c\_encrypt\_length()}}}} to determine the amount of space needed). \sphinxstyleemphasis{output-\textgreater{}length} will be set to the actual length of the ciphertext. 11414\end{sphinxadmonition} 11415 11416 11417\subsubsection{krb5\_k\_encrypt\_iov - Encrypt data in place supporting AEAD (operates on opaque key).} 11418\label{\detokenize{appdev/refs/api/krb5_k_encrypt_iov::doc}}\label{\detokenize{appdev/refs/api/krb5_k_encrypt_iov:krb5-k-encrypt-iov-encrypt-data-in-place-supporting-aead-operates-on-opaque-key}}\index{krb5\_k\_encrypt\_iov (C function)} 11419 11420\begin{fulllineitems} 11421\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_encrypt_iov:c.krb5_k_encrypt_iov}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_encrypt\_iov}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ cipher\_state}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{krb5\_crypto\_iov}}} *\sphinxstyleemphasis{ data}, size\_t\sphinxstyleemphasis{ num\_data}}{} 11422\end{fulllineitems} 11423 11424\begin{quote}\begin{description} 11425\item[{param}] \leavevmode 11426\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11427 11428\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key 11429 11430\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types) 11431 11432\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed 11433 11434\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array. Modified in-place. 11435 11436\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data} 11437 11438\end{description}\end{quote} 11439\begin{quote}\begin{description} 11440\item[{retval}] \leavevmode\begin{itemize} 11441\item {} 114420 Success; otherwise - Kerberos error codes 11443 11444\end{itemize} 11445 11446\end{description}\end{quote} 11447 11448This function encrypts the data block \sphinxstyleemphasis{data} and stores the output in-place. The actual encryption key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the encryption type. If non-null, \sphinxstyleemphasis{cipher\_state} specifies the beginning state for the encryption operation, and is updated with the state to be passed as input to the next operation. The caller must allocate the right number of krb5\_crypto\_iov structures before calling into this API. 11449 11450 11451\sphinxstrong{See also:} 11452 11453 11454{\hyperref[\detokenize{appdev/refs/api/krb5_k_decrypt_iov:c.krb5_k_decrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_k\_decrypt\_iov()}}}} 11455 11456 11457 11458\begin{sphinxadmonition}{note}{Note:} 11459On return from a {\hyperref[\detokenize{appdev/refs/api/krb5_c_encrypt_iov:c.krb5_c_encrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_encrypt\_iov()}}}} call, the \sphinxstyleemphasis{data-\textgreater{}length} in the iov structure are adjusted to reflect actual lengths of the ciphertext used. For example, if the padding length is too large, the length will be reduced. Lengths are never increased. 11460\end{sphinxadmonition} 11461 11462 11463\subsubsection{krb5\_k\_free\_key - Decrement the reference count on a key and free it if it hits zero.} 11464\label{\detokenize{appdev/refs/api/krb5_k_free_key:krb5-k-free-key-decrement-the-reference-count-on-a-key-and-free-it-if-it-hits-zero}}\label{\detokenize{appdev/refs/api/krb5_k_free_key::doc}}\index{krb5\_k\_free\_key (C function)} 11465 11466\begin{fulllineitems} 11467\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_free_key:c.krb5_k_free_key}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_k\_free\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}}{} 11468\end{fulllineitems} 11469 11470\begin{quote}\begin{description} 11471\item[{param}] \leavevmode 11472\sphinxstylestrong{context} 11473 11474\sphinxstylestrong{key} 11475 11476\end{description}\end{quote} 11477 11478 11479\subsubsection{krb5\_k\_key\_enctype - Retrieve the enctype of a krb5\_key structure.} 11480\label{\detokenize{appdev/refs/api/krb5_k_key_enctype::doc}}\label{\detokenize{appdev/refs/api/krb5_k_key_enctype:krb5-k-key-enctype-retrieve-the-enctype-of-a-krb5-key-structure}}\index{krb5\_k\_key\_enctype (C function)} 11481 11482\begin{fulllineitems} 11483\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_key_enctype:c.krb5_k_key_enctype}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} \sphinxbfcode{krb5\_k\_key\_enctype}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}}{} 11484\end{fulllineitems} 11485 11486\begin{quote}\begin{description} 11487\item[{param}] \leavevmode 11488\sphinxstylestrong{context} 11489 11490\sphinxstylestrong{key} 11491 11492\end{description}\end{quote} 11493 11494 11495\subsubsection{krb5\_k\_key\_keyblock - Retrieve a copy of the keyblock from a krb5\_key structure.} 11496\label{\detokenize{appdev/refs/api/krb5_k_key_keyblock:krb5-k-key-keyblock-retrieve-a-copy-of-the-keyblock-from-a-krb5-key-structure}}\label{\detokenize{appdev/refs/api/krb5_k_key_keyblock::doc}}\index{krb5\_k\_key\_keyblock (C function)} 11497 11498\begin{fulllineitems} 11499\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_key_keyblock:c.krb5_k_key_keyblock}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_key\_keyblock}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ key\_data}}{} 11500\end{fulllineitems} 11501 11502\begin{quote}\begin{description} 11503\item[{param}] \leavevmode 11504\sphinxstylestrong{context} 11505 11506\sphinxstylestrong{key} 11507 11508\sphinxstylestrong{key\_data} 11509 11510\end{description}\end{quote} 11511 11512 11513\subsubsection{krb5\_k\_make\_checksum - Compute a checksum (operates on opaque key).} 11514\label{\detokenize{appdev/refs/api/krb5_k_make_checksum::doc}}\label{\detokenize{appdev/refs/api/krb5_k_make_checksum:krb5-k-make-checksum-compute-a-checksum-operates-on-opaque-key}}\index{krb5\_k\_make\_checksum (C function)} 11515 11516\begin{fulllineitems} 11517\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_make_checksum:c.krb5_k_make_checksum}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_make\_checksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ cksumtype}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} *\sphinxstyleemphasis{ cksum}}{} 11518\end{fulllineitems} 11519 11520\begin{quote}\begin{description} 11521\item[{param}] \leavevmode 11522\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11523 11524\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type (0 for mandatory type) 11525 11526\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum 11527 11528\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types) 11529 11530\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Input data 11531 11532\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cksum} - Generated checksum 11533 11534\end{description}\end{quote} 11535\begin{quote}\begin{description} 11536\item[{retval}] \leavevmode\begin{itemize} 11537\item {} 115380 Success; otherwise - Kerberos error codes 11539 11540\end{itemize} 11541 11542\end{description}\end{quote} 11543 11544This function computes a checksum of type \sphinxstyleemphasis{cksumtype} over \sphinxstyleemphasis{input} , using \sphinxstyleemphasis{key} if the checksum type is a keyed checksum. If \sphinxstyleemphasis{cksumtype} is 0 and \sphinxstyleemphasis{key} is non-null, the checksum type will be the mandatory-to-implement checksum type for the key’s encryption type. The actual checksum key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the checksum type. The newly created \sphinxstyleemphasis{cksum} must be released by calling {\hyperref[\detokenize{appdev/refs/api/krb5_free_checksum_contents:c.krb5_free_checksum_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_checksum\_contents()}}}} when it is no longer needed. 11545 11546 11547\sphinxstrong{See also:} 11548 11549 11550{\hyperref[\detokenize{appdev/refs/api/krb5_c_verify_checksum:c.krb5_c_verify_checksum}]{\sphinxcrossref{\sphinxcode{krb5\_c\_verify\_checksum()}}}} 11551 11552 11553 11554\begin{sphinxadmonition}{note}{Note:} 11555This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_c_make_checksum:c.krb5_c_make_checksum}]{\sphinxcrossref{\sphinxcode{krb5\_c\_make\_checksum()}}}} , but operates on opaque \sphinxstyleemphasis{key} . 11556\end{sphinxadmonition} 11557 11558 11559\subsubsection{krb5\_k\_make\_checksum\_iov - Fill in a checksum element in IOV array (operates on opaque key)} 11560\label{\detokenize{appdev/refs/api/krb5_k_make_checksum_iov::doc}}\label{\detokenize{appdev/refs/api/krb5_k_make_checksum_iov:krb5-k-make-checksum-iov-fill-in-a-checksum-element-in-iov-array-operates-on-opaque-key}}\index{krb5\_k\_make\_checksum\_iov (C function)} 11561 11562\begin{fulllineitems} 11563\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_make_checksum_iov:c.krb5_k_make_checksum_iov}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_make\_checksum\_iov}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ cksumtype}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{krb5\_crypto\_iov}}} *\sphinxstyleemphasis{ data}, size\_t\sphinxstyleemphasis{ num\_data}}{} 11564\end{fulllineitems} 11565 11566\begin{quote}\begin{description} 11567\item[{param}] \leavevmode 11568\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11569 11570\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type (0 for mandatory type) 11571 11572\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum 11573 11574\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types) 11575 11576\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array 11577 11578\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data} 11579 11580\end{description}\end{quote} 11581\begin{quote}\begin{description} 11582\item[{retval}] \leavevmode\begin{itemize} 11583\item {} 115840 Success; otherwise - Kerberos error codes 11585 11586\end{itemize} 11587 11588\end{description}\end{quote} 11589 11590Create a checksum in the {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:KRB5_CRYPTO_TYPE_CHECKSUM}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_CHECKSUM}}}} element over {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA:KRB5_CRYPTO_TYPE_DATA}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_DATA}}}} and {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY:KRB5_CRYPTO_TYPE_SIGN_ONLY}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}}}} chunks in \sphinxstyleemphasis{data} . Only the {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:KRB5_CRYPTO_TYPE_CHECKSUM}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_CHECKSUM}}}} region is modified. 11591 11592 11593\sphinxstrong{See also:} 11594 11595 11596{\hyperref[\detokenize{appdev/refs/api/krb5_k_verify_checksum_iov:c.krb5_k_verify_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_k\_verify\_checksum\_iov()}}}} 11597 11598 11599 11600\begin{sphinxadmonition}{note}{Note:} 11601This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_c_make_checksum_iov:c.krb5_c_make_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_make\_checksum\_iov()}}}} , but operates on opaque \sphinxstyleemphasis{key} . 11602\end{sphinxadmonition} 11603 11604 11605\subsubsection{krb5\_k\_prf - Generate enctype-specific pseudo-random bytes (operates on opaque key).} 11606\label{\detokenize{appdev/refs/api/krb5_k_prf:krb5-k-prf-generate-enctype-specific-pseudo-random-bytes-operates-on-opaque-key}}\label{\detokenize{appdev/refs/api/krb5_k_prf::doc}}\index{krb5\_k\_prf (C function)} 11607 11608\begin{fulllineitems} 11609\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_prf:c.krb5_k_prf}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_prf}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ output}}{} 11610\end{fulllineitems} 11611 11612\begin{quote}\begin{description} 11613\item[{param}] \leavevmode 11614\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11615 11616\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Key 11617 11618\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Input data 11619 11620\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Output data 11621 11622\end{description}\end{quote} 11623\begin{quote}\begin{description} 11624\item[{retval}] \leavevmode\begin{itemize} 11625\item {} 116260 Success; otherwise - Kerberos error codes 11627 11628\end{itemize} 11629 11630\end{description}\end{quote} 11631 11632This function selects a pseudo-random function based on \sphinxstyleemphasis{key} and computes its value over \sphinxstyleemphasis{input} , placing the result into \sphinxstyleemphasis{output} . The caller must preinitialize \sphinxstyleemphasis{output} and allocate space for the result. 11633 11634\begin{sphinxadmonition}{note}{Note:} 11635This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_c_prf:c.krb5_c_prf}]{\sphinxcrossref{\sphinxcode{krb5\_c\_prf()}}}} , but operates on opaque \sphinxstyleemphasis{key} . 11636\end{sphinxadmonition} 11637 11638 11639\subsubsection{krb5\_k\_reference\_key - Increment the reference count on a key.} 11640\label{\detokenize{appdev/refs/api/krb5_k_reference_key::doc}}\label{\detokenize{appdev/refs/api/krb5_k_reference_key:krb5-k-reference-key-increment-the-reference-count-on-a-key}}\index{krb5\_k\_reference\_key (C function)} 11641 11642\begin{fulllineitems} 11643\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_reference_key:c.krb5_k_reference_key}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_k\_reference\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}}{} 11644\end{fulllineitems} 11645 11646\begin{quote}\begin{description} 11647\item[{param}] \leavevmode 11648\sphinxstylestrong{context} 11649 11650\sphinxstylestrong{key} 11651 11652\end{description}\end{quote} 11653 11654 11655\subsubsection{krb5\_k\_verify\_checksum - Verify a checksum (operates on opaque key).} 11656\label{\detokenize{appdev/refs/api/krb5_k_verify_checksum::doc}}\label{\detokenize{appdev/refs/api/krb5_k_verify_checksum:krb5-k-verify-checksum-verify-a-checksum-operates-on-opaque-key}}\index{krb5\_k\_verify\_checksum (C function)} 11657 11658\begin{fulllineitems} 11659\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_verify_checksum:c.krb5_k_verify_checksum}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_verify\_checksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}, const {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} *\sphinxstyleemphasis{ cksum}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} *\sphinxstyleemphasis{ valid}}{} 11660\end{fulllineitems} 11661 11662\begin{quote}\begin{description} 11663\item[{param}] \leavevmode 11664\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11665 11666\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum 11667 11668\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - \sphinxstyleemphasis{key} usage 11669 11670\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Data to be used to compute a new checksum using \sphinxstyleemphasis{key} to compare \sphinxstyleemphasis{cksum} against 11671 11672\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksum} - Checksum to be verified 11673 11674\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{valid} - Non-zero for success, zero for failure 11675 11676\end{description}\end{quote} 11677\begin{quote}\begin{description} 11678\item[{retval}] \leavevmode\begin{itemize} 11679\item {} 116800 Success; otherwise - Kerberos error codes 11681 11682\end{itemize} 11683 11684\end{description}\end{quote} 11685 11686This function verifies that \sphinxstyleemphasis{cksum} is a valid checksum for \sphinxstyleemphasis{data} . If the checksum type of \sphinxstyleemphasis{cksum} is a keyed checksum, \sphinxstyleemphasis{key} is used to verify the checksum. If the checksum type in \sphinxstyleemphasis{cksum} is 0 and \sphinxstyleemphasis{key} is not NULL, the mandatory checksum type for \sphinxstyleemphasis{key} will be used. The actual checksum key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the checksum type. 11687 11688\begin{sphinxadmonition}{note}{Note:} 11689This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_c_verify_checksum:c.krb5_c_verify_checksum}]{\sphinxcrossref{\sphinxcode{krb5\_c\_verify\_checksum()}}}} , but operates on opaque \sphinxstyleemphasis{key} . 11690\end{sphinxadmonition} 11691 11692 11693\subsubsection{krb5\_k\_verify\_checksum\_iov - Validate a checksum element in IOV array (operates on opaque key).} 11694\label{\detokenize{appdev/refs/api/krb5_k_verify_checksum_iov:krb5-k-verify-checksum-iov-validate-a-checksum-element-in-iov-array-operates-on-opaque-key}}\label{\detokenize{appdev/refs/api/krb5_k_verify_checksum_iov::doc}}\index{krb5\_k\_verify\_checksum\_iov (C function)} 11695 11696\begin{fulllineitems} 11697\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_verify_checksum_iov:c.krb5_k_verify_checksum_iov}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_verify\_checksum\_iov}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ cksumtype}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{krb5\_crypto\_iov}}} *\sphinxstyleemphasis{ data}, size\_t\sphinxstyleemphasis{ num\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} *\sphinxstyleemphasis{ valid}}{} 11698\end{fulllineitems} 11699 11700\begin{quote}\begin{description} 11701\item[{param}] \leavevmode 11702\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11703 11704\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type (0 for mandatory type) 11705 11706\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum 11707 11708\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types) 11709 11710\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - IOV array 11711 11712\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data} 11713 11714\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{valid} - Non-zero for success, zero for failure 11715 11716\end{description}\end{quote} 11717\begin{quote}\begin{description} 11718\item[{retval}] \leavevmode\begin{itemize} 11719\item {} 117200 Success; otherwise - Kerberos error codes 11721 11722\end{itemize} 11723 11724\end{description}\end{quote} 11725 11726Confirm that the checksum in the {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:KRB5_CRYPTO_TYPE_CHECKSUM}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_CHECKSUM}}}} element is a valid checksum of the {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA:KRB5_CRYPTO_TYPE_DATA}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_DATA}}}} and {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY:KRB5_CRYPTO_TYPE_SIGN_ONLY}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}}}} regions in the iov. 11727 11728 11729\sphinxstrong{See also:} 11730 11731 11732{\hyperref[\detokenize{appdev/refs/api/krb5_k_make_checksum_iov:c.krb5_k_make_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_k\_make\_checksum\_iov()}}}} 11733 11734 11735 11736\begin{sphinxadmonition}{note}{Note:} 11737This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_c_verify_checksum_iov:c.krb5_c_verify_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_verify\_checksum\_iov()}}}} , but operates on opaque \sphinxstyleemphasis{key} . 11738\end{sphinxadmonition} 11739 11740 11741\subsection{Legacy convenience interfaces} 11742\label{\detokenize{appdev/refs/api/index:legacy-convenience-interfaces}} 11743 11744\subsubsection{krb5\_recvauth - Server function for sendauth protocol.} 11745\label{\detokenize{appdev/refs/api/krb5_recvauth::doc}}\label{\detokenize{appdev/refs/api/krb5_recvauth:krb5-recvauth-server-function-for-sendauth-protocol}}\index{krb5\_recvauth (C function)} 11746 11747\begin{fulllineitems} 11748\phantomsection\label{\detokenize{appdev/refs/api/krb5_recvauth:c.krb5_recvauth}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_recvauth}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}} *\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}}\sphinxstyleemphasis{ fd}, char *\sphinxstyleemphasis{ appl\_version}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ server}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}\sphinxstyleemphasis{ flags}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} **\sphinxstyleemphasis{ ticket}}{} 11749\end{fulllineitems} 11750 11751\begin{quote}\begin{description} 11752\item[{param}] \leavevmode 11753\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11754 11755\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} - Pre-existing or newly created auth context 11756 11757\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fd} - File descriptor 11758 11759\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{appl\_version} - Application protocol version to be matched against the client’s application version 11760 11761\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Server principal (NULL for any in \sphinxstyleemphasis{keytab} ) 11762 11763\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Additional specifications 11764 11765\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table containing service keys 11766 11767\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ticket} - Ticket (NULL if not needed) 11768 11769\end{description}\end{quote} 11770\begin{quote}\begin{description} 11771\item[{retval}] \leavevmode\begin{itemize} 11772\item {} 117730 Success; otherwise - Kerberos error codes 11774 11775\end{itemize} 11776 11777\end{description}\end{quote} 11778 11779This function performs the server side of a sendauth/recvauth exchange by sending and receiving messages over \sphinxstyleemphasis{fd} . 11780 11781Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_ticket:c.krb5_free_ticket}]{\sphinxcrossref{\sphinxcode{krb5\_free\_ticket()}}}} to free \sphinxstyleemphasis{ticket} when it is no longer needed. 11782 11783 11784\sphinxstrong{See also:} 11785 11786 11787{\hyperref[\detokenize{appdev/refs/api/krb5_sendauth:c.krb5_sendauth}]{\sphinxcrossref{\sphinxcode{krb5\_sendauth()}}}} 11788 11789 11790 11791 11792\subsubsection{krb5\_recvauth\_version - Server function for sendauth protocol with version parameter.} 11793\label{\detokenize{appdev/refs/api/krb5_recvauth_version::doc}}\label{\detokenize{appdev/refs/api/krb5_recvauth_version:krb5-recvauth-version-server-function-for-sendauth-protocol-with-version-parameter}}\index{krb5\_recvauth\_version (C function)} 11794 11795\begin{fulllineitems} 11796\phantomsection\label{\detokenize{appdev/refs/api/krb5_recvauth_version:c.krb5_recvauth_version}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_recvauth\_version}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}} *\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}}\sphinxstyleemphasis{ fd}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ server}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}\sphinxstyleemphasis{ flags}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} **\sphinxstyleemphasis{ ticket}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ version}}{} 11797\end{fulllineitems} 11798 11799\begin{quote}\begin{description} 11800\item[{param}] \leavevmode 11801\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11802 11803\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} - Pre-existing or newly created auth context 11804 11805\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fd} - File descriptor 11806 11807\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Server principal (NULL for any in \sphinxstyleemphasis{keytab} ) 11808 11809\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Additional specifications 11810 11811\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Decryption key 11812 11813\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ticket} - Ticket (NULL if not needed) 11814 11815\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{version} - sendauth protocol version (NULL if not needed) 11816 11817\end{description}\end{quote} 11818\begin{quote}\begin{description} 11819\item[{retval}] \leavevmode\begin{itemize} 11820\item {} 118210 Success; otherwise - Kerberos error codes 11822 11823\end{itemize} 11824 11825\end{description}\end{quote} 11826 11827This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_recvauth:c.krb5_recvauth}]{\sphinxcrossref{\sphinxcode{krb5\_recvauth()}}}} with the additional output information place into \sphinxstyleemphasis{version} . 11828 11829 11830\subsubsection{krb5\_sendauth - Client function for sendauth protocol.} 11831\label{\detokenize{appdev/refs/api/krb5_sendauth:krb5-sendauth-client-function-for-sendauth-protocol}}\label{\detokenize{appdev/refs/api/krb5_sendauth::doc}}\index{krb5\_sendauth (C function)} 11832 11833\begin{fulllineitems} 11834\phantomsection\label{\detokenize{appdev/refs/api/krb5_sendauth:c.krb5_sendauth}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_sendauth}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}} *\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}}\sphinxstyleemphasis{ fd}, char *\sphinxstyleemphasis{ appl\_version}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ client}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ server}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ ap\_req\_options}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ in\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ in\_creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{krb5\_error}}} **\sphinxstyleemphasis{ error}, {\hyperref[\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part}]{\sphinxcrossref{krb5\_ap\_rep\_enc\_part}}} **\sphinxstyleemphasis{ rep\_result}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} **\sphinxstyleemphasis{ out\_creds}}{} 11835\end{fulllineitems} 11836 11837\begin{quote}\begin{description} 11838\item[{param}] \leavevmode 11839\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11840 11841\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} - Pre-existing or newly created auth context 11842 11843\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fd} - File descriptor that describes network socket 11844 11845\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{appl\_version} - Application protocol version to be matched with the receiver’s application version 11846 11847\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal 11848 11849\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Server principal 11850 11851\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_options} - \sphinxcode{AP\_OPTS} options 11852 11853\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_data} - Data to be sent to the server 11854 11855\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_creds} - Input credentials, or NULL to use \sphinxstyleemphasis{ccache} 11856 11857\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache 11858 11859\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{error} - If non-null, contains KRB\_ERROR message returned from server 11860 11861\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rep\_result} - If non-null and \sphinxstyleemphasis{ap\_req\_options} is {\hyperref[\detokenize{appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED:AP_OPTS_MUTUAL_REQUIRED}]{\sphinxcrossref{\sphinxcode{AP\_OPTS\_MUTUAL\_REQUIRED}}}} , contains the result of mutual authentication exchange 11862 11863\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out\_creds} - If non-null, the retrieved credentials 11864 11865\end{description}\end{quote} 11866\begin{quote}\begin{description} 11867\item[{retval}] \leavevmode\begin{itemize} 11868\item {} 118690 Success; otherwise - Kerberos error codes 11870 11871\end{itemize} 11872 11873\end{description}\end{quote} 11874 11875This function performs the client side of a sendauth/recvauth exchange by sending and receiving messages over \sphinxstyleemphasis{fd} . 11876 11877Credentials may be specified in three ways: 11878\begin{quote} 11879\begin{itemize} 11880\item {} 11881If \sphinxstyleemphasis{in\_creds} is NULL, credentials are obtained with {\hyperref[\detokenize{appdev/refs/api/krb5_get_credentials:c.krb5_get_credentials}]{\sphinxcrossref{\sphinxcode{krb5\_get\_credentials()}}}} using the principals \sphinxstyleemphasis{client} and \sphinxstyleemphasis{server} . \sphinxstyleemphasis{server} must be non-null; \sphinxstyleemphasis{client} may NULL to use the default principal of \sphinxstyleemphasis{ccache} . 11882 11883\item {} 11884If \sphinxstyleemphasis{in\_creds} is non-null, but does not contain a ticket, credentials for the exchange are obtained with {\hyperref[\detokenize{appdev/refs/api/krb5_get_credentials:c.krb5_get_credentials}]{\sphinxcrossref{\sphinxcode{krb5\_get\_credentials()}}}} using \sphinxstyleemphasis{in\_creds} . In this case, the values of \sphinxstyleemphasis{client} and \sphinxstyleemphasis{server} are unused. 11885 11886\item {} 11887If \sphinxstyleemphasis{in\_creds} is a complete credentials structure, it used directly. In this case, the values of \sphinxstyleemphasis{client} , \sphinxstyleemphasis{server} , and \sphinxstyleemphasis{ccache} are unused. 11888 11889\end{itemize} 11890 11891If the server is using a different application protocol than that specified in \sphinxstyleemphasis{appl\_version} , an error will be returned. 11892\end{quote} 11893 11894Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_creds:c.krb5_free_creds}]{\sphinxcrossref{\sphinxcode{krb5\_free\_creds()}}}} to free \sphinxstyleemphasis{out\_creds} , {\hyperref[\detokenize{appdev/refs/api/krb5_free_ap_rep_enc_part:c.krb5_free_ap_rep_enc_part}]{\sphinxcrossref{\sphinxcode{krb5\_free\_ap\_rep\_enc\_part()}}}} to free \sphinxstyleemphasis{rep\_result} , and {\hyperref[\detokenize{appdev/refs/api/krb5_free_error:c.krb5_free_error}]{\sphinxcrossref{\sphinxcode{krb5\_free\_error()}}}} to free \sphinxstyleemphasis{error} when they are no longer needed. 11895 11896 11897\sphinxstrong{See also:} 11898 11899 11900{\hyperref[\detokenize{appdev/refs/api/krb5_recvauth:c.krb5_recvauth}]{\sphinxcrossref{\sphinxcode{krb5\_recvauth()}}}} 11901 11902 11903 11904 11905\subsection{Deprecated public interfaces} 11906\label{\detokenize{appdev/refs/api/index:deprecated-public-interfaces}} 11907 11908\subsubsection{krb5\_524\_convert\_creds - Convert a Kerberos V5 credentials to a Kerberos V4 credentials.} 11909\label{\detokenize{appdev/refs/api/krb5_524_convert_creds:krb5-524-convert-creds-convert-a-kerberos-v5-credentials-to-a-kerberos-v4-credentials}}\label{\detokenize{appdev/refs/api/krb5_524_convert_creds::doc}}\index{krb5\_524\_convert\_creds (C function)} 11910 11911\begin{fulllineitems} 11912\phantomsection\label{\detokenize{appdev/refs/api/krb5_524_convert_creds:c.krb5_524_convert_creds}}\pysiglinewithargsret{int \sphinxbfcode{krb5\_524\_convert\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ v5creds}, struct credentials *\sphinxstyleemphasis{ v4creds}}{} 11913\end{fulllineitems} 11914 11915\begin{quote}\begin{description} 11916\item[{param}] \leavevmode 11917\sphinxstylestrong{context} 11918 11919\sphinxstylestrong{v5creds} 11920 11921\sphinxstylestrong{v4creds} 11922 11923\end{description}\end{quote} 11924\begin{quote}\begin{description} 11925\item[{retval}] \leavevmode\begin{itemize} 11926\item {} 11927KRB524\_KRB4\_DISABLED (always) 11928 11929\end{itemize} 11930 11931\end{description}\end{quote} 11932 11933\begin{sphinxadmonition}{note}{Note:} 11934Not implemented 11935\end{sphinxadmonition} 11936 11937 11938\subsubsection{krb5\_auth\_con\_getlocalsubkey} 11939\label{\detokenize{appdev/refs/api/krb5_auth_con_getlocalsubkey::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getlocalsubkey:krb5-auth-con-getlocalsubkey}}\index{krb5\_auth\_con\_getlocalsubkey (C function)} 11940 11941\begin{fulllineitems} 11942\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getlocalsubkey:c.krb5_auth_con_getlocalsubkey}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getlocalsubkey}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ keyblock}}{} 11943\end{fulllineitems} 11944 11945\begin{quote}\begin{description} 11946\item[{param}] \leavevmode 11947\sphinxstylestrong{context} 11948 11949\sphinxstylestrong{auth\_context} 11950 11951\sphinxstylestrong{keyblock} 11952 11953\end{description}\end{quote} 11954 11955DEPRECATED Replaced by krb5\_auth\_con\_getsendsubkey() . 11956 11957 11958\subsubsection{krb5\_auth\_con\_getremotesubkey} 11959\label{\detokenize{appdev/refs/api/krb5_auth_con_getremotesubkey::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getremotesubkey:krb5-auth-con-getremotesubkey}}\index{krb5\_auth\_con\_getremotesubkey (C function)} 11960 11961\begin{fulllineitems} 11962\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getremotesubkey:c.krb5_auth_con_getremotesubkey}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getremotesubkey}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ keyblock}}{} 11963\end{fulllineitems} 11964 11965\begin{quote}\begin{description} 11966\item[{param}] \leavevmode 11967\sphinxstylestrong{context} 11968 11969\sphinxstylestrong{auth\_context} 11970 11971\sphinxstylestrong{keyblock} 11972 11973\end{description}\end{quote} 11974 11975DEPRECATED Replaced by krb5\_auth\_con\_getrecvsubkey() . 11976 11977 11978\subsubsection{krb5\_auth\_con\_initivector - Cause an auth context to use cipher state.} 11979\label{\detokenize{appdev/refs/api/krb5_auth_con_initivector::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_initivector:krb5-auth-con-initivector-cause-an-auth-context-to-use-cipher-state}}\index{krb5\_auth\_con\_initivector (C function)} 11980 11981\begin{fulllineitems} 11982\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_initivector:c.krb5_auth_con_initivector}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_initivector}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}}{} 11983\end{fulllineitems} 11984 11985\begin{quote}\begin{description} 11986\item[{param}] \leavevmode 11987\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context 11988 11989\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context 11990 11991\end{description}\end{quote} 11992\begin{quote}\begin{description} 11993\item[{retval}] \leavevmode\begin{itemize} 11994\item {} 119950 Success; otherwise - Kerberos error codes 11996 11997\end{itemize} 11998 11999\end{description}\end{quote} 12000 12001Prepare \sphinxstyleemphasis{auth\_context} to use cipher state when {\hyperref[\detokenize{appdev/refs/api/krb5_mk_priv:c.krb5_mk_priv}]{\sphinxcrossref{\sphinxcode{krb5\_mk\_priv()}}}} or {\hyperref[\detokenize{appdev/refs/api/krb5_rd_priv:c.krb5_rd_priv}]{\sphinxcrossref{\sphinxcode{krb5\_rd\_priv()}}}} encrypt or decrypt data. 12002 12003 12004\subsubsection{krb5\_build\_principal\_va} 12005\label{\detokenize{appdev/refs/api/krb5_build_principal_va:krb5-build-principal-va}}\label{\detokenize{appdev/refs/api/krb5_build_principal_va::doc}}\index{krb5\_build\_principal\_va (C function)} 12006 12007\begin{fulllineitems} 12008\phantomsection\label{\detokenize{appdev/refs/api/krb5_build_principal_va:c.krb5_build_principal_va}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_build\_principal\_va}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ princ}, unsigned int\sphinxstyleemphasis{ rlen}, const char *\sphinxstyleemphasis{ realm}, va\_list\sphinxstyleemphasis{ ap}}{} 12009\end{fulllineitems} 12010 12011\begin{quote}\begin{description} 12012\item[{param}] \leavevmode 12013\sphinxstylestrong{context} 12014 12015\sphinxstylestrong{princ} 12016 12017\sphinxstylestrong{rlen} 12018 12019\sphinxstylestrong{realm} 12020 12021\sphinxstylestrong{ap} 12022 12023\end{description}\end{quote} 12024 12025DEPRECATED Replaced by krb5\_build\_principal\_alloc\_va() . 12026 12027 12028\subsubsection{krb5\_c\_random\_seed} 12029\label{\detokenize{appdev/refs/api/krb5_c_random_seed:krb5-c-random-seed}}\label{\detokenize{appdev/refs/api/krb5_c_random_seed::doc}}\index{krb5\_c\_random\_seed (C function)} 12030 12031\begin{fulllineitems} 12032\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_random_seed:c.krb5_c_random_seed}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_random\_seed}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}}{} 12033\end{fulllineitems} 12034 12035\begin{quote}\begin{description} 12036\item[{param}] \leavevmode 12037\sphinxstylestrong{context} 12038 12039\sphinxstylestrong{data} 12040 12041\end{description}\end{quote} 12042 12043DEPRECATED Replaced by krb5\_c\_* API family. 12044 12045 12046\subsubsection{krb5\_calculate\_checksum} 12047\label{\detokenize{appdev/refs/api/krb5_calculate_checksum:krb5-calculate-checksum}}\label{\detokenize{appdev/refs/api/krb5_calculate_checksum::doc}}\index{krb5\_calculate\_checksum (C function)} 12048 12049\begin{fulllineitems} 12050\phantomsection\label{\detokenize{appdev/refs/api/krb5_calculate_checksum:c.krb5_calculate_checksum}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_calculate\_checksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ ctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}]{\sphinxcrossref{krb5\_const\_pointer}}}\sphinxstyleemphasis{ in}, size\_t\sphinxstyleemphasis{ in\_length}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}]{\sphinxcrossref{krb5\_const\_pointer}}}\sphinxstyleemphasis{ seed}, size\_t\sphinxstyleemphasis{ seed\_length}, {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} *\sphinxstyleemphasis{ outcksum}}{} 12051\end{fulllineitems} 12052 12053\begin{quote}\begin{description} 12054\item[{param}] \leavevmode 12055\sphinxstylestrong{context} 12056 12057\sphinxstylestrong{ctype} 12058 12059\sphinxstylestrong{in} 12060 12061\sphinxstylestrong{in\_length} 12062 12063\sphinxstylestrong{seed} 12064 12065\sphinxstylestrong{seed\_length} 12066 12067\sphinxstylestrong{outcksum} 12068 12069\end{description}\end{quote} 12070 12071DEPRECATED See krb5\_c\_make\_checksum() 12072 12073 12074\subsubsection{krb5\_checksum\_size} 12075\label{\detokenize{appdev/refs/api/krb5_checksum_size:krb5-checksum-size}}\label{\detokenize{appdev/refs/api/krb5_checksum_size::doc}}\index{krb5\_checksum\_size (C function)} 12076 12077\begin{fulllineitems} 12078\phantomsection\label{\detokenize{appdev/refs/api/krb5_checksum_size:c.krb5_checksum_size}}\pysiglinewithargsret{size\_t \sphinxbfcode{krb5\_checksum\_size}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ ctype}}{} 12079\end{fulllineitems} 12080 12081\begin{quote}\begin{description} 12082\item[{param}] \leavevmode 12083\sphinxstylestrong{context} 12084 12085\sphinxstylestrong{ctype} 12086 12087\end{description}\end{quote} 12088 12089DEPRECATED See krb5\_c\_checksum\_length() 12090 12091 12092\subsubsection{krb5\_encrypt} 12093\label{\detokenize{appdev/refs/api/krb5_encrypt:krb5-encrypt}}\label{\detokenize{appdev/refs/api/krb5_encrypt::doc}}\index{krb5\_encrypt (C function)} 12094 12095\begin{fulllineitems} 12096\phantomsection\label{\detokenize{appdev/refs/api/krb5_encrypt:c.krb5_encrypt}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_encrypt}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}]{\sphinxcrossref{krb5\_const\_pointer}}}\sphinxstyleemphasis{ inptr}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}}\sphinxstyleemphasis{ outptr}, size\_t\sphinxstyleemphasis{ size}, {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}}\sphinxstyleemphasis{ ivec}}{} 12097\end{fulllineitems} 12098 12099\begin{quote}\begin{description} 12100\item[{param}] \leavevmode 12101\sphinxstylestrong{context} 12102 12103\sphinxstylestrong{inptr} 12104 12105\sphinxstylestrong{outptr} 12106 12107\sphinxstylestrong{size} 12108 12109\sphinxstylestrong{eblock} 12110 12111\sphinxstylestrong{ivec} 12112 12113\end{description}\end{quote} 12114 12115DEPRECATED Replaced by krb5\_c\_* API family. 12116 12117 12118\subsubsection{krb5\_decrypt} 12119\label{\detokenize{appdev/refs/api/krb5_decrypt:krb5-decrypt}}\label{\detokenize{appdev/refs/api/krb5_decrypt::doc}}\index{krb5\_decrypt (C function)} 12120 12121\begin{fulllineitems} 12122\phantomsection\label{\detokenize{appdev/refs/api/krb5_decrypt:c.krb5_decrypt}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_decrypt}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}]{\sphinxcrossref{krb5\_const\_pointer}}}\sphinxstyleemphasis{ inptr}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}}\sphinxstyleemphasis{ outptr}, size\_t\sphinxstyleemphasis{ size}, {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}}\sphinxstyleemphasis{ ivec}}{} 12123\end{fulllineitems} 12124 12125\begin{quote}\begin{description} 12126\item[{param}] \leavevmode 12127\sphinxstylestrong{context} 12128 12129\sphinxstylestrong{inptr} 12130 12131\sphinxstylestrong{outptr} 12132 12133\sphinxstylestrong{size} 12134 12135\sphinxstylestrong{eblock} 12136 12137\sphinxstylestrong{ivec} 12138 12139\end{description}\end{quote} 12140 12141DEPRECATED Replaced by krb5\_c\_* API family. 12142 12143 12144\subsubsection{krb5\_eblock\_enctype} 12145\label{\detokenize{appdev/refs/api/krb5_eblock_enctype::doc}}\label{\detokenize{appdev/refs/api/krb5_eblock_enctype:krb5-eblock-enctype}}\index{krb5\_eblock\_enctype (C function)} 12146 12147\begin{fulllineitems} 12148\phantomsection\label{\detokenize{appdev/refs/api/krb5_eblock_enctype:c.krb5_eblock_enctype}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} \sphinxbfcode{krb5\_eblock\_enctype}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}}{} 12149\end{fulllineitems} 12150 12151\begin{quote}\begin{description} 12152\item[{param}] \leavevmode 12153\sphinxstylestrong{context} 12154 12155\sphinxstylestrong{eblock} 12156 12157\end{description}\end{quote} 12158 12159DEPRECATED Replaced by krb5\_c\_* API family. 12160 12161 12162\subsubsection{krb5\_encrypt\_size} 12163\label{\detokenize{appdev/refs/api/krb5_encrypt_size:krb5-encrypt-size}}\label{\detokenize{appdev/refs/api/krb5_encrypt_size::doc}}\index{krb5\_encrypt\_size (C function)} 12164 12165\begin{fulllineitems} 12166\phantomsection\label{\detokenize{appdev/refs/api/krb5_encrypt_size:c.krb5_encrypt_size}}\pysiglinewithargsret{size\_t \sphinxbfcode{krb5\_encrypt\_size}}{size\_t\sphinxstyleemphasis{ length}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ crypto}}{} 12167\end{fulllineitems} 12168 12169\begin{quote}\begin{description} 12170\item[{param}] \leavevmode 12171\sphinxstylestrong{length} 12172 12173\sphinxstylestrong{crypto} 12174 12175\end{description}\end{quote} 12176 12177DEPRECATED Replaced by krb5\_c\_* API family. 12178 12179 12180\subsubsection{krb5\_finish\_key} 12181\label{\detokenize{appdev/refs/api/krb5_finish_key:krb5-finish-key}}\label{\detokenize{appdev/refs/api/krb5_finish_key::doc}}\index{krb5\_finish\_key (C function)} 12182 12183\begin{fulllineitems} 12184\phantomsection\label{\detokenize{appdev/refs/api/krb5_finish_key:c.krb5_finish_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_finish\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}}{} 12185\end{fulllineitems} 12186 12187\begin{quote}\begin{description} 12188\item[{param}] \leavevmode 12189\sphinxstylestrong{context} 12190 12191\sphinxstylestrong{eblock} 12192 12193\end{description}\end{quote} 12194 12195DEPRECATED Replaced by krb5\_c\_* API family. 12196 12197 12198\subsubsection{krb5\_finish\_random\_key} 12199\label{\detokenize{appdev/refs/api/krb5_finish_random_key:krb5-finish-random-key}}\label{\detokenize{appdev/refs/api/krb5_finish_random_key::doc}}\index{krb5\_finish\_random\_key (C function)} 12200 12201\begin{fulllineitems} 12202\phantomsection\label{\detokenize{appdev/refs/api/krb5_finish_random_key:c.krb5_finish_random_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_finish\_random\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}} *\sphinxstyleemphasis{ ptr}}{} 12203\end{fulllineitems} 12204 12205\begin{quote}\begin{description} 12206\item[{param}] \leavevmode 12207\sphinxstylestrong{context} 12208 12209\sphinxstylestrong{eblock} 12210 12211\sphinxstylestrong{ptr} 12212 12213\end{description}\end{quote} 12214 12215DEPRECATED Replaced by krb5\_c\_* API family. 12216 12217 12218\subsubsection{krb5\_cc\_gen\_new} 12219\label{\detokenize{appdev/refs/api/krb5_cc_gen_new:krb5-cc-gen-new}}\label{\detokenize{appdev/refs/api/krb5_cc_gen_new::doc}}\index{krb5\_cc\_gen\_new (C function)} 12220 12221\begin{fulllineitems} 12222\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_gen_new:c.krb5_cc_gen_new}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_gen\_new}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}} *\sphinxstyleemphasis{ cache}}{} 12223\end{fulllineitems} 12224 12225\begin{quote}\begin{description} 12226\item[{param}] \leavevmode 12227\sphinxstylestrong{context} 12228 12229\sphinxstylestrong{cache} 12230 12231\end{description}\end{quote} 12232 12233 12234\subsubsection{krb5\_get\_credentials\_renew} 12235\label{\detokenize{appdev/refs/api/krb5_get_credentials_renew:krb5-get-credentials-renew}}\label{\detokenize{appdev/refs/api/krb5_get_credentials_renew::doc}}\index{krb5\_get\_credentials\_renew (C function)} 12236 12237\begin{fulllineitems} 12238\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_credentials_renew:c.krb5_get_credentials_renew}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_credentials\_renew}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ options}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ in\_creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} **\sphinxstyleemphasis{ out\_creds}}{} 12239\end{fulllineitems} 12240 12241\begin{quote}\begin{description} 12242\item[{param}] \leavevmode 12243\sphinxstylestrong{context} 12244 12245\sphinxstylestrong{options} 12246 12247\sphinxstylestrong{ccache} 12248 12249\sphinxstylestrong{in\_creds} 12250 12251\sphinxstylestrong{out\_creds} 12252 12253\end{description}\end{quote} 12254 12255DEPRECATED Replaced by krb5\_get\_renewed\_creds. 12256 12257 12258\subsubsection{krb5\_get\_credentials\_validate} 12259\label{\detokenize{appdev/refs/api/krb5_get_credentials_validate:krb5-get-credentials-validate}}\label{\detokenize{appdev/refs/api/krb5_get_credentials_validate::doc}}\index{krb5\_get\_credentials\_validate (C function)} 12260 12261\begin{fulllineitems} 12262\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_credentials_validate:c.krb5_get_credentials_validate}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_credentials\_validate}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ options}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ in\_creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} **\sphinxstyleemphasis{ out\_creds}}{} 12263\end{fulllineitems} 12264 12265\begin{quote}\begin{description} 12266\item[{param}] \leavevmode 12267\sphinxstylestrong{context} 12268 12269\sphinxstylestrong{options} 12270 12271\sphinxstylestrong{ccache} 12272 12273\sphinxstylestrong{in\_creds} 12274 12275\sphinxstylestrong{out\_creds} 12276 12277\end{description}\end{quote} 12278 12279DEPRECATED Replaced by krb5\_get\_validated\_creds. 12280 12281 12282\subsubsection{krb5\_get\_in\_tkt\_with\_password} 12283\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_password:krb5-get-in-tkt-with-password}}\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_password::doc}}\index{krb5\_get\_in\_tkt\_with\_password (C function)} 12284 12285\begin{fulllineitems} 12286\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_password:c.krb5_get_in_tkt_with_password}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_in\_tkt\_with\_password}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ options}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *const *\sphinxstyleemphasis{ addrs}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} *\sphinxstyleemphasis{ ktypes}, {\hyperref[\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}]{\sphinxcrossref{krb5\_preauthtype}}} *\sphinxstyleemphasis{ pre\_auth\_types}, const char *\sphinxstyleemphasis{ password}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}]{\sphinxcrossref{krb5\_kdc\_rep}}} **\sphinxstyleemphasis{ ret\_as\_reply}}{} 12287\end{fulllineitems} 12288 12289\begin{quote}\begin{description} 12290\item[{param}] \leavevmode 12291\sphinxstylestrong{context} 12292 12293\sphinxstylestrong{options} 12294 12295\sphinxstylestrong{addrs} 12296 12297\sphinxstylestrong{ktypes} 12298 12299\sphinxstylestrong{pre\_auth\_types} 12300 12301\sphinxstylestrong{password} 12302 12303\sphinxstylestrong{ccache} 12304 12305\sphinxstylestrong{creds} 12306 12307\sphinxstylestrong{ret\_as\_reply} 12308 12309\end{description}\end{quote} 12310 12311DEPRECATED Replaced by krb5\_get\_init\_creds\_password() . 12312 12313 12314\subsubsection{krb5\_get\_in\_tkt\_with\_skey} 12315\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_skey:krb5-get-in-tkt-with-skey}}\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_skey::doc}}\index{krb5\_get\_in\_tkt\_with\_skey (C function)} 12316 12317\begin{fulllineitems} 12318\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_skey:c.krb5_get_in_tkt_with_skey}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_in\_tkt\_with\_skey}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ options}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *const *\sphinxstyleemphasis{ addrs}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} *\sphinxstyleemphasis{ ktypes}, {\hyperref[\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}]{\sphinxcrossref{krb5\_preauthtype}}} *\sphinxstyleemphasis{ pre\_auth\_types}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}]{\sphinxcrossref{krb5\_kdc\_rep}}} **\sphinxstyleemphasis{ ret\_as\_reply}}{} 12319\end{fulllineitems} 12320 12321\begin{quote}\begin{description} 12322\item[{param}] \leavevmode 12323\sphinxstylestrong{context} 12324 12325\sphinxstylestrong{options} 12326 12327\sphinxstylestrong{addrs} 12328 12329\sphinxstylestrong{ktypes} 12330 12331\sphinxstylestrong{pre\_auth\_types} 12332 12333\sphinxstylestrong{key} 12334 12335\sphinxstylestrong{ccache} 12336 12337\sphinxstylestrong{creds} 12338 12339\sphinxstylestrong{ret\_as\_reply} 12340 12341\end{description}\end{quote} 12342 12343DEPRECATED Replaced by krb5\_get\_init\_creds(). 12344 12345 12346\subsubsection{krb5\_get\_in\_tkt\_with\_keytab} 12347\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_keytab:krb5-get-in-tkt-with-keytab}}\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_keytab::doc}}\index{krb5\_get\_in\_tkt\_with\_keytab (C function)} 12348 12349\begin{fulllineitems} 12350\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_keytab:c.krb5_get_in_tkt_with_keytab}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_in\_tkt\_with\_keytab}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ options}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *const *\sphinxstyleemphasis{ addrs}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} *\sphinxstyleemphasis{ ktypes}, {\hyperref[\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}]{\sphinxcrossref{krb5\_preauthtype}}} *\sphinxstyleemphasis{ pre\_auth\_types}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ arg\_keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}]{\sphinxcrossref{krb5\_kdc\_rep}}} **\sphinxstyleemphasis{ ret\_as\_reply}}{} 12351\end{fulllineitems} 12352 12353\begin{quote}\begin{description} 12354\item[{param}] \leavevmode 12355\sphinxstylestrong{context} 12356 12357\sphinxstylestrong{options} 12358 12359\sphinxstylestrong{addrs} 12360 12361\sphinxstylestrong{ktypes} 12362 12363\sphinxstylestrong{pre\_auth\_types} 12364 12365\sphinxstylestrong{arg\_keytab} 12366 12367\sphinxstylestrong{ccache} 12368 12369\sphinxstylestrong{creds} 12370 12371\sphinxstylestrong{ret\_as\_reply} 12372 12373\end{description}\end{quote} 12374 12375DEPRECATED Replaced by krb5\_get\_init\_creds\_keytab() . 12376 12377 12378\subsubsection{krb5\_get\_init\_creds\_opt\_init} 12379\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_init:krb5-get-init-creds-opt-init}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_init::doc}}\index{krb5\_get\_init\_creds\_opt\_init (C function)} 12380 12381\begin{fulllineitems} 12382\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_init:c.krb5_get_init_creds_opt_init}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_init}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}}{} 12383\end{fulllineitems} 12384 12385\begin{quote}\begin{description} 12386\item[{param}] \leavevmode 12387\sphinxstylestrong{opt} 12388 12389\end{description}\end{quote} 12390 12391DEPRECATED Use krb5\_get\_init\_creds\_opt\_alloc() instead. 12392 12393 12394\subsubsection{krb5\_init\_random\_key} 12395\label{\detokenize{appdev/refs/api/krb5_init_random_key:krb5-init-random-key}}\label{\detokenize{appdev/refs/api/krb5_init_random_key::doc}}\index{krb5\_init\_random\_key (C function)} 12396 12397\begin{fulllineitems} 12398\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_random_key:c.krb5_init_random_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_random\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ keyblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}} *\sphinxstyleemphasis{ ptr}}{} 12399\end{fulllineitems} 12400 12401\begin{quote}\begin{description} 12402\item[{param}] \leavevmode 12403\sphinxstylestrong{context} 12404 12405\sphinxstylestrong{eblock} 12406 12407\sphinxstylestrong{keyblock} 12408 12409\sphinxstylestrong{ptr} 12410 12411\end{description}\end{quote} 12412 12413DEPRECATED Replaced by krb5\_c\_* API family. 12414 12415 12416\subsubsection{krb5\_kt\_free\_entry} 12417\label{\detokenize{appdev/refs/api/krb5_kt_free_entry:krb5-kt-free-entry}}\label{\detokenize{appdev/refs/api/krb5_kt_free_entry::doc}}\index{krb5\_kt\_free\_entry (C function)} 12418 12419\begin{fulllineitems} 12420\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_free_entry:c.krb5_kt_free_entry}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_free\_entry}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{krb5\_keytab\_entry}}} *\sphinxstyleemphasis{ entry}}{} 12421\end{fulllineitems} 12422 12423\begin{quote}\begin{description} 12424\item[{param}] \leavevmode 12425\sphinxstylestrong{context} 12426 12427\sphinxstylestrong{entry} 12428 12429\end{description}\end{quote} 12430 12431DEPRECATED Use krb5\_free\_keytab\_entry\_contents instead. 12432 12433 12434\subsubsection{krb5\_random\_key} 12435\label{\detokenize{appdev/refs/api/krb5_random_key:krb5-random-key}}\label{\detokenize{appdev/refs/api/krb5_random_key::doc}}\index{krb5\_random\_key (C function)} 12436 12437\begin{fulllineitems} 12438\phantomsection\label{\detokenize{appdev/refs/api/krb5_random_key:c.krb5_random_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_random\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}}\sphinxstyleemphasis{ ptr}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ keyblock}}{} 12439\end{fulllineitems} 12440 12441\begin{quote}\begin{description} 12442\item[{param}] \leavevmode 12443\sphinxstylestrong{context} 12444 12445\sphinxstylestrong{eblock} 12446 12447\sphinxstylestrong{ptr} 12448 12449\sphinxstylestrong{keyblock} 12450 12451\end{description}\end{quote} 12452 12453DEPRECATED Replaced by krb5\_c\_* API family. 12454 12455 12456\subsubsection{krb5\_process\_key} 12457\label{\detokenize{appdev/refs/api/krb5_process_key:krb5-process-key}}\label{\detokenize{appdev/refs/api/krb5_process_key::doc}}\index{krb5\_process\_key (C function)} 12458 12459\begin{fulllineitems} 12460\phantomsection\label{\detokenize{appdev/refs/api/krb5_process_key:c.krb5_process_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_process\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}}{} 12461\end{fulllineitems} 12462 12463\begin{quote}\begin{description} 12464\item[{param}] \leavevmode 12465\sphinxstylestrong{context} 12466 12467\sphinxstylestrong{eblock} 12468 12469\sphinxstylestrong{key} 12470 12471\end{description}\end{quote} 12472 12473DEPRECATED Replaced by krb5\_c\_* API family. 12474 12475 12476\subsubsection{krb5\_string\_to\_key} 12477\label{\detokenize{appdev/refs/api/krb5_string_to_key:krb5-string-to-key}}\label{\detokenize{appdev/refs/api/krb5_string_to_key::doc}}\index{krb5\_string\_to\_key (C function)} 12478 12479\begin{fulllineitems} 12480\phantomsection\label{\detokenize{appdev/refs/api/krb5_string_to_key:c.krb5_string_to_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_string\_to\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ keyblock}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ salt}}{} 12481\end{fulllineitems} 12482 12483\begin{quote}\begin{description} 12484\item[{param}] \leavevmode 12485\sphinxstylestrong{context} 12486 12487\sphinxstylestrong{eblock} 12488 12489\sphinxstylestrong{keyblock} 12490 12491\sphinxstylestrong{data} 12492 12493\sphinxstylestrong{salt} 12494 12495\end{description}\end{quote} 12496 12497DEPRECATED See krb5\_c\_string\_to\_key() 12498 12499 12500\subsubsection{krb5\_use\_enctype} 12501\label{\detokenize{appdev/refs/api/krb5_use_enctype:krb5-use-enctype}}\label{\detokenize{appdev/refs/api/krb5_use_enctype::doc}}\index{krb5\_use\_enctype (C function)} 12502 12503\begin{fulllineitems} 12504\phantomsection\label{\detokenize{appdev/refs/api/krb5_use_enctype:c.krb5_use_enctype}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_use\_enctype}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}}{} 12505\end{fulllineitems} 12506 12507\begin{quote}\begin{description} 12508\item[{param}] \leavevmode 12509\sphinxstylestrong{context} 12510 12511\sphinxstylestrong{eblock} 12512 12513\sphinxstylestrong{enctype} 12514 12515\end{description}\end{quote} 12516 12517DEPRECATED Replaced by krb5\_c\_* API family. 12518 12519 12520\subsubsection{krb5\_verify\_checksum} 12521\label{\detokenize{appdev/refs/api/krb5_verify_checksum::doc}}\label{\detokenize{appdev/refs/api/krb5_verify_checksum:krb5-verify-checksum}}\index{krb5\_verify\_checksum (C function)} 12522 12523\begin{fulllineitems} 12524\phantomsection\label{\detokenize{appdev/refs/api/krb5_verify_checksum:c.krb5_verify_checksum}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_verify\_checksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ ctype}, const {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} *\sphinxstyleemphasis{ cksum}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}]{\sphinxcrossref{krb5\_const\_pointer}}}\sphinxstyleemphasis{ in}, size\_t\sphinxstyleemphasis{ in\_length}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}]{\sphinxcrossref{krb5\_const\_pointer}}}\sphinxstyleemphasis{ seed}, size\_t\sphinxstyleemphasis{ seed\_length}}{} 12525\end{fulllineitems} 12526 12527\begin{quote}\begin{description} 12528\item[{param}] \leavevmode 12529\sphinxstylestrong{context} 12530 12531\sphinxstylestrong{ctype} 12532 12533\sphinxstylestrong{cksum} 12534 12535\sphinxstylestrong{in} 12536 12537\sphinxstylestrong{in\_length} 12538 12539\sphinxstylestrong{seed} 12540 12541\sphinxstylestrong{seed\_length} 12542 12543\end{description}\end{quote} 12544 12545DEPRECATED See krb5\_c\_verify\_checksum() 12546 12547 12548\section{krb5 types and structures} 12549\label{\detokenize{appdev/refs/types/index::doc}}\label{\detokenize{appdev/refs/types/index:krb5-types-and-structures}} 12550 12551\subsection{Public} 12552\label{\detokenize{appdev/refs/types/index:public}} 12553 12554\subsubsection{krb5\_address} 12555\label{\detokenize{appdev/refs/types/krb5_address:krb5-address-struct}}\label{\detokenize{appdev/refs/types/krb5_address::doc}}\label{\detokenize{appdev/refs/types/krb5_address:krb5-address}}\index{krb5\_address (C type)} 12556 12557\begin{fulllineitems} 12558\phantomsection\label{\detokenize{appdev/refs/types/krb5_address:c.krb5_address}}\pysigline{\sphinxbfcode{krb5\_address}} 12559\end{fulllineitems} 12560 12561 12562Structure for address. 12563 12564 12565\paragraph{Declaration} 12566\label{\detokenize{appdev/refs/types/krb5_address:declaration}} 12567typedef struct \_krb5\_address krb5\_address 12568 12569 12570\paragraph{Members} 12571\label{\detokenize{appdev/refs/types/krb5_address:members}}\index{krb5\_address.magic (C member)} 12572 12573\begin{fulllineitems} 12574\phantomsection\label{\detokenize{appdev/refs/types/krb5_address:c.krb5_address.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_address.magic}} 12575\end{fulllineitems} 12576 12577\index{krb5\_address.addrtype (C member)} 12578 12579\begin{fulllineitems} 12580\phantomsection\label{\detokenize{appdev/refs/types/krb5_address:c.krb5_address.addrtype}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_addrtype:c.krb5_addrtype}]{\sphinxcrossref{krb5\_addrtype}}} \sphinxbfcode{krb5\_address.addrtype}} 12581\end{fulllineitems} 12582 12583\index{krb5\_address.length (C member)} 12584 12585\begin{fulllineitems} 12586\phantomsection\label{\detokenize{appdev/refs/types/krb5_address:c.krb5_address.length}}\pysigline{unsigned int \sphinxbfcode{krb5\_address.length}} 12587\end{fulllineitems} 12588 12589\index{krb5\_address.contents (C member)} 12590 12591\begin{fulllineitems} 12592\phantomsection\label{\detokenize{appdev/refs/types/krb5_address:c.krb5_address.contents}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{krb5\_octet}}} * \sphinxbfcode{krb5\_address.contents}} 12593\end{fulllineitems} 12594 12595 12596 12597\subsubsection{krb5\_addrtype} 12598\label{\detokenize{appdev/refs/types/krb5_addrtype:krb5-addrtype}}\label{\detokenize{appdev/refs/types/krb5_addrtype:krb5-addrtype-struct}}\label{\detokenize{appdev/refs/types/krb5_addrtype::doc}}\index{krb5\_addrtype (C type)} 12599 12600\begin{fulllineitems} 12601\phantomsection\label{\detokenize{appdev/refs/types/krb5_addrtype:c.krb5_addrtype}}\pysigline{\sphinxbfcode{krb5\_addrtype}} 12602\end{fulllineitems} 12603 12604 12605 12606\paragraph{Declaration} 12607\label{\detokenize{appdev/refs/types/krb5_addrtype:declaration}} 12608typedef krb5\_int32 krb5\_addrtype 12609 12610 12611\subsubsection{krb5\_ap\_req} 12612\label{\detokenize{appdev/refs/types/krb5_ap_req:krb5-ap-req}}\label{\detokenize{appdev/refs/types/krb5_ap_req::doc}}\label{\detokenize{appdev/refs/types/krb5_ap_req:krb5-ap-req-struct}}\index{krb5\_ap\_req (C type)} 12613 12614\begin{fulllineitems} 12615\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req}}\pysigline{\sphinxbfcode{krb5\_ap\_req}} 12616\end{fulllineitems} 12617 12618 12619Authentication header. 12620 12621 12622\paragraph{Declaration} 12623\label{\detokenize{appdev/refs/types/krb5_ap_req:declaration}} 12624typedef struct \_krb5\_ap\_req krb5\_ap\_req 12625 12626 12627\paragraph{Members} 12628\label{\detokenize{appdev/refs/types/krb5_ap_req:members}}\index{krb5\_ap\_req.magic (C member)} 12629 12630\begin{fulllineitems} 12631\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_ap\_req.magic}} 12632\end{fulllineitems} 12633 12634\index{krb5\_ap\_req.ap\_options (C member)} 12635 12636\begin{fulllineitems} 12637\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req.ap_options}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}} \sphinxbfcode{krb5\_ap\_req.ap\_options}} 12638Requested options. 12639 12640\end{fulllineitems} 12641 12642\index{krb5\_ap\_req.ticket (C member)} 12643 12644\begin{fulllineitems} 12645\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req.ticket}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} * \sphinxbfcode{krb5\_ap\_req.ticket}} 12646Ticket. 12647 12648\end{fulllineitems} 12649 12650\index{krb5\_ap\_req.authenticator (C member)} 12651 12652\begin{fulllineitems} 12653\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req.authenticator}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}} \sphinxbfcode{krb5\_ap\_req.authenticator}} 12654Encrypted authenticator. 12655 12656\end{fulllineitems} 12657 12658 12659 12660\subsubsection{krb5\_ap\_rep} 12661\label{\detokenize{appdev/refs/types/krb5_ap_rep:krb5-ap-rep-struct}}\label{\detokenize{appdev/refs/types/krb5_ap_rep:krb5-ap-rep}}\label{\detokenize{appdev/refs/types/krb5_ap_rep::doc}}\index{krb5\_ap\_rep (C type)} 12662 12663\begin{fulllineitems} 12664\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep:c.krb5_ap_rep}}\pysigline{\sphinxbfcode{krb5\_ap\_rep}} 12665\end{fulllineitems} 12666 12667 12668C representaton of AP-REP message. 12669 12670The server’s response to a client’s request for mutual authentication. 12671 12672 12673\paragraph{Declaration} 12674\label{\detokenize{appdev/refs/types/krb5_ap_rep:declaration}} 12675typedef struct \_krb5\_ap\_rep krb5\_ap\_rep 12676 12677 12678\paragraph{Members} 12679\label{\detokenize{appdev/refs/types/krb5_ap_rep:members}}\index{krb5\_ap\_rep.magic (C member)} 12680 12681\begin{fulllineitems} 12682\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep:c.krb5_ap_rep.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_ap\_rep.magic}} 12683\end{fulllineitems} 12684 12685\index{krb5\_ap\_rep.enc\_part (C member)} 12686 12687\begin{fulllineitems} 12688\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep:c.krb5_ap_rep.enc_part}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}} \sphinxbfcode{krb5\_ap\_rep.enc\_part}} 12689Ciphertext of ApRepEncPart. 12690 12691\end{fulllineitems} 12692 12693 12694 12695\subsubsection{krb5\_ap\_rep\_enc\_part} 12696\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:krb5-ap-rep-enc-part-struct}}\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part::doc}}\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:krb5-ap-rep-enc-part}}\index{krb5\_ap\_rep\_enc\_part (C type)} 12697 12698\begin{fulllineitems} 12699\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part}}\pysigline{\sphinxbfcode{krb5\_ap\_rep\_enc\_part}} 12700\end{fulllineitems} 12701 12702 12703Cleartext that is encrypted and put into \sphinxcode{\_krb5\_ap\_rep} . 12704 12705 12706\paragraph{Declaration} 12707\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:declaration}} 12708typedef struct \_krb5\_ap\_rep\_enc\_part krb5\_ap\_rep\_enc\_part 12709 12710 12711\paragraph{Members} 12712\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:members}}\index{krb5\_ap\_rep\_enc\_part.magic (C member)} 12713 12714\begin{fulllineitems} 12715\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_ap\_rep\_enc\_part.magic}} 12716\end{fulllineitems} 12717 12718\index{krb5\_ap\_rep\_enc\_part.ctime (C member)} 12719 12720\begin{fulllineitems} 12721\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part.ctime}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} \sphinxbfcode{krb5\_ap\_rep\_enc\_part.ctime}} 12722Client time, seconds portion. 12723 12724\end{fulllineitems} 12725 12726\index{krb5\_ap\_rep\_enc\_part.cusec (C member)} 12727 12728\begin{fulllineitems} 12729\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part.cusec}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_ap\_rep\_enc\_part.cusec}} 12730Client time, microseconds portion. 12731 12732\end{fulllineitems} 12733 12734\index{krb5\_ap\_rep\_enc\_part.subkey (C member)} 12735 12736\begin{fulllineitems} 12737\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part.subkey}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} * \sphinxbfcode{krb5\_ap\_rep\_enc\_part.subkey}} 12738Subkey (optional) 12739 12740\end{fulllineitems} 12741 12742\index{krb5\_ap\_rep\_enc\_part.seq\_number (C member)} 12743 12744\begin{fulllineitems} 12745\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part.seq_number}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{krb5\_ui\_4}}} \sphinxbfcode{krb5\_ap\_rep\_enc\_part.seq\_number}} 12746Sequence number. 12747 12748\end{fulllineitems} 12749 12750 12751 12752\subsubsection{krb5\_authdata} 12753\label{\detokenize{appdev/refs/types/krb5_authdata:krb5-authdata}}\label{\detokenize{appdev/refs/types/krb5_authdata::doc}}\label{\detokenize{appdev/refs/types/krb5_authdata:krb5-authdata-struct}}\index{krb5\_authdata (C type)} 12754 12755\begin{fulllineitems} 12756\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}}\pysigline{\sphinxbfcode{krb5\_authdata}} 12757\end{fulllineitems} 12758 12759 12760Structure for auth data. 12761 12762 12763\paragraph{Declaration} 12764\label{\detokenize{appdev/refs/types/krb5_authdata:declaration}} 12765typedef struct \_krb5\_authdata krb5\_authdata 12766 12767 12768\paragraph{Members} 12769\label{\detokenize{appdev/refs/types/krb5_authdata:members}}\index{krb5\_authdata.magic (C member)} 12770 12771\begin{fulllineitems} 12772\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_authdata.magic}} 12773\end{fulllineitems} 12774 12775\index{krb5\_authdata.ad\_type (C member)} 12776 12777\begin{fulllineitems} 12778\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata.ad_type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_authdatatype:c.krb5_authdatatype}]{\sphinxcrossref{krb5\_authdatatype}}} \sphinxbfcode{krb5\_authdata.ad\_type}} 12779ADTYPE. 12780 12781\end{fulllineitems} 12782 12783\index{krb5\_authdata.length (C member)} 12784 12785\begin{fulllineitems} 12786\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata.length}}\pysigline{unsigned int \sphinxbfcode{krb5\_authdata.length}} 12787Length of data. 12788 12789\end{fulllineitems} 12790 12791\index{krb5\_authdata.contents (C member)} 12792 12793\begin{fulllineitems} 12794\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata.contents}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{krb5\_octet}}} * \sphinxbfcode{krb5\_authdata.contents}} 12795Data. 12796 12797\end{fulllineitems} 12798 12799 12800 12801\subsubsection{krb5\_authdatatype} 12802\label{\detokenize{appdev/refs/types/krb5_authdatatype:krb5-authdatatype-struct}}\label{\detokenize{appdev/refs/types/krb5_authdatatype::doc}}\label{\detokenize{appdev/refs/types/krb5_authdatatype:krb5-authdatatype}}\index{krb5\_authdatatype (C type)} 12803 12804\begin{fulllineitems} 12805\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdatatype:c.krb5_authdatatype}}\pysigline{\sphinxbfcode{krb5\_authdatatype}} 12806\end{fulllineitems} 12807 12808 12809 12810\paragraph{Declaration} 12811\label{\detokenize{appdev/refs/types/krb5_authdatatype:declaration}} 12812typedef krb5\_int32 krb5\_authdatatype 12813 12814 12815\subsubsection{krb5\_authenticator} 12816\label{\detokenize{appdev/refs/types/krb5_authenticator:krb5-authenticator-struct}}\label{\detokenize{appdev/refs/types/krb5_authenticator:krb5-authenticator}}\label{\detokenize{appdev/refs/types/krb5_authenticator::doc}}\index{krb5\_authenticator (C type)} 12817 12818\begin{fulllineitems} 12819\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}}\pysigline{\sphinxbfcode{krb5\_authenticator}} 12820\end{fulllineitems} 12821 12822 12823Ticket authenticator. 12824 12825The C representation of an unencrypted authenticator. 12826 12827 12828\paragraph{Declaration} 12829\label{\detokenize{appdev/refs/types/krb5_authenticator:declaration}} 12830typedef struct \_krb5\_authenticator krb5\_authenticator 12831 12832 12833\paragraph{Members} 12834\label{\detokenize{appdev/refs/types/krb5_authenticator:members}}\index{krb5\_authenticator.magic (C member)} 12835 12836\begin{fulllineitems} 12837\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_authenticator.magic}} 12838\end{fulllineitems} 12839 12840\index{krb5\_authenticator.client (C member)} 12841 12842\begin{fulllineitems} 12843\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.client}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} \sphinxbfcode{krb5\_authenticator.client}} 12844client name/realm 12845 12846\end{fulllineitems} 12847 12848\index{krb5\_authenticator.checksum (C member)} 12849 12850\begin{fulllineitems} 12851\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.checksum}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} * \sphinxbfcode{krb5\_authenticator.checksum}} 12852checksum, includes type, optional 12853 12854\end{fulllineitems} 12855 12856\index{krb5\_authenticator.cusec (C member)} 12857 12858\begin{fulllineitems} 12859\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.cusec}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_authenticator.cusec}} 12860client usec portion 12861 12862\end{fulllineitems} 12863 12864\index{krb5\_authenticator.ctime (C member)} 12865 12866\begin{fulllineitems} 12867\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.ctime}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} \sphinxbfcode{krb5\_authenticator.ctime}} 12868client sec portion 12869 12870\end{fulllineitems} 12871 12872\index{krb5\_authenticator.subkey (C member)} 12873 12874\begin{fulllineitems} 12875\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.subkey}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} * \sphinxbfcode{krb5\_authenticator.subkey}} 12876true session key, optional 12877 12878\end{fulllineitems} 12879 12880\index{krb5\_authenticator.seq\_number (C member)} 12881 12882\begin{fulllineitems} 12883\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.seq_number}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{krb5\_ui\_4}}} \sphinxbfcode{krb5\_authenticator.seq\_number}} 12884sequence \#, optional 12885 12886\end{fulllineitems} 12887 12888\index{krb5\_authenticator.authorization\_data (C member)} 12889 12890\begin{fulllineitems} 12891\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.authorization_data}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} ** \sphinxbfcode{krb5\_authenticator.authorization\_data}} 12892authoriazation data 12893 12894\end{fulllineitems} 12895 12896 12897 12898\subsubsection{krb5\_boolean} 12899\label{\detokenize{appdev/refs/types/krb5_boolean:krb5-boolean-struct}}\label{\detokenize{appdev/refs/types/krb5_boolean::doc}}\label{\detokenize{appdev/refs/types/krb5_boolean:krb5-boolean}}\index{krb5\_boolean (C type)} 12900 12901\begin{fulllineitems} 12902\phantomsection\label{\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}}\pysigline{\sphinxbfcode{krb5\_boolean}} 12903\end{fulllineitems} 12904 12905 12906 12907\paragraph{Declaration} 12908\label{\detokenize{appdev/refs/types/krb5_boolean:declaration}} 12909typedef unsigned int krb5\_boolean 12910 12911 12912\subsubsection{krb5\_checksum} 12913\label{\detokenize{appdev/refs/types/krb5_checksum::doc}}\label{\detokenize{appdev/refs/types/krb5_checksum:krb5-checksum}}\label{\detokenize{appdev/refs/types/krb5_checksum:krb5-checksum-struct}}\index{krb5\_checksum (C type)} 12914 12915\begin{fulllineitems} 12916\phantomsection\label{\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}}\pysigline{\sphinxbfcode{krb5\_checksum}} 12917\end{fulllineitems} 12918 12919 12920 12921\paragraph{Declaration} 12922\label{\detokenize{appdev/refs/types/krb5_checksum:declaration}} 12923typedef struct \_krb5\_checksum krb5\_checksum 12924 12925 12926\paragraph{Members} 12927\label{\detokenize{appdev/refs/types/krb5_checksum:members}}\index{krb5\_checksum.magic (C member)} 12928 12929\begin{fulllineitems} 12930\phantomsection\label{\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_checksum.magic}} 12931\end{fulllineitems} 12932 12933\index{krb5\_checksum.checksum\_type (C member)} 12934 12935\begin{fulllineitems} 12936\phantomsection\label{\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum.checksum_type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}} \sphinxbfcode{krb5\_checksum.checksum\_type}} 12937\end{fulllineitems} 12938 12939\index{krb5\_checksum.length (C member)} 12940 12941\begin{fulllineitems} 12942\phantomsection\label{\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum.length}}\pysigline{unsigned int \sphinxbfcode{krb5\_checksum.length}} 12943\end{fulllineitems} 12944 12945\index{krb5\_checksum.contents (C member)} 12946 12947\begin{fulllineitems} 12948\phantomsection\label{\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum.contents}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{krb5\_octet}}} * \sphinxbfcode{krb5\_checksum.contents}} 12949\end{fulllineitems} 12950 12951 12952 12953\subsubsection{krb5\_const\_pointer} 12954\label{\detokenize{appdev/refs/types/krb5_const_pointer:krb5-const-pointer}}\label{\detokenize{appdev/refs/types/krb5_const_pointer::doc}}\label{\detokenize{appdev/refs/types/krb5_const_pointer:krb5-const-pointer-struct}}\index{krb5\_const\_pointer (C type)} 12955 12956\begin{fulllineitems} 12957\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}}\pysigline{\sphinxbfcode{krb5\_const\_pointer}} 12958\end{fulllineitems} 12959 12960 12961 12962\paragraph{Declaration} 12963\label{\detokenize{appdev/refs/types/krb5_const_pointer:declaration}} 12964typedef void const* krb5\_const\_pointer 12965 12966 12967\subsubsection{krb5\_const\_principal} 12968\label{\detokenize{appdev/refs/types/krb5_const_principal:krb5-const-principal-struct}}\label{\detokenize{appdev/refs/types/krb5_const_principal:krb5-const-principal}}\label{\detokenize{appdev/refs/types/krb5_const_principal::doc}}\index{krb5\_const\_principal (C type)} 12969 12970\begin{fulllineitems} 12971\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}}\pysigline{\sphinxbfcode{krb5\_const\_principal}} 12972\end{fulllineitems} 12973 12974 12975Constant version of {\hyperref[\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_data}}}} . 12976 12977 12978\paragraph{Declaration} 12979\label{\detokenize{appdev/refs/types/krb5_const_principal:declaration}} 12980typedef const krb5\_principal\_data* krb5\_const\_principal 12981 12982 12983\paragraph{Members} 12984\label{\detokenize{appdev/refs/types/krb5_const_principal:members}}\index{krb5\_const\_principal.magic (C member)} 12985 12986\begin{fulllineitems} 12987\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_const\_principal.magic}} 12988\end{fulllineitems} 12989 12990\index{krb5\_const\_principal.realm (C member)} 12991 12992\begin{fulllineitems} 12993\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal.realm}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_const\_principal.realm}} 12994\end{fulllineitems} 12995 12996\index{krb5\_const\_principal.data (C member)} 12997 12998\begin{fulllineitems} 12999\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal.data}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} * \sphinxbfcode{krb5\_const\_principal.data}} 13000An array of strings. 13001 13002\end{fulllineitems} 13003 13004\index{krb5\_const\_principal.length (C member)} 13005 13006\begin{fulllineitems} 13007\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal.length}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_const\_principal.length}} 13008\end{fulllineitems} 13009 13010\index{krb5\_const\_principal.type (C member)} 13011 13012\begin{fulllineitems} 13013\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal.type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_const\_principal.type}} 13014\end{fulllineitems} 13015 13016 13017 13018\subsubsection{krb5\_cred} 13019\label{\detokenize{appdev/refs/types/krb5_cred:krb5-cred-struct}}\label{\detokenize{appdev/refs/types/krb5_cred::doc}}\label{\detokenize{appdev/refs/types/krb5_cred:krb5-cred}}\index{krb5\_cred (C type)} 13020 13021\begin{fulllineitems} 13022\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred}}\pysigline{\sphinxbfcode{krb5\_cred}} 13023\end{fulllineitems} 13024 13025 13026Credentials data structure. 13027 13028 13029\paragraph{Declaration} 13030\label{\detokenize{appdev/refs/types/krb5_cred:declaration}} 13031typedef struct \_krb5\_cred krb5\_cred 13032 13033 13034\paragraph{Members} 13035\label{\detokenize{appdev/refs/types/krb5_cred:members}}\index{krb5\_cred.magic (C member)} 13036 13037\begin{fulllineitems} 13038\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_cred.magic}} 13039\end{fulllineitems} 13040 13041\index{krb5\_cred.tickets (C member)} 13042 13043\begin{fulllineitems} 13044\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred.tickets}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} ** \sphinxbfcode{krb5\_cred.tickets}} 13045Tickets. 13046 13047\end{fulllineitems} 13048 13049\index{krb5\_cred.enc\_part (C member)} 13050 13051\begin{fulllineitems} 13052\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred.enc_part}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}} \sphinxbfcode{krb5\_cred.enc\_part}} 13053Encrypted part. 13054 13055\end{fulllineitems} 13056 13057\index{krb5\_cred.enc\_part2 (C member)} 13058 13059\begin{fulllineitems} 13060\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred.enc_part2}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part}]{\sphinxcrossref{krb5\_cred\_enc\_part}}} * \sphinxbfcode{krb5\_cred.enc\_part2}} 13061Unencrypted version, if available. 13062 13063\end{fulllineitems} 13064 13065 13066 13067\subsubsection{krb5\_cred\_enc\_part} 13068\label{\detokenize{appdev/refs/types/krb5_cred_enc_part::doc}}\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:krb5-cred-enc-part}}\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:krb5-cred-enc-part-struct}}\index{krb5\_cred\_enc\_part (C type)} 13069 13070\begin{fulllineitems} 13071\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part}}\pysigline{\sphinxbfcode{krb5\_cred\_enc\_part}} 13072\end{fulllineitems} 13073 13074 13075Cleartext credentials information. 13076 13077 13078\paragraph{Declaration} 13079\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:declaration}} 13080typedef struct \_krb5\_cred\_enc\_part krb5\_cred\_enc\_part 13081 13082 13083\paragraph{Members} 13084\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:members}}\index{krb5\_cred\_enc\_part.magic (C member)} 13085 13086\begin{fulllineitems} 13087\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_cred\_enc\_part.magic}} 13088\end{fulllineitems} 13089 13090\index{krb5\_cred\_enc\_part.nonce (C member)} 13091 13092\begin{fulllineitems} 13093\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.nonce}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_cred\_enc\_part.nonce}} 13094Nonce (optional) 13095 13096\end{fulllineitems} 13097 13098\index{krb5\_cred\_enc\_part.timestamp (C member)} 13099 13100\begin{fulllineitems} 13101\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.timestamp}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} \sphinxbfcode{krb5\_cred\_enc\_part.timestamp}} 13102Generation time, seconds portion. 13103 13104\end{fulllineitems} 13105 13106\index{krb5\_cred\_enc\_part.usec (C member)} 13107 13108\begin{fulllineitems} 13109\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.usec}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_cred\_enc\_part.usec}} 13110Generation time, microseconds portion. 13111 13112\end{fulllineitems} 13113 13114\index{krb5\_cred\_enc\_part.s\_address (C member)} 13115 13116\begin{fulllineitems} 13117\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.s_address}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} * \sphinxbfcode{krb5\_cred\_enc\_part.s\_address}} 13118Sender address (optional) 13119 13120\end{fulllineitems} 13121 13122\index{krb5\_cred\_enc\_part.r\_address (C member)} 13123 13124\begin{fulllineitems} 13125\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.r_address}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} * \sphinxbfcode{krb5\_cred\_enc\_part.r\_address}} 13126Recipient address (optional) 13127 13128\end{fulllineitems} 13129 13130\index{krb5\_cred\_enc\_part.ticket\_info (C member)} 13131 13132\begin{fulllineitems} 13133\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.ticket_info}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info}]{\sphinxcrossref{krb5\_cred\_info}}} ** \sphinxbfcode{krb5\_cred\_enc\_part.ticket\_info}} 13134\end{fulllineitems} 13135 13136 13137 13138\subsubsection{krb5\_cred\_info} 13139\label{\detokenize{appdev/refs/types/krb5_cred_info:krb5-cred-info-struct}}\label{\detokenize{appdev/refs/types/krb5_cred_info::doc}}\label{\detokenize{appdev/refs/types/krb5_cred_info:krb5-cred-info}}\index{krb5\_cred\_info (C type)} 13140 13141\begin{fulllineitems} 13142\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info}}\pysigline{\sphinxbfcode{krb5\_cred\_info}} 13143\end{fulllineitems} 13144 13145 13146Credentials information inserted into \sphinxstyleemphasis{EncKrbCredPart} . 13147 13148 13149\paragraph{Declaration} 13150\label{\detokenize{appdev/refs/types/krb5_cred_info:declaration}} 13151typedef struct \_krb5\_cred\_info krb5\_cred\_info 13152 13153 13154\paragraph{Members} 13155\label{\detokenize{appdev/refs/types/krb5_cred_info:members}}\index{krb5\_cred\_info.magic (C member)} 13156 13157\begin{fulllineitems} 13158\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_cred\_info.magic}} 13159\end{fulllineitems} 13160 13161\index{krb5\_cred\_info.session (C member)} 13162 13163\begin{fulllineitems} 13164\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.session}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} * \sphinxbfcode{krb5\_cred\_info.session}} 13165Session key used to encrypt ticket. 13166 13167\end{fulllineitems} 13168 13169\index{krb5\_cred\_info.client (C member)} 13170 13171\begin{fulllineitems} 13172\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.client}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} \sphinxbfcode{krb5\_cred\_info.client}} 13173Client principal and realm. 13174 13175\end{fulllineitems} 13176 13177\index{krb5\_cred\_info.server (C member)} 13178 13179\begin{fulllineitems} 13180\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.server}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} \sphinxbfcode{krb5\_cred\_info.server}} 13181Server principal and realm. 13182 13183\end{fulllineitems} 13184 13185\index{krb5\_cred\_info.flags (C member)} 13186 13187\begin{fulllineitems} 13188\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.flags}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}} \sphinxbfcode{krb5\_cred\_info.flags}} 13189Ticket flags. 13190 13191\end{fulllineitems} 13192 13193\index{krb5\_cred\_info.times (C member)} 13194 13195\begin{fulllineitems} 13196\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.times}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{krb5\_ticket\_times}}} \sphinxbfcode{krb5\_cred\_info.times}} 13197Auth, start, end, renew\_till. 13198 13199\end{fulllineitems} 13200 13201\index{krb5\_cred\_info.caddrs (C member)} 13202 13203\begin{fulllineitems} 13204\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.caddrs}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} ** \sphinxbfcode{krb5\_cred\_info.caddrs}} 13205Array of pointers to addrs (optional) 13206 13207\end{fulllineitems} 13208 13209 13210 13211\subsubsection{krb5\_creds} 13212\label{\detokenize{appdev/refs/types/krb5_creds::doc}}\label{\detokenize{appdev/refs/types/krb5_creds:krb5-creds}}\label{\detokenize{appdev/refs/types/krb5_creds:krb5-creds-struct}}\index{krb5\_creds (C type)} 13213 13214\begin{fulllineitems} 13215\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}}\pysigline{\sphinxbfcode{krb5\_creds}} 13216\end{fulllineitems} 13217 13218 13219Credentials structure including ticket, session key, and lifetime info. 13220 13221 13222\paragraph{Declaration} 13223\label{\detokenize{appdev/refs/types/krb5_creds:declaration}} 13224typedef struct \_krb5\_creds krb5\_creds 13225 13226 13227\paragraph{Members} 13228\label{\detokenize{appdev/refs/types/krb5_creds:members}}\index{krb5\_creds.magic (C member)} 13229 13230\begin{fulllineitems} 13231\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_creds.magic}} 13232\end{fulllineitems} 13233 13234\index{krb5\_creds.client (C member)} 13235 13236\begin{fulllineitems} 13237\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.client}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} \sphinxbfcode{krb5\_creds.client}} 13238client’s principal identifier 13239 13240\end{fulllineitems} 13241 13242\index{krb5\_creds.server (C member)} 13243 13244\begin{fulllineitems} 13245\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.server}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} \sphinxbfcode{krb5\_creds.server}} 13246server’s principal identifier 13247 13248\end{fulllineitems} 13249 13250\index{krb5\_creds.keyblock (C member)} 13251 13252\begin{fulllineitems} 13253\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.keyblock}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} \sphinxbfcode{krb5\_creds.keyblock}} 13254session encryption key info 13255 13256\end{fulllineitems} 13257 13258\index{krb5\_creds.times (C member)} 13259 13260\begin{fulllineitems} 13261\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.times}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{krb5\_ticket\_times}}} \sphinxbfcode{krb5\_creds.times}} 13262lifetime info 13263 13264\end{fulllineitems} 13265 13266\index{krb5\_creds.is\_skey (C member)} 13267 13268\begin{fulllineitems} 13269\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.is_skey}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_creds.is\_skey}} 13270true if ticket is encrypted in another ticket’s skey 13271 13272\end{fulllineitems} 13273 13274\index{krb5\_creds.ticket\_flags (C member)} 13275 13276\begin{fulllineitems} 13277\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.ticket_flags}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}} \sphinxbfcode{krb5\_creds.ticket\_flags}} 13278flags in ticket 13279 13280\end{fulllineitems} 13281 13282\index{krb5\_creds.addresses (C member)} 13283 13284\begin{fulllineitems} 13285\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.addresses}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} ** \sphinxbfcode{krb5\_creds.addresses}} 13286addrs in ticket 13287 13288\end{fulllineitems} 13289 13290\index{krb5\_creds.ticket (C member)} 13291 13292\begin{fulllineitems} 13293\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.ticket}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_creds.ticket}} 13294ticket string itself 13295 13296\end{fulllineitems} 13297 13298\index{krb5\_creds.second\_ticket (C member)} 13299 13300\begin{fulllineitems} 13301\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.second_ticket}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_creds.second\_ticket}} 13302second ticket, if related to ticket (via DUPLICATE-SKEY or ENC-TKT-IN-SKEY) 13303 13304\end{fulllineitems} 13305 13306\index{krb5\_creds.authdata (C member)} 13307 13308\begin{fulllineitems} 13309\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.authdata}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} ** \sphinxbfcode{krb5\_creds.authdata}} 13310authorization data 13311 13312\end{fulllineitems} 13313 13314 13315 13316\subsubsection{krb5\_crypto\_iov} 13317\label{\detokenize{appdev/refs/types/krb5_crypto_iov:krb5-crypto-iov}}\label{\detokenize{appdev/refs/types/krb5_crypto_iov::doc}}\label{\detokenize{appdev/refs/types/krb5_crypto_iov:krb5-crypto-iov-struct}}\index{krb5\_crypto\_iov (C type)} 13318 13319\begin{fulllineitems} 13320\phantomsection\label{\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}}\pysigline{\sphinxbfcode{krb5\_crypto\_iov}} 13321\end{fulllineitems} 13322 13323 13324Structure to describe a region of text to be encrypted or decrypted. 13325 13326The \sphinxstyleemphasis{flags} member describes the type of the iov. The \sphinxstyleemphasis{data} member points to the memory that will be manipulated. All iov APIs take a pointer to the first element of an array of krb5\_crypto\_iov’s along with the size of that array. Buffer contents are manipulated in-place; data is overwritten. Callers must allocate the right number of krb5\_crypto\_iov structures before calling into an iov API. 13327 13328 13329\paragraph{Declaration} 13330\label{\detokenize{appdev/refs/types/krb5_crypto_iov:declaration}} 13331typedef struct \_krb5\_crypto\_iov krb5\_crypto\_iov 13332 13333 13334\paragraph{Members} 13335\label{\detokenize{appdev/refs/types/krb5_crypto_iov:members}}\index{krb5\_crypto\_iov.flags (C member)} 13336 13337\begin{fulllineitems} 13338\phantomsection\label{\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov.flags}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_cryptotype:c.krb5_cryptotype}]{\sphinxcrossref{krb5\_cryptotype}}} \sphinxbfcode{krb5\_crypto\_iov.flags}} 13339\sphinxcode{KRB5\_CRYPTO\_TYPE} type of the iov 13340 13341\end{fulllineitems} 13342 13343\index{krb5\_crypto\_iov.data (C member)} 13344 13345\begin{fulllineitems} 13346\phantomsection\label{\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov.data}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_crypto\_iov.data}} 13347\end{fulllineitems} 13348 13349 13350 13351\subsubsection{krb5\_cryptotype} 13352\label{\detokenize{appdev/refs/types/krb5_cryptotype:krb5-cryptotype}}\label{\detokenize{appdev/refs/types/krb5_cryptotype::doc}}\label{\detokenize{appdev/refs/types/krb5_cryptotype:krb5-cryptotype-struct}}\index{krb5\_cryptotype (C type)} 13353 13354\begin{fulllineitems} 13355\phantomsection\label{\detokenize{appdev/refs/types/krb5_cryptotype:c.krb5_cryptotype}}\pysigline{\sphinxbfcode{krb5\_cryptotype}} 13356\end{fulllineitems} 13357 13358 13359 13360\paragraph{Declaration} 13361\label{\detokenize{appdev/refs/types/krb5_cryptotype:declaration}} 13362typedef krb5\_int32 krb5\_cryptotype 13363 13364 13365\subsubsection{krb5\_data} 13366\label{\detokenize{appdev/refs/types/krb5_data:krb5-data}}\label{\detokenize{appdev/refs/types/krb5_data::doc}}\label{\detokenize{appdev/refs/types/krb5_data:krb5-data-struct}}\index{krb5\_data (C type)} 13367 13368\begin{fulllineitems} 13369\phantomsection\label{\detokenize{appdev/refs/types/krb5_data:c.krb5_data}}\pysigline{\sphinxbfcode{krb5\_data}} 13370\end{fulllineitems} 13371 13372 13373 13374\paragraph{Declaration} 13375\label{\detokenize{appdev/refs/types/krb5_data:declaration}} 13376typedef struct \_krb5\_data krb5\_data 13377 13378 13379\paragraph{Members} 13380\label{\detokenize{appdev/refs/types/krb5_data:members}}\index{krb5\_data.magic (C member)} 13381 13382\begin{fulllineitems} 13383\phantomsection\label{\detokenize{appdev/refs/types/krb5_data:c.krb5_data.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_data.magic}} 13384\end{fulllineitems} 13385 13386\index{krb5\_data.length (C member)} 13387 13388\begin{fulllineitems} 13389\phantomsection\label{\detokenize{appdev/refs/types/krb5_data:c.krb5_data.length}}\pysigline{unsigned int \sphinxbfcode{krb5\_data.length}} 13390\end{fulllineitems} 13391 13392\index{krb5\_data.data (C member)} 13393 13394\begin{fulllineitems} 13395\phantomsection\label{\detokenize{appdev/refs/types/krb5_data:c.krb5_data.data}}\pysigline{char * \sphinxbfcode{krb5\_data.data}} 13396\end{fulllineitems} 13397 13398 13399 13400\subsubsection{krb5\_deltat} 13401\label{\detokenize{appdev/refs/types/krb5_deltat:krb5-deltat}}\label{\detokenize{appdev/refs/types/krb5_deltat:krb5-deltat-struct}}\label{\detokenize{appdev/refs/types/krb5_deltat::doc}}\index{krb5\_deltat (C type)} 13402 13403\begin{fulllineitems} 13404\phantomsection\label{\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}}\pysigline{\sphinxbfcode{krb5\_deltat}} 13405\end{fulllineitems} 13406 13407 13408 13409\paragraph{Declaration} 13410\label{\detokenize{appdev/refs/types/krb5_deltat:declaration}} 13411typedef krb5\_int32 krb5\_deltat 13412 13413 13414\subsubsection{krb5\_enc\_data} 13415\label{\detokenize{appdev/refs/types/krb5_enc_data::doc}}\label{\detokenize{appdev/refs/types/krb5_enc_data:krb5-enc-data}}\label{\detokenize{appdev/refs/types/krb5_enc_data:krb5-enc-data-struct}}\index{krb5\_enc\_data (C type)} 13416 13417\begin{fulllineitems} 13418\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}}\pysigline{\sphinxbfcode{krb5\_enc\_data}} 13419\end{fulllineitems} 13420 13421 13422 13423\paragraph{Declaration} 13424\label{\detokenize{appdev/refs/types/krb5_enc_data:declaration}} 13425typedef struct \_krb5\_enc\_data krb5\_enc\_data 13426 13427 13428\paragraph{Members} 13429\label{\detokenize{appdev/refs/types/krb5_enc_data:members}}\index{krb5\_enc\_data.magic (C member)} 13430 13431\begin{fulllineitems} 13432\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_enc\_data.magic}} 13433\end{fulllineitems} 13434 13435\index{krb5\_enc\_data.enctype (C member)} 13436 13437\begin{fulllineitems} 13438\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data.enctype}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} \sphinxbfcode{krb5\_enc\_data.enctype}} 13439\end{fulllineitems} 13440 13441\index{krb5\_enc\_data.kvno (C member)} 13442 13443\begin{fulllineitems} 13444\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data.kvno}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_kvno:c.krb5_kvno}]{\sphinxcrossref{krb5\_kvno}}} \sphinxbfcode{krb5\_enc\_data.kvno}} 13445\end{fulllineitems} 13446 13447\index{krb5\_enc\_data.ciphertext (C member)} 13448 13449\begin{fulllineitems} 13450\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data.ciphertext}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_enc\_data.ciphertext}} 13451\end{fulllineitems} 13452 13453 13454 13455\subsubsection{krb5\_enc\_kdc\_rep\_part} 13456\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part::doc}}\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:krb5-enc-kdc-rep-part}}\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:krb5-enc-kdc-rep-part-struct}}\index{krb5\_enc\_kdc\_rep\_part (C type)} 13457 13458\begin{fulllineitems} 13459\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part}}\pysigline{\sphinxbfcode{krb5\_enc\_kdc\_rep\_part}} 13460\end{fulllineitems} 13461 13462 13463C representation of \sphinxstyleemphasis{EncKDCRepPart} protocol message. 13464 13465This is the cleartext message that is encrypted and inserted in \sphinxstyleemphasis{KDC-REP} . 13466 13467 13468\paragraph{Declaration} 13469\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:declaration}} 13470typedef struct \_krb5\_enc\_kdc\_rep\_part krb5\_enc\_kdc\_rep\_part 13471 13472 13473\paragraph{Members} 13474\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:members}}\index{krb5\_enc\_kdc\_rep\_part.magic (C member)} 13475 13476\begin{fulllineitems} 13477\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.magic}} 13478\end{fulllineitems} 13479 13480\index{krb5\_enc\_kdc\_rep\_part.msg\_type (C member)} 13481 13482\begin{fulllineitems} 13483\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.msg_type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_msgtype:c.krb5_msgtype}]{\sphinxcrossref{krb5\_msgtype}}} \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.msg\_type}} 13484krb5 message type 13485 13486\end{fulllineitems} 13487 13488\index{krb5\_enc\_kdc\_rep\_part.session (C member)} 13489 13490\begin{fulllineitems} 13491\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.session}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} * \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.session}} 13492Session key. 13493 13494\end{fulllineitems} 13495 13496\index{krb5\_enc\_kdc\_rep\_part.last\_req (C member)} 13497 13498\begin{fulllineitems} 13499\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.last_req}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_last_req_entry:c.krb5_last_req_entry}]{\sphinxcrossref{krb5\_last\_req\_entry}}} ** \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.last\_req}} 13500Array of pointers to entries. 13501 13502\end{fulllineitems} 13503 13504\index{krb5\_enc\_kdc\_rep\_part.nonce (C member)} 13505 13506\begin{fulllineitems} 13507\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.nonce}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.nonce}} 13508Nonce from request. 13509 13510\end{fulllineitems} 13511 13512\index{krb5\_enc\_kdc\_rep\_part.key\_exp (C member)} 13513 13514\begin{fulllineitems} 13515\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.key_exp}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.key\_exp}} 13516Expiration date. 13517 13518\end{fulllineitems} 13519 13520\index{krb5\_enc\_kdc\_rep\_part.flags (C member)} 13521 13522\begin{fulllineitems} 13523\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.flags}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}} \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.flags}} 13524Ticket flags. 13525 13526\end{fulllineitems} 13527 13528\index{krb5\_enc\_kdc\_rep\_part.times (C member)} 13529 13530\begin{fulllineitems} 13531\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.times}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{krb5\_ticket\_times}}} \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.times}} 13532Lifetime info. 13533 13534\end{fulllineitems} 13535 13536\index{krb5\_enc\_kdc\_rep\_part.server (C member)} 13537 13538\begin{fulllineitems} 13539\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.server}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.server}} 13540Server’s principal identifier. 13541 13542\end{fulllineitems} 13543 13544\index{krb5\_enc\_kdc\_rep\_part.caddrs (C member)} 13545 13546\begin{fulllineitems} 13547\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.caddrs}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} ** \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.caddrs}} 13548Array of ptrs to addrs, optional. 13549 13550\end{fulllineitems} 13551 13552\index{krb5\_enc\_kdc\_rep\_part.enc\_padata (C member)} 13553 13554\begin{fulllineitems} 13555\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.enc_padata}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data}]{\sphinxcrossref{krb5\_pa\_data}}} ** \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.enc\_padata}} 13556Encrypted preauthentication data. 13557 13558\end{fulllineitems} 13559 13560 13561 13562\subsubsection{krb5\_enc\_tkt\_part} 13563\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:krb5-enc-tkt-part}}\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part::doc}}\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:krb5-enc-tkt-part-struct}}\index{krb5\_enc\_tkt\_part (C type)} 13564 13565\begin{fulllineitems} 13566\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part}}\pysigline{\sphinxbfcode{krb5\_enc\_tkt\_part}} 13567\end{fulllineitems} 13568 13569 13570Encrypted part of ticket. 13571 13572 13573\paragraph{Declaration} 13574\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:declaration}} 13575typedef struct \_krb5\_enc\_tkt\_part krb5\_enc\_tkt\_part 13576 13577 13578\paragraph{Members} 13579\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:members}}\index{krb5\_enc\_tkt\_part.magic (C member)} 13580 13581\begin{fulllineitems} 13582\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_enc\_tkt\_part.magic}} 13583\end{fulllineitems} 13584 13585\index{krb5\_enc\_tkt\_part.flags (C member)} 13586 13587\begin{fulllineitems} 13588\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.flags}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}} \sphinxbfcode{krb5\_enc\_tkt\_part.flags}} 13589flags 13590 13591\end{fulllineitems} 13592 13593\index{krb5\_enc\_tkt\_part.session (C member)} 13594 13595\begin{fulllineitems} 13596\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.session}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} * \sphinxbfcode{krb5\_enc\_tkt\_part.session}} 13597session key: includes enctype 13598 13599\end{fulllineitems} 13600 13601\index{krb5\_enc\_tkt\_part.client (C member)} 13602 13603\begin{fulllineitems} 13604\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.client}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} \sphinxbfcode{krb5\_enc\_tkt\_part.client}} 13605client name/realm 13606 13607\end{fulllineitems} 13608 13609\index{krb5\_enc\_tkt\_part.transited (C member)} 13610 13611\begin{fulllineitems} 13612\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.transited}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_transited:c.krb5_transited}]{\sphinxcrossref{krb5\_transited}}} \sphinxbfcode{krb5\_enc\_tkt\_part.transited}} 13613list of transited realms 13614 13615\end{fulllineitems} 13616 13617\index{krb5\_enc\_tkt\_part.times (C member)} 13618 13619\begin{fulllineitems} 13620\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.times}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{krb5\_ticket\_times}}} \sphinxbfcode{krb5\_enc\_tkt\_part.times}} 13621auth, start, end, renew\_till 13622 13623\end{fulllineitems} 13624 13625\index{krb5\_enc\_tkt\_part.caddrs (C member)} 13626 13627\begin{fulllineitems} 13628\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.caddrs}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} ** \sphinxbfcode{krb5\_enc\_tkt\_part.caddrs}} 13629array of ptrs to addresses 13630 13631\end{fulllineitems} 13632 13633\index{krb5\_enc\_tkt\_part.authorization\_data (C member)} 13634 13635\begin{fulllineitems} 13636\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.authorization_data}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} ** \sphinxbfcode{krb5\_enc\_tkt\_part.authorization\_data}} 13637auth data 13638 13639\end{fulllineitems} 13640 13641 13642 13643\subsubsection{krb5\_encrypt\_block} 13644\label{\detokenize{appdev/refs/types/krb5_encrypt_block:krb5-encrypt-block}}\label{\detokenize{appdev/refs/types/krb5_encrypt_block:krb5-encrypt-block-struct}}\label{\detokenize{appdev/refs/types/krb5_encrypt_block::doc}}\index{krb5\_encrypt\_block (C type)} 13645 13646\begin{fulllineitems} 13647\phantomsection\label{\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}}\pysigline{\sphinxbfcode{krb5\_encrypt\_block}} 13648\end{fulllineitems} 13649 13650 13651 13652\paragraph{Declaration} 13653\label{\detokenize{appdev/refs/types/krb5_encrypt_block:declaration}} 13654typedef struct \_krb5\_encrypt\_block krb5\_encrypt\_block 13655 13656 13657\paragraph{Members} 13658\label{\detokenize{appdev/refs/types/krb5_encrypt_block:members}}\index{krb5\_encrypt\_block.magic (C member)} 13659 13660\begin{fulllineitems} 13661\phantomsection\label{\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_encrypt\_block.magic}} 13662\end{fulllineitems} 13663 13664\index{krb5\_encrypt\_block.crypto\_entry (C member)} 13665 13666\begin{fulllineitems} 13667\phantomsection\label{\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block.crypto_entry}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} \sphinxbfcode{krb5\_encrypt\_block.crypto\_entry}} 13668\end{fulllineitems} 13669 13670\index{krb5\_encrypt\_block.key (C member)} 13671 13672\begin{fulllineitems} 13673\phantomsection\label{\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block.key}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} * \sphinxbfcode{krb5\_encrypt\_block.key}} 13674\end{fulllineitems} 13675 13676 13677 13678\subsubsection{krb5\_enctype} 13679\label{\detokenize{appdev/refs/types/krb5_enctype:krb5-enctype-struct}}\label{\detokenize{appdev/refs/types/krb5_enctype:krb5-enctype}}\label{\detokenize{appdev/refs/types/krb5_enctype::doc}}\index{krb5\_enctype (C type)} 13680 13681\begin{fulllineitems} 13682\phantomsection\label{\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}}\pysigline{\sphinxbfcode{krb5\_enctype}} 13683\end{fulllineitems} 13684 13685 13686 13687\paragraph{Declaration} 13688\label{\detokenize{appdev/refs/types/krb5_enctype:declaration}} 13689typedef krb5\_int32 krb5\_enctype 13690 13691 13692\subsubsection{krb5\_error} 13693\label{\detokenize{appdev/refs/types/krb5_error:krb5-error-struct}}\label{\detokenize{appdev/refs/types/krb5_error:krb5-error}}\label{\detokenize{appdev/refs/types/krb5_error::doc}}\index{krb5\_error (C type)} 13694 13695\begin{fulllineitems} 13696\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error}}\pysigline{\sphinxbfcode{krb5\_error}} 13697\end{fulllineitems} 13698 13699 13700Error message structure. 13701 13702 13703\paragraph{Declaration} 13704\label{\detokenize{appdev/refs/types/krb5_error:declaration}} 13705typedef struct \_krb5\_error krb5\_error 13706 13707 13708\paragraph{Members} 13709\label{\detokenize{appdev/refs/types/krb5_error:members}}\index{krb5\_error.magic (C member)} 13710 13711\begin{fulllineitems} 13712\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_error.magic}} 13713\end{fulllineitems} 13714 13715\index{krb5\_error.ctime (C member)} 13716 13717\begin{fulllineitems} 13718\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.ctime}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} \sphinxbfcode{krb5\_error.ctime}} 13719Client sec portion; optional. 13720 13721\end{fulllineitems} 13722 13723\index{krb5\_error.cusec (C member)} 13724 13725\begin{fulllineitems} 13726\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.cusec}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_error.cusec}} 13727Client usec portion; optional. 13728 13729\end{fulllineitems} 13730 13731\index{krb5\_error.susec (C member)} 13732 13733\begin{fulllineitems} 13734\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.susec}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_error.susec}} 13735Server usec portion. 13736 13737\end{fulllineitems} 13738 13739\index{krb5\_error.stime (C member)} 13740 13741\begin{fulllineitems} 13742\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.stime}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} \sphinxbfcode{krb5\_error.stime}} 13743Server sec portion. 13744 13745\end{fulllineitems} 13746 13747\index{krb5\_error.error (C member)} 13748 13749\begin{fulllineitems} 13750\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.error}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{krb5\_ui\_4}}} \sphinxbfcode{krb5\_error.error}} 13751Error code (protocol error \#’s) 13752 13753\end{fulllineitems} 13754 13755\index{krb5\_error.client (C member)} 13756 13757\begin{fulllineitems} 13758\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.client}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} \sphinxbfcode{krb5\_error.client}} 13759Client principal and realm. 13760 13761\end{fulllineitems} 13762 13763\index{krb5\_error.server (C member)} 13764 13765\begin{fulllineitems} 13766\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.server}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} \sphinxbfcode{krb5\_error.server}} 13767Server principal and realm. 13768 13769\end{fulllineitems} 13770 13771\index{krb5\_error.text (C member)} 13772 13773\begin{fulllineitems} 13774\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.text}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_error.text}} 13775Descriptive text. 13776 13777\end{fulllineitems} 13778 13779\index{krb5\_error.e\_data (C member)} 13780 13781\begin{fulllineitems} 13782\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.e_data}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_error.e\_data}} 13783Additional error-describing data. 13784 13785\end{fulllineitems} 13786 13787 13788 13789\subsubsection{krb5\_error\_code} 13790\label{\detokenize{appdev/refs/types/krb5_error_code:krb5-error-code}}\label{\detokenize{appdev/refs/types/krb5_error_code::doc}}\label{\detokenize{appdev/refs/types/krb5_error_code:krb5-error-code-struct}}\index{krb5\_error\_code (C type)} 13791 13792\begin{fulllineitems} 13793\phantomsection\label{\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}}\pysigline{\sphinxbfcode{krb5\_error\_code}} 13794\end{fulllineitems} 13795 13796 13797Used to convey an operation status. 13798 13799The value 0 indicates success; any other values are com\_err codes. Use {\hyperref[\detokenize{appdev/refs/api/krb5_get_error_message:c.krb5_get_error_message}]{\sphinxcrossref{\sphinxcode{krb5\_get\_error\_message()}}}} to obtain a string describing the error. 13800 13801 13802\paragraph{Declaration} 13803\label{\detokenize{appdev/refs/types/krb5_error_code:declaration}} 13804typedef krb5\_int32 krb5\_error\_code 13805 13806 13807\subsubsection{krb5\_expire\_callback\_func} 13808\label{\detokenize{appdev/refs/types/krb5_expire_callback_func:krb5-expire-callback-func}}\label{\detokenize{appdev/refs/types/krb5_expire_callback_func::doc}}\label{\detokenize{appdev/refs/types/krb5_expire_callback_func:krb5-expire-callback-func-struct}}\index{krb5\_expire\_callback\_func (C type)} 13809 13810\begin{fulllineitems} 13811\phantomsection\label{\detokenize{appdev/refs/types/krb5_expire_callback_func:c.krb5_expire_callback_func}}\pysigline{\sphinxbfcode{krb5\_expire\_callback\_func}} 13812\end{fulllineitems} 13813 13814 13815 13816\paragraph{Declaration} 13817\label{\detokenize{appdev/refs/types/krb5_expire_callback_func:declaration}} 13818typedef void( * krb5\_expire\_callback\_func) (krb5\_context context, void *data, krb5\_timestamp password\_expiration, krb5\_timestamp account\_expiration, krb5\_boolean is\_last\_req) 13819 13820 13821\subsubsection{krb5\_flags} 13822\label{\detokenize{appdev/refs/types/krb5_flags:krb5-flags-struct}}\label{\detokenize{appdev/refs/types/krb5_flags:krb5-flags}}\label{\detokenize{appdev/refs/types/krb5_flags::doc}}\index{krb5\_flags (C type)} 13823 13824\begin{fulllineitems} 13825\phantomsection\label{\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}}\pysigline{\sphinxbfcode{krb5\_flags}} 13826\end{fulllineitems} 13827 13828 13829 13830\paragraph{Declaration} 13831\label{\detokenize{appdev/refs/types/krb5_flags:declaration}} 13832typedef krb5\_int32 krb5\_flags 13833 13834 13835\subsubsection{krb5\_get\_init\_creds\_opt} 13836\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:krb5-get-init-creds-opt-struct}}\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt::doc}}\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:krb5-get-init-creds-opt}}\index{krb5\_get\_init\_creds\_opt (C type)} 13837 13838\begin{fulllineitems} 13839\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}}\pysigline{\sphinxbfcode{krb5\_get\_init\_creds\_opt}} 13840\end{fulllineitems} 13841 13842 13843Store options for \sphinxstyleemphasis{\_krb5\_get\_init\_creds} . 13844 13845 13846\paragraph{Declaration} 13847\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:declaration}} 13848typedef struct \_krb5\_get\_init\_creds\_opt krb5\_get\_init\_creds\_opt 13849 13850 13851\paragraph{Members} 13852\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:members}}\index{krb5\_get\_init\_creds\_opt.flags (C member)} 13853 13854\begin{fulllineitems} 13855\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.flags}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt.flags}} 13856\end{fulllineitems} 13857 13858\index{krb5\_get\_init\_creds\_opt.tkt\_life (C member)} 13859 13860\begin{fulllineitems} 13861\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.tkt_life}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{krb5\_deltat}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt.tkt\_life}} 13862\end{fulllineitems} 13863 13864\index{krb5\_get\_init\_creds\_opt.renew\_life (C member)} 13865 13866\begin{fulllineitems} 13867\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.renew_life}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{krb5\_deltat}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt.renew\_life}} 13868\end{fulllineitems} 13869 13870\index{krb5\_get\_init\_creds\_opt.forwardable (C member)} 13871 13872\begin{fulllineitems} 13873\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.forwardable}}\pysigline{int \sphinxbfcode{krb5\_get\_init\_creds\_opt.forwardable}} 13874\end{fulllineitems} 13875 13876\index{krb5\_get\_init\_creds\_opt.proxiable (C member)} 13877 13878\begin{fulllineitems} 13879\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.proxiable}}\pysigline{int \sphinxbfcode{krb5\_get\_init\_creds\_opt.proxiable}} 13880\end{fulllineitems} 13881 13882\index{krb5\_get\_init\_creds\_opt.etype\_list (C member)} 13883 13884\begin{fulllineitems} 13885\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.etype_list}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} * \sphinxbfcode{krb5\_get\_init\_creds\_opt.etype\_list}} 13886\end{fulllineitems} 13887 13888\index{krb5\_get\_init\_creds\_opt.etype\_list\_length (C member)} 13889 13890\begin{fulllineitems} 13891\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.etype_list_length}}\pysigline{int \sphinxbfcode{krb5\_get\_init\_creds\_opt.etype\_list\_length}} 13892\end{fulllineitems} 13893 13894\index{krb5\_get\_init\_creds\_opt.address\_list (C member)} 13895 13896\begin{fulllineitems} 13897\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.address_list}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} ** \sphinxbfcode{krb5\_get\_init\_creds\_opt.address\_list}} 13898\end{fulllineitems} 13899 13900\index{krb5\_get\_init\_creds\_opt.preauth\_list (C member)} 13901 13902\begin{fulllineitems} 13903\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.preauth_list}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}]{\sphinxcrossref{krb5\_preauthtype}}} * \sphinxbfcode{krb5\_get\_init\_creds\_opt.preauth\_list}} 13904\end{fulllineitems} 13905 13906\index{krb5\_get\_init\_creds\_opt.preauth\_list\_length (C member)} 13907 13908\begin{fulllineitems} 13909\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.preauth_list_length}}\pysigline{int \sphinxbfcode{krb5\_get\_init\_creds\_opt.preauth\_list\_length}} 13910\end{fulllineitems} 13911 13912\index{krb5\_get\_init\_creds\_opt.salt (C member)} 13913 13914\begin{fulllineitems} 13915\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.salt}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} * \sphinxbfcode{krb5\_get\_init\_creds\_opt.salt}} 13916\end{fulllineitems} 13917 13918 13919 13920\subsubsection{krb5\_gic\_opt\_pa\_data} 13921\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data::doc}}\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:krb5-gic-opt-pa-data}}\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:krb5-gic-opt-pa-data-struct}}\index{krb5\_gic\_opt\_pa\_data (C type)} 13922 13923\begin{fulllineitems} 13924\phantomsection\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:c.krb5_gic_opt_pa_data}}\pysigline{\sphinxbfcode{krb5\_gic\_opt\_pa\_data}} 13925\end{fulllineitems} 13926 13927 13928Generic preauth option attribute/value pairs. 13929 13930 13931\paragraph{Declaration} 13932\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:declaration}} 13933typedef struct \_krb5\_gic\_opt\_pa\_data krb5\_gic\_opt\_pa\_data 13934 13935 13936\paragraph{Members} 13937\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:members}}\index{krb5\_gic\_opt\_pa\_data.attr (C member)} 13938 13939\begin{fulllineitems} 13940\phantomsection\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:c.krb5_gic_opt_pa_data.attr}}\pysigline{char * \sphinxbfcode{krb5\_gic\_opt\_pa\_data.attr}} 13941\end{fulllineitems} 13942 13943\index{krb5\_gic\_opt\_pa\_data.value (C member)} 13944 13945\begin{fulllineitems} 13946\phantomsection\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:c.krb5_gic_opt_pa_data.value}}\pysigline{char * \sphinxbfcode{krb5\_gic\_opt\_pa\_data.value}} 13947\end{fulllineitems} 13948 13949 13950 13951\subsubsection{krb5\_int16} 13952\label{\detokenize{appdev/refs/types/krb5_int16:krb5-int16-struct}}\label{\detokenize{appdev/refs/types/krb5_int16:krb5-int16}}\label{\detokenize{appdev/refs/types/krb5_int16::doc}}\index{krb5\_int16 (C type)} 13953 13954\begin{fulllineitems} 13955\phantomsection\label{\detokenize{appdev/refs/types/krb5_int16:c.krb5_int16}}\pysigline{\sphinxbfcode{krb5\_int16}} 13956\end{fulllineitems} 13957 13958 13959 13960\paragraph{Declaration} 13961\label{\detokenize{appdev/refs/types/krb5_int16:declaration}} 13962typedef int16\_t krb5\_int16 13963 13964 13965\subsubsection{krb5\_int32} 13966\label{\detokenize{appdev/refs/types/krb5_int32:krb5-int32-struct}}\label{\detokenize{appdev/refs/types/krb5_int32::doc}}\label{\detokenize{appdev/refs/types/krb5_int32:krb5-int32}}\index{krb5\_int32 (C type)} 13967 13968\begin{fulllineitems} 13969\phantomsection\label{\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}}\pysigline{\sphinxbfcode{krb5\_int32}} 13970\end{fulllineitems} 13971 13972 13973 13974\paragraph{Declaration} 13975\label{\detokenize{appdev/refs/types/krb5_int32:declaration}} 13976typedef int32\_t krb5\_int32 13977 13978 13979\subsubsection{krb5\_kdc\_rep} 13980\label{\detokenize{appdev/refs/types/krb5_kdc_rep::doc}}\label{\detokenize{appdev/refs/types/krb5_kdc_rep:krb5-kdc-rep}}\label{\detokenize{appdev/refs/types/krb5_kdc_rep:krb5-kdc-rep-struct}}\index{krb5\_kdc\_rep (C type)} 13981 13982\begin{fulllineitems} 13983\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}}\pysigline{\sphinxbfcode{krb5\_kdc\_rep}} 13984\end{fulllineitems} 13985 13986 13987Representation of the \sphinxstyleemphasis{KDC-REP} protocol message. 13988 13989 13990\paragraph{Declaration} 13991\label{\detokenize{appdev/refs/types/krb5_kdc_rep:declaration}} 13992typedef struct \_krb5\_kdc\_rep krb5\_kdc\_rep 13993 13994 13995\paragraph{Members} 13996\label{\detokenize{appdev/refs/types/krb5_kdc_rep:members}}\index{krb5\_kdc\_rep.magic (C member)} 13997 13998\begin{fulllineitems} 13999\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_kdc\_rep.magic}} 14000\end{fulllineitems} 14001 14002\index{krb5\_kdc\_rep.msg\_type (C member)} 14003 14004\begin{fulllineitems} 14005\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.msg_type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_msgtype:c.krb5_msgtype}]{\sphinxcrossref{krb5\_msgtype}}} \sphinxbfcode{krb5\_kdc\_rep.msg\_type}} 14006KRB5\_AS\_REP or KRB5\_KDC\_REP. 14007 14008\end{fulllineitems} 14009 14010\index{krb5\_kdc\_rep.padata (C member)} 14011 14012\begin{fulllineitems} 14013\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.padata}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data}]{\sphinxcrossref{krb5\_pa\_data}}} ** \sphinxbfcode{krb5\_kdc\_rep.padata}} 14014Preauthentication data from KDC. 14015 14016\end{fulllineitems} 14017 14018\index{krb5\_kdc\_rep.client (C member)} 14019 14020\begin{fulllineitems} 14021\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.client}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} \sphinxbfcode{krb5\_kdc\_rep.client}} 14022Client principal and realm. 14023 14024\end{fulllineitems} 14025 14026\index{krb5\_kdc\_rep.ticket (C member)} 14027 14028\begin{fulllineitems} 14029\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.ticket}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} * \sphinxbfcode{krb5\_kdc\_rep.ticket}} 14030Ticket. 14031 14032\end{fulllineitems} 14033 14034\index{krb5\_kdc\_rep.enc\_part (C member)} 14035 14036\begin{fulllineitems} 14037\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.enc_part}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}} \sphinxbfcode{krb5\_kdc\_rep.enc\_part}} 14038Encrypted part of reply. 14039 14040\end{fulllineitems} 14041 14042\index{krb5\_kdc\_rep.enc\_part2 (C member)} 14043 14044\begin{fulllineitems} 14045\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.enc_part2}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part}]{\sphinxcrossref{krb5\_enc\_kdc\_rep\_part}}} * \sphinxbfcode{krb5\_kdc\_rep.enc\_part2}} 14046Unencrypted version, if available. 14047 14048\end{fulllineitems} 14049 14050 14051 14052\subsubsection{krb5\_kdc\_req} 14053\label{\detokenize{appdev/refs/types/krb5_kdc_req:krb5-kdc-req-struct}}\label{\detokenize{appdev/refs/types/krb5_kdc_req:krb5-kdc-req}}\label{\detokenize{appdev/refs/types/krb5_kdc_req::doc}}\index{krb5\_kdc\_req (C type)} 14054 14055\begin{fulllineitems} 14056\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}}\pysigline{\sphinxbfcode{krb5\_kdc\_req}} 14057\end{fulllineitems} 14058 14059 14060C representation of KDC-REQ protocol message, including KDC-REQ-BODY. 14061 14062 14063\paragraph{Declaration} 14064\label{\detokenize{appdev/refs/types/krb5_kdc_req:declaration}} 14065typedef struct \_krb5\_kdc\_req krb5\_kdc\_req 14066 14067 14068\paragraph{Members} 14069\label{\detokenize{appdev/refs/types/krb5_kdc_req:members}}\index{krb5\_kdc\_req.magic (C member)} 14070 14071\begin{fulllineitems} 14072\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_kdc\_req.magic}} 14073\end{fulllineitems} 14074 14075\index{krb5\_kdc\_req.msg\_type (C member)} 14076 14077\begin{fulllineitems} 14078\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.msg_type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_msgtype:c.krb5_msgtype}]{\sphinxcrossref{krb5\_msgtype}}} \sphinxbfcode{krb5\_kdc\_req.msg\_type}} 14079KRB5\_AS\_REQ or KRB5\_TGS\_REQ. 14080 14081\end{fulllineitems} 14082 14083\index{krb5\_kdc\_req.padata (C member)} 14084 14085\begin{fulllineitems} 14086\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.padata}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data}]{\sphinxcrossref{krb5\_pa\_data}}} ** \sphinxbfcode{krb5\_kdc\_req.padata}} 14087Preauthentication data. 14088 14089\end{fulllineitems} 14090 14091\index{krb5\_kdc\_req.kdc\_options (C member)} 14092 14093\begin{fulllineitems} 14094\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.kdc_options}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}} \sphinxbfcode{krb5\_kdc\_req.kdc\_options}} 14095Requested options. 14096 14097\end{fulllineitems} 14098 14099\index{krb5\_kdc\_req.client (C member)} 14100 14101\begin{fulllineitems} 14102\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.client}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} \sphinxbfcode{krb5\_kdc\_req.client}} 14103Client principal and realm. 14104 14105\end{fulllineitems} 14106 14107\index{krb5\_kdc\_req.server (C member)} 14108 14109\begin{fulllineitems} 14110\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.server}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} \sphinxbfcode{krb5\_kdc\_req.server}} 14111Server principal and realm. 14112 14113\end{fulllineitems} 14114 14115\index{krb5\_kdc\_req.from (C member)} 14116 14117\begin{fulllineitems} 14118\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.from}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} \sphinxbfcode{krb5\_kdc\_req.from}} 14119Requested start time. 14120 14121\end{fulllineitems} 14122 14123\index{krb5\_kdc\_req.till (C member)} 14124 14125\begin{fulllineitems} 14126\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.till}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} \sphinxbfcode{krb5\_kdc\_req.till}} 14127Requested end time. 14128 14129\end{fulllineitems} 14130 14131\index{krb5\_kdc\_req.rtime (C member)} 14132 14133\begin{fulllineitems} 14134\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.rtime}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} \sphinxbfcode{krb5\_kdc\_req.rtime}} 14135Requested renewable end time. 14136 14137\end{fulllineitems} 14138 14139\index{krb5\_kdc\_req.nonce (C member)} 14140 14141\begin{fulllineitems} 14142\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.nonce}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_kdc\_req.nonce}} 14143Nonce to match request and response. 14144 14145\end{fulllineitems} 14146 14147\index{krb5\_kdc\_req.nktypes (C member)} 14148 14149\begin{fulllineitems} 14150\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.nktypes}}\pysigline{int \sphinxbfcode{krb5\_kdc\_req.nktypes}} 14151Number of enctypes. 14152 14153\end{fulllineitems} 14154 14155\index{krb5\_kdc\_req.ktype (C member)} 14156 14157\begin{fulllineitems} 14158\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.ktype}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} * \sphinxbfcode{krb5\_kdc\_req.ktype}} 14159Requested enctypes. 14160 14161\end{fulllineitems} 14162 14163\index{krb5\_kdc\_req.addresses (C member)} 14164 14165\begin{fulllineitems} 14166\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.addresses}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} ** \sphinxbfcode{krb5\_kdc\_req.addresses}} 14167Requested addresses (optional) 14168 14169\end{fulllineitems} 14170 14171\index{krb5\_kdc\_req.authorization\_data (C member)} 14172 14173\begin{fulllineitems} 14174\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.authorization_data}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}} \sphinxbfcode{krb5\_kdc\_req.authorization\_data}} 14175Encrypted authz data (optional) 14176 14177\end{fulllineitems} 14178 14179\index{krb5\_kdc\_req.unenc\_authdata (C member)} 14180 14181\begin{fulllineitems} 14182\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.unenc_authdata}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} ** \sphinxbfcode{krb5\_kdc\_req.unenc\_authdata}} 14183Unencrypted authz data. 14184 14185\end{fulllineitems} 14186 14187\index{krb5\_kdc\_req.second\_ticket (C member)} 14188 14189\begin{fulllineitems} 14190\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.second_ticket}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} ** \sphinxbfcode{krb5\_kdc\_req.second\_ticket}} 14191Second ticket array (optional) 14192 14193\end{fulllineitems} 14194 14195 14196 14197\subsubsection{krb5\_keyblock} 14198\label{\detokenize{appdev/refs/types/krb5_keyblock:krb5-keyblock}}\label{\detokenize{appdev/refs/types/krb5_keyblock::doc}}\label{\detokenize{appdev/refs/types/krb5_keyblock:krb5-keyblock-struct}}\index{krb5\_keyblock (C type)} 14199 14200\begin{fulllineitems} 14201\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}}\pysigline{\sphinxbfcode{krb5\_keyblock}} 14202\end{fulllineitems} 14203 14204 14205Exposed contents of a key. 14206 14207 14208\paragraph{Declaration} 14209\label{\detokenize{appdev/refs/types/krb5_keyblock:declaration}} 14210typedef struct \_krb5\_keyblock krb5\_keyblock 14211 14212 14213\paragraph{Members} 14214\label{\detokenize{appdev/refs/types/krb5_keyblock:members}}\index{krb5\_keyblock.magic (C member)} 14215 14216\begin{fulllineitems} 14217\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_keyblock.magic}} 14218\end{fulllineitems} 14219 14220\index{krb5\_keyblock.enctype (C member)} 14221 14222\begin{fulllineitems} 14223\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock.enctype}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} \sphinxbfcode{krb5\_keyblock.enctype}} 14224\end{fulllineitems} 14225 14226\index{krb5\_keyblock.length (C member)} 14227 14228\begin{fulllineitems} 14229\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock.length}}\pysigline{unsigned int \sphinxbfcode{krb5\_keyblock.length}} 14230\end{fulllineitems} 14231 14232\index{krb5\_keyblock.contents (C member)} 14233 14234\begin{fulllineitems} 14235\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock.contents}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{krb5\_octet}}} * \sphinxbfcode{krb5\_keyblock.contents}} 14236\end{fulllineitems} 14237 14238 14239 14240\subsubsection{krb5\_keytab\_entry} 14241\label{\detokenize{appdev/refs/types/krb5_keytab_entry:krb5-keytab-entry}}\label{\detokenize{appdev/refs/types/krb5_keytab_entry:krb5-keytab-entry-struct}}\label{\detokenize{appdev/refs/types/krb5_keytab_entry::doc}}\index{krb5\_keytab\_entry (C type)} 14242 14243\begin{fulllineitems} 14244\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}}\pysigline{\sphinxbfcode{krb5\_keytab\_entry}} 14245\end{fulllineitems} 14246 14247 14248A key table entry. 14249 14250 14251\paragraph{Declaration} 14252\label{\detokenize{appdev/refs/types/krb5_keytab_entry:declaration}} 14253typedef struct krb5\_keytab\_entry\_st krb5\_keytab\_entry 14254 14255 14256\paragraph{Members} 14257\label{\detokenize{appdev/refs/types/krb5_keytab_entry:members}}\index{krb5\_keytab\_entry.magic (C member)} 14258 14259\begin{fulllineitems} 14260\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_keytab\_entry.magic}} 14261\end{fulllineitems} 14262 14263\index{krb5\_keytab\_entry.principal (C member)} 14264 14265\begin{fulllineitems} 14266\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry.principal}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} \sphinxbfcode{krb5\_keytab\_entry.principal}} 14267Principal of this key. 14268 14269\end{fulllineitems} 14270 14271\index{krb5\_keytab\_entry.timestamp (C member)} 14272 14273\begin{fulllineitems} 14274\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry.timestamp}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} \sphinxbfcode{krb5\_keytab\_entry.timestamp}} 14275Time entry written to keytable. 14276 14277\end{fulllineitems} 14278 14279\index{krb5\_keytab\_entry.vno (C member)} 14280 14281\begin{fulllineitems} 14282\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry.vno}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_kvno:c.krb5_kvno}]{\sphinxcrossref{krb5\_kvno}}} \sphinxbfcode{krb5\_keytab\_entry.vno}} 14283Key version number. 14284 14285\end{fulllineitems} 14286 14287\index{krb5\_keytab\_entry.key (C member)} 14288 14289\begin{fulllineitems} 14290\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry.key}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} \sphinxbfcode{krb5\_keytab\_entry.key}} 14291The secret key. 14292 14293\end{fulllineitems} 14294 14295 14296 14297\subsubsection{krb5\_keyusage} 14298\label{\detokenize{appdev/refs/types/krb5_keyusage:krb5-keyusage}}\label{\detokenize{appdev/refs/types/krb5_keyusage::doc}}\label{\detokenize{appdev/refs/types/krb5_keyusage:krb5-keyusage-struct}}\index{krb5\_keyusage (C type)} 14299 14300\begin{fulllineitems} 14301\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}}\pysigline{\sphinxbfcode{krb5\_keyusage}} 14302\end{fulllineitems} 14303 14304 14305 14306\paragraph{Declaration} 14307\label{\detokenize{appdev/refs/types/krb5_keyusage:declaration}} 14308typedef krb5\_int32 krb5\_keyusage 14309 14310 14311\subsubsection{krb5\_kt\_cursor} 14312\label{\detokenize{appdev/refs/types/krb5_kt_cursor:krb5-kt-cursor-struct}}\label{\detokenize{appdev/refs/types/krb5_kt_cursor::doc}}\label{\detokenize{appdev/refs/types/krb5_kt_cursor:krb5-kt-cursor}}\index{krb5\_kt\_cursor (C type)} 14313 14314\begin{fulllineitems} 14315\phantomsection\label{\detokenize{appdev/refs/types/krb5_kt_cursor:c.krb5_kt_cursor}}\pysigline{\sphinxbfcode{krb5\_kt\_cursor}} 14316\end{fulllineitems} 14317 14318 14319 14320\paragraph{Declaration} 14321\label{\detokenize{appdev/refs/types/krb5_kt_cursor:declaration}} 14322typedef krb5\_pointer krb5\_kt\_cursor 14323 14324 14325\subsubsection{krb5\_kvno} 14326\label{\detokenize{appdev/refs/types/krb5_kvno:krb5-kvno}}\label{\detokenize{appdev/refs/types/krb5_kvno::doc}}\label{\detokenize{appdev/refs/types/krb5_kvno:krb5-kvno-struct}}\index{krb5\_kvno (C type)} 14327 14328\begin{fulllineitems} 14329\phantomsection\label{\detokenize{appdev/refs/types/krb5_kvno:c.krb5_kvno}}\pysigline{\sphinxbfcode{krb5\_kvno}} 14330\end{fulllineitems} 14331 14332 14333 14334\paragraph{Declaration} 14335\label{\detokenize{appdev/refs/types/krb5_kvno:declaration}} 14336typedef unsigned int krb5\_kvno 14337 14338 14339\subsubsection{krb5\_last\_req\_entry} 14340\label{\detokenize{appdev/refs/types/krb5_last_req_entry:krb5-last-req-entry}}\label{\detokenize{appdev/refs/types/krb5_last_req_entry::doc}}\label{\detokenize{appdev/refs/types/krb5_last_req_entry:krb5-last-req-entry-struct}}\index{krb5\_last\_req\_entry (C type)} 14341 14342\begin{fulllineitems} 14343\phantomsection\label{\detokenize{appdev/refs/types/krb5_last_req_entry:c.krb5_last_req_entry}}\pysigline{\sphinxbfcode{krb5\_last\_req\_entry}} 14344\end{fulllineitems} 14345 14346 14347Last request entry. 14348 14349 14350\paragraph{Declaration} 14351\label{\detokenize{appdev/refs/types/krb5_last_req_entry:declaration}} 14352typedef struct \_krb5\_last\_req\_entry krb5\_last\_req\_entry 14353 14354 14355\paragraph{Members} 14356\label{\detokenize{appdev/refs/types/krb5_last_req_entry:members}}\index{krb5\_last\_req\_entry.magic (C member)} 14357 14358\begin{fulllineitems} 14359\phantomsection\label{\detokenize{appdev/refs/types/krb5_last_req_entry:c.krb5_last_req_entry.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_last\_req\_entry.magic}} 14360\end{fulllineitems} 14361 14362\index{krb5\_last\_req\_entry.lr\_type (C member)} 14363 14364\begin{fulllineitems} 14365\phantomsection\label{\detokenize{appdev/refs/types/krb5_last_req_entry:c.krb5_last_req_entry.lr_type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_last\_req\_entry.lr\_type}} 14366LR type. 14367 14368\end{fulllineitems} 14369 14370\index{krb5\_last\_req\_entry.value (C member)} 14371 14372\begin{fulllineitems} 14373\phantomsection\label{\detokenize{appdev/refs/types/krb5_last_req_entry:c.krb5_last_req_entry.value}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} \sphinxbfcode{krb5\_last\_req\_entry.value}} 14374Timestamp. 14375 14376\end{fulllineitems} 14377 14378 14379 14380\subsubsection{krb5\_magic} 14381\label{\detokenize{appdev/refs/types/krb5_magic:krb5-magic}}\label{\detokenize{appdev/refs/types/krb5_magic::doc}}\label{\detokenize{appdev/refs/types/krb5_magic:krb5-magic-struct}}\index{krb5\_magic (C type)} 14382 14383\begin{fulllineitems} 14384\phantomsection\label{\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}}\pysigline{\sphinxbfcode{krb5\_magic}} 14385\end{fulllineitems} 14386 14387 14388 14389\paragraph{Declaration} 14390\label{\detokenize{appdev/refs/types/krb5_magic:declaration}} 14391typedef krb5\_error\_code krb5\_magic 14392 14393 14394\subsubsection{krb5\_mk\_req\_checksum\_func} 14395\label{\detokenize{appdev/refs/types/krb5_mk_req_checksum_func:krb5-mk-req-checksum-func-struct}}\label{\detokenize{appdev/refs/types/krb5_mk_req_checksum_func::doc}}\label{\detokenize{appdev/refs/types/krb5_mk_req_checksum_func:krb5-mk-req-checksum-func}}\index{krb5\_mk\_req\_checksum\_func (C type)} 14396 14397\begin{fulllineitems} 14398\phantomsection\label{\detokenize{appdev/refs/types/krb5_mk_req_checksum_func:c.krb5_mk_req_checksum_func}}\pysigline{\sphinxbfcode{krb5\_mk\_req\_checksum\_func}} 14399\end{fulllineitems} 14400 14401 14402Type of function used as a callback to generate checksum data for mk\_req. 14403 14404 14405\paragraph{Declaration} 14406\label{\detokenize{appdev/refs/types/krb5_mk_req_checksum_func:declaration}} 14407typedef krb5\_error\_code( * krb5\_mk\_req\_checksum\_func) (krb5\_context, krb5\_auth\_context, void *, krb5\_data **) 14408 14409 14410\subsubsection{krb5\_msgtype} 14411\label{\detokenize{appdev/refs/types/krb5_msgtype:krb5-msgtype}}\label{\detokenize{appdev/refs/types/krb5_msgtype::doc}}\label{\detokenize{appdev/refs/types/krb5_msgtype:krb5-msgtype-struct}}\index{krb5\_msgtype (C type)} 14412 14413\begin{fulllineitems} 14414\phantomsection\label{\detokenize{appdev/refs/types/krb5_msgtype:c.krb5_msgtype}}\pysigline{\sphinxbfcode{krb5\_msgtype}} 14415\end{fulllineitems} 14416 14417 14418 14419\paragraph{Declaration} 14420\label{\detokenize{appdev/refs/types/krb5_msgtype:declaration}} 14421typedef unsigned int krb5\_msgtype 14422 14423 14424\subsubsection{krb5\_octet} 14425\label{\detokenize{appdev/refs/types/krb5_octet:krb5-octet-struct}}\label{\detokenize{appdev/refs/types/krb5_octet:krb5-octet}}\label{\detokenize{appdev/refs/types/krb5_octet::doc}}\index{krb5\_octet (C type)} 14426 14427\begin{fulllineitems} 14428\phantomsection\label{\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}}\pysigline{\sphinxbfcode{krb5\_octet}} 14429\end{fulllineitems} 14430 14431 14432 14433\paragraph{Declaration} 14434\label{\detokenize{appdev/refs/types/krb5_octet:declaration}} 14435typedef uint8\_t krb5\_octet 14436 14437 14438\subsubsection{krb5\_pa\_pac\_req} 14439\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:krb5-pa-pac-req-struct}}\label{\detokenize{appdev/refs/types/krb5_pa_pac_req::doc}}\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:krb5-pa-pac-req}}\index{krb5\_pa\_pac\_req (C type)} 14440 14441\begin{fulllineitems} 14442\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:c.krb5_pa_pac_req}}\pysigline{\sphinxbfcode{krb5\_pa\_pac\_req}} 14443\end{fulllineitems} 14444 14445 14446 14447\paragraph{Declaration} 14448\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:declaration}} 14449typedef struct \_krb5\_pa\_pac\_req krb5\_pa\_pac\_req 14450 14451 14452\paragraph{Members} 14453\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:members}}\index{krb5\_pa\_pac\_req.include\_pac (C member)} 14454 14455\begin{fulllineitems} 14456\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:c.krb5_pa_pac_req.include_pac}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_pa\_pac\_req.include\_pac}} 14457TRUE if a PAC should be included in TGS-REP. 14458 14459\end{fulllineitems} 14460 14461 14462 14463\subsubsection{krb5\_pa\_server\_referral\_data} 14464\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:krb5-pa-server-referral-data-struct}}\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data::doc}}\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:krb5-pa-server-referral-data}}\index{krb5\_pa\_server\_referral\_data (C type)} 14465 14466\begin{fulllineitems} 14467\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data}}\pysigline{\sphinxbfcode{krb5\_pa\_server\_referral\_data}} 14468\end{fulllineitems} 14469 14470 14471 14472\paragraph{Declaration} 14473\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:declaration}} 14474typedef struct \_krb5\_pa\_server\_referral\_data krb5\_pa\_server\_referral\_data 14475 14476 14477\paragraph{Members} 14478\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:members}}\index{krb5\_pa\_server\_referral\_data.referred\_realm (C member)} 14479 14480\begin{fulllineitems} 14481\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data.referred_realm}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} * \sphinxbfcode{krb5\_pa\_server\_referral\_data.referred\_realm}} 14482\end{fulllineitems} 14483 14484\index{krb5\_pa\_server\_referral\_data.true\_principal\_name (C member)} 14485 14486\begin{fulllineitems} 14487\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data.true_principal_name}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} \sphinxbfcode{krb5\_pa\_server\_referral\_data.true\_principal\_name}} 14488\end{fulllineitems} 14489 14490\index{krb5\_pa\_server\_referral\_data.requested\_principal\_name (C member)} 14491 14492\begin{fulllineitems} 14493\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data.requested_principal_name}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} \sphinxbfcode{krb5\_pa\_server\_referral\_data.requested\_principal\_name}} 14494\end{fulllineitems} 14495 14496\index{krb5\_pa\_server\_referral\_data.referral\_valid\_until (C member)} 14497 14498\begin{fulllineitems} 14499\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data.referral_valid_until}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} \sphinxbfcode{krb5\_pa\_server\_referral\_data.referral\_valid\_until}} 14500\end{fulllineitems} 14501 14502\index{krb5\_pa\_server\_referral\_data.rep\_cksum (C member)} 14503 14504\begin{fulllineitems} 14505\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data.rep_cksum}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} \sphinxbfcode{krb5\_pa\_server\_referral\_data.rep\_cksum}} 14506\end{fulllineitems} 14507 14508 14509 14510\subsubsection{krb5\_pa\_svr\_referral\_data} 14511\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:krb5-pa-svr-referral-data}}\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data::doc}}\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:krb5-pa-svr-referral-data-struct}}\index{krb5\_pa\_svr\_referral\_data (C type)} 14512 14513\begin{fulllineitems} 14514\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:c.krb5_pa_svr_referral_data}}\pysigline{\sphinxbfcode{krb5\_pa\_svr\_referral\_data}} 14515\end{fulllineitems} 14516 14517 14518 14519\paragraph{Declaration} 14520\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:declaration}} 14521typedef struct \_krb5\_pa\_svr\_referral\_data krb5\_pa\_svr\_referral\_data 14522 14523 14524\paragraph{Members} 14525\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:members}}\index{krb5\_pa\_svr\_referral\_data.principal (C member)} 14526 14527\begin{fulllineitems} 14528\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:c.krb5_pa_svr_referral_data.principal}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} \sphinxbfcode{krb5\_pa\_svr\_referral\_data.principal}} 14529Referred name, only realm is required. 14530 14531\end{fulllineitems} 14532 14533 14534 14535\subsubsection{krb5\_pa\_data} 14536\label{\detokenize{appdev/refs/types/krb5_pa_data:krb5-pa-data}}\label{\detokenize{appdev/refs/types/krb5_pa_data:krb5-pa-data-struct}}\label{\detokenize{appdev/refs/types/krb5_pa_data::doc}}\index{krb5\_pa\_data (C type)} 14537 14538\begin{fulllineitems} 14539\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data}}\pysigline{\sphinxbfcode{krb5\_pa\_data}} 14540\end{fulllineitems} 14541 14542 14543Pre-authentication data. 14544 14545 14546\paragraph{Declaration} 14547\label{\detokenize{appdev/refs/types/krb5_pa_data:declaration}} 14548typedef struct \_krb5\_pa\_data krb5\_pa\_data 14549 14550 14551\paragraph{Members} 14552\label{\detokenize{appdev/refs/types/krb5_pa_data:members}}\index{krb5\_pa\_data.magic (C member)} 14553 14554\begin{fulllineitems} 14555\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_pa\_data.magic}} 14556\end{fulllineitems} 14557 14558\index{krb5\_pa\_data.pa\_type (C member)} 14559 14560\begin{fulllineitems} 14561\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data.pa_type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}]{\sphinxcrossref{krb5\_preauthtype}}} \sphinxbfcode{krb5\_pa\_data.pa\_type}} 14562Preauthentication data type. 14563 14564\end{fulllineitems} 14565 14566\index{krb5\_pa\_data.length (C member)} 14567 14568\begin{fulllineitems} 14569\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data.length}}\pysigline{unsigned int \sphinxbfcode{krb5\_pa\_data.length}} 14570Length of data. 14571 14572\end{fulllineitems} 14573 14574\index{krb5\_pa\_data.contents (C member)} 14575 14576\begin{fulllineitems} 14577\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data.contents}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{krb5\_octet}}} * \sphinxbfcode{krb5\_pa\_data.contents}} 14578Data. 14579 14580\end{fulllineitems} 14581 14582 14583 14584\subsubsection{krb5\_pointer} 14585\label{\detokenize{appdev/refs/types/krb5_pointer:krb5-pointer-struct}}\label{\detokenize{appdev/refs/types/krb5_pointer:krb5-pointer}}\label{\detokenize{appdev/refs/types/krb5_pointer::doc}}\index{krb5\_pointer (C type)} 14586 14587\begin{fulllineitems} 14588\phantomsection\label{\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}}\pysigline{\sphinxbfcode{krb5\_pointer}} 14589\end{fulllineitems} 14590 14591 14592 14593\paragraph{Declaration} 14594\label{\detokenize{appdev/refs/types/krb5_pointer:declaration}} 14595typedef void* krb5\_pointer 14596 14597 14598\subsubsection{krb5\_post\_recv\_fn} 14599\label{\detokenize{appdev/refs/types/krb5_post_recv_fn:krb5-post-recv-fn}}\label{\detokenize{appdev/refs/types/krb5_post_recv_fn:krb5-post-recv-fn-struct}}\label{\detokenize{appdev/refs/types/krb5_post_recv_fn::doc}}\index{krb5\_post\_recv\_fn (C type)} 14600 14601\begin{fulllineitems} 14602\phantomsection\label{\detokenize{appdev/refs/types/krb5_post_recv_fn:c.krb5_post_recv_fn}}\pysigline{\sphinxbfcode{krb5\_post\_recv\_fn}} 14603\end{fulllineitems} 14604 14605 14606Hook function for inspecting or overriding KDC replies. 14607 14608If \sphinxstyleemphasis{code} is non-zero, KDC communication failed and \sphinxstyleemphasis{reply} should be ignored. The hook function may return \sphinxstyleemphasis{code} or a different error code, or may synthesize a reply by setting \sphinxstyleemphasis{new\_reply\_out} and return successfully. 14609The hook function should use {\hyperref[\detokenize{appdev/refs/api/krb5_copy_data:c.krb5_copy_data}]{\sphinxcrossref{\sphinxcode{krb5\_copy\_data()}}}} to construct the value for \sphinxstyleemphasis{new\_reply\_out} , to ensure that it can be freed correctly by the library. 14610 14611 14612\paragraph{Declaration} 14613\label{\detokenize{appdev/refs/types/krb5_post_recv_fn:declaration}} 14614typedef krb5\_error\_code( * krb5\_post\_recv\_fn) (krb5\_context context, void *data, krb5\_error\_code code, const krb5\_data *realm, const krb5\_data *message, const krb5\_data *reply, krb5\_data **new\_reply\_out) 14615 14616 14617\subsubsection{krb5\_pre\_send\_fn} 14618\label{\detokenize{appdev/refs/types/krb5_pre_send_fn:krb5-pre-send-fn-struct}}\label{\detokenize{appdev/refs/types/krb5_pre_send_fn::doc}}\label{\detokenize{appdev/refs/types/krb5_pre_send_fn:krb5-pre-send-fn}}\index{krb5\_pre\_send\_fn (C type)} 14619 14620\begin{fulllineitems} 14621\phantomsection\label{\detokenize{appdev/refs/types/krb5_pre_send_fn:c.krb5_pre_send_fn}}\pysigline{\sphinxbfcode{krb5\_pre\_send\_fn}} 14622\end{fulllineitems} 14623 14624 14625Hook function for inspecting or modifying messages sent to KDCs. 14626 14627If the hook function sets \sphinxstyleemphasis{reply\_out} , \sphinxstyleemphasis{message} will not be sent to the KDC, and the given reply will used instead. 14628If the hook function sets \sphinxstyleemphasis{new\_message\_out} , the given message will be sent to the KDC in place of \sphinxstyleemphasis{message} . 14629If the hook function returns successfully without setting either output, \sphinxstyleemphasis{message} will be sent to the KDC normally. 14630The hook function should use {\hyperref[\detokenize{appdev/refs/api/krb5_copy_data:c.krb5_copy_data}]{\sphinxcrossref{\sphinxcode{krb5\_copy\_data()}}}} to construct the value for \sphinxstyleemphasis{new\_message\_out} or \sphinxstyleemphasis{reply\_out} , to ensure that it can be freed correctly by the library. 14631 14632 14633\paragraph{Declaration} 14634\label{\detokenize{appdev/refs/types/krb5_pre_send_fn:declaration}} 14635typedef krb5\_error\_code( * krb5\_pre\_send\_fn) (krb5\_context context, void *data, const krb5\_data *realm, const krb5\_data *message, krb5\_data **new\_message\_out, krb5\_data **new\_reply\_out) 14636 14637 14638\subsubsection{krb5\_preauthtype} 14639\label{\detokenize{appdev/refs/types/krb5_preauthtype::doc}}\label{\detokenize{appdev/refs/types/krb5_preauthtype:krb5-preauthtype}}\label{\detokenize{appdev/refs/types/krb5_preauthtype:krb5-preauthtype-struct}}\index{krb5\_preauthtype (C type)} 14640 14641\begin{fulllineitems} 14642\phantomsection\label{\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}}\pysigline{\sphinxbfcode{krb5\_preauthtype}} 14643\end{fulllineitems} 14644 14645 14646 14647\paragraph{Declaration} 14648\label{\detokenize{appdev/refs/types/krb5_preauthtype:declaration}} 14649typedef krb5\_int32 krb5\_preauthtype 14650 14651 14652\subsubsection{krb5\_principal} 14653\label{\detokenize{appdev/refs/types/krb5_principal:krb5-principal-struct}}\label{\detokenize{appdev/refs/types/krb5_principal:krb5-principal}}\label{\detokenize{appdev/refs/types/krb5_principal::doc}}\index{krb5\_principal (C type)} 14654 14655\begin{fulllineitems} 14656\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}}\pysigline{\sphinxbfcode{krb5\_principal}} 14657\end{fulllineitems} 14658 14659 14660 14661\paragraph{Declaration} 14662\label{\detokenize{appdev/refs/types/krb5_principal:declaration}} 14663typedef krb5\_principal\_data* krb5\_principal 14664 14665 14666\paragraph{Members} 14667\label{\detokenize{appdev/refs/types/krb5_principal:members}}\index{krb5\_principal.magic (C member)} 14668 14669\begin{fulllineitems} 14670\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_principal.magic}} 14671\end{fulllineitems} 14672 14673\index{krb5\_principal.realm (C member)} 14674 14675\begin{fulllineitems} 14676\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal.realm}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_principal.realm}} 14677\end{fulllineitems} 14678 14679\index{krb5\_principal.data (C member)} 14680 14681\begin{fulllineitems} 14682\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal.data}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} * \sphinxbfcode{krb5\_principal.data}} 14683An array of strings. 14684 14685\end{fulllineitems} 14686 14687\index{krb5\_principal.length (C member)} 14688 14689\begin{fulllineitems} 14690\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal.length}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_principal.length}} 14691\end{fulllineitems} 14692 14693\index{krb5\_principal.type (C member)} 14694 14695\begin{fulllineitems} 14696\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal.type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_principal.type}} 14697\end{fulllineitems} 14698 14699 14700 14701\subsubsection{krb5\_principal\_data} 14702\label{\detokenize{appdev/refs/types/krb5_principal_data:krb5-principal-data}}\label{\detokenize{appdev/refs/types/krb5_principal_data::doc}}\label{\detokenize{appdev/refs/types/krb5_principal_data:krb5-principal-data-struct}}\index{krb5\_principal\_data (C type)} 14703 14704\begin{fulllineitems} 14705\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data}}\pysigline{\sphinxbfcode{krb5\_principal\_data}} 14706\end{fulllineitems} 14707 14708 14709 14710\paragraph{Declaration} 14711\label{\detokenize{appdev/refs/types/krb5_principal_data:declaration}} 14712typedef struct krb5\_principal\_data krb5\_principal\_data 14713 14714 14715\paragraph{Members} 14716\label{\detokenize{appdev/refs/types/krb5_principal_data:members}}\index{krb5\_principal\_data.magic (C member)} 14717 14718\begin{fulllineitems} 14719\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_principal\_data.magic}} 14720\end{fulllineitems} 14721 14722\index{krb5\_principal\_data.realm (C member)} 14723 14724\begin{fulllineitems} 14725\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data.realm}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_principal\_data.realm}} 14726\end{fulllineitems} 14727 14728\index{krb5\_principal\_data.data (C member)} 14729 14730\begin{fulllineitems} 14731\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data.data}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} * \sphinxbfcode{krb5\_principal\_data.data}} 14732An array of strings. 14733 14734\end{fulllineitems} 14735 14736\index{krb5\_principal\_data.length (C member)} 14737 14738\begin{fulllineitems} 14739\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data.length}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_principal\_data.length}} 14740\end{fulllineitems} 14741 14742\index{krb5\_principal\_data.type (C member)} 14743 14744\begin{fulllineitems} 14745\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data.type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_principal\_data.type}} 14746\end{fulllineitems} 14747 14748 14749 14750\subsubsection{krb5\_prompt} 14751\label{\detokenize{appdev/refs/types/krb5_prompt:krb5-prompt}}\label{\detokenize{appdev/refs/types/krb5_prompt::doc}}\label{\detokenize{appdev/refs/types/krb5_prompt:krb5-prompt-struct}}\index{krb5\_prompt (C type)} 14752 14753\begin{fulllineitems} 14754\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt}}\pysigline{\sphinxbfcode{krb5\_prompt}} 14755\end{fulllineitems} 14756 14757 14758Text for prompt used in prompter callback function. 14759 14760 14761\paragraph{Declaration} 14762\label{\detokenize{appdev/refs/types/krb5_prompt:declaration}} 14763typedef struct \_krb5\_prompt krb5\_prompt 14764 14765 14766\paragraph{Members} 14767\label{\detokenize{appdev/refs/types/krb5_prompt:members}}\index{krb5\_prompt.prompt (C member)} 14768 14769\begin{fulllineitems} 14770\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt.prompt}}\pysigline{char * \sphinxbfcode{krb5\_prompt.prompt}} 14771The prompt to show to the user. 14772 14773\end{fulllineitems} 14774 14775\index{krb5\_prompt.hidden (C member)} 14776 14777\begin{fulllineitems} 14778\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt.hidden}}\pysigline{int \sphinxbfcode{krb5\_prompt.hidden}} 14779Boolean; informative prompt or hidden (e.g. 14780PIN) 14781 14782\end{fulllineitems} 14783 14784\index{krb5\_prompt.reply (C member)} 14785 14786\begin{fulllineitems} 14787\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt.reply}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} * \sphinxbfcode{krb5\_prompt.reply}} 14788Must be allocated before call to prompt routine. 14789 14790\end{fulllineitems} 14791 14792 14793 14794\subsubsection{krb5\_prompt\_type} 14795\label{\detokenize{appdev/refs/types/krb5_prompt_type:krb5-prompt-type-struct}}\label{\detokenize{appdev/refs/types/krb5_prompt_type:krb5-prompt-type}}\label{\detokenize{appdev/refs/types/krb5_prompt_type::doc}}\index{krb5\_prompt\_type (C type)} 14796 14797\begin{fulllineitems} 14798\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompt_type:c.krb5_prompt_type}}\pysigline{\sphinxbfcode{krb5\_prompt\_type}} 14799\end{fulllineitems} 14800 14801 14802 14803\paragraph{Declaration} 14804\label{\detokenize{appdev/refs/types/krb5_prompt_type:declaration}} 14805typedef krb5\_int32 krb5\_prompt\_type 14806 14807 14808\subsubsection{krb5\_prompter\_fct} 14809\label{\detokenize{appdev/refs/types/krb5_prompter_fct:krb5-prompter-fct-struct}}\label{\detokenize{appdev/refs/types/krb5_prompter_fct:krb5-prompter-fct}}\label{\detokenize{appdev/refs/types/krb5_prompter_fct::doc}}\index{krb5\_prompter\_fct (C type)} 14810 14811\begin{fulllineitems} 14812\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompter_fct:c.krb5_prompter_fct}}\pysigline{\sphinxbfcode{krb5\_prompter\_fct}} 14813\end{fulllineitems} 14814 14815 14816Pointer to a prompter callback function. 14817 14818 14819\paragraph{Declaration} 14820\label{\detokenize{appdev/refs/types/krb5_prompter_fct:declaration}} 14821typedef krb5\_error\_code( * krb5\_prompter\_fct) (krb5\_context context, void *data, const char *name, const char *banner, int num\_prompts, krb5\_prompt prompts{[}{]}) 14822 14823 14824\subsubsection{krb5\_pwd\_data} 14825\label{\detokenize{appdev/refs/types/krb5_pwd_data:krb5-pwd-data}}\label{\detokenize{appdev/refs/types/krb5_pwd_data::doc}}\label{\detokenize{appdev/refs/types/krb5_pwd_data:krb5-pwd-data-struct}}\index{krb5\_pwd\_data (C type)} 14826 14827\begin{fulllineitems} 14828\phantomsection\label{\detokenize{appdev/refs/types/krb5_pwd_data:c.krb5_pwd_data}}\pysigline{\sphinxbfcode{krb5\_pwd\_data}} 14829\end{fulllineitems} 14830 14831 14832 14833\paragraph{Declaration} 14834\label{\detokenize{appdev/refs/types/krb5_pwd_data:declaration}} 14835typedef struct \_krb5\_pwd\_data krb5\_pwd\_data 14836 14837 14838\paragraph{Members} 14839\label{\detokenize{appdev/refs/types/krb5_pwd_data:members}}\index{krb5\_pwd\_data.magic (C member)} 14840 14841\begin{fulllineitems} 14842\phantomsection\label{\detokenize{appdev/refs/types/krb5_pwd_data:c.krb5_pwd_data.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_pwd\_data.magic}} 14843\end{fulllineitems} 14844 14845\index{krb5\_pwd\_data.sequence\_count (C member)} 14846 14847\begin{fulllineitems} 14848\phantomsection\label{\detokenize{appdev/refs/types/krb5_pwd_data:c.krb5_pwd_data.sequence_count}}\pysigline{int \sphinxbfcode{krb5\_pwd\_data.sequence\_count}} 14849\end{fulllineitems} 14850 14851\index{krb5\_pwd\_data.element (C member)} 14852 14853\begin{fulllineitems} 14854\phantomsection\label{\detokenize{appdev/refs/types/krb5_pwd_data:c.krb5_pwd_data.element}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/passwd_phrase_element:c.passwd_phrase_element}]{\sphinxcrossref{passwd\_phrase\_element}}} ** \sphinxbfcode{krb5\_pwd\_data.element}} 14855\end{fulllineitems} 14856 14857 14858 14859\subsubsection{krb5\_responder\_context} 14860\label{\detokenize{appdev/refs/types/krb5_responder_context:krb5-responder-context-struct}}\label{\detokenize{appdev/refs/types/krb5_responder_context::doc}}\label{\detokenize{appdev/refs/types/krb5_responder_context:krb5-responder-context}}\index{krb5\_responder\_context (C type)} 14861 14862\begin{fulllineitems} 14863\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}}\pysigline{\sphinxbfcode{krb5\_responder\_context}} 14864\end{fulllineitems} 14865 14866 14867A container for a set of preauthentication questions and answers. 14868 14869A responder context is supplied by the krb5 authentication system to a {\hyperref[\detokenize{appdev/refs/types/krb5_responder_fn:c.krb5_responder_fn}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_fn}}}} callback. It contains a list of questions and can receive answers. Questions contained in a responder context can be listed using {\hyperref[\detokenize{appdev/refs/api/krb5_responder_list_questions:c.krb5_responder_list_questions}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_list\_questions()}}}} , retrieved using {\hyperref[\detokenize{appdev/refs/api/krb5_responder_get_challenge:c.krb5_responder_get_challenge}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_get\_challenge()}}}} , or answered using {\hyperref[\detokenize{appdev/refs/api/krb5_responder_set_answer:c.krb5_responder_set_answer}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_set\_answer()}}}} . The form of a question’s challenge and answer depend on the question name. 14870 14871 14872\paragraph{Declaration} 14873\label{\detokenize{appdev/refs/types/krb5_responder_context:declaration}} 14874typedef struct krb5\_responder\_context\_st* krb5\_responder\_context 14875 14876 14877\subsubsection{krb5\_responder\_fn} 14878\label{\detokenize{appdev/refs/types/krb5_responder_fn:krb5-responder-fn-struct}}\label{\detokenize{appdev/refs/types/krb5_responder_fn::doc}}\label{\detokenize{appdev/refs/types/krb5_responder_fn:krb5-responder-fn}}\index{krb5\_responder\_fn (C type)} 14879 14880\begin{fulllineitems} 14881\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_fn:c.krb5_responder_fn}}\pysigline{\sphinxbfcode{krb5\_responder\_fn}} 14882\end{fulllineitems} 14883 14884 14885Responder function for an initial credential exchange. 14886 14887If a required question is unanswered, the prompter may be called. 14888 14889 14890\paragraph{Declaration} 14891\label{\detokenize{appdev/refs/types/krb5_responder_fn:declaration}} 14892typedef krb5\_error\_code( * krb5\_responder\_fn) (krb5\_context ctx, void *data, krb5\_responder\_context rctx) 14893 14894 14895\subsubsection{krb5\_responder\_otp\_challenge} 14896\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:krb5-responder-otp-challenge}}\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:krb5-responder-otp-challenge-struct}}\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge::doc}}\index{krb5\_responder\_otp\_challenge (C type)} 14897 14898\begin{fulllineitems} 14899\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:c.krb5_responder_otp_challenge}}\pysigline{\sphinxbfcode{krb5\_responder\_otp\_challenge}} 14900\end{fulllineitems} 14901 14902 14903 14904\paragraph{Declaration} 14905\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:declaration}} 14906typedef struct \_krb5\_responder\_otp\_challenge krb5\_responder\_otp\_challenge 14907 14908 14909\paragraph{Members} 14910\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:members}}\index{krb5\_responder\_otp\_challenge.service (C member)} 14911 14912\begin{fulllineitems} 14913\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:c.krb5_responder_otp_challenge.service}}\pysigline{char * \sphinxbfcode{krb5\_responder\_otp\_challenge.service}} 14914\end{fulllineitems} 14915 14916\index{krb5\_responder\_otp\_challenge.tokeninfo (C member)} 14917 14918\begin{fulllineitems} 14919\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:c.krb5_responder_otp_challenge.tokeninfo}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo}]{\sphinxcrossref{krb5\_responder\_otp\_tokeninfo}}} ** \sphinxbfcode{krb5\_responder\_otp\_challenge.tokeninfo}} 14920\end{fulllineitems} 14921 14922 14923 14924\subsubsection{krb5\_responder\_otp\_tokeninfo} 14925\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:krb5-responder-otp-tokeninfo}}\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:krb5-responder-otp-tokeninfo-struct}}\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo::doc}}\index{krb5\_responder\_otp\_tokeninfo (C type)} 14926 14927\begin{fulllineitems} 14928\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo}}\pysigline{\sphinxbfcode{krb5\_responder\_otp\_tokeninfo}} 14929\end{fulllineitems} 14930 14931 14932 14933\paragraph{Declaration} 14934\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:declaration}} 14935typedef struct \_krb5\_responder\_otp\_tokeninfo krb5\_responder\_otp\_tokeninfo 14936 14937 14938\paragraph{Members} 14939\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:members}}\index{krb5\_responder\_otp\_tokeninfo.flags (C member)} 14940 14941\begin{fulllineitems} 14942\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.flags}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}} \sphinxbfcode{krb5\_responder\_otp\_tokeninfo.flags}} 14943\end{fulllineitems} 14944 14945\index{krb5\_responder\_otp\_tokeninfo.format (C member)} 14946 14947\begin{fulllineitems} 14948\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.format}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_responder\_otp\_tokeninfo.format}} 14949\end{fulllineitems} 14950 14951\index{krb5\_responder\_otp\_tokeninfo.length (C member)} 14952 14953\begin{fulllineitems} 14954\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.length}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_responder\_otp\_tokeninfo.length}} 14955\end{fulllineitems} 14956 14957\index{krb5\_responder\_otp\_tokeninfo.vendor (C member)} 14958 14959\begin{fulllineitems} 14960\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.vendor}}\pysigline{char * \sphinxbfcode{krb5\_responder\_otp\_tokeninfo.vendor}} 14961\end{fulllineitems} 14962 14963\index{krb5\_responder\_otp\_tokeninfo.challenge (C member)} 14964 14965\begin{fulllineitems} 14966\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.challenge}}\pysigline{char * \sphinxbfcode{krb5\_responder\_otp\_tokeninfo.challenge}} 14967\end{fulllineitems} 14968 14969\index{krb5\_responder\_otp\_tokeninfo.token\_id (C member)} 14970 14971\begin{fulllineitems} 14972\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.token_id}}\pysigline{char * \sphinxbfcode{krb5\_responder\_otp\_tokeninfo.token\_id}} 14973\end{fulllineitems} 14974 14975\index{krb5\_responder\_otp\_tokeninfo.alg\_id (C member)} 14976 14977\begin{fulllineitems} 14978\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.alg_id}}\pysigline{char * \sphinxbfcode{krb5\_responder\_otp\_tokeninfo.alg\_id}} 14979\end{fulllineitems} 14980 14981 14982 14983\subsubsection{krb5\_responder\_pkinit\_challenge} 14984\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:krb5-responder-pkinit-challenge-struct}}\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge::doc}}\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:krb5-responder-pkinit-challenge}}\index{krb5\_responder\_pkinit\_challenge (C type)} 14985 14986\begin{fulllineitems} 14987\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:c.krb5_responder_pkinit_challenge}}\pysigline{\sphinxbfcode{krb5\_responder\_pkinit\_challenge}} 14988\end{fulllineitems} 14989 14990 14991 14992\paragraph{Declaration} 14993\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:declaration}} 14994typedef struct \_krb5\_responder\_pkinit\_challenge krb5\_responder\_pkinit\_challenge 14995 14996 14997\paragraph{Members} 14998\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:members}}\index{krb5\_responder\_pkinit\_challenge.identities (C member)} 14999 15000\begin{fulllineitems} 15001\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:c.krb5_responder_pkinit_challenge.identities}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:c.krb5_responder_pkinit_identity}]{\sphinxcrossref{krb5\_responder\_pkinit\_identity}}} ** \sphinxbfcode{krb5\_responder\_pkinit\_challenge.identities}} 15002\end{fulllineitems} 15003 15004 15005 15006\subsubsection{krb5\_responder\_pkinit\_identity} 15007\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:krb5-responder-pkinit-identity}}\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity::doc}}\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:krb5-responder-pkinit-identity-struct}}\index{krb5\_responder\_pkinit\_identity (C type)} 15008 15009\begin{fulllineitems} 15010\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:c.krb5_responder_pkinit_identity}}\pysigline{\sphinxbfcode{krb5\_responder\_pkinit\_identity}} 15011\end{fulllineitems} 15012 15013 15014 15015\paragraph{Declaration} 15016\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:declaration}} 15017typedef struct \_krb5\_responder\_pkinit\_identity krb5\_responder\_pkinit\_identity 15018 15019 15020\paragraph{Members} 15021\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:members}}\index{krb5\_responder\_pkinit\_identity.identity (C member)} 15022 15023\begin{fulllineitems} 15024\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:c.krb5_responder_pkinit_identity.identity}}\pysigline{char * \sphinxbfcode{krb5\_responder\_pkinit\_identity.identity}} 15025\end{fulllineitems} 15026 15027\index{krb5\_responder\_pkinit\_identity.token\_flags (C member)} 15028 15029\begin{fulllineitems} 15030\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:c.krb5_responder_pkinit_identity.token_flags}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_responder\_pkinit\_identity.token\_flags}} 15031\end{fulllineitems} 15032 15033 15034 15035\subsubsection{krb5\_response} 15036\label{\detokenize{appdev/refs/types/krb5_response::doc}}\label{\detokenize{appdev/refs/types/krb5_response:krb5-response}}\label{\detokenize{appdev/refs/types/krb5_response:krb5-response-struct}}\index{krb5\_response (C type)} 15037 15038\begin{fulllineitems} 15039\phantomsection\label{\detokenize{appdev/refs/types/krb5_response:c.krb5_response}}\pysigline{\sphinxbfcode{krb5\_response}} 15040\end{fulllineitems} 15041 15042 15043 15044\paragraph{Declaration} 15045\label{\detokenize{appdev/refs/types/krb5_response:declaration}} 15046typedef struct \_krb5\_response krb5\_response 15047 15048 15049\paragraph{Members} 15050\label{\detokenize{appdev/refs/types/krb5_response:members}}\index{krb5\_response.magic (C member)} 15051 15052\begin{fulllineitems} 15053\phantomsection\label{\detokenize{appdev/refs/types/krb5_response:c.krb5_response.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_response.magic}} 15054\end{fulllineitems} 15055 15056\index{krb5\_response.message\_type (C member)} 15057 15058\begin{fulllineitems} 15059\phantomsection\label{\detokenize{appdev/refs/types/krb5_response:c.krb5_response.message_type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{krb5\_octet}}} \sphinxbfcode{krb5\_response.message\_type}} 15060\end{fulllineitems} 15061 15062\index{krb5\_response.response (C member)} 15063 15064\begin{fulllineitems} 15065\phantomsection\label{\detokenize{appdev/refs/types/krb5_response:c.krb5_response.response}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_response.response}} 15066\end{fulllineitems} 15067 15068\index{krb5\_response.expected\_nonce (C member)} 15069 15070\begin{fulllineitems} 15071\phantomsection\label{\detokenize{appdev/refs/types/krb5_response:c.krb5_response.expected_nonce}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_response.expected\_nonce}} 15072\end{fulllineitems} 15073 15074\index{krb5\_response.request\_time (C member)} 15075 15076\begin{fulllineitems} 15077\phantomsection\label{\detokenize{appdev/refs/types/krb5_response:c.krb5_response.request_time}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} \sphinxbfcode{krb5\_response.request\_time}} 15078\end{fulllineitems} 15079 15080 15081 15082\subsubsection{krb5\_replay\_data} 15083\label{\detokenize{appdev/refs/types/krb5_replay_data:krb5-replay-data}}\label{\detokenize{appdev/refs/types/krb5_replay_data:krb5-replay-data-struct}}\label{\detokenize{appdev/refs/types/krb5_replay_data::doc}}\index{krb5\_replay\_data (C type)} 15084 15085\begin{fulllineitems} 15086\phantomsection\label{\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}}\pysigline{\sphinxbfcode{krb5\_replay\_data}} 15087\end{fulllineitems} 15088 15089 15090Replay data. 15091 15092Sequence number and timestamp information output by {\hyperref[\detokenize{appdev/refs/api/krb5_rd_priv:c.krb5_rd_priv}]{\sphinxcrossref{\sphinxcode{krb5\_rd\_priv()}}}} and {\hyperref[\detokenize{appdev/refs/api/krb5_rd_safe:c.krb5_rd_safe}]{\sphinxcrossref{\sphinxcode{krb5\_rd\_safe()}}}} . 15093 15094 15095\paragraph{Declaration} 15096\label{\detokenize{appdev/refs/types/krb5_replay_data:declaration}} 15097typedef struct krb5\_replay\_data krb5\_replay\_data 15098 15099 15100\paragraph{Members} 15101\label{\detokenize{appdev/refs/types/krb5_replay_data:members}}\index{krb5\_replay\_data.timestamp (C member)} 15102 15103\begin{fulllineitems} 15104\phantomsection\label{\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data.timestamp}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} \sphinxbfcode{krb5\_replay\_data.timestamp}} 15105Timestamp, seconds portion. 15106 15107\end{fulllineitems} 15108 15109\index{krb5\_replay\_data.usec (C member)} 15110 15111\begin{fulllineitems} 15112\phantomsection\label{\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data.usec}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_replay\_data.usec}} 15113Timestamp, microseconds portion. 15114 15115\end{fulllineitems} 15116 15117\index{krb5\_replay\_data.seq (C member)} 15118 15119\begin{fulllineitems} 15120\phantomsection\label{\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data.seq}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{krb5\_ui\_4}}} \sphinxbfcode{krb5\_replay\_data.seq}} 15121Sequence number. 15122 15123\end{fulllineitems} 15124 15125 15126 15127\subsubsection{krb5\_ticket} 15128\label{\detokenize{appdev/refs/types/krb5_ticket:krb5-ticket}}\label{\detokenize{appdev/refs/types/krb5_ticket::doc}}\label{\detokenize{appdev/refs/types/krb5_ticket:krb5-ticket-struct}}\index{krb5\_ticket (C type)} 15129 15130\begin{fulllineitems} 15131\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}}\pysigline{\sphinxbfcode{krb5\_ticket}} 15132\end{fulllineitems} 15133 15134 15135Ticket structure. 15136 15137The C representation of the ticket message, with a pointer to the C representation of the encrypted part. 15138 15139 15140\paragraph{Declaration} 15141\label{\detokenize{appdev/refs/types/krb5_ticket:declaration}} 15142typedef struct \_krb5\_ticket krb5\_ticket 15143 15144 15145\paragraph{Members} 15146\label{\detokenize{appdev/refs/types/krb5_ticket:members}}\index{krb5\_ticket.magic (C member)} 15147 15148\begin{fulllineitems} 15149\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_ticket.magic}} 15150\end{fulllineitems} 15151 15152\index{krb5\_ticket.server (C member)} 15153 15154\begin{fulllineitems} 15155\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket.server}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} \sphinxbfcode{krb5\_ticket.server}} 15156server name/realm 15157 15158\end{fulllineitems} 15159 15160\index{krb5\_ticket.enc\_part (C member)} 15161 15162\begin{fulllineitems} 15163\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket.enc_part}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}} \sphinxbfcode{krb5\_ticket.enc\_part}} 15164encryption type, kvno, encrypted encoding 15165 15166\end{fulllineitems} 15167 15168\index{krb5\_ticket.enc\_part2 (C member)} 15169 15170\begin{fulllineitems} 15171\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket.enc_part2}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part}]{\sphinxcrossref{krb5\_enc\_tkt\_part}}} * \sphinxbfcode{krb5\_ticket.enc\_part2}} 15172ptr to decrypted version, if available 15173 15174\end{fulllineitems} 15175 15176 15177 15178\subsubsection{krb5\_ticket\_times} 15179\label{\detokenize{appdev/refs/types/krb5_ticket_times:krb5-ticket-times}}\label{\detokenize{appdev/refs/types/krb5_ticket_times:krb5-ticket-times-struct}}\label{\detokenize{appdev/refs/types/krb5_ticket_times::doc}}\index{krb5\_ticket\_times (C type)} 15180 15181\begin{fulllineitems} 15182\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}}\pysigline{\sphinxbfcode{krb5\_ticket\_times}} 15183\end{fulllineitems} 15184 15185 15186Ticket start time, end time, and renewal duration. 15187 15188 15189\paragraph{Declaration} 15190\label{\detokenize{appdev/refs/types/krb5_ticket_times:declaration}} 15191typedef struct \_krb5\_ticket\_times krb5\_ticket\_times 15192 15193 15194\paragraph{Members} 15195\label{\detokenize{appdev/refs/types/krb5_ticket_times:members}}\index{krb5\_ticket\_times.authtime (C member)} 15196 15197\begin{fulllineitems} 15198\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times.authtime}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} \sphinxbfcode{krb5\_ticket\_times.authtime}} 15199Time at which KDC issued the initial ticket that corresponds to this ticket. 15200 15201\end{fulllineitems} 15202 15203\index{krb5\_ticket\_times.starttime (C member)} 15204 15205\begin{fulllineitems} 15206\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times.starttime}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} \sphinxbfcode{krb5\_ticket\_times.starttime}} 15207optional in ticket, if not present, use \sphinxstyleemphasis{authtime} 15208 15209\end{fulllineitems} 15210 15211\index{krb5\_ticket\_times.endtime (C member)} 15212 15213\begin{fulllineitems} 15214\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times.endtime}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} \sphinxbfcode{krb5\_ticket\_times.endtime}} 15215Ticket expiration time. 15216 15217\end{fulllineitems} 15218 15219\index{krb5\_ticket\_times.renew\_till (C member)} 15220 15221\begin{fulllineitems} 15222\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times.renew_till}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} \sphinxbfcode{krb5\_ticket\_times.renew\_till}} 15223Latest time at which renewal of ticket can be valid. 15224 15225\end{fulllineitems} 15226 15227 15228 15229\subsubsection{krb5\_timestamp} 15230\label{\detokenize{appdev/refs/types/krb5_timestamp:krb5-timestamp-struct}}\label{\detokenize{appdev/refs/types/krb5_timestamp::doc}}\label{\detokenize{appdev/refs/types/krb5_timestamp:krb5-timestamp}}\index{krb5\_timestamp (C type)} 15231 15232\begin{fulllineitems} 15233\phantomsection\label{\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}}\pysigline{\sphinxbfcode{krb5\_timestamp}} 15234\end{fulllineitems} 15235 15236 15237Represents a timestamp in seconds since the POSIX epoch. 15238 15239This legacy type is used frequently in the ABI, but cannot represent timestamps after 2038 as a positive number. Code which uses this type should cast values of it to uint32\_t so that negative values are treated as timestamps between 2038 and 2106 on platforms with 64-bit time\_t. 15240 15241 15242\paragraph{Declaration} 15243\label{\detokenize{appdev/refs/types/krb5_timestamp:declaration}} 15244typedef krb5\_int32 krb5\_timestamp 15245 15246 15247\subsubsection{krb5\_tkt\_authent} 15248\label{\detokenize{appdev/refs/types/krb5_tkt_authent:krb5-tkt-authent}}\label{\detokenize{appdev/refs/types/krb5_tkt_authent:krb5-tkt-authent-struct}}\label{\detokenize{appdev/refs/types/krb5_tkt_authent::doc}}\index{krb5\_tkt\_authent (C type)} 15249 15250\begin{fulllineitems} 15251\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent}}\pysigline{\sphinxbfcode{krb5\_tkt\_authent}} 15252\end{fulllineitems} 15253 15254 15255Ticket authentication data. 15256 15257 15258\paragraph{Declaration} 15259\label{\detokenize{appdev/refs/types/krb5_tkt_authent:declaration}} 15260typedef struct \_krb5\_tkt\_authent krb5\_tkt\_authent 15261 15262 15263\paragraph{Members} 15264\label{\detokenize{appdev/refs/types/krb5_tkt_authent:members}}\index{krb5\_tkt\_authent.magic (C member)} 15265 15266\begin{fulllineitems} 15267\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_tkt\_authent.magic}} 15268\end{fulllineitems} 15269 15270\index{krb5\_tkt\_authent.ticket (C member)} 15271 15272\begin{fulllineitems} 15273\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent.ticket}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} * \sphinxbfcode{krb5\_tkt\_authent.ticket}} 15274\end{fulllineitems} 15275 15276\index{krb5\_tkt\_authent.authenticator (C member)} 15277 15278\begin{fulllineitems} 15279\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent.authenticator}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{krb5\_authenticator}}} * \sphinxbfcode{krb5\_tkt\_authent.authenticator}} 15280\end{fulllineitems} 15281 15282\index{krb5\_tkt\_authent.ap\_options (C member)} 15283 15284\begin{fulllineitems} 15285\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent.ap_options}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}} \sphinxbfcode{krb5\_tkt\_authent.ap\_options}} 15286\end{fulllineitems} 15287 15288 15289 15290\subsubsection{krb5\_trace\_callback} 15291\label{\detokenize{appdev/refs/types/krb5_trace_callback:krb5-trace-callback-struct}}\label{\detokenize{appdev/refs/types/krb5_trace_callback:krb5-trace-callback}}\label{\detokenize{appdev/refs/types/krb5_trace_callback::doc}}\index{krb5\_trace\_callback (C type)} 15292 15293\begin{fulllineitems} 15294\phantomsection\label{\detokenize{appdev/refs/types/krb5_trace_callback:c.krb5_trace_callback}}\pysigline{\sphinxbfcode{krb5\_trace\_callback}} 15295\end{fulllineitems} 15296 15297 15298 15299\paragraph{Declaration} 15300\label{\detokenize{appdev/refs/types/krb5_trace_callback:declaration}} 15301typedef void( * krb5\_trace\_callback) (krb5\_context context, const krb5\_trace\_info *info, void *cb\_data) 15302 15303 15304\subsubsection{krb5\_trace\_info} 15305\label{\detokenize{appdev/refs/types/krb5_trace_info:krb5-trace-info-struct}}\label{\detokenize{appdev/refs/types/krb5_trace_info::doc}}\label{\detokenize{appdev/refs/types/krb5_trace_info:krb5-trace-info}}\index{krb5\_trace\_info (C type)} 15306 15307\begin{fulllineitems} 15308\phantomsection\label{\detokenize{appdev/refs/types/krb5_trace_info:c.krb5_trace_info}}\pysigline{\sphinxbfcode{krb5\_trace\_info}} 15309\end{fulllineitems} 15310 15311 15312A wrapper for passing information to a \sphinxstyleemphasis{krb5\_trace\_callback} . 15313 15314Currently, it only contains the formatted message as determined the the format string and arguments of the tracing macro, but it may be extended to contain more fields in the future. 15315 15316 15317\paragraph{Declaration} 15318\label{\detokenize{appdev/refs/types/krb5_trace_info:declaration}} 15319typedef struct \_krb5\_trace\_info krb5\_trace\_info 15320 15321 15322\paragraph{Members} 15323\label{\detokenize{appdev/refs/types/krb5_trace_info:members}}\index{krb5\_trace\_info.message (C member)} 15324 15325\begin{fulllineitems} 15326\phantomsection\label{\detokenize{appdev/refs/types/krb5_trace_info:c.krb5_trace_info.message}}\pysigline{const char * \sphinxbfcode{krb5\_trace\_info.message}} 15327\end{fulllineitems} 15328 15329 15330 15331\subsubsection{krb5\_transited} 15332\label{\detokenize{appdev/refs/types/krb5_transited:krb5-transited-struct}}\label{\detokenize{appdev/refs/types/krb5_transited::doc}}\label{\detokenize{appdev/refs/types/krb5_transited:krb5-transited}}\index{krb5\_transited (C type)} 15333 15334\begin{fulllineitems} 15335\phantomsection\label{\detokenize{appdev/refs/types/krb5_transited:c.krb5_transited}}\pysigline{\sphinxbfcode{krb5\_transited}} 15336\end{fulllineitems} 15337 15338 15339Structure for transited encoding. 15340 15341 15342\paragraph{Declaration} 15343\label{\detokenize{appdev/refs/types/krb5_transited:declaration}} 15344typedef struct \_krb5\_transited krb5\_transited 15345 15346 15347\paragraph{Members} 15348\label{\detokenize{appdev/refs/types/krb5_transited:members}}\index{krb5\_transited.magic (C member)} 15349 15350\begin{fulllineitems} 15351\phantomsection\label{\detokenize{appdev/refs/types/krb5_transited:c.krb5_transited.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_transited.magic}} 15352\end{fulllineitems} 15353 15354\index{krb5\_transited.tr\_type (C member)} 15355 15356\begin{fulllineitems} 15357\phantomsection\label{\detokenize{appdev/refs/types/krb5_transited:c.krb5_transited.tr_type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{krb5\_octet}}} \sphinxbfcode{krb5\_transited.tr\_type}} 15358Transited encoding type. 15359 15360\end{fulllineitems} 15361 15362\index{krb5\_transited.tr\_contents (C member)} 15363 15364\begin{fulllineitems} 15365\phantomsection\label{\detokenize{appdev/refs/types/krb5_transited:c.krb5_transited.tr_contents}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_transited.tr\_contents}} 15366Contents. 15367 15368\end{fulllineitems} 15369 15370 15371 15372\subsubsection{krb5\_typed\_data} 15373\label{\detokenize{appdev/refs/types/krb5_typed_data:krb5-typed-data-struct}}\label{\detokenize{appdev/refs/types/krb5_typed_data::doc}}\label{\detokenize{appdev/refs/types/krb5_typed_data:krb5-typed-data}}\index{krb5\_typed\_data (C type)} 15374 15375\begin{fulllineitems} 15376\phantomsection\label{\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data}}\pysigline{\sphinxbfcode{krb5\_typed\_data}} 15377\end{fulllineitems} 15378 15379 15380 15381\paragraph{Declaration} 15382\label{\detokenize{appdev/refs/types/krb5_typed_data:declaration}} 15383typedef struct \_krb5\_typed\_data krb5\_typed\_data 15384 15385 15386\paragraph{Members} 15387\label{\detokenize{appdev/refs/types/krb5_typed_data:members}}\index{krb5\_typed\_data.magic (C member)} 15388 15389\begin{fulllineitems} 15390\phantomsection\label{\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{krb5\_typed\_data.magic}} 15391\end{fulllineitems} 15392 15393\index{krb5\_typed\_data.type (C member)} 15394 15395\begin{fulllineitems} 15396\phantomsection\label{\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data.type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} \sphinxbfcode{krb5\_typed\_data.type}} 15397\end{fulllineitems} 15398 15399\index{krb5\_typed\_data.length (C member)} 15400 15401\begin{fulllineitems} 15402\phantomsection\label{\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data.length}}\pysigline{unsigned int \sphinxbfcode{krb5\_typed\_data.length}} 15403\end{fulllineitems} 15404 15405\index{krb5\_typed\_data.data (C member)} 15406 15407\begin{fulllineitems} 15408\phantomsection\label{\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data.data}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{krb5\_octet}}} * \sphinxbfcode{krb5\_typed\_data.data}} 15409\end{fulllineitems} 15410 15411 15412 15413\subsubsection{krb5\_ui\_2} 15414\label{\detokenize{appdev/refs/types/krb5_ui_2:krb5-ui-2-struct}}\label{\detokenize{appdev/refs/types/krb5_ui_2::doc}}\label{\detokenize{appdev/refs/types/krb5_ui_2:krb5-ui-2}}\index{krb5\_ui\_2 (C type)} 15415 15416\begin{fulllineitems} 15417\phantomsection\label{\detokenize{appdev/refs/types/krb5_ui_2:c.krb5_ui_2}}\pysigline{\sphinxbfcode{krb5\_ui\_2}} 15418\end{fulllineitems} 15419 15420 15421 15422\paragraph{Declaration} 15423\label{\detokenize{appdev/refs/types/krb5_ui_2:declaration}} 15424typedef uint16\_t krb5\_ui\_2 15425 15426 15427\subsubsection{krb5\_ui\_4} 15428\label{\detokenize{appdev/refs/types/krb5_ui_4:krb5-ui-4}}\label{\detokenize{appdev/refs/types/krb5_ui_4:krb5-ui-4-struct}}\label{\detokenize{appdev/refs/types/krb5_ui_4::doc}}\index{krb5\_ui\_4 (C type)} 15429 15430\begin{fulllineitems} 15431\phantomsection\label{\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}}\pysigline{\sphinxbfcode{krb5\_ui\_4}} 15432\end{fulllineitems} 15433 15434 15435 15436\paragraph{Declaration} 15437\label{\detokenize{appdev/refs/types/krb5_ui_4:declaration}} 15438typedef uint32\_t krb5\_ui\_4 15439 15440 15441\subsubsection{krb5\_verify\_init\_creds\_opt} 15442\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:krb5-verify-init-creds-opt-struct}}\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt::doc}}\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:krb5-verify-init-creds-opt}}\index{krb5\_verify\_init\_creds\_opt (C type)} 15443 15444\begin{fulllineitems} 15445\phantomsection\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt}}\pysigline{\sphinxbfcode{krb5\_verify\_init\_creds\_opt}} 15446\end{fulllineitems} 15447 15448 15449 15450\paragraph{Declaration} 15451\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:declaration}} 15452typedef struct \_krb5\_verify\_init\_creds\_opt krb5\_verify\_init\_creds\_opt 15453 15454 15455\paragraph{Members} 15456\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:members}}\index{krb5\_verify\_init\_creds\_opt.flags (C member)} 15457 15458\begin{fulllineitems} 15459\phantomsection\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt.flags}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}} \sphinxbfcode{krb5\_verify\_init\_creds\_opt.flags}} 15460\end{fulllineitems} 15461 15462\index{krb5\_verify\_init\_creds\_opt.ap\_req\_nofail (C member)} 15463 15464\begin{fulllineitems} 15465\phantomsection\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt.ap_req_nofail}}\pysigline{int \sphinxbfcode{krb5\_verify\_init\_creds\_opt.ap\_req\_nofail}} 15466boolean 15467 15468\end{fulllineitems} 15469 15470 15471 15472\subsubsection{passwd\_phrase\_element} 15473\label{\detokenize{appdev/refs/types/passwd_phrase_element:passwd-phrase-element-struct}}\label{\detokenize{appdev/refs/types/passwd_phrase_element::doc}}\label{\detokenize{appdev/refs/types/passwd_phrase_element:passwd-phrase-element}}\index{passwd\_phrase\_element (C type)} 15474 15475\begin{fulllineitems} 15476\phantomsection\label{\detokenize{appdev/refs/types/passwd_phrase_element:c.passwd_phrase_element}}\pysigline{\sphinxbfcode{passwd\_phrase\_element}} 15477\end{fulllineitems} 15478 15479 15480 15481\paragraph{Declaration} 15482\label{\detokenize{appdev/refs/types/passwd_phrase_element:declaration}} 15483typedef struct \_passwd\_phrase\_element passwd\_phrase\_element 15484 15485 15486\paragraph{Members} 15487\label{\detokenize{appdev/refs/types/passwd_phrase_element:members}}\index{passwd\_phrase\_element.magic (C member)} 15488 15489\begin{fulllineitems} 15490\phantomsection\label{\detokenize{appdev/refs/types/passwd_phrase_element:c.passwd_phrase_element.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}} \sphinxbfcode{passwd\_phrase\_element.magic}} 15491\end{fulllineitems} 15492 15493\index{passwd\_phrase\_element.passwd (C member)} 15494 15495\begin{fulllineitems} 15496\phantomsection\label{\detokenize{appdev/refs/types/passwd_phrase_element:c.passwd_phrase_element.passwd}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} * \sphinxbfcode{passwd\_phrase\_element.passwd}} 15497\end{fulllineitems} 15498 15499\index{passwd\_phrase\_element.phrase (C member)} 15500 15501\begin{fulllineitems} 15502\phantomsection\label{\detokenize{appdev/refs/types/passwd_phrase_element:c.passwd_phrase_element.phrase}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} * \sphinxbfcode{passwd\_phrase\_element.phrase}} 15503\end{fulllineitems} 15504 15505 15506 15507\subsection{Internal} 15508\label{\detokenize{appdev/refs/types/index:internal}} 15509 15510\subsubsection{krb5\_auth\_context} 15511\label{\detokenize{appdev/refs/types/krb5_auth_context:krb5-auth-context}}\label{\detokenize{appdev/refs/types/krb5_auth_context::doc}}\label{\detokenize{appdev/refs/types/krb5_auth_context:krb5-auth-context-struct}}\index{krb5\_auth\_context (C type)} 15512 15513\begin{fulllineitems} 15514\phantomsection\label{\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}}\pysigline{\sphinxbfcode{krb5\_auth\_context}} 15515\end{fulllineitems} 15516 15517 15518 15519\paragraph{Declaration} 15520\label{\detokenize{appdev/refs/types/krb5_auth_context:declaration}} 15521typedef struct \_krb5\_auth\_context* krb5\_auth\_context 15522 15523 15524\subsubsection{krb5\_cksumtype} 15525\label{\detokenize{appdev/refs/types/krb5_cksumtype:krb5-cksumtype}}\label{\detokenize{appdev/refs/types/krb5_cksumtype:krb5-cksumtype-struct}}\label{\detokenize{appdev/refs/types/krb5_cksumtype::doc}}\index{krb5\_cksumtype (C type)} 15526 15527\begin{fulllineitems} 15528\phantomsection\label{\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}}\pysigline{\sphinxbfcode{krb5\_cksumtype}} 15529\end{fulllineitems} 15530 15531 15532 15533\paragraph{Declaration} 15534\label{\detokenize{appdev/refs/types/krb5_cksumtype:declaration}} 15535typedef krb5\_int32 krb5\_cksumtype 15536 15537 15538\subsubsection{krb5\_context} 15539\label{\detokenize{appdev/refs/types/krb5_context:krb5-context}}\label{\detokenize{appdev/refs/types/krb5_context:krb5-context-struct}}\label{\detokenize{appdev/refs/types/krb5_context::doc}}\index{krb5\_context (C type)} 15540 15541\begin{fulllineitems} 15542\phantomsection\label{\detokenize{appdev/refs/types/krb5_context:c.krb5_context}}\pysigline{\sphinxbfcode{krb5\_context}} 15543\end{fulllineitems} 15544 15545 15546 15547\paragraph{Declaration} 15548\label{\detokenize{appdev/refs/types/krb5_context:declaration}} 15549typedef struct \_krb5\_context* krb5\_context 15550 15551 15552\subsubsection{krb5\_cc\_cursor} 15553\label{\detokenize{appdev/refs/types/krb5_cc_cursor:krb5-cc-cursor-struct}}\label{\detokenize{appdev/refs/types/krb5_cc_cursor:krb5-cc-cursor}}\label{\detokenize{appdev/refs/types/krb5_cc_cursor::doc}}\index{krb5\_cc\_cursor (C type)} 15554 15555\begin{fulllineitems} 15556\phantomsection\label{\detokenize{appdev/refs/types/krb5_cc_cursor:c.krb5_cc_cursor}}\pysigline{\sphinxbfcode{krb5\_cc\_cursor}} 15557\end{fulllineitems} 15558 15559 15560Cursor for sequential lookup. 15561 15562 15563\paragraph{Declaration} 15564\label{\detokenize{appdev/refs/types/krb5_cc_cursor:declaration}} 15565typedef krb5\_pointer krb5\_cc\_cursor 15566 15567 15568\subsubsection{krb5\_ccache} 15569\label{\detokenize{appdev/refs/types/krb5_ccache:krb5-ccache-struct}}\label{\detokenize{appdev/refs/types/krb5_ccache::doc}}\label{\detokenize{appdev/refs/types/krb5_ccache:krb5-ccache}}\index{krb5\_ccache (C type)} 15570 15571\begin{fulllineitems} 15572\phantomsection\label{\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}}\pysigline{\sphinxbfcode{krb5\_ccache}} 15573\end{fulllineitems} 15574 15575 15576 15577\paragraph{Declaration} 15578\label{\detokenize{appdev/refs/types/krb5_ccache:declaration}} 15579typedef struct \_krb5\_ccache* krb5\_ccache 15580 15581 15582\subsubsection{krb5\_cccol\_cursor} 15583\label{\detokenize{appdev/refs/types/krb5_cccol_cursor:krb5-cccol-cursor-struct}}\label{\detokenize{appdev/refs/types/krb5_cccol_cursor::doc}}\label{\detokenize{appdev/refs/types/krb5_cccol_cursor:krb5-cccol-cursor}}\index{krb5\_cccol\_cursor (C type)} 15584 15585\begin{fulllineitems} 15586\phantomsection\label{\detokenize{appdev/refs/types/krb5_cccol_cursor:c.krb5_cccol_cursor}}\pysigline{\sphinxbfcode{krb5\_cccol\_cursor}} 15587\end{fulllineitems} 15588 15589 15590Cursor for iterating over all ccaches. 15591 15592 15593\paragraph{Declaration} 15594\label{\detokenize{appdev/refs/types/krb5_cccol_cursor:declaration}} 15595typedef struct \_krb5\_cccol\_cursor* krb5\_cccol\_cursor 15596 15597 15598\subsubsection{krb5\_init\_creds\_context} 15599\label{\detokenize{appdev/refs/types/krb5_init_creds_context:krb5-init-creds-context}}\label{\detokenize{appdev/refs/types/krb5_init_creds_context::doc}}\label{\detokenize{appdev/refs/types/krb5_init_creds_context:krb5-init-creds-context-struct}}\index{krb5\_init\_creds\_context (C type)} 15600 15601\begin{fulllineitems} 15602\phantomsection\label{\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}}\pysigline{\sphinxbfcode{krb5\_init\_creds\_context}} 15603\end{fulllineitems} 15604 15605 15606 15607\paragraph{Declaration} 15608\label{\detokenize{appdev/refs/types/krb5_init_creds_context:declaration}} 15609typedef struct \_krb5\_init\_creds\_context* krb5\_init\_creds\_context 15610 15611 15612\subsubsection{krb5\_key} 15613\label{\detokenize{appdev/refs/types/krb5_key::doc}}\label{\detokenize{appdev/refs/types/krb5_key:krb5-key}}\label{\detokenize{appdev/refs/types/krb5_key:krb5-key-struct}}\index{krb5\_key (C type)} 15614 15615\begin{fulllineitems} 15616\phantomsection\label{\detokenize{appdev/refs/types/krb5_key:c.krb5_key}}\pysigline{\sphinxbfcode{krb5\_key}} 15617\end{fulllineitems} 15618 15619 15620Opaque identifier for a key. 15621 15622Use with the krb5\_k APIs for better performance for repeated operations with the same key and usage. Key identifiers must not be used simultaneously within multiple threads, as they may contain mutable internal state and are not mutex-protected. 15623 15624 15625\paragraph{Declaration} 15626\label{\detokenize{appdev/refs/types/krb5_key:declaration}} 15627typedef struct krb5\_key\_st* krb5\_key 15628 15629 15630\subsubsection{krb5\_keytab} 15631\label{\detokenize{appdev/refs/types/krb5_keytab:krb5-keytab}}\label{\detokenize{appdev/refs/types/krb5_keytab::doc}}\label{\detokenize{appdev/refs/types/krb5_keytab:krb5-keytab-struct}}\index{krb5\_keytab (C type)} 15632 15633\begin{fulllineitems} 15634\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}}\pysigline{\sphinxbfcode{krb5\_keytab}} 15635\end{fulllineitems} 15636 15637 15638 15639\paragraph{Declaration} 15640\label{\detokenize{appdev/refs/types/krb5_keytab:declaration}} 15641typedef struct \_krb5\_kt* krb5\_keytab 15642 15643 15644\subsubsection{krb5\_pac} 15645\label{\detokenize{appdev/refs/types/krb5_pac:krb5-pac-struct}}\label{\detokenize{appdev/refs/types/krb5_pac:krb5-pac}}\label{\detokenize{appdev/refs/types/krb5_pac::doc}}\index{krb5\_pac (C type)} 15646 15647\begin{fulllineitems} 15648\phantomsection\label{\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}}\pysigline{\sphinxbfcode{krb5\_pac}} 15649\end{fulllineitems} 15650 15651 15652PAC data structure to convey authorization information. 15653 15654 15655\paragraph{Declaration} 15656\label{\detokenize{appdev/refs/types/krb5_pac:declaration}} 15657typedef struct krb5\_pac\_data* krb5\_pac 15658 15659 15660\subsubsection{krb5\_rcache} 15661\label{\detokenize{appdev/refs/types/krb5_rcache:krb5-rcache-struct}}\label{\detokenize{appdev/refs/types/krb5_rcache::doc}}\label{\detokenize{appdev/refs/types/krb5_rcache:krb5-rcache}}\index{krb5\_rcache (C type)} 15662 15663\begin{fulllineitems} 15664\phantomsection\label{\detokenize{appdev/refs/types/krb5_rcache:c.krb5_rcache}}\pysigline{\sphinxbfcode{krb5\_rcache}} 15665\end{fulllineitems} 15666 15667 15668 15669\paragraph{Declaration} 15670\label{\detokenize{appdev/refs/types/krb5_rcache:declaration}} 15671typedef struct krb5\_rc\_st* krb5\_rcache 15672 15673 15674\subsubsection{krb5\_tkt\_creds\_context} 15675\label{\detokenize{appdev/refs/types/krb5_tkt_creds_context::doc}}\label{\detokenize{appdev/refs/types/krb5_tkt_creds_context:krb5-tkt-creds-context}}\label{\detokenize{appdev/refs/types/krb5_tkt_creds_context:krb5-tkt-creds-context-struct}}\index{krb5\_tkt\_creds\_context (C type)} 15676 15677\begin{fulllineitems} 15678\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}}\pysigline{\sphinxbfcode{krb5\_tkt\_creds\_context}} 15679\end{fulllineitems} 15680 15681 15682 15683\paragraph{Declaration} 15684\label{\detokenize{appdev/refs/types/krb5_tkt_creds_context:declaration}} 15685typedef struct \_krb5\_tkt\_creds\_context* krb5\_tkt\_creds\_context 15686 15687 15688\section{krb5 simple macros} 15689\label{\detokenize{appdev/refs/macros/index:krb5-simple-macros}}\label{\detokenize{appdev/refs/macros/index::doc}} 15690 15691\subsection{Public} 15692\label{\detokenize{appdev/refs/macros/index:public}} 15693 15694\subsubsection{ADDRTYPE\_ADDRPORT} 15695\label{\detokenize{appdev/refs/macros/ADDRTYPE_ADDRPORT:addrtype-addrport-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_ADDRPORT::doc}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_ADDRPORT:addrtype-addrport}}\index{ADDRTYPE\_ADDRPORT (built-in variable)} 15696 15697\begin{fulllineitems} 15698\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_ADDRPORT:ADDRTYPE_ADDRPORT}}\pysigline{\sphinxbfcode{ADDRTYPE\_ADDRPORT}} 15699\end{fulllineitems} 15700 15701 15702 15703\begin{savenotes}\sphinxattablestart 15704\centering 15705\begin{tabulary}{\linewidth}[t]{|T|T|} 15706\hline 15707 15708\sphinxcode{ADDRTYPE\_ADDRPORT} 15709& 15710\sphinxcode{0x0100} 15711\\ 15712\hline 15713\end{tabulary} 15714\par 15715\sphinxattableend\end{savenotes} 15716 15717 15718\subsubsection{ADDRTYPE\_CHAOS} 15719\label{\detokenize{appdev/refs/macros/ADDRTYPE_CHAOS:addrtype-chaos}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_CHAOS:addrtype-chaos-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_CHAOS::doc}}\index{ADDRTYPE\_CHAOS (built-in variable)} 15720 15721\begin{fulllineitems} 15722\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_CHAOS:ADDRTYPE_CHAOS}}\pysigline{\sphinxbfcode{ADDRTYPE\_CHAOS}} 15723\end{fulllineitems} 15724 15725 15726 15727\begin{savenotes}\sphinxattablestart 15728\centering 15729\begin{tabulary}{\linewidth}[t]{|T|T|} 15730\hline 15731 15732\sphinxcode{ADDRTYPE\_CHAOS} 15733& 15734\sphinxcode{0x0005} 15735\\ 15736\hline 15737\end{tabulary} 15738\par 15739\sphinxattableend\end{savenotes} 15740 15741 15742\subsubsection{ADDRTYPE\_DDP} 15743\label{\detokenize{appdev/refs/macros/ADDRTYPE_DDP:addrtype-ddp-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_DDP::doc}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_DDP:addrtype-ddp}}\index{ADDRTYPE\_DDP (built-in variable)} 15744 15745\begin{fulllineitems} 15746\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_DDP:ADDRTYPE_DDP}}\pysigline{\sphinxbfcode{ADDRTYPE\_DDP}} 15747\end{fulllineitems} 15748 15749 15750 15751\begin{savenotes}\sphinxattablestart 15752\centering 15753\begin{tabulary}{\linewidth}[t]{|T|T|} 15754\hline 15755 15756\sphinxcode{ADDRTYPE\_DDP} 15757& 15758\sphinxcode{0x0010} 15759\\ 15760\hline 15761\end{tabulary} 15762\par 15763\sphinxattableend\end{savenotes} 15764 15765 15766\subsubsection{ADDRTYPE\_INET} 15767\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET:addrtype-inet}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET:addrtype-inet-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET::doc}}\index{ADDRTYPE\_INET (built-in variable)} 15768 15769\begin{fulllineitems} 15770\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET:ADDRTYPE_INET}}\pysigline{\sphinxbfcode{ADDRTYPE\_INET}} 15771\end{fulllineitems} 15772 15773 15774 15775\begin{savenotes}\sphinxattablestart 15776\centering 15777\begin{tabulary}{\linewidth}[t]{|T|T|} 15778\hline 15779 15780\sphinxcode{ADDRTYPE\_INET} 15781& 15782\sphinxcode{0x0002} 15783\\ 15784\hline 15785\end{tabulary} 15786\par 15787\sphinxattableend\end{savenotes} 15788 15789 15790\subsubsection{ADDRTYPE\_INET6} 15791\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET6:addrtype-inet6-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET6:addrtype-inet6}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET6::doc}}\index{ADDRTYPE\_INET6 (built-in variable)} 15792 15793\begin{fulllineitems} 15794\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET6:ADDRTYPE_INET6}}\pysigline{\sphinxbfcode{ADDRTYPE\_INET6}} 15795\end{fulllineitems} 15796 15797 15798 15799\begin{savenotes}\sphinxattablestart 15800\centering 15801\begin{tabulary}{\linewidth}[t]{|T|T|} 15802\hline 15803 15804\sphinxcode{ADDRTYPE\_INET6} 15805& 15806\sphinxcode{0x0018} 15807\\ 15808\hline 15809\end{tabulary} 15810\par 15811\sphinxattableend\end{savenotes} 15812 15813 15814\subsubsection{ADDRTYPE\_IPPORT} 15815\label{\detokenize{appdev/refs/macros/ADDRTYPE_IPPORT:addrtype-ipport}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_IPPORT::doc}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_IPPORT:addrtype-ipport-data}}\index{ADDRTYPE\_IPPORT (built-in variable)} 15816 15817\begin{fulllineitems} 15818\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_IPPORT:ADDRTYPE_IPPORT}}\pysigline{\sphinxbfcode{ADDRTYPE\_IPPORT}} 15819\end{fulllineitems} 15820 15821 15822 15823\begin{savenotes}\sphinxattablestart 15824\centering 15825\begin{tabulary}{\linewidth}[t]{|T|T|} 15826\hline 15827 15828\sphinxcode{ADDRTYPE\_IPPORT} 15829& 15830\sphinxcode{0x0101} 15831\\ 15832\hline 15833\end{tabulary} 15834\par 15835\sphinxattableend\end{savenotes} 15836 15837 15838\subsubsection{ADDRTYPE\_ISO} 15839\label{\detokenize{appdev/refs/macros/ADDRTYPE_ISO::doc}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_ISO:addrtype-iso}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_ISO:addrtype-iso-data}}\index{ADDRTYPE\_ISO (built-in variable)} 15840 15841\begin{fulllineitems} 15842\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_ISO:ADDRTYPE_ISO}}\pysigline{\sphinxbfcode{ADDRTYPE\_ISO}} 15843\end{fulllineitems} 15844 15845 15846 15847\begin{savenotes}\sphinxattablestart 15848\centering 15849\begin{tabulary}{\linewidth}[t]{|T|T|} 15850\hline 15851 15852\sphinxcode{ADDRTYPE\_ISO} 15853& 15854\sphinxcode{0x0007} 15855\\ 15856\hline 15857\end{tabulary} 15858\par 15859\sphinxattableend\end{savenotes} 15860 15861 15862\subsubsection{ADDRTYPE\_IS\_LOCAL} 15863\label{\detokenize{appdev/refs/macros/ADDRTYPE_IS_LOCAL::doc}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_IS_LOCAL:addrtype-is-local}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_IS_LOCAL:addrtype-is-local-data}}\index{ADDRTYPE\_IS\_LOCAL (built-in variable)} 15864 15865\begin{fulllineitems} 15866\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_IS_LOCAL:ADDRTYPE_IS_LOCAL}}\pysigline{\sphinxbfcode{ADDRTYPE\_IS\_LOCAL}} 15867\end{fulllineitems} 15868 15869 15870 15871\begin{savenotes}\sphinxattablestart 15872\centering 15873\begin{tabulary}{\linewidth}[t]{|T|T|} 15874\hline 15875 15876\sphinxcode{ADDRTYPE\_IS\_LOCAL (addrtype)} 15877& 15878\sphinxcode{(addrtype \& 0x8000)} 15879\\ 15880\hline 15881\end{tabulary} 15882\par 15883\sphinxattableend\end{savenotes} 15884 15885 15886\subsubsection{ADDRTYPE\_NETBIOS} 15887\label{\detokenize{appdev/refs/macros/ADDRTYPE_NETBIOS:addrtype-netbios}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_NETBIOS::doc}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_NETBIOS:addrtype-netbios-data}}\index{ADDRTYPE\_NETBIOS (built-in variable)} 15888 15889\begin{fulllineitems} 15890\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_NETBIOS:ADDRTYPE_NETBIOS}}\pysigline{\sphinxbfcode{ADDRTYPE\_NETBIOS}} 15891\end{fulllineitems} 15892 15893 15894 15895\begin{savenotes}\sphinxattablestart 15896\centering 15897\begin{tabulary}{\linewidth}[t]{|T|T|} 15898\hline 15899 15900\sphinxcode{ADDRTYPE\_NETBIOS} 15901& 15902\sphinxcode{0x0014} 15903\\ 15904\hline 15905\end{tabulary} 15906\par 15907\sphinxattableend\end{savenotes} 15908 15909 15910\subsubsection{ADDRTYPE\_XNS} 15911\label{\detokenize{appdev/refs/macros/ADDRTYPE_XNS::doc}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_XNS:addrtype-xns-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_XNS:addrtype-xns}}\index{ADDRTYPE\_XNS (built-in variable)} 15912 15913\begin{fulllineitems} 15914\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_XNS:ADDRTYPE_XNS}}\pysigline{\sphinxbfcode{ADDRTYPE\_XNS}} 15915\end{fulllineitems} 15916 15917 15918 15919\begin{savenotes}\sphinxattablestart 15920\centering 15921\begin{tabulary}{\linewidth}[t]{|T|T|} 15922\hline 15923 15924\sphinxcode{ADDRTYPE\_XNS} 15925& 15926\sphinxcode{0x0006} 15927\\ 15928\hline 15929\end{tabulary} 15930\par 15931\sphinxattableend\end{savenotes} 15932 15933 15934\subsubsection{AD\_TYPE\_EXTERNAL} 15935\label{\detokenize{appdev/refs/macros/AD_TYPE_EXTERNAL:ad-type-external-data}}\label{\detokenize{appdev/refs/macros/AD_TYPE_EXTERNAL::doc}}\label{\detokenize{appdev/refs/macros/AD_TYPE_EXTERNAL:ad-type-external}}\index{AD\_TYPE\_EXTERNAL (built-in variable)} 15936 15937\begin{fulllineitems} 15938\phantomsection\label{\detokenize{appdev/refs/macros/AD_TYPE_EXTERNAL:AD_TYPE_EXTERNAL}}\pysigline{\sphinxbfcode{AD\_TYPE\_EXTERNAL}} 15939\end{fulllineitems} 15940 15941 15942 15943\begin{savenotes}\sphinxattablestart 15944\centering 15945\begin{tabulary}{\linewidth}[t]{|T|T|} 15946\hline 15947 15948\sphinxcode{AD\_TYPE\_EXTERNAL} 15949& 15950\sphinxcode{0x4000} 15951\\ 15952\hline 15953\end{tabulary} 15954\par 15955\sphinxattableend\end{savenotes} 15956 15957 15958\subsubsection{AD\_TYPE\_FIELD\_TYPE\_MASK} 15959\label{\detokenize{appdev/refs/macros/AD_TYPE_FIELD_TYPE_MASK:ad-type-field-type-mask}}\label{\detokenize{appdev/refs/macros/AD_TYPE_FIELD_TYPE_MASK::doc}}\label{\detokenize{appdev/refs/macros/AD_TYPE_FIELD_TYPE_MASK:ad-type-field-type-mask-data}}\index{AD\_TYPE\_FIELD\_TYPE\_MASK (built-in variable)} 15960 15961\begin{fulllineitems} 15962\phantomsection\label{\detokenize{appdev/refs/macros/AD_TYPE_FIELD_TYPE_MASK:AD_TYPE_FIELD_TYPE_MASK}}\pysigline{\sphinxbfcode{AD\_TYPE\_FIELD\_TYPE\_MASK}} 15963\end{fulllineitems} 15964 15965 15966 15967\begin{savenotes}\sphinxattablestart 15968\centering 15969\begin{tabulary}{\linewidth}[t]{|T|T|} 15970\hline 15971 15972\sphinxcode{AD\_TYPE\_FIELD\_TYPE\_MASK} 15973& 15974\sphinxcode{0x1fff} 15975\\ 15976\hline 15977\end{tabulary} 15978\par 15979\sphinxattableend\end{savenotes} 15980 15981 15982\subsubsection{AD\_TYPE\_REGISTERED} 15983\label{\detokenize{appdev/refs/macros/AD_TYPE_REGISTERED:ad-type-registered-data}}\label{\detokenize{appdev/refs/macros/AD_TYPE_REGISTERED:ad-type-registered}}\label{\detokenize{appdev/refs/macros/AD_TYPE_REGISTERED::doc}}\index{AD\_TYPE\_REGISTERED (built-in variable)} 15984 15985\begin{fulllineitems} 15986\phantomsection\label{\detokenize{appdev/refs/macros/AD_TYPE_REGISTERED:AD_TYPE_REGISTERED}}\pysigline{\sphinxbfcode{AD\_TYPE\_REGISTERED}} 15987\end{fulllineitems} 15988 15989 15990 15991\begin{savenotes}\sphinxattablestart 15992\centering 15993\begin{tabulary}{\linewidth}[t]{|T|T|} 15994\hline 15995 15996\sphinxcode{AD\_TYPE\_REGISTERED} 15997& 15998\sphinxcode{0x2000} 15999\\ 16000\hline 16001\end{tabulary} 16002\par 16003\sphinxattableend\end{savenotes} 16004 16005 16006\subsubsection{AD\_TYPE\_RESERVED} 16007\label{\detokenize{appdev/refs/macros/AD_TYPE_RESERVED::doc}}\label{\detokenize{appdev/refs/macros/AD_TYPE_RESERVED:ad-type-reserved}}\label{\detokenize{appdev/refs/macros/AD_TYPE_RESERVED:ad-type-reserved-data}}\index{AD\_TYPE\_RESERVED (built-in variable)} 16008 16009\begin{fulllineitems} 16010\phantomsection\label{\detokenize{appdev/refs/macros/AD_TYPE_RESERVED:AD_TYPE_RESERVED}}\pysigline{\sphinxbfcode{AD\_TYPE\_RESERVED}} 16011\end{fulllineitems} 16012 16013 16014 16015\begin{savenotes}\sphinxattablestart 16016\centering 16017\begin{tabulary}{\linewidth}[t]{|T|T|} 16018\hline 16019 16020\sphinxcode{AD\_TYPE\_RESERVED} 16021& 16022\sphinxcode{0x8000} 16023\\ 16024\hline 16025\end{tabulary} 16026\par 16027\sphinxattableend\end{savenotes} 16028 16029 16030\subsubsection{AP\_OPTS\_ETYPE\_NEGOTIATION} 16031\label{\detokenize{appdev/refs/macros/AP_OPTS_ETYPE_NEGOTIATION::doc}}\label{\detokenize{appdev/refs/macros/AP_OPTS_ETYPE_NEGOTIATION:ap-opts-etype-negotiation}}\label{\detokenize{appdev/refs/macros/AP_OPTS_ETYPE_NEGOTIATION:ap-opts-etype-negotiation-data}}\index{AP\_OPTS\_ETYPE\_NEGOTIATION (built-in variable)} 16032 16033\begin{fulllineitems} 16034\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_ETYPE_NEGOTIATION:AP_OPTS_ETYPE_NEGOTIATION}}\pysigline{\sphinxbfcode{AP\_OPTS\_ETYPE\_NEGOTIATION}} 16035\end{fulllineitems} 16036 16037 16038 16039\begin{savenotes}\sphinxattablestart 16040\centering 16041\begin{tabulary}{\linewidth}[t]{|T|T|} 16042\hline 16043 16044\sphinxcode{AP\_OPTS\_ETYPE\_NEGOTIATION} 16045& 16046\sphinxcode{0x00000002} 16047\\ 16048\hline 16049\end{tabulary} 16050\par 16051\sphinxattableend\end{savenotes} 16052 16053 16054\subsubsection{AP\_OPTS\_MUTUAL\_REQUIRED} 16055\label{\detokenize{appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED:ap-opts-mutual-required}}\label{\detokenize{appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED:ap-opts-mutual-required-data}}\label{\detokenize{appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED::doc}}\index{AP\_OPTS\_MUTUAL\_REQUIRED (built-in variable)} 16056 16057\begin{fulllineitems} 16058\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED:AP_OPTS_MUTUAL_REQUIRED}}\pysigline{\sphinxbfcode{AP\_OPTS\_MUTUAL\_REQUIRED}} 16059\end{fulllineitems} 16060 16061 16062Perform a mutual authentication exchange. 16063 16064 16065\begin{savenotes}\sphinxattablestart 16066\centering 16067\begin{tabulary}{\linewidth}[t]{|T|T|} 16068\hline 16069 16070\sphinxcode{AP\_OPTS\_MUTUAL\_REQUIRED} 16071& 16072\sphinxcode{0x20000000} 16073\\ 16074\hline 16075\end{tabulary} 16076\par 16077\sphinxattableend\end{savenotes} 16078 16079 16080\subsubsection{AP\_OPTS\_RESERVED} 16081\label{\detokenize{appdev/refs/macros/AP_OPTS_RESERVED::doc}}\label{\detokenize{appdev/refs/macros/AP_OPTS_RESERVED:ap-opts-reserved-data}}\label{\detokenize{appdev/refs/macros/AP_OPTS_RESERVED:ap-opts-reserved}}\index{AP\_OPTS\_RESERVED (built-in variable)} 16082 16083\begin{fulllineitems} 16084\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_RESERVED:AP_OPTS_RESERVED}}\pysigline{\sphinxbfcode{AP\_OPTS\_RESERVED}} 16085\end{fulllineitems} 16086 16087 16088 16089\begin{savenotes}\sphinxattablestart 16090\centering 16091\begin{tabulary}{\linewidth}[t]{|T|T|} 16092\hline 16093 16094\sphinxcode{AP\_OPTS\_RESERVED} 16095& 16096\sphinxcode{0x80000000} 16097\\ 16098\hline 16099\end{tabulary} 16100\par 16101\sphinxattableend\end{savenotes} 16102 16103 16104\subsubsection{AP\_OPTS\_USE\_SESSION\_KEY} 16105\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SESSION_KEY:ap-opts-use-session-key}}\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SESSION_KEY::doc}}\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SESSION_KEY:ap-opts-use-session-key-data}}\index{AP\_OPTS\_USE\_SESSION\_KEY (built-in variable)} 16106 16107\begin{fulllineitems} 16108\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SESSION_KEY:AP_OPTS_USE_SESSION_KEY}}\pysigline{\sphinxbfcode{AP\_OPTS\_USE\_SESSION\_KEY}} 16109\end{fulllineitems} 16110 16111 16112Use session key. 16113 16114 16115\begin{savenotes}\sphinxattablestart 16116\centering 16117\begin{tabulary}{\linewidth}[t]{|T|T|} 16118\hline 16119 16120\sphinxcode{AP\_OPTS\_USE\_SESSION\_KEY} 16121& 16122\sphinxcode{0x40000000} 16123\\ 16124\hline 16125\end{tabulary} 16126\par 16127\sphinxattableend\end{savenotes} 16128 16129 16130\subsubsection{AP\_OPTS\_USE\_SUBKEY} 16131\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SUBKEY:ap-opts-use-subkey}}\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SUBKEY:ap-opts-use-subkey-data}}\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SUBKEY::doc}}\index{AP\_OPTS\_USE\_SUBKEY (built-in variable)} 16132 16133\begin{fulllineitems} 16134\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SUBKEY:AP_OPTS_USE_SUBKEY}}\pysigline{\sphinxbfcode{AP\_OPTS\_USE\_SUBKEY}} 16135\end{fulllineitems} 16136 16137 16138Generate a subsession key from the current session key obtained from the credentials. 16139 16140 16141\begin{savenotes}\sphinxattablestart 16142\centering 16143\begin{tabulary}{\linewidth}[t]{|T|T|} 16144\hline 16145 16146\sphinxcode{AP\_OPTS\_USE\_SUBKEY} 16147& 16148\sphinxcode{0x00000001} 16149\\ 16150\hline 16151\end{tabulary} 16152\par 16153\sphinxattableend\end{savenotes} 16154 16155 16156\subsubsection{AP\_OPTS\_WIRE\_MASK} 16157\label{\detokenize{appdev/refs/macros/AP_OPTS_WIRE_MASK:ap-opts-wire-mask-data}}\label{\detokenize{appdev/refs/macros/AP_OPTS_WIRE_MASK:ap-opts-wire-mask}}\label{\detokenize{appdev/refs/macros/AP_OPTS_WIRE_MASK::doc}}\index{AP\_OPTS\_WIRE\_MASK (built-in variable)} 16158 16159\begin{fulllineitems} 16160\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_WIRE_MASK:AP_OPTS_WIRE_MASK}}\pysigline{\sphinxbfcode{AP\_OPTS\_WIRE\_MASK}} 16161\end{fulllineitems} 16162 16163 16164 16165\begin{savenotes}\sphinxattablestart 16166\centering 16167\begin{tabulary}{\linewidth}[t]{|T|T|} 16168\hline 16169 16170\sphinxcode{AP\_OPTS\_WIRE\_MASK} 16171& 16172\sphinxcode{0xfffffff0} 16173\\ 16174\hline 16175\end{tabulary} 16176\par 16177\sphinxattableend\end{savenotes} 16178 16179 16180\subsubsection{CKSUMTYPE\_CMAC\_CAMELLIA128} 16181\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA128::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA128:cksumtype-cmac-camellia128}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA128:cksumtype-cmac-camellia128-data}}\index{CKSUMTYPE\_CMAC\_CAMELLIA128 (built-in variable)} 16182 16183\begin{fulllineitems} 16184\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA128:CKSUMTYPE_CMAC_CAMELLIA128}}\pysigline{\sphinxbfcode{CKSUMTYPE\_CMAC\_CAMELLIA128}} 16185\end{fulllineitems} 16186 16187 16188RFC 6803. 16189 16190 16191\begin{savenotes}\sphinxattablestart 16192\centering 16193\begin{tabulary}{\linewidth}[t]{|T|T|} 16194\hline 16195 16196\sphinxcode{CKSUMTYPE\_CMAC\_CAMELLIA128} 16197& 16198\sphinxcode{0x0011} 16199\\ 16200\hline 16201\end{tabulary} 16202\par 16203\sphinxattableend\end{savenotes} 16204 16205 16206\subsubsection{CKSUMTYPE\_CMAC\_CAMELLIA256} 16207\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA256::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA256:cksumtype-cmac-camellia256}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA256:cksumtype-cmac-camellia256-data}}\index{CKSUMTYPE\_CMAC\_CAMELLIA256 (built-in variable)} 16208 16209\begin{fulllineitems} 16210\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA256:CKSUMTYPE_CMAC_CAMELLIA256}}\pysigline{\sphinxbfcode{CKSUMTYPE\_CMAC\_CAMELLIA256}} 16211\end{fulllineitems} 16212 16213 16214RFC 6803. 16215 16216 16217\begin{savenotes}\sphinxattablestart 16218\centering 16219\begin{tabulary}{\linewidth}[t]{|T|T|} 16220\hline 16221 16222\sphinxcode{CKSUMTYPE\_CMAC\_CAMELLIA256} 16223& 16224\sphinxcode{0x0012} 16225\\ 16226\hline 16227\end{tabulary} 16228\par 16229\sphinxattableend\end{savenotes} 16230 16231 16232\subsubsection{CKSUMTYPE\_CRC32} 16233\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CRC32:cksumtype-crc32-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CRC32::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CRC32:cksumtype-crc32}}\index{CKSUMTYPE\_CRC32 (built-in variable)} 16234 16235\begin{fulllineitems} 16236\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CRC32:CKSUMTYPE_CRC32}}\pysigline{\sphinxbfcode{CKSUMTYPE\_CRC32}} 16237\end{fulllineitems} 16238 16239 16240 16241\begin{savenotes}\sphinxattablestart 16242\centering 16243\begin{tabulary}{\linewidth}[t]{|T|T|} 16244\hline 16245 16246\sphinxcode{CKSUMTYPE\_CRC32} 16247& 16248\sphinxcode{0x0001} 16249\\ 16250\hline 16251\end{tabulary} 16252\par 16253\sphinxattableend\end{savenotes} 16254 16255 16256\subsubsection{CKSUMTYPE\_DESCBC} 16257\label{\detokenize{appdev/refs/macros/CKSUMTYPE_DESCBC:cksumtype-descbc-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_DESCBC::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_DESCBC:cksumtype-descbc}}\index{CKSUMTYPE\_DESCBC (built-in variable)} 16258 16259\begin{fulllineitems} 16260\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_DESCBC:CKSUMTYPE_DESCBC}}\pysigline{\sphinxbfcode{CKSUMTYPE\_DESCBC}} 16261\end{fulllineitems} 16262 16263 16264 16265\begin{savenotes}\sphinxattablestart 16266\centering 16267\begin{tabulary}{\linewidth}[t]{|T|T|} 16268\hline 16269 16270\sphinxcode{CKSUMTYPE\_DESCBC} 16271& 16272\sphinxcode{0x0004} 16273\\ 16274\hline 16275\end{tabulary} 16276\par 16277\sphinxattableend\end{savenotes} 16278 16279 16280\subsubsection{CKSUMTYPE\_HMAC\_MD5\_ARCFOUR} 16281\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_MD5_ARCFOUR:cksumtype-hmac-md5-arcfour-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_MD5_ARCFOUR:cksumtype-hmac-md5-arcfour}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_MD5_ARCFOUR::doc}}\index{CKSUMTYPE\_HMAC\_MD5\_ARCFOUR (built-in variable)} 16282 16283\begin{fulllineitems} 16284\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_MD5_ARCFOUR:CKSUMTYPE_HMAC_MD5_ARCFOUR}}\pysigline{\sphinxbfcode{CKSUMTYPE\_HMAC\_MD5\_ARCFOUR}} 16285\end{fulllineitems} 16286 16287 16288RFC 4757. 16289 16290 16291\begin{savenotes}\sphinxattablestart 16292\centering 16293\begin{tabulary}{\linewidth}[t]{|T|T|} 16294\hline 16295 16296\sphinxcode{CKSUMTYPE\_HMAC\_MD5\_ARCFOUR} 16297& 16298\sphinxcode{-138} 16299\\ 16300\hline 16301\end{tabulary} 16302\par 16303\sphinxattableend\end{savenotes} 16304 16305 16306\subsubsection{CKSUMTYPE\_HMAC\_SHA1\_96\_AES128} 16307\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES128::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES128:cksumtype-hmac-sha1-96-aes128}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES128:cksumtype-hmac-sha1-96-aes128-data}}\index{CKSUMTYPE\_HMAC\_SHA1\_96\_AES128 (built-in variable)} 16308 16309\begin{fulllineitems} 16310\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES128:CKSUMTYPE_HMAC_SHA1_96_AES128}}\pysigline{\sphinxbfcode{CKSUMTYPE\_HMAC\_SHA1\_96\_AES128}} 16311\end{fulllineitems} 16312 16313 16314RFC 3962. 16315 16316Used with ENCTYPE\_AES128\_CTS\_HMAC\_SHA1\_96 16317 16318 16319\begin{savenotes}\sphinxattablestart 16320\centering 16321\begin{tabulary}{\linewidth}[t]{|T|T|} 16322\hline 16323 16324\sphinxcode{CKSUMTYPE\_HMAC\_SHA1\_96\_AES128} 16325& 16326\sphinxcode{0x000f} 16327\\ 16328\hline 16329\end{tabulary} 16330\par 16331\sphinxattableend\end{savenotes} 16332 16333 16334\subsubsection{CKSUMTYPE\_HMAC\_SHA1\_96\_AES256} 16335\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES256::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES256:cksumtype-hmac-sha1-96-aes256}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES256:cksumtype-hmac-sha1-96-aes256-data}}\index{CKSUMTYPE\_HMAC\_SHA1\_96\_AES256 (built-in variable)} 16336 16337\begin{fulllineitems} 16338\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES256:CKSUMTYPE_HMAC_SHA1_96_AES256}}\pysigline{\sphinxbfcode{CKSUMTYPE\_HMAC\_SHA1\_96\_AES256}} 16339\end{fulllineitems} 16340 16341 16342RFC 3962. 16343 16344Used with ENCTYPE\_AES256\_CTS\_HMAC\_SHA1\_96 16345 16346 16347\begin{savenotes}\sphinxattablestart 16348\centering 16349\begin{tabulary}{\linewidth}[t]{|T|T|} 16350\hline 16351 16352\sphinxcode{CKSUMTYPE\_HMAC\_SHA1\_96\_AES256} 16353& 16354\sphinxcode{0x0010} 16355\\ 16356\hline 16357\end{tabulary} 16358\par 16359\sphinxattableend\end{savenotes} 16360 16361 16362\subsubsection{CKSUMTYPE\_HMAC\_SHA256\_128\_AES128} 16363\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA256_128_AES128:cksumtype-hmac-sha256-128-aes128-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA256_128_AES128::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA256_128_AES128:cksumtype-hmac-sha256-128-aes128}}\index{CKSUMTYPE\_HMAC\_SHA256\_128\_AES128 (built-in variable)} 16364 16365\begin{fulllineitems} 16366\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA256_128_AES128:CKSUMTYPE_HMAC_SHA256_128_AES128}}\pysigline{\sphinxbfcode{CKSUMTYPE\_HMAC\_SHA256\_128\_AES128}} 16367\end{fulllineitems} 16368 16369 16370RFC 8009. 16371 16372 16373\begin{savenotes}\sphinxattablestart 16374\centering 16375\begin{tabulary}{\linewidth}[t]{|T|T|} 16376\hline 16377 16378\sphinxcode{CKSUMTYPE\_HMAC\_SHA256\_128\_AES128} 16379& 16380\sphinxcode{0x0013} 16381\\ 16382\hline 16383\end{tabulary} 16384\par 16385\sphinxattableend\end{savenotes} 16386 16387 16388\subsubsection{CKSUMTYPE\_HMAC\_SHA384\_192\_AES256} 16389\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA384_192_AES256:cksumtype-hmac-sha384-192-aes256}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA384_192_AES256:cksumtype-hmac-sha384-192-aes256-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA384_192_AES256::doc}}\index{CKSUMTYPE\_HMAC\_SHA384\_192\_AES256 (built-in variable)} 16390 16391\begin{fulllineitems} 16392\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA384_192_AES256:CKSUMTYPE_HMAC_SHA384_192_AES256}}\pysigline{\sphinxbfcode{CKSUMTYPE\_HMAC\_SHA384\_192\_AES256}} 16393\end{fulllineitems} 16394 16395 16396RFC 8009. 16397 16398 16399\begin{savenotes}\sphinxattablestart 16400\centering 16401\begin{tabulary}{\linewidth}[t]{|T|T|} 16402\hline 16403 16404\sphinxcode{CKSUMTYPE\_HMAC\_SHA384\_192\_AES256} 16405& 16406\sphinxcode{0x0014} 16407\\ 16408\hline 16409\end{tabulary} 16410\par 16411\sphinxattableend\end{savenotes} 16412 16413 16414\subsubsection{CKSUMTYPE\_HMAC\_SHA1\_DES3} 16415\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_DES3::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_DES3:cksumtype-hmac-sha1-des3}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_DES3:cksumtype-hmac-sha1-des3-data}}\index{CKSUMTYPE\_HMAC\_SHA1\_DES3 (built-in variable)} 16416 16417\begin{fulllineitems} 16418\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_DES3:CKSUMTYPE_HMAC_SHA1_DES3}}\pysigline{\sphinxbfcode{CKSUMTYPE\_HMAC\_SHA1\_DES3}} 16419\end{fulllineitems} 16420 16421 16422 16423\begin{savenotes}\sphinxattablestart 16424\centering 16425\begin{tabulary}{\linewidth}[t]{|T|T|} 16426\hline 16427 16428\sphinxcode{CKSUMTYPE\_HMAC\_SHA1\_DES3} 16429& 16430\sphinxcode{0x000c} 16431\\ 16432\hline 16433\end{tabulary} 16434\par 16435\sphinxattableend\end{savenotes} 16436 16437 16438\subsubsection{CKSUMTYPE\_MD5\_HMAC\_ARCFOUR} 16439\label{\detokenize{appdev/refs/macros/CKSUMTYPE_MD5_HMAC_ARCFOUR:cksumtype-md5-hmac-arcfour}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_MD5_HMAC_ARCFOUR:cksumtype-md5-hmac-arcfour-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_MD5_HMAC_ARCFOUR::doc}}\index{CKSUMTYPE\_MD5\_HMAC\_ARCFOUR (built-in variable)} 16440 16441\begin{fulllineitems} 16442\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_MD5_HMAC_ARCFOUR:CKSUMTYPE_MD5_HMAC_ARCFOUR}}\pysigline{\sphinxbfcode{CKSUMTYPE\_MD5\_HMAC\_ARCFOUR}} 16443\end{fulllineitems} 16444 16445 16446 16447\begin{savenotes}\sphinxattablestart 16448\centering 16449\begin{tabulary}{\linewidth}[t]{|T|T|} 16450\hline 16451 16452\sphinxcode{CKSUMTYPE\_MD5\_HMAC\_ARCFOUR} 16453& 16454\sphinxcode{-137 /* Microsoft netlogon */} 16455\\ 16456\hline 16457\end{tabulary} 16458\par 16459\sphinxattableend\end{savenotes} 16460 16461 16462\subsubsection{CKSUMTYPE\_NIST\_SHA} 16463\label{\detokenize{appdev/refs/macros/CKSUMTYPE_NIST_SHA::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_NIST_SHA:cksumtype-nist-sha}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_NIST_SHA:cksumtype-nist-sha-data}}\index{CKSUMTYPE\_NIST\_SHA (built-in variable)} 16464 16465\begin{fulllineitems} 16466\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_NIST_SHA:CKSUMTYPE_NIST_SHA}}\pysigline{\sphinxbfcode{CKSUMTYPE\_NIST\_SHA}} 16467\end{fulllineitems} 16468 16469 16470 16471\begin{savenotes}\sphinxattablestart 16472\centering 16473\begin{tabulary}{\linewidth}[t]{|T|T|} 16474\hline 16475 16476\sphinxcode{CKSUMTYPE\_NIST\_SHA} 16477& 16478\sphinxcode{0x0009} 16479\\ 16480\hline 16481\end{tabulary} 16482\par 16483\sphinxattableend\end{savenotes} 16484 16485 16486\subsubsection{CKSUMTYPE\_RSA\_MD4} 16487\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4:cksumtype-rsa-md4}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4:cksumtype-rsa-md4-data}}\index{CKSUMTYPE\_RSA\_MD4 (built-in variable)} 16488 16489\begin{fulllineitems} 16490\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4:CKSUMTYPE_RSA_MD4}}\pysigline{\sphinxbfcode{CKSUMTYPE\_RSA\_MD4}} 16491\end{fulllineitems} 16492 16493 16494 16495\begin{savenotes}\sphinxattablestart 16496\centering 16497\begin{tabulary}{\linewidth}[t]{|T|T|} 16498\hline 16499 16500\sphinxcode{CKSUMTYPE\_RSA\_MD4} 16501& 16502\sphinxcode{0x0002} 16503\\ 16504\hline 16505\end{tabulary} 16506\par 16507\sphinxattableend\end{savenotes} 16508 16509 16510\subsubsection{CKSUMTYPE\_RSA\_MD4\_DES} 16511\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4_DES::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4_DES:cksumtype-rsa-md4-des}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4_DES:cksumtype-rsa-md4-des-data}}\index{CKSUMTYPE\_RSA\_MD4\_DES (built-in variable)} 16512 16513\begin{fulllineitems} 16514\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4_DES:CKSUMTYPE_RSA_MD4_DES}}\pysigline{\sphinxbfcode{CKSUMTYPE\_RSA\_MD4\_DES}} 16515\end{fulllineitems} 16516 16517 16518 16519\begin{savenotes}\sphinxattablestart 16520\centering 16521\begin{tabulary}{\linewidth}[t]{|T|T|} 16522\hline 16523 16524\sphinxcode{CKSUMTYPE\_RSA\_MD4\_DES} 16525& 16526\sphinxcode{0x0003} 16527\\ 16528\hline 16529\end{tabulary} 16530\par 16531\sphinxattableend\end{savenotes} 16532 16533 16534\subsubsection{CKSUMTYPE\_RSA\_MD5} 16535\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5:cksumtype-rsa-md5-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5:cksumtype-rsa-md5}}\index{CKSUMTYPE\_RSA\_MD5 (built-in variable)} 16536 16537\begin{fulllineitems} 16538\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5:CKSUMTYPE_RSA_MD5}}\pysigline{\sphinxbfcode{CKSUMTYPE\_RSA\_MD5}} 16539\end{fulllineitems} 16540 16541 16542 16543\begin{savenotes}\sphinxattablestart 16544\centering 16545\begin{tabulary}{\linewidth}[t]{|T|T|} 16546\hline 16547 16548\sphinxcode{CKSUMTYPE\_RSA\_MD5} 16549& 16550\sphinxcode{0x0007} 16551\\ 16552\hline 16553\end{tabulary} 16554\par 16555\sphinxattableend\end{savenotes} 16556 16557 16558\subsubsection{CKSUMTYPE\_RSA\_MD5\_DES} 16559\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5_DES:cksumtype-rsa-md5-des-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5_DES::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5_DES:cksumtype-rsa-md5-des}}\index{CKSUMTYPE\_RSA\_MD5\_DES (built-in variable)} 16560 16561\begin{fulllineitems} 16562\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5_DES:CKSUMTYPE_RSA_MD5_DES}}\pysigline{\sphinxbfcode{CKSUMTYPE\_RSA\_MD5\_DES}} 16563\end{fulllineitems} 16564 16565 16566 16567\begin{savenotes}\sphinxattablestart 16568\centering 16569\begin{tabulary}{\linewidth}[t]{|T|T|} 16570\hline 16571 16572\sphinxcode{CKSUMTYPE\_RSA\_MD5\_DES} 16573& 16574\sphinxcode{0x0008} 16575\\ 16576\hline 16577\end{tabulary} 16578\par 16579\sphinxattableend\end{savenotes} 16580 16581 16582\subsubsection{ENCTYPE\_AES128\_CTS\_HMAC\_SHA1\_96} 16583\label{\detokenize{appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA1_96:enctype-aes128-cts-hmac-sha1-96-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA1_96::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA1_96:enctype-aes128-cts-hmac-sha1-96}}\index{ENCTYPE\_AES128\_CTS\_HMAC\_SHA1\_96 (built-in variable)} 16584 16585\begin{fulllineitems} 16586\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA1_96:ENCTYPE_AES128_CTS_HMAC_SHA1_96}}\pysigline{\sphinxbfcode{ENCTYPE\_AES128\_CTS\_HMAC\_SHA1\_96}} 16587\end{fulllineitems} 16588 16589 16590RFC 3962. 16591 16592 16593\begin{savenotes}\sphinxattablestart 16594\centering 16595\begin{tabulary}{\linewidth}[t]{|T|T|} 16596\hline 16597 16598\sphinxcode{ENCTYPE\_AES128\_CTS\_HMAC\_SHA1\_96} 16599& 16600\sphinxcode{0x0011} 16601\\ 16602\hline 16603\end{tabulary} 16604\par 16605\sphinxattableend\end{savenotes} 16606 16607 16608\subsubsection{ENCTYPE\_AES128\_CTS\_HMAC\_SHA256\_128} 16609\label{\detokenize{appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA256_128:enctype-aes128-cts-hmac-sha256-128}}\label{\detokenize{appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA256_128:enctype-aes128-cts-hmac-sha256-128-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA256_128::doc}}\index{ENCTYPE\_AES128\_CTS\_HMAC\_SHA256\_128 (built-in variable)} 16610 16611\begin{fulllineitems} 16612\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA256_128:ENCTYPE_AES128_CTS_HMAC_SHA256_128}}\pysigline{\sphinxbfcode{ENCTYPE\_AES128\_CTS\_HMAC\_SHA256\_128}} 16613\end{fulllineitems} 16614 16615 16616RFC 8009. 16617 16618 16619\begin{savenotes}\sphinxattablestart 16620\centering 16621\begin{tabulary}{\linewidth}[t]{|T|T|} 16622\hline 16623 16624\sphinxcode{ENCTYPE\_AES128\_CTS\_HMAC\_SHA256\_128} 16625& 16626\sphinxcode{0x0013} 16627\\ 16628\hline 16629\end{tabulary} 16630\par 16631\sphinxattableend\end{savenotes} 16632 16633 16634\subsubsection{ENCTYPE\_AES256\_CTS\_HMAC\_SHA1\_96} 16635\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA1_96:enctype-aes256-cts-hmac-sha1-96-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA1_96::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA1_96:enctype-aes256-cts-hmac-sha1-96}}\index{ENCTYPE\_AES256\_CTS\_HMAC\_SHA1\_96 (built-in variable)} 16636 16637\begin{fulllineitems} 16638\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA1_96:ENCTYPE_AES256_CTS_HMAC_SHA1_96}}\pysigline{\sphinxbfcode{ENCTYPE\_AES256\_CTS\_HMAC\_SHA1\_96}} 16639\end{fulllineitems} 16640 16641 16642RFC 3962. 16643 16644 16645\begin{savenotes}\sphinxattablestart 16646\centering 16647\begin{tabulary}{\linewidth}[t]{|T|T|} 16648\hline 16649 16650\sphinxcode{ENCTYPE\_AES256\_CTS\_HMAC\_SHA1\_96} 16651& 16652\sphinxcode{0x0012} 16653\\ 16654\hline 16655\end{tabulary} 16656\par 16657\sphinxattableend\end{savenotes} 16658 16659 16660\subsubsection{ENCTYPE\_AES256\_CTS\_HMAC\_SHA384\_192} 16661\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA384_192:enctype-aes256-cts-hmac-sha384-192-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA384_192:enctype-aes256-cts-hmac-sha384-192}}\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA384_192::doc}}\index{ENCTYPE\_AES256\_CTS\_HMAC\_SHA384\_192 (built-in variable)} 16662 16663\begin{fulllineitems} 16664\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA384_192:ENCTYPE_AES256_CTS_HMAC_SHA384_192}}\pysigline{\sphinxbfcode{ENCTYPE\_AES256\_CTS\_HMAC\_SHA384\_192}} 16665\end{fulllineitems} 16666 16667 16668RFC 8009. 16669 16670 16671\begin{savenotes}\sphinxattablestart 16672\centering 16673\begin{tabulary}{\linewidth}[t]{|T|T|} 16674\hline 16675 16676\sphinxcode{ENCTYPE\_AES256\_CTS\_HMAC\_SHA384\_192} 16677& 16678\sphinxcode{0x0014} 16679\\ 16680\hline 16681\end{tabulary} 16682\par 16683\sphinxattableend\end{savenotes} 16684 16685 16686\subsubsection{ENCTYPE\_ARCFOUR\_HMAC} 16687\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC:enctype-arcfour-hmac}}\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC:enctype-arcfour-hmac-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC::doc}}\index{ENCTYPE\_ARCFOUR\_HMAC (built-in variable)} 16688 16689\begin{fulllineitems} 16690\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC:ENCTYPE_ARCFOUR_HMAC}}\pysigline{\sphinxbfcode{ENCTYPE\_ARCFOUR\_HMAC}} 16691\end{fulllineitems} 16692 16693 16694RFC 4757. 16695 16696 16697\begin{savenotes}\sphinxattablestart 16698\centering 16699\begin{tabulary}{\linewidth}[t]{|T|T|} 16700\hline 16701 16702\sphinxcode{ENCTYPE\_ARCFOUR\_HMAC} 16703& 16704\sphinxcode{0x0017} 16705\\ 16706\hline 16707\end{tabulary} 16708\par 16709\sphinxattableend\end{savenotes} 16710 16711 16712\subsubsection{ENCTYPE\_ARCFOUR\_HMAC\_EXP} 16713\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC_EXP:enctype-arcfour-hmac-exp-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC_EXP:enctype-arcfour-hmac-exp}}\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC_EXP::doc}}\index{ENCTYPE\_ARCFOUR\_HMAC\_EXP (built-in variable)} 16714 16715\begin{fulllineitems} 16716\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC_EXP:ENCTYPE_ARCFOUR_HMAC_EXP}}\pysigline{\sphinxbfcode{ENCTYPE\_ARCFOUR\_HMAC\_EXP}} 16717\end{fulllineitems} 16718 16719 16720RFC 4757. 16721 16722 16723\begin{savenotes}\sphinxattablestart 16724\centering 16725\begin{tabulary}{\linewidth}[t]{|T|T|} 16726\hline 16727 16728\sphinxcode{ENCTYPE\_ARCFOUR\_HMAC\_EXP} 16729& 16730\sphinxcode{0x0018} 16731\\ 16732\hline 16733\end{tabulary} 16734\par 16735\sphinxattableend\end{savenotes} 16736 16737 16738\subsubsection{ENCTYPE\_CAMELLIA128\_CTS\_CMAC} 16739\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA128_CTS_CMAC:enctype-camellia128-cts-cmac-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA128_CTS_CMAC:enctype-camellia128-cts-cmac}}\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA128_CTS_CMAC::doc}}\index{ENCTYPE\_CAMELLIA128\_CTS\_CMAC (built-in variable)} 16740 16741\begin{fulllineitems} 16742\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA128_CTS_CMAC:ENCTYPE_CAMELLIA128_CTS_CMAC}}\pysigline{\sphinxbfcode{ENCTYPE\_CAMELLIA128\_CTS\_CMAC}} 16743\end{fulllineitems} 16744 16745 16746RFC 6803. 16747 16748 16749\begin{savenotes}\sphinxattablestart 16750\centering 16751\begin{tabulary}{\linewidth}[t]{|T|T|} 16752\hline 16753 16754\sphinxcode{ENCTYPE\_CAMELLIA128\_CTS\_CMAC} 16755& 16756\sphinxcode{0x0019} 16757\\ 16758\hline 16759\end{tabulary} 16760\par 16761\sphinxattableend\end{savenotes} 16762 16763 16764\subsubsection{ENCTYPE\_CAMELLIA256\_CTS\_CMAC} 16765\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA256_CTS_CMAC:enctype-camellia256-cts-cmac-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA256_CTS_CMAC:enctype-camellia256-cts-cmac}}\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA256_CTS_CMAC::doc}}\index{ENCTYPE\_CAMELLIA256\_CTS\_CMAC (built-in variable)} 16766 16767\begin{fulllineitems} 16768\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA256_CTS_CMAC:ENCTYPE_CAMELLIA256_CTS_CMAC}}\pysigline{\sphinxbfcode{ENCTYPE\_CAMELLIA256\_CTS\_CMAC}} 16769\end{fulllineitems} 16770 16771 16772RFC 6803. 16773 16774 16775\begin{savenotes}\sphinxattablestart 16776\centering 16777\begin{tabulary}{\linewidth}[t]{|T|T|} 16778\hline 16779 16780\sphinxcode{ENCTYPE\_CAMELLIA256\_CTS\_CMAC} 16781& 16782\sphinxcode{0x001a} 16783\\ 16784\hline 16785\end{tabulary} 16786\par 16787\sphinxattableend\end{savenotes} 16788 16789 16790\subsubsection{ENCTYPE\_DES3\_CBC\_ENV} 16791\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_ENV::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_ENV:enctype-des3-cbc-env}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_ENV:enctype-des3-cbc-env-data}}\index{ENCTYPE\_DES3\_CBC\_ENV (built-in variable)} 16792 16793\begin{fulllineitems} 16794\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_ENV:ENCTYPE_DES3_CBC_ENV}}\pysigline{\sphinxbfcode{ENCTYPE\_DES3\_CBC\_ENV}} 16795\end{fulllineitems} 16796 16797 16798DES-3 cbc mode, CMS enveloped data. 16799 16800 16801\begin{savenotes}\sphinxattablestart 16802\centering 16803\begin{tabulary}{\linewidth}[t]{|T|T|} 16804\hline 16805 16806\sphinxcode{ENCTYPE\_DES3\_CBC\_ENV} 16807& 16808\sphinxcode{0x000f} 16809\\ 16810\hline 16811\end{tabulary} 16812\par 16813\sphinxattableend\end{savenotes} 16814 16815 16816\subsubsection{ENCTYPE\_DES3\_CBC\_RAW} 16817\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_RAW:enctype-des3-cbc-raw}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_RAW::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_RAW:enctype-des3-cbc-raw-data}}\index{ENCTYPE\_DES3\_CBC\_RAW (built-in variable)} 16818 16819\begin{fulllineitems} 16820\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_RAW:ENCTYPE_DES3_CBC_RAW}}\pysigline{\sphinxbfcode{ENCTYPE\_DES3\_CBC\_RAW}} 16821\end{fulllineitems} 16822 16823 16824 16825\begin{savenotes}\sphinxattablestart 16826\centering 16827\begin{tabulary}{\linewidth}[t]{|T|T|} 16828\hline 16829 16830\sphinxcode{ENCTYPE\_DES3\_CBC\_RAW} 16831& 16832\sphinxcode{0x0006} 16833\\ 16834\hline 16835\end{tabulary} 16836\par 16837\sphinxattableend\end{savenotes} 16838 16839 16840\subsubsection{ENCTYPE\_DES3\_CBC\_SHA} 16841\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA:enctype-des3-cbc-sha}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA:enctype-des3-cbc-sha-data}}\index{ENCTYPE\_DES3\_CBC\_SHA (built-in variable)} 16842 16843\begin{fulllineitems} 16844\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA:ENCTYPE_DES3_CBC_SHA}}\pysigline{\sphinxbfcode{ENCTYPE\_DES3\_CBC\_SHA}} 16845\end{fulllineitems} 16846 16847 16848 16849\begin{savenotes}\sphinxattablestart 16850\centering 16851\begin{tabulary}{\linewidth}[t]{|T|T|} 16852\hline 16853 16854\sphinxcode{ENCTYPE\_DES3\_CBC\_SHA} 16855& 16856\sphinxcode{0x0005} 16857\\ 16858\hline 16859\end{tabulary} 16860\par 16861\sphinxattableend\end{savenotes} 16862 16863 16864\subsubsection{ENCTYPE\_DES3\_CBC\_SHA1} 16865\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA1::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA1:enctype-des3-cbc-sha1}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA1:enctype-des3-cbc-sha1-data}}\index{ENCTYPE\_DES3\_CBC\_SHA1 (built-in variable)} 16866 16867\begin{fulllineitems} 16868\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA1:ENCTYPE_DES3_CBC_SHA1}}\pysigline{\sphinxbfcode{ENCTYPE\_DES3\_CBC\_SHA1}} 16869\end{fulllineitems} 16870 16871 16872 16873\begin{savenotes}\sphinxattablestart 16874\centering 16875\begin{tabulary}{\linewidth}[t]{|T|T|} 16876\hline 16877 16878\sphinxcode{ENCTYPE\_DES3\_CBC\_SHA1} 16879& 16880\sphinxcode{0x0010} 16881\\ 16882\hline 16883\end{tabulary} 16884\par 16885\sphinxattableend\end{savenotes} 16886 16887 16888\subsubsection{ENCTYPE\_DES\_CBC\_CRC} 16889\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_CRC:enctype-des-cbc-crc-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_CRC:enctype-des-cbc-crc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_CRC::doc}}\index{ENCTYPE\_DES\_CBC\_CRC (built-in variable)} 16890 16891\begin{fulllineitems} 16892\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_CRC:ENCTYPE_DES_CBC_CRC}}\pysigline{\sphinxbfcode{ENCTYPE\_DES\_CBC\_CRC}} 16893\end{fulllineitems} 16894 16895 16896 16897\begin{savenotes}\sphinxattablestart 16898\centering 16899\begin{tabulary}{\linewidth}[t]{|T|T|} 16900\hline 16901 16902\sphinxcode{ENCTYPE\_DES\_CBC\_CRC} 16903& 16904\sphinxcode{0x0001} 16905\\ 16906\hline 16907\end{tabulary} 16908\par 16909\sphinxattableend\end{savenotes} 16910 16911 16912\subsubsection{ENCTYPE\_DES\_CBC\_MD4} 16913\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD4:enctype-des-cbc-md4-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD4::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD4:enctype-des-cbc-md4}}\index{ENCTYPE\_DES\_CBC\_MD4 (built-in variable)} 16914 16915\begin{fulllineitems} 16916\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD4:ENCTYPE_DES_CBC_MD4}}\pysigline{\sphinxbfcode{ENCTYPE\_DES\_CBC\_MD4}} 16917\end{fulllineitems} 16918 16919 16920 16921\begin{savenotes}\sphinxattablestart 16922\centering 16923\begin{tabulary}{\linewidth}[t]{|T|T|} 16924\hline 16925 16926\sphinxcode{ENCTYPE\_DES\_CBC\_MD4} 16927& 16928\sphinxcode{0x0002} 16929\\ 16930\hline 16931\end{tabulary} 16932\par 16933\sphinxattableend\end{savenotes} 16934 16935 16936\subsubsection{ENCTYPE\_DES\_CBC\_MD5} 16937\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD5:enctype-des-cbc-md5-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD5::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD5:enctype-des-cbc-md5}}\index{ENCTYPE\_DES\_CBC\_MD5 (built-in variable)} 16938 16939\begin{fulllineitems} 16940\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD5:ENCTYPE_DES_CBC_MD5}}\pysigline{\sphinxbfcode{ENCTYPE\_DES\_CBC\_MD5}} 16941\end{fulllineitems} 16942 16943 16944 16945\begin{savenotes}\sphinxattablestart 16946\centering 16947\begin{tabulary}{\linewidth}[t]{|T|T|} 16948\hline 16949 16950\sphinxcode{ENCTYPE\_DES\_CBC\_MD5} 16951& 16952\sphinxcode{0x0003} 16953\\ 16954\hline 16955\end{tabulary} 16956\par 16957\sphinxattableend\end{savenotes} 16958 16959 16960\subsubsection{ENCTYPE\_DES\_CBC\_RAW} 16961\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_RAW:enctype-des-cbc-raw-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_RAW:enctype-des-cbc-raw}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_RAW::doc}}\index{ENCTYPE\_DES\_CBC\_RAW (built-in variable)} 16962 16963\begin{fulllineitems} 16964\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_RAW:ENCTYPE_DES_CBC_RAW}}\pysigline{\sphinxbfcode{ENCTYPE\_DES\_CBC\_RAW}} 16965\end{fulllineitems} 16966 16967 16968 16969\begin{savenotes}\sphinxattablestart 16970\centering 16971\begin{tabulary}{\linewidth}[t]{|T|T|} 16972\hline 16973 16974\sphinxcode{ENCTYPE\_DES\_CBC\_RAW} 16975& 16976\sphinxcode{0x0004} 16977\\ 16978\hline 16979\end{tabulary} 16980\par 16981\sphinxattableend\end{savenotes} 16982 16983 16984\subsubsection{ENCTYPE\_DES\_HMAC\_SHA1} 16985\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_HMAC_SHA1:enctype-des-hmac-sha1-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_HMAC_SHA1::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_HMAC_SHA1:enctype-des-hmac-sha1}}\index{ENCTYPE\_DES\_HMAC\_SHA1 (built-in variable)} 16986 16987\begin{fulllineitems} 16988\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_HMAC_SHA1:ENCTYPE_DES_HMAC_SHA1}}\pysigline{\sphinxbfcode{ENCTYPE\_DES\_HMAC\_SHA1}} 16989\end{fulllineitems} 16990 16991 16992 16993\begin{savenotes}\sphinxattablestart 16994\centering 16995\begin{tabulary}{\linewidth}[t]{|T|T|} 16996\hline 16997 16998\sphinxcode{ENCTYPE\_DES\_HMAC\_SHA1} 16999& 17000\sphinxcode{0x0008} 17001\\ 17002\hline 17003\end{tabulary} 17004\par 17005\sphinxattableend\end{savenotes} 17006 17007 17008\subsubsection{ENCTYPE\_DSA\_SHA1\_CMS} 17009\label{\detokenize{appdev/refs/macros/ENCTYPE_DSA_SHA1_CMS:enctype-dsa-sha1-cms-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DSA_SHA1_CMS:enctype-dsa-sha1-cms}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DSA_SHA1_CMS::doc}}\index{ENCTYPE\_DSA\_SHA1\_CMS (built-in variable)} 17010 17011\begin{fulllineitems} 17012\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DSA_SHA1_CMS:ENCTYPE_DSA_SHA1_CMS}}\pysigline{\sphinxbfcode{ENCTYPE\_DSA\_SHA1\_CMS}} 17013\end{fulllineitems} 17014 17015 17016DSA with SHA1, CMS signature. 17017 17018 17019\begin{savenotes}\sphinxattablestart 17020\centering 17021\begin{tabulary}{\linewidth}[t]{|T|T|} 17022\hline 17023 17024\sphinxcode{ENCTYPE\_DSA\_SHA1\_CMS} 17025& 17026\sphinxcode{0x0009} 17027\\ 17028\hline 17029\end{tabulary} 17030\par 17031\sphinxattableend\end{savenotes} 17032 17033 17034\subsubsection{ENCTYPE\_MD5\_RSA\_CMS} 17035\label{\detokenize{appdev/refs/macros/ENCTYPE_MD5_RSA_CMS:enctype-md5-rsa-cms}}\label{\detokenize{appdev/refs/macros/ENCTYPE_MD5_RSA_CMS:enctype-md5-rsa-cms-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_MD5_RSA_CMS::doc}}\index{ENCTYPE\_MD5\_RSA\_CMS (built-in variable)} 17036 17037\begin{fulllineitems} 17038\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_MD5_RSA_CMS:ENCTYPE_MD5_RSA_CMS}}\pysigline{\sphinxbfcode{ENCTYPE\_MD5\_RSA\_CMS}} 17039\end{fulllineitems} 17040 17041 17042MD5 with RSA, CMS signature. 17043 17044 17045\begin{savenotes}\sphinxattablestart 17046\centering 17047\begin{tabulary}{\linewidth}[t]{|T|T|} 17048\hline 17049 17050\sphinxcode{ENCTYPE\_MD5\_RSA\_CMS} 17051& 17052\sphinxcode{0x000a} 17053\\ 17054\hline 17055\end{tabulary} 17056\par 17057\sphinxattableend\end{savenotes} 17058 17059 17060\subsubsection{ENCTYPE\_NULL} 17061\label{\detokenize{appdev/refs/macros/ENCTYPE_NULL:enctype-null}}\label{\detokenize{appdev/refs/macros/ENCTYPE_NULL::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_NULL:enctype-null-data}}\index{ENCTYPE\_NULL (built-in variable)} 17062 17063\begin{fulllineitems} 17064\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_NULL:ENCTYPE_NULL}}\pysigline{\sphinxbfcode{ENCTYPE\_NULL}} 17065\end{fulllineitems} 17066 17067 17068 17069\begin{savenotes}\sphinxattablestart 17070\centering 17071\begin{tabulary}{\linewidth}[t]{|T|T|} 17072\hline 17073 17074\sphinxcode{ENCTYPE\_NULL} 17075& 17076\sphinxcode{0x0000} 17077\\ 17078\hline 17079\end{tabulary} 17080\par 17081\sphinxattableend\end{savenotes} 17082 17083 17084\subsubsection{ENCTYPE\_RC2\_CBC\_ENV} 17085\label{\detokenize{appdev/refs/macros/ENCTYPE_RC2_CBC_ENV:enctype-rc2-cbc-env}}\label{\detokenize{appdev/refs/macros/ENCTYPE_RC2_CBC_ENV::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_RC2_CBC_ENV:enctype-rc2-cbc-env-data}}\index{ENCTYPE\_RC2\_CBC\_ENV (built-in variable)} 17086 17087\begin{fulllineitems} 17088\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_RC2_CBC_ENV:ENCTYPE_RC2_CBC_ENV}}\pysigline{\sphinxbfcode{ENCTYPE\_RC2\_CBC\_ENV}} 17089\end{fulllineitems} 17090 17091 17092RC2 cbc mode, CMS enveloped data. 17093 17094 17095\begin{savenotes}\sphinxattablestart 17096\centering 17097\begin{tabulary}{\linewidth}[t]{|T|T|} 17098\hline 17099 17100\sphinxcode{ENCTYPE\_RC2\_CBC\_ENV} 17101& 17102\sphinxcode{0x000c} 17103\\ 17104\hline 17105\end{tabulary} 17106\par 17107\sphinxattableend\end{savenotes} 17108 17109 17110\subsubsection{ENCTYPE\_RSA\_ENV} 17111\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ENV:enctype-rsa-env-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ENV:enctype-rsa-env}}\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ENV::doc}}\index{ENCTYPE\_RSA\_ENV (built-in variable)} 17112 17113\begin{fulllineitems} 17114\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ENV:ENCTYPE_RSA_ENV}}\pysigline{\sphinxbfcode{ENCTYPE\_RSA\_ENV}} 17115\end{fulllineitems} 17116 17117 17118RSA encryption, CMS enveloped data. 17119 17120 17121\begin{savenotes}\sphinxattablestart 17122\centering 17123\begin{tabulary}{\linewidth}[t]{|T|T|} 17124\hline 17125 17126\sphinxcode{ENCTYPE\_RSA\_ENV} 17127& 17128\sphinxcode{0x000d} 17129\\ 17130\hline 17131\end{tabulary} 17132\par 17133\sphinxattableend\end{savenotes} 17134 17135 17136\subsubsection{ENCTYPE\_RSA\_ES\_OAEP\_ENV} 17137\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ES_OAEP_ENV::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ES_OAEP_ENV:enctype-rsa-es-oaep-env}}\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ES_OAEP_ENV:enctype-rsa-es-oaep-env-data}}\index{ENCTYPE\_RSA\_ES\_OAEP\_ENV (built-in variable)} 17138 17139\begin{fulllineitems} 17140\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ES_OAEP_ENV:ENCTYPE_RSA_ES_OAEP_ENV}}\pysigline{\sphinxbfcode{ENCTYPE\_RSA\_ES\_OAEP\_ENV}} 17141\end{fulllineitems} 17142 17143 17144RSA w/OEAP encryption, CMS enveloped data. 17145 17146 17147\begin{savenotes}\sphinxattablestart 17148\centering 17149\begin{tabulary}{\linewidth}[t]{|T|T|} 17150\hline 17151 17152\sphinxcode{ENCTYPE\_RSA\_ES\_OAEP\_ENV} 17153& 17154\sphinxcode{0x000e} 17155\\ 17156\hline 17157\end{tabulary} 17158\par 17159\sphinxattableend\end{savenotes} 17160 17161 17162\subsubsection{ENCTYPE\_SHA1\_RSA\_CMS} 17163\label{\detokenize{appdev/refs/macros/ENCTYPE_SHA1_RSA_CMS::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_SHA1_RSA_CMS:enctype-sha1-rsa-cms-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_SHA1_RSA_CMS:enctype-sha1-rsa-cms}}\index{ENCTYPE\_SHA1\_RSA\_CMS (built-in variable)} 17164 17165\begin{fulllineitems} 17166\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_SHA1_RSA_CMS:ENCTYPE_SHA1_RSA_CMS}}\pysigline{\sphinxbfcode{ENCTYPE\_SHA1\_RSA\_CMS}} 17167\end{fulllineitems} 17168 17169 17170SHA1 with RSA, CMS signature. 17171 17172 17173\begin{savenotes}\sphinxattablestart 17174\centering 17175\begin{tabulary}{\linewidth}[t]{|T|T|} 17176\hline 17177 17178\sphinxcode{ENCTYPE\_SHA1\_RSA\_CMS} 17179& 17180\sphinxcode{0x000b} 17181\\ 17182\hline 17183\end{tabulary} 17184\par 17185\sphinxattableend\end{savenotes} 17186 17187 17188\subsubsection{ENCTYPE\_UNKNOWN} 17189\label{\detokenize{appdev/refs/macros/ENCTYPE_UNKNOWN:enctype-unknown}}\label{\detokenize{appdev/refs/macros/ENCTYPE_UNKNOWN::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_UNKNOWN:enctype-unknown-data}}\index{ENCTYPE\_UNKNOWN (built-in variable)} 17190 17191\begin{fulllineitems} 17192\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_UNKNOWN:ENCTYPE_UNKNOWN}}\pysigline{\sphinxbfcode{ENCTYPE\_UNKNOWN}} 17193\end{fulllineitems} 17194 17195 17196 17197\begin{savenotes}\sphinxattablestart 17198\centering 17199\begin{tabulary}{\linewidth}[t]{|T|T|} 17200\hline 17201 17202\sphinxcode{ENCTYPE\_UNKNOWN} 17203& 17204\sphinxcode{0x01ff} 17205\\ 17206\hline 17207\end{tabulary} 17208\par 17209\sphinxattableend\end{savenotes} 17210 17211 17212\subsubsection{KDC\_OPT\_ALLOW\_POSTDATE} 17213\label{\detokenize{appdev/refs/macros/KDC_OPT_ALLOW_POSTDATE:kdc-opt-allow-postdate}}\label{\detokenize{appdev/refs/macros/KDC_OPT_ALLOW_POSTDATE:kdc-opt-allow-postdate-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_ALLOW_POSTDATE::doc}}\index{KDC\_OPT\_ALLOW\_POSTDATE (built-in variable)} 17214 17215\begin{fulllineitems} 17216\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_ALLOW_POSTDATE:KDC_OPT_ALLOW_POSTDATE}}\pysigline{\sphinxbfcode{KDC\_OPT\_ALLOW\_POSTDATE}} 17217\end{fulllineitems} 17218 17219 17220 17221\begin{savenotes}\sphinxattablestart 17222\centering 17223\begin{tabulary}{\linewidth}[t]{|T|T|} 17224\hline 17225 17226\sphinxcode{KDC\_OPT\_ALLOW\_POSTDATE} 17227& 17228\sphinxcode{0x04000000} 17229\\ 17230\hline 17231\end{tabulary} 17232\par 17233\sphinxattableend\end{savenotes} 17234 17235 17236\subsubsection{KDC\_OPT\_CANONICALIZE} 17237\label{\detokenize{appdev/refs/macros/KDC_OPT_CANONICALIZE:kdc-opt-canonicalize}}\label{\detokenize{appdev/refs/macros/KDC_OPT_CANONICALIZE:kdc-opt-canonicalize-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_CANONICALIZE::doc}}\index{KDC\_OPT\_CANONICALIZE (built-in variable)} 17238 17239\begin{fulllineitems} 17240\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_CANONICALIZE:KDC_OPT_CANONICALIZE}}\pysigline{\sphinxbfcode{KDC\_OPT\_CANONICALIZE}} 17241\end{fulllineitems} 17242 17243 17244 17245\begin{savenotes}\sphinxattablestart 17246\centering 17247\begin{tabulary}{\linewidth}[t]{|T|T|} 17248\hline 17249 17250\sphinxcode{KDC\_OPT\_CANONICALIZE} 17251& 17252\sphinxcode{0x00010000} 17253\\ 17254\hline 17255\end{tabulary} 17256\par 17257\sphinxattableend\end{savenotes} 17258 17259 17260\subsubsection{KDC\_OPT\_CNAME\_IN\_ADDL\_TKT} 17261\label{\detokenize{appdev/refs/macros/KDC_OPT_CNAME_IN_ADDL_TKT:kdc-opt-cname-in-addl-tkt-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_CNAME_IN_ADDL_TKT:kdc-opt-cname-in-addl-tkt}}\label{\detokenize{appdev/refs/macros/KDC_OPT_CNAME_IN_ADDL_TKT::doc}}\index{KDC\_OPT\_CNAME\_IN\_ADDL\_TKT (built-in variable)} 17262 17263\begin{fulllineitems} 17264\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_CNAME_IN_ADDL_TKT:KDC_OPT_CNAME_IN_ADDL_TKT}}\pysigline{\sphinxbfcode{KDC\_OPT\_CNAME\_IN\_ADDL\_TKT}} 17265\end{fulllineitems} 17266 17267 17268 17269\begin{savenotes}\sphinxattablestart 17270\centering 17271\begin{tabulary}{\linewidth}[t]{|T|T|} 17272\hline 17273 17274\sphinxcode{KDC\_OPT\_CNAME\_IN\_ADDL\_TKT} 17275& 17276\sphinxcode{0x00020000} 17277\\ 17278\hline 17279\end{tabulary} 17280\par 17281\sphinxattableend\end{savenotes} 17282 17283 17284\subsubsection{KDC\_OPT\_DISABLE\_TRANSITED\_CHECK} 17285\label{\detokenize{appdev/refs/macros/KDC_OPT_DISABLE_TRANSITED_CHECK:kdc-opt-disable-transited-check}}\label{\detokenize{appdev/refs/macros/KDC_OPT_DISABLE_TRANSITED_CHECK::doc}}\label{\detokenize{appdev/refs/macros/KDC_OPT_DISABLE_TRANSITED_CHECK:kdc-opt-disable-transited-check-data}}\index{KDC\_OPT\_DISABLE\_TRANSITED\_CHECK (built-in variable)} 17286 17287\begin{fulllineitems} 17288\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_DISABLE_TRANSITED_CHECK:KDC_OPT_DISABLE_TRANSITED_CHECK}}\pysigline{\sphinxbfcode{KDC\_OPT\_DISABLE\_TRANSITED\_CHECK}} 17289\end{fulllineitems} 17290 17291 17292 17293\begin{savenotes}\sphinxattablestart 17294\centering 17295\begin{tabulary}{\linewidth}[t]{|T|T|} 17296\hline 17297 17298\sphinxcode{KDC\_OPT\_DISABLE\_TRANSITED\_CHECK} 17299& 17300\sphinxcode{0x00000020} 17301\\ 17302\hline 17303\end{tabulary} 17304\par 17305\sphinxattableend\end{savenotes} 17306 17307 17308\subsubsection{KDC\_OPT\_ENC\_TKT\_IN\_SKEY} 17309\label{\detokenize{appdev/refs/macros/KDC_OPT_ENC_TKT_IN_SKEY:kdc-opt-enc-tkt-in-skey}}\label{\detokenize{appdev/refs/macros/KDC_OPT_ENC_TKT_IN_SKEY::doc}}\label{\detokenize{appdev/refs/macros/KDC_OPT_ENC_TKT_IN_SKEY:kdc-opt-enc-tkt-in-skey-data}}\index{KDC\_OPT\_ENC\_TKT\_IN\_SKEY (built-in variable)} 17310 17311\begin{fulllineitems} 17312\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_ENC_TKT_IN_SKEY:KDC_OPT_ENC_TKT_IN_SKEY}}\pysigline{\sphinxbfcode{KDC\_OPT\_ENC\_TKT\_IN\_SKEY}} 17313\end{fulllineitems} 17314 17315 17316 17317\begin{savenotes}\sphinxattablestart 17318\centering 17319\begin{tabulary}{\linewidth}[t]{|T|T|} 17320\hline 17321 17322\sphinxcode{KDC\_OPT\_ENC\_TKT\_IN\_SKEY} 17323& 17324\sphinxcode{0x00000008} 17325\\ 17326\hline 17327\end{tabulary} 17328\par 17329\sphinxattableend\end{savenotes} 17330 17331 17332\subsubsection{KDC\_OPT\_FORWARDABLE} 17333\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDABLE:kdc-opt-forwardable-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDABLE::doc}}\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDABLE:kdc-opt-forwardable}}\index{KDC\_OPT\_FORWARDABLE (built-in variable)} 17334 17335\begin{fulllineitems} 17336\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDABLE:KDC_OPT_FORWARDABLE}}\pysigline{\sphinxbfcode{KDC\_OPT\_FORWARDABLE}} 17337\end{fulllineitems} 17338 17339 17340 17341\begin{savenotes}\sphinxattablestart 17342\centering 17343\begin{tabulary}{\linewidth}[t]{|T|T|} 17344\hline 17345 17346\sphinxcode{KDC\_OPT\_FORWARDABLE} 17347& 17348\sphinxcode{0x40000000} 17349\\ 17350\hline 17351\end{tabulary} 17352\par 17353\sphinxattableend\end{savenotes} 17354 17355 17356\subsubsection{KDC\_OPT\_FORWARDED} 17357\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDED::doc}}\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDED:kdc-opt-forwarded}}\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDED:kdc-opt-forwarded-data}}\index{KDC\_OPT\_FORWARDED (built-in variable)} 17358 17359\begin{fulllineitems} 17360\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDED:KDC_OPT_FORWARDED}}\pysigline{\sphinxbfcode{KDC\_OPT\_FORWARDED}} 17361\end{fulllineitems} 17362 17363 17364 17365\begin{savenotes}\sphinxattablestart 17366\centering 17367\begin{tabulary}{\linewidth}[t]{|T|T|} 17368\hline 17369 17370\sphinxcode{KDC\_OPT\_FORWARDED} 17371& 17372\sphinxcode{0x20000000} 17373\\ 17374\hline 17375\end{tabulary} 17376\par 17377\sphinxattableend\end{savenotes} 17378 17379 17380\subsubsection{KDC\_OPT\_POSTDATED} 17381\label{\detokenize{appdev/refs/macros/KDC_OPT_POSTDATED:kdc-opt-postdated-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_POSTDATED:kdc-opt-postdated}}\label{\detokenize{appdev/refs/macros/KDC_OPT_POSTDATED::doc}}\index{KDC\_OPT\_POSTDATED (built-in variable)} 17382 17383\begin{fulllineitems} 17384\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_POSTDATED:KDC_OPT_POSTDATED}}\pysigline{\sphinxbfcode{KDC\_OPT\_POSTDATED}} 17385\end{fulllineitems} 17386 17387 17388 17389\begin{savenotes}\sphinxattablestart 17390\centering 17391\begin{tabulary}{\linewidth}[t]{|T|T|} 17392\hline 17393 17394\sphinxcode{KDC\_OPT\_POSTDATED} 17395& 17396\sphinxcode{0x02000000} 17397\\ 17398\hline 17399\end{tabulary} 17400\par 17401\sphinxattableend\end{savenotes} 17402 17403 17404\subsubsection{KDC\_OPT\_PROXIABLE} 17405\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXIABLE:kdc-opt-proxiable-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXIABLE::doc}}\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXIABLE:kdc-opt-proxiable}}\index{KDC\_OPT\_PROXIABLE (built-in variable)} 17406 17407\begin{fulllineitems} 17408\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXIABLE:KDC_OPT_PROXIABLE}}\pysigline{\sphinxbfcode{KDC\_OPT\_PROXIABLE}} 17409\end{fulllineitems} 17410 17411 17412 17413\begin{savenotes}\sphinxattablestart 17414\centering 17415\begin{tabulary}{\linewidth}[t]{|T|T|} 17416\hline 17417 17418\sphinxcode{KDC\_OPT\_PROXIABLE} 17419& 17420\sphinxcode{0x10000000} 17421\\ 17422\hline 17423\end{tabulary} 17424\par 17425\sphinxattableend\end{savenotes} 17426 17427 17428\subsubsection{KDC\_OPT\_PROXY} 17429\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXY::doc}}\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXY:kdc-opt-proxy}}\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXY:kdc-opt-proxy-data}}\index{KDC\_OPT\_PROXY (built-in variable)} 17430 17431\begin{fulllineitems} 17432\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXY:KDC_OPT_PROXY}}\pysigline{\sphinxbfcode{KDC\_OPT\_PROXY}} 17433\end{fulllineitems} 17434 17435 17436 17437\begin{savenotes}\sphinxattablestart 17438\centering 17439\begin{tabulary}{\linewidth}[t]{|T|T|} 17440\hline 17441 17442\sphinxcode{KDC\_OPT\_PROXY} 17443& 17444\sphinxcode{0x08000000} 17445\\ 17446\hline 17447\end{tabulary} 17448\par 17449\sphinxattableend\end{savenotes} 17450 17451 17452\subsubsection{KDC\_OPT\_RENEW} 17453\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEW::doc}}\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEW:kdc-opt-renew}}\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEW:kdc-opt-renew-data}}\index{KDC\_OPT\_RENEW (built-in variable)} 17454 17455\begin{fulllineitems} 17456\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEW:KDC_OPT_RENEW}}\pysigline{\sphinxbfcode{KDC\_OPT\_RENEW}} 17457\end{fulllineitems} 17458 17459 17460 17461\begin{savenotes}\sphinxattablestart 17462\centering 17463\begin{tabulary}{\linewidth}[t]{|T|T|} 17464\hline 17465 17466\sphinxcode{KDC\_OPT\_RENEW} 17467& 17468\sphinxcode{0x00000002} 17469\\ 17470\hline 17471\end{tabulary} 17472\par 17473\sphinxattableend\end{savenotes} 17474 17475 17476\subsubsection{KDC\_OPT\_RENEWABLE} 17477\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE:kdc-opt-renewable}}\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE:kdc-opt-renewable-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE::doc}}\index{KDC\_OPT\_RENEWABLE (built-in variable)} 17478 17479\begin{fulllineitems} 17480\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE:KDC_OPT_RENEWABLE}}\pysigline{\sphinxbfcode{KDC\_OPT\_RENEWABLE}} 17481\end{fulllineitems} 17482 17483 17484 17485\begin{savenotes}\sphinxattablestart 17486\centering 17487\begin{tabulary}{\linewidth}[t]{|T|T|} 17488\hline 17489 17490\sphinxcode{KDC\_OPT\_RENEWABLE} 17491& 17492\sphinxcode{0x00800000} 17493\\ 17494\hline 17495\end{tabulary} 17496\par 17497\sphinxattableend\end{savenotes} 17498 17499 17500\subsubsection{KDC\_OPT\_RENEWABLE\_OK} 17501\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE_OK::doc}}\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE_OK:kdc-opt-renewable-ok-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE_OK:kdc-opt-renewable-ok}}\index{KDC\_OPT\_RENEWABLE\_OK (built-in variable)} 17502 17503\begin{fulllineitems} 17504\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE_OK:KDC_OPT_RENEWABLE_OK}}\pysigline{\sphinxbfcode{KDC\_OPT\_RENEWABLE\_OK}} 17505\end{fulllineitems} 17506 17507 17508 17509\begin{savenotes}\sphinxattablestart 17510\centering 17511\begin{tabulary}{\linewidth}[t]{|T|T|} 17512\hline 17513 17514\sphinxcode{KDC\_OPT\_RENEWABLE\_OK} 17515& 17516\sphinxcode{0x00000010} 17517\\ 17518\hline 17519\end{tabulary} 17520\par 17521\sphinxattableend\end{savenotes} 17522 17523 17524\subsubsection{KDC\_OPT\_REQUEST\_ANONYMOUS} 17525\label{\detokenize{appdev/refs/macros/KDC_OPT_REQUEST_ANONYMOUS:kdc-opt-request-anonymous}}\label{\detokenize{appdev/refs/macros/KDC_OPT_REQUEST_ANONYMOUS:kdc-opt-request-anonymous-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_REQUEST_ANONYMOUS::doc}}\index{KDC\_OPT\_REQUEST\_ANONYMOUS (built-in variable)} 17526 17527\begin{fulllineitems} 17528\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_REQUEST_ANONYMOUS:KDC_OPT_REQUEST_ANONYMOUS}}\pysigline{\sphinxbfcode{KDC\_OPT\_REQUEST\_ANONYMOUS}} 17529\end{fulllineitems} 17530 17531 17532 17533\begin{savenotes}\sphinxattablestart 17534\centering 17535\begin{tabulary}{\linewidth}[t]{|T|T|} 17536\hline 17537 17538\sphinxcode{KDC\_OPT\_REQUEST\_ANONYMOUS} 17539& 17540\sphinxcode{0x00008000} 17541\\ 17542\hline 17543\end{tabulary} 17544\par 17545\sphinxattableend\end{savenotes} 17546 17547 17548\subsubsection{KDC\_OPT\_VALIDATE} 17549\label{\detokenize{appdev/refs/macros/KDC_OPT_VALIDATE:kdc-opt-validate-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_VALIDATE:kdc-opt-validate}}\label{\detokenize{appdev/refs/macros/KDC_OPT_VALIDATE::doc}}\index{KDC\_OPT\_VALIDATE (built-in variable)} 17550 17551\begin{fulllineitems} 17552\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_VALIDATE:KDC_OPT_VALIDATE}}\pysigline{\sphinxbfcode{KDC\_OPT\_VALIDATE}} 17553\end{fulllineitems} 17554 17555 17556 17557\begin{savenotes}\sphinxattablestart 17558\centering 17559\begin{tabulary}{\linewidth}[t]{|T|T|} 17560\hline 17561 17562\sphinxcode{KDC\_OPT\_VALIDATE} 17563& 17564\sphinxcode{0x00000001} 17565\\ 17566\hline 17567\end{tabulary} 17568\par 17569\sphinxattableend\end{savenotes} 17570 17571 17572\subsubsection{KDC\_TKT\_COMMON\_MASK} 17573\label{\detokenize{appdev/refs/macros/KDC_TKT_COMMON_MASK:kdc-tkt-common-mask-data}}\label{\detokenize{appdev/refs/macros/KDC_TKT_COMMON_MASK::doc}}\label{\detokenize{appdev/refs/macros/KDC_TKT_COMMON_MASK:kdc-tkt-common-mask}}\index{KDC\_TKT\_COMMON\_MASK (built-in variable)} 17574 17575\begin{fulllineitems} 17576\phantomsection\label{\detokenize{appdev/refs/macros/KDC_TKT_COMMON_MASK:KDC_TKT_COMMON_MASK}}\pysigline{\sphinxbfcode{KDC\_TKT\_COMMON\_MASK}} 17577\end{fulllineitems} 17578 17579 17580 17581\begin{savenotes}\sphinxattablestart 17582\centering 17583\begin{tabulary}{\linewidth}[t]{|T|T|} 17584\hline 17585 17586\sphinxcode{KDC\_TKT\_COMMON\_MASK} 17587& 17588\sphinxcode{0x54800000} 17589\\ 17590\hline 17591\end{tabulary} 17592\par 17593\sphinxattableend\end{savenotes} 17594 17595 17596\subsubsection{KRB5\_ALTAUTH\_ATT\_CHALLENGE\_RESPONSE} 17597\label{\detokenize{appdev/refs/macros/KRB5_ALTAUTH_ATT_CHALLENGE_RESPONSE:krb5-altauth-att-challenge-response}}\label{\detokenize{appdev/refs/macros/KRB5_ALTAUTH_ATT_CHALLENGE_RESPONSE:krb5-altauth-att-challenge-response-data}}\label{\detokenize{appdev/refs/macros/KRB5_ALTAUTH_ATT_CHALLENGE_RESPONSE::doc}}\index{KRB5\_ALTAUTH\_ATT\_CHALLENGE\_RESPONSE (built-in variable)} 17598 17599\begin{fulllineitems} 17600\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_ALTAUTH_ATT_CHALLENGE_RESPONSE:KRB5_ALTAUTH_ATT_CHALLENGE_RESPONSE}}\pysigline{\sphinxbfcode{KRB5\_ALTAUTH\_ATT\_CHALLENGE\_RESPONSE}} 17601\end{fulllineitems} 17602 17603 17604alternate authentication types 17605 17606 17607\begin{savenotes}\sphinxattablestart 17608\centering 17609\begin{tabulary}{\linewidth}[t]{|T|T|} 17610\hline 17611 17612\sphinxcode{KRB5\_ALTAUTH\_ATT\_CHALLENGE\_RESPONSE} 17613& 17614\sphinxcode{64} 17615\\ 17616\hline 17617\end{tabulary} 17618\par 17619\sphinxattableend\end{savenotes} 17620 17621 17622\subsubsection{KRB5\_ANONYMOUS\_PRINCSTR} 17623\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_PRINCSTR:krb5-anonymous-princstr}}\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_PRINCSTR:krb5-anonymous-princstr-data}}\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_PRINCSTR::doc}}\index{KRB5\_ANONYMOUS\_PRINCSTR (built-in variable)} 17624 17625\begin{fulllineitems} 17626\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_PRINCSTR:KRB5_ANONYMOUS_PRINCSTR}}\pysigline{\sphinxbfcode{KRB5\_ANONYMOUS\_PRINCSTR}} 17627\end{fulllineitems} 17628 17629 17630Anonymous principal name. 17631 17632 17633\begin{savenotes}\sphinxattablestart 17634\centering 17635\begin{tabulary}{\linewidth}[t]{|T|T|} 17636\hline 17637 17638\sphinxcode{KRB5\_ANONYMOUS\_PRINCSTR} 17639& 17640\sphinxcode{"ANONYMOUS"} 17641\\ 17642\hline 17643\end{tabulary} 17644\par 17645\sphinxattableend\end{savenotes} 17646 17647 17648\subsubsection{KRB5\_ANONYMOUS\_REALMSTR} 17649\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR:krb5-anonymous-realmstr-data}}\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR:krb5-anonymous-realmstr}}\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR::doc}}\index{KRB5\_ANONYMOUS\_REALMSTR (built-in variable)} 17650 17651\begin{fulllineitems} 17652\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR:KRB5_ANONYMOUS_REALMSTR}}\pysigline{\sphinxbfcode{KRB5\_ANONYMOUS\_REALMSTR}} 17653\end{fulllineitems} 17654 17655 17656Anonymous realm. 17657 17658 17659\begin{savenotes}\sphinxattablestart 17660\centering 17661\begin{tabulary}{\linewidth}[t]{|T|T|} 17662\hline 17663 17664\sphinxcode{KRB5\_ANONYMOUS\_REALMSTR} 17665& 17666\sphinxcode{"WELLKNOWN:ANONYMOUS"} 17667\\ 17668\hline 17669\end{tabulary} 17670\par 17671\sphinxattableend\end{savenotes} 17672 17673 17674\subsubsection{KRB5\_AP\_REP} 17675\label{\detokenize{appdev/refs/macros/KRB5_AP_REP:krb5-ap-rep}}\label{\detokenize{appdev/refs/macros/KRB5_AP_REP::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AP_REP:krb5-ap-rep-data}}\index{KRB5\_AP\_REP (built-in variable)} 17676 17677\begin{fulllineitems} 17678\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AP_REP:KRB5_AP_REP}}\pysigline{\sphinxbfcode{KRB5\_AP\_REP}} 17679\end{fulllineitems} 17680 17681 17682Response to mutual AP request. 17683 17684 17685\begin{savenotes}\sphinxattablestart 17686\centering 17687\begin{tabulary}{\linewidth}[t]{|T|T|} 17688\hline 17689 17690\sphinxcode{KRB5\_AP\_REP} 17691& 17692\sphinxcode{((krb5\_msgtype)15)} 17693\\ 17694\hline 17695\end{tabulary} 17696\par 17697\sphinxattableend\end{savenotes} 17698 17699 17700\subsubsection{KRB5\_AP\_REQ} 17701\label{\detokenize{appdev/refs/macros/KRB5_AP_REQ:krb5-ap-req}}\label{\detokenize{appdev/refs/macros/KRB5_AP_REQ::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AP_REQ:krb5-ap-req-data}}\index{KRB5\_AP\_REQ (built-in variable)} 17702 17703\begin{fulllineitems} 17704\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AP_REQ:KRB5_AP_REQ}}\pysigline{\sphinxbfcode{KRB5\_AP\_REQ}} 17705\end{fulllineitems} 17706 17707 17708Auth req to application server. 17709 17710 17711\begin{savenotes}\sphinxattablestart 17712\centering 17713\begin{tabulary}{\linewidth}[t]{|T|T|} 17714\hline 17715 17716\sphinxcode{KRB5\_AP\_REQ} 17717& 17718\sphinxcode{((krb5\_msgtype)14)} 17719\\ 17720\hline 17721\end{tabulary} 17722\par 17723\sphinxattableend\end{savenotes} 17724 17725 17726\subsubsection{KRB5\_AS\_REP} 17727\label{\detokenize{appdev/refs/macros/KRB5_AS_REP:krb5-as-rep}}\label{\detokenize{appdev/refs/macros/KRB5_AS_REP:krb5-as-rep-data}}\label{\detokenize{appdev/refs/macros/KRB5_AS_REP::doc}}\index{KRB5\_AS\_REP (built-in variable)} 17728 17729\begin{fulllineitems} 17730\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AS_REP:KRB5_AS_REP}}\pysigline{\sphinxbfcode{KRB5\_AS\_REP}} 17731\end{fulllineitems} 17732 17733 17734Response to AS request. 17735 17736 17737\begin{savenotes}\sphinxattablestart 17738\centering 17739\begin{tabulary}{\linewidth}[t]{|T|T|} 17740\hline 17741 17742\sphinxcode{KRB5\_AS\_REP} 17743& 17744\sphinxcode{((krb5\_msgtype)11)} 17745\\ 17746\hline 17747\end{tabulary} 17748\par 17749\sphinxattableend\end{savenotes} 17750 17751 17752\subsubsection{KRB5\_AS\_REQ} 17753\label{\detokenize{appdev/refs/macros/KRB5_AS_REQ:krb5-as-req}}\label{\detokenize{appdev/refs/macros/KRB5_AS_REQ:krb5-as-req-data}}\label{\detokenize{appdev/refs/macros/KRB5_AS_REQ::doc}}\index{KRB5\_AS\_REQ (built-in variable)} 17754 17755\begin{fulllineitems} 17756\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AS_REQ:KRB5_AS_REQ}}\pysigline{\sphinxbfcode{KRB5\_AS\_REQ}} 17757\end{fulllineitems} 17758 17759 17760Initial authentication request. 17761 17762 17763\begin{savenotes}\sphinxattablestart 17764\centering 17765\begin{tabulary}{\linewidth}[t]{|T|T|} 17766\hline 17767 17768\sphinxcode{KRB5\_AS\_REQ} 17769& 17770\sphinxcode{((krb5\_msgtype)10)} 17771\\ 17772\hline 17773\end{tabulary} 17774\par 17775\sphinxattableend\end{savenotes} 17776 17777 17778\subsubsection{KRB5\_AUTHDATA\_AND\_OR} 17779\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AND_OR::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AND_OR:krb5-authdata-and-or-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AND_OR:krb5-authdata-and-or}}\index{KRB5\_AUTHDATA\_AND\_OR (built-in variable)} 17780 17781\begin{fulllineitems} 17782\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AND_OR:KRB5_AUTHDATA_AND_OR}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_AND\_OR}} 17783\end{fulllineitems} 17784 17785 17786 17787\begin{savenotes}\sphinxattablestart 17788\centering 17789\begin{tabulary}{\linewidth}[t]{|T|T|} 17790\hline 17791 17792\sphinxcode{KRB5\_AUTHDATA\_AND\_OR} 17793& 17794\sphinxcode{5} 17795\\ 17796\hline 17797\end{tabulary} 17798\par 17799\sphinxattableend\end{savenotes} 17800 17801 17802\subsubsection{KRB5\_AUTHDATA\_AP\_OPTIONS} 17803\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AP_OPTIONS:krb5-authdata-ap-options-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AP_OPTIONS::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AP_OPTIONS:krb5-authdata-ap-options}}\index{KRB5\_AUTHDATA\_AP\_OPTIONS (built-in variable)} 17804 17805\begin{fulllineitems} 17806\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AP_OPTIONS:KRB5_AUTHDATA_AP_OPTIONS}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_AP\_OPTIONS}} 17807\end{fulllineitems} 17808 17809 17810 17811\begin{savenotes}\sphinxattablestart 17812\centering 17813\begin{tabulary}{\linewidth}[t]{|T|T|} 17814\hline 17815 17816\sphinxcode{KRB5\_AUTHDATA\_AP\_OPTIONS} 17817& 17818\sphinxcode{143} 17819\\ 17820\hline 17821\end{tabulary} 17822\par 17823\sphinxattableend\end{savenotes} 17824 17825 17826\subsubsection{KRB5\_AUTHDATA\_AUTH\_INDICATOR} 17827\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AUTH_INDICATOR:krb5-authdata-auth-indicator}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AUTH_INDICATOR::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AUTH_INDICATOR:krb5-authdata-auth-indicator-data}}\index{KRB5\_AUTHDATA\_AUTH\_INDICATOR (built-in variable)} 17828 17829\begin{fulllineitems} 17830\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AUTH_INDICATOR:KRB5_AUTHDATA_AUTH_INDICATOR}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_AUTH\_INDICATOR}} 17831\end{fulllineitems} 17832 17833 17834 17835\begin{savenotes}\sphinxattablestart 17836\centering 17837\begin{tabulary}{\linewidth}[t]{|T|T|} 17838\hline 17839 17840\sphinxcode{KRB5\_AUTHDATA\_AUTH\_INDICATOR} 17841& 17842\sphinxcode{97} 17843\\ 17844\hline 17845\end{tabulary} 17846\par 17847\sphinxattableend\end{savenotes} 17848 17849 17850\subsubsection{KRB5\_AUTHDATA\_CAMMAC} 17851\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_CAMMAC:krb5-authdata-cammac}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_CAMMAC::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_CAMMAC:krb5-authdata-cammac-data}}\index{KRB5\_AUTHDATA\_CAMMAC (built-in variable)} 17852 17853\begin{fulllineitems} 17854\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_CAMMAC:KRB5_AUTHDATA_CAMMAC}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_CAMMAC}} 17855\end{fulllineitems} 17856 17857 17858 17859\begin{savenotes}\sphinxattablestart 17860\centering 17861\begin{tabulary}{\linewidth}[t]{|T|T|} 17862\hline 17863 17864\sphinxcode{KRB5\_AUTHDATA\_CAMMAC} 17865& 17866\sphinxcode{96} 17867\\ 17868\hline 17869\end{tabulary} 17870\par 17871\sphinxattableend\end{savenotes} 17872 17873 17874\subsubsection{KRB5\_AUTHDATA\_ETYPE\_NEGOTIATION} 17875\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_ETYPE_NEGOTIATION:krb5-authdata-etype-negotiation}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_ETYPE_NEGOTIATION::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_ETYPE_NEGOTIATION:krb5-authdata-etype-negotiation-data}}\index{KRB5\_AUTHDATA\_ETYPE\_NEGOTIATION (built-in variable)} 17876 17877\begin{fulllineitems} 17878\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_ETYPE_NEGOTIATION:KRB5_AUTHDATA_ETYPE_NEGOTIATION}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_ETYPE\_NEGOTIATION}} 17879\end{fulllineitems} 17880 17881 17882RFC 4537. 17883 17884 17885\begin{savenotes}\sphinxattablestart 17886\centering 17887\begin{tabulary}{\linewidth}[t]{|T|T|} 17888\hline 17889 17890\sphinxcode{KRB5\_AUTHDATA\_ETYPE\_NEGOTIATION} 17891& 17892\sphinxcode{129} 17893\\ 17894\hline 17895\end{tabulary} 17896\par 17897\sphinxattableend\end{savenotes} 17898 17899 17900\subsubsection{KRB5\_AUTHDATA\_FX\_ARMOR} 17901\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_FX_ARMOR::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_FX_ARMOR:krb5-authdata-fx-armor}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_FX_ARMOR:krb5-authdata-fx-armor-data}}\index{KRB5\_AUTHDATA\_FX\_ARMOR (built-in variable)} 17902 17903\begin{fulllineitems} 17904\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_FX_ARMOR:KRB5_AUTHDATA_FX_ARMOR}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_FX\_ARMOR}} 17905\end{fulllineitems} 17906 17907 17908 17909\begin{savenotes}\sphinxattablestart 17910\centering 17911\begin{tabulary}{\linewidth}[t]{|T|T|} 17912\hline 17913 17914\sphinxcode{KRB5\_AUTHDATA\_FX\_ARMOR} 17915& 17916\sphinxcode{71} 17917\\ 17918\hline 17919\end{tabulary} 17920\par 17921\sphinxattableend\end{savenotes} 17922 17923 17924\subsubsection{KRB5\_AUTHDATA\_IF\_RELEVANT} 17925\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_IF_RELEVANT:krb5-authdata-if-relevant-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_IF_RELEVANT:krb5-authdata-if-relevant}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_IF_RELEVANT::doc}}\index{KRB5\_AUTHDATA\_IF\_RELEVANT (built-in variable)} 17926 17927\begin{fulllineitems} 17928\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_IF_RELEVANT:KRB5_AUTHDATA_IF_RELEVANT}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_IF\_RELEVANT}} 17929\end{fulllineitems} 17930 17931 17932 17933\begin{savenotes}\sphinxattablestart 17934\centering 17935\begin{tabulary}{\linewidth}[t]{|T|T|} 17936\hline 17937 17938\sphinxcode{KRB5\_AUTHDATA\_IF\_RELEVANT} 17939& 17940\sphinxcode{1} 17941\\ 17942\hline 17943\end{tabulary} 17944\par 17945\sphinxattableend\end{savenotes} 17946 17947 17948\subsubsection{KRB5\_AUTHDATA\_INITIAL\_VERIFIED\_CAS} 17949\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_INITIAL_VERIFIED_CAS:krb5-authdata-initial-verified-cas-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_INITIAL_VERIFIED_CAS:krb5-authdata-initial-verified-cas}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_INITIAL_VERIFIED_CAS::doc}}\index{KRB5\_AUTHDATA\_INITIAL\_VERIFIED\_CAS (built-in variable)} 17950 17951\begin{fulllineitems} 17952\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_INITIAL_VERIFIED_CAS:KRB5_AUTHDATA_INITIAL_VERIFIED_CAS}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_INITIAL\_VERIFIED\_CAS}} 17953\end{fulllineitems} 17954 17955 17956 17957\begin{savenotes}\sphinxattablestart 17958\centering 17959\begin{tabulary}{\linewidth}[t]{|T|T|} 17960\hline 17961 17962\sphinxcode{KRB5\_AUTHDATA\_INITIAL\_VERIFIED\_CAS} 17963& 17964\sphinxcode{9} 17965\\ 17966\hline 17967\end{tabulary} 17968\par 17969\sphinxattableend\end{savenotes} 17970 17971 17972\subsubsection{KRB5\_AUTHDATA\_KDC\_ISSUED} 17973\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_KDC_ISSUED:krb5-authdata-kdc-issued-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_KDC_ISSUED::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_KDC_ISSUED:krb5-authdata-kdc-issued}}\index{KRB5\_AUTHDATA\_KDC\_ISSUED (built-in variable)} 17974 17975\begin{fulllineitems} 17976\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_KDC_ISSUED:KRB5_AUTHDATA_KDC_ISSUED}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_KDC\_ISSUED}} 17977\end{fulllineitems} 17978 17979 17980 17981\begin{savenotes}\sphinxattablestart 17982\centering 17983\begin{tabulary}{\linewidth}[t]{|T|T|} 17984\hline 17985 17986\sphinxcode{KRB5\_AUTHDATA\_KDC\_ISSUED} 17987& 17988\sphinxcode{4} 17989\\ 17990\hline 17991\end{tabulary} 17992\par 17993\sphinxattableend\end{savenotes} 17994 17995 17996\subsubsection{KRB5\_AUTHDATA\_MANDATORY\_FOR\_KDC} 17997\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_MANDATORY_FOR_KDC:krb5-authdata-mandatory-for-kdc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_MANDATORY_FOR_KDC::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_MANDATORY_FOR_KDC:krb5-authdata-mandatory-for-kdc-data}}\index{KRB5\_AUTHDATA\_MANDATORY\_FOR\_KDC (built-in variable)} 17998 17999\begin{fulllineitems} 18000\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_MANDATORY_FOR_KDC:KRB5_AUTHDATA_MANDATORY_FOR_KDC}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_MANDATORY\_FOR\_KDC}} 18001\end{fulllineitems} 18002 18003 18004 18005\begin{savenotes}\sphinxattablestart 18006\centering 18007\begin{tabulary}{\linewidth}[t]{|T|T|} 18008\hline 18009 18010\sphinxcode{KRB5\_AUTHDATA\_MANDATORY\_FOR\_KDC} 18011& 18012\sphinxcode{8} 18013\\ 18014\hline 18015\end{tabulary} 18016\par 18017\sphinxattableend\end{savenotes} 18018 18019 18020\subsubsection{KRB5\_AUTHDATA\_OSF\_DCE} 18021\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_OSF_DCE:krb5-authdata-osf-dce-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_OSF_DCE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_OSF_DCE:krb5-authdata-osf-dce}}\index{KRB5\_AUTHDATA\_OSF\_DCE (built-in variable)} 18022 18023\begin{fulllineitems} 18024\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_OSF_DCE:KRB5_AUTHDATA_OSF_DCE}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_OSF\_DCE}} 18025\end{fulllineitems} 18026 18027 18028 18029\begin{savenotes}\sphinxattablestart 18030\centering 18031\begin{tabulary}{\linewidth}[t]{|T|T|} 18032\hline 18033 18034\sphinxcode{KRB5\_AUTHDATA\_OSF\_DCE} 18035& 18036\sphinxcode{64} 18037\\ 18038\hline 18039\end{tabulary} 18040\par 18041\sphinxattableend\end{savenotes} 18042 18043 18044\subsubsection{KRB5\_AUTHDATA\_SESAME} 18045\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SESAME:krb5-authdata-sesame}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SESAME::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SESAME:krb5-authdata-sesame-data}}\index{KRB5\_AUTHDATA\_SESAME (built-in variable)} 18046 18047\begin{fulllineitems} 18048\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SESAME:KRB5_AUTHDATA_SESAME}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_SESAME}} 18049\end{fulllineitems} 18050 18051 18052 18053\begin{savenotes}\sphinxattablestart 18054\centering 18055\begin{tabulary}{\linewidth}[t]{|T|T|} 18056\hline 18057 18058\sphinxcode{KRB5\_AUTHDATA\_SESAME} 18059& 18060\sphinxcode{65} 18061\\ 18062\hline 18063\end{tabulary} 18064\par 18065\sphinxattableend\end{savenotes} 18066 18067 18068\subsubsection{KRB5\_AUTHDATA\_SIGNTICKET} 18069\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SIGNTICKET:krb5-authdata-signticket-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SIGNTICKET:krb5-authdata-signticket}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SIGNTICKET::doc}}\index{KRB5\_AUTHDATA\_SIGNTICKET (built-in variable)} 18070 18071\begin{fulllineitems} 18072\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SIGNTICKET:KRB5_AUTHDATA_SIGNTICKET}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_SIGNTICKET}} 18073\end{fulllineitems} 18074 18075 18076formerly 142 in krb5 1.8 18077 18078 18079\begin{savenotes}\sphinxattablestart 18080\centering 18081\begin{tabulary}{\linewidth}[t]{|T|T|} 18082\hline 18083 18084\sphinxcode{KRB5\_AUTHDATA\_SIGNTICKET} 18085& 18086\sphinxcode{512} 18087\\ 18088\hline 18089\end{tabulary} 18090\par 18091\sphinxattableend\end{savenotes} 18092 18093 18094\subsubsection{KRB5\_AUTHDATA\_WIN2K\_PAC} 18095\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_WIN2K_PAC:krb5-authdata-win2k-pac-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_WIN2K_PAC::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_WIN2K_PAC:krb5-authdata-win2k-pac}}\index{KRB5\_AUTHDATA\_WIN2K\_PAC (built-in variable)} 18096 18097\begin{fulllineitems} 18098\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_WIN2K_PAC:KRB5_AUTHDATA_WIN2K_PAC}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_WIN2K\_PAC}} 18099\end{fulllineitems} 18100 18101 18102 18103\begin{savenotes}\sphinxattablestart 18104\centering 18105\begin{tabulary}{\linewidth}[t]{|T|T|} 18106\hline 18107 18108\sphinxcode{KRB5\_AUTHDATA\_WIN2K\_PAC} 18109& 18110\sphinxcode{128} 18111\\ 18112\hline 18113\end{tabulary} 18114\par 18115\sphinxattableend\end{savenotes} 18116 18117 18118\subsubsection{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE} 18119\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:krb5-auth-context-do-sequence-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:krb5-auth-context-do-sequence}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE::doc}}\index{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE (built-in variable)} 18120 18121\begin{fulllineitems} 18122\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}} 18123\end{fulllineitems} 18124 18125 18126Prevent replays with sequence numbers. 18127 18128 18129\begin{savenotes}\sphinxattablestart 18130\centering 18131\begin{tabulary}{\linewidth}[t]{|T|T|} 18132\hline 18133 18134\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE} 18135& 18136\sphinxcode{0x00000004} 18137\\ 18138\hline 18139\end{tabulary} 18140\par 18141\sphinxattableend\end{savenotes} 18142 18143 18144\subsubsection{KRB5\_AUTH\_CONTEXT\_DO\_TIME} 18145\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:krb5-auth-context-do-time-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:krb5-auth-context-do-time}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME::doc}}\index{KRB5\_AUTH\_CONTEXT\_DO\_TIME (built-in variable)} 18146 18147\begin{fulllineitems} 18148\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}} 18149\end{fulllineitems} 18150 18151 18152Prevent replays with timestamps and replay cache. 18153 18154 18155\begin{savenotes}\sphinxattablestart 18156\centering 18157\begin{tabulary}{\linewidth}[t]{|T|T|} 18158\hline 18159 18160\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME} 18161& 18162\sphinxcode{0x00000001} 18163\\ 18164\hline 18165\end{tabulary} 18166\par 18167\sphinxattableend\end{savenotes} 18168 18169 18170\subsubsection{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_ADDR} 18171\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR:krb5-auth-context-generate-local-addr}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR:krb5-auth-context-generate-local-addr-data}}\index{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_ADDR (built-in variable)} 18172 18173\begin{fulllineitems} 18174\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR:KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_ADDR}} 18175\end{fulllineitems} 18176 18177 18178Generate the local network address. 18179 18180 18181\begin{savenotes}\sphinxattablestart 18182\centering 18183\begin{tabulary}{\linewidth}[t]{|T|T|} 18184\hline 18185 18186\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_ADDR} 18187& 18188\sphinxcode{0x00000001} 18189\\ 18190\hline 18191\end{tabulary} 18192\par 18193\sphinxattableend\end{savenotes} 18194 18195 18196\subsubsection{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_FULL\_ADDR} 18197\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR:krb5-auth-context-generate-local-full-addr}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR:krb5-auth-context-generate-local-full-addr-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR::doc}}\index{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_FULL\_ADDR (built-in variable)} 18198 18199\begin{fulllineitems} 18200\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR:KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_FULL\_ADDR}} 18201\end{fulllineitems} 18202 18203 18204Generate the local network address and the local port. 18205 18206 18207\begin{savenotes}\sphinxattablestart 18208\centering 18209\begin{tabulary}{\linewidth}[t]{|T|T|} 18210\hline 18211 18212\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_FULL\_ADDR} 18213& 18214\sphinxcode{0x00000004} 18215\\ 18216\hline 18217\end{tabulary} 18218\par 18219\sphinxattableend\end{savenotes} 18220 18221 18222\subsubsection{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_ADDR} 18223\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR:krb5-auth-context-generate-remote-addr-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR:krb5-auth-context-generate-remote-addr}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR::doc}}\index{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_ADDR (built-in variable)} 18224 18225\begin{fulllineitems} 18226\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR:KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_ADDR}} 18227\end{fulllineitems} 18228 18229 18230Generate the remote network address. 18231 18232 18233\begin{savenotes}\sphinxattablestart 18234\centering 18235\begin{tabulary}{\linewidth}[t]{|T|T|} 18236\hline 18237 18238\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_ADDR} 18239& 18240\sphinxcode{0x00000002} 18241\\ 18242\hline 18243\end{tabulary} 18244\par 18245\sphinxattableend\end{savenotes} 18246 18247 18248\subsubsection{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_FULL\_ADDR} 18249\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR:krb5-auth-context-generate-remote-full-addr}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR:krb5-auth-context-generate-remote-full-addr-data}}\index{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_FULL\_ADDR (built-in variable)} 18250 18251\begin{fulllineitems} 18252\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR:KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_FULL\_ADDR}} 18253\end{fulllineitems} 18254 18255 18256Generate the remote network address and the remote port. 18257 18258 18259\begin{savenotes}\sphinxattablestart 18260\centering 18261\begin{tabulary}{\linewidth}[t]{|T|T|} 18262\hline 18263 18264\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_FULL\_ADDR} 18265& 18266\sphinxcode{0x00000008} 18267\\ 18268\hline 18269\end{tabulary} 18270\par 18271\sphinxattableend\end{savenotes} 18272 18273 18274\subsubsection{KRB5\_AUTH\_CONTEXT\_PERMIT\_ALL} 18275\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_PERMIT_ALL:krb5-auth-context-permit-all}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_PERMIT_ALL:krb5-auth-context-permit-all-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_PERMIT_ALL::doc}}\index{KRB5\_AUTH\_CONTEXT\_PERMIT\_ALL (built-in variable)} 18276 18277\begin{fulllineitems} 18278\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_PERMIT_ALL:KRB5_AUTH_CONTEXT_PERMIT_ALL}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_PERMIT\_ALL}} 18279\end{fulllineitems} 18280 18281 18282 18283\begin{savenotes}\sphinxattablestart 18284\centering 18285\begin{tabulary}{\linewidth}[t]{|T|T|} 18286\hline 18287 18288\sphinxcode{KRB5\_AUTH\_CONTEXT\_PERMIT\_ALL} 18289& 18290\sphinxcode{0x00000010} 18291\\ 18292\hline 18293\end{tabulary} 18294\par 18295\sphinxattableend\end{savenotes} 18296 18297 18298\subsubsection{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE} 18299\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:krb5-auth-context-ret-sequence}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:krb5-auth-context-ret-sequence-data}}\index{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE (built-in variable)} 18300 18301\begin{fulllineitems} 18302\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}} 18303\end{fulllineitems} 18304 18305 18306Save sequence numbers for application. 18307 18308 18309\begin{savenotes}\sphinxattablestart 18310\centering 18311\begin{tabulary}{\linewidth}[t]{|T|T|} 18312\hline 18313 18314\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE} 18315& 18316\sphinxcode{0x00000008} 18317\\ 18318\hline 18319\end{tabulary} 18320\par 18321\sphinxattableend\end{savenotes} 18322 18323 18324\subsubsection{KRB5\_AUTH\_CONTEXT\_RET\_TIME} 18325\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:krb5-auth-context-ret-time}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:krb5-auth-context-ret-time-data}}\index{KRB5\_AUTH\_CONTEXT\_RET\_TIME (built-in variable)} 18326 18327\begin{fulllineitems} 18328\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}} 18329\end{fulllineitems} 18330 18331 18332Save timestamps for application. 18333 18334 18335\begin{savenotes}\sphinxattablestart 18336\centering 18337\begin{tabulary}{\linewidth}[t]{|T|T|} 18338\hline 18339 18340\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME} 18341& 18342\sphinxcode{0x00000002} 18343\\ 18344\hline 18345\end{tabulary} 18346\par 18347\sphinxattableend\end{savenotes} 18348 18349 18350\subsubsection{KRB5\_AUTH\_CONTEXT\_USE\_SUBKEY} 18351\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_USE_SUBKEY::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_USE_SUBKEY:krb5-auth-context-use-subkey-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_USE_SUBKEY:krb5-auth-context-use-subkey}}\index{KRB5\_AUTH\_CONTEXT\_USE\_SUBKEY (built-in variable)} 18352 18353\begin{fulllineitems} 18354\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_USE_SUBKEY:KRB5_AUTH_CONTEXT_USE_SUBKEY}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_USE\_SUBKEY}} 18355\end{fulllineitems} 18356 18357 18358 18359\begin{savenotes}\sphinxattablestart 18360\centering 18361\begin{tabulary}{\linewidth}[t]{|T|T|} 18362\hline 18363 18364\sphinxcode{KRB5\_AUTH\_CONTEXT\_USE\_SUBKEY} 18365& 18366\sphinxcode{0x00000020} 18367\\ 18368\hline 18369\end{tabulary} 18370\par 18371\sphinxattableend\end{savenotes} 18372 18373 18374\subsubsection{KRB5\_CRED} 18375\label{\detokenize{appdev/refs/macros/KRB5_CRED:krb5-cred-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRED::doc}}\label{\detokenize{appdev/refs/macros/KRB5_CRED:krb5-cred}}\index{KRB5\_CRED (built-in variable)} 18376 18377\begin{fulllineitems} 18378\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRED:KRB5_CRED}}\pysigline{\sphinxbfcode{KRB5\_CRED}} 18379\end{fulllineitems} 18380 18381 18382Cred forwarding message. 18383 18384 18385\begin{savenotes}\sphinxattablestart 18386\centering 18387\begin{tabulary}{\linewidth}[t]{|T|T|} 18388\hline 18389 18390\sphinxcode{KRB5\_CRED} 18391& 18392\sphinxcode{((krb5\_msgtype)22)} 18393\\ 18394\hline 18395\end{tabulary} 18396\par 18397\sphinxattableend\end{savenotes} 18398 18399 18400\subsubsection{KRB5\_CRYPTO\_TYPE\_CHECKSUM} 18401\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:krb5-crypto-type-checksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:krb5-crypto-type-checksum}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM::doc}}\index{KRB5\_CRYPTO\_TYPE\_CHECKSUM (built-in variable)} 18402 18403\begin{fulllineitems} 18404\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:KRB5_CRYPTO_TYPE_CHECKSUM}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_CHECKSUM}} 18405\end{fulllineitems} 18406 18407 18408{[}out{]} checksum for MIC 18409 18410 18411\begin{savenotes}\sphinxattablestart 18412\centering 18413\begin{tabulary}{\linewidth}[t]{|T|T|} 18414\hline 18415 18416\sphinxcode{KRB5\_CRYPTO\_TYPE\_CHECKSUM} 18417& 18418\sphinxcode{6} 18419\\ 18420\hline 18421\end{tabulary} 18422\par 18423\sphinxattableend\end{savenotes} 18424 18425 18426\subsubsection{KRB5\_CRYPTO\_TYPE\_DATA} 18427\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA::doc}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA:krb5-crypto-type-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA:krb5-crypto-type-data-data}}\index{KRB5\_CRYPTO\_TYPE\_DATA (built-in variable)} 18428 18429\begin{fulllineitems} 18430\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA:KRB5_CRYPTO_TYPE_DATA}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_DATA}} 18431\end{fulllineitems} 18432 18433 18434{[}in, out{]} plaintext 18435 18436 18437\begin{savenotes}\sphinxattablestart 18438\centering 18439\begin{tabulary}{\linewidth}[t]{|T|T|} 18440\hline 18441 18442\sphinxcode{KRB5\_CRYPTO\_TYPE\_DATA} 18443& 18444\sphinxcode{2} 18445\\ 18446\hline 18447\end{tabulary} 18448\par 18449\sphinxattableend\end{savenotes} 18450 18451 18452\subsubsection{KRB5\_CRYPTO\_TYPE\_EMPTY} 18453\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_EMPTY::doc}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_EMPTY:krb5-crypto-type-empty}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_EMPTY:krb5-crypto-type-empty-data}}\index{KRB5\_CRYPTO\_TYPE\_EMPTY (built-in variable)} 18454 18455\begin{fulllineitems} 18456\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_EMPTY:KRB5_CRYPTO_TYPE_EMPTY}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_EMPTY}} 18457\end{fulllineitems} 18458 18459 18460{[}in{]} ignored 18461 18462 18463\begin{savenotes}\sphinxattablestart 18464\centering 18465\begin{tabulary}{\linewidth}[t]{|T|T|} 18466\hline 18467 18468\sphinxcode{KRB5\_CRYPTO\_TYPE\_EMPTY} 18469& 18470\sphinxcode{0} 18471\\ 18472\hline 18473\end{tabulary} 18474\par 18475\sphinxattableend\end{savenotes} 18476 18477 18478\subsubsection{KRB5\_CRYPTO\_TYPE\_HEADER} 18479\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_HEADER:krb5-crypto-type-header}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_HEADER:krb5-crypto-type-header-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_HEADER::doc}}\index{KRB5\_CRYPTO\_TYPE\_HEADER (built-in variable)} 18480 18481\begin{fulllineitems} 18482\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_HEADER:KRB5_CRYPTO_TYPE_HEADER}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_HEADER}} 18483\end{fulllineitems} 18484 18485 18486{[}out{]} header 18487 18488 18489\begin{savenotes}\sphinxattablestart 18490\centering 18491\begin{tabulary}{\linewidth}[t]{|T|T|} 18492\hline 18493 18494\sphinxcode{KRB5\_CRYPTO\_TYPE\_HEADER} 18495& 18496\sphinxcode{1} 18497\\ 18498\hline 18499\end{tabulary} 18500\par 18501\sphinxattableend\end{savenotes} 18502 18503 18504\subsubsection{KRB5\_CRYPTO\_TYPE\_PADDING} 18505\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_PADDING::doc}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_PADDING:krb5-crypto-type-padding-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_PADDING:krb5-crypto-type-padding}}\index{KRB5\_CRYPTO\_TYPE\_PADDING (built-in variable)} 18506 18507\begin{fulllineitems} 18508\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_PADDING:KRB5_CRYPTO_TYPE_PADDING}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_PADDING}} 18509\end{fulllineitems} 18510 18511 18512{[}out{]} padding 18513 18514 18515\begin{savenotes}\sphinxattablestart 18516\centering 18517\begin{tabulary}{\linewidth}[t]{|T|T|} 18518\hline 18519 18520\sphinxcode{KRB5\_CRYPTO\_TYPE\_PADDING} 18521& 18522\sphinxcode{4} 18523\\ 18524\hline 18525\end{tabulary} 18526\par 18527\sphinxattableend\end{savenotes} 18528 18529 18530\subsubsection{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY} 18531\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY:krb5-crypto-type-sign-only}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY:krb5-crypto-type-sign-only-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY::doc}}\index{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY (built-in variable)} 18532 18533\begin{fulllineitems} 18534\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY:KRB5_CRYPTO_TYPE_SIGN_ONLY}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}} 18535\end{fulllineitems} 18536 18537 18538{[}in{]} associated data 18539 18540 18541\begin{savenotes}\sphinxattablestart 18542\centering 18543\begin{tabulary}{\linewidth}[t]{|T|T|} 18544\hline 18545 18546\sphinxcode{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY} 18547& 18548\sphinxcode{3} 18549\\ 18550\hline 18551\end{tabulary} 18552\par 18553\sphinxattableend\end{savenotes} 18554 18555 18556\subsubsection{KRB5\_CRYPTO\_TYPE\_STREAM} 18557\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_STREAM:krb5-crypto-type-stream-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_STREAM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_STREAM:krb5-crypto-type-stream}}\index{KRB5\_CRYPTO\_TYPE\_STREAM (built-in variable)} 18558 18559\begin{fulllineitems} 18560\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_STREAM:KRB5_CRYPTO_TYPE_STREAM}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_STREAM}} 18561\end{fulllineitems} 18562 18563 18564{[}in{]} entire message without decomposing the structure into header, data and trailer buffers 18565 18566 18567\begin{savenotes}\sphinxattablestart 18568\centering 18569\begin{tabulary}{\linewidth}[t]{|T|T|} 18570\hline 18571 18572\sphinxcode{KRB5\_CRYPTO\_TYPE\_STREAM} 18573& 18574\sphinxcode{7} 18575\\ 18576\hline 18577\end{tabulary} 18578\par 18579\sphinxattableend\end{savenotes} 18580 18581 18582\subsubsection{KRB5\_CRYPTO\_TYPE\_TRAILER} 18583\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_TRAILER:krb5-crypto-type-trailer}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_TRAILER:krb5-crypto-type-trailer-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_TRAILER::doc}}\index{KRB5\_CRYPTO\_TYPE\_TRAILER (built-in variable)} 18584 18585\begin{fulllineitems} 18586\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_TRAILER:KRB5_CRYPTO_TYPE_TRAILER}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_TRAILER}} 18587\end{fulllineitems} 18588 18589 18590{[}out{]} checksum for encrypt 18591 18592 18593\begin{savenotes}\sphinxattablestart 18594\centering 18595\begin{tabulary}{\linewidth}[t]{|T|T|} 18596\hline 18597 18598\sphinxcode{KRB5\_CRYPTO\_TYPE\_TRAILER} 18599& 18600\sphinxcode{5} 18601\\ 18602\hline 18603\end{tabulary} 18604\par 18605\sphinxattableend\end{savenotes} 18606 18607 18608\subsubsection{KRB5\_CYBERSAFE\_SECUREID} 18609\label{\detokenize{appdev/refs/macros/KRB5_CYBERSAFE_SECUREID:krb5-cybersafe-secureid}}\label{\detokenize{appdev/refs/macros/KRB5_CYBERSAFE_SECUREID::doc}}\label{\detokenize{appdev/refs/macros/KRB5_CYBERSAFE_SECUREID:krb5-cybersafe-secureid-data}}\index{KRB5\_CYBERSAFE\_SECUREID (built-in variable)} 18610 18611\begin{fulllineitems} 18612\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CYBERSAFE_SECUREID:KRB5_CYBERSAFE_SECUREID}}\pysigline{\sphinxbfcode{KRB5\_CYBERSAFE\_SECUREID}} 18613\end{fulllineitems} 18614 18615 18616Cybersafe. 18617 18618RFC 4120 18619 18620 18621\begin{savenotes}\sphinxattablestart 18622\centering 18623\begin{tabulary}{\linewidth}[t]{|T|T|} 18624\hline 18625 18626\sphinxcode{KRB5\_CYBERSAFE\_SECUREID} 18627& 18628\sphinxcode{9} 18629\\ 18630\hline 18631\end{tabulary} 18632\par 18633\sphinxattableend\end{savenotes} 18634 18635 18636\subsubsection{KRB5\_DOMAIN\_X500\_COMPRESS} 18637\label{\detokenize{appdev/refs/macros/KRB5_DOMAIN_X500_COMPRESS::doc}}\label{\detokenize{appdev/refs/macros/KRB5_DOMAIN_X500_COMPRESS:krb5-domain-x500-compress}}\label{\detokenize{appdev/refs/macros/KRB5_DOMAIN_X500_COMPRESS:krb5-domain-x500-compress-data}}\index{KRB5\_DOMAIN\_X500\_COMPRESS (built-in variable)} 18638 18639\begin{fulllineitems} 18640\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_DOMAIN_X500_COMPRESS:KRB5_DOMAIN_X500_COMPRESS}}\pysigline{\sphinxbfcode{KRB5\_DOMAIN\_X500\_COMPRESS}} 18641\end{fulllineitems} 18642 18643 18644Transited encoding types. 18645 18646 18647\begin{savenotes}\sphinxattablestart 18648\centering 18649\begin{tabulary}{\linewidth}[t]{|T|T|} 18650\hline 18651 18652\sphinxcode{KRB5\_DOMAIN\_X500\_COMPRESS} 18653& 18654\sphinxcode{1} 18655\\ 18656\hline 18657\end{tabulary} 18658\par 18659\sphinxattableend\end{savenotes} 18660 18661 18662\subsubsection{KRB5\_ENCPADATA\_REQ\_ENC\_PA\_REP} 18663\label{\detokenize{appdev/refs/macros/KRB5_ENCPADATA_REQ_ENC_PA_REP:krb5-encpadata-req-enc-pa-rep}}\label{\detokenize{appdev/refs/macros/KRB5_ENCPADATA_REQ_ENC_PA_REP:krb5-encpadata-req-enc-pa-rep-data}}\label{\detokenize{appdev/refs/macros/KRB5_ENCPADATA_REQ_ENC_PA_REP::doc}}\index{KRB5\_ENCPADATA\_REQ\_ENC\_PA\_REP (built-in variable)} 18664 18665\begin{fulllineitems} 18666\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_ENCPADATA_REQ_ENC_PA_REP:KRB5_ENCPADATA_REQ_ENC_PA_REP}}\pysigline{\sphinxbfcode{KRB5\_ENCPADATA\_REQ\_ENC\_PA\_REP}} 18667\end{fulllineitems} 18668 18669 18670RFC 6806. 18671 18672 18673\begin{savenotes}\sphinxattablestart 18674\centering 18675\begin{tabulary}{\linewidth}[t]{|T|T|} 18676\hline 18677 18678\sphinxcode{KRB5\_ENCPADATA\_REQ\_ENC\_PA\_REP} 18679& 18680\sphinxcode{149} 18681\\ 18682\hline 18683\end{tabulary} 18684\par 18685\sphinxattableend\end{savenotes} 18686 18687 18688\subsubsection{KRB5\_ERROR} 18689\label{\detokenize{appdev/refs/macros/KRB5_ERROR:krb5-error-data}}\label{\detokenize{appdev/refs/macros/KRB5_ERROR:krb5-error}}\label{\detokenize{appdev/refs/macros/KRB5_ERROR::doc}}\index{KRB5\_ERROR (built-in variable)} 18690 18691\begin{fulllineitems} 18692\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_ERROR:KRB5_ERROR}}\pysigline{\sphinxbfcode{KRB5\_ERROR}} 18693\end{fulllineitems} 18694 18695 18696Error response. 18697 18698 18699\begin{savenotes}\sphinxattablestart 18700\centering 18701\begin{tabulary}{\linewidth}[t]{|T|T|} 18702\hline 18703 18704\sphinxcode{KRB5\_ERROR} 18705& 18706\sphinxcode{((krb5\_msgtype)30)} 18707\\ 18708\hline 18709\end{tabulary} 18710\par 18711\sphinxattableend\end{savenotes} 18712 18713 18714\subsubsection{KRB5\_FAST\_REQUIRED} 18715\label{\detokenize{appdev/refs/macros/KRB5_FAST_REQUIRED:krb5-fast-required}}\label{\detokenize{appdev/refs/macros/KRB5_FAST_REQUIRED:krb5-fast-required-data}}\label{\detokenize{appdev/refs/macros/KRB5_FAST_REQUIRED::doc}}\index{KRB5\_FAST\_REQUIRED (built-in variable)} 18716 18717\begin{fulllineitems} 18718\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_FAST_REQUIRED:KRB5_FAST_REQUIRED}}\pysigline{\sphinxbfcode{KRB5\_FAST\_REQUIRED}} 18719\end{fulllineitems} 18720 18721 18722Require KDC to support FAST. 18723 18724 18725\begin{savenotes}\sphinxattablestart 18726\centering 18727\begin{tabulary}{\linewidth}[t]{|T|T|} 18728\hline 18729 18730\sphinxcode{KRB5\_FAST\_REQUIRED} 18731& 18732\sphinxcode{0x0001} 18733\\ 18734\hline 18735\end{tabulary} 18736\par 18737\sphinxattableend\end{savenotes} 18738 18739 18740\subsubsection{KRB5\_GC\_CACHED} 18741\label{\detokenize{appdev/refs/macros/KRB5_GC_CACHED:krb5-gc-cached}}\label{\detokenize{appdev/refs/macros/KRB5_GC_CACHED:krb5-gc-cached-data}}\label{\detokenize{appdev/refs/macros/KRB5_GC_CACHED::doc}}\index{KRB5\_GC\_CACHED (built-in variable)} 18742 18743\begin{fulllineitems} 18744\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_CACHED:KRB5_GC_CACHED}}\pysigline{\sphinxbfcode{KRB5\_GC\_CACHED}} 18745\end{fulllineitems} 18746 18747 18748Want cached ticket only. 18749 18750 18751\begin{savenotes}\sphinxattablestart 18752\centering 18753\begin{tabulary}{\linewidth}[t]{|T|T|} 18754\hline 18755 18756\sphinxcode{KRB5\_GC\_CACHED} 18757& 18758\sphinxcode{2} 18759\\ 18760\hline 18761\end{tabulary} 18762\par 18763\sphinxattableend\end{savenotes} 18764 18765 18766\subsubsection{KRB5\_GC\_CANONICALIZE} 18767\label{\detokenize{appdev/refs/macros/KRB5_GC_CANONICALIZE:krb5-gc-canonicalize-data}}\label{\detokenize{appdev/refs/macros/KRB5_GC_CANONICALIZE:krb5-gc-canonicalize}}\label{\detokenize{appdev/refs/macros/KRB5_GC_CANONICALIZE::doc}}\index{KRB5\_GC\_CANONICALIZE (built-in variable)} 18768 18769\begin{fulllineitems} 18770\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_CANONICALIZE:KRB5_GC_CANONICALIZE}}\pysigline{\sphinxbfcode{KRB5\_GC\_CANONICALIZE}} 18771\end{fulllineitems} 18772 18773 18774Set canonicalize KDC option. 18775 18776 18777\begin{savenotes}\sphinxattablestart 18778\centering 18779\begin{tabulary}{\linewidth}[t]{|T|T|} 18780\hline 18781 18782\sphinxcode{KRB5\_GC\_CANONICALIZE} 18783& 18784\sphinxcode{4} 18785\\ 18786\hline 18787\end{tabulary} 18788\par 18789\sphinxattableend\end{savenotes} 18790 18791 18792\subsubsection{KRB5\_GC\_CONSTRAINED\_DELEGATION} 18793\label{\detokenize{appdev/refs/macros/KRB5_GC_CONSTRAINED_DELEGATION:krb5-gc-constrained-delegation}}\label{\detokenize{appdev/refs/macros/KRB5_GC_CONSTRAINED_DELEGATION:krb5-gc-constrained-delegation-data}}\label{\detokenize{appdev/refs/macros/KRB5_GC_CONSTRAINED_DELEGATION::doc}}\index{KRB5\_GC\_CONSTRAINED\_DELEGATION (built-in variable)} 18794 18795\begin{fulllineitems} 18796\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_CONSTRAINED_DELEGATION:KRB5_GC_CONSTRAINED_DELEGATION}}\pysigline{\sphinxbfcode{KRB5\_GC\_CONSTRAINED\_DELEGATION}} 18797\end{fulllineitems} 18798 18799 18800Constrained delegation. 18801 18802 18803\begin{savenotes}\sphinxattablestart 18804\centering 18805\begin{tabulary}{\linewidth}[t]{|T|T|} 18806\hline 18807 18808\sphinxcode{KRB5\_GC\_CONSTRAINED\_DELEGATION} 18809& 18810\sphinxcode{64} 18811\\ 18812\hline 18813\end{tabulary} 18814\par 18815\sphinxattableend\end{savenotes} 18816 18817 18818\subsubsection{KRB5\_GC\_FORWARDABLE} 18819\label{\detokenize{appdev/refs/macros/KRB5_GC_FORWARDABLE:krb5-gc-forwardable-data}}\label{\detokenize{appdev/refs/macros/KRB5_GC_FORWARDABLE:krb5-gc-forwardable}}\label{\detokenize{appdev/refs/macros/KRB5_GC_FORWARDABLE::doc}}\index{KRB5\_GC\_FORWARDABLE (built-in variable)} 18820 18821\begin{fulllineitems} 18822\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_FORWARDABLE:KRB5_GC_FORWARDABLE}}\pysigline{\sphinxbfcode{KRB5\_GC\_FORWARDABLE}} 18823\end{fulllineitems} 18824 18825 18826Acquire forwardable tickets. 18827 18828 18829\begin{savenotes}\sphinxattablestart 18830\centering 18831\begin{tabulary}{\linewidth}[t]{|T|T|} 18832\hline 18833 18834\sphinxcode{KRB5\_GC\_FORWARDABLE} 18835& 18836\sphinxcode{16} 18837\\ 18838\hline 18839\end{tabulary} 18840\par 18841\sphinxattableend\end{savenotes} 18842 18843 18844\subsubsection{KRB5\_GC\_NO\_STORE} 18845\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_STORE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_STORE:krb5-gc-no-store}}\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_STORE:krb5-gc-no-store-data}}\index{KRB5\_GC\_NO\_STORE (built-in variable)} 18846 18847\begin{fulllineitems} 18848\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_STORE:KRB5_GC_NO_STORE}}\pysigline{\sphinxbfcode{KRB5\_GC\_NO\_STORE}} 18849\end{fulllineitems} 18850 18851 18852Do not store in credential cache. 18853 18854 18855\begin{savenotes}\sphinxattablestart 18856\centering 18857\begin{tabulary}{\linewidth}[t]{|T|T|} 18858\hline 18859 18860\sphinxcode{KRB5\_GC\_NO\_STORE} 18861& 18862\sphinxcode{8} 18863\\ 18864\hline 18865\end{tabulary} 18866\par 18867\sphinxattableend\end{savenotes} 18868 18869 18870\subsubsection{KRB5\_GC\_NO\_TRANSIT\_CHECK} 18871\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_TRANSIT_CHECK:krb5-gc-no-transit-check-data}}\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_TRANSIT_CHECK:krb5-gc-no-transit-check}}\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_TRANSIT_CHECK::doc}}\index{KRB5\_GC\_NO\_TRANSIT\_CHECK (built-in variable)} 18872 18873\begin{fulllineitems} 18874\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_TRANSIT_CHECK:KRB5_GC_NO_TRANSIT_CHECK}}\pysigline{\sphinxbfcode{KRB5\_GC\_NO\_TRANSIT\_CHECK}} 18875\end{fulllineitems} 18876 18877 18878Disable transited check. 18879 18880 18881\begin{savenotes}\sphinxattablestart 18882\centering 18883\begin{tabulary}{\linewidth}[t]{|T|T|} 18884\hline 18885 18886\sphinxcode{KRB5\_GC\_NO\_TRANSIT\_CHECK} 18887& 18888\sphinxcode{32} 18889\\ 18890\hline 18891\end{tabulary} 18892\par 18893\sphinxattableend\end{savenotes} 18894 18895 18896\subsubsection{KRB5\_GC\_USER\_USER} 18897\label{\detokenize{appdev/refs/macros/KRB5_GC_USER_USER::doc}}\label{\detokenize{appdev/refs/macros/KRB5_GC_USER_USER:krb5-gc-user-user}}\label{\detokenize{appdev/refs/macros/KRB5_GC_USER_USER:krb5-gc-user-user-data}}\index{KRB5\_GC\_USER\_USER (built-in variable)} 18898 18899\begin{fulllineitems} 18900\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_USER_USER:KRB5_GC_USER_USER}}\pysigline{\sphinxbfcode{KRB5\_GC\_USER\_USER}} 18901\end{fulllineitems} 18902 18903 18904Want user-user ticket. 18905 18906 18907\begin{savenotes}\sphinxattablestart 18908\centering 18909\begin{tabulary}{\linewidth}[t]{|T|T|} 18910\hline 18911 18912\sphinxcode{KRB5\_GC\_USER\_USER} 18913& 18914\sphinxcode{1} 18915\\ 18916\hline 18917\end{tabulary} 18918\par 18919\sphinxattableend\end{savenotes} 18920 18921 18922\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_ADDRESS\_LIST} 18923\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ADDRESS_LIST:krb5-get-init-creds-opt-address-list}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ADDRESS_LIST::doc}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ADDRESS_LIST:krb5-get-init-creds-opt-address-list-data}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_ADDRESS\_LIST (built-in variable)} 18924 18925\begin{fulllineitems} 18926\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ADDRESS_LIST:KRB5_GET_INIT_CREDS_OPT_ADDRESS_LIST}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_ADDRESS\_LIST}} 18927\end{fulllineitems} 18928 18929 18930 18931\begin{savenotes}\sphinxattablestart 18932\centering 18933\begin{tabulary}{\linewidth}[t]{|T|T|} 18934\hline 18935 18936\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_ADDRESS\_LIST} 18937& 18938\sphinxcode{0x0020} 18939\\ 18940\hline 18941\end{tabulary} 18942\par 18943\sphinxattableend\end{savenotes} 18944 18945 18946\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_ANONYMOUS} 18947\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ANONYMOUS:krb5-get-init-creds-opt-anonymous-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ANONYMOUS::doc}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ANONYMOUS:krb5-get-init-creds-opt-anonymous}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_ANONYMOUS (built-in variable)} 18948 18949\begin{fulllineitems} 18950\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ANONYMOUS:KRB5_GET_INIT_CREDS_OPT_ANONYMOUS}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_ANONYMOUS}} 18951\end{fulllineitems} 18952 18953 18954 18955\begin{savenotes}\sphinxattablestart 18956\centering 18957\begin{tabulary}{\linewidth}[t]{|T|T|} 18958\hline 18959 18960\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_ANONYMOUS} 18961& 18962\sphinxcode{0x0400} 18963\\ 18964\hline 18965\end{tabulary} 18966\par 18967\sphinxattableend\end{savenotes} 18968 18969 18970\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_CANONICALIZE} 18971\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CANONICALIZE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CANONICALIZE:krb5-get-init-creds-opt-canonicalize-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CANONICALIZE:krb5-get-init-creds-opt-canonicalize}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_CANONICALIZE (built-in variable)} 18972 18973\begin{fulllineitems} 18974\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CANONICALIZE:KRB5_GET_INIT_CREDS_OPT_CANONICALIZE}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_CANONICALIZE}} 18975\end{fulllineitems} 18976 18977 18978 18979\begin{savenotes}\sphinxattablestart 18980\centering 18981\begin{tabulary}{\linewidth}[t]{|T|T|} 18982\hline 18983 18984\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_CANONICALIZE} 18985& 18986\sphinxcode{0x0200} 18987\\ 18988\hline 18989\end{tabulary} 18990\par 18991\sphinxattableend\end{savenotes} 18992 18993 18994\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_CHG\_PWD\_PRMPT} 18995\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CHG_PWD_PRMPT::doc}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CHG_PWD_PRMPT:krb5-get-init-creds-opt-chg-pwd-prmpt}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CHG_PWD_PRMPT:krb5-get-init-creds-opt-chg-pwd-prmpt-data}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_CHG\_PWD\_PRMPT (built-in variable)} 18996 18997\begin{fulllineitems} 18998\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CHG_PWD_PRMPT:KRB5_GET_INIT_CREDS_OPT_CHG_PWD_PRMPT}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_CHG\_PWD\_PRMPT}} 18999\end{fulllineitems} 19000 19001 19002 19003\begin{savenotes}\sphinxattablestart 19004\centering 19005\begin{tabulary}{\linewidth}[t]{|T|T|} 19006\hline 19007 19008\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_CHG\_PWD\_PRMPT} 19009& 19010\sphinxcode{0x0100} 19011\\ 19012\hline 19013\end{tabulary} 19014\par 19015\sphinxattableend\end{savenotes} 19016 19017 19018\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_ETYPE\_LIST} 19019\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST:krb5-get-init-creds-opt-etype-list-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST:krb5-get-init-creds-opt-etype-list}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST::doc}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_ETYPE\_LIST (built-in variable)} 19020 19021\begin{fulllineitems} 19022\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST:KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_ETYPE\_LIST}} 19023\end{fulllineitems} 19024 19025 19026 19027\begin{savenotes}\sphinxattablestart 19028\centering 19029\begin{tabulary}{\linewidth}[t]{|T|T|} 19030\hline 19031 19032\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_ETYPE\_LIST} 19033& 19034\sphinxcode{0x0010} 19035\\ 19036\hline 19037\end{tabulary} 19038\par 19039\sphinxattableend\end{savenotes} 19040 19041 19042\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_FORWARDABLE} 19043\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_FORWARDABLE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_FORWARDABLE:krb5-get-init-creds-opt-forwardable}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_FORWARDABLE:krb5-get-init-creds-opt-forwardable-data}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_FORWARDABLE (built-in variable)} 19044 19045\begin{fulllineitems} 19046\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_FORWARDABLE:KRB5_GET_INIT_CREDS_OPT_FORWARDABLE}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_FORWARDABLE}} 19047\end{fulllineitems} 19048 19049 19050 19051\begin{savenotes}\sphinxattablestart 19052\centering 19053\begin{tabulary}{\linewidth}[t]{|T|T|} 19054\hline 19055 19056\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_FORWARDABLE} 19057& 19058\sphinxcode{0x0004} 19059\\ 19060\hline 19061\end{tabulary} 19062\par 19063\sphinxattableend\end{savenotes} 19064 19065 19066\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_PREAUTH\_LIST} 19067\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PREAUTH_LIST:krb5-get-init-creds-opt-preauth-list}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PREAUTH_LIST:krb5-get-init-creds-opt-preauth-list-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PREAUTH_LIST::doc}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_PREAUTH\_LIST (built-in variable)} 19068 19069\begin{fulllineitems} 19070\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PREAUTH_LIST:KRB5_GET_INIT_CREDS_OPT_PREAUTH_LIST}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_PREAUTH\_LIST}} 19071\end{fulllineitems} 19072 19073 19074 19075\begin{savenotes}\sphinxattablestart 19076\centering 19077\begin{tabulary}{\linewidth}[t]{|T|T|} 19078\hline 19079 19080\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_PREAUTH\_LIST} 19081& 19082\sphinxcode{0x0040} 19083\\ 19084\hline 19085\end{tabulary} 19086\par 19087\sphinxattableend\end{savenotes} 19088 19089 19090\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_PROXIABLE} 19091\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PROXIABLE:krb5-get-init-creds-opt-proxiable-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PROXIABLE:krb5-get-init-creds-opt-proxiable}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PROXIABLE::doc}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_PROXIABLE (built-in variable)} 19092 19093\begin{fulllineitems} 19094\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PROXIABLE:KRB5_GET_INIT_CREDS_OPT_PROXIABLE}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_PROXIABLE}} 19095\end{fulllineitems} 19096 19097 19098 19099\begin{savenotes}\sphinxattablestart 19100\centering 19101\begin{tabulary}{\linewidth}[t]{|T|T|} 19102\hline 19103 19104\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_PROXIABLE} 19105& 19106\sphinxcode{0x0008} 19107\\ 19108\hline 19109\end{tabulary} 19110\par 19111\sphinxattableend\end{savenotes} 19112 19113 19114\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_RENEW\_LIFE} 19115\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_RENEW_LIFE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_RENEW_LIFE:krb5-get-init-creds-opt-renew-life-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_RENEW_LIFE:krb5-get-init-creds-opt-renew-life}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_RENEW\_LIFE (built-in variable)} 19116 19117\begin{fulllineitems} 19118\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_RENEW_LIFE:KRB5_GET_INIT_CREDS_OPT_RENEW_LIFE}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_RENEW\_LIFE}} 19119\end{fulllineitems} 19120 19121 19122 19123\begin{savenotes}\sphinxattablestart 19124\centering 19125\begin{tabulary}{\linewidth}[t]{|T|T|} 19126\hline 19127 19128\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_RENEW\_LIFE} 19129& 19130\sphinxcode{0x0002} 19131\\ 19132\hline 19133\end{tabulary} 19134\par 19135\sphinxattableend\end{savenotes} 19136 19137 19138\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_SALT} 19139\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_SALT:krb5-get-init-creds-opt-salt-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_SALT:krb5-get-init-creds-opt-salt}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_SALT::doc}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_SALT (built-in variable)} 19140 19141\begin{fulllineitems} 19142\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_SALT:KRB5_GET_INIT_CREDS_OPT_SALT}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_SALT}} 19143\end{fulllineitems} 19144 19145 19146 19147\begin{savenotes}\sphinxattablestart 19148\centering 19149\begin{tabulary}{\linewidth}[t]{|T|T|} 19150\hline 19151 19152\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_SALT} 19153& 19154\sphinxcode{0x0080} 19155\\ 19156\hline 19157\end{tabulary} 19158\par 19159\sphinxattableend\end{savenotes} 19160 19161 19162\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_TKT\_LIFE} 19163\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_TKT_LIFE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_TKT_LIFE:krb5-get-init-creds-opt-tkt-life-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_TKT_LIFE:krb5-get-init-creds-opt-tkt-life}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_TKT\_LIFE (built-in variable)} 19164 19165\begin{fulllineitems} 19166\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_TKT_LIFE:KRB5_GET_INIT_CREDS_OPT_TKT_LIFE}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_TKT\_LIFE}} 19167\end{fulllineitems} 19168 19169 19170 19171\begin{savenotes}\sphinxattablestart 19172\centering 19173\begin{tabulary}{\linewidth}[t]{|T|T|} 19174\hline 19175 19176\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_TKT\_LIFE} 19177& 19178\sphinxcode{0x0001} 19179\\ 19180\hline 19181\end{tabulary} 19182\par 19183\sphinxattableend\end{savenotes} 19184 19185 19186\subsubsection{KRB5\_INIT\_CONTEXT\_SECURE} 19187\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_SECURE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_SECURE:krb5-init-context-secure}}\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_SECURE:krb5-init-context-secure-data}}\index{KRB5\_INIT\_CONTEXT\_SECURE (built-in variable)} 19188 19189\begin{fulllineitems} 19190\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_SECURE:KRB5_INIT_CONTEXT_SECURE}}\pysigline{\sphinxbfcode{KRB5\_INIT\_CONTEXT\_SECURE}} 19191\end{fulllineitems} 19192 19193 19194Use secure context configuration. 19195 19196 19197\begin{savenotes}\sphinxattablestart 19198\centering 19199\begin{tabulary}{\linewidth}[t]{|T|T|} 19200\hline 19201 19202\sphinxcode{KRB5\_INIT\_CONTEXT\_SECURE} 19203& 19204\sphinxcode{0x1} 19205\\ 19206\hline 19207\end{tabulary} 19208\par 19209\sphinxattableend\end{savenotes} 19210 19211 19212\subsubsection{KRB5\_INIT\_CONTEXT\_KDC} 19213\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_KDC:krb5-init-context-kdc}}\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_KDC::doc}}\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_KDC:krb5-init-context-kdc-data}}\index{KRB5\_INIT\_CONTEXT\_KDC (built-in variable)} 19214 19215\begin{fulllineitems} 19216\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_KDC:KRB5_INIT_CONTEXT_KDC}}\pysigline{\sphinxbfcode{KRB5\_INIT\_CONTEXT\_KDC}} 19217\end{fulllineitems} 19218 19219 19220Use KDC configuration if available. 19221 19222 19223\begin{savenotes}\sphinxattablestart 19224\centering 19225\begin{tabulary}{\linewidth}[t]{|T|T|} 19226\hline 19227 19228\sphinxcode{KRB5\_INIT\_CONTEXT\_KDC} 19229& 19230\sphinxcode{0x2} 19231\\ 19232\hline 19233\end{tabulary} 19234\par 19235\sphinxattableend\end{savenotes} 19236 19237 19238\subsubsection{KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE} 19239\label{\detokenize{appdev/refs/macros/KRB5_INIT_CREDS_STEP_FLAG_CONTINUE:krb5-init-creds-step-flag-continue-data}}\label{\detokenize{appdev/refs/macros/KRB5_INIT_CREDS_STEP_FLAG_CONTINUE:krb5-init-creds-step-flag-continue}}\label{\detokenize{appdev/refs/macros/KRB5_INIT_CREDS_STEP_FLAG_CONTINUE::doc}}\index{KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE (built-in variable)} 19240 19241\begin{fulllineitems} 19242\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INIT_CREDS_STEP_FLAG_CONTINUE:KRB5_INIT_CREDS_STEP_FLAG_CONTINUE}}\pysigline{\sphinxbfcode{KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE}} 19243\end{fulllineitems} 19244 19245 19246More responses needed. 19247 19248 19249\begin{savenotes}\sphinxattablestart 19250\centering 19251\begin{tabulary}{\linewidth}[t]{|T|T|} 19252\hline 19253 19254\sphinxcode{KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE} 19255& 19256\sphinxcode{0x1} 19257\\ 19258\hline 19259\end{tabulary} 19260\par 19261\sphinxattableend\end{savenotes} 19262 19263 19264\subsubsection{KRB5\_INT16\_MAX} 19265\label{\detokenize{appdev/refs/macros/KRB5_INT16_MAX:krb5-int16-max-data}}\label{\detokenize{appdev/refs/macros/KRB5_INT16_MAX::doc}}\label{\detokenize{appdev/refs/macros/KRB5_INT16_MAX:krb5-int16-max}}\index{KRB5\_INT16\_MAX (built-in variable)} 19266 19267\begin{fulllineitems} 19268\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INT16_MAX:KRB5_INT16_MAX}}\pysigline{\sphinxbfcode{KRB5\_INT16\_MAX}} 19269\end{fulllineitems} 19270 19271 19272 19273\begin{savenotes}\sphinxattablestart 19274\centering 19275\begin{tabulary}{\linewidth}[t]{|T|T|} 19276\hline 19277 19278\sphinxcode{KRB5\_INT16\_MAX} 19279& 19280\sphinxcode{65535} 19281\\ 19282\hline 19283\end{tabulary} 19284\par 19285\sphinxattableend\end{savenotes} 19286 19287 19288\subsubsection{KRB5\_INT16\_MIN} 19289\label{\detokenize{appdev/refs/macros/KRB5_INT16_MIN:krb5-int16-min-data}}\label{\detokenize{appdev/refs/macros/KRB5_INT16_MIN:krb5-int16-min}}\label{\detokenize{appdev/refs/macros/KRB5_INT16_MIN::doc}}\index{KRB5\_INT16\_MIN (built-in variable)} 19290 19291\begin{fulllineitems} 19292\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INT16_MIN:KRB5_INT16_MIN}}\pysigline{\sphinxbfcode{KRB5\_INT16\_MIN}} 19293\end{fulllineitems} 19294 19295 19296 19297\begin{savenotes}\sphinxattablestart 19298\centering 19299\begin{tabulary}{\linewidth}[t]{|T|T|} 19300\hline 19301 19302\sphinxcode{KRB5\_INT16\_MIN} 19303& 19304\sphinxcode{(-KRB5\_INT16\_MAX-1)} 19305\\ 19306\hline 19307\end{tabulary} 19308\par 19309\sphinxattableend\end{savenotes} 19310 19311 19312\subsubsection{KRB5\_INT32\_MAX} 19313\label{\detokenize{appdev/refs/macros/KRB5_INT32_MAX:krb5-int32-max-data}}\label{\detokenize{appdev/refs/macros/KRB5_INT32_MAX:krb5-int32-max}}\label{\detokenize{appdev/refs/macros/KRB5_INT32_MAX::doc}}\index{KRB5\_INT32\_MAX (built-in variable)} 19314 19315\begin{fulllineitems} 19316\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INT32_MAX:KRB5_INT32_MAX}}\pysigline{\sphinxbfcode{KRB5\_INT32\_MAX}} 19317\end{fulllineitems} 19318 19319 19320 19321\begin{savenotes}\sphinxattablestart 19322\centering 19323\begin{tabulary}{\linewidth}[t]{|T|T|} 19324\hline 19325 19326\sphinxcode{KRB5\_INT32\_MAX} 19327& 19328\sphinxcode{2147483647} 19329\\ 19330\hline 19331\end{tabulary} 19332\par 19333\sphinxattableend\end{savenotes} 19334 19335 19336\subsubsection{KRB5\_INT32\_MIN} 19337\label{\detokenize{appdev/refs/macros/KRB5_INT32_MIN:krb5-int32-min-data}}\label{\detokenize{appdev/refs/macros/KRB5_INT32_MIN::doc}}\label{\detokenize{appdev/refs/macros/KRB5_INT32_MIN:krb5-int32-min}}\index{KRB5\_INT32\_MIN (built-in variable)} 19338 19339\begin{fulllineitems} 19340\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INT32_MIN:KRB5_INT32_MIN}}\pysigline{\sphinxbfcode{KRB5\_INT32\_MIN}} 19341\end{fulllineitems} 19342 19343 19344 19345\begin{savenotes}\sphinxattablestart 19346\centering 19347\begin{tabulary}{\linewidth}[t]{|T|T|} 19348\hline 19349 19350\sphinxcode{KRB5\_INT32\_MIN} 19351& 19352\sphinxcode{(-KRB5\_INT32\_MAX-1)} 19353\\ 19354\hline 19355\end{tabulary} 19356\par 19357\sphinxattableend\end{savenotes} 19358 19359 19360\subsubsection{KRB5\_KEYUSAGE\_AD\_ITE} 19361\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_ITE:krb5-keyusage-ad-ite-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_ITE:krb5-keyusage-ad-ite}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_ITE::doc}}\index{KRB5\_KEYUSAGE\_AD\_ITE (built-in variable)} 19362 19363\begin{fulllineitems} 19364\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_ITE:KRB5_KEYUSAGE_AD_ITE}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AD\_ITE}} 19365\end{fulllineitems} 19366 19367 19368 19369\begin{savenotes}\sphinxattablestart 19370\centering 19371\begin{tabulary}{\linewidth}[t]{|T|T|} 19372\hline 19373 19374\sphinxcode{KRB5\_KEYUSAGE\_AD\_ITE} 19375& 19376\sphinxcode{21} 19377\\ 19378\hline 19379\end{tabulary} 19380\par 19381\sphinxattableend\end{savenotes} 19382 19383 19384\subsubsection{KRB5\_KEYUSAGE\_AD\_KDCISSUED\_CKSUM} 19385\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM:krb5-keyusage-ad-kdcissued-cksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM:krb5-keyusage-ad-kdcissued-cksum}}\index{KRB5\_KEYUSAGE\_AD\_KDCISSUED\_CKSUM (built-in variable)} 19386 19387\begin{fulllineitems} 19388\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM:KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AD\_KDCISSUED\_CKSUM}} 19389\end{fulllineitems} 19390 19391 19392 19393\begin{savenotes}\sphinxattablestart 19394\centering 19395\begin{tabulary}{\linewidth}[t]{|T|T|} 19396\hline 19397 19398\sphinxcode{KRB5\_KEYUSAGE\_AD\_KDCISSUED\_CKSUM} 19399& 19400\sphinxcode{19} 19401\\ 19402\hline 19403\end{tabulary} 19404\par 19405\sphinxattableend\end{savenotes} 19406 19407 19408\subsubsection{KRB5\_KEYUSAGE\_AD\_MTE} 19409\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_MTE:krb5-keyusage-ad-mte-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_MTE:krb5-keyusage-ad-mte}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_MTE::doc}}\index{KRB5\_KEYUSAGE\_AD\_MTE (built-in variable)} 19410 19411\begin{fulllineitems} 19412\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_MTE:KRB5_KEYUSAGE_AD_MTE}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AD\_MTE}} 19413\end{fulllineitems} 19414 19415 19416 19417\begin{savenotes}\sphinxattablestart 19418\centering 19419\begin{tabulary}{\linewidth}[t]{|T|T|} 19420\hline 19421 19422\sphinxcode{KRB5\_KEYUSAGE\_AD\_MTE} 19423& 19424\sphinxcode{20} 19425\\ 19426\hline 19427\end{tabulary} 19428\par 19429\sphinxattableend\end{savenotes} 19430 19431 19432\subsubsection{KRB5\_KEYUSAGE\_AD\_SIGNEDPATH} 19433\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_SIGNEDPATH:krb5-keyusage-ad-signedpath-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_SIGNEDPATH::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_SIGNEDPATH:krb5-keyusage-ad-signedpath}}\index{KRB5\_KEYUSAGE\_AD\_SIGNEDPATH (built-in variable)} 19434 19435\begin{fulllineitems} 19436\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_SIGNEDPATH:KRB5_KEYUSAGE_AD_SIGNEDPATH}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AD\_SIGNEDPATH}} 19437\end{fulllineitems} 19438 19439 19440 19441\begin{savenotes}\sphinxattablestart 19442\centering 19443\begin{tabulary}{\linewidth}[t]{|T|T|} 19444\hline 19445 19446\sphinxcode{KRB5\_KEYUSAGE\_AD\_SIGNEDPATH} 19447& 19448\sphinxcode{-21} 19449\\ 19450\hline 19451\end{tabulary} 19452\par 19453\sphinxattableend\end{savenotes} 19454 19455 19456\subsubsection{KRB5\_KEYUSAGE\_APP\_DATA\_CKSUM} 19457\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_CKSUM:krb5-keyusage-app-data-cksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_CKSUM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_CKSUM:krb5-keyusage-app-data-cksum}}\index{KRB5\_KEYUSAGE\_APP\_DATA\_CKSUM (built-in variable)} 19458 19459\begin{fulllineitems} 19460\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_CKSUM:KRB5_KEYUSAGE_APP_DATA_CKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_APP\_DATA\_CKSUM}} 19461\end{fulllineitems} 19462 19463 19464 19465\begin{savenotes}\sphinxattablestart 19466\centering 19467\begin{tabulary}{\linewidth}[t]{|T|T|} 19468\hline 19469 19470\sphinxcode{KRB5\_KEYUSAGE\_APP\_DATA\_CKSUM} 19471& 19472\sphinxcode{17} 19473\\ 19474\hline 19475\end{tabulary} 19476\par 19477\sphinxattableend\end{savenotes} 19478 19479 19480\subsubsection{KRB5\_KEYUSAGE\_APP\_DATA\_ENCRYPT} 19481\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_ENCRYPT:krb5-keyusage-app-data-encrypt}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_ENCRYPT:krb5-keyusage-app-data-encrypt-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_ENCRYPT::doc}}\index{KRB5\_KEYUSAGE\_APP\_DATA\_ENCRYPT (built-in variable)} 19482 19483\begin{fulllineitems} 19484\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_ENCRYPT:KRB5_KEYUSAGE_APP_DATA_ENCRYPT}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_APP\_DATA\_ENCRYPT}} 19485\end{fulllineitems} 19486 19487 19488 19489\begin{savenotes}\sphinxattablestart 19490\centering 19491\begin{tabulary}{\linewidth}[t]{|T|T|} 19492\hline 19493 19494\sphinxcode{KRB5\_KEYUSAGE\_APP\_DATA\_ENCRYPT} 19495& 19496\sphinxcode{16} 19497\\ 19498\hline 19499\end{tabulary} 19500\par 19501\sphinxattableend\end{savenotes} 19502 19503 19504\subsubsection{KRB5\_KEYUSAGE\_AP\_REP\_ENCPART} 19505\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REP_ENCPART::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REP_ENCPART:krb5-keyusage-ap-rep-encpart}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REP_ENCPART:krb5-keyusage-ap-rep-encpart-data}}\index{KRB5\_KEYUSAGE\_AP\_REP\_ENCPART (built-in variable)} 19506 19507\begin{fulllineitems} 19508\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REP_ENCPART:KRB5_KEYUSAGE_AP_REP_ENCPART}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AP\_REP\_ENCPART}} 19509\end{fulllineitems} 19510 19511 19512 19513\begin{savenotes}\sphinxattablestart 19514\centering 19515\begin{tabulary}{\linewidth}[t]{|T|T|} 19516\hline 19517 19518\sphinxcode{KRB5\_KEYUSAGE\_AP\_REP\_ENCPART} 19519& 19520\sphinxcode{12} 19521\\ 19522\hline 19523\end{tabulary} 19524\par 19525\sphinxattableend\end{savenotes} 19526 19527 19528\subsubsection{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH} 19529\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH:krb5-keyusage-ap-req-auth}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH:krb5-keyusage-ap-req-auth-data}}\index{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH (built-in variable)} 19530 19531\begin{fulllineitems} 19532\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH:KRB5_KEYUSAGE_AP_REQ_AUTH}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH}} 19533\end{fulllineitems} 19534 19535 19536 19537\begin{savenotes}\sphinxattablestart 19538\centering 19539\begin{tabulary}{\linewidth}[t]{|T|T|} 19540\hline 19541 19542\sphinxcode{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH} 19543& 19544\sphinxcode{11} 19545\\ 19546\hline 19547\end{tabulary} 19548\par 19549\sphinxattableend\end{savenotes} 19550 19551 19552\subsubsection{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH\_CKSUM} 19553\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH_CKSUM:krb5-keyusage-ap-req-auth-cksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH_CKSUM:krb5-keyusage-ap-req-auth-cksum}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH_CKSUM::doc}}\index{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH\_CKSUM (built-in variable)} 19554 19555\begin{fulllineitems} 19556\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH_CKSUM:KRB5_KEYUSAGE_AP_REQ_AUTH_CKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH\_CKSUM}} 19557\end{fulllineitems} 19558 19559 19560 19561\begin{savenotes}\sphinxattablestart 19562\centering 19563\begin{tabulary}{\linewidth}[t]{|T|T|} 19564\hline 19565 19566\sphinxcode{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH\_CKSUM} 19567& 19568\sphinxcode{10} 19569\\ 19570\hline 19571\end{tabulary} 19572\par 19573\sphinxattableend\end{savenotes} 19574 19575 19576\subsubsection{KRB5\_KEYUSAGE\_AS\_REP\_ENCPART} 19577\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REP_ENCPART:krb5-keyusage-as-rep-encpart-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REP_ENCPART::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REP_ENCPART:krb5-keyusage-as-rep-encpart}}\index{KRB5\_KEYUSAGE\_AS\_REP\_ENCPART (built-in variable)} 19578 19579\begin{fulllineitems} 19580\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REP_ENCPART:KRB5_KEYUSAGE_AS_REP_ENCPART}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AS\_REP\_ENCPART}} 19581\end{fulllineitems} 19582 19583 19584 19585\begin{savenotes}\sphinxattablestart 19586\centering 19587\begin{tabulary}{\linewidth}[t]{|T|T|} 19588\hline 19589 19590\sphinxcode{KRB5\_KEYUSAGE\_AS\_REP\_ENCPART} 19591& 19592\sphinxcode{3} 19593\\ 19594\hline 19595\end{tabulary} 19596\par 19597\sphinxattableend\end{savenotes} 19598 19599 19600\subsubsection{KRB5\_KEYUSAGE\_AS\_REQ} 19601\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ:krb5-keyusage-as-req-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ:krb5-keyusage-as-req}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ::doc}}\index{KRB5\_KEYUSAGE\_AS\_REQ (built-in variable)} 19602 19603\begin{fulllineitems} 19604\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ:KRB5_KEYUSAGE_AS_REQ}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AS\_REQ}} 19605\end{fulllineitems} 19606 19607 19608 19609\begin{savenotes}\sphinxattablestart 19610\centering 19611\begin{tabulary}{\linewidth}[t]{|T|T|} 19612\hline 19613 19614\sphinxcode{KRB5\_KEYUSAGE\_AS\_REQ} 19615& 19616\sphinxcode{56} 19617\\ 19618\hline 19619\end{tabulary} 19620\par 19621\sphinxattableend\end{savenotes} 19622 19623 19624\subsubsection{KRB5\_KEYUSAGE\_AS\_REQ\_PA\_ENC\_TS} 19625\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ_PA_ENC_TS:krb5-keyusage-as-req-pa-enc-ts-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ_PA_ENC_TS::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ_PA_ENC_TS:krb5-keyusage-as-req-pa-enc-ts}}\index{KRB5\_KEYUSAGE\_AS\_REQ\_PA\_ENC\_TS (built-in variable)} 19626 19627\begin{fulllineitems} 19628\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ_PA_ENC_TS:KRB5_KEYUSAGE_AS_REQ_PA_ENC_TS}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AS\_REQ\_PA\_ENC\_TS}} 19629\end{fulllineitems} 19630 19631 19632 19633\begin{savenotes}\sphinxattablestart 19634\centering 19635\begin{tabulary}{\linewidth}[t]{|T|T|} 19636\hline 19637 19638\sphinxcode{KRB5\_KEYUSAGE\_AS\_REQ\_PA\_ENC\_TS} 19639& 19640\sphinxcode{1} 19641\\ 19642\hline 19643\end{tabulary} 19644\par 19645\sphinxattableend\end{savenotes} 19646 19647 19648\subsubsection{KRB5\_KEYUSAGE\_CAMMAC} 19649\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_CAMMAC:krb5-keyusage-cammac}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_CAMMAC::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_CAMMAC:krb5-keyusage-cammac-data}}\index{KRB5\_KEYUSAGE\_CAMMAC (built-in variable)} 19650 19651\begin{fulllineitems} 19652\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_CAMMAC:KRB5_KEYUSAGE_CAMMAC}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_CAMMAC}} 19653\end{fulllineitems} 19654 19655 19656 19657\begin{savenotes}\sphinxattablestart 19658\centering 19659\begin{tabulary}{\linewidth}[t]{|T|T|} 19660\hline 19661 19662\sphinxcode{KRB5\_KEYUSAGE\_CAMMAC} 19663& 19664\sphinxcode{64} 19665\\ 19666\hline 19667\end{tabulary} 19668\par 19669\sphinxattableend\end{savenotes} 19670 19671 19672\subsubsection{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_CLIENT} 19673\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT:krb5-keyusage-enc-challenge-client-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT:krb5-keyusage-enc-challenge-client}}\index{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_CLIENT (built-in variable)} 19674 19675\begin{fulllineitems} 19676\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT:KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_CLIENT}} 19677\end{fulllineitems} 19678 19679 19680 19681\begin{savenotes}\sphinxattablestart 19682\centering 19683\begin{tabulary}{\linewidth}[t]{|T|T|} 19684\hline 19685 19686\sphinxcode{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_CLIENT} 19687& 19688\sphinxcode{54} 19689\\ 19690\hline 19691\end{tabulary} 19692\par 19693\sphinxattableend\end{savenotes} 19694 19695 19696\subsubsection{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_KDC} 19697\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_KDC:krb5-keyusage-enc-challenge-kdc-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_KDC:krb5-keyusage-enc-challenge-kdc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_KDC::doc}}\index{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_KDC (built-in variable)} 19698 19699\begin{fulllineitems} 19700\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_KDC:KRB5_KEYUSAGE_ENC_CHALLENGE_KDC}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_KDC}} 19701\end{fulllineitems} 19702 19703 19704 19705\begin{savenotes}\sphinxattablestart 19706\centering 19707\begin{tabulary}{\linewidth}[t]{|T|T|} 19708\hline 19709 19710\sphinxcode{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_KDC} 19711& 19712\sphinxcode{55} 19713\\ 19714\hline 19715\end{tabulary} 19716\par 19717\sphinxattableend\end{savenotes} 19718 19719 19720\subsubsection{KRB5\_KEYUSAGE\_FAST\_ENC} 19721\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_ENC:krb5-keyusage-fast-enc-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_ENC:krb5-keyusage-fast-enc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_ENC::doc}}\index{KRB5\_KEYUSAGE\_FAST\_ENC (built-in variable)} 19722 19723\begin{fulllineitems} 19724\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_ENC:KRB5_KEYUSAGE_FAST_ENC}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_FAST\_ENC}} 19725\end{fulllineitems} 19726 19727 19728 19729\begin{savenotes}\sphinxattablestart 19730\centering 19731\begin{tabulary}{\linewidth}[t]{|T|T|} 19732\hline 19733 19734\sphinxcode{KRB5\_KEYUSAGE\_FAST\_ENC} 19735& 19736\sphinxcode{51} 19737\\ 19738\hline 19739\end{tabulary} 19740\par 19741\sphinxattableend\end{savenotes} 19742 19743 19744\subsubsection{KRB5\_KEYUSAGE\_FAST\_FINISHED} 19745\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_FINISHED:krb5-keyusage-fast-finished-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_FINISHED::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_FINISHED:krb5-keyusage-fast-finished}}\index{KRB5\_KEYUSAGE\_FAST\_FINISHED (built-in variable)} 19746 19747\begin{fulllineitems} 19748\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_FINISHED:KRB5_KEYUSAGE_FAST_FINISHED}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_FAST\_FINISHED}} 19749\end{fulllineitems} 19750 19751 19752 19753\begin{savenotes}\sphinxattablestart 19754\centering 19755\begin{tabulary}{\linewidth}[t]{|T|T|} 19756\hline 19757 19758\sphinxcode{KRB5\_KEYUSAGE\_FAST\_FINISHED} 19759& 19760\sphinxcode{53} 19761\\ 19762\hline 19763\end{tabulary} 19764\par 19765\sphinxattableend\end{savenotes} 19766 19767 19768\subsubsection{KRB5\_KEYUSAGE\_FAST\_REP} 19769\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REP:krb5-keyusage-fast-rep-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REP::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REP:krb5-keyusage-fast-rep}}\index{KRB5\_KEYUSAGE\_FAST\_REP (built-in variable)} 19770 19771\begin{fulllineitems} 19772\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REP:KRB5_KEYUSAGE_FAST_REP}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_FAST\_REP}} 19773\end{fulllineitems} 19774 19775 19776 19777\begin{savenotes}\sphinxattablestart 19778\centering 19779\begin{tabulary}{\linewidth}[t]{|T|T|} 19780\hline 19781 19782\sphinxcode{KRB5\_KEYUSAGE\_FAST\_REP} 19783& 19784\sphinxcode{52} 19785\\ 19786\hline 19787\end{tabulary} 19788\par 19789\sphinxattableend\end{savenotes} 19790 19791 19792\subsubsection{KRB5\_KEYUSAGE\_FAST\_REQ\_CHKSUM} 19793\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REQ_CHKSUM:krb5-keyusage-fast-req-chksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REQ_CHKSUM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REQ_CHKSUM:krb5-keyusage-fast-req-chksum}}\index{KRB5\_KEYUSAGE\_FAST\_REQ\_CHKSUM (built-in variable)} 19794 19795\begin{fulllineitems} 19796\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REQ_CHKSUM:KRB5_KEYUSAGE_FAST_REQ_CHKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_FAST\_REQ\_CHKSUM}} 19797\end{fulllineitems} 19798 19799 19800 19801\begin{savenotes}\sphinxattablestart 19802\centering 19803\begin{tabulary}{\linewidth}[t]{|T|T|} 19804\hline 19805 19806\sphinxcode{KRB5\_KEYUSAGE\_FAST\_REQ\_CHKSUM} 19807& 19808\sphinxcode{50} 19809\\ 19810\hline 19811\end{tabulary} 19812\par 19813\sphinxattableend\end{savenotes} 19814 19815 19816\subsubsection{KRB5\_KEYUSAGE\_GSS\_TOK\_MIC} 19817\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_MIC:krb5-keyusage-gss-tok-mic}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_MIC::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_MIC:krb5-keyusage-gss-tok-mic-data}}\index{KRB5\_KEYUSAGE\_GSS\_TOK\_MIC (built-in variable)} 19818 19819\begin{fulllineitems} 19820\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_MIC:KRB5_KEYUSAGE_GSS_TOK_MIC}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_GSS\_TOK\_MIC}} 19821\end{fulllineitems} 19822 19823 19824 19825\begin{savenotes}\sphinxattablestart 19826\centering 19827\begin{tabulary}{\linewidth}[t]{|T|T|} 19828\hline 19829 19830\sphinxcode{KRB5\_KEYUSAGE\_GSS\_TOK\_MIC} 19831& 19832\sphinxcode{22} 19833\\ 19834\hline 19835\end{tabulary} 19836\par 19837\sphinxattableend\end{savenotes} 19838 19839 19840\subsubsection{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_INTEG} 19841\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_INTEG::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_INTEG:krb5-keyusage-gss-tok-wrap-integ}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_INTEG:krb5-keyusage-gss-tok-wrap-integ-data}}\index{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_INTEG (built-in variable)} 19842 19843\begin{fulllineitems} 19844\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_INTEG:KRB5_KEYUSAGE_GSS_TOK_WRAP_INTEG}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_INTEG}} 19845\end{fulllineitems} 19846 19847 19848 19849\begin{savenotes}\sphinxattablestart 19850\centering 19851\begin{tabulary}{\linewidth}[t]{|T|T|} 19852\hline 19853 19854\sphinxcode{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_INTEG} 19855& 19856\sphinxcode{23} 19857\\ 19858\hline 19859\end{tabulary} 19860\par 19861\sphinxattableend\end{savenotes} 19862 19863 19864\subsubsection{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_PRIV} 19865\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_PRIV:krb5-keyusage-gss-tok-wrap-priv-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_PRIV::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_PRIV:krb5-keyusage-gss-tok-wrap-priv}}\index{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_PRIV (built-in variable)} 19866 19867\begin{fulllineitems} 19868\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_PRIV:KRB5_KEYUSAGE_GSS_TOK_WRAP_PRIV}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_PRIV}} 19869\end{fulllineitems} 19870 19871 19872 19873\begin{savenotes}\sphinxattablestart 19874\centering 19875\begin{tabulary}{\linewidth}[t]{|T|T|} 19876\hline 19877 19878\sphinxcode{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_PRIV} 19879& 19880\sphinxcode{24} 19881\\ 19882\hline 19883\end{tabulary} 19884\par 19885\sphinxattableend\end{savenotes} 19886 19887 19888\subsubsection{KRB5\_KEYUSAGE\_IAKERB\_FINISHED} 19889\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_IAKERB_FINISHED:krb5-keyusage-iakerb-finished-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_IAKERB_FINISHED::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_IAKERB_FINISHED:krb5-keyusage-iakerb-finished}}\index{KRB5\_KEYUSAGE\_IAKERB\_FINISHED (built-in variable)} 19890 19891\begin{fulllineitems} 19892\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_IAKERB_FINISHED:KRB5_KEYUSAGE_IAKERB_FINISHED}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_IAKERB\_FINISHED}} 19893\end{fulllineitems} 19894 19895 19896 19897\begin{savenotes}\sphinxattablestart 19898\centering 19899\begin{tabulary}{\linewidth}[t]{|T|T|} 19900\hline 19901 19902\sphinxcode{KRB5\_KEYUSAGE\_IAKERB\_FINISHED} 19903& 19904\sphinxcode{42} 19905\\ 19906\hline 19907\end{tabulary} 19908\par 19909\sphinxattableend\end{savenotes} 19910 19911 19912\subsubsection{KRB5\_KEYUSAGE\_KDC\_REP\_TICKET} 19913\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KDC_REP_TICKET::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KDC_REP_TICKET:krb5-keyusage-kdc-rep-ticket-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KDC_REP_TICKET:krb5-keyusage-kdc-rep-ticket}}\index{KRB5\_KEYUSAGE\_KDC\_REP\_TICKET (built-in variable)} 19914 19915\begin{fulllineitems} 19916\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KDC_REP_TICKET:KRB5_KEYUSAGE_KDC_REP_TICKET}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_KDC\_REP\_TICKET}} 19917\end{fulllineitems} 19918 19919 19920 19921\begin{savenotes}\sphinxattablestart 19922\centering 19923\begin{tabulary}{\linewidth}[t]{|T|T|} 19924\hline 19925 19926\sphinxcode{KRB5\_KEYUSAGE\_KDC\_REP\_TICKET} 19927& 19928\sphinxcode{2} 19929\\ 19930\hline 19931\end{tabulary} 19932\par 19933\sphinxattableend\end{savenotes} 19934 19935 19936\subsubsection{KRB5\_KEYUSAGE\_KRB\_CRED\_ENCPART} 19937\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_CRED_ENCPART:krb5-keyusage-krb-cred-encpart-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_CRED_ENCPART::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_CRED_ENCPART:krb5-keyusage-krb-cred-encpart}}\index{KRB5\_KEYUSAGE\_KRB\_CRED\_ENCPART (built-in variable)} 19938 19939\begin{fulllineitems} 19940\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_CRED_ENCPART:KRB5_KEYUSAGE_KRB_CRED_ENCPART}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_KRB\_CRED\_ENCPART}} 19941\end{fulllineitems} 19942 19943 19944 19945\begin{savenotes}\sphinxattablestart 19946\centering 19947\begin{tabulary}{\linewidth}[t]{|T|T|} 19948\hline 19949 19950\sphinxcode{KRB5\_KEYUSAGE\_KRB\_CRED\_ENCPART} 19951& 19952\sphinxcode{14} 19953\\ 19954\hline 19955\end{tabulary} 19956\par 19957\sphinxattableend\end{savenotes} 19958 19959 19960\subsubsection{KRB5\_KEYUSAGE\_KRB\_ERROR\_CKSUM} 19961\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_ERROR_CKSUM:krb5-keyusage-krb-error-cksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_ERROR_CKSUM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_ERROR_CKSUM:krb5-keyusage-krb-error-cksum}}\index{KRB5\_KEYUSAGE\_KRB\_ERROR\_CKSUM (built-in variable)} 19962 19963\begin{fulllineitems} 19964\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_ERROR_CKSUM:KRB5_KEYUSAGE_KRB_ERROR_CKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_KRB\_ERROR\_CKSUM}} 19965\end{fulllineitems} 19966 19967 19968 19969\begin{savenotes}\sphinxattablestart 19970\centering 19971\begin{tabulary}{\linewidth}[t]{|T|T|} 19972\hline 19973 19974\sphinxcode{KRB5\_KEYUSAGE\_KRB\_ERROR\_CKSUM} 19975& 19976\sphinxcode{18} 19977\\ 19978\hline 19979\end{tabulary} 19980\par 19981\sphinxattableend\end{savenotes} 19982 19983 19984\subsubsection{KRB5\_KEYUSAGE\_KRB\_PRIV\_ENCPART} 19985\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_PRIV_ENCPART:krb5-keyusage-krb-priv-encpart}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_PRIV_ENCPART:krb5-keyusage-krb-priv-encpart-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_PRIV_ENCPART::doc}}\index{KRB5\_KEYUSAGE\_KRB\_PRIV\_ENCPART (built-in variable)} 19986 19987\begin{fulllineitems} 19988\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_PRIV_ENCPART:KRB5_KEYUSAGE_KRB_PRIV_ENCPART}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_KRB\_PRIV\_ENCPART}} 19989\end{fulllineitems} 19990 19991 19992 19993\begin{savenotes}\sphinxattablestart 19994\centering 19995\begin{tabulary}{\linewidth}[t]{|T|T|} 19996\hline 19997 19998\sphinxcode{KRB5\_KEYUSAGE\_KRB\_PRIV\_ENCPART} 19999& 20000\sphinxcode{13} 20001\\ 20002\hline 20003\end{tabulary} 20004\par 20005\sphinxattableend\end{savenotes} 20006 20007 20008\subsubsection{KRB5\_KEYUSAGE\_KRB\_SAFE\_CKSUM} 20009\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_SAFE_CKSUM:krb5-keyusage-krb-safe-cksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_SAFE_CKSUM:krb5-keyusage-krb-safe-cksum}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_SAFE_CKSUM::doc}}\index{KRB5\_KEYUSAGE\_KRB\_SAFE\_CKSUM (built-in variable)} 20010 20011\begin{fulllineitems} 20012\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_SAFE_CKSUM:KRB5_KEYUSAGE_KRB_SAFE_CKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_KRB\_SAFE\_CKSUM}} 20013\end{fulllineitems} 20014 20015 20016 20017\begin{savenotes}\sphinxattablestart 20018\centering 20019\begin{tabulary}{\linewidth}[t]{|T|T|} 20020\hline 20021 20022\sphinxcode{KRB5\_KEYUSAGE\_KRB\_SAFE\_CKSUM} 20023& 20024\sphinxcode{15} 20025\\ 20026\hline 20027\end{tabulary} 20028\par 20029\sphinxattableend\end{savenotes} 20030 20031 20032\subsubsection{KRB5\_KEYUSAGE\_PA\_AS\_FRESHNESS} 20033\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_AS_FRESHNESS:krb5-keyusage-pa-as-freshness}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_AS_FRESHNESS:krb5-keyusage-pa-as-freshness-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_AS_FRESHNESS::doc}}\index{KRB5\_KEYUSAGE\_PA\_AS\_FRESHNESS (built-in variable)} 20034 20035\begin{fulllineitems} 20036\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_AS_FRESHNESS:KRB5_KEYUSAGE_PA_AS_FRESHNESS}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_AS\_FRESHNESS}} 20037\end{fulllineitems} 20038 20039 20040Used for freshness tokens. 20041 20042 20043\begin{savenotes}\sphinxattablestart 20044\centering 20045\begin{tabulary}{\linewidth}[t]{|T|T|} 20046\hline 20047 20048\sphinxcode{KRB5\_KEYUSAGE\_PA\_AS\_FRESHNESS} 20049& 20050\sphinxcode{514} 20051\\ 20052\hline 20053\end{tabulary} 20054\par 20055\sphinxattableend\end{savenotes} 20056 20057 20058\subsubsection{KRB5\_KEYUSAGE\_PA\_FX\_COOKIE} 20059\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_FX_COOKIE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_FX_COOKIE:krb5-keyusage-pa-fx-cookie}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_FX_COOKIE:krb5-keyusage-pa-fx-cookie-data}}\index{KRB5\_KEYUSAGE\_PA\_FX\_COOKIE (built-in variable)} 20060 20061\begin{fulllineitems} 20062\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_FX_COOKIE:KRB5_KEYUSAGE_PA_FX_COOKIE}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_FX\_COOKIE}} 20063\end{fulllineitems} 20064 20065 20066Used for encrypted FAST cookies. 20067 20068 20069\begin{savenotes}\sphinxattablestart 20070\centering 20071\begin{tabulary}{\linewidth}[t]{|T|T|} 20072\hline 20073 20074\sphinxcode{KRB5\_KEYUSAGE\_PA\_FX\_COOKIE} 20075& 20076\sphinxcode{513} 20077\\ 20078\hline 20079\end{tabulary} 20080\par 20081\sphinxattableend\end{savenotes} 20082 20083 20084\subsubsection{KRB5\_KEYUSAGE\_PA\_OTP\_REQUEST} 20085\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_OTP_REQUEST:krb5-keyusage-pa-otp-request}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_OTP_REQUEST:krb5-keyusage-pa-otp-request-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_OTP_REQUEST::doc}}\index{KRB5\_KEYUSAGE\_PA\_OTP\_REQUEST (built-in variable)} 20086 20087\begin{fulllineitems} 20088\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_OTP_REQUEST:KRB5_KEYUSAGE_PA_OTP_REQUEST}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_OTP\_REQUEST}} 20089\end{fulllineitems} 20090 20091 20092See RFC 6560 section 4.2. 20093 20094 20095\begin{savenotes}\sphinxattablestart 20096\centering 20097\begin{tabulary}{\linewidth}[t]{|T|T|} 20098\hline 20099 20100\sphinxcode{KRB5\_KEYUSAGE\_PA\_OTP\_REQUEST} 20101& 20102\sphinxcode{45} 20103\\ 20104\hline 20105\end{tabulary} 20106\par 20107\sphinxattableend\end{savenotes} 20108 20109 20110\subsubsection{KRB5\_KEYUSAGE\_PA\_PKINIT\_KX} 20111\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_PKINIT_KX::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_PKINIT_KX:krb5-keyusage-pa-pkinit-kx-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_PKINIT_KX:krb5-keyusage-pa-pkinit-kx}}\index{KRB5\_KEYUSAGE\_PA\_PKINIT\_KX (built-in variable)} 20112 20113\begin{fulllineitems} 20114\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_PKINIT_KX:KRB5_KEYUSAGE_PA_PKINIT_KX}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_PKINIT\_KX}} 20115\end{fulllineitems} 20116 20117 20118 20119\begin{savenotes}\sphinxattablestart 20120\centering 20121\begin{tabulary}{\linewidth}[t]{|T|T|} 20122\hline 20123 20124\sphinxcode{KRB5\_KEYUSAGE\_PA\_PKINIT\_KX} 20125& 20126\sphinxcode{44} 20127\\ 20128\hline 20129\end{tabulary} 20130\par 20131\sphinxattableend\end{savenotes} 20132 20133 20134\subsubsection{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REPLY} 20135\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REPLY:krb5-keyusage-pa-s4u-x509-user-reply-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REPLY:krb5-keyusage-pa-s4u-x509-user-reply}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REPLY::doc}}\index{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REPLY (built-in variable)} 20136 20137\begin{fulllineitems} 20138\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REPLY:KRB5_KEYUSAGE_PA_S4U_X509_USER_REPLY}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REPLY}} 20139\end{fulllineitems} 20140 20141 20142Note conflict with \sphinxcode{KRB5\_KEYUSAGE\_PA\_SAM\_RESPONSE} . 20143 20144 20145\begin{savenotes}\sphinxattablestart 20146\centering 20147\begin{tabulary}{\linewidth}[t]{|T|T|} 20148\hline 20149 20150\sphinxcode{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REPLY} 20151& 20152\sphinxcode{27} 20153\\ 20154\hline 20155\end{tabulary} 20156\par 20157\sphinxattableend\end{savenotes} 20158 20159 20160\subsubsection{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REQUEST} 20161\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST:krb5-keyusage-pa-s4u-x509-user-request}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST:krb5-keyusage-pa-s4u-x509-user-request-data}}\index{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REQUEST (built-in variable)} 20162 20163\begin{fulllineitems} 20164\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST:KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REQUEST}} 20165\end{fulllineitems} 20166 20167 20168Note conflict with \sphinxcode{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_TRACKID} . 20169 20170 20171\begin{savenotes}\sphinxattablestart 20172\centering 20173\begin{tabulary}{\linewidth}[t]{|T|T|} 20174\hline 20175 20176\sphinxcode{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REQUEST} 20177& 20178\sphinxcode{26} 20179\\ 20180\hline 20181\end{tabulary} 20182\par 20183\sphinxattableend\end{savenotes} 20184 20185 20186\subsubsection{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_CKSUM} 20187\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_CKSUM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_CKSUM:krb5-keyusage-pa-sam-challenge-cksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_CKSUM:krb5-keyusage-pa-sam-challenge-cksum}}\index{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_CKSUM (built-in variable)} 20188 20189\begin{fulllineitems} 20190\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_CKSUM:KRB5_KEYUSAGE_PA_SAM_CHALLENGE_CKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_CKSUM}} 20191\end{fulllineitems} 20192 20193 20194 20195\begin{savenotes}\sphinxattablestart 20196\centering 20197\begin{tabulary}{\linewidth}[t]{|T|T|} 20198\hline 20199 20200\sphinxcode{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_CKSUM} 20201& 20202\sphinxcode{25} 20203\\ 20204\hline 20205\end{tabulary} 20206\par 20207\sphinxattableend\end{savenotes} 20208 20209 20210\subsubsection{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_TRACKID} 20211\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_TRACKID:krb5-keyusage-pa-sam-challenge-trackid}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_TRACKID:krb5-keyusage-pa-sam-challenge-trackid-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_TRACKID::doc}}\index{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_TRACKID (built-in variable)} 20212 20213\begin{fulllineitems} 20214\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_TRACKID:KRB5_KEYUSAGE_PA_SAM_CHALLENGE_TRACKID}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_TRACKID}} 20215\end{fulllineitems} 20216 20217 20218Note conflict with \sphinxcode{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REQUEST} . 20219 20220 20221\begin{savenotes}\sphinxattablestart 20222\centering 20223\begin{tabulary}{\linewidth}[t]{|T|T|} 20224\hline 20225 20226\sphinxcode{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_TRACKID} 20227& 20228\sphinxcode{26} 20229\\ 20230\hline 20231\end{tabulary} 20232\par 20233\sphinxattableend\end{savenotes} 20234 20235 20236\subsubsection{KRB5\_KEYUSAGE\_PA\_SAM\_RESPONSE} 20237\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_RESPONSE:krb5-keyusage-pa-sam-response-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_RESPONSE:krb5-keyusage-pa-sam-response}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_RESPONSE::doc}}\index{KRB5\_KEYUSAGE\_PA\_SAM\_RESPONSE (built-in variable)} 20238 20239\begin{fulllineitems} 20240\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_RESPONSE:KRB5_KEYUSAGE_PA_SAM_RESPONSE}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_SAM\_RESPONSE}} 20241\end{fulllineitems} 20242 20243 20244Note conflict with \sphinxcode{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REPLY} . 20245 20246 20247\begin{savenotes}\sphinxattablestart 20248\centering 20249\begin{tabulary}{\linewidth}[t]{|T|T|} 20250\hline 20251 20252\sphinxcode{KRB5\_KEYUSAGE\_PA\_SAM\_RESPONSE} 20253& 20254\sphinxcode{27} 20255\\ 20256\hline 20257\end{tabulary} 20258\par 20259\sphinxattableend\end{savenotes} 20260 20261 20262\subsubsection{KRB5\_KEYUSAGE\_SPAKE} 20263\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_SPAKE:krb5-keyusage-spake}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_SPAKE:krb5-keyusage-spake-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_SPAKE::doc}}\index{KRB5\_KEYUSAGE\_SPAKE (built-in variable)} 20264 20265\begin{fulllineitems} 20266\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_SPAKE:KRB5_KEYUSAGE_SPAKE}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_SPAKE}} 20267\end{fulllineitems} 20268 20269 20270 20271\begin{savenotes}\sphinxattablestart 20272\centering 20273\begin{tabulary}{\linewidth}[t]{|T|T|} 20274\hline 20275 20276\sphinxcode{KRB5\_KEYUSAGE\_SPAKE} 20277& 20278\sphinxcode{65} 20279\\ 20280\hline 20281\end{tabulary} 20282\par 20283\sphinxattableend\end{savenotes} 20284 20285 20286\subsubsection{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SESSKEY} 20287\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SESSKEY:krb5-keyusage-tgs-rep-encpart-sesskey}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SESSKEY:krb5-keyusage-tgs-rep-encpart-sesskey-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SESSKEY::doc}}\index{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SESSKEY (built-in variable)} 20288 20289\begin{fulllineitems} 20290\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SESSKEY:KRB5_KEYUSAGE_TGS_REP_ENCPART_SESSKEY}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SESSKEY}} 20291\end{fulllineitems} 20292 20293 20294 20295\begin{savenotes}\sphinxattablestart 20296\centering 20297\begin{tabulary}{\linewidth}[t]{|T|T|} 20298\hline 20299 20300\sphinxcode{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SESSKEY} 20301& 20302\sphinxcode{8} 20303\\ 20304\hline 20305\end{tabulary} 20306\par 20307\sphinxattableend\end{savenotes} 20308 20309 20310\subsubsection{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SUBKEY} 20311\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SUBKEY:krb5-keyusage-tgs-rep-encpart-subkey-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SUBKEY::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SUBKEY:krb5-keyusage-tgs-rep-encpart-subkey}}\index{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SUBKEY (built-in variable)} 20312 20313\begin{fulllineitems} 20314\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SUBKEY:KRB5_KEYUSAGE_TGS_REP_ENCPART_SUBKEY}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SUBKEY}} 20315\end{fulllineitems} 20316 20317 20318 20319\begin{savenotes}\sphinxattablestart 20320\centering 20321\begin{tabulary}{\linewidth}[t]{|T|T|} 20322\hline 20323 20324\sphinxcode{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SUBKEY} 20325& 20326\sphinxcode{9} 20327\\ 20328\hline 20329\end{tabulary} 20330\par 20331\sphinxattableend\end{savenotes} 20332 20333 20334\subsubsection{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SESSKEY} 20335\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SESSKEY::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SESSKEY:krb5-keyusage-tgs-req-ad-sesskey}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SESSKEY:krb5-keyusage-tgs-req-ad-sesskey-data}}\index{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SESSKEY (built-in variable)} 20336 20337\begin{fulllineitems} 20338\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SESSKEY:KRB5_KEYUSAGE_TGS_REQ_AD_SESSKEY}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SESSKEY}} 20339\end{fulllineitems} 20340 20341 20342 20343\begin{savenotes}\sphinxattablestart 20344\centering 20345\begin{tabulary}{\linewidth}[t]{|T|T|} 20346\hline 20347 20348\sphinxcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SESSKEY} 20349& 20350\sphinxcode{4} 20351\\ 20352\hline 20353\end{tabulary} 20354\par 20355\sphinxattableend\end{savenotes} 20356 20357 20358\subsubsection{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SUBKEY} 20359\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SUBKEY:krb5-keyusage-tgs-req-ad-subkey}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SUBKEY::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SUBKEY:krb5-keyusage-tgs-req-ad-subkey-data}}\index{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SUBKEY (built-in variable)} 20360 20361\begin{fulllineitems} 20362\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SUBKEY:KRB5_KEYUSAGE_TGS_REQ_AD_SUBKEY}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SUBKEY}} 20363\end{fulllineitems} 20364 20365 20366 20367\begin{savenotes}\sphinxattablestart 20368\centering 20369\begin{tabulary}{\linewidth}[t]{|T|T|} 20370\hline 20371 20372\sphinxcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SUBKEY} 20373& 20374\sphinxcode{5} 20375\\ 20376\hline 20377\end{tabulary} 20378\par 20379\sphinxattableend\end{savenotes} 20380 20381 20382\subsubsection{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH} 20383\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH:krb5-keyusage-tgs-req-auth}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH:krb5-keyusage-tgs-req-auth-data}}\index{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH (built-in variable)} 20384 20385\begin{fulllineitems} 20386\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH:KRB5_KEYUSAGE_TGS_REQ_AUTH}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH}} 20387\end{fulllineitems} 20388 20389 20390 20391\begin{savenotes}\sphinxattablestart 20392\centering 20393\begin{tabulary}{\linewidth}[t]{|T|T|} 20394\hline 20395 20396\sphinxcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH} 20397& 20398\sphinxcode{7} 20399\\ 20400\hline 20401\end{tabulary} 20402\par 20403\sphinxattableend\end{savenotes} 20404 20405 20406\subsubsection{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH\_CKSUM} 20407\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH_CKSUM:krb5-keyusage-tgs-req-auth-cksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH_CKSUM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH_CKSUM:krb5-keyusage-tgs-req-auth-cksum}}\index{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH\_CKSUM (built-in variable)} 20408 20409\begin{fulllineitems} 20410\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH_CKSUM:KRB5_KEYUSAGE_TGS_REQ_AUTH_CKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH\_CKSUM}} 20411\end{fulllineitems} 20412 20413 20414 20415\begin{savenotes}\sphinxattablestart 20416\centering 20417\begin{tabulary}{\linewidth}[t]{|T|T|} 20418\hline 20419 20420\sphinxcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH\_CKSUM} 20421& 20422\sphinxcode{6} 20423\\ 20424\hline 20425\end{tabulary} 20426\par 20427\sphinxattableend\end{savenotes} 20428 20429 20430\subsubsection{KRB5\_KPASSWD\_ACCESSDENIED} 20431\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_ACCESSDENIED:krb5-kpasswd-accessdenied}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_ACCESSDENIED:krb5-kpasswd-accessdenied-data}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_ACCESSDENIED::doc}}\index{KRB5\_KPASSWD\_ACCESSDENIED (built-in variable)} 20432 20433\begin{fulllineitems} 20434\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_ACCESSDENIED:KRB5_KPASSWD_ACCESSDENIED}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_ACCESSDENIED}} 20435\end{fulllineitems} 20436 20437 20438Not authorized. 20439 20440 20441\begin{savenotes}\sphinxattablestart 20442\centering 20443\begin{tabulary}{\linewidth}[t]{|T|T|} 20444\hline 20445 20446\sphinxcode{KRB5\_KPASSWD\_ACCESSDENIED} 20447& 20448\sphinxcode{5} 20449\\ 20450\hline 20451\end{tabulary} 20452\par 20453\sphinxattableend\end{savenotes} 20454 20455 20456\subsubsection{KRB5\_KPASSWD\_AUTHERROR} 20457\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_AUTHERROR:krb5-kpasswd-autherror-data}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_AUTHERROR:krb5-kpasswd-autherror}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_AUTHERROR::doc}}\index{KRB5\_KPASSWD\_AUTHERROR (built-in variable)} 20458 20459\begin{fulllineitems} 20460\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_AUTHERROR:KRB5_KPASSWD_AUTHERROR}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_AUTHERROR}} 20461\end{fulllineitems} 20462 20463 20464Authentication error. 20465 20466 20467\begin{savenotes}\sphinxattablestart 20468\centering 20469\begin{tabulary}{\linewidth}[t]{|T|T|} 20470\hline 20471 20472\sphinxcode{KRB5\_KPASSWD\_AUTHERROR} 20473& 20474\sphinxcode{3} 20475\\ 20476\hline 20477\end{tabulary} 20478\par 20479\sphinxattableend\end{savenotes} 20480 20481 20482\subsubsection{KRB5\_KPASSWD\_BAD\_VERSION} 20483\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_BAD_VERSION:krb5-kpasswd-bad-version-data}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_BAD_VERSION:krb5-kpasswd-bad-version}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_BAD_VERSION::doc}}\index{KRB5\_KPASSWD\_BAD\_VERSION (built-in variable)} 20484 20485\begin{fulllineitems} 20486\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_BAD_VERSION:KRB5_KPASSWD_BAD_VERSION}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_BAD\_VERSION}} 20487\end{fulllineitems} 20488 20489 20490Unknown RPC version. 20491 20492 20493\begin{savenotes}\sphinxattablestart 20494\centering 20495\begin{tabulary}{\linewidth}[t]{|T|T|} 20496\hline 20497 20498\sphinxcode{KRB5\_KPASSWD\_BAD\_VERSION} 20499& 20500\sphinxcode{6} 20501\\ 20502\hline 20503\end{tabulary} 20504\par 20505\sphinxattableend\end{savenotes} 20506 20507 20508\subsubsection{KRB5\_KPASSWD\_HARDERROR} 20509\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_HARDERROR:krb5-kpasswd-harderror}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_HARDERROR:krb5-kpasswd-harderror-data}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_HARDERROR::doc}}\index{KRB5\_KPASSWD\_HARDERROR (built-in variable)} 20510 20511\begin{fulllineitems} 20512\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_HARDERROR:KRB5_KPASSWD_HARDERROR}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_HARDERROR}} 20513\end{fulllineitems} 20514 20515 20516Server error. 20517 20518 20519\begin{savenotes}\sphinxattablestart 20520\centering 20521\begin{tabulary}{\linewidth}[t]{|T|T|} 20522\hline 20523 20524\sphinxcode{KRB5\_KPASSWD\_HARDERROR} 20525& 20526\sphinxcode{2} 20527\\ 20528\hline 20529\end{tabulary} 20530\par 20531\sphinxattableend\end{savenotes} 20532 20533 20534\subsubsection{KRB5\_KPASSWD\_INITIAL\_FLAG\_NEEDED} 20535\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_INITIAL_FLAG_NEEDED:krb5-kpasswd-initial-flag-needed}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_INITIAL_FLAG_NEEDED::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_INITIAL_FLAG_NEEDED:krb5-kpasswd-initial-flag-needed-data}}\index{KRB5\_KPASSWD\_INITIAL\_FLAG\_NEEDED (built-in variable)} 20536 20537\begin{fulllineitems} 20538\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_INITIAL_FLAG_NEEDED:KRB5_KPASSWD_INITIAL_FLAG_NEEDED}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_INITIAL\_FLAG\_NEEDED}} 20539\end{fulllineitems} 20540 20541 20542The presented credentials were not obtained using a password directly. 20543 20544 20545\begin{savenotes}\sphinxattablestart 20546\centering 20547\begin{tabulary}{\linewidth}[t]{|T|T|} 20548\hline 20549 20550\sphinxcode{KRB5\_KPASSWD\_INITIAL\_FLAG\_NEEDED} 20551& 20552\sphinxcode{7} 20553\\ 20554\hline 20555\end{tabulary} 20556\par 20557\sphinxattableend\end{savenotes} 20558 20559 20560\subsubsection{KRB5\_KPASSWD\_MALFORMED} 20561\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_MALFORMED:krb5-kpasswd-malformed-data}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_MALFORMED:krb5-kpasswd-malformed}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_MALFORMED::doc}}\index{KRB5\_KPASSWD\_MALFORMED (built-in variable)} 20562 20563\begin{fulllineitems} 20564\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_MALFORMED:KRB5_KPASSWD_MALFORMED}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_MALFORMED}} 20565\end{fulllineitems} 20566 20567 20568Malformed request. 20569 20570 20571\begin{savenotes}\sphinxattablestart 20572\centering 20573\begin{tabulary}{\linewidth}[t]{|T|T|} 20574\hline 20575 20576\sphinxcode{KRB5\_KPASSWD\_MALFORMED} 20577& 20578\sphinxcode{1} 20579\\ 20580\hline 20581\end{tabulary} 20582\par 20583\sphinxattableend\end{savenotes} 20584 20585 20586\subsubsection{KRB5\_KPASSWD\_SOFTERROR} 20587\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SOFTERROR::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SOFTERROR:krb5-kpasswd-softerror}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SOFTERROR:krb5-kpasswd-softerror-data}}\index{KRB5\_KPASSWD\_SOFTERROR (built-in variable)} 20588 20589\begin{fulllineitems} 20590\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SOFTERROR:KRB5_KPASSWD_SOFTERROR}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_SOFTERROR}} 20591\end{fulllineitems} 20592 20593 20594Password change rejected. 20595 20596 20597\begin{savenotes}\sphinxattablestart 20598\centering 20599\begin{tabulary}{\linewidth}[t]{|T|T|} 20600\hline 20601 20602\sphinxcode{KRB5\_KPASSWD\_SOFTERROR} 20603& 20604\sphinxcode{4} 20605\\ 20606\hline 20607\end{tabulary} 20608\par 20609\sphinxattableend\end{savenotes} 20610 20611 20612\subsubsection{KRB5\_KPASSWD\_SUCCESS} 20613\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SUCCESS:krb5-kpasswd-success-data}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SUCCESS::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SUCCESS:krb5-kpasswd-success}}\index{KRB5\_KPASSWD\_SUCCESS (built-in variable)} 20614 20615\begin{fulllineitems} 20616\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SUCCESS:KRB5_KPASSWD_SUCCESS}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_SUCCESS}} 20617\end{fulllineitems} 20618 20619 20620Success. 20621 20622 20623\begin{savenotes}\sphinxattablestart 20624\centering 20625\begin{tabulary}{\linewidth}[t]{|T|T|} 20626\hline 20627 20628\sphinxcode{KRB5\_KPASSWD\_SUCCESS} 20629& 20630\sphinxcode{0} 20631\\ 20632\hline 20633\end{tabulary} 20634\par 20635\sphinxattableend\end{savenotes} 20636 20637 20638\subsubsection{KRB5\_LRQ\_ALL\_ACCT\_EXPTIME} 20639\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_ACCT_EXPTIME::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_ACCT_EXPTIME:krb5-lrq-all-acct-exptime}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_ACCT_EXPTIME:krb5-lrq-all-acct-exptime-data}}\index{KRB5\_LRQ\_ALL\_ACCT\_EXPTIME (built-in variable)} 20640 20641\begin{fulllineitems} 20642\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_ACCT_EXPTIME:KRB5_LRQ_ALL_ACCT_EXPTIME}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_ACCT\_EXPTIME}} 20643\end{fulllineitems} 20644 20645 20646 20647\begin{savenotes}\sphinxattablestart 20648\centering 20649\begin{tabulary}{\linewidth}[t]{|T|T|} 20650\hline 20651 20652\sphinxcode{KRB5\_LRQ\_ALL\_ACCT\_EXPTIME} 20653& 20654\sphinxcode{7} 20655\\ 20656\hline 20657\end{tabulary} 20658\par 20659\sphinxattableend\end{savenotes} 20660 20661 20662\subsubsection{KRB5\_LRQ\_ALL\_LAST\_INITIAL} 20663\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_INITIAL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_INITIAL:krb5-lrq-all-last-initial}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_INITIAL:krb5-lrq-all-last-initial-data}}\index{KRB5\_LRQ\_ALL\_LAST\_INITIAL (built-in variable)} 20664 20665\begin{fulllineitems} 20666\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_INITIAL:KRB5_LRQ_ALL_LAST_INITIAL}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_LAST\_INITIAL}} 20667\end{fulllineitems} 20668 20669 20670 20671\begin{savenotes}\sphinxattablestart 20672\centering 20673\begin{tabulary}{\linewidth}[t]{|T|T|} 20674\hline 20675 20676\sphinxcode{KRB5\_LRQ\_ALL\_LAST\_INITIAL} 20677& 20678\sphinxcode{2} 20679\\ 20680\hline 20681\end{tabulary} 20682\par 20683\sphinxattableend\end{savenotes} 20684 20685 20686\subsubsection{KRB5\_LRQ\_ALL\_LAST\_RENEWAL} 20687\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_RENEWAL:krb5-lrq-all-last-renewal}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_RENEWAL:krb5-lrq-all-last-renewal-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_RENEWAL::doc}}\index{KRB5\_LRQ\_ALL\_LAST\_RENEWAL (built-in variable)} 20688 20689\begin{fulllineitems} 20690\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_RENEWAL:KRB5_LRQ_ALL_LAST_RENEWAL}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_LAST\_RENEWAL}} 20691\end{fulllineitems} 20692 20693 20694 20695\begin{savenotes}\sphinxattablestart 20696\centering 20697\begin{tabulary}{\linewidth}[t]{|T|T|} 20698\hline 20699 20700\sphinxcode{KRB5\_LRQ\_ALL\_LAST\_RENEWAL} 20701& 20702\sphinxcode{4} 20703\\ 20704\hline 20705\end{tabulary} 20706\par 20707\sphinxattableend\end{savenotes} 20708 20709 20710\subsubsection{KRB5\_LRQ\_ALL\_LAST\_REQ} 20711\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_REQ::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_REQ:krb5-lrq-all-last-req}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_REQ:krb5-lrq-all-last-req-data}}\index{KRB5\_LRQ\_ALL\_LAST\_REQ (built-in variable)} 20712 20713\begin{fulllineitems} 20714\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_REQ:KRB5_LRQ_ALL_LAST_REQ}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_LAST\_REQ}} 20715\end{fulllineitems} 20716 20717 20718 20719\begin{savenotes}\sphinxattablestart 20720\centering 20721\begin{tabulary}{\linewidth}[t]{|T|T|} 20722\hline 20723 20724\sphinxcode{KRB5\_LRQ\_ALL\_LAST\_REQ} 20725& 20726\sphinxcode{5} 20727\\ 20728\hline 20729\end{tabulary} 20730\par 20731\sphinxattableend\end{savenotes} 20732 20733 20734\subsubsection{KRB5\_LRQ\_ALL\_LAST\_TGT} 20735\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT:krb5-lrq-all-last-tgt-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT:krb5-lrq-all-last-tgt}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT::doc}}\index{KRB5\_LRQ\_ALL\_LAST\_TGT (built-in variable)} 20736 20737\begin{fulllineitems} 20738\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT:KRB5_LRQ_ALL_LAST_TGT}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_LAST\_TGT}} 20739\end{fulllineitems} 20740 20741 20742 20743\begin{savenotes}\sphinxattablestart 20744\centering 20745\begin{tabulary}{\linewidth}[t]{|T|T|} 20746\hline 20747 20748\sphinxcode{KRB5\_LRQ\_ALL\_LAST\_TGT} 20749& 20750\sphinxcode{1} 20751\\ 20752\hline 20753\end{tabulary} 20754\par 20755\sphinxattableend\end{savenotes} 20756 20757 20758\subsubsection{KRB5\_LRQ\_ALL\_LAST\_TGT\_ISSUED} 20759\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT_ISSUED::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT_ISSUED:krb5-lrq-all-last-tgt-issued}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT_ISSUED:krb5-lrq-all-last-tgt-issued-data}}\index{KRB5\_LRQ\_ALL\_LAST\_TGT\_ISSUED (built-in variable)} 20760 20761\begin{fulllineitems} 20762\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT_ISSUED:KRB5_LRQ_ALL_LAST_TGT_ISSUED}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_LAST\_TGT\_ISSUED}} 20763\end{fulllineitems} 20764 20765 20766 20767\begin{savenotes}\sphinxattablestart 20768\centering 20769\begin{tabulary}{\linewidth}[t]{|T|T|} 20770\hline 20771 20772\sphinxcode{KRB5\_LRQ\_ALL\_LAST\_TGT\_ISSUED} 20773& 20774\sphinxcode{3} 20775\\ 20776\hline 20777\end{tabulary} 20778\par 20779\sphinxattableend\end{savenotes} 20780 20781 20782\subsubsection{KRB5\_LRQ\_ALL\_PW\_EXPTIME} 20783\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_PW_EXPTIME:krb5-lrq-all-pw-exptime-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_PW_EXPTIME::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_PW_EXPTIME:krb5-lrq-all-pw-exptime}}\index{KRB5\_LRQ\_ALL\_PW\_EXPTIME (built-in variable)} 20784 20785\begin{fulllineitems} 20786\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_PW_EXPTIME:KRB5_LRQ_ALL_PW_EXPTIME}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_PW\_EXPTIME}} 20787\end{fulllineitems} 20788 20789 20790 20791\begin{savenotes}\sphinxattablestart 20792\centering 20793\begin{tabulary}{\linewidth}[t]{|T|T|} 20794\hline 20795 20796\sphinxcode{KRB5\_LRQ\_ALL\_PW\_EXPTIME} 20797& 20798\sphinxcode{6} 20799\\ 20800\hline 20801\end{tabulary} 20802\par 20803\sphinxattableend\end{savenotes} 20804 20805 20806\subsubsection{KRB5\_LRQ\_NONE} 20807\label{\detokenize{appdev/refs/macros/KRB5_LRQ_NONE:krb5-lrq-none-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_NONE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_NONE:krb5-lrq-none}}\index{KRB5\_LRQ\_NONE (built-in variable)} 20808 20809\begin{fulllineitems} 20810\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_NONE:KRB5_LRQ_NONE}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_NONE}} 20811\end{fulllineitems} 20812 20813 20814 20815\begin{savenotes}\sphinxattablestart 20816\centering 20817\begin{tabulary}{\linewidth}[t]{|T|T|} 20818\hline 20819 20820\sphinxcode{KRB5\_LRQ\_NONE} 20821& 20822\sphinxcode{0} 20823\\ 20824\hline 20825\end{tabulary} 20826\par 20827\sphinxattableend\end{savenotes} 20828 20829 20830\subsubsection{KRB5\_LRQ\_ONE\_ACCT\_EXPTIME} 20831\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_ACCT_EXPTIME::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_ACCT_EXPTIME:krb5-lrq-one-acct-exptime}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_ACCT_EXPTIME:krb5-lrq-one-acct-exptime-data}}\index{KRB5\_LRQ\_ONE\_ACCT\_EXPTIME (built-in variable)} 20832 20833\begin{fulllineitems} 20834\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_ACCT_EXPTIME:KRB5_LRQ_ONE_ACCT_EXPTIME}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_ACCT\_EXPTIME}} 20835\end{fulllineitems} 20836 20837 20838 20839\begin{savenotes}\sphinxattablestart 20840\centering 20841\begin{tabulary}{\linewidth}[t]{|T|T|} 20842\hline 20843 20844\sphinxcode{KRB5\_LRQ\_ONE\_ACCT\_EXPTIME} 20845& 20846\sphinxcode{(-7)} 20847\\ 20848\hline 20849\end{tabulary} 20850\par 20851\sphinxattableend\end{savenotes} 20852 20853 20854\subsubsection{KRB5\_LRQ\_ONE\_LAST\_INITIAL} 20855\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_INITIAL:krb5-lrq-one-last-initial-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_INITIAL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_INITIAL:krb5-lrq-one-last-initial}}\index{KRB5\_LRQ\_ONE\_LAST\_INITIAL (built-in variable)} 20856 20857\begin{fulllineitems} 20858\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_INITIAL:KRB5_LRQ_ONE_LAST_INITIAL}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_LAST\_INITIAL}} 20859\end{fulllineitems} 20860 20861 20862 20863\begin{savenotes}\sphinxattablestart 20864\centering 20865\begin{tabulary}{\linewidth}[t]{|T|T|} 20866\hline 20867 20868\sphinxcode{KRB5\_LRQ\_ONE\_LAST\_INITIAL} 20869& 20870\sphinxcode{(-2)} 20871\\ 20872\hline 20873\end{tabulary} 20874\par 20875\sphinxattableend\end{savenotes} 20876 20877 20878\subsubsection{KRB5\_LRQ\_ONE\_LAST\_RENEWAL} 20879\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_RENEWAL:krb5-lrq-one-last-renewal-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_RENEWAL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_RENEWAL:krb5-lrq-one-last-renewal}}\index{KRB5\_LRQ\_ONE\_LAST\_RENEWAL (built-in variable)} 20880 20881\begin{fulllineitems} 20882\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_RENEWAL:KRB5_LRQ_ONE_LAST_RENEWAL}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_LAST\_RENEWAL}} 20883\end{fulllineitems} 20884 20885 20886 20887\begin{savenotes}\sphinxattablestart 20888\centering 20889\begin{tabulary}{\linewidth}[t]{|T|T|} 20890\hline 20891 20892\sphinxcode{KRB5\_LRQ\_ONE\_LAST\_RENEWAL} 20893& 20894\sphinxcode{(-4)} 20895\\ 20896\hline 20897\end{tabulary} 20898\par 20899\sphinxattableend\end{savenotes} 20900 20901 20902\subsubsection{KRB5\_LRQ\_ONE\_LAST\_REQ} 20903\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_REQ::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_REQ:krb5-lrq-one-last-req}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_REQ:krb5-lrq-one-last-req-data}}\index{KRB5\_LRQ\_ONE\_LAST\_REQ (built-in variable)} 20904 20905\begin{fulllineitems} 20906\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_REQ:KRB5_LRQ_ONE_LAST_REQ}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_LAST\_REQ}} 20907\end{fulllineitems} 20908 20909 20910 20911\begin{savenotes}\sphinxattablestart 20912\centering 20913\begin{tabulary}{\linewidth}[t]{|T|T|} 20914\hline 20915 20916\sphinxcode{KRB5\_LRQ\_ONE\_LAST\_REQ} 20917& 20918\sphinxcode{(-5)} 20919\\ 20920\hline 20921\end{tabulary} 20922\par 20923\sphinxattableend\end{savenotes} 20924 20925 20926\subsubsection{KRB5\_LRQ\_ONE\_LAST\_TGT} 20927\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT:krb5-lrq-one-last-tgt-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT:krb5-lrq-one-last-tgt}}\index{KRB5\_LRQ\_ONE\_LAST\_TGT (built-in variable)} 20928 20929\begin{fulllineitems} 20930\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT:KRB5_LRQ_ONE_LAST_TGT}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_LAST\_TGT}} 20931\end{fulllineitems} 20932 20933 20934 20935\begin{savenotes}\sphinxattablestart 20936\centering 20937\begin{tabulary}{\linewidth}[t]{|T|T|} 20938\hline 20939 20940\sphinxcode{KRB5\_LRQ\_ONE\_LAST\_TGT} 20941& 20942\sphinxcode{(-1)} 20943\\ 20944\hline 20945\end{tabulary} 20946\par 20947\sphinxattableend\end{savenotes} 20948 20949 20950\subsubsection{KRB5\_LRQ\_ONE\_LAST\_TGT\_ISSUED} 20951\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT_ISSUED:krb5-lrq-one-last-tgt-issued}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT_ISSUED:krb5-lrq-one-last-tgt-issued-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT_ISSUED::doc}}\index{KRB5\_LRQ\_ONE\_LAST\_TGT\_ISSUED (built-in variable)} 20952 20953\begin{fulllineitems} 20954\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT_ISSUED:KRB5_LRQ_ONE_LAST_TGT_ISSUED}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_LAST\_TGT\_ISSUED}} 20955\end{fulllineitems} 20956 20957 20958 20959\begin{savenotes}\sphinxattablestart 20960\centering 20961\begin{tabulary}{\linewidth}[t]{|T|T|} 20962\hline 20963 20964\sphinxcode{KRB5\_LRQ\_ONE\_LAST\_TGT\_ISSUED} 20965& 20966\sphinxcode{(-3)} 20967\\ 20968\hline 20969\end{tabulary} 20970\par 20971\sphinxattableend\end{savenotes} 20972 20973 20974\subsubsection{KRB5\_LRQ\_ONE\_PW\_EXPTIME} 20975\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_PW_EXPTIME:krb5-lrq-one-pw-exptime}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_PW_EXPTIME:krb5-lrq-one-pw-exptime-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_PW_EXPTIME::doc}}\index{KRB5\_LRQ\_ONE\_PW\_EXPTIME (built-in variable)} 20976 20977\begin{fulllineitems} 20978\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_PW_EXPTIME:KRB5_LRQ_ONE_PW_EXPTIME}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_PW\_EXPTIME}} 20979\end{fulllineitems} 20980 20981 20982 20983\begin{savenotes}\sphinxattablestart 20984\centering 20985\begin{tabulary}{\linewidth}[t]{|T|T|} 20986\hline 20987 20988\sphinxcode{KRB5\_LRQ\_ONE\_PW\_EXPTIME} 20989& 20990\sphinxcode{(-6)} 20991\\ 20992\hline 20993\end{tabulary} 20994\par 20995\sphinxattableend\end{savenotes} 20996 20997 20998\subsubsection{KRB5\_NT\_ENTERPRISE\_PRINCIPAL} 20999\label{\detokenize{appdev/refs/macros/KRB5_NT_ENTERPRISE_PRINCIPAL:krb5-nt-enterprise-principal-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_ENTERPRISE_PRINCIPAL:krb5-nt-enterprise-principal}}\label{\detokenize{appdev/refs/macros/KRB5_NT_ENTERPRISE_PRINCIPAL::doc}}\index{KRB5\_NT\_ENTERPRISE\_PRINCIPAL (built-in variable)} 21000 21001\begin{fulllineitems} 21002\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_ENTERPRISE_PRINCIPAL:KRB5_NT_ENTERPRISE_PRINCIPAL}}\pysigline{\sphinxbfcode{KRB5\_NT\_ENTERPRISE\_PRINCIPAL}} 21003\end{fulllineitems} 21004 21005 21006Windows 2000 UPN. 21007 21008 21009\begin{savenotes}\sphinxattablestart 21010\centering 21011\begin{tabulary}{\linewidth}[t]{|T|T|} 21012\hline 21013 21014\sphinxcode{KRB5\_NT\_ENTERPRISE\_PRINCIPAL} 21015& 21016\sphinxcode{10} 21017\\ 21018\hline 21019\end{tabulary} 21020\par 21021\sphinxattableend\end{savenotes} 21022 21023 21024\subsubsection{KRB5\_NT\_ENT\_PRINCIPAL\_AND\_ID} 21025\label{\detokenize{appdev/refs/macros/KRB5_NT_ENT_PRINCIPAL_AND_ID:krb5-nt-ent-principal-and-id-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_ENT_PRINCIPAL_AND_ID::doc}}\label{\detokenize{appdev/refs/macros/KRB5_NT_ENT_PRINCIPAL_AND_ID:krb5-nt-ent-principal-and-id}}\index{KRB5\_NT\_ENT\_PRINCIPAL\_AND\_ID (built-in variable)} 21026 21027\begin{fulllineitems} 21028\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_ENT_PRINCIPAL_AND_ID:KRB5_NT_ENT_PRINCIPAL_AND_ID}}\pysigline{\sphinxbfcode{KRB5\_NT\_ENT\_PRINCIPAL\_AND\_ID}} 21029\end{fulllineitems} 21030 21031 21032NT 4 style name and SID. 21033 21034 21035\begin{savenotes}\sphinxattablestart 21036\centering 21037\begin{tabulary}{\linewidth}[t]{|T|T|} 21038\hline 21039 21040\sphinxcode{KRB5\_NT\_ENT\_PRINCIPAL\_AND\_ID} 21041& 21042\sphinxcode{-130} 21043\\ 21044\hline 21045\end{tabulary} 21046\par 21047\sphinxattableend\end{savenotes} 21048 21049 21050\subsubsection{KRB5\_NT\_MS\_PRINCIPAL} 21051\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL:krb5-nt-ms-principal}}\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL:krb5-nt-ms-principal-data}}\index{KRB5\_NT\_MS\_PRINCIPAL (built-in variable)} 21052 21053\begin{fulllineitems} 21054\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL:KRB5_NT_MS_PRINCIPAL}}\pysigline{\sphinxbfcode{KRB5\_NT\_MS\_PRINCIPAL}} 21055\end{fulllineitems} 21056 21057 21058Windows 2000 UPN and SID. 21059 21060 21061\begin{savenotes}\sphinxattablestart 21062\centering 21063\begin{tabulary}{\linewidth}[t]{|T|T|} 21064\hline 21065 21066\sphinxcode{KRB5\_NT\_MS\_PRINCIPAL} 21067& 21068\sphinxcode{-128} 21069\\ 21070\hline 21071\end{tabulary} 21072\par 21073\sphinxattableend\end{savenotes} 21074 21075 21076\subsubsection{KRB5\_NT\_MS\_PRINCIPAL\_AND\_ID} 21077\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL_AND_ID:krb5-nt-ms-principal-and-id-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL_AND_ID::doc}}\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL_AND_ID:krb5-nt-ms-principal-and-id}}\index{KRB5\_NT\_MS\_PRINCIPAL\_AND\_ID (built-in variable)} 21078 21079\begin{fulllineitems} 21080\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL_AND_ID:KRB5_NT_MS_PRINCIPAL_AND_ID}}\pysigline{\sphinxbfcode{KRB5\_NT\_MS\_PRINCIPAL\_AND\_ID}} 21081\end{fulllineitems} 21082 21083 21084NT 4 style name. 21085 21086 21087\begin{savenotes}\sphinxattablestart 21088\centering 21089\begin{tabulary}{\linewidth}[t]{|T|T|} 21090\hline 21091 21092\sphinxcode{KRB5\_NT\_MS\_PRINCIPAL\_AND\_ID} 21093& 21094\sphinxcode{-129} 21095\\ 21096\hline 21097\end{tabulary} 21098\par 21099\sphinxattableend\end{savenotes} 21100 21101 21102\subsubsection{KRB5\_NT\_PRINCIPAL} 21103\label{\detokenize{appdev/refs/macros/KRB5_NT_PRINCIPAL:krb5-nt-principal}}\label{\detokenize{appdev/refs/macros/KRB5_NT_PRINCIPAL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_NT_PRINCIPAL:krb5-nt-principal-data}}\index{KRB5\_NT\_PRINCIPAL (built-in variable)} 21104 21105\begin{fulllineitems} 21106\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_PRINCIPAL:KRB5_NT_PRINCIPAL}}\pysigline{\sphinxbfcode{KRB5\_NT\_PRINCIPAL}} 21107\end{fulllineitems} 21108 21109 21110Just the name of the principal as in DCE, or for users. 21111 21112 21113\begin{savenotes}\sphinxattablestart 21114\centering 21115\begin{tabulary}{\linewidth}[t]{|T|T|} 21116\hline 21117 21118\sphinxcode{KRB5\_NT\_PRINCIPAL} 21119& 21120\sphinxcode{1} 21121\\ 21122\hline 21123\end{tabulary} 21124\par 21125\sphinxattableend\end{savenotes} 21126 21127 21128\subsubsection{KRB5\_NT\_SMTP\_NAME} 21129\label{\detokenize{appdev/refs/macros/KRB5_NT_SMTP_NAME:krb5-nt-smtp-name}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SMTP_NAME:krb5-nt-smtp-name-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SMTP_NAME::doc}}\index{KRB5\_NT\_SMTP\_NAME (built-in variable)} 21130 21131\begin{fulllineitems} 21132\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_SMTP_NAME:KRB5_NT_SMTP_NAME}}\pysigline{\sphinxbfcode{KRB5\_NT\_SMTP\_NAME}} 21133\end{fulllineitems} 21134 21135 21136Name in form of SMTP email name. 21137 21138 21139\begin{savenotes}\sphinxattablestart 21140\centering 21141\begin{tabulary}{\linewidth}[t]{|T|T|} 21142\hline 21143 21144\sphinxcode{KRB5\_NT\_SMTP\_NAME} 21145& 21146\sphinxcode{7} 21147\\ 21148\hline 21149\end{tabulary} 21150\par 21151\sphinxattableend\end{savenotes} 21152 21153 21154\subsubsection{KRB5\_NT\_SRV\_HST} 21155\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_HST:krb5-nt-srv-hst-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_HST::doc}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_HST:krb5-nt-srv-hst}}\index{KRB5\_NT\_SRV\_HST (built-in variable)} 21156 21157\begin{fulllineitems} 21158\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_HST:KRB5_NT_SRV_HST}}\pysigline{\sphinxbfcode{KRB5\_NT\_SRV\_HST}} 21159\end{fulllineitems} 21160 21161 21162Service with host name as instance (telnet, rcommands) 21163 21164 21165\begin{savenotes}\sphinxattablestart 21166\centering 21167\begin{tabulary}{\linewidth}[t]{|T|T|} 21168\hline 21169 21170\sphinxcode{KRB5\_NT\_SRV\_HST} 21171& 21172\sphinxcode{3} 21173\\ 21174\hline 21175\end{tabulary} 21176\par 21177\sphinxattableend\end{savenotes} 21178 21179 21180\subsubsection{KRB5\_NT\_SRV\_INST} 21181\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_INST:krb5-nt-srv-inst-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_INST::doc}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_INST:krb5-nt-srv-inst}}\index{KRB5\_NT\_SRV\_INST (built-in variable)} 21182 21183\begin{fulllineitems} 21184\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_INST:KRB5_NT_SRV_INST}}\pysigline{\sphinxbfcode{KRB5\_NT\_SRV\_INST}} 21185\end{fulllineitems} 21186 21187 21188Service and other unique instance (krbtgt) 21189 21190 21191\begin{savenotes}\sphinxattablestart 21192\centering 21193\begin{tabulary}{\linewidth}[t]{|T|T|} 21194\hline 21195 21196\sphinxcode{KRB5\_NT\_SRV\_INST} 21197& 21198\sphinxcode{2} 21199\\ 21200\hline 21201\end{tabulary} 21202\par 21203\sphinxattableend\end{savenotes} 21204 21205 21206\subsubsection{KRB5\_NT\_SRV\_XHST} 21207\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_XHST:krb5-nt-srv-xhst}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_XHST:krb5-nt-srv-xhst-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_XHST::doc}}\index{KRB5\_NT\_SRV\_XHST (built-in variable)} 21208 21209\begin{fulllineitems} 21210\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_XHST:KRB5_NT_SRV_XHST}}\pysigline{\sphinxbfcode{KRB5\_NT\_SRV\_XHST}} 21211\end{fulllineitems} 21212 21213 21214Service with host as remaining components. 21215 21216 21217\begin{savenotes}\sphinxattablestart 21218\centering 21219\begin{tabulary}{\linewidth}[t]{|T|T|} 21220\hline 21221 21222\sphinxcode{KRB5\_NT\_SRV\_XHST} 21223& 21224\sphinxcode{4} 21225\\ 21226\hline 21227\end{tabulary} 21228\par 21229\sphinxattableend\end{savenotes} 21230 21231 21232\subsubsection{KRB5\_NT\_UID} 21233\label{\detokenize{appdev/refs/macros/KRB5_NT_UID:krb5-nt-uid}}\label{\detokenize{appdev/refs/macros/KRB5_NT_UID:krb5-nt-uid-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_UID::doc}}\index{KRB5\_NT\_UID (built-in variable)} 21234 21235\begin{fulllineitems} 21236\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_UID:KRB5_NT_UID}}\pysigline{\sphinxbfcode{KRB5\_NT\_UID}} 21237\end{fulllineitems} 21238 21239 21240Unique ID. 21241 21242 21243\begin{savenotes}\sphinxattablestart 21244\centering 21245\begin{tabulary}{\linewidth}[t]{|T|T|} 21246\hline 21247 21248\sphinxcode{KRB5\_NT\_UID} 21249& 21250\sphinxcode{5} 21251\\ 21252\hline 21253\end{tabulary} 21254\par 21255\sphinxattableend\end{savenotes} 21256 21257 21258\subsubsection{KRB5\_NT\_UNKNOWN} 21259\label{\detokenize{appdev/refs/macros/KRB5_NT_UNKNOWN::doc}}\label{\detokenize{appdev/refs/macros/KRB5_NT_UNKNOWN:krb5-nt-unknown}}\label{\detokenize{appdev/refs/macros/KRB5_NT_UNKNOWN:krb5-nt-unknown-data}}\index{KRB5\_NT\_UNKNOWN (built-in variable)} 21260 21261\begin{fulllineitems} 21262\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_UNKNOWN:KRB5_NT_UNKNOWN}}\pysigline{\sphinxbfcode{KRB5\_NT\_UNKNOWN}} 21263\end{fulllineitems} 21264 21265 21266Name type not known. 21267 21268 21269\begin{savenotes}\sphinxattablestart 21270\centering 21271\begin{tabulary}{\linewidth}[t]{|T|T|} 21272\hline 21273 21274\sphinxcode{KRB5\_NT\_UNKNOWN} 21275& 21276\sphinxcode{0} 21277\\ 21278\hline 21279\end{tabulary} 21280\par 21281\sphinxattableend\end{savenotes} 21282 21283 21284\subsubsection{KRB5\_NT\_WELLKNOWN} 21285\label{\detokenize{appdev/refs/macros/KRB5_NT_WELLKNOWN:krb5-nt-wellknown-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_WELLKNOWN:krb5-nt-wellknown}}\label{\detokenize{appdev/refs/macros/KRB5_NT_WELLKNOWN::doc}}\index{KRB5\_NT\_WELLKNOWN (built-in variable)} 21286 21287\begin{fulllineitems} 21288\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_WELLKNOWN:KRB5_NT_WELLKNOWN}}\pysigline{\sphinxbfcode{KRB5\_NT\_WELLKNOWN}} 21289\end{fulllineitems} 21290 21291 21292Well-known (special) principal. 21293 21294 21295\begin{savenotes}\sphinxattablestart 21296\centering 21297\begin{tabulary}{\linewidth}[t]{|T|T|} 21298\hline 21299 21300\sphinxcode{KRB5\_NT\_WELLKNOWN} 21301& 21302\sphinxcode{11} 21303\\ 21304\hline 21305\end{tabulary} 21306\par 21307\sphinxattableend\end{savenotes} 21308 21309 21310\subsubsection{KRB5\_NT\_X500\_PRINCIPAL} 21311\label{\detokenize{appdev/refs/macros/KRB5_NT_X500_PRINCIPAL:krb5-nt-x500-principal-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_X500_PRINCIPAL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_NT_X500_PRINCIPAL:krb5-nt-x500-principal}}\index{KRB5\_NT\_X500\_PRINCIPAL (built-in variable)} 21312 21313\begin{fulllineitems} 21314\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_X500_PRINCIPAL:KRB5_NT_X500_PRINCIPAL}}\pysigline{\sphinxbfcode{KRB5\_NT\_X500\_PRINCIPAL}} 21315\end{fulllineitems} 21316 21317 21318PKINIT. 21319 21320 21321\begin{savenotes}\sphinxattablestart 21322\centering 21323\begin{tabulary}{\linewidth}[t]{|T|T|} 21324\hline 21325 21326\sphinxcode{KRB5\_NT\_X500\_PRINCIPAL} 21327& 21328\sphinxcode{6} 21329\\ 21330\hline 21331\end{tabulary} 21332\par 21333\sphinxattableend\end{savenotes} 21334 21335 21336\subsubsection{KRB5\_PAC\_CLIENT\_INFO} 21337\label{\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_INFO:krb5-pac-client-info}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_INFO::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_INFO:krb5-pac-client-info-data}}\index{KRB5\_PAC\_CLIENT\_INFO (built-in variable)} 21338 21339\begin{fulllineitems} 21340\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_INFO:KRB5_PAC_CLIENT_INFO}}\pysigline{\sphinxbfcode{KRB5\_PAC\_CLIENT\_INFO}} 21341\end{fulllineitems} 21342 21343 21344Client name and ticket info. 21345 21346 21347\begin{savenotes}\sphinxattablestart 21348\centering 21349\begin{tabulary}{\linewidth}[t]{|T|T|} 21350\hline 21351 21352\sphinxcode{KRB5\_PAC\_CLIENT\_INFO} 21353& 21354\sphinxcode{10} 21355\\ 21356\hline 21357\end{tabulary} 21358\par 21359\sphinxattableend\end{savenotes} 21360 21361 21362\subsubsection{KRB5\_PAC\_CREDENTIALS\_INFO} 21363\label{\detokenize{appdev/refs/macros/KRB5_PAC_CREDENTIALS_INFO::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_CREDENTIALS_INFO:krb5-pac-credentials-info}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_CREDENTIALS_INFO:krb5-pac-credentials-info-data}}\index{KRB5\_PAC\_CREDENTIALS\_INFO (built-in variable)} 21364 21365\begin{fulllineitems} 21366\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_CREDENTIALS_INFO:KRB5_PAC_CREDENTIALS_INFO}}\pysigline{\sphinxbfcode{KRB5\_PAC\_CREDENTIALS\_INFO}} 21367\end{fulllineitems} 21368 21369 21370Credentials information. 21371 21372 21373\begin{savenotes}\sphinxattablestart 21374\centering 21375\begin{tabulary}{\linewidth}[t]{|T|T|} 21376\hline 21377 21378\sphinxcode{KRB5\_PAC\_CREDENTIALS\_INFO} 21379& 21380\sphinxcode{2} 21381\\ 21382\hline 21383\end{tabulary} 21384\par 21385\sphinxattableend\end{savenotes} 21386 21387 21388\subsubsection{KRB5\_PAC\_DELEGATION\_INFO} 21389\label{\detokenize{appdev/refs/macros/KRB5_PAC_DELEGATION_INFO::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_DELEGATION_INFO:krb5-pac-delegation-info-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_DELEGATION_INFO:krb5-pac-delegation-info}}\index{KRB5\_PAC\_DELEGATION\_INFO (built-in variable)} 21390 21391\begin{fulllineitems} 21392\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_DELEGATION_INFO:KRB5_PAC_DELEGATION_INFO}}\pysigline{\sphinxbfcode{KRB5\_PAC\_DELEGATION\_INFO}} 21393\end{fulllineitems} 21394 21395 21396Constrained delegation info. 21397 21398 21399\begin{savenotes}\sphinxattablestart 21400\centering 21401\begin{tabulary}{\linewidth}[t]{|T|T|} 21402\hline 21403 21404\sphinxcode{KRB5\_PAC\_DELEGATION\_INFO} 21405& 21406\sphinxcode{11} 21407\\ 21408\hline 21409\end{tabulary} 21410\par 21411\sphinxattableend\end{savenotes} 21412 21413 21414\subsubsection{KRB5\_PAC\_LOGON\_INFO} 21415\label{\detokenize{appdev/refs/macros/KRB5_PAC_LOGON_INFO:krb5-pac-logon-info}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_LOGON_INFO:krb5-pac-logon-info-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_LOGON_INFO::doc}}\index{KRB5\_PAC\_LOGON\_INFO (built-in variable)} 21416 21417\begin{fulllineitems} 21418\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_LOGON_INFO:KRB5_PAC_LOGON_INFO}}\pysigline{\sphinxbfcode{KRB5\_PAC\_LOGON\_INFO}} 21419\end{fulllineitems} 21420 21421 21422Logon information. 21423 21424 21425\begin{savenotes}\sphinxattablestart 21426\centering 21427\begin{tabulary}{\linewidth}[t]{|T|T|} 21428\hline 21429 21430\sphinxcode{KRB5\_PAC\_LOGON\_INFO} 21431& 21432\sphinxcode{1} 21433\\ 21434\hline 21435\end{tabulary} 21436\par 21437\sphinxattableend\end{savenotes} 21438 21439 21440\subsubsection{KRB5\_PAC\_PRIVSVR\_CHECKSUM} 21441\label{\detokenize{appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM:krb5-pac-privsvr-checksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM:krb5-pac-privsvr-checksum}}\index{KRB5\_PAC\_PRIVSVR\_CHECKSUM (built-in variable)} 21442 21443\begin{fulllineitems} 21444\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM:KRB5_PAC_PRIVSVR_CHECKSUM}}\pysigline{\sphinxbfcode{KRB5\_PAC\_PRIVSVR\_CHECKSUM}} 21445\end{fulllineitems} 21446 21447 21448KDC checksum. 21449 21450 21451\begin{savenotes}\sphinxattablestart 21452\centering 21453\begin{tabulary}{\linewidth}[t]{|T|T|} 21454\hline 21455 21456\sphinxcode{KRB5\_PAC\_PRIVSVR\_CHECKSUM} 21457& 21458\sphinxcode{7} 21459\\ 21460\hline 21461\end{tabulary} 21462\par 21463\sphinxattableend\end{savenotes} 21464 21465 21466\subsubsection{KRB5\_PAC\_SERVER\_CHECKSUM} 21467\label{\detokenize{appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM:krb5-pac-server-checksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM:krb5-pac-server-checksum}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM::doc}}\index{KRB5\_PAC\_SERVER\_CHECKSUM (built-in variable)} 21468 21469\begin{fulllineitems} 21470\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM:KRB5_PAC_SERVER_CHECKSUM}}\pysigline{\sphinxbfcode{KRB5\_PAC\_SERVER\_CHECKSUM}} 21471\end{fulllineitems} 21472 21473 21474Server checksum. 21475 21476 21477\begin{savenotes}\sphinxattablestart 21478\centering 21479\begin{tabulary}{\linewidth}[t]{|T|T|} 21480\hline 21481 21482\sphinxcode{KRB5\_PAC\_SERVER\_CHECKSUM} 21483& 21484\sphinxcode{6} 21485\\ 21486\hline 21487\end{tabulary} 21488\par 21489\sphinxattableend\end{savenotes} 21490 21491 21492\subsubsection{KRB5\_PAC\_UPN\_DNS\_INFO} 21493\label{\detokenize{appdev/refs/macros/KRB5_PAC_UPN_DNS_INFO:krb5-pac-upn-dns-info-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_UPN_DNS_INFO::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_UPN_DNS_INFO:krb5-pac-upn-dns-info}}\index{KRB5\_PAC\_UPN\_DNS\_INFO (built-in variable)} 21494 21495\begin{fulllineitems} 21496\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_UPN_DNS_INFO:KRB5_PAC_UPN_DNS_INFO}}\pysigline{\sphinxbfcode{KRB5\_PAC\_UPN\_DNS\_INFO}} 21497\end{fulllineitems} 21498 21499 21500User principal name and DNS info. 21501 21502 21503\begin{savenotes}\sphinxattablestart 21504\centering 21505\begin{tabulary}{\linewidth}[t]{|T|T|} 21506\hline 21507 21508\sphinxcode{KRB5\_PAC\_UPN\_DNS\_INFO} 21509& 21510\sphinxcode{12} 21511\\ 21512\hline 21513\end{tabulary} 21514\par 21515\sphinxattableend\end{savenotes} 21516 21517 21518\subsubsection{KRB5\_PADATA\_AFS3\_SALT} 21519\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AFS3_SALT::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AFS3_SALT:krb5-padata-afs3-salt}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AFS3_SALT:krb5-padata-afs3-salt-data}}\index{KRB5\_PADATA\_AFS3\_SALT (built-in variable)} 21520 21521\begin{fulllineitems} 21522\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AFS3_SALT:KRB5_PADATA_AFS3_SALT}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_AFS3\_SALT}} 21523\end{fulllineitems} 21524 21525 21526Cygnus. 21527 21528RFC 4120, 3961 21529 21530 21531\begin{savenotes}\sphinxattablestart 21532\centering 21533\begin{tabulary}{\linewidth}[t]{|T|T|} 21534\hline 21535 21536\sphinxcode{KRB5\_PADATA\_AFS3\_SALT} 21537& 21538\sphinxcode{10} 21539\\ 21540\hline 21541\end{tabulary} 21542\par 21543\sphinxattableend\end{savenotes} 21544 21545 21546\subsubsection{KRB5\_PADATA\_AP\_REQ} 21547\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AP_REQ::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AP_REQ:krb5-padata-ap-req-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AP_REQ:krb5-padata-ap-req}}\index{KRB5\_PADATA\_AP\_REQ (built-in variable)} 21548 21549\begin{fulllineitems} 21550\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AP_REQ:KRB5_PADATA_AP_REQ}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_AP\_REQ}} 21551\end{fulllineitems} 21552 21553 21554 21555\begin{savenotes}\sphinxattablestart 21556\centering 21557\begin{tabulary}{\linewidth}[t]{|T|T|} 21558\hline 21559 21560\sphinxcode{KRB5\_PADATA\_AP\_REQ} 21561& 21562\sphinxcode{1} 21563\\ 21564\hline 21565\end{tabulary} 21566\par 21567\sphinxattableend\end{savenotes} 21568 21569 21570\subsubsection{KRB5\_PADATA\_AS\_CHECKSUM} 21571\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_CHECKSUM:krb5-padata-as-checksum}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_CHECKSUM:krb5-padata-as-checksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_CHECKSUM::doc}}\index{KRB5\_PADATA\_AS\_CHECKSUM (built-in variable)} 21572 21573\begin{fulllineitems} 21574\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_CHECKSUM:KRB5_PADATA_AS_CHECKSUM}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_AS\_CHECKSUM}} 21575\end{fulllineitems} 21576 21577 21578AS checksum. 21579 21580 21581\begin{savenotes}\sphinxattablestart 21582\centering 21583\begin{tabulary}{\linewidth}[t]{|T|T|} 21584\hline 21585 21586\sphinxcode{KRB5\_PADATA\_AS\_CHECKSUM} 21587& 21588\sphinxcode{132} 21589\\ 21590\hline 21591\end{tabulary} 21592\par 21593\sphinxattableend\end{savenotes} 21594 21595 21596\subsubsection{KRB5\_PADATA\_AS\_FRESHNESS} 21597\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_FRESHNESS::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_FRESHNESS:krb5-padata-as-freshness-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_FRESHNESS:krb5-padata-as-freshness}}\index{KRB5\_PADATA\_AS\_FRESHNESS (built-in variable)} 21598 21599\begin{fulllineitems} 21600\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_FRESHNESS:KRB5_PADATA_AS_FRESHNESS}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_AS\_FRESHNESS}} 21601\end{fulllineitems} 21602 21603 21604RFC 8070. 21605 21606 21607\begin{savenotes}\sphinxattablestart 21608\centering 21609\begin{tabulary}{\linewidth}[t]{|T|T|} 21610\hline 21611 21612\sphinxcode{KRB5\_PADATA\_AS\_FRESHNESS} 21613& 21614\sphinxcode{150} 21615\\ 21616\hline 21617\end{tabulary} 21618\par 21619\sphinxattableend\end{savenotes} 21620 21621 21622\subsubsection{KRB5\_PADATA\_ENCRYPTED\_CHALLENGE} 21623\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENCRYPTED_CHALLENGE:krb5-padata-encrypted-challenge-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENCRYPTED_CHALLENGE:krb5-padata-encrypted-challenge}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENCRYPTED_CHALLENGE::doc}}\index{KRB5\_PADATA\_ENCRYPTED\_CHALLENGE (built-in variable)} 21624 21625\begin{fulllineitems} 21626\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENCRYPTED_CHALLENGE:KRB5_PADATA_ENCRYPTED_CHALLENGE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_ENCRYPTED\_CHALLENGE}} 21627\end{fulllineitems} 21628 21629 21630RFC 6113. 21631 21632 21633\begin{savenotes}\sphinxattablestart 21634\centering 21635\begin{tabulary}{\linewidth}[t]{|T|T|} 21636\hline 21637 21638\sphinxcode{KRB5\_PADATA\_ENCRYPTED\_CHALLENGE} 21639& 21640\sphinxcode{138} 21641\\ 21642\hline 21643\end{tabulary} 21644\par 21645\sphinxattableend\end{savenotes} 21646 21647 21648\subsubsection{KRB5\_PADATA\_ENC\_SANDIA\_SECURID} 21649\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_SANDIA_SECURID:krb5-padata-enc-sandia-securid-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_SANDIA_SECURID:krb5-padata-enc-sandia-securid}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_SANDIA_SECURID::doc}}\index{KRB5\_PADATA\_ENC\_SANDIA\_SECURID (built-in variable)} 21650 21651\begin{fulllineitems} 21652\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_SANDIA_SECURID:KRB5_PADATA_ENC_SANDIA_SECURID}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_ENC\_SANDIA\_SECURID}} 21653\end{fulllineitems} 21654 21655 21656SecurId passcode. 21657 21658RFC 4120 21659 21660 21661\begin{savenotes}\sphinxattablestart 21662\centering 21663\begin{tabulary}{\linewidth}[t]{|T|T|} 21664\hline 21665 21666\sphinxcode{KRB5\_PADATA\_ENC\_SANDIA\_SECURID} 21667& 21668\sphinxcode{6} 21669\\ 21670\hline 21671\end{tabulary} 21672\par 21673\sphinxattableend\end{savenotes} 21674 21675 21676\subsubsection{KRB5\_PADATA\_ENC\_TIMESTAMP} 21677\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_TIMESTAMP::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_TIMESTAMP:krb5-padata-enc-timestamp}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_TIMESTAMP:krb5-padata-enc-timestamp-data}}\index{KRB5\_PADATA\_ENC\_TIMESTAMP (built-in variable)} 21678 21679\begin{fulllineitems} 21680\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_TIMESTAMP:KRB5_PADATA_ENC_TIMESTAMP}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_ENC\_TIMESTAMP}} 21681\end{fulllineitems} 21682 21683 21684RFC 4120. 21685 21686 21687\begin{savenotes}\sphinxattablestart 21688\centering 21689\begin{tabulary}{\linewidth}[t]{|T|T|} 21690\hline 21691 21692\sphinxcode{KRB5\_PADATA\_ENC\_TIMESTAMP} 21693& 21694\sphinxcode{2} 21695\\ 21696\hline 21697\end{tabulary} 21698\par 21699\sphinxattableend\end{savenotes} 21700 21701 21702\subsubsection{KRB5\_PADATA\_ENC\_UNIX\_TIME} 21703\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_UNIX_TIME:krb5-padata-enc-unix-time}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_UNIX_TIME:krb5-padata-enc-unix-time-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_UNIX_TIME::doc}}\index{KRB5\_PADATA\_ENC\_UNIX\_TIME (built-in variable)} 21704 21705\begin{fulllineitems} 21706\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_UNIX_TIME:KRB5_PADATA_ENC_UNIX_TIME}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_ENC\_UNIX\_TIME}} 21707\end{fulllineitems} 21708 21709 21710timestamp encrypted in key. 21711 21712RFC 4120 21713 21714 21715\begin{savenotes}\sphinxattablestart 21716\centering 21717\begin{tabulary}{\linewidth}[t]{|T|T|} 21718\hline 21719 21720\sphinxcode{KRB5\_PADATA\_ENC\_UNIX\_TIME} 21721& 21722\sphinxcode{5} 21723\\ 21724\hline 21725\end{tabulary} 21726\par 21727\sphinxattableend\end{savenotes} 21728 21729 21730\subsubsection{KRB5\_PADATA\_ETYPE\_INFO} 21731\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO:krb5-padata-etype-info}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO:krb5-padata-etype-info-data}}\index{KRB5\_PADATA\_ETYPE\_INFO (built-in variable)} 21732 21733\begin{fulllineitems} 21734\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO:KRB5_PADATA_ETYPE_INFO}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_ETYPE\_INFO}} 21735\end{fulllineitems} 21736 21737 21738Etype info for preauth. 21739 21740RFC 4120 21741 21742 21743\begin{savenotes}\sphinxattablestart 21744\centering 21745\begin{tabulary}{\linewidth}[t]{|T|T|} 21746\hline 21747 21748\sphinxcode{KRB5\_PADATA\_ETYPE\_INFO} 21749& 21750\sphinxcode{11} 21751\\ 21752\hline 21753\end{tabulary} 21754\par 21755\sphinxattableend\end{savenotes} 21756 21757 21758\subsubsection{KRB5\_PADATA\_ETYPE\_INFO2} 21759\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO2:krb5-padata-etype-info2-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO2:krb5-padata-etype-info2}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO2::doc}}\index{KRB5\_PADATA\_ETYPE\_INFO2 (built-in variable)} 21760 21761\begin{fulllineitems} 21762\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO2:KRB5_PADATA_ETYPE_INFO2}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_ETYPE\_INFO2}} 21763\end{fulllineitems} 21764 21765 21766RFC 4120. 21767 21768 21769\begin{savenotes}\sphinxattablestart 21770\centering 21771\begin{tabulary}{\linewidth}[t]{|T|T|} 21772\hline 21773 21774\sphinxcode{KRB5\_PADATA\_ETYPE\_INFO2} 21775& 21776\sphinxcode{19} 21777\\ 21778\hline 21779\end{tabulary} 21780\par 21781\sphinxattableend\end{savenotes} 21782 21783 21784\subsubsection{KRB5\_PADATA\_FOR\_USER} 21785\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FOR_USER:krb5-padata-for-user}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FOR_USER::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FOR_USER:krb5-padata-for-user-data}}\index{KRB5\_PADATA\_FOR\_USER (built-in variable)} 21786 21787\begin{fulllineitems} 21788\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FOR_USER:KRB5_PADATA_FOR_USER}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_FOR\_USER}} 21789\end{fulllineitems} 21790 21791 21792username protocol transition request 21793 21794 21795\begin{savenotes}\sphinxattablestart 21796\centering 21797\begin{tabulary}{\linewidth}[t]{|T|T|} 21798\hline 21799 21800\sphinxcode{KRB5\_PADATA\_FOR\_USER} 21801& 21802\sphinxcode{129} 21803\\ 21804\hline 21805\end{tabulary} 21806\par 21807\sphinxattableend\end{savenotes} 21808 21809 21810\subsubsection{KRB5\_PADATA\_FX\_COOKIE} 21811\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_COOKIE:krb5-padata-fx-cookie}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_COOKIE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_COOKIE:krb5-padata-fx-cookie-data}}\index{KRB5\_PADATA\_FX\_COOKIE (built-in variable)} 21812 21813\begin{fulllineitems} 21814\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_COOKIE:KRB5_PADATA_FX_COOKIE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_FX\_COOKIE}} 21815\end{fulllineitems} 21816 21817 21818RFC 6113. 21819 21820 21821\begin{savenotes}\sphinxattablestart 21822\centering 21823\begin{tabulary}{\linewidth}[t]{|T|T|} 21824\hline 21825 21826\sphinxcode{KRB5\_PADATA\_FX\_COOKIE} 21827& 21828\sphinxcode{133} 21829\\ 21830\hline 21831\end{tabulary} 21832\par 21833\sphinxattableend\end{savenotes} 21834 21835 21836\subsubsection{KRB5\_PADATA\_FX\_ERROR} 21837\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_ERROR:krb5-padata-fx-error}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_ERROR::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_ERROR:krb5-padata-fx-error-data}}\index{KRB5\_PADATA\_FX\_ERROR (built-in variable)} 21838 21839\begin{fulllineitems} 21840\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_ERROR:KRB5_PADATA_FX_ERROR}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_FX\_ERROR}} 21841\end{fulllineitems} 21842 21843 21844RFC 6113. 21845 21846 21847\begin{savenotes}\sphinxattablestart 21848\centering 21849\begin{tabulary}{\linewidth}[t]{|T|T|} 21850\hline 21851 21852\sphinxcode{KRB5\_PADATA\_FX\_ERROR} 21853& 21854\sphinxcode{137} 21855\\ 21856\hline 21857\end{tabulary} 21858\par 21859\sphinxattableend\end{savenotes} 21860 21861 21862\subsubsection{KRB5\_PADATA\_FX\_FAST} 21863\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_FAST::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_FAST:krb5-padata-fx-fast}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_FAST:krb5-padata-fx-fast-data}}\index{KRB5\_PADATA\_FX\_FAST (built-in variable)} 21864 21865\begin{fulllineitems} 21866\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_FAST:KRB5_PADATA_FX_FAST}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_FX\_FAST}} 21867\end{fulllineitems} 21868 21869 21870RFC 6113. 21871 21872 21873\begin{savenotes}\sphinxattablestart 21874\centering 21875\begin{tabulary}{\linewidth}[t]{|T|T|} 21876\hline 21877 21878\sphinxcode{KRB5\_PADATA\_FX\_FAST} 21879& 21880\sphinxcode{136} 21881\\ 21882\hline 21883\end{tabulary} 21884\par 21885\sphinxattableend\end{savenotes} 21886 21887 21888\subsubsection{KRB5\_PADATA\_GET\_FROM\_TYPED\_DATA} 21889\label{\detokenize{appdev/refs/macros/KRB5_PADATA_GET_FROM_TYPED_DATA:krb5-padata-get-from-typed-data-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_GET_FROM_TYPED_DATA::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_GET_FROM_TYPED_DATA:krb5-padata-get-from-typed-data}}\index{KRB5\_PADATA\_GET\_FROM\_TYPED\_DATA (built-in variable)} 21890 21891\begin{fulllineitems} 21892\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_GET_FROM_TYPED_DATA:KRB5_PADATA_GET_FROM_TYPED_DATA}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_GET\_FROM\_TYPED\_DATA}} 21893\end{fulllineitems} 21894 21895 21896Embedded in typed data. 21897 21898RFC 4120 21899 21900 21901\begin{savenotes}\sphinxattablestart 21902\centering 21903\begin{tabulary}{\linewidth}[t]{|T|T|} 21904\hline 21905 21906\sphinxcode{KRB5\_PADATA\_GET\_FROM\_TYPED\_DATA} 21907& 21908\sphinxcode{22} 21909\\ 21910\hline 21911\end{tabulary} 21912\par 21913\sphinxattableend\end{savenotes} 21914 21915 21916\subsubsection{KRB5\_PADATA\_NONE} 21917\label{\detokenize{appdev/refs/macros/KRB5_PADATA_NONE:krb5-padata-none-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_NONE:krb5-padata-none}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_NONE::doc}}\index{KRB5\_PADATA\_NONE (built-in variable)} 21918 21919\begin{fulllineitems} 21920\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_NONE:KRB5_PADATA_NONE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_NONE}} 21921\end{fulllineitems} 21922 21923 21924 21925\begin{savenotes}\sphinxattablestart 21926\centering 21927\begin{tabulary}{\linewidth}[t]{|T|T|} 21928\hline 21929 21930\sphinxcode{KRB5\_PADATA\_NONE} 21931& 21932\sphinxcode{0} 21933\\ 21934\hline 21935\end{tabulary} 21936\par 21937\sphinxattableend\end{savenotes} 21938 21939 21940\subsubsection{KRB5\_PADATA\_OSF\_DCE} 21941\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OSF_DCE:krb5-padata-osf-dce}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OSF_DCE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OSF_DCE:krb5-padata-osf-dce-data}}\index{KRB5\_PADATA\_OSF\_DCE (built-in variable)} 21942 21943\begin{fulllineitems} 21944\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OSF_DCE:KRB5_PADATA_OSF_DCE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_OSF\_DCE}} 21945\end{fulllineitems} 21946 21947 21948OSF DCE. 21949 21950RFC 4120 21951 21952 21953\begin{savenotes}\sphinxattablestart 21954\centering 21955\begin{tabulary}{\linewidth}[t]{|T|T|} 21956\hline 21957 21958\sphinxcode{KRB5\_PADATA\_OSF\_DCE} 21959& 21960\sphinxcode{8} 21961\\ 21962\hline 21963\end{tabulary} 21964\par 21965\sphinxattableend\end{savenotes} 21966 21967 21968\subsubsection{KRB5\_PADATA\_OTP\_CHALLENGE} 21969\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_CHALLENGE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_CHALLENGE:krb5-padata-otp-challenge}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_CHALLENGE:krb5-padata-otp-challenge-data}}\index{KRB5\_PADATA\_OTP\_CHALLENGE (built-in variable)} 21970 21971\begin{fulllineitems} 21972\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_CHALLENGE:KRB5_PADATA_OTP_CHALLENGE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_OTP\_CHALLENGE}} 21973\end{fulllineitems} 21974 21975 21976RFC 6560 section 4.1. 21977 21978 21979\begin{savenotes}\sphinxattablestart 21980\centering 21981\begin{tabulary}{\linewidth}[t]{|T|T|} 21982\hline 21983 21984\sphinxcode{KRB5\_PADATA\_OTP\_CHALLENGE} 21985& 21986\sphinxcode{141} 21987\\ 21988\hline 21989\end{tabulary} 21990\par 21991\sphinxattableend\end{savenotes} 21992 21993 21994\subsubsection{KRB5\_PADATA\_OTP\_PIN\_CHANGE} 21995\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_PIN_CHANGE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_PIN_CHANGE:krb5-padata-otp-pin-change}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_PIN_CHANGE:krb5-padata-otp-pin-change-data}}\index{KRB5\_PADATA\_OTP\_PIN\_CHANGE (built-in variable)} 21996 21997\begin{fulllineitems} 21998\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_PIN_CHANGE:KRB5_PADATA_OTP_PIN_CHANGE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_OTP\_PIN\_CHANGE}} 21999\end{fulllineitems} 22000 22001 22002RFC 6560 section 4.3. 22003 22004 22005\begin{savenotes}\sphinxattablestart 22006\centering 22007\begin{tabulary}{\linewidth}[t]{|T|T|} 22008\hline 22009 22010\sphinxcode{KRB5\_PADATA\_OTP\_PIN\_CHANGE} 22011& 22012\sphinxcode{144} 22013\\ 22014\hline 22015\end{tabulary} 22016\par 22017\sphinxattableend\end{savenotes} 22018 22019 22020\subsubsection{KRB5\_PADATA\_OTP\_REQUEST} 22021\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_REQUEST:krb5-padata-otp-request}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_REQUEST::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_REQUEST:krb5-padata-otp-request-data}}\index{KRB5\_PADATA\_OTP\_REQUEST (built-in variable)} 22022 22023\begin{fulllineitems} 22024\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_REQUEST:KRB5_PADATA_OTP_REQUEST}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_OTP\_REQUEST}} 22025\end{fulllineitems} 22026 22027 22028RFC 6560 section 4.2. 22029 22030 22031\begin{savenotes}\sphinxattablestart 22032\centering 22033\begin{tabulary}{\linewidth}[t]{|T|T|} 22034\hline 22035 22036\sphinxcode{KRB5\_PADATA\_OTP\_REQUEST} 22037& 22038\sphinxcode{142} 22039\\ 22040\hline 22041\end{tabulary} 22042\par 22043\sphinxattableend\end{savenotes} 22044 22045 22046\subsubsection{KRB5\_PADATA\_PAC\_OPTIONS} 22047\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_OPTIONS::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_OPTIONS:krb5-padata-pac-options}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_OPTIONS:krb5-padata-pac-options-data}}\index{KRB5\_PADATA\_PAC\_OPTIONS (built-in variable)} 22048 22049\begin{fulllineitems} 22050\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_OPTIONS:KRB5_PADATA_PAC_OPTIONS}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PAC\_OPTIONS}} 22051\end{fulllineitems} 22052 22053 22054MS-KILE and MS-SFU. 22055 22056 22057\begin{savenotes}\sphinxattablestart 22058\centering 22059\begin{tabulary}{\linewidth}[t]{|T|T|} 22060\hline 22061 22062\sphinxcode{KRB5\_PADATA\_PAC\_OPTIONS} 22063& 22064\sphinxcode{167} 22065\\ 22066\hline 22067\end{tabulary} 22068\par 22069\sphinxattableend\end{savenotes} 22070 22071 22072\subsubsection{KRB5\_PADATA\_PAC\_REQUEST} 22073\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_REQUEST:krb5-padata-pac-request-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_REQUEST:krb5-padata-pac-request}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_REQUEST::doc}}\index{KRB5\_PADATA\_PAC\_REQUEST (built-in variable)} 22074 22075\begin{fulllineitems} 22076\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_REQUEST:KRB5_PADATA_PAC_REQUEST}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PAC\_REQUEST}} 22077\end{fulllineitems} 22078 22079 22080include Windows PAC 22081 22082 22083\begin{savenotes}\sphinxattablestart 22084\centering 22085\begin{tabulary}{\linewidth}[t]{|T|T|} 22086\hline 22087 22088\sphinxcode{KRB5\_PADATA\_PAC\_REQUEST} 22089& 22090\sphinxcode{128} 22091\\ 22092\hline 22093\end{tabulary} 22094\par 22095\sphinxattableend\end{savenotes} 22096 22097 22098\subsubsection{KRB5\_PADATA\_PKINIT\_KX} 22099\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PKINIT_KX:krb5-padata-pkinit-kx}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PKINIT_KX:krb5-padata-pkinit-kx-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PKINIT_KX::doc}}\index{KRB5\_PADATA\_PKINIT\_KX (built-in variable)} 22100 22101\begin{fulllineitems} 22102\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PKINIT_KX:KRB5_PADATA_PKINIT_KX}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PKINIT\_KX}} 22103\end{fulllineitems} 22104 22105 22106RFC 6112. 22107 22108 22109\begin{savenotes}\sphinxattablestart 22110\centering 22111\begin{tabulary}{\linewidth}[t]{|T|T|} 22112\hline 22113 22114\sphinxcode{KRB5\_PADATA\_PKINIT\_KX} 22115& 22116\sphinxcode{147} 22117\\ 22118\hline 22119\end{tabulary} 22120\par 22121\sphinxattableend\end{savenotes} 22122 22123 22124\subsubsection{KRB5\_PADATA\_PK\_AS\_REP} 22125\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP:krb5-padata-pk-as-rep-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP:krb5-padata-pk-as-rep}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP::doc}}\index{KRB5\_PADATA\_PK\_AS\_REP (built-in variable)} 22126 22127\begin{fulllineitems} 22128\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP:KRB5_PADATA_PK_AS_REP}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PK\_AS\_REP}} 22129\end{fulllineitems} 22130 22131 22132PKINIT. 22133 22134RFC 4556 22135 22136 22137\begin{savenotes}\sphinxattablestart 22138\centering 22139\begin{tabulary}{\linewidth}[t]{|T|T|} 22140\hline 22141 22142\sphinxcode{KRB5\_PADATA\_PK\_AS\_REP} 22143& 22144\sphinxcode{17} 22145\\ 22146\hline 22147\end{tabulary} 22148\par 22149\sphinxattableend\end{savenotes} 22150 22151 22152\subsubsection{KRB5\_PADATA\_PK\_AS\_REP\_OLD} 22153\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP_OLD:krb5-padata-pk-as-rep-old-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP_OLD::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP_OLD:krb5-padata-pk-as-rep-old}}\index{KRB5\_PADATA\_PK\_AS\_REP\_OLD (built-in variable)} 22154 22155\begin{fulllineitems} 22156\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP_OLD:KRB5_PADATA_PK_AS_REP_OLD}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PK\_AS\_REP\_OLD}} 22157\end{fulllineitems} 22158 22159 22160PKINIT. 22161 22162 22163\begin{savenotes}\sphinxattablestart 22164\centering 22165\begin{tabulary}{\linewidth}[t]{|T|T|} 22166\hline 22167 22168\sphinxcode{KRB5\_PADATA\_PK\_AS\_REP\_OLD} 22169& 22170\sphinxcode{15} 22171\\ 22172\hline 22173\end{tabulary} 22174\par 22175\sphinxattableend\end{savenotes} 22176 22177 22178\subsubsection{KRB5\_PADATA\_PK\_AS\_REQ} 22179\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ:krb5-padata-pk-as-req}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ:krb5-padata-pk-as-req-data}}\index{KRB5\_PADATA\_PK\_AS\_REQ (built-in variable)} 22180 22181\begin{fulllineitems} 22182\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ:KRB5_PADATA_PK_AS_REQ}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PK\_AS\_REQ}} 22183\end{fulllineitems} 22184 22185 22186PKINIT. 22187 22188RFC 4556 22189 22190 22191\begin{savenotes}\sphinxattablestart 22192\centering 22193\begin{tabulary}{\linewidth}[t]{|T|T|} 22194\hline 22195 22196\sphinxcode{KRB5\_PADATA\_PK\_AS\_REQ} 22197& 22198\sphinxcode{16} 22199\\ 22200\hline 22201\end{tabulary} 22202\par 22203\sphinxattableend\end{savenotes} 22204 22205 22206\subsubsection{KRB5\_PADATA\_PK\_AS\_REQ\_OLD} 22207\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ_OLD:krb5-padata-pk-as-req-old}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ_OLD:krb5-padata-pk-as-req-old-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ_OLD::doc}}\index{KRB5\_PADATA\_PK\_AS\_REQ\_OLD (built-in variable)} 22208 22209\begin{fulllineitems} 22210\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ_OLD:KRB5_PADATA_PK_AS_REQ_OLD}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PK\_AS\_REQ\_OLD}} 22211\end{fulllineitems} 22212 22213 22214PKINIT. 22215 22216 22217\begin{savenotes}\sphinxattablestart 22218\centering 22219\begin{tabulary}{\linewidth}[t]{|T|T|} 22220\hline 22221 22222\sphinxcode{KRB5\_PADATA\_PK\_AS\_REQ\_OLD} 22223& 22224\sphinxcode{14} 22225\\ 22226\hline 22227\end{tabulary} 22228\par 22229\sphinxattableend\end{savenotes} 22230 22231 22232\subsubsection{KRB5\_PADATA\_PW\_SALT} 22233\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PW_SALT:krb5-padata-pw-salt-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PW_SALT:krb5-padata-pw-salt}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PW_SALT::doc}}\index{KRB5\_PADATA\_PW\_SALT (built-in variable)} 22234 22235\begin{fulllineitems} 22236\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PW_SALT:KRB5_PADATA_PW_SALT}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PW\_SALT}} 22237\end{fulllineitems} 22238 22239 22240RFC 4120. 22241 22242 22243\begin{savenotes}\sphinxattablestart 22244\centering 22245\begin{tabulary}{\linewidth}[t]{|T|T|} 22246\hline 22247 22248\sphinxcode{KRB5\_PADATA\_PW\_SALT} 22249& 22250\sphinxcode{3} 22251\\ 22252\hline 22253\end{tabulary} 22254\par 22255\sphinxattableend\end{savenotes} 22256 22257 22258\subsubsection{KRB5\_PADATA\_REFERRAL} 22259\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REFERRAL:krb5-padata-referral}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REFERRAL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REFERRAL:krb5-padata-referral-data}}\index{KRB5\_PADATA\_REFERRAL (built-in variable)} 22260 22261\begin{fulllineitems} 22262\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REFERRAL:KRB5_PADATA_REFERRAL}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_REFERRAL}} 22263\end{fulllineitems} 22264 22265 22266draft referral system 22267 22268 22269\begin{savenotes}\sphinxattablestart 22270\centering 22271\begin{tabulary}{\linewidth}[t]{|T|T|} 22272\hline 22273 22274\sphinxcode{KRB5\_PADATA\_REFERRAL} 22275& 22276\sphinxcode{25} 22277\\ 22278\hline 22279\end{tabulary} 22280\par 22281\sphinxattableend\end{savenotes} 22282 22283 22284\subsubsection{KRB5\_PADATA\_S4U\_X509\_USER} 22285\label{\detokenize{appdev/refs/macros/KRB5_PADATA_S4U_X509_USER:krb5-padata-s4u-x509-user-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_S4U_X509_USER::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_S4U_X509_USER:krb5-padata-s4u-x509-user}}\index{KRB5\_PADATA\_S4U\_X509\_USER (built-in variable)} 22286 22287\begin{fulllineitems} 22288\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_S4U_X509_USER:KRB5_PADATA_S4U_X509_USER}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_S4U\_X509\_USER}} 22289\end{fulllineitems} 22290 22291 22292certificate protocol transition request 22293 22294 22295\begin{savenotes}\sphinxattablestart 22296\centering 22297\begin{tabulary}{\linewidth}[t]{|T|T|} 22298\hline 22299 22300\sphinxcode{KRB5\_PADATA\_S4U\_X509\_USER} 22301& 22302\sphinxcode{130} 22303\\ 22304\hline 22305\end{tabulary} 22306\par 22307\sphinxattableend\end{savenotes} 22308 22309 22310\subsubsection{KRB5\_PADATA\_SAM\_CHALLENGE} 22311\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE:krb5-padata-sam-challenge-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE:krb5-padata-sam-challenge}}\index{KRB5\_PADATA\_SAM\_CHALLENGE (built-in variable)} 22312 22313\begin{fulllineitems} 22314\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE:KRB5_PADATA_SAM_CHALLENGE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SAM\_CHALLENGE}} 22315\end{fulllineitems} 22316 22317 22318SAM/OTP. 22319 22320 22321\begin{savenotes}\sphinxattablestart 22322\centering 22323\begin{tabulary}{\linewidth}[t]{|T|T|} 22324\hline 22325 22326\sphinxcode{KRB5\_PADATA\_SAM\_CHALLENGE} 22327& 22328\sphinxcode{12} 22329\\ 22330\hline 22331\end{tabulary} 22332\par 22333\sphinxattableend\end{savenotes} 22334 22335 22336\subsubsection{KRB5\_PADATA\_SAM\_CHALLENGE\_2} 22337\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE_2:krb5-padata-sam-challenge-2-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE_2:krb5-padata-sam-challenge-2}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE_2::doc}}\index{KRB5\_PADATA\_SAM\_CHALLENGE\_2 (built-in variable)} 22338 22339\begin{fulllineitems} 22340\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE_2:KRB5_PADATA_SAM_CHALLENGE_2}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SAM\_CHALLENGE\_2}} 22341\end{fulllineitems} 22342 22343 22344draft challenge system, updated 22345 22346 22347\begin{savenotes}\sphinxattablestart 22348\centering 22349\begin{tabulary}{\linewidth}[t]{|T|T|} 22350\hline 22351 22352\sphinxcode{KRB5\_PADATA\_SAM\_CHALLENGE\_2} 22353& 22354\sphinxcode{30} 22355\\ 22356\hline 22357\end{tabulary} 22358\par 22359\sphinxattableend\end{savenotes} 22360 22361 22362\subsubsection{KRB5\_PADATA\_SAM\_REDIRECT} 22363\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_REDIRECT::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_REDIRECT:krb5-padata-sam-redirect-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_REDIRECT:krb5-padata-sam-redirect}}\index{KRB5\_PADATA\_SAM\_REDIRECT (built-in variable)} 22364 22365\begin{fulllineitems} 22366\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_REDIRECT:KRB5_PADATA_SAM_REDIRECT}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SAM\_REDIRECT}} 22367\end{fulllineitems} 22368 22369 22370SAM/OTP. 22371 22372RFC 4120 22373 22374 22375\begin{savenotes}\sphinxattablestart 22376\centering 22377\begin{tabulary}{\linewidth}[t]{|T|T|} 22378\hline 22379 22380\sphinxcode{KRB5\_PADATA\_SAM\_REDIRECT} 22381& 22382\sphinxcode{21} 22383\\ 22384\hline 22385\end{tabulary} 22386\par 22387\sphinxattableend\end{savenotes} 22388 22389 22390\subsubsection{KRB5\_PADATA\_SAM\_RESPONSE} 22391\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE:krb5-padata-sam-response-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE:krb5-padata-sam-response}}\index{KRB5\_PADATA\_SAM\_RESPONSE (built-in variable)} 22392 22393\begin{fulllineitems} 22394\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE:KRB5_PADATA_SAM_RESPONSE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SAM\_RESPONSE}} 22395\end{fulllineitems} 22396 22397 22398SAM/OTP. 22399 22400 22401\begin{savenotes}\sphinxattablestart 22402\centering 22403\begin{tabulary}{\linewidth}[t]{|T|T|} 22404\hline 22405 22406\sphinxcode{KRB5\_PADATA\_SAM\_RESPONSE} 22407& 22408\sphinxcode{13} 22409\\ 22410\hline 22411\end{tabulary} 22412\par 22413\sphinxattableend\end{savenotes} 22414 22415 22416\subsubsection{KRB5\_PADATA\_SAM\_RESPONSE\_2} 22417\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE_2::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE_2:krb5-padata-sam-response-2}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE_2:krb5-padata-sam-response-2-data}}\index{KRB5\_PADATA\_SAM\_RESPONSE\_2 (built-in variable)} 22418 22419\begin{fulllineitems} 22420\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE_2:KRB5_PADATA_SAM_RESPONSE_2}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SAM\_RESPONSE\_2}} 22421\end{fulllineitems} 22422 22423 22424draft challenge system, updated 22425 22426 22427\begin{savenotes}\sphinxattablestart 22428\centering 22429\begin{tabulary}{\linewidth}[t]{|T|T|} 22430\hline 22431 22432\sphinxcode{KRB5\_PADATA\_SAM\_RESPONSE\_2} 22433& 22434\sphinxcode{31} 22435\\ 22436\hline 22437\end{tabulary} 22438\par 22439\sphinxattableend\end{savenotes} 22440 22441 22442\subsubsection{KRB5\_PADATA\_SESAME} 22443\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SESAME::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SESAME:krb5-padata-sesame}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SESAME:krb5-padata-sesame-data}}\index{KRB5\_PADATA\_SESAME (built-in variable)} 22444 22445\begin{fulllineitems} 22446\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SESAME:KRB5_PADATA_SESAME}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SESAME}} 22447\end{fulllineitems} 22448 22449 22450Sesame project. 22451 22452RFC 4120 22453 22454 22455\begin{savenotes}\sphinxattablestart 22456\centering 22457\begin{tabulary}{\linewidth}[t]{|T|T|} 22458\hline 22459 22460\sphinxcode{KRB5\_PADATA\_SESAME} 22461& 22462\sphinxcode{7} 22463\\ 22464\hline 22465\end{tabulary} 22466\par 22467\sphinxattableend\end{savenotes} 22468 22469 22470\subsubsection{KRB5\_PADATA\_SPAKE} 22471\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SPAKE:krb5-padata-spake-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SPAKE:krb5-padata-spake}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SPAKE::doc}}\index{KRB5\_PADATA\_SPAKE (built-in variable)} 22472 22473\begin{fulllineitems} 22474\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SPAKE:KRB5_PADATA_SPAKE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SPAKE}} 22475\end{fulllineitems} 22476 22477 22478 22479\begin{savenotes}\sphinxattablestart 22480\centering 22481\begin{tabulary}{\linewidth}[t]{|T|T|} 22482\hline 22483 22484\sphinxcode{KRB5\_PADATA\_SPAKE} 22485& 22486\sphinxcode{151} 22487\\ 22488\hline 22489\end{tabulary} 22490\par 22491\sphinxattableend\end{savenotes} 22492 22493 22494\subsubsection{KRB5\_PADATA\_SVR\_REFERRAL\_INFO} 22495\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SVR_REFERRAL_INFO::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SVR_REFERRAL_INFO:krb5-padata-svr-referral-info}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SVR_REFERRAL_INFO:krb5-padata-svr-referral-info-data}}\index{KRB5\_PADATA\_SVR\_REFERRAL\_INFO (built-in variable)} 22496 22497\begin{fulllineitems} 22498\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SVR_REFERRAL_INFO:KRB5_PADATA_SVR_REFERRAL_INFO}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SVR\_REFERRAL\_INFO}} 22499\end{fulllineitems} 22500 22501 22502Windows 2000 referrals. 22503 22504RFC 6820 22505 22506 22507\begin{savenotes}\sphinxattablestart 22508\centering 22509\begin{tabulary}{\linewidth}[t]{|T|T|} 22510\hline 22511 22512\sphinxcode{KRB5\_PADATA\_SVR\_REFERRAL\_INFO} 22513& 22514\sphinxcode{20} 22515\\ 22516\hline 22517\end{tabulary} 22518\par 22519\sphinxattableend\end{savenotes} 22520 22521 22522\subsubsection{KRB5\_PADATA\_TGS\_REQ} 22523\label{\detokenize{appdev/refs/macros/KRB5_PADATA_TGS_REQ::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_TGS_REQ:krb5-padata-tgs-req}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_TGS_REQ:krb5-padata-tgs-req-data}}\index{KRB5\_PADATA\_TGS\_REQ (built-in variable)} 22524 22525\begin{fulllineitems} 22526\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_TGS_REQ:KRB5_PADATA_TGS_REQ}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_TGS\_REQ}} 22527\end{fulllineitems} 22528 22529 22530 22531\begin{savenotes}\sphinxattablestart 22532\centering 22533\begin{tabulary}{\linewidth}[t]{|T|T|} 22534\hline 22535 22536\sphinxcode{KRB5\_PADATA\_TGS\_REQ} 22537& 22538\sphinxcode{KRB5\_PADATA\_AP\_REQ} 22539\\ 22540\hline 22541\end{tabulary} 22542\par 22543\sphinxattableend\end{savenotes} 22544 22545 22546\subsubsection{KRB5\_PADATA\_USE\_SPECIFIED\_KVNO} 22547\label{\detokenize{appdev/refs/macros/KRB5_PADATA_USE_SPECIFIED_KVNO:krb5-padata-use-specified-kvno}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_USE_SPECIFIED_KVNO:krb5-padata-use-specified-kvno-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_USE_SPECIFIED_KVNO::doc}}\index{KRB5\_PADATA\_USE\_SPECIFIED\_KVNO (built-in variable)} 22548 22549\begin{fulllineitems} 22550\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_USE_SPECIFIED_KVNO:KRB5_PADATA_USE_SPECIFIED_KVNO}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_USE\_SPECIFIED\_KVNO}} 22551\end{fulllineitems} 22552 22553 22554RFC 4120. 22555 22556 22557\begin{savenotes}\sphinxattablestart 22558\centering 22559\begin{tabulary}{\linewidth}[t]{|T|T|} 22560\hline 22561 22562\sphinxcode{KRB5\_PADATA\_USE\_SPECIFIED\_KVNO} 22563& 22564\sphinxcode{20} 22565\\ 22566\hline 22567\end{tabulary} 22568\par 22569\sphinxattableend\end{savenotes} 22570 22571 22572\subsubsection{KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD} 22573\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD:krb5-principal-compare-casefold-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD:krb5-principal-compare-casefold}}\index{KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD (built-in variable)} 22574 22575\begin{fulllineitems} 22576\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD:KRB5_PRINCIPAL_COMPARE_CASEFOLD}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD}} 22577\end{fulllineitems} 22578 22579 22580case-insensitive 22581 22582 22583\begin{savenotes}\sphinxattablestart 22584\centering 22585\begin{tabulary}{\linewidth}[t]{|T|T|} 22586\hline 22587 22588\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD} 22589& 22590\sphinxcode{4} 22591\\ 22592\hline 22593\end{tabulary} 22594\par 22595\sphinxattableend\end{savenotes} 22596 22597 22598\subsubsection{KRB5\_PRINCIPAL\_COMPARE\_ENTERPRISE} 22599\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_ENTERPRISE:krb5-principal-compare-enterprise}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_ENTERPRISE:krb5-principal-compare-enterprise-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_ENTERPRISE::doc}}\index{KRB5\_PRINCIPAL\_COMPARE\_ENTERPRISE (built-in variable)} 22600 22601\begin{fulllineitems} 22602\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_ENTERPRISE:KRB5_PRINCIPAL_COMPARE_ENTERPRISE}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_COMPARE\_ENTERPRISE}} 22603\end{fulllineitems} 22604 22605 22606UPNs as real principals. 22607 22608 22609\begin{savenotes}\sphinxattablestart 22610\centering 22611\begin{tabulary}{\linewidth}[t]{|T|T|} 22612\hline 22613 22614\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_ENTERPRISE} 22615& 22616\sphinxcode{2} 22617\\ 22618\hline 22619\end{tabulary} 22620\par 22621\sphinxattableend\end{savenotes} 22622 22623 22624\subsubsection{KRB5\_PRINCIPAL\_COMPARE\_IGNORE\_REALM} 22625\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_IGNORE_REALM:krb5-principal-compare-ignore-realm}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_IGNORE_REALM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_IGNORE_REALM:krb5-principal-compare-ignore-realm-data}}\index{KRB5\_PRINCIPAL\_COMPARE\_IGNORE\_REALM (built-in variable)} 22626 22627\begin{fulllineitems} 22628\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_IGNORE_REALM:KRB5_PRINCIPAL_COMPARE_IGNORE_REALM}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_COMPARE\_IGNORE\_REALM}} 22629\end{fulllineitems} 22630 22631 22632ignore realm component 22633 22634 22635\begin{savenotes}\sphinxattablestart 22636\centering 22637\begin{tabulary}{\linewidth}[t]{|T|T|} 22638\hline 22639 22640\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_IGNORE\_REALM} 22641& 22642\sphinxcode{1} 22643\\ 22644\hline 22645\end{tabulary} 22646\par 22647\sphinxattableend\end{savenotes} 22648 22649 22650\subsubsection{KRB5\_PRINCIPAL\_COMPARE\_UTF8} 22651\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8:krb5-principal-compare-utf8-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8:krb5-principal-compare-utf8}}\index{KRB5\_PRINCIPAL\_COMPARE\_UTF8 (built-in variable)} 22652 22653\begin{fulllineitems} 22654\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8:KRB5_PRINCIPAL_COMPARE_UTF8}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_COMPARE\_UTF8}} 22655\end{fulllineitems} 22656 22657 22658treat principals as UTF-8 22659 22660 22661\begin{savenotes}\sphinxattablestart 22662\centering 22663\begin{tabulary}{\linewidth}[t]{|T|T|} 22664\hline 22665 22666\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_UTF8} 22667& 22668\sphinxcode{8} 22669\\ 22670\hline 22671\end{tabulary} 22672\par 22673\sphinxattableend\end{savenotes} 22674 22675 22676\subsubsection{KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE} 22677\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE:krb5-principal-parse-enterprise-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE:krb5-principal-parse-enterprise}}\index{KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE (built-in variable)} 22678 22679\begin{fulllineitems} 22680\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE:KRB5_PRINCIPAL_PARSE_ENTERPRISE}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE}} 22681\end{fulllineitems} 22682 22683 22684Create single-component enterprise principle. 22685 22686 22687\begin{savenotes}\sphinxattablestart 22688\centering 22689\begin{tabulary}{\linewidth}[t]{|T|T|} 22690\hline 22691 22692\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE} 22693& 22694\sphinxcode{0x4} 22695\\ 22696\hline 22697\end{tabulary} 22698\par 22699\sphinxattableend\end{savenotes} 22700 22701 22702\subsubsection{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM} 22703\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_IGNORE_REALM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_IGNORE_REALM:krb5-principal-parse-ignore-realm}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_IGNORE_REALM:krb5-principal-parse-ignore-realm-data}}\index{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM (built-in variable)} 22704 22705\begin{fulllineitems} 22706\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_IGNORE_REALM:KRB5_PRINCIPAL_PARSE_IGNORE_REALM}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM}} 22707\end{fulllineitems} 22708 22709 22710Ignore realm if present. 22711 22712 22713\begin{savenotes}\sphinxattablestart 22714\centering 22715\begin{tabulary}{\linewidth}[t]{|T|T|} 22716\hline 22717 22718\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM} 22719& 22720\sphinxcode{0x8} 22721\\ 22722\hline 22723\end{tabulary} 22724\par 22725\sphinxattableend\end{savenotes} 22726 22727 22728\subsubsection{KRB5\_PRINCIPAL\_PARSE\_NO\_DEF\_REALM} 22729\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_DEF_REALM:krb5-principal-parse-no-def-realm-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_DEF_REALM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_DEF_REALM:krb5-principal-parse-no-def-realm}}\index{KRB5\_PRINCIPAL\_PARSE\_NO\_DEF\_REALM (built-in variable)} 22730 22731\begin{fulllineitems} 22732\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_DEF_REALM:KRB5_PRINCIPAL_PARSE_NO_DEF_REALM}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_PARSE\_NO\_DEF\_REALM}} 22733\end{fulllineitems} 22734 22735 22736Don’t add default realm. 22737 22738 22739\begin{savenotes}\sphinxattablestart 22740\centering 22741\begin{tabulary}{\linewidth}[t]{|T|T|} 22742\hline 22743 22744\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_NO\_DEF\_REALM} 22745& 22746\sphinxcode{0x10} 22747\\ 22748\hline 22749\end{tabulary} 22750\par 22751\sphinxattableend\end{savenotes} 22752 22753 22754\subsubsection{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM} 22755\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_REALM:krb5-principal-parse-no-realm-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_REALM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_REALM:krb5-principal-parse-no-realm}}\index{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM (built-in variable)} 22756 22757\begin{fulllineitems} 22758\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_REALM:KRB5_PRINCIPAL_PARSE_NO_REALM}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM}} 22759\end{fulllineitems} 22760 22761 22762Error if realm is present. 22763 22764 22765\begin{savenotes}\sphinxattablestart 22766\centering 22767\begin{tabulary}{\linewidth}[t]{|T|T|} 22768\hline 22769 22770\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM} 22771& 22772\sphinxcode{0x1} 22773\\ 22774\hline 22775\end{tabulary} 22776\par 22777\sphinxattableend\end{savenotes} 22778 22779 22780\subsubsection{KRB5\_PRINCIPAL\_PARSE\_REQUIRE\_REALM} 22781\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_REQUIRE_REALM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_REQUIRE_REALM:krb5-principal-parse-require-realm}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_REQUIRE_REALM:krb5-principal-parse-require-realm-data}}\index{KRB5\_PRINCIPAL\_PARSE\_REQUIRE\_REALM (built-in variable)} 22782 22783\begin{fulllineitems} 22784\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_REQUIRE_REALM:KRB5_PRINCIPAL_PARSE_REQUIRE_REALM}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_PARSE\_REQUIRE\_REALM}} 22785\end{fulllineitems} 22786 22787 22788Error if realm is not present. 22789 22790 22791\begin{savenotes}\sphinxattablestart 22792\centering 22793\begin{tabulary}{\linewidth}[t]{|T|T|} 22794\hline 22795 22796\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_REQUIRE\_REALM} 22797& 22798\sphinxcode{0x2} 22799\\ 22800\hline 22801\end{tabulary} 22802\par 22803\sphinxattableend\end{savenotes} 22804 22805 22806\subsubsection{KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY} 22807\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY:krb5-principal-unparse-display-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY:krb5-principal-unparse-display}}\index{KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY (built-in variable)} 22808 22809\begin{fulllineitems} 22810\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY:KRB5_PRINCIPAL_UNPARSE_DISPLAY}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY}} 22811\end{fulllineitems} 22812 22813 22814Don’t escape special characters. 22815 22816 22817\begin{savenotes}\sphinxattablestart 22818\centering 22819\begin{tabulary}{\linewidth}[t]{|T|T|} 22820\hline 22821 22822\sphinxcode{KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY} 22823& 22824\sphinxcode{0x4} 22825\\ 22826\hline 22827\end{tabulary} 22828\par 22829\sphinxattableend\end{savenotes} 22830 22831 22832\subsubsection{KRB5\_PRINCIPAL\_UNPARSE\_NO\_REALM} 22833\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_NO_REALM:krb5-principal-unparse-no-realm}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_NO_REALM:krb5-principal-unparse-no-realm-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_NO_REALM::doc}}\index{KRB5\_PRINCIPAL\_UNPARSE\_NO\_REALM (built-in variable)} 22834 22835\begin{fulllineitems} 22836\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_NO_REALM:KRB5_PRINCIPAL_UNPARSE_NO_REALM}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_UNPARSE\_NO\_REALM}} 22837\end{fulllineitems} 22838 22839 22840Omit realm always. 22841 22842 22843\begin{savenotes}\sphinxattablestart 22844\centering 22845\begin{tabulary}{\linewidth}[t]{|T|T|} 22846\hline 22847 22848\sphinxcode{KRB5\_PRINCIPAL\_UNPARSE\_NO\_REALM} 22849& 22850\sphinxcode{0x2} 22851\\ 22852\hline 22853\end{tabulary} 22854\par 22855\sphinxattableend\end{savenotes} 22856 22857 22858\subsubsection{KRB5\_PRINCIPAL\_UNPARSE\_SHORT} 22859\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_SHORT::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_SHORT:krb5-principal-unparse-short}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_SHORT:krb5-principal-unparse-short-data}}\index{KRB5\_PRINCIPAL\_UNPARSE\_SHORT (built-in variable)} 22860 22861\begin{fulllineitems} 22862\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_SHORT:KRB5_PRINCIPAL_UNPARSE_SHORT}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_UNPARSE\_SHORT}} 22863\end{fulllineitems} 22864 22865 22866Omit realm if it is the local realm. 22867 22868 22869\begin{savenotes}\sphinxattablestart 22870\centering 22871\begin{tabulary}{\linewidth}[t]{|T|T|} 22872\hline 22873 22874\sphinxcode{KRB5\_PRINCIPAL\_UNPARSE\_SHORT} 22875& 22876\sphinxcode{0x1} 22877\\ 22878\hline 22879\end{tabulary} 22880\par 22881\sphinxattableend\end{savenotes} 22882 22883 22884\subsubsection{KRB5\_PRIV} 22885\label{\detokenize{appdev/refs/macros/KRB5_PRIV:krb5-priv-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRIV::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRIV:krb5-priv}}\index{KRB5\_PRIV (built-in variable)} 22886 22887\begin{fulllineitems} 22888\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRIV:KRB5_PRIV}}\pysigline{\sphinxbfcode{KRB5\_PRIV}} 22889\end{fulllineitems} 22890 22891 22892Private application message. 22893 22894 22895\begin{savenotes}\sphinxattablestart 22896\centering 22897\begin{tabulary}{\linewidth}[t]{|T|T|} 22898\hline 22899 22900\sphinxcode{KRB5\_PRIV} 22901& 22902\sphinxcode{((krb5\_msgtype)21)} 22903\\ 22904\hline 22905\end{tabulary} 22906\par 22907\sphinxattableend\end{savenotes} 22908 22909 22910\subsubsection{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD} 22911\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD:krb5-prompt-type-new-password-data}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD:krb5-prompt-type-new-password}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD::doc}}\index{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD (built-in variable)} 22912 22913\begin{fulllineitems} 22914\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD:KRB5_PROMPT_TYPE_NEW_PASSWORD}}\pysigline{\sphinxbfcode{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD}} 22915\end{fulllineitems} 22916 22917 22918Prompt for new password (during password change) 22919 22920 22921\begin{savenotes}\sphinxattablestart 22922\centering 22923\begin{tabulary}{\linewidth}[t]{|T|T|} 22924\hline 22925 22926\sphinxcode{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD} 22927& 22928\sphinxcode{0x2} 22929\\ 22930\hline 22931\end{tabulary} 22932\par 22933\sphinxattableend\end{savenotes} 22934 22935 22936\subsubsection{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD\_AGAIN} 22937\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD_AGAIN:krb5-prompt-type-new-password-again}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD_AGAIN:krb5-prompt-type-new-password-again-data}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD_AGAIN::doc}}\index{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD\_AGAIN (built-in variable)} 22938 22939\begin{fulllineitems} 22940\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD_AGAIN:KRB5_PROMPT_TYPE_NEW_PASSWORD_AGAIN}}\pysigline{\sphinxbfcode{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD\_AGAIN}} 22941\end{fulllineitems} 22942 22943 22944Prompt for new password again. 22945 22946 22947\begin{savenotes}\sphinxattablestart 22948\centering 22949\begin{tabulary}{\linewidth}[t]{|T|T|} 22950\hline 22951 22952\sphinxcode{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD\_AGAIN} 22953& 22954\sphinxcode{0x3} 22955\\ 22956\hline 22957\end{tabulary} 22958\par 22959\sphinxattableend\end{savenotes} 22960 22961 22962\subsubsection{KRB5\_PROMPT\_TYPE\_PASSWORD} 22963\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PASSWORD:krb5-prompt-type-password-data}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PASSWORD::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PASSWORD:krb5-prompt-type-password}}\index{KRB5\_PROMPT\_TYPE\_PASSWORD (built-in variable)} 22964 22965\begin{fulllineitems} 22966\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PASSWORD:KRB5_PROMPT_TYPE_PASSWORD}}\pysigline{\sphinxbfcode{KRB5\_PROMPT\_TYPE\_PASSWORD}} 22967\end{fulllineitems} 22968 22969 22970Prompt for password. 22971 22972 22973\begin{savenotes}\sphinxattablestart 22974\centering 22975\begin{tabulary}{\linewidth}[t]{|T|T|} 22976\hline 22977 22978\sphinxcode{KRB5\_PROMPT\_TYPE\_PASSWORD} 22979& 22980\sphinxcode{0x1} 22981\\ 22982\hline 22983\end{tabulary} 22984\par 22985\sphinxattableend\end{savenotes} 22986 22987 22988\subsubsection{KRB5\_PROMPT\_TYPE\_PREAUTH} 22989\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PREAUTH:krb5-prompt-type-preauth-data}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PREAUTH::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PREAUTH:krb5-prompt-type-preauth}}\index{KRB5\_PROMPT\_TYPE\_PREAUTH (built-in variable)} 22990 22991\begin{fulllineitems} 22992\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PREAUTH:KRB5_PROMPT_TYPE_PREAUTH}}\pysigline{\sphinxbfcode{KRB5\_PROMPT\_TYPE\_PREAUTH}} 22993\end{fulllineitems} 22994 22995 22996Prompt for preauthentication data (such as an OTP value) 22997 22998 22999\begin{savenotes}\sphinxattablestart 23000\centering 23001\begin{tabulary}{\linewidth}[t]{|T|T|} 23002\hline 23003 23004\sphinxcode{KRB5\_PROMPT\_TYPE\_PREAUTH} 23005& 23006\sphinxcode{0x4} 23007\\ 23008\hline 23009\end{tabulary} 23010\par 23011\sphinxattableend\end{savenotes} 23012 23013 23014\subsubsection{KRB5\_PVNO} 23015\label{\detokenize{appdev/refs/macros/KRB5_PVNO:krb5-pvno-data}}\label{\detokenize{appdev/refs/macros/KRB5_PVNO::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PVNO:krb5-pvno}}\index{KRB5\_PVNO (built-in variable)} 23016 23017\begin{fulllineitems} 23018\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PVNO:KRB5_PVNO}}\pysigline{\sphinxbfcode{KRB5\_PVNO}} 23019\end{fulllineitems} 23020 23021 23022Protocol version number. 23023 23024 23025\begin{savenotes}\sphinxattablestart 23026\centering 23027\begin{tabulary}{\linewidth}[t]{|T|T|} 23028\hline 23029 23030\sphinxcode{KRB5\_PVNO} 23031& 23032\sphinxcode{5} 23033\\ 23034\hline 23035\end{tabulary} 23036\par 23037\sphinxattableend\end{savenotes} 23038 23039 23040\subsubsection{KRB5\_REALM\_BRANCH\_CHAR} 23041\label{\detokenize{appdev/refs/macros/KRB5_REALM_BRANCH_CHAR::doc}}\label{\detokenize{appdev/refs/macros/KRB5_REALM_BRANCH_CHAR:krb5-realm-branch-char}}\label{\detokenize{appdev/refs/macros/KRB5_REALM_BRANCH_CHAR:krb5-realm-branch-char-data}}\index{KRB5\_REALM\_BRANCH\_CHAR (built-in variable)} 23042 23043\begin{fulllineitems} 23044\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_REALM_BRANCH_CHAR:KRB5_REALM_BRANCH_CHAR}}\pysigline{\sphinxbfcode{KRB5\_REALM\_BRANCH\_CHAR}} 23045\end{fulllineitems} 23046 23047 23048 23049\begin{savenotes}\sphinxattablestart 23050\centering 23051\begin{tabulary}{\linewidth}[t]{|T|T|} 23052\hline 23053 23054\sphinxcode{KRB5\_REALM\_BRANCH\_CHAR} 23055& 23056\sphinxcode{'.'} 23057\\ 23058\hline 23059\end{tabulary} 23060\par 23061\sphinxattableend\end{savenotes} 23062 23063 23064\subsubsection{KRB5\_RECVAUTH\_BADAUTHVERS} 23065\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_BADAUTHVERS:krb5-recvauth-badauthvers-data}}\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_BADAUTHVERS:krb5-recvauth-badauthvers}}\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_BADAUTHVERS::doc}}\index{KRB5\_RECVAUTH\_BADAUTHVERS (built-in variable)} 23066 23067\begin{fulllineitems} 23068\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_BADAUTHVERS:KRB5_RECVAUTH_BADAUTHVERS}}\pysigline{\sphinxbfcode{KRB5\_RECVAUTH\_BADAUTHVERS}} 23069\end{fulllineitems} 23070 23071 23072 23073\begin{savenotes}\sphinxattablestart 23074\centering 23075\begin{tabulary}{\linewidth}[t]{|T|T|} 23076\hline 23077 23078\sphinxcode{KRB5\_RECVAUTH\_BADAUTHVERS} 23079& 23080\sphinxcode{0x0002} 23081\\ 23082\hline 23083\end{tabulary} 23084\par 23085\sphinxattableend\end{savenotes} 23086 23087 23088\subsubsection{KRB5\_RECVAUTH\_SKIP\_VERSION} 23089\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_SKIP_VERSION:krb5-recvauth-skip-version}}\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_SKIP_VERSION:krb5-recvauth-skip-version-data}}\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_SKIP_VERSION::doc}}\index{KRB5\_RECVAUTH\_SKIP\_VERSION (built-in variable)} 23090 23091\begin{fulllineitems} 23092\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_SKIP_VERSION:KRB5_RECVAUTH_SKIP_VERSION}}\pysigline{\sphinxbfcode{KRB5\_RECVAUTH\_SKIP\_VERSION}} 23093\end{fulllineitems} 23094 23095 23096 23097\begin{savenotes}\sphinxattablestart 23098\centering 23099\begin{tabulary}{\linewidth}[t]{|T|T|} 23100\hline 23101 23102\sphinxcode{KRB5\_RECVAUTH\_SKIP\_VERSION} 23103& 23104\sphinxcode{0x0001} 23105\\ 23106\hline 23107\end{tabulary} 23108\par 23109\sphinxattableend\end{savenotes} 23110 23111 23112\subsubsection{KRB5\_REFERRAL\_REALM} 23113\label{\detokenize{appdev/refs/macros/KRB5_REFERRAL_REALM:krb5-referral-realm-data}}\label{\detokenize{appdev/refs/macros/KRB5_REFERRAL_REALM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_REFERRAL_REALM:krb5-referral-realm}}\index{KRB5\_REFERRAL\_REALM (built-in variable)} 23114 23115\begin{fulllineitems} 23116\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_REFERRAL_REALM:KRB5_REFERRAL_REALM}}\pysigline{\sphinxbfcode{KRB5\_REFERRAL\_REALM}} 23117\end{fulllineitems} 23118 23119 23120Constant for realm referrals. 23121 23122 23123\begin{savenotes}\sphinxattablestart 23124\centering 23125\begin{tabulary}{\linewidth}[t]{|T|T|} 23126\hline 23127 23128\sphinxcode{KRB5\_REFERRAL\_REALM} 23129& 23130\sphinxcode{""} 23131\\ 23132\hline 23133\end{tabulary} 23134\par 23135\sphinxattableend\end{savenotes} 23136 23137 23138\subsubsection{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_COUNT\_LOW} 23139\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_COUNT_LOW:krb5-responder-pkinit-flags-token-user-pin-count-low-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_COUNT_LOW::doc}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_COUNT_LOW:krb5-responder-pkinit-flags-token-user-pin-count-low}}\index{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_COUNT\_LOW (built-in variable)} 23140 23141\begin{fulllineitems} 23142\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_COUNT_LOW:KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_COUNT_LOW}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_COUNT\_LOW}} 23143\end{fulllineitems} 23144 23145 23146This flag indicates that an incorrect PIN was supplied at least once since the last time the correct PIN was supplied. 23147 23148 23149\begin{savenotes}\sphinxattablestart 23150\centering 23151\begin{tabulary}{\linewidth}[t]{|T|T|} 23152\hline 23153 23154\sphinxcode{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_COUNT\_LOW} 23155& 23156\sphinxcode{(1 \textless{}\textless{} 0)} 23157\\ 23158\hline 23159\end{tabulary} 23160\par 23161\sphinxattableend\end{savenotes} 23162 23163 23164\subsubsection{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_FINAL\_TRY} 23165\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_FINAL_TRY:krb5-responder-pkinit-flags-token-user-pin-final-try}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_FINAL_TRY::doc}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_FINAL_TRY:krb5-responder-pkinit-flags-token-user-pin-final-try-data}}\index{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_FINAL\_TRY (built-in variable)} 23166 23167\begin{fulllineitems} 23168\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_FINAL_TRY:KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_FINAL_TRY}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_FINAL\_TRY}} 23169\end{fulllineitems} 23170 23171 23172This flag indicates that supplying an incorrect PIN will cause the token to lock itself. 23173 23174 23175\begin{savenotes}\sphinxattablestart 23176\centering 23177\begin{tabulary}{\linewidth}[t]{|T|T|} 23178\hline 23179 23180\sphinxcode{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_FINAL\_TRY} 23181& 23182\sphinxcode{(1 \textless{}\textless{} 1)} 23183\\ 23184\hline 23185\end{tabulary} 23186\par 23187\sphinxattableend\end{savenotes} 23188 23189 23190\subsubsection{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_LOCKED} 23191\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_LOCKED::doc}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_LOCKED:krb5-responder-pkinit-flags-token-user-pin-locked}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_LOCKED:krb5-responder-pkinit-flags-token-user-pin-locked-data}}\index{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_LOCKED (built-in variable)} 23192 23193\begin{fulllineitems} 23194\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_LOCKED:KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_LOCKED}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_LOCKED}} 23195\end{fulllineitems} 23196 23197 23198This flag indicates that the user PIN is locked, and you can’t log in to the token with it. 23199 23200 23201\begin{savenotes}\sphinxattablestart 23202\centering 23203\begin{tabulary}{\linewidth}[t]{|T|T|} 23204\hline 23205 23206\sphinxcode{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_LOCKED} 23207& 23208\sphinxcode{(1 \textless{}\textless{} 2)} 23209\\ 23210\hline 23211\end{tabulary} 23212\par 23213\sphinxattableend\end{savenotes} 23214 23215 23216\subsubsection{KRB5\_RESPONDER\_QUESTION\_PKINIT} 23217\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PKINIT:krb5-responder-question-pkinit}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PKINIT:krb5-responder-question-pkinit-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PKINIT::doc}}\index{KRB5\_RESPONDER\_QUESTION\_PKINIT (built-in variable)} 23218 23219\begin{fulllineitems} 23220\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PKINIT:KRB5_RESPONDER_QUESTION_PKINIT}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_QUESTION\_PKINIT}} 23221\end{fulllineitems} 23222 23223 23224PKINIT responder question. 23225 23226The PKINIT responder question is asked when the client needs a password that’s being used to protect key information, and is formatted as a JSON object. A specific identity’s flags value, if not zero, is the bitwise-OR of one or more of the KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_* flags defined below, and possibly other flags to be added later. Any resemblance to similarly-named CKF\_* values in the PKCS\#11 API should not be depended on. 23227 23228\fvset{hllines={, ,}}% 23229\begin{sphinxVerbatim}[commandchars=\\\{\}] 23230 \PYG{p}{\PYGZob{}} 23231 \PYG{n}{identity} \PYG{o}{\PYGZlt{}}\PYG{n}{string}\PYG{o}{\PYGZgt{}} \PYG{o}{:} \PYG{n}{flags} \PYG{o}{\PYGZlt{}}\PYG{n}{number}\PYG{o}{\PYGZgt{}}\PYG{p}{,} 23232 \PYG{p}{.}\PYG{p}{.}\PYG{p}{.} 23233\PYG{p}{\PYGZcb{}} 23234\end{sphinxVerbatim} 23235 23236The answer to the question MUST be JSON formatted: 23237 23238\fvset{hllines={, ,}}% 23239\begin{sphinxVerbatim}[commandchars=\\\{\}] 23240 \PYG{p}{\PYGZob{}} 23241 \PYG{n}{identity} \PYG{o}{\PYGZlt{}}\PYG{n}{string}\PYG{o}{\PYGZgt{}} \PYG{o}{:} \PYG{n}{password} \PYG{o}{\PYGZlt{}}\PYG{n}{string}\PYG{o}{\PYGZgt{}}\PYG{p}{,} 23242 \PYG{p}{.}\PYG{p}{.}\PYG{p}{.} 23243\PYG{p}{\PYGZcb{}} 23244\end{sphinxVerbatim} 23245 23246 23247\begin{savenotes}\sphinxattablestart 23248\centering 23249\begin{tabulary}{\linewidth}[t]{|T|T|} 23250\hline 23251 23252\sphinxcode{KRB5\_RESPONDER\_QUESTION\_PKINIT} 23253& 23254\sphinxcode{"pkinit"} 23255\\ 23256\hline 23257\end{tabulary} 23258\par 23259\sphinxattableend\end{savenotes} 23260 23261 23262\subsubsection{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_PIN} 23263\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_PIN:krb5-responder-otp-flags-collect-pin-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_PIN::doc}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_PIN:krb5-responder-otp-flags-collect-pin}}\index{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_PIN (built-in variable)} 23264 23265\begin{fulllineitems} 23266\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_PIN:KRB5_RESPONDER_OTP_FLAGS_COLLECT_PIN}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_PIN}} 23267\end{fulllineitems} 23268 23269 23270This flag indicates that the PIN value MUST be collected. 23271 23272 23273\begin{savenotes}\sphinxattablestart 23274\centering 23275\begin{tabulary}{\linewidth}[t]{|T|T|} 23276\hline 23277 23278\sphinxcode{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_PIN} 23279& 23280\sphinxcode{0x0002} 23281\\ 23282\hline 23283\end{tabulary} 23284\par 23285\sphinxattableend\end{savenotes} 23286 23287 23288\subsubsection{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_TOKEN} 23289\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_TOKEN:krb5-responder-otp-flags-collect-token-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_TOKEN:krb5-responder-otp-flags-collect-token}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_TOKEN::doc}}\index{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_TOKEN (built-in variable)} 23290 23291\begin{fulllineitems} 23292\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_TOKEN:KRB5_RESPONDER_OTP_FLAGS_COLLECT_TOKEN}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_TOKEN}} 23293\end{fulllineitems} 23294 23295 23296This flag indicates that the token value MUST be collected. 23297 23298 23299\begin{savenotes}\sphinxattablestart 23300\centering 23301\begin{tabulary}{\linewidth}[t]{|T|T|} 23302\hline 23303 23304\sphinxcode{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_TOKEN} 23305& 23306\sphinxcode{0x0001} 23307\\ 23308\hline 23309\end{tabulary} 23310\par 23311\sphinxattableend\end{savenotes} 23312 23313 23314\subsubsection{KRB5\_RESPONDER\_OTP\_FLAGS\_NEXTOTP} 23315\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_NEXTOTP:krb5-responder-otp-flags-nextotp-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_NEXTOTP::doc}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_NEXTOTP:krb5-responder-otp-flags-nextotp}}\index{KRB5\_RESPONDER\_OTP\_FLAGS\_NEXTOTP (built-in variable)} 23316 23317\begin{fulllineitems} 23318\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_NEXTOTP:KRB5_RESPONDER_OTP_FLAGS_NEXTOTP}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_OTP\_FLAGS\_NEXTOTP}} 23319\end{fulllineitems} 23320 23321 23322This flag indicates that the token is now in re-synchronization mode with the server. 23323 23324The user is expected to reply with the next code displayed on the token. 23325 23326 23327\begin{savenotes}\sphinxattablestart 23328\centering 23329\begin{tabulary}{\linewidth}[t]{|T|T|} 23330\hline 23331 23332\sphinxcode{KRB5\_RESPONDER\_OTP\_FLAGS\_NEXTOTP} 23333& 23334\sphinxcode{0x0004} 23335\\ 23336\hline 23337\end{tabulary} 23338\par 23339\sphinxattableend\end{savenotes} 23340 23341 23342\subsubsection{KRB5\_RESPONDER\_OTP\_FLAGS\_SEPARATE\_PIN} 23343\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_SEPARATE_PIN:krb5-responder-otp-flags-separate-pin}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_SEPARATE_PIN:krb5-responder-otp-flags-separate-pin-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_SEPARATE_PIN::doc}}\index{KRB5\_RESPONDER\_OTP\_FLAGS\_SEPARATE\_PIN (built-in variable)} 23344 23345\begin{fulllineitems} 23346\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_SEPARATE_PIN:KRB5_RESPONDER_OTP_FLAGS_SEPARATE_PIN}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_OTP\_FLAGS\_SEPARATE\_PIN}} 23347\end{fulllineitems} 23348 23349 23350This flag indicates that the PIN MUST be returned as a separate item. 23351 23352This flag only takes effect if KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_PIN is set. If this flag is not set, the responder may either concatenate PIN + token value and store it as “value” in the answer or it may return them separately. If they are returned separately, they will be concatenated internally. 23353 23354 23355\begin{savenotes}\sphinxattablestart 23356\centering 23357\begin{tabulary}{\linewidth}[t]{|T|T|} 23358\hline 23359 23360\sphinxcode{KRB5\_RESPONDER\_OTP\_FLAGS\_SEPARATE\_PIN} 23361& 23362\sphinxcode{0x0008} 23363\\ 23364\hline 23365\end{tabulary} 23366\par 23367\sphinxattableend\end{savenotes} 23368 23369 23370\subsubsection{KRB5\_RESPONDER\_OTP\_FORMAT\_ALPHANUMERIC} 23371\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC:krb5-responder-otp-format-alphanumeric-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC:krb5-responder-otp-format-alphanumeric}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC::doc}}\index{KRB5\_RESPONDER\_OTP\_FORMAT\_ALPHANUMERIC (built-in variable)} 23372 23373\begin{fulllineitems} 23374\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC:KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_OTP\_FORMAT\_ALPHANUMERIC}} 23375\end{fulllineitems} 23376 23377 23378 23379\begin{savenotes}\sphinxattablestart 23380\centering 23381\begin{tabulary}{\linewidth}[t]{|T|T|} 23382\hline 23383 23384\sphinxcode{KRB5\_RESPONDER\_OTP\_FORMAT\_ALPHANUMERIC} 23385& 23386\sphinxcode{2} 23387\\ 23388\hline 23389\end{tabulary} 23390\par 23391\sphinxattableend\end{savenotes} 23392 23393 23394\subsubsection{KRB5\_RESPONDER\_OTP\_FORMAT\_DECIMAL} 23395\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_DECIMAL:krb5-responder-otp-format-decimal-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_DECIMAL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_DECIMAL:krb5-responder-otp-format-decimal}}\index{KRB5\_RESPONDER\_OTP\_FORMAT\_DECIMAL (built-in variable)} 23396 23397\begin{fulllineitems} 23398\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_DECIMAL:KRB5_RESPONDER_OTP_FORMAT_DECIMAL}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_OTP\_FORMAT\_DECIMAL}} 23399\end{fulllineitems} 23400 23401 23402These format constants identify the format of the token value. 23403 23404 23405\begin{savenotes}\sphinxattablestart 23406\centering 23407\begin{tabulary}{\linewidth}[t]{|T|T|} 23408\hline 23409 23410\sphinxcode{KRB5\_RESPONDER\_OTP\_FORMAT\_DECIMAL} 23411& 23412\sphinxcode{0} 23413\\ 23414\hline 23415\end{tabulary} 23416\par 23417\sphinxattableend\end{savenotes} 23418 23419 23420\subsubsection{KRB5\_RESPONDER\_OTP\_FORMAT\_HEXADECIMAL} 23421\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL:krb5-responder-otp-format-hexadecimal-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL:krb5-responder-otp-format-hexadecimal}}\index{KRB5\_RESPONDER\_OTP\_FORMAT\_HEXADECIMAL (built-in variable)} 23422 23423\begin{fulllineitems} 23424\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL:KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_OTP\_FORMAT\_HEXADECIMAL}} 23425\end{fulllineitems} 23426 23427 23428 23429\begin{savenotes}\sphinxattablestart 23430\centering 23431\begin{tabulary}{\linewidth}[t]{|T|T|} 23432\hline 23433 23434\sphinxcode{KRB5\_RESPONDER\_OTP\_FORMAT\_HEXADECIMAL} 23435& 23436\sphinxcode{1} 23437\\ 23438\hline 23439\end{tabulary} 23440\par 23441\sphinxattableend\end{savenotes} 23442 23443 23444\subsubsection{KRB5\_RESPONDER\_QUESTION\_OTP} 23445\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_OTP:krb5-responder-question-otp}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_OTP:krb5-responder-question-otp-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_OTP::doc}}\index{KRB5\_RESPONDER\_QUESTION\_OTP (built-in variable)} 23446 23447\begin{fulllineitems} 23448\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_OTP:KRB5_RESPONDER_QUESTION_OTP}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_QUESTION\_OTP}} 23449\end{fulllineitems} 23450 23451 23452OTP responder question. 23453 23454The OTP responder question is asked when the KDC indicates that an OTP value is required in order to complete the authentication. The JSON format of the challenge is: 23455 23456\fvset{hllines={, ,}}% 23457\begin{sphinxVerbatim}[commandchars=\\\{\}] 23458 \PYG{p}{\PYGZob{}} 23459 \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{service}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:} \PYG{o}{\PYGZlt{}}\PYG{n}{string} \PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,} 23460 \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{tokenInfo}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:} \PYG{p}{[} 23461 \PYG{p}{\PYGZob{}} 23462 \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{flags}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:} \PYG{o}{\PYGZlt{}}\PYG{n}{number}\PYG{o}{\PYGZgt{}}\PYG{p}{,} 23463 \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{vendor}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:} \PYG{o}{\PYGZlt{}}\PYG{n}{string} \PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,} 23464 \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{challenge}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:} \PYG{o}{\PYGZlt{}}\PYG{n}{string} \PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,} 23465 \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{length}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:} \PYG{o}{\PYGZlt{}}\PYG{n}{number} \PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,} 23466 \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{format}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:} \PYG{o}{\PYGZlt{}}\PYG{n}{number} \PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,} 23467 \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{tokenID}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:} \PYG{o}{\PYGZlt{}}\PYG{n}{string} \PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,} 23468 \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{algID}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:} \PYG{o}{\PYGZlt{}}\PYG{n}{string} \PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,} 23469 \PYG{p}{\PYGZcb{}}\PYG{p}{,} 23470 \PYG{p}{.}\PYG{p}{.}\PYG{p}{.} 23471 \PYG{p}{]} 23472\PYG{p}{\PYGZcb{}} 23473\end{sphinxVerbatim} 23474 23475The answer to the question MUST be JSON formatted: 23476 23477\fvset{hllines={, ,}}% 23478\begin{sphinxVerbatim}[commandchars=\\\{\}] 23479 \PYG{p}{\PYGZob{}} 23480 \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{tokeninfo}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:} \PYG{o}{\PYGZlt{}}\PYG{n}{number}\PYG{o}{\PYGZgt{}}\PYG{p}{,} 23481 \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{value}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:} \PYG{o}{\PYGZlt{}}\PYG{n}{string} \PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,} 23482 \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{pin}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:} \PYG{o}{\PYGZlt{}}\PYG{n}{string} \PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,} 23483\PYG{p}{\PYGZcb{}} 23484\end{sphinxVerbatim} 23485 23486For more detail, please see RFC 6560. 23487 23488 23489\begin{savenotes}\sphinxattablestart 23490\centering 23491\begin{tabulary}{\linewidth}[t]{|T|T|} 23492\hline 23493 23494\sphinxcode{KRB5\_RESPONDER\_QUESTION\_OTP} 23495& 23496\sphinxcode{"otp"} 23497\\ 23498\hline 23499\end{tabulary} 23500\par 23501\sphinxattableend\end{savenotes} 23502 23503 23504\subsubsection{KRB5\_RESPONDER\_QUESTION\_PASSWORD} 23505\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PASSWORD:krb5-responder-question-password-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PASSWORD:krb5-responder-question-password}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PASSWORD::doc}}\index{KRB5\_RESPONDER\_QUESTION\_PASSWORD (built-in variable)} 23506 23507\begin{fulllineitems} 23508\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PASSWORD:KRB5_RESPONDER_QUESTION_PASSWORD}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_QUESTION\_PASSWORD}} 23509\end{fulllineitems} 23510 23511 23512Long-term password responder question. 23513 23514This question is asked when the long-term password is needed. It has no challenge and the response is simply the password string. 23515 23516 23517\begin{savenotes}\sphinxattablestart 23518\centering 23519\begin{tabulary}{\linewidth}[t]{|T|T|} 23520\hline 23521 23522\sphinxcode{KRB5\_RESPONDER\_QUESTION\_PASSWORD} 23523& 23524\sphinxcode{"password"} 23525\\ 23526\hline 23527\end{tabulary} 23528\par 23529\sphinxattableend\end{savenotes} 23530 23531 23532\subsubsection{KRB5\_SAFE} 23533\label{\detokenize{appdev/refs/macros/KRB5_SAFE:krb5-safe}}\label{\detokenize{appdev/refs/macros/KRB5_SAFE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_SAFE:krb5-safe-data}}\index{KRB5\_SAFE (built-in variable)} 23534 23535\begin{fulllineitems} 23536\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_SAFE:KRB5_SAFE}}\pysigline{\sphinxbfcode{KRB5\_SAFE}} 23537\end{fulllineitems} 23538 23539 23540Safe application message. 23541 23542 23543\begin{savenotes}\sphinxattablestart 23544\centering 23545\begin{tabulary}{\linewidth}[t]{|T|T|} 23546\hline 23547 23548\sphinxcode{KRB5\_SAFE} 23549& 23550\sphinxcode{((krb5\_msgtype)20)} 23551\\ 23552\hline 23553\end{tabulary} 23554\par 23555\sphinxattableend\end{savenotes} 23556 23557 23558\subsubsection{KRB5\_SAM\_MUST\_PK\_ENCRYPT\_SAD} 23559\label{\detokenize{appdev/refs/macros/KRB5_SAM_MUST_PK_ENCRYPT_SAD:krb5-sam-must-pk-encrypt-sad}}\label{\detokenize{appdev/refs/macros/KRB5_SAM_MUST_PK_ENCRYPT_SAD:krb5-sam-must-pk-encrypt-sad-data}}\label{\detokenize{appdev/refs/macros/KRB5_SAM_MUST_PK_ENCRYPT_SAD::doc}}\index{KRB5\_SAM\_MUST\_PK\_ENCRYPT\_SAD (built-in variable)} 23560 23561\begin{fulllineitems} 23562\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_SAM_MUST_PK_ENCRYPT_SAD:KRB5_SAM_MUST_PK_ENCRYPT_SAD}}\pysigline{\sphinxbfcode{KRB5\_SAM\_MUST\_PK\_ENCRYPT\_SAD}} 23563\end{fulllineitems} 23564 23565 23566currently must be zero 23567 23568 23569\begin{savenotes}\sphinxattablestart 23570\centering 23571\begin{tabulary}{\linewidth}[t]{|T|T|} 23572\hline 23573 23574\sphinxcode{KRB5\_SAM\_MUST\_PK\_ENCRYPT\_SAD} 23575& 23576\sphinxcode{0x20000000} 23577\\ 23578\hline 23579\end{tabulary} 23580\par 23581\sphinxattableend\end{savenotes} 23582 23583 23584\subsubsection{KRB5\_SAM\_SEND\_ENCRYPTED\_SAD} 23585\label{\detokenize{appdev/refs/macros/KRB5_SAM_SEND_ENCRYPTED_SAD:krb5-sam-send-encrypted-sad}}\label{\detokenize{appdev/refs/macros/KRB5_SAM_SEND_ENCRYPTED_SAD::doc}}\label{\detokenize{appdev/refs/macros/KRB5_SAM_SEND_ENCRYPTED_SAD:krb5-sam-send-encrypted-sad-data}}\index{KRB5\_SAM\_SEND\_ENCRYPTED\_SAD (built-in variable)} 23586 23587\begin{fulllineitems} 23588\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_SAM_SEND_ENCRYPTED_SAD:KRB5_SAM_SEND_ENCRYPTED_SAD}}\pysigline{\sphinxbfcode{KRB5\_SAM\_SEND\_ENCRYPTED\_SAD}} 23589\end{fulllineitems} 23590 23591 23592 23593\begin{savenotes}\sphinxattablestart 23594\centering 23595\begin{tabulary}{\linewidth}[t]{|T|T|} 23596\hline 23597 23598\sphinxcode{KRB5\_SAM\_SEND\_ENCRYPTED\_SAD} 23599& 23600\sphinxcode{0x40000000} 23601\\ 23602\hline 23603\end{tabulary} 23604\par 23605\sphinxattableend\end{savenotes} 23606 23607 23608\subsubsection{KRB5\_SAM\_USE\_SAD\_AS\_KEY} 23609\label{\detokenize{appdev/refs/macros/KRB5_SAM_USE_SAD_AS_KEY::doc}}\label{\detokenize{appdev/refs/macros/KRB5_SAM_USE_SAD_AS_KEY:krb5-sam-use-sad-as-key}}\label{\detokenize{appdev/refs/macros/KRB5_SAM_USE_SAD_AS_KEY:krb5-sam-use-sad-as-key-data}}\index{KRB5\_SAM\_USE\_SAD\_AS\_KEY (built-in variable)} 23610 23611\begin{fulllineitems} 23612\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_SAM_USE_SAD_AS_KEY:KRB5_SAM_USE_SAD_AS_KEY}}\pysigline{\sphinxbfcode{KRB5\_SAM\_USE\_SAD\_AS\_KEY}} 23613\end{fulllineitems} 23614 23615 23616 23617\begin{savenotes}\sphinxattablestart 23618\centering 23619\begin{tabulary}{\linewidth}[t]{|T|T|} 23620\hline 23621 23622\sphinxcode{KRB5\_SAM\_USE\_SAD\_AS\_KEY} 23623& 23624\sphinxcode{0x80000000} 23625\\ 23626\hline 23627\end{tabulary} 23628\par 23629\sphinxattableend\end{savenotes} 23630 23631 23632\subsubsection{KRB5\_TC\_MATCH\_2ND\_TKT} 23633\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_2ND_TKT:krb5-tc-match-2nd-tkt-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_2ND_TKT::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_2ND_TKT:krb5-tc-match-2nd-tkt}}\index{KRB5\_TC\_MATCH\_2ND\_TKT (built-in variable)} 23634 23635\begin{fulllineitems} 23636\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_2ND_TKT:KRB5_TC_MATCH_2ND_TKT}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_2ND\_TKT}} 23637\end{fulllineitems} 23638 23639 23640The second ticket must match. 23641 23642 23643\begin{savenotes}\sphinxattablestart 23644\centering 23645\begin{tabulary}{\linewidth}[t]{|T|T|} 23646\hline 23647 23648\sphinxcode{KRB5\_TC\_MATCH\_2ND\_TKT} 23649& 23650\sphinxcode{0x00000080} 23651\\ 23652\hline 23653\end{tabulary} 23654\par 23655\sphinxattableend\end{savenotes} 23656 23657 23658\subsubsection{KRB5\_TC\_MATCH\_AUTHDATA} 23659\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA:krb5-tc-match-authdata-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA:krb5-tc-match-authdata}}\index{KRB5\_TC\_MATCH\_AUTHDATA (built-in variable)} 23660 23661\begin{fulllineitems} 23662\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA:KRB5_TC_MATCH_AUTHDATA}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_AUTHDATA}} 23663\end{fulllineitems} 23664 23665 23666The authorization data must match. 23667 23668 23669\begin{savenotes}\sphinxattablestart 23670\centering 23671\begin{tabulary}{\linewidth}[t]{|T|T|} 23672\hline 23673 23674\sphinxcode{KRB5\_TC\_MATCH\_AUTHDATA} 23675& 23676\sphinxcode{0x00000020} 23677\\ 23678\hline 23679\end{tabulary} 23680\par 23681\sphinxattableend\end{savenotes} 23682 23683 23684\subsubsection{KRB5\_TC\_MATCH\_FLAGS} 23685\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS:krb5-tc-match-flags}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS:krb5-tc-match-flags-data}}\index{KRB5\_TC\_MATCH\_FLAGS (built-in variable)} 23686 23687\begin{fulllineitems} 23688\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS:KRB5_TC_MATCH_FLAGS}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_FLAGS}} 23689\end{fulllineitems} 23690 23691 23692All the flags set in the match credentials must be set. 23693 23694 23695\begin{savenotes}\sphinxattablestart 23696\centering 23697\begin{tabulary}{\linewidth}[t]{|T|T|} 23698\hline 23699 23700\sphinxcode{KRB5\_TC\_MATCH\_FLAGS} 23701& 23702\sphinxcode{0x00000004} 23703\\ 23704\hline 23705\end{tabulary} 23706\par 23707\sphinxattableend\end{savenotes} 23708 23709 23710\subsubsection{KRB5\_TC\_MATCH\_FLAGS\_EXACT} 23711\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS_EXACT:krb5-tc-match-flags-exact}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS_EXACT::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS_EXACT:krb5-tc-match-flags-exact-data}}\index{KRB5\_TC\_MATCH\_FLAGS\_EXACT (built-in variable)} 23712 23713\begin{fulllineitems} 23714\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS_EXACT:KRB5_TC_MATCH_FLAGS_EXACT}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_FLAGS\_EXACT}} 23715\end{fulllineitems} 23716 23717 23718All the flags must match exactly. 23719 23720 23721\begin{savenotes}\sphinxattablestart 23722\centering 23723\begin{tabulary}{\linewidth}[t]{|T|T|} 23724\hline 23725 23726\sphinxcode{KRB5\_TC\_MATCH\_FLAGS\_EXACT} 23727& 23728\sphinxcode{0x00000010} 23729\\ 23730\hline 23731\end{tabulary} 23732\par 23733\sphinxattableend\end{savenotes} 23734 23735 23736\subsubsection{KRB5\_TC\_MATCH\_IS\_SKEY} 23737\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_IS_SKEY:krb5-tc-match-is-skey}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_IS_SKEY:krb5-tc-match-is-skey-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_IS_SKEY::doc}}\index{KRB5\_TC\_MATCH\_IS\_SKEY (built-in variable)} 23738 23739\begin{fulllineitems} 23740\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_IS_SKEY:KRB5_TC_MATCH_IS_SKEY}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_IS\_SKEY}} 23741\end{fulllineitems} 23742 23743 23744The is\_skey field must match exactly. 23745 23746 23747\begin{savenotes}\sphinxattablestart 23748\centering 23749\begin{tabulary}{\linewidth}[t]{|T|T|} 23750\hline 23751 23752\sphinxcode{KRB5\_TC\_MATCH\_IS\_SKEY} 23753& 23754\sphinxcode{0x00000002} 23755\\ 23756\hline 23757\end{tabulary} 23758\par 23759\sphinxattableend\end{savenotes} 23760 23761 23762\subsubsection{KRB5\_TC\_MATCH\_KTYPE} 23763\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_KTYPE:krb5-tc-match-ktype}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_KTYPE:krb5-tc-match-ktype-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_KTYPE::doc}}\index{KRB5\_TC\_MATCH\_KTYPE (built-in variable)} 23764 23765\begin{fulllineitems} 23766\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_KTYPE:KRB5_TC_MATCH_KTYPE}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_KTYPE}} 23767\end{fulllineitems} 23768 23769 23770The encryption key type must match. 23771 23772 23773\begin{savenotes}\sphinxattablestart 23774\centering 23775\begin{tabulary}{\linewidth}[t]{|T|T|} 23776\hline 23777 23778\sphinxcode{KRB5\_TC\_MATCH\_KTYPE} 23779& 23780\sphinxcode{0x00000100} 23781\\ 23782\hline 23783\end{tabulary} 23784\par 23785\sphinxattableend\end{savenotes} 23786 23787 23788\subsubsection{KRB5\_TC\_MATCH\_SRV\_NAMEONLY} 23789\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_SRV_NAMEONLY::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_SRV_NAMEONLY:krb5-tc-match-srv-nameonly}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_SRV_NAMEONLY:krb5-tc-match-srv-nameonly-data}}\index{KRB5\_TC\_MATCH\_SRV\_NAMEONLY (built-in variable)} 23790 23791\begin{fulllineitems} 23792\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_SRV_NAMEONLY:KRB5_TC_MATCH_SRV_NAMEONLY}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_SRV\_NAMEONLY}} 23793\end{fulllineitems} 23794 23795 23796Only the name portion of the principal name must match. 23797 23798 23799\begin{savenotes}\sphinxattablestart 23800\centering 23801\begin{tabulary}{\linewidth}[t]{|T|T|} 23802\hline 23803 23804\sphinxcode{KRB5\_TC\_MATCH\_SRV\_NAMEONLY} 23805& 23806\sphinxcode{0x00000040} 23807\\ 23808\hline 23809\end{tabulary} 23810\par 23811\sphinxattableend\end{savenotes} 23812 23813 23814\subsubsection{KRB5\_TC\_MATCH\_TIMES} 23815\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES:krb5-tc-match-times}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES:krb5-tc-match-times-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES::doc}}\index{KRB5\_TC\_MATCH\_TIMES (built-in variable)} 23816 23817\begin{fulllineitems} 23818\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES:KRB5_TC_MATCH_TIMES}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_TIMES}} 23819\end{fulllineitems} 23820 23821 23822The requested lifetime must be at least as great as the time specified. 23823 23824 23825\begin{savenotes}\sphinxattablestart 23826\centering 23827\begin{tabulary}{\linewidth}[t]{|T|T|} 23828\hline 23829 23830\sphinxcode{KRB5\_TC\_MATCH\_TIMES} 23831& 23832\sphinxcode{0x00000001} 23833\\ 23834\hline 23835\end{tabulary} 23836\par 23837\sphinxattableend\end{savenotes} 23838 23839 23840\subsubsection{KRB5\_TC\_MATCH\_TIMES\_EXACT} 23841\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES_EXACT:krb5-tc-match-times-exact-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES_EXACT::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES_EXACT:krb5-tc-match-times-exact}}\index{KRB5\_TC\_MATCH\_TIMES\_EXACT (built-in variable)} 23842 23843\begin{fulllineitems} 23844\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES_EXACT:KRB5_TC_MATCH_TIMES_EXACT}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_TIMES\_EXACT}} 23845\end{fulllineitems} 23846 23847 23848All the time fields must match exactly. 23849 23850 23851\begin{savenotes}\sphinxattablestart 23852\centering 23853\begin{tabulary}{\linewidth}[t]{|T|T|} 23854\hline 23855 23856\sphinxcode{KRB5\_TC\_MATCH\_TIMES\_EXACT} 23857& 23858\sphinxcode{0x00000008} 23859\\ 23860\hline 23861\end{tabulary} 23862\par 23863\sphinxattableend\end{savenotes} 23864 23865 23866\subsubsection{KRB5\_TC\_NOTICKET} 23867\label{\detokenize{appdev/refs/macros/KRB5_TC_NOTICKET:krb5-tc-noticket}}\label{\detokenize{appdev/refs/macros/KRB5_TC_NOTICKET::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TC_NOTICKET:krb5-tc-noticket-data}}\index{KRB5\_TC\_NOTICKET (built-in variable)} 23868 23869\begin{fulllineitems} 23870\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_NOTICKET:KRB5_TC_NOTICKET}}\pysigline{\sphinxbfcode{KRB5\_TC\_NOTICKET}} 23871\end{fulllineitems} 23872 23873 23874 23875\begin{savenotes}\sphinxattablestart 23876\centering 23877\begin{tabulary}{\linewidth}[t]{|T|T|} 23878\hline 23879 23880\sphinxcode{KRB5\_TC\_NOTICKET} 23881& 23882\sphinxcode{0x00000002} 23883\\ 23884\hline 23885\end{tabulary} 23886\par 23887\sphinxattableend\end{savenotes} 23888 23889 23890\subsubsection{KRB5\_TC\_OPENCLOSE} 23891\label{\detokenize{appdev/refs/macros/KRB5_TC_OPENCLOSE:krb5-tc-openclose}}\label{\detokenize{appdev/refs/macros/KRB5_TC_OPENCLOSE:krb5-tc-openclose-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_OPENCLOSE::doc}}\index{KRB5\_TC\_OPENCLOSE (built-in variable)} 23892 23893\begin{fulllineitems} 23894\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_OPENCLOSE:KRB5_TC_OPENCLOSE}}\pysigline{\sphinxbfcode{KRB5\_TC\_OPENCLOSE}} 23895\end{fulllineitems} 23896 23897 23898Open and close the file for each cache operation. 23899 23900 23901\begin{savenotes}\sphinxattablestart 23902\centering 23903\begin{tabulary}{\linewidth}[t]{|T|T|} 23904\hline 23905 23906\sphinxcode{KRB5\_TC\_OPENCLOSE} 23907& 23908\sphinxcode{0x00000001} 23909\\ 23910\hline 23911\end{tabulary} 23912\par 23913\sphinxattableend\end{savenotes} 23914 23915 23916\subsubsection{KRB5\_TC\_SUPPORTED\_KTYPES} 23917\label{\detokenize{appdev/refs/macros/KRB5_TC_SUPPORTED_KTYPES:krb5-tc-supported-ktypes-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_SUPPORTED_KTYPES::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TC_SUPPORTED_KTYPES:krb5-tc-supported-ktypes}}\index{KRB5\_TC\_SUPPORTED\_KTYPES (built-in variable)} 23918 23919\begin{fulllineitems} 23920\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_SUPPORTED_KTYPES:KRB5_TC_SUPPORTED_KTYPES}}\pysigline{\sphinxbfcode{KRB5\_TC\_SUPPORTED\_KTYPES}} 23921\end{fulllineitems} 23922 23923 23924The supported key types must match. 23925 23926 23927\begin{savenotes}\sphinxattablestart 23928\centering 23929\begin{tabulary}{\linewidth}[t]{|T|T|} 23930\hline 23931 23932\sphinxcode{KRB5\_TC\_SUPPORTED\_KTYPES} 23933& 23934\sphinxcode{0x00000200} 23935\\ 23936\hline 23937\end{tabulary} 23938\par 23939\sphinxattableend\end{savenotes} 23940 23941 23942\subsubsection{KRB5\_TGS\_NAME} 23943\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME:krb5-tgs-name-data}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME:krb5-tgs-name}}\index{KRB5\_TGS\_NAME (built-in variable)} 23944 23945\begin{fulllineitems} 23946\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME:KRB5_TGS_NAME}}\pysigline{\sphinxbfcode{KRB5\_TGS\_NAME}} 23947\end{fulllineitems} 23948 23949 23950 23951\begin{savenotes}\sphinxattablestart 23952\centering 23953\begin{tabulary}{\linewidth}[t]{|T|T|} 23954\hline 23955 23956\sphinxcode{KRB5\_TGS\_NAME} 23957& 23958\sphinxcode{"krbtgt"} 23959\\ 23960\hline 23961\end{tabulary} 23962\par 23963\sphinxattableend\end{savenotes} 23964 23965 23966\subsubsection{KRB5\_TGS\_NAME\_SIZE} 23967\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME_SIZE:krb5-tgs-name-size}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME_SIZE:krb5-tgs-name-size-data}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME_SIZE::doc}}\index{KRB5\_TGS\_NAME\_SIZE (built-in variable)} 23968 23969\begin{fulllineitems} 23970\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME_SIZE:KRB5_TGS_NAME_SIZE}}\pysigline{\sphinxbfcode{KRB5\_TGS\_NAME\_SIZE}} 23971\end{fulllineitems} 23972 23973 23974 23975\begin{savenotes}\sphinxattablestart 23976\centering 23977\begin{tabulary}{\linewidth}[t]{|T|T|} 23978\hline 23979 23980\sphinxcode{KRB5\_TGS\_NAME\_SIZE} 23981& 23982\sphinxcode{6} 23983\\ 23984\hline 23985\end{tabulary} 23986\par 23987\sphinxattableend\end{savenotes} 23988 23989 23990\subsubsection{KRB5\_TGS\_REP} 23991\label{\detokenize{appdev/refs/macros/KRB5_TGS_REP::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_REP:krb5-tgs-rep-data}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_REP:krb5-tgs-rep}}\index{KRB5\_TGS\_REP (built-in variable)} 23992 23993\begin{fulllineitems} 23994\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TGS_REP:KRB5_TGS_REP}}\pysigline{\sphinxbfcode{KRB5\_TGS\_REP}} 23995\end{fulllineitems} 23996 23997 23998Response to TGS request. 23999 24000 24001\begin{savenotes}\sphinxattablestart 24002\centering 24003\begin{tabulary}{\linewidth}[t]{|T|T|} 24004\hline 24005 24006\sphinxcode{KRB5\_TGS\_REP} 24007& 24008\sphinxcode{((krb5\_msgtype)13)} 24009\\ 24010\hline 24011\end{tabulary} 24012\par 24013\sphinxattableend\end{savenotes} 24014 24015 24016\subsubsection{KRB5\_TGS\_REQ} 24017\label{\detokenize{appdev/refs/macros/KRB5_TGS_REQ:krb5-tgs-req-data}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_REQ::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_REQ:krb5-tgs-req}}\index{KRB5\_TGS\_REQ (built-in variable)} 24018 24019\begin{fulllineitems} 24020\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TGS_REQ:KRB5_TGS_REQ}}\pysigline{\sphinxbfcode{KRB5\_TGS\_REQ}} 24021\end{fulllineitems} 24022 24023 24024Ticket granting server request. 24025 24026 24027\begin{savenotes}\sphinxattablestart 24028\centering 24029\begin{tabulary}{\linewidth}[t]{|T|T|} 24030\hline 24031 24032\sphinxcode{KRB5\_TGS\_REQ} 24033& 24034\sphinxcode{((krb5\_msgtype)12)} 24035\\ 24036\hline 24037\end{tabulary} 24038\par 24039\sphinxattableend\end{savenotes} 24040 24041 24042\subsubsection{KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE} 24043\label{\detokenize{appdev/refs/macros/KRB5_TKT_CREDS_STEP_FLAG_CONTINUE:krb5-tkt-creds-step-flag-continue-data}}\label{\detokenize{appdev/refs/macros/KRB5_TKT_CREDS_STEP_FLAG_CONTINUE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TKT_CREDS_STEP_FLAG_CONTINUE:krb5-tkt-creds-step-flag-continue}}\index{KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE (built-in variable)} 24044 24045\begin{fulllineitems} 24046\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TKT_CREDS_STEP_FLAG_CONTINUE:KRB5_TKT_CREDS_STEP_FLAG_CONTINUE}}\pysigline{\sphinxbfcode{KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE}} 24047\end{fulllineitems} 24048 24049 24050More responses needed. 24051 24052 24053\begin{savenotes}\sphinxattablestart 24054\centering 24055\begin{tabulary}{\linewidth}[t]{|T|T|} 24056\hline 24057 24058\sphinxcode{KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE} 24059& 24060\sphinxcode{0x1} 24061\\ 24062\hline 24063\end{tabulary} 24064\par 24065\sphinxattableend\end{savenotes} 24066 24067 24068\subsubsection{KRB5\_VERIFY\_INIT\_CREDS\_OPT\_AP\_REQ\_NOFAIL} 24069\label{\detokenize{appdev/refs/macros/KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL:krb5-verify-init-creds-opt-ap-req-nofail}}\label{\detokenize{appdev/refs/macros/KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL:krb5-verify-init-creds-opt-ap-req-nofail-data}}\index{KRB5\_VERIFY\_INIT\_CREDS\_OPT\_AP\_REQ\_NOFAIL (built-in variable)} 24070 24071\begin{fulllineitems} 24072\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL:KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL}}\pysigline{\sphinxbfcode{KRB5\_VERIFY\_INIT\_CREDS\_OPT\_AP\_REQ\_NOFAIL}} 24073\end{fulllineitems} 24074 24075 24076 24077\begin{savenotes}\sphinxattablestart 24078\centering 24079\begin{tabulary}{\linewidth}[t]{|T|T|} 24080\hline 24081 24082\sphinxcode{KRB5\_VERIFY\_INIT\_CREDS\_OPT\_AP\_REQ\_NOFAIL} 24083& 24084\sphinxcode{0x0001} 24085\\ 24086\hline 24087\end{tabulary} 24088\par 24089\sphinxattableend\end{savenotes} 24090 24091 24092\subsubsection{KRB5\_WELLKNOWN\_NAMESTR} 24093\label{\detokenize{appdev/refs/macros/KRB5_WELLKNOWN_NAMESTR::doc}}\label{\detokenize{appdev/refs/macros/KRB5_WELLKNOWN_NAMESTR:krb5-wellknown-namestr}}\label{\detokenize{appdev/refs/macros/KRB5_WELLKNOWN_NAMESTR:krb5-wellknown-namestr-data}}\index{KRB5\_WELLKNOWN\_NAMESTR (built-in variable)} 24094 24095\begin{fulllineitems} 24096\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_WELLKNOWN_NAMESTR:KRB5_WELLKNOWN_NAMESTR}}\pysigline{\sphinxbfcode{KRB5\_WELLKNOWN\_NAMESTR}} 24097\end{fulllineitems} 24098 24099 24100First component of NT\_WELLKNOWN principals. 24101 24102 24103\begin{savenotes}\sphinxattablestart 24104\centering 24105\begin{tabulary}{\linewidth}[t]{|T|T|} 24106\hline 24107 24108\sphinxcode{KRB5\_WELLKNOWN\_NAMESTR} 24109& 24110\sphinxcode{"WELLKNOWN"} 24111\\ 24112\hline 24113\end{tabulary} 24114\par 24115\sphinxattableend\end{savenotes} 24116 24117 24118\subsubsection{LR\_TYPE\_INTERPRETATION\_MASK} 24119\label{\detokenize{appdev/refs/macros/LR_TYPE_INTERPRETATION_MASK:lr-type-interpretation-mask-data}}\label{\detokenize{appdev/refs/macros/LR_TYPE_INTERPRETATION_MASK:lr-type-interpretation-mask}}\label{\detokenize{appdev/refs/macros/LR_TYPE_INTERPRETATION_MASK::doc}}\index{LR\_TYPE\_INTERPRETATION\_MASK (built-in variable)} 24120 24121\begin{fulllineitems} 24122\phantomsection\label{\detokenize{appdev/refs/macros/LR_TYPE_INTERPRETATION_MASK:LR_TYPE_INTERPRETATION_MASK}}\pysigline{\sphinxbfcode{LR\_TYPE\_INTERPRETATION\_MASK}} 24123\end{fulllineitems} 24124 24125 24126 24127\begin{savenotes}\sphinxattablestart 24128\centering 24129\begin{tabulary}{\linewidth}[t]{|T|T|} 24130\hline 24131 24132\sphinxcode{LR\_TYPE\_INTERPRETATION\_MASK} 24133& 24134\sphinxcode{0x7fff} 24135\\ 24136\hline 24137\end{tabulary} 24138\par 24139\sphinxattableend\end{savenotes} 24140 24141 24142\subsubsection{LR\_TYPE\_THIS\_SERVER\_ONLY} 24143\label{\detokenize{appdev/refs/macros/LR_TYPE_THIS_SERVER_ONLY:lr-type-this-server-only-data}}\label{\detokenize{appdev/refs/macros/LR_TYPE_THIS_SERVER_ONLY:lr-type-this-server-only}}\label{\detokenize{appdev/refs/macros/LR_TYPE_THIS_SERVER_ONLY::doc}}\index{LR\_TYPE\_THIS\_SERVER\_ONLY (built-in variable)} 24144 24145\begin{fulllineitems} 24146\phantomsection\label{\detokenize{appdev/refs/macros/LR_TYPE_THIS_SERVER_ONLY:LR_TYPE_THIS_SERVER_ONLY}}\pysigline{\sphinxbfcode{LR\_TYPE\_THIS\_SERVER\_ONLY}} 24147\end{fulllineitems} 24148 24149 24150 24151\begin{savenotes}\sphinxattablestart 24152\centering 24153\begin{tabulary}{\linewidth}[t]{|T|T|} 24154\hline 24155 24156\sphinxcode{LR\_TYPE\_THIS\_SERVER\_ONLY} 24157& 24158\sphinxcode{0x8000} 24159\\ 24160\hline 24161\end{tabulary} 24162\par 24163\sphinxattableend\end{savenotes} 24164 24165 24166\subsubsection{MAX\_KEYTAB\_NAME\_LEN} 24167\label{\detokenize{appdev/refs/macros/MAX_KEYTAB_NAME_LEN:max-keytab-name-len-data}}\label{\detokenize{appdev/refs/macros/MAX_KEYTAB_NAME_LEN::doc}}\label{\detokenize{appdev/refs/macros/MAX_KEYTAB_NAME_LEN:max-keytab-name-len}}\index{MAX\_KEYTAB\_NAME\_LEN (built-in variable)} 24168 24169\begin{fulllineitems} 24170\phantomsection\label{\detokenize{appdev/refs/macros/MAX_KEYTAB_NAME_LEN:MAX_KEYTAB_NAME_LEN}}\pysigline{\sphinxbfcode{MAX\_KEYTAB\_NAME\_LEN}} 24171\end{fulllineitems} 24172 24173 24174Long enough for MAXPATHLEN + some extra. 24175 24176 24177\begin{savenotes}\sphinxattablestart 24178\centering 24179\begin{tabulary}{\linewidth}[t]{|T|T|} 24180\hline 24181 24182\sphinxcode{MAX\_KEYTAB\_NAME\_LEN} 24183& 24184\sphinxcode{1100} 24185\\ 24186\hline 24187\end{tabulary} 24188\par 24189\sphinxattableend\end{savenotes} 24190 24191 24192\subsubsection{MSEC\_DIRBIT} 24193\label{\detokenize{appdev/refs/macros/MSEC_DIRBIT:msec-dirbit}}\label{\detokenize{appdev/refs/macros/MSEC_DIRBIT:msec-dirbit-data}}\label{\detokenize{appdev/refs/macros/MSEC_DIRBIT::doc}}\index{MSEC\_DIRBIT (built-in variable)} 24194 24195\begin{fulllineitems} 24196\phantomsection\label{\detokenize{appdev/refs/macros/MSEC_DIRBIT:MSEC_DIRBIT}}\pysigline{\sphinxbfcode{MSEC\_DIRBIT}} 24197\end{fulllineitems} 24198 24199 24200 24201\begin{savenotes}\sphinxattablestart 24202\centering 24203\begin{tabulary}{\linewidth}[t]{|T|T|} 24204\hline 24205 24206\sphinxcode{MSEC\_DIRBIT} 24207& 24208\sphinxcode{0x8000} 24209\\ 24210\hline 24211\end{tabulary} 24212\par 24213\sphinxattableend\end{savenotes} 24214 24215 24216\subsubsection{MSEC\_VAL\_MASK} 24217\label{\detokenize{appdev/refs/macros/MSEC_VAL_MASK:msec-val-mask-data}}\label{\detokenize{appdev/refs/macros/MSEC_VAL_MASK::doc}}\label{\detokenize{appdev/refs/macros/MSEC_VAL_MASK:msec-val-mask}}\index{MSEC\_VAL\_MASK (built-in variable)} 24218 24219\begin{fulllineitems} 24220\phantomsection\label{\detokenize{appdev/refs/macros/MSEC_VAL_MASK:MSEC_VAL_MASK}}\pysigline{\sphinxbfcode{MSEC\_VAL\_MASK}} 24221\end{fulllineitems} 24222 24223 24224 24225\begin{savenotes}\sphinxattablestart 24226\centering 24227\begin{tabulary}{\linewidth}[t]{|T|T|} 24228\hline 24229 24230\sphinxcode{MSEC\_VAL\_MASK} 24231& 24232\sphinxcode{0x7fff} 24233\\ 24234\hline 24235\end{tabulary} 24236\par 24237\sphinxattableend\end{savenotes} 24238 24239 24240\subsubsection{SALT\_TYPE\_AFS\_LENGTH} 24241\label{\detokenize{appdev/refs/macros/SALT_TYPE_AFS_LENGTH::doc}}\label{\detokenize{appdev/refs/macros/SALT_TYPE_AFS_LENGTH:salt-type-afs-length-data}}\label{\detokenize{appdev/refs/macros/SALT_TYPE_AFS_LENGTH:salt-type-afs-length}}\index{SALT\_TYPE\_AFS\_LENGTH (built-in variable)} 24242 24243\begin{fulllineitems} 24244\phantomsection\label{\detokenize{appdev/refs/macros/SALT_TYPE_AFS_LENGTH:SALT_TYPE_AFS_LENGTH}}\pysigline{\sphinxbfcode{SALT\_TYPE\_AFS\_LENGTH}} 24245\end{fulllineitems} 24246 24247 24248 24249\begin{savenotes}\sphinxattablestart 24250\centering 24251\begin{tabulary}{\linewidth}[t]{|T|T|} 24252\hline 24253 24254\sphinxcode{SALT\_TYPE\_AFS\_LENGTH} 24255& 24256\sphinxcode{UINT\_MAX} 24257\\ 24258\hline 24259\end{tabulary} 24260\par 24261\sphinxattableend\end{savenotes} 24262 24263 24264\subsubsection{SALT\_TYPE\_NO\_LENGTH} 24265\label{\detokenize{appdev/refs/macros/SALT_TYPE_NO_LENGTH:salt-type-no-length-data}}\label{\detokenize{appdev/refs/macros/SALT_TYPE_NO_LENGTH::doc}}\label{\detokenize{appdev/refs/macros/SALT_TYPE_NO_LENGTH:salt-type-no-length}}\index{SALT\_TYPE\_NO\_LENGTH (built-in variable)} 24266 24267\begin{fulllineitems} 24268\phantomsection\label{\detokenize{appdev/refs/macros/SALT_TYPE_NO_LENGTH:SALT_TYPE_NO_LENGTH}}\pysigline{\sphinxbfcode{SALT\_TYPE\_NO\_LENGTH}} 24269\end{fulllineitems} 24270 24271 24272 24273\begin{savenotes}\sphinxattablestart 24274\centering 24275\begin{tabulary}{\linewidth}[t]{|T|T|} 24276\hline 24277 24278\sphinxcode{SALT\_TYPE\_NO\_LENGTH} 24279& 24280\sphinxcode{UINT\_MAX} 24281\\ 24282\hline 24283\end{tabulary} 24284\par 24285\sphinxattableend\end{savenotes} 24286 24287 24288\subsubsection{THREEPARAMOPEN} 24289\label{\detokenize{appdev/refs/macros/THREEPARAMOPEN:threeparamopen}}\label{\detokenize{appdev/refs/macros/THREEPARAMOPEN:threeparamopen-data}}\label{\detokenize{appdev/refs/macros/THREEPARAMOPEN::doc}}\index{THREEPARAMOPEN (built-in variable)} 24290 24291\begin{fulllineitems} 24292\phantomsection\label{\detokenize{appdev/refs/macros/THREEPARAMOPEN:THREEPARAMOPEN}}\pysigline{\sphinxbfcode{THREEPARAMOPEN}} 24293\end{fulllineitems} 24294 24295 24296 24297\begin{savenotes}\sphinxattablestart 24298\centering 24299\begin{tabulary}{\linewidth}[t]{|T|T|} 24300\hline 24301 24302\sphinxcode{THREEPARAMOPEN (x, y, z)} 24303& 24304\sphinxcode{open(x,y,z)} 24305\\ 24306\hline 24307\end{tabulary} 24308\par 24309\sphinxattableend\end{savenotes} 24310 24311 24312\subsubsection{TKT\_FLG\_ANONYMOUS} 24313\label{\detokenize{appdev/refs/macros/TKT_FLG_ANONYMOUS::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_ANONYMOUS:tkt-flg-anonymous}}\label{\detokenize{appdev/refs/macros/TKT_FLG_ANONYMOUS:tkt-flg-anonymous-data}}\index{TKT\_FLG\_ANONYMOUS (built-in variable)} 24314 24315\begin{fulllineitems} 24316\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_ANONYMOUS:TKT_FLG_ANONYMOUS}}\pysigline{\sphinxbfcode{TKT\_FLG\_ANONYMOUS}} 24317\end{fulllineitems} 24318 24319 24320 24321\begin{savenotes}\sphinxattablestart 24322\centering 24323\begin{tabulary}{\linewidth}[t]{|T|T|} 24324\hline 24325 24326\sphinxcode{TKT\_FLG\_ANONYMOUS} 24327& 24328\sphinxcode{0x00008000} 24329\\ 24330\hline 24331\end{tabulary} 24332\par 24333\sphinxattableend\end{savenotes} 24334 24335 24336\subsubsection{TKT\_FLG\_ENC\_PA\_REP} 24337\label{\detokenize{appdev/refs/macros/TKT_FLG_ENC_PA_REP:tkt-flg-enc-pa-rep}}\label{\detokenize{appdev/refs/macros/TKT_FLG_ENC_PA_REP:tkt-flg-enc-pa-rep-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_ENC_PA_REP::doc}}\index{TKT\_FLG\_ENC\_PA\_REP (built-in variable)} 24338 24339\begin{fulllineitems} 24340\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_ENC_PA_REP:TKT_FLG_ENC_PA_REP}}\pysigline{\sphinxbfcode{TKT\_FLG\_ENC\_PA\_REP}} 24341\end{fulllineitems} 24342 24343 24344 24345\begin{savenotes}\sphinxattablestart 24346\centering 24347\begin{tabulary}{\linewidth}[t]{|T|T|} 24348\hline 24349 24350\sphinxcode{TKT\_FLG\_ENC\_PA\_REP} 24351& 24352\sphinxcode{0x00010000} 24353\\ 24354\hline 24355\end{tabulary} 24356\par 24357\sphinxattableend\end{savenotes} 24358 24359 24360\subsubsection{TKT\_FLG\_FORWARDABLE} 24361\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDABLE:tkt-flg-forwardable-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDABLE:tkt-flg-forwardable}}\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDABLE::doc}}\index{TKT\_FLG\_FORWARDABLE (built-in variable)} 24362 24363\begin{fulllineitems} 24364\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDABLE:TKT_FLG_FORWARDABLE}}\pysigline{\sphinxbfcode{TKT\_FLG\_FORWARDABLE}} 24365\end{fulllineitems} 24366 24367 24368 24369\begin{savenotes}\sphinxattablestart 24370\centering 24371\begin{tabulary}{\linewidth}[t]{|T|T|} 24372\hline 24373 24374\sphinxcode{TKT\_FLG\_FORWARDABLE} 24375& 24376\sphinxcode{0x40000000} 24377\\ 24378\hline 24379\end{tabulary} 24380\par 24381\sphinxattableend\end{savenotes} 24382 24383 24384\subsubsection{TKT\_FLG\_FORWARDED} 24385\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDED::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDED:tkt-flg-forwarded}}\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDED:tkt-flg-forwarded-data}}\index{TKT\_FLG\_FORWARDED (built-in variable)} 24386 24387\begin{fulllineitems} 24388\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDED:TKT_FLG_FORWARDED}}\pysigline{\sphinxbfcode{TKT\_FLG\_FORWARDED}} 24389\end{fulllineitems} 24390 24391 24392 24393\begin{savenotes}\sphinxattablestart 24394\centering 24395\begin{tabulary}{\linewidth}[t]{|T|T|} 24396\hline 24397 24398\sphinxcode{TKT\_FLG\_FORWARDED} 24399& 24400\sphinxcode{0x20000000} 24401\\ 24402\hline 24403\end{tabulary} 24404\par 24405\sphinxattableend\end{savenotes} 24406 24407 24408\subsubsection{TKT\_FLG\_HW\_AUTH} 24409\label{\detokenize{appdev/refs/macros/TKT_FLG_HW_AUTH::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_HW_AUTH:tkt-flg-hw-auth}}\label{\detokenize{appdev/refs/macros/TKT_FLG_HW_AUTH:tkt-flg-hw-auth-data}}\index{TKT\_FLG\_HW\_AUTH (built-in variable)} 24410 24411\begin{fulllineitems} 24412\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_HW_AUTH:TKT_FLG_HW_AUTH}}\pysigline{\sphinxbfcode{TKT\_FLG\_HW\_AUTH}} 24413\end{fulllineitems} 24414 24415 24416 24417\begin{savenotes}\sphinxattablestart 24418\centering 24419\begin{tabulary}{\linewidth}[t]{|T|T|} 24420\hline 24421 24422\sphinxcode{TKT\_FLG\_HW\_AUTH} 24423& 24424\sphinxcode{0x00100000} 24425\\ 24426\hline 24427\end{tabulary} 24428\par 24429\sphinxattableend\end{savenotes} 24430 24431 24432\subsubsection{TKT\_FLG\_INITIAL} 24433\label{\detokenize{appdev/refs/macros/TKT_FLG_INITIAL:tkt-flg-initial}}\label{\detokenize{appdev/refs/macros/TKT_FLG_INITIAL::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_INITIAL:tkt-flg-initial-data}}\index{TKT\_FLG\_INITIAL (built-in variable)} 24434 24435\begin{fulllineitems} 24436\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_INITIAL:TKT_FLG_INITIAL}}\pysigline{\sphinxbfcode{TKT\_FLG\_INITIAL}} 24437\end{fulllineitems} 24438 24439 24440 24441\begin{savenotes}\sphinxattablestart 24442\centering 24443\begin{tabulary}{\linewidth}[t]{|T|T|} 24444\hline 24445 24446\sphinxcode{TKT\_FLG\_INITIAL} 24447& 24448\sphinxcode{0x00400000} 24449\\ 24450\hline 24451\end{tabulary} 24452\par 24453\sphinxattableend\end{savenotes} 24454 24455 24456\subsubsection{TKT\_FLG\_INVALID} 24457\label{\detokenize{appdev/refs/macros/TKT_FLG_INVALID:tkt-flg-invalid-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_INVALID::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_INVALID:tkt-flg-invalid}}\index{TKT\_FLG\_INVALID (built-in variable)} 24458 24459\begin{fulllineitems} 24460\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_INVALID:TKT_FLG_INVALID}}\pysigline{\sphinxbfcode{TKT\_FLG\_INVALID}} 24461\end{fulllineitems} 24462 24463 24464 24465\begin{savenotes}\sphinxattablestart 24466\centering 24467\begin{tabulary}{\linewidth}[t]{|T|T|} 24468\hline 24469 24470\sphinxcode{TKT\_FLG\_INVALID} 24471& 24472\sphinxcode{0x01000000} 24473\\ 24474\hline 24475\end{tabulary} 24476\par 24477\sphinxattableend\end{savenotes} 24478 24479 24480\subsubsection{TKT\_FLG\_MAY\_POSTDATE} 24481\label{\detokenize{appdev/refs/macros/TKT_FLG_MAY_POSTDATE:tkt-flg-may-postdate}}\label{\detokenize{appdev/refs/macros/TKT_FLG_MAY_POSTDATE::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_MAY_POSTDATE:tkt-flg-may-postdate-data}}\index{TKT\_FLG\_MAY\_POSTDATE (built-in variable)} 24482 24483\begin{fulllineitems} 24484\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_MAY_POSTDATE:TKT_FLG_MAY_POSTDATE}}\pysigline{\sphinxbfcode{TKT\_FLG\_MAY\_POSTDATE}} 24485\end{fulllineitems} 24486 24487 24488 24489\begin{savenotes}\sphinxattablestart 24490\centering 24491\begin{tabulary}{\linewidth}[t]{|T|T|} 24492\hline 24493 24494\sphinxcode{TKT\_FLG\_MAY\_POSTDATE} 24495& 24496\sphinxcode{0x04000000} 24497\\ 24498\hline 24499\end{tabulary} 24500\par 24501\sphinxattableend\end{savenotes} 24502 24503 24504\subsubsection{TKT\_FLG\_OK\_AS\_DELEGATE} 24505\label{\detokenize{appdev/refs/macros/TKT_FLG_OK_AS_DELEGATE:tkt-flg-ok-as-delegate-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_OK_AS_DELEGATE:tkt-flg-ok-as-delegate}}\label{\detokenize{appdev/refs/macros/TKT_FLG_OK_AS_DELEGATE::doc}}\index{TKT\_FLG\_OK\_AS\_DELEGATE (built-in variable)} 24506 24507\begin{fulllineitems} 24508\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_OK_AS_DELEGATE:TKT_FLG_OK_AS_DELEGATE}}\pysigline{\sphinxbfcode{TKT\_FLG\_OK\_AS\_DELEGATE}} 24509\end{fulllineitems} 24510 24511 24512 24513\begin{savenotes}\sphinxattablestart 24514\centering 24515\begin{tabulary}{\linewidth}[t]{|T|T|} 24516\hline 24517 24518\sphinxcode{TKT\_FLG\_OK\_AS\_DELEGATE} 24519& 24520\sphinxcode{0x00040000} 24521\\ 24522\hline 24523\end{tabulary} 24524\par 24525\sphinxattableend\end{savenotes} 24526 24527 24528\subsubsection{TKT\_FLG\_POSTDATED} 24529\label{\detokenize{appdev/refs/macros/TKT_FLG_POSTDATED:tkt-flg-postdated}}\label{\detokenize{appdev/refs/macros/TKT_FLG_POSTDATED::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_POSTDATED:tkt-flg-postdated-data}}\index{TKT\_FLG\_POSTDATED (built-in variable)} 24530 24531\begin{fulllineitems} 24532\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_POSTDATED:TKT_FLG_POSTDATED}}\pysigline{\sphinxbfcode{TKT\_FLG\_POSTDATED}} 24533\end{fulllineitems} 24534 24535 24536 24537\begin{savenotes}\sphinxattablestart 24538\centering 24539\begin{tabulary}{\linewidth}[t]{|T|T|} 24540\hline 24541 24542\sphinxcode{TKT\_FLG\_POSTDATED} 24543& 24544\sphinxcode{0x02000000} 24545\\ 24546\hline 24547\end{tabulary} 24548\par 24549\sphinxattableend\end{savenotes} 24550 24551 24552\subsubsection{TKT\_FLG\_PRE\_AUTH} 24553\label{\detokenize{appdev/refs/macros/TKT_FLG_PRE_AUTH:tkt-flg-pre-auth-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_PRE_AUTH::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_PRE_AUTH:tkt-flg-pre-auth}}\index{TKT\_FLG\_PRE\_AUTH (built-in variable)} 24554 24555\begin{fulllineitems} 24556\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_PRE_AUTH:TKT_FLG_PRE_AUTH}}\pysigline{\sphinxbfcode{TKT\_FLG\_PRE\_AUTH}} 24557\end{fulllineitems} 24558 24559 24560 24561\begin{savenotes}\sphinxattablestart 24562\centering 24563\begin{tabulary}{\linewidth}[t]{|T|T|} 24564\hline 24565 24566\sphinxcode{TKT\_FLG\_PRE\_AUTH} 24567& 24568\sphinxcode{0x00200000} 24569\\ 24570\hline 24571\end{tabulary} 24572\par 24573\sphinxattableend\end{savenotes} 24574 24575 24576\subsubsection{TKT\_FLG\_PROXIABLE} 24577\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXIABLE:tkt-flg-proxiable}}\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXIABLE:tkt-flg-proxiable-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXIABLE::doc}}\index{TKT\_FLG\_PROXIABLE (built-in variable)} 24578 24579\begin{fulllineitems} 24580\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXIABLE:TKT_FLG_PROXIABLE}}\pysigline{\sphinxbfcode{TKT\_FLG\_PROXIABLE}} 24581\end{fulllineitems} 24582 24583 24584 24585\begin{savenotes}\sphinxattablestart 24586\centering 24587\begin{tabulary}{\linewidth}[t]{|T|T|} 24588\hline 24589 24590\sphinxcode{TKT\_FLG\_PROXIABLE} 24591& 24592\sphinxcode{0x10000000} 24593\\ 24594\hline 24595\end{tabulary} 24596\par 24597\sphinxattableend\end{savenotes} 24598 24599 24600\subsubsection{TKT\_FLG\_PROXY} 24601\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXY::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXY:tkt-flg-proxy}}\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXY:tkt-flg-proxy-data}}\index{TKT\_FLG\_PROXY (built-in variable)} 24602 24603\begin{fulllineitems} 24604\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXY:TKT_FLG_PROXY}}\pysigline{\sphinxbfcode{TKT\_FLG\_PROXY}} 24605\end{fulllineitems} 24606 24607 24608 24609\begin{savenotes}\sphinxattablestart 24610\centering 24611\begin{tabulary}{\linewidth}[t]{|T|T|} 24612\hline 24613 24614\sphinxcode{TKT\_FLG\_PROXY} 24615& 24616\sphinxcode{0x08000000} 24617\\ 24618\hline 24619\end{tabulary} 24620\par 24621\sphinxattableend\end{savenotes} 24622 24623 24624\subsubsection{TKT\_FLG\_RENEWABLE} 24625\label{\detokenize{appdev/refs/macros/TKT_FLG_RENEWABLE::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_RENEWABLE:tkt-flg-renewable}}\label{\detokenize{appdev/refs/macros/TKT_FLG_RENEWABLE:tkt-flg-renewable-data}}\index{TKT\_FLG\_RENEWABLE (built-in variable)} 24626 24627\begin{fulllineitems} 24628\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_RENEWABLE:TKT_FLG_RENEWABLE}}\pysigline{\sphinxbfcode{TKT\_FLG\_RENEWABLE}} 24629\end{fulllineitems} 24630 24631 24632 24633\begin{savenotes}\sphinxattablestart 24634\centering 24635\begin{tabulary}{\linewidth}[t]{|T|T|} 24636\hline 24637 24638\sphinxcode{TKT\_FLG\_RENEWABLE} 24639& 24640\sphinxcode{0x00800000} 24641\\ 24642\hline 24643\end{tabulary} 24644\par 24645\sphinxattableend\end{savenotes} 24646 24647 24648\subsubsection{TKT\_FLG\_TRANSIT\_POLICY\_CHECKED} 24649\label{\detokenize{appdev/refs/macros/TKT_FLG_TRANSIT_POLICY_CHECKED::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_TRANSIT_POLICY_CHECKED:tkt-flg-transit-policy-checked}}\label{\detokenize{appdev/refs/macros/TKT_FLG_TRANSIT_POLICY_CHECKED:tkt-flg-transit-policy-checked-data}}\index{TKT\_FLG\_TRANSIT\_POLICY\_CHECKED (built-in variable)} 24650 24651\begin{fulllineitems} 24652\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_TRANSIT_POLICY_CHECKED:TKT_FLG_TRANSIT_POLICY_CHECKED}}\pysigline{\sphinxbfcode{TKT\_FLG\_TRANSIT\_POLICY\_CHECKED}} 24653\end{fulllineitems} 24654 24655 24656 24657\begin{savenotes}\sphinxattablestart 24658\centering 24659\begin{tabulary}{\linewidth}[t]{|T|T|} 24660\hline 24661 24662\sphinxcode{TKT\_FLG\_TRANSIT\_POLICY\_CHECKED} 24663& 24664\sphinxcode{0x00080000} 24665\\ 24666\hline 24667\end{tabulary} 24668\par 24669\sphinxattableend\end{savenotes} 24670 24671 24672\subsubsection{VALID\_INT\_BITS} 24673\label{\detokenize{appdev/refs/macros/VALID_INT_BITS:valid-int-bits}}\label{\detokenize{appdev/refs/macros/VALID_INT_BITS:valid-int-bits-data}}\label{\detokenize{appdev/refs/macros/VALID_INT_BITS::doc}}\index{VALID\_INT\_BITS (built-in variable)} 24674 24675\begin{fulllineitems} 24676\phantomsection\label{\detokenize{appdev/refs/macros/VALID_INT_BITS:VALID_INT_BITS}}\pysigline{\sphinxbfcode{VALID\_INT\_BITS}} 24677\end{fulllineitems} 24678 24679 24680 24681\begin{savenotes}\sphinxattablestart 24682\centering 24683\begin{tabulary}{\linewidth}[t]{|T|T|} 24684\hline 24685 24686\sphinxcode{VALID\_INT\_BITS} 24687& 24688\sphinxcode{INT\_MAX} 24689\\ 24690\hline 24691\end{tabulary} 24692\par 24693\sphinxattableend\end{savenotes} 24694 24695 24696\subsubsection{VALID\_UINT\_BITS} 24697\label{\detokenize{appdev/refs/macros/VALID_UINT_BITS:valid-uint-bits}}\label{\detokenize{appdev/refs/macros/VALID_UINT_BITS::doc}}\label{\detokenize{appdev/refs/macros/VALID_UINT_BITS:valid-uint-bits-data}}\index{VALID\_UINT\_BITS (built-in variable)} 24698 24699\begin{fulllineitems} 24700\phantomsection\label{\detokenize{appdev/refs/macros/VALID_UINT_BITS:VALID_UINT_BITS}}\pysigline{\sphinxbfcode{VALID\_UINT\_BITS}} 24701\end{fulllineitems} 24702 24703 24704 24705\begin{savenotes}\sphinxattablestart 24706\centering 24707\begin{tabulary}{\linewidth}[t]{|T|T|} 24708\hline 24709 24710\sphinxcode{VALID\_UINT\_BITS} 24711& 24712\sphinxcode{UINT\_MAX} 24713\\ 24714\hline 24715\end{tabulary} 24716\par 24717\sphinxattableend\end{savenotes} 24718 24719 24720\subsubsection{krb5\_const} 24721\label{\detokenize{appdev/refs/macros/krb5_const:krb5-const}}\label{\detokenize{appdev/refs/macros/krb5_const:krb5-const-data}}\label{\detokenize{appdev/refs/macros/krb5_const::doc}}\index{krb5\_const (built-in variable)} 24722 24723\begin{fulllineitems} 24724\phantomsection\label{\detokenize{appdev/refs/macros/krb5_const:krb5_const}}\pysigline{\sphinxbfcode{krb5\_const}} 24725\end{fulllineitems} 24726 24727 24728 24729\begin{savenotes}\sphinxattablestart 24730\centering 24731\begin{tabulary}{\linewidth}[t]{|T|T|} 24732\hline 24733 24734\sphinxcode{krb5\_const} 24735& 24736\sphinxcode{const} 24737\\ 24738\hline 24739\end{tabulary} 24740\par 24741\sphinxattableend\end{savenotes} 24742 24743 24744\subsubsection{krb5\_princ\_component} 24745\label{\detokenize{appdev/refs/macros/krb5_princ_component::doc}}\label{\detokenize{appdev/refs/macros/krb5_princ_component:krb5-princ-component-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_component:krb5-princ-component}}\index{krb5\_princ\_component (built-in variable)} 24746 24747\begin{fulllineitems} 24748\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_component:krb5_princ_component}}\pysigline{\sphinxbfcode{krb5\_princ\_component}} 24749\end{fulllineitems} 24750 24751 24752 24753\begin{savenotes}\sphinxattablestart 24754\centering 24755\begin{tabulary}{\linewidth}[t]{|T|T|} 24756\hline 24757 24758\sphinxcode{krb5\_princ\_component (context, princ, i)} 24759& 24760\sphinxcode{(((i) \textless{} krb5\_princ\_size(context, princ)) ? (princ)-\textgreater{}data + (i) : NULL)} 24761\\ 24762\hline 24763\end{tabulary} 24764\par 24765\sphinxattableend\end{savenotes} 24766 24767 24768\subsubsection{krb5\_princ\_name} 24769\label{\detokenize{appdev/refs/macros/krb5_princ_name:krb5-princ-name-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_name:krb5-princ-name}}\label{\detokenize{appdev/refs/macros/krb5_princ_name::doc}}\index{krb5\_princ\_name (built-in variable)} 24770 24771\begin{fulllineitems} 24772\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_name:krb5_princ_name}}\pysigline{\sphinxbfcode{krb5\_princ\_name}} 24773\end{fulllineitems} 24774 24775 24776 24777\begin{savenotes}\sphinxattablestart 24778\centering 24779\begin{tabulary}{\linewidth}[t]{|T|T|} 24780\hline 24781 24782\sphinxcode{krb5\_princ\_name (context, princ)} 24783& 24784\sphinxcode{(princ)-\textgreater{}data} 24785\\ 24786\hline 24787\end{tabulary} 24788\par 24789\sphinxattableend\end{savenotes} 24790 24791 24792\subsubsection{krb5\_princ\_realm} 24793\label{\detokenize{appdev/refs/macros/krb5_princ_realm::doc}}\label{\detokenize{appdev/refs/macros/krb5_princ_realm:krb5-princ-realm-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_realm:krb5-princ-realm}}\index{krb5\_princ\_realm (built-in variable)} 24794 24795\begin{fulllineitems} 24796\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_realm:krb5_princ_realm}}\pysigline{\sphinxbfcode{krb5\_princ\_realm}} 24797\end{fulllineitems} 24798 24799 24800 24801\begin{savenotes}\sphinxattablestart 24802\centering 24803\begin{tabulary}{\linewidth}[t]{|T|T|} 24804\hline 24805 24806\sphinxcode{krb5\_princ\_realm (context, princ)} 24807& 24808\sphinxcode{(\&(princ)-\textgreater{}realm)} 24809\\ 24810\hline 24811\end{tabulary} 24812\par 24813\sphinxattableend\end{savenotes} 24814 24815 24816\subsubsection{krb5\_princ\_set\_realm} 24817\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm:krb5-princ-set-realm-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm::doc}}\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm:krb5-princ-set-realm}}\index{krb5\_princ\_set\_realm (built-in variable)} 24818 24819\begin{fulllineitems} 24820\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm:krb5_princ_set_realm}}\pysigline{\sphinxbfcode{krb5\_princ\_set\_realm}} 24821\end{fulllineitems} 24822 24823 24824 24825\begin{savenotes}\sphinxattablestart 24826\centering 24827\begin{tabulary}{\linewidth}[t]{|T|T|} 24828\hline 24829 24830\sphinxcode{krb5\_princ\_set\_realm (context, princ, value)} 24831& 24832\sphinxcode{((princ)-\textgreater{}realm = *(value))} 24833\\ 24834\hline 24835\end{tabulary} 24836\par 24837\sphinxattableend\end{savenotes} 24838 24839 24840\subsubsection{krb5\_princ\_set\_realm\_data} 24841\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_data:krb5-princ-set-realm-data-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_data::doc}}\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_data:krb5-princ-set-realm-data}}\index{krb5\_princ\_set\_realm\_data (built-in variable)} 24842 24843\begin{fulllineitems} 24844\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_data:krb5_princ_set_realm_data}}\pysigline{\sphinxbfcode{krb5\_princ\_set\_realm\_data}} 24845\end{fulllineitems} 24846 24847 24848 24849\begin{savenotes}\sphinxattablestart 24850\centering 24851\begin{tabulary}{\linewidth}[t]{|T|T|} 24852\hline 24853 24854\sphinxcode{krb5\_princ\_set\_realm\_data (context, princ, value)} 24855& 24856\sphinxcode{(princ)-\textgreater{}realm.data = (value)} 24857\\ 24858\hline 24859\end{tabulary} 24860\par 24861\sphinxattableend\end{savenotes} 24862 24863 24864\subsubsection{krb5\_princ\_set\_realm\_length} 24865\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_length:krb5-princ-set-realm-length-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_length::doc}}\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_length:krb5-princ-set-realm-length}}\index{krb5\_princ\_set\_realm\_length (built-in variable)} 24866 24867\begin{fulllineitems} 24868\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_length:krb5_princ_set_realm_length}}\pysigline{\sphinxbfcode{krb5\_princ\_set\_realm\_length}} 24869\end{fulllineitems} 24870 24871 24872 24873\begin{savenotes}\sphinxattablestart 24874\centering 24875\begin{tabulary}{\linewidth}[t]{|T|T|} 24876\hline 24877 24878\sphinxcode{krb5\_princ\_set\_realm\_length (context, princ, value)} 24879& 24880\sphinxcode{(princ)-\textgreater{}realm.length = (value)} 24881\\ 24882\hline 24883\end{tabulary} 24884\par 24885\sphinxattableend\end{savenotes} 24886 24887 24888\subsubsection{krb5\_princ\_size} 24889\label{\detokenize{appdev/refs/macros/krb5_princ_size:krb5-princ-size-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_size::doc}}\label{\detokenize{appdev/refs/macros/krb5_princ_size:krb5-princ-size}}\index{krb5\_princ\_size (built-in variable)} 24890 24891\begin{fulllineitems} 24892\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_size:krb5_princ_size}}\pysigline{\sphinxbfcode{krb5\_princ\_size}} 24893\end{fulllineitems} 24894 24895 24896 24897\begin{savenotes}\sphinxattablestart 24898\centering 24899\begin{tabulary}{\linewidth}[t]{|T|T|} 24900\hline 24901 24902\sphinxcode{krb5\_princ\_size (context, princ)} 24903& 24904\sphinxcode{(princ)-\textgreater{}length} 24905\\ 24906\hline 24907\end{tabulary} 24908\par 24909\sphinxattableend\end{savenotes} 24910 24911 24912\subsubsection{krb5\_princ\_type} 24913\label{\detokenize{appdev/refs/macros/krb5_princ_type:krb5-princ-type}}\label{\detokenize{appdev/refs/macros/krb5_princ_type:krb5-princ-type-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_type::doc}}\index{krb5\_princ\_type (built-in variable)} 24914 24915\begin{fulllineitems} 24916\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_type:krb5_princ_type}}\pysigline{\sphinxbfcode{krb5\_princ\_type}} 24917\end{fulllineitems} 24918 24919 24920 24921\begin{savenotes}\sphinxattablestart 24922\centering 24923\begin{tabulary}{\linewidth}[t]{|T|T|} 24924\hline 24925 24926\sphinxcode{krb5\_princ\_type (context, princ)} 24927& 24928\sphinxcode{(princ)-\textgreater{}type} 24929\\ 24930\hline 24931\end{tabulary} 24932\par 24933\sphinxattableend\end{savenotes} 24934 24935 24936\subsubsection{krb5\_roundup} 24937\label{\detokenize{appdev/refs/macros/krb5_roundup:krb5-roundup-data}}\label{\detokenize{appdev/refs/macros/krb5_roundup:krb5-roundup}}\label{\detokenize{appdev/refs/macros/krb5_roundup::doc}}\index{krb5\_roundup (built-in variable)} 24938 24939\begin{fulllineitems} 24940\phantomsection\label{\detokenize{appdev/refs/macros/krb5_roundup:krb5_roundup}}\pysigline{\sphinxbfcode{krb5\_roundup}} 24941\end{fulllineitems} 24942 24943 24944 24945\begin{savenotes}\sphinxattablestart 24946\centering 24947\begin{tabulary}{\linewidth}[t]{|T|T|} 24948\hline 24949 24950\sphinxcode{krb5\_roundup (x, y)} 24951& 24952\sphinxcode{((((x) + (y) - 1)/(y))*(y))} 24953\\ 24954\hline 24955\end{tabulary} 24956\par 24957\sphinxattableend\end{savenotes} 24958 24959 24960\subsubsection{krb5\_x} 24961\label{\detokenize{appdev/refs/macros/krb5_x::doc}}\label{\detokenize{appdev/refs/macros/krb5_x:krb5-x}}\label{\detokenize{appdev/refs/macros/krb5_x:krb5-x-data}}\index{krb5\_x (built-in variable)} 24962 24963\begin{fulllineitems} 24964\phantomsection\label{\detokenize{appdev/refs/macros/krb5_x:krb5_x}}\pysigline{\sphinxbfcode{krb5\_x}} 24965\end{fulllineitems} 24966 24967 24968 24969\begin{savenotes}\sphinxattablestart 24970\centering 24971\begin{tabulary}{\linewidth}[t]{|T|T|} 24972\hline 24973 24974\sphinxcode{krb5\_x (ptr, args)} 24975& 24976\sphinxcode{((ptr)?((*(ptr)) args):(abort(),1))} 24977\\ 24978\hline 24979\end{tabulary} 24980\par 24981\sphinxattableend\end{savenotes} 24982 24983 24984\subsubsection{krb5\_xc} 24985\label{\detokenize{appdev/refs/macros/krb5_xc::doc}}\label{\detokenize{appdev/refs/macros/krb5_xc:krb5-xc}}\label{\detokenize{appdev/refs/macros/krb5_xc:krb5-xc-data}}\index{krb5\_xc (built-in variable)} 24986 24987\begin{fulllineitems} 24988\phantomsection\label{\detokenize{appdev/refs/macros/krb5_xc:krb5_xc}}\pysigline{\sphinxbfcode{krb5\_xc}} 24989\end{fulllineitems} 24990 24991 24992 24993\begin{savenotes}\sphinxattablestart 24994\centering 24995\begin{tabulary}{\linewidth}[t]{|T|T|} 24996\hline 24997 24998\sphinxcode{krb5\_xc (ptr, args)} 24999& 25000\sphinxcode{((ptr)?((*(ptr)) args):(abort(),(char*)0))} 25001\\ 25002\hline 25003\end{tabulary} 25004\par 25005\sphinxattableend\end{savenotes} 25006 25007 25008\subsection{Deprecated macros} 25009\label{\detokenize{appdev/refs/macros/index:deprecated-macros}} 25010 25011\subsubsection{krb524\_convert\_creds\_kdc} 25012\label{\detokenize{appdev/refs/macros/krb524_convert_creds_kdc:krb524-convert-creds-kdc-data}}\label{\detokenize{appdev/refs/macros/krb524_convert_creds_kdc:krb524-convert-creds-kdc}}\label{\detokenize{appdev/refs/macros/krb524_convert_creds_kdc::doc}}\index{krb524\_convert\_creds\_kdc (built-in variable)} 25013 25014\begin{fulllineitems} 25015\phantomsection\label{\detokenize{appdev/refs/macros/krb524_convert_creds_kdc:krb524_convert_creds_kdc}}\pysigline{\sphinxbfcode{krb524\_convert\_creds\_kdc}} 25016\end{fulllineitems} 25017 25018 25019 25020\begin{savenotes}\sphinxattablestart 25021\centering 25022\begin{tabulary}{\linewidth}[t]{|T|T|} 25023\hline 25024 25025\sphinxcode{krb524\_convert\_creds\_kdc} 25026& 25027\sphinxcode{krb5\_524\_convert\_creds} 25028\\ 25029\hline 25030\end{tabulary} 25031\par 25032\sphinxattableend\end{savenotes} 25033 25034 25035\subsubsection{krb524\_init\_ets} 25036\label{\detokenize{appdev/refs/macros/krb524_init_ets:krb524-init-ets-data}}\label{\detokenize{appdev/refs/macros/krb524_init_ets::doc}}\label{\detokenize{appdev/refs/macros/krb524_init_ets:krb524-init-ets}}\index{krb524\_init\_ets (built-in variable)} 25037 25038\begin{fulllineitems} 25039\phantomsection\label{\detokenize{appdev/refs/macros/krb524_init_ets:krb524_init_ets}}\pysigline{\sphinxbfcode{krb524\_init\_ets}} 25040\end{fulllineitems} 25041 25042 25043 25044\begin{savenotes}\sphinxattablestart 25045\centering 25046\begin{tabulary}{\linewidth}[t]{|T|T|} 25047\hline 25048 25049\sphinxcode{krb524\_init\_ets (x)} 25050& 25051\sphinxcode{(0)} 25052\\ 25053\hline 25054\end{tabulary} 25055\par 25056\sphinxattableend\end{savenotes} 25057 25058 25059 25060\renewcommand{\indexname}{Index} 25061\printindex 25062\end{document}