xref: /freebsd/crypto/krb5/doc/pdf/appdev.tex (revision 7f2fe78b9dd5f51c821d771b63d2e096f6fd49e9)
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\ifdefined\pdfimageresolution
8    \pdfimageresolution= \numexpr \dimexpr1in\relax/\sphinxpxdimen\relax
9\fi
10%% let collapsible pdf bookmarks panel have high depth per default
11\PassOptionsToPackage{bookmarksdepth=5}{hyperref}
12
13\PassOptionsToPackage{warn}{textcomp}
14\usepackage[utf8]{inputenc}
15\ifdefined\DeclareUnicodeCharacter
16% support both utf8 and utf8x syntaxes
17  \ifdefined\DeclareUnicodeCharacterAsOptional
18    \def\sphinxDUC#1{\DeclareUnicodeCharacter{"#1}}
19  \else
20    \let\sphinxDUC\DeclareUnicodeCharacter
21  \fi
22  \sphinxDUC{00A0}{\nobreakspace}
23  \sphinxDUC{2500}{\sphinxunichar{2500}}
24  \sphinxDUC{2502}{\sphinxunichar{2502}}
25  \sphinxDUC{2514}{\sphinxunichar{2514}}
26  \sphinxDUC{251C}{\sphinxunichar{251C}}
27  \sphinxDUC{2572}{\textbackslash}
28\fi
29\usepackage{cmap}
30\usepackage[T1]{fontenc}
31\usepackage{amsmath,amssymb,amstext}
32\usepackage{babel}
33
34
35
36\usepackage{tgtermes}
37\usepackage{tgheros}
38\renewcommand{\ttdefault}{txtt}
39
40
41
42\usepackage[Bjarne]{fncychap}
43\usepackage{sphinx}
44
45\fvset{fontsize=auto}
46\usepackage{geometry}
47
48
49% Include hyperref last.
50\usepackage{hyperref}
51% Fix anchor placement for figures with captions.
52\usepackage{hypcap}% it must be loaded after hyperref.
53% Set up styles of URL: it should be placed after hyperref.
54\urlstyle{same}
55
56
57\usepackage{sphinxmessages}
58\setcounter{tocdepth}{0}
59
60
61
62\title{Kerberos Application Developer Guide}
63\date{ }
64\release{1.21.3}
65\author{MIT}
66\newcommand{\sphinxlogo}{\vbox{}}
67\renewcommand{\releasename}{Release}
68\makeindex
69\begin{document}
70
71\pagestyle{empty}
72\sphinxmaketitle
73\pagestyle{plain}
74\sphinxtableofcontents
75\pagestyle{normal}
76\phantomsection\label{\detokenize{appdev/index::doc}}
77
78
79
80\chapter{Developing with GSSAPI}
81\label{\detokenize{appdev/gssapi:developing-with-gssapi}}\label{\detokenize{appdev/gssapi::doc}}
82\sphinxAtStartPar
83The GSSAPI (Generic Security Services API) allows applications to
84communicate securely using Kerberos 5 or other security mechanisms.
85We recommend using the GSSAPI (or a higher\sphinxhyphen{}level framework which
86encompasses GSSAPI, such as SASL) for secure network communication
87over using the libkrb5 API directly.
88
89\sphinxAtStartPar
90GSSAPIv2 is specified in \index{RFC@\spxentry{RFC}!RFC 2743@\spxentry{RFC 2743}}\sphinxhref{https://tools.ietf.org/html/rfc2743.html}{\sphinxstylestrong{RFC 2743}} and \index{RFC@\spxentry{RFC}!RFC 2744@\spxentry{RFC 2744}}\sphinxhref{https://tools.ietf.org/html/rfc2744.html}{\sphinxstylestrong{RFC 2744}}.  Also see
91\index{RFC@\spxentry{RFC}!RFC 7546@\spxentry{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
92server program.
93
94\sphinxAtStartPar
95This documentation will describe how various ways of using the
96GSSAPI will behave with the krb5 mechanism as implemented in MIT krb5,
97as well as krb5\sphinxhyphen{}specific extensions to the GSSAPI.
98
99
100\section{Name types}
101\label{\detokenize{appdev/gssapi:name-types}}
102\sphinxAtStartPar
103A GSSAPI application can name a local or remote entity by calling
104\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.16}{gss\_import\_name}, specifying a name type and a value.  The following
105name types are supported by the krb5 mechanism:
106\begin{itemize}
107\item {}
108\sphinxAtStartPar
109\sphinxstylestrong{GSS\_C\_NT\_HOSTBASED\_SERVICE}: The value should be a string of the
110form \sphinxcode{\sphinxupquote{service}} or \sphinxcode{\sphinxupquote{service@hostname}}.  This is the most common
111way to name target services when initiating a security context, and
112is the most likely name type to work across multiple mechanisms.
113
114\item {}
115\sphinxAtStartPar
116\sphinxstylestrong{GSS\_KRB5\_NT\_PRINCIPAL\_NAME}: The value should be a principal name
117string.  This name type only works with the krb5 mechanism, and is
118defined in the \sphinxcode{\sphinxupquote{\textless{}gssapi/gssapi\_krb5.h\textgreater{}}} header.
119
120\item {}
121\sphinxAtStartPar
122\sphinxstylestrong{GSS\_C\_NT\_USER\_NAME} or \sphinxstylestrong{GSS\_C\_NULL\_OID}: The value is treated
123as an unparsed principal name string, as above.  These name types
124may work with mechanisms other than krb5, but will have different
125interpretations in those mechanisms.  \sphinxstylestrong{GSS\_C\_NT\_USER\_NAME} is
126intended to be used with a local username, which will parse into a
127single\sphinxhyphen{}component principal in the default realm.
128
129\item {}
130\sphinxAtStartPar
131\sphinxstylestrong{GSS\_C\_NT\_ANONYMOUS}: The value is ignored.  The anonymous
132principal is used, allowing a client to authenticate to a server
133without asserting a particular identity (which may or may not be
134allowed by a particular server or Kerberos realm).
135
136\item {}
137\sphinxAtStartPar
138\sphinxstylestrong{GSS\_C\_NT\_MACHINE\_UID\_NAME}: The value is uid\_t object.  On
139Unix\sphinxhyphen{}like systems, the username of the uid is looked up in the
140system user database and the resulting username is parsed as a
141principal name.
142
143\item {}
144\sphinxAtStartPar
145\sphinxstylestrong{GSS\_C\_NT\_STRING\_UID\_NAME}: As above, but the value is a decimal
146string representation of the uid.
147
148\item {}
149\sphinxAtStartPar
150\sphinxstylestrong{GSS\_C\_NT\_EXPORT\_NAME}: The value must be the result of a
151\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.13}{gss\_export\_name} call.
152
153\item {}
154\sphinxAtStartPar
155\sphinxstylestrong{GSS\_KRB5\_NT\_ENTERPRISE\_NAME}: The value should be a krb5
156enterprise name string (see \index{RFC@\spxentry{RFC}!RFC 6806@\spxentry{RFC 6806}}\sphinxhref{https://tools.ietf.org/html/rfc6806.html}{\sphinxstylestrong{RFC 6806}} section 5), in the form
157\sphinxcode{\sphinxupquote{user@suffix}}.  This name type is used to convey alias names, and
158is defined in the \sphinxcode{\sphinxupquote{\textless{}gssapi/gssapi\_krb5.h\textgreater{}}} header.  (New in
159release 1.17.)
160
161\item {}
162\sphinxAtStartPar
163\sphinxstylestrong{GSS\_KRB5\_NT\_X509\_CERT}: The value should be an X.509 certificate
164encoded according to \index{RFC@\spxentry{RFC}!RFC 5280@\spxentry{RFC 5280}}\sphinxhref{https://tools.ietf.org/html/rfc5280.html}{\sphinxstylestrong{RFC 5280}}.  This name form can be used for
165the desired\_name parameter of gss\_acquire\_cred\_impersonate\_name(),
166to identify the S4U2Self user by certificate.  (New in release
1671.19.)
168
169\end{itemize}
170
171
172\section{Initiator credentials}
173\label{\detokenize{appdev/gssapi:initiator-credentials}}
174\sphinxAtStartPar
175A GSSAPI client application uses \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.19}{gss\_init\_sec\_context} to establish a
176security context.  The \sphinxstyleemphasis{initiator\_cred\_handle} parameter determines
177what tickets are used to establish the connection.  An application can
178either pass \sphinxstylestrong{GSS\_C\_NO\_CREDENTIAL} to use the default client
179credential, or it can use \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred} beforehand to acquire an
180initiator credential.  The call to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred} may include a
181\sphinxstyleemphasis{desired\_name} parameter, or it may pass \sphinxstylestrong{GSS\_C\_NO\_NAME} if it does
182not have a specific name preference.
183
184\sphinxAtStartPar
185If the desired name for a krb5 initiator credential is a host\sphinxhyphen{}based
186name, it is converted to a principal name of the form
187\sphinxcode{\sphinxupquote{service/hostname}} in the local realm, where \sphinxstyleemphasis{hostname} is the local
188hostname if not specified.  The hostname will be canonicalized using
189forward name resolution, and possibly also using reverse name
190resolution depending on the value of the \sphinxstylestrong{rdns} variable in
191\DUrole{xref,std,std-ref}{libdefaults}.
192
193\sphinxAtStartPar
194If a desired name is specified in the call to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred}, the
195krb5 mechanism will attempt to find existing tickets for that client
196principal name in the default credential cache or collection.  If the
197default cache type does not support a collection, and the default
198cache contains credentials for a different principal than the desired
199name, a \sphinxstylestrong{GSS\_S\_CRED\_UNAVAIL} error will be returned with a minor
200code indicating a mismatch.
201
202\sphinxAtStartPar
203If no existing tickets are available for the desired name, but the
204name has an entry in the default client \DUrole{xref,std,std-ref}{keytab\_definition}, the
205krb5 mechanism will acquire initial tickets for the name using the
206default client keytab.
207
208\sphinxAtStartPar
209If no desired name is specified, credential acquisition will be
210deferred until the credential is used in a call to
211\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
212\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
213principal name using the credential cache selection facility.  (This
214facility might, for instance, try to choose existing tickets for a
215client principal in the same realm as the target service).  If there
216are no existing tickets for the chosen principal, but it is present in
217the default client keytab, the krb5 mechanism will acquire initial
218tickets using the keytab.
219
220\sphinxAtStartPar
221If the target name cannot be used to select a client principal
222(because the credentials are used in a call to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.21}{gss\_inquire\_cred}), or
223if the credential cache selection facility cannot choose a principal
224for it, the default credential cache will be selected if it exists and
225contains tickets.
226
227\sphinxAtStartPar
228If the default credential cache does not exist, but the default client
229keytab does, the krb5 mechanism will try to acquire initial tickets
230for the first principal in the default client keytab.
231
232\sphinxAtStartPar
233If the krb5 mechanism acquires initial tickets using the default
234client keytab, the resulting tickets will be stored in the default
235cache or collection, and will be refreshed by future calls to
236\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred} as they approach their expire time.
237
238
239\section{Acceptor names}
240\label{\detokenize{appdev/gssapi:acceptor-names}}
241\sphinxAtStartPar
242A GSSAPI server application uses \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.1}{gss\_accept\_sec\_context} to establish
243a security context based on tokens provided by the client.  The
244\sphinxstyleemphasis{acceptor\_cred\_handle} parameter determines what
245\DUrole{xref,std,std-ref}{keytab\_definition} entries may be authenticated to by the
246client, if the krb5 mechanism is used.
247
248\sphinxAtStartPar
249The simplest choice is to pass \sphinxstylestrong{GSS\_C\_NO\_CREDENTIAL} as the acceptor
250credential.  In this case, clients may authenticate to any service
251principal in the default keytab (typically \DUrole{xref,std,std-ref}{DEFKTNAME}, or the value of
252the \sphinxstylestrong{KRB5\_KTNAME} environment variable).  This is the recommended
253approach if the server application has no specific requirements to the
254contrary.
255
256\sphinxAtStartPar
257A server may acquire an acceptor credential with \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred} and
258a \sphinxstyleemphasis{cred\_usage} of \sphinxstylestrong{GSS\_C\_ACCEPT} or \sphinxstylestrong{GSS\_C\_BOTH}.  If the
259\sphinxstyleemphasis{desired\_name} parameter is \sphinxstylestrong{GSS\_C\_NO\_NAME}, then clients will be
260allowed to authenticate to any service principal in the default
261keytab, just as if no acceptor credential was supplied.
262
263\sphinxAtStartPar
264If a server wishes to specify a \sphinxstyleemphasis{desired\_name} to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred},
265the most common choice is a host\sphinxhyphen{}based name.  If the host\sphinxhyphen{}based
266\sphinxstyleemphasis{desired\_name} contains just a \sphinxstyleemphasis{service}, then clients will be allowed
267to authenticate to any host\sphinxhyphen{}based service principal (that is, a
268principal of the form \sphinxcode{\sphinxupquote{service/hostname@REALM}}) for the named
269service, regardless of hostname or realm, as long as it is present in
270the default keytab.  If the input name contains both a \sphinxstyleemphasis{service} and a
271\sphinxstyleemphasis{hostname}, clients will be allowed to authenticate to any host\sphinxhyphen{}based
272principal for the named service and hostname, regardless of realm.
273
274\begin{sphinxadmonition}{note}{Note:}
275\sphinxAtStartPar
276If a \sphinxstyleemphasis{hostname} is specified, it will be canonicalized
277using forward name resolution, and possibly also using
278reverse name resolution depending on the value of the
279\sphinxstylestrong{rdns} variable in \DUrole{xref,std,std-ref}{libdefaults}.
280\end{sphinxadmonition}
281
282\begin{sphinxadmonition}{note}{Note:}
283\sphinxAtStartPar
284If the \sphinxstylestrong{ignore\_acceptor\_hostname} variable in
285\DUrole{xref,std,std-ref}{libdefaults} is enabled, then \sphinxstyleemphasis{hostname} will be
286ignored even if one is specified in the input name.
287\end{sphinxadmonition}
288
289\begin{sphinxadmonition}{note}{Note:}
290\sphinxAtStartPar
291In MIT krb5 versions prior to 1.10, and in Heimdal’s
292implementation of the krb5 mechanism, an input name with
293just a \sphinxstyleemphasis{service} is treated like an input name of
294\sphinxcode{\sphinxupquote{service@localhostname}}, where \sphinxstyleemphasis{localhostname} is the
295string returned by gethostname().
296\end{sphinxadmonition}
297
298\sphinxAtStartPar
299If the \sphinxstyleemphasis{desired\_name} is a krb5 principal name or a local system name
300type which is mapped to a krb5 principal name, clients will only be
301allowed to authenticate to that principal in the default keytab.
302
303
304\section{Name Attributes}
305\label{\detokenize{appdev/gssapi:name-attributes}}
306\sphinxAtStartPar
307In release 1.8 or later, the \sphinxhref{https://tools.ietf.org/html/rfc6680.txt\#section-7.4}{gss\_inquire\_name} and
308\sphinxhref{https://tools.ietf.org/html/6680.html\#section-7.5}{gss\_get\_name\_attribute} functions, specified in \index{RFC@\spxentry{RFC}!RFC 6680@\spxentry{RFC 6680}}\sphinxhref{https://tools.ietf.org/html/rfc6680.html}{\sphinxstylestrong{RFC 6680}}, can be
309used to retrieve name attributes from the \sphinxstyleemphasis{src\_name} returned by
310\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.1}{gss\_accept\_sec\_context}.  The following attributes are defined when
311the krb5 mechanism is used:
312
313\phantomsection\label{\detokenize{appdev/gssapi:gssapi-authind-attr}}\begin{itemize}
314\item {}
315\sphinxAtStartPar
316“auth\sphinxhyphen{}indicators” attribute:
317
318\end{itemize}
319
320\sphinxAtStartPar
321This attribute will be included in the \sphinxhref{https://tools.ietf.org/html/rfc6680.txt\#section-7.4}{gss\_inquire\_name} output if the
322ticket contains \DUrole{xref,std,std-ref}{authentication indicators}.
323One indicator is returned per invocation of \sphinxhref{https://tools.ietf.org/html/6680.html\#section-7.5}{gss\_get\_name\_attribute},
324so multiple invocations may be necessary to retrieve all of the
325indicators from the ticket.  (New in release 1.15.)
326
327
328\section{Credential store extensions}
329\label{\detokenize{appdev/gssapi:credential-store-extensions}}
330\sphinxAtStartPar
331Beginning with release 1.11, the following GSSAPI extensions declared
332in \sphinxcode{\sphinxupquote{\textless{}gssapi/gssapi\_ext.h\textgreater{}}} can be used to specify how credentials
333are acquired or stored:
334
335\begin{sphinxVerbatim}[commandchars=\\\{\}]
336\PYG{n}{struct} \PYG{n}{gss\PYGZus{}key\PYGZus{}value\PYGZus{}element\PYGZus{}struct} \PYG{p}{\PYGZob{}}
337    \PYG{n}{const} \PYG{n}{char} \PYG{o}{*}\PYG{n}{key}\PYG{p}{;}
338    \PYG{n}{const} \PYG{n}{char} \PYG{o}{*}\PYG{n}{value}\PYG{p}{;}
339\PYG{p}{\PYGZcb{}}\PYG{p}{;}
340\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}{;}
341
342\PYG{n}{struct} \PYG{n}{gss\PYGZus{}key\PYGZus{}value\PYGZus{}set\PYGZus{}struct} \PYG{p}{\PYGZob{}}
343    \PYG{n}{OM\PYGZus{}uint32} \PYG{n}{count}\PYG{p}{;}
344    \PYG{n}{gss\PYGZus{}key\PYGZus{}value\PYGZus{}element\PYGZus{}desc} \PYG{o}{*}\PYG{n}{elements}\PYG{p}{;}
345\PYG{p}{\PYGZcb{}}\PYG{p}{;}
346\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}{;}
347\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}{;}
348
349\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}{,}
350                                \PYG{n}{const} \PYG{n}{gss\PYGZus{}name\PYGZus{}t} \PYG{n}{desired\PYGZus{}name}\PYG{p}{,}
351                                \PYG{n}{OM\PYGZus{}uint32} \PYG{n}{time\PYGZus{}req}\PYG{p}{,}
352                                \PYG{n}{const} \PYG{n}{gss\PYGZus{}OID\PYGZus{}set} \PYG{n}{desired\PYGZus{}mechs}\PYG{p}{,}
353                                \PYG{n}{gss\PYGZus{}cred\PYGZus{}usage\PYGZus{}t} \PYG{n}{cred\PYGZus{}usage}\PYG{p}{,}
354                                \PYG{n}{gss\PYGZus{}const\PYGZus{}key\PYGZus{}value\PYGZus{}set\PYGZus{}t} \PYG{n}{cred\PYGZus{}store}\PYG{p}{,}
355                                \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{o}{*}\PYG{n}{output\PYGZus{}cred\PYGZus{}handle}\PYG{p}{,}
356                                \PYG{n}{gss\PYGZus{}OID\PYGZus{}set} \PYG{o}{*}\PYG{n}{actual\PYGZus{}mechs}\PYG{p}{,}
357                                \PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{time\PYGZus{}rec}\PYG{p}{)}\PYG{p}{;}
358
359\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}{,}
360                              \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{n}{input\PYGZus{}cred\PYGZus{}handle}\PYG{p}{,}
361                              \PYG{n}{gss\PYGZus{}cred\PYGZus{}usage\PYGZus{}t} \PYG{n}{cred\PYGZus{}usage}\PYG{p}{,}
362                              \PYG{n}{const} \PYG{n}{gss\PYGZus{}OID} \PYG{n}{desired\PYGZus{}mech}\PYG{p}{,}
363                              \PYG{n}{OM\PYGZus{}uint32} \PYG{n}{overwrite\PYGZus{}cred}\PYG{p}{,}
364                              \PYG{n}{OM\PYGZus{}uint32} \PYG{n}{default\PYGZus{}cred}\PYG{p}{,}
365                              \PYG{n}{gss\PYGZus{}const\PYGZus{}key\PYGZus{}value\PYGZus{}set\PYGZus{}t} \PYG{n}{cred\PYGZus{}store}\PYG{p}{,}
366                              \PYG{n}{gss\PYGZus{}OID\PYGZus{}set} \PYG{o}{*}\PYG{n}{elements\PYGZus{}stored}\PYG{p}{,}
367                              \PYG{n}{gss\PYGZus{}cred\PYGZus{}usage\PYGZus{}t} \PYG{o}{*}\PYG{n}{cred\PYGZus{}usage\PYGZus{}stored}\PYG{p}{)}\PYG{p}{;}
368\end{sphinxVerbatim}
369
370\sphinxAtStartPar
371The additional \sphinxstyleemphasis{cred\_store} parameter allows the caller to specify
372information about how the credentials should be obtained and stored.
373The following options are supported by the krb5 mechanism:
374\begin{itemize}
375\item {}
376\sphinxAtStartPar
377\sphinxstylestrong{ccache}: For acquiring initiator credentials, the name of the
378\DUrole{xref,std,std-ref}{credential cache} to which the handle will
379refer.  For storing credentials, the name of the cache or collection
380where the credentials will be stored (see below).
381
382\item {}
383\sphinxAtStartPar
384\sphinxstylestrong{client\_keytab}: For acquiring initiator credentials, the name of
385the \DUrole{xref,std,std-ref}{keytab} which will be used, if
386necessary, to refresh the credentials in the cache.
387
388\item {}
389\sphinxAtStartPar
390\sphinxstylestrong{keytab}: For acquiring acceptor credentials, the name of the
391\DUrole{xref,std,std-ref}{keytab} to which the handle will refer.
392In release 1.19 and later, this option also determines the keytab to
393be used for verification when initiator credentials are acquired
394using a password and verified.
395
396\item {}
397\sphinxAtStartPar
398\sphinxstylestrong{password}: For acquiring initiator credentials, this option
399instructs the mechanism to acquire fresh credentials into a unique
400memory credential cache.  This option may not be used with the
401\sphinxstylestrong{ccache} or \sphinxstylestrong{client\_keytab} options, and a \sphinxstyleemphasis{desired\_name} must
402be specified.  (New in release 1.19.)
403
404\item {}
405\sphinxAtStartPar
406\sphinxstylestrong{rcache}: For acquiring acceptor credentials, the name of the
407\DUrole{xref,std,std-ref}{replay cache} to be used when processing
408the initiator tokens.  (New in release 1.13.)
409
410\item {}
411\sphinxAtStartPar
412\sphinxstylestrong{verify}: For acquiring initiator credentials, this option
413instructs the mechanism to verify the credentials by obtaining a
414ticket to a service with a known key.  The service key is obtained
415from the keytab specified with the \sphinxstylestrong{keytab} option or the default
416keytab.  The value may be the name of a principal in the keytab, or
417the empty string.  If the empty string is given, any \sphinxcode{\sphinxupquote{host}}
418service principal in the keytab may be used.  (New in release 1.19.)
419
420\end{itemize}
421
422\sphinxAtStartPar
423In release 1.20 or later, if a collection name is specified for
424\sphinxstylestrong{cache} in a call to gss\_store\_cred\_into(), an existing cache for
425the client principal within the collection will be selected, or a new
426cache will be created within the collection.  If \sphinxstyleemphasis{overwrite\_cred} is
427false and the selected credential cache already exists, a
428\sphinxstylestrong{GSS\_S\_DUPLICATE\_ELEMENT} error will be returned.  If \sphinxstyleemphasis{default\_cred}
429is true, the primary cache of the collection will be switched to the
430selected cache.
431
432
433\section{Importing and exporting credentials}
434\label{\detokenize{appdev/gssapi:importing-and-exporting-credentials}}
435\sphinxAtStartPar
436The following GSSAPI extensions can be used to import and export
437credentials (declared in \sphinxcode{\sphinxupquote{\textless{}gssapi/gssapi\_ext.h\textgreater{}}}):
438
439\begin{sphinxVerbatim}[commandchars=\\\{\}]
440\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}{,}
441                          \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{n}{cred\PYGZus{}handle}\PYG{p}{,}
442                          \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{token}\PYG{p}{)}\PYG{p}{;}
443
444\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}{,}
445                          \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{token}\PYG{p}{,}
446                          \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{o}{*}\PYG{n}{cred\PYGZus{}handle}\PYG{p}{)}\PYG{p}{;}
447\end{sphinxVerbatim}
448
449\sphinxAtStartPar
450The first function serializes a GSSAPI credential handle into a
451buffer; the second unseralizes a buffer into a GSSAPI credential
452handle.  Serializing a credential does not destroy it.  If any of the
453mechanisms used in \sphinxstyleemphasis{cred\_handle} do not support serialization,
454gss\_export\_cred will return \sphinxstylestrong{GSS\_S\_UNAVAILABLE}.  As with other
455GSSAPI serialization functions, these extensions are only intended to
456work with a matching implementation on the other side; they do not
457serialize credentials in a standardized format.
458
459\sphinxAtStartPar
460A serialized credential may contain secret information such as ticket
461session keys.  The serialization format does not protect this
462information from eavesdropping or tampering.  The calling application
463must take care to protect the serialized credential when communicating
464it over an insecure channel or to an untrusted party.
465
466\sphinxAtStartPar
467A krb5 GSSAPI credential may contain references to a credential cache,
468a client keytab, an acceptor keytab, and a replay cache.  These
469resources are normally serialized as references to their external
470locations (such as the filename of the credential cache).  Because of
471this, a serialized krb5 credential can only be imported by a process
472with similar privileges to the exporter.  A serialized credential
473should not be trusted if it originates from a source with lower
474privileges than the importer, as it may contain references to external
475credential cache, keytab, or replay cache resources not accessible to
476the originator.
477
478\sphinxAtStartPar
479An exception to the above rule applies when a krb5 GSSAPI credential
480refers to a memory credential cache, as is normally the case for
481delegated credentials received by \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.1}{gss\_accept\_sec\_context}.  In this
482case, the contents of the credential cache are serialized, so that the
483resulting token may be imported even if the original memory credential
484cache no longer exists.
485
486
487\section{Constrained delegation (S4U)}
488\label{\detokenize{appdev/gssapi:constrained-delegation-s4u}}
489\sphinxAtStartPar
490The Microsoft S4U2Self and S4U2Proxy Kerberos protocol extensions
491allow an intermediate service to acquire credentials from a client to
492a target service without requiring the client to delegate a
493ticket\sphinxhyphen{}granting ticket, if the KDC is configured to allow it.
494
495\sphinxAtStartPar
496To perform a constrained delegation operation, the intermediate
497service must submit to the KDC an “evidence ticket” from the client to
498the intermediate service.  An evidence ticket can be acquired when the
499client authenticates to the intermediate service with Kerberos, or
500with an S4U2Self request if the KDC allows it.  The MIT krb5 GSSAPI
501library represents an evidence ticket using a “proxy credential”,
502which is a special kind of gss\_cred\_id\_t object whose underlying
503credential cache contains the evidence ticket and a krbtgt ticket for
504the intermediate service.
505
506\sphinxAtStartPar
507To acquire a proxy credential during client authentication, the
508service should first create an acceptor credential using the
509\sphinxstylestrong{GSS\_C\_BOTH} usage.  The application should then pass this
510credential as the \sphinxstyleemphasis{acceptor\_cred\_handle} to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.1}{gss\_accept\_sec\_context},
511and also pass a \sphinxstyleemphasis{delegated\_cred\_handle} output parameter to receive a
512proxy credential containing the evidence ticket.  The output value of
513\sphinxstyleemphasis{delegated\_cred\_handle} may be a delegated ticket\sphinxhyphen{}granting ticket if
514the client sent one, or a proxy credential if not.  If the library can
515determine that the client’s ticket is not a valid evidence ticket, it
516will place \sphinxstylestrong{GSS\_C\_NO\_CREDENTIAL} in \sphinxstyleemphasis{delegated\_cred\_handle}.
517
518\sphinxAtStartPar
519To acquire a proxy credential using an S4U2Self request, the service
520can use the following GSSAPI extension:
521
522\begin{sphinxVerbatim}[commandchars=\\\{\}]
523\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}{,}
524                                            \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{n}{icred}\PYG{p}{,}
525                                            \PYG{n}{gss\PYGZus{}name\PYGZus{}t} \PYG{n}{desired\PYGZus{}name}\PYG{p}{,}
526                                            \PYG{n}{OM\PYGZus{}uint32} \PYG{n}{time\PYGZus{}req}\PYG{p}{,}
527                                            \PYG{n}{gss\PYGZus{}OID\PYGZus{}set} \PYG{n}{desired\PYGZus{}mechs}\PYG{p}{,}
528                                            \PYG{n}{gss\PYGZus{}cred\PYGZus{}usage\PYGZus{}t} \PYG{n}{cred\PYGZus{}usage}\PYG{p}{,}
529                                            \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{o}{*}\PYG{n}{output\PYGZus{}cred}\PYG{p}{,}
530                                            \PYG{n}{gss\PYGZus{}OID\PYGZus{}set} \PYG{o}{*}\PYG{n}{actual\PYGZus{}mechs}\PYG{p}{,}
531                                            \PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{time\PYGZus{}rec}\PYG{p}{)}\PYG{p}{;}
532\end{sphinxVerbatim}
533
534\sphinxAtStartPar
535The parameters to this function are similar to those of
536\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred}, except that \sphinxstyleemphasis{icred} is used to make an S4U2Self
537request to the KDC for a ticket from \sphinxstyleemphasis{desired\_name} to the
538intermediate service.  Both \sphinxstyleemphasis{icred} and \sphinxstyleemphasis{desired\_name} are required
539for this function; passing \sphinxstylestrong{GSS\_C\_NO\_CREDENTIAL} or
540\sphinxstylestrong{GSS\_C\_NO\_NAME} will cause the call to fail.  \sphinxstyleemphasis{icred} must contain a
541krbtgt ticket for the intermediate service.  The result of this
542operation is a proxy credential.  (Prior to release 1.18, the result
543of this operation may be a regular credential for \sphinxstyleemphasis{desired\_name}, if
544the KDC issues a non\sphinxhyphen{}forwardable ticket.)
545
546\sphinxAtStartPar
547Once the intermediate service has a proxy credential, it can simply
548pass it to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.19}{gss\_init\_sec\_context} as the \sphinxstyleemphasis{initiator\_cred\_handle}
549parameter, and the desired service as the \sphinxstyleemphasis{target\_name} parameter.
550The GSSAPI library will present the krbtgt ticket and evidence ticket
551in the proxy credential to the KDC in an S4U2Proxy request; if the
552intermediate service has the appropriate permissions, the KDC will
553issue a ticket from the client to the target service.  The GSSAPI
554library will then use this ticket to authenticate to the target
555service.
556
557\sphinxAtStartPar
558If an application needs to find out whether a credential it holds is a
559proxy credential and the name of the intermediate service, it can
560query the credential with the \sphinxstylestrong{GSS\_KRB5\_GET\_CRED\_IMPERSONATOR} OID
561(new in release 1.16, declared in \sphinxcode{\sphinxupquote{\textless{}gssapi/gssapi\_krb5.h\textgreater{}}}) using
562the gss\_inquire\_cred\_by\_oid extension (declared in
563\sphinxcode{\sphinxupquote{\textless{}gssapi/gssapi\_ext.h\textgreater{}}}):
564
565\begin{sphinxVerbatim}[commandchars=\\\{\}]
566\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}{,}
567                                  \PYG{n}{const} \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{n}{cred\PYGZus{}handle}\PYG{p}{,}
568                                  \PYG{n}{gss\PYGZus{}OID} \PYG{n}{desired\PYGZus{}object}\PYG{p}{,}
569                                  \PYG{n}{gss\PYGZus{}buffer\PYGZus{}set\PYGZus{}t} \PYG{o}{*}\PYG{n}{data\PYGZus{}set}\PYG{p}{)}\PYG{p}{;}
570\end{sphinxVerbatim}
571
572\sphinxAtStartPar
573If the call succeeds and \sphinxstyleemphasis{cred\_handle} is a proxy credential,
574\sphinxstyleemphasis{data\_set} will be set to a single\sphinxhyphen{}element buffer set containing the
575unparsed principal name of the intermediate service.  If \sphinxstyleemphasis{cred\_handle}
576is not a proxy credential, \sphinxstyleemphasis{data\_set} will be set to an empty buffer
577set.  If the library does not support the query,
578gss\_inquire\_cred\_by\_oid will return \sphinxstylestrong{GSS\_S\_UNAVAILABLE}.
579
580
581\section{AEAD message wrapping}
582\label{\detokenize{appdev/gssapi:aead-message-wrapping}}
583\sphinxAtStartPar
584The following GSSAPI extensions (declared in
585\sphinxcode{\sphinxupquote{\textless{}gssapi/gssapi\_ext.h\textgreater{}}}) can be used to wrap and unwrap messages
586with additional “associated data” which is integrity\sphinxhyphen{}checked but is
587not included in the output buffer:
588
589\begin{sphinxVerbatim}[commandchars=\\\{\}]
590\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}{,}
591                        \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
592                        \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}{,}
593                        \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{input\PYGZus{}assoc\PYGZus{}buffer}\PYG{p}{,}
594                        \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{input\PYGZus{}payload\PYGZus{}buffer}\PYG{p}{,}
595                        \PYG{n+nb}{int} \PYG{o}{*}\PYG{n}{conf\PYGZus{}state}\PYG{p}{,}
596                        \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{output\PYGZus{}message\PYGZus{}buffer}\PYG{p}{)}\PYG{p}{;}
597
598\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}{,}
599                          \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
600                          \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{input\PYGZus{}message\PYGZus{}buffer}\PYG{p}{,}
601                          \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{input\PYGZus{}assoc\PYGZus{}buffer}\PYG{p}{,}
602                          \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{output\PYGZus{}payload\PYGZus{}buffer}\PYG{p}{,}
603                          \PYG{n+nb}{int} \PYG{o}{*}\PYG{n}{conf\PYGZus{}state}\PYG{p}{,}
604                          \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{o}{*}\PYG{n}{qop\PYGZus{}state}\PYG{p}{)}\PYG{p}{;}
605\end{sphinxVerbatim}
606
607\sphinxAtStartPar
608Wrap tokens created with gss\_wrap\_aead will successfully unwrap only
609if the same \sphinxstyleemphasis{input\_assoc\_buffer} contents are presented to
610gss\_unwrap\_aead.
611
612
613\section{IOV message wrapping}
614\label{\detokenize{appdev/gssapi:iov-message-wrapping}}
615\sphinxAtStartPar
616The following extensions (declared in \sphinxcode{\sphinxupquote{\textless{}gssapi/gssapi\_ext.h\textgreater{}}}) can
617be used for in\sphinxhyphen{}place encryption, fine\sphinxhyphen{}grained control over wrap token
618layout, and for constructing wrap tokens compatible with Microsoft DCE
619RPC:
620
621\begin{sphinxVerbatim}[commandchars=\\\{\}]
622\PYG{n}{typedef} \PYG{n}{struct} \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc\PYGZus{}struct} \PYG{p}{\PYGZob{}}
623    \PYG{n}{OM\PYGZus{}uint32} \PYG{n+nb}{type}\PYG{p}{;}
624    \PYG{n}{gss\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{buffer}\PYG{p}{;}
625\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}{;}
626
627\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}{,}
628                       \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
629                       \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}{,}
630                       \PYG{n+nb}{int} \PYG{o}{*}\PYG{n}{conf\PYGZus{}state}\PYG{p}{,}
631                       \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}{;}
632
633\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}{,}
634                         \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
635                         \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}{,}
636                         \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}{;}
637
638\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}{,}
639                              \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
640                              \PYG{n+nb}{int} \PYG{n}{conf\PYGZus{}req\PYGZus{}flag}\PYG{p}{,}
641                              \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}{,}
642                              \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,}
643                              \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;}
644
645\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}{,}
646                                 \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,}
647                                 \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;}
648\end{sphinxVerbatim}
649
650\sphinxAtStartPar
651The caller of gss\_wrap\_iov provides an array of gss\_iov\_buffer\_desc
652structures, each containing a type and a gss\_buffer\_desc structure.
653Valid types include:
654\begin{itemize}
655\item {}
656\sphinxAtStartPar
657\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_DATA}: A data buffer to be included in the
658token, and to be encrypted or decrypted in\sphinxhyphen{}place if the token is
659confidentiality\sphinxhyphen{}protected.
660
661\item {}
662\sphinxAtStartPar
663\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_HEADER}: The GSSAPI wrap token header and
664underlying cryptographic header.
665
666\item {}
667\sphinxAtStartPar
668\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_TRAILER}: The cryptographic trailer, if one is
669required.
670
671\item {}
672\sphinxAtStartPar
673\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_PADDING}: Padding to be combined with the data
674during encryption and decryption.  (The implementation may choose to
675place padding in the trailer buffer, in which case it will set the
676padding buffer length to 0.)
677
678\item {}
679\sphinxAtStartPar
680\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_STREAM}: For unwrapping only, a buffer
681containing a complete wrap token in standard format to be unwrapped.
682
683\item {}
684\sphinxAtStartPar
685\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_SIGN\_ONLY}: A buffer to be included in the
686token’s integrity protection checksum, but not to be encrypted or
687included in the token itself.
688
689\end{itemize}
690
691\sphinxAtStartPar
692For gss\_wrap\_iov, the IOV list should contain one HEADER buffer,
693followed by zero or more SIGN\_ONLY buffers, followed by one or more
694DATA buffers, followed by a TRAILER buffer.  The memory pointed to by
695the buffers is not required to be contiguous or in any particular
696order.  If \sphinxstyleemphasis{conf\_req\_flag} is true, DATA buffers will be encrypted
697in\sphinxhyphen{}place, while SIGN\_ONLY buffers will not be modified.
698
699\sphinxAtStartPar
700The type of an output buffer may be combined with
701\sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATE} to request that gss\_wrap\_iov allocate
702the buffer contents.  If gss\_wrap\_iov allocates a buffer, it sets the
703\sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATED} flag on the buffer type.
704gss\_release\_iov\_buffer can be used to release all allocated buffers
705within an iov list and unset their allocated flags.  Here is an
706example of how gss\_wrap\_iov can be used with allocation requested
707(\sphinxstyleemphasis{ctx} is assumed to be a previously established gss\_ctx\_id\_t):
708
709\begin{sphinxVerbatim}[commandchars=\\\{\}]
710\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;}
711\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{4}\PYG{p}{]}\PYG{p}{;}
712\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}{;}
713
714\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}{|} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}FLAG\PYGZus{}ALLOCATE}\PYG{p}{;}
715\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}{;}
716\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}{;}
717\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}{;}
718\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}{|} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}FLAG\PYGZus{}ALLOCATE}\PYG{p}{;}
719\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}{|} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}FLAG\PYGZus{}ALLOCATE}\PYG{p}{;}
720
721\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}{,}
722                     \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{4}\PYG{p}{)}\PYG{p}{;}
723\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
724    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
725
726\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}{/}
727
728\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}{;}
729\end{sphinxVerbatim}
730
731\sphinxAtStartPar
732If the caller does not choose to request buffer allocation by
733gss\_wrap\_iov, it should first call gss\_wrap\_iov\_length to query the
734lengths of the HEADER, PADDING, and TRAILER buffers.  DATA buffers
735must be provided in the iov list so that padding length can be
736computed correctly, but the output buffers need not be initialized.
737Here is an example of using gss\_wrap\_iov\_length and gss\_wrap\_iov:
738
739\begin{sphinxVerbatim}[commandchars=\\\{\}]
740\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;}
741\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{4}\PYG{p}{]}\PYG{p}{;}
742\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}{;}
743
744\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}{;}
745\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}{;}
746\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}{;}
747\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}{;}
748
749\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}{;}
750\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}{;}
751
752\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}{,}
753                            \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{4}\PYG{p}{)}\PYG{p}{;}
754\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
755    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
756\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}{+}
757    \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}{)}
758    \PYG{n}{handle\PYGZus{}out\PYGZus{}of\PYGZus{}space\PYGZus{}error}\PYG{p}{(}\PYG{p}{)}\PYG{p}{;}
759\PYG{n}{ptr} \PYG{o}{=} \PYG{n+nb}{str} \PYG{o}{+} \PYG{n}{strlen}\PYG{p}{(}\PYG{n+nb}{str}\PYG{p}{)}\PYG{p}{;}
760\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}{;}
761\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}{;}
762\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}{;}
763\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}{;}
764\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}{;}
765
766\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}{,}
767                     \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{4}\PYG{p}{)}\PYG{p}{;}
768\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
769    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
770\end{sphinxVerbatim}
771
772\sphinxAtStartPar
773If the context was established using the \sphinxstylestrong{GSS\_C\_DCE\_STYLE} flag
774(described in \index{RFC@\spxentry{RFC}!RFC 4757@\spxentry{RFC 4757}}\sphinxhref{https://tools.ietf.org/html/rfc4757.html}{\sphinxstylestrong{RFC 4757}}), wrap tokens compatible with Microsoft DCE
775RPC can be constructed.  In this case, the IOV list must include a
776SIGN\_ONLY buffer, a DATA buffer, a second SIGN\_ONLY buffer, and a
777HEADER buffer in that order (the order of the buffer contents remains
778arbitrary).  The application must pad the DATA buffer to a multiple of
77916 bytes as no padding or trailer buffer is used.
780
781\sphinxAtStartPar
782gss\_unwrap\_iov may be called with an IOV list just like one which
783would be provided to gss\_wrap\_iov.  DATA buffers will be decrypted
784in\sphinxhyphen{}place if they were encrypted, and SIGN\_ONLY buffers will not be
785modified.
786
787\sphinxAtStartPar
788Alternatively, gss\_unwrap\_iov may be called with a single STREAM
789buffer, zero or more SIGN\_ONLY buffers, and a single DATA buffer.  The
790STREAM buffer is interpreted as a complete wrap token.  The STREAM
791buffer will be modified in\sphinxhyphen{}place to decrypt its contents.  The DATA
792buffer will be initialized to point to the decrypted data within the
793STREAM buffer, unless it has the \sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATE} flag
794set, in which case it will be initialized with a copy of the decrypted
795data.  Here is an example (\sphinxstyleemphasis{token} and \sphinxstyleemphasis{token\_len} are assumed to be a
796pre\sphinxhyphen{}existing pointer and length for a modifiable region of data):
797
798\begin{sphinxVerbatim}[commandchars=\\\{\}]
799\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;}
800\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{p}{;}
801
802\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}{;}
803\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}{;}
804\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}{;}
805\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}{;}
806\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}{;}
807\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
808    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
809
810\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}
811 \PYG{o}{*} \PYG{n}{token}\PYG{o}{.} \PYG{o}{*}\PYG{o}{/}
812\end{sphinxVerbatim}
813
814
815\section{IOV MIC tokens}
816\label{\detokenize{appdev/gssapi:iov-mic-tokens}}\label{\detokenize{appdev/gssapi:gssapi-mic-token}}
817\sphinxAtStartPar
818The following extensions (declared in \sphinxcode{\sphinxupquote{\textless{}gssapi/gssapi\_ext.h\textgreater{}}}) can
819be used in release 1.12 or later to construct and verify MIC tokens
820using an IOV list:
821
822\begin{sphinxVerbatim}[commandchars=\\\{\}]
823\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}{,}
824                          \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
825                          \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{n}{qop\PYGZus{}req}\PYG{p}{,}
826                          \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,}
827                          \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;}
828
829\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}{,}
830                                 \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
831                                 \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{n}{qop\PYGZus{}req}\PYG{p}{,}
832                                 \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,}
833                                 \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;}
834
835\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}{,}
836                             \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
837                             \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{o}{*}\PYG{n}{qop\PYGZus{}state}\PYG{p}{,}
838                             \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,}
839                             \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;}
840\end{sphinxVerbatim}
841
842\sphinxAtStartPar
843The caller of gss\_get\_mic\_iov provides an array of gss\_iov\_buffer\_desc
844structures, each containing a type and a gss\_buffer\_desc structure.
845Valid types include:
846\begin{itemize}
847\item {}
848\sphinxAtStartPar
849\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_DATA} and \sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_SIGN\_ONLY}: The
850corresponding buffer for each of these types will be signed for the
851MIC token, in the order provided.
852
853\item {}
854\sphinxAtStartPar
855\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_MIC\_TOKEN}: The GSSAPI MIC token.
856
857\end{itemize}
858
859\sphinxAtStartPar
860The type of the MIC\_TOKEN buffer may be combined with
861\sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATE} to request that gss\_get\_mic\_iov
862allocate the buffer contents.  If gss\_get\_mic\_iov allocates the
863buffer, it sets the \sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATED} flag on the buffer
864type.  gss\_release\_iov\_buffer can be used to release all allocated
865buffers within an iov list and unset their allocated flags.  Here is
866an example of how gss\_get\_mic\_iov can be used with allocation
867requested (\sphinxstyleemphasis{ctx} is assumed to be a previously established
868gss\_ctx\_id\_t):
869
870\begin{sphinxVerbatim}[commandchars=\\\{\}]
871\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;}
872\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{3}\PYG{p}{]}\PYG{p}{;}
873
874\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}{;}
875\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}{;}
876\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}{;}
877\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}{;}
878\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}{;}
879\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}{;}
880\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}{|} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}FLAG\PYGZus{}ALLOCATE}\PYG{p}{;}
881
882\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}{;}
883\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
884    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
885
886\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}{/}
887
888\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}{;}
889\end{sphinxVerbatim}
890
891\sphinxAtStartPar
892If the caller does not choose to request buffer allocation by
893gss\_get\_mic\_iov, it should first call gss\_get\_mic\_iov\_length to query
894the length of the MIC\_TOKEN buffer.  Here is an example of using
895gss\_get\_mic\_iov\_length and gss\_get\_mic\_iov:
896
897\begin{sphinxVerbatim}[commandchars=\\\{\}]
898\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;}
899\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{p}{;}
900\PYG{n}{char} \PYG{n}{data}\PYG{p}{[}\PYG{l+m+mi}{1024}\PYG{p}{]}\PYG{p}{;}
901
902\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}{;}
903\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}{;}
904\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}{;}
905\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}{;}
906
907\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}{;}
908\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
909    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
910\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}{)}
911    \PYG{n}{handle\PYGZus{}out\PYGZus{}of\PYGZus{}space\PYGZus{}error}\PYG{p}{(}\PYG{p}{)}\PYG{p}{;}
912\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}{;}
913
914\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}{;}
915\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
916    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
917\end{sphinxVerbatim}
918
919
920\chapter{Year 2038 considerations for uses of krb5\_timestamp}
921\label{\detokenize{appdev/y2038:year-2038-considerations-for-uses-of-krb5-timestamp}}\label{\detokenize{appdev/y2038::doc}}
922\sphinxAtStartPar
923POSIX time values, which measure the number of seconds since January 1
9241970, will exceed the maximum value representable in a signed 32\sphinxhyphen{}bit
925integer in January 2038.  This documentation describes considerations
926for consumers of the MIT krb5 libraries.
927
928\sphinxAtStartPar
929Applications or libraries which use libkrb5 and consume the timestamps
930included in credentials or other structures make use of the
931{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_timestamp}}}}} type.  For historical reasons, krb5\_timestamp
932is a signed 32\sphinxhyphen{}bit integer, even on platforms where a larger type is
933natively used to represent time values.  To behave properly for time
934values after January 2038, calling code should cast krb5\_timestamp
935values to uint32\_t, and then to time\_t:
936
937\begin{sphinxVerbatim}[commandchars=\\\{\}]
938\PYG{p}{(}\PYG{n}{time\PYGZus{}t}\PYG{p}{)}\PYG{p}{(}\PYG{n}{uint32\PYGZus{}t}\PYG{p}{)}\PYG{n}{timestamp}
939\end{sphinxVerbatim}
940
941\sphinxAtStartPar
942Used in this way, krb5\_timestamp values can represent time values up
943until February 2106, provided that the platform uses a 64\sphinxhyphen{}bit or
944larger time\_t type.  This usage will also remain safe if a later
945version of MIT krb5 changes krb5\_timestamp to an unsigned 32\sphinxhyphen{}bit
946integer.
947
948\sphinxAtStartPar
949The GSSAPI only uses representations of time intervals, not absolute
950times.  Callers of the GSSAPI should require no changes to behave
951correctly after January 2038, provided that they use MIT krb5 release
9521.16 or later.
953
954
955\chapter{Differences between Heimdal and MIT Kerberos API}
956\label{\detokenize{appdev/h5l_mit_apidiff:differences-between-heimdal-and-mit-kerberos-api}}\label{\detokenize{appdev/h5l_mit_apidiff::doc}}
957
958\begin{savenotes}\sphinxattablestart
959\centering
960\begin{tabulary}{\linewidth}[t]{|l|l|}
961\hline
962
963\sphinxAtStartPar
964{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_getaddrs:c.krb5_auth_con_getaddrs}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_auth\_con\_getaddrs()}}}}}
965&
966\sphinxAtStartPar
967H5l: If either of the pointers to local\_addr
968and remote\_addr is not NULL, it is freed
969first and then reallocated before being
970populated with the content of corresponding
971address from authentication context.
972\\
973\hline
974\sphinxAtStartPar
975{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setaddrs:c.krb5_auth_con_setaddrs}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_auth\_con\_setaddrs()}}}}}
976&
977\sphinxAtStartPar
978H5l: If either address is NULL, the previous
979address remains in place
980\\
981\hline
982\sphinxAtStartPar
983{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setports:c.krb5_auth_con_setports}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_auth\_con\_setports()}}}}}
984&
985\sphinxAtStartPar
986H5l: Not implemented as of version 1.3.3
987\\
988\hline
989\sphinxAtStartPar
990{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey:c.krb5_auth_con_setrecvsubkey}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_auth\_con\_setrecvsubkey()}}}}}
991&
992\sphinxAtStartPar
993H5l: If either port is NULL, the previous
994port remains in place
995\\
996\hline
997\sphinxAtStartPar
998{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey:c.krb5_auth_con_setsendsubkey}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_auth\_con\_setsendsubkey()}}}}}
999&
1000\sphinxAtStartPar
1001H5l: Not implemented as of version 1.3.3
1002\\
1003\hline
1004\sphinxAtStartPar
1005{\hyperref[\detokenize{appdev/refs/api/krb5_cc_set_config:c.krb5_cc_set_config}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_cc\_set\_config()}}}}}
1006&
1007\sphinxAtStartPar
1008MIT: Before version 1.10 it was assumed that
1009the last argument \sphinxstyleemphasis{data} is ALWAYS non\sphinxhyphen{}zero.
1010\\
1011\hline
1012\sphinxAtStartPar
1013\sphinxcode{\sphinxupquote{krb5\_cccol\_last\_change\_time()}}
1014&
1015\sphinxAtStartPar
1016MIT: not implemented
1017\\
1018\hline
1019\sphinxAtStartPar
1020{\hyperref[\detokenize{appdev/refs/api/krb5_set_default_realm:c.krb5_set_default_realm}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_set\_default\_realm()}}}}}
1021&
1022\sphinxAtStartPar
1023H5l: Caches the computed default realm context
1024field.  If the second argument is NULL,
1025it tries to retrieve it from libdefaults or DNS.
1026MIT: Computes the default realm each time
1027if it wasn’t explicitly set in the context
1028\\
1029\hline
1030\end{tabulary}
1031\par
1032\sphinxattableend\end{savenotes}
1033
1034
1035\chapter{Initial credentials}
1036\label{\detokenize{appdev/init_creds:initial-credentials}}\label{\detokenize{appdev/init_creds::doc}}
1037\sphinxAtStartPar
1038Software that performs tasks such as logging users into a computer
1039when they type their Kerberos password needs to get initial
1040credentials (usually ticket granting tickets) from Kerberos.  Such
1041software shares some behavior with the \DUrole{xref,std,std-ref}{kinit(1)} program.
1042
1043\sphinxAtStartPar
1044Whenever a program grants access to a resource (such as a local login
1045session on a desktop computer) based on a user successfully getting
1046initial Kerberos credentials, it must verify those credentials against
1047a secure shared secret (e.g., a host keytab) to ensure that the user
1048credentials actually originate from a legitimate KDC.  Failure to
1049perform this verification is a critical vulnerability, because a
1050malicious user can execute the “Zanarotti attack”: the user constructs
1051a fake response that appears to come from the legitimate KDC, but
1052whose contents come from an attacker\sphinxhyphen{}controlled KDC.
1053
1054\sphinxAtStartPar
1055Some applications read a Kerberos password over the network (ideally
1056over a secure channel), which they then verify against the KDC.  While
1057this technique may be the only practical way to integrate Kerberos
1058into some existing legacy systems, its use is contrary to the original
1059design goals of Kerberos.
1060
1061\sphinxAtStartPar
1062The function {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_get\_init\_creds\_password()}}}}} will get initial
1063credentials for a client using a password.  An application that needs
1064to verify the credentials can call {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_verify\_init\_creds()}}}}}.
1065Here is an example of code to obtain and verify TGT credentials, given
1066strings \sphinxstyleemphasis{princname} and \sphinxstyleemphasis{password} for the client principal name and
1067password:
1068
1069\begin{sphinxVerbatim}[commandchars=\\\{\}]
1070\PYG{n}{krb5\PYGZus{}error\PYGZus{}code} \PYG{n}{ret}\PYG{p}{;}
1071\PYG{n}{krb5\PYGZus{}creds} \PYG{n}{creds}\PYG{p}{;}
1072\PYG{n}{krb5\PYGZus{}principal} \PYG{n}{client\PYGZus{}princ} \PYG{o}{=} \PYG{n}{NULL}\PYG{p}{;}
1073
1074\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}{;}
1075\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}{;}
1076\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1077    \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
1078\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}{,}
1079                                   \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}{;}
1080\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1081    \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
1082\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}{;}
1083
1084\PYG{n}{cleanup}\PYG{p}{:}
1085\PYG{n}{krb5\PYGZus{}free\PYGZus{}principal}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{client\PYGZus{}princ}\PYG{p}{)}\PYG{p}{;}
1086\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}{;}
1087\PYG{k}{return} \PYG{n}{ret}\PYG{p}{;}
1088\end{sphinxVerbatim}
1089
1090
1091\section{Options for get\_init\_creds}
1092\label{\detokenize{appdev/init_creds:options-for-get-init-creds}}
1093\sphinxAtStartPar
1094The function {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_get\_init\_creds\_password()}}}}} takes an options
1095parameter (which can be a null pointer).  Use the function
1096{\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_alloc:c.krb5_get_init_creds_opt_alloc}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_get\_init\_creds\_opt\_alloc()}}}}} to allocate an options
1097structure, and {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_free:c.krb5_get_init_creds_opt_free}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_get\_init\_creds\_opt\_free()}}}}} to free it.  For
1098example:
1099
1100\begin{sphinxVerbatim}[commandchars=\\\{\}]
1101\PYG{n}{krb5\PYGZus{}error\PYGZus{}code} \PYG{n}{ret}\PYG{p}{;}
1102\PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt} \PYG{o}{*}\PYG{n}{opt} \PYG{o}{=} \PYG{n}{NULL}\PYG{p}{;}
1103\PYG{n}{krb5\PYGZus{}creds} \PYG{n}{creds}\PYG{p}{;}
1104
1105\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}{;}
1106\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}{;}
1107\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1108    \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
1109\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}{;}
1110\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}{,}
1111                                   \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}{;}
1112\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1113    \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
1114
1115\PYG{n}{cleanup}\PYG{p}{:}
1116\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}{;}
1117\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}{;}
1118\PYG{k}{return} \PYG{n}{ret}\PYG{p}{;}
1119\end{sphinxVerbatim}
1120
1121
1122\section{Getting anonymous credentials}
1123\label{\detokenize{appdev/init_creds:getting-anonymous-credentials}}
1124\sphinxAtStartPar
1125As of release 1.8, it is possible to obtain fully anonymous or
1126partially anonymous (realm\sphinxhyphen{}exposed) credentials, if the KDC supports
1127it.  The MIT KDC supports issuing fully anonymous credentials as of
1128release 1.8 if configured appropriately (see \DUrole{xref,std,std-ref}{anonymous\_pkinit}),
1129but does not support issuing realm\sphinxhyphen{}exposed anonymous credentials at
1130this time.
1131
1132\sphinxAtStartPar
1133To obtain fully anonymous credentials, call
1134{\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_anonymous:c.krb5_get_init_creds_opt_set_anonymous}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_get\_init\_creds\_opt\_set\_anonymous()}}}}} on the options
1135structure to set the anonymous flag, and specify a client principal
1136with the KDC’s realm and a single empty data component (the principal
1137obtained by parsing \sphinxcode{\sphinxupquote{@}}\sphinxstyleemphasis{realmname}).  Authentication will take
1138place using anonymous PKINIT; if successful, the client principal of
1139the resulting tickets will be
1140\sphinxcode{\sphinxupquote{WELLKNOWN/ANONYMOUS@WELLKNOWN:ANONYMOUS}}.  Here is an example:
1141
1142\begin{sphinxVerbatim}[commandchars=\\\{\}]
1143\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}{;}
1144\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}{,}
1145                           \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}{;}
1146\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1147    \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
1148\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}{,}
1149                                   \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}{;}
1150\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1151    \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
1152\end{sphinxVerbatim}
1153
1154\sphinxAtStartPar
1155To obtain realm\sphinxhyphen{}exposed anonymous credentials, set the anonymous flag
1156on the options structure as above, but specify a normal client
1157principal in order to prove membership in the realm.  Authentication
1158will take place as it normally does; if successful, the client
1159principal of the resulting tickets will be \sphinxcode{\sphinxupquote{WELLKNOWN/ANONYMOUS@}}\sphinxstyleemphasis{realmname}.
1160
1161
1162\section{User interaction}
1163\label{\detokenize{appdev/init_creds:user-interaction}}
1164\sphinxAtStartPar
1165Authenticating a user usually requires the entry of secret
1166information, such as a password.  A password can be supplied directly
1167to {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_get\_init\_creds\_password()}}}}} via the \sphinxstyleemphasis{password}
1168parameter, or the application can supply prompter and/or responder
1169callbacks instead.  If callbacks are used, the user can also be
1170queried for other secret information such as a PIN, informed of
1171impending password expiration, or prompted to change a password which
1172has expired.
1173
1174
1175\subsection{Prompter callback}
1176\label{\detokenize{appdev/init_creds:prompter-callback}}
1177\sphinxAtStartPar
1178A prompter callback can be specified via the \sphinxstyleemphasis{prompter} and \sphinxstyleemphasis{data}
1179parameters to {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_get\_init\_creds\_password()}}}}}.  The prompter
1180will be invoked each time the krb5 library has a question to ask or
1181information to present.  When the prompter callback is invoked, the
1182\sphinxstyleemphasis{banner} argument (if not null) is intended to be displayed to the
1183user, and the questions to be answered are specified in the \sphinxstyleemphasis{prompts}
1184array.  Each prompt contains a text question in the \sphinxstyleemphasis{prompt} field, a
1185\sphinxstyleemphasis{hidden} bit to indicate whether the answer should be hidden from
1186display, and a storage area for the answer in the \sphinxstyleemphasis{reply} field.  The
1187callback should fill in each question’s \sphinxcode{\sphinxupquote{reply\sphinxhyphen{}\textgreater{}data}} with the
1188answer, up to a maximum number of \sphinxcode{\sphinxupquote{reply\sphinxhyphen{}\textgreater{}length}} bytes, and then
1189reset \sphinxcode{\sphinxupquote{reply\sphinxhyphen{}\textgreater{}length}} to the length of the answer.
1190
1191\sphinxAtStartPar
1192A prompter callback can call {\hyperref[\detokenize{appdev/refs/api/krb5_get_prompt_types:c.krb5_get_prompt_types}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_get\_prompt\_types()}}}}} to get an
1193array of type constants corresponding to the prompts, to get
1194programmatic information about the semantic meaning of the questions.
1195{\hyperref[\detokenize{appdev/refs/api/krb5_get_prompt_types:c.krb5_get_prompt_types}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_get\_prompt\_types()}}}}} may return a null pointer if no prompt
1196type information is available.
1197
1198\sphinxAtStartPar
1199Text\sphinxhyphen{}based applications can use a built\sphinxhyphen{}in text prompter
1200implementation by supplying {\hyperref[\detokenize{appdev/refs/api/krb5_prompter_posix:c.krb5_prompter_posix}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_prompter\_posix()}}}}} as the
1201\sphinxstyleemphasis{prompter} parameter and a null pointer as the \sphinxstyleemphasis{data} parameter.  For
1202example:
1203
1204\begin{sphinxVerbatim}[commandchars=\\\{\}]
1205\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}{,}
1206                                   \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}{,}
1207                                   \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{)}\PYG{p}{;}
1208\end{sphinxVerbatim}
1209
1210
1211\subsection{Responder callback}
1212\label{\detokenize{appdev/init_creds:responder-callback}}
1213\sphinxAtStartPar
1214A responder callback can be specified through the init\_creds options
1215using the {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_responder:c.krb5_get_init_creds_opt_set_responder}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_get\_init\_creds\_opt\_set\_responder()}}}}} function.
1216Responder callbacks can present a more sophisticated user interface
1217for authentication secrets.  The responder callback is usually invoked
1218only once per authentication, with a list of questions produced by all
1219of the allowed preauthentication mechanisms.
1220
1221\sphinxAtStartPar
1222When the responder callback is invoked, the \sphinxstyleemphasis{rctx} argument can be
1223accessed to obtain the list of questions and to answer them.  The
1224{\hyperref[\detokenize{appdev/refs/api/krb5_responder_list_questions:c.krb5_responder_list_questions}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_responder\_list\_questions()}}}}} function retrieves an array of
1225question types.  For each question type, the
1226{\hyperref[\detokenize{appdev/refs/api/krb5_responder_get_challenge:c.krb5_responder_get_challenge}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_responder\_get\_challenge()}}}}} function retrieves additional
1227information about the question, if applicable, and the
1228{\hyperref[\detokenize{appdev/refs/api/krb5_responder_set_answer:c.krb5_responder_set_answer}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_responder\_set\_answer()}}}}} function sets the answer.
1229
1230\sphinxAtStartPar
1231Responder question types, challenges, and answers are UTF\sphinxhyphen{}8 strings.
1232The question type is a well\sphinxhyphen{}known string; the meaning of the challenge
1233and answer depend on the question type.  If an application does not
1234understand a question type, it cannot interpret the challenge or
1235provide an answer.  Failing to answer a question typically results in
1236the prompter callback being used as a fallback.
1237
1238
1239\subsubsection{Password question}
1240\label{\detokenize{appdev/init_creds:password-question}}
1241\sphinxAtStartPar
1242The \sphinxcode{\sphinxupquote{KRB5\_RESPONDER\_QUESTION\_PASSWORD}} (or \sphinxcode{\sphinxupquote{"password"}})
1243question type requests the user’s password.  This question does not
1244have a challenge, and the response is simply the password string.
1245
1246
1247\subsubsection{One\sphinxhyphen{}time password question}
1248\label{\detokenize{appdev/init_creds:one-time-password-question}}
1249\sphinxAtStartPar
1250The \sphinxcode{\sphinxupquote{KRB5\_RESPONDER\_QUESTION\_OTP}} (or \sphinxcode{\sphinxupquote{"otp"}}) question
1251type requests a choice among one\sphinxhyphen{}time password tokens and the PIN and
1252value for the chosen token.  The challenge and answer are JSON\sphinxhyphen{}encoded
1253strings, but an application can use convenience functions to avoid
1254doing any JSON processing itself.
1255
1256\sphinxAtStartPar
1257The {\hyperref[\detokenize{appdev/refs/api/krb5_responder_otp_get_challenge:c.krb5_responder_otp_get_challenge}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_responder\_otp\_get\_challenge()}}}}} function decodes the
1258challenge into a krb5\_responder\_otp\_challenge structure.  The
1259{\hyperref[\detokenize{appdev/refs/api/krb5_responder_otp_set_answer:c.krb5_responder_otp_set_answer}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_responder\_otp\_set\_answer()}}}}} function selects one of the
1260token information elements from the challenge and supplies the value
1261and pin for that token.
1262
1263
1264\subsubsection{PKINIT password or PIN question}
1265\label{\detokenize{appdev/init_creds:pkinit-password-or-pin-question}}
1266\sphinxAtStartPar
1267The \sphinxcode{\sphinxupquote{KRB5\_RESPONDER\_QUESTION\_PKINIT}} (or \sphinxcode{\sphinxupquote{"pkinit"}}) question
1268type requests PINs for hardware devices and/or passwords for encrypted
1269credentials which are stored on disk, potentially also supplying
1270information about the state of the hardware devices.  The challenge and
1271answer are JSON\sphinxhyphen{}encoded strings, but an application can use convenience
1272functions to avoid doing any JSON processing itself.
1273
1274\sphinxAtStartPar
1275The {\hyperref[\detokenize{appdev/refs/api/krb5_responder_pkinit_get_challenge:c.krb5_responder_pkinit_get_challenge}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_responder\_pkinit\_get\_challenge()}}}}} function decodes the
1276challenges into a krb5\_responder\_pkinit\_challenge structure.  The
1277{\hyperref[\detokenize{appdev/refs/api/krb5_responder_pkinit_set_answer:c.krb5_responder_pkinit_set_answer}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_responder\_pkinit\_set\_answer()}}}}} function can be used to
1278supply the PIN or password for a particular client credential, and can
1279be called multiple times.
1280
1281
1282\subsubsection{Example}
1283\label{\detokenize{appdev/init_creds:example}}
1284\sphinxAtStartPar
1285Here is an example of using a responder callback:
1286
1287\begin{sphinxVerbatim}[commandchars=\\\{\}]
1288\PYG{n}{static} \PYG{n}{krb5\PYGZus{}error\PYGZus{}code}
1289\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}{,}
1290             \PYG{n}{krb5\PYGZus{}responder\PYGZus{}context} \PYG{n}{rctx}\PYG{p}{)}
1291\PYG{p}{\PYGZob{}}
1292    \PYG{n}{krb5\PYGZus{}error\PYGZus{}code} \PYG{n}{ret}\PYG{p}{;}
1293    \PYG{n}{krb5\PYGZus{}responder\PYGZus{}otp\PYGZus{}challenge} \PYG{o}{*}\PYG{n}{chl}\PYG{p}{;}
1294
1295    \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}{,}
1296                                     \PYG{n}{KRB5\PYGZus{}RESPONDER\PYGZus{}QUESTION\PYGZus{}PASSWORD}\PYG{p}{)}\PYG{p}{)} \PYG{p}{\PYGZob{}}
1297        \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}{,}
1298                                        \PYG{n}{KRB5\PYGZus{}RESPONDER\PYGZus{}QUESTION\PYGZus{}PASSWORD}\PYG{p}{,}
1299                                        \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{open sesame}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{)}\PYG{p}{;}
1300        \PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1301            \PYG{k}{return} \PYG{n}{ret}\PYG{p}{;}
1302    \PYG{p}{\PYGZcb{}}
1303    \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}{;}
1304    \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{}}
1305        \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}{,}
1306                                            \PYG{n}{NULL}\PYG{p}{)}\PYG{p}{;}
1307        \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}{;}
1308        \PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1309            \PYG{k}{return} \PYG{n}{ret}\PYG{p}{;}
1310    \PYG{p}{\PYGZcb{}}
1311    \PYG{k}{return} \PYG{l+m+mi}{0}\PYG{p}{;}
1312\PYG{p}{\PYGZcb{}}
1313
1314\PYG{n}{static} \PYG{n}{krb5\PYGZus{}error\PYGZus{}code}
1315\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}{)}
1316\PYG{p}{\PYGZob{}}
1317    \PYG{n}{krb5\PYGZus{}error\PYGZus{}code} \PYG{n}{ret}\PYG{p}{;}
1318    \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt} \PYG{o}{*}\PYG{n}{opt} \PYG{o}{=} \PYG{n}{NULL}\PYG{p}{;}
1319    \PYG{n}{krb5\PYGZus{}creds} \PYG{n}{creds}\PYG{p}{;}
1320
1321    \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}{;}
1322    \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}{;}
1323    \PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1324        \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
1325    \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}{,}
1326                                                \PYG{n}{NULL}\PYG{p}{)}\PYG{p}{;}
1327    \PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1328        \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
1329    \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}{,}
1330                                       \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}{;}
1331
1332\PYG{n}{cleanup}\PYG{p}{:}
1333    \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}{;}
1334    \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}{;}
1335    \PYG{k}{return} \PYG{n}{ret}\PYG{p}{;}
1336\PYG{p}{\PYGZcb{}}
1337\end{sphinxVerbatim}
1338
1339
1340\section{Verifying initial credentials}
1341\label{\detokenize{appdev/init_creds:verifying-initial-credentials}}
1342\sphinxAtStartPar
1343Use the function {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_verify\_init\_creds()}}}}} to verify initial
1344credentials.  It takes an options structure (which can be a null
1345pointer).  Use {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_init:c.krb5_verify_init_creds_opt_init}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_verify\_init\_creds\_opt\_init()}}}}} to initialize
1346the caller\sphinxhyphen{}allocated options structure, and
1347{\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{\sphinxupquote{krb5\_verify\_init\_creds\_opt\_set\_ap\_req\_nofail()}}}}} to set the
1348“nofail” option.  For example:
1349
1350\begin{sphinxVerbatim}[commandchars=\\\{\}]
1351\PYG{n}{krb5\PYGZus{}verify\PYGZus{}init\PYGZus{}creds\PYGZus{}opt} \PYG{n}{vopt}\PYG{p}{;}
1352
1353\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}{;}
1354\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}{;}
1355\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}{;}
1356\end{sphinxVerbatim}
1357
1358\sphinxAtStartPar
1359The confusingly named “nofail” option, when set, means that the
1360verification must actually succeed in order for
1361{\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_verify\_init\_creds()}}}}} to indicate success.  The default
1362state of this option (cleared) means that if there is no key material
1363available to verify the user credentials, the verification will
1364succeed anyway.  (The default can be changed by a configuration file
1365setting.)
1366
1367\sphinxAtStartPar
1368This accommodates a use case where a large number of unkeyed shared
1369desktop workstations need to allow users to log in using Kerberos.
1370The security risks from this practice are mitigated by the absence of
1371valuable state on the shared workstations—any valuable resources
1372that the users would access reside on networked servers.
1373
1374
1375\chapter{Principal manipulation and parsing}
1376\label{\detokenize{appdev/princ_handle:principal-manipulation-and-parsing}}\label{\detokenize{appdev/princ_handle::doc}}
1377\sphinxAtStartPar
1378Kerberos principal structure
1379
1380\sphinxAtStartPar
1381{\hyperref[\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_principal\_data}}}}}
1382
1383\sphinxAtStartPar
1384{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_principal}}}}}
1385
1386\sphinxAtStartPar
1387Create and free principal
1388
1389\sphinxAtStartPar
1390{\hyperref[\detokenize{appdev/refs/api/krb5_build_principal:c.krb5_build_principal}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_build\_principal()}}}}}
1391
1392\sphinxAtStartPar
1393{\hyperref[\detokenize{appdev/refs/api/krb5_build_principal_alloc_va:c.krb5_build_principal_alloc_va}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_build\_principal\_alloc\_va()}}}}}
1394
1395\sphinxAtStartPar
1396{\hyperref[\detokenize{appdev/refs/api/krb5_build_principal_ext:c.krb5_build_principal_ext}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_build\_principal\_ext()}}}}}
1397
1398\sphinxAtStartPar
1399{\hyperref[\detokenize{appdev/refs/api/krb5_copy_principal:c.krb5_copy_principal}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_copy\_principal()}}}}}
1400
1401\sphinxAtStartPar
1402{\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_free\_principal()}}}}}
1403
1404\sphinxAtStartPar
1405{\hyperref[\detokenize{appdev/refs/api/krb5_cc_get_principal:c.krb5_cc_get_principal}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_cc\_get\_principal()}}}}}
1406
1407\sphinxAtStartPar
1408Comparing
1409
1410\sphinxAtStartPar
1411{\hyperref[\detokenize{appdev/refs/api/krb5_principal_compare:c.krb5_principal_compare}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_principal\_compare()}}}}}
1412
1413\sphinxAtStartPar
1414{\hyperref[\detokenize{appdev/refs/api/krb5_principal_compare_flags:c.krb5_principal_compare_flags}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_principal\_compare\_flags()}}}}}
1415
1416\sphinxAtStartPar
1417{\hyperref[\detokenize{appdev/refs/api/krb5_principal_compare_any_realm:c.krb5_principal_compare_any_realm}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_principal\_compare\_any\_realm()}}}}}
1418
1419\sphinxAtStartPar
1420{\hyperref[\detokenize{appdev/refs/api/krb5_sname_match:c.krb5_sname_match}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_sname\_match()}}}}}
1421
1422\sphinxAtStartPar
1423{\hyperref[\detokenize{appdev/refs/api/krb5_sname_to_principal:c.krb5_sname_to_principal}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_sname\_to\_principal()}}}}}
1424
1425\sphinxAtStartPar
1426Parsing:
1427
1428\sphinxAtStartPar
1429{\hyperref[\detokenize{appdev/refs/api/krb5_parse_name:c.krb5_parse_name}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_parse\_name()}}}}}
1430
1431\sphinxAtStartPar
1432{\hyperref[\detokenize{appdev/refs/api/krb5_parse_name_flags:c.krb5_parse_name_flags}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_parse\_name\_flags()}}}}}
1433
1434\sphinxAtStartPar
1435{\hyperref[\detokenize{appdev/refs/api/krb5_unparse_name:c.krb5_unparse_name}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_unparse\_name()}}}}}
1436
1437\sphinxAtStartPar
1438{\hyperref[\detokenize{appdev/refs/api/krb5_unparse_name_flags:c.krb5_unparse_name_flags}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_unparse\_name\_flags()}}}}}
1439
1440\sphinxAtStartPar
1441Utilities:
1442
1443\sphinxAtStartPar
1444{\hyperref[\detokenize{appdev/refs/api/krb5_is_config_principal:c.krb5_is_config_principal}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_is\_config\_principal()}}}}}
1445
1446\sphinxAtStartPar
1447{\hyperref[\detokenize{appdev/refs/api/krb5_kuserok:c.krb5_kuserok}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_kuserok()}}}}}
1448
1449\sphinxAtStartPar
1450{\hyperref[\detokenize{appdev/refs/api/krb5_set_password:c.krb5_set_password}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_set\_password()}}}}}
1451
1452\sphinxAtStartPar
1453{\hyperref[\detokenize{appdev/refs/api/krb5_set_password_using_ccache:c.krb5_set_password_using_ccache}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_set\_password\_using\_ccache()}}}}}
1454
1455\sphinxAtStartPar
1456{\hyperref[\detokenize{appdev/refs/api/krb5_set_principal_realm:c.krb5_set_principal_realm}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_set\_principal\_realm()}}}}}
1457
1458\sphinxAtStartPar
1459{\hyperref[\detokenize{appdev/refs/api/krb5_realm_compare:c.krb5_realm_compare}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_realm\_compare()}}}}}
1460
1461
1462\chapter{Complete reference \sphinxhyphen{} API and datatypes}
1463\label{\detokenize{appdev/refs/index:complete-reference-api-and-datatypes}}\label{\detokenize{appdev/refs/index::doc}}
1464
1465\section{krb5 API}
1466\label{\detokenize{appdev/refs/api/index:krb5-api}}\label{\detokenize{appdev/refs/api/index::doc}}
1467
1468\subsection{Frequently used public interfaces}
1469\label{\detokenize{appdev/refs/api/index:frequently-used-public-interfaces}}
1470
1471\subsubsection{krb5\_build\_principal \sphinxhyphen{}  Build a principal name using null\sphinxhyphen{}terminated strings.}
1472\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)@\spxentry{krb5\_build\_principal}\spxextra{C function}}
1473
1474\begin{fulllineitems}
1475\phantomsection\label{\detokenize{appdev/refs/api/krb5_build_principal:c.krb5_build_principal}}%
1476\pysigstartmultiline
1477\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_build\_principal}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{princ}, \DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{rlen}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{realm}, \DUrole{p}{...}}{}%
1478\pysigstopmultiline
1479\end{fulllineitems}
1480
1481\begin{quote}\begin{description}
1482\item[{param}] \leavevmode
1483\sphinxAtStartPar
1484\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
1485
1486\sphinxAtStartPar
1487\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ} \sphinxhyphen{} Principal name
1488
1489\sphinxAtStartPar
1490\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rlen} \sphinxhyphen{} Realm name length
1491
1492\sphinxAtStartPar
1493\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} \sphinxhyphen{} Realm name
1494
1495\end{description}\end{quote}
1496\begin{quote}\begin{description}
1497\item[{retval}] \leavevmode\begin{itemize}
1498\item {}
1499\sphinxAtStartPar
15000   Success
1501
1502\end{itemize}
1503
1504\item[{return}] \leavevmode\begin{itemize}
1505\item {}
1506\sphinxAtStartPar
1507Kerberos error codes
1508
1509\end{itemize}
1510
1511\end{description}\end{quote}
1512
1513\sphinxAtStartPar
1514Call krb5\_free\_principal() to free \sphinxstyleemphasis{princ} when it is no longer needed.
1515
1516\sphinxAtStartPar
1517Beginning with release 1.20, the name type of the principal will be inferred as \sphinxstylestrong{KRB5\_NT\_SRV\_INST} or \sphinxstylestrong{KRB5\_NT\_WELLKNOWN} based on the principal name. The type will be \sphinxstylestrong{KRB5\_NT\_PRINCIPAL} if a type cannot be inferred.
1518
1519\begin{sphinxadmonition}{note}{Note:}
1520\sphinxAtStartPar
1521krb5\_build\_principal() and krb5\_build\_principal\_alloc\_va() perform the same task. krb5\_build\_principal() takes variadic arguments. krb5\_build\_principal\_alloc\_va() takes a pre\sphinxhyphen{}computed \sphinxstyleemphasis{varargs} pointer.
1522\end{sphinxadmonition}
1523
1524
1525\subsubsection{krb5\_build\_principal\_alloc\_va \sphinxhyphen{}  Build a principal name, using a precomputed variable argument list.}
1526\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)@\spxentry{krb5\_build\_principal\_alloc\_va}\spxextra{C function}}
1527
1528\begin{fulllineitems}
1529\phantomsection\label{\detokenize{appdev/refs/api/krb5_build_principal_alloc_va:c.krb5_build_principal_alloc_va}}%
1530\pysigstartmultiline
1531\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_build\_principal\_alloc\_va}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{princ}, \DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{rlen}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{realm}, \DUrole{n}{va\_list}\DUrole{w}{  }\DUrole{n}{ap}}{}%
1532\pysigstopmultiline
1533\end{fulllineitems}
1534
1535\begin{quote}\begin{description}
1536\item[{param}] \leavevmode
1537\sphinxAtStartPar
1538\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
1539
1540\sphinxAtStartPar
1541\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ} \sphinxhyphen{} Principal structure
1542
1543\sphinxAtStartPar
1544\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rlen} \sphinxhyphen{} Realm name length
1545
1546\sphinxAtStartPar
1547\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} \sphinxhyphen{} Realm name
1548
1549\sphinxAtStartPar
1550\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap} \sphinxhyphen{} List of char * components, ending with NULL
1551
1552\end{description}\end{quote}
1553\begin{quote}\begin{description}
1554\item[{retval}] \leavevmode\begin{itemize}
1555\item {}
1556\sphinxAtStartPar
15570   Success
1558
1559\end{itemize}
1560
1561\item[{return}] \leavevmode\begin{itemize}
1562\item {}
1563\sphinxAtStartPar
1564Kerberos error codes
1565
1566\end{itemize}
1567
1568\end{description}\end{quote}
1569
1570\sphinxAtStartPar
1571Similar to krb5\_build\_principal(), this function builds a principal name, but its name components are specified as a va\_list.
1572
1573\sphinxAtStartPar
1574Use krb5\_free\_principal() to deallocate \sphinxstyleemphasis{princ} when it is no longer needed.
1575
1576
1577\subsubsection{krb5\_build\_principal\_ext \sphinxhyphen{}  Build a principal name using length\sphinxhyphen{}counted strings.}
1578\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)@\spxentry{krb5\_build\_principal\_ext}\spxextra{C function}}
1579
1580\begin{fulllineitems}
1581\phantomsection\label{\detokenize{appdev/refs/api/krb5_build_principal_ext:c.krb5_build_principal_ext}}%
1582\pysigstartmultiline
1583\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_build\_principal\_ext}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{princ}, \DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{rlen}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{realm}, \DUrole{p}{...}}{}%
1584\pysigstopmultiline
1585\end{fulllineitems}
1586
1587\begin{quote}\begin{description}
1588\item[{param}] \leavevmode
1589\sphinxAtStartPar
1590\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
1591
1592\sphinxAtStartPar
1593\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ} \sphinxhyphen{} Principal name
1594
1595\sphinxAtStartPar
1596\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rlen} \sphinxhyphen{} Realm name length
1597
1598\sphinxAtStartPar
1599\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} \sphinxhyphen{} Realm name
1600
1601\end{description}\end{quote}
1602\begin{quote}\begin{description}
1603\item[{retval}] \leavevmode\begin{itemize}
1604\item {}
1605\sphinxAtStartPar
16060   Success
1607
1608\end{itemize}
1609
1610\item[{return}] \leavevmode\begin{itemize}
1611\item {}
1612\sphinxAtStartPar
1613Kerberos error codes
1614
1615\end{itemize}
1616
1617\end{description}\end{quote}
1618
1619\sphinxAtStartPar
1620This function creates a principal from a length\sphinxhyphen{}counted string and a variable\sphinxhyphen{}length list of length\sphinxhyphen{}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 krb5\_free\_principal() to free allocated memory for principal when it is no longer needed.
1621
1622\sphinxAtStartPar
1623Beginning with release 1.20, the name type of the principal will be inferred as \sphinxstylestrong{KRB5\_NT\_SRV\_INST} or \sphinxstylestrong{KRB5\_NT\_WELLKNOWN} based on the principal name. The type will be \sphinxstylestrong{KRB5\_NT\_PRINCIPAL} if a type cannot be inferred.
1624
1625
1626\subsubsection{krb5\_cc\_close \sphinxhyphen{}  Close a credential cache handle.}
1627\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)@\spxentry{krb5\_cc\_close}\spxextra{C function}}
1628
1629\begin{fulllineitems}
1630\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_close:c.krb5_cc_close}}%
1631\pysigstartmultiline
1632\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_close}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{cache}}{}%
1633\pysigstopmultiline
1634\end{fulllineitems}
1635
1636\begin{quote}\begin{description}
1637\item[{param}] \leavevmode
1638\sphinxAtStartPar
1639\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
1640
1641\sphinxAtStartPar
1642\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} \sphinxhyphen{} Credential cache handle
1643
1644\end{description}\end{quote}
1645\begin{quote}\begin{description}
1646\item[{retval}] \leavevmode\begin{itemize}
1647\item {}
1648\sphinxAtStartPar
16490   Success
1650
1651\end{itemize}
1652
1653\item[{return}] \leavevmode\begin{itemize}
1654\item {}
1655\sphinxAtStartPar
1656Kerberos error codes
1657
1658\end{itemize}
1659
1660\end{description}\end{quote}
1661
1662\sphinxAtStartPar
1663This function closes a credential cache handle \sphinxstyleemphasis{cache} without affecting the contents of the cache.
1664
1665
1666\subsubsection{krb5\_cc\_default \sphinxhyphen{}  Resolve the default credential cache name.}
1667\label{\detokenize{appdev/refs/api/krb5_cc_default:krb5-cc-default-resolve-the-default-credential-cache-name}}\label{\detokenize{appdev/refs/api/krb5_cc_default::doc}}\index{krb5\_cc\_default (C function)@\spxentry{krb5\_cc\_default}\spxextra{C function}}
1668
1669\begin{fulllineitems}
1670\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_default:c.krb5_cc_default}}%
1671\pysigstartmultiline
1672\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_default}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ccache}}{}%
1673\pysigstopmultiline
1674\end{fulllineitems}
1675
1676\begin{quote}\begin{description}
1677\item[{param}] \leavevmode
1678\sphinxAtStartPar
1679\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
1680
1681\sphinxAtStartPar
1682\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ccache} \sphinxhyphen{} Pointer to credential cache name
1683
1684\end{description}\end{quote}
1685\begin{quote}\begin{description}
1686\item[{retval}] \leavevmode\begin{itemize}
1687\item {}
1688\sphinxAtStartPar
16890   Success
1690
1691\item {}
1692\sphinxAtStartPar
1693KV5M\_CONTEXT   Bad magic number for \_krb5\_context structure
1694
1695\item {}
1696\sphinxAtStartPar
1697KRB5\_FCC\_INTERNAL   The name of the default credential cache cannot be obtained
1698
1699\end{itemize}
1700
1701\item[{return}] \leavevmode\begin{itemize}
1702\item {}
1703\sphinxAtStartPar
1704Kerberos error codes
1705
1706\end{itemize}
1707
1708\end{description}\end{quote}
1709
1710\sphinxAtStartPar
1711Create a handle to the default credential cache as given by krb5\_cc\_default\_name().
1712
1713
1714\subsubsection{krb5\_cc\_default\_name \sphinxhyphen{}  Return the name of the default credential cache.}
1715\label{\detokenize{appdev/refs/api/krb5_cc_default_name:krb5-cc-default-name-return-the-name-of-the-default-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_default_name::doc}}\index{krb5\_cc\_default\_name (C function)@\spxentry{krb5\_cc\_default\_name}\spxextra{C function}}
1716
1717\begin{fulllineitems}
1718\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_default_name:c.krb5_cc_default_name}}%
1719\pysigstartmultiline
1720\pysiglinewithargsret{\DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_default\_name}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}}{}%
1721\pysigstopmultiline
1722\end{fulllineitems}
1723
1724\begin{quote}\begin{description}
1725\item[{param}] \leavevmode
1726\sphinxAtStartPar
1727\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
1728
1729\end{description}\end{quote}
1730\begin{quote}\begin{description}
1731\item[{return}] \leavevmode\begin{itemize}
1732\item {}
1733\sphinxAtStartPar
1734Name of default credential cache for the current user.
1735
1736\end{itemize}
1737
1738\end{description}\end{quote}
1739
1740\sphinxAtStartPar
1741Return a pointer to the default credential cache name for \sphinxstyleemphasis{context} , as determined by a prior call to krb5\_cc\_set\_default\_name(), by the KRB5CCNAME environment variable, by the default\_ccache\_name profile variable, or by the operating system or build\sphinxhyphen{}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 krb5\_free\_context() or if a subsequent call to krb5\_cc\_set\_default\_name() is made on \sphinxstyleemphasis{context} .
1742
1743\sphinxAtStartPar
1744The 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 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.
1745
1746
1747\subsubsection{krb5\_cc\_destroy \sphinxhyphen{}  Destroy a credential cache.}
1748\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)@\spxentry{krb5\_cc\_destroy}\spxextra{C function}}
1749
1750\begin{fulllineitems}
1751\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_destroy:c.krb5_cc_destroy}}%
1752\pysigstartmultiline
1753\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_destroy}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{cache}}{}%
1754\pysigstopmultiline
1755\end{fulllineitems}
1756
1757\begin{quote}\begin{description}
1758\item[{param}] \leavevmode
1759\sphinxAtStartPar
1760\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
1761
1762\sphinxAtStartPar
1763\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} \sphinxhyphen{} Credential cache handle
1764
1765\end{description}\end{quote}
1766\begin{quote}\begin{description}
1767\item[{retval}] \leavevmode\begin{itemize}
1768\item {}
1769\sphinxAtStartPar
17700   Success
1771
1772\end{itemize}
1773
1774\item[{return}] \leavevmode\begin{itemize}
1775\item {}
1776\sphinxAtStartPar
1777Permission errors
1778
1779\end{itemize}
1780
1781\end{description}\end{quote}
1782
1783\sphinxAtStartPar
1784This function destroys any existing contents of \sphinxstyleemphasis{cache} and closes the handle to it.
1785
1786
1787\subsubsection{krb5\_cc\_dup \sphinxhyphen{}  Duplicate ccache handle.}
1788\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)@\spxentry{krb5\_cc\_dup}\spxextra{C function}}
1789
1790\begin{fulllineitems}
1791\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_dup:c.krb5_cc_dup}}%
1792\pysigstartmultiline
1793\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_dup}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{in}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{out}}{}%
1794\pysigstopmultiline
1795\end{fulllineitems}
1796
1797\begin{quote}\begin{description}
1798\item[{param}] \leavevmode
1799\sphinxAtStartPar
1800\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
1801
1802\sphinxAtStartPar
1803\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in} \sphinxhyphen{} Credential cache handle to be duplicated
1804
1805\sphinxAtStartPar
1806\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} \sphinxhyphen{} Credential cache handle
1807
1808\end{description}\end{quote}
1809
1810\sphinxAtStartPar
1811Create a new handle referring to the same cache as \sphinxstyleemphasis{in} . The new handle and \sphinxstyleemphasis{in} can be closed independently.
1812
1813
1814\subsubsection{krb5\_cc\_get\_name \sphinxhyphen{}  Retrieve the name, but not type of a credential cache.}
1815\label{\detokenize{appdev/refs/api/krb5_cc_get_name:krb5-cc-get-name-retrieve-the-name-but-not-type-of-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_get_name::doc}}\index{krb5\_cc\_get\_name (C function)@\spxentry{krb5\_cc\_get\_name}\spxextra{C function}}
1816
1817\begin{fulllineitems}
1818\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_get_name:c.krb5_cc_get_name}}%
1819\pysigstartmultiline
1820\pysiglinewithargsret{\DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_get\_name}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{cache}}{}%
1821\pysigstopmultiline
1822\end{fulllineitems}
1823
1824\begin{quote}\begin{description}
1825\item[{param}] \leavevmode
1826\sphinxAtStartPar
1827\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
1828
1829\sphinxAtStartPar
1830\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} \sphinxhyphen{} Credential cache handle
1831
1832\end{description}\end{quote}
1833\begin{quote}\begin{description}
1834\item[{return}] \leavevmode\begin{itemize}
1835\item {}
1836\sphinxAtStartPar
1837On success \sphinxhyphen{} the name of the credential cache.
1838
1839\end{itemize}
1840
1841\end{description}\end{quote}
1842
1843\begin{sphinxadmonition}{warning}{Warning:}
1844\sphinxAtStartPar
1845Returns 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 krb5\_cc\_resolve().
1846\end{sphinxadmonition}
1847
1848
1849\subsubsection{krb5\_cc\_get\_principal \sphinxhyphen{}  Get the default principal of a credential cache.}
1850\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)@\spxentry{krb5\_cc\_get\_principal}\spxextra{C function}}
1851
1852\begin{fulllineitems}
1853\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_get_principal:c.krb5_cc_get_principal}}%
1854\pysigstartmultiline
1855\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_get\_principal}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{principal}}{}%
1856\pysigstopmultiline
1857\end{fulllineitems}
1858
1859\begin{quote}\begin{description}
1860\item[{param}] \leavevmode
1861\sphinxAtStartPar
1862\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
1863
1864\sphinxAtStartPar
1865\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} \sphinxhyphen{} Credential cache handle
1866
1867\sphinxAtStartPar
1868\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{principal} \sphinxhyphen{} Primary principal
1869
1870\end{description}\end{quote}
1871\begin{quote}\begin{description}
1872\item[{retval}] \leavevmode\begin{itemize}
1873\item {}
1874\sphinxAtStartPar
18750   Success
1876
1877\end{itemize}
1878
1879\item[{return}] \leavevmode\begin{itemize}
1880\item {}
1881\sphinxAtStartPar
1882Kerberos error codes
1883
1884\end{itemize}
1885
1886\end{description}\end{quote}
1887
1888\sphinxAtStartPar
1889Returns the default client principal of a credential cache as set by krb5\_cc\_initialize().
1890
1891\sphinxAtStartPar
1892Use krb5\_free\_principal() to free \sphinxstyleemphasis{principal} when it is no longer needed.
1893
1894
1895\subsubsection{krb5\_cc\_get\_type \sphinxhyphen{}  Retrieve the type of a credential cache.}
1896\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)@\spxentry{krb5\_cc\_get\_type}\spxextra{C function}}
1897
1898\begin{fulllineitems}
1899\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_get_type:c.krb5_cc_get_type}}%
1900\pysigstartmultiline
1901\pysiglinewithargsret{\DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_get\_type}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{cache}}{}%
1902\pysigstopmultiline
1903\end{fulllineitems}
1904
1905\begin{quote}\begin{description}
1906\item[{param}] \leavevmode
1907\sphinxAtStartPar
1908\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
1909
1910\sphinxAtStartPar
1911\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} \sphinxhyphen{} Credential cache handle
1912
1913\end{description}\end{quote}
1914\begin{quote}\begin{description}
1915\item[{return}] \leavevmode\begin{itemize}
1916\item {}
1917\sphinxAtStartPar
1918The type of a credential cache as an alias that must not be modified or freed by the caller.
1919
1920\end{itemize}
1921
1922\end{description}\end{quote}
1923
1924
1925\subsubsection{krb5\_cc\_initialize \sphinxhyphen{}  Initialize a credential cache.}
1926\label{\detokenize{appdev/refs/api/krb5_cc_initialize:krb5-cc-initialize-initialize-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_initialize::doc}}\index{krb5\_cc\_initialize (C function)@\spxentry{krb5\_cc\_initialize}\spxextra{C function}}
1927
1928\begin{fulllineitems}
1929\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_initialize:c.krb5_cc_initialize}}%
1930\pysigstartmultiline
1931\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_initialize}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{principal}}{}%
1932\pysigstopmultiline
1933\end{fulllineitems}
1934
1935\begin{quote}\begin{description}
1936\item[{param}] \leavevmode
1937\sphinxAtStartPar
1938\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
1939
1940\sphinxAtStartPar
1941\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} \sphinxhyphen{} Credential cache handle
1942
1943\sphinxAtStartPar
1944\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} \sphinxhyphen{} Default principal name
1945
1946\end{description}\end{quote}
1947\begin{quote}\begin{description}
1948\item[{retval}] \leavevmode\begin{itemize}
1949\item {}
1950\sphinxAtStartPar
19510   Success
1952
1953\end{itemize}
1954
1955\item[{return}] \leavevmode\begin{itemize}
1956\item {}
1957\sphinxAtStartPar
1958System errors; Permission errors; Kerberos error codes
1959
1960\end{itemize}
1961
1962\end{description}\end{quote}
1963
1964\sphinxAtStartPar
1965Destroy any existing contents of \sphinxstyleemphasis{cache} and initialize it for the default principal \sphinxstyleemphasis{principal} .
1966
1967
1968\subsubsection{krb5\_cc\_new\_unique \sphinxhyphen{}  Create a new credential cache of the specified type with a unique name.}
1969\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)@\spxentry{krb5\_cc\_new\_unique}\spxextra{C function}}
1970
1971\begin{fulllineitems}
1972\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_new_unique:c.krb5_cc_new_unique}}%
1973\pysigstartmultiline
1974\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_new\_unique}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{type}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{hint}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{id}}{}%
1975\pysigstopmultiline
1976\end{fulllineitems}
1977
1978\begin{quote}\begin{description}
1979\item[{param}] \leavevmode
1980\sphinxAtStartPar
1981\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
1982
1983\sphinxAtStartPar
1984\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} \sphinxhyphen{} Credential cache type name
1985
1986\sphinxAtStartPar
1987\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{hint} \sphinxhyphen{} Unused
1988
1989\sphinxAtStartPar
1990\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{id} \sphinxhyphen{} Credential cache handle
1991
1992\end{description}\end{quote}
1993\begin{quote}\begin{description}
1994\item[{retval}] \leavevmode\begin{itemize}
1995\item {}
1996\sphinxAtStartPar
19970   Success
1998
1999\end{itemize}
2000
2001\item[{return}] \leavevmode\begin{itemize}
2002\item {}
2003\sphinxAtStartPar
2004Kerberos error codes
2005
2006\end{itemize}
2007
2008\end{description}\end{quote}
2009
2010
2011\subsubsection{krb5\_cc\_resolve \sphinxhyphen{}  Resolve a credential cache name.}
2012\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)@\spxentry{krb5\_cc\_resolve}\spxextra{C function}}
2013
2014\begin{fulllineitems}
2015\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_resolve:c.krb5_cc_resolve}}%
2016\pysigstartmultiline
2017\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_resolve}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{name}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cache}}{}%
2018\pysigstopmultiline
2019\end{fulllineitems}
2020
2021\begin{quote}\begin{description}
2022\item[{param}] \leavevmode
2023\sphinxAtStartPar
2024\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
2025
2026\sphinxAtStartPar
2027\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} \sphinxhyphen{} Credential cache name to be resolved
2028
2029\sphinxAtStartPar
2030\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cache} \sphinxhyphen{} Credential cache handle
2031
2032\end{description}\end{quote}
2033\begin{quote}\begin{description}
2034\item[{retval}] \leavevmode\begin{itemize}
2035\item {}
2036\sphinxAtStartPar
20370   Success
2038
2039\end{itemize}
2040
2041\item[{return}] \leavevmode\begin{itemize}
2042\item {}
2043\sphinxAtStartPar
2044Kerberos error codes
2045
2046\end{itemize}
2047
2048\end{description}\end{quote}
2049
2050\sphinxAtStartPar
2051Fills 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.
2052
2053
2054\subsubsection{krb5\_change\_password \sphinxhyphen{}  Change a password for an existing Kerberos account.}
2055\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)@\spxentry{krb5\_change\_password}\spxextra{C function}}
2056
2057\begin{fulllineitems}
2058\phantomsection\label{\detokenize{appdev/refs/api/krb5_change_password:c.krb5_change_password}}%
2059\pysigstartmultiline
2060\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_change\_password}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{creds}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{newpw}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{result\_code}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{result\_code\_string}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{result\_string}}{}%
2061\pysigstopmultiline
2062\end{fulllineitems}
2063
2064\begin{quote}\begin{description}
2065\item[{param}] \leavevmode
2066\sphinxAtStartPar
2067\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
2068
2069\sphinxAtStartPar
2070\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} \sphinxhyphen{} Credentials for kadmin/changepw service
2071
2072\sphinxAtStartPar
2073\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{newpw} \sphinxhyphen{} New password
2074
2075\sphinxAtStartPar
2076\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code} \sphinxhyphen{} Numeric error code from server
2077
2078\sphinxAtStartPar
2079\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code\_string} \sphinxhyphen{} String equivalent to \sphinxstyleemphasis{result\_code}
2080
2081\sphinxAtStartPar
2082\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_string} \sphinxhyphen{} Change password response from the KDC
2083
2084\end{description}\end{quote}
2085\begin{quote}\begin{description}
2086\item[{retval}] \leavevmode\begin{itemize}
2087\item {}
2088\sphinxAtStartPar
20890   Success; otherwise \sphinxhyphen{} Kerberos error codes
2090
2091\end{itemize}
2092
2093\end{description}\end{quote}
2094
2095\sphinxAtStartPar
2096Change the password for the existing principal identified by \sphinxstyleemphasis{creds} .
2097
2098\sphinxAtStartPar
2099The possible values of the output \sphinxstyleemphasis{result\_code} are:
2100\begin{itemize}
2101\item {}
2102\sphinxAtStartPar
2103\#KRB5\_KPASSWD\_SUCCESS (0) \sphinxhyphen{} success
2104
2105\item {}
2106\sphinxAtStartPar
2107\#KRB5\_KPASSWD\_MALFORMED (1) \sphinxhyphen{} Malformed request error
2108
2109\item {}
2110\sphinxAtStartPar
2111\#KRB5\_KPASSWD\_HARDERROR (2) \sphinxhyphen{} Server error
2112
2113\item {}
2114\sphinxAtStartPar
2115\#KRB5\_KPASSWD\_AUTHERROR (3) \sphinxhyphen{} Authentication error
2116
2117\item {}
2118\sphinxAtStartPar
2119\#KRB5\_KPASSWD\_SOFTERROR (4) \sphinxhyphen{} Password change rejected
2120
2121\end{itemize}
2122
2123
2124\subsubsection{krb5\_chpw\_message \sphinxhyphen{}  Get a result message for changing or setting a password.}
2125\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)@\spxentry{krb5\_chpw\_message}\spxextra{C function}}
2126
2127\begin{fulllineitems}
2128\phantomsection\label{\detokenize{appdev/refs/api/krb5_chpw_message:c.krb5_chpw_message}}%
2129\pysigstartmultiline
2130\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_chpw\_message}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{server\_string}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{message\_out}}{}%
2131\pysigstopmultiline
2132\end{fulllineitems}
2133
2134\begin{quote}\begin{description}
2135\item[{param}] \leavevmode
2136\sphinxAtStartPar
2137\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
2138
2139\sphinxAtStartPar
2140\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server\_string} \sphinxhyphen{} Data returned from the remote system
2141
2142\sphinxAtStartPar
2143\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{message\_out} \sphinxhyphen{} A message displayable to the user
2144
2145\end{description}\end{quote}
2146\begin{quote}\begin{description}
2147\item[{retval}] \leavevmode\begin{itemize}
2148\item {}
2149\sphinxAtStartPar
21500   Success
2151
2152\end{itemize}
2153
2154\item[{return}] \leavevmode\begin{itemize}
2155\item {}
2156\sphinxAtStartPar
2157Kerberos error codes
2158
2159\end{itemize}
2160
2161\end{description}\end{quote}
2162
2163\sphinxAtStartPar
2164This function processes the \sphinxstyleemphasis{server\_string} returned in the \sphinxstyleemphasis{result\_string} parameter of krb5\_change\_password(), 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\sphinxhyphen{}readable text.
2165
2166\sphinxAtStartPar
2167Use krb5\_free\_string() to free \sphinxstyleemphasis{message\_out} when it is no longer needed.
2168
2169\begin{sphinxadmonition}{note}{Note:}
2170\sphinxAtStartPar
2171New in 1.11
2172\end{sphinxadmonition}
2173
2174
2175\subsubsection{krb5\_expand\_hostname \sphinxhyphen{}  Canonicalize a hostname, possibly using name service.}
2176\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)@\spxentry{krb5\_expand\_hostname}\spxextra{C function}}
2177
2178\begin{fulllineitems}
2179\phantomsection\label{\detokenize{appdev/refs/api/krb5_expand_hostname:c.krb5_expand_hostname}}%
2180\pysigstartmultiline
2181\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_expand\_hostname}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{host}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{canonhost\_out}}{}%
2182\pysigstopmultiline
2183\end{fulllineitems}
2184
2185\begin{quote}\begin{description}
2186\item[{param}] \leavevmode
2187\sphinxAtStartPar
2188\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
2189
2190\sphinxAtStartPar
2191\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{host} \sphinxhyphen{} Input hostname
2192
2193\sphinxAtStartPar
2194\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{canonhost\_out} \sphinxhyphen{} Canonicalized hostname
2195
2196\end{description}\end{quote}
2197
2198\sphinxAtStartPar
2199This function canonicalizes orig\_hostname, possibly using name service lookups if configuration permits. Use krb5\_free\_string() to free \sphinxstyleemphasis{canonhost\_out} when it is no longer needed.
2200
2201\begin{sphinxadmonition}{note}{Note:}
2202\sphinxAtStartPar
2203New in 1.15
2204\end{sphinxadmonition}
2205
2206
2207\subsubsection{krb5\_free\_context \sphinxhyphen{}  Free a krb5 library context.}
2208\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)@\spxentry{krb5\_free\_context}\spxextra{C function}}
2209
2210\begin{fulllineitems}
2211\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_context:c.krb5_free_context}}%
2212\pysigstartmultiline
2213\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_context}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}}{}%
2214\pysigstopmultiline
2215\end{fulllineitems}
2216
2217\begin{quote}\begin{description}
2218\item[{param}] \leavevmode
2219\sphinxAtStartPar
2220\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
2221
2222\end{description}\end{quote}
2223
2224\sphinxAtStartPar
2225This function frees a \sphinxstyleemphasis{context} that was created by krb5\_init\_context() or krb5\_init\_secure\_context().
2226
2227
2228\subsubsection{krb5\_free\_error\_message \sphinxhyphen{}  Free an error message generated by krb5\_get\_error\_message().}
2229\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)@\spxentry{krb5\_free\_error\_message}\spxextra{C function}}
2230
2231\begin{fulllineitems}
2232\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_error_message:c.krb5_free_error_message}}%
2233\pysigstartmultiline
2234\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_error\_message}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{msg}}{}%
2235\pysigstopmultiline
2236\end{fulllineitems}
2237
2238\begin{quote}\begin{description}
2239\item[{param}] \leavevmode
2240\sphinxAtStartPar
2241\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
2242
2243\sphinxAtStartPar
2244\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{msg} \sphinxhyphen{} Pointer to error message
2245
2246\end{description}\end{quote}
2247
2248
2249\subsubsection{krb5\_free\_principal \sphinxhyphen{}  Free the storage assigned to a principal.}
2250\label{\detokenize{appdev/refs/api/krb5_free_principal:krb5-free-principal-free-the-storage-assigned-to-a-principal}}\label{\detokenize{appdev/refs/api/krb5_free_principal::doc}}\index{krb5\_free\_principal (C function)@\spxentry{krb5\_free\_principal}\spxextra{C function}}
2251
2252\begin{fulllineitems}
2253\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}}%
2254\pysigstartmultiline
2255\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_principal}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{val}}{}%
2256\pysigstopmultiline
2257\end{fulllineitems}
2258
2259\begin{quote}\begin{description}
2260\item[{param}] \leavevmode
2261\sphinxAtStartPar
2262\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
2263
2264\sphinxAtStartPar
2265\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} \sphinxhyphen{} Principal to be freed
2266
2267\end{description}\end{quote}
2268
2269
2270\subsubsection{krb5\_fwd\_tgt\_creds \sphinxhyphen{}  Get a forwarded TGT and format a KRB\sphinxhyphen{}CRED message.}
2271\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)@\spxentry{krb5\_fwd\_tgt\_creds}\spxextra{C function}}
2272
2273\begin{fulllineitems}
2274\phantomsection\label{\detokenize{appdev/refs/api/krb5_fwd_tgt_creds:c.krb5_fwd_tgt_creds}}%
2275\pysigstartmultiline
2276\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_fwd\_tgt\_creds}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{rhost}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{client}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{server}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{cc}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{forwardable}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{outbuf}}{}%
2277\pysigstopmultiline
2278\end{fulllineitems}
2279
2280\begin{quote}\begin{description}
2281\item[{param}] \leavevmode
2282\sphinxAtStartPar
2283\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
2284
2285\sphinxAtStartPar
2286\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
2287
2288\sphinxAtStartPar
2289\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rhost} \sphinxhyphen{} Remote host
2290
2291\sphinxAtStartPar
2292\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} \sphinxhyphen{} Client principal of TGT
2293
2294\sphinxAtStartPar
2295\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} \sphinxhyphen{} Principal of server to receive TGT
2296
2297\sphinxAtStartPar
2298\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cc} \sphinxhyphen{} Credential cache handle (NULL to use default)
2299
2300\sphinxAtStartPar
2301\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{forwardable} \sphinxhyphen{} Whether TGT should be forwardable
2302
2303\sphinxAtStartPar
2304\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} \sphinxhyphen{} KRB\sphinxhyphen{}CRED message
2305
2306\end{description}\end{quote}
2307\begin{quote}\begin{description}
2308\item[{retval}] \leavevmode\begin{itemize}
2309\item {}
2310\sphinxAtStartPar
23110   Success
2312
2313\item {}
2314\sphinxAtStartPar
2315ENOMEM   Insufficient memory
2316
2317\item {}
2318\sphinxAtStartPar
2319KRB5\_PRINC\_NOMATCH   Requested principal and ticket do not match
2320
2321\item {}
2322\sphinxAtStartPar
2323KRB5\_NO\_TKT\_SUPPLIED   Request did not supply a ticket
2324
2325\item {}
2326\sphinxAtStartPar
2327KRB5\_CC\_BADNAME   Credential cache name or principal name malformed
2328
2329\end{itemize}
2330
2331\item[{return}] \leavevmode\begin{itemize}
2332\item {}
2333\sphinxAtStartPar
2334Kerberos error codes
2335
2336\end{itemize}
2337
2338\end{description}\end{quote}
2339
2340\sphinxAtStartPar
2341Get a TGT for use at the remote host \sphinxstyleemphasis{rhost} and format it into a KRB\sphinxhyphen{}CRED message. If \sphinxstyleemphasis{rhost} is NULL and \sphinxstyleemphasis{server} is of type \#KRB5\_NT\_SRV\_HST, the second component of \sphinxstyleemphasis{server} will be used.
2342
2343
2344\subsubsection{krb5\_get\_default\_realm \sphinxhyphen{}  Retrieve the default realm.}
2345\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)@\spxentry{krb5\_get\_default\_realm}\spxextra{C function}}
2346
2347\begin{fulllineitems}
2348\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_default_realm:c.krb5_get_default_realm}}%
2349\pysigstartmultiline
2350\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_default\_realm}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{lrealm}}{}%
2351\pysigstopmultiline
2352\end{fulllineitems}
2353
2354\begin{quote}\begin{description}
2355\item[{param}] \leavevmode
2356\sphinxAtStartPar
2357\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
2358
2359\sphinxAtStartPar
2360\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{lrealm} \sphinxhyphen{} Default realm name
2361
2362\end{description}\end{quote}
2363\begin{quote}\begin{description}
2364\item[{retval}] \leavevmode\begin{itemize}
2365\item {}
2366\sphinxAtStartPar
23670   Success
2368
2369\end{itemize}
2370
2371\item[{return}] \leavevmode\begin{itemize}
2372\item {}
2373\sphinxAtStartPar
2374Kerberos error codes
2375
2376\end{itemize}
2377
2378\end{description}\end{quote}
2379
2380\sphinxAtStartPar
2381Retrieves the default realm to be used if no user\sphinxhyphen{}specified realm is available.
2382
2383\sphinxAtStartPar
2384Use krb5\_free\_default\_realm() to free \sphinxstyleemphasis{lrealm} when it is no longer needed.
2385
2386
2387\subsubsection{krb5\_get\_error\_message \sphinxhyphen{}  Get the (possibly extended) error message for a code.}
2388\label{\detokenize{appdev/refs/api/krb5_get_error_message:krb5-get-error-message-get-the-possibly-extended-error-message-for-a-code}}\label{\detokenize{appdev/refs/api/krb5_get_error_message::doc}}\index{krb5\_get\_error\_message (C function)@\spxentry{krb5\_get\_error\_message}\spxextra{C function}}
2389
2390\begin{fulllineitems}
2391\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_error_message:c.krb5_get_error_message}}%
2392\pysigstartmultiline
2393\pysiglinewithargsret{\DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_error\_message}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\DUrole{n}{code}}{}%
2394\pysigstopmultiline
2395\end{fulllineitems}
2396
2397\begin{quote}\begin{description}
2398\item[{param}] \leavevmode
2399\sphinxAtStartPar
2400\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
2401
2402\sphinxAtStartPar
2403\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} \sphinxhyphen{} Error code
2404
2405\end{description}\end{quote}
2406
2407\sphinxAtStartPar
2408The behavior of 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.
2409
2410\sphinxAtStartPar
2411This function never returns NULL, so its result may be used unconditionally as a C string.
2412
2413\sphinxAtStartPar
2414The string returned by this function must be freed using krb5\_free\_error\_message()
2415
2416\begin{sphinxadmonition}{note}{Note:}
2417\sphinxAtStartPar
2418Future versions may return the same string for the second and following calls.
2419\end{sphinxadmonition}
2420
2421
2422\subsubsection{krb5\_get\_host\_realm \sphinxhyphen{}  Get the Kerberos realm names for a host.}
2423\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)@\spxentry{krb5\_get\_host\_realm}\spxextra{C function}}
2424
2425\begin{fulllineitems}
2426\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_host_realm:c.krb5_get_host_realm}}%
2427\pysigstartmultiline
2428\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_host\_realm}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{host}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{realmsp}}{}%
2429\pysigstopmultiline
2430\end{fulllineitems}
2431
2432\begin{quote}\begin{description}
2433\item[{param}] \leavevmode
2434\sphinxAtStartPar
2435\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
2436
2437\sphinxAtStartPar
2438\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{host} \sphinxhyphen{} Host name (or NULL)
2439
2440\sphinxAtStartPar
2441\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realmsp} \sphinxhyphen{} Null\sphinxhyphen{}terminated list of realm names
2442
2443\end{description}\end{quote}
2444\begin{quote}\begin{description}
2445\item[{retval}] \leavevmode\begin{itemize}
2446\item {}
2447\sphinxAtStartPar
24480   Success
2449
2450\item {}
2451\sphinxAtStartPar
2452ENOMEM   Insufficient memory
2453
2454\end{itemize}
2455
2456\item[{return}] \leavevmode\begin{itemize}
2457\item {}
2458\sphinxAtStartPar
2459Kerberos error codes
2460
2461\end{itemize}
2462
2463\end{description}\end{quote}
2464
2465\sphinxAtStartPar
2466Fill in \sphinxstyleemphasis{realmsp} with a pointer to a null\sphinxhyphen{}terminated list of realm names. If there are no known realms for the host, a list containing the referral (empty) realm is returned.
2467
2468\sphinxAtStartPar
2469If \sphinxstyleemphasis{host} is NULL, the local host’s realms are determined.
2470
2471\sphinxAtStartPar
2472Use krb5\_free\_host\_realm() to release \sphinxstyleemphasis{realmsp} when it is no longer needed.
2473
2474
2475\subsubsection{krb5\_get\_credentials \sphinxhyphen{}  Get an additional ticket.}
2476\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)@\spxentry{krb5\_get\_credentials}\spxextra{C function}}
2477
2478\begin{fulllineitems}
2479\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_credentials:c.krb5_get_credentials}}%
2480\pysigstartmultiline
2481\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_credentials}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\DUrole{n}{options}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{in\_creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{out\_creds}}{}%
2482\pysigstopmultiline
2483\end{fulllineitems}
2484
2485\begin{quote}\begin{description}
2486\item[{param}] \leavevmode
2487\sphinxAtStartPar
2488\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
2489
2490\sphinxAtStartPar
2491\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{options} \sphinxhyphen{} Options
2492
2493\sphinxAtStartPar
2494\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} \sphinxhyphen{} Credential cache handle
2495
2496\sphinxAtStartPar
2497\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_creds} \sphinxhyphen{} Input credentials
2498
2499\sphinxAtStartPar
2500\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out\_creds} \sphinxhyphen{} Output updated credentials
2501
2502\end{description}\end{quote}
2503\begin{quote}\begin{description}
2504\item[{retval}] \leavevmode\begin{itemize}
2505\item {}
2506\sphinxAtStartPar
25070   Success
2508
2509\end{itemize}
2510
2511\item[{return}] \leavevmode\begin{itemize}
2512\item {}
2513\sphinxAtStartPar
2514Kerberos error codes
2515
2516\end{itemize}
2517
2518\end{description}\end{quote}
2519
2520\sphinxAtStartPar
2521Use \sphinxstyleemphasis{ccache} or a TGS exchange to get a service ticket matching \sphinxstyleemphasis{in\_creds} .
2522
2523\sphinxAtStartPar
2524Valid values for \sphinxstyleemphasis{options} are:
2525\begin{quote}
2526\begin{itemize}
2527\item {}
2528\sphinxAtStartPar
2529\#KRB5\_GC\_CACHED Search only credential cache for the ticket
2530
2531\item {}
2532\sphinxAtStartPar
2533\#KRB5\_GC\_USER\_USER Return a user to user authentication ticket
2534
2535\end{itemize}
2536
2537\sphinxAtStartPar
2538\sphinxstyleemphasis{in\_creds} must be non\sphinxhyphen{}null. \sphinxstyleemphasis{in\_creds\sphinxhyphen{}\textgreater{}client} and \sphinxstyleemphasis{in\_creds\sphinxhyphen{}\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\sphinxhyphen{}\textgreater{}authdata} ; otherwise set \sphinxstyleemphasis{in\_creds\sphinxhyphen{}\textgreater{}authdata} to NULL. The session key type is specified in \sphinxstyleemphasis{in\_creds\sphinxhyphen{}\textgreater{}keyblock.enctype} , if it is nonzero.
2539\end{quote}
2540
2541\sphinxAtStartPar
2542The expiration date is specified in \sphinxstyleemphasis{in\_creds\sphinxhyphen{}\textgreater{}times.endtime} . The KDC may return tickets with an earlier expiration date. If \sphinxstyleemphasis{in\_creds\sphinxhyphen{}\textgreater{}times.endtime} is set to 0, the latest possible expiration date will be requested.
2543
2544\sphinxAtStartPar
2545Any returned ticket and intermediate ticket\sphinxhyphen{}granting tickets are stored in \sphinxstyleemphasis{ccache} .
2546
2547\sphinxAtStartPar
2548Use krb5\_free\_creds() to free \sphinxstyleemphasis{out\_creds} when it is no longer needed.
2549
2550
2551\subsubsection{krb5\_get\_fallback\_host\_realm}
2552\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)@\spxentry{krb5\_get\_fallback\_host\_realm}\spxextra{C function}}
2553
2554\begin{fulllineitems}
2555\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_fallback_host_realm:c.krb5_get_fallback_host_realm}}%
2556\pysigstartmultiline
2557\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_fallback\_host\_realm}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{hdata}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{realmsp}}{}%
2558\pysigstopmultiline
2559\end{fulllineitems}
2560
2561\begin{quote}\begin{description}
2562\item[{param}] \leavevmode
2563\sphinxAtStartPar
2564\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
2565
2566\sphinxAtStartPar
2567\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{hdata} \sphinxhyphen{} Host name (or NULL)
2568
2569\sphinxAtStartPar
2570\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realmsp} \sphinxhyphen{} Null\sphinxhyphen{}terminated list of realm names
2571
2572\end{description}\end{quote}
2573
2574\sphinxAtStartPar
2575Fill in \sphinxstyleemphasis{realmsp} with a pointer to a null\sphinxhyphen{}terminated list of realm names obtained through heuristics or insecure resolution methods which have lower priority than KDC referrals.
2576
2577\sphinxAtStartPar
2578If \sphinxstyleemphasis{host} is NULL, the local host’s realms are determined.
2579
2580\sphinxAtStartPar
2581Use krb5\_free\_host\_realm() to release \sphinxstyleemphasis{realmsp} when it is no longer needed.
2582
2583
2584\subsubsection{krb5\_get\_init\_creds\_keytab \sphinxhyphen{}  Get initial credentials using a key table.}
2585\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)@\spxentry{krb5\_get\_init\_creds\_keytab}\spxextra{C function}}
2586
2587\begin{fulllineitems}
2588\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_keytab:c.krb5_get_init_creds_keytab}}%
2589\pysigstartmultiline
2590\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_keytab}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{client}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{n}{arg\_keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{\DUrole{n}{krb5\_deltat}}}}\DUrole{w}{  }\DUrole{n}{start\_time}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{in\_tkt\_service}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{k5\_gic\_options}}{}%
2591\pysigstopmultiline
2592\end{fulllineitems}
2593
2594\begin{quote}\begin{description}
2595\item[{param}] \leavevmode
2596\sphinxAtStartPar
2597\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
2598
2599\sphinxAtStartPar
2600\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} \sphinxhyphen{} New credentials
2601
2602\sphinxAtStartPar
2603\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} \sphinxhyphen{} Client principal
2604
2605\sphinxAtStartPar
2606\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{arg\_keytab} \sphinxhyphen{} Key table handle
2607
2608\sphinxAtStartPar
2609\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{start\_time} \sphinxhyphen{} Time when ticket becomes valid (0 for now)
2610
2611\sphinxAtStartPar
2612\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_tkt\_service} \sphinxhyphen{} Service name of initial credentials (or NULL)
2613
2614\sphinxAtStartPar
2615\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k5\_gic\_options} \sphinxhyphen{} Initial credential options
2616
2617\end{description}\end{quote}
2618\begin{quote}\begin{description}
2619\item[{retval}] \leavevmode\begin{itemize}
2620\item {}
2621\sphinxAtStartPar
26220   Success
2623
2624\end{itemize}
2625
2626\item[{return}] \leavevmode\begin{itemize}
2627\item {}
2628\sphinxAtStartPar
2629Kerberos error codes
2630
2631\end{itemize}
2632
2633\end{description}\end{quote}
2634
2635\sphinxAtStartPar
2636This 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\sphinxhyphen{}granting service is used.
2637
2638
2639\subsubsection{krb5\_get\_init\_creds\_opt\_alloc \sphinxhyphen{}  Allocate a new initial credential options structure.}
2640\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)@\spxentry{krb5\_get\_init\_creds\_opt\_alloc}\spxextra{C function}}
2641
2642\begin{fulllineitems}
2643\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_alloc:c.krb5_get_init_creds_opt_alloc}}%
2644\pysigstartmultiline
2645\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_opt\_alloc}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{opt}}{}%
2646\pysigstopmultiline
2647\end{fulllineitems}
2648
2649\begin{quote}\begin{description}
2650\item[{param}] \leavevmode
2651\sphinxAtStartPar
2652\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
2653
2654\sphinxAtStartPar
2655\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{opt} \sphinxhyphen{} New options structure
2656
2657\end{description}\end{quote}
2658\begin{quote}\begin{description}
2659\item[{retval}] \leavevmode\begin{itemize}
2660\item {}
2661\sphinxAtStartPar
26620   \sphinxhyphen{} Success; Kerberos errors otherwise.
2663
2664\end{itemize}
2665
2666\end{description}\end{quote}
2667
2668\sphinxAtStartPar
2669This function is the preferred way to create an options structure for getting initial credentials, and is required to make use of certain options. Use krb5\_get\_init\_creds\_opt\_free() to free \sphinxstyleemphasis{opt} when it is no longer needed.
2670
2671
2672\subsubsection{krb5\_get\_init\_creds\_opt\_free \sphinxhyphen{}  Free initial credential options.}
2673\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_free:krb5-get-init-creds-opt-free-free-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_free::doc}}\index{krb5\_get\_init\_creds\_opt\_free (C function)@\spxentry{krb5\_get\_init\_creds\_opt\_free}\spxextra{C function}}
2674
2675\begin{fulllineitems}
2676\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_free:c.krb5_get_init_creds_opt_free}}%
2677\pysigstartmultiline
2678\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_opt\_free}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}}{}%
2679\pysigstopmultiline
2680\end{fulllineitems}
2681
2682\begin{quote}\begin{description}
2683\item[{param}] \leavevmode
2684\sphinxAtStartPar
2685\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
2686
2687\sphinxAtStartPar
2688\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options structure to free
2689
2690\end{description}\end{quote}
2691
2692
2693\sphinxstrong{See also:}
2694\nopagebreak
2695
2696
2697\sphinxAtStartPar
2698krb5\_get\_init\_creds\_opt\_alloc()
2699
2700
2701
2702
2703\subsubsection{krb5\_get\_init\_creds\_opt\_get\_fast\_flags \sphinxhyphen{}  Retrieve FAST flags from initial credential options.}
2704\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}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_get_fast_flags::doc}}\index{krb5\_get\_init\_creds\_opt\_get\_fast\_flags (C function)@\spxentry{krb5\_get\_init\_creds\_opt\_get\_fast\_flags}\spxextra{C function}}
2705
2706\begin{fulllineitems}
2707\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_get_fast_flags:c.krb5_get_init_creds_opt_get_fast_flags}}%
2708\pysigstartmultiline
2709\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_opt\_get\_fast\_flags}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{out\_flags}}{}%
2710\pysigstopmultiline
2711\end{fulllineitems}
2712
2713\begin{quote}\begin{description}
2714\item[{param}] \leavevmode
2715\sphinxAtStartPar
2716\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
2717
2718\sphinxAtStartPar
2719\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options
2720
2721\sphinxAtStartPar
2722\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out\_flags} \sphinxhyphen{} FAST flags
2723
2724\end{description}\end{quote}
2725\begin{quote}\begin{description}
2726\item[{retval}] \leavevmode\begin{itemize}
2727\item {}
2728\sphinxAtStartPar
27290   \sphinxhyphen{} Success; Kerberos errors otherwise.
2730
2731\end{itemize}
2732
2733\end{description}\end{quote}
2734
2735
2736\subsubsection{krb5\_get\_init\_creds\_opt\_set\_address\_list \sphinxhyphen{}  Set address restrictions in initial credential options.}
2737\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)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_address\_list}\spxextra{C function}}
2738
2739\begin{fulllineitems}
2740\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_address_list:c.krb5_get_init_creds_opt_set_address_list}}%
2741\pysigstartmultiline
2742\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{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{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{addresses}}{}%
2743\pysigstopmultiline
2744\end{fulllineitems}
2745
2746\begin{quote}\begin{description}
2747\item[{param}] \leavevmode
2748\sphinxAtStartPar
2749\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options structure
2750
2751\sphinxAtStartPar
2752\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addresses} \sphinxhyphen{} Null\sphinxhyphen{}terminated array of addresses
2753
2754\end{description}\end{quote}
2755
2756
2757\subsubsection{krb5\_get\_init\_creds\_opt\_set\_anonymous \sphinxhyphen{}  Set or unset the anonymous flag in initial credential options.}
2758\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)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_anonymous}\spxextra{C function}}
2759
2760\begin{fulllineitems}
2761\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_anonymous:c.krb5_get_init_creds_opt_set_anonymous}}%
2762\pysigstartmultiline
2763\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_opt\_set\_anonymous}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{anonymous}}{}%
2764\pysigstopmultiline
2765\end{fulllineitems}
2766
2767\begin{quote}\begin{description}
2768\item[{param}] \leavevmode
2769\sphinxAtStartPar
2770\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options structure
2771
2772\sphinxAtStartPar
2773\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{anonymous} \sphinxhyphen{} Whether to make an anonymous request
2774
2775\end{description}\end{quote}
2776
2777\sphinxAtStartPar
2778This function may be used to request anonymous credentials from the KDC by setting \sphinxstyleemphasis{anonymous} to non\sphinxhyphen{}zero. Note that anonymous credentials are only a request; clients must verify that credentials are anonymous if that is a requirement.
2779
2780
2781\subsubsection{krb5\_get\_init\_creds\_opt\_set\_canonicalize \sphinxhyphen{}  Set or unset the canonicalize flag in initial credential options.}
2782\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)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_canonicalize}\spxextra{C function}}
2783
2784\begin{fulllineitems}
2785\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_canonicalize:c.krb5_get_init_creds_opt_set_canonicalize}}%
2786\pysigstartmultiline
2787\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_opt\_set\_canonicalize}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{canonicalize}}{}%
2788\pysigstopmultiline
2789\end{fulllineitems}
2790
2791\begin{quote}\begin{description}
2792\item[{param}] \leavevmode
2793\sphinxAtStartPar
2794\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options structure
2795
2796\sphinxAtStartPar
2797\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{canonicalize} \sphinxhyphen{} Whether to canonicalize client principal
2798
2799\end{description}\end{quote}
2800
2801
2802\subsubsection{krb5\_get\_init\_creds\_opt\_set\_change\_password\_prompt \sphinxhyphen{}  Set or unset change\sphinxhyphen{}password\sphinxhyphen{}prompt flag in initial credential options.}
2803\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}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_change_password_prompt::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_change\_password\_prompt (C function)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_change\_password\_prompt}\spxextra{C function}}
2804
2805\begin{fulllineitems}
2806\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}}%
2807\pysigstartmultiline
2808\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{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{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{prompt}}{}%
2809\pysigstopmultiline
2810\end{fulllineitems}
2811
2812\begin{quote}\begin{description}
2813\item[{param}] \leavevmode
2814\sphinxAtStartPar
2815\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options structure
2816
2817\sphinxAtStartPar
2818\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompt} \sphinxhyphen{} Whether to prompt to change password
2819
2820\end{description}\end{quote}
2821
2822\sphinxAtStartPar
2823This flag is on by default. It controls whether krb5\_get\_init\_creds\_password() will react to an expired\sphinxhyphen{}password error by prompting for a new password and attempting to change the old one.
2824
2825
2826\subsubsection{krb5\_get\_init\_creds\_opt\_set\_etype\_list \sphinxhyphen{}  Set allowable encryption types in initial credential options.}
2827\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)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_etype\_list}\spxextra{C function}}
2828
2829\begin{fulllineitems}
2830\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_etype_list:c.krb5_get_init_creds_opt_set_etype_list}}%
2831\pysigstartmultiline
2832\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{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{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{etype\_list}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{etype\_list\_length}}{}%
2833\pysigstopmultiline
2834\end{fulllineitems}
2835
2836\begin{quote}\begin{description}
2837\item[{param}] \leavevmode
2838\sphinxAtStartPar
2839\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options structure
2840
2841\sphinxAtStartPar
2842\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{etype\_list} \sphinxhyphen{} Array of encryption types
2843
2844\sphinxAtStartPar
2845\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{etype\_list\_length} \sphinxhyphen{} Length of \sphinxstyleemphasis{etype\_list}
2846
2847\end{description}\end{quote}
2848
2849
2850\subsubsection{krb5\_get\_init\_creds\_opt\_set\_expire\_callback \sphinxhyphen{}  Set an expiration callback in initial credential options.}
2851\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}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_expire_callback::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_expire\_callback (C function)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_expire\_callback}\spxextra{C function}}
2852
2853\begin{fulllineitems}
2854\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_expire_callback:c.krb5_get_init_creds_opt_set_expire_callback}}%
2855\pysigstartmultiline
2856\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_opt\_set\_expire\_callback}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_expire_callback_func:c.krb5_expire_callback_func}]{\sphinxcrossref{\DUrole{n}{krb5\_expire\_callback\_func}}}}\DUrole{w}{  }\DUrole{n}{cb}, \DUrole{kt}{void}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}}{}%
2857\pysigstopmultiline
2858\end{fulllineitems}
2859
2860\begin{quote}\begin{description}
2861\item[{param}] \leavevmode
2862\sphinxAtStartPar
2863\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
2864
2865\sphinxAtStartPar
2866\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options structure
2867
2868\sphinxAtStartPar
2869\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cb} \sphinxhyphen{} Callback function
2870
2871\sphinxAtStartPar
2872\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} \sphinxhyphen{} Callback argument
2873
2874\end{description}\end{quote}
2875
2876\sphinxAtStartPar
2877Set a callback to receive password and account expiration times.
2878\begin{quote}
2879
2880\sphinxAtStartPar
2881\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:
2882\end{quote}
2883
2884\sphinxAtStartPar
2885If \sphinxstyleemphasis{is\_last\_req} is true, then the KDC reply contained last\sphinxhyphen{}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\sphinxhyphen{}zero \sphinxstyleemphasis{password\_expiration} should be taken as a suggestion from the KDC that a warning be displayed.
2886
2887\sphinxAtStartPar
2888If \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.
2889
2890\sphinxAtStartPar
2891Note 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.
2892
2893\begin{sphinxadmonition}{warning}{Warning:}
2894\sphinxAtStartPar
2895Setting an expire callback with this API will cause krb5\_get\_init\_creds\_password() not to send password expiry warnings to the prompter, as it ordinarily may.
2896\end{sphinxadmonition}
2897
2898\begin{sphinxadmonition}{note}{Note:}
2899\sphinxAtStartPar
2900New in 1.9
2901\end{sphinxadmonition}
2902
2903
2904\subsubsection{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache \sphinxhyphen{}  Set FAST armor cache in initial credential options.}
2905\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}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache (C function)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache}\spxextra{C function}}
2906
2907\begin{fulllineitems}
2908\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache:c.krb5_get_init_creds_opt_set_fast_ccache}}%
2909\pysigstartmultiline
2910\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{ccache}}{}%
2911\pysigstopmultiline
2912\end{fulllineitems}
2913
2914\begin{quote}\begin{description}
2915\item[{param}] \leavevmode
2916\sphinxAtStartPar
2917\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
2918
2919\sphinxAtStartPar
2920\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options
2921
2922\sphinxAtStartPar
2923\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} \sphinxhyphen{} Credential cache handle
2924
2925\end{description}\end{quote}
2926
2927\sphinxAtStartPar
2928This function is similar to krb5\_get\_init\_creds\_opt\_set\_fast\_ccache\_name(), but uses a credential cache handle instead of a name.
2929
2930\begin{sphinxadmonition}{note}{Note:}
2931\sphinxAtStartPar
2932New in 1.9
2933\end{sphinxadmonition}
2934
2935
2936\subsubsection{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache\_name \sphinxhyphen{}  Set location of FAST armor ccache in initial credential options.}
2937\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)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache\_name}\spxextra{C function}}
2938
2939\begin{fulllineitems}
2940\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}}%
2941\pysigstartmultiline
2942\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache\_name}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{fast\_ccache\_name}}{}%
2943\pysigstopmultiline
2944\end{fulllineitems}
2945
2946\begin{quote}\begin{description}
2947\item[{param}] \leavevmode
2948\sphinxAtStartPar
2949\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
2950
2951\sphinxAtStartPar
2952\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options
2953
2954\sphinxAtStartPar
2955\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fast\_ccache\_name} \sphinxhyphen{} Credential cache name
2956
2957\end{description}\end{quote}
2958
2959\sphinxAtStartPar
2960Sets the location of a credential cache containing an armor ticket to protect an initial credential exchange using the FAST protocol extension.
2961
2962\sphinxAtStartPar
2963In 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; krb5\_get\_init\_creds\_opt\_set\_fast\_flags() must be used to require that FAST be used.
2964
2965
2966\subsubsection{krb5\_get\_init\_creds\_opt\_set\_fast\_flags \sphinxhyphen{}  Set FAST flags in initial credential options.}
2967\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)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_fast\_flags}\spxextra{C function}}
2968
2969\begin{fulllineitems}
2970\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_flags:c.krb5_get_init_creds_opt_set_fast_flags}}%
2971\pysigstartmultiline
2972\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_opt\_set\_fast\_flags}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\DUrole{n}{flags}}{}%
2973\pysigstopmultiline
2974\end{fulllineitems}
2975
2976\begin{quote}\begin{description}
2977\item[{param}] \leavevmode
2978\sphinxAtStartPar
2979\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
2980
2981\sphinxAtStartPar
2982\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options
2983
2984\sphinxAtStartPar
2985\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} \sphinxhyphen{} FAST flags
2986
2987\end{description}\end{quote}
2988\begin{quote}\begin{description}
2989\item[{retval}] \leavevmode\begin{itemize}
2990\item {}
2991\sphinxAtStartPar
29920   \sphinxhyphen{} Success; Kerberos errors otherwise.
2993
2994\end{itemize}
2995
2996\end{description}\end{quote}
2997
2998\sphinxAtStartPar
2999The following flag values are valid:
3000\begin{itemize}
3001\item {}
3002\sphinxAtStartPar
3003\#KRB5\_FAST\_REQUIRED \sphinxhyphen{} Require FAST to be used
3004
3005\end{itemize}
3006
3007
3008\subsubsection{krb5\_get\_init\_creds\_opt\_set\_forwardable \sphinxhyphen{}  Set or unset the forwardable flag in initial credential options.}
3009\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)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_forwardable}\spxextra{C function}}
3010
3011\begin{fulllineitems}
3012\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_forwardable:c.krb5_get_init_creds_opt_set_forwardable}}%
3013\pysigstartmultiline
3014\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_opt\_set\_forwardable}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{forwardable}}{}%
3015\pysigstopmultiline
3016\end{fulllineitems}
3017
3018\begin{quote}\begin{description}
3019\item[{param}] \leavevmode
3020\sphinxAtStartPar
3021\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options structure
3022
3023\sphinxAtStartPar
3024\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{forwardable} \sphinxhyphen{} Whether credentials should be forwardable
3025
3026\end{description}\end{quote}
3027
3028
3029\subsubsection{krb5\_get\_init\_creds\_opt\_set\_in\_ccache \sphinxhyphen{}  Set an input credential cache in initial credential options.}
3030\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}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_in_ccache::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_in\_ccache (C function)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_in\_ccache}\spxextra{C function}}
3031
3032\begin{fulllineitems}
3033\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_in_ccache:c.krb5_get_init_creds_opt_set_in_ccache}}%
3034\pysigstartmultiline
3035\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_opt\_set\_in\_ccache}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{ccache}}{}%
3036\pysigstopmultiline
3037\end{fulllineitems}
3038
3039\begin{quote}\begin{description}
3040\item[{param}] \leavevmode
3041\sphinxAtStartPar
3042\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3043
3044\sphinxAtStartPar
3045\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options
3046
3047\sphinxAtStartPar
3048\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} \sphinxhyphen{} Credential cache handle
3049
3050\end{description}\end{quote}
3051
3052\sphinxAtStartPar
3053If 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\sphinxhyphen{}security\sphinxhyphen{} sensitive choices) as the previous authentication attempt, which stored information in the passed\sphinxhyphen{}in ccache.
3054
3055\begin{sphinxadmonition}{note}{Note:}
3056\sphinxAtStartPar
3057New in 1.11
3058\end{sphinxadmonition}
3059
3060
3061\subsubsection{krb5\_get\_init\_creds\_opt\_set\_out\_ccache \sphinxhyphen{}  Set an output credential cache in initial credential options.}
3062\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)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_out\_ccache}\spxextra{C function}}
3063
3064\begin{fulllineitems}
3065\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_out_ccache:c.krb5_get_init_creds_opt_set_out_ccache}}%
3066\pysigstartmultiline
3067\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_opt\_set\_out\_ccache}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{ccache}}{}%
3068\pysigstopmultiline
3069\end{fulllineitems}
3070
3071\begin{quote}\begin{description}
3072\item[{param}] \leavevmode
3073\sphinxAtStartPar
3074\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3075
3076\sphinxAtStartPar
3077\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options
3078
3079\sphinxAtStartPar
3080\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} \sphinxhyphen{} Credential cache handle
3081
3082\end{description}\end{quote}
3083
3084\sphinxAtStartPar
3085If 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.
3086
3087
3088\subsubsection{krb5\_get\_init\_creds\_opt\_set\_pa \sphinxhyphen{}  Supply options for preauthentication in initial credential options.}
3089\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}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_pa::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_pa (C function)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_pa}\spxextra{C function}}
3090
3091\begin{fulllineitems}
3092\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_pa:c.krb5_get_init_creds_opt_set_pa}}%
3093\pysigstartmultiline
3094\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_opt\_set\_pa}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{attr}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{value}}{}%
3095\pysigstopmultiline
3096\end{fulllineitems}
3097
3098\begin{quote}\begin{description}
3099\item[{param}] \leavevmode
3100\sphinxAtStartPar
3101\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3102
3103\sphinxAtStartPar
3104\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options structure
3105
3106\sphinxAtStartPar
3107\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{attr} \sphinxhyphen{} Preauthentication option name
3108
3109\sphinxAtStartPar
3110\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{value} \sphinxhyphen{} Preauthentication option value
3111
3112\end{description}\end{quote}
3113
3114\sphinxAtStartPar
3115This 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} .
3116
3117
3118\subsubsection{krb5\_get\_init\_creds\_opt\_set\_pac\_request \sphinxhyphen{}  Ask the KDC to include or not include a PAC in the ticket.}
3119\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)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_pac\_request}\spxextra{C function}}
3120
3121\begin{fulllineitems}
3122\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_pac_request:c.krb5_get_init_creds_opt_set_pac_request}}%
3123\pysigstartmultiline
3124\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_opt\_set\_pac\_request}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\DUrole{n}{req\_pac}}{}%
3125\pysigstopmultiline
3126\end{fulllineitems}
3127
3128\begin{quote}\begin{description}
3129\item[{param}] \leavevmode
3130\sphinxAtStartPar
3131\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3132
3133\sphinxAtStartPar
3134\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options structure
3135
3136\sphinxAtStartPar
3137\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{req\_pac} \sphinxhyphen{} Whether to request a PAC or not
3138
3139\end{description}\end{quote}
3140
3141\sphinxAtStartPar
3142If this option is set, the AS request will include a PAC\sphinxhyphen{}REQUEST pa\sphinxhyphen{}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.
3143
3144\begin{sphinxadmonition}{note}{Note:}
3145\sphinxAtStartPar
3146New in 1.15
3147\end{sphinxadmonition}
3148
3149
3150\subsubsection{krb5\_get\_init\_creds\_opt\_set\_preauth\_list \sphinxhyphen{}  Set preauthentication types in initial credential options.}
3151\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)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_preauth\_list}\spxextra{C function}}
3152
3153\begin{fulllineitems}
3154\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_preauth_list:c.krb5_get_init_creds_opt_set_preauth_list}}%
3155\pysigstartmultiline
3156\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{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{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}]{\sphinxcrossref{\DUrole{n}{krb5\_preauthtype}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{preauth\_list}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{preauth\_list\_length}}{}%
3157\pysigstopmultiline
3158\end{fulllineitems}
3159
3160\begin{quote}\begin{description}
3161\item[{param}] \leavevmode
3162\sphinxAtStartPar
3163\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options structure
3164
3165\sphinxAtStartPar
3166\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{preauth\_list} \sphinxhyphen{} Array of preauthentication types
3167
3168\sphinxAtStartPar
3169\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{preauth\_list\_length} \sphinxhyphen{} Length of \sphinxstyleemphasis{preauth\_list}
3170
3171\end{description}\end{quote}
3172
3173\sphinxAtStartPar
3174This function can be used to perform optimistic preauthentication when getting initial credentials, in combination with krb5\_get\_init\_creds\_opt\_set\_salt() and krb5\_get\_init\_creds\_opt\_set\_pa().
3175
3176
3177\subsubsection{krb5\_get\_init\_creds\_opt\_set\_proxiable \sphinxhyphen{}  Set or unset the proxiable flag in initial credential options.}
3178\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}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_proxiable::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_proxiable (C function)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_proxiable}\spxextra{C function}}
3179
3180\begin{fulllineitems}
3181\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_proxiable:c.krb5_get_init_creds_opt_set_proxiable}}%
3182\pysigstartmultiline
3183\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_opt\_set\_proxiable}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{proxiable}}{}%
3184\pysigstopmultiline
3185\end{fulllineitems}
3186
3187\begin{quote}\begin{description}
3188\item[{param}] \leavevmode
3189\sphinxAtStartPar
3190\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options structure
3191
3192\sphinxAtStartPar
3193\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{proxiable} \sphinxhyphen{} Whether credentials should be proxiable
3194
3195\end{description}\end{quote}
3196
3197
3198\subsubsection{krb5\_get\_init\_creds\_opt\_set\_renew\_life \sphinxhyphen{}  Set the ticket renewal lifetime in initial credential options.}
3199\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}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_renew_life::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_renew\_life (C function)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_renew\_life}\spxextra{C function}}
3200
3201\begin{fulllineitems}
3202\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_renew_life:c.krb5_get_init_creds_opt_set_renew_life}}%
3203\pysigstartmultiline
3204\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{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{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{\DUrole{n}{krb5\_deltat}}}}\DUrole{w}{  }\DUrole{n}{renew\_life}}{}%
3205\pysigstopmultiline
3206\end{fulllineitems}
3207
3208\begin{quote}\begin{description}
3209\item[{param}] \leavevmode
3210\sphinxAtStartPar
3211\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Pointer to \sphinxstyleemphasis{options} field
3212
3213\sphinxAtStartPar
3214\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{renew\_life} \sphinxhyphen{} Ticket renewal lifetime
3215
3216\end{description}\end{quote}
3217
3218
3219\subsubsection{krb5\_get\_init\_creds\_opt\_set\_responder \sphinxhyphen{}  Set the responder function in initial credential options.}
3220\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)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_responder}\spxextra{C function}}
3221
3222\begin{fulllineitems}
3223\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_responder:c.krb5_get_init_creds_opt_set_responder}}%
3224\pysigstartmultiline
3225\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_opt\_set\_responder}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_fn:c.krb5_responder_fn}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_fn}}}}\DUrole{w}{  }\DUrole{n}{responder}, \DUrole{kt}{void}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}}{}%
3226\pysigstopmultiline
3227\end{fulllineitems}
3228
3229\begin{quote}\begin{description}
3230\item[{param}] \leavevmode
3231\sphinxAtStartPar
3232\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3233
3234\sphinxAtStartPar
3235\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options structure
3236
3237\sphinxAtStartPar
3238\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{responder} \sphinxhyphen{} Responder function
3239
3240\sphinxAtStartPar
3241\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} \sphinxhyphen{} Responder data argument
3242
3243\end{description}\end{quote}
3244
3245\begin{sphinxadmonition}{note}{Note:}
3246\sphinxAtStartPar
3247New in 1.11
3248\end{sphinxadmonition}
3249
3250
3251\subsubsection{krb5\_get\_init\_creds\_opt\_set\_salt \sphinxhyphen{}  Set salt for optimistic preauthentication in initial credential options.}
3252\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)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_salt}\spxextra{C function}}
3253
3254\begin{fulllineitems}
3255\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_salt:c.krb5_get_init_creds_opt_set_salt}}%
3256\pysigstartmultiline
3257\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_opt\_set\_salt}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{salt}}{}%
3258\pysigstopmultiline
3259\end{fulllineitems}
3260
3261\begin{quote}\begin{description}
3262\item[{param}] \leavevmode
3263\sphinxAtStartPar
3264\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options structure
3265
3266\sphinxAtStartPar
3267\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{salt} \sphinxhyphen{} Salt data
3268
3269\end{description}\end{quote}
3270
3271\sphinxAtStartPar
3272When 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.
3273
3274
3275\subsubsection{krb5\_get\_init\_creds\_opt\_set\_tkt\_life \sphinxhyphen{}  Set the ticket lifetime in initial credential options.}
3276\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)@\spxentry{krb5\_get\_init\_creds\_opt\_set\_tkt\_life}\spxextra{C function}}
3277
3278\begin{fulllineitems}
3279\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_tkt_life:c.krb5_get_init_creds_opt_set_tkt_life}}%
3280\pysigstartmultiline
3281\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{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{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{\DUrole{n}{krb5\_deltat}}}}\DUrole{w}{  }\DUrole{n}{tkt\_life}}{}%
3282\pysigstopmultiline
3283\end{fulllineitems}
3284
3285\begin{quote}\begin{description}
3286\item[{param}] \leavevmode
3287\sphinxAtStartPar
3288\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Options structure
3289
3290\sphinxAtStartPar
3291\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{tkt\_life} \sphinxhyphen{} Ticket lifetime
3292
3293\end{description}\end{quote}
3294
3295
3296\subsubsection{krb5\_get\_init\_creds\_password \sphinxhyphen{}  Get initial credentials using a password.}
3297\label{\detokenize{appdev/refs/api/krb5_get_init_creds_password:krb5-get-init-creds-password-get-initial-credentials-using-a-password}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_password::doc}}\index{krb5\_get\_init\_creds\_password (C function)@\spxentry{krb5\_get\_init\_creds\_password}\spxextra{C function}}
3298
3299\begin{fulllineitems}
3300\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}}%
3301\pysigstartmultiline
3302\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_password}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{client}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{password}, {\hyperref[\detokenize{appdev/refs/types/krb5_prompter_fct:c.krb5_prompter_fct}]{\sphinxcrossref{\DUrole{n}{krb5\_prompter\_fct}}}}\DUrole{w}{  }\DUrole{n}{prompter}, \DUrole{kt}{void}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}, {\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{\DUrole{n}{krb5\_deltat}}}}\DUrole{w}{  }\DUrole{n}{start\_time}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{in\_tkt\_service}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{k5\_gic\_options}}{}%
3303\pysigstopmultiline
3304\end{fulllineitems}
3305
3306\begin{quote}\begin{description}
3307\item[{param}] \leavevmode
3308\sphinxAtStartPar
3309\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3310
3311\sphinxAtStartPar
3312\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} \sphinxhyphen{} New credentials
3313
3314\sphinxAtStartPar
3315\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} \sphinxhyphen{} Client principal
3316
3317\sphinxAtStartPar
3318\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{password} \sphinxhyphen{} Password (or NULL)
3319
3320\sphinxAtStartPar
3321\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompter} \sphinxhyphen{} Prompter function
3322
3323\sphinxAtStartPar
3324\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} \sphinxhyphen{} Prompter callback data
3325
3326\sphinxAtStartPar
3327\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{start\_time} \sphinxhyphen{} Time when ticket becomes valid (0 for now)
3328
3329\sphinxAtStartPar
3330\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_tkt\_service} \sphinxhyphen{} Service name of initial credentials (or NULL)
3331
3332\sphinxAtStartPar
3333\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k5\_gic\_options} \sphinxhyphen{} Initial credential options
3334
3335\end{description}\end{quote}
3336\begin{quote}\begin{description}
3337\item[{retval}] \leavevmode\begin{itemize}
3338\item {}
3339\sphinxAtStartPar
33400   Success
3341
3342\item {}
3343\sphinxAtStartPar
3344EINVAL   Invalid argument
3345
3346\item {}
3347\sphinxAtStartPar
3348KRB5\_KDC\_UNREACH   Cannot contact any KDC for requested realm
3349
3350\item {}
3351\sphinxAtStartPar
3352KRB5\_PREAUTH\_FAILED   Generic Pre\sphinxhyphen{}athentication failure
3353
3354\item {}
3355\sphinxAtStartPar
3356KRB5\_LIBOS\_PWDINTR   Password read interrupted
3357
3358\item {}
3359\sphinxAtStartPar
3360KRB5\_REALM\_CANT\_RESOLVE   Cannot resolve network address for KDC in requested realm
3361
3362\item {}
3363\sphinxAtStartPar
3364KRB5KDC\_ERR\_KEY\_EXP   Password has expired
3365
3366\item {}
3367\sphinxAtStartPar
3368KRB5\_LIBOS\_BADPWDMATCH   Password mismatch
3369
3370\item {}
3371\sphinxAtStartPar
3372KRB5\_CHPW\_PWDNULL   New password cannot be zero length
3373
3374\item {}
3375\sphinxAtStartPar
3376KRB5\_CHPW\_FAIL   Password change failed
3377
3378\end{itemize}
3379
3380\item[{return}] \leavevmode\begin{itemize}
3381\item {}
3382\sphinxAtStartPar
3383Kerberos error codes
3384
3385\end{itemize}
3386
3387\end{description}\end{quote}
3388
3389\sphinxAtStartPar
3390This 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\sphinxhyphen{}granting service is used.
3391
3392
3393\subsubsection{krb5\_get\_profile \sphinxhyphen{}  Retrieve configuration profile from the context.}
3394\label{\detokenize{appdev/refs/api/krb5_get_profile:krb5-get-profile-retrieve-configuration-profile-from-the-context}}\label{\detokenize{appdev/refs/api/krb5_get_profile::doc}}\index{krb5\_get\_profile (C function)@\spxentry{krb5\_get\_profile}\spxextra{C function}}
3395
3396\begin{fulllineitems}
3397\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_profile:c.krb5_get_profile}}%
3398\pysigstartmultiline
3399\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_profile}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{struct}\DUrole{w}{  }\DUrole{n}{\_profile\_t}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{profile}}{}%
3400\pysigstopmultiline
3401\end{fulllineitems}
3402
3403\begin{quote}\begin{description}
3404\item[{param}] \leavevmode
3405\sphinxAtStartPar
3406\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3407
3408\sphinxAtStartPar
3409\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{profile} \sphinxhyphen{} Pointer to data read from a configuration file
3410
3411\end{description}\end{quote}
3412\begin{quote}\begin{description}
3413\item[{retval}] \leavevmode\begin{itemize}
3414\item {}
3415\sphinxAtStartPar
34160   Success
3417
3418\end{itemize}
3419
3420\item[{return}] \leavevmode\begin{itemize}
3421\item {}
3422\sphinxAtStartPar
3423Kerberos error codes
3424
3425\end{itemize}
3426
3427\end{description}\end{quote}
3428
3429\sphinxAtStartPar
3430This function creates a new \sphinxstyleemphasis{profile} object that reflects profile in the supplied \sphinxstyleemphasis{context} .
3431
3432\sphinxAtStartPar
3433The \sphinxstyleemphasis{profile} object may be freed with profile\_release() function. See profile.h and profile API for more details.
3434
3435
3436\subsubsection{krb5\_get\_prompt\_types \sphinxhyphen{}  Get prompt types array from a context.}
3437\label{\detokenize{appdev/refs/api/krb5_get_prompt_types:krb5-get-prompt-types-get-prompt-types-array-from-a-context}}\label{\detokenize{appdev/refs/api/krb5_get_prompt_types::doc}}\index{krb5\_get\_prompt\_types (C function)@\spxentry{krb5\_get\_prompt\_types}\spxextra{C function}}
3438
3439\begin{fulllineitems}
3440\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_prompt_types:c.krb5_get_prompt_types}}%
3441\pysigstartmultiline
3442\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_prompt_type:c.krb5_prompt_type}]{\sphinxcrossref{\DUrole{n}{krb5\_prompt\_type}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_prompt\_types}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}}{}%
3443\pysigstopmultiline
3444\end{fulllineitems}
3445
3446\begin{quote}\begin{description}
3447\item[{param}] \leavevmode
3448\sphinxAtStartPar
3449\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3450
3451\end{description}\end{quote}
3452\begin{quote}\begin{description}
3453\item[{return}] \leavevmode\begin{itemize}
3454\item {}
3455\sphinxAtStartPar
3456Pointer 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
3457
3458\end{itemize}
3459
3460\end{description}\end{quote}
3461
3462
3463\subsubsection{krb5\_get\_renewed\_creds \sphinxhyphen{}  Get renewed credential from KDC using an existing credential.}
3464\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)@\spxentry{krb5\_get\_renewed\_creds}\spxextra{C function}}
3465
3466\begin{fulllineitems}
3467\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_renewed_creds:c.krb5_get_renewed_creds}}%
3468\pysigstartmultiline
3469\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_renewed\_creds}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{client}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{ccache}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{in\_tkt\_service}}{}%
3470\pysigstopmultiline
3471\end{fulllineitems}
3472
3473\begin{quote}\begin{description}
3474\item[{param}] \leavevmode
3475\sphinxAtStartPar
3476\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3477
3478\sphinxAtStartPar
3479\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} \sphinxhyphen{} Renewed credentials
3480
3481\sphinxAtStartPar
3482\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} \sphinxhyphen{} Client principal name
3483
3484\sphinxAtStartPar
3485\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} \sphinxhyphen{} Credential cache
3486
3487\sphinxAtStartPar
3488\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_tkt\_service} \sphinxhyphen{} Server principal string (or NULL)
3489
3490\end{description}\end{quote}
3491\begin{quote}\begin{description}
3492\item[{retval}] \leavevmode\begin{itemize}
3493\item {}
3494\sphinxAtStartPar
34950   Success
3496
3497\end{itemize}
3498
3499\item[{return}] \leavevmode\begin{itemize}
3500\item {}
3501\sphinxAtStartPar
3502Kerberos error codes
3503
3504\end{itemize}
3505
3506\end{description}\end{quote}
3507
3508\sphinxAtStartPar
3509This 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\sphinxhyphen{}granting service is used.
3510
3511\sphinxAtStartPar
3512If successful, the renewed credential is placed in \sphinxstyleemphasis{creds} .
3513
3514
3515\subsubsection{krb5\_get\_validated\_creds \sphinxhyphen{}  Get validated credentials from the KDC.}
3516\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)@\spxentry{krb5\_get\_validated\_creds}\spxextra{C function}}
3517
3518\begin{fulllineitems}
3519\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_validated_creds:c.krb5_get_validated_creds}}%
3520\pysigstartmultiline
3521\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_validated\_creds}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{client}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{ccache}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{in\_tkt\_service}}{}%
3522\pysigstopmultiline
3523\end{fulllineitems}
3524
3525\begin{quote}\begin{description}
3526\item[{param}] \leavevmode
3527\sphinxAtStartPar
3528\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3529
3530\sphinxAtStartPar
3531\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} \sphinxhyphen{} Validated credentials
3532
3533\sphinxAtStartPar
3534\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} \sphinxhyphen{} Client principal name
3535
3536\sphinxAtStartPar
3537\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} \sphinxhyphen{} Credential cache
3538
3539\sphinxAtStartPar
3540\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_tkt\_service} \sphinxhyphen{} Server principal string (or NULL)
3541
3542\end{description}\end{quote}
3543\begin{quote}\begin{description}
3544\item[{retval}] \leavevmode\begin{itemize}
3545\item {}
3546\sphinxAtStartPar
35470   Success
3548
3549\item {}
3550\sphinxAtStartPar
3551KRB5\_NO\_2ND\_TKT   Request missing second ticket
3552
3553\item {}
3554\sphinxAtStartPar
3555KRB5\_NO\_TKT\_SUPPLIED   Request did not supply a ticket
3556
3557\item {}
3558\sphinxAtStartPar
3559KRB5\_PRINC\_NOMATCH   Requested principal and ticket do not match
3560
3561\item {}
3562\sphinxAtStartPar
3563KRB5\_KDCREP\_MODIFIED   KDC reply did not match expectations
3564
3565\item {}
3566\sphinxAtStartPar
3567KRB5\_KDCREP\_SKEW   Clock skew too great in KDC reply
3568
3569\end{itemize}
3570
3571\item[{return}] \leavevmode\begin{itemize}
3572\item {}
3573\sphinxAtStartPar
3574Kerberos error codes
3575
3576\end{itemize}
3577
3578\end{description}\end{quote}
3579
3580\sphinxAtStartPar
3581This 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\sphinxhyphen{}granting service is used.
3582
3583\sphinxAtStartPar
3584If successful, the validated credential is placed in \sphinxstyleemphasis{creds} .
3585
3586
3587\subsubsection{krb5\_init\_context \sphinxhyphen{}  Create a krb5 library context.}
3588\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)@\spxentry{krb5\_init\_context}\spxextra{C function}}
3589
3590\begin{fulllineitems}
3591\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_context:c.krb5_init_context}}%
3592\pysigstartmultiline
3593\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_init\_context}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{context}}{}%
3594\pysigstopmultiline
3595\end{fulllineitems}
3596
3597\begin{quote}\begin{description}
3598\item[{param}] \leavevmode
3599\sphinxAtStartPar
3600\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3601
3602\end{description}\end{quote}
3603\begin{quote}\begin{description}
3604\item[{retval}] \leavevmode\begin{itemize}
3605\item {}
3606\sphinxAtStartPar
36070   Success
3608
3609\end{itemize}
3610
3611\item[{return}] \leavevmode\begin{itemize}
3612\item {}
3613\sphinxAtStartPar
3614Kerberos error codes
3615
3616\end{itemize}
3617
3618\end{description}\end{quote}
3619
3620\sphinxAtStartPar
3621The \sphinxstyleemphasis{context} must be released by calling krb5\_free\_context() when it is no longer needed.
3622
3623\begin{sphinxadmonition}{warning}{Warning:}
3624\sphinxAtStartPar
3625Any program or module that needs the Kerberos code to not trust the environment must use krb5\_init\_secure\_context(), or clean out the environment.
3626\end{sphinxadmonition}
3627
3628
3629\subsubsection{krb5\_init\_secure\_context \sphinxhyphen{}  Create a krb5 library context using only configuration files.}
3630\label{\detokenize{appdev/refs/api/krb5_init_secure_context:krb5-init-secure-context-create-a-krb5-library-context-using-only-configuration-files}}\label{\detokenize{appdev/refs/api/krb5_init_secure_context::doc}}\index{krb5\_init\_secure\_context (C function)@\spxentry{krb5\_init\_secure\_context}\spxextra{C function}}
3631
3632\begin{fulllineitems}
3633\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_secure_context:c.krb5_init_secure_context}}%
3634\pysigstartmultiline
3635\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_init\_secure\_context}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{context}}{}%
3636\pysigstopmultiline
3637\end{fulllineitems}
3638
3639\begin{quote}\begin{description}
3640\item[{param}] \leavevmode
3641\sphinxAtStartPar
3642\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3643
3644\end{description}\end{quote}
3645\begin{quote}\begin{description}
3646\item[{retval}] \leavevmode\begin{itemize}
3647\item {}
3648\sphinxAtStartPar
36490   Success
3650
3651\end{itemize}
3652
3653\item[{return}] \leavevmode\begin{itemize}
3654\item {}
3655\sphinxAtStartPar
3656Kerberos error codes
3657
3658\end{itemize}
3659
3660\end{description}\end{quote}
3661
3662\sphinxAtStartPar
3663Create a context structure, using only system configuration files. All information passed through the environment variables is ignored.
3664
3665\sphinxAtStartPar
3666The \sphinxstyleemphasis{context} must be released by calling krb5\_free\_context() when it is no longer needed.
3667
3668
3669\subsubsection{krb5\_is\_config\_principal \sphinxhyphen{}  Test whether a principal is a configuration principal.}
3670\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)@\spxentry{krb5\_is\_config\_principal}\spxextra{C function}}
3671
3672\begin{fulllineitems}
3673\phantomsection\label{\detokenize{appdev/refs/api/krb5_is_config_principal:c.krb5_is_config_principal}}%
3674\pysigstartmultiline
3675\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_is\_config\_principal}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{principal}}{}%
3676\pysigstopmultiline
3677\end{fulllineitems}
3678
3679\begin{quote}\begin{description}
3680\item[{param}] \leavevmode
3681\sphinxAtStartPar
3682\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3683
3684\sphinxAtStartPar
3685\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} \sphinxhyphen{} Principal to check
3686
3687\end{description}\end{quote}
3688\begin{quote}\begin{description}
3689\item[{return}] \leavevmode\begin{itemize}
3690\item {}
3691\sphinxAtStartPar
3692TRUE if the principal is a configuration principal (generated part of krb5\_cc\_set\_config()); FALSE otherwise.
3693
3694\end{itemize}
3695
3696\end{description}\end{quote}
3697
3698
3699\subsubsection{krb5\_is\_thread\_safe \sphinxhyphen{}  Test whether the Kerberos library was built with multithread support.}
3700\label{\detokenize{appdev/refs/api/krb5_is_thread_safe:krb5-is-thread-safe-test-whether-the-kerberos-library-was-built-with-multithread-support}}\label{\detokenize{appdev/refs/api/krb5_is_thread_safe::doc}}\index{krb5\_is\_thread\_safe (C function)@\spxentry{krb5\_is\_thread\_safe}\spxextra{C function}}
3701
3702\begin{fulllineitems}
3703\phantomsection\label{\detokenize{appdev/refs/api/krb5_is_thread_safe:c.krb5_is_thread_safe}}%
3704\pysigstartmultiline
3705\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_is\_thread\_safe}}}}{\DUrole{kt}{void}\DUrole{w}{  }\DUrole{n}{None}}{}%
3706\pysigstopmultiline
3707\end{fulllineitems}
3708
3709\begin{quote}\begin{description}
3710\item[{param}] \leavevmode
3711\sphinxAtStartPar
3712\sphinxstylestrong{None}
3713
3714\end{description}\end{quote}
3715\begin{quote}\begin{description}
3716\item[{retval}] \leavevmode\begin{itemize}
3717\item {}
3718\sphinxAtStartPar
3719TRUE   if the library is threadsafe; FALSE otherwise
3720
3721\end{itemize}
3722
3723\end{description}\end{quote}
3724
3725
3726\subsubsection{krb5\_kt\_close \sphinxhyphen{}  Close a key table handle.}
3727\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)@\spxentry{krb5\_kt\_close}\spxextra{C function}}
3728
3729\begin{fulllineitems}
3730\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_close:c.krb5_kt_close}}%
3731\pysigstartmultiline
3732\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kt\_close}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{n}{keytab}}{}%
3733\pysigstopmultiline
3734\end{fulllineitems}
3735
3736\begin{quote}\begin{description}
3737\item[{param}] \leavevmode
3738\sphinxAtStartPar
3739\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3740
3741\sphinxAtStartPar
3742\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} \sphinxhyphen{} Key table handle
3743
3744\end{description}\end{quote}
3745\begin{quote}\begin{description}
3746\item[{retval}] \leavevmode\begin{itemize}
3747\item {}
3748\sphinxAtStartPar
37490   None
3750
3751\end{itemize}
3752
3753\end{description}\end{quote}
3754
3755
3756\subsubsection{krb5\_kt\_client\_default \sphinxhyphen{}  Resolve the default client key table.}
3757\label{\detokenize{appdev/refs/api/krb5_kt_client_default:krb5-kt-client-default-resolve-the-default-client-key-table}}\label{\detokenize{appdev/refs/api/krb5_kt_client_default::doc}}\index{krb5\_kt\_client\_default (C function)@\spxentry{krb5\_kt\_client\_default}\spxextra{C function}}
3758
3759\begin{fulllineitems}
3760\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_client_default:c.krb5_kt_client_default}}%
3761\pysigstartmultiline
3762\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kt\_client\_default}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{keytab\_out}}{}%
3763\pysigstopmultiline
3764\end{fulllineitems}
3765
3766\begin{quote}\begin{description}
3767\item[{param}] \leavevmode
3768\sphinxAtStartPar
3769\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3770
3771\sphinxAtStartPar
3772\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keytab\_out} \sphinxhyphen{} Key table handle
3773
3774\end{description}\end{quote}
3775\begin{quote}\begin{description}
3776\item[{retval}] \leavevmode\begin{itemize}
3777\item {}
3778\sphinxAtStartPar
37790   Success
3780
3781\end{itemize}
3782
3783\item[{return}] \leavevmode\begin{itemize}
3784\item {}
3785\sphinxAtStartPar
3786Kerberos error codes
3787
3788\end{itemize}
3789
3790\end{description}\end{quote}
3791
3792\sphinxAtStartPar
3793Fill \sphinxstyleemphasis{keytab\_out} with a handle to the default client key table.
3794
3795\begin{sphinxadmonition}{note}{Note:}
3796\sphinxAtStartPar
3797New in 1.11
3798\end{sphinxadmonition}
3799
3800
3801\subsubsection{krb5\_kt\_default \sphinxhyphen{}  Resolve the default key table.}
3802\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)@\spxentry{krb5\_kt\_default}\spxextra{C function}}
3803
3804\begin{fulllineitems}
3805\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_default:c.krb5_kt_default}}%
3806\pysigstartmultiline
3807\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kt\_default}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{id}}{}%
3808\pysigstopmultiline
3809\end{fulllineitems}
3810
3811\begin{quote}\begin{description}
3812\item[{param}] \leavevmode
3813\sphinxAtStartPar
3814\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3815
3816\sphinxAtStartPar
3817\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{id} \sphinxhyphen{} Key table handle
3818
3819\end{description}\end{quote}
3820\begin{quote}\begin{description}
3821\item[{retval}] \leavevmode\begin{itemize}
3822\item {}
3823\sphinxAtStartPar
38240   Success
3825
3826\end{itemize}
3827
3828\item[{return}] \leavevmode\begin{itemize}
3829\item {}
3830\sphinxAtStartPar
3831Kerberos error codes
3832
3833\end{itemize}
3834
3835\end{description}\end{quote}
3836
3837\sphinxAtStartPar
3838Set \sphinxstyleemphasis{id} to a handle to the default key table. The key table is not opened.
3839
3840
3841\subsubsection{krb5\_kt\_default\_name \sphinxhyphen{}  Get the default key table name.}
3842\label{\detokenize{appdev/refs/api/krb5_kt_default_name:krb5-kt-default-name-get-the-default-key-table-name}}\label{\detokenize{appdev/refs/api/krb5_kt_default_name::doc}}\index{krb5\_kt\_default\_name (C function)@\spxentry{krb5\_kt\_default\_name}\spxextra{C function}}
3843
3844\begin{fulllineitems}
3845\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_default_name:c.krb5_kt_default_name}}%
3846\pysigstartmultiline
3847\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kt\_default\_name}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{name}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{name\_size}}{}%
3848\pysigstopmultiline
3849\end{fulllineitems}
3850
3851\begin{quote}\begin{description}
3852\item[{param}] \leavevmode
3853\sphinxAtStartPar
3854\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3855
3856\sphinxAtStartPar
3857\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} \sphinxhyphen{} Default key table name
3858
3859\sphinxAtStartPar
3860\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name\_size} \sphinxhyphen{} Space available in \sphinxstyleemphasis{name}
3861
3862\end{description}\end{quote}
3863\begin{quote}\begin{description}
3864\item[{retval}] \leavevmode\begin{itemize}
3865\item {}
3866\sphinxAtStartPar
38670   Success
3868
3869\item {}
3870\sphinxAtStartPar
3871KRB5\_CONFIG\_NOTENUFSPACE   Buffer is too short
3872
3873\end{itemize}
3874
3875\item[{return}] \leavevmode\begin{itemize}
3876\item {}
3877\sphinxAtStartPar
3878Kerberos error codes
3879
3880\end{itemize}
3881
3882\end{description}\end{quote}
3883
3884\sphinxAtStartPar
3885Fill \sphinxstyleemphasis{name} with the name of the default key table for \sphinxstyleemphasis{context} .
3886
3887
3888\subsubsection{krb5\_kt\_dup \sphinxhyphen{}  Duplicate keytab handle.}
3889\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)@\spxentry{krb5\_kt\_dup}\spxextra{C function}}
3890
3891\begin{fulllineitems}
3892\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_dup:c.krb5_kt_dup}}%
3893\pysigstartmultiline
3894\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kt\_dup}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{n}{in}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{out}}{}%
3895\pysigstopmultiline
3896\end{fulllineitems}
3897
3898\begin{quote}\begin{description}
3899\item[{param}] \leavevmode
3900\sphinxAtStartPar
3901\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3902
3903\sphinxAtStartPar
3904\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in} \sphinxhyphen{} Key table handle to be duplicated
3905
3906\sphinxAtStartPar
3907\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} \sphinxhyphen{} Key table handle
3908
3909\end{description}\end{quote}
3910
3911\sphinxAtStartPar
3912Create a new handle referring to the same key table as \sphinxstyleemphasis{in} . The new handle and \sphinxstyleemphasis{in} can be closed independently.
3913
3914\begin{sphinxadmonition}{note}{Note:}
3915\sphinxAtStartPar
3916New in 1.12
3917\end{sphinxadmonition}
3918
3919
3920\subsubsection{krb5\_kt\_get\_name \sphinxhyphen{}  Get a key table name.}
3921\label{\detokenize{appdev/refs/api/krb5_kt_get_name:krb5-kt-get-name-get-a-key-table-name}}\label{\detokenize{appdev/refs/api/krb5_kt_get_name::doc}}\index{krb5\_kt\_get\_name (C function)@\spxentry{krb5\_kt\_get\_name}\spxextra{C function}}
3922
3923\begin{fulllineitems}
3924\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_get_name:c.krb5_kt_get_name}}%
3925\pysigstartmultiline
3926\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kt\_get\_name}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{n}{keytab}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{name}, \DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{namelen}}{}%
3927\pysigstopmultiline
3928\end{fulllineitems}
3929
3930\begin{quote}\begin{description}
3931\item[{param}] \leavevmode
3932\sphinxAtStartPar
3933\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3934
3935\sphinxAtStartPar
3936\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} \sphinxhyphen{} Key table handle
3937
3938\sphinxAtStartPar
3939\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} \sphinxhyphen{} Key table name
3940
3941\sphinxAtStartPar
3942\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{namelen} \sphinxhyphen{} Maximum length to fill in name
3943
3944\end{description}\end{quote}
3945\begin{quote}\begin{description}
3946\item[{retval}] \leavevmode\begin{itemize}
3947\item {}
3948\sphinxAtStartPar
39490   Success
3950
3951\item {}
3952\sphinxAtStartPar
3953KRB5\_KT\_NAME\_TOOLONG   Key table name does not fit in namelen bytes
3954
3955\end{itemize}
3956
3957\item[{return}] \leavevmode\begin{itemize}
3958\item {}
3959\sphinxAtStartPar
3960Kerberos error codes
3961
3962\end{itemize}
3963
3964\end{description}\end{quote}
3965
3966\sphinxAtStartPar
3967Fill \sphinxstyleemphasis{name} with the name of \sphinxstyleemphasis{keytab} including the type and delimiter.
3968
3969
3970\subsubsection{krb5\_kt\_get\_type \sphinxhyphen{}  Return the type of a key table.}
3971\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)@\spxentry{krb5\_kt\_get\_type}\spxextra{C function}}
3972
3973\begin{fulllineitems}
3974\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_get_type:c.krb5_kt_get_type}}%
3975\pysigstartmultiline
3976\pysiglinewithargsret{\DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kt\_get\_type}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{n}{keytab}}{}%
3977\pysigstopmultiline
3978\end{fulllineitems}
3979
3980\begin{quote}\begin{description}
3981\item[{param}] \leavevmode
3982\sphinxAtStartPar
3983\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
3984
3985\sphinxAtStartPar
3986\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} \sphinxhyphen{} Key table handle
3987
3988\end{description}\end{quote}
3989\begin{quote}\begin{description}
3990\item[{return}] \leavevmode\begin{itemize}
3991\item {}
3992\sphinxAtStartPar
3993The type of a key table as an alias that must not be modified or freed by the caller.
3994
3995\end{itemize}
3996
3997\end{description}\end{quote}
3998
3999
4000\subsubsection{krb5\_kt\_resolve \sphinxhyphen{}  Get a handle for a key table.}
4001\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)@\spxentry{krb5\_kt\_resolve}\spxextra{C function}}
4002
4003\begin{fulllineitems}
4004\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_resolve:c.krb5_kt_resolve}}%
4005\pysigstartmultiline
4006\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kt\_resolve}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{name}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ktid}}{}%
4007\pysigstopmultiline
4008\end{fulllineitems}
4009
4010\begin{quote}\begin{description}
4011\item[{param}] \leavevmode
4012\sphinxAtStartPar
4013\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
4014
4015\sphinxAtStartPar
4016\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} \sphinxhyphen{} Name of the key table
4017
4018\sphinxAtStartPar
4019\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ktid} \sphinxhyphen{} Key table handle
4020
4021\end{description}\end{quote}
4022\begin{quote}\begin{description}
4023\item[{retval}] \leavevmode\begin{itemize}
4024\item {}
4025\sphinxAtStartPar
40260   Success
4027
4028\end{itemize}
4029
4030\item[{return}] \leavevmode\begin{itemize}
4031\item {}
4032\sphinxAtStartPar
4033Kerberos error codes
4034
4035\end{itemize}
4036
4037\end{description}\end{quote}
4038
4039\sphinxAtStartPar
4040Resolve the key table name \sphinxstyleemphasis{name} and set \sphinxstyleemphasis{ktid} to a handle identifying the key table. Use krb5\_kt\_close() to free \sphinxstyleemphasis{ktid} when it is no longer needed.
4041\begin{quote}
4042
4043\sphinxAtStartPar
4044\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} .
4045\end{quote}
4046
4047\sphinxAtStartPar
4048If \sphinxstyleemphasis{name} is of type \sphinxstylestrong{FILE} , the keytab file is not opened by this call.
4049
4050
4051\subsubsection{krb5\_kuserok \sphinxhyphen{}  Determine if a principal is authorized to log in as a local user.}
4052\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)@\spxentry{krb5\_kuserok}\spxextra{C function}}
4053
4054\begin{fulllineitems}
4055\phantomsection\label{\detokenize{appdev/refs/api/krb5_kuserok:c.krb5_kuserok}}%
4056\pysigstartmultiline
4057\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kuserok}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{principal}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{luser}}{}%
4058\pysigstopmultiline
4059\end{fulllineitems}
4060
4061\begin{quote}\begin{description}
4062\item[{param}] \leavevmode
4063\sphinxAtStartPar
4064\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
4065
4066\sphinxAtStartPar
4067\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} \sphinxhyphen{} Principal name
4068
4069\sphinxAtStartPar
4070\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{luser} \sphinxhyphen{} Local username
4071
4072\end{description}\end{quote}
4073\begin{quote}\begin{description}
4074\item[{retval}] \leavevmode\begin{itemize}
4075\item {}
4076\sphinxAtStartPar
4077TRUE   Principal is authorized to log in as user; FALSE otherwise.
4078
4079\end{itemize}
4080
4081\end{description}\end{quote}
4082
4083\sphinxAtStartPar
4084Determine whether \sphinxstyleemphasis{principal} is authorized to log in as a local user \sphinxstyleemphasis{luser} .
4085
4086
4087\subsubsection{krb5\_parse\_name \sphinxhyphen{}  Convert a string principal name to a krb5\_principal structure.}
4088\label{\detokenize{appdev/refs/api/krb5_parse_name:krb5-parse-name-convert-a-string-principal-name-to-a-krb5-principal-structure}}\label{\detokenize{appdev/refs/api/krb5_parse_name::doc}}\index{krb5\_parse\_name (C function)@\spxentry{krb5\_parse\_name}\spxextra{C function}}
4089
4090\begin{fulllineitems}
4091\phantomsection\label{\detokenize{appdev/refs/api/krb5_parse_name:c.krb5_parse_name}}%
4092\pysigstartmultiline
4093\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_parse\_name}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{name}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{principal\_out}}{}%
4094\pysigstopmultiline
4095\end{fulllineitems}
4096
4097\begin{quote}\begin{description}
4098\item[{param}] \leavevmode
4099\sphinxAtStartPar
4100\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
4101
4102\sphinxAtStartPar
4103\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} \sphinxhyphen{} String representation of a principal name
4104
4105\sphinxAtStartPar
4106\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{principal\_out} \sphinxhyphen{} New principal
4107
4108\end{description}\end{quote}
4109\begin{quote}\begin{description}
4110\item[{retval}] \leavevmode\begin{itemize}
4111\item {}
4112\sphinxAtStartPar
41130   Success
4114
4115\end{itemize}
4116
4117\item[{return}] \leavevmode\begin{itemize}
4118\item {}
4119\sphinxAtStartPar
4120Kerberos error codes
4121
4122\end{itemize}
4123
4124\end{description}\end{quote}
4125
4126\sphinxAtStartPar
4127Convert a string representation of a principal name to a krb5\_principal structure.
4128
4129\sphinxAtStartPar
4130A 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.
4131
4132\sphinxAtStartPar
4133To 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.
4134
4135\sphinxAtStartPar
4136Beginning with release 1.20, the name type of the principal will be inferred as \sphinxstylestrong{KRB5\_NT\_SRV\_INST} or \sphinxstylestrong{KRB5\_NT\_WELLKNOWN} based on the principal name. The type will be \sphinxstylestrong{KRB5\_NT\_PRINCIPAL} if a type cannot be inferred.
4137
4138\sphinxAtStartPar
4139Use krb5\_free\_principal() to free \sphinxstyleemphasis{principal\_out} when it is no longer needed.
4140
4141\begin{sphinxadmonition}{note}{Note:}
4142\sphinxAtStartPar
4143The realm in a Kerberos \sphinxstyleemphasis{name} cannot contain slash, colon, or NULL characters.
4144\end{sphinxadmonition}
4145
4146
4147\subsubsection{krb5\_parse\_name\_flags \sphinxhyphen{}  Convert a string principal name to a krb5\_principal with flags.}
4148\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)@\spxentry{krb5\_parse\_name\_flags}\spxextra{C function}}
4149
4150\begin{fulllineitems}
4151\phantomsection\label{\detokenize{appdev/refs/api/krb5_parse_name_flags:c.krb5_parse_name_flags}}%
4152\pysigstartmultiline
4153\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_parse\_name\_flags}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{name}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{flags}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{principal\_out}}{}%
4154\pysigstopmultiline
4155\end{fulllineitems}
4156
4157\begin{quote}\begin{description}
4158\item[{param}] \leavevmode
4159\sphinxAtStartPar
4160\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
4161
4162\sphinxAtStartPar
4163\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} \sphinxhyphen{} String representation of a principal name
4164
4165\sphinxAtStartPar
4166\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} \sphinxhyphen{} Flag
4167
4168\sphinxAtStartPar
4169\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{principal\_out} \sphinxhyphen{} New principal
4170
4171\end{description}\end{quote}
4172\begin{quote}\begin{description}
4173\item[{retval}] \leavevmode\begin{itemize}
4174\item {}
4175\sphinxAtStartPar
41760   Success
4177
4178\end{itemize}
4179
4180\item[{return}] \leavevmode\begin{itemize}
4181\item {}
4182\sphinxAtStartPar
4183Kerberos error codes
4184
4185\end{itemize}
4186
4187\end{description}\end{quote}
4188
4189\sphinxAtStartPar
4190Similar to krb5\_parse\_name(), this function converts a single\sphinxhyphen{}string representation of a principal name to a krb5\_principal structure.
4191
4192\sphinxAtStartPar
4193The following flags are valid:
4194\begin{quote}
4195\begin{itemize}
4196\item {}
4197\sphinxAtStartPar
4198\#KRB5\_PRINCIPAL\_PARSE\_NO\_REALM \sphinxhyphen{} no realm must be present in \sphinxstyleemphasis{name}
4199
4200\item {}
4201\sphinxAtStartPar
4202\#KRB5\_PRINCIPAL\_PARSE\_REQUIRE\_REALM \sphinxhyphen{} realm must be present in \sphinxstyleemphasis{name}
4203
4204\item {}
4205\sphinxAtStartPar
4206\#KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE \sphinxhyphen{} create single\sphinxhyphen{}component enterprise principal
4207
4208\item {}
4209\sphinxAtStartPar
4210\#KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM \sphinxhyphen{} ignore realm if present in \sphinxstyleemphasis{name}
4211
4212\end{itemize}
4213
4214\sphinxAtStartPar
4215If \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.
4216\end{quote}
4217
4218\sphinxAtStartPar
4219Use krb5\_free\_principal() to free \sphinxstyleemphasis{principal\_out} when it is no longer needed.
4220
4221
4222\subsubsection{krb5\_principal\_compare \sphinxhyphen{}  Compare two principals.}
4223\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)@\spxentry{krb5\_principal\_compare}\spxextra{C function}}
4224
4225\begin{fulllineitems}
4226\phantomsection\label{\detokenize{appdev/refs/api/krb5_principal_compare:c.krb5_principal_compare}}%
4227\pysigstartmultiline
4228\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_principal\_compare}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{princ1}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{princ2}}{}%
4229\pysigstopmultiline
4230\end{fulllineitems}
4231
4232\begin{quote}\begin{description}
4233\item[{param}] \leavevmode
4234\sphinxAtStartPar
4235\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
4236
4237\sphinxAtStartPar
4238\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ1} \sphinxhyphen{} First principal
4239
4240\sphinxAtStartPar
4241\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ2} \sphinxhyphen{} Second principal
4242
4243\end{description}\end{quote}
4244\begin{quote}\begin{description}
4245\item[{retval}] \leavevmode\begin{itemize}
4246\item {}
4247\sphinxAtStartPar
4248TRUE   if the principals are the same; FALSE otherwise
4249
4250\end{itemize}
4251
4252\end{description}\end{quote}
4253
4254
4255\subsubsection{krb5\_principal\_compare\_any\_realm \sphinxhyphen{}  Compare two principals ignoring realm components.}
4256\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)@\spxentry{krb5\_principal\_compare\_any\_realm}\spxextra{C function}}
4257
4258\begin{fulllineitems}
4259\phantomsection\label{\detokenize{appdev/refs/api/krb5_principal_compare_any_realm:c.krb5_principal_compare_any_realm}}%
4260\pysigstartmultiline
4261\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_principal\_compare\_any\_realm}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{princ1}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{princ2}}{}%
4262\pysigstopmultiline
4263\end{fulllineitems}
4264
4265\begin{quote}\begin{description}
4266\item[{param}] \leavevmode
4267\sphinxAtStartPar
4268\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
4269
4270\sphinxAtStartPar
4271\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ1} \sphinxhyphen{} First principal
4272
4273\sphinxAtStartPar
4274\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ2} \sphinxhyphen{} Second principal
4275
4276\end{description}\end{quote}
4277\begin{quote}\begin{description}
4278\item[{retval}] \leavevmode\begin{itemize}
4279\item {}
4280\sphinxAtStartPar
4281TRUE   if the principals are the same; FALSE otherwise
4282
4283\end{itemize}
4284
4285\end{description}\end{quote}
4286
4287\sphinxAtStartPar
4288Similar to krb5\_principal\_compare(), but do not compare the realm components of the principals.
4289
4290
4291\subsubsection{krb5\_principal\_compare\_flags \sphinxhyphen{}  Compare two principals with additional flags.}
4292\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)@\spxentry{krb5\_principal\_compare\_flags}\spxextra{C function}}
4293
4294\begin{fulllineitems}
4295\phantomsection\label{\detokenize{appdev/refs/api/krb5_principal_compare_flags:c.krb5_principal_compare_flags}}%
4296\pysigstartmultiline
4297\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_principal\_compare\_flags}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{princ1}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{princ2}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{flags}}{}%
4298\pysigstopmultiline
4299\end{fulllineitems}
4300
4301\begin{quote}\begin{description}
4302\item[{param}] \leavevmode
4303\sphinxAtStartPar
4304\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
4305
4306\sphinxAtStartPar
4307\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ1} \sphinxhyphen{} First principal
4308
4309\sphinxAtStartPar
4310\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ2} \sphinxhyphen{} Second principal
4311
4312\sphinxAtStartPar
4313\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} \sphinxhyphen{} Flags
4314
4315\end{description}\end{quote}
4316\begin{quote}\begin{description}
4317\item[{retval}] \leavevmode\begin{itemize}
4318\item {}
4319\sphinxAtStartPar
4320TRUE   if the principal names are the same; FALSE otherwise
4321
4322\end{itemize}
4323
4324\end{description}\end{quote}
4325
4326\sphinxAtStartPar
4327Valid flags are:
4328\begin{itemize}
4329\item {}
4330\sphinxAtStartPar
4331\#KRB5\_PRINCIPAL\_COMPARE\_IGNORE\_REALM \sphinxhyphen{} ignore realm component
4332
4333\item {}
4334\sphinxAtStartPar
4335\#KRB5\_PRINCIPAL\_COMPARE\_ENTERPRISE \sphinxhyphen{} UPNs as real principals
4336
4337\item {}
4338\sphinxAtStartPar
4339\#KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD case\sphinxhyphen{}insensitive
4340
4341\item {}
4342\sphinxAtStartPar
4343\#KRB5\_PRINCIPAL\_COMPARE\_UTF8 \sphinxhyphen{} treat principals as UTF\sphinxhyphen{}8
4344
4345\end{itemize}
4346
4347
4348\sphinxstrong{See also:}
4349\nopagebreak
4350
4351
4352\sphinxAtStartPar
4353krb5\_principal\_compare()
4354
4355
4356
4357
4358\subsubsection{krb5\_prompter\_posix \sphinxhyphen{}  Prompt user for password.}
4359\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)@\spxentry{krb5\_prompter\_posix}\spxextra{C function}}
4360
4361\begin{fulllineitems}
4362\phantomsection\label{\detokenize{appdev/refs/api/krb5_prompter_posix:c.krb5_prompter_posix}}%
4363\pysigstartmultiline
4364\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_prompter\_posix}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{kt}{void}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{name}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{banner}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{num\_prompts}, {\hyperref[\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt}]{\sphinxcrossref{\DUrole{n}{krb5\_prompt}}}}\DUrole{w}{  }\DUrole{n}{prompts}}{}%
4365\pysigstopmultiline
4366\end{fulllineitems}
4367
4368\begin{quote}\begin{description}
4369\item[{param}] \leavevmode
4370\sphinxAtStartPar
4371\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
4372
4373\sphinxAtStartPar
4374\sphinxstylestrong{data} \sphinxhyphen{} Unused (callback argument)
4375
4376\sphinxAtStartPar
4377\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} \sphinxhyphen{} Name to output during prompt
4378
4379\sphinxAtStartPar
4380\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{banner} \sphinxhyphen{} Banner to output during prompt
4381
4382\sphinxAtStartPar
4383\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_prompts} \sphinxhyphen{} Number of prompts in \sphinxstyleemphasis{prompts}
4384
4385\sphinxAtStartPar
4386\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompts} \sphinxhyphen{} Array of prompts and replies
4387
4388\end{description}\end{quote}
4389\begin{quote}\begin{description}
4390\item[{retval}] \leavevmode\begin{itemize}
4391\item {}
4392\sphinxAtStartPar
43930   Success
4394
4395\end{itemize}
4396
4397\item[{return}] \leavevmode\begin{itemize}
4398\item {}
4399\sphinxAtStartPar
4400Kerberos error codes
4401
4402\end{itemize}
4403
4404\end{description}\end{quote}
4405
4406\sphinxAtStartPar
4407This function is intended to be used as a prompter callback for krb5\_get\_init\_creds\_password() or krb5\_init\_creds\_init().
4408
4409\sphinxAtStartPar
4410Writes \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.
4411
4412
4413\subsubsection{krb5\_realm\_compare \sphinxhyphen{}  Compare the realms of two principals.}
4414\label{\detokenize{appdev/refs/api/krb5_realm_compare:krb5-realm-compare-compare-the-realms-of-two-principals}}\label{\detokenize{appdev/refs/api/krb5_realm_compare::doc}}\index{krb5\_realm\_compare (C function)@\spxentry{krb5\_realm\_compare}\spxextra{C function}}
4415
4416\begin{fulllineitems}
4417\phantomsection\label{\detokenize{appdev/refs/api/krb5_realm_compare:c.krb5_realm_compare}}%
4418\pysigstartmultiline
4419\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_realm\_compare}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{princ1}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{princ2}}{}%
4420\pysigstopmultiline
4421\end{fulllineitems}
4422
4423\begin{quote}\begin{description}
4424\item[{param}] \leavevmode
4425\sphinxAtStartPar
4426\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
4427
4428\sphinxAtStartPar
4429\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ1} \sphinxhyphen{} First principal
4430
4431\sphinxAtStartPar
4432\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ2} \sphinxhyphen{} Second principal
4433
4434\end{description}\end{quote}
4435\begin{quote}\begin{description}
4436\item[{retval}] \leavevmode\begin{itemize}
4437\item {}
4438\sphinxAtStartPar
4439TRUE   if the realm names are the same; FALSE otherwise
4440
4441\end{itemize}
4442
4443\end{description}\end{quote}
4444
4445
4446\subsubsection{krb5\_responder\_get\_challenge \sphinxhyphen{}  Retrieve the challenge data for a given question in the responder context.}
4447\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)@\spxentry{krb5\_responder\_get\_challenge}\spxextra{C function}}
4448
4449\begin{fulllineitems}
4450\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_get_challenge:c.krb5_responder_get_challenge}}%
4451\pysigstartmultiline
4452\pysiglinewithargsret{\DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_responder\_get\_challenge}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_context}}}}\DUrole{w}{  }\DUrole{n}{rctx}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{question}}{}%
4453\pysigstopmultiline
4454\end{fulllineitems}
4455
4456\begin{quote}\begin{description}
4457\item[{param}] \leavevmode
4458\sphinxAtStartPar
4459\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
4460
4461\sphinxAtStartPar
4462\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} \sphinxhyphen{} Responder context
4463
4464\sphinxAtStartPar
4465\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{question} \sphinxhyphen{} Question name
4466
4467\end{description}\end{quote}
4468
4469\sphinxAtStartPar
4470Return 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\sphinxhyphen{}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.
4471
4472\begin{sphinxadmonition}{note}{Note:}
4473\sphinxAtStartPar
4474New in 1.11
4475\end{sphinxadmonition}
4476
4477
4478\subsubsection{krb5\_responder\_list\_questions \sphinxhyphen{}  List the question names contained in the responder context.}
4479\label{\detokenize{appdev/refs/api/krb5_responder_list_questions:krb5-responder-list-questions-list-the-question-names-contained-in-the-responder-context}}\label{\detokenize{appdev/refs/api/krb5_responder_list_questions::doc}}\index{krb5\_responder\_list\_questions (C function)@\spxentry{krb5\_responder\_list\_questions}\spxextra{C function}}
4480
4481\begin{fulllineitems}
4482\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_list_questions:c.krb5_responder_list_questions}}%
4483\pysigstartmultiline
4484\pysiglinewithargsret{\DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{k}{const}\DUrole{w}{  }\DUrole{p}{*}\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_responder\_list\_questions}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_context}}}}\DUrole{w}{  }\DUrole{n}{rctx}}{}%
4485\pysigstopmultiline
4486\end{fulllineitems}
4487
4488\begin{quote}\begin{description}
4489\item[{param}] \leavevmode
4490\sphinxAtStartPar
4491\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
4492
4493\sphinxAtStartPar
4494\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} \sphinxhyphen{} Responder context
4495
4496\end{description}\end{quote}
4497
4498\sphinxAtStartPar
4499Return a pointer to a null\sphinxhyphen{}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 krb5\_responder\_get\_challenge() and answered using krb5\_responder\_set\_answer().
4500
4501\begin{sphinxadmonition}{note}{Note:}
4502\sphinxAtStartPar
4503New in 1.11
4504\end{sphinxadmonition}
4505
4506
4507\subsubsection{krb5\_responder\_set\_answer \sphinxhyphen{}  Answer a named question in the responder context.}
4508\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)@\spxentry{krb5\_responder\_set\_answer}\spxextra{C function}}
4509
4510\begin{fulllineitems}
4511\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_set_answer:c.krb5_responder_set_answer}}%
4512\pysigstartmultiline
4513\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_responder\_set\_answer}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_context}}}}\DUrole{w}{  }\DUrole{n}{rctx}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{question}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{answer}}{}%
4514\pysigstopmultiline
4515\end{fulllineitems}
4516
4517\begin{quote}\begin{description}
4518\item[{param}] \leavevmode
4519\sphinxAtStartPar
4520\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
4521
4522\sphinxAtStartPar
4523\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} \sphinxhyphen{} Responder context
4524
4525\sphinxAtStartPar
4526\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{question} \sphinxhyphen{} Question name
4527
4528\sphinxAtStartPar
4529\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{answer} \sphinxhyphen{} The string to set (MUST be printable UTF\sphinxhyphen{}8)
4530
4531\end{description}\end{quote}
4532\begin{quote}\begin{description}
4533\item[{retval}] \leavevmode\begin{itemize}
4534\item {}
4535\sphinxAtStartPar
4536EINVAL    question is not present within rctx
4537
4538\end{itemize}
4539
4540\end{description}\end{quote}
4541
4542\sphinxAtStartPar
4543This function supplies an answer to \sphinxstyleemphasis{question} within \sphinxstyleemphasis{rctx} . The appropriate form of the answer depends on the question name.
4544
4545\begin{sphinxadmonition}{note}{Note:}
4546\sphinxAtStartPar
4547New in 1.11
4548\end{sphinxadmonition}
4549
4550
4551\subsubsection{krb5\_responder\_otp\_get\_challenge \sphinxhyphen{}  Decode the KRB5\_RESPONDER\_QUESTION\_OTP to a C struct.}
4552\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)@\spxentry{krb5\_responder\_otp\_get\_challenge}\spxextra{C function}}
4553
4554\begin{fulllineitems}
4555\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_otp_get_challenge:c.krb5_responder_otp_get_challenge}}%
4556\pysigstartmultiline
4557\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_responder\_otp\_get\_challenge}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_context}}}}\DUrole{w}{  }\DUrole{n}{rctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_otp_challenge:c.krb5_responder_otp_challenge}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_otp\_challenge}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{chl}}{}%
4558\pysigstopmultiline
4559\end{fulllineitems}
4560
4561\begin{quote}\begin{description}
4562\item[{param}] \leavevmode
4563\sphinxAtStartPar
4564\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
4565
4566\sphinxAtStartPar
4567\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} \sphinxhyphen{} Responder context
4568
4569\sphinxAtStartPar
4570\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{chl} \sphinxhyphen{} Challenge structure
4571
4572\end{description}\end{quote}
4573
4574\sphinxAtStartPar
4575A 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.
4576
4577\sphinxAtStartPar
4578The returned value must be passed to krb5\_responder\_otp\_challenge\_free() to be freed.
4579
4580\begin{sphinxadmonition}{note}{Note:}
4581\sphinxAtStartPar
4582New in 1.11
4583\end{sphinxadmonition}
4584
4585
4586\subsubsection{krb5\_responder\_otp\_set\_answer \sphinxhyphen{}  Answer the KRB5\_RESPONDER\_QUESTION\_OTP question.}
4587\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)@\spxentry{krb5\_responder\_otp\_set\_answer}\spxextra{C function}}
4588
4589\begin{fulllineitems}
4590\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_otp_set_answer:c.krb5_responder_otp_set_answer}}%
4591\pysigstartmultiline
4592\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_responder\_otp\_set\_answer}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_context}}}}\DUrole{w}{  }\DUrole{n}{rctx}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{ti}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{value}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{pin}}{}%
4593\pysigstopmultiline
4594\end{fulllineitems}
4595
4596\begin{quote}\begin{description}
4597\item[{param}] \leavevmode
4598\sphinxAtStartPar
4599\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
4600
4601\sphinxAtStartPar
4602\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} \sphinxhyphen{} Responder context
4603
4604\sphinxAtStartPar
4605\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ti} \sphinxhyphen{} The index of the tokeninfo selected
4606
4607\sphinxAtStartPar
4608\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{value} \sphinxhyphen{} The value to set, or NULL for none
4609
4610\sphinxAtStartPar
4611\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pin} \sphinxhyphen{} The pin to set, or NULL for none
4612
4613\end{description}\end{quote}
4614
4615\begin{sphinxadmonition}{note}{Note:}
4616\sphinxAtStartPar
4617New in 1.11
4618\end{sphinxadmonition}
4619
4620
4621\subsubsection{krb5\_responder\_otp\_challenge\_free \sphinxhyphen{}  Free the value returned by krb5\_responder\_otp\_get\_challenge().}
4622\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)@\spxentry{krb5\_responder\_otp\_challenge\_free}\spxextra{C function}}
4623
4624\begin{fulllineitems}
4625\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_otp_challenge_free:c.krb5_responder_otp_challenge_free}}%
4626\pysigstartmultiline
4627\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_responder\_otp\_challenge\_free}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_context}}}}\DUrole{w}{  }\DUrole{n}{rctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_otp_challenge:c.krb5_responder_otp_challenge}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_otp\_challenge}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{chl}}{}%
4628\pysigstopmultiline
4629\end{fulllineitems}
4630
4631\begin{quote}\begin{description}
4632\item[{param}] \leavevmode
4633\sphinxAtStartPar
4634\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
4635
4636\sphinxAtStartPar
4637\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} \sphinxhyphen{} Responder context
4638
4639\sphinxAtStartPar
4640\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{chl} \sphinxhyphen{} The challenge to free
4641
4642\end{description}\end{quote}
4643
4644\begin{sphinxadmonition}{note}{Note:}
4645\sphinxAtStartPar
4646New in 1.11
4647\end{sphinxadmonition}
4648
4649
4650\subsubsection{krb5\_responder\_pkinit\_get\_challenge \sphinxhyphen{}  Decode the KRB5\_RESPONDER\_QUESTION\_PKINIT to a C struct.}
4651\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)@\spxentry{krb5\_responder\_pkinit\_get\_challenge}\spxextra{C function}}
4652
4653\begin{fulllineitems}
4654\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_get_challenge:c.krb5_responder_pkinit_get_challenge}}%
4655\pysigstartmultiline
4656\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_responder\_pkinit\_get\_challenge}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_context}}}}\DUrole{w}{  }\DUrole{n}{rctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:c.krb5_responder_pkinit_challenge}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_pkinit\_challenge}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{chl\_out}}{}%
4657\pysigstopmultiline
4658\end{fulllineitems}
4659
4660\begin{quote}\begin{description}
4661\item[{param}] \leavevmode
4662\sphinxAtStartPar
4663\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
4664
4665\sphinxAtStartPar
4666\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} \sphinxhyphen{} Responder context
4667
4668\sphinxAtStartPar
4669\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{chl\_out} \sphinxhyphen{} Challenge structure
4670
4671\end{description}\end{quote}
4672
4673\sphinxAtStartPar
4674A 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.
4675
4676\sphinxAtStartPar
4677The returned value must be passed to krb5\_responder\_pkinit\_challenge\_free() to be freed.
4678
4679\begin{sphinxadmonition}{note}{Note:}
4680\sphinxAtStartPar
4681New in 1.12
4682\end{sphinxadmonition}
4683
4684
4685\subsubsection{krb5\_responder\_pkinit\_set\_answer \sphinxhyphen{}  Answer the KRB5\_RESPONDER\_QUESTION\_PKINIT question for one identity.}
4686\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)@\spxentry{krb5\_responder\_pkinit\_set\_answer}\spxextra{C function}}
4687
4688\begin{fulllineitems}
4689\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_set_answer:c.krb5_responder_pkinit_set_answer}}%
4690\pysigstartmultiline
4691\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_responder\_pkinit\_set\_answer}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_context}}}}\DUrole{w}{  }\DUrole{n}{rctx}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{identity}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{pin}}{}%
4692\pysigstopmultiline
4693\end{fulllineitems}
4694
4695\begin{quote}\begin{description}
4696\item[{param}] \leavevmode
4697\sphinxAtStartPar
4698\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
4699
4700\sphinxAtStartPar
4701\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} \sphinxhyphen{} Responder context
4702
4703\sphinxAtStartPar
4704\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{identity} \sphinxhyphen{} The identity for which a PIN is being supplied
4705
4706\sphinxAtStartPar
4707\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pin} \sphinxhyphen{} The provided PIN, or NULL for none
4708
4709\end{description}\end{quote}
4710
4711\begin{sphinxadmonition}{note}{Note:}
4712\sphinxAtStartPar
4713New in 1.12
4714\end{sphinxadmonition}
4715
4716
4717\subsubsection{krb5\_responder\_pkinit\_challenge\_free \sphinxhyphen{}  Free the value returned by krb5\_responder\_pkinit\_get\_challenge().}
4718\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)@\spxentry{krb5\_responder\_pkinit\_challenge\_free}\spxextra{C function}}
4719
4720\begin{fulllineitems}
4721\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_challenge_free:c.krb5_responder_pkinit_challenge_free}}%
4722\pysigstartmultiline
4723\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_responder\_pkinit\_challenge\_free}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_context}}}}\DUrole{w}{  }\DUrole{n}{rctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:c.krb5_responder_pkinit_challenge}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_pkinit\_challenge}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{chl}}{}%
4724\pysigstopmultiline
4725\end{fulllineitems}
4726
4727\begin{quote}\begin{description}
4728\item[{param}] \leavevmode
4729\sphinxAtStartPar
4730\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
4731
4732\sphinxAtStartPar
4733\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} \sphinxhyphen{} Responder context
4734
4735\sphinxAtStartPar
4736\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{chl} \sphinxhyphen{} The challenge to free
4737
4738\end{description}\end{quote}
4739
4740\begin{sphinxadmonition}{note}{Note:}
4741\sphinxAtStartPar
4742New in 1.12
4743\end{sphinxadmonition}
4744
4745
4746\subsubsection{krb5\_set\_default\_realm \sphinxhyphen{}  Override the default realm for the specified context.}
4747\label{\detokenize{appdev/refs/api/krb5_set_default_realm:krb5-set-default-realm-override-the-default-realm-for-the-specified-context}}\label{\detokenize{appdev/refs/api/krb5_set_default_realm::doc}}\index{krb5\_set\_default\_realm (C function)@\spxentry{krb5\_set\_default\_realm}\spxextra{C function}}
4748
4749\begin{fulllineitems}
4750\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_default_realm:c.krb5_set_default_realm}}%
4751\pysigstartmultiline
4752\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_set\_default\_realm}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{lrealm}}{}%
4753\pysigstopmultiline
4754\end{fulllineitems}
4755
4756\begin{quote}\begin{description}
4757\item[{param}] \leavevmode
4758\sphinxAtStartPar
4759\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
4760
4761\sphinxAtStartPar
4762\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{lrealm} \sphinxhyphen{} Realm name for the default realm
4763
4764\end{description}\end{quote}
4765\begin{quote}\begin{description}
4766\item[{retval}] \leavevmode\begin{itemize}
4767\item {}
4768\sphinxAtStartPar
47690   Success
4770
4771\end{itemize}
4772
4773\item[{return}] \leavevmode\begin{itemize}
4774\item {}
4775\sphinxAtStartPar
4776Kerberos error codes
4777
4778\end{itemize}
4779
4780\end{description}\end{quote}
4781
4782\sphinxAtStartPar
4783If \sphinxstyleemphasis{lrealm} is NULL, clear the default realm setting.
4784
4785
4786\subsubsection{krb5\_set\_password \sphinxhyphen{}  Set a password for a principal using specified credentials.}
4787\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)@\spxentry{krb5\_set\_password}\spxextra{C function}}
4788
4789\begin{fulllineitems}
4790\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_password:c.krb5_set_password}}%
4791\pysigstartmultiline
4792\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_set\_password}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{creds}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{newpw}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{change\_password\_for}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{result\_code}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{result\_code\_string}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{result\_string}}{}%
4793\pysigstopmultiline
4794\end{fulllineitems}
4795
4796\begin{quote}\begin{description}
4797\item[{param}] \leavevmode
4798\sphinxAtStartPar
4799\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
4800
4801\sphinxAtStartPar
4802\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} \sphinxhyphen{} Credentials for kadmin/changepw service
4803
4804\sphinxAtStartPar
4805\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{newpw} \sphinxhyphen{} New password
4806
4807\sphinxAtStartPar
4808\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{change\_password\_for} \sphinxhyphen{} Change the password for this principal
4809
4810\sphinxAtStartPar
4811\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code} \sphinxhyphen{} Numeric error code from server
4812
4813\sphinxAtStartPar
4814\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code\_string} \sphinxhyphen{} String equivalent to \sphinxstyleemphasis{result\_code}
4815
4816\sphinxAtStartPar
4817\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_string} \sphinxhyphen{} Data returned from the remote system
4818
4819\end{description}\end{quote}
4820\begin{quote}\begin{description}
4821\item[{retval}] \leavevmode\begin{itemize}
4822\item {}
4823\sphinxAtStartPar
48240   Success and result\_code is set to \#KRB5\_KPASSWD\_SUCCESS.
4825
4826\end{itemize}
4827
4828\item[{return}] \leavevmode\begin{itemize}
4829\item {}
4830\sphinxAtStartPar
4831Kerberos error codes.
4832
4833\end{itemize}
4834
4835\end{description}\end{quote}
4836
4837\sphinxAtStartPar
4838This 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.
4839
4840\sphinxAtStartPar
4841The error code and strings are returned in \sphinxstyleemphasis{result\_code} , \sphinxstyleemphasis{result\_code\_string} and \sphinxstyleemphasis{result\_string} .
4842
4843\begin{sphinxadmonition}{note}{Note:}
4844\sphinxAtStartPar
4845If \sphinxstyleemphasis{change\_password\_for} is NULL, the change is performed on the current principal. If \sphinxstyleemphasis{change\_password\_for} is non\sphinxhyphen{}null, the change is performed on the principal name passed in \sphinxstyleemphasis{change\_password\_for} .
4846\end{sphinxadmonition}
4847
4848
4849\subsubsection{krb5\_set\_password\_using\_ccache \sphinxhyphen{}  Set a password for a principal using cached credentials.}
4850\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)@\spxentry{krb5\_set\_password\_using\_ccache}\spxextra{C function}}
4851
4852\begin{fulllineitems}
4853\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_password_using_ccache:c.krb5_set_password_using_ccache}}%
4854\pysigstartmultiline
4855\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_set\_password\_using\_ccache}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{ccache}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{newpw}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{change\_password\_for}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{result\_code}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{result\_code\_string}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{result\_string}}{}%
4856\pysigstopmultiline
4857\end{fulllineitems}
4858
4859\begin{quote}\begin{description}
4860\item[{param}] \leavevmode
4861\sphinxAtStartPar
4862\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
4863
4864\sphinxAtStartPar
4865\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} \sphinxhyphen{} Credential cache
4866
4867\sphinxAtStartPar
4868\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{newpw} \sphinxhyphen{} New password
4869
4870\sphinxAtStartPar
4871\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{change\_password\_for} \sphinxhyphen{} Change the password for this principal
4872
4873\sphinxAtStartPar
4874\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code} \sphinxhyphen{} Numeric error code from server
4875
4876\sphinxAtStartPar
4877\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code\_string} \sphinxhyphen{} String equivalent to \sphinxstyleemphasis{result\_code}
4878
4879\sphinxAtStartPar
4880\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_string} \sphinxhyphen{} Data returned from the remote system
4881
4882\end{description}\end{quote}
4883\begin{quote}\begin{description}
4884\item[{retval}] \leavevmode\begin{itemize}
4885\item {}
4886\sphinxAtStartPar
48870   Success
4888
4889\end{itemize}
4890
4891\item[{return}] \leavevmode\begin{itemize}
4892\item {}
4893\sphinxAtStartPar
4894Kerberos error codes
4895
4896\end{itemize}
4897
4898\end{description}\end{quote}
4899
4900\sphinxAtStartPar
4901This 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.
4902
4903\sphinxAtStartPar
4904The error code and strings are returned in \sphinxstyleemphasis{result\_code} , \sphinxstyleemphasis{result\_code\_string} and \sphinxstyleemphasis{result\_string} .
4905
4906\begin{sphinxadmonition}{note}{Note:}
4907\sphinxAtStartPar
4908If \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.
4909\end{sphinxadmonition}
4910
4911
4912\subsubsection{krb5\_set\_principal\_realm \sphinxhyphen{}  Set the realm field of a principal.}
4913\label{\detokenize{appdev/refs/api/krb5_set_principal_realm:krb5-set-principal-realm-set-the-realm-field-of-a-principal}}\label{\detokenize{appdev/refs/api/krb5_set_principal_realm::doc}}\index{krb5\_set\_principal\_realm (C function)@\spxentry{krb5\_set\_principal\_realm}\spxextra{C function}}
4914
4915\begin{fulllineitems}
4916\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_principal_realm:c.krb5_set_principal_realm}}%
4917\pysigstartmultiline
4918\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_set\_principal\_realm}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{principal}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{realm}}{}%
4919\pysigstopmultiline
4920\end{fulllineitems}
4921
4922\begin{quote}\begin{description}
4923\item[{param}] \leavevmode
4924\sphinxAtStartPar
4925\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
4926
4927\sphinxAtStartPar
4928\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} \sphinxhyphen{} Principal name
4929
4930\sphinxAtStartPar
4931\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} \sphinxhyphen{} Realm name
4932
4933\end{description}\end{quote}
4934\begin{quote}\begin{description}
4935\item[{retval}] \leavevmode\begin{itemize}
4936\item {}
4937\sphinxAtStartPar
49380   Success
4939
4940\end{itemize}
4941
4942\item[{return}] \leavevmode\begin{itemize}
4943\item {}
4944\sphinxAtStartPar
4945Kerberos error codes
4946
4947\end{itemize}
4948
4949\end{description}\end{quote}
4950
4951\sphinxAtStartPar
4952Set the realm name part of \sphinxstyleemphasis{principal} to \sphinxstyleemphasis{realm} , overwriting the previous realm.
4953
4954
4955\subsubsection{krb5\_set\_trace\_callback \sphinxhyphen{}  Specify a callback function for trace events.}
4956\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)@\spxentry{krb5\_set\_trace\_callback}\spxextra{C function}}
4957
4958\begin{fulllineitems}
4959\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_trace_callback:c.krb5_set_trace_callback}}%
4960\pysigstartmultiline
4961\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_set\_trace\_callback}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_trace_callback:c.krb5_trace_callback}]{\sphinxcrossref{\DUrole{n}{krb5\_trace\_callback}}}}\DUrole{w}{  }\DUrole{n}{fn}, \DUrole{kt}{void}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cb\_data}}{}%
4962\pysigstopmultiline
4963\end{fulllineitems}
4964
4965\begin{quote}\begin{description}
4966\item[{param}] \leavevmode
4967\sphinxAtStartPar
4968\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
4969
4970\sphinxAtStartPar
4971\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fn} \sphinxhyphen{} Callback function
4972
4973\sphinxAtStartPar
4974\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cb\_data} \sphinxhyphen{} Callback data
4975
4976\end{description}\end{quote}
4977\begin{quote}\begin{description}
4978\item[{return}] \leavevmode\begin{itemize}
4979\item {}
4980\sphinxAtStartPar
4981Returns KRB5\_TRACE\_NOSUPP if tracing is not supported in the library (unless fn is NULL).
4982
4983\end{itemize}
4984
4985\end{description}\end{quote}
4986
4987\sphinxAtStartPar
4988Specify 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} .
4989
4990\begin{sphinxadmonition}{note}{Note:}
4991\sphinxAtStartPar
4992This function overrides the information passed through the \sphinxstyleemphasis{KRB5\_TRACE} environment variable.
4993\end{sphinxadmonition}
4994
4995\begin{sphinxadmonition}{note}{Note:}
4996\sphinxAtStartPar
4997New in 1.9
4998\end{sphinxadmonition}
4999
5000
5001\subsubsection{krb5\_set\_trace\_filename \sphinxhyphen{}  Specify a file name for directing trace events.}
5002\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)@\spxentry{krb5\_set\_trace\_filename}\spxextra{C function}}
5003
5004\begin{fulllineitems}
5005\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_trace_filename:c.krb5_set_trace_filename}}%
5006\pysigstartmultiline
5007\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_set\_trace\_filename}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{filename}}{}%
5008\pysigstopmultiline
5009\end{fulllineitems}
5010
5011\begin{quote}\begin{description}
5012\item[{param}] \leavevmode
5013\sphinxAtStartPar
5014\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5015
5016\sphinxAtStartPar
5017\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{filename} \sphinxhyphen{} File name
5018
5019\end{description}\end{quote}
5020\begin{quote}\begin{description}
5021\item[{retval}] \leavevmode\begin{itemize}
5022\item {}
5023\sphinxAtStartPar
5024KRB5\_TRACE\_NOSUPP   Tracing is not supported in the library.
5025
5026\end{itemize}
5027
5028\end{description}\end{quote}
5029
5030\sphinxAtStartPar
5031Open \sphinxstyleemphasis{filename} for appending (creating it, if necessary) and set up a callback to write trace events to it.
5032
5033\begin{sphinxadmonition}{note}{Note:}
5034\sphinxAtStartPar
5035This function overrides the information passed through the \sphinxstyleemphasis{KRB5\_TRACE} environment variable.
5036\end{sphinxadmonition}
5037
5038\begin{sphinxadmonition}{note}{Note:}
5039\sphinxAtStartPar
5040New in 1.9
5041\end{sphinxadmonition}
5042
5043
5044\subsubsection{krb5\_sname\_match \sphinxhyphen{}  Test whether a principal matches a matching principal.}
5045\label{\detokenize{appdev/refs/api/krb5_sname_match:krb5-sname-match-test-whether-a-principal-matches-a-matching-principal}}\label{\detokenize{appdev/refs/api/krb5_sname_match::doc}}\index{krb5\_sname\_match (C function)@\spxentry{krb5\_sname\_match}\spxextra{C function}}
5046
5047\begin{fulllineitems}
5048\phantomsection\label{\detokenize{appdev/refs/api/krb5_sname_match:c.krb5_sname_match}}%
5049\pysigstartmultiline
5050\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_sname\_match}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{matching}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{princ}}{}%
5051\pysigstopmultiline
5052\end{fulllineitems}
5053
5054\begin{quote}\begin{description}
5055\item[{param}] \leavevmode
5056\sphinxAtStartPar
5057\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5058
5059\sphinxAtStartPar
5060\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{matching} \sphinxhyphen{} Matching principal
5061
5062\sphinxAtStartPar
5063\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ} \sphinxhyphen{} Principal to test
5064
5065\end{description}\end{quote}
5066\begin{quote}\begin{description}
5067\item[{return}] \leavevmode\begin{itemize}
5068\item {}
5069\sphinxAtStartPar
5070TRUE if princ matches matching , FALSE otherwise.
5071
5072\end{itemize}
5073
5074\end{description}\end{quote}
5075
5076\sphinxAtStartPar
5077If \sphinxstyleemphasis{matching} is NULL, return TRUE. If \sphinxstyleemphasis{matching} is not a matching principal, return the value of krb5\_principal\_compare(context, matching, princ).
5078
5079\begin{sphinxadmonition}{note}{Note:}
5080\sphinxAtStartPar
5081A matching principal is a host\sphinxhyphen{}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\sphinxhyphen{}empty (and non\sphinxhyphen{}ignored) components of the latter.
5082\end{sphinxadmonition}
5083
5084
5085\subsubsection{krb5\_sname\_to\_principal \sphinxhyphen{}  Generate a full principal name from a service name.}
5086\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)@\spxentry{krb5\_sname\_to\_principal}\spxextra{C function}}
5087
5088\begin{fulllineitems}
5089\phantomsection\label{\detokenize{appdev/refs/api/krb5_sname_to_principal:c.krb5_sname_to_principal}}%
5090\pysigstartmultiline
5091\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_sname\_to\_principal}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{hostname}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{sname}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\DUrole{n}{type}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ret\_princ}}{}%
5092\pysigstopmultiline
5093\end{fulllineitems}
5094
5095\begin{quote}\begin{description}
5096\item[{param}] \leavevmode
5097\sphinxAtStartPar
5098\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5099
5100\sphinxAtStartPar
5101\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{hostname} \sphinxhyphen{} Host name, or NULL to use local host
5102
5103\sphinxAtStartPar
5104\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{sname} \sphinxhyphen{} Service name, or NULL to use \sphinxstylestrong{“host”}
5105
5106\sphinxAtStartPar
5107\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} \sphinxhyphen{} Principal type
5108
5109\sphinxAtStartPar
5110\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ret\_princ} \sphinxhyphen{} Generated principal
5111
5112\end{description}\end{quote}
5113\begin{quote}\begin{description}
5114\item[{retval}] \leavevmode\begin{itemize}
5115\item {}
5116\sphinxAtStartPar
51170   Success
5118
5119\end{itemize}
5120
5121\item[{return}] \leavevmode\begin{itemize}
5122\item {}
5123\sphinxAtStartPar
5124Kerberos error codes
5125
5126\end{itemize}
5127
5128\end{description}\end{quote}
5129
5130\sphinxAtStartPar
5131This 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 krb5\_get\_host\_realm(). In some cases this may be the referral (empty) realm.
5132
5133\sphinxAtStartPar
5134The \sphinxstyleemphasis{type} can be one of the following:
5135\begin{quote}
5136\begin{itemize}
5137\item {}
5138\sphinxAtStartPar
5139\#KRB5\_NT\_SRV\_HST canonicalizes the host name before looking up the realm and generating the principal.
5140
5141\item {}
5142\sphinxAtStartPar
5143\#KRB5\_NT\_UNKNOWN accepts the hostname as given, and does not canonicalize it.
5144
5145\end{itemize}
5146
5147\sphinxAtStartPar
5148Use krb5\_free\_principal to free \sphinxstyleemphasis{ret\_princ} when it is no longer needed.
5149\end{quote}
5150
5151
5152\subsubsection{krb5\_unparse\_name \sphinxhyphen{}  Convert a krb5\_principal structure to a string representation.}
5153\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)@\spxentry{krb5\_unparse\_name}\spxextra{C function}}
5154
5155\begin{fulllineitems}
5156\phantomsection\label{\detokenize{appdev/refs/api/krb5_unparse_name:c.krb5_unparse_name}}%
5157\pysigstartmultiline
5158\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_unparse\_name}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{principal}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{name}}{}%
5159\pysigstopmultiline
5160\end{fulllineitems}
5161
5162\begin{quote}\begin{description}
5163\item[{param}] \leavevmode
5164\sphinxAtStartPar
5165\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5166
5167\sphinxAtStartPar
5168\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} \sphinxhyphen{} Principal
5169
5170\sphinxAtStartPar
5171\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} \sphinxhyphen{} String representation of principal name
5172
5173\end{description}\end{quote}
5174\begin{quote}\begin{description}
5175\item[{retval}] \leavevmode\begin{itemize}
5176\item {}
5177\sphinxAtStartPar
51780   Success
5179
5180\end{itemize}
5181
5182\item[{return}] \leavevmode\begin{itemize}
5183\item {}
5184\sphinxAtStartPar
5185Kerberos error codes
5186
5187\end{itemize}
5188
5189\end{description}\end{quote}
5190
5191\sphinxAtStartPar
5192The resulting string representation uses the format and quoting conventions described for krb5\_parse\_name().
5193
5194\sphinxAtStartPar
5195Use krb5\_free\_unparsed\_name() to free \sphinxstyleemphasis{name} when it is no longer needed.
5196
5197
5198\subsubsection{krb5\_unparse\_name\_ext \sphinxhyphen{}  Convert krb5\_principal structure to string and length.}
5199\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)@\spxentry{krb5\_unparse\_name\_ext}\spxextra{C function}}
5200
5201\begin{fulllineitems}
5202\phantomsection\label{\detokenize{appdev/refs/api/krb5_unparse_name_ext:c.krb5_unparse_name_ext}}%
5203\pysigstartmultiline
5204\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_unparse\_name\_ext}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{principal}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{name}, \DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{size}}{}%
5205\pysigstopmultiline
5206\end{fulllineitems}
5207
5208\begin{quote}\begin{description}
5209\item[{param}] \leavevmode
5210\sphinxAtStartPar
5211\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5212
5213\sphinxAtStartPar
5214\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} \sphinxhyphen{} Principal
5215
5216\sphinxAtStartPar
5217\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{name} \sphinxhyphen{} String representation of principal name
5218
5219\sphinxAtStartPar
5220\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{size} \sphinxhyphen{} Size of unparsed name
5221
5222\end{description}\end{quote}
5223\begin{quote}\begin{description}
5224\item[{retval}] \leavevmode\begin{itemize}
5225\item {}
5226\sphinxAtStartPar
52270   Success
5228
5229\end{itemize}
5230
5231\item[{return}] \leavevmode\begin{itemize}
5232\item {}
5233\sphinxAtStartPar
5234Kerberos error codes. On failure name is set to NULL
5235
5236\end{itemize}
5237
5238\end{description}\end{quote}
5239
5240\sphinxAtStartPar
5241This function is similar to 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} .
5242
5243\sphinxAtStartPar
5244If size is NULL, this function behaves exactly as krb5\_unparse\_name().
5245
5246
5247\subsubsection{krb5\_unparse\_name\_flags \sphinxhyphen{}  Convert krb5\_principal structure to a string with flags.}
5248\label{\detokenize{appdev/refs/api/krb5_unparse_name_flags:krb5-unparse-name-flags-convert-krb5-principal-structure-to-a-string-with-flags}}\label{\detokenize{appdev/refs/api/krb5_unparse_name_flags::doc}}\index{krb5\_unparse\_name\_flags (C function)@\spxentry{krb5\_unparse\_name\_flags}\spxextra{C function}}
5249
5250\begin{fulllineitems}
5251\phantomsection\label{\detokenize{appdev/refs/api/krb5_unparse_name_flags:c.krb5_unparse_name_flags}}%
5252\pysigstartmultiline
5253\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_unparse\_name\_flags}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{principal}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{flags}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{name}}{}%
5254\pysigstopmultiline
5255\end{fulllineitems}
5256
5257\begin{quote}\begin{description}
5258\item[{param}] \leavevmode
5259\sphinxAtStartPar
5260\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5261
5262\sphinxAtStartPar
5263\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} \sphinxhyphen{} Principal
5264
5265\sphinxAtStartPar
5266\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} \sphinxhyphen{} Flags
5267
5268\sphinxAtStartPar
5269\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} \sphinxhyphen{} String representation of principal name
5270
5271\end{description}\end{quote}
5272\begin{quote}\begin{description}
5273\item[{retval}] \leavevmode\begin{itemize}
5274\item {}
5275\sphinxAtStartPar
52760   Success
5277
5278\end{itemize}
5279
5280\item[{return}] \leavevmode\begin{itemize}
5281\item {}
5282\sphinxAtStartPar
5283Kerberos error codes. On failure name is set to NULL
5284
5285\end{itemize}
5286
5287\end{description}\end{quote}
5288
5289\sphinxAtStartPar
5290Similar to krb5\_unparse\_name(), this function converts a krb5\_principal structure to a string representation.
5291
5292\sphinxAtStartPar
5293The following flags are valid:
5294\begin{quote}
5295\begin{itemize}
5296\item {}
5297\sphinxAtStartPar
5298\#KRB5\_PRINCIPAL\_UNPARSE\_SHORT \sphinxhyphen{} omit realm if it is the local realm
5299
5300\item {}
5301\sphinxAtStartPar
5302\#KRB5\_PRINCIPAL\_UNPARSE\_NO\_REALM \sphinxhyphen{} omit realm
5303
5304\item {}
5305\sphinxAtStartPar
5306\#KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY \sphinxhyphen{} do not quote special characters
5307
5308\end{itemize}
5309
5310\sphinxAtStartPar
5311Use krb5\_free\_unparsed\_name() to free \sphinxstyleemphasis{name} when it is no longer needed.
5312\end{quote}
5313
5314
5315\subsubsection{krb5\_unparse\_name\_flags\_ext \sphinxhyphen{}  Convert krb5\_principal structure to string format with flags.}
5316\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)@\spxentry{krb5\_unparse\_name\_flags\_ext}\spxextra{C function}}
5317
5318\begin{fulllineitems}
5319\phantomsection\label{\detokenize{appdev/refs/api/krb5_unparse_name_flags_ext:c.krb5_unparse_name_flags_ext}}%
5320\pysigstartmultiline
5321\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_unparse\_name\_flags\_ext}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{principal}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{flags}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{name}, \DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{size}}{}%
5322\pysigstopmultiline
5323\end{fulllineitems}
5324
5325\begin{quote}\begin{description}
5326\item[{param}] \leavevmode
5327\sphinxAtStartPar
5328\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5329
5330\sphinxAtStartPar
5331\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} \sphinxhyphen{} Principal
5332
5333\sphinxAtStartPar
5334\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} \sphinxhyphen{} Flags
5335
5336\sphinxAtStartPar
5337\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} \sphinxhyphen{} Single string format of principal name
5338
5339\sphinxAtStartPar
5340\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{size} \sphinxhyphen{} Size of unparsed name buffer
5341
5342\end{description}\end{quote}
5343\begin{quote}\begin{description}
5344\item[{retval}] \leavevmode\begin{itemize}
5345\item {}
5346\sphinxAtStartPar
53470   Success
5348
5349\end{itemize}
5350
5351\item[{return}] \leavevmode\begin{itemize}
5352\item {}
5353\sphinxAtStartPar
5354Kerberos error codes. On failure name is set to NULL
5355
5356\end{itemize}
5357
5358\end{description}\end{quote}
5359
5360
5361\subsubsection{krb5\_us\_timeofday \sphinxhyphen{}  Retrieve the system time of day, in sec and ms, since the epoch.}
5362\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)@\spxentry{krb5\_us\_timeofday}\spxextra{C function}}
5363
5364\begin{fulllineitems}
5365\phantomsection\label{\detokenize{appdev/refs/api/krb5_us_timeofday:c.krb5_us_timeofday}}%
5366\pysigstartmultiline
5367\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_us\_timeofday}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{seconds}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{microseconds}}{}%
5368\pysigstopmultiline
5369\end{fulllineitems}
5370
5371\begin{quote}\begin{description}
5372\item[{param}] \leavevmode
5373\sphinxAtStartPar
5374\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5375
5376\sphinxAtStartPar
5377\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{seconds} \sphinxhyphen{} System timeofday, seconds portion
5378
5379\sphinxAtStartPar
5380\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{microseconds} \sphinxhyphen{} System timeofday, microseconds portion
5381
5382\end{description}\end{quote}
5383\begin{quote}\begin{description}
5384\item[{retval}] \leavevmode\begin{itemize}
5385\item {}
5386\sphinxAtStartPar
53870   Success
5388
5389\end{itemize}
5390
5391\item[{return}] \leavevmode\begin{itemize}
5392\item {}
5393\sphinxAtStartPar
5394Kerberos error codes
5395
5396\end{itemize}
5397
5398\end{description}\end{quote}
5399
5400\sphinxAtStartPar
5401This function retrieves the system time of day with the context specific time offset adjustment.
5402
5403
5404\subsubsection{krb5\_verify\_authdata\_kdc\_issued \sphinxhyphen{}  Unwrap and verify AD\sphinxhyphen{}KDCIssued authorization data.}
5405\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)@\spxentry{krb5\_verify\_authdata\_kdc\_issued}\spxextra{C function}}
5406
5407\begin{fulllineitems}
5408\phantomsection\label{\detokenize{appdev/refs/api/krb5_verify_authdata_kdc_issued:c.krb5_verify_authdata_kdc_issued}}%
5409\pysigstartmultiline
5410\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_verify\_authdata\_kdc\_issued}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ad\_kdcissued}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{issuer}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{authdata}}{}%
5411\pysigstopmultiline
5412\end{fulllineitems}
5413
5414\begin{quote}\begin{description}
5415\item[{param}] \leavevmode
5416\sphinxAtStartPar
5417\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5418
5419\sphinxAtStartPar
5420\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Session key
5421
5422\sphinxAtStartPar
5423\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ad\_kdcissued} \sphinxhyphen{} AD\sphinxhyphen{}KDCIssued authorization data to be unwrapped
5424
5425\sphinxAtStartPar
5426\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{issuer} \sphinxhyphen{} Name of issuing principal (or NULL)
5427
5428\sphinxAtStartPar
5429\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{authdata} \sphinxhyphen{} Unwrapped list of authorization data
5430
5431\end{description}\end{quote}
5432
5433\sphinxAtStartPar
5434This function unwraps an AD\sphinxhyphen{}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} .
5435
5436
5437\subsection{Rarely used public interfaces}
5438\label{\detokenize{appdev/refs/api/index:rarely-used-public-interfaces}}
5439
5440\subsubsection{krb5\_425\_conv\_principal \sphinxhyphen{}  Convert a Kerberos V4 principal to a Kerberos V5 principal.}
5441\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)@\spxentry{krb5\_425\_conv\_principal}\spxextra{C function}}
5442
5443\begin{fulllineitems}
5444\phantomsection\label{\detokenize{appdev/refs/api/krb5_425_conv_principal:c.krb5_425_conv_principal}}%
5445\pysigstartmultiline
5446\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_425\_conv\_principal}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{name}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{instance}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{realm}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{princ}}{}%
5447\pysigstopmultiline
5448\end{fulllineitems}
5449
5450\begin{quote}\begin{description}
5451\item[{param}] \leavevmode
5452\sphinxAtStartPar
5453\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5454
5455\sphinxAtStartPar
5456\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} \sphinxhyphen{} V4 name
5457
5458\sphinxAtStartPar
5459\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{instance} \sphinxhyphen{} V4 instance
5460
5461\sphinxAtStartPar
5462\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} \sphinxhyphen{} Realm
5463
5464\sphinxAtStartPar
5465\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ} \sphinxhyphen{} V5 principal
5466
5467\end{description}\end{quote}
5468\begin{quote}\begin{description}
5469\item[{retval}] \leavevmode\begin{itemize}
5470\item {}
5471\sphinxAtStartPar
54720   Success; otherwise \sphinxhyphen{} Kerberos error codes
5473
5474\end{itemize}
5475
5476\end{description}\end{quote}
5477
5478\sphinxAtStartPar
5479This function builds a \sphinxstyleemphasis{princ} from V4 specification based on given input \sphinxstyleemphasis{name.instance@realm} .
5480
5481\sphinxAtStartPar
5482Use krb5\_free\_principal() to free \sphinxstyleemphasis{princ} when it is no longer needed.
5483
5484
5485\subsubsection{krb5\_524\_conv\_principal \sphinxhyphen{}  Convert a Kerberos V5 principal to a Kerberos V4 principal.}
5486\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)@\spxentry{krb5\_524\_conv\_principal}\spxextra{C function}}
5487
5488\begin{fulllineitems}
5489\phantomsection\label{\detokenize{appdev/refs/api/krb5_524_conv_principal:c.krb5_524_conv_principal}}%
5490\pysigstartmultiline
5491\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_524\_conv\_principal}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{princ}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{name}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{inst}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{realm}}{}%
5492\pysigstopmultiline
5493\end{fulllineitems}
5494
5495\begin{quote}\begin{description}
5496\item[{param}] \leavevmode
5497\sphinxAtStartPar
5498\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5499
5500\sphinxAtStartPar
5501\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ} \sphinxhyphen{} V5 Principal
5502
5503\sphinxAtStartPar
5504\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} \sphinxhyphen{} V4 principal’s name to be filled in
5505
5506\sphinxAtStartPar
5507\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{inst} \sphinxhyphen{} V4 principal’s instance name to be filled in
5508
5509\sphinxAtStartPar
5510\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realm} \sphinxhyphen{} Principal’s realm name to be filled in
5511
5512\end{description}\end{quote}
5513\begin{quote}\begin{description}
5514\item[{retval}] \leavevmode\begin{itemize}
5515\item {}
5516\sphinxAtStartPar
55170   Success
5518
5519\item {}
5520\sphinxAtStartPar
5521KRB5\_INVALID\_PRINCIPAL   Invalid principal name
5522
5523\item {}
5524\sphinxAtStartPar
5525KRB5\_CONFIG\_CANTOPEN   Can’t open or find Kerberos configuration file
5526
5527\end{itemize}
5528
5529\item[{return}] \leavevmode\begin{itemize}
5530\item {}
5531\sphinxAtStartPar
5532Kerberos error codes
5533
5534\end{itemize}
5535
5536\end{description}\end{quote}
5537
5538\sphinxAtStartPar
5539This function separates a V5 principal \sphinxstyleemphasis{princ} into \sphinxstyleemphasis{name} , \sphinxstyleemphasis{instance} , and \sphinxstyleemphasis{realm} .
5540
5541
5542\subsubsection{krb5\_address\_compare \sphinxhyphen{}  Compare two Kerberos addresses.}
5543\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)@\spxentry{krb5\_address\_compare}\spxextra{C function}}
5544
5545\begin{fulllineitems}
5546\phantomsection\label{\detokenize{appdev/refs/api/krb5_address_compare:c.krb5_address_compare}}%
5547\pysigstartmultiline
5548\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_address\_compare}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{addr1}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{addr2}}{}%
5549\pysigstopmultiline
5550\end{fulllineitems}
5551
5552\begin{quote}\begin{description}
5553\item[{param}] \leavevmode
5554\sphinxAtStartPar
5555\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5556
5557\sphinxAtStartPar
5558\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr1} \sphinxhyphen{} First address to be compared
5559
5560\sphinxAtStartPar
5561\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr2} \sphinxhyphen{} Second address to be compared
5562
5563\end{description}\end{quote}
5564\begin{quote}\begin{description}
5565\item[{return}] \leavevmode\begin{itemize}
5566\item {}
5567\sphinxAtStartPar
5568TRUE if the addresses are the same, FALSE otherwise
5569
5570\end{itemize}
5571
5572\end{description}\end{quote}
5573
5574
5575\subsubsection{krb5\_address\_order \sphinxhyphen{}  Return an ordering of the specified addresses.}
5576\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)@\spxentry{krb5\_address\_order}\spxextra{C function}}
5577
5578\begin{fulllineitems}
5579\phantomsection\label{\detokenize{appdev/refs/api/krb5_address_order:c.krb5_address_order}}%
5580\pysigstartmultiline
5581\pysiglinewithargsret{\DUrole{kt}{int}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_address\_order}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{addr1}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{addr2}}{}%
5582\pysigstopmultiline
5583\end{fulllineitems}
5584
5585\begin{quote}\begin{description}
5586\item[{param}] \leavevmode
5587\sphinxAtStartPar
5588\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5589
5590\sphinxAtStartPar
5591\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr1} \sphinxhyphen{} First address
5592
5593\sphinxAtStartPar
5594\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr2} \sphinxhyphen{} Second address
5595
5596\end{description}\end{quote}
5597\begin{quote}\begin{description}
5598\item[{retval}] \leavevmode\begin{itemize}
5599\item {}
5600\sphinxAtStartPar
56010   if The two addresses are the same
5602
5603\item {}
5604\sphinxAtStartPar
5605\textless{}   0 First address is less than second
5606
5607\item {}
5608\sphinxAtStartPar
5609\textgreater{}   0 First address is greater than second
5610
5611\end{itemize}
5612
5613\end{description}\end{quote}
5614
5615
5616\subsubsection{krb5\_address\_search \sphinxhyphen{}  Search a list of addresses for a specified address.}
5617\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)@\spxentry{krb5\_address\_search}\spxextra{C function}}
5618
5619\begin{fulllineitems}
5620\phantomsection\label{\detokenize{appdev/refs/api/krb5_address_search:c.krb5_address_search}}%
5621\pysigstartmultiline
5622\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_address\_search}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{addr}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{k}{const}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{addrlist}}{}%
5623\pysigstopmultiline
5624\end{fulllineitems}
5625
5626\begin{quote}\begin{description}
5627\item[{param}] \leavevmode
5628\sphinxAtStartPar
5629\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5630
5631\sphinxAtStartPar
5632\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr} \sphinxhyphen{} Address to search for
5633
5634\sphinxAtStartPar
5635\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addrlist} \sphinxhyphen{} Address list to be searched (or NULL)
5636
5637\end{description}\end{quote}
5638\begin{quote}\begin{description}
5639\item[{return}] \leavevmode\begin{itemize}
5640\item {}
5641\sphinxAtStartPar
5642TRUE if addr is listed in addrlist , or addrlist is NULL; FALSE otherwise
5643
5644\end{itemize}
5645
5646\end{description}\end{quote}
5647
5648\begin{sphinxadmonition}{note}{Note:}
5649\sphinxAtStartPar
5650If \sphinxstyleemphasis{addrlist} contains only a NetBIOS addresses, it will be treated as a null list.
5651\end{sphinxadmonition}
5652
5653
5654\subsubsection{krb5\_allow\_weak\_crypto \sphinxhyphen{}  Allow the application to override the profile’s allow\_weak\_crypto setting.}
5655\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}}\label{\detokenize{appdev/refs/api/krb5_allow_weak_crypto::doc}}\index{krb5\_allow\_weak\_crypto (C function)@\spxentry{krb5\_allow\_weak\_crypto}\spxextra{C function}}
5656
5657\begin{fulllineitems}
5658\phantomsection\label{\detokenize{appdev/refs/api/krb5_allow_weak_crypto:c.krb5_allow_weak_crypto}}%
5659\pysigstartmultiline
5660\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_allow\_weak\_crypto}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\DUrole{n}{enable}}{}%
5661\pysigstopmultiline
5662\end{fulllineitems}
5663
5664\begin{quote}\begin{description}
5665\item[{param}] \leavevmode
5666\sphinxAtStartPar
5667\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5668
5669\sphinxAtStartPar
5670\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enable} \sphinxhyphen{} Boolean flag
5671
5672\end{description}\end{quote}
5673\begin{quote}\begin{description}
5674\item[{retval}] \leavevmode\begin{itemize}
5675\item {}
5676\sphinxAtStartPar
56770   (always)
5678
5679\end{itemize}
5680
5681\end{description}\end{quote}
5682
5683\sphinxAtStartPar
5684This function allows an application to override the allow\_weak\_crypto setting. It is primarily for use by aklog.
5685
5686
5687\subsubsection{krb5\_aname\_to\_localname \sphinxhyphen{}  Convert a principal name to a local name.}
5688\label{\detokenize{appdev/refs/api/krb5_aname_to_localname:krb5-aname-to-localname-convert-a-principal-name-to-a-local-name}}\label{\detokenize{appdev/refs/api/krb5_aname_to_localname::doc}}\index{krb5\_aname\_to\_localname (C function)@\spxentry{krb5\_aname\_to\_localname}\spxextra{C function}}
5689
5690\begin{fulllineitems}
5691\phantomsection\label{\detokenize{appdev/refs/api/krb5_aname_to_localname:c.krb5_aname_to_localname}}%
5692\pysigstartmultiline
5693\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_aname\_to\_localname}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{aname}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{lnsize\_in}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{lname}}{}%
5694\pysigstopmultiline
5695\end{fulllineitems}
5696
5697\begin{quote}\begin{description}
5698\item[{param}] \leavevmode
5699\sphinxAtStartPar
5700\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5701
5702\sphinxAtStartPar
5703\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{aname} \sphinxhyphen{} Principal name
5704
5705\sphinxAtStartPar
5706\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{lnsize\_in} \sphinxhyphen{} Space available in \sphinxstyleemphasis{lname}
5707
5708\sphinxAtStartPar
5709\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{lname} \sphinxhyphen{} Local name buffer to be filled in
5710
5711\end{description}\end{quote}
5712\begin{quote}\begin{description}
5713\item[{retval}] \leavevmode\begin{itemize}
5714\item {}
5715\sphinxAtStartPar
57160   Success
5717
5718\item {}
5719\sphinxAtStartPar
5720System   errors
5721
5722\end{itemize}
5723
5724\item[{return}] \leavevmode\begin{itemize}
5725\item {}
5726\sphinxAtStartPar
5727Kerberos error codes
5728
5729\end{itemize}
5730
5731\end{description}\end{quote}
5732
5733\sphinxAtStartPar
5734If \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.
5735
5736\sphinxAtStartPar
5737Local names, rather than principal names, can be used by programs that translate to an environment\sphinxhyphen{}specific name (for example, a user account name).
5738
5739
5740\subsubsection{krb5\_anonymous\_principal \sphinxhyphen{}  Build an anonymous principal.}
5741\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)@\spxentry{krb5\_anonymous\_principal}\spxextra{C function}}
5742
5743\begin{fulllineitems}
5744\phantomsection\label{\detokenize{appdev/refs/api/krb5_anonymous_principal:c.krb5_anonymous_principal}}%
5745\pysigstartmultiline
5746\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_anonymous\_principal}}}}{\DUrole{kt}{void}\DUrole{w}{  }\DUrole{n}{None}}{}%
5747\pysigstopmultiline
5748\end{fulllineitems}
5749
5750\begin{quote}\begin{description}
5751\item[{param}] \leavevmode
5752\sphinxAtStartPar
5753\sphinxstylestrong{None}
5754
5755\end{description}\end{quote}
5756
5757\sphinxAtStartPar
5758This function returns constant storage that must not be freed.
5759
5760
5761\sphinxstrong{See also:}
5762\nopagebreak
5763
5764
5765\sphinxAtStartPar
5766\#KRB5\_ANONYMOUS\_PRINCSTR
5767
5768
5769
5770
5771\subsubsection{krb5\_anonymous\_realm \sphinxhyphen{}  Return an anonymous realm data.}
5772\label{\detokenize{appdev/refs/api/krb5_anonymous_realm:krb5-anonymous-realm-return-an-anonymous-realm-data}}\label{\detokenize{appdev/refs/api/krb5_anonymous_realm::doc}}\index{krb5\_anonymous\_realm (C function)@\spxentry{krb5\_anonymous\_realm}\spxextra{C function}}
5773
5774\begin{fulllineitems}
5775\phantomsection\label{\detokenize{appdev/refs/api/krb5_anonymous_realm:c.krb5_anonymous_realm}}%
5776\pysigstartmultiline
5777\pysiglinewithargsret{\DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_anonymous\_realm}}}}{\DUrole{kt}{void}\DUrole{w}{  }\DUrole{n}{None}}{}%
5778\pysigstopmultiline
5779\end{fulllineitems}
5780
5781\begin{quote}\begin{description}
5782\item[{param}] \leavevmode
5783\sphinxAtStartPar
5784\sphinxstylestrong{None}
5785
5786\end{description}\end{quote}
5787
5788\sphinxAtStartPar
5789This function returns constant storage that must not be freed.
5790
5791
5792\sphinxstrong{See also:}
5793\nopagebreak
5794
5795
5796\sphinxAtStartPar
5797\#KRB5\_ANONYMOUS\_REALMSTR
5798
5799
5800
5801
5802\subsubsection{krb5\_appdefault\_boolean \sphinxhyphen{}  Retrieve a boolean value from the appdefaults section of krb5.conf.}
5803\label{\detokenize{appdev/refs/api/krb5_appdefault_boolean:krb5-appdefault-boolean-retrieve-a-boolean-value-from-the-appdefaults-section-of-krb5-conf}}\label{\detokenize{appdev/refs/api/krb5_appdefault_boolean::doc}}\index{krb5\_appdefault\_boolean (C function)@\spxentry{krb5\_appdefault\_boolean}\spxextra{C function}}
5804
5805\begin{fulllineitems}
5806\phantomsection\label{\detokenize{appdev/refs/api/krb5_appdefault_boolean:c.krb5_appdefault_boolean}}%
5807\pysigstartmultiline
5808\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_appdefault\_boolean}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{appname}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{realm}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{option}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{default\_value}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ret\_value}}{}%
5809\pysigstopmultiline
5810\end{fulllineitems}
5811
5812\begin{quote}\begin{description}
5813\item[{param}] \leavevmode
5814\sphinxAtStartPar
5815\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5816
5817\sphinxAtStartPar
5818\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{appname} \sphinxhyphen{} Application name
5819
5820\sphinxAtStartPar
5821\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} \sphinxhyphen{} Realm name
5822
5823\sphinxAtStartPar
5824\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{option} \sphinxhyphen{} Option to be checked
5825
5826\sphinxAtStartPar
5827\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{default\_value} \sphinxhyphen{} Default value to return if no match is found
5828
5829\sphinxAtStartPar
5830\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ret\_value} \sphinxhyphen{} Boolean value of \sphinxstyleemphasis{option}
5831
5832\end{description}\end{quote}
5833
5834\sphinxAtStartPar
5835This function gets the application defaults for \sphinxstyleemphasis{option} based on the given \sphinxstyleemphasis{appname} and/or \sphinxstyleemphasis{realm} .
5836
5837
5838\sphinxstrong{See also:}
5839\nopagebreak
5840
5841
5842\sphinxAtStartPar
5843krb5\_appdefault\_string()
5844
5845
5846
5847
5848\subsubsection{krb5\_appdefault\_string \sphinxhyphen{}  Retrieve a string value from the appdefaults section of krb5.conf.}
5849\label{\detokenize{appdev/refs/api/krb5_appdefault_string:krb5-appdefault-string-retrieve-a-string-value-from-the-appdefaults-section-of-krb5-conf}}\label{\detokenize{appdev/refs/api/krb5_appdefault_string::doc}}\index{krb5\_appdefault\_string (C function)@\spxentry{krb5\_appdefault\_string}\spxextra{C function}}
5850
5851\begin{fulllineitems}
5852\phantomsection\label{\detokenize{appdev/refs/api/krb5_appdefault_string:c.krb5_appdefault_string}}%
5853\pysigstartmultiline
5854\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_appdefault\_string}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{appname}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{realm}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{option}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{default\_value}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{ret\_value}}{}%
5855\pysigstopmultiline
5856\end{fulllineitems}
5857
5858\begin{quote}\begin{description}
5859\item[{param}] \leavevmode
5860\sphinxAtStartPar
5861\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5862
5863\sphinxAtStartPar
5864\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{appname} \sphinxhyphen{} Application name
5865
5866\sphinxAtStartPar
5867\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} \sphinxhyphen{} Realm name
5868
5869\sphinxAtStartPar
5870\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{option} \sphinxhyphen{} Option to be checked
5871
5872\sphinxAtStartPar
5873\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{default\_value} \sphinxhyphen{} Default value to return if no match is found
5874
5875\sphinxAtStartPar
5876\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ret\_value} \sphinxhyphen{} String value of \sphinxstyleemphasis{option}
5877
5878\end{description}\end{quote}
5879
5880\sphinxAtStartPar
5881This function gets the application defaults for \sphinxstyleemphasis{option} based on the given \sphinxstyleemphasis{appname} and/or \sphinxstyleemphasis{realm} .
5882
5883
5884\sphinxstrong{See also:}
5885\nopagebreak
5886
5887
5888\sphinxAtStartPar
5889krb5\_appdefault\_boolean()
5890
5891
5892
5893
5894\subsubsection{krb5\_auth\_con\_free \sphinxhyphen{}  Free a krb5\_auth\_context structure.}
5895\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)@\spxentry{krb5\_auth\_con\_free}\spxextra{C function}}
5896
5897\begin{fulllineitems}
5898\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_free:c.krb5_auth_con_free}}%
5899\pysigstartmultiline
5900\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_free}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}}{}%
5901\pysigstopmultiline
5902\end{fulllineitems}
5903
5904\begin{quote}\begin{description}
5905\item[{param}] \leavevmode
5906\sphinxAtStartPar
5907\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5908
5909\sphinxAtStartPar
5910\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context to be freed
5911
5912\end{description}\end{quote}
5913\begin{quote}\begin{description}
5914\item[{retval}] \leavevmode\begin{itemize}
5915\item {}
5916\sphinxAtStartPar
59170   (always)
5918
5919\end{itemize}
5920
5921\end{description}\end{quote}
5922
5923\sphinxAtStartPar
5924This function frees an auth context allocated by krb5\_auth\_con\_init().
5925
5926
5927\subsubsection{krb5\_auth\_con\_genaddrs \sphinxhyphen{}  Generate auth context addresses from a connected socket.}
5928\label{\detokenize{appdev/refs/api/krb5_auth_con_genaddrs:krb5-auth-con-genaddrs-generate-auth-context-addresses-from-a-connected-socket}}\label{\detokenize{appdev/refs/api/krb5_auth_con_genaddrs::doc}}\index{krb5\_auth\_con\_genaddrs (C function)@\spxentry{krb5\_auth\_con\_genaddrs}\spxextra{C function}}
5929
5930\begin{fulllineitems}
5931\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_genaddrs:c.krb5_auth_con_genaddrs}}%
5932\pysigstartmultiline
5933\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_genaddrs}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{infd}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{flags}}{}%
5934\pysigstopmultiline
5935\end{fulllineitems}
5936
5937\begin{quote}\begin{description}
5938\item[{param}] \leavevmode
5939\sphinxAtStartPar
5940\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5941
5942\sphinxAtStartPar
5943\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
5944
5945\sphinxAtStartPar
5946\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{infd} \sphinxhyphen{} Connected socket descriptor
5947
5948\sphinxAtStartPar
5949\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} \sphinxhyphen{} Flags
5950
5951\end{description}\end{quote}
5952\begin{quote}\begin{description}
5953\item[{retval}] \leavevmode\begin{itemize}
5954\item {}
5955\sphinxAtStartPar
59560   Success; otherwise \sphinxhyphen{} Kerberos error codes
5957
5958\end{itemize}
5959
5960\end{description}\end{quote}
5961
5962\sphinxAtStartPar
5963This 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:
5964\begin{itemize}
5965\item {}
5966\sphinxAtStartPar
5967\#KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_ADDR Generate local address.
5968
5969\item {}
5970\sphinxAtStartPar
5971\#KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_ADDR Generate remote address.
5972
5973\item {}
5974\sphinxAtStartPar
5975\#KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_FULL\_ADDR Generate local address and port.
5976
5977\item {}
5978\sphinxAtStartPar
5979\#KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_FULL\_ADDR Generate remote address and port.
5980
5981\end{itemize}
5982
5983
5984\subsubsection{krb5\_auth\_con\_get\_checksum\_func \sphinxhyphen{}  Get the checksum callback from an auth context.}
5985\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}}\label{\detokenize{appdev/refs/api/krb5_auth_con_get_checksum_func::doc}}\index{krb5\_auth\_con\_get\_checksum\_func (C function)@\spxentry{krb5\_auth\_con\_get\_checksum\_func}\spxextra{C function}}
5986
5987\begin{fulllineitems}
5988\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_get_checksum_func:c.krb5_auth_con_get_checksum_func}}%
5989\pysigstartmultiline
5990\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_get\_checksum\_func}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_mk_req_checksum_func:c.krb5_mk_req_checksum_func}]{\sphinxcrossref{\DUrole{n}{krb5\_mk\_req\_checksum\_func}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{func}, \DUrole{kt}{void}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{data}}{}%
5991\pysigstopmultiline
5992\end{fulllineitems}
5993
5994\begin{quote}\begin{description}
5995\item[{param}] \leavevmode
5996\sphinxAtStartPar
5997\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
5998
5999\sphinxAtStartPar
6000\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
6001
6002\sphinxAtStartPar
6003\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{func} \sphinxhyphen{} Checksum callback
6004
6005\sphinxAtStartPar
6006\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} \sphinxhyphen{} Callback argument
6007
6008\end{description}\end{quote}
6009\begin{quote}\begin{description}
6010\item[{retval}] \leavevmode\begin{itemize}
6011\item {}
6012\sphinxAtStartPar
60130   (always)
6014
6015\end{itemize}
6016
6017\end{description}\end{quote}
6018
6019
6020\subsubsection{krb5\_auth\_con\_getaddrs \sphinxhyphen{}  Retrieve address fields from an auth context.}
6021\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)@\spxentry{krb5\_auth\_con\_getaddrs}\spxextra{C function}}
6022
6023\begin{fulllineitems}
6024\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getaddrs:c.krb5_auth_con_getaddrs}}%
6025\pysigstartmultiline
6026\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_getaddrs}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{local\_addr}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{remote\_addr}}{}%
6027\pysigstopmultiline
6028\end{fulllineitems}
6029
6030\begin{quote}\begin{description}
6031\item[{param}] \leavevmode
6032\sphinxAtStartPar
6033\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
6034
6035\sphinxAtStartPar
6036\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
6037
6038\sphinxAtStartPar
6039\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{local\_addr} \sphinxhyphen{} Local address (NULL if not needed)
6040
6041\sphinxAtStartPar
6042\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{remote\_addr} \sphinxhyphen{} Remote address (NULL if not needed)
6043
6044\end{description}\end{quote}
6045\begin{quote}\begin{description}
6046\item[{retval}] \leavevmode\begin{itemize}
6047\item {}
6048\sphinxAtStartPar
60490   Success; otherwise \sphinxhyphen{} Kerberos error codes
6050
6051\end{itemize}
6052
6053\end{description}\end{quote}
6054
6055
6056\subsubsection{krb5\_auth\_con\_getauthenticator \sphinxhyphen{}  Retrieve the authenticator from an auth context.}
6057\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)@\spxentry{krb5\_auth\_con\_getauthenticator}\spxextra{C function}}
6058
6059\begin{fulllineitems}
6060\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getauthenticator:c.krb5_auth_con_getauthenticator}}%
6061\pysigstartmultiline
6062\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_getauthenticator}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{\DUrole{n}{krb5\_authenticator}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{authenticator}}{}%
6063\pysigstopmultiline
6064\end{fulllineitems}
6065
6066\begin{quote}\begin{description}
6067\item[{param}] \leavevmode
6068\sphinxAtStartPar
6069\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
6070
6071\sphinxAtStartPar
6072\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
6073
6074\sphinxAtStartPar
6075\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{authenticator} \sphinxhyphen{} Authenticator
6076
6077\end{description}\end{quote}
6078\begin{quote}\begin{description}
6079\item[{retval}] \leavevmode\begin{itemize}
6080\item {}
6081\sphinxAtStartPar
60820   Success. Otherwise \sphinxhyphen{} Kerberos error codes
6083
6084\end{itemize}
6085
6086\end{description}\end{quote}
6087
6088\sphinxAtStartPar
6089Use krb5\_free\_authenticator() to free \sphinxstyleemphasis{authenticator} when it is no longer needed.
6090
6091
6092\subsubsection{krb5\_auth\_con\_getflags \sphinxhyphen{}  Retrieve flags from a krb5\_auth\_context structure.}
6093\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)@\spxentry{krb5\_auth\_con\_getflags}\spxextra{C function}}
6094
6095\begin{fulllineitems}
6096\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getflags:c.krb5_auth_con_getflags}}%
6097\pysigstartmultiline
6098\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_getflags}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{flags}}{}%
6099\pysigstopmultiline
6100\end{fulllineitems}
6101
6102\begin{quote}\begin{description}
6103\item[{param}] \leavevmode
6104\sphinxAtStartPar
6105\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
6106
6107\sphinxAtStartPar
6108\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
6109
6110\sphinxAtStartPar
6111\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{flags} \sphinxhyphen{} Flags bit mask
6112
6113\end{description}\end{quote}
6114\begin{quote}\begin{description}
6115\item[{retval}] \leavevmode\begin{itemize}
6116\item {}
6117\sphinxAtStartPar
61180   (always)
6119
6120\end{itemize}
6121
6122\end{description}\end{quote}
6123
6124\sphinxAtStartPar
6125Valid values for \sphinxstyleemphasis{flags} are:
6126\begin{itemize}
6127\item {}
6128\sphinxAtStartPar
6129\#KRB5\_AUTH\_CONTEXT\_DO\_TIME Use timestamps
6130
6131\item {}
6132\sphinxAtStartPar
6133\#KRB5\_AUTH\_CONTEXT\_RET\_TIME Save timestamps
6134
6135\item {}
6136\sphinxAtStartPar
6137\#KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE Use sequence numbers
6138
6139\item {}
6140\sphinxAtStartPar
6141\#KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE Save sequence numbers
6142
6143\end{itemize}
6144
6145
6146\subsubsection{krb5\_auth\_con\_getkey \sphinxhyphen{}  Retrieve the session key from an auth context as a keyblock.}
6147\label{\detokenize{appdev/refs/api/krb5_auth_con_getkey:krb5-auth-con-getkey-retrieve-the-session-key-from-an-auth-context-as-a-keyblock}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getkey::doc}}\index{krb5\_auth\_con\_getkey (C function)@\spxentry{krb5\_auth\_con\_getkey}\spxextra{C function}}
6148
6149\begin{fulllineitems}
6150\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getkey:c.krb5_auth_con_getkey}}%
6151\pysigstartmultiline
6152\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_getkey}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{keyblock}}{}%
6153\pysigstopmultiline
6154\end{fulllineitems}
6155
6156\begin{quote}\begin{description}
6157\item[{param}] \leavevmode
6158\sphinxAtStartPar
6159\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
6160
6161\sphinxAtStartPar
6162\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
6163
6164\sphinxAtStartPar
6165\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keyblock} \sphinxhyphen{} Session key
6166
6167\end{description}\end{quote}
6168\begin{quote}\begin{description}
6169\item[{retval}] \leavevmode\begin{itemize}
6170\item {}
6171\sphinxAtStartPar
61720   Success. Otherwise \sphinxhyphen{} Kerberos error codes
6173
6174\end{itemize}
6175
6176\end{description}\end{quote}
6177
6178\sphinxAtStartPar
6179This function creates a keyblock containing the session key from \sphinxstyleemphasis{auth\_context} . Use krb5\_free\_keyblock() to free \sphinxstyleemphasis{keyblock} when it is no longer needed
6180
6181
6182\subsubsection{krb5\_auth\_con\_getkey\_k \sphinxhyphen{}  Retrieve the session key from an auth context.}
6183\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)@\spxentry{krb5\_auth\_con\_getkey\_k}\spxextra{C function}}
6184
6185\begin{fulllineitems}
6186\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getkey_k:c.krb5_auth_con_getkey_k}}%
6187\pysigstartmultiline
6188\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_getkey\_k}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{\DUrole{n}{krb5\_key}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}}{}%
6189\pysigstopmultiline
6190\end{fulllineitems}
6191
6192\begin{quote}\begin{description}
6193\item[{param}] \leavevmode
6194\sphinxAtStartPar
6195\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
6196
6197\sphinxAtStartPar
6198\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
6199
6200\sphinxAtStartPar
6201\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} \sphinxhyphen{} Session key
6202
6203\end{description}\end{quote}
6204\begin{quote}\begin{description}
6205\item[{retval}] \leavevmode\begin{itemize}
6206\item {}
6207\sphinxAtStartPar
62080   (always)
6209
6210\end{itemize}
6211
6212\end{description}\end{quote}
6213
6214\sphinxAtStartPar
6215This function sets \sphinxstyleemphasis{key} to the session key from \sphinxstyleemphasis{auth\_context} . Use krb5\_k\_free\_key() to release \sphinxstyleemphasis{key} when it is no longer needed.
6216
6217
6218\subsubsection{krb5\_auth\_con\_getlocalseqnumber \sphinxhyphen{}  Retrieve the local sequence number from an auth context.}
6219\label{\detokenize{appdev/refs/api/krb5_auth_con_getlocalseqnumber:krb5-auth-con-getlocalseqnumber-retrieve-the-local-sequence-number-from-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getlocalseqnumber::doc}}\index{krb5\_auth\_con\_getlocalseqnumber (C function)@\spxentry{krb5\_auth\_con\_getlocalseqnumber}\spxextra{C function}}
6220
6221\begin{fulllineitems}
6222\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getlocalseqnumber:c.krb5_auth_con_getlocalseqnumber}}%
6223\pysigstartmultiline
6224\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_getlocalseqnumber}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{seqnumber}}{}%
6225\pysigstopmultiline
6226\end{fulllineitems}
6227
6228\begin{quote}\begin{description}
6229\item[{param}] \leavevmode
6230\sphinxAtStartPar
6231\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
6232
6233\sphinxAtStartPar
6234\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
6235
6236\sphinxAtStartPar
6237\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{seqnumber} \sphinxhyphen{} Local sequence number
6238
6239\end{description}\end{quote}
6240\begin{quote}\begin{description}
6241\item[{retval}] \leavevmode\begin{itemize}
6242\item {}
6243\sphinxAtStartPar
62440   Success; otherwise \sphinxhyphen{} Kerberos error codes
6245
6246\end{itemize}
6247
6248\end{description}\end{quote}
6249
6250\sphinxAtStartPar
6251Retrieve the local sequence number from \sphinxstyleemphasis{auth\_context} and return it in \sphinxstyleemphasis{seqnumber} . The \#KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE flag must be set in \sphinxstyleemphasis{auth\_context} for this function to be useful.
6252
6253
6254\subsubsection{krb5\_auth\_con\_getrcache \sphinxhyphen{}  Retrieve the replay cache from an auth context.}
6255\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)@\spxentry{krb5\_auth\_con\_getrcache}\spxextra{C function}}
6256
6257\begin{fulllineitems}
6258\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getrcache:c.krb5_auth_con_getrcache}}%
6259\pysigstartmultiline
6260\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_getrcache}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_rcache:c.krb5_rcache}]{\sphinxcrossref{\DUrole{n}{krb5\_rcache}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{rcache}}{}%
6261\pysigstopmultiline
6262\end{fulllineitems}
6263
6264\begin{quote}\begin{description}
6265\item[{param}] \leavevmode
6266\sphinxAtStartPar
6267\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
6268
6269\sphinxAtStartPar
6270\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
6271
6272\sphinxAtStartPar
6273\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rcache} \sphinxhyphen{} Replay cache handle
6274
6275\end{description}\end{quote}
6276\begin{quote}\begin{description}
6277\item[{retval}] \leavevmode\begin{itemize}
6278\item {}
6279\sphinxAtStartPar
62800   (always)
6281
6282\end{itemize}
6283
6284\end{description}\end{quote}
6285
6286\sphinxAtStartPar
6287This function fetches the replay cache from \sphinxstyleemphasis{auth\_context} . The caller should not close \sphinxstyleemphasis{rcache} .
6288
6289
6290\subsubsection{krb5\_auth\_con\_getrecvsubkey \sphinxhyphen{}  Retrieve the receiving subkey from an auth context as a keyblock.}
6291\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)@\spxentry{krb5\_auth\_con\_getrecvsubkey}\spxextra{C function}}
6292
6293\begin{fulllineitems}
6294\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getrecvsubkey:c.krb5_auth_con_getrecvsubkey}}%
6295\pysigstartmultiline
6296\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_getrecvsubkey}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{keyblock}}{}%
6297\pysigstopmultiline
6298\end{fulllineitems}
6299
6300\begin{quote}\begin{description}
6301\item[{param}] \leavevmode
6302\sphinxAtStartPar
6303\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
6304
6305\sphinxAtStartPar
6306\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} \sphinxhyphen{} Authentication context
6307
6308\sphinxAtStartPar
6309\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keyblock} \sphinxhyphen{} Receiving subkey
6310
6311\end{description}\end{quote}
6312\begin{quote}\begin{description}
6313\item[{retval}] \leavevmode\begin{itemize}
6314\item {}
6315\sphinxAtStartPar
63160   Success; otherwise \sphinxhyphen{} Kerberos error codes
6317
6318\end{itemize}
6319
6320\end{description}\end{quote}
6321
6322\sphinxAtStartPar
6323This function creates a keyblock containing the receiving subkey from \sphinxstyleemphasis{auth\_context} . Use krb5\_free\_keyblock() to free \sphinxstyleemphasis{keyblock} when it is no longer needed.
6324
6325
6326\subsubsection{krb5\_auth\_con\_getrecvsubkey\_k \sphinxhyphen{}  Retrieve the receiving subkey from an auth context as a keyblock.}
6327\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)@\spxentry{krb5\_auth\_con\_getrecvsubkey\_k}\spxextra{C function}}
6328
6329\begin{fulllineitems}
6330\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getrecvsubkey_k:c.krb5_auth_con_getrecvsubkey_k}}%
6331\pysigstartmultiline
6332\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_getrecvsubkey\_k}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{\DUrole{n}{krb5\_key}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}}{}%
6333\pysigstopmultiline
6334\end{fulllineitems}
6335
6336\begin{quote}\begin{description}
6337\item[{param}] \leavevmode
6338\sphinxAtStartPar
6339\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
6340
6341\sphinxAtStartPar
6342\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} \sphinxhyphen{} Authentication context
6343
6344\sphinxAtStartPar
6345\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} \sphinxhyphen{} Receiving subkey
6346
6347\end{description}\end{quote}
6348\begin{quote}\begin{description}
6349\item[{retval}] \leavevmode\begin{itemize}
6350\item {}
6351\sphinxAtStartPar
63520   Success; otherwise \sphinxhyphen{} Kerberos error codes
6353
6354\end{itemize}
6355
6356\end{description}\end{quote}
6357
6358\sphinxAtStartPar
6359This function sets \sphinxstyleemphasis{key} to the receiving subkey from \sphinxstyleemphasis{auth\_context} . Use krb5\_k\_free\_key() to release \sphinxstyleemphasis{key} when it is no longer needed.
6360
6361
6362\subsubsection{krb5\_auth\_con\_getremoteseqnumber \sphinxhyphen{}  Retrieve the remote sequence number from an auth context.}
6363\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)@\spxentry{krb5\_auth\_con\_getremoteseqnumber}\spxextra{C function}}
6364
6365\begin{fulllineitems}
6366\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getremoteseqnumber:c.krb5_auth_con_getremoteseqnumber}}%
6367\pysigstartmultiline
6368\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_getremoteseqnumber}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{seqnumber}}{}%
6369\pysigstopmultiline
6370\end{fulllineitems}
6371
6372\begin{quote}\begin{description}
6373\item[{param}] \leavevmode
6374\sphinxAtStartPar
6375\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
6376
6377\sphinxAtStartPar
6378\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
6379
6380\sphinxAtStartPar
6381\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{seqnumber} \sphinxhyphen{} Remote sequence number
6382
6383\end{description}\end{quote}
6384\begin{quote}\begin{description}
6385\item[{retval}] \leavevmode\begin{itemize}
6386\item {}
6387\sphinxAtStartPar
63880   Success; otherwise \sphinxhyphen{} Kerberos error codes
6389
6390\end{itemize}
6391
6392\end{description}\end{quote}
6393
6394\sphinxAtStartPar
6395Retrieve the remote sequence number from \sphinxstyleemphasis{auth\_context} and return it in \sphinxstyleemphasis{seqnumber} . The \#KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE flag must be set in \sphinxstyleemphasis{auth\_context} for this function to be useful.
6396
6397
6398\subsubsection{krb5\_auth\_con\_getsendsubkey \sphinxhyphen{}  Retrieve the send subkey from an auth context as a keyblock.}
6399\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)@\spxentry{krb5\_auth\_con\_getsendsubkey}\spxextra{C function}}
6400
6401\begin{fulllineitems}
6402\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getsendsubkey:c.krb5_auth_con_getsendsubkey}}%
6403\pysigstartmultiline
6404\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_getsendsubkey}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{keyblock}}{}%
6405\pysigstopmultiline
6406\end{fulllineitems}
6407
6408\begin{quote}\begin{description}
6409\item[{param}] \leavevmode
6410\sphinxAtStartPar
6411\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
6412
6413\sphinxAtStartPar
6414\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} \sphinxhyphen{} Authentication context
6415
6416\sphinxAtStartPar
6417\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keyblock} \sphinxhyphen{} Send subkey
6418
6419\end{description}\end{quote}
6420\begin{quote}\begin{description}
6421\item[{retval}] \leavevmode\begin{itemize}
6422\item {}
6423\sphinxAtStartPar
64240   Success; otherwise \sphinxhyphen{} Kerberos error codes
6425
6426\end{itemize}
6427
6428\end{description}\end{quote}
6429
6430\sphinxAtStartPar
6431This function creates a keyblock containing the send subkey from \sphinxstyleemphasis{auth\_context} . Use krb5\_free\_keyblock() to free \sphinxstyleemphasis{keyblock} when it is no longer needed.
6432
6433
6434\subsubsection{krb5\_auth\_con\_getsendsubkey\_k \sphinxhyphen{}  Retrieve the send subkey from an auth context.}
6435\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)@\spxentry{krb5\_auth\_con\_getsendsubkey\_k}\spxextra{C function}}
6436
6437\begin{fulllineitems}
6438\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getsendsubkey_k:c.krb5_auth_con_getsendsubkey_k}}%
6439\pysigstartmultiline
6440\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_getsendsubkey\_k}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{\DUrole{n}{krb5\_key}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}}{}%
6441\pysigstopmultiline
6442\end{fulllineitems}
6443
6444\begin{quote}\begin{description}
6445\item[{param}] \leavevmode
6446\sphinxAtStartPar
6447\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
6448
6449\sphinxAtStartPar
6450\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} \sphinxhyphen{} Authentication context
6451
6452\sphinxAtStartPar
6453\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} \sphinxhyphen{} Send subkey
6454
6455\end{description}\end{quote}
6456\begin{quote}\begin{description}
6457\item[{retval}] \leavevmode\begin{itemize}
6458\item {}
6459\sphinxAtStartPar
64600   Success; otherwise \sphinxhyphen{} Kerberos error codes
6461
6462\end{itemize}
6463
6464\end{description}\end{quote}
6465
6466\sphinxAtStartPar
6467This function sets \sphinxstyleemphasis{key} to the send subkey from \sphinxstyleemphasis{auth\_context} . Use krb5\_k\_free\_key() to release \sphinxstyleemphasis{key} when it is no longer needed.
6468
6469
6470\subsubsection{krb5\_auth\_con\_init \sphinxhyphen{}  Create and initialize an authentication context.}
6471\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)@\spxentry{krb5\_auth\_con\_init}\spxextra{C function}}
6472
6473\begin{fulllineitems}
6474\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_init:c.krb5_auth_con_init}}%
6475\pysigstartmultiline
6476\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_init}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{auth\_context}}{}%
6477\pysigstopmultiline
6478\end{fulllineitems}
6479
6480\begin{quote}\begin{description}
6481\item[{param}] \leavevmode
6482\sphinxAtStartPar
6483\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
6484
6485\sphinxAtStartPar
6486\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
6487
6488\end{description}\end{quote}
6489\begin{quote}\begin{description}
6490\item[{retval}] \leavevmode\begin{itemize}
6491\item {}
6492\sphinxAtStartPar
64930   Success; otherwise \sphinxhyphen{} Kerberos error codes
6494
6495\end{itemize}
6496
6497\end{description}\end{quote}
6498
6499\sphinxAtStartPar
6500This function creates an authentication context to hold configuration and state relevant to krb5 functions for authenticating principals and protecting messages once authentication has occurred.
6501
6502\sphinxAtStartPar
6503By default, flags for the context are set to enable the use of the replay cache (\#KRB5\_AUTH\_CONTEXT\_DO\_TIME), but not sequence numbers. Use krb5\_auth\_con\_setflags() to change the flags.
6504
6505\sphinxAtStartPar
6506The allocated \sphinxstyleemphasis{auth\_context} must be freed with krb5\_auth\_con\_free() when it is no longer needed.
6507
6508
6509\subsubsection{krb5\_auth\_con\_set\_checksum\_func \sphinxhyphen{}  Set a checksum callback in an auth context.}
6510\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)@\spxentry{krb5\_auth\_con\_set\_checksum\_func}\spxextra{C function}}
6511
6512\begin{fulllineitems}
6513\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_set_checksum_func:c.krb5_auth_con_set_checksum_func}}%
6514\pysigstartmultiline
6515\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_set\_checksum\_func}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_mk_req_checksum_func:c.krb5_mk_req_checksum_func}]{\sphinxcrossref{\DUrole{n}{krb5\_mk\_req\_checksum\_func}}}}\DUrole{w}{  }\DUrole{n}{func}, \DUrole{kt}{void}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}}{}%
6516\pysigstopmultiline
6517\end{fulllineitems}
6518
6519\begin{quote}\begin{description}
6520\item[{param}] \leavevmode
6521\sphinxAtStartPar
6522\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
6523
6524\sphinxAtStartPar
6525\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
6526
6527\sphinxAtStartPar
6528\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{func} \sphinxhyphen{} Checksum callback
6529
6530\sphinxAtStartPar
6531\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} \sphinxhyphen{} Callback argument
6532
6533\end{description}\end{quote}
6534\begin{quote}\begin{description}
6535\item[{retval}] \leavevmode\begin{itemize}
6536\item {}
6537\sphinxAtStartPar
65380   (always)
6539
6540\end{itemize}
6541
6542\end{description}\end{quote}
6543
6544\sphinxAtStartPar
6545Set a callback to obtain checksum data in krb5\_mk\_req(). The callback will be invoked after the subkey and local sequence number are stored in \sphinxstyleemphasis{auth\_context} .
6546
6547
6548\subsubsection{krb5\_auth\_con\_set\_req\_cksumtype \sphinxhyphen{}  Set checksum type in an an auth context.}
6549\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)@\spxentry{krb5\_auth\_con\_set\_req\_cksumtype}\spxextra{C function}}
6550
6551\begin{fulllineitems}
6552\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_set_req_cksumtype:c.krb5_auth_con_set_req_cksumtype}}%
6553\pysigstartmultiline
6554\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_set\_req\_cksumtype}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{\DUrole{n}{krb5\_cksumtype}}}}\DUrole{w}{  }\DUrole{n}{cksumtype}}{}%
6555\pysigstopmultiline
6556\end{fulllineitems}
6557
6558\begin{quote}\begin{description}
6559\item[{param}] \leavevmode
6560\sphinxAtStartPar
6561\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
6562
6563\sphinxAtStartPar
6564\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
6565
6566\sphinxAtStartPar
6567\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} \sphinxhyphen{} Checksum type
6568
6569\end{description}\end{quote}
6570\begin{quote}\begin{description}
6571\item[{retval}] \leavevmode\begin{itemize}
6572\item {}
6573\sphinxAtStartPar
65740   Success. Otherwise \sphinxhyphen{} Kerberos error codes
6575
6576\end{itemize}
6577
6578\end{description}\end{quote}
6579
6580\sphinxAtStartPar
6581This function sets the checksum type in \sphinxstyleemphasis{auth\_context} to be used by krb5\_mk\_req() for the authenticator checksum.
6582
6583
6584\subsubsection{krb5\_auth\_con\_setaddrs \sphinxhyphen{}  Set the local and remote addresses in an auth context.}
6585\label{\detokenize{appdev/refs/api/krb5_auth_con_setaddrs:krb5-auth-con-setaddrs-set-the-local-and-remote-addresses-in-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setaddrs::doc}}\index{krb5\_auth\_con\_setaddrs (C function)@\spxentry{krb5\_auth\_con\_setaddrs}\spxextra{C function}}
6586
6587\begin{fulllineitems}
6588\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setaddrs:c.krb5_auth_con_setaddrs}}%
6589\pysigstartmultiline
6590\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_setaddrs}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{local\_addr}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{remote\_addr}}{}%
6591\pysigstopmultiline
6592\end{fulllineitems}
6593
6594\begin{quote}\begin{description}
6595\item[{param}] \leavevmode
6596\sphinxAtStartPar
6597\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
6598
6599\sphinxAtStartPar
6600\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
6601
6602\sphinxAtStartPar
6603\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{local\_addr} \sphinxhyphen{} Local address
6604
6605\sphinxAtStartPar
6606\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{remote\_addr} \sphinxhyphen{} Remote address
6607
6608\end{description}\end{quote}
6609\begin{quote}\begin{description}
6610\item[{retval}] \leavevmode\begin{itemize}
6611\item {}
6612\sphinxAtStartPar
66130   Success; otherwise \sphinxhyphen{} Kerberos error codes
6614
6615\end{itemize}
6616
6617\end{description}\end{quote}
6618
6619\sphinxAtStartPar
6620This 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.
6621
6622
6623\sphinxstrong{See also:}
6624\nopagebreak
6625
6626
6627\sphinxAtStartPar
6628krb5\_auth\_con\_genaddrs()
6629
6630
6631
6632
6633\subsubsection{krb5\_auth\_con\_setflags \sphinxhyphen{}  Set a flags field in a krb5\_auth\_context structure.}
6634\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)@\spxentry{krb5\_auth\_con\_setflags}\spxextra{C function}}
6635
6636\begin{fulllineitems}
6637\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setflags:c.krb5_auth_con_setflags}}%
6638\pysigstartmultiline
6639\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_setflags}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\DUrole{n}{flags}}{}%
6640\pysigstopmultiline
6641\end{fulllineitems}
6642
6643\begin{quote}\begin{description}
6644\item[{param}] \leavevmode
6645\sphinxAtStartPar
6646\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
6647
6648\sphinxAtStartPar
6649\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
6650
6651\sphinxAtStartPar
6652\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} \sphinxhyphen{} Flags bit mask
6653
6654\end{description}\end{quote}
6655\begin{quote}\begin{description}
6656\item[{retval}] \leavevmode\begin{itemize}
6657\item {}
6658\sphinxAtStartPar
66590   (always)
6660
6661\end{itemize}
6662
6663\end{description}\end{quote}
6664
6665\sphinxAtStartPar
6666Valid values for \sphinxstyleemphasis{flags} are:
6667\begin{itemize}
6668\item {}
6669\sphinxAtStartPar
6670\#KRB5\_AUTH\_CONTEXT\_DO\_TIME Use timestamps
6671
6672\item {}
6673\sphinxAtStartPar
6674\#KRB5\_AUTH\_CONTEXT\_RET\_TIME Save timestamps
6675
6676\item {}
6677\sphinxAtStartPar
6678\#KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE Use sequence numbers
6679
6680\item {}
6681\sphinxAtStartPar
6682\#KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE Save sequence numbers
6683
6684\end{itemize}
6685
6686
6687\subsubsection{krb5\_auth\_con\_setports \sphinxhyphen{}  Set local and remote port fields in an auth context.}
6688\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)@\spxentry{krb5\_auth\_con\_setports}\spxextra{C function}}
6689
6690\begin{fulllineitems}
6691\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setports:c.krb5_auth_con_setports}}%
6692\pysigstartmultiline
6693\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_setports}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{local\_port}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{remote\_port}}{}%
6694\pysigstopmultiline
6695\end{fulllineitems}
6696
6697\begin{quote}\begin{description}
6698\item[{param}] \leavevmode
6699\sphinxAtStartPar
6700\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
6701
6702\sphinxAtStartPar
6703\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
6704
6705\sphinxAtStartPar
6706\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{local\_port} \sphinxhyphen{} Local port
6707
6708\sphinxAtStartPar
6709\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{remote\_port} \sphinxhyphen{} Remote port
6710
6711\end{description}\end{quote}
6712\begin{quote}\begin{description}
6713\item[{retval}] \leavevmode\begin{itemize}
6714\item {}
6715\sphinxAtStartPar
67160   Success; otherwise \sphinxhyphen{} Kerberos error codes
6717
6718\end{itemize}
6719
6720\end{description}\end{quote}
6721
6722\sphinxAtStartPar
6723This 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.
6724
6725
6726\sphinxstrong{See also:}
6727\nopagebreak
6728
6729
6730\sphinxAtStartPar
6731krb5\_auth\_con\_genaddrs()
6732
6733
6734
6735
6736\subsubsection{krb5\_auth\_con\_setrcache \sphinxhyphen{}  Set the replay cache in an auth context.}
6737\label{\detokenize{appdev/refs/api/krb5_auth_con_setrcache:krb5-auth-con-setrcache-set-the-replay-cache-in-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setrcache::doc}}\index{krb5\_auth\_con\_setrcache (C function)@\spxentry{krb5\_auth\_con\_setrcache}\spxextra{C function}}
6738
6739\begin{fulllineitems}
6740\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setrcache:c.krb5_auth_con_setrcache}}%
6741\pysigstartmultiline
6742\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_setrcache}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_rcache:c.krb5_rcache}]{\sphinxcrossref{\DUrole{n}{krb5\_rcache}}}}\DUrole{w}{  }\DUrole{n}{rcache}}{}%
6743\pysigstopmultiline
6744\end{fulllineitems}
6745
6746\begin{quote}\begin{description}
6747\item[{param}] \leavevmode
6748\sphinxAtStartPar
6749\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
6750
6751\sphinxAtStartPar
6752\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
6753
6754\sphinxAtStartPar
6755\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rcache} \sphinxhyphen{} Replay cache haddle
6756
6757\end{description}\end{quote}
6758\begin{quote}\begin{description}
6759\item[{retval}] \leavevmode\begin{itemize}
6760\item {}
6761\sphinxAtStartPar
67620   Success; otherwise \sphinxhyphen{} Kerberos error codes
6763
6764\end{itemize}
6765
6766\end{description}\end{quote}
6767
6768\sphinxAtStartPar
6769This 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.
6770
6771
6772\subsubsection{krb5\_auth\_con\_setrecvsubkey \sphinxhyphen{}  Set the receiving subkey in an auth context with a keyblock.}
6773\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)@\spxentry{krb5\_auth\_con\_setrecvsubkey}\spxextra{C function}}
6774
6775\begin{fulllineitems}
6776\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey:c.krb5_auth_con_setrecvsubkey}}%
6777\pysigstartmultiline
6778\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_setrecvsubkey}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{keyblock}}{}%
6779\pysigstopmultiline
6780\end{fulllineitems}
6781
6782\begin{quote}\begin{description}
6783\item[{param}] \leavevmode
6784\sphinxAtStartPar
6785\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
6786
6787\sphinxAtStartPar
6788\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} \sphinxhyphen{} Authentication context
6789
6790\sphinxAtStartPar
6791\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} \sphinxhyphen{} Receiving subkey
6792
6793\end{description}\end{quote}
6794\begin{quote}\begin{description}
6795\item[{retval}] \leavevmode\begin{itemize}
6796\item {}
6797\sphinxAtStartPar
67980   Success; otherwise \sphinxhyphen{} Kerberos error codes
6799
6800\end{itemize}
6801
6802\end{description}\end{quote}
6803
6804\sphinxAtStartPar
6805This function sets the receiving subkey in \sphinxstyleemphasis{ac} to a copy of \sphinxstyleemphasis{keyblock} .
6806
6807
6808\subsubsection{krb5\_auth\_con\_setrecvsubkey\_k \sphinxhyphen{}  Set the receiving subkey in an auth context.}
6809\label{\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey_k:krb5-auth-con-setrecvsubkey-k-set-the-receiving-subkey-in-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey_k::doc}}\index{krb5\_auth\_con\_setrecvsubkey\_k (C function)@\spxentry{krb5\_auth\_con\_setrecvsubkey\_k}\spxextra{C function}}
6810
6811\begin{fulllineitems}
6812\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey_k:c.krb5_auth_con_setrecvsubkey_k}}%
6813\pysigstartmultiline
6814\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_setrecvsubkey\_k}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{\DUrole{n}{krb5\_key}}}}\DUrole{w}{  }\DUrole{n}{key}}{}%
6815\pysigstopmultiline
6816\end{fulllineitems}
6817
6818\begin{quote}\begin{description}
6819\item[{param}] \leavevmode
6820\sphinxAtStartPar
6821\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
6822
6823\sphinxAtStartPar
6824\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} \sphinxhyphen{} Authentication context
6825
6826\sphinxAtStartPar
6827\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Receiving subkey
6828
6829\end{description}\end{quote}
6830\begin{quote}\begin{description}
6831\item[{retval}] \leavevmode\begin{itemize}
6832\item {}
6833\sphinxAtStartPar
68340   Success; otherwise \sphinxhyphen{} Kerberos error codes
6835
6836\end{itemize}
6837
6838\end{description}\end{quote}
6839
6840\sphinxAtStartPar
6841This function sets the receiving subkey in \sphinxstyleemphasis{ac} to \sphinxstyleemphasis{key} , incrementing its reference count.
6842
6843\begin{sphinxadmonition}{note}{Note:}
6844\sphinxAtStartPar
6845New in 1.9
6846\end{sphinxadmonition}
6847
6848
6849\subsubsection{krb5\_auth\_con\_setsendsubkey \sphinxhyphen{}  Set the send subkey in an auth context with a keyblock.}
6850\label{\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey:krb5-auth-con-setsendsubkey-set-the-send-subkey-in-an-auth-context-with-a-keyblock}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey::doc}}\index{krb5\_auth\_con\_setsendsubkey (C function)@\spxentry{krb5\_auth\_con\_setsendsubkey}\spxextra{C function}}
6851
6852\begin{fulllineitems}
6853\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey:c.krb5_auth_con_setsendsubkey}}%
6854\pysigstartmultiline
6855\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_setsendsubkey}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{keyblock}}{}%
6856\pysigstopmultiline
6857\end{fulllineitems}
6858
6859\begin{quote}\begin{description}
6860\item[{param}] \leavevmode
6861\sphinxAtStartPar
6862\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
6863
6864\sphinxAtStartPar
6865\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} \sphinxhyphen{} Authentication context
6866
6867\sphinxAtStartPar
6868\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} \sphinxhyphen{} Send subkey
6869
6870\end{description}\end{quote}
6871\begin{quote}\begin{description}
6872\item[{retval}] \leavevmode\begin{itemize}
6873\item {}
6874\sphinxAtStartPar
68750   Success. Otherwise \sphinxhyphen{} Kerberos error codes
6876
6877\end{itemize}
6878
6879\end{description}\end{quote}
6880
6881\sphinxAtStartPar
6882This function sets the send subkey in \sphinxstyleemphasis{ac} to a copy of \sphinxstyleemphasis{keyblock} .
6883
6884
6885\subsubsection{krb5\_auth\_con\_setsendsubkey\_k \sphinxhyphen{}  Set the send subkey in an auth context.}
6886\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)@\spxentry{krb5\_auth\_con\_setsendsubkey\_k}\spxextra{C function}}
6887
6888\begin{fulllineitems}
6889\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey_k:c.krb5_auth_con_setsendsubkey_k}}%
6890\pysigstartmultiline
6891\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_setsendsubkey\_k}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{\DUrole{n}{krb5\_key}}}}\DUrole{w}{  }\DUrole{n}{key}}{}%
6892\pysigstopmultiline
6893\end{fulllineitems}
6894
6895\begin{quote}\begin{description}
6896\item[{param}] \leavevmode
6897\sphinxAtStartPar
6898\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
6899
6900\sphinxAtStartPar
6901\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} \sphinxhyphen{} Authentication context
6902
6903\sphinxAtStartPar
6904\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} \sphinxhyphen{} Send subkey
6905
6906\end{description}\end{quote}
6907\begin{quote}\begin{description}
6908\item[{retval}] \leavevmode\begin{itemize}
6909\item {}
6910\sphinxAtStartPar
69110   Success; otherwise \sphinxhyphen{} Kerberos error codes
6912
6913\end{itemize}
6914
6915\end{description}\end{quote}
6916
6917\sphinxAtStartPar
6918This function sets the send subkey in \sphinxstyleemphasis{ac} to \sphinxstyleemphasis{key} , incrementing its reference count.
6919
6920\begin{sphinxadmonition}{note}{Note:}
6921\sphinxAtStartPar
6922New in 1.9
6923\end{sphinxadmonition}
6924
6925
6926\subsubsection{krb5\_auth\_con\_setuseruserkey \sphinxhyphen{}  Set the session key in an auth context.}
6927\label{\detokenize{appdev/refs/api/krb5_auth_con_setuseruserkey:krb5-auth-con-setuseruserkey-set-the-session-key-in-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setuseruserkey::doc}}\index{krb5\_auth\_con\_setuseruserkey (C function)@\spxentry{krb5\_auth\_con\_setuseruserkey}\spxextra{C function}}
6928
6929\begin{fulllineitems}
6930\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setuseruserkey:c.krb5_auth_con_setuseruserkey}}%
6931\pysigstartmultiline
6932\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_setuseruserkey}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{keyblock}}{}%
6933\pysigstopmultiline
6934\end{fulllineitems}
6935
6936\begin{quote}\begin{description}
6937\item[{param}] \leavevmode
6938\sphinxAtStartPar
6939\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
6940
6941\sphinxAtStartPar
6942\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
6943
6944\sphinxAtStartPar
6945\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} \sphinxhyphen{} User key
6946
6947\end{description}\end{quote}
6948\begin{quote}\begin{description}
6949\item[{retval}] \leavevmode\begin{itemize}
6950\item {}
6951\sphinxAtStartPar
69520   Success; otherwise \sphinxhyphen{} Kerberos error codes
6953
6954\end{itemize}
6955
6956\end{description}\end{quote}
6957
6958
6959\subsubsection{krb5\_cc\_cache\_match \sphinxhyphen{}  Find a credential cache with a specified client principal.}
6960\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)@\spxentry{krb5\_cc\_cache\_match}\spxextra{C function}}
6961
6962\begin{fulllineitems}
6963\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_cache_match:c.krb5_cc_cache_match}}%
6964\pysigstartmultiline
6965\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_cache\_match}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{client}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cache\_out}}{}%
6966\pysigstopmultiline
6967\end{fulllineitems}
6968
6969\begin{quote}\begin{description}
6970\item[{param}] \leavevmode
6971\sphinxAtStartPar
6972\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
6973
6974\sphinxAtStartPar
6975\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} \sphinxhyphen{} Client principal
6976
6977\sphinxAtStartPar
6978\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cache\_out} \sphinxhyphen{} Credential cache handle
6979
6980\end{description}\end{quote}
6981\begin{quote}\begin{description}
6982\item[{retval}] \leavevmode\begin{itemize}
6983\item {}
6984\sphinxAtStartPar
69850   Success
6986
6987\item {}
6988\sphinxAtStartPar
6989KRB5\_CC\_NOTFOUND   None
6990
6991\end{itemize}
6992
6993\end{description}\end{quote}
6994
6995\sphinxAtStartPar
6996Find 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.
6997
6998\begin{sphinxadmonition}{note}{Note:}
6999\sphinxAtStartPar
7000New in 1.10
7001\end{sphinxadmonition}
7002
7003
7004\subsubsection{krb5\_cc\_copy\_creds \sphinxhyphen{}  Copy a credential cache.}
7005\label{\detokenize{appdev/refs/api/krb5_cc_copy_creds:krb5-cc-copy-creds-copy-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_copy_creds::doc}}\index{krb5\_cc\_copy\_creds (C function)@\spxentry{krb5\_cc\_copy\_creds}\spxextra{C function}}
7006
7007\begin{fulllineitems}
7008\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_copy_creds:c.krb5_cc_copy_creds}}%
7009\pysigstartmultiline
7010\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_copy\_creds}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{incc}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{outcc}}{}%
7011\pysigstopmultiline
7012\end{fulllineitems}
7013
7014\begin{quote}\begin{description}
7015\item[{param}] \leavevmode
7016\sphinxAtStartPar
7017\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7018
7019\sphinxAtStartPar
7020\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{incc} \sphinxhyphen{} Credential cache to be copied
7021
7022\sphinxAtStartPar
7023\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outcc} \sphinxhyphen{} Copy of credential cache to be filled in
7024
7025\end{description}\end{quote}
7026\begin{quote}\begin{description}
7027\item[{retval}] \leavevmode\begin{itemize}
7028\item {}
7029\sphinxAtStartPar
70300   Success; otherwise \sphinxhyphen{} Kerberos error codes
7031
7032\end{itemize}
7033
7034\end{description}\end{quote}
7035
7036
7037\subsubsection{krb5\_cc\_end\_seq\_get \sphinxhyphen{}  Finish a series of sequential processing credential cache entries.}
7038\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)@\spxentry{krb5\_cc\_end\_seq\_get}\spxextra{C function}}
7039
7040\begin{fulllineitems}
7041\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_end_seq_get:c.krb5_cc_end_seq_get}}%
7042\pysigstartmultiline
7043\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_end\_seq\_get}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_cc_cursor:c.krb5_cc_cursor}]{\sphinxcrossref{\DUrole{n}{krb5\_cc\_cursor}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cursor}}{}%
7044\pysigstopmultiline
7045\end{fulllineitems}
7046
7047\begin{quote}\begin{description}
7048\item[{param}] \leavevmode
7049\sphinxAtStartPar
7050\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7051
7052\sphinxAtStartPar
7053\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} \sphinxhyphen{} Credential cache handle
7054
7055\sphinxAtStartPar
7056\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} \sphinxhyphen{} Cursor
7057
7058\end{description}\end{quote}
7059\begin{quote}\begin{description}
7060\item[{retval}] \leavevmode\begin{itemize}
7061\item {}
7062\sphinxAtStartPar
70630   (always)
7064
7065\end{itemize}
7066
7067\end{description}\end{quote}
7068
7069\sphinxAtStartPar
7070This function finishes processing credential cache entries and invalidates \sphinxstyleemphasis{cursor} .
7071
7072
7073\sphinxstrong{See also:}
7074\nopagebreak
7075
7076
7077\sphinxAtStartPar
7078krb5\_cc\_start\_seq\_get(), krb5\_cc\_next\_cred()
7079
7080
7081
7082
7083\subsubsection{krb5\_cc\_get\_config \sphinxhyphen{}  Get a configuration value from a credential cache.}
7084\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)@\spxentry{krb5\_cc\_get\_config}\spxextra{C function}}
7085
7086\begin{fulllineitems}
7087\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_get_config:c.krb5_cc_get_config}}%
7088\pysigstartmultiline
7089\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_get\_config}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{id}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{principal}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}}{}%
7090\pysigstopmultiline
7091\end{fulllineitems}
7092
7093\begin{quote}\begin{description}
7094\item[{param}] \leavevmode
7095\sphinxAtStartPar
7096\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7097
7098\sphinxAtStartPar
7099\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{id} \sphinxhyphen{} Credential cache handle
7100
7101\sphinxAtStartPar
7102\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} \sphinxhyphen{} Configuration for this principal; if NULL, global for the whole cache
7103
7104\sphinxAtStartPar
7105\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Name of config variable
7106
7107\sphinxAtStartPar
7108\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} \sphinxhyphen{} Data to be fetched
7109
7110\end{description}\end{quote}
7111\begin{quote}\begin{description}
7112\item[{retval}] \leavevmode\begin{itemize}
7113\item {}
7114\sphinxAtStartPar
71150   Success
7116
7117\end{itemize}
7118
7119\item[{return}] \leavevmode\begin{itemize}
7120\item {}
7121\sphinxAtStartPar
7122Kerberos error codes
7123
7124\end{itemize}
7125
7126\end{description}\end{quote}
7127
7128\sphinxAtStartPar
7129Use krb5\_free\_data\_contents() to free \sphinxstyleemphasis{data} when it is no longer needed.
7130
7131
7132\subsubsection{krb5\_cc\_get\_flags \sphinxhyphen{}  Retrieve flags from a credential cache structure.}
7133\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)@\spxentry{krb5\_cc\_get\_flags}\spxextra{C function}}
7134
7135\begin{fulllineitems}
7136\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_get_flags:c.krb5_cc_get_flags}}%
7137\pysigstartmultiline
7138\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_get\_flags}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{flags}}{}%
7139\pysigstopmultiline
7140\end{fulllineitems}
7141
7142\begin{quote}\begin{description}
7143\item[{param}] \leavevmode
7144\sphinxAtStartPar
7145\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7146
7147\sphinxAtStartPar
7148\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} \sphinxhyphen{} Credential cache handle
7149
7150\sphinxAtStartPar
7151\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{flags} \sphinxhyphen{} Flag bit mask
7152
7153\end{description}\end{quote}
7154\begin{quote}\begin{description}
7155\item[{retval}] \leavevmode\begin{itemize}
7156\item {}
7157\sphinxAtStartPar
71580   Success; otherwise \sphinxhyphen{} Kerberos error codes
7159
7160\end{itemize}
7161
7162\end{description}\end{quote}
7163
7164\begin{sphinxadmonition}{warning}{Warning:}
7165\sphinxAtStartPar
7166For memory credential cache always returns a flag mask of 0.
7167\end{sphinxadmonition}
7168
7169
7170\subsubsection{krb5\_cc\_get\_full\_name \sphinxhyphen{}  Retrieve the full name of a credential cache.}
7171\label{\detokenize{appdev/refs/api/krb5_cc_get_full_name:krb5-cc-get-full-name-retrieve-the-full-name-of-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_get_full_name::doc}}\index{krb5\_cc\_get\_full\_name (C function)@\spxentry{krb5\_cc\_get\_full\_name}\spxextra{C function}}
7172
7173\begin{fulllineitems}
7174\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_get_full_name:c.krb5_cc_get_full_name}}%
7175\pysigstartmultiline
7176\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_get\_full\_name}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{cache}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{fullname\_out}}{}%
7177\pysigstopmultiline
7178\end{fulllineitems}
7179
7180\begin{quote}\begin{description}
7181\item[{param}] \leavevmode
7182\sphinxAtStartPar
7183\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7184
7185\sphinxAtStartPar
7186\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} \sphinxhyphen{} Credential cache handle
7187
7188\sphinxAtStartPar
7189\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{fullname\_out} \sphinxhyphen{} Full name of cache
7190
7191\end{description}\end{quote}
7192
7193\sphinxAtStartPar
7194Use krb5\_free\_string() to free \sphinxstyleemphasis{fullname\_out} when it is no longer needed.
7195
7196\begin{sphinxadmonition}{note}{Note:}
7197\sphinxAtStartPar
7198New in 1.10
7199\end{sphinxadmonition}
7200
7201
7202\subsubsection{krb5\_cc\_move \sphinxhyphen{}  Move a credential cache.}
7203\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)@\spxentry{krb5\_cc\_move}\spxextra{C function}}
7204
7205\begin{fulllineitems}
7206\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_move:c.krb5_cc_move}}%
7207\pysigstartmultiline
7208\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_move}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{src}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{dst}}{}%
7209\pysigstopmultiline
7210\end{fulllineitems}
7211
7212\begin{quote}\begin{description}
7213\item[{param}] \leavevmode
7214\sphinxAtStartPar
7215\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7216
7217\sphinxAtStartPar
7218\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{src} \sphinxhyphen{} The credential cache to move the content from
7219
7220\sphinxAtStartPar
7221\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{dst} \sphinxhyphen{} The credential cache to move the content to
7222
7223\end{description}\end{quote}
7224\begin{quote}\begin{description}
7225\item[{retval}] \leavevmode\begin{itemize}
7226\item {}
7227\sphinxAtStartPar
72280   Success; src is closed.
7229
7230\end{itemize}
7231
7232\item[{return}] \leavevmode\begin{itemize}
7233\item {}
7234\sphinxAtStartPar
7235Kerberos error codes; src is still allocated.
7236
7237\end{itemize}
7238
7239\end{description}\end{quote}
7240
7241\sphinxAtStartPar
7242This function reinitializes \sphinxstyleemphasis{dst} and populates it with the credentials and default principal of \sphinxstyleemphasis{src} ; then, if successful, destroys \sphinxstyleemphasis{src} .
7243
7244
7245\subsubsection{krb5\_cc\_next\_cred \sphinxhyphen{}  Retrieve the next entry from the credential cache.}
7246\label{\detokenize{appdev/refs/api/krb5_cc_next_cred:krb5-cc-next-cred-retrieve-the-next-entry-from-the-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_next_cred::doc}}\index{krb5\_cc\_next\_cred (C function)@\spxentry{krb5\_cc\_next\_cred}\spxextra{C function}}
7247
7248\begin{fulllineitems}
7249\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_next_cred:c.krb5_cc_next_cred}}%
7250\pysigstartmultiline
7251\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_next\_cred}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_cc_cursor:c.krb5_cc_cursor}]{\sphinxcrossref{\DUrole{n}{krb5\_cc\_cursor}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cursor}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{creds}}{}%
7252\pysigstopmultiline
7253\end{fulllineitems}
7254
7255\begin{quote}\begin{description}
7256\item[{param}] \leavevmode
7257\sphinxAtStartPar
7258\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7259
7260\sphinxAtStartPar
7261\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} \sphinxhyphen{} Credential cache handle
7262
7263\sphinxAtStartPar
7264\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} \sphinxhyphen{} Cursor
7265
7266\sphinxAtStartPar
7267\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} \sphinxhyphen{} Next credential cache entry
7268
7269\end{description}\end{quote}
7270\begin{quote}\begin{description}
7271\item[{retval}] \leavevmode\begin{itemize}
7272\item {}
7273\sphinxAtStartPar
72740   Success; otherwise \sphinxhyphen{} Kerberos error codes
7275
7276\end{itemize}
7277
7278\end{description}\end{quote}
7279
7280\sphinxAtStartPar
7281This function fills in \sphinxstyleemphasis{creds} with the next entry in \sphinxstyleemphasis{cache} and advances \sphinxstyleemphasis{cursor} .
7282
7283\sphinxAtStartPar
7284Use krb5\_free\_cred\_contents() to free \sphinxstyleemphasis{creds} when it is no longer needed.
7285
7286
7287\sphinxstrong{See also:}
7288\nopagebreak
7289
7290
7291\sphinxAtStartPar
7292krb5\_cc\_start\_seq\_get(), krb5\_end\_seq\_get()
7293
7294
7295
7296
7297\subsubsection{krb5\_cc\_remove\_cred \sphinxhyphen{}  Remove credentials from a credential cache.}
7298\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)@\spxentry{krb5\_cc\_remove\_cred}\spxextra{C function}}
7299
7300\begin{fulllineitems}
7301\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_remove_cred:c.krb5_cc_remove_cred}}%
7302\pysigstartmultiline
7303\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_remove\_cred}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\DUrole{n}{flags}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{creds}}{}%
7304\pysigstopmultiline
7305\end{fulllineitems}
7306
7307\begin{quote}\begin{description}
7308\item[{param}] \leavevmode
7309\sphinxAtStartPar
7310\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7311
7312\sphinxAtStartPar
7313\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} \sphinxhyphen{} Credential cache handle
7314
7315\sphinxAtStartPar
7316\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} \sphinxhyphen{} Bitwise\sphinxhyphen{}ORed search flags
7317
7318\sphinxAtStartPar
7319\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} \sphinxhyphen{} Credentials to be matched
7320
7321\end{description}\end{quote}
7322\begin{quote}\begin{description}
7323\item[{retval}] \leavevmode\begin{itemize}
7324\item {}
7325\sphinxAtStartPar
7326KRB5\_CC\_NOSUPP   Not implemented for this cache type
7327
7328\end{itemize}
7329
7330\item[{return}] \leavevmode\begin{itemize}
7331\item {}
7332\sphinxAtStartPar
7333No matches found; Data cannot be deleted; Kerberos error codes
7334
7335\end{itemize}
7336
7337\end{description}\end{quote}
7338
7339\sphinxAtStartPar
7340This function accepts the same flag values as krb5\_cc\_retrieve\_cred().
7341
7342\begin{sphinxadmonition}{warning}{Warning:}
7343\sphinxAtStartPar
7344This function is not implemented for some cache types.
7345\end{sphinxadmonition}
7346
7347
7348\subsubsection{krb5\_cc\_retrieve\_cred \sphinxhyphen{}  Retrieve a specified credentials from a credential cache.}
7349\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)@\spxentry{krb5\_cc\_retrieve\_cred}\spxextra{C function}}
7350
7351\begin{fulllineitems}
7352\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_retrieve_cred:c.krb5_cc_retrieve_cred}}%
7353\pysigstartmultiline
7354\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_retrieve\_cred}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\DUrole{n}{flags}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{mcreds}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{creds}}{}%
7355\pysigstopmultiline
7356\end{fulllineitems}
7357
7358\begin{quote}\begin{description}
7359\item[{param}] \leavevmode
7360\sphinxAtStartPar
7361\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7362
7363\sphinxAtStartPar
7364\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} \sphinxhyphen{} Credential cache handle
7365
7366\sphinxAtStartPar
7367\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} \sphinxhyphen{} Flags bit mask
7368
7369\sphinxAtStartPar
7370\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{mcreds} \sphinxhyphen{} Credentials to match
7371
7372\sphinxAtStartPar
7373\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} \sphinxhyphen{} Credentials matching the requested value
7374
7375\end{description}\end{quote}
7376\begin{quote}\begin{description}
7377\item[{retval}] \leavevmode\begin{itemize}
7378\item {}
7379\sphinxAtStartPar
73800   Success; otherwise \sphinxhyphen{} Kerberos error codes
7381
7382\end{itemize}
7383
7384\end{description}\end{quote}
7385
7386\sphinxAtStartPar
7387This function searches a credential cache for credentials matching \sphinxstyleemphasis{mcreds} and returns it if found.
7388
7389\sphinxAtStartPar
7390Valid values for \sphinxstyleemphasis{flags} are:
7391\begin{quote}
7392\begin{itemize}
7393\item {}
7394\sphinxAtStartPar
7395\#KRB5\_TC\_MATCH\_TIMES The requested lifetime must be at least as great as in \sphinxstyleemphasis{mcreds} .
7396
7397\item {}
7398\sphinxAtStartPar
7399\#KRB5\_TC\_MATCH\_IS\_SKEY The \sphinxstyleemphasis{is\_skey} field much match exactly.
7400
7401\item {}
7402\sphinxAtStartPar
7403\#KRB5\_TC\_MATCH\_FLAGS Flags set in \sphinxstyleemphasis{mcreds} must be set.
7404
7405\item {}
7406\sphinxAtStartPar
7407\#KRB5\_TC\_MATCH\_TIMES\_EXACT The requested lifetime must match exactly.
7408
7409\item {}
7410\sphinxAtStartPar
7411\#KRB5\_TC\_MATCH\_FLAGS\_EXACT Flags must match exactly.
7412
7413\item {}
7414\sphinxAtStartPar
7415\#KRB5\_TC\_MATCH\_AUTHDATA The authorization data must match.
7416
7417\item {}
7418\sphinxAtStartPar
7419\#KRB5\_TC\_MATCH\_SRV\_NAMEONLY Only the name portion of the principal name must match, not the realm.
7420
7421\item {}
7422\sphinxAtStartPar
7423\#KRB5\_TC\_MATCH\_2ND\_TKT The second tickets must match.
7424
7425\item {}
7426\sphinxAtStartPar
7427\#KRB5\_TC\_MATCH\_KTYPE The encryption key types must match.
7428
7429\item {}
7430\sphinxAtStartPar
7431\#KRB5\_TC\_SUPPORTED\_KTYPES Check all matching entries that have any supported encryption type and return the one with the encryption type listed earliest.
7432
7433\end{itemize}
7434
7435\sphinxAtStartPar
7436Use krb5\_free\_cred\_contents() to free \sphinxstyleemphasis{creds} when it is no longer needed.
7437\end{quote}
7438
7439
7440\subsubsection{krb5\_cc\_select \sphinxhyphen{}  Select a credential cache to use with a server principal.}
7441\label{\detokenize{appdev/refs/api/krb5_cc_select:krb5-cc-select-select-a-credential-cache-to-use-with-a-server-principal}}\label{\detokenize{appdev/refs/api/krb5_cc_select::doc}}\index{krb5\_cc\_select (C function)@\spxentry{krb5\_cc\_select}\spxextra{C function}}
7442
7443\begin{fulllineitems}
7444\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_select:c.krb5_cc_select}}%
7445\pysigstartmultiline
7446\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_select}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{server}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cache\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{princ\_out}}{}%
7447\pysigstopmultiline
7448\end{fulllineitems}
7449
7450\begin{quote}\begin{description}
7451\item[{param}] \leavevmode
7452\sphinxAtStartPar
7453\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7454
7455\sphinxAtStartPar
7456\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} \sphinxhyphen{} Server principal
7457
7458\sphinxAtStartPar
7459\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cache\_out} \sphinxhyphen{} Credential cache handle
7460
7461\sphinxAtStartPar
7462\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ\_out} \sphinxhyphen{} Client principal
7463
7464\end{description}\end{quote}
7465\begin{quote}\begin{description}
7466\item[{return}] \leavevmode\begin{itemize}
7467\item {}
7468\sphinxAtStartPar
7469If 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.
7470
7471\end{itemize}
7472
7473\end{description}\end{quote}
7474
7475\sphinxAtStartPar
7476Select a cache within the collection containing credentials most appropriate for use with \sphinxstyleemphasis{server} , according to configured rules and heuristics.
7477
7478\sphinxAtStartPar
7479Use krb5\_cc\_close() to release \sphinxstyleemphasis{cache\_out} when it is no longer needed. Use 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.
7480
7481\sphinxAtStartPar
7482If 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.
7483
7484\sphinxAtStartPar
7485If 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.
7486
7487\sphinxAtStartPar
7488Any other error code indicates a fatal error in the processing of a cache selection mechanism.
7489
7490\begin{sphinxadmonition}{note}{Note:}
7491\sphinxAtStartPar
7492New in 1.10
7493\end{sphinxadmonition}
7494
7495
7496\subsubsection{krb5\_cc\_set\_config \sphinxhyphen{}  Store a configuration value in a credential cache.}
7497\label{\detokenize{appdev/refs/api/krb5_cc_set_config:krb5-cc-set-config-store-a-configuration-value-in-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_set_config::doc}}\index{krb5\_cc\_set\_config (C function)@\spxentry{krb5\_cc\_set\_config}\spxextra{C function}}
7498
7499\begin{fulllineitems}
7500\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_set_config:c.krb5_cc_set_config}}%
7501\pysigstartmultiline
7502\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_set\_config}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{id}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{principal}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}}{}%
7503\pysigstopmultiline
7504\end{fulllineitems}
7505
7506\begin{quote}\begin{description}
7507\item[{param}] \leavevmode
7508\sphinxAtStartPar
7509\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7510
7511\sphinxAtStartPar
7512\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{id} \sphinxhyphen{} Credential cache handle
7513
7514\sphinxAtStartPar
7515\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} \sphinxhyphen{} Configuration for a specific principal; if NULL, global for the whole cache
7516
7517\sphinxAtStartPar
7518\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Name of config variable
7519
7520\sphinxAtStartPar
7521\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} \sphinxhyphen{} Data to store, or NULL to remove
7522
7523\end{description}\end{quote}
7524\begin{quote}\begin{description}
7525\item[{retval}] \leavevmode\begin{itemize}
7526\item {}
7527\sphinxAtStartPar
75280   Success
7529
7530\end{itemize}
7531
7532\item[{return}] \leavevmode\begin{itemize}
7533\item {}
7534\sphinxAtStartPar
7535Kerberos error codes
7536
7537\end{itemize}
7538
7539\end{description}\end{quote}
7540
7541\begin{sphinxadmonition}{warning}{Warning:}
7542\sphinxAtStartPar
7543Before version 1.10 \sphinxstyleemphasis{data} was assumed to be always non\sphinxhyphen{}null.
7544\end{sphinxadmonition}
7545
7546\begin{sphinxadmonition}{note}{Note:}
7547\sphinxAtStartPar
7548Existing configuration under the same key is over\sphinxhyphen{}written.
7549\end{sphinxadmonition}
7550
7551
7552\subsubsection{krb5\_cc\_set\_default\_name \sphinxhyphen{}  Set the default credential cache name.}
7553\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)@\spxentry{krb5\_cc\_set\_default\_name}\spxextra{C function}}
7554
7555\begin{fulllineitems}
7556\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_set_default_name:c.krb5_cc_set_default_name}}%
7557\pysigstartmultiline
7558\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_set\_default\_name}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{name}}{}%
7559\pysigstopmultiline
7560\end{fulllineitems}
7561
7562\begin{quote}\begin{description}
7563\item[{param}] \leavevmode
7564\sphinxAtStartPar
7565\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7566
7567\sphinxAtStartPar
7568\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} \sphinxhyphen{} Default credential cache name or NULL
7569
7570\end{description}\end{quote}
7571\begin{quote}\begin{description}
7572\item[{retval}] \leavevmode\begin{itemize}
7573\item {}
7574\sphinxAtStartPar
75750   Success
7576
7577\item {}
7578\sphinxAtStartPar
7579KV5M\_CONTEXT   Bad magic number for \_krb5\_context structure
7580
7581\end{itemize}
7582
7583\item[{return}] \leavevmode\begin{itemize}
7584\item {}
7585\sphinxAtStartPar
7586Kerberos error codes
7587
7588\end{itemize}
7589
7590\end{description}\end{quote}
7591
7592\sphinxAtStartPar
7593Set the default credential cache name to \sphinxstyleemphasis{name} for future operations using \sphinxstyleemphasis{context} . If \sphinxstyleemphasis{name} is NULL, clear any previous application\sphinxhyphen{}set default name and forget any cached value of the default name for \sphinxstyleemphasis{context} .
7594
7595\sphinxAtStartPar
7596Calls to this function invalidate the result of any previous calls to krb5\_cc\_default\_name() using \sphinxstyleemphasis{context} .
7597
7598
7599\subsubsection{krb5\_cc\_set\_flags \sphinxhyphen{}  Set options flags on a credential cache.}
7600\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)@\spxentry{krb5\_cc\_set\_flags}\spxextra{C function}}
7601
7602\begin{fulllineitems}
7603\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_set_flags:c.krb5_cc_set_flags}}%
7604\pysigstartmultiline
7605\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_set\_flags}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\DUrole{n}{flags}}{}%
7606\pysigstopmultiline
7607\end{fulllineitems}
7608
7609\begin{quote}\begin{description}
7610\item[{param}] \leavevmode
7611\sphinxAtStartPar
7612\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7613
7614\sphinxAtStartPar
7615\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} \sphinxhyphen{} Credential cache handle
7616
7617\sphinxAtStartPar
7618\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} \sphinxhyphen{} Flag bit mask
7619
7620\end{description}\end{quote}
7621\begin{quote}\begin{description}
7622\item[{retval}] \leavevmode\begin{itemize}
7623\item {}
7624\sphinxAtStartPar
76250   Success; otherwise \sphinxhyphen{} Kerberos error codes
7626
7627\end{itemize}
7628
7629\end{description}\end{quote}
7630
7631\sphinxAtStartPar
7632This function resets \sphinxstyleemphasis{cache} flags to \sphinxstyleemphasis{flags} .
7633
7634
7635\subsubsection{krb5\_cc\_start\_seq\_get \sphinxhyphen{}  Prepare to sequentially read every credential in a credential cache.}
7636\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}}\label{\detokenize{appdev/refs/api/krb5_cc_start_seq_get::doc}}\index{krb5\_cc\_start\_seq\_get (C function)@\spxentry{krb5\_cc\_start\_seq\_get}\spxextra{C function}}
7637
7638\begin{fulllineitems}
7639\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_start_seq_get:c.krb5_cc_start_seq_get}}%
7640\pysigstartmultiline
7641\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_start\_seq\_get}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_cc_cursor:c.krb5_cc_cursor}]{\sphinxcrossref{\DUrole{n}{krb5\_cc\_cursor}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cursor}}{}%
7642\pysigstopmultiline
7643\end{fulllineitems}
7644
7645\begin{quote}\begin{description}
7646\item[{param}] \leavevmode
7647\sphinxAtStartPar
7648\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7649
7650\sphinxAtStartPar
7651\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} \sphinxhyphen{} Credential cache handle
7652
7653\sphinxAtStartPar
7654\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cursor} \sphinxhyphen{} Cursor
7655
7656\end{description}\end{quote}
7657\begin{quote}\begin{description}
7658\item[{retval}] \leavevmode\begin{itemize}
7659\item {}
7660\sphinxAtStartPar
76610   Success; otherwise \sphinxhyphen{} Kerberos error codes
7662
7663\end{itemize}
7664
7665\end{description}\end{quote}
7666
7667\sphinxAtStartPar
7668krb5\_cc\_end\_seq\_get() must be called to complete the retrieve operation.
7669
7670\begin{sphinxadmonition}{note}{Note:}
7671\sphinxAtStartPar
7672If the cache represented by \sphinxstyleemphasis{cache} is modified between the time of the call to this function and the time of the final krb5\_cc\_end\_seq\_get(), these changes may not be reflected in the results of krb5\_cc\_next\_cred() calls.
7673\end{sphinxadmonition}
7674
7675
7676\subsubsection{krb5\_cc\_store\_cred \sphinxhyphen{}  Store credentials in a credential cache.}
7677\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)@\spxentry{krb5\_cc\_store\_cred}\spxextra{C function}}
7678
7679\begin{fulllineitems}
7680\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_store_cred:c.krb5_cc_store_cred}}%
7681\pysigstartmultiline
7682\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_store\_cred}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{creds}}{}%
7683\pysigstopmultiline
7684\end{fulllineitems}
7685
7686\begin{quote}\begin{description}
7687\item[{param}] \leavevmode
7688\sphinxAtStartPar
7689\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7690
7691\sphinxAtStartPar
7692\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} \sphinxhyphen{} Credential cache handle
7693
7694\sphinxAtStartPar
7695\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} \sphinxhyphen{} Credentials to be stored in cache
7696
7697\end{description}\end{quote}
7698\begin{quote}\begin{description}
7699\item[{retval}] \leavevmode\begin{itemize}
7700\item {}
7701\sphinxAtStartPar
77020   Success
7703
7704\end{itemize}
7705
7706\item[{return}] \leavevmode\begin{itemize}
7707\item {}
7708\sphinxAtStartPar
7709Permission errors; storage failure errors; Kerberos error codes
7710
7711\end{itemize}
7712
7713\end{description}\end{quote}
7714
7715\sphinxAtStartPar
7716This function stores \sphinxstyleemphasis{creds} into \sphinxstyleemphasis{cache} . If \sphinxstyleemphasis{creds\sphinxhyphen{}\textgreater{}server} and the server in the decoded ticket \sphinxstyleemphasis{creds\sphinxhyphen{}\textgreater{}ticket} differ, the credentials will be stored under both server principal names.
7717
7718
7719\subsubsection{krb5\_cc\_support\_switch \sphinxhyphen{}  Determine whether a credential cache type supports switching.}
7720\label{\detokenize{appdev/refs/api/krb5_cc_support_switch:krb5-cc-support-switch-determine-whether-a-credential-cache-type-supports-switching}}\label{\detokenize{appdev/refs/api/krb5_cc_support_switch::doc}}\index{krb5\_cc\_support\_switch (C function)@\spxentry{krb5\_cc\_support\_switch}\spxextra{C function}}
7721
7722\begin{fulllineitems}
7723\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_support_switch:c.krb5_cc_support_switch}}%
7724\pysigstartmultiline
7725\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_support\_switch}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{type}}{}%
7726\pysigstopmultiline
7727\end{fulllineitems}
7728
7729\begin{quote}\begin{description}
7730\item[{param}] \leavevmode
7731\sphinxAtStartPar
7732\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7733
7734\sphinxAtStartPar
7735\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} \sphinxhyphen{} Credential cache type
7736
7737\end{description}\end{quote}
7738\begin{quote}\begin{description}
7739\item[{retval}] \leavevmode\begin{itemize}
7740\item {}
7741\sphinxAtStartPar
7742TRUE   if type supports switching
7743
7744\item {}
7745\sphinxAtStartPar
7746FALSE   if it does not or is not a valid credential cache type.
7747
7748\end{itemize}
7749
7750\end{description}\end{quote}
7751
7752\begin{sphinxadmonition}{note}{Note:}
7753\sphinxAtStartPar
7754New in 1.10
7755\end{sphinxadmonition}
7756
7757
7758\subsubsection{krb5\_cc\_switch \sphinxhyphen{}  Make a credential cache the primary cache for its collection.}
7759\label{\detokenize{appdev/refs/api/krb5_cc_switch:krb5-cc-switch-make-a-credential-cache-the-primary-cache-for-its-collection}}\label{\detokenize{appdev/refs/api/krb5_cc_switch::doc}}\index{krb5\_cc\_switch (C function)@\spxentry{krb5\_cc\_switch}\spxextra{C function}}
7760
7761\begin{fulllineitems}
7762\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_switch:c.krb5_cc_switch}}%
7763\pysigstartmultiline
7764\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_switch}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{cache}}{}%
7765\pysigstopmultiline
7766\end{fulllineitems}
7767
7768\begin{quote}\begin{description}
7769\item[{param}] \leavevmode
7770\sphinxAtStartPar
7771\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7772
7773\sphinxAtStartPar
7774\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} \sphinxhyphen{} Credential cache handle
7775
7776\end{description}\end{quote}
7777\begin{quote}\begin{description}
7778\item[{retval}] \leavevmode\begin{itemize}
7779\item {}
7780\sphinxAtStartPar
77810   Success, or the type of cache doesn’t support switching
7782
7783\end{itemize}
7784
7785\item[{return}] \leavevmode\begin{itemize}
7786\item {}
7787\sphinxAtStartPar
7788Kerberos error codes
7789
7790\end{itemize}
7791
7792\end{description}\end{quote}
7793
7794\sphinxAtStartPar
7795If the type of \sphinxstyleemphasis{cache} supports it, set \sphinxstyleemphasis{cache} to be the primary credential cache for the collection it belongs to.
7796
7797
7798\subsubsection{krb5\_cccol\_cursor\_free \sphinxhyphen{}  Free a credential cache collection cursor.}
7799\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_free:krb5-cccol-cursor-free-free-a-credential-cache-collection-cursor}}\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_free::doc}}\index{krb5\_cccol\_cursor\_free (C function)@\spxentry{krb5\_cccol\_cursor\_free}\spxextra{C function}}
7800
7801\begin{fulllineitems}
7802\phantomsection\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_free:c.krb5_cccol_cursor_free}}%
7803\pysigstartmultiline
7804\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cccol\_cursor\_free}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cccol_cursor:c.krb5_cccol_cursor}]{\sphinxcrossref{\DUrole{n}{krb5\_cccol\_cursor}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cursor}}{}%
7805\pysigstopmultiline
7806\end{fulllineitems}
7807
7808\begin{quote}\begin{description}
7809\item[{param}] \leavevmode
7810\sphinxAtStartPar
7811\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7812
7813\sphinxAtStartPar
7814\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} \sphinxhyphen{} Cursor
7815
7816\end{description}\end{quote}
7817\begin{quote}\begin{description}
7818\item[{retval}] \leavevmode\begin{itemize}
7819\item {}
7820\sphinxAtStartPar
78210   Success; otherwise \sphinxhyphen{} Kerberos error codes
7822
7823\end{itemize}
7824
7825\end{description}\end{quote}
7826
7827
7828\sphinxstrong{See also:}
7829\nopagebreak
7830
7831
7832\sphinxAtStartPar
7833krb5\_cccol\_cursor\_new(), krb5\_cccol\_cursor\_next()
7834
7835
7836
7837
7838\subsubsection{krb5\_cccol\_cursor\_new \sphinxhyphen{}  Prepare to iterate over the collection of known credential caches.}
7839\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_new:krb5-cccol-cursor-new-prepare-to-iterate-over-the-collection-of-known-credential-caches}}\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_new::doc}}\index{krb5\_cccol\_cursor\_new (C function)@\spxentry{krb5\_cccol\_cursor\_new}\spxextra{C function}}
7840
7841\begin{fulllineitems}
7842\phantomsection\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_new:c.krb5_cccol_cursor_new}}%
7843\pysigstartmultiline
7844\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cccol\_cursor\_new}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cccol_cursor:c.krb5_cccol_cursor}]{\sphinxcrossref{\DUrole{n}{krb5\_cccol\_cursor}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cursor}}{}%
7845\pysigstopmultiline
7846\end{fulllineitems}
7847
7848\begin{quote}\begin{description}
7849\item[{param}] \leavevmode
7850\sphinxAtStartPar
7851\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7852
7853\sphinxAtStartPar
7854\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cursor} \sphinxhyphen{} Cursor
7855
7856\end{description}\end{quote}
7857\begin{quote}\begin{description}
7858\item[{retval}] \leavevmode\begin{itemize}
7859\item {}
7860\sphinxAtStartPar
78610   Success; otherwise \sphinxhyphen{} Kerberos error codes
7862
7863\end{itemize}
7864
7865\end{description}\end{quote}
7866
7867\sphinxAtStartPar
7868Get a new cache iteration \sphinxstyleemphasis{cursor} that will iterate over all known credential caches independent of type.
7869
7870\sphinxAtStartPar
7871Use krb5\_cccol\_cursor\_free() to release \sphinxstyleemphasis{cursor} when it is no longer needed.
7872
7873
7874\sphinxstrong{See also:}
7875\nopagebreak
7876
7877
7878\sphinxAtStartPar
7879krb5\_cccol\_cursor\_next()
7880
7881
7882
7883
7884\subsubsection{krb5\_cccol\_cursor\_next \sphinxhyphen{}  Get the next credential cache in the collection.}
7885\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_next:krb5-cccol-cursor-next-get-the-next-credential-cache-in-the-collection}}\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_next::doc}}\index{krb5\_cccol\_cursor\_next (C function)@\spxentry{krb5\_cccol\_cursor\_next}\spxextra{C function}}
7886
7887\begin{fulllineitems}
7888\phantomsection\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_next:c.krb5_cccol_cursor_next}}%
7889\pysigstartmultiline
7890\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cccol\_cursor\_next}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cccol_cursor:c.krb5_cccol_cursor}]{\sphinxcrossref{\DUrole{n}{krb5\_cccol\_cursor}}}}\DUrole{w}{  }\DUrole{n}{cursor}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ccache}}{}%
7891\pysigstopmultiline
7892\end{fulllineitems}
7893
7894\begin{quote}\begin{description}
7895\item[{param}] \leavevmode
7896\sphinxAtStartPar
7897\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7898
7899\sphinxAtStartPar
7900\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} \sphinxhyphen{} Cursor
7901
7902\sphinxAtStartPar
7903\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ccache} \sphinxhyphen{} Credential cache handle
7904
7905\end{description}\end{quote}
7906\begin{quote}\begin{description}
7907\item[{retval}] \leavevmode\begin{itemize}
7908\item {}
7909\sphinxAtStartPar
79100   Success; otherwise \sphinxhyphen{} Kerberos error codes
7911
7912\end{itemize}
7913
7914\end{description}\end{quote}
7915
7916\sphinxAtStartPar
7917Use krb5\_cc\_close() to close \sphinxstyleemphasis{ccache} when it is no longer needed.
7918
7919
7920\sphinxstrong{See also:}
7921\nopagebreak
7922
7923
7924\sphinxAtStartPar
7925krb5\_cccol\_cursor\_new(), krb5\_cccol\_cursor\_free()
7926
7927
7928
7929\begin{sphinxadmonition}{note}{Note:}
7930\sphinxAtStartPar
7931When all caches are iterated over and the end of the list is reached, \sphinxstyleemphasis{ccache} is set to NULL.
7932\end{sphinxadmonition}
7933
7934
7935\subsubsection{krb5\_cccol\_have\_content \sphinxhyphen{}  Check if the credential cache collection contains any initialized caches.}
7936\label{\detokenize{appdev/refs/api/krb5_cccol_have_content:krb5-cccol-have-content-check-if-the-credential-cache-collection-contains-any-initialized-caches}}\label{\detokenize{appdev/refs/api/krb5_cccol_have_content::doc}}\index{krb5\_cccol\_have\_content (C function)@\spxentry{krb5\_cccol\_have\_content}\spxextra{C function}}
7937
7938\begin{fulllineitems}
7939\phantomsection\label{\detokenize{appdev/refs/api/krb5_cccol_have_content:c.krb5_cccol_have_content}}%
7940\pysigstartmultiline
7941\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cccol\_have\_content}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}}{}%
7942\pysigstopmultiline
7943\end{fulllineitems}
7944
7945\begin{quote}\begin{description}
7946\item[{param}] \leavevmode
7947\sphinxAtStartPar
7948\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
7949
7950\end{description}\end{quote}
7951\begin{quote}\begin{description}
7952\item[{retval}] \leavevmode\begin{itemize}
7953\item {}
7954\sphinxAtStartPar
79550   At least one initialized cache is present in the collection
7956
7957\item {}
7958\sphinxAtStartPar
7959KRB5\_CC\_NOTFOUND   The collection contains no caches
7960
7961\end{itemize}
7962
7963\end{description}\end{quote}
7964
7965\begin{sphinxadmonition}{note}{Note:}
7966\sphinxAtStartPar
7967New in 1.11
7968\end{sphinxadmonition}
7969
7970
7971\subsubsection{krb5\_clear\_error\_message \sphinxhyphen{}  Clear the extended error message in a context.}
7972\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)@\spxentry{krb5\_clear\_error\_message}\spxextra{C function}}
7973
7974\begin{fulllineitems}
7975\phantomsection\label{\detokenize{appdev/refs/api/krb5_clear_error_message:c.krb5_clear_error_message}}%
7976\pysigstartmultiline
7977\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_clear\_error\_message}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}}{}%
7978\pysigstopmultiline
7979\end{fulllineitems}
7980
7981\begin{quote}\begin{description}
7982\item[{param}] \leavevmode
7983\sphinxAtStartPar
7984\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
7985
7986\end{description}\end{quote}
7987
7988\sphinxAtStartPar
7989This 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.
7990
7991
7992\subsubsection{krb5\_check\_clockskew \sphinxhyphen{}  Check if a timestamp is within the allowed clock skew of the current time.}
7993\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)@\spxentry{krb5\_check\_clockskew}\spxextra{C function}}
7994
7995\begin{fulllineitems}
7996\phantomsection\label{\detokenize{appdev/refs/api/krb5_check_clockskew:c.krb5_check_clockskew}}%
7997\pysigstartmultiline
7998\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_check\_clockskew}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\DUrole{n}{date}}{}%
7999\pysigstopmultiline
8000\end{fulllineitems}
8001
8002\begin{quote}\begin{description}
8003\item[{param}] \leavevmode
8004\sphinxAtStartPar
8005\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8006
8007\sphinxAtStartPar
8008\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{date} \sphinxhyphen{} Timestamp to check
8009
8010\end{description}\end{quote}
8011\begin{quote}\begin{description}
8012\item[{retval}] \leavevmode\begin{itemize}
8013\item {}
8014\sphinxAtStartPar
80150   Success
8016
8017\item {}
8018\sphinxAtStartPar
8019KRB5KRB\_AP\_ERR\_SKEW    date is not within allowable clock skew
8020
8021\end{itemize}
8022
8023\end{description}\end{quote}
8024
8025\sphinxAtStartPar
8026This function checks if \sphinxstyleemphasis{date} is close enough to the current time according to the configured allowable clock skew.
8027
8028\begin{sphinxadmonition}{note}{Note:}
8029\sphinxAtStartPar
8030New in 1.10
8031\end{sphinxadmonition}
8032
8033
8034\subsubsection{krb5\_copy\_addresses \sphinxhyphen{}  Copy an array of addresses.}
8035\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)@\spxentry{krb5\_copy\_addresses}\spxextra{C function}}
8036
8037\begin{fulllineitems}
8038\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_addresses:c.krb5_copy_addresses}}%
8039\pysigstartmultiline
8040\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_copy\_addresses}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{k}{const}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{inaddr}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{outaddr}}{}%
8041\pysigstopmultiline
8042\end{fulllineitems}
8043
8044\begin{quote}\begin{description}
8045\item[{param}] \leavevmode
8046\sphinxAtStartPar
8047\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8048
8049\sphinxAtStartPar
8050\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inaddr} \sphinxhyphen{} Array of addresses to be copied
8051
8052\sphinxAtStartPar
8053\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outaddr} \sphinxhyphen{} Copy of array of addresses
8054
8055\end{description}\end{quote}
8056\begin{quote}\begin{description}
8057\item[{retval}] \leavevmode\begin{itemize}
8058\item {}
8059\sphinxAtStartPar
80600   Success; otherwise \sphinxhyphen{} Kerberos error codes
8061
8062\end{itemize}
8063
8064\end{description}\end{quote}
8065
8066\sphinxAtStartPar
8067This function creates a new address array containing a copy of \sphinxstyleemphasis{inaddr} . Use krb5\_free\_addresses() to free \sphinxstyleemphasis{outaddr} when it is no longer needed.
8068
8069
8070\subsubsection{krb5\_copy\_authdata \sphinxhyphen{}  Copy an authorization data list.}
8071\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)@\spxentry{krb5\_copy\_authdata}\spxextra{C function}}
8072
8073\begin{fulllineitems}
8074\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_authdata:c.krb5_copy_authdata}}%
8075\pysigstartmultiline
8076\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_copy\_authdata}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{k}{const}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{in\_authdat}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{out}}{}%
8077\pysigstopmultiline
8078\end{fulllineitems}
8079
8080\begin{quote}\begin{description}
8081\item[{param}] \leavevmode
8082\sphinxAtStartPar
8083\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8084
8085\sphinxAtStartPar
8086\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_authdat} \sphinxhyphen{} List of \sphinxstyleemphasis{krb5\_authdata} structures
8087
8088\sphinxAtStartPar
8089\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} \sphinxhyphen{} New array of \sphinxstyleemphasis{krb5\_authdata} structures
8090
8091\end{description}\end{quote}
8092\begin{quote}\begin{description}
8093\item[{retval}] \leavevmode\begin{itemize}
8094\item {}
8095\sphinxAtStartPar
80960   Success; otherwise \sphinxhyphen{} Kerberos error codes
8097
8098\end{itemize}
8099
8100\end{description}\end{quote}
8101
8102\sphinxAtStartPar
8103This function creates a new authorization data list containing a copy of \sphinxstyleemphasis{in\_authdat} , which must be null\sphinxhyphen{}terminated. Use krb5\_free\_authdata() to free \sphinxstyleemphasis{out} when it is no longer needed.
8104
8105\begin{sphinxadmonition}{note}{Note:}
8106\sphinxAtStartPar
8107The last array entry in \sphinxstyleemphasis{in\_authdat} must be a NULL pointer.
8108\end{sphinxadmonition}
8109
8110
8111\subsubsection{krb5\_copy\_authenticator \sphinxhyphen{}  Copy a krb5\_authenticator structure.}
8112\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)@\spxentry{krb5\_copy\_authenticator}\spxextra{C function}}
8113
8114\begin{fulllineitems}
8115\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_authenticator:c.krb5_copy_authenticator}}%
8116\pysigstartmultiline
8117\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_copy\_authenticator}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{\DUrole{n}{krb5\_authenticator}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{authfrom}, {\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{\DUrole{n}{krb5\_authenticator}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{authto}}{}%
8118\pysigstopmultiline
8119\end{fulllineitems}
8120
8121\begin{quote}\begin{description}
8122\item[{param}] \leavevmode
8123\sphinxAtStartPar
8124\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8125
8126\sphinxAtStartPar
8127\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authfrom} \sphinxhyphen{} krb5\_authenticator structure to be copied
8128
8129\sphinxAtStartPar
8130\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{authto} \sphinxhyphen{} Copy of krb5\_authenticator structure
8131
8132\end{description}\end{quote}
8133\begin{quote}\begin{description}
8134\item[{retval}] \leavevmode\begin{itemize}
8135\item {}
8136\sphinxAtStartPar
81370   Success; otherwise \sphinxhyphen{} Kerberos error codes
8138
8139\end{itemize}
8140
8141\end{description}\end{quote}
8142
8143\sphinxAtStartPar
8144This function creates a new krb5\_authenticator structure with the content of \sphinxstyleemphasis{authfrom} . Use krb5\_free\_authenticator() to free \sphinxstyleemphasis{authto} when it is no longer needed.
8145
8146
8147\subsubsection{krb5\_copy\_checksum \sphinxhyphen{}  Copy a krb5\_checksum structure.}
8148\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)@\spxentry{krb5\_copy\_checksum}\spxextra{C function}}
8149
8150\begin{fulllineitems}
8151\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_checksum:c.krb5_copy_checksum}}%
8152\pysigstartmultiline
8153\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_copy\_checksum}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{\DUrole{n}{krb5\_checksum}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ckfrom}, {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{\DUrole{n}{krb5\_checksum}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{ckto}}{}%
8154\pysigstopmultiline
8155\end{fulllineitems}
8156
8157\begin{quote}\begin{description}
8158\item[{param}] \leavevmode
8159\sphinxAtStartPar
8160\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8161
8162\sphinxAtStartPar
8163\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ckfrom} \sphinxhyphen{} Checksum to be copied
8164
8165\sphinxAtStartPar
8166\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ckto} \sphinxhyphen{} Copy of krb5\_checksum structure
8167
8168\end{description}\end{quote}
8169\begin{quote}\begin{description}
8170\item[{retval}] \leavevmode\begin{itemize}
8171\item {}
8172\sphinxAtStartPar
81730   Success; otherwise \sphinxhyphen{} Kerberos error codes
8174
8175\end{itemize}
8176
8177\end{description}\end{quote}
8178
8179\sphinxAtStartPar
8180This function creates a new krb5\_checksum structure with the contents of \sphinxstyleemphasis{ckfrom} . Use krb5\_free\_checksum() to free \sphinxstyleemphasis{ckto} when it is no longer needed.
8181
8182
8183\subsubsection{krb5\_copy\_context \sphinxhyphen{}  Copy a krb5\_context structure.}
8184\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)@\spxentry{krb5\_copy\_context}\spxextra{C function}}
8185
8186\begin{fulllineitems}
8187\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_context:c.krb5_copy_context}}%
8188\pysigstartmultiline
8189\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_copy\_context}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{nctx\_out}}{}%
8190\pysigstopmultiline
8191\end{fulllineitems}
8192
8193\begin{quote}\begin{description}
8194\item[{param}] \leavevmode
8195\sphinxAtStartPar
8196\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
8197
8198\sphinxAtStartPar
8199\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{nctx\_out} \sphinxhyphen{} New context structure
8200
8201\end{description}\end{quote}
8202\begin{quote}\begin{description}
8203\item[{retval}] \leavevmode\begin{itemize}
8204\item {}
8205\sphinxAtStartPar
82060   Success
8207
8208\end{itemize}
8209
8210\item[{return}] \leavevmode\begin{itemize}
8211\item {}
8212\sphinxAtStartPar
8213Kerberos error codes
8214
8215\end{itemize}
8216
8217\end{description}\end{quote}
8218
8219\sphinxAtStartPar
8220The newly created context must be released by calling krb5\_free\_context() when it is no longer needed.
8221
8222
8223\subsubsection{krb5\_copy\_creds \sphinxhyphen{}  Copy a krb5\_creds structure.}
8224\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)@\spxentry{krb5\_copy\_creds}\spxextra{C function}}
8225
8226\begin{fulllineitems}
8227\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_creds:c.krb5_copy_creds}}%
8228\pysigstartmultiline
8229\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_copy\_creds}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{incred}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{outcred}}{}%
8230\pysigstopmultiline
8231\end{fulllineitems}
8232
8233\begin{quote}\begin{description}
8234\item[{param}] \leavevmode
8235\sphinxAtStartPar
8236\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8237
8238\sphinxAtStartPar
8239\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{incred} \sphinxhyphen{} Credentials structure to be copied
8240
8241\sphinxAtStartPar
8242\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outcred} \sphinxhyphen{} Copy of \sphinxstyleemphasis{incred}
8243
8244\end{description}\end{quote}
8245\begin{quote}\begin{description}
8246\item[{retval}] \leavevmode\begin{itemize}
8247\item {}
8248\sphinxAtStartPar
82490   Success; otherwise \sphinxhyphen{} Kerberos error codes
8250
8251\end{itemize}
8252
8253\end{description}\end{quote}
8254
8255\sphinxAtStartPar
8256This function creates a new credential with the contents of \sphinxstyleemphasis{incred} . Use krb5\_free\_creds() to free \sphinxstyleemphasis{outcred} when it is no longer needed.
8257
8258
8259\subsubsection{krb5\_copy\_data \sphinxhyphen{}  Copy a krb5\_data object.}
8260\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)@\spxentry{krb5\_copy\_data}\spxextra{C function}}
8261
8262\begin{fulllineitems}
8263\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_data:c.krb5_copy_data}}%
8264\pysigstartmultiline
8265\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_copy\_data}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{indata}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{outdata}}{}%
8266\pysigstopmultiline
8267\end{fulllineitems}
8268
8269\begin{quote}\begin{description}
8270\item[{param}] \leavevmode
8271\sphinxAtStartPar
8272\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8273
8274\sphinxAtStartPar
8275\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{indata} \sphinxhyphen{} Data object to be copied
8276
8277\sphinxAtStartPar
8278\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outdata} \sphinxhyphen{} Copy of \sphinxstyleemphasis{indata}
8279
8280\end{description}\end{quote}
8281\begin{quote}\begin{description}
8282\item[{retval}] \leavevmode\begin{itemize}
8283\item {}
8284\sphinxAtStartPar
82850   Success; otherwise \sphinxhyphen{} Kerberos error codes
8286
8287\end{itemize}
8288
8289\end{description}\end{quote}
8290
8291\sphinxAtStartPar
8292This function creates a new krb5\_data object with the contents of \sphinxstyleemphasis{indata} . Use krb5\_free\_data() to free \sphinxstyleemphasis{outdata} when it is no longer needed.
8293
8294
8295\subsubsection{krb5\_copy\_error\_message \sphinxhyphen{}  Copy the most recent extended error message from one context to another.}
8296\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)@\spxentry{krb5\_copy\_error\_message}\spxextra{C function}}
8297
8298\begin{fulllineitems}
8299\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_error_message:c.krb5_copy_error_message}}%
8300\pysigstartmultiline
8301\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_copy\_error\_message}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{dest\_ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{src\_ctx}}{}%
8302\pysigstopmultiline
8303\end{fulllineitems}
8304
8305\begin{quote}\begin{description}
8306\item[{param}] \leavevmode
8307\sphinxAtStartPar
8308\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{dest\_ctx} \sphinxhyphen{} Library context to copy message to
8309
8310\sphinxAtStartPar
8311\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{src\_ctx} \sphinxhyphen{} Library context with current message
8312
8313\end{description}\end{quote}
8314
8315
8316\subsubsection{krb5\_copy\_keyblock \sphinxhyphen{}  Copy a keyblock.}
8317\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)@\spxentry{krb5\_copy\_keyblock}\spxextra{C function}}
8318
8319\begin{fulllineitems}
8320\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_keyblock:c.krb5_copy_keyblock}}%
8321\pysigstartmultiline
8322\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_copy\_keyblock}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{from}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{to}}{}%
8323\pysigstopmultiline
8324\end{fulllineitems}
8325
8326\begin{quote}\begin{description}
8327\item[{param}] \leavevmode
8328\sphinxAtStartPar
8329\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8330
8331\sphinxAtStartPar
8332\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{from} \sphinxhyphen{} Keyblock to be copied
8333
8334\sphinxAtStartPar
8335\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{to} \sphinxhyphen{} Copy of keyblock \sphinxstyleemphasis{from}
8336
8337\end{description}\end{quote}
8338\begin{quote}\begin{description}
8339\item[{retval}] \leavevmode\begin{itemize}
8340\item {}
8341\sphinxAtStartPar
83420   Success; otherwise \sphinxhyphen{} Kerberos error codes
8343
8344\end{itemize}
8345
8346\end{description}\end{quote}
8347
8348\sphinxAtStartPar
8349This function creates a new keyblock with the same contents as \sphinxstyleemphasis{from} . Use krb5\_free\_keyblock() to free \sphinxstyleemphasis{to} when it is no longer needed.
8350
8351
8352\subsubsection{krb5\_copy\_keyblock\_contents \sphinxhyphen{}  Copy the contents of a keyblock.}
8353\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)@\spxentry{krb5\_copy\_keyblock\_contents}\spxextra{C function}}
8354
8355\begin{fulllineitems}
8356\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_keyblock_contents:c.krb5_copy_keyblock_contents}}%
8357\pysigstartmultiline
8358\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_copy\_keyblock\_contents}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{from}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{to}}{}%
8359\pysigstopmultiline
8360\end{fulllineitems}
8361
8362\begin{quote}\begin{description}
8363\item[{param}] \leavevmode
8364\sphinxAtStartPar
8365\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8366
8367\sphinxAtStartPar
8368\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{from} \sphinxhyphen{} Key to be copied
8369
8370\sphinxAtStartPar
8371\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{to} \sphinxhyphen{} Output key
8372
8373\end{description}\end{quote}
8374\begin{quote}\begin{description}
8375\item[{retval}] \leavevmode\begin{itemize}
8376\item {}
8377\sphinxAtStartPar
83780   Success; otherwise \sphinxhyphen{} Kerberos error codes
8379
8380\end{itemize}
8381
8382\end{description}\end{quote}
8383
8384\sphinxAtStartPar
8385This function copies the contents of \sphinxstyleemphasis{from} to \sphinxstyleemphasis{to} . Use krb5\_free\_keyblock\_contents() to free \sphinxstyleemphasis{to} when it is no longer needed.
8386
8387
8388\subsubsection{krb5\_copy\_principal \sphinxhyphen{}  Copy a principal.}
8389\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)@\spxentry{krb5\_copy\_principal}\spxextra{C function}}
8390
8391\begin{fulllineitems}
8392\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_principal:c.krb5_copy_principal}}%
8393\pysigstartmultiline
8394\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_copy\_principal}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{inprinc}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{outprinc}}{}%
8395\pysigstopmultiline
8396\end{fulllineitems}
8397
8398\begin{quote}\begin{description}
8399\item[{param}] \leavevmode
8400\sphinxAtStartPar
8401\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8402
8403\sphinxAtStartPar
8404\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inprinc} \sphinxhyphen{} Principal to be copied
8405
8406\sphinxAtStartPar
8407\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outprinc} \sphinxhyphen{} Copy of \sphinxstyleemphasis{inprinc}
8408
8409\end{description}\end{quote}
8410\begin{quote}\begin{description}
8411\item[{retval}] \leavevmode\begin{itemize}
8412\item {}
8413\sphinxAtStartPar
84140   Success; otherwise \sphinxhyphen{} Kerberos error codes
8415
8416\end{itemize}
8417
8418\end{description}\end{quote}
8419
8420\sphinxAtStartPar
8421This function creates a new principal structure with the contents of \sphinxstyleemphasis{inprinc} . Use krb5\_free\_principal() to free \sphinxstyleemphasis{outprinc} when it is no longer needed.
8422
8423
8424\subsubsection{krb5\_copy\_ticket \sphinxhyphen{}  Copy a krb5\_ticket structure.}
8425\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)@\spxentry{krb5\_copy\_ticket}\spxextra{C function}}
8426
8427\begin{fulllineitems}
8428\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_ticket:c.krb5_copy_ticket}}%
8429\pysigstartmultiline
8430\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_copy\_ticket}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{from}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{pto}}{}%
8431\pysigstopmultiline
8432\end{fulllineitems}
8433
8434\begin{quote}\begin{description}
8435\item[{param}] \leavevmode
8436\sphinxAtStartPar
8437\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8438
8439\sphinxAtStartPar
8440\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{from} \sphinxhyphen{} Ticket to be copied
8441
8442\sphinxAtStartPar
8443\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{pto} \sphinxhyphen{} Copy of ticket
8444
8445\end{description}\end{quote}
8446\begin{quote}\begin{description}
8447\item[{retval}] \leavevmode\begin{itemize}
8448\item {}
8449\sphinxAtStartPar
84500   Success; otherwise \sphinxhyphen{} Kerberos error codes
8451
8452\end{itemize}
8453
8454\end{description}\end{quote}
8455
8456\sphinxAtStartPar
8457This function creates a new krb5\_ticket structure containing the contents of \sphinxstyleemphasis{from} . Use krb5\_free\_ticket() to free \sphinxstyleemphasis{pto} when it is no longer needed.
8458
8459
8460\subsubsection{krb5\_find\_authdata \sphinxhyphen{}  Find authorization data elements.}
8461\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)@\spxentry{krb5\_find\_authdata}\spxextra{C function}}
8462
8463\begin{fulllineitems}
8464\phantomsection\label{\detokenize{appdev/refs/api/krb5_find_authdata:c.krb5_find_authdata}}%
8465\pysigstartmultiline
8466\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_find\_authdata}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{k}{const}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ticket\_authdata}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{k}{const}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ap\_req\_authdata}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdatatype:c.krb5_authdatatype}]{\sphinxcrossref{\DUrole{n}{krb5\_authdatatype}}}}\DUrole{w}{  }\DUrole{n}{ad\_type}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{results}}{}%
8467\pysigstopmultiline
8468\end{fulllineitems}
8469
8470\begin{quote}\begin{description}
8471\item[{param}] \leavevmode
8472\sphinxAtStartPar
8473\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8474
8475\sphinxAtStartPar
8476\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ticket\_authdata} \sphinxhyphen{} Authorization data list from ticket
8477
8478\sphinxAtStartPar
8479\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_authdata} \sphinxhyphen{} Authorization data list from AP request
8480
8481\sphinxAtStartPar
8482\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ad\_type} \sphinxhyphen{} Authorization data type to find
8483
8484\sphinxAtStartPar
8485\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{results} \sphinxhyphen{} List of matching entries
8486
8487\end{description}\end{quote}
8488
8489\sphinxAtStartPar
8490This 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\sphinxhyphen{}IF\sphinxhyphen{}RELEVANT containers if found in either list. Use krb5\_free\_authdata() to free \sphinxstyleemphasis{results} when it is no longer needed.
8491
8492\begin{sphinxadmonition}{note}{Note:}
8493\sphinxAtStartPar
8494New in 1.10
8495\end{sphinxadmonition}
8496
8497
8498\subsubsection{krb5\_free\_addresses \sphinxhyphen{}  Free the data stored in array of addresses.}
8499\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)@\spxentry{krb5\_free\_addresses}\spxextra{C function}}
8500
8501\begin{fulllineitems}
8502\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_addresses:c.krb5_free_addresses}}%
8503\pysigstartmultiline
8504\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_addresses}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{val}}{}%
8505\pysigstopmultiline
8506\end{fulllineitems}
8507
8508\begin{quote}\begin{description}
8509\item[{param}] \leavevmode
8510\sphinxAtStartPar
8511\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8512
8513\sphinxAtStartPar
8514\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} \sphinxhyphen{} Array of addresses to be freed
8515
8516\end{description}\end{quote}
8517
8518\sphinxAtStartPar
8519This function frees the contents of \sphinxstyleemphasis{val} and the array itself.
8520
8521\begin{sphinxadmonition}{note}{Note:}
8522\sphinxAtStartPar
8523The last entry in the array must be a NULL pointer.
8524\end{sphinxadmonition}
8525
8526
8527\subsubsection{krb5\_free\_ap\_rep\_enc\_part \sphinxhyphen{}  Free a krb5\_ap\_rep\_enc\_part structure.}
8528\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)@\spxentry{krb5\_free\_ap\_rep\_enc\_part}\spxextra{C function}}
8529
8530\begin{fulllineitems}
8531\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_ap_rep_enc_part:c.krb5_free_ap_rep_enc_part}}%
8532\pysigstartmultiline
8533\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_ap\_rep\_enc\_part}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part}]{\sphinxcrossref{\DUrole{n}{krb5\_ap\_rep\_enc\_part}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{val}}{}%
8534\pysigstopmultiline
8535\end{fulllineitems}
8536
8537\begin{quote}\begin{description}
8538\item[{param}] \leavevmode
8539\sphinxAtStartPar
8540\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8541
8542\sphinxAtStartPar
8543\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} \sphinxhyphen{} AP\sphinxhyphen{}REP enc part to be freed
8544
8545\end{description}\end{quote}
8546
8547\sphinxAtStartPar
8548This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
8549
8550
8551\subsubsection{krb5\_free\_authdata \sphinxhyphen{}  Free the storage assigned to array of authentication data.}
8552\label{\detokenize{appdev/refs/api/krb5_free_authdata:krb5-free-authdata-free-the-storage-assigned-to-array-of-authentication-data}}\label{\detokenize{appdev/refs/api/krb5_free_authdata::doc}}\index{krb5\_free\_authdata (C function)@\spxentry{krb5\_free\_authdata}\spxextra{C function}}
8553
8554\begin{fulllineitems}
8555\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_authdata:c.krb5_free_authdata}}%
8556\pysigstartmultiline
8557\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_authdata}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{val}}{}%
8558\pysigstopmultiline
8559\end{fulllineitems}
8560
8561\begin{quote}\begin{description}
8562\item[{param}] \leavevmode
8563\sphinxAtStartPar
8564\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8565
8566\sphinxAtStartPar
8567\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} \sphinxhyphen{} Array of authentication data to be freed
8568
8569\end{description}\end{quote}
8570
8571\sphinxAtStartPar
8572This function frees the contents of \sphinxstyleemphasis{val} and the array itself.
8573
8574\begin{sphinxadmonition}{note}{Note:}
8575\sphinxAtStartPar
8576The last entry in the array must be a NULL pointer.
8577\end{sphinxadmonition}
8578
8579
8580\subsubsection{krb5\_free\_authenticator \sphinxhyphen{}  Free a krb5\_authenticator structure.}
8581\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)@\spxentry{krb5\_free\_authenticator}\spxextra{C function}}
8582
8583\begin{fulllineitems}
8584\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_authenticator:c.krb5_free_authenticator}}%
8585\pysigstartmultiline
8586\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_authenticator}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{\DUrole{n}{krb5\_authenticator}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{val}}{}%
8587\pysigstopmultiline
8588\end{fulllineitems}
8589
8590\begin{quote}\begin{description}
8591\item[{param}] \leavevmode
8592\sphinxAtStartPar
8593\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8594
8595\sphinxAtStartPar
8596\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} \sphinxhyphen{} Authenticator structure to be freed
8597
8598\end{description}\end{quote}
8599
8600\sphinxAtStartPar
8601This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
8602
8603
8604\subsubsection{krb5\_free\_cred\_contents \sphinxhyphen{}  Free the contents of a krb5\_creds structure.}
8605\label{\detokenize{appdev/refs/api/krb5_free_cred_contents:krb5-free-cred-contents-free-the-contents-of-a-krb5-creds-structure}}\label{\detokenize{appdev/refs/api/krb5_free_cred_contents::doc}}\index{krb5\_free\_cred\_contents (C function)@\spxentry{krb5\_free\_cred\_contents}\spxextra{C function}}
8606
8607\begin{fulllineitems}
8608\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_cred_contents:c.krb5_free_cred_contents}}%
8609\pysigstartmultiline
8610\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_cred\_contents}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{val}}{}%
8611\pysigstopmultiline
8612\end{fulllineitems}
8613
8614\begin{quote}\begin{description}
8615\item[{param}] \leavevmode
8616\sphinxAtStartPar
8617\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8618
8619\sphinxAtStartPar
8620\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} \sphinxhyphen{} Credential structure to free contents of
8621
8622\end{description}\end{quote}
8623
8624\sphinxAtStartPar
8625This function frees the contents of \sphinxstyleemphasis{val} , but not the structure itself.
8626
8627
8628\subsubsection{krb5\_free\_creds \sphinxhyphen{}  Free a krb5\_creds structure.}
8629\label{\detokenize{appdev/refs/api/krb5_free_creds:krb5-free-creds-free-a-krb5-creds-structure}}\label{\detokenize{appdev/refs/api/krb5_free_creds::doc}}\index{krb5\_free\_creds (C function)@\spxentry{krb5\_free\_creds}\spxextra{C function}}
8630
8631\begin{fulllineitems}
8632\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_creds:c.krb5_free_creds}}%
8633\pysigstartmultiline
8634\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_creds}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{val}}{}%
8635\pysigstopmultiline
8636\end{fulllineitems}
8637
8638\begin{quote}\begin{description}
8639\item[{param}] \leavevmode
8640\sphinxAtStartPar
8641\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8642
8643\sphinxAtStartPar
8644\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} \sphinxhyphen{} Credential structure to be freed.
8645
8646\end{description}\end{quote}
8647
8648\sphinxAtStartPar
8649This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
8650
8651
8652\subsubsection{krb5\_free\_data \sphinxhyphen{}  Free a krb5\_data structure.}
8653\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)@\spxentry{krb5\_free\_data}\spxextra{C function}}
8654
8655\begin{fulllineitems}
8656\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_data:c.krb5_free_data}}%
8657\pysigstartmultiline
8658\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_data}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{val}}{}%
8659\pysigstopmultiline
8660\end{fulllineitems}
8661
8662\begin{quote}\begin{description}
8663\item[{param}] \leavevmode
8664\sphinxAtStartPar
8665\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8666
8667\sphinxAtStartPar
8668\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} \sphinxhyphen{} Data structure to be freed
8669
8670\end{description}\end{quote}
8671
8672\sphinxAtStartPar
8673This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
8674
8675
8676\subsubsection{krb5\_free\_data\_contents \sphinxhyphen{}  Free the contents of a krb5\_data structure and zero the data field.}
8677\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)@\spxentry{krb5\_free\_data\_contents}\spxextra{C function}}
8678
8679\begin{fulllineitems}
8680\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}}%
8681\pysigstartmultiline
8682\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_data\_contents}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{val}}{}%
8683\pysigstopmultiline
8684\end{fulllineitems}
8685
8686\begin{quote}\begin{description}
8687\item[{param}] \leavevmode
8688\sphinxAtStartPar
8689\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8690
8691\sphinxAtStartPar
8692\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} \sphinxhyphen{} Data structure to free contents of
8693
8694\end{description}\end{quote}
8695
8696\sphinxAtStartPar
8697This 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.
8698
8699
8700\subsubsection{krb5\_free\_default\_realm \sphinxhyphen{}  Free a default realm string returned by krb5\_get\_default\_realm().}
8701\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)@\spxentry{krb5\_free\_default\_realm}\spxextra{C function}}
8702
8703\begin{fulllineitems}
8704\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_default_realm:c.krb5_free_default_realm}}%
8705\pysigstartmultiline
8706\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_default\_realm}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{lrealm}}{}%
8707\pysigstopmultiline
8708\end{fulllineitems}
8709
8710\begin{quote}\begin{description}
8711\item[{param}] \leavevmode
8712\sphinxAtStartPar
8713\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8714
8715\sphinxAtStartPar
8716\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{lrealm} \sphinxhyphen{} Realm to be freed
8717
8718\end{description}\end{quote}
8719
8720
8721\subsubsection{krb5\_free\_enctypes \sphinxhyphen{}  Free an array of encryption types.}
8722\label{\detokenize{appdev/refs/api/krb5_free_enctypes:krb5-free-enctypes-free-an-array-of-encryption-types}}\label{\detokenize{appdev/refs/api/krb5_free_enctypes::doc}}\index{krb5\_free\_enctypes (C function)@\spxentry{krb5\_free\_enctypes}\spxextra{C function}}
8723
8724\begin{fulllineitems}
8725\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_enctypes:c.krb5_free_enctypes}}%
8726\pysigstartmultiline
8727\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_enctypes}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{val}}{}%
8728\pysigstopmultiline
8729\end{fulllineitems}
8730
8731\begin{quote}\begin{description}
8732\item[{param}] \leavevmode
8733\sphinxAtStartPar
8734\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8735
8736\sphinxAtStartPar
8737\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} \sphinxhyphen{} Array of enctypes to be freed
8738
8739\end{description}\end{quote}
8740
8741\begin{sphinxadmonition}{note}{Note:}
8742\sphinxAtStartPar
8743New in 1.12
8744\end{sphinxadmonition}
8745
8746
8747\subsubsection{krb5\_free\_error \sphinxhyphen{}  Free an error allocated by krb5\_read\_error() or krb5\_sendauth().}
8748\label{\detokenize{appdev/refs/api/krb5_free_error:krb5-free-error-free-an-error-allocated-by-krb5-read-error-or-krb5-sendauth}}\label{\detokenize{appdev/refs/api/krb5_free_error::doc}}\index{krb5\_free\_error (C function)@\spxentry{krb5\_free\_error}\spxextra{C function}}
8749
8750\begin{fulllineitems}
8751\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_error:c.krb5_free_error}}%
8752\pysigstartmultiline
8753\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_error}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{\DUrole{n}{krb5\_error}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{val}}{}%
8754\pysigstopmultiline
8755\end{fulllineitems}
8756
8757\begin{quote}\begin{description}
8758\item[{param}] \leavevmode
8759\sphinxAtStartPar
8760\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8761
8762\sphinxAtStartPar
8763\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} \sphinxhyphen{} Error data structure to be freed
8764
8765\end{description}\end{quote}
8766
8767\sphinxAtStartPar
8768This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
8769
8770
8771\subsubsection{krb5\_free\_host\_realm \sphinxhyphen{}  Free the memory allocated by krb5\_get\_host\_realm().}
8772\label{\detokenize{appdev/refs/api/krb5_free_host_realm:krb5-free-host-realm-free-the-memory-allocated-by-krb5-get-host-realm}}\label{\detokenize{appdev/refs/api/krb5_free_host_realm::doc}}\index{krb5\_free\_host\_realm (C function)@\spxentry{krb5\_free\_host\_realm}\spxextra{C function}}
8773
8774\begin{fulllineitems}
8775\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_host_realm:c.krb5_free_host_realm}}%
8776\pysigstartmultiline
8777\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_host\_realm}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{k}{const}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{realmlist}}{}%
8778\pysigstopmultiline
8779\end{fulllineitems}
8780
8781\begin{quote}\begin{description}
8782\item[{param}] \leavevmode
8783\sphinxAtStartPar
8784\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8785
8786\sphinxAtStartPar
8787\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realmlist} \sphinxhyphen{} List of realm names to be released
8788
8789\end{description}\end{quote}
8790\begin{quote}\begin{description}
8791\item[{retval}] \leavevmode\begin{itemize}
8792\item {}
8793\sphinxAtStartPar
87940   Success
8795
8796\end{itemize}
8797
8798\item[{return}] \leavevmode\begin{itemize}
8799\item {}
8800\sphinxAtStartPar
8801Kerberos error codes
8802
8803\end{itemize}
8804
8805\end{description}\end{quote}
8806
8807
8808\subsubsection{krb5\_free\_keyblock \sphinxhyphen{}  Free a krb5\_keyblock structure.}
8809\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)@\spxentry{krb5\_free\_keyblock}\spxextra{C function}}
8810
8811\begin{fulllineitems}
8812\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_keyblock:c.krb5_free_keyblock}}%
8813\pysigstartmultiline
8814\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_keyblock}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{val}}{}%
8815\pysigstopmultiline
8816\end{fulllineitems}
8817
8818\begin{quote}\begin{description}
8819\item[{param}] \leavevmode
8820\sphinxAtStartPar
8821\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8822
8823\sphinxAtStartPar
8824\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} \sphinxhyphen{} Keyblock to be freed
8825
8826\end{description}\end{quote}
8827
8828\sphinxAtStartPar
8829This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
8830
8831
8832\subsubsection{krb5\_free\_keyblock\_contents \sphinxhyphen{}  Free the contents of a krb5\_keyblock structure.}
8833\label{\detokenize{appdev/refs/api/krb5_free_keyblock_contents:krb5-free-keyblock-contents-free-the-contents-of-a-krb5-keyblock-structure}}\label{\detokenize{appdev/refs/api/krb5_free_keyblock_contents::doc}}\index{krb5\_free\_keyblock\_contents (C function)@\spxentry{krb5\_free\_keyblock\_contents}\spxextra{C function}}
8834
8835\begin{fulllineitems}
8836\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_keyblock_contents:c.krb5_free_keyblock_contents}}%
8837\pysigstartmultiline
8838\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_keyblock\_contents}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}}{}%
8839\pysigstopmultiline
8840\end{fulllineitems}
8841
8842\begin{quote}\begin{description}
8843\item[{param}] \leavevmode
8844\sphinxAtStartPar
8845\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8846
8847\sphinxAtStartPar
8848\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Keyblock to be freed
8849
8850\end{description}\end{quote}
8851
8852\sphinxAtStartPar
8853This function frees the contents of \sphinxstyleemphasis{key} , but not the structure itself.
8854
8855
8856\subsubsection{krb5\_free\_keytab\_entry\_contents \sphinxhyphen{}  Free the contents of a key table entry.}
8857\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)@\spxentry{krb5\_free\_keytab\_entry\_contents}\spxextra{C function}}
8858
8859\begin{fulllineitems}
8860\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_keytab_entry_contents:c.krb5_free_keytab_entry_contents}}%
8861\pysigstartmultiline
8862\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_keytab\_entry\_contents}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab\_entry}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{entry}}{}%
8863\pysigstopmultiline
8864\end{fulllineitems}
8865
8866\begin{quote}\begin{description}
8867\item[{param}] \leavevmode
8868\sphinxAtStartPar
8869\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8870
8871\sphinxAtStartPar
8872\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{entry} \sphinxhyphen{} Key table entry whose contents are to be freed
8873
8874\end{description}\end{quote}
8875\begin{quote}\begin{description}
8876\item[{retval}] \leavevmode\begin{itemize}
8877\item {}
8878\sphinxAtStartPar
88790   Success; otherwise \sphinxhyphen{} Kerberos error codes
8880
8881\end{itemize}
8882
8883\end{description}\end{quote}
8884
8885\begin{sphinxadmonition}{note}{Note:}
8886\sphinxAtStartPar
8887The pointer is not freed.
8888\end{sphinxadmonition}
8889
8890
8891\subsubsection{krb5\_free\_string \sphinxhyphen{}  Free a string allocated by a krb5 function.}
8892\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)@\spxentry{krb5\_free\_string}\spxextra{C function}}
8893
8894\begin{fulllineitems}
8895\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_string:c.krb5_free_string}}%
8896\pysigstartmultiline
8897\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_string}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{val}}{}%
8898\pysigstopmultiline
8899\end{fulllineitems}
8900
8901\begin{quote}\begin{description}
8902\item[{param}] \leavevmode
8903\sphinxAtStartPar
8904\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8905
8906\sphinxAtStartPar
8907\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} \sphinxhyphen{} String to be freed
8908
8909\end{description}\end{quote}
8910
8911\begin{sphinxadmonition}{note}{Note:}
8912\sphinxAtStartPar
8913New in 1.10
8914\end{sphinxadmonition}
8915
8916
8917\subsubsection{krb5\_free\_ticket \sphinxhyphen{}  Free a ticket.}
8918\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)@\spxentry{krb5\_free\_ticket}\spxextra{C function}}
8919
8920\begin{fulllineitems}
8921\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_ticket:c.krb5_free_ticket}}%
8922\pysigstartmultiline
8923\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_ticket}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{val}}{}%
8924\pysigstopmultiline
8925\end{fulllineitems}
8926
8927\begin{quote}\begin{description}
8928\item[{param}] \leavevmode
8929\sphinxAtStartPar
8930\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8931
8932\sphinxAtStartPar
8933\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} \sphinxhyphen{} Ticket to be freed
8934
8935\end{description}\end{quote}
8936
8937\sphinxAtStartPar
8938This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
8939
8940
8941\subsubsection{krb5\_free\_unparsed\_name \sphinxhyphen{}  Free a string representation of a principal.}
8942\label{\detokenize{appdev/refs/api/krb5_free_unparsed_name:krb5-free-unparsed-name-free-a-string-representation-of-a-principal}}\label{\detokenize{appdev/refs/api/krb5_free_unparsed_name::doc}}\index{krb5\_free\_unparsed\_name (C function)@\spxentry{krb5\_free\_unparsed\_name}\spxextra{C function}}
8943
8944\begin{fulllineitems}
8945\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_unparsed_name:c.krb5_free_unparsed_name}}%
8946\pysigstartmultiline
8947\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_unparsed\_name}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{val}}{}%
8948\pysigstopmultiline
8949\end{fulllineitems}
8950
8951\begin{quote}\begin{description}
8952\item[{param}] \leavevmode
8953\sphinxAtStartPar
8954\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8955
8956\sphinxAtStartPar
8957\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} \sphinxhyphen{} Name string to be freed
8958
8959\end{description}\end{quote}
8960
8961
8962\subsubsection{krb5\_get\_etype\_info \sphinxhyphen{}  Retrieve enctype, salt and s2kparams from KDC.}
8963\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)@\spxentry{krb5\_get\_etype\_info}\spxextra{C function}}
8964
8965\begin{fulllineitems}
8966\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_etype_info:c.krb5_get_etype_info}}%
8967\pysigstartmultiline
8968\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_etype\_info}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{principal}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{enctype\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{salt\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{s2kparams\_out}}{}%
8969\pysigstopmultiline
8970\end{fulllineitems}
8971
8972\begin{quote}\begin{description}
8973\item[{param}] \leavevmode
8974\sphinxAtStartPar
8975\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
8976
8977\sphinxAtStartPar
8978\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} \sphinxhyphen{} Principal whose information is requested
8979
8980\sphinxAtStartPar
8981\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} \sphinxhyphen{} Initial credential options
8982
8983\sphinxAtStartPar
8984\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{enctype\_out} \sphinxhyphen{} The enctype chosen by KDC
8985
8986\sphinxAtStartPar
8987\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{salt\_out} \sphinxhyphen{} Salt returned from KDC
8988
8989\sphinxAtStartPar
8990\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{s2kparams\_out} \sphinxhyphen{} String\sphinxhyphen{}to\sphinxhyphen{}key parameters returned from KDC
8991
8992\end{description}\end{quote}
8993\begin{quote}\begin{description}
8994\item[{retval}] \leavevmode\begin{itemize}
8995\item {}
8996\sphinxAtStartPar
89970   Success
8998
8999\end{itemize}
9000
9001\item[{return}] \leavevmode\begin{itemize}
9002\item {}
9003\sphinxAtStartPar
9004A Kerberos error code
9005
9006\end{itemize}
9007
9008\end{description}\end{quote}
9009
9010\sphinxAtStartPar
9011Send an initial ticket request for \sphinxstyleemphasis{principal} and extract the encryption type, salt type, and string\sphinxhyphen{}to\sphinxhyphen{}key parameters from the KDC response. If the KDC provides no etype\sphinxhyphen{}info, set \sphinxstyleemphasis{enctype\_out} to \sphinxstylestrong{ENCTYPE\_NULL} and set \sphinxstyleemphasis{salt\_out} and \sphinxstyleemphasis{s2kparams\_out} to empty. If the KDC etype\sphinxhyphen{}info provides no salt, compute the default salt and place it in \sphinxstyleemphasis{salt\_out} . If the KDC etype\sphinxhyphen{}info provides no string\sphinxhyphen{}to\sphinxhyphen{}key parameters, set \sphinxstyleemphasis{s2kparams\_out} to empty.
9012\begin{quote}
9013
9014\sphinxAtStartPar
9015\sphinxstyleemphasis{opt} may be used to specify options which affect the initial request, such as request encryption types or a FAST armor cache (see krb5\_get\_init\_creds\_opt\_set\_etype\_list() and krb5\_get\_init\_creds\_opt\_set\_fast\_ccache\_name()).
9016\end{quote}
9017
9018\sphinxAtStartPar
9019Use krb5\_free\_data\_contents() to free \sphinxstyleemphasis{salt\_out} and \sphinxstyleemphasis{s2kparams\_out} when they are no longer needed.
9020
9021\begin{sphinxadmonition}{note}{Note:}
9022\sphinxAtStartPar
9023New in 1.17
9024\end{sphinxadmonition}
9025
9026
9027\subsubsection{krb5\_get\_permitted\_enctypes \sphinxhyphen{}  Return a list of encryption types permitted for session keys.}
9028\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)@\spxentry{krb5\_get\_permitted\_enctypes}\spxextra{C function}}
9029
9030\begin{fulllineitems}
9031\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_permitted_enctypes:c.krb5_get_permitted_enctypes}}%
9032\pysigstartmultiline
9033\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_permitted\_enctypes}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{ktypes}}{}%
9034\pysigstopmultiline
9035\end{fulllineitems}
9036
9037\begin{quote}\begin{description}
9038\item[{param}] \leavevmode
9039\sphinxAtStartPar
9040\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9041
9042\sphinxAtStartPar
9043\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ktypes} \sphinxhyphen{} Zero\sphinxhyphen{}terminated list of encryption types
9044
9045\end{description}\end{quote}
9046\begin{quote}\begin{description}
9047\item[{retval}] \leavevmode\begin{itemize}
9048\item {}
9049\sphinxAtStartPar
90500   Success; otherwise \sphinxhyphen{} Kerberos error codes
9051
9052\end{itemize}
9053
9054\end{description}\end{quote}
9055
9056\sphinxAtStartPar
9057This function returns the list of encryption types permitted for session keys within \sphinxstyleemphasis{context} , as determined by configuration or by a previous call to krb5\_set\_default\_tgs\_enctypes().
9058
9059\sphinxAtStartPar
9060Use krb5\_free\_enctypes() to free \sphinxstyleemphasis{ktypes} when it is no longer needed.
9061
9062
9063\subsubsection{krb5\_get\_server\_rcache \sphinxhyphen{}  Generate a replay cache object for server use and open it.}
9064\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)@\spxentry{krb5\_get\_server\_rcache}\spxextra{C function}}
9065
9066\begin{fulllineitems}
9067\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_server_rcache:c.krb5_get_server_rcache}}%
9068\pysigstartmultiline
9069\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_server\_rcache}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{piece}, {\hyperref[\detokenize{appdev/refs/types/krb5_rcache:c.krb5_rcache}]{\sphinxcrossref{\DUrole{n}{krb5\_rcache}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{rcptr}}{}%
9070\pysigstopmultiline
9071\end{fulllineitems}
9072
9073\begin{quote}\begin{description}
9074\item[{param}] \leavevmode
9075\sphinxAtStartPar
9076\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9077
9078\sphinxAtStartPar
9079\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{piece} \sphinxhyphen{} Unused (replay cache identifier)
9080
9081\sphinxAtStartPar
9082\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rcptr} \sphinxhyphen{} Handle to an open rcache
9083
9084\end{description}\end{quote}
9085\begin{quote}\begin{description}
9086\item[{retval}] \leavevmode\begin{itemize}
9087\item {}
9088\sphinxAtStartPar
90890   Success; otherwise \sphinxhyphen{} Kerberos error codes
9090
9091\end{itemize}
9092
9093\end{description}\end{quote}
9094
9095\sphinxAtStartPar
9096This function creates a handle to the default replay cache. Use krb5\_rc\_close() to close \sphinxstyleemphasis{rcptr} when it is no longer needed.
9097
9098\begin{sphinxadmonition}{note}{Note:}
9099\sphinxAtStartPar
9100Prior to release 1.18, this function creates a handle to a different replay cache for each unique value of \sphinxstyleemphasis{piece} .
9101\end{sphinxadmonition}
9102
9103
9104\subsubsection{krb5\_get\_time\_offsets \sphinxhyphen{}  Return the time offsets from the os context.}
9105\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)@\spxentry{krb5\_get\_time\_offsets}\spxextra{C function}}
9106
9107\begin{fulllineitems}
9108\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_time_offsets:c.krb5_get_time_offsets}}%
9109\pysigstartmultiline
9110\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_time\_offsets}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{seconds}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{microseconds}}{}%
9111\pysigstopmultiline
9112\end{fulllineitems}
9113
9114\begin{quote}\begin{description}
9115\item[{param}] \leavevmode
9116\sphinxAtStartPar
9117\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9118
9119\sphinxAtStartPar
9120\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{seconds} \sphinxhyphen{} Time offset, seconds portion
9121
9122\sphinxAtStartPar
9123\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{microseconds} \sphinxhyphen{} Time offset, microseconds portion
9124
9125\end{description}\end{quote}
9126\begin{quote}\begin{description}
9127\item[{retval}] \leavevmode\begin{itemize}
9128\item {}
9129\sphinxAtStartPar
91300   Success; otherwise \sphinxhyphen{} Kerberos error codes
9131
9132\end{itemize}
9133
9134\end{description}\end{quote}
9135
9136\sphinxAtStartPar
9137This function returns the time offsets in \sphinxstyleemphasis{context} .
9138
9139
9140\subsubsection{krb5\_init\_context\_profile \sphinxhyphen{}  Create a krb5 library context using a specified profile.}
9141\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)@\spxentry{krb5\_init\_context\_profile}\spxextra{C function}}
9142
9143\begin{fulllineitems}
9144\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_context_profile:c.krb5_init_context_profile}}%
9145\pysigstartmultiline
9146\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_init\_context\_profile}}}}{\DUrole{k}{struct}\DUrole{w}{  }\DUrole{n}{\_profile\_t}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{profile}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\DUrole{n}{flags}, {\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{context}}{}%
9147\pysigstopmultiline
9148\end{fulllineitems}
9149
9150\begin{quote}\begin{description}
9151\item[{param}] \leavevmode
9152\sphinxAtStartPar
9153\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{profile} \sphinxhyphen{} Profile object (NULL to create default profile)
9154
9155\sphinxAtStartPar
9156\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} \sphinxhyphen{} Context initialization flags
9157
9158\sphinxAtStartPar
9159\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9160
9161\end{description}\end{quote}
9162
9163\sphinxAtStartPar
9164Create 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\sphinxhyphen{}null, a copy of it will be made for the new context; the caller should still clean up its copy. Valid flag values are:
9165\begin{itemize}
9166\item {}
9167\sphinxAtStartPar
9168\#KRB5\_INIT\_CONTEXT\_SECURE Ignore environment variables
9169
9170\item {}
9171\sphinxAtStartPar
9172\#KRB5\_INIT\_CONTEXT\_KDC Use KDC configuration if creating profile
9173
9174\end{itemize}
9175
9176
9177\subsubsection{krb5\_init\_creds\_free \sphinxhyphen{}  Free an initial credentials context.}
9178\label{\detokenize{appdev/refs/api/krb5_init_creds_free:krb5-init-creds-free-free-an-initial-credentials-context}}\label{\detokenize{appdev/refs/api/krb5_init_creds_free::doc}}\index{krb5\_init\_creds\_free (C function)@\spxentry{krb5\_init\_creds\_free}\spxextra{C function}}
9179
9180\begin{fulllineitems}
9181\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_free:c.krb5_init_creds_free}}%
9182\pysigstartmultiline
9183\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_init\_creds\_free}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{\DUrole{n}{krb5\_init\_creds\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}}{}%
9184\pysigstopmultiline
9185\end{fulllineitems}
9186
9187\begin{quote}\begin{description}
9188\item[{param}] \leavevmode
9189\sphinxAtStartPar
9190\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9191
9192\sphinxAtStartPar
9193\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Initial credentials context
9194
9195\end{description}\end{quote}
9196\begin{quote}
9197
9198\sphinxAtStartPar
9199\sphinxstyleemphasis{context} must be the same as the one passed to krb5\_init\_creds\_init() for this initial credentials context.
9200\end{quote}
9201
9202
9203\subsubsection{krb5\_init\_creds\_get \sphinxhyphen{}  Acquire credentials using an initial credentials context.}
9204\label{\detokenize{appdev/refs/api/krb5_init_creds_get:krb5-init-creds-get-acquire-credentials-using-an-initial-credentials-context}}\label{\detokenize{appdev/refs/api/krb5_init_creds_get::doc}}\index{krb5\_init\_creds\_get (C function)@\spxentry{krb5\_init\_creds\_get}\spxextra{C function}}
9205
9206\begin{fulllineitems}
9207\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_get:c.krb5_init_creds_get}}%
9208\pysigstartmultiline
9209\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_init\_creds\_get}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{\DUrole{n}{krb5\_init\_creds\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}}{}%
9210\pysigstopmultiline
9211\end{fulllineitems}
9212
9213\begin{quote}\begin{description}
9214\item[{param}] \leavevmode
9215\sphinxAtStartPar
9216\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9217
9218\sphinxAtStartPar
9219\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Initial credentials context
9220
9221\end{description}\end{quote}
9222\begin{quote}\begin{description}
9223\item[{retval}] \leavevmode\begin{itemize}
9224\item {}
9225\sphinxAtStartPar
92260   Success; otherwise \sphinxhyphen{} Kerberos error codes
9227
9228\end{itemize}
9229
9230\end{description}\end{quote}
9231
9232\sphinxAtStartPar
9233This function synchronously obtains credentials using a context created by krb5\_init\_creds\_init(). On successful return, the credentials can be retrieved with krb5\_init\_creds\_get\_creds().
9234\begin{quote}
9235
9236\sphinxAtStartPar
9237\sphinxstyleemphasis{context} must be the same as the one passed to krb5\_init\_creds\_init() for this initial credentials context.
9238\end{quote}
9239
9240
9241\subsubsection{krb5\_init\_creds\_get\_creds \sphinxhyphen{}  Retrieve acquired credentials from an initial credentials context.}
9242\label{\detokenize{appdev/refs/api/krb5_init_creds_get_creds:krb5-init-creds-get-creds-retrieve-acquired-credentials-from-an-initial-credentials-context}}\label{\detokenize{appdev/refs/api/krb5_init_creds_get_creds::doc}}\index{krb5\_init\_creds\_get\_creds (C function)@\spxentry{krb5\_init\_creds\_get\_creds}\spxextra{C function}}
9243
9244\begin{fulllineitems}
9245\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_get_creds:c.krb5_init_creds_get_creds}}%
9246\pysigstartmultiline
9247\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_init\_creds\_get\_creds}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{\DUrole{n}{krb5\_init\_creds\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{creds}}{}%
9248\pysigstopmultiline
9249\end{fulllineitems}
9250
9251\begin{quote}\begin{description}
9252\item[{param}] \leavevmode
9253\sphinxAtStartPar
9254\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9255
9256\sphinxAtStartPar
9257\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Initial credentials context
9258
9259\sphinxAtStartPar
9260\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} \sphinxhyphen{} Acquired credentials
9261
9262\end{description}\end{quote}
9263\begin{quote}\begin{description}
9264\item[{retval}] \leavevmode\begin{itemize}
9265\item {}
9266\sphinxAtStartPar
92670   Success; otherwise \sphinxhyphen{} Kerberos error codes
9268
9269\end{itemize}
9270
9271\end{description}\end{quote}
9272
9273\sphinxAtStartPar
9274This function copies the acquired initial credentials from \sphinxstyleemphasis{ctx} into \sphinxstyleemphasis{creds} , after the successful completion of krb5\_init\_creds\_get() or krb5\_init\_creds\_step(). Use krb5\_free\_cred\_contents() to free \sphinxstyleemphasis{creds} when it is no longer needed.
9275
9276
9277\subsubsection{krb5\_init\_creds\_get\_error \sphinxhyphen{}  Get the last error from KDC from an initial credentials context.}
9278\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)@\spxentry{krb5\_init\_creds\_get\_error}\spxextra{C function}}
9279
9280\begin{fulllineitems}
9281\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_get_error:c.krb5_init_creds_get_error}}%
9282\pysigstartmultiline
9283\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_init\_creds\_get\_error}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{\DUrole{n}{krb5\_init\_creds\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{\DUrole{n}{krb5\_error}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{error}}{}%
9284\pysigstopmultiline
9285\end{fulllineitems}
9286
9287\begin{quote}\begin{description}
9288\item[{param}] \leavevmode
9289\sphinxAtStartPar
9290\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9291
9292\sphinxAtStartPar
9293\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Initial credentials context
9294
9295\sphinxAtStartPar
9296\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{error} \sphinxhyphen{} Error from KDC, or NULL if none was received
9297
9298\end{description}\end{quote}
9299\begin{quote}\begin{description}
9300\item[{retval}] \leavevmode\begin{itemize}
9301\item {}
9302\sphinxAtStartPar
93030   Success; otherwise \sphinxhyphen{} Kerberos error codes
9304
9305\end{itemize}
9306
9307\end{description}\end{quote}
9308
9309
9310\subsubsection{krb5\_init\_creds\_get\_times \sphinxhyphen{}  Retrieve ticket times from an initial credentials context.}
9311\label{\detokenize{appdev/refs/api/krb5_init_creds_get_times:krb5-init-creds-get-times-retrieve-ticket-times-from-an-initial-credentials-context}}\label{\detokenize{appdev/refs/api/krb5_init_creds_get_times::doc}}\index{krb5\_init\_creds\_get\_times (C function)@\spxentry{krb5\_init\_creds\_get\_times}\spxextra{C function}}
9312
9313\begin{fulllineitems}
9314\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_get_times:c.krb5_init_creds_get_times}}%
9315\pysigstartmultiline
9316\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_init\_creds\_get\_times}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{\DUrole{n}{krb5\_init\_creds\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket\_times}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{times}}{}%
9317\pysigstopmultiline
9318\end{fulllineitems}
9319
9320\begin{quote}\begin{description}
9321\item[{param}] \leavevmode
9322\sphinxAtStartPar
9323\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9324
9325\sphinxAtStartPar
9326\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Initial credentials context
9327
9328\sphinxAtStartPar
9329\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{times} \sphinxhyphen{} Ticket times for acquired credentials
9330
9331\end{description}\end{quote}
9332\begin{quote}\begin{description}
9333\item[{retval}] \leavevmode\begin{itemize}
9334\item {}
9335\sphinxAtStartPar
93360   Success; otherwise \sphinxhyphen{} Kerberos error codes
9337
9338\end{itemize}
9339
9340\end{description}\end{quote}
9341
9342\sphinxAtStartPar
9343The initial credentials context must have completed obtaining credentials via either krb5\_init\_creds\_get() or krb5\_init\_creds\_step().
9344
9345
9346\subsubsection{krb5\_init\_creds\_init \sphinxhyphen{}  Create a context for acquiring initial credentials.}
9347\label{\detokenize{appdev/refs/api/krb5_init_creds_init:krb5-init-creds-init-create-a-context-for-acquiring-initial-credentials}}\label{\detokenize{appdev/refs/api/krb5_init_creds_init::doc}}\index{krb5\_init\_creds\_init (C function)@\spxentry{krb5\_init\_creds\_init}\spxextra{C function}}
9348
9349\begin{fulllineitems}
9350\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_init:c.krb5_init_creds_init}}%
9351\pysigstartmultiline
9352\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_init\_creds\_init}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{client}, {\hyperref[\detokenize{appdev/refs/types/krb5_prompter_fct:c.krb5_prompter_fct}]{\sphinxcrossref{\DUrole{n}{krb5\_prompter\_fct}}}}\DUrole{w}{  }\DUrole{n}{prompter}, \DUrole{kt}{void}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}, {\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{\DUrole{n}{krb5\_deltat}}}}\DUrole{w}{  }\DUrole{n}{start\_time}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{options}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{\DUrole{n}{krb5\_init\_creds\_context}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ctx}}{}%
9353\pysigstopmultiline
9354\end{fulllineitems}
9355
9356\begin{quote}\begin{description}
9357\item[{param}] \leavevmode
9358\sphinxAtStartPar
9359\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9360
9361\sphinxAtStartPar
9362\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} \sphinxhyphen{} Client principal to get initial creds for
9363
9364\sphinxAtStartPar
9365\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompter} \sphinxhyphen{} Prompter callback
9366
9367\sphinxAtStartPar
9368\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} \sphinxhyphen{} Prompter callback argument
9369
9370\sphinxAtStartPar
9371\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{start\_time} \sphinxhyphen{} Time when credentials become valid (0 for now)
9372
9373\sphinxAtStartPar
9374\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{options} \sphinxhyphen{} Options structure (NULL for default)
9375
9376\sphinxAtStartPar
9377\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} New initial credentials context
9378
9379\end{description}\end{quote}
9380\begin{quote}\begin{description}
9381\item[{retval}] \leavevmode\begin{itemize}
9382\item {}
9383\sphinxAtStartPar
93840   Success; otherwise \sphinxhyphen{} Kerberos error codes
9385
9386\end{itemize}
9387
9388\end{description}\end{quote}
9389
9390\sphinxAtStartPar
9391This function creates a new context for acquiring initial credentials. Use krb5\_init\_creds\_free() to free \sphinxstyleemphasis{ctx} when it is no longer needed.
9392
9393\sphinxAtStartPar
9394Any subsequent calls to krb5\_init\_creds\_step(), krb5\_init\_creds\_get(), or krb5\_init\_creds\_free() for this initial credentials context must use the same \sphinxstyleemphasis{context} argument as the one passed to this function.
9395
9396
9397\subsubsection{krb5\_init\_creds\_set\_keytab \sphinxhyphen{}  Specify a keytab to use for acquiring initial credentials.}
9398\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)@\spxentry{krb5\_init\_creds\_set\_keytab}\spxextra{C function}}
9399
9400\begin{fulllineitems}
9401\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_set_keytab:c.krb5_init_creds_set_keytab}}%
9402\pysigstartmultiline
9403\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_init\_creds\_set\_keytab}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{\DUrole{n}{krb5\_init\_creds\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{n}{keytab}}{}%
9404\pysigstopmultiline
9405\end{fulllineitems}
9406
9407\begin{quote}\begin{description}
9408\item[{param}] \leavevmode
9409\sphinxAtStartPar
9410\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9411
9412\sphinxAtStartPar
9413\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Initial credentials context
9414
9415\sphinxAtStartPar
9416\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} \sphinxhyphen{} Key table handle
9417
9418\end{description}\end{quote}
9419\begin{quote}\begin{description}
9420\item[{retval}] \leavevmode\begin{itemize}
9421\item {}
9422\sphinxAtStartPar
94230   Success; otherwise \sphinxhyphen{} Kerberos error codes
9424
9425\end{itemize}
9426
9427\end{description}\end{quote}
9428
9429\sphinxAtStartPar
9430This function supplies a keytab containing the client key for an initial credentials request.
9431
9432
9433\subsubsection{krb5\_init\_creds\_set\_password \sphinxhyphen{}  Set a password for acquiring initial credentials.}
9434\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)@\spxentry{krb5\_init\_creds\_set\_password}\spxextra{C function}}
9435
9436\begin{fulllineitems}
9437\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_set_password:c.krb5_init_creds_set_password}}%
9438\pysigstartmultiline
9439\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_init\_creds\_set\_password}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{\DUrole{n}{krb5\_init\_creds\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{password}}{}%
9440\pysigstopmultiline
9441\end{fulllineitems}
9442
9443\begin{quote}\begin{description}
9444\item[{param}] \leavevmode
9445\sphinxAtStartPar
9446\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9447
9448\sphinxAtStartPar
9449\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Initial credentials context
9450
9451\sphinxAtStartPar
9452\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{password} \sphinxhyphen{} Password
9453
9454\end{description}\end{quote}
9455\begin{quote}\begin{description}
9456\item[{retval}] \leavevmode\begin{itemize}
9457\item {}
9458\sphinxAtStartPar
94590   Success; otherwise \sphinxhyphen{} Kerberos error codes
9460
9461\end{itemize}
9462
9463\end{description}\end{quote}
9464
9465\sphinxAtStartPar
9466This function supplies a password to be used to construct the client key for an initial credentials request.
9467
9468
9469\subsubsection{krb5\_init\_creds\_set\_service \sphinxhyphen{}  Specify a service principal for acquiring initial credentials.}
9470\label{\detokenize{appdev/refs/api/krb5_init_creds_set_service:krb5-init-creds-set-service-specify-a-service-principal-for-acquiring-initial-credentials}}\label{\detokenize{appdev/refs/api/krb5_init_creds_set_service::doc}}\index{krb5\_init\_creds\_set\_service (C function)@\spxentry{krb5\_init\_creds\_set\_service}\spxextra{C function}}
9471
9472\begin{fulllineitems}
9473\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_set_service:c.krb5_init_creds_set_service}}%
9474\pysigstartmultiline
9475\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_init\_creds\_set\_service}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{\DUrole{n}{krb5\_init\_creds\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{service}}{}%
9476\pysigstopmultiline
9477\end{fulllineitems}
9478
9479\begin{quote}\begin{description}
9480\item[{param}] \leavevmode
9481\sphinxAtStartPar
9482\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9483
9484\sphinxAtStartPar
9485\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Initial credentials context
9486
9487\sphinxAtStartPar
9488\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{service} \sphinxhyphen{} Service principal string
9489
9490\end{description}\end{quote}
9491\begin{quote}\begin{description}
9492\item[{retval}] \leavevmode\begin{itemize}
9493\item {}
9494\sphinxAtStartPar
94950   Success; otherwise \sphinxhyphen{} Kerberos error codes
9496
9497\end{itemize}
9498
9499\end{description}\end{quote}
9500
9501\sphinxAtStartPar
9502This 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.
9503
9504
9505\subsubsection{krb5\_init\_creds\_step \sphinxhyphen{}  Get the next KDC request for acquiring initial credentials.}
9506\label{\detokenize{appdev/refs/api/krb5_init_creds_step:krb5-init-creds-step-get-the-next-kdc-request-for-acquiring-initial-credentials}}\label{\detokenize{appdev/refs/api/krb5_init_creds_step::doc}}\index{krb5\_init\_creds\_step (C function)@\spxentry{krb5\_init\_creds\_step}\spxextra{C function}}
9507
9508\begin{fulllineitems}
9509\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_step:c.krb5_init_creds_step}}%
9510\pysigstartmultiline
9511\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_init\_creds\_step}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{\DUrole{n}{krb5\_init\_creds\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{in}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{out}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{realm}, \DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{flags}}{}%
9512\pysigstopmultiline
9513\end{fulllineitems}
9514
9515\begin{quote}\begin{description}
9516\item[{param}] \leavevmode
9517\sphinxAtStartPar
9518\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9519
9520\sphinxAtStartPar
9521\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Initial credentials context
9522
9523\sphinxAtStartPar
9524\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in} \sphinxhyphen{} KDC response (empty on the first call)
9525
9526\sphinxAtStartPar
9527\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} \sphinxhyphen{} Next KDC request
9528
9529\sphinxAtStartPar
9530\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realm} \sphinxhyphen{} Realm for next KDC request
9531
9532\sphinxAtStartPar
9533\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{flags} \sphinxhyphen{} Output flags
9534
9535\end{description}\end{quote}
9536\begin{quote}\begin{description}
9537\item[{retval}] \leavevmode\begin{itemize}
9538\item {}
9539\sphinxAtStartPar
95400   Success; otherwise \sphinxhyphen{} Kerberos error codes
9541
9542\end{itemize}
9543
9544\end{description}\end{quote}
9545
9546\sphinxAtStartPar
9547This 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.
9548
9549\sphinxAtStartPar
9550If more requests are needed, \sphinxstyleemphasis{flags} will be set to \#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 \#KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE and \sphinxstyleemphasis{out} will be empty.
9551
9552\sphinxAtStartPar
9553If 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.
9554\begin{quote}
9555
9556\sphinxAtStartPar
9557\sphinxstyleemphasis{context} must be the same as the one passed to krb5\_init\_creds\_init() for this initial credentials context.
9558\end{quote}
9559
9560
9561\subsubsection{krb5\_init\_keyblock \sphinxhyphen{}  Initialize an empty krb5\_keyblock .}
9562\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)@\spxentry{krb5\_init\_keyblock}\spxextra{C function}}
9563
9564\begin{fulllineitems}
9565\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_keyblock:c.krb5_init_keyblock}}%
9566\pysigstartmultiline
9567\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_init\_keyblock}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{enctype}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{length}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{out}}{}%
9568\pysigstopmultiline
9569\end{fulllineitems}
9570
9571\begin{quote}\begin{description}
9572\item[{param}] \leavevmode
9573\sphinxAtStartPar
9574\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9575
9576\sphinxAtStartPar
9577\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} \sphinxhyphen{} Encryption type
9578
9579\sphinxAtStartPar
9580\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{length} \sphinxhyphen{} Length of keyblock (or 0)
9581
9582\sphinxAtStartPar
9583\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} \sphinxhyphen{} New keyblock structure
9584
9585\end{description}\end{quote}
9586\begin{quote}\begin{description}
9587\item[{retval}] \leavevmode\begin{itemize}
9588\item {}
9589\sphinxAtStartPar
95900   Success; otherwise \sphinxhyphen{} Kerberos error codes
9591
9592\end{itemize}
9593
9594\end{description}\end{quote}
9595
9596\sphinxAtStartPar
9597Initialize 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 krb5\_free\_keyblock() to free \sphinxstyleemphasis{out} when it is no longer needed.
9598
9599\begin{sphinxadmonition}{note}{Note:}
9600\sphinxAtStartPar
9601If \sphinxstyleemphasis{length} is set to 0, contents are left unallocated.
9602\end{sphinxadmonition}
9603
9604
9605\subsubsection{krb5\_is\_referral\_realm \sphinxhyphen{}  Check for a match with KRB5\_REFERRAL\_REALM.}
9606\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)@\spxentry{krb5\_is\_referral\_realm}\spxextra{C function}}
9607
9608\begin{fulllineitems}
9609\phantomsection\label{\detokenize{appdev/refs/api/krb5_is_referral_realm:c.krb5_is_referral_realm}}%
9610\pysigstartmultiline
9611\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_is\_referral\_realm}}}}{\DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{r}}{}%
9612\pysigstopmultiline
9613\end{fulllineitems}
9614
9615\begin{quote}\begin{description}
9616\item[{param}] \leavevmode
9617\sphinxAtStartPar
9618\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{r} \sphinxhyphen{} Realm to check
9619
9620\end{description}\end{quote}
9621\begin{quote}\begin{description}
9622\item[{return}] \leavevmode\begin{itemize}
9623\item {}
9624\sphinxAtStartPar
9625TRUE if r is zero\sphinxhyphen{}length, FALSE otherwise
9626
9627\end{itemize}
9628
9629\end{description}\end{quote}
9630
9631
9632\subsubsection{krb5\_kdc\_sign\_ticket \sphinxhyphen{}  Sign a PAC, possibly including a ticket signature.}
9633\label{\detokenize{appdev/refs/api/krb5_kdc_sign_ticket:krb5-kdc-sign-ticket-sign-a-pac-possibly-including-a-ticket-signature}}\label{\detokenize{appdev/refs/api/krb5_kdc_sign_ticket::doc}}\index{krb5\_kdc\_sign\_ticket (C function)@\spxentry{krb5\_kdc\_sign\_ticket}\spxextra{C function}}
9634
9635\begin{fulllineitems}
9636\phantomsection\label{\detokenize{appdev/refs/api/krb5_kdc_sign_ticket:c.krb5_kdc_sign_ticket}}%
9637\pysigstartmultiline
9638\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kdc\_sign\_ticket}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_tkt\_part}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{enc\_tkt}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{\DUrole{n}{krb5\_pac}}}}\DUrole{w}{  }\DUrole{n}{pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{server\_princ}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{client\_princ}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{server}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{privsvr}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\DUrole{n}{with\_realm}}{}%
9639\pysigstopmultiline
9640\end{fulllineitems}
9641
9642\begin{quote}\begin{description}
9643\item[{param}] \leavevmode
9644\sphinxAtStartPar
9645\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9646
9647\sphinxAtStartPar
9648\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enc\_tkt} \sphinxhyphen{} The ticket for the signature
9649
9650\sphinxAtStartPar
9651\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} \sphinxhyphen{} PAC handle
9652
9653\sphinxAtStartPar
9654\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server\_princ} \sphinxhyphen{} Canonical ticket server name
9655
9656\sphinxAtStartPar
9657\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client\_princ} \sphinxhyphen{} PAC\_CLIENT\_INFO principal (or NULL)
9658
9659\sphinxAtStartPar
9660\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} \sphinxhyphen{} Key for server checksum
9661
9662\sphinxAtStartPar
9663\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{privsvr} \sphinxhyphen{} Key for KDC and ticket checksum
9664
9665\sphinxAtStartPar
9666\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{with\_realm} \sphinxhyphen{} If true, include the realm of \sphinxstyleemphasis{principal}
9667
9668\end{description}\end{quote}
9669\begin{quote}\begin{description}
9670\item[{retval}] \leavevmode\begin{itemize}
9671\item {}
9672\sphinxAtStartPar
96730   on success, otherwise \sphinxhyphen{} Kerberos error codes
9674
9675\end{itemize}
9676
9677\end{description}\end{quote}
9678
9679\sphinxAtStartPar
9680Sign \sphinxstyleemphasis{pac} using the keys \sphinxstyleemphasis{server} and \sphinxstyleemphasis{privsvr} . Include a ticket signature over \sphinxstyleemphasis{enc\_tkt} if \sphinxstyleemphasis{server\_princ} is not a TGS or kadmin/changepw principal name. Add the signed PAC’s encoding to the authorization data of \sphinxstyleemphasis{enc\_tkt} in the first slot, wrapped in an AD\sphinxhyphen{}IF\sphinxhyphen{}RELEVANT container. If \sphinxstyleemphasis{client\_princ} is non\sphinxhyphen{}null, add a PAC\_CLIENT\_INFO buffer, including the realm if \sphinxstyleemphasis{with\_realm} is true.
9681
9682\begin{sphinxadmonition}{note}{Note:}
9683\sphinxAtStartPar
9684New in 1.20
9685\end{sphinxadmonition}
9686
9687
9688\subsubsection{krb5\_kdc\_verify\_ticket \sphinxhyphen{}  Verify a PAC, possibly including ticket signature.}
9689\label{\detokenize{appdev/refs/api/krb5_kdc_verify_ticket:krb5-kdc-verify-ticket-verify-a-pac-possibly-including-ticket-signature}}\label{\detokenize{appdev/refs/api/krb5_kdc_verify_ticket::doc}}\index{krb5\_kdc\_verify\_ticket (C function)@\spxentry{krb5\_kdc\_verify\_ticket}\spxextra{C function}}
9690
9691\begin{fulllineitems}
9692\phantomsection\label{\detokenize{appdev/refs/api/krb5_kdc_verify_ticket:c.krb5_kdc_verify_ticket}}%
9693\pysigstartmultiline
9694\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kdc\_verify\_ticket}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_tkt\_part}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{enc\_tkt}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{server\_princ}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{server}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{privsvr}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{\DUrole{n}{krb5\_pac}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{pac\_out}}{}%
9695\pysigstopmultiline
9696\end{fulllineitems}
9697
9698\begin{quote}\begin{description}
9699\item[{param}] \leavevmode
9700\sphinxAtStartPar
9701\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9702
9703\sphinxAtStartPar
9704\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enc\_tkt} \sphinxhyphen{} Ticket enc\sphinxhyphen{}part, possibly containing a PAC
9705
9706\sphinxAtStartPar
9707\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server\_princ} \sphinxhyphen{} Canonicalized name of ticket server
9708
9709\sphinxAtStartPar
9710\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} \sphinxhyphen{} Key to validate server checksum (or NULL)
9711
9712\sphinxAtStartPar
9713\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{privsvr} \sphinxhyphen{} Key to validate KDC checksum (or NULL)
9714
9715\sphinxAtStartPar
9716\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{pac\_out} \sphinxhyphen{} Verified PAC (NULL if no PAC included)
9717
9718\end{description}\end{quote}
9719\begin{quote}\begin{description}
9720\item[{retval}] \leavevmode\begin{itemize}
9721\item {}
9722\sphinxAtStartPar
97230   Success; otherwise \sphinxhyphen{} Kerberos error codes
9724
9725\end{itemize}
9726
9727\end{description}\end{quote}
9728
9729\sphinxAtStartPar
9730If a PAC is present in \sphinxstyleemphasis{enc\_tkt} , verify its signatures. If \sphinxstyleemphasis{privsvr} is not NULL and \sphinxstyleemphasis{server\_princ} is not a krbtgt or kadmin/changepw service, require a ticket signature over \sphinxstyleemphasis{enc\_tkt} in addition to the KDC signature. Place the verified PAC in \sphinxstyleemphasis{pac\_out} . If an invalid PAC signature is found, return an error matching the Windows KDC protocol code for that condition as closely as possible.
9731
9732\sphinxAtStartPar
9733If no PAC is present in \sphinxstyleemphasis{enc\_tkt} , set \sphinxstyleemphasis{pac\_out} to NULL and return successfully.
9734
9735\begin{sphinxadmonition}{note}{Note:}
9736\sphinxAtStartPar
9737This function does not validate the PAC\_CLIENT\_INFO buffer. If a specific value is expected, the caller can make a separate call to krb5\_pac\_verify\_ext() with a principal but no keys.
9738\end{sphinxadmonition}
9739
9740\begin{sphinxadmonition}{note}{Note:}
9741\sphinxAtStartPar
9742New in 1.20
9743\end{sphinxadmonition}
9744
9745
9746\subsubsection{krb5\_kt\_add\_entry \sphinxhyphen{}  Add a new entry to a key table.}
9747\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)@\spxentry{krb5\_kt\_add\_entry}\spxextra{C function}}
9748
9749\begin{fulllineitems}
9750\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_add_entry:c.krb5_kt_add_entry}}%
9751\pysigstartmultiline
9752\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kt\_add\_entry}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{n}{id}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab\_entry}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{entry}}{}%
9753\pysigstopmultiline
9754\end{fulllineitems}
9755
9756\begin{quote}\begin{description}
9757\item[{param}] \leavevmode
9758\sphinxAtStartPar
9759\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9760
9761\sphinxAtStartPar
9762\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{id} \sphinxhyphen{} Key table handle
9763
9764\sphinxAtStartPar
9765\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{entry} \sphinxhyphen{} Entry to be added
9766
9767\end{description}\end{quote}
9768\begin{quote}\begin{description}
9769\item[{retval}] \leavevmode\begin{itemize}
9770\item {}
9771\sphinxAtStartPar
97720   Success
9773
9774\item {}
9775\sphinxAtStartPar
9776ENOMEM   Insufficient memory
9777
9778\item {}
9779\sphinxAtStartPar
9780KRB5\_KT\_NOWRITE   Key table is not writeable
9781
9782\end{itemize}
9783
9784\item[{return}] \leavevmode\begin{itemize}
9785\item {}
9786\sphinxAtStartPar
9787Kerberos error codes
9788
9789\end{itemize}
9790
9791\end{description}\end{quote}
9792
9793
9794\subsubsection{krb5\_kt\_end\_seq\_get \sphinxhyphen{}  Release a keytab cursor.}
9795\label{\detokenize{appdev/refs/api/krb5_kt_end_seq_get:krb5-kt-end-seq-get-release-a-keytab-cursor}}\label{\detokenize{appdev/refs/api/krb5_kt_end_seq_get::doc}}\index{krb5\_kt\_end\_seq\_get (C function)@\spxentry{krb5\_kt\_end\_seq\_get}\spxextra{C function}}
9796
9797\begin{fulllineitems}
9798\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_end_seq_get:c.krb5_kt_end_seq_get}}%
9799\pysigstartmultiline
9800\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kt\_end\_seq\_get}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{n}{keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_kt_cursor:c.krb5_kt_cursor}]{\sphinxcrossref{\DUrole{n}{krb5\_kt\_cursor}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cursor}}{}%
9801\pysigstopmultiline
9802\end{fulllineitems}
9803
9804\begin{quote}\begin{description}
9805\item[{param}] \leavevmode
9806\sphinxAtStartPar
9807\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9808
9809\sphinxAtStartPar
9810\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} \sphinxhyphen{} Key table handle
9811
9812\sphinxAtStartPar
9813\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cursor} \sphinxhyphen{} Cursor
9814
9815\end{description}\end{quote}
9816\begin{quote}\begin{description}
9817\item[{retval}] \leavevmode\begin{itemize}
9818\item {}
9819\sphinxAtStartPar
98200   Success
9821
9822\end{itemize}
9823
9824\item[{return}] \leavevmode\begin{itemize}
9825\item {}
9826\sphinxAtStartPar
9827Kerberos error codes
9828
9829\end{itemize}
9830
9831\end{description}\end{quote}
9832
9833\sphinxAtStartPar
9834This function should be called to release the cursor created by krb5\_kt\_start\_seq\_get().
9835
9836
9837\subsubsection{krb5\_kt\_get\_entry \sphinxhyphen{}  Get an entry from a key table.}
9838\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)@\spxentry{krb5\_kt\_get\_entry}\spxextra{C function}}
9839
9840\begin{fulllineitems}
9841\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_get_entry:c.krb5_kt_get_entry}}%
9842\pysigstartmultiline
9843\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kt\_get\_entry}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{n}{keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{principal}, {\hyperref[\detokenize{appdev/refs/types/krb5_kvno:c.krb5_kvno}]{\sphinxcrossref{\DUrole{n}{krb5\_kvno}}}}\DUrole{w}{  }\DUrole{n}{vno}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab\_entry}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{entry}}{}%
9844\pysigstopmultiline
9845\end{fulllineitems}
9846
9847\begin{quote}\begin{description}
9848\item[{param}] \leavevmode
9849\sphinxAtStartPar
9850\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9851
9852\sphinxAtStartPar
9853\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} \sphinxhyphen{} Key table handle
9854
9855\sphinxAtStartPar
9856\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} \sphinxhyphen{} Principal name
9857
9858\sphinxAtStartPar
9859\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{vno} \sphinxhyphen{} Key version number (0 for highest available)
9860
9861\sphinxAtStartPar
9862\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} \sphinxhyphen{} Encryption type (0 zero for any enctype)
9863
9864\sphinxAtStartPar
9865\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{entry} \sphinxhyphen{} Returned entry from key table
9866
9867\end{description}\end{quote}
9868\begin{quote}\begin{description}
9869\item[{retval}] \leavevmode\begin{itemize}
9870\item {}
9871\sphinxAtStartPar
98720   Success
9873
9874\item {}
9875\sphinxAtStartPar
9876Kerberos   error codes on failure
9877
9878\end{itemize}
9879
9880\end{description}\end{quote}
9881
9882\sphinxAtStartPar
9883Retrieve 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\sphinxhyphen{}numbered kvno matching the other fields. If \sphinxstyleemphasis{enctype} is 0, match any enctype.
9884
9885\sphinxAtStartPar
9886Use krb5\_free\_keytab\_entry\_contents() to free \sphinxstyleemphasis{entry} when it is no longer needed.
9887
9888\begin{sphinxadmonition}{note}{Note:}
9889\sphinxAtStartPar
9890If \sphinxstyleemphasis{vno} is zero, the function retrieves the highest\sphinxhyphen{}numbered\sphinxhyphen{}kvno entry that matches the specified principal.
9891\end{sphinxadmonition}
9892
9893
9894\subsubsection{krb5\_kt\_have\_content \sphinxhyphen{}  Check if a keytab exists and contains entries.}
9895\label{\detokenize{appdev/refs/api/krb5_kt_have_content:krb5-kt-have-content-check-if-a-keytab-exists-and-contains-entries}}\label{\detokenize{appdev/refs/api/krb5_kt_have_content::doc}}\index{krb5\_kt\_have\_content (C function)@\spxentry{krb5\_kt\_have\_content}\spxextra{C function}}
9896
9897\begin{fulllineitems}
9898\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_have_content:c.krb5_kt_have_content}}%
9899\pysigstartmultiline
9900\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kt\_have\_content}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{n}{keytab}}{}%
9901\pysigstopmultiline
9902\end{fulllineitems}
9903
9904\begin{quote}\begin{description}
9905\item[{param}] \leavevmode
9906\sphinxAtStartPar
9907\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9908
9909\sphinxAtStartPar
9910\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} \sphinxhyphen{} Key table handle
9911
9912\end{description}\end{quote}
9913\begin{quote}\begin{description}
9914\item[{retval}] \leavevmode\begin{itemize}
9915\item {}
9916\sphinxAtStartPar
99170   Keytab exists and contains entries
9918
9919\item {}
9920\sphinxAtStartPar
9921KRB5\_KT\_NOTFOUND   Keytab does not contain entries
9922
9923\end{itemize}
9924
9925\end{description}\end{quote}
9926
9927\begin{sphinxadmonition}{note}{Note:}
9928\sphinxAtStartPar
9929New in 1.11
9930\end{sphinxadmonition}
9931
9932
9933\subsubsection{krb5\_kt\_next\_entry \sphinxhyphen{}  Retrieve the next entry from the key table.}
9934\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)@\spxentry{krb5\_kt\_next\_entry}\spxextra{C function}}
9935
9936\begin{fulllineitems}
9937\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_next_entry:c.krb5_kt_next_entry}}%
9938\pysigstartmultiline
9939\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kt\_next\_entry}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{n}{keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab\_entry}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{entry}, {\hyperref[\detokenize{appdev/refs/types/krb5_kt_cursor:c.krb5_kt_cursor}]{\sphinxcrossref{\DUrole{n}{krb5\_kt\_cursor}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cursor}}{}%
9940\pysigstopmultiline
9941\end{fulllineitems}
9942
9943\begin{quote}\begin{description}
9944\item[{param}] \leavevmode
9945\sphinxAtStartPar
9946\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9947
9948\sphinxAtStartPar
9949\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} \sphinxhyphen{} Key table handle
9950
9951\sphinxAtStartPar
9952\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{entry} \sphinxhyphen{} Returned key table entry
9953
9954\sphinxAtStartPar
9955\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} \sphinxhyphen{} Key table cursor
9956
9957\end{description}\end{quote}
9958\begin{quote}\begin{description}
9959\item[{retval}] \leavevmode\begin{itemize}
9960\item {}
9961\sphinxAtStartPar
99620   Success
9963
9964\item {}
9965\sphinxAtStartPar
9966KRB5\_KT\_END   \sphinxhyphen{} if the last entry was reached
9967
9968\end{itemize}
9969
9970\item[{return}] \leavevmode\begin{itemize}
9971\item {}
9972\sphinxAtStartPar
9973Kerberos error codes
9974
9975\end{itemize}
9976
9977\end{description}\end{quote}
9978
9979\sphinxAtStartPar
9980Return the next sequential entry in \sphinxstyleemphasis{keytab} and advance \sphinxstyleemphasis{cursor} . Callers must release the returned entry with krb5\_kt\_free\_entry().
9981
9982
9983\subsubsection{krb5\_kt\_read\_service\_key \sphinxhyphen{}  Retrieve a service key from a key table.}
9984\label{\detokenize{appdev/refs/api/krb5_kt_read_service_key:krb5-kt-read-service-key-retrieve-a-service-key-from-a-key-table}}\label{\detokenize{appdev/refs/api/krb5_kt_read_service_key::doc}}\index{krb5\_kt\_read\_service\_key (C function)@\spxentry{krb5\_kt\_read\_service\_key}\spxextra{C function}}
9985
9986\begin{fulllineitems}
9987\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_read_service_key:c.krb5_kt_read_service_key}}%
9988\pysigstartmultiline
9989\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kt\_read\_service\_key}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{\DUrole{n}{krb5\_pointer}}}}\DUrole{w}{  }\DUrole{n}{keyprocarg}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{principal}, {\hyperref[\detokenize{appdev/refs/types/krb5_kvno:c.krb5_kvno}]{\sphinxcrossref{\DUrole{n}{krb5\_kvno}}}}\DUrole{w}{  }\DUrole{n}{vno}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{key}}{}%
9990\pysigstopmultiline
9991\end{fulllineitems}
9992
9993\begin{quote}\begin{description}
9994\item[{param}] \leavevmode
9995\sphinxAtStartPar
9996\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
9997
9998\sphinxAtStartPar
9999\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyprocarg} \sphinxhyphen{} Name of a key table (NULL to use default name)
10000
10001\sphinxAtStartPar
10002\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} \sphinxhyphen{} Service principal
10003
10004\sphinxAtStartPar
10005\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{vno} \sphinxhyphen{} Key version number (0 for highest available)
10006
10007\sphinxAtStartPar
10008\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} \sphinxhyphen{} Encryption type (0 for any type)
10009
10010\sphinxAtStartPar
10011\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} \sphinxhyphen{} Service key from key table
10012
10013\end{description}\end{quote}
10014\begin{quote}\begin{description}
10015\item[{retval}] \leavevmode\begin{itemize}
10016\item {}
10017\sphinxAtStartPar
100180   Success
10019
10020\end{itemize}
10021
10022\item[{return}] \leavevmode\begin{itemize}
10023\item {}
10024\sphinxAtStartPar
10025Kerberos error code if not found or keyprocarg is invalid.
10026
10027\end{itemize}
10028
10029\end{description}\end{quote}
10030
10031\sphinxAtStartPar
10032Open 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.
10033
10034\sphinxAtStartPar
10035The default key table is used, unless \sphinxstyleemphasis{keyprocarg} is non\sphinxhyphen{}null. \sphinxstyleemphasis{keyprocarg} designates a specific key table.
10036
10037\sphinxAtStartPar
10038Use krb5\_free\_keyblock() to free \sphinxstyleemphasis{key} when it is no longer needed.
10039
10040
10041\subsubsection{krb5\_kt\_remove\_entry \sphinxhyphen{}  Remove an entry from a key table.}
10042\label{\detokenize{appdev/refs/api/krb5_kt_remove_entry:krb5-kt-remove-entry-remove-an-entry-from-a-key-table}}\label{\detokenize{appdev/refs/api/krb5_kt_remove_entry::doc}}\index{krb5\_kt\_remove\_entry (C function)@\spxentry{krb5\_kt\_remove\_entry}\spxextra{C function}}
10043
10044\begin{fulllineitems}
10045\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_remove_entry:c.krb5_kt_remove_entry}}%
10046\pysigstartmultiline
10047\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kt\_remove\_entry}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{n}{id}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab\_entry}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{entry}}{}%
10048\pysigstopmultiline
10049\end{fulllineitems}
10050
10051\begin{quote}\begin{description}
10052\item[{param}] \leavevmode
10053\sphinxAtStartPar
10054\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10055
10056\sphinxAtStartPar
10057\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{id} \sphinxhyphen{} Key table handle
10058
10059\sphinxAtStartPar
10060\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{entry} \sphinxhyphen{} Entry to remove from key table
10061
10062\end{description}\end{quote}
10063\begin{quote}\begin{description}
10064\item[{retval}] \leavevmode\begin{itemize}
10065\item {}
10066\sphinxAtStartPar
100670   Success
10068
10069\item {}
10070\sphinxAtStartPar
10071KRB5\_KT\_NOWRITE   Key table is not writable
10072
10073\end{itemize}
10074
10075\item[{return}] \leavevmode\begin{itemize}
10076\item {}
10077\sphinxAtStartPar
10078Kerberos error codes
10079
10080\end{itemize}
10081
10082\end{description}\end{quote}
10083
10084
10085\subsubsection{krb5\_kt\_start\_seq\_get \sphinxhyphen{}  Start a sequential retrieval of key table entries.}
10086\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)@\spxentry{krb5\_kt\_start\_seq\_get}\spxextra{C function}}
10087
10088\begin{fulllineitems}
10089\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_start_seq_get:c.krb5_kt_start_seq_get}}%
10090\pysigstartmultiline
10091\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kt\_start\_seq\_get}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{n}{keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_kt_cursor:c.krb5_kt_cursor}]{\sphinxcrossref{\DUrole{n}{krb5\_kt\_cursor}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cursor}}{}%
10092\pysigstopmultiline
10093\end{fulllineitems}
10094
10095\begin{quote}\begin{description}
10096\item[{param}] \leavevmode
10097\sphinxAtStartPar
10098\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10099
10100\sphinxAtStartPar
10101\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} \sphinxhyphen{} Key table handle
10102
10103\sphinxAtStartPar
10104\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cursor} \sphinxhyphen{} Cursor
10105
10106\end{description}\end{quote}
10107\begin{quote}\begin{description}
10108\item[{retval}] \leavevmode\begin{itemize}
10109\item {}
10110\sphinxAtStartPar
101110   Success
10112
10113\end{itemize}
10114
10115\item[{return}] \leavevmode\begin{itemize}
10116\item {}
10117\sphinxAtStartPar
10118Kerberos error codes
10119
10120\end{itemize}
10121
10122\end{description}\end{quote}
10123
10124\sphinxAtStartPar
10125Prepare to read sequentially every key in the specified key table. Use krb5\_kt\_end\_seq\_get() to release the cursor when it is no longer needed.
10126
10127
10128\subsubsection{krb5\_make\_authdata\_kdc\_issued \sphinxhyphen{}  Encode and sign AD\sphinxhyphen{}KDCIssued authorization data.}
10129\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)@\spxentry{krb5\_make\_authdata\_kdc\_issued}\spxextra{C function}}
10130
10131\begin{fulllineitems}
10132\phantomsection\label{\detokenize{appdev/refs/api/krb5_make_authdata_kdc_issued:c.krb5_make_authdata_kdc_issued}}%
10133\pysigstartmultiline
10134\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_make\_authdata\_kdc\_issued}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{issuer}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{k}{const}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{authdata}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{ad\_kdcissued}}{}%
10135\pysigstopmultiline
10136\end{fulllineitems}
10137
10138\begin{quote}\begin{description}
10139\item[{param}] \leavevmode
10140\sphinxAtStartPar
10141\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10142
10143\sphinxAtStartPar
10144\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Session key
10145
10146\sphinxAtStartPar
10147\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{issuer} \sphinxhyphen{} The name of the issuing principal
10148
10149\sphinxAtStartPar
10150\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authdata} \sphinxhyphen{} List of authorization data to be signed
10151
10152\sphinxAtStartPar
10153\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ad\_kdcissued} \sphinxhyphen{} List containing AD\sphinxhyphen{}KDCIssued authdata
10154
10155\end{description}\end{quote}
10156
10157\sphinxAtStartPar
10158This function wraps a list of authorization data entries \sphinxstyleemphasis{authdata} in an AD\sphinxhyphen{}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\sphinxhyphen{}element list.
10159
10160
10161\subsubsection{krb5\_marshal\_credentials \sphinxhyphen{}  Serialize a krb5\_creds object.}
10162\label{\detokenize{appdev/refs/api/krb5_marshal_credentials:krb5-marshal-credentials-serialize-a-krb5-creds-object}}\label{\detokenize{appdev/refs/api/krb5_marshal_credentials::doc}}\index{krb5\_marshal\_credentials (C function)@\spxentry{krb5\_marshal\_credentials}\spxextra{C function}}
10163
10164\begin{fulllineitems}
10165\phantomsection\label{\detokenize{appdev/refs/api/krb5_marshal_credentials:c.krb5_marshal_credentials}}%
10166\pysigstartmultiline
10167\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_marshal\_credentials}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{in\_creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{data\_out}}{}%
10168\pysigstopmultiline
10169\end{fulllineitems}
10170
10171\begin{quote}\begin{description}
10172\item[{param}] \leavevmode
10173\sphinxAtStartPar
10174\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10175
10176\sphinxAtStartPar
10177\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_creds} \sphinxhyphen{} The credentials object to serialize
10178
10179\sphinxAtStartPar
10180\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data\_out} \sphinxhyphen{} The serialized credentials
10181
10182\end{description}\end{quote}
10183\begin{quote}\begin{description}
10184\item[{retval}] \leavevmode\begin{itemize}
10185\item {}
10186\sphinxAtStartPar
101870   Success; otherwise \sphinxhyphen{} Kerberos error codes
10188
10189\end{itemize}
10190
10191\end{description}\end{quote}
10192
10193\sphinxAtStartPar
10194Serialize \sphinxstyleemphasis{creds} in the format used by the FILE ccache format (vesion 4) and KCM ccache protocol.
10195
10196\sphinxAtStartPar
10197Use krb5\_free\_data() to free \sphinxstyleemphasis{data\_out} when it is no longer needed.
10198
10199
10200\subsubsection{krb5\_merge\_authdata \sphinxhyphen{}  Merge two authorization data lists into a new list.}
10201\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)@\spxentry{krb5\_merge\_authdata}\spxextra{C function}}
10202
10203\begin{fulllineitems}
10204\phantomsection\label{\detokenize{appdev/refs/api/krb5_merge_authdata:c.krb5_merge_authdata}}%
10205\pysigstartmultiline
10206\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_merge\_authdata}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{k}{const}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{inauthdat1}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{k}{const}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{inauthdat2}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{outauthdat}}{}%
10207\pysigstopmultiline
10208\end{fulllineitems}
10209
10210\begin{quote}\begin{description}
10211\item[{param}] \leavevmode
10212\sphinxAtStartPar
10213\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10214
10215\sphinxAtStartPar
10216\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inauthdat1} \sphinxhyphen{} First list of \sphinxstyleemphasis{krb5\_authdata} structures
10217
10218\sphinxAtStartPar
10219\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inauthdat2} \sphinxhyphen{} Second list of \sphinxstyleemphasis{krb5\_authdata} structures
10220
10221\sphinxAtStartPar
10222\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outauthdat} \sphinxhyphen{} Merged list of \sphinxstyleemphasis{krb5\_authdata} structures
10223
10224\end{description}\end{quote}
10225\begin{quote}\begin{description}
10226\item[{retval}] \leavevmode\begin{itemize}
10227\item {}
10228\sphinxAtStartPar
102290   Success; otherwise \sphinxhyphen{} Kerberos error codes
10230
10231\end{itemize}
10232
10233\end{description}\end{quote}
10234
10235\sphinxAtStartPar
10236Merge two authdata arrays, such as the array from a ticket and authenticator. Use krb5\_free\_authdata() to free \sphinxstyleemphasis{outauthdat} when it is no longer needed.
10237
10238\begin{sphinxadmonition}{note}{Note:}
10239\sphinxAtStartPar
10240The last array entry in \sphinxstyleemphasis{inauthdat1} and \sphinxstyleemphasis{inauthdat2} must be a NULL pointer.
10241\end{sphinxadmonition}
10242
10243
10244\subsubsection{krb5\_mk\_1cred \sphinxhyphen{}  Format a KRB\sphinxhyphen{}CRED message for a single set of credentials.}
10245\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)@\spxentry{krb5\_mk\_1cred}\spxextra{C function}}
10246
10247\begin{fulllineitems}
10248\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_1cred:c.krb5_mk_1cred}}%
10249\pysigstartmultiline
10250\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_mk\_1cred}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{der\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{\DUrole{n}{krb5\_replay\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{rdata\_out}}{}%
10251\pysigstopmultiline
10252\end{fulllineitems}
10253
10254\begin{quote}\begin{description}
10255\item[{param}] \leavevmode
10256\sphinxAtStartPar
10257\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10258
10259\sphinxAtStartPar
10260\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
10261
10262\sphinxAtStartPar
10263\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} \sphinxhyphen{} Pointer to credentials
10264
10265\sphinxAtStartPar
10266\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{der\_out} \sphinxhyphen{} Encoded credentials
10267
10268\sphinxAtStartPar
10269\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} \sphinxhyphen{} Replay cache data (NULL if not needed)
10270
10271\end{description}\end{quote}
10272\begin{quote}\begin{description}
10273\item[{retval}] \leavevmode\begin{itemize}
10274\item {}
10275\sphinxAtStartPar
102760   Success
10277
10278\item {}
10279\sphinxAtStartPar
10280ENOMEM   Insufficient memory
10281
10282\item {}
10283\sphinxAtStartPar
10284KRB5\_RC\_REQUIRED   Message replay detection requires rcache parameter
10285
10286\end{itemize}
10287
10288\item[{return}] \leavevmode\begin{itemize}
10289\item {}
10290\sphinxAtStartPar
10291Kerberos error codes
10292
10293\end{itemize}
10294
10295\end{description}\end{quote}
10296
10297\sphinxAtStartPar
10298This is a convenience function that calls krb5\_mk\_ncred() with a single set of credentials.
10299
10300
10301\subsubsection{krb5\_mk\_error \sphinxhyphen{}  Format and encode a KRB\_ERROR message.}
10302\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)@\spxentry{krb5\_mk\_error}\spxextra{C function}}
10303
10304\begin{fulllineitems}
10305\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_error:c.krb5_mk_error}}%
10306\pysigstartmultiline
10307\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_mk\_error}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{\DUrole{n}{krb5\_error}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{dec\_err}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{enc\_err}}{}%
10308\pysigstopmultiline
10309\end{fulllineitems}
10310
10311\begin{quote}\begin{description}
10312\item[{param}] \leavevmode
10313\sphinxAtStartPar
10314\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10315
10316\sphinxAtStartPar
10317\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{dec\_err} \sphinxhyphen{} Error structure to be encoded
10318
10319\sphinxAtStartPar
10320\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{enc\_err} \sphinxhyphen{} Encoded error structure
10321
10322\end{description}\end{quote}
10323\begin{quote}\begin{description}
10324\item[{retval}] \leavevmode\begin{itemize}
10325\item {}
10326\sphinxAtStartPar
103270   Success; otherwise \sphinxhyphen{} Kerberos error codes
10328
10329\end{itemize}
10330
10331\end{description}\end{quote}
10332
10333\sphinxAtStartPar
10334This function creates a \sphinxstylestrong{KRB\_ERROR} message in \sphinxstyleemphasis{enc\_err} . Use krb5\_free\_data\_contents() to free \sphinxstyleemphasis{enc\_err} when it is no longer needed.
10335
10336
10337\subsubsection{krb5\_mk\_ncred \sphinxhyphen{}  Format a KRB\sphinxhyphen{}CRED message for an array of credentials.}
10338\label{\detokenize{appdev/refs/api/krb5_mk_ncred:krb5-mk-ncred-format-a-krb-cred-message-for-an-array-of-credentials}}\label{\detokenize{appdev/refs/api/krb5_mk_ncred::doc}}\index{krb5\_mk\_ncred (C function)@\spxentry{krb5\_mk\_ncred}\spxextra{C function}}
10339
10340\begin{fulllineitems}
10341\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_ncred:c.krb5_mk_ncred}}%
10342\pysigstartmultiline
10343\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_mk\_ncred}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{der\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{\DUrole{n}{krb5\_replay\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{rdata\_out}}{}%
10344\pysigstopmultiline
10345\end{fulllineitems}
10346
10347\begin{quote}\begin{description}
10348\item[{param}] \leavevmode
10349\sphinxAtStartPar
10350\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10351
10352\sphinxAtStartPar
10353\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
10354
10355\sphinxAtStartPar
10356\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} \sphinxhyphen{} Null\sphinxhyphen{}terminated array of credentials
10357
10358\sphinxAtStartPar
10359\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{der\_out} \sphinxhyphen{} Encoded credentials
10360
10361\sphinxAtStartPar
10362\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} \sphinxhyphen{} Replay cache information (NULL if not needed)
10363
10364\end{description}\end{quote}
10365\begin{quote}\begin{description}
10366\item[{retval}] \leavevmode\begin{itemize}
10367\item {}
10368\sphinxAtStartPar
103690   Success
10370
10371\item {}
10372\sphinxAtStartPar
10373ENOMEM   Insufficient memory
10374
10375\item {}
10376\sphinxAtStartPar
10377KRB5\_RC\_REQUIRED   Message replay detection requires rcache parameter
10378
10379\end{itemize}
10380
10381\item[{return}] \leavevmode\begin{itemize}
10382\item {}
10383\sphinxAtStartPar
10384Kerberos error codes
10385
10386\end{itemize}
10387
10388\end{description}\end{quote}
10389
10390\sphinxAtStartPar
10391This function takes an array of credentials \sphinxstyleemphasis{creds} and formats a \sphinxstylestrong{KRB\sphinxhyphen{}CRED} message \sphinxstyleemphasis{der\_out} to pass to krb5\_rd\_cred().
10392
10393\sphinxAtStartPar
10394The 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\sphinxhyphen{}CRED message.
10395
10396\sphinxAtStartPar
10397If the \#KRB5\_AUTH\_CONTEXT\_DO\_TIME flag is set in \sphinxstyleemphasis{auth\_context} , an entry for the message is entered in an in\sphinxhyphen{}memory replay cache to detect if the message is reflected by an attacker. If \#KRB5\_AUTH\_CONTEXT\_DO\_TIME is not set, no replay cache is used. If \#KRB5\_AUTH\_CONTEXT\_RET\_TIME is set in \sphinxstyleemphasis{auth\_context} , the timestamp used for the KRB\sphinxhyphen{}CRED message is stored in \sphinxstyleemphasis{rdata\_out} .
10398
10399\sphinxAtStartPar
10400If either \#KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE or \#KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE is set, the \sphinxstyleemphasis{auth\_context} local sequence number is included in the KRB\sphinxhyphen{}CRED message and then incremented. If \#KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE is set, the sequence number used is stored in \sphinxstyleemphasis{rdata\_out} .
10401
10402\sphinxAtStartPar
10403Use krb5\_free\_data\_contents() to free \sphinxstyleemphasis{der\_out} when it is no longer needed.
10404
10405\sphinxAtStartPar
10406The 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.
10407
10408\begin{sphinxadmonition}{note}{Note:}
10409\sphinxAtStartPar
10410The \sphinxstyleemphasis{rdata\_out} argument is required if the \#KRB5\_AUTH\_CONTEXT\_RET\_TIME or \#KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE flag is set in \sphinxstyleemphasis{auth\_context} .
10411\end{sphinxadmonition}
10412
10413
10414\subsubsection{krb5\_mk\_priv \sphinxhyphen{}  Format a KRB\sphinxhyphen{}PRIV message.}
10415\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)@\spxentry{krb5\_mk\_priv}\spxextra{C function}}
10416
10417\begin{fulllineitems}
10418\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_priv:c.krb5_mk_priv}}%
10419\pysigstartmultiline
10420\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_mk\_priv}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{userdata}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{der\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{\DUrole{n}{krb5\_replay\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{rdata\_out}}{}%
10421\pysigstopmultiline
10422\end{fulllineitems}
10423
10424\begin{quote}\begin{description}
10425\item[{param}] \leavevmode
10426\sphinxAtStartPar
10427\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10428
10429\sphinxAtStartPar
10430\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
10431
10432\sphinxAtStartPar
10433\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{userdata} \sphinxhyphen{} User data for \sphinxstylestrong{KRB\sphinxhyphen{}PRIV} message
10434
10435\sphinxAtStartPar
10436\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{der\_out} \sphinxhyphen{} Formatted \sphinxstylestrong{KRB\sphinxhyphen{}PRIV} message
10437
10438\sphinxAtStartPar
10439\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} \sphinxhyphen{} Replay data (NULL if not needed)
10440
10441\end{description}\end{quote}
10442\begin{quote}\begin{description}
10443\item[{retval}] \leavevmode\begin{itemize}
10444\item {}
10445\sphinxAtStartPar
104460   Success; otherwise \sphinxhyphen{} Kerberos error codes
10447
10448\end{itemize}
10449
10450\end{description}\end{quote}
10451
10452\sphinxAtStartPar
10453This function is similar to krb5\_mk\_safe(), but the message is encrypted and integrity\sphinxhyphen{}protected, not just integrity\sphinxhyphen{}protected.
10454
10455\sphinxAtStartPar
10456The local address in \sphinxstyleemphasis{auth\_context} must be set, and is used to form the sender address used in the KRB\sphinxhyphen{}PRIV message. The remote address is optional; if specified, it will be used to form the receiver address used in the message.
10457
10458\sphinxAtStartPar
10459If the \#KRB5\_AUTH\_CONTEXT\_DO\_TIME flag is set in \sphinxstyleemphasis{auth\_context} , a timestamp is included in the KRB\sphinxhyphen{}PRIV message, and an entry for the message is entered in an in\sphinxhyphen{}memory replay cache to detect if the message is reflected by an attacker. If \#KRB5\_AUTH\_CONTEXT\_DO\_TIME is not set, no replay cache is used. If \#KRB5\_AUTH\_CONTEXT\_RET\_TIME is set in \sphinxstyleemphasis{auth\_context} , a timestamp is included in the KRB\sphinxhyphen{}PRIV message and is stored in \sphinxstyleemphasis{rdata\_out} .
10460
10461\sphinxAtStartPar
10462If either \#KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE or \#KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE is set, the \sphinxstyleemphasis{auth\_context} local sequence number is included in the KRB\sphinxhyphen{}PRIV message and then incremented. If \#KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE is set, the sequence number used is stored in \sphinxstyleemphasis{rdata\_out} .
10463
10464\sphinxAtStartPar
10465Use krb5\_free\_data\_contents() to free \sphinxstyleemphasis{der\_out} when it is no longer needed.
10466
10467\begin{sphinxadmonition}{note}{Note:}
10468\sphinxAtStartPar
10469The \sphinxstyleemphasis{rdata\_out} argument is required if the \#KRB5\_AUTH\_CONTEXT\_RET\_TIME or \#KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE flag is set in \sphinxstyleemphasis{auth\_context} .
10470\end{sphinxadmonition}
10471
10472
10473\subsubsection{krb5\_mk\_rep \sphinxhyphen{}  Format and encrypt a KRB\_AP\_REP message.}
10474\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)@\spxentry{krb5\_mk\_rep}\spxextra{C function}}
10475
10476\begin{fulllineitems}
10477\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_rep:c.krb5_mk_rep}}%
10478\pysigstartmultiline
10479\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_mk\_rep}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{outbuf}}{}%
10480\pysigstopmultiline
10481\end{fulllineitems}
10482
10483\begin{quote}\begin{description}
10484\item[{param}] \leavevmode
10485\sphinxAtStartPar
10486\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10487
10488\sphinxAtStartPar
10489\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
10490
10491\sphinxAtStartPar
10492\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} \sphinxhyphen{} \sphinxstylestrong{AP\sphinxhyphen{}REP} message
10493
10494\end{description}\end{quote}
10495\begin{quote}\begin{description}
10496\item[{retval}] \leavevmode\begin{itemize}
10497\item {}
10498\sphinxAtStartPar
104990   Success; otherwise \sphinxhyphen{} Kerberos error codes
10500
10501\end{itemize}
10502
10503\end{description}\end{quote}
10504
10505\sphinxAtStartPar
10506This function fills in \sphinxstyleemphasis{outbuf} with an AP\sphinxhyphen{}REP message using information from \sphinxstyleemphasis{auth\_context} .
10507
10508\sphinxAtStartPar
10509If the flags in \sphinxstyleemphasis{auth\_context} indicate that a sequence number should be used (either \#KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE or \#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().
10510
10511\sphinxAtStartPar
10512Use krb5\_free\_data\_contents() to free \sphinxstyleemphasis{outbuf} when it is no longer needed.
10513
10514
10515\subsubsection{krb5\_mk\_rep\_dce \sphinxhyphen{}  Format and encrypt a KRB\_AP\_REP message for DCE RPC.}
10516\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)@\spxentry{krb5\_mk\_rep\_dce}\spxextra{C function}}
10517
10518\begin{fulllineitems}
10519\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_rep_dce:c.krb5_mk_rep_dce}}%
10520\pysigstartmultiline
10521\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_mk\_rep\_dce}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{outbuf}}{}%
10522\pysigstopmultiline
10523\end{fulllineitems}
10524
10525\begin{quote}\begin{description}
10526\item[{param}] \leavevmode
10527\sphinxAtStartPar
10528\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10529
10530\sphinxAtStartPar
10531\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
10532
10533\sphinxAtStartPar
10534\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} \sphinxhyphen{} \sphinxstylestrong{AP\sphinxhyphen{}REP} message
10535
10536\end{description}\end{quote}
10537\begin{quote}\begin{description}
10538\item[{retval}] \leavevmode\begin{itemize}
10539\item {}
10540\sphinxAtStartPar
105410   Success; otherwise \sphinxhyphen{} Kerberos error codes
10542
10543\end{itemize}
10544
10545\end{description}\end{quote}
10546
10547\sphinxAtStartPar
10548Use krb5\_free\_data\_contents() to free \sphinxstyleemphasis{outbuf} when it is no longer needed.
10549
10550
10551\subsubsection{krb5\_mk\_req \sphinxhyphen{}  Create a KRB\_AP\_REQ message.}
10552\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)@\spxentry{krb5\_mk\_req}\spxextra{C function}}
10553
10554\begin{fulllineitems}
10555\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_req:c.krb5_mk_req}}%
10556\pysigstartmultiline
10557\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_mk\_req}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\DUrole{n}{ap\_req\_options}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{service}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{hostname}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{in\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{outbuf}}{}%
10558\pysigstopmultiline
10559\end{fulllineitems}
10560
10561\begin{quote}\begin{description}
10562\item[{param}] \leavevmode
10563\sphinxAtStartPar
10564\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10565
10566\sphinxAtStartPar
10567\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Pre\sphinxhyphen{}existing or newly created auth context
10568
10569\sphinxAtStartPar
10570\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_options} \sphinxhyphen{} Options (see AP\_OPTS macros)
10571
10572\sphinxAtStartPar
10573\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{service} \sphinxhyphen{} Service name, or NULL to use \sphinxstylestrong{“host”}
10574
10575\sphinxAtStartPar
10576\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{hostname} \sphinxhyphen{} Host name, or NULL to use local hostname
10577
10578\sphinxAtStartPar
10579\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_data} \sphinxhyphen{} Application data to be checksummed in the authenticator, or NULL
10580
10581\sphinxAtStartPar
10582\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} \sphinxhyphen{} Credential cache used to obtain credentials for the desired service.
10583
10584\sphinxAtStartPar
10585\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} \sphinxhyphen{} \sphinxstylestrong{AP\sphinxhyphen{}REQ} message
10586
10587\end{description}\end{quote}
10588\begin{quote}\begin{description}
10589\item[{retval}] \leavevmode\begin{itemize}
10590\item {}
10591\sphinxAtStartPar
105920   Success; otherwise \sphinxhyphen{} Kerberos error codes
10593
10594\end{itemize}
10595
10596\end{description}\end{quote}
10597
10598\sphinxAtStartPar
10599This function is similar to 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.
10600
10601\sphinxAtStartPar
10602Use krb5\_free\_data\_contents() to free \sphinxstyleemphasis{outbuf} when it is no longer needed.
10603
10604
10605\subsubsection{krb5\_mk\_req\_extended \sphinxhyphen{}  Create a KRB\_AP\_REQ message using supplied credentials.}
10606\label{\detokenize{appdev/refs/api/krb5_mk_req_extended:krb5-mk-req-extended-create-a-krb-ap-req-message-using-supplied-credentials}}\label{\detokenize{appdev/refs/api/krb5_mk_req_extended::doc}}\index{krb5\_mk\_req\_extended (C function)@\spxentry{krb5\_mk\_req\_extended}\spxextra{C function}}
10607
10608\begin{fulllineitems}
10609\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_req_extended:c.krb5_mk_req_extended}}%
10610\pysigstartmultiline
10611\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_mk\_req\_extended}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\DUrole{n}{ap\_req\_options}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{in\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{in\_creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{outbuf}}{}%
10612\pysigstopmultiline
10613\end{fulllineitems}
10614
10615\begin{quote}\begin{description}
10616\item[{param}] \leavevmode
10617\sphinxAtStartPar
10618\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10619
10620\sphinxAtStartPar
10621\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Pre\sphinxhyphen{}existing or newly created auth context
10622
10623\sphinxAtStartPar
10624\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_options} \sphinxhyphen{} Options (see AP\_OPTS macros)
10625
10626\sphinxAtStartPar
10627\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_data} \sphinxhyphen{} Application data to be checksummed in the authenticator, or NULL
10628
10629\sphinxAtStartPar
10630\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_creds} \sphinxhyphen{} Credentials for the service with valid ticket and key
10631
10632\sphinxAtStartPar
10633\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} \sphinxhyphen{} \sphinxstylestrong{AP\sphinxhyphen{}REQ} message
10634
10635\end{description}\end{quote}
10636\begin{quote}\begin{description}
10637\item[{retval}] \leavevmode\begin{itemize}
10638\item {}
10639\sphinxAtStartPar
106400   Success; otherwise \sphinxhyphen{} Kerberos error codes
10641
10642\end{itemize}
10643
10644\end{description}\end{quote}
10645
10646\sphinxAtStartPar
10647Valid \sphinxstyleemphasis{ap\_req\_options} are:
10648\begin{quote}
10649\begin{itemize}
10650\item {}
10651\sphinxAtStartPar
10652\#AP\_OPTS\_USE\_SESSION\_KEY \sphinxhyphen{} Use the session key when creating the request used for user to user authentication.
10653
10654\item {}
10655\sphinxAtStartPar
10656\#AP\_OPTS\_MUTUAL\_REQUIRED \sphinxhyphen{} Request a mutual authentication packet from the receiver.
10657
10658\item {}
10659\sphinxAtStartPar
10660\#AP\_OPTS\_USE\_SUBKEY \sphinxhyphen{} Generate a subsession key from the current session key obtained from the credentials.
10661
10662\end{itemize}
10663
10664\sphinxAtStartPar
10665This 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\sphinxhyphen{}null, a checksum of it will be included in the authenticator contained in the KRB\_AP\_REQ message. Use krb5\_free\_data\_contents() to free \sphinxstyleemphasis{outbuf} when it is no longer needed.
10666\end{quote}
10667
10668\sphinxAtStartPar
10669On 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\sphinxhyphen{}sharing problems; the caller should not need these fields anyway, since the caller supplied them.)
10670
10671
10672\sphinxstrong{See also:}
10673\nopagebreak
10674
10675
10676\sphinxAtStartPar
10677krb5\_mk\_req()
10678
10679
10680
10681
10682\subsubsection{krb5\_mk\_safe \sphinxhyphen{}  Format a KRB\sphinxhyphen{}SAFE message.}
10683\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)@\spxentry{krb5\_mk\_safe}\spxextra{C function}}
10684
10685\begin{fulllineitems}
10686\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_safe:c.krb5_mk_safe}}%
10687\pysigstartmultiline
10688\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_mk\_safe}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{userdata}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{der\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{\DUrole{n}{krb5\_replay\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{rdata\_out}}{}%
10689\pysigstopmultiline
10690\end{fulllineitems}
10691
10692\begin{quote}\begin{description}
10693\item[{param}] \leavevmode
10694\sphinxAtStartPar
10695\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10696
10697\sphinxAtStartPar
10698\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
10699
10700\sphinxAtStartPar
10701\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{userdata} \sphinxhyphen{} User data in the message
10702
10703\sphinxAtStartPar
10704\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{der\_out} \sphinxhyphen{} Formatted \sphinxstylestrong{KRB\sphinxhyphen{}SAFE} buffer
10705
10706\sphinxAtStartPar
10707\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} \sphinxhyphen{} Replay data. Specify NULL if not needed
10708
10709\end{description}\end{quote}
10710\begin{quote}\begin{description}
10711\item[{retval}] \leavevmode\begin{itemize}
10712\item {}
10713\sphinxAtStartPar
107140   Success; otherwise \sphinxhyphen{} Kerberos error codes
10715
10716\end{itemize}
10717
10718\end{description}\end{quote}
10719
10720\sphinxAtStartPar
10721This function creates an integrity protected \sphinxstylestrong{KRB\sphinxhyphen{}SAFE} message using data supplied by the application.
10722
10723\sphinxAtStartPar
10724Fields 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 KRB5\_AUTH\_CONTEXT flags.
10725
10726\sphinxAtStartPar
10727The local address in \sphinxstyleemphasis{auth\_context} must be set, and is used to form the sender address used in the KRB\sphinxhyphen{}SAFE message. The remote address is optional; if specified, it will be used to form the receiver address used in the message.
10728
10729\sphinxAtStartPar
10730If the \#KRB5\_AUTH\_CONTEXT\_DO\_TIME flag is set in \sphinxstyleemphasis{auth\_context} , a timestamp is included in the KRB\sphinxhyphen{}SAFE message, and an entry for the message is entered in an in\sphinxhyphen{}memory replay cache to detect if the message is reflected by an attacker. If \#KRB5\_AUTH\_CONTEXT\_DO\_TIME is not set, no replay cache is used. If \#KRB5\_AUTH\_CONTEXT\_RET\_TIME is set in \sphinxstyleemphasis{auth\_context} , a timestamp is included in the KRB\sphinxhyphen{}SAFE message and is stored in \sphinxstyleemphasis{rdata\_out} .
10731
10732\sphinxAtStartPar
10733If either \#KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE or \#KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE is set, the \sphinxstyleemphasis{auth\_context} local sequence number is included in the KRB\sphinxhyphen{}SAFE message and then incremented. If \#KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE is set, the sequence number used is stored in \sphinxstyleemphasis{rdata\_out} .
10734
10735\sphinxAtStartPar
10736Use krb5\_free\_data\_contents() to free \sphinxstyleemphasis{der\_out} when it is no longer needed.
10737
10738\begin{sphinxadmonition}{note}{Note:}
10739\sphinxAtStartPar
10740The \sphinxstyleemphasis{rdata\_out} argument is required if the \#KRB5\_AUTH\_CONTEXT\_RET\_TIME or \#KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE flag is set in \sphinxstyleemphasis{auth\_context} .
10741\end{sphinxadmonition}
10742
10743
10744\subsubsection{krb5\_os\_localaddr \sphinxhyphen{}  Return all interface addresses for this host.}
10745\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)@\spxentry{krb5\_os\_localaddr}\spxextra{C function}}
10746
10747\begin{fulllineitems}
10748\phantomsection\label{\detokenize{appdev/refs/api/krb5_os_localaddr:c.krb5_os_localaddr}}%
10749\pysigstartmultiline
10750\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_os\_localaddr}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{addr}}{}%
10751\pysigstopmultiline
10752\end{fulllineitems}
10753
10754\begin{quote}\begin{description}
10755\item[{param}] \leavevmode
10756\sphinxAtStartPar
10757\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10758
10759\sphinxAtStartPar
10760\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{addr} \sphinxhyphen{} Array of krb5\_address pointers, ending with NULL
10761
10762\end{description}\end{quote}
10763\begin{quote}\begin{description}
10764\item[{retval}] \leavevmode\begin{itemize}
10765\item {}
10766\sphinxAtStartPar
107670   Success; otherwise \sphinxhyphen{} Kerberos error codes
10768
10769\end{itemize}
10770
10771\end{description}\end{quote}
10772
10773\sphinxAtStartPar
10774Use krb5\_free\_addresses() to free \sphinxstyleemphasis{addr} when it is no longer needed.
10775
10776
10777\subsubsection{krb5\_pac\_add\_buffer \sphinxhyphen{}  Add a buffer to a PAC handle.}
10778\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)@\spxentry{krb5\_pac\_add\_buffer}\spxextra{C function}}
10779
10780\begin{fulllineitems}
10781\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_add_buffer:c.krb5_pac_add_buffer}}%
10782\pysigstartmultiline
10783\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_pac\_add\_buffer}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{\DUrole{n}{krb5\_pac}}}}\DUrole{w}{  }\DUrole{n}{pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{\DUrole{n}{krb5\_ui\_4}}}}\DUrole{w}{  }\DUrole{n}{type}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}}{}%
10784\pysigstopmultiline
10785\end{fulllineitems}
10786
10787\begin{quote}\begin{description}
10788\item[{param}] \leavevmode
10789\sphinxAtStartPar
10790\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10791
10792\sphinxAtStartPar
10793\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} \sphinxhyphen{} PAC handle
10794
10795\sphinxAtStartPar
10796\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} \sphinxhyphen{} Buffer type
10797
10798\sphinxAtStartPar
10799\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} \sphinxhyphen{} contents
10800
10801\end{description}\end{quote}
10802\begin{quote}\begin{description}
10803\item[{retval}] \leavevmode\begin{itemize}
10804\item {}
10805\sphinxAtStartPar
108060   Success; otherwise \sphinxhyphen{} Kerberos error codes
10807
10808\end{itemize}
10809
10810\end{description}\end{quote}
10811
10812\sphinxAtStartPar
10813This 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.
10814
10815\sphinxAtStartPar
10816The valid values of \sphinxstyleemphasis{type} is one of the following:
10817\begin{itemize}
10818\item {}
10819\sphinxAtStartPar
10820\#KRB5\_PAC\_LOGON\_INFO \sphinxhyphen{} Logon information
10821
10822\item {}
10823\sphinxAtStartPar
10824\#KRB5\_PAC\_CREDENTIALS\_INFO \sphinxhyphen{} Credentials information
10825
10826\item {}
10827\sphinxAtStartPar
10828\#KRB5\_PAC\_SERVER\_CHECKSUM \sphinxhyphen{} Server checksum
10829
10830\item {}
10831\sphinxAtStartPar
10832\#KRB5\_PAC\_PRIVSVR\_CHECKSUM \sphinxhyphen{} KDC checksum
10833
10834\item {}
10835\sphinxAtStartPar
10836\#KRB5\_PAC\_CLIENT\_INFO \sphinxhyphen{} Client name and ticket information
10837
10838\item {}
10839\sphinxAtStartPar
10840\#KRB5\_PAC\_DELEGATION\_INFO \sphinxhyphen{} Constrained delegation information
10841
10842\item {}
10843\sphinxAtStartPar
10844\#KRB5\_PAC\_UPN\_DNS\_INFO \sphinxhyphen{} User principal name and DNS information
10845
10846\end{itemize}
10847
10848
10849\subsubsection{krb5\_pac\_free \sphinxhyphen{}  Free a PAC handle.}
10850\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)@\spxentry{krb5\_pac\_free}\spxextra{C function}}
10851
10852\begin{fulllineitems}
10853\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_free:c.krb5_pac_free}}%
10854\pysigstartmultiline
10855\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_pac\_free}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{\DUrole{n}{krb5\_pac}}}}\DUrole{w}{  }\DUrole{n}{pac}}{}%
10856\pysigstopmultiline
10857\end{fulllineitems}
10858
10859\begin{quote}\begin{description}
10860\item[{param}] \leavevmode
10861\sphinxAtStartPar
10862\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10863
10864\sphinxAtStartPar
10865\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} \sphinxhyphen{} PAC to be freed
10866
10867\end{description}\end{quote}
10868
10869\sphinxAtStartPar
10870This function frees the contents of \sphinxstyleemphasis{pac} and the structure itself.
10871
10872
10873\subsubsection{krb5\_pac\_get\_buffer \sphinxhyphen{}  Retrieve a buffer value from a PAC.}
10874\label{\detokenize{appdev/refs/api/krb5_pac_get_buffer:krb5-pac-get-buffer-retrieve-a-buffer-value-from-a-pac}}\label{\detokenize{appdev/refs/api/krb5_pac_get_buffer::doc}}\index{krb5\_pac\_get\_buffer (C function)@\spxentry{krb5\_pac\_get\_buffer}\spxextra{C function}}
10875
10876\begin{fulllineitems}
10877\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_get_buffer:c.krb5_pac_get_buffer}}%
10878\pysigstartmultiline
10879\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_pac\_get\_buffer}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{\DUrole{n}{krb5\_pac}}}}\DUrole{w}{  }\DUrole{n}{pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{\DUrole{n}{krb5\_ui\_4}}}}\DUrole{w}{  }\DUrole{n}{type}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}}{}%
10880\pysigstopmultiline
10881\end{fulllineitems}
10882
10883\begin{quote}\begin{description}
10884\item[{param}] \leavevmode
10885\sphinxAtStartPar
10886\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10887
10888\sphinxAtStartPar
10889\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} \sphinxhyphen{} PAC handle
10890
10891\sphinxAtStartPar
10892\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} \sphinxhyphen{} Type of buffer to retrieve
10893
10894\sphinxAtStartPar
10895\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} \sphinxhyphen{} Buffer value
10896
10897\end{description}\end{quote}
10898\begin{quote}\begin{description}
10899\item[{retval}] \leavevmode\begin{itemize}
10900\item {}
10901\sphinxAtStartPar
109020   Success; otherwise \sphinxhyphen{} Kerberos error codes
10903
10904\end{itemize}
10905
10906\end{description}\end{quote}
10907
10908\sphinxAtStartPar
10909Use krb5\_free\_data\_contents() to free \sphinxstyleemphasis{data} when it is no longer needed.
10910
10911
10912\subsubsection{krb5\_pac\_get\_types \sphinxhyphen{}  Return an array of buffer types in a PAC handle.}
10913\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)@\spxentry{krb5\_pac\_get\_types}\spxextra{C function}}
10914
10915\begin{fulllineitems}
10916\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_get_types:c.krb5_pac_get_types}}%
10917\pysigstartmultiline
10918\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_pac\_get\_types}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{\DUrole{n}{krb5\_pac}}}}\DUrole{w}{  }\DUrole{n}{pac}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{len}, {\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{\DUrole{n}{krb5\_ui\_4}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{types}}{}%
10919\pysigstopmultiline
10920\end{fulllineitems}
10921
10922\begin{quote}\begin{description}
10923\item[{param}] \leavevmode
10924\sphinxAtStartPar
10925\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10926
10927\sphinxAtStartPar
10928\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} \sphinxhyphen{} PAC handle
10929
10930\sphinxAtStartPar
10931\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{len} \sphinxhyphen{} Number of entries in \sphinxstyleemphasis{types}
10932
10933\sphinxAtStartPar
10934\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{types} \sphinxhyphen{} Array of buffer types
10935
10936\end{description}\end{quote}
10937\begin{quote}\begin{description}
10938\item[{retval}] \leavevmode\begin{itemize}
10939\item {}
10940\sphinxAtStartPar
109410   Success; otherwise \sphinxhyphen{} Kerberos error codes
10942
10943\end{itemize}
10944
10945\end{description}\end{quote}
10946
10947
10948\subsubsection{krb5\_pac\_init \sphinxhyphen{}  Create an empty Privilege Attribute Certificate (PAC) handle.}
10949\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)@\spxentry{krb5\_pac\_init}\spxextra{C function}}
10950
10951\begin{fulllineitems}
10952\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_init:c.krb5_pac_init}}%
10953\pysigstartmultiline
10954\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_pac\_init}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{\DUrole{n}{krb5\_pac}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{pac}}{}%
10955\pysigstopmultiline
10956\end{fulllineitems}
10957
10958\begin{quote}\begin{description}
10959\item[{param}] \leavevmode
10960\sphinxAtStartPar
10961\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10962
10963\sphinxAtStartPar
10964\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{pac} \sphinxhyphen{} New PAC handle
10965
10966\end{description}\end{quote}
10967\begin{quote}\begin{description}
10968\item[{retval}] \leavevmode\begin{itemize}
10969\item {}
10970\sphinxAtStartPar
109710   Success; otherwise \sphinxhyphen{} Kerberos error codes
10972
10973\end{itemize}
10974
10975\end{description}\end{quote}
10976
10977\sphinxAtStartPar
10978Use krb5\_pac\_free() to free \sphinxstyleemphasis{pac} when it is no longer needed.
10979
10980
10981\subsubsection{krb5\_pac\_parse \sphinxhyphen{}  Unparse an encoded PAC into a new handle.}
10982\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)@\spxentry{krb5\_pac\_parse}\spxextra{C function}}
10983
10984\begin{fulllineitems}
10985\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_parse:c.krb5_pac_parse}}%
10986\pysigstartmultiline
10987\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_pac\_parse}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{void}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ptr}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{len}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{\DUrole{n}{krb5\_pac}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{pac}}{}%
10988\pysigstopmultiline
10989\end{fulllineitems}
10990
10991\begin{quote}\begin{description}
10992\item[{param}] \leavevmode
10993\sphinxAtStartPar
10994\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
10995
10996\sphinxAtStartPar
10997\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ptr} \sphinxhyphen{} PAC buffer
10998
10999\sphinxAtStartPar
11000\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{len} \sphinxhyphen{} Length of \sphinxstyleemphasis{ptr}
11001
11002\sphinxAtStartPar
11003\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{pac} \sphinxhyphen{} PAC handle
11004
11005\end{description}\end{quote}
11006\begin{quote}\begin{description}
11007\item[{retval}] \leavevmode\begin{itemize}
11008\item {}
11009\sphinxAtStartPar
110100   Success; otherwise \sphinxhyphen{} Kerberos error codes
11011
11012\end{itemize}
11013
11014\end{description}\end{quote}
11015
11016\sphinxAtStartPar
11017Use krb5\_pac\_free() to free \sphinxstyleemphasis{pac} when it is no longer needed.
11018
11019
11020\subsubsection{krb5\_pac\_sign}
11021\label{\detokenize{appdev/refs/api/krb5_pac_sign:krb5-pac-sign}}\label{\detokenize{appdev/refs/api/krb5_pac_sign::doc}}\index{krb5\_pac\_sign (C function)@\spxentry{krb5\_pac\_sign}\spxextra{C function}}
11022
11023\begin{fulllineitems}
11024\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_sign:c.krb5_pac_sign}}%
11025\pysigstartmultiline
11026\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_pac\_sign}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{\DUrole{n}{krb5\_pac}}}}\DUrole{w}{  }\DUrole{n}{pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\DUrole{n}{authtime}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{principal}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{server\_key}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{privsvr\_key}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}}{}%
11027\pysigstopmultiline
11028\end{fulllineitems}
11029
11030\begin{quote}\begin{description}
11031\item[{param}] \leavevmode
11032\sphinxAtStartPar
11033\sphinxstylestrong{context}
11034
11035\sphinxAtStartPar
11036\sphinxstylestrong{pac}
11037
11038\sphinxAtStartPar
11039\sphinxstylestrong{authtime}
11040
11041\sphinxAtStartPar
11042\sphinxstylestrong{principal}
11043
11044\sphinxAtStartPar
11045\sphinxstylestrong{server\_key}
11046
11047\sphinxAtStartPar
11048\sphinxstylestrong{privsvr\_key}
11049
11050\sphinxAtStartPar
11051\sphinxstylestrong{data}
11052
11053\end{description}\end{quote}
11054
11055\sphinxAtStartPar
11056DEPRECATED Use krb5\_kdc\_sign\_ticket() instead.
11057
11058
11059\subsubsection{krb5\_pac\_sign\_ext}
11060\label{\detokenize{appdev/refs/api/krb5_pac_sign_ext:krb5-pac-sign-ext}}\label{\detokenize{appdev/refs/api/krb5_pac_sign_ext::doc}}\index{krb5\_pac\_sign\_ext (C function)@\spxentry{krb5\_pac\_sign\_ext}\spxextra{C function}}
11061
11062\begin{fulllineitems}
11063\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_sign_ext:c.krb5_pac_sign_ext}}%
11064\pysigstartmultiline
11065\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_pac\_sign\_ext}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{\DUrole{n}{krb5\_pac}}}}\DUrole{w}{  }\DUrole{n}{pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\DUrole{n}{authtime}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{principal}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{server\_key}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{privsvr\_key}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\DUrole{n}{with\_realm}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}}{}%
11066\pysigstopmultiline
11067\end{fulllineitems}
11068
11069\begin{quote}\begin{description}
11070\item[{param}] \leavevmode
11071\sphinxAtStartPar
11072\sphinxstylestrong{context}
11073
11074\sphinxAtStartPar
11075\sphinxstylestrong{pac}
11076
11077\sphinxAtStartPar
11078\sphinxstylestrong{authtime}
11079
11080\sphinxAtStartPar
11081\sphinxstylestrong{principal}
11082
11083\sphinxAtStartPar
11084\sphinxstylestrong{server\_key}
11085
11086\sphinxAtStartPar
11087\sphinxstylestrong{privsvr\_key}
11088
11089\sphinxAtStartPar
11090\sphinxstylestrong{with\_realm}
11091
11092\sphinxAtStartPar
11093\sphinxstylestrong{data}
11094
11095\end{description}\end{quote}
11096
11097\sphinxAtStartPar
11098DEPRECATED Use krb5\_kdc\_sign\_ticket() instead.
11099
11100
11101\subsubsection{krb5\_pac\_verify \sphinxhyphen{}  Verify a PAC.}
11102\label{\detokenize{appdev/refs/api/krb5_pac_verify:krb5-pac-verify-verify-a-pac}}\label{\detokenize{appdev/refs/api/krb5_pac_verify::doc}}\index{krb5\_pac\_verify (C function)@\spxentry{krb5\_pac\_verify}\spxextra{C function}}
11103
11104\begin{fulllineitems}
11105\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_verify:c.krb5_pac_verify}}%
11106\pysigstartmultiline
11107\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_pac\_verify}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{\DUrole{n}{krb5\_pac}}}}\DUrole{w}{  }\DUrole{n}{pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\DUrole{n}{authtime}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{principal}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{server}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{privsvr}}{}%
11108\pysigstopmultiline
11109\end{fulllineitems}
11110
11111\begin{quote}\begin{description}
11112\item[{param}] \leavevmode
11113\sphinxAtStartPar
11114\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
11115
11116\sphinxAtStartPar
11117\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} \sphinxhyphen{} PAC handle
11118
11119\sphinxAtStartPar
11120\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authtime} \sphinxhyphen{} Expected timestamp
11121
11122\sphinxAtStartPar
11123\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} \sphinxhyphen{} Expected principal name (or NULL)
11124
11125\sphinxAtStartPar
11126\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} \sphinxhyphen{} Key to validate server checksum (or NULL)
11127
11128\sphinxAtStartPar
11129\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{privsvr} \sphinxhyphen{} Key to validate KDC checksum (or NULL)
11130
11131\end{description}\end{quote}
11132\begin{quote}\begin{description}
11133\item[{retval}] \leavevmode\begin{itemize}
11134\item {}
11135\sphinxAtStartPar
111360   Success; otherwise \sphinxhyphen{} Kerberos error codes
11137
11138\end{itemize}
11139
11140\end{description}\end{quote}
11141
11142\sphinxAtStartPar
11143This 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.
11144
11145\sphinxAtStartPar
11146If successful, \sphinxstyleemphasis{pac} is marked as verified.
11147
11148\begin{sphinxadmonition}{note}{Note:}
11149\sphinxAtStartPar
11150A checksum mismatch can occur if the PAC was copied from a cross\sphinxhyphen{}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\sphinxhyphen{}verified.
11151\end{sphinxadmonition}
11152
11153
11154\subsubsection{krb5\_pac\_verify\_ext \sphinxhyphen{}  Verify a PAC, possibly from a specified realm.}
11155\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)@\spxentry{krb5\_pac\_verify\_ext}\spxextra{C function}}
11156
11157\begin{fulllineitems}
11158\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_verify_ext:c.krb5_pac_verify_ext}}%
11159\pysigstartmultiline
11160\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_pac\_verify\_ext}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{\DUrole{n}{krb5\_pac}}}}\DUrole{w}{  }\DUrole{n}{pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\DUrole{n}{authtime}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{principal}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{server}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{privsvr}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\DUrole{n}{with\_realm}}{}%
11161\pysigstopmultiline
11162\end{fulllineitems}
11163
11164\begin{quote}\begin{description}
11165\item[{param}] \leavevmode
11166\sphinxAtStartPar
11167\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
11168
11169\sphinxAtStartPar
11170\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} \sphinxhyphen{} PAC handle
11171
11172\sphinxAtStartPar
11173\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authtime} \sphinxhyphen{} Expected timestamp
11174
11175\sphinxAtStartPar
11176\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} \sphinxhyphen{} Expected principal name (or NULL)
11177
11178\sphinxAtStartPar
11179\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} \sphinxhyphen{} Key to validate server checksum (or NULL)
11180
11181\sphinxAtStartPar
11182\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{privsvr} \sphinxhyphen{} Key to validate KDC checksum (or NULL)
11183
11184\sphinxAtStartPar
11185\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{with\_realm} \sphinxhyphen{} If true, expect the realm of \sphinxstyleemphasis{principal}
11186
11187\end{description}\end{quote}
11188
11189\sphinxAtStartPar
11190This function is similar to 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\sphinxhyphen{}realm S4U2Self referral TGTs.
11191
11192\begin{sphinxadmonition}{note}{Note:}
11193\sphinxAtStartPar
11194New in 1.17
11195\end{sphinxadmonition}
11196
11197
11198\subsubsection{krb5\_pac\_get\_client\_info \sphinxhyphen{}  Read client information from a PAC.}
11199\label{\detokenize{appdev/refs/api/krb5_pac_get_client_info:krb5-pac-get-client-info-read-client-information-from-a-pac}}\label{\detokenize{appdev/refs/api/krb5_pac_get_client_info::doc}}\index{krb5\_pac\_get\_client\_info (C function)@\spxentry{krb5\_pac\_get\_client\_info}\spxextra{C function}}
11200
11201\begin{fulllineitems}
11202\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_get_client_info:c.krb5_pac_get_client_info}}%
11203\pysigstartmultiline
11204\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_pac\_get\_client\_info}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{\DUrole{n}{krb5\_pac}}}}\DUrole{w}{  }\DUrole{n}{pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{authtime\_out}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{princname\_out}}{}%
11205\pysigstopmultiline
11206\end{fulllineitems}
11207
11208\begin{quote}\begin{description}
11209\item[{param}] \leavevmode
11210\sphinxAtStartPar
11211\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
11212
11213\sphinxAtStartPar
11214\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} \sphinxhyphen{} PAC handle
11215
11216\sphinxAtStartPar
11217\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{authtime\_out} \sphinxhyphen{} Authentication timestamp (NULL if not needed)
11218
11219\sphinxAtStartPar
11220\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princname\_out} \sphinxhyphen{} Client account name
11221
11222\end{description}\end{quote}
11223\begin{quote}\begin{description}
11224\item[{retval}] \leavevmode\begin{itemize}
11225\item {}
11226\sphinxAtStartPar
112270   on success, ENOENT if no PAC\_CLIENT\_INFO buffer is present in pac , ERANGE if the buffer contains invalid lengths.
11228
11229\end{itemize}
11230
11231\end{description}\end{quote}
11232
11233\sphinxAtStartPar
11234Read the PAC\_CLIENT\_INFO buffer in \sphinxstyleemphasis{pac} . Place the client account name as a string in \sphinxstyleemphasis{princname\_out} . If \sphinxstyleemphasis{authtime\_out} is not NULL, place the initial authentication timestamp in \sphinxstyleemphasis{authtime\_out} .
11235
11236\begin{sphinxadmonition}{note}{Note:}
11237\sphinxAtStartPar
11238New in 1.18
11239\end{sphinxadmonition}
11240
11241
11242\subsubsection{krb5\_prepend\_error\_message \sphinxhyphen{}  Add a prefix to the message for an error code.}
11243\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)@\spxentry{krb5\_prepend\_error\_message}\spxextra{C function}}
11244
11245\begin{fulllineitems}
11246\phantomsection\label{\detokenize{appdev/refs/api/krb5_prepend_error_message:c.krb5_prepend_error_message}}%
11247\pysigstartmultiline
11248\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_prepend\_error\_message}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\DUrole{n}{code}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{fmt}, \DUrole{p}{...}}{}%
11249\pysigstopmultiline
11250\end{fulllineitems}
11251
11252\begin{quote}\begin{description}
11253\item[{param}] \leavevmode
11254\sphinxAtStartPar
11255\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
11256
11257\sphinxAtStartPar
11258\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} \sphinxhyphen{} Error code
11259
11260\sphinxAtStartPar
11261\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} \sphinxhyphen{} Format string for error message prefix
11262
11263\end{description}\end{quote}
11264
11265\sphinxAtStartPar
11266Format 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.
11267
11268
11269\subsubsection{krb5\_principal2salt \sphinxhyphen{}  Convert a principal name into the default salt for that principal.}
11270\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)@\spxentry{krb5\_principal2salt}\spxextra{C function}}
11271
11272\begin{fulllineitems}
11273\phantomsection\label{\detokenize{appdev/refs/api/krb5_principal2salt:c.krb5_principal2salt}}%
11274\pysigstartmultiline
11275\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_principal2salt}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{pr}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ret}}{}%
11276\pysigstopmultiline
11277\end{fulllineitems}
11278
11279\begin{quote}\begin{description}
11280\item[{param}] \leavevmode
11281\sphinxAtStartPar
11282\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
11283
11284\sphinxAtStartPar
11285\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pr} \sphinxhyphen{} Principal name
11286
11287\sphinxAtStartPar
11288\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ret} \sphinxhyphen{} Default salt for \sphinxstyleemphasis{pr} to be filled in
11289
11290\end{description}\end{quote}
11291\begin{quote}\begin{description}
11292\item[{retval}] \leavevmode\begin{itemize}
11293\item {}
11294\sphinxAtStartPar
112950   Success; otherwise \sphinxhyphen{} Kerberos error codes
11296
11297\end{itemize}
11298
11299\end{description}\end{quote}
11300
11301
11302\subsubsection{krb5\_rd\_cred \sphinxhyphen{}  Read and validate a KRB\sphinxhyphen{}CRED message.}
11303\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)@\spxentry{krb5\_rd\_cred}\spxextra{C function}}
11304
11305\begin{fulllineitems}
11306\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_cred:c.krb5_rd_cred}}%
11307\pysigstartmultiline
11308\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_rd\_cred}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{creddata}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{creds\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{\DUrole{n}{krb5\_replay\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{rdata\_out}}{}%
11309\pysigstopmultiline
11310\end{fulllineitems}
11311
11312\begin{quote}\begin{description}
11313\item[{param}] \leavevmode
11314\sphinxAtStartPar
11315\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
11316
11317\sphinxAtStartPar
11318\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
11319
11320\sphinxAtStartPar
11321\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creddata} \sphinxhyphen{} \sphinxstylestrong{KRB\sphinxhyphen{}CRED} message
11322
11323\sphinxAtStartPar
11324\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds\_out} \sphinxhyphen{} Null\sphinxhyphen{}terminated array of forwarded credentials
11325
11326\sphinxAtStartPar
11327\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} \sphinxhyphen{} Replay data (NULL if not needed)
11328
11329\end{description}\end{quote}
11330\begin{quote}\begin{description}
11331\item[{retval}] \leavevmode\begin{itemize}
11332\item {}
11333\sphinxAtStartPar
113340   Success; otherwise \sphinxhyphen{} Kerberos error codes
11335
11336\end{itemize}
11337
11338\end{description}\end{quote}
11339\begin{quote}
11340
11341\sphinxAtStartPar
11342\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.
11343\end{quote}
11344
11345\sphinxAtStartPar
11346Use krb5\_free\_tgt\_creds() to free \sphinxstyleemphasis{creds\_out} when it is no longer needed.
11347
11348\begin{sphinxadmonition}{note}{Note:}
11349\sphinxAtStartPar
11350The \sphinxstyleemphasis{rdata\_out} argument is required if the \#KRB5\_AUTH\_CONTEXT\_RET\_TIME or \#KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE flag is set in \sphinxstyleemphasis{auth\_context} .\textasciigrave{}
11351\end{sphinxadmonition}
11352
11353
11354\subsubsection{krb5\_rd\_error \sphinxhyphen{}  Decode a KRB\sphinxhyphen{}ERROR message.}
11355\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)@\spxentry{krb5\_rd\_error}\spxextra{C function}}
11356
11357\begin{fulllineitems}
11358\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_error:c.krb5_rd_error}}%
11359\pysigstartmultiline
11360\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_rd\_error}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{enc\_errbuf}, {\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{\DUrole{n}{krb5\_error}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{dec\_error}}{}%
11361\pysigstopmultiline
11362\end{fulllineitems}
11363
11364\begin{quote}\begin{description}
11365\item[{param}] \leavevmode
11366\sphinxAtStartPar
11367\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
11368
11369\sphinxAtStartPar
11370\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enc\_errbuf} \sphinxhyphen{} Encoded error message
11371
11372\sphinxAtStartPar
11373\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{dec\_error} \sphinxhyphen{} Decoded error message
11374
11375\end{description}\end{quote}
11376\begin{quote}\begin{description}
11377\item[{retval}] \leavevmode\begin{itemize}
11378\item {}
11379\sphinxAtStartPar
113800   Success; otherwise \sphinxhyphen{} Kerberos error codes
11381
11382\end{itemize}
11383
11384\end{description}\end{quote}
11385
11386\sphinxAtStartPar
11387This function processes \sphinxstylestrong{KRB\sphinxhyphen{}ERROR} message \sphinxstyleemphasis{enc\_errbuf} and returns an allocated structure \sphinxstyleemphasis{dec\_error} containing the error message. Use krb5\_free\_error() to free \sphinxstyleemphasis{dec\_error} when it is no longer needed.
11388
11389
11390\subsubsection{krb5\_rd\_priv \sphinxhyphen{}  Process a KRB\sphinxhyphen{}PRIV message.}
11391\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)@\spxentry{krb5\_rd\_priv}\spxextra{C function}}
11392
11393\begin{fulllineitems}
11394\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_priv:c.krb5_rd_priv}}%
11395\pysigstartmultiline
11396\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_rd\_priv}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{inbuf}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{userdata\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{\DUrole{n}{krb5\_replay\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{rdata\_out}}{}%
11397\pysigstopmultiline
11398\end{fulllineitems}
11399
11400\begin{quote}\begin{description}
11401\item[{param}] \leavevmode
11402\sphinxAtStartPar
11403\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
11404
11405\sphinxAtStartPar
11406\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication structure
11407
11408\sphinxAtStartPar
11409\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} \sphinxhyphen{} \sphinxstylestrong{KRB\sphinxhyphen{}PRIV} message to be parsed
11410
11411\sphinxAtStartPar
11412\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{userdata\_out} \sphinxhyphen{} Data parsed from \sphinxstylestrong{KRB\sphinxhyphen{}PRIV} message
11413
11414\sphinxAtStartPar
11415\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} \sphinxhyphen{} Replay data. Specify NULL if not needed
11416
11417\end{description}\end{quote}
11418\begin{quote}\begin{description}
11419\item[{retval}] \leavevmode\begin{itemize}
11420\item {}
11421\sphinxAtStartPar
114220   Success; otherwise \sphinxhyphen{} Kerberos error codes
11423
11424\end{itemize}
11425
11426\end{description}\end{quote}
11427
11428\sphinxAtStartPar
11429This function parses a \sphinxstylestrong{KRB\sphinxhyphen{}PRIV} message, verifies its integrity, and stores its unencrypted data into \sphinxstyleemphasis{userdata\_out} .
11430
11431\sphinxAtStartPar
11432If \sphinxstyleemphasis{auth\_context} has a remote address set, the address will be used to verify the sender address in the KRB\sphinxhyphen{}PRIV message. If \sphinxstyleemphasis{auth\_context} has a local address set, it will be used to verify the receiver address in the KRB\sphinxhyphen{}PRIV message if the message contains one.
11433
11434\sphinxAtStartPar
11435If the \#KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE flag is set in \sphinxstyleemphasis{auth\_context} , the sequence number of the KRB\sphinxhyphen{}PRIV message is checked against the remote sequence number field of \sphinxstyleemphasis{auth\_context} . Otherwise, the sequence number is not used.
11436
11437\sphinxAtStartPar
11438If the \#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\sphinxhyphen{}memory replay cache to detect reflections or replays.
11439
11440\sphinxAtStartPar
11441Use krb5\_free\_data\_contents() to free \sphinxstyleemphasis{userdata\_out} when it is no longer needed.
11442
11443\begin{sphinxadmonition}{note}{Note:}
11444\sphinxAtStartPar
11445The \sphinxstyleemphasis{rdata\_out} argument is required if the \#KRB5\_AUTH\_CONTEXT\_RET\_TIME or \#KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE flag is set in \sphinxstyleemphasis{auth\_context} .
11446\end{sphinxadmonition}
11447
11448
11449\subsubsection{krb5\_rd\_rep \sphinxhyphen{}  Parse and decrypt a KRB\_AP\_REP message.}
11450\label{\detokenize{appdev/refs/api/krb5_rd_rep:krb5-rd-rep-parse-and-decrypt-a-krb-ap-rep-message}}\label{\detokenize{appdev/refs/api/krb5_rd_rep::doc}}\index{krb5\_rd\_rep (C function)@\spxentry{krb5\_rd\_rep}\spxextra{C function}}
11451
11452\begin{fulllineitems}
11453\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_rep:c.krb5_rd_rep}}%
11454\pysigstartmultiline
11455\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_rd\_rep}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{inbuf}, {\hyperref[\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part}]{\sphinxcrossref{\DUrole{n}{krb5\_ap\_rep\_enc\_part}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{repl}}{}%
11456\pysigstopmultiline
11457\end{fulllineitems}
11458
11459\begin{quote}\begin{description}
11460\item[{param}] \leavevmode
11461\sphinxAtStartPar
11462\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
11463
11464\sphinxAtStartPar
11465\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
11466
11467\sphinxAtStartPar
11468\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} \sphinxhyphen{} AP\sphinxhyphen{}REP message
11469
11470\sphinxAtStartPar
11471\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{repl} \sphinxhyphen{} Decrypted reply message
11472
11473\end{description}\end{quote}
11474\begin{quote}\begin{description}
11475\item[{retval}] \leavevmode\begin{itemize}
11476\item {}
11477\sphinxAtStartPar
114780   Success; otherwise \sphinxhyphen{} Kerberos error codes
11479
11480\end{itemize}
11481
11482\end{description}\end{quote}
11483
11484\sphinxAtStartPar
11485This 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.
11486
11487\sphinxAtStartPar
11488Use krb5\_free\_ap\_rep\_enc\_part() to free \sphinxstyleemphasis{repl} when it is no longer needed.
11489
11490
11491\subsubsection{krb5\_rd\_rep\_dce \sphinxhyphen{}  Parse and decrypt a KRB\_AP\_REP message for DCE RPC.}
11492\label{\detokenize{appdev/refs/api/krb5_rd_rep_dce:krb5-rd-rep-dce-parse-and-decrypt-a-krb-ap-rep-message-for-dce-rpc}}\label{\detokenize{appdev/refs/api/krb5_rd_rep_dce::doc}}\index{krb5\_rd\_rep\_dce (C function)@\spxentry{krb5\_rd\_rep\_dce}\spxextra{C function}}
11493
11494\begin{fulllineitems}
11495\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_rep_dce:c.krb5_rd_rep_dce}}%
11496\pysigstartmultiline
11497\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_rd\_rep\_dce}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{inbuf}, {\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{\DUrole{n}{krb5\_ui\_4}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{nonce}}{}%
11498\pysigstopmultiline
11499\end{fulllineitems}
11500
11501\begin{quote}\begin{description}
11502\item[{param}] \leavevmode
11503\sphinxAtStartPar
11504\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
11505
11506\sphinxAtStartPar
11507\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
11508
11509\sphinxAtStartPar
11510\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} \sphinxhyphen{} AP\sphinxhyphen{}REP message
11511
11512\sphinxAtStartPar
11513\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{nonce} \sphinxhyphen{} Sequence number from the decrypted reply
11514
11515\end{description}\end{quote}
11516\begin{quote}\begin{description}
11517\item[{retval}] \leavevmode\begin{itemize}
11518\item {}
11519\sphinxAtStartPar
115200   Success; otherwise \sphinxhyphen{} Kerberos error codes
11521
11522\end{itemize}
11523
11524\end{description}\end{quote}
11525
11526\sphinxAtStartPar
11527This function parses, decrypts and verifies a message from \sphinxstyleemphasis{inbuf} and fills in \sphinxstyleemphasis{nonce} with a decrypted reply sequence number.
11528
11529
11530\subsubsection{krb5\_rd\_req \sphinxhyphen{}  Parse and decrypt a KRB\_AP\_REQ message.}
11531\label{\detokenize{appdev/refs/api/krb5_rd_req:krb5-rd-req-parse-and-decrypt-a-krb-ap-req-message}}\label{\detokenize{appdev/refs/api/krb5_rd_req::doc}}\index{krb5\_rd\_req (C function)@\spxentry{krb5\_rd\_req}\spxextra{C function}}
11532
11533\begin{fulllineitems}
11534\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_req:c.krb5_rd_req}}%
11535\pysigstartmultiline
11536\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_rd\_req}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{auth\_context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{inbuf}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{w}{  }\DUrole{n}{server}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{n}{keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ap\_req\_options}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{ticket}}{}%
11537\pysigstopmultiline
11538\end{fulllineitems}
11539
11540\begin{quote}\begin{description}
11541\item[{param}] \leavevmode
11542\sphinxAtStartPar
11543\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
11544
11545\sphinxAtStartPar
11546\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Pre\sphinxhyphen{}existing or newly created auth context
11547
11548\sphinxAtStartPar
11549\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} \sphinxhyphen{} AP\sphinxhyphen{}REQ message to be parsed
11550
11551\sphinxAtStartPar
11552\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} \sphinxhyphen{} Matching principal for server, or NULL to allow any principal in keytab
11553
11554\sphinxAtStartPar
11555\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} \sphinxhyphen{} Key table, or NULL to use the default
11556
11557\sphinxAtStartPar
11558\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ap\_req\_options} \sphinxhyphen{} If non\sphinxhyphen{}null, the AP\sphinxhyphen{}REQ flags on output
11559
11560\sphinxAtStartPar
11561\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ticket} \sphinxhyphen{} If non\sphinxhyphen{}null, ticket from the AP\sphinxhyphen{}REQ message
11562
11563\end{description}\end{quote}
11564\begin{quote}\begin{description}
11565\item[{retval}] \leavevmode\begin{itemize}
11566\item {}
11567\sphinxAtStartPar
115680   Success; otherwise \sphinxhyphen{} Kerberos error codes
11569
11570\end{itemize}
11571
11572\end{description}\end{quote}
11573
11574\sphinxAtStartPar
11575This function parses, decrypts and verifies a AP\sphinxhyphen{}REQ message from \sphinxstyleemphasis{inbuf} and stores the authenticator in \sphinxstyleemphasis{auth\_context} .
11576
11577\sphinxAtStartPar
11578If a keyblock was specified in \sphinxstyleemphasis{auth\_context} using krb5\_auth\_con\_setuseruserkey(), that key is used to decrypt the ticket in AP\sphinxhyphen{}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\sphinxhyphen{}path checking and replay cache selection.
11579
11580\sphinxAtStartPar
11581Otherwise, 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 krb5\_sname\_match()), or NULL to match any principal name. The keys tried against the encrypted part of the ticket are determined as follows:
11582\begin{itemize}
11583\item {}
11584\sphinxAtStartPar
11585If \sphinxstyleemphasis{server} is a complete principal name, then its entry in \sphinxstyleemphasis{keytab} is tried.
11586
11587\item {}
11588\sphinxAtStartPar
11589Otherwise, if \sphinxstyleemphasis{keytab} is iterable, then all entries in \sphinxstyleemphasis{keytab} which match \sphinxstyleemphasis{server} are tried.
11590
11591\item {}
11592\sphinxAtStartPar
11593Otherwise, the server principal in the ticket must match \sphinxstyleemphasis{server} , and its entry in \sphinxstyleemphasis{keytab} is tried.
11594
11595\end{itemize}
11596
11597\sphinxAtStartPar
11598The client specified in the decrypted authenticator must match the client specified in the decrypted ticket.
11599
11600\sphinxAtStartPar
11601If the \sphinxstyleemphasis{remote\_addr} field of \sphinxstyleemphasis{auth\_context} is set, the request must come from that address.
11602
11603\sphinxAtStartPar
11604If 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} .
11605
11606\sphinxAtStartPar
11607Various other checks are performed on the decoded data, including cross\sphinxhyphen{}realm policy, clockskew, and ticket validation times.
11608
11609\sphinxAtStartPar
11610On success the authenticator, subkey, and remote sequence number of the request are stored in \sphinxstyleemphasis{auth\_context} . If the \#AP\_OPTS\_MUTUAL\_REQUIRED bit is set, the local sequence number is XORed with the remote sequence number in the request.
11611
11612\sphinxAtStartPar
11613Use krb5\_free\_ticket() to free \sphinxstyleemphasis{ticket} when it is no longer needed.
11614
11615
11616\subsubsection{krb5\_rd\_safe \sphinxhyphen{}  Process KRB\sphinxhyphen{}SAFE message.}
11617\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)@\spxentry{krb5\_rd\_safe}\spxextra{C function}}
11618
11619\begin{fulllineitems}
11620\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_safe:c.krb5_rd_safe}}%
11621\pysigstartmultiline
11622\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_rd\_safe}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{inbuf}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{userdata\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{\DUrole{n}{krb5\_replay\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{rdata\_out}}{}%
11623\pysigstopmultiline
11624\end{fulllineitems}
11625
11626\begin{quote}\begin{description}
11627\item[{param}] \leavevmode
11628\sphinxAtStartPar
11629\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
11630
11631\sphinxAtStartPar
11632\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
11633
11634\sphinxAtStartPar
11635\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} \sphinxhyphen{} \sphinxstylestrong{KRB\sphinxhyphen{}SAFE} message to be parsed
11636
11637\sphinxAtStartPar
11638\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{userdata\_out} \sphinxhyphen{} Data parsed from \sphinxstylestrong{KRB\sphinxhyphen{}SAFE} message
11639
11640\sphinxAtStartPar
11641\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} \sphinxhyphen{} Replay data. Specify NULL if not needed
11642
11643\end{description}\end{quote}
11644\begin{quote}\begin{description}
11645\item[{retval}] \leavevmode\begin{itemize}
11646\item {}
11647\sphinxAtStartPar
116480   Success; otherwise \sphinxhyphen{} Kerberos error codes
11649
11650\end{itemize}
11651
11652\end{description}\end{quote}
11653
11654\sphinxAtStartPar
11655This function parses a \sphinxstylestrong{KRB\sphinxhyphen{}SAFE} message, verifies its integrity, and stores its data into \sphinxstyleemphasis{userdata\_out} .
11656
11657\sphinxAtStartPar
11658If \sphinxstyleemphasis{auth\_context} has a remote address set, the address will be used to verify the sender address in the KRB\sphinxhyphen{}SAFE message. If \sphinxstyleemphasis{auth\_context} has a local address set, it will be used to verify the receiver address in the KRB\sphinxhyphen{}SAFE message if the message contains one.
11659
11660\sphinxAtStartPar
11661If the \#KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE flag is set in \sphinxstyleemphasis{auth\_context} , the sequence number of the KRB\sphinxhyphen{}SAFE message is checked against the remote sequence number field of \sphinxstyleemphasis{auth\_context} . Otherwise, the sequence number is not used.
11662
11663\sphinxAtStartPar
11664If the \#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\sphinxhyphen{}memory replay cache to detect reflections or replays.
11665
11666\sphinxAtStartPar
11667Use krb5\_free\_data\_contents() to free \sphinxstyleemphasis{userdata\_out} when it is no longer needed.
11668
11669\begin{sphinxadmonition}{note}{Note:}
11670\sphinxAtStartPar
11671The \sphinxstyleemphasis{rdata\_out} argument is required if the \#KRB5\_AUTH\_CONTEXT\_RET\_TIME or \#KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE flag is set in \sphinxstyleemphasis{auth\_context} .
11672\end{sphinxadmonition}
11673
11674
11675\subsubsection{krb5\_read\_password \sphinxhyphen{}  Read a password from keyboard input.}
11676\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)@\spxentry{krb5\_read\_password}\spxextra{C function}}
11677
11678\begin{fulllineitems}
11679\phantomsection\label{\detokenize{appdev/refs/api/krb5_read_password:c.krb5_read_password}}%
11680\pysigstartmultiline
11681\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_read\_password}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{prompt}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{prompt2}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{return\_pwd}, \DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{size\_return}}{}%
11682\pysigstopmultiline
11683\end{fulllineitems}
11684
11685\begin{quote}\begin{description}
11686\item[{param}] \leavevmode
11687\sphinxAtStartPar
11688\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
11689
11690\sphinxAtStartPar
11691\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompt} \sphinxhyphen{} First user prompt when reading password
11692
11693\sphinxAtStartPar
11694\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompt2} \sphinxhyphen{} Second user prompt (NULL to prompt only once)
11695
11696\sphinxAtStartPar
11697\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{return\_pwd} \sphinxhyphen{} Returned password
11698
11699\sphinxAtStartPar
11700\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{size\_return} \sphinxhyphen{} On input, maximum size of password; on output, size of password read
11701
11702\end{description}\end{quote}
11703\begin{quote}\begin{description}
11704\item[{retval}] \leavevmode\begin{itemize}
11705\item {}
11706\sphinxAtStartPar
117070   Success
11708
11709\end{itemize}
11710
11711\item[{return}] \leavevmode\begin{itemize}
11712\item {}
11713\sphinxAtStartPar
11714Error in reading or verifying the password
11715
11716\item {}
11717\sphinxAtStartPar
11718Kerberos error codes
11719
11720\end{itemize}
11721
11722\end{description}\end{quote}
11723
11724\sphinxAtStartPar
11725This 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.
11726\begin{quote}
11727
11728\sphinxAtStartPar
11729\sphinxstyleemphasis{prompt} is printed to the terminal, followed by”:”, and then a password is read from the keyboard.
11730\end{quote}
11731
11732\sphinxAtStartPar
11733If \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.
11734
11735\sphinxAtStartPar
11736Echoing is turned off when the password is read.
11737
11738
11739\subsubsection{krb5\_salttype\_to\_string \sphinxhyphen{}  Convert a salt type to a string.}
11740\label{\detokenize{appdev/refs/api/krb5_salttype_to_string:krb5-salttype-to-string-convert-a-salt-type-to-a-string}}\label{\detokenize{appdev/refs/api/krb5_salttype_to_string::doc}}\index{krb5\_salttype\_to\_string (C function)@\spxentry{krb5\_salttype\_to\_string}\spxextra{C function}}
11741
11742\begin{fulllineitems}
11743\phantomsection\label{\detokenize{appdev/refs/api/krb5_salttype_to_string:c.krb5_salttype_to_string}}%
11744\pysigstartmultiline
11745\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_salttype\_to\_string}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\DUrole{n}{salttype}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{buffer}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{buflen}}{}%
11746\pysigstopmultiline
11747\end{fulllineitems}
11748
11749\begin{quote}\begin{description}
11750\item[{param}] \leavevmode
11751\sphinxAtStartPar
11752\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{salttype} \sphinxhyphen{} Salttype to convert
11753
11754\sphinxAtStartPar
11755\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} \sphinxhyphen{} Buffer to receive the converted string
11756
11757\sphinxAtStartPar
11758\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} \sphinxhyphen{} Storage available in \sphinxstyleemphasis{buffer}
11759
11760\end{description}\end{quote}
11761\begin{quote}\begin{description}
11762\item[{retval}] \leavevmode\begin{itemize}
11763\item {}
11764\sphinxAtStartPar
117650   Success; otherwise \sphinxhyphen{} Kerberos error codes
11766
11767\end{itemize}
11768
11769\end{description}\end{quote}
11770
11771
11772\subsubsection{krb5\_server\_decrypt\_ticket\_keytab \sphinxhyphen{}  Decrypt a ticket using the specified key table.}
11773\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)@\spxentry{krb5\_server\_decrypt\_ticket\_keytab}\spxextra{C function}}
11774
11775\begin{fulllineitems}
11776\phantomsection\label{\detokenize{appdev/refs/api/krb5_server_decrypt_ticket_keytab:c.krb5_server_decrypt_ticket_keytab}}%
11777\pysigstartmultiline
11778\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_server\_decrypt\_ticket\_keytab}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{n}{kt}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ticket}}{}%
11779\pysigstopmultiline
11780\end{fulllineitems}
11781
11782\begin{quote}\begin{description}
11783\item[{param}] \leavevmode
11784\sphinxAtStartPar
11785\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
11786
11787\sphinxAtStartPar
11788\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{kt} \sphinxhyphen{} Key table
11789
11790\sphinxAtStartPar
11791\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ticket} \sphinxhyphen{} Ticket to be decrypted
11792
11793\end{description}\end{quote}
11794\begin{quote}\begin{description}
11795\item[{retval}] \leavevmode\begin{itemize}
11796\item {}
11797\sphinxAtStartPar
117980   Success; otherwise \sphinxhyphen{} Kerberos error codes
11799
11800\end{itemize}
11801
11802\end{description}\end{quote}
11803
11804\sphinxAtStartPar
11805This function takes a \sphinxstyleemphasis{ticket} as input and decrypts it using key data from \sphinxstyleemphasis{kt} . The result is placed into \sphinxstyleemphasis{ticket\sphinxhyphen{}\textgreater{}enc\_part2} .
11806
11807
11808\subsubsection{krb5\_set\_default\_tgs\_enctypes \sphinxhyphen{}  Set default TGS encryption types in a krb5\_context structure.}
11809\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}}\label{\detokenize{appdev/refs/api/krb5_set_default_tgs_enctypes::doc}}\index{krb5\_set\_default\_tgs\_enctypes (C function)@\spxentry{krb5\_set\_default\_tgs\_enctypes}\spxextra{C function}}
11810
11811\begin{fulllineitems}
11812\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_default_tgs_enctypes:c.krb5_set_default_tgs_enctypes}}%
11813\pysigstartmultiline
11814\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_set\_default\_tgs\_enctypes}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{etypes}}{}%
11815\pysigstopmultiline
11816\end{fulllineitems}
11817
11818\begin{quote}\begin{description}
11819\item[{param}] \leavevmode
11820\sphinxAtStartPar
11821\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
11822
11823\sphinxAtStartPar
11824\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{etypes} \sphinxhyphen{} Encryption type(s) to set
11825
11826\end{description}\end{quote}
11827\begin{quote}\begin{description}
11828\item[{retval}] \leavevmode\begin{itemize}
11829\item {}
11830\sphinxAtStartPar
118310   Success
11832
11833\item {}
11834\sphinxAtStartPar
11835KRB5\_PROG\_ETYPE\_NOSUPP   Program lacks support for encryption type
11836
11837\end{itemize}
11838
11839\item[{return}] \leavevmode\begin{itemize}
11840\item {}
11841\sphinxAtStartPar
11842Kerberos error codes
11843
11844\end{itemize}
11845
11846\end{description}\end{quote}
11847
11848\sphinxAtStartPar
11849This function sets the default enctype list for TGS requests made using \sphinxstyleemphasis{context} to \sphinxstyleemphasis{etypes} .
11850
11851\begin{sphinxadmonition}{note}{Note:}
11852\sphinxAtStartPar
11853This overrides the default list (from config file or built\sphinxhyphen{}in).
11854\end{sphinxadmonition}
11855
11856
11857\subsubsection{krb5\_set\_error\_message \sphinxhyphen{}  Set an extended error message for an error code.}
11858\label{\detokenize{appdev/refs/api/krb5_set_error_message:krb5-set-error-message-set-an-extended-error-message-for-an-error-code}}\label{\detokenize{appdev/refs/api/krb5_set_error_message::doc}}\index{krb5\_set\_error\_message (C function)@\spxentry{krb5\_set\_error\_message}\spxextra{C function}}
11859
11860\begin{fulllineitems}
11861\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_error_message:c.krb5_set_error_message}}%
11862\pysigstartmultiline
11863\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_set\_error\_message}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\DUrole{n}{code}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{fmt}, \DUrole{p}{...}}{}%
11864\pysigstopmultiline
11865\end{fulllineitems}
11866
11867\begin{quote}\begin{description}
11868\item[{param}] \leavevmode
11869\sphinxAtStartPar
11870\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
11871
11872\sphinxAtStartPar
11873\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} \sphinxhyphen{} Error code
11874
11875\sphinxAtStartPar
11876\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} \sphinxhyphen{} Error string for the error code
11877
11878\end{description}\end{quote}
11879
11880
11881\subsubsection{krb5\_set\_kdc\_recv\_hook \sphinxhyphen{}  Set a KDC post\sphinxhyphen{}receive hook function.}
11882\label{\detokenize{appdev/refs/api/krb5_set_kdc_recv_hook:krb5-set-kdc-recv-hook-set-a-kdc-post-receive-hook-function}}\label{\detokenize{appdev/refs/api/krb5_set_kdc_recv_hook::doc}}\index{krb5\_set\_kdc\_recv\_hook (C function)@\spxentry{krb5\_set\_kdc\_recv\_hook}\spxextra{C function}}
11883
11884\begin{fulllineitems}
11885\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_kdc_recv_hook:c.krb5_set_kdc_recv_hook}}%
11886\pysigstartmultiline
11887\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_set\_kdc\_recv\_hook}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_post_recv_fn:c.krb5_post_recv_fn}]{\sphinxcrossref{\DUrole{n}{krb5\_post\_recv\_fn}}}}\DUrole{w}{  }\DUrole{n}{recv\_hook}, \DUrole{kt}{void}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}}{}%
11888\pysigstopmultiline
11889\end{fulllineitems}
11890
11891\begin{quote}\begin{description}
11892\item[{param}] \leavevmode
11893\sphinxAtStartPar
11894\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} The library context.
11895
11896\sphinxAtStartPar
11897\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{recv\_hook} \sphinxhyphen{} Hook function (or NULL to disable the hook)
11898
11899\sphinxAtStartPar
11900\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} \sphinxhyphen{} Callback data to be passed to \sphinxstyleemphasis{recv\_hook}
11901
11902\end{description}\end{quote}
11903\begin{quote}
11904
11905\sphinxAtStartPar
11906\sphinxstyleemphasis{recv\_hook} will be called after a reply is received from a KDC during a call to a library function such as krb5\_get\_credentials(). The hook function may inspect or override the reply. This hook will not be executed if the pre\sphinxhyphen{}send hook returns a synthetic reply.
11907\end{quote}
11908
11909\begin{sphinxadmonition}{note}{Note:}
11910\sphinxAtStartPar
11911New in 1.15
11912\end{sphinxadmonition}
11913
11914
11915\subsubsection{krb5\_set\_kdc\_send\_hook \sphinxhyphen{}  Set a KDC pre\sphinxhyphen{}send hook function.}
11916\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)@\spxentry{krb5\_set\_kdc\_send\_hook}\spxextra{C function}}
11917
11918\begin{fulllineitems}
11919\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_kdc_send_hook:c.krb5_set_kdc_send_hook}}%
11920\pysigstartmultiline
11921\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_set\_kdc\_send\_hook}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pre_send_fn:c.krb5_pre_send_fn}]{\sphinxcrossref{\DUrole{n}{krb5\_pre\_send\_fn}}}}\DUrole{w}{  }\DUrole{n}{send\_hook}, \DUrole{kt}{void}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}}{}%
11922\pysigstopmultiline
11923\end{fulllineitems}
11924
11925\begin{quote}\begin{description}
11926\item[{param}] \leavevmode
11927\sphinxAtStartPar
11928\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
11929
11930\sphinxAtStartPar
11931\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{send\_hook} \sphinxhyphen{} Hook function (or NULL to disable the hook)
11932
11933\sphinxAtStartPar
11934\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} \sphinxhyphen{} Callback data to be passed to \sphinxstyleemphasis{send\_hook}
11935
11936\end{description}\end{quote}
11937\begin{quote}
11938
11939\sphinxAtStartPar
11940\sphinxstyleemphasis{send\_hook} will be called before messages are sent to KDCs by library functions such as krb5\_get\_credentials(). The hook function may inspect, override, or synthesize its own reply to the message.
11941\end{quote}
11942
11943\begin{sphinxadmonition}{note}{Note:}
11944\sphinxAtStartPar
11945New in 1.15
11946\end{sphinxadmonition}
11947
11948
11949\subsubsection{krb5\_set\_real\_time \sphinxhyphen{}  Set time offset field in a krb5\_context structure.}
11950\label{\detokenize{appdev/refs/api/krb5_set_real_time:krb5-set-real-time-set-time-offset-field-in-a-krb5-context-structure}}\label{\detokenize{appdev/refs/api/krb5_set_real_time::doc}}\index{krb5\_set\_real\_time (C function)@\spxentry{krb5\_set\_real\_time}\spxextra{C function}}
11951
11952\begin{fulllineitems}
11953\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_real_time:c.krb5_set_real_time}}%
11954\pysigstartmultiline
11955\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_set\_real\_time}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\DUrole{n}{seconds}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\DUrole{n}{microseconds}}{}%
11956\pysigstopmultiline
11957\end{fulllineitems}
11958
11959\begin{quote}\begin{description}
11960\item[{param}] \leavevmode
11961\sphinxAtStartPar
11962\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
11963
11964\sphinxAtStartPar
11965\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{seconds} \sphinxhyphen{} Real time, seconds portion
11966
11967\sphinxAtStartPar
11968\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{microseconds} \sphinxhyphen{} Real time, microseconds portion
11969
11970\end{description}\end{quote}
11971\begin{quote}\begin{description}
11972\item[{retval}] \leavevmode\begin{itemize}
11973\item {}
11974\sphinxAtStartPar
119750   Success; otherwise \sphinxhyphen{} Kerberos error codes
11976
11977\end{itemize}
11978
11979\end{description}\end{quote}
11980
11981\sphinxAtStartPar
11982This 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} .
11983
11984
11985\subsubsection{krb5\_string\_to\_cksumtype \sphinxhyphen{}  Convert a string to a checksum type.}
11986\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)@\spxentry{krb5\_string\_to\_cksumtype}\spxextra{C function}}
11987
11988\begin{fulllineitems}
11989\phantomsection\label{\detokenize{appdev/refs/api/krb5_string_to_cksumtype:c.krb5_string_to_cksumtype}}%
11990\pysigstartmultiline
11991\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_string\_to\_cksumtype}}}}{\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{string}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{\DUrole{n}{krb5\_cksumtype}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cksumtypep}}{}%
11992\pysigstopmultiline
11993\end{fulllineitems}
11994
11995\begin{quote}\begin{description}
11996\item[{param}] \leavevmode
11997\sphinxAtStartPar
11998\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} \sphinxhyphen{} String to be converted
11999
12000\sphinxAtStartPar
12001\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cksumtypep} \sphinxhyphen{} Checksum type to be filled in
12002
12003\end{description}\end{quote}
12004\begin{quote}\begin{description}
12005\item[{retval}] \leavevmode\begin{itemize}
12006\item {}
12007\sphinxAtStartPar
120080   Success; otherwise \sphinxhyphen{} EINVAL
12009
12010\end{itemize}
12011
12012\end{description}\end{quote}
12013
12014
12015\subsubsection{krb5\_string\_to\_deltat \sphinxhyphen{}  Convert a string to a delta time value.}
12016\label{\detokenize{appdev/refs/api/krb5_string_to_deltat:krb5-string-to-deltat-convert-a-string-to-a-delta-time-value}}\label{\detokenize{appdev/refs/api/krb5_string_to_deltat::doc}}\index{krb5\_string\_to\_deltat (C function)@\spxentry{krb5\_string\_to\_deltat}\spxextra{C function}}
12017
12018\begin{fulllineitems}
12019\phantomsection\label{\detokenize{appdev/refs/api/krb5_string_to_deltat:c.krb5_string_to_deltat}}%
12020\pysigstartmultiline
12021\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_string\_to\_deltat}}}}{\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{string}, {\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{\DUrole{n}{krb5\_deltat}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{deltatp}}{}%
12022\pysigstopmultiline
12023\end{fulllineitems}
12024
12025\begin{quote}\begin{description}
12026\item[{param}] \leavevmode
12027\sphinxAtStartPar
12028\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} \sphinxhyphen{} String to be converted
12029
12030\sphinxAtStartPar
12031\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{deltatp} \sphinxhyphen{} Delta time to be filled in
12032
12033\end{description}\end{quote}
12034\begin{quote}\begin{description}
12035\item[{retval}] \leavevmode\begin{itemize}
12036\item {}
12037\sphinxAtStartPar
120380   Success; otherwise \sphinxhyphen{} KRB5\_DELTAT\_BADFORMAT
12039
12040\end{itemize}
12041
12042\end{description}\end{quote}
12043
12044
12045\subsubsection{krb5\_string\_to\_enctype \sphinxhyphen{}  Convert a string to an encryption type.}
12046\label{\detokenize{appdev/refs/api/krb5_string_to_enctype:krb5-string-to-enctype-convert-a-string-to-an-encryption-type}}\label{\detokenize{appdev/refs/api/krb5_string_to_enctype::doc}}\index{krb5\_string\_to\_enctype (C function)@\spxentry{krb5\_string\_to\_enctype}\spxextra{C function}}
12047
12048\begin{fulllineitems}
12049\phantomsection\label{\detokenize{appdev/refs/api/krb5_string_to_enctype:c.krb5_string_to_enctype}}%
12050\pysigstartmultiline
12051\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_string\_to\_enctype}}}}{\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{string}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{enctypep}}{}%
12052\pysigstopmultiline
12053\end{fulllineitems}
12054
12055\begin{quote}\begin{description}
12056\item[{param}] \leavevmode
12057\sphinxAtStartPar
12058\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} \sphinxhyphen{} String to convert to an encryption type
12059
12060\sphinxAtStartPar
12061\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{enctypep} \sphinxhyphen{} Encryption type
12062
12063\end{description}\end{quote}
12064\begin{quote}\begin{description}
12065\item[{retval}] \leavevmode\begin{itemize}
12066\item {}
12067\sphinxAtStartPar
120680   Success; otherwise \sphinxhyphen{} EINVAL
12069
12070\end{itemize}
12071
12072\end{description}\end{quote}
12073
12074
12075\subsubsection{krb5\_string\_to\_salttype \sphinxhyphen{}  Convert a string to a salt type.}
12076\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)@\spxentry{krb5\_string\_to\_salttype}\spxextra{C function}}
12077
12078\begin{fulllineitems}
12079\phantomsection\label{\detokenize{appdev/refs/api/krb5_string_to_salttype:c.krb5_string_to_salttype}}%
12080\pysigstartmultiline
12081\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_string\_to\_salttype}}}}{\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{string}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{salttypep}}{}%
12082\pysigstopmultiline
12083\end{fulllineitems}
12084
12085\begin{quote}\begin{description}
12086\item[{param}] \leavevmode
12087\sphinxAtStartPar
12088\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} \sphinxhyphen{} String to convert to an encryption type
12089
12090\sphinxAtStartPar
12091\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{salttypep} \sphinxhyphen{} Salt type to be filled in
12092
12093\end{description}\end{quote}
12094\begin{quote}\begin{description}
12095\item[{retval}] \leavevmode\begin{itemize}
12096\item {}
12097\sphinxAtStartPar
120980   Success; otherwise \sphinxhyphen{} EINVAL
12099
12100\end{itemize}
12101
12102\end{description}\end{quote}
12103
12104
12105\subsubsection{krb5\_string\_to\_timestamp \sphinxhyphen{}  Convert a string to a timestamp.}
12106\label{\detokenize{appdev/refs/api/krb5_string_to_timestamp:krb5-string-to-timestamp-convert-a-string-to-a-timestamp}}\label{\detokenize{appdev/refs/api/krb5_string_to_timestamp::doc}}\index{krb5\_string\_to\_timestamp (C function)@\spxentry{krb5\_string\_to\_timestamp}\spxextra{C function}}
12107
12108\begin{fulllineitems}
12109\phantomsection\label{\detokenize{appdev/refs/api/krb5_string_to_timestamp:c.krb5_string_to_timestamp}}%
12110\pysigstartmultiline
12111\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_string\_to\_timestamp}}}}{\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{string}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{timestampp}}{}%
12112\pysigstopmultiline
12113\end{fulllineitems}
12114
12115\begin{quote}\begin{description}
12116\item[{param}] \leavevmode
12117\sphinxAtStartPar
12118\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} \sphinxhyphen{} String to be converted
12119
12120\sphinxAtStartPar
12121\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{timestampp} \sphinxhyphen{} Pointer to timestamp
12122
12123\end{description}\end{quote}
12124\begin{quote}\begin{description}
12125\item[{retval}] \leavevmode\begin{itemize}
12126\item {}
12127\sphinxAtStartPar
121280   Success; otherwise \sphinxhyphen{} EINVAL
12129
12130\end{itemize}
12131
12132\end{description}\end{quote}
12133
12134
12135\subsubsection{krb5\_timeofday \sphinxhyphen{}  Retrieve the current time with context specific time offset adjustment.}
12136\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)@\spxentry{krb5\_timeofday}\spxextra{C function}}
12137
12138\begin{fulllineitems}
12139\phantomsection\label{\detokenize{appdev/refs/api/krb5_timeofday:c.krb5_timeofday}}%
12140\pysigstartmultiline
12141\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_timeofday}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{timeret}}{}%
12142\pysigstopmultiline
12143\end{fulllineitems}
12144
12145\begin{quote}\begin{description}
12146\item[{param}] \leavevmode
12147\sphinxAtStartPar
12148\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
12149
12150\sphinxAtStartPar
12151\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{timeret} \sphinxhyphen{} Timestamp to fill in
12152
12153\end{description}\end{quote}
12154\begin{quote}\begin{description}
12155\item[{retval}] \leavevmode\begin{itemize}
12156\item {}
12157\sphinxAtStartPar
121580   Success
12159
12160\end{itemize}
12161
12162\item[{return}] \leavevmode\begin{itemize}
12163\item {}
12164\sphinxAtStartPar
12165Kerberos error codes
12166
12167\end{itemize}
12168
12169\end{description}\end{quote}
12170
12171\sphinxAtStartPar
12172This function retrieves the system time of day with the context specific time offset adjustment.
12173
12174
12175\subsubsection{krb5\_timestamp\_to\_sfstring \sphinxhyphen{}  Convert a timestamp to a string, with optional output padding.}
12176\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)@\spxentry{krb5\_timestamp\_to\_sfstring}\spxextra{C function}}
12177
12178\begin{fulllineitems}
12179\phantomsection\label{\detokenize{appdev/refs/api/krb5_timestamp_to_sfstring:c.krb5_timestamp_to_sfstring}}%
12180\pysigstartmultiline
12181\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_timestamp\_to\_sfstring}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\DUrole{n}{timestamp}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{buffer}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{buflen}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{pad}}{}%
12182\pysigstopmultiline
12183\end{fulllineitems}
12184
12185\begin{quote}\begin{description}
12186\item[{param}] \leavevmode
12187\sphinxAtStartPar
12188\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{timestamp} \sphinxhyphen{} Timestamp to convert
12189
12190\sphinxAtStartPar
12191\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} \sphinxhyphen{} Buffer to hold the converted timestamp
12192
12193\sphinxAtStartPar
12194\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} \sphinxhyphen{} Length of buffer
12195
12196\sphinxAtStartPar
12197\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pad} \sphinxhyphen{} Optional value to pad \sphinxstyleemphasis{buffer} if converted timestamp does not fill it
12198
12199\end{description}\end{quote}
12200\begin{quote}\begin{description}
12201\item[{retval}] \leavevmode\begin{itemize}
12202\item {}
12203\sphinxAtStartPar
122040   Success; otherwise \sphinxhyphen{} Kerberos error codes
12205
12206\end{itemize}
12207
12208\end{description}\end{quote}
12209
12210\sphinxAtStartPar
12211If \sphinxstyleemphasis{pad} is not NULL, \sphinxstyleemphasis{buffer} is padded out to \sphinxstyleemphasis{buflen} \sphinxhyphen{} 1 characters with the value of * \sphinxstyleemphasis{pad} .
12212
12213
12214\subsubsection{krb5\_timestamp\_to\_string \sphinxhyphen{}  Convert a timestamp to a string.}
12215\label{\detokenize{appdev/refs/api/krb5_timestamp_to_string:krb5-timestamp-to-string-convert-a-timestamp-to-a-string}}\label{\detokenize{appdev/refs/api/krb5_timestamp_to_string::doc}}\index{krb5\_timestamp\_to\_string (C function)@\spxentry{krb5\_timestamp\_to\_string}\spxextra{C function}}
12216
12217\begin{fulllineitems}
12218\phantomsection\label{\detokenize{appdev/refs/api/krb5_timestamp_to_string:c.krb5_timestamp_to_string}}%
12219\pysigstartmultiline
12220\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_timestamp\_to\_string}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\DUrole{n}{timestamp}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{buffer}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{buflen}}{}%
12221\pysigstopmultiline
12222\end{fulllineitems}
12223
12224\begin{quote}\begin{description}
12225\item[{param}] \leavevmode
12226\sphinxAtStartPar
12227\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{timestamp} \sphinxhyphen{} Timestamp to convert
12228
12229\sphinxAtStartPar
12230\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} \sphinxhyphen{} Buffer to hold converted timestamp
12231
12232\sphinxAtStartPar
12233\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} \sphinxhyphen{} Storage available in \sphinxstyleemphasis{buffer}
12234
12235\end{description}\end{quote}
12236\begin{quote}\begin{description}
12237\item[{retval}] \leavevmode\begin{itemize}
12238\item {}
12239\sphinxAtStartPar
122400   Success; otherwise \sphinxhyphen{} Kerberos error codes
12241
12242\end{itemize}
12243
12244\end{description}\end{quote}
12245
12246\sphinxAtStartPar
12247The string is returned in the locale’s appropriate date and time representation.
12248
12249
12250\subsubsection{krb5\_tkt\_creds\_free \sphinxhyphen{}  Free a TGS request context.}
12251\label{\detokenize{appdev/refs/api/krb5_tkt_creds_free:krb5-tkt-creds-free-free-a-tgs-request-context}}\label{\detokenize{appdev/refs/api/krb5_tkt_creds_free::doc}}\index{krb5\_tkt\_creds\_free (C function)@\spxentry{krb5\_tkt\_creds\_free}\spxextra{C function}}
12252
12253\begin{fulllineitems}
12254\phantomsection\label{\detokenize{appdev/refs/api/krb5_tkt_creds_free:c.krb5_tkt_creds_free}}%
12255\pysigstartmultiline
12256\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_tkt\_creds\_free}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}]{\sphinxcrossref{\DUrole{n}{krb5\_tkt\_creds\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}}{}%
12257\pysigstopmultiline
12258\end{fulllineitems}
12259
12260\begin{quote}\begin{description}
12261\item[{param}] \leavevmode
12262\sphinxAtStartPar
12263\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
12264
12265\sphinxAtStartPar
12266\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} TGS request context
12267
12268\end{description}\end{quote}
12269
12270\begin{sphinxadmonition}{note}{Note:}
12271\sphinxAtStartPar
12272New in 1.9
12273\end{sphinxadmonition}
12274
12275
12276\subsubsection{krb5\_tkt\_creds\_get \sphinxhyphen{}  Synchronously obtain credentials using a TGS request context.}
12277\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)@\spxentry{krb5\_tkt\_creds\_get}\spxextra{C function}}
12278
12279\begin{fulllineitems}
12280\phantomsection\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get:c.krb5_tkt_creds_get}}%
12281\pysigstartmultiline
12282\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_tkt\_creds\_get}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}]{\sphinxcrossref{\DUrole{n}{krb5\_tkt\_creds\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}}{}%
12283\pysigstopmultiline
12284\end{fulllineitems}
12285
12286\begin{quote}\begin{description}
12287\item[{param}] \leavevmode
12288\sphinxAtStartPar
12289\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
12290
12291\sphinxAtStartPar
12292\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} TGS request context
12293
12294\end{description}\end{quote}
12295\begin{quote}\begin{description}
12296\item[{retval}] \leavevmode\begin{itemize}
12297\item {}
12298\sphinxAtStartPar
122990   Success; otherwise \sphinxhyphen{} Kerberos error codes
12300
12301\end{itemize}
12302
12303\end{description}\end{quote}
12304
12305\sphinxAtStartPar
12306This function synchronously obtains credentials using a context created by krb5\_tkt\_creds\_init(). On successful return, the credentials can be retrieved with krb5\_tkt\_creds\_get\_creds().
12307
12308\begin{sphinxadmonition}{note}{Note:}
12309\sphinxAtStartPar
12310New in 1.9
12311\end{sphinxadmonition}
12312
12313
12314\subsubsection{krb5\_tkt\_creds\_get\_creds \sphinxhyphen{}  Retrieve acquired credentials from a TGS request context.}
12315\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)@\spxentry{krb5\_tkt\_creds\_get\_creds}\spxextra{C function}}
12316
12317\begin{fulllineitems}
12318\phantomsection\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get_creds:c.krb5_tkt_creds_get_creds}}%
12319\pysigstartmultiline
12320\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_tkt\_creds\_get\_creds}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}]{\sphinxcrossref{\DUrole{n}{krb5\_tkt\_creds\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{creds}}{}%
12321\pysigstopmultiline
12322\end{fulllineitems}
12323
12324\begin{quote}\begin{description}
12325\item[{param}] \leavevmode
12326\sphinxAtStartPar
12327\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
12328
12329\sphinxAtStartPar
12330\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} TGS request context
12331
12332\sphinxAtStartPar
12333\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} \sphinxhyphen{} Acquired credentials
12334
12335\end{description}\end{quote}
12336\begin{quote}\begin{description}
12337\item[{retval}] \leavevmode\begin{itemize}
12338\item {}
12339\sphinxAtStartPar
123400   Success; otherwise \sphinxhyphen{} Kerberos error codes
12341
12342\end{itemize}
12343
12344\end{description}\end{quote}
12345
12346\sphinxAtStartPar
12347This function copies the acquired initial credentials from \sphinxstyleemphasis{ctx} into \sphinxstyleemphasis{creds} , after the successful completion of krb5\_tkt\_creds\_get() or krb5\_tkt\_creds\_step(). Use krb5\_free\_cred\_contents() to free \sphinxstyleemphasis{creds} when it is no longer needed.
12348
12349\begin{sphinxadmonition}{note}{Note:}
12350\sphinxAtStartPar
12351New in 1.9
12352\end{sphinxadmonition}
12353
12354
12355\subsubsection{krb5\_tkt\_creds\_get\_times \sphinxhyphen{}  Retrieve ticket times from a TGS request context.}
12356\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)@\spxentry{krb5\_tkt\_creds\_get\_times}\spxextra{C function}}
12357
12358\begin{fulllineitems}
12359\phantomsection\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get_times:c.krb5_tkt_creds_get_times}}%
12360\pysigstartmultiline
12361\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_tkt\_creds\_get\_times}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}]{\sphinxcrossref{\DUrole{n}{krb5\_tkt\_creds\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket\_times}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{times}}{}%
12362\pysigstopmultiline
12363\end{fulllineitems}
12364
12365\begin{quote}\begin{description}
12366\item[{param}] \leavevmode
12367\sphinxAtStartPar
12368\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
12369
12370\sphinxAtStartPar
12371\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} TGS request context
12372
12373\sphinxAtStartPar
12374\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{times} \sphinxhyphen{} Ticket times for acquired credentials
12375
12376\end{description}\end{quote}
12377\begin{quote}\begin{description}
12378\item[{retval}] \leavevmode\begin{itemize}
12379\item {}
12380\sphinxAtStartPar
123810   Success; otherwise \sphinxhyphen{} Kerberos error codes
12382
12383\end{itemize}
12384
12385\end{description}\end{quote}
12386
12387\sphinxAtStartPar
12388The TGS request context must have completed obtaining credentials via either krb5\_tkt\_creds\_get() or krb5\_tkt\_creds\_step().
12389
12390\begin{sphinxadmonition}{note}{Note:}
12391\sphinxAtStartPar
12392New in 1.9
12393\end{sphinxadmonition}
12394
12395
12396\subsubsection{krb5\_tkt\_creds\_init \sphinxhyphen{}  Create a context to get credentials from a KDC’s Ticket Granting Service.}
12397\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)@\spxentry{krb5\_tkt\_creds\_init}\spxextra{C function}}
12398
12399\begin{fulllineitems}
12400\phantomsection\label{\detokenize{appdev/refs/api/krb5_tkt_creds_init:c.krb5_tkt_creds_init}}%
12401\pysigstartmultiline
12402\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_tkt\_creds\_init}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\DUrole{n}{options}, {\hyperref[\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}]{\sphinxcrossref{\DUrole{n}{krb5\_tkt\_creds\_context}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ctx}}{}%
12403\pysigstopmultiline
12404\end{fulllineitems}
12405
12406\begin{quote}\begin{description}
12407\item[{param}] \leavevmode
12408\sphinxAtStartPar
12409\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
12410
12411\sphinxAtStartPar
12412\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} \sphinxhyphen{} Credential cache handle
12413
12414\sphinxAtStartPar
12415\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} \sphinxhyphen{} Input credentials
12416
12417\sphinxAtStartPar
12418\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{options} \sphinxhyphen{} Options (see KRB5\_GC macros)
12419
12420\sphinxAtStartPar
12421\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} New TGS request context
12422
12423\end{description}\end{quote}
12424\begin{quote}\begin{description}
12425\item[{retval}] \leavevmode\begin{itemize}
12426\item {}
12427\sphinxAtStartPar
124280   Success; otherwise \sphinxhyphen{} Kerberos error codes
12429
12430\end{itemize}
12431
12432\end{description}\end{quote}
12433
12434\sphinxAtStartPar
12435This function prepares to obtain credentials matching \sphinxstyleemphasis{creds} , either by retrieving them from \sphinxstyleemphasis{ccache} or by making requests to ticket\sphinxhyphen{}granting services beginning with a ticket\sphinxhyphen{}granting ticket for the client principal’s realm.
12436
12437\sphinxAtStartPar
12438The resulting TGS acquisition context can be used asynchronously with krb5\_tkt\_creds\_step() or synchronously with krb5\_tkt\_creds\_get(). See also krb5\_get\_credentials() for synchronous use.
12439
12440\sphinxAtStartPar
12441Use krb5\_tkt\_creds\_free() to free \sphinxstyleemphasis{ctx} when it is no longer needed.
12442
12443\begin{sphinxadmonition}{note}{Note:}
12444\sphinxAtStartPar
12445New in 1.9
12446\end{sphinxadmonition}
12447
12448
12449\subsubsection{krb5\_tkt\_creds\_step \sphinxhyphen{}  Get the next KDC request in a TGS exchange.}
12450\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)@\spxentry{krb5\_tkt\_creds\_step}\spxextra{C function}}
12451
12452\begin{fulllineitems}
12453\phantomsection\label{\detokenize{appdev/refs/api/krb5_tkt_creds_step:c.krb5_tkt_creds_step}}%
12454\pysigstartmultiline
12455\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_tkt\_creds\_step}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}]{\sphinxcrossref{\DUrole{n}{krb5\_tkt\_creds\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{in}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{out}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{realm}, \DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{flags}}{}%
12456\pysigstopmultiline
12457\end{fulllineitems}
12458
12459\begin{quote}\begin{description}
12460\item[{param}] \leavevmode
12461\sphinxAtStartPar
12462\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
12463
12464\sphinxAtStartPar
12465\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} TGS request context
12466
12467\sphinxAtStartPar
12468\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in} \sphinxhyphen{} KDC response (empty on the first call)
12469
12470\sphinxAtStartPar
12471\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} \sphinxhyphen{} Next KDC request
12472
12473\sphinxAtStartPar
12474\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realm} \sphinxhyphen{} Realm for next KDC request
12475
12476\sphinxAtStartPar
12477\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{flags} \sphinxhyphen{} Output flags
12478
12479\end{description}\end{quote}
12480\begin{quote}\begin{description}
12481\item[{retval}] \leavevmode\begin{itemize}
12482\item {}
12483\sphinxAtStartPar
124840   Success; otherwise \sphinxhyphen{} Kerberos error codes
12485
12486\end{itemize}
12487
12488\end{description}\end{quote}
12489
12490\sphinxAtStartPar
12491This 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.
12492
12493\sphinxAtStartPar
12494If more requests are needed, \sphinxstyleemphasis{flags} will be set to \#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 \#KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE and \sphinxstyleemphasis{out} will be empty.
12495
12496\sphinxAtStartPar
12497If 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.
12498
12499\begin{sphinxadmonition}{note}{Note:}
12500\sphinxAtStartPar
12501New in 1.9
12502\end{sphinxadmonition}
12503
12504
12505\subsubsection{krb5\_unmarshal\_credentials \sphinxhyphen{}  Deserialize a krb5\_creds object.}
12506\label{\detokenize{appdev/refs/api/krb5_unmarshal_credentials:krb5-unmarshal-credentials-deserialize-a-krb5-creds-object}}\label{\detokenize{appdev/refs/api/krb5_unmarshal_credentials::doc}}\index{krb5\_unmarshal\_credentials (C function)@\spxentry{krb5\_unmarshal\_credentials}\spxextra{C function}}
12507
12508\begin{fulllineitems}
12509\phantomsection\label{\detokenize{appdev/refs/api/krb5_unmarshal_credentials:c.krb5_unmarshal_credentials}}%
12510\pysigstartmultiline
12511\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_unmarshal\_credentials}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{creds\_out}}{}%
12512\pysigstopmultiline
12513\end{fulllineitems}
12514
12515\begin{quote}\begin{description}
12516\item[{param}] \leavevmode
12517\sphinxAtStartPar
12518\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
12519
12520\sphinxAtStartPar
12521\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} \sphinxhyphen{} The serialized credentials
12522
12523\sphinxAtStartPar
12524\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds\_out} \sphinxhyphen{} The resulting creds object
12525
12526\end{description}\end{quote}
12527\begin{quote}\begin{description}
12528\item[{retval}] \leavevmode\begin{itemize}
12529\item {}
12530\sphinxAtStartPar
125310   Success; otherwise \sphinxhyphen{} Kerberos error codes
12532
12533\end{itemize}
12534
12535\end{description}\end{quote}
12536
12537\sphinxAtStartPar
12538Deserialize \sphinxstyleemphasis{data} to credentials in the format used by the FILE ccache format (vesion 4) and KCM ccache protocol.
12539
12540\sphinxAtStartPar
12541Use krb5\_free\_creds() to free \sphinxstyleemphasis{creds\_out} when it is no longer needed.
12542
12543
12544\subsubsection{krb5\_verify\_init\_creds \sphinxhyphen{}  Verify initial credentials against a keytab.}
12545\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)@\spxentry{krb5\_verify\_init\_creds}\spxextra{C function}}
12546
12547\begin{fulllineitems}
12548\phantomsection\label{\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}}%
12549\pysigstartmultiline
12550\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_verify\_init\_creds}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{server}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{n}{keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_verify\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{options}}{}%
12551\pysigstopmultiline
12552\end{fulllineitems}
12553
12554\begin{quote}\begin{description}
12555\item[{param}] \leavevmode
12556\sphinxAtStartPar
12557\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
12558
12559\sphinxAtStartPar
12560\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} \sphinxhyphen{} Initial credentials to be verified
12561
12562\sphinxAtStartPar
12563\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} \sphinxhyphen{} Server principal (or NULL)
12564
12565\sphinxAtStartPar
12566\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} \sphinxhyphen{} Key table (NULL to use default keytab)
12567
12568\sphinxAtStartPar
12569\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} \sphinxhyphen{} Credential cache for fetched creds (or NULL)
12570
12571\sphinxAtStartPar
12572\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{options} \sphinxhyphen{} Verification options (NULL for default options)
12573
12574\end{description}\end{quote}
12575\begin{quote}\begin{description}
12576\item[{retval}] \leavevmode\begin{itemize}
12577\item {}
12578\sphinxAtStartPar
125790   Success; otherwise \sphinxhyphen{} Kerberos error codes
12580
12581\end{itemize}
12582
12583\end{description}\end{quote}
12584
12585\sphinxAtStartPar
12586This 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\sphinxhyphen{}kvno key entry for that principal name is used to verify the credentials; otherwise, all unique”host”service principals in the keytab are tried.
12587
12588\sphinxAtStartPar
12589If 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 krb5\_verify\_init\_creds\_opt\_init() and krb5\_verify\_init\_creds\_opt\_set\_ap\_req\_nofail().
12590
12591\sphinxAtStartPar
12592If \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.
12593
12594
12595\subsubsection{krb5\_verify\_init\_creds\_opt\_init \sphinxhyphen{}  Initialize a credential verification options structure.}
12596\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)@\spxentry{krb5\_verify\_init\_creds\_opt\_init}\spxextra{C function}}
12597
12598\begin{fulllineitems}
12599\phantomsection\label{\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_init:c.krb5_verify_init_creds_opt_init}}%
12600\pysigstartmultiline
12601\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_verify\_init\_creds\_opt\_init}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_verify\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{k5\_vic\_options}}{}%
12602\pysigstopmultiline
12603\end{fulllineitems}
12604
12605\begin{quote}\begin{description}
12606\item[{param}] \leavevmode
12607\sphinxAtStartPar
12608\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k5\_vic\_options} \sphinxhyphen{} Verification options structure
12609
12610\end{description}\end{quote}
12611
12612
12613\subsubsection{krb5\_verify\_init\_creds\_opt\_set\_ap\_req\_nofail \sphinxhyphen{}  Set whether credential verification is required.}
12614\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}}\label{\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_set_ap_req_nofail::doc}}\index{krb5\_verify\_init\_creds\_opt\_set\_ap\_req\_nofail (C function)@\spxentry{krb5\_verify\_init\_creds\_opt\_set\_ap\_req\_nofail}\spxextra{C function}}
12615
12616\begin{fulllineitems}
12617\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}}%
12618\pysigstartmultiline
12619\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{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{\DUrole{n}{krb5\_verify\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{k5\_vic\_options}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{ap\_req\_nofail}}{}%
12620\pysigstopmultiline
12621\end{fulllineitems}
12622
12623\begin{quote}\begin{description}
12624\item[{param}] \leavevmode
12625\sphinxAtStartPar
12626\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k5\_vic\_options} \sphinxhyphen{} Verification options structure
12627
12628\sphinxAtStartPar
12629\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_nofail} \sphinxhyphen{} Whether to require successful verification
12630
12631\end{description}\end{quote}
12632
12633\sphinxAtStartPar
12634This function determines how 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 krb5\_verify\_init\_creds() will return successfully. If \sphinxstyleemphasis{ap\_req\_nofail} is \sphinxstylestrong{TRUE} , krb5\_verify\_init\_creds() will not return successfully unless verification can be performed.
12635
12636\sphinxAtStartPar
12637If this function is not used, the behavior of krb5\_verify\_init\_creds() is determined through configuration.
12638
12639
12640\subsubsection{krb5\_vprepend\_error\_message \sphinxhyphen{}  Add a prefix to the message for an error code using a va\_list.}
12641\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}}\label{\detokenize{appdev/refs/api/krb5_vprepend_error_message::doc}}\index{krb5\_vprepend\_error\_message (C function)@\spxentry{krb5\_vprepend\_error\_message}\spxextra{C function}}
12642
12643\begin{fulllineitems}
12644\phantomsection\label{\detokenize{appdev/refs/api/krb5_vprepend_error_message:c.krb5_vprepend_error_message}}%
12645\pysigstartmultiline
12646\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_vprepend\_error\_message}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\DUrole{n}{code}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{fmt}, \DUrole{n}{va\_list}\DUrole{w}{  }\DUrole{n}{args}}{}%
12647\pysigstopmultiline
12648\end{fulllineitems}
12649
12650\begin{quote}\begin{description}
12651\item[{param}] \leavevmode
12652\sphinxAtStartPar
12653\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
12654
12655\sphinxAtStartPar
12656\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} \sphinxhyphen{} Error code
12657
12658\sphinxAtStartPar
12659\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} \sphinxhyphen{} Format string for error message prefix
12660
12661\sphinxAtStartPar
12662\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{args} \sphinxhyphen{} List of vprintf(3) style arguments
12663
12664\end{description}\end{quote}
12665
12666\sphinxAtStartPar
12667This function is similar to krb5\_prepend\_error\_message(), but uses a va\_list instead of variadic arguments.
12668
12669
12670\subsubsection{krb5\_vset\_error\_message \sphinxhyphen{}  Set an extended error message for an error code using a va\_list.}
12671\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)@\spxentry{krb5\_vset\_error\_message}\spxextra{C function}}
12672
12673\begin{fulllineitems}
12674\phantomsection\label{\detokenize{appdev/refs/api/krb5_vset_error_message:c.krb5_vset_error_message}}%
12675\pysigstartmultiline
12676\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_vset\_error\_message}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\DUrole{n}{code}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{fmt}, \DUrole{n}{va\_list}\DUrole{w}{  }\DUrole{n}{args}}{}%
12677\pysigstopmultiline
12678\end{fulllineitems}
12679
12680\begin{quote}\begin{description}
12681\item[{param}] \leavevmode
12682\sphinxAtStartPar
12683\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
12684
12685\sphinxAtStartPar
12686\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} \sphinxhyphen{} Error code
12687
12688\sphinxAtStartPar
12689\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} \sphinxhyphen{} Error string for the error code
12690
12691\sphinxAtStartPar
12692\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{args} \sphinxhyphen{} List of vprintf(3) style arguments
12693
12694\end{description}\end{quote}
12695
12696
12697\subsubsection{krb5\_vwrap\_error\_message \sphinxhyphen{}  Add a prefix to a different error code’s message using a va\_list.}
12698\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)@\spxentry{krb5\_vwrap\_error\_message}\spxextra{C function}}
12699
12700\begin{fulllineitems}
12701\phantomsection\label{\detokenize{appdev/refs/api/krb5_vwrap_error_message:c.krb5_vwrap_error_message}}%
12702\pysigstartmultiline
12703\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_vwrap\_error\_message}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\DUrole{n}{old\_code}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\DUrole{n}{code}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{fmt}, \DUrole{n}{va\_list}\DUrole{w}{  }\DUrole{n}{args}}{}%
12704\pysigstopmultiline
12705\end{fulllineitems}
12706
12707\begin{quote}\begin{description}
12708\item[{param}] \leavevmode
12709\sphinxAtStartPar
12710\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
12711
12712\sphinxAtStartPar
12713\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{old\_code} \sphinxhyphen{} Previous error code
12714
12715\sphinxAtStartPar
12716\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} \sphinxhyphen{} Error code
12717
12718\sphinxAtStartPar
12719\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} \sphinxhyphen{} Format string for error message prefix
12720
12721\sphinxAtStartPar
12722\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{args} \sphinxhyphen{} List of vprintf(3) style arguments
12723
12724\end{description}\end{quote}
12725
12726\sphinxAtStartPar
12727This function is similar to krb5\_wrap\_error\_message(), but uses a va\_list instead of variadic arguments.
12728
12729
12730\subsubsection{krb5\_wrap\_error\_message \sphinxhyphen{}  Add a prefix to a different error code’s message.}
12731\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)@\spxentry{krb5\_wrap\_error\_message}\spxextra{C function}}
12732
12733\begin{fulllineitems}
12734\phantomsection\label{\detokenize{appdev/refs/api/krb5_wrap_error_message:c.krb5_wrap_error_message}}%
12735\pysigstartmultiline
12736\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_wrap\_error\_message}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\DUrole{n}{old\_code}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\DUrole{n}{code}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{fmt}, \DUrole{p}{...}}{}%
12737\pysigstopmultiline
12738\end{fulllineitems}
12739
12740\begin{quote}\begin{description}
12741\item[{param}] \leavevmode
12742\sphinxAtStartPar
12743\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} \sphinxhyphen{} Library context
12744
12745\sphinxAtStartPar
12746\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{old\_code} \sphinxhyphen{} Previous error code
12747
12748\sphinxAtStartPar
12749\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} \sphinxhyphen{} Error code
12750
12751\sphinxAtStartPar
12752\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} \sphinxhyphen{} Format string for error message prefix
12753
12754\end{description}\end{quote}
12755
12756\sphinxAtStartPar
12757Format 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} .
12758
12759
12760\subsection{Public interfaces that should not be called directly}
12761\label{\detokenize{appdev/refs/api/index:public-interfaces-that-should-not-be-called-directly}}
12762
12763\subsubsection{krb5\_c\_block\_size \sphinxhyphen{}  Return cipher block size.}
12764\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)@\spxentry{krb5\_c\_block\_size}\spxextra{C function}}
12765
12766\begin{fulllineitems}
12767\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_block_size:c.krb5_c_block_size}}%
12768\pysigstartmultiline
12769\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_block\_size}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{enctype}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{blocksize}}{}%
12770\pysigstopmultiline
12771\end{fulllineitems}
12772
12773\begin{quote}\begin{description}
12774\item[{param}] \leavevmode
12775\sphinxAtStartPar
12776\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
12777
12778\sphinxAtStartPar
12779\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} \sphinxhyphen{} Encryption type
12780
12781\sphinxAtStartPar
12782\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{blocksize} \sphinxhyphen{} Block size for \sphinxstyleemphasis{enctype}
12783
12784\end{description}\end{quote}
12785\begin{quote}\begin{description}
12786\item[{retval}] \leavevmode\begin{itemize}
12787\item {}
12788\sphinxAtStartPar
127890   Success; otherwise \sphinxhyphen{} Kerberos error codes
12790
12791\end{itemize}
12792
12793\end{description}\end{quote}
12794
12795
12796\subsubsection{krb5\_c\_checksum\_length \sphinxhyphen{}  Return the length of checksums for a checksum type.}
12797\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)@\spxentry{krb5\_c\_checksum\_length}\spxextra{C function}}
12798
12799\begin{fulllineitems}
12800\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_checksum_length:c.krb5_c_checksum_length}}%
12801\pysigstartmultiline
12802\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_checksum\_length}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{\DUrole{n}{krb5\_cksumtype}}}}\DUrole{w}{  }\DUrole{n}{cksumtype}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{length}}{}%
12803\pysigstopmultiline
12804\end{fulllineitems}
12805
12806\begin{quote}\begin{description}
12807\item[{param}] \leavevmode
12808\sphinxAtStartPar
12809\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
12810
12811\sphinxAtStartPar
12812\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} \sphinxhyphen{} Checksum type
12813
12814\sphinxAtStartPar
12815\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{length} \sphinxhyphen{} Checksum length
12816
12817\end{description}\end{quote}
12818\begin{quote}\begin{description}
12819\item[{retval}] \leavevmode\begin{itemize}
12820\item {}
12821\sphinxAtStartPar
128220   Success; otherwise \sphinxhyphen{} Kerberos error codes
12823
12824\end{itemize}
12825
12826\end{description}\end{quote}
12827
12828
12829\subsubsection{krb5\_c\_crypto\_length \sphinxhyphen{}  Return a length of a message field specific to the encryption type.}
12830\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)@\spxentry{krb5\_c\_crypto\_length}\spxextra{C function}}
12831
12832\begin{fulllineitems}
12833\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_crypto_length:c.krb5_c_crypto_length}}%
12834\pysigstartmultiline
12835\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_crypto\_length}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_cryptotype:c.krb5_cryptotype}]{\sphinxcrossref{\DUrole{n}{krb5\_cryptotype}}}}\DUrole{w}{  }\DUrole{n}{type}, \DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{size}}{}%
12836\pysigstopmultiline
12837\end{fulllineitems}
12838
12839\begin{quote}\begin{description}
12840\item[{param}] \leavevmode
12841\sphinxAtStartPar
12842\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
12843
12844\sphinxAtStartPar
12845\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} \sphinxhyphen{} Encryption type
12846
12847\sphinxAtStartPar
12848\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} \sphinxhyphen{} Type field (See KRB5\_CRYPTO\_TYPE macros)
12849
12850\sphinxAtStartPar
12851\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{size} \sphinxhyphen{} Length of the \sphinxstyleemphasis{type} specific to \sphinxstyleemphasis{enctype}
12852
12853\end{description}\end{quote}
12854\begin{quote}\begin{description}
12855\item[{retval}] \leavevmode\begin{itemize}
12856\item {}
12857\sphinxAtStartPar
128580   Success; otherwise \sphinxhyphen{} Kerberos error codes
12859
12860\end{itemize}
12861
12862\end{description}\end{quote}
12863
12864
12865\subsubsection{krb5\_c\_crypto\_length\_iov \sphinxhyphen{}  Fill in lengths for header, trailer and padding in a IOV array.}
12866\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)@\spxentry{krb5\_c\_crypto\_length\_iov}\spxextra{C function}}
12867
12868\begin{fulllineitems}
12869\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_crypto_length_iov:c.krb5_c_crypto_length_iov}}%
12870\pysigstartmultiline
12871\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_crypto\_length\_iov}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{\DUrole{n}{krb5\_crypto\_iov}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{num\_data}}{}%
12872\pysigstopmultiline
12873\end{fulllineitems}
12874
12875\begin{quote}\begin{description}
12876\item[{param}] \leavevmode
12877\sphinxAtStartPar
12878\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
12879
12880\sphinxAtStartPar
12881\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} \sphinxhyphen{} Encryption type
12882
12883\sphinxAtStartPar
12884\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} \sphinxhyphen{} IOV array
12885
12886\sphinxAtStartPar
12887\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} \sphinxhyphen{} Size of \sphinxstyleemphasis{data}
12888
12889\end{description}\end{quote}
12890\begin{quote}\begin{description}
12891\item[{retval}] \leavevmode\begin{itemize}
12892\item {}
12893\sphinxAtStartPar
128940   Success; otherwise \sphinxhyphen{} Kerberos error codes
12895
12896\end{itemize}
12897
12898\end{description}\end{quote}
12899
12900\sphinxAtStartPar
12901Padding 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 \#KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY buffers, but before actually allocating header, trailer and padding.
12902
12903
12904\subsubsection{krb5\_c\_decrypt \sphinxhyphen{}  Decrypt data using a key (operates on keyblock).}
12905\label{\detokenize{appdev/refs/api/krb5_c_decrypt:krb5-c-decrypt-decrypt-data-using-a-key-operates-on-keyblock}}\label{\detokenize{appdev/refs/api/krb5_c_decrypt::doc}}\index{krb5\_c\_decrypt (C function)@\spxentry{krb5\_c\_decrypt}\spxextra{C function}}
12906
12907\begin{fulllineitems}
12908\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_decrypt:c.krb5_c_decrypt}}%
12909\pysigstartmultiline
12910\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_decrypt}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{\DUrole{n}{krb5\_keyusage}}}}\DUrole{w}{  }\DUrole{n}{usage}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cipher\_state}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{input}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{output}}{}%
12911\pysigstopmultiline
12912\end{fulllineitems}
12913
12914\begin{quote}\begin{description}
12915\item[{param}] \leavevmode
12916\sphinxAtStartPar
12917\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
12918
12919\sphinxAtStartPar
12920\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Encryption key
12921
12922\sphinxAtStartPar
12923\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} \sphinxhyphen{} Key usage (see KRB5\_KEYUSAGE macros)
12924
12925\sphinxAtStartPar
12926\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{cipher\_state} \sphinxhyphen{} Cipher state; specify NULL if not needed
12927
12928\sphinxAtStartPar
12929\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} \sphinxhyphen{} Encrypted data
12930
12931\sphinxAtStartPar
12932\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} \sphinxhyphen{} Decrypted data
12933
12934\end{description}\end{quote}
12935\begin{quote}\begin{description}
12936\item[{retval}] \leavevmode\begin{itemize}
12937\item {}
12938\sphinxAtStartPar
129390   Success; otherwise \sphinxhyphen{} Kerberos error codes
12940
12941\end{itemize}
12942
12943\end{description}\end{quote}
12944
12945\sphinxAtStartPar
12946This 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\sphinxhyphen{}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.
12947
12948\begin{sphinxadmonition}{note}{Note:}
12949\sphinxAtStartPar
12950The 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 krb5\_c\_decrypt() trim \sphinxstyleemphasis{output\sphinxhyphen{}\textgreater{}length} . For some enctypes, the resulting \sphinxstyleemphasis{output\sphinxhyphen{}\textgreater{}length} may include padding bytes.
12951\end{sphinxadmonition}
12952
12953
12954\subsubsection{krb5\_c\_decrypt\_iov \sphinxhyphen{}  Decrypt data in place supporting AEAD (operates on keyblock).}
12955\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)@\spxentry{krb5\_c\_decrypt\_iov}\spxextra{C function}}
12956
12957\begin{fulllineitems}
12958\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_decrypt_iov:c.krb5_c_decrypt_iov}}%
12959\pysigstartmultiline
12960\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_decrypt\_iov}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{keyblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{\DUrole{n}{krb5\_keyusage}}}}\DUrole{w}{  }\DUrole{n}{usage}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cipher\_state}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{\DUrole{n}{krb5\_crypto\_iov}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{num\_data}}{}%
12961\pysigstopmultiline
12962\end{fulllineitems}
12963
12964\begin{quote}\begin{description}
12965\item[{param}] \leavevmode
12966\sphinxAtStartPar
12967\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
12968
12969\sphinxAtStartPar
12970\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} \sphinxhyphen{} Encryption key
12971
12972\sphinxAtStartPar
12973\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} \sphinxhyphen{} Key usage (see KRB5\_KEYUSAGE macros)
12974
12975\sphinxAtStartPar
12976\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cipher\_state} \sphinxhyphen{} Cipher state; specify NULL if not needed
12977
12978\sphinxAtStartPar
12979\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} \sphinxhyphen{} IOV array. Modified in\sphinxhyphen{}place.
12980
12981\sphinxAtStartPar
12982\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} \sphinxhyphen{} Size of \sphinxstyleemphasis{data}
12983
12984\end{description}\end{quote}
12985\begin{quote}\begin{description}
12986\item[{retval}] \leavevmode\begin{itemize}
12987\item {}
12988\sphinxAtStartPar
129890   Success; otherwise \sphinxhyphen{} Kerberos error codes
12990
12991\end{itemize}
12992
12993\end{description}\end{quote}
12994
12995\sphinxAtStartPar
12996This function decrypts the data block \sphinxstyleemphasis{data} and stores the output in\sphinxhyphen{}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\sphinxhyphen{}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.
12997
12998
12999\sphinxstrong{See also:}
13000\nopagebreak
13001
13002
13003\sphinxAtStartPar
13004krb5\_c\_decrypt\_iov()
13005
13006
13007
13008\begin{sphinxadmonition}{note}{Note:}
13009\sphinxAtStartPar
13010On return from a krb5\_c\_decrypt\_iov() call, the \sphinxstyleemphasis{data\sphinxhyphen{}\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.
13011\end{sphinxadmonition}
13012
13013
13014\subsubsection{krb5\_c\_derive\_prfplus \sphinxhyphen{}  Derive a key using some input data (via RFC 6113 PRF+).}
13015\label{\detokenize{appdev/refs/api/krb5_c_derive_prfplus:krb5-c-derive-prfplus-derive-a-key-using-some-input-data-via-rfc-6113-prf}}\label{\detokenize{appdev/refs/api/krb5_c_derive_prfplus::doc}}\index{krb5\_c\_derive\_prfplus (C function)@\spxentry{krb5\_c\_derive\_prfplus}\spxextra{C function}}
13016
13017\begin{fulllineitems}
13018\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_derive_prfplus:c.krb5_c_derive_prfplus}}%
13019\pysigstartmultiline
13020\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_derive\_prfplus}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{k}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{input}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{out}}{}%
13021\pysigstopmultiline
13022\end{fulllineitems}
13023
13024\begin{quote}\begin{description}
13025\item[{param}] \leavevmode
13026\sphinxAtStartPar
13027\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13028
13029\sphinxAtStartPar
13030\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k} \sphinxhyphen{} KDC contribution key
13031
13032\sphinxAtStartPar
13033\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} \sphinxhyphen{} Input string
13034
13035\sphinxAtStartPar
13036\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} \sphinxhyphen{} Output key enctype (or \sphinxstylestrong{ENCTYPE\_NULL} )
13037
13038\sphinxAtStartPar
13039\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} \sphinxhyphen{} Derived keyblock
13040
13041\end{description}\end{quote}
13042
13043\sphinxAtStartPar
13044This 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.
13045
13046
13047\subsubsection{krb5\_c\_encrypt \sphinxhyphen{}  Encrypt data using a key (operates on keyblock).}
13048\label{\detokenize{appdev/refs/api/krb5_c_encrypt:krb5-c-encrypt-encrypt-data-using-a-key-operates-on-keyblock}}\label{\detokenize{appdev/refs/api/krb5_c_encrypt::doc}}\index{krb5\_c\_encrypt (C function)@\spxentry{krb5\_c\_encrypt}\spxextra{C function}}
13049
13050\begin{fulllineitems}
13051\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_encrypt:c.krb5_c_encrypt}}%
13052\pysigstartmultiline
13053\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_encrypt}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{\DUrole{n}{krb5\_keyusage}}}}\DUrole{w}{  }\DUrole{n}{usage}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cipher\_state}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{input}, {\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{output}}{}%
13054\pysigstopmultiline
13055\end{fulllineitems}
13056
13057\begin{quote}\begin{description}
13058\item[{param}] \leavevmode
13059\sphinxAtStartPar
13060\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13061
13062\sphinxAtStartPar
13063\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Encryption key
13064
13065\sphinxAtStartPar
13066\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} \sphinxhyphen{} Key usage (see KRB5\_KEYUSAGE macros)
13067
13068\sphinxAtStartPar
13069\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{cipher\_state} \sphinxhyphen{} Cipher state; specify NULL if not needed
13070
13071\sphinxAtStartPar
13072\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} \sphinxhyphen{} Data to be encrypted
13073
13074\sphinxAtStartPar
13075\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} \sphinxhyphen{} Encrypted data
13076
13077\end{description}\end{quote}
13078\begin{quote}\begin{description}
13079\item[{retval}] \leavevmode\begin{itemize}
13080\item {}
13081\sphinxAtStartPar
130820   Success; otherwise \sphinxhyphen{} Kerberos error codes
13083
13084\end{itemize}
13085
13086\end{description}\end{quote}
13087
13088\sphinxAtStartPar
13089This function encrypts the data block \sphinxstyleemphasis{input} and stores the outputinto \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\sphinxhyphen{}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.
13090
13091\begin{sphinxadmonition}{note}{Note:}
13092\sphinxAtStartPar
13093The caller must initialize \sphinxstyleemphasis{output} and allocate at least enough space for the result (using krb5\_c\_encrypt\_length() to determine the amount of space needed). \sphinxstyleemphasis{output\sphinxhyphen{}\textgreater{}length} will be set to the actual length of the ciphertext.
13094\end{sphinxadmonition}
13095
13096
13097\subsubsection{krb5\_c\_encrypt\_iov \sphinxhyphen{}  Encrypt data in place supporting AEAD (operates on keyblock).}
13098\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)@\spxentry{krb5\_c\_encrypt\_iov}\spxextra{C function}}
13099
13100\begin{fulllineitems}
13101\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_encrypt_iov:c.krb5_c_encrypt_iov}}%
13102\pysigstartmultiline
13103\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_encrypt\_iov}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{keyblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{\DUrole{n}{krb5\_keyusage}}}}\DUrole{w}{  }\DUrole{n}{usage}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cipher\_state}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{\DUrole{n}{krb5\_crypto\_iov}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{num\_data}}{}%
13104\pysigstopmultiline
13105\end{fulllineitems}
13106
13107\begin{quote}\begin{description}
13108\item[{param}] \leavevmode
13109\sphinxAtStartPar
13110\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13111
13112\sphinxAtStartPar
13113\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} \sphinxhyphen{} Encryption key
13114
13115\sphinxAtStartPar
13116\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} \sphinxhyphen{} Key usage (see KRB5\_KEYUSAGE macros)
13117
13118\sphinxAtStartPar
13119\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cipher\_state} \sphinxhyphen{} Cipher state; specify NULL if not needed
13120
13121\sphinxAtStartPar
13122\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} \sphinxhyphen{} IOV array. Modified in\sphinxhyphen{}place.
13123
13124\sphinxAtStartPar
13125\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} \sphinxhyphen{} Size of \sphinxstyleemphasis{data}
13126
13127\end{description}\end{quote}
13128\begin{quote}\begin{description}
13129\item[{retval}] \leavevmode\begin{itemize}
13130\item {}
13131\sphinxAtStartPar
131320   Success; otherwise \sphinxhyphen{} Kerberos error codes
13133
13134\end{itemize}
13135
13136\end{description}\end{quote}
13137
13138\sphinxAtStartPar
13139This function encrypts the data block \sphinxstyleemphasis{data} and stores the output in\sphinxhyphen{}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\sphinxhyphen{}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.
13140
13141
13142\sphinxstrong{See also:}
13143\nopagebreak
13144
13145
13146\sphinxAtStartPar
13147krb5\_c\_decrypt\_iov()
13148
13149
13150
13151\begin{sphinxadmonition}{note}{Note:}
13152\sphinxAtStartPar
13153On return from a krb5\_c\_encrypt\_iov() call, the \sphinxstyleemphasis{data\sphinxhyphen{}\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.
13154\end{sphinxadmonition}
13155
13156
13157\subsubsection{krb5\_c\_encrypt\_length \sphinxhyphen{}  Compute encrypted data length.}
13158\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)@\spxentry{krb5\_c\_encrypt\_length}\spxextra{C function}}
13159
13160\begin{fulllineitems}
13161\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_encrypt_length:c.krb5_c_encrypt_length}}%
13162\pysigstartmultiline
13163\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_encrypt\_length}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{enctype}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{inputlen}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{length}}{}%
13164\pysigstopmultiline
13165\end{fulllineitems}
13166
13167\begin{quote}\begin{description}
13168\item[{param}] \leavevmode
13169\sphinxAtStartPar
13170\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13171
13172\sphinxAtStartPar
13173\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} \sphinxhyphen{} Encryption type
13174
13175\sphinxAtStartPar
13176\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inputlen} \sphinxhyphen{} Length of the data to be encrypted
13177
13178\sphinxAtStartPar
13179\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{length} \sphinxhyphen{} Length of the encrypted data
13180
13181\end{description}\end{quote}
13182\begin{quote}\begin{description}
13183\item[{retval}] \leavevmode\begin{itemize}
13184\item {}
13185\sphinxAtStartPar
131860   Success; otherwise \sphinxhyphen{} Kerberos error codes
13187
13188\end{itemize}
13189
13190\end{description}\end{quote}
13191
13192\sphinxAtStartPar
13193This function computes the length of the ciphertext produced by encrypting \sphinxstyleemphasis{inputlen} bytes including padding, confounder, and checksum.
13194
13195
13196\subsubsection{krb5\_c\_enctype\_compare \sphinxhyphen{}  Compare two encryption types.}
13197\label{\detokenize{appdev/refs/api/krb5_c_enctype_compare:krb5-c-enctype-compare-compare-two-encryption-types}}\label{\detokenize{appdev/refs/api/krb5_c_enctype_compare::doc}}\index{krb5\_c\_enctype\_compare (C function)@\spxentry{krb5\_c\_enctype\_compare}\spxextra{C function}}
13198
13199\begin{fulllineitems}
13200\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_enctype_compare:c.krb5_c_enctype_compare}}%
13201\pysigstartmultiline
13202\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_enctype\_compare}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{e1}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{e2}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{similar}}{}%
13203\pysigstopmultiline
13204\end{fulllineitems}
13205
13206\begin{quote}\begin{description}
13207\item[{param}] \leavevmode
13208\sphinxAtStartPar
13209\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13210
13211\sphinxAtStartPar
13212\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{e1} \sphinxhyphen{} First encryption type
13213
13214\sphinxAtStartPar
13215\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{e2} \sphinxhyphen{} Second encryption type
13216
13217\sphinxAtStartPar
13218\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{similar} \sphinxhyphen{} \sphinxstylestrong{TRUE} if types are similar, \sphinxstylestrong{FALSE} if not
13219
13220\end{description}\end{quote}
13221\begin{quote}\begin{description}
13222\item[{retval}] \leavevmode\begin{itemize}
13223\item {}
13224\sphinxAtStartPar
132250   Success; otherwise \sphinxhyphen{} Kerberos error codes
13226
13227\end{itemize}
13228
13229\end{description}\end{quote}
13230
13231\sphinxAtStartPar
13232This function determines whether two encryption types use the same kind of keys.
13233
13234
13235\subsubsection{krb5\_c\_free\_state \sphinxhyphen{}  Free a cipher state previously allocated by krb5\_c\_init\_state().}
13236\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)@\spxentry{krb5\_c\_free\_state}\spxextra{C function}}
13237
13238\begin{fulllineitems}
13239\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_free_state:c.krb5_c_free_state}}%
13240\pysigstartmultiline
13241\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_free\_state}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{state}}{}%
13242\pysigstopmultiline
13243\end{fulllineitems}
13244
13245\begin{quote}\begin{description}
13246\item[{param}] \leavevmode
13247\sphinxAtStartPar
13248\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13249
13250\sphinxAtStartPar
13251\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Key
13252
13253\sphinxAtStartPar
13254\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{state} \sphinxhyphen{} Cipher state to be freed
13255
13256\end{description}\end{quote}
13257\begin{quote}\begin{description}
13258\item[{retval}] \leavevmode\begin{itemize}
13259\item {}
13260\sphinxAtStartPar
132610   Success; otherwise \sphinxhyphen{} Kerberos error codes
13262
13263\end{itemize}
13264
13265\end{description}\end{quote}
13266
13267
13268\subsubsection{krb5\_c\_fx\_cf2\_simple \sphinxhyphen{}  Compute the KRB\sphinxhyphen{}FX\sphinxhyphen{}CF2 combination of two keys and pepper strings.}
13269\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)@\spxentry{krb5\_c\_fx\_cf2\_simple}\spxextra{C function}}
13270
13271\begin{fulllineitems}
13272\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_fx_cf2_simple:c.krb5_c_fx_cf2_simple}}%
13273\pysigstartmultiline
13274\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_fx\_cf2\_simple}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{k1}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{pepper1}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{k2}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{pepper2}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{out}}{}%
13275\pysigstopmultiline
13276\end{fulllineitems}
13277
13278\begin{quote}\begin{description}
13279\item[{param}] \leavevmode
13280\sphinxAtStartPar
13281\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13282
13283\sphinxAtStartPar
13284\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k1} \sphinxhyphen{} KDC contribution key
13285
13286\sphinxAtStartPar
13287\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pepper1} \sphinxhyphen{} String”PKINIT”
13288
13289\sphinxAtStartPar
13290\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k2} \sphinxhyphen{} Reply key
13291
13292\sphinxAtStartPar
13293\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pepper2} \sphinxhyphen{} String”KeyExchange”
13294
13295\sphinxAtStartPar
13296\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} \sphinxhyphen{} Output key
13297
13298\end{description}\end{quote}
13299\begin{quote}\begin{description}
13300\item[{retval}] \leavevmode\begin{itemize}
13301\item {}
13302\sphinxAtStartPar
133030   Success; otherwise \sphinxhyphen{} Kerberos error codes
13304
13305\end{itemize}
13306
13307\end{description}\end{quote}
13308
13309\sphinxAtStartPar
13310This function computes the KRB\sphinxhyphen{}FX\sphinxhyphen{}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.
13311
13312
13313\subsubsection{krb5\_c\_init\_state \sphinxhyphen{}  Initialize a new cipher state.}
13314\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)@\spxentry{krb5\_c\_init\_state}\spxextra{C function}}
13315
13316\begin{fulllineitems}
13317\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_init_state:c.krb5_c_init_state}}%
13318\pysigstartmultiline
13319\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_init\_state}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{\DUrole{n}{krb5\_keyusage}}}}\DUrole{w}{  }\DUrole{n}{usage}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{new\_state}}{}%
13320\pysigstopmultiline
13321\end{fulllineitems}
13322
13323\begin{quote}\begin{description}
13324\item[{param}] \leavevmode
13325\sphinxAtStartPar
13326\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13327
13328\sphinxAtStartPar
13329\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Key
13330
13331\sphinxAtStartPar
13332\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} \sphinxhyphen{} Key usage (see KRB5\_KEYUSAGE macros)
13333
13334\sphinxAtStartPar
13335\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{new\_state} \sphinxhyphen{} New cipher state
13336
13337\end{description}\end{quote}
13338\begin{quote}\begin{description}
13339\item[{retval}] \leavevmode\begin{itemize}
13340\item {}
13341\sphinxAtStartPar
133420   Success; otherwise \sphinxhyphen{} Kerberos error codes
13343
13344\end{itemize}
13345
13346\end{description}\end{quote}
13347
13348
13349\subsubsection{krb5\_c\_is\_coll\_proof\_cksum \sphinxhyphen{}  Test whether a checksum type is collision\sphinxhyphen{}proof.}
13350\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)@\spxentry{krb5\_c\_is\_coll\_proof\_cksum}\spxextra{C function}}
13351
13352\begin{fulllineitems}
13353\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_is_coll_proof_cksum:c.krb5_c_is_coll_proof_cksum}}%
13354\pysigstartmultiline
13355\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_is\_coll\_proof\_cksum}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{\DUrole{n}{krb5\_cksumtype}}}}\DUrole{w}{  }\DUrole{n}{ctype}}{}%
13356\pysigstopmultiline
13357\end{fulllineitems}
13358
13359\begin{quote}\begin{description}
13360\item[{param}] \leavevmode
13361\sphinxAtStartPar
13362\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctype} \sphinxhyphen{} Checksum type
13363
13364\end{description}\end{quote}
13365\begin{quote}\begin{description}
13366\item[{return}] \leavevmode\begin{itemize}
13367\item {}
13368\sphinxAtStartPar
13369TRUE if ctype is collision\sphinxhyphen{}proof, FALSE if it is not collision\sphinxhyphen{}proof or not a valid checksum type.
13370
13371\end{itemize}
13372
13373\end{description}\end{quote}
13374
13375
13376\subsubsection{krb5\_c\_is\_keyed\_cksum \sphinxhyphen{}  Test whether a checksum type is keyed.}
13377\label{\detokenize{appdev/refs/api/krb5_c_is_keyed_cksum:krb5-c-is-keyed-cksum-test-whether-a-checksum-type-is-keyed}}\label{\detokenize{appdev/refs/api/krb5_c_is_keyed_cksum::doc}}\index{krb5\_c\_is\_keyed\_cksum (C function)@\spxentry{krb5\_c\_is\_keyed\_cksum}\spxextra{C function}}
13378
13379\begin{fulllineitems}
13380\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_is_keyed_cksum:c.krb5_c_is_keyed_cksum}}%
13381\pysigstartmultiline
13382\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_is\_keyed\_cksum}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{\DUrole{n}{krb5\_cksumtype}}}}\DUrole{w}{  }\DUrole{n}{ctype}}{}%
13383\pysigstopmultiline
13384\end{fulllineitems}
13385
13386\begin{quote}\begin{description}
13387\item[{param}] \leavevmode
13388\sphinxAtStartPar
13389\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctype} \sphinxhyphen{} Checksum type
13390
13391\end{description}\end{quote}
13392\begin{quote}\begin{description}
13393\item[{return}] \leavevmode\begin{itemize}
13394\item {}
13395\sphinxAtStartPar
13396TRUE if ctype is a keyed checksum type, FALSE otherwise.
13397
13398\end{itemize}
13399
13400\end{description}\end{quote}
13401
13402
13403\subsubsection{krb5\_c\_keyed\_checksum\_types \sphinxhyphen{}  Return a list of keyed checksum types usable with an encryption type.}
13404\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}}\label{\detokenize{appdev/refs/api/krb5_c_keyed_checksum_types::doc}}\index{krb5\_c\_keyed\_checksum\_types (C function)@\spxentry{krb5\_c\_keyed\_checksum\_types}\spxextra{C function}}
13405
13406\begin{fulllineitems}
13407\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_keyed_checksum_types:c.krb5_c_keyed_checksum_types}}%
13408\pysigstartmultiline
13409\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_keyed\_checksum\_types}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{enctype}, \DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{count}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{\DUrole{n}{krb5\_cksumtype}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{cksumtypes}}{}%
13410\pysigstopmultiline
13411\end{fulllineitems}
13412
13413\begin{quote}\begin{description}
13414\item[{param}] \leavevmode
13415\sphinxAtStartPar
13416\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13417
13418\sphinxAtStartPar
13419\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} \sphinxhyphen{} Encryption type
13420
13421\sphinxAtStartPar
13422\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{count} \sphinxhyphen{} Count of allowable checksum types
13423
13424\sphinxAtStartPar
13425\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cksumtypes} \sphinxhyphen{} Array of allowable checksum types
13426
13427\end{description}\end{quote}
13428\begin{quote}\begin{description}
13429\item[{retval}] \leavevmode\begin{itemize}
13430\item {}
13431\sphinxAtStartPar
134320   Success; otherwise \sphinxhyphen{} Kerberos error codes
13433
13434\end{itemize}
13435
13436\end{description}\end{quote}
13437
13438\sphinxAtStartPar
13439Use krb5\_free\_cksumtypes() to free \sphinxstyleemphasis{cksumtypes} when it is no longer needed.
13440
13441
13442\subsubsection{krb5\_c\_keylengths \sphinxhyphen{}  Return length of the specified key in bytes.}
13443\label{\detokenize{appdev/refs/api/krb5_c_keylengths:krb5-c-keylengths-return-length-of-the-specified-key-in-bytes}}\label{\detokenize{appdev/refs/api/krb5_c_keylengths::doc}}\index{krb5\_c\_keylengths (C function)@\spxentry{krb5\_c\_keylengths}\spxextra{C function}}
13444
13445\begin{fulllineitems}
13446\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_keylengths:c.krb5_c_keylengths}}%
13447\pysigstartmultiline
13448\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_keylengths}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{enctype}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{keybytes}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{keylength}}{}%
13449\pysigstopmultiline
13450\end{fulllineitems}
13451
13452\begin{quote}\begin{description}
13453\item[{param}] \leavevmode
13454\sphinxAtStartPar
13455\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13456
13457\sphinxAtStartPar
13458\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} \sphinxhyphen{} Encryption type
13459
13460\sphinxAtStartPar
13461\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keybytes} \sphinxhyphen{} Number of bytes required to make a key
13462
13463\sphinxAtStartPar
13464\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keylength} \sphinxhyphen{} Length of final key
13465
13466\end{description}\end{quote}
13467\begin{quote}\begin{description}
13468\item[{retval}] \leavevmode\begin{itemize}
13469\item {}
13470\sphinxAtStartPar
134710   Success; otherwise \sphinxhyphen{} Kerberos error codes
13472
13473\end{itemize}
13474
13475\end{description}\end{quote}
13476
13477
13478\subsubsection{krb5\_c\_make\_checksum \sphinxhyphen{}  Compute a checksum (operates on keyblock).}
13479\label{\detokenize{appdev/refs/api/krb5_c_make_checksum:krb5-c-make-checksum-compute-a-checksum-operates-on-keyblock}}\label{\detokenize{appdev/refs/api/krb5_c_make_checksum::doc}}\index{krb5\_c\_make\_checksum (C function)@\spxentry{krb5\_c\_make\_checksum}\spxextra{C function}}
13480
13481\begin{fulllineitems}
13482\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_make_checksum:c.krb5_c_make_checksum}}%
13483\pysigstartmultiline
13484\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_make\_checksum}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{\DUrole{n}{krb5\_cksumtype}}}}\DUrole{w}{  }\DUrole{n}{cksumtype}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{\DUrole{n}{krb5\_keyusage}}}}\DUrole{w}{  }\DUrole{n}{usage}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{input}, {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{\DUrole{n}{krb5\_checksum}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cksum}}{}%
13485\pysigstopmultiline
13486\end{fulllineitems}
13487
13488\begin{quote}\begin{description}
13489\item[{param}] \leavevmode
13490\sphinxAtStartPar
13491\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13492
13493\sphinxAtStartPar
13494\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} \sphinxhyphen{} Checksum type (0 for mandatory type)
13495
13496\sphinxAtStartPar
13497\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Encryption key for a keyed checksum
13498
13499\sphinxAtStartPar
13500\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} \sphinxhyphen{} Key usage (see KRB5\_KEYUSAGE macros)
13501
13502\sphinxAtStartPar
13503\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} \sphinxhyphen{} Input data
13504
13505\sphinxAtStartPar
13506\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cksum} \sphinxhyphen{} Generated checksum
13507
13508\end{description}\end{quote}
13509\begin{quote}\begin{description}
13510\item[{retval}] \leavevmode\begin{itemize}
13511\item {}
13512\sphinxAtStartPar
135130   Success; otherwise \sphinxhyphen{} Kerberos error codes
13514
13515\end{itemize}
13516
13517\end{description}\end{quote}
13518
13519\sphinxAtStartPar
13520This 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\sphinxhyphen{}null, the checksum type will be the mandatory\sphinxhyphen{}to\sphinxhyphen{}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 krb5\_free\_checksum\_contents() when it is no longer needed.
13521
13522
13523\sphinxstrong{See also:}
13524\nopagebreak
13525
13526
13527\sphinxAtStartPar
13528krb5\_c\_verify\_checksum()
13529
13530
13531
13532\begin{sphinxadmonition}{note}{Note:}
13533\sphinxAtStartPar
13534This function is similar to krb5\_k\_make\_checksum(), but operates on keyblock \sphinxstyleemphasis{key} .
13535\end{sphinxadmonition}
13536
13537
13538\subsubsection{krb5\_c\_make\_checksum\_iov \sphinxhyphen{}  Fill in a checksum element in IOV array (operates on keyblock)}
13539\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)@\spxentry{krb5\_c\_make\_checksum\_iov}\spxextra{C function}}
13540
13541\begin{fulllineitems}
13542\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_make_checksum_iov:c.krb5_c_make_checksum_iov}}%
13543\pysigstartmultiline
13544\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_make\_checksum\_iov}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{\DUrole{n}{krb5\_cksumtype}}}}\DUrole{w}{  }\DUrole{n}{cksumtype}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{\DUrole{n}{krb5\_keyusage}}}}\DUrole{w}{  }\DUrole{n}{usage}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{\DUrole{n}{krb5\_crypto\_iov}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{num\_data}}{}%
13545\pysigstopmultiline
13546\end{fulllineitems}
13547
13548\begin{quote}\begin{description}
13549\item[{param}] \leavevmode
13550\sphinxAtStartPar
13551\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13552
13553\sphinxAtStartPar
13554\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} \sphinxhyphen{} Checksum type (0 for mandatory type)
13555
13556\sphinxAtStartPar
13557\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Encryption key for a keyed checksum
13558
13559\sphinxAtStartPar
13560\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} \sphinxhyphen{} Key usage (see KRB5\_KEYUSAGE macros)
13561
13562\sphinxAtStartPar
13563\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} \sphinxhyphen{} IOV array
13564
13565\sphinxAtStartPar
13566\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} \sphinxhyphen{} Size of \sphinxstyleemphasis{data}
13567
13568\end{description}\end{quote}
13569\begin{quote}\begin{description}
13570\item[{retval}] \leavevmode\begin{itemize}
13571\item {}
13572\sphinxAtStartPar
135730   Success; otherwise \sphinxhyphen{} Kerberos error codes
13574
13575\end{itemize}
13576
13577\end{description}\end{quote}
13578
13579\sphinxAtStartPar
13580Create a checksum in the \#KRB5\_CRYPTO\_TYPE\_CHECKSUM element over \#KRB5\_CRYPTO\_TYPE\_DATA and \#KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY chunks in \sphinxstyleemphasis{data} . Only the \#KRB5\_CRYPTO\_TYPE\_CHECKSUM region is modified.
13581
13582
13583\sphinxstrong{See also:}
13584\nopagebreak
13585
13586
13587\sphinxAtStartPar
13588krb5\_c\_verify\_checksum\_iov()
13589
13590
13591
13592\begin{sphinxadmonition}{note}{Note:}
13593\sphinxAtStartPar
13594This function is similar to krb5\_k\_make\_checksum\_iov(), but operates on keyblock \sphinxstyleemphasis{key} .
13595\end{sphinxadmonition}
13596
13597
13598\subsubsection{krb5\_c\_make\_random\_key \sphinxhyphen{}  Generate an enctype\sphinxhyphen{}specific random encryption key.}
13599\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)@\spxentry{krb5\_c\_make\_random\_key}\spxextra{C function}}
13600
13601\begin{fulllineitems}
13602\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_make_random_key:c.krb5_c_make_random_key}}%
13603\pysigstartmultiline
13604\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_make\_random\_key}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{k5\_random\_key}}{}%
13605\pysigstopmultiline
13606\end{fulllineitems}
13607
13608\begin{quote}\begin{description}
13609\item[{param}] \leavevmode
13610\sphinxAtStartPar
13611\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13612
13613\sphinxAtStartPar
13614\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} \sphinxhyphen{} Encryption type of the generated key
13615
13616\sphinxAtStartPar
13617\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{k5\_random\_key} \sphinxhyphen{} An allocated and initialized keyblock
13618
13619\end{description}\end{quote}
13620\begin{quote}\begin{description}
13621\item[{retval}] \leavevmode\begin{itemize}
13622\item {}
13623\sphinxAtStartPar
136240   Success; otherwise \sphinxhyphen{} Kerberos error codes
13625
13626\end{itemize}
13627
13628\end{description}\end{quote}
13629
13630\sphinxAtStartPar
13631Use krb5\_free\_keyblock\_contents() to free \sphinxstyleemphasis{k5\_random\_key} when no longer needed.
13632
13633
13634\subsubsection{krb5\_c\_padding\_length \sphinxhyphen{}  Return a number of padding octets.}
13635\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)@\spxentry{krb5\_c\_padding\_length}\spxextra{C function}}
13636
13637\begin{fulllineitems}
13638\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_padding_length:c.krb5_c_padding_length}}%
13639\pysigstartmultiline
13640\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_padding\_length}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{enctype}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{data\_length}, \DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{size}}{}%
13641\pysigstopmultiline
13642\end{fulllineitems}
13643
13644\begin{quote}\begin{description}
13645\item[{param}] \leavevmode
13646\sphinxAtStartPar
13647\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13648
13649\sphinxAtStartPar
13650\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} \sphinxhyphen{} Encryption type
13651
13652\sphinxAtStartPar
13653\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data\_length} \sphinxhyphen{} Length of the plaintext to pad
13654
13655\sphinxAtStartPar
13656\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{size} \sphinxhyphen{} Number of padding octets
13657
13658\end{description}\end{quote}
13659\begin{quote}\begin{description}
13660\item[{retval}] \leavevmode\begin{itemize}
13661\item {}
13662\sphinxAtStartPar
136630   Success; otherwise \sphinxhyphen{} KRB5\_BAD\_ENCTYPE
13664
13665\end{itemize}
13666
13667\end{description}\end{quote}
13668
13669\sphinxAtStartPar
13670This function returns the number of the padding octets required to pad \sphinxstyleemphasis{data\_length} octets of plaintext.
13671
13672
13673\subsubsection{krb5\_c\_prf \sphinxhyphen{}  Generate enctype\sphinxhyphen{}specific pseudo\sphinxhyphen{}random bytes.}
13674\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)@\spxentry{krb5\_c\_prf}\spxextra{C function}}
13675
13676\begin{fulllineitems}
13677\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_prf:c.krb5_c_prf}}%
13678\pysigstartmultiline
13679\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_prf}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{keyblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{input}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{output}}{}%
13680\pysigstopmultiline
13681\end{fulllineitems}
13682
13683\begin{quote}\begin{description}
13684\item[{param}] \leavevmode
13685\sphinxAtStartPar
13686\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13687
13688\sphinxAtStartPar
13689\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} \sphinxhyphen{} Key
13690
13691\sphinxAtStartPar
13692\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} \sphinxhyphen{} Input data
13693
13694\sphinxAtStartPar
13695\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} \sphinxhyphen{} Output data
13696
13697\end{description}\end{quote}
13698\begin{quote}\begin{description}
13699\item[{retval}] \leavevmode\begin{itemize}
13700\item {}
13701\sphinxAtStartPar
137020   Success; otherwise \sphinxhyphen{} Kerberos error codes
13703
13704\end{itemize}
13705
13706\end{description}\end{quote}
13707
13708\sphinxAtStartPar
13709This function selects a pseudo\sphinxhyphen{}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 krb5\_c\_prf\_length() to determine the required length.
13710
13711
13712\subsubsection{krb5\_c\_prfplus \sphinxhyphen{}  Generate pseudo\sphinxhyphen{}random bytes using RFC 6113 PRF+.}
13713\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)@\spxentry{krb5\_c\_prfplus}\spxextra{C function}}
13714
13715\begin{fulllineitems}
13716\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_prfplus:c.krb5_c_prfplus}}%
13717\pysigstartmultiline
13718\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_prfplus}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{k}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{input}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{output}}{}%
13719\pysigstopmultiline
13720\end{fulllineitems}
13721
13722\begin{quote}\begin{description}
13723\item[{param}] \leavevmode
13724\sphinxAtStartPar
13725\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13726
13727\sphinxAtStartPar
13728\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k} \sphinxhyphen{} KDC contribution key
13729
13730\sphinxAtStartPar
13731\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} \sphinxhyphen{} Input data
13732
13733\sphinxAtStartPar
13734\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} \sphinxhyphen{} Pseudo\sphinxhyphen{}random output buffer
13735
13736\end{description}\end{quote}
13737\begin{quote}\begin{description}
13738\item[{return}] \leavevmode\begin{itemize}
13739\item {}
13740\sphinxAtStartPar
137410 on success, E2BIG if output\sphinxhyphen{}\textgreater{}length is too large for PRF+ to generate, ENOMEM on allocation failure, or an error code from krb5\_c\_prf()
13742
13743\end{itemize}
13744
13745\end{description}\end{quote}
13746
13747\sphinxAtStartPar
13748This 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\sphinxhyphen{}random output will match the length of \sphinxstyleemphasis{output} .
13749
13750\begin{sphinxadmonition}{note}{Note:}
13751\sphinxAtStartPar
13752RFC 4402 defines a different PRF+ operation. This function does not implement that operation.
13753\end{sphinxadmonition}
13754
13755
13756\subsubsection{krb5\_c\_prf\_length \sphinxhyphen{}  Get the output length of pseudo\sphinxhyphen{}random functions for an encryption type.}
13757\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}}\label{\detokenize{appdev/refs/api/krb5_c_prf_length::doc}}\index{krb5\_c\_prf\_length (C function)@\spxentry{krb5\_c\_prf\_length}\spxextra{C function}}
13758
13759\begin{fulllineitems}
13760\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_prf_length:c.krb5_c_prf_length}}%
13761\pysigstartmultiline
13762\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_prf\_length}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{enctype}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{len}}{}%
13763\pysigstopmultiline
13764\end{fulllineitems}
13765
13766\begin{quote}\begin{description}
13767\item[{param}] \leavevmode
13768\sphinxAtStartPar
13769\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13770
13771\sphinxAtStartPar
13772\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} \sphinxhyphen{} Encryption type
13773
13774\sphinxAtStartPar
13775\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{len} \sphinxhyphen{} Length of PRF output
13776
13777\end{description}\end{quote}
13778\begin{quote}\begin{description}
13779\item[{retval}] \leavevmode\begin{itemize}
13780\item {}
13781\sphinxAtStartPar
137820   Success; otherwise \sphinxhyphen{} Kerberos error codes
13783
13784\end{itemize}
13785
13786\end{description}\end{quote}
13787
13788
13789\subsubsection{krb5\_c\_random\_add\_entropy}
13790\label{\detokenize{appdev/refs/api/krb5_c_random_add_entropy:krb5-c-random-add-entropy}}\label{\detokenize{appdev/refs/api/krb5_c_random_add_entropy::doc}}\index{krb5\_c\_random\_add\_entropy (C function)@\spxentry{krb5\_c\_random\_add\_entropy}\spxextra{C function}}
13791
13792\begin{fulllineitems}
13793\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_random_add_entropy:c.krb5_c_random_add_entropy}}%
13794\pysigstartmultiline
13795\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_random\_add\_entropy}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{randsource}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}}{}%
13796\pysigstopmultiline
13797\end{fulllineitems}
13798
13799\begin{quote}\begin{description}
13800\item[{param}] \leavevmode
13801\sphinxAtStartPar
13802\sphinxstylestrong{context}
13803
13804\sphinxAtStartPar
13805\sphinxstylestrong{randsource}
13806
13807\sphinxAtStartPar
13808\sphinxstylestrong{data}
13809
13810\end{description}\end{quote}
13811
13812\sphinxAtStartPar
13813DEPRECATED This call is no longer necessary.
13814
13815
13816\subsubsection{krb5\_c\_random\_make\_octets \sphinxhyphen{}  Generate pseudo\sphinxhyphen{}random bytes.}
13817\label{\detokenize{appdev/refs/api/krb5_c_random_make_octets:krb5-c-random-make-octets-generate-pseudo-random-bytes}}\label{\detokenize{appdev/refs/api/krb5_c_random_make_octets::doc}}\index{krb5\_c\_random\_make\_octets (C function)@\spxentry{krb5\_c\_random\_make\_octets}\spxextra{C function}}
13818
13819\begin{fulllineitems}
13820\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_random_make_octets:c.krb5_c_random_make_octets}}%
13821\pysigstartmultiline
13822\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_random\_make\_octets}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}}{}%
13823\pysigstopmultiline
13824\end{fulllineitems}
13825
13826\begin{quote}\begin{description}
13827\item[{param}] \leavevmode
13828\sphinxAtStartPar
13829\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13830
13831\sphinxAtStartPar
13832\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} \sphinxhyphen{} Random data
13833
13834\end{description}\end{quote}
13835\begin{quote}\begin{description}
13836\item[{retval}] \leavevmode\begin{itemize}
13837\item {}
13838\sphinxAtStartPar
138390   Success; otherwise \sphinxhyphen{} Kerberos error codes
13840
13841\end{itemize}
13842
13843\end{description}\end{quote}
13844
13845\sphinxAtStartPar
13846Fills 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.
13847
13848
13849\subsubsection{krb5\_c\_random\_os\_entropy}
13850\label{\detokenize{appdev/refs/api/krb5_c_random_os_entropy:krb5-c-random-os-entropy}}\label{\detokenize{appdev/refs/api/krb5_c_random_os_entropy::doc}}\index{krb5\_c\_random\_os\_entropy (C function)@\spxentry{krb5\_c\_random\_os\_entropy}\spxextra{C function}}
13851
13852\begin{fulllineitems}
13853\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_random_os_entropy:c.krb5_c_random_os_entropy}}%
13854\pysigstartmultiline
13855\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_random\_os\_entropy}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{strong}, \DUrole{kt}{int}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{success}}{}%
13856\pysigstopmultiline
13857\end{fulllineitems}
13858
13859\begin{quote}\begin{description}
13860\item[{param}] \leavevmode
13861\sphinxAtStartPar
13862\sphinxstylestrong{context}
13863
13864\sphinxAtStartPar
13865\sphinxstylestrong{strong}
13866
13867\sphinxAtStartPar
13868\sphinxstylestrong{success}
13869
13870\end{description}\end{quote}
13871
13872\sphinxAtStartPar
13873DEPRECATED This call is no longer necessary.
13874
13875
13876\subsubsection{krb5\_c\_random\_to\_key \sphinxhyphen{}  Generate an enctype\sphinxhyphen{}specific key from random data.}
13877\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)@\spxentry{krb5\_c\_random\_to\_key}\spxextra{C function}}
13878
13879\begin{fulllineitems}
13880\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_random_to_key:c.krb5_c_random_to_key}}%
13881\pysigstartmultiline
13882\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_random\_to\_key}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{random\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{k5\_random\_key}}{}%
13883\pysigstopmultiline
13884\end{fulllineitems}
13885
13886\begin{quote}\begin{description}
13887\item[{param}] \leavevmode
13888\sphinxAtStartPar
13889\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13890
13891\sphinxAtStartPar
13892\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} \sphinxhyphen{} Encryption type
13893
13894\sphinxAtStartPar
13895\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{random\_data} \sphinxhyphen{} Random input data
13896
13897\sphinxAtStartPar
13898\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{k5\_random\_key} \sphinxhyphen{} Resulting key
13899
13900\end{description}\end{quote}
13901\begin{quote}\begin{description}
13902\item[{retval}] \leavevmode\begin{itemize}
13903\item {}
13904\sphinxAtStartPar
139050   Success; otherwise \sphinxhyphen{} Kerberos error codes
13906
13907\end{itemize}
13908
13909\end{description}\end{quote}
13910
13911\sphinxAtStartPar
13912This function takes random input data \sphinxstyleemphasis{random\_data} and produces a valid key \sphinxstyleemphasis{k5\_random\_key} for a given \sphinxstyleemphasis{enctype} .
13913
13914
13915\sphinxstrong{See also:}
13916\nopagebreak
13917
13918
13919\sphinxAtStartPar
13920krb5\_c\_keylengths()
13921
13922
13923
13924\begin{sphinxadmonition}{note}{Note:}
13925\sphinxAtStartPar
13926It is assumed that \sphinxstyleemphasis{k5\_random\_key} has already been initialized and \sphinxstyleemphasis{k5\_random\_key\sphinxhyphen{}\textgreater{}contents} has been allocated with the correct length.
13927\end{sphinxadmonition}
13928
13929
13930\subsubsection{krb5\_c\_string\_to\_key \sphinxhyphen{}  Convert a string (such a password) to a key.}
13931\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)@\spxentry{krb5\_c\_string\_to\_key}\spxextra{C function}}
13932
13933\begin{fulllineitems}
13934\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_string_to_key:c.krb5_c_string_to_key}}%
13935\pysigstartmultiline
13936\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_string\_to\_key}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{enctype}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{string}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{salt}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}}{}%
13937\pysigstopmultiline
13938\end{fulllineitems}
13939
13940\begin{quote}\begin{description}
13941\item[{param}] \leavevmode
13942\sphinxAtStartPar
13943\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13944
13945\sphinxAtStartPar
13946\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} \sphinxhyphen{} Encryption type
13947
13948\sphinxAtStartPar
13949\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} \sphinxhyphen{} String to be converted
13950
13951\sphinxAtStartPar
13952\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{salt} \sphinxhyphen{} Salt value
13953
13954\sphinxAtStartPar
13955\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} \sphinxhyphen{} Generated key
13956
13957\end{description}\end{quote}
13958\begin{quote}\begin{description}
13959\item[{retval}] \leavevmode\begin{itemize}
13960\item {}
13961\sphinxAtStartPar
139620   Success; otherwise \sphinxhyphen{} Kerberos error codes
13963
13964\end{itemize}
13965
13966\end{description}\end{quote}
13967
13968\sphinxAtStartPar
13969This 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 krb5\_free\_keyblock\_contents() when it is no longer needed.
13970
13971
13972\subsubsection{krb5\_c\_string\_to\_key\_with\_params \sphinxhyphen{}  Convert a string (such as a password) to a key with additional parameters.}
13973\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}}\label{\detokenize{appdev/refs/api/krb5_c_string_to_key_with_params::doc}}\index{krb5\_c\_string\_to\_key\_with\_params (C function)@\spxentry{krb5\_c\_string\_to\_key\_with\_params}\spxextra{C function}}
13974
13975\begin{fulllineitems}
13976\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_string_to_key_with_params:c.krb5_c_string_to_key_with_params}}%
13977\pysigstartmultiline
13978\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_string\_to\_key\_with\_params}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{enctype}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{string}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{salt}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{params}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}}{}%
13979\pysigstopmultiline
13980\end{fulllineitems}
13981
13982\begin{quote}\begin{description}
13983\item[{param}] \leavevmode
13984\sphinxAtStartPar
13985\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
13986
13987\sphinxAtStartPar
13988\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} \sphinxhyphen{} Encryption type
13989
13990\sphinxAtStartPar
13991\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} \sphinxhyphen{} String to be converted
13992
13993\sphinxAtStartPar
13994\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{salt} \sphinxhyphen{} Salt value
13995
13996\sphinxAtStartPar
13997\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{params} \sphinxhyphen{} Parameters
13998
13999\sphinxAtStartPar
14000\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} \sphinxhyphen{} Generated key
14001
14002\end{description}\end{quote}
14003\begin{quote}\begin{description}
14004\item[{retval}] \leavevmode\begin{itemize}
14005\item {}
14006\sphinxAtStartPar
140070   Success; otherwise \sphinxhyphen{} Kerberos error codes
14008
14009\end{itemize}
14010
14011\end{description}\end{quote}
14012
14013\sphinxAtStartPar
14014This function is similar to krb5\_c\_string\_to\_key(), but also takes parameters which may affect the algorithm in an enctype\sphinxhyphen{}dependent way. The newly created \sphinxstyleemphasis{key} must be released by calling krb5\_free\_keyblock\_contents() when it is no longer needed.
14015
14016
14017\subsubsection{krb5\_c\_valid\_cksumtype \sphinxhyphen{}  Verify that specified checksum type is a valid Kerberos checksum type.}
14018\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)@\spxentry{krb5\_c\_valid\_cksumtype}\spxextra{C function}}
14019
14020\begin{fulllineitems}
14021\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_valid_cksumtype:c.krb5_c_valid_cksumtype}}%
14022\pysigstartmultiline
14023\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_valid\_cksumtype}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{\DUrole{n}{krb5\_cksumtype}}}}\DUrole{w}{  }\DUrole{n}{ctype}}{}%
14024\pysigstopmultiline
14025\end{fulllineitems}
14026
14027\begin{quote}\begin{description}
14028\item[{param}] \leavevmode
14029\sphinxAtStartPar
14030\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctype} \sphinxhyphen{} Checksum type
14031
14032\end{description}\end{quote}
14033\begin{quote}\begin{description}
14034\item[{return}] \leavevmode\begin{itemize}
14035\item {}
14036\sphinxAtStartPar
14037TRUE if ctype is valid, FALSE if not
14038
14039\end{itemize}
14040
14041\end{description}\end{quote}
14042
14043
14044\subsubsection{krb5\_c\_valid\_enctype \sphinxhyphen{}  Verify that a specified encryption type is a valid Kerberos encryption type.}
14045\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)@\spxentry{krb5\_c\_valid\_enctype}\spxextra{C function}}
14046
14047\begin{fulllineitems}
14048\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_valid_enctype:c.krb5_c_valid_enctype}}%
14049\pysigstartmultiline
14050\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_valid\_enctype}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{ktype}}{}%
14051\pysigstopmultiline
14052\end{fulllineitems}
14053
14054\begin{quote}\begin{description}
14055\item[{param}] \leavevmode
14056\sphinxAtStartPar
14057\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ktype} \sphinxhyphen{} Encryption type
14058
14059\end{description}\end{quote}
14060\begin{quote}\begin{description}
14061\item[{return}] \leavevmode\begin{itemize}
14062\item {}
14063\sphinxAtStartPar
14064TRUE if ktype is valid, FALSE if not
14065
14066\end{itemize}
14067
14068\end{description}\end{quote}
14069
14070
14071\subsubsection{krb5\_c\_verify\_checksum \sphinxhyphen{}  Verify a checksum (operates on keyblock).}
14072\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)@\spxentry{krb5\_c\_verify\_checksum}\spxextra{C function}}
14073
14074\begin{fulllineitems}
14075\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_verify_checksum:c.krb5_c_verify_checksum}}%
14076\pysigstartmultiline
14077\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_verify\_checksum}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{\DUrole{n}{krb5\_keyusage}}}}\DUrole{w}{  }\DUrole{n}{usage}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{\DUrole{n}{krb5\_checksum}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cksum}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{valid}}{}%
14078\pysigstopmultiline
14079\end{fulllineitems}
14080
14081\begin{quote}\begin{description}
14082\item[{param}] \leavevmode
14083\sphinxAtStartPar
14084\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
14085
14086\sphinxAtStartPar
14087\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Encryption key for a keyed checksum
14088
14089\sphinxAtStartPar
14090\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} \sphinxhyphen{} \sphinxstyleemphasis{key} usage
14091
14092\sphinxAtStartPar
14093\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} \sphinxhyphen{} Data to be used to compute a new checksum using \sphinxstyleemphasis{key} to compare \sphinxstyleemphasis{cksum} against
14094
14095\sphinxAtStartPar
14096\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksum} \sphinxhyphen{} Checksum to be verified
14097
14098\sphinxAtStartPar
14099\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{valid} \sphinxhyphen{} Non\sphinxhyphen{}zero for success, zero for failure
14100
14101\end{description}\end{quote}
14102\begin{quote}\begin{description}
14103\item[{retval}] \leavevmode\begin{itemize}
14104\item {}
14105\sphinxAtStartPar
141060   Success; otherwise \sphinxhyphen{} Kerberos error codes
14107
14108\end{itemize}
14109
14110\end{description}\end{quote}
14111
14112\sphinxAtStartPar
14113This 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.
14114
14115\begin{sphinxadmonition}{note}{Note:}
14116\sphinxAtStartPar
14117This function is similar to krb5\_k\_verify\_checksum(), but operates on keyblock \sphinxstyleemphasis{key} .
14118\end{sphinxadmonition}
14119
14120
14121\subsubsection{krb5\_c\_verify\_checksum\_iov \sphinxhyphen{}  Validate a checksum element in IOV array (operates on keyblock).}
14122\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}}\label{\detokenize{appdev/refs/api/krb5_c_verify_checksum_iov::doc}}\index{krb5\_c\_verify\_checksum\_iov (C function)@\spxentry{krb5\_c\_verify\_checksum\_iov}\spxextra{C function}}
14123
14124\begin{fulllineitems}
14125\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_verify_checksum_iov:c.krb5_c_verify_checksum_iov}}%
14126\pysigstartmultiline
14127\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_verify\_checksum\_iov}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{\DUrole{n}{krb5\_cksumtype}}}}\DUrole{w}{  }\DUrole{n}{cksumtype}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{\DUrole{n}{krb5\_keyusage}}}}\DUrole{w}{  }\DUrole{n}{usage}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{\DUrole{n}{krb5\_crypto\_iov}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{num\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{valid}}{}%
14128\pysigstopmultiline
14129\end{fulllineitems}
14130
14131\begin{quote}\begin{description}
14132\item[{param}] \leavevmode
14133\sphinxAtStartPar
14134\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
14135
14136\sphinxAtStartPar
14137\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} \sphinxhyphen{} Checksum type (0 for mandatory type)
14138
14139\sphinxAtStartPar
14140\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Encryption key for a keyed checksum
14141
14142\sphinxAtStartPar
14143\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} \sphinxhyphen{} Key usage (see KRB5\_KEYUSAGE macros)
14144
14145\sphinxAtStartPar
14146\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} \sphinxhyphen{} IOV array
14147
14148\sphinxAtStartPar
14149\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} \sphinxhyphen{} Size of \sphinxstyleemphasis{data}
14150
14151\sphinxAtStartPar
14152\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{valid} \sphinxhyphen{} Non\sphinxhyphen{}zero for success, zero for failure
14153
14154\end{description}\end{quote}
14155\begin{quote}\begin{description}
14156\item[{retval}] \leavevmode\begin{itemize}
14157\item {}
14158\sphinxAtStartPar
141590   Success; otherwise \sphinxhyphen{} Kerberos error codes
14160
14161\end{itemize}
14162
14163\end{description}\end{quote}
14164
14165\sphinxAtStartPar
14166Confirm that the checksum in the \#KRB5\_CRYPTO\_TYPE\_CHECKSUM element is a valid checksum of the \#KRB5\_CRYPTO\_TYPE\_DATA and \#KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY regions in the iov.
14167
14168
14169\sphinxstrong{See also:}
14170\nopagebreak
14171
14172
14173\sphinxAtStartPar
14174krb5\_c\_make\_checksum\_iov()
14175
14176
14177
14178\begin{sphinxadmonition}{note}{Note:}
14179\sphinxAtStartPar
14180This function is similar to krb5\_k\_verify\_checksum\_iov(), but operates on keyblock \sphinxstyleemphasis{key} .
14181\end{sphinxadmonition}
14182
14183
14184\subsubsection{krb5\_cksumtype\_to\_string \sphinxhyphen{}  Convert a checksum type to a string.}
14185\label{\detokenize{appdev/refs/api/krb5_cksumtype_to_string:krb5-cksumtype-to-string-convert-a-checksum-type-to-a-string}}\label{\detokenize{appdev/refs/api/krb5_cksumtype_to_string::doc}}\index{krb5\_cksumtype\_to\_string (C function)@\spxentry{krb5\_cksumtype\_to\_string}\spxextra{C function}}
14186
14187\begin{fulllineitems}
14188\phantomsection\label{\detokenize{appdev/refs/api/krb5_cksumtype_to_string:c.krb5_cksumtype_to_string}}%
14189\pysigstartmultiline
14190\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cksumtype\_to\_string}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{\DUrole{n}{krb5\_cksumtype}}}}\DUrole{w}{  }\DUrole{n}{cksumtype}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{buffer}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{buflen}}{}%
14191\pysigstopmultiline
14192\end{fulllineitems}
14193
14194\begin{quote}\begin{description}
14195\item[{param}] \leavevmode
14196\sphinxAtStartPar
14197\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} \sphinxhyphen{} Checksum type
14198
14199\sphinxAtStartPar
14200\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} \sphinxhyphen{} Buffer to hold converted checksum type
14201
14202\sphinxAtStartPar
14203\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} \sphinxhyphen{} Storage available in \sphinxstyleemphasis{buffer}
14204
14205\end{description}\end{quote}
14206\begin{quote}\begin{description}
14207\item[{retval}] \leavevmode\begin{itemize}
14208\item {}
14209\sphinxAtStartPar
142100   Success; otherwise \sphinxhyphen{} Kerberos error codes
14211
14212\end{itemize}
14213
14214\end{description}\end{quote}
14215
14216
14217\subsubsection{krb5\_decode\_authdata\_container \sphinxhyphen{}  Unwrap authorization data.}
14218\label{\detokenize{appdev/refs/api/krb5_decode_authdata_container:krb5-decode-authdata-container-unwrap-authorization-data}}\label{\detokenize{appdev/refs/api/krb5_decode_authdata_container::doc}}\index{krb5\_decode\_authdata\_container (C function)@\spxentry{krb5\_decode\_authdata\_container}\spxextra{C function}}
14219
14220\begin{fulllineitems}
14221\phantomsection\label{\detokenize{appdev/refs/api/krb5_decode_authdata_container:c.krb5_decode_authdata_container}}%
14222\pysigstartmultiline
14223\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_decode\_authdata\_container}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdatatype:c.krb5_authdatatype}]{\sphinxcrossref{\DUrole{n}{krb5\_authdatatype}}}}\DUrole{w}{  }\DUrole{n}{type}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{container}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{authdata}}{}%
14224\pysigstopmultiline
14225\end{fulllineitems}
14226
14227\begin{quote}\begin{description}
14228\item[{param}] \leavevmode
14229\sphinxAtStartPar
14230\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
14231
14232\sphinxAtStartPar
14233\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} \sphinxhyphen{} Container type (see KRB5\_AUTHDATA macros)
14234
14235\sphinxAtStartPar
14236\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{container} \sphinxhyphen{} Authorization data to be decoded
14237
14238\sphinxAtStartPar
14239\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{authdata} \sphinxhyphen{} List of decoded authorization data
14240
14241\end{description}\end{quote}
14242\begin{quote}\begin{description}
14243\item[{retval}] \leavevmode\begin{itemize}
14244\item {}
14245\sphinxAtStartPar
142460   Success; otherwise \sphinxhyphen{} Kerberos error codes
14247
14248\end{itemize}
14249
14250\end{description}\end{quote}
14251
14252
14253\sphinxstrong{See also:}
14254\nopagebreak
14255
14256
14257\sphinxAtStartPar
14258krb5\_encode\_authdata\_container()
14259
14260
14261
14262
14263\subsubsection{krb5\_decode\_ticket \sphinxhyphen{}  Decode an ASN.1\sphinxhyphen{}formatted ticket.}
14264\label{\detokenize{appdev/refs/api/krb5_decode_ticket:krb5-decode-ticket-decode-an-asn-1-formatted-ticket}}\label{\detokenize{appdev/refs/api/krb5_decode_ticket::doc}}\index{krb5\_decode\_ticket (C function)@\spxentry{krb5\_decode\_ticket}\spxextra{C function}}
14265
14266\begin{fulllineitems}
14267\phantomsection\label{\detokenize{appdev/refs/api/krb5_decode_ticket:c.krb5_decode_ticket}}%
14268\pysigstartmultiline
14269\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_decode\_ticket}}}}{\DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{code}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{rep}}{}%
14270\pysigstopmultiline
14271\end{fulllineitems}
14272
14273\begin{quote}\begin{description}
14274\item[{param}] \leavevmode
14275\sphinxAtStartPar
14276\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} \sphinxhyphen{} ASN.1\sphinxhyphen{}formatted ticket
14277
14278\sphinxAtStartPar
14279\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rep} \sphinxhyphen{} Decoded ticket information
14280
14281\end{description}\end{quote}
14282\begin{quote}\begin{description}
14283\item[{retval}] \leavevmode\begin{itemize}
14284\item {}
14285\sphinxAtStartPar
142860   Success; otherwise \sphinxhyphen{} Kerberos error codes
14287
14288\end{itemize}
14289
14290\end{description}\end{quote}
14291
14292
14293\subsubsection{krb5\_deltat\_to\_string \sphinxhyphen{}  Convert a relative time value to a string.}
14294\label{\detokenize{appdev/refs/api/krb5_deltat_to_string:krb5-deltat-to-string-convert-a-relative-time-value-to-a-string}}\label{\detokenize{appdev/refs/api/krb5_deltat_to_string::doc}}\index{krb5\_deltat\_to\_string (C function)@\spxentry{krb5\_deltat\_to\_string}\spxextra{C function}}
14295
14296\begin{fulllineitems}
14297\phantomsection\label{\detokenize{appdev/refs/api/krb5_deltat_to_string:c.krb5_deltat_to_string}}%
14298\pysigstartmultiline
14299\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_deltat\_to\_string}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{\DUrole{n}{krb5\_deltat}}}}\DUrole{w}{  }\DUrole{n}{deltat}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{buffer}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{buflen}}{}%
14300\pysigstopmultiline
14301\end{fulllineitems}
14302
14303\begin{quote}\begin{description}
14304\item[{param}] \leavevmode
14305\sphinxAtStartPar
14306\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{deltat} \sphinxhyphen{} Relative time value to convert
14307
14308\sphinxAtStartPar
14309\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} \sphinxhyphen{} Buffer to hold time string
14310
14311\sphinxAtStartPar
14312\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} \sphinxhyphen{} Storage available in \sphinxstyleemphasis{buffer}
14313
14314\end{description}\end{quote}
14315\begin{quote}\begin{description}
14316\item[{retval}] \leavevmode\begin{itemize}
14317\item {}
14318\sphinxAtStartPar
143190   Success; otherwise \sphinxhyphen{} Kerberos error codes
14320
14321\end{itemize}
14322
14323\end{description}\end{quote}
14324
14325
14326\subsubsection{krb5\_encode\_authdata\_container \sphinxhyphen{}  Wrap authorization data in a container.}
14327\label{\detokenize{appdev/refs/api/krb5_encode_authdata_container:krb5-encode-authdata-container-wrap-authorization-data-in-a-container}}\label{\detokenize{appdev/refs/api/krb5_encode_authdata_container::doc}}\index{krb5\_encode\_authdata\_container (C function)@\spxentry{krb5\_encode\_authdata\_container}\spxextra{C function}}
14328
14329\begin{fulllineitems}
14330\phantomsection\label{\detokenize{appdev/refs/api/krb5_encode_authdata_container:c.krb5_encode_authdata_container}}%
14331\pysigstartmultiline
14332\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_encode\_authdata\_container}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdatatype:c.krb5_authdatatype}]{\sphinxcrossref{\DUrole{n}{krb5\_authdatatype}}}}\DUrole{w}{  }\DUrole{n}{type}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{k}{const}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{authdata}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{container}}{}%
14333\pysigstopmultiline
14334\end{fulllineitems}
14335
14336\begin{quote}\begin{description}
14337\item[{param}] \leavevmode
14338\sphinxAtStartPar
14339\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
14340
14341\sphinxAtStartPar
14342\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} \sphinxhyphen{} Container type (see KRB5\_AUTHDATA macros)
14343
14344\sphinxAtStartPar
14345\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authdata} \sphinxhyphen{} List of authorization data to be encoded
14346
14347\sphinxAtStartPar
14348\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{container} \sphinxhyphen{} List of encoded authorization data
14349
14350\end{description}\end{quote}
14351\begin{quote}\begin{description}
14352\item[{retval}] \leavevmode\begin{itemize}
14353\item {}
14354\sphinxAtStartPar
143550   Success; otherwise \sphinxhyphen{} Kerberos error codes
14356
14357\end{itemize}
14358
14359\end{description}\end{quote}
14360
14361\sphinxAtStartPar
14362The result is returned in \sphinxstyleemphasis{container} as a single\sphinxhyphen{}element list.
14363
14364
14365\sphinxstrong{See also:}
14366\nopagebreak
14367
14368
14369\sphinxAtStartPar
14370krb5\_decode\_authdata\_container()
14371
14372
14373
14374
14375\subsubsection{krb5\_enctype\_to\_name \sphinxhyphen{}  Convert an encryption type to a name or alias.}
14376\label{\detokenize{appdev/refs/api/krb5_enctype_to_name:krb5-enctype-to-name-convert-an-encryption-type-to-a-name-or-alias}}\label{\detokenize{appdev/refs/api/krb5_enctype_to_name::doc}}\index{krb5\_enctype\_to\_name (C function)@\spxentry{krb5\_enctype\_to\_name}\spxextra{C function}}
14377
14378\begin{fulllineitems}
14379\phantomsection\label{\detokenize{appdev/refs/api/krb5_enctype_to_name:c.krb5_enctype_to_name}}%
14380\pysigstartmultiline
14381\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_enctype\_to\_name}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\DUrole{n}{shortest}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{buffer}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{buflen}}{}%
14382\pysigstopmultiline
14383\end{fulllineitems}
14384
14385\begin{quote}\begin{description}
14386\item[{param}] \leavevmode
14387\sphinxAtStartPar
14388\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} \sphinxhyphen{} Encryption type
14389
14390\sphinxAtStartPar
14391\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{shortest} \sphinxhyphen{} Flag
14392
14393\sphinxAtStartPar
14394\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} \sphinxhyphen{} Buffer to hold encryption type string
14395
14396\sphinxAtStartPar
14397\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} \sphinxhyphen{} Storage available in \sphinxstyleemphasis{buffer}
14398
14399\end{description}\end{quote}
14400\begin{quote}\begin{description}
14401\item[{retval}] \leavevmode\begin{itemize}
14402\item {}
14403\sphinxAtStartPar
144040   Success; otherwise \sphinxhyphen{} Kerberos error codes
14405
14406\end{itemize}
14407
14408\end{description}\end{quote}
14409
14410\sphinxAtStartPar
14411If \sphinxstyleemphasis{shortest} is FALSE, this function returns the enctype’s canonical name (like”aes128\sphinxhyphen{}cts\sphinxhyphen{}hmac\sphinxhyphen{}sha1\sphinxhyphen{}96”). If \sphinxstyleemphasis{shortest} is TRUE, it return the enctype’s shortest alias (like”aes128\sphinxhyphen{}cts”).
14412
14413\begin{sphinxadmonition}{note}{Note:}
14414\sphinxAtStartPar
14415New in 1.9
14416\end{sphinxadmonition}
14417
14418
14419\subsubsection{krb5\_enctype\_to\_string \sphinxhyphen{}  Convert an encryption type to a string.}
14420\label{\detokenize{appdev/refs/api/krb5_enctype_to_string:krb5-enctype-to-string-convert-an-encryption-type-to-a-string}}\label{\detokenize{appdev/refs/api/krb5_enctype_to_string::doc}}\index{krb5\_enctype\_to\_string (C function)@\spxentry{krb5\_enctype\_to\_string}\spxextra{C function}}
14421
14422\begin{fulllineitems}
14423\phantomsection\label{\detokenize{appdev/refs/api/krb5_enctype_to_string:c.krb5_enctype_to_string}}%
14424\pysigstartmultiline
14425\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_enctype\_to\_string}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{enctype}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{buffer}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{buflen}}{}%
14426\pysigstopmultiline
14427\end{fulllineitems}
14428
14429\begin{quote}\begin{description}
14430\item[{param}] \leavevmode
14431\sphinxAtStartPar
14432\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} \sphinxhyphen{} Encryption type
14433
14434\sphinxAtStartPar
14435\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} \sphinxhyphen{} Buffer to hold encryption type string
14436
14437\sphinxAtStartPar
14438\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} \sphinxhyphen{} Storage available in \sphinxstyleemphasis{buffer}
14439
14440\end{description}\end{quote}
14441\begin{quote}\begin{description}
14442\item[{retval}] \leavevmode\begin{itemize}
14443\item {}
14444\sphinxAtStartPar
144450   Success; otherwise \sphinxhyphen{} Kerberos error codes
14446
14447\end{itemize}
14448
14449\end{description}\end{quote}
14450
14451
14452\subsubsection{krb5\_free\_checksum \sphinxhyphen{}  Free a krb5\_checksum structure.}
14453\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)@\spxentry{krb5\_free\_checksum}\spxextra{C function}}
14454
14455\begin{fulllineitems}
14456\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_checksum:c.krb5_free_checksum}}%
14457\pysigstartmultiline
14458\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_checksum}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{\DUrole{n}{krb5\_checksum}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{val}}{}%
14459\pysigstopmultiline
14460\end{fulllineitems}
14461
14462\begin{quote}\begin{description}
14463\item[{param}] \leavevmode
14464\sphinxAtStartPar
14465\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
14466
14467\sphinxAtStartPar
14468\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} \sphinxhyphen{} Checksum structure to be freed
14469
14470\end{description}\end{quote}
14471
14472\sphinxAtStartPar
14473This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
14474
14475
14476\subsubsection{krb5\_free\_checksum\_contents \sphinxhyphen{}  Free the contents of a krb5\_checksum structure.}
14477\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)@\spxentry{krb5\_free\_checksum\_contents}\spxextra{C function}}
14478
14479\begin{fulllineitems}
14480\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_checksum_contents:c.krb5_free_checksum_contents}}%
14481\pysigstartmultiline
14482\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_checksum\_contents}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{\DUrole{n}{krb5\_checksum}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{val}}{}%
14483\pysigstopmultiline
14484\end{fulllineitems}
14485
14486\begin{quote}\begin{description}
14487\item[{param}] \leavevmode
14488\sphinxAtStartPar
14489\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
14490
14491\sphinxAtStartPar
14492\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} \sphinxhyphen{} Checksum structure to free contents of
14493
14494\end{description}\end{quote}
14495
14496\sphinxAtStartPar
14497This 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.
14498
14499
14500\subsubsection{krb5\_free\_cksumtypes \sphinxhyphen{}  Free an array of checksum types.}
14501\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)@\spxentry{krb5\_free\_cksumtypes}\spxextra{C function}}
14502
14503\begin{fulllineitems}
14504\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_cksumtypes:c.krb5_free_cksumtypes}}%
14505\pysigstartmultiline
14506\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_cksumtypes}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{\DUrole{n}{krb5\_cksumtype}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{val}}{}%
14507\pysigstopmultiline
14508\end{fulllineitems}
14509
14510\begin{quote}\begin{description}
14511\item[{param}] \leavevmode
14512\sphinxAtStartPar
14513\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
14514
14515\sphinxAtStartPar
14516\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} \sphinxhyphen{} Array of checksum types to be freed
14517
14518\end{description}\end{quote}
14519
14520
14521\subsubsection{krb5\_free\_tgt\_creds \sphinxhyphen{}  Free an array of credential structures.}
14522\label{\detokenize{appdev/refs/api/krb5_free_tgt_creds:krb5-free-tgt-creds-free-an-array-of-credential-structures}}\label{\detokenize{appdev/refs/api/krb5_free_tgt_creds::doc}}\index{krb5\_free\_tgt\_creds (C function)@\spxentry{krb5\_free\_tgt\_creds}\spxextra{C function}}
14523
14524\begin{fulllineitems}
14525\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_tgt_creds:c.krb5_free_tgt_creds}}%
14526\pysigstartmultiline
14527\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_free\_tgt\_creds}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{tgts}}{}%
14528\pysigstopmultiline
14529\end{fulllineitems}
14530
14531\begin{quote}\begin{description}
14532\item[{param}] \leavevmode
14533\sphinxAtStartPar
14534\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
14535
14536\sphinxAtStartPar
14537\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{tgts} \sphinxhyphen{} Null\sphinxhyphen{}terminated array of credentials to free
14538
14539\end{description}\end{quote}
14540
14541\begin{sphinxadmonition}{note}{Note:}
14542\sphinxAtStartPar
14543The last entry in the array \sphinxstyleemphasis{tgts} must be a NULL pointer.
14544\end{sphinxadmonition}
14545
14546
14547\subsubsection{krb5\_k\_create\_key \sphinxhyphen{}  Create a krb5\_key from the enctype and key data in a keyblock.}
14548\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}}\label{\detokenize{appdev/refs/api/krb5_k_create_key::doc}}\index{krb5\_k\_create\_key (C function)@\spxentry{krb5\_k\_create\_key}\spxextra{C function}}
14549
14550\begin{fulllineitems}
14551\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_create_key:c.krb5_k_create_key}}%
14552\pysigstartmultiline
14553\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_k\_create\_key}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{\DUrole{n}{krb5\_key}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{out}}{}%
14554\pysigstopmultiline
14555\end{fulllineitems}
14556
14557\begin{quote}\begin{description}
14558\item[{param}] \leavevmode
14559\sphinxAtStartPar
14560\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
14561
14562\sphinxAtStartPar
14563\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key\_data} \sphinxhyphen{} Keyblock
14564
14565\sphinxAtStartPar
14566\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} \sphinxhyphen{} Opaque key
14567
14568\end{description}\end{quote}
14569\begin{quote}\begin{description}
14570\item[{retval}] \leavevmode\begin{itemize}
14571\item {}
14572\sphinxAtStartPar
145730   Success; otherwise \sphinxhyphen{} KRB5\_BAD\_ENCTYPE
14574
14575\end{itemize}
14576
14577\end{description}\end{quote}
14578
14579\sphinxAtStartPar
14580The reference count on a key \sphinxstyleemphasis{out} is set to 1. Use krb5\_k\_free\_key() to free \sphinxstyleemphasis{out} when it is no longer needed.
14581
14582
14583\subsubsection{krb5\_k\_decrypt \sphinxhyphen{}  Decrypt data using a key (operates on opaque key).}
14584\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)@\spxentry{krb5\_k\_decrypt}\spxextra{C function}}
14585
14586\begin{fulllineitems}
14587\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_decrypt:c.krb5_k_decrypt}}%
14588\pysigstartmultiline
14589\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_k\_decrypt}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{\DUrole{n}{krb5\_key}}}}\DUrole{w}{  }\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{\DUrole{n}{krb5\_keyusage}}}}\DUrole{w}{  }\DUrole{n}{usage}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cipher\_state}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{input}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{output}}{}%
14590\pysigstopmultiline
14591\end{fulllineitems}
14592
14593\begin{quote}\begin{description}
14594\item[{param}] \leavevmode
14595\sphinxAtStartPar
14596\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
14597
14598\sphinxAtStartPar
14599\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Encryption key
14600
14601\sphinxAtStartPar
14602\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} \sphinxhyphen{} Key usage (see KRB5\_KEYUSAGE macros)
14603
14604\sphinxAtStartPar
14605\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{cipher\_state} \sphinxhyphen{} Cipher state; specify NULL if not needed
14606
14607\sphinxAtStartPar
14608\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} \sphinxhyphen{} Encrypted data
14609
14610\sphinxAtStartPar
14611\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} \sphinxhyphen{} Decrypted data
14612
14613\end{description}\end{quote}
14614\begin{quote}\begin{description}
14615\item[{retval}] \leavevmode\begin{itemize}
14616\item {}
14617\sphinxAtStartPar
146180   Success; otherwise \sphinxhyphen{} Kerberos error codes
14619
14620\end{itemize}
14621
14622\end{description}\end{quote}
14623
14624\sphinxAtStartPar
14625This 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\sphinxhyphen{}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.
14626
14627\begin{sphinxadmonition}{note}{Note:}
14628\sphinxAtStartPar
14629The 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 krb5\_c\_decrypt() trim \sphinxstyleemphasis{output\sphinxhyphen{}\textgreater{}length} . For some enctypes, the resulting \sphinxstyleemphasis{output\sphinxhyphen{}\textgreater{}length} may include padding bytes.
14630\end{sphinxadmonition}
14631
14632
14633\subsubsection{krb5\_k\_decrypt\_iov \sphinxhyphen{}  Decrypt data in place supporting AEAD (operates on opaque key).}
14634\label{\detokenize{appdev/refs/api/krb5_k_decrypt_iov:krb5-k-decrypt-iov-decrypt-data-in-place-supporting-aead-operates-on-opaque-key}}\label{\detokenize{appdev/refs/api/krb5_k_decrypt_iov::doc}}\index{krb5\_k\_decrypt\_iov (C function)@\spxentry{krb5\_k\_decrypt\_iov}\spxextra{C function}}
14635
14636\begin{fulllineitems}
14637\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_decrypt_iov:c.krb5_k_decrypt_iov}}%
14638\pysigstartmultiline
14639\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_k\_decrypt\_iov}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{\DUrole{n}{krb5\_key}}}}\DUrole{w}{  }\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{\DUrole{n}{krb5\_keyusage}}}}\DUrole{w}{  }\DUrole{n}{usage}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cipher\_state}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{\DUrole{n}{krb5\_crypto\_iov}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{num\_data}}{}%
14640\pysigstopmultiline
14641\end{fulllineitems}
14642
14643\begin{quote}\begin{description}
14644\item[{param}] \leavevmode
14645\sphinxAtStartPar
14646\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
14647
14648\sphinxAtStartPar
14649\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Encryption key
14650
14651\sphinxAtStartPar
14652\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} \sphinxhyphen{} Key usage (see KRB5\_KEYUSAGE macros)
14653
14654\sphinxAtStartPar
14655\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cipher\_state} \sphinxhyphen{} Cipher state; specify NULL if not needed
14656
14657\sphinxAtStartPar
14658\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} \sphinxhyphen{} IOV array. Modified in\sphinxhyphen{}place.
14659
14660\sphinxAtStartPar
14661\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} \sphinxhyphen{} Size of \sphinxstyleemphasis{data}
14662
14663\end{description}\end{quote}
14664\begin{quote}\begin{description}
14665\item[{retval}] \leavevmode\begin{itemize}
14666\item {}
14667\sphinxAtStartPar
146680   Success; otherwise \sphinxhyphen{} Kerberos error codes
14669
14670\end{itemize}
14671
14672\end{description}\end{quote}
14673
14674\sphinxAtStartPar
14675This function decrypts the data block \sphinxstyleemphasis{data} and stores the output in\sphinxhyphen{}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\sphinxhyphen{}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.
14676
14677
14678\sphinxstrong{See also:}
14679\nopagebreak
14680
14681
14682\sphinxAtStartPar
14683krb5\_k\_encrypt\_iov()
14684
14685
14686
14687\begin{sphinxadmonition}{note}{Note:}
14688\sphinxAtStartPar
14689On return from a krb5\_c\_decrypt\_iov() call, the \sphinxstyleemphasis{data\sphinxhyphen{}\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.
14690\end{sphinxadmonition}
14691
14692
14693\subsubsection{krb5\_k\_encrypt \sphinxhyphen{}  Encrypt data using a key (operates on opaque key).}
14694\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)@\spxentry{krb5\_k\_encrypt}\spxextra{C function}}
14695
14696\begin{fulllineitems}
14697\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_encrypt:c.krb5_k_encrypt}}%
14698\pysigstartmultiline
14699\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_k\_encrypt}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{\DUrole{n}{krb5\_key}}}}\DUrole{w}{  }\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{\DUrole{n}{krb5\_keyusage}}}}\DUrole{w}{  }\DUrole{n}{usage}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cipher\_state}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{input}, {\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{output}}{}%
14700\pysigstopmultiline
14701\end{fulllineitems}
14702
14703\begin{quote}\begin{description}
14704\item[{param}] \leavevmode
14705\sphinxAtStartPar
14706\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
14707
14708\sphinxAtStartPar
14709\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Encryption key
14710
14711\sphinxAtStartPar
14712\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} \sphinxhyphen{} Key usage (see KRB5\_KEYUSAGE macros)
14713
14714\sphinxAtStartPar
14715\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{cipher\_state} \sphinxhyphen{} Cipher state; specify NULL if not needed
14716
14717\sphinxAtStartPar
14718\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} \sphinxhyphen{} Data to be encrypted
14719
14720\sphinxAtStartPar
14721\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} \sphinxhyphen{} Encrypted data
14722
14723\end{description}\end{quote}
14724\begin{quote}\begin{description}
14725\item[{retval}] \leavevmode\begin{itemize}
14726\item {}
14727\sphinxAtStartPar
147280   Success; otherwise \sphinxhyphen{} Kerberos error codes
14729
14730\end{itemize}
14731
14732\end{description}\end{quote}
14733
14734\sphinxAtStartPar
14735This 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\sphinxhyphen{}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.
14736
14737\begin{sphinxadmonition}{note}{Note:}
14738\sphinxAtStartPar
14739The caller must initialize \sphinxstyleemphasis{output} and allocate at least enough space for the result (using krb5\_c\_encrypt\_length() to determine the amount of space needed). \sphinxstyleemphasis{output\sphinxhyphen{}\textgreater{}length} will be set to the actual length of the ciphertext.
14740\end{sphinxadmonition}
14741
14742
14743\subsubsection{krb5\_k\_encrypt\_iov \sphinxhyphen{}  Encrypt data in place supporting AEAD (operates on opaque key).}
14744\label{\detokenize{appdev/refs/api/krb5_k_encrypt_iov:krb5-k-encrypt-iov-encrypt-data-in-place-supporting-aead-operates-on-opaque-key}}\label{\detokenize{appdev/refs/api/krb5_k_encrypt_iov::doc}}\index{krb5\_k\_encrypt\_iov (C function)@\spxentry{krb5\_k\_encrypt\_iov}\spxextra{C function}}
14745
14746\begin{fulllineitems}
14747\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_encrypt_iov:c.krb5_k_encrypt_iov}}%
14748\pysigstartmultiline
14749\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_k\_encrypt\_iov}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{\DUrole{n}{krb5\_key}}}}\DUrole{w}{  }\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{\DUrole{n}{krb5\_keyusage}}}}\DUrole{w}{  }\DUrole{n}{usage}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cipher\_state}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{\DUrole{n}{krb5\_crypto\_iov}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{num\_data}}{}%
14750\pysigstopmultiline
14751\end{fulllineitems}
14752
14753\begin{quote}\begin{description}
14754\item[{param}] \leavevmode
14755\sphinxAtStartPar
14756\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
14757
14758\sphinxAtStartPar
14759\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Encryption key
14760
14761\sphinxAtStartPar
14762\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} \sphinxhyphen{} Key usage (see KRB5\_KEYUSAGE macros)
14763
14764\sphinxAtStartPar
14765\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cipher\_state} \sphinxhyphen{} Cipher state; specify NULL if not needed
14766
14767\sphinxAtStartPar
14768\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} \sphinxhyphen{} IOV array. Modified in\sphinxhyphen{}place.
14769
14770\sphinxAtStartPar
14771\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} \sphinxhyphen{} Size of \sphinxstyleemphasis{data}
14772
14773\end{description}\end{quote}
14774\begin{quote}\begin{description}
14775\item[{retval}] \leavevmode\begin{itemize}
14776\item {}
14777\sphinxAtStartPar
147780   Success; otherwise \sphinxhyphen{} Kerberos error codes
14779
14780\end{itemize}
14781
14782\end{description}\end{quote}
14783
14784\sphinxAtStartPar
14785This function encrypts the data block \sphinxstyleemphasis{data} and stores the output in\sphinxhyphen{}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\sphinxhyphen{}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.
14786
14787
14788\sphinxstrong{See also:}
14789\nopagebreak
14790
14791
14792\sphinxAtStartPar
14793krb5\_k\_decrypt\_iov()
14794
14795
14796
14797\begin{sphinxadmonition}{note}{Note:}
14798\sphinxAtStartPar
14799On return from a krb5\_c\_encrypt\_iov() call, the \sphinxstyleemphasis{data\sphinxhyphen{}\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.
14800\end{sphinxadmonition}
14801
14802
14803\subsubsection{krb5\_k\_free\_key \sphinxhyphen{}  Decrement the reference count on a key and free it if it hits zero.}
14804\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)@\spxentry{krb5\_k\_free\_key}\spxextra{C function}}
14805
14806\begin{fulllineitems}
14807\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_free_key:c.krb5_k_free_key}}%
14808\pysigstartmultiline
14809\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_k\_free\_key}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{\DUrole{n}{krb5\_key}}}}\DUrole{w}{  }\DUrole{n}{key}}{}%
14810\pysigstopmultiline
14811\end{fulllineitems}
14812
14813\begin{quote}\begin{description}
14814\item[{param}] \leavevmode
14815\sphinxAtStartPar
14816\sphinxstylestrong{context}
14817
14818\sphinxAtStartPar
14819\sphinxstylestrong{key}
14820
14821\end{description}\end{quote}
14822
14823
14824\subsubsection{krb5\_k\_key\_enctype \sphinxhyphen{}  Retrieve the enctype of a krb5\_key structure.}
14825\label{\detokenize{appdev/refs/api/krb5_k_key_enctype:krb5-k-key-enctype-retrieve-the-enctype-of-a-krb5-key-structure}}\label{\detokenize{appdev/refs/api/krb5_k_key_enctype::doc}}\index{krb5\_k\_key\_enctype (C function)@\spxentry{krb5\_k\_key\_enctype}\spxextra{C function}}
14826
14827\begin{fulllineitems}
14828\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_key_enctype:c.krb5_k_key_enctype}}%
14829\pysigstartmultiline
14830\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_k\_key\_enctype}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{\DUrole{n}{krb5\_key}}}}\DUrole{w}{  }\DUrole{n}{key}}{}%
14831\pysigstopmultiline
14832\end{fulllineitems}
14833
14834\begin{quote}\begin{description}
14835\item[{param}] \leavevmode
14836\sphinxAtStartPar
14837\sphinxstylestrong{context}
14838
14839\sphinxAtStartPar
14840\sphinxstylestrong{key}
14841
14842\end{description}\end{quote}
14843
14844
14845\subsubsection{krb5\_k\_key\_keyblock \sphinxhyphen{}  Retrieve a copy of the keyblock from a krb5\_key structure.}
14846\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)@\spxentry{krb5\_k\_key\_keyblock}\spxextra{C function}}
14847
14848\begin{fulllineitems}
14849\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_key_keyblock:c.krb5_k_key_keyblock}}%
14850\pysigstartmultiline
14851\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_k\_key\_keyblock}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{\DUrole{n}{krb5\_key}}}}\DUrole{w}{  }\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{key\_data}}{}%
14852\pysigstopmultiline
14853\end{fulllineitems}
14854
14855\begin{quote}\begin{description}
14856\item[{param}] \leavevmode
14857\sphinxAtStartPar
14858\sphinxstylestrong{context}
14859
14860\sphinxAtStartPar
14861\sphinxstylestrong{key}
14862
14863\sphinxAtStartPar
14864\sphinxstylestrong{key\_data}
14865
14866\end{description}\end{quote}
14867
14868
14869\subsubsection{krb5\_k\_make\_checksum \sphinxhyphen{}  Compute a checksum (operates on opaque key).}
14870\label{\detokenize{appdev/refs/api/krb5_k_make_checksum:krb5-k-make-checksum-compute-a-checksum-operates-on-opaque-key}}\label{\detokenize{appdev/refs/api/krb5_k_make_checksum::doc}}\index{krb5\_k\_make\_checksum (C function)@\spxentry{krb5\_k\_make\_checksum}\spxextra{C function}}
14871
14872\begin{fulllineitems}
14873\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_make_checksum:c.krb5_k_make_checksum}}%
14874\pysigstartmultiline
14875\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_k\_make\_checksum}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{\DUrole{n}{krb5\_cksumtype}}}}\DUrole{w}{  }\DUrole{n}{cksumtype}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{\DUrole{n}{krb5\_key}}}}\DUrole{w}{  }\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{\DUrole{n}{krb5\_keyusage}}}}\DUrole{w}{  }\DUrole{n}{usage}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{input}, {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{\DUrole{n}{krb5\_checksum}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cksum}}{}%
14876\pysigstopmultiline
14877\end{fulllineitems}
14878
14879\begin{quote}\begin{description}
14880\item[{param}] \leavevmode
14881\sphinxAtStartPar
14882\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
14883
14884\sphinxAtStartPar
14885\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} \sphinxhyphen{} Checksum type (0 for mandatory type)
14886
14887\sphinxAtStartPar
14888\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Encryption key for a keyed checksum
14889
14890\sphinxAtStartPar
14891\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} \sphinxhyphen{} Key usage (see KRB5\_KEYUSAGE macros)
14892
14893\sphinxAtStartPar
14894\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} \sphinxhyphen{} Input data
14895
14896\sphinxAtStartPar
14897\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cksum} \sphinxhyphen{} Generated checksum
14898
14899\end{description}\end{quote}
14900\begin{quote}\begin{description}
14901\item[{retval}] \leavevmode\begin{itemize}
14902\item {}
14903\sphinxAtStartPar
149040   Success; otherwise \sphinxhyphen{} Kerberos error codes
14905
14906\end{itemize}
14907
14908\end{description}\end{quote}
14909
14910\sphinxAtStartPar
14911This 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\sphinxhyphen{}null, the checksum type will be the mandatory\sphinxhyphen{}to\sphinxhyphen{}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 krb5\_free\_checksum\_contents() when it is no longer needed.
14912
14913
14914\sphinxstrong{See also:}
14915\nopagebreak
14916
14917
14918\sphinxAtStartPar
14919krb5\_c\_verify\_checksum()
14920
14921
14922
14923\begin{sphinxadmonition}{note}{Note:}
14924\sphinxAtStartPar
14925This function is similar to krb5\_c\_make\_checksum(), but operates on opaque \sphinxstyleemphasis{key} .
14926\end{sphinxadmonition}
14927
14928
14929\subsubsection{krb5\_k\_make\_checksum\_iov \sphinxhyphen{}  Fill in a checksum element in IOV array (operates on opaque key)}
14930\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}}\label{\detokenize{appdev/refs/api/krb5_k_make_checksum_iov::doc}}\index{krb5\_k\_make\_checksum\_iov (C function)@\spxentry{krb5\_k\_make\_checksum\_iov}\spxextra{C function}}
14931
14932\begin{fulllineitems}
14933\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_make_checksum_iov:c.krb5_k_make_checksum_iov}}%
14934\pysigstartmultiline
14935\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_k\_make\_checksum\_iov}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{\DUrole{n}{krb5\_cksumtype}}}}\DUrole{w}{  }\DUrole{n}{cksumtype}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{\DUrole{n}{krb5\_key}}}}\DUrole{w}{  }\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{\DUrole{n}{krb5\_keyusage}}}}\DUrole{w}{  }\DUrole{n}{usage}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{\DUrole{n}{krb5\_crypto\_iov}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{num\_data}}{}%
14936\pysigstopmultiline
14937\end{fulllineitems}
14938
14939\begin{quote}\begin{description}
14940\item[{param}] \leavevmode
14941\sphinxAtStartPar
14942\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
14943
14944\sphinxAtStartPar
14945\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} \sphinxhyphen{} Checksum type (0 for mandatory type)
14946
14947\sphinxAtStartPar
14948\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Encryption key for a keyed checksum
14949
14950\sphinxAtStartPar
14951\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} \sphinxhyphen{} Key usage (see KRB5\_KEYUSAGE macros)
14952
14953\sphinxAtStartPar
14954\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} \sphinxhyphen{} IOV array
14955
14956\sphinxAtStartPar
14957\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} \sphinxhyphen{} Size of \sphinxstyleemphasis{data}
14958
14959\end{description}\end{quote}
14960\begin{quote}\begin{description}
14961\item[{retval}] \leavevmode\begin{itemize}
14962\item {}
14963\sphinxAtStartPar
149640   Success; otherwise \sphinxhyphen{} Kerberos error codes
14965
14966\end{itemize}
14967
14968\end{description}\end{quote}
14969
14970\sphinxAtStartPar
14971Create a checksum in the \#KRB5\_CRYPTO\_TYPE\_CHECKSUM element over \#KRB5\_CRYPTO\_TYPE\_DATA and \#KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY chunks in \sphinxstyleemphasis{data} . Only the \#KRB5\_CRYPTO\_TYPE\_CHECKSUM region is modified.
14972
14973
14974\sphinxstrong{See also:}
14975\nopagebreak
14976
14977
14978\sphinxAtStartPar
14979krb5\_k\_verify\_checksum\_iov()
14980
14981
14982
14983\begin{sphinxadmonition}{note}{Note:}
14984\sphinxAtStartPar
14985This function is similar to krb5\_c\_make\_checksum\_iov(), but operates on opaque \sphinxstyleemphasis{key} .
14986\end{sphinxadmonition}
14987
14988
14989\subsubsection{krb5\_k\_prf \sphinxhyphen{}  Generate enctype\sphinxhyphen{}specific pseudo\sphinxhyphen{}random bytes (operates on opaque key).}
14990\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)@\spxentry{krb5\_k\_prf}\spxextra{C function}}
14991
14992\begin{fulllineitems}
14993\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_prf:c.krb5_k_prf}}%
14994\pysigstartmultiline
14995\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_k\_prf}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{\DUrole{n}{krb5\_key}}}}\DUrole{w}{  }\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{input}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{output}}{}%
14996\pysigstopmultiline
14997\end{fulllineitems}
14998
14999\begin{quote}\begin{description}
15000\item[{param}] \leavevmode
15001\sphinxAtStartPar
15002\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
15003
15004\sphinxAtStartPar
15005\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Key
15006
15007\sphinxAtStartPar
15008\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} \sphinxhyphen{} Input data
15009
15010\sphinxAtStartPar
15011\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} \sphinxhyphen{} Output data
15012
15013\end{description}\end{quote}
15014\begin{quote}\begin{description}
15015\item[{retval}] \leavevmode\begin{itemize}
15016\item {}
15017\sphinxAtStartPar
150180   Success; otherwise \sphinxhyphen{} Kerberos error codes
15019
15020\end{itemize}
15021
15022\end{description}\end{quote}
15023
15024\sphinxAtStartPar
15025This function selects a pseudo\sphinxhyphen{}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.
15026
15027\begin{sphinxadmonition}{note}{Note:}
15028\sphinxAtStartPar
15029This function is similar to krb5\_c\_prf(), but operates on opaque \sphinxstyleemphasis{key} .
15030\end{sphinxadmonition}
15031
15032
15033\subsubsection{krb5\_k\_reference\_key \sphinxhyphen{}  Increment the reference count on a key.}
15034\label{\detokenize{appdev/refs/api/krb5_k_reference_key:krb5-k-reference-key-increment-the-reference-count-on-a-key}}\label{\detokenize{appdev/refs/api/krb5_k_reference_key::doc}}\index{krb5\_k\_reference\_key (C function)@\spxentry{krb5\_k\_reference\_key}\spxextra{C function}}
15035
15036\begin{fulllineitems}
15037\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_reference_key:c.krb5_k_reference_key}}%
15038\pysigstartmultiline
15039\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_k\_reference\_key}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{\DUrole{n}{krb5\_key}}}}\DUrole{w}{  }\DUrole{n}{key}}{}%
15040\pysigstopmultiline
15041\end{fulllineitems}
15042
15043\begin{quote}\begin{description}
15044\item[{param}] \leavevmode
15045\sphinxAtStartPar
15046\sphinxstylestrong{context}
15047
15048\sphinxAtStartPar
15049\sphinxstylestrong{key}
15050
15051\end{description}\end{quote}
15052
15053
15054\subsubsection{krb5\_k\_verify\_checksum \sphinxhyphen{}  Verify a checksum (operates on opaque key).}
15055\label{\detokenize{appdev/refs/api/krb5_k_verify_checksum:krb5-k-verify-checksum-verify-a-checksum-operates-on-opaque-key}}\label{\detokenize{appdev/refs/api/krb5_k_verify_checksum::doc}}\index{krb5\_k\_verify\_checksum (C function)@\spxentry{krb5\_k\_verify\_checksum}\spxextra{C function}}
15056
15057\begin{fulllineitems}
15058\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_verify_checksum:c.krb5_k_verify_checksum}}%
15059\pysigstartmultiline
15060\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_k\_verify\_checksum}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{\DUrole{n}{krb5\_key}}}}\DUrole{w}{  }\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{\DUrole{n}{krb5\_keyusage}}}}\DUrole{w}{  }\DUrole{n}{usage}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{\DUrole{n}{krb5\_checksum}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cksum}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{valid}}{}%
15061\pysigstopmultiline
15062\end{fulllineitems}
15063
15064\begin{quote}\begin{description}
15065\item[{param}] \leavevmode
15066\sphinxAtStartPar
15067\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
15068
15069\sphinxAtStartPar
15070\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Encryption key for a keyed checksum
15071
15072\sphinxAtStartPar
15073\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} \sphinxhyphen{} \sphinxstyleemphasis{key} usage
15074
15075\sphinxAtStartPar
15076\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} \sphinxhyphen{} Data to be used to compute a new checksum using \sphinxstyleemphasis{key} to compare \sphinxstyleemphasis{cksum} against
15077
15078\sphinxAtStartPar
15079\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksum} \sphinxhyphen{} Checksum to be verified
15080
15081\sphinxAtStartPar
15082\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{valid} \sphinxhyphen{} Non\sphinxhyphen{}zero for success, zero for failure
15083
15084\end{description}\end{quote}
15085\begin{quote}\begin{description}
15086\item[{retval}] \leavevmode\begin{itemize}
15087\item {}
15088\sphinxAtStartPar
150890   Success; otherwise \sphinxhyphen{} Kerberos error codes
15090
15091\end{itemize}
15092
15093\end{description}\end{quote}
15094
15095\sphinxAtStartPar
15096This 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.
15097
15098\begin{sphinxadmonition}{note}{Note:}
15099\sphinxAtStartPar
15100This function is similar to krb5\_c\_verify\_checksum(), but operates on opaque \sphinxstyleemphasis{key} .
15101\end{sphinxadmonition}
15102
15103
15104\subsubsection{krb5\_k\_verify\_checksum\_iov \sphinxhyphen{}  Validate a checksum element in IOV array (operates on opaque key).}
15105\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)@\spxentry{krb5\_k\_verify\_checksum\_iov}\spxextra{C function}}
15106
15107\begin{fulllineitems}
15108\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_verify_checksum_iov:c.krb5_k_verify_checksum_iov}}%
15109\pysigstartmultiline
15110\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_k\_verify\_checksum\_iov}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{\DUrole{n}{krb5\_cksumtype}}}}\DUrole{w}{  }\DUrole{n}{cksumtype}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{\DUrole{n}{krb5\_key}}}}\DUrole{w}{  }\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{\DUrole{n}{krb5\_keyusage}}}}\DUrole{w}{  }\DUrole{n}{usage}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{\DUrole{n}{krb5\_crypto\_iov}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{num\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{valid}}{}%
15111\pysigstopmultiline
15112\end{fulllineitems}
15113
15114\begin{quote}\begin{description}
15115\item[{param}] \leavevmode
15116\sphinxAtStartPar
15117\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
15118
15119\sphinxAtStartPar
15120\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} \sphinxhyphen{} Checksum type (0 for mandatory type)
15121
15122\sphinxAtStartPar
15123\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} \sphinxhyphen{} Encryption key for a keyed checksum
15124
15125\sphinxAtStartPar
15126\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} \sphinxhyphen{} Key usage (see KRB5\_KEYUSAGE macros)
15127
15128\sphinxAtStartPar
15129\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} \sphinxhyphen{} IOV array
15130
15131\sphinxAtStartPar
15132\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} \sphinxhyphen{} Size of \sphinxstyleemphasis{data}
15133
15134\sphinxAtStartPar
15135\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{valid} \sphinxhyphen{} Non\sphinxhyphen{}zero for success, zero for failure
15136
15137\end{description}\end{quote}
15138\begin{quote}\begin{description}
15139\item[{retval}] \leavevmode\begin{itemize}
15140\item {}
15141\sphinxAtStartPar
151420   Success; otherwise \sphinxhyphen{} Kerberos error codes
15143
15144\end{itemize}
15145
15146\end{description}\end{quote}
15147
15148\sphinxAtStartPar
15149Confirm that the checksum in the \#KRB5\_CRYPTO\_TYPE\_CHECKSUM element is a valid checksum of the \#KRB5\_CRYPTO\_TYPE\_DATA and \#KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY regions in the iov.
15150
15151
15152\sphinxstrong{See also:}
15153\nopagebreak
15154
15155
15156\sphinxAtStartPar
15157krb5\_k\_make\_checksum\_iov()
15158
15159
15160
15161\begin{sphinxadmonition}{note}{Note:}
15162\sphinxAtStartPar
15163This function is similar to krb5\_c\_verify\_checksum\_iov(), but operates on opaque \sphinxstyleemphasis{key} .
15164\end{sphinxadmonition}
15165
15166
15167\subsection{Legacy convenience interfaces}
15168\label{\detokenize{appdev/refs/api/index:legacy-convenience-interfaces}}
15169
15170\subsubsection{krb5\_recvauth \sphinxhyphen{}  Server function for sendauth protocol.}
15171\label{\detokenize{appdev/refs/api/krb5_recvauth:krb5-recvauth-server-function-for-sendauth-protocol}}\label{\detokenize{appdev/refs/api/krb5_recvauth::doc}}\index{krb5\_recvauth (C function)@\spxentry{krb5\_recvauth}\spxextra{C function}}
15172
15173\begin{fulllineitems}
15174\phantomsection\label{\detokenize{appdev/refs/api/krb5_recvauth:c.krb5_recvauth}}%
15175\pysigstartmultiline
15176\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_recvauth}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{\DUrole{n}{krb5\_pointer}}}}\DUrole{w}{  }\DUrole{n}{fd}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{appl\_version}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{server}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\DUrole{n}{flags}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{n}{keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{ticket}}{}%
15177\pysigstopmultiline
15178\end{fulllineitems}
15179
15180\begin{quote}\begin{description}
15181\item[{param}] \leavevmode
15182\sphinxAtStartPar
15183\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
15184
15185\sphinxAtStartPar
15186\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Pre\sphinxhyphen{}existing or newly created auth context
15187
15188\sphinxAtStartPar
15189\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fd} \sphinxhyphen{} File descriptor
15190
15191\sphinxAtStartPar
15192\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{appl\_version} \sphinxhyphen{} Application protocol version to be matched against the client’s application version
15193
15194\sphinxAtStartPar
15195\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} \sphinxhyphen{} Server principal (NULL for any in \sphinxstyleemphasis{keytab} )
15196
15197\sphinxAtStartPar
15198\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} \sphinxhyphen{} Additional specifications
15199
15200\sphinxAtStartPar
15201\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} \sphinxhyphen{} Key table containing service keys
15202
15203\sphinxAtStartPar
15204\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ticket} \sphinxhyphen{} Ticket (NULL if not needed)
15205
15206\end{description}\end{quote}
15207\begin{quote}\begin{description}
15208\item[{retval}] \leavevmode\begin{itemize}
15209\item {}
15210\sphinxAtStartPar
152110   Success; otherwise \sphinxhyphen{} Kerberos error codes
15212
15213\end{itemize}
15214
15215\end{description}\end{quote}
15216
15217\sphinxAtStartPar
15218This function performs the server side of a sendauth/recvauth exchange by sending and receiving messages over \sphinxstyleemphasis{fd} .
15219
15220\sphinxAtStartPar
15221Use krb5\_free\_ticket() to free \sphinxstyleemphasis{ticket} when it is no longer needed.
15222
15223
15224\sphinxstrong{See also:}
15225\nopagebreak
15226
15227
15228\sphinxAtStartPar
15229krb5\_sendauth()
15230
15231
15232
15233
15234\subsubsection{krb5\_recvauth\_version \sphinxhyphen{}  Server function for sendauth protocol with version parameter.}
15235\label{\detokenize{appdev/refs/api/krb5_recvauth_version:krb5-recvauth-version-server-function-for-sendauth-protocol-with-version-parameter}}\label{\detokenize{appdev/refs/api/krb5_recvauth_version::doc}}\index{krb5\_recvauth\_version (C function)@\spxentry{krb5\_recvauth\_version}\spxextra{C function}}
15236
15237\begin{fulllineitems}
15238\phantomsection\label{\detokenize{appdev/refs/api/krb5_recvauth_version:c.krb5_recvauth_version}}%
15239\pysigstartmultiline
15240\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_recvauth\_version}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{\DUrole{n}{krb5\_pointer}}}}\DUrole{w}{  }\DUrole{n}{fd}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{server}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\DUrole{n}{flags}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{n}{keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{ticket}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{version}}{}%
15241\pysigstopmultiline
15242\end{fulllineitems}
15243
15244\begin{quote}\begin{description}
15245\item[{param}] \leavevmode
15246\sphinxAtStartPar
15247\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
15248
15249\sphinxAtStartPar
15250\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Pre\sphinxhyphen{}existing or newly created auth context
15251
15252\sphinxAtStartPar
15253\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fd} \sphinxhyphen{} File descriptor
15254
15255\sphinxAtStartPar
15256\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} \sphinxhyphen{} Server principal (NULL for any in \sphinxstyleemphasis{keytab} )
15257
15258\sphinxAtStartPar
15259\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} \sphinxhyphen{} Additional specifications
15260
15261\sphinxAtStartPar
15262\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} \sphinxhyphen{} Decryption key
15263
15264\sphinxAtStartPar
15265\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ticket} \sphinxhyphen{} Ticket (NULL if not needed)
15266
15267\sphinxAtStartPar
15268\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{version} \sphinxhyphen{} sendauth protocol version (NULL if not needed)
15269
15270\end{description}\end{quote}
15271\begin{quote}\begin{description}
15272\item[{retval}] \leavevmode\begin{itemize}
15273\item {}
15274\sphinxAtStartPar
152750   Success; otherwise \sphinxhyphen{} Kerberos error codes
15276
15277\end{itemize}
15278
15279\end{description}\end{quote}
15280
15281\sphinxAtStartPar
15282This function is similar to krb5\_recvauth() with the additional output information place into \sphinxstyleemphasis{version} .
15283
15284
15285\subsubsection{krb5\_sendauth \sphinxhyphen{}  Client function for sendauth protocol.}
15286\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)@\spxentry{krb5\_sendauth}\spxextra{C function}}
15287
15288\begin{fulllineitems}
15289\phantomsection\label{\detokenize{appdev/refs/api/krb5_sendauth:c.krb5_sendauth}}%
15290\pysigstartmultiline
15291\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_sendauth}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{\DUrole{n}{krb5\_pointer}}}}\DUrole{w}{  }\DUrole{n}{fd}, \DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{appl\_version}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{client}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{server}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\DUrole{n}{ap\_req\_options}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{in\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{in\_creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{\DUrole{n}{krb5\_error}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{error}, {\hyperref[\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part}]{\sphinxcrossref{\DUrole{n}{krb5\_ap\_rep\_enc\_part}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{rep\_result}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{out\_creds}}{}%
15292\pysigstopmultiline
15293\end{fulllineitems}
15294
15295\begin{quote}\begin{description}
15296\item[{param}] \leavevmode
15297\sphinxAtStartPar
15298\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
15299
15300\sphinxAtStartPar
15301\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Pre\sphinxhyphen{}existing or newly created auth context
15302
15303\sphinxAtStartPar
15304\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fd} \sphinxhyphen{} File descriptor that describes network socket
15305
15306\sphinxAtStartPar
15307\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{appl\_version} \sphinxhyphen{} Application protocol version to be matched with the receiver’s application version
15308
15309\sphinxAtStartPar
15310\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} \sphinxhyphen{} Client principal
15311
15312\sphinxAtStartPar
15313\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} \sphinxhyphen{} Server principal
15314
15315\sphinxAtStartPar
15316\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_options} \sphinxhyphen{} Options (see AP\_OPTS macros)
15317
15318\sphinxAtStartPar
15319\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_data} \sphinxhyphen{} Data to be sent to the server
15320
15321\sphinxAtStartPar
15322\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_creds} \sphinxhyphen{} Input credentials, or NULL to use \sphinxstyleemphasis{ccache}
15323
15324\sphinxAtStartPar
15325\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} \sphinxhyphen{} Credential cache
15326
15327\sphinxAtStartPar
15328\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{error} \sphinxhyphen{} If non\sphinxhyphen{}null, contains KRB\_ERROR message returned from server
15329
15330\sphinxAtStartPar
15331\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rep\_result} \sphinxhyphen{} If non\sphinxhyphen{}null and \sphinxstyleemphasis{ap\_req\_options} is \#AP\_OPTS\_MUTUAL\_REQUIRED, contains the result of mutual authentication exchange
15332
15333\sphinxAtStartPar
15334\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out\_creds} \sphinxhyphen{} If non\sphinxhyphen{}null, the retrieved credentials
15335
15336\end{description}\end{quote}
15337\begin{quote}\begin{description}
15338\item[{retval}] \leavevmode\begin{itemize}
15339\item {}
15340\sphinxAtStartPar
153410   Success; otherwise \sphinxhyphen{} Kerberos error codes
15342
15343\end{itemize}
15344
15345\end{description}\end{quote}
15346
15347\sphinxAtStartPar
15348This function performs the client side of a sendauth/recvauth exchange by sending and receiving messages over \sphinxstyleemphasis{fd} .
15349
15350\sphinxAtStartPar
15351Credentials may be specified in three ways:
15352\begin{quote}
15353\begin{itemize}
15354\item {}
15355\sphinxAtStartPar
15356If \sphinxstyleemphasis{in\_creds} is NULL, credentials are obtained with krb5\_get\_credentials() using the principals \sphinxstyleemphasis{client} and \sphinxstyleemphasis{server} . \sphinxstyleemphasis{server} must be non\sphinxhyphen{}null; \sphinxstyleemphasis{client} may NULL to use the default principal of \sphinxstyleemphasis{ccache} .
15357
15358\item {}
15359\sphinxAtStartPar
15360If \sphinxstyleemphasis{in\_creds} is non\sphinxhyphen{}null, but does not contain a ticket, credentials for the exchange are obtained with krb5\_get\_credentials() using \sphinxstyleemphasis{in\_creds} . In this case, the values of \sphinxstyleemphasis{client} and \sphinxstyleemphasis{server} are unused.
15361
15362\item {}
15363\sphinxAtStartPar
15364If \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.
15365
15366\end{itemize}
15367
15368\sphinxAtStartPar
15369If the server is using a different application protocol than that specified in \sphinxstyleemphasis{appl\_version} , an error will be returned.
15370\end{quote}
15371
15372\sphinxAtStartPar
15373Use krb5\_free\_creds() to free \sphinxstyleemphasis{out\_creds} , krb5\_free\_ap\_rep\_enc\_part() to free \sphinxstyleemphasis{rep\_result} , and krb5\_free\_error() to free \sphinxstyleemphasis{error} when they are no longer needed.
15374
15375
15376\sphinxstrong{See also:}
15377\nopagebreak
15378
15379
15380\sphinxAtStartPar
15381krb5\_recvauth()
15382
15383
15384
15385
15386\subsection{Deprecated public interfaces}
15387\label{\detokenize{appdev/refs/api/index:deprecated-public-interfaces}}
15388
15389\subsubsection{krb5\_524\_convert\_creds \sphinxhyphen{}  Convert a Kerberos V5 credentials to a Kerberos V4 credentials.}
15390\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)@\spxentry{krb5\_524\_convert\_creds}\spxextra{C function}}
15391
15392\begin{fulllineitems}
15393\phantomsection\label{\detokenize{appdev/refs/api/krb5_524_convert_creds:c.krb5_524_convert_creds}}%
15394\pysigstartmultiline
15395\pysiglinewithargsret{\DUrole{kt}{int}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_524\_convert\_creds}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{v5creds}, \DUrole{k}{struct}\DUrole{w}{  }\DUrole{n}{credentials}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{v4creds}}{}%
15396\pysigstopmultiline
15397\end{fulllineitems}
15398
15399\begin{quote}\begin{description}
15400\item[{param}] \leavevmode
15401\sphinxAtStartPar
15402\sphinxstylestrong{context}
15403
15404\sphinxAtStartPar
15405\sphinxstylestrong{v5creds}
15406
15407\sphinxAtStartPar
15408\sphinxstylestrong{v4creds}
15409
15410\end{description}\end{quote}
15411\begin{quote}\begin{description}
15412\item[{retval}] \leavevmode\begin{itemize}
15413\item {}
15414\sphinxAtStartPar
15415KRB524\_KRB4\_DISABLED   (always)
15416
15417\end{itemize}
15418
15419\end{description}\end{quote}
15420
15421\begin{sphinxadmonition}{note}{Note:}
15422\sphinxAtStartPar
15423Not implemented
15424\end{sphinxadmonition}
15425
15426
15427\subsubsection{krb5\_auth\_con\_getlocalsubkey}
15428\label{\detokenize{appdev/refs/api/krb5_auth_con_getlocalsubkey:krb5-auth-con-getlocalsubkey}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getlocalsubkey::doc}}\index{krb5\_auth\_con\_getlocalsubkey (C function)@\spxentry{krb5\_auth\_con\_getlocalsubkey}\spxextra{C function}}
15429
15430\begin{fulllineitems}
15431\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getlocalsubkey:c.krb5_auth_con_getlocalsubkey}}%
15432\pysigstartmultiline
15433\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_getlocalsubkey}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{keyblock}}{}%
15434\pysigstopmultiline
15435\end{fulllineitems}
15436
15437\begin{quote}\begin{description}
15438\item[{param}] \leavevmode
15439\sphinxAtStartPar
15440\sphinxstylestrong{context}
15441
15442\sphinxAtStartPar
15443\sphinxstylestrong{auth\_context}
15444
15445\sphinxAtStartPar
15446\sphinxstylestrong{keyblock}
15447
15448\end{description}\end{quote}
15449
15450\sphinxAtStartPar
15451DEPRECATED Replaced by krb5\_auth\_con\_getsendsubkey().
15452
15453
15454\subsubsection{krb5\_auth\_con\_getremotesubkey}
15455\label{\detokenize{appdev/refs/api/krb5_auth_con_getremotesubkey:krb5-auth-con-getremotesubkey}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getremotesubkey::doc}}\index{krb5\_auth\_con\_getremotesubkey (C function)@\spxentry{krb5\_auth\_con\_getremotesubkey}\spxextra{C function}}
15456
15457\begin{fulllineitems}
15458\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getremotesubkey:c.krb5_auth_con_getremotesubkey}}%
15459\pysigstartmultiline
15460\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_getremotesubkey}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{keyblock}}{}%
15461\pysigstopmultiline
15462\end{fulllineitems}
15463
15464\begin{quote}\begin{description}
15465\item[{param}] \leavevmode
15466\sphinxAtStartPar
15467\sphinxstylestrong{context}
15468
15469\sphinxAtStartPar
15470\sphinxstylestrong{auth\_context}
15471
15472\sphinxAtStartPar
15473\sphinxstylestrong{keyblock}
15474
15475\end{description}\end{quote}
15476
15477\sphinxAtStartPar
15478DEPRECATED Replaced by krb5\_auth\_con\_getrecvsubkey().
15479
15480
15481\subsubsection{krb5\_auth\_con\_initivector \sphinxhyphen{}  Cause an auth context to use cipher state.}
15482\label{\detokenize{appdev/refs/api/krb5_auth_con_initivector:krb5-auth-con-initivector-cause-an-auth-context-to-use-cipher-state}}\label{\detokenize{appdev/refs/api/krb5_auth_con_initivector::doc}}\index{krb5\_auth\_con\_initivector (C function)@\spxentry{krb5\_auth\_con\_initivector}\spxextra{C function}}
15483
15484\begin{fulllineitems}
15485\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_initivector:c.krb5_auth_con_initivector}}%
15486\pysigstartmultiline
15487\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_con\_initivector}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{\DUrole{n}{krb5\_auth\_context}}}}\DUrole{w}{  }\DUrole{n}{auth\_context}}{}%
15488\pysigstopmultiline
15489\end{fulllineitems}
15490
15491\begin{quote}\begin{description}
15492\item[{param}] \leavevmode
15493\sphinxAtStartPar
15494\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} \sphinxhyphen{} Library context
15495
15496\sphinxAtStartPar
15497\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} \sphinxhyphen{} Authentication context
15498
15499\end{description}\end{quote}
15500\begin{quote}\begin{description}
15501\item[{retval}] \leavevmode\begin{itemize}
15502\item {}
15503\sphinxAtStartPar
155040   Success; otherwise \sphinxhyphen{} Kerberos error codes
15505
15506\end{itemize}
15507
15508\end{description}\end{quote}
15509
15510\sphinxAtStartPar
15511Prepare \sphinxstyleemphasis{auth\_context} to use cipher state when krb5\_mk\_priv() or krb5\_rd\_priv() encrypt or decrypt data.
15512
15513
15514\subsubsection{krb5\_build\_principal\_va}
15515\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)@\spxentry{krb5\_build\_principal\_va}\spxextra{C function}}
15516
15517\begin{fulllineitems}
15518\phantomsection\label{\detokenize{appdev/refs/api/krb5_build_principal_va:c.krb5_build_principal_va}}%
15519\pysigstartmultiline
15520\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_build\_principal\_va}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\DUrole{n}{princ}, \DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\DUrole{n}{rlen}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{realm}, \DUrole{n}{va\_list}\DUrole{w}{  }\DUrole{n}{ap}}{}%
15521\pysigstopmultiline
15522\end{fulllineitems}
15523
15524\begin{quote}\begin{description}
15525\item[{param}] \leavevmode
15526\sphinxAtStartPar
15527\sphinxstylestrong{context}
15528
15529\sphinxAtStartPar
15530\sphinxstylestrong{princ}
15531
15532\sphinxAtStartPar
15533\sphinxstylestrong{rlen}
15534
15535\sphinxAtStartPar
15536\sphinxstylestrong{realm}
15537
15538\sphinxAtStartPar
15539\sphinxstylestrong{ap}
15540
15541\end{description}\end{quote}
15542
15543\sphinxAtStartPar
15544DEPRECATED Replaced by krb5\_build\_principal\_alloc\_va().
15545
15546
15547\subsubsection{krb5\_c\_random\_seed}
15548\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)@\spxentry{krb5\_c\_random\_seed}\spxextra{C function}}
15549
15550\begin{fulllineitems}
15551\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_random_seed:c.krb5_c_random_seed}}%
15552\pysigstartmultiline
15553\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_c\_random\_seed}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}}{}%
15554\pysigstopmultiline
15555\end{fulllineitems}
15556
15557\begin{quote}\begin{description}
15558\item[{param}] \leavevmode
15559\sphinxAtStartPar
15560\sphinxstylestrong{context}
15561
15562\sphinxAtStartPar
15563\sphinxstylestrong{data}
15564
15565\end{description}\end{quote}
15566
15567\sphinxAtStartPar
15568DEPRECATED This call is no longer necessary.
15569
15570
15571\subsubsection{krb5\_calculate\_checksum}
15572\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)@\spxentry{krb5\_calculate\_checksum}\spxextra{C function}}
15573
15574\begin{fulllineitems}
15575\phantomsection\label{\detokenize{appdev/refs/api/krb5_calculate_checksum:c.krb5_calculate_checksum}}%
15576\pysigstartmultiline
15577\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_calculate\_checksum}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{\DUrole{n}{krb5\_cksumtype}}}}\DUrole{w}{  }\DUrole{n}{ctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_pointer}}}}\DUrole{w}{  }\DUrole{n}{in}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{in\_length}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_pointer}}}}\DUrole{w}{  }\DUrole{n}{seed}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{seed\_length}, {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{\DUrole{n}{krb5\_checksum}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{outcksum}}{}%
15578\pysigstopmultiline
15579\end{fulllineitems}
15580
15581\begin{quote}\begin{description}
15582\item[{param}] \leavevmode
15583\sphinxAtStartPar
15584\sphinxstylestrong{context}
15585
15586\sphinxAtStartPar
15587\sphinxstylestrong{ctype}
15588
15589\sphinxAtStartPar
15590\sphinxstylestrong{in}
15591
15592\sphinxAtStartPar
15593\sphinxstylestrong{in\_length}
15594
15595\sphinxAtStartPar
15596\sphinxstylestrong{seed}
15597
15598\sphinxAtStartPar
15599\sphinxstylestrong{seed\_length}
15600
15601\sphinxAtStartPar
15602\sphinxstylestrong{outcksum}
15603
15604\end{description}\end{quote}
15605
15606\sphinxAtStartPar
15607DEPRECATED See krb5\_c\_make\_checksum()
15608
15609
15610\subsubsection{krb5\_checksum\_size}
15611\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)@\spxentry{krb5\_checksum\_size}\spxextra{C function}}
15612
15613\begin{fulllineitems}
15614\phantomsection\label{\detokenize{appdev/refs/api/krb5_checksum_size:c.krb5_checksum_size}}%
15615\pysigstartmultiline
15616\pysiglinewithargsret{\DUrole{n}{size\_t}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_checksum\_size}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{\DUrole{n}{krb5\_cksumtype}}}}\DUrole{w}{  }\DUrole{n}{ctype}}{}%
15617\pysigstopmultiline
15618\end{fulllineitems}
15619
15620\begin{quote}\begin{description}
15621\item[{param}] \leavevmode
15622\sphinxAtStartPar
15623\sphinxstylestrong{context}
15624
15625\sphinxAtStartPar
15626\sphinxstylestrong{ctype}
15627
15628\end{description}\end{quote}
15629
15630\sphinxAtStartPar
15631DEPRECATED See krb5\_c\_checksum\_length()
15632
15633
15634\subsubsection{krb5\_encrypt}
15635\label{\detokenize{appdev/refs/api/krb5_encrypt:krb5-encrypt}}\label{\detokenize{appdev/refs/api/krb5_encrypt::doc}}\index{krb5\_encrypt (C function)@\spxentry{krb5\_encrypt}\spxextra{C function}}
15636
15637\begin{fulllineitems}
15638\phantomsection\label{\detokenize{appdev/refs/api/krb5_encrypt:c.krb5_encrypt}}%
15639\pysigstartmultiline
15640\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_encrypt}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_pointer}}}}\DUrole{w}{  }\DUrole{n}{inptr}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{\DUrole{n}{krb5\_pointer}}}}\DUrole{w}{  }\DUrole{n}{outptr}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{size}, {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{\DUrole{n}{krb5\_encrypt\_block}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{eblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{\DUrole{n}{krb5\_pointer}}}}\DUrole{w}{  }\DUrole{n}{ivec}}{}%
15641\pysigstopmultiline
15642\end{fulllineitems}
15643
15644\begin{quote}\begin{description}
15645\item[{param}] \leavevmode
15646\sphinxAtStartPar
15647\sphinxstylestrong{context}
15648
15649\sphinxAtStartPar
15650\sphinxstylestrong{inptr}
15651
15652\sphinxAtStartPar
15653\sphinxstylestrong{outptr}
15654
15655\sphinxAtStartPar
15656\sphinxstylestrong{size}
15657
15658\sphinxAtStartPar
15659\sphinxstylestrong{eblock}
15660
15661\sphinxAtStartPar
15662\sphinxstylestrong{ivec}
15663
15664\end{description}\end{quote}
15665
15666\sphinxAtStartPar
15667DEPRECATED Replaced by krb5\_c\_* API family.
15668
15669
15670\subsubsection{krb5\_decrypt}
15671\label{\detokenize{appdev/refs/api/krb5_decrypt:krb5-decrypt}}\label{\detokenize{appdev/refs/api/krb5_decrypt::doc}}\index{krb5\_decrypt (C function)@\spxentry{krb5\_decrypt}\spxextra{C function}}
15672
15673\begin{fulllineitems}
15674\phantomsection\label{\detokenize{appdev/refs/api/krb5_decrypt:c.krb5_decrypt}}%
15675\pysigstartmultiline
15676\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_decrypt}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_pointer}}}}\DUrole{w}{  }\DUrole{n}{inptr}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{\DUrole{n}{krb5\_pointer}}}}\DUrole{w}{  }\DUrole{n}{outptr}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{size}, {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{\DUrole{n}{krb5\_encrypt\_block}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{eblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{\DUrole{n}{krb5\_pointer}}}}\DUrole{w}{  }\DUrole{n}{ivec}}{}%
15677\pysigstopmultiline
15678\end{fulllineitems}
15679
15680\begin{quote}\begin{description}
15681\item[{param}] \leavevmode
15682\sphinxAtStartPar
15683\sphinxstylestrong{context}
15684
15685\sphinxAtStartPar
15686\sphinxstylestrong{inptr}
15687
15688\sphinxAtStartPar
15689\sphinxstylestrong{outptr}
15690
15691\sphinxAtStartPar
15692\sphinxstylestrong{size}
15693
15694\sphinxAtStartPar
15695\sphinxstylestrong{eblock}
15696
15697\sphinxAtStartPar
15698\sphinxstylestrong{ivec}
15699
15700\end{description}\end{quote}
15701
15702\sphinxAtStartPar
15703DEPRECATED Replaced by krb5\_c\_* API family.
15704
15705
15706\subsubsection{krb5\_eblock\_enctype}
15707\label{\detokenize{appdev/refs/api/krb5_eblock_enctype:krb5-eblock-enctype}}\label{\detokenize{appdev/refs/api/krb5_eblock_enctype::doc}}\index{krb5\_eblock\_enctype (C function)@\spxentry{krb5\_eblock\_enctype}\spxextra{C function}}
15708
15709\begin{fulllineitems}
15710\phantomsection\label{\detokenize{appdev/refs/api/krb5_eblock_enctype:c.krb5_eblock_enctype}}%
15711\pysigstartmultiline
15712\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_eblock\_enctype}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{\DUrole{n}{krb5\_encrypt\_block}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{eblock}}{}%
15713\pysigstopmultiline
15714\end{fulllineitems}
15715
15716\begin{quote}\begin{description}
15717\item[{param}] \leavevmode
15718\sphinxAtStartPar
15719\sphinxstylestrong{context}
15720
15721\sphinxAtStartPar
15722\sphinxstylestrong{eblock}
15723
15724\end{description}\end{quote}
15725
15726\sphinxAtStartPar
15727DEPRECATED Replaced by krb5\_c\_* API family.
15728
15729
15730\subsubsection{krb5\_encrypt\_size}
15731\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)@\spxentry{krb5\_encrypt\_size}\spxextra{C function}}
15732
15733\begin{fulllineitems}
15734\phantomsection\label{\detokenize{appdev/refs/api/krb5_encrypt_size:c.krb5_encrypt_size}}%
15735\pysigstartmultiline
15736\pysiglinewithargsret{\DUrole{n}{size\_t}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_encrypt\_size}}}}{\DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{length}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{crypto}}{}%
15737\pysigstopmultiline
15738\end{fulllineitems}
15739
15740\begin{quote}\begin{description}
15741\item[{param}] \leavevmode
15742\sphinxAtStartPar
15743\sphinxstylestrong{length}
15744
15745\sphinxAtStartPar
15746\sphinxstylestrong{crypto}
15747
15748\end{description}\end{quote}
15749
15750\sphinxAtStartPar
15751DEPRECATED Replaced by krb5\_c\_* API family.
15752
15753
15754\subsubsection{krb5\_finish\_key}
15755\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)@\spxentry{krb5\_finish\_key}\spxextra{C function}}
15756
15757\begin{fulllineitems}
15758\phantomsection\label{\detokenize{appdev/refs/api/krb5_finish_key:c.krb5_finish_key}}%
15759\pysigstartmultiline
15760\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_finish\_key}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{\DUrole{n}{krb5\_encrypt\_block}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{eblock}}{}%
15761\pysigstopmultiline
15762\end{fulllineitems}
15763
15764\begin{quote}\begin{description}
15765\item[{param}] \leavevmode
15766\sphinxAtStartPar
15767\sphinxstylestrong{context}
15768
15769\sphinxAtStartPar
15770\sphinxstylestrong{eblock}
15771
15772\end{description}\end{quote}
15773
15774\sphinxAtStartPar
15775DEPRECATED Replaced by krb5\_c\_* API family.
15776
15777
15778\subsubsection{krb5\_finish\_random\_key}
15779\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)@\spxentry{krb5\_finish\_random\_key}\spxextra{C function}}
15780
15781\begin{fulllineitems}
15782\phantomsection\label{\detokenize{appdev/refs/api/krb5_finish_random_key:c.krb5_finish_random_key}}%
15783\pysigstartmultiline
15784\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_finish\_random\_key}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{\DUrole{n}{krb5\_encrypt\_block}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{eblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{\DUrole{n}{krb5\_pointer}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ptr}}{}%
15785\pysigstopmultiline
15786\end{fulllineitems}
15787
15788\begin{quote}\begin{description}
15789\item[{param}] \leavevmode
15790\sphinxAtStartPar
15791\sphinxstylestrong{context}
15792
15793\sphinxAtStartPar
15794\sphinxstylestrong{eblock}
15795
15796\sphinxAtStartPar
15797\sphinxstylestrong{ptr}
15798
15799\end{description}\end{quote}
15800
15801\sphinxAtStartPar
15802DEPRECATED Replaced by krb5\_c\_* API family.
15803
15804
15805\subsubsection{krb5\_cc\_gen\_new}
15806\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)@\spxentry{krb5\_cc\_gen\_new}\spxextra{C function}}
15807
15808\begin{fulllineitems}
15809\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_gen_new:c.krb5_cc_gen_new}}%
15810\pysigstartmultiline
15811\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_gen\_new}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cache}}{}%
15812\pysigstopmultiline
15813\end{fulllineitems}
15814
15815\begin{quote}\begin{description}
15816\item[{param}] \leavevmode
15817\sphinxAtStartPar
15818\sphinxstylestrong{context}
15819
15820\sphinxAtStartPar
15821\sphinxstylestrong{cache}
15822
15823\end{description}\end{quote}
15824
15825
15826\subsubsection{krb5\_get\_credentials\_renew}
15827\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)@\spxentry{krb5\_get\_credentials\_renew}\spxextra{C function}}
15828
15829\begin{fulllineitems}
15830\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_credentials_renew:c.krb5_get_credentials_renew}}%
15831\pysigstartmultiline
15832\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_credentials\_renew}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\DUrole{n}{options}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{in\_creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{out\_creds}}{}%
15833\pysigstopmultiline
15834\end{fulllineitems}
15835
15836\begin{quote}\begin{description}
15837\item[{param}] \leavevmode
15838\sphinxAtStartPar
15839\sphinxstylestrong{context}
15840
15841\sphinxAtStartPar
15842\sphinxstylestrong{options}
15843
15844\sphinxAtStartPar
15845\sphinxstylestrong{ccache}
15846
15847\sphinxAtStartPar
15848\sphinxstylestrong{in\_creds}
15849
15850\sphinxAtStartPar
15851\sphinxstylestrong{out\_creds}
15852
15853\end{description}\end{quote}
15854
15855\sphinxAtStartPar
15856DEPRECATED Replaced by krb5\_get\_renewed\_creds.
15857
15858
15859\subsubsection{krb5\_get\_credentials\_validate}
15860\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)@\spxentry{krb5\_get\_credentials\_validate}\spxextra{C function}}
15861
15862\begin{fulllineitems}
15863\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_credentials_validate:c.krb5_get_credentials_validate}}%
15864\pysigstartmultiline
15865\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_credentials\_validate}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\DUrole{n}{options}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{in\_creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{out\_creds}}{}%
15866\pysigstopmultiline
15867\end{fulllineitems}
15868
15869\begin{quote}\begin{description}
15870\item[{param}] \leavevmode
15871\sphinxAtStartPar
15872\sphinxstylestrong{context}
15873
15874\sphinxAtStartPar
15875\sphinxstylestrong{options}
15876
15877\sphinxAtStartPar
15878\sphinxstylestrong{ccache}
15879
15880\sphinxAtStartPar
15881\sphinxstylestrong{in\_creds}
15882
15883\sphinxAtStartPar
15884\sphinxstylestrong{out\_creds}
15885
15886\end{description}\end{quote}
15887
15888\sphinxAtStartPar
15889DEPRECATED Replaced by krb5\_get\_validated\_creds.
15890
15891
15892\subsubsection{krb5\_get\_in\_tkt\_with\_password}
15893\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)@\spxentry{krb5\_get\_in\_tkt\_with\_password}\spxextra{C function}}
15894
15895\begin{fulllineitems}
15896\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_password:c.krb5_get_in_tkt_with_password}}%
15897\pysigstartmultiline
15898\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_in\_tkt\_with\_password}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\DUrole{n}{options}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{k}{const}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{addrs}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ktypes}, {\hyperref[\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}]{\sphinxcrossref{\DUrole{n}{krb5\_preauthtype}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{pre\_auth\_types}, \DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{password}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_rep}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{ret\_as\_reply}}{}%
15899\pysigstopmultiline
15900\end{fulllineitems}
15901
15902\begin{quote}\begin{description}
15903\item[{param}] \leavevmode
15904\sphinxAtStartPar
15905\sphinxstylestrong{context}
15906
15907\sphinxAtStartPar
15908\sphinxstylestrong{options}
15909
15910\sphinxAtStartPar
15911\sphinxstylestrong{addrs}
15912
15913\sphinxAtStartPar
15914\sphinxstylestrong{ktypes}
15915
15916\sphinxAtStartPar
15917\sphinxstylestrong{pre\_auth\_types}
15918
15919\sphinxAtStartPar
15920\sphinxstylestrong{password}
15921
15922\sphinxAtStartPar
15923\sphinxstylestrong{ccache}
15924
15925\sphinxAtStartPar
15926\sphinxstylestrong{creds}
15927
15928\sphinxAtStartPar
15929\sphinxstylestrong{ret\_as\_reply}
15930
15931\end{description}\end{quote}
15932
15933\sphinxAtStartPar
15934DEPRECATED Replaced by krb5\_get\_init\_creds\_password().
15935
15936
15937\subsubsection{krb5\_get\_in\_tkt\_with\_skey}
15938\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)@\spxentry{krb5\_get\_in\_tkt\_with\_skey}\spxextra{C function}}
15939
15940\begin{fulllineitems}
15941\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_skey:c.krb5_get_in_tkt_with_skey}}%
15942\pysigstartmultiline
15943\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_in\_tkt\_with\_skey}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\DUrole{n}{options}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{k}{const}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{addrs}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ktypes}, {\hyperref[\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}]{\sphinxcrossref{\DUrole{n}{krb5\_preauthtype}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{pre\_auth\_types}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_rep}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{ret\_as\_reply}}{}%
15944\pysigstopmultiline
15945\end{fulllineitems}
15946
15947\begin{quote}\begin{description}
15948\item[{param}] \leavevmode
15949\sphinxAtStartPar
15950\sphinxstylestrong{context}
15951
15952\sphinxAtStartPar
15953\sphinxstylestrong{options}
15954
15955\sphinxAtStartPar
15956\sphinxstylestrong{addrs}
15957
15958\sphinxAtStartPar
15959\sphinxstylestrong{ktypes}
15960
15961\sphinxAtStartPar
15962\sphinxstylestrong{pre\_auth\_types}
15963
15964\sphinxAtStartPar
15965\sphinxstylestrong{key}
15966
15967\sphinxAtStartPar
15968\sphinxstylestrong{ccache}
15969
15970\sphinxAtStartPar
15971\sphinxstylestrong{creds}
15972
15973\sphinxAtStartPar
15974\sphinxstylestrong{ret\_as\_reply}
15975
15976\end{description}\end{quote}
15977
15978\sphinxAtStartPar
15979DEPRECATED Replaced by krb5\_get\_init\_creds().
15980
15981
15982\subsubsection{krb5\_get\_in\_tkt\_with\_keytab}
15983\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)@\spxentry{krb5\_get\_in\_tkt\_with\_keytab}\spxextra{C function}}
15984
15985\begin{fulllineitems}
15986\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_keytab:c.krb5_get_in_tkt_with_keytab}}%
15987\pysigstartmultiline
15988\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_in\_tkt\_with\_keytab}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\DUrole{n}{options}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{k}{const}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{addrs}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ktypes}, {\hyperref[\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}]{\sphinxcrossref{\DUrole{n}{krb5\_preauthtype}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{pre\_auth\_types}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab}}}}\DUrole{w}{  }\DUrole{n}{arg\_keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{\DUrole{n}{krb5\_ccache}}}}\DUrole{w}{  }\DUrole{n}{ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_rep}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{ret\_as\_reply}}{}%
15989\pysigstopmultiline
15990\end{fulllineitems}
15991
15992\begin{quote}\begin{description}
15993\item[{param}] \leavevmode
15994\sphinxAtStartPar
15995\sphinxstylestrong{context}
15996
15997\sphinxAtStartPar
15998\sphinxstylestrong{options}
15999
16000\sphinxAtStartPar
16001\sphinxstylestrong{addrs}
16002
16003\sphinxAtStartPar
16004\sphinxstylestrong{ktypes}
16005
16006\sphinxAtStartPar
16007\sphinxstylestrong{pre\_auth\_types}
16008
16009\sphinxAtStartPar
16010\sphinxstylestrong{arg\_keytab}
16011
16012\sphinxAtStartPar
16013\sphinxstylestrong{ccache}
16014
16015\sphinxAtStartPar
16016\sphinxstylestrong{creds}
16017
16018\sphinxAtStartPar
16019\sphinxstylestrong{ret\_as\_reply}
16020
16021\end{description}\end{quote}
16022
16023\sphinxAtStartPar
16024DEPRECATED Replaced by krb5\_get\_init\_creds\_keytab().
16025
16026
16027\subsubsection{krb5\_get\_init\_creds\_opt\_init}
16028\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)@\spxentry{krb5\_get\_init\_creds\_opt\_init}\spxextra{C function}}
16029
16030\begin{fulllineitems}
16031\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_init:c.krb5_get_init_creds_opt_init}}%
16032\pysigstartmultiline
16033\pysiglinewithargsret{\DUrole{kt}{void}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_opt\_init}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{opt}}{}%
16034\pysigstopmultiline
16035\end{fulllineitems}
16036
16037\begin{quote}\begin{description}
16038\item[{param}] \leavevmode
16039\sphinxAtStartPar
16040\sphinxstylestrong{opt}
16041
16042\end{description}\end{quote}
16043
16044\sphinxAtStartPar
16045DEPRECATED Use krb5\_get\_init\_creds\_opt\_alloc() instead.
16046
16047
16048\subsubsection{krb5\_init\_random\_key}
16049\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)@\spxentry{krb5\_init\_random\_key}\spxextra{C function}}
16050
16051\begin{fulllineitems}
16052\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_random_key:c.krb5_init_random_key}}%
16053\pysigstartmultiline
16054\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_init\_random\_key}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{\DUrole{n}{krb5\_encrypt\_block}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{eblock}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{keyblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{\DUrole{n}{krb5\_pointer}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{ptr}}{}%
16055\pysigstopmultiline
16056\end{fulllineitems}
16057
16058\begin{quote}\begin{description}
16059\item[{param}] \leavevmode
16060\sphinxAtStartPar
16061\sphinxstylestrong{context}
16062
16063\sphinxAtStartPar
16064\sphinxstylestrong{eblock}
16065
16066\sphinxAtStartPar
16067\sphinxstylestrong{keyblock}
16068
16069\sphinxAtStartPar
16070\sphinxstylestrong{ptr}
16071
16072\end{description}\end{quote}
16073
16074\sphinxAtStartPar
16075DEPRECATED Replaced by krb5\_c\_* API family.
16076
16077
16078\subsubsection{krb5\_kt\_free\_entry}
16079\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)@\spxentry{krb5\_kt\_free\_entry}\spxextra{C function}}
16080
16081\begin{fulllineitems}
16082\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_free_entry:c.krb5_kt_free_entry}}%
16083\pysigstartmultiline
16084\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kt\_free\_entry}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab\_entry}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{entry}}{}%
16085\pysigstopmultiline
16086\end{fulllineitems}
16087
16088\begin{quote}\begin{description}
16089\item[{param}] \leavevmode
16090\sphinxAtStartPar
16091\sphinxstylestrong{context}
16092
16093\sphinxAtStartPar
16094\sphinxstylestrong{entry}
16095
16096\end{description}\end{quote}
16097
16098\sphinxAtStartPar
16099DEPRECATED Use krb5\_free\_keytab\_entry\_contents instead.
16100
16101
16102\subsubsection{krb5\_random\_key}
16103\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)@\spxentry{krb5\_random\_key}\spxextra{C function}}
16104
16105\begin{fulllineitems}
16106\phantomsection\label{\detokenize{appdev/refs/api/krb5_random_key:c.krb5_random_key}}%
16107\pysigstartmultiline
16108\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_random\_key}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{\DUrole{n}{krb5\_encrypt\_block}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{eblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{\DUrole{n}{krb5\_pointer}}}}\DUrole{w}{  }\DUrole{n}{ptr}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\DUrole{n}{keyblock}}{}%
16109\pysigstopmultiline
16110\end{fulllineitems}
16111
16112\begin{quote}\begin{description}
16113\item[{param}] \leavevmode
16114\sphinxAtStartPar
16115\sphinxstylestrong{context}
16116
16117\sphinxAtStartPar
16118\sphinxstylestrong{eblock}
16119
16120\sphinxAtStartPar
16121\sphinxstylestrong{ptr}
16122
16123\sphinxAtStartPar
16124\sphinxstylestrong{keyblock}
16125
16126\end{description}\end{quote}
16127
16128\sphinxAtStartPar
16129DEPRECATED Replaced by krb5\_c\_* API family.
16130
16131
16132\subsubsection{krb5\_process\_key}
16133\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)@\spxentry{krb5\_process\_key}\spxextra{C function}}
16134
16135\begin{fulllineitems}
16136\phantomsection\label{\detokenize{appdev/refs/api/krb5_process_key:c.krb5_process_key}}%
16137\pysigstartmultiline
16138\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_process\_key}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{\DUrole{n}{krb5\_encrypt\_block}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{eblock}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{key}}{}%
16139\pysigstopmultiline
16140\end{fulllineitems}
16141
16142\begin{quote}\begin{description}
16143\item[{param}] \leavevmode
16144\sphinxAtStartPar
16145\sphinxstylestrong{context}
16146
16147\sphinxAtStartPar
16148\sphinxstylestrong{eblock}
16149
16150\sphinxAtStartPar
16151\sphinxstylestrong{key}
16152
16153\end{description}\end{quote}
16154
16155\sphinxAtStartPar
16156DEPRECATED Replaced by krb5\_c\_* API family.
16157
16158
16159\subsubsection{krb5\_string\_to\_key}
16160\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)@\spxentry{krb5\_string\_to\_key}\spxextra{C function}}
16161
16162\begin{fulllineitems}
16163\phantomsection\label{\detokenize{appdev/refs/api/krb5_string_to_key:c.krb5_string_to_key}}%
16164\pysigstartmultiline
16165\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_string\_to\_key}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{\DUrole{n}{krb5\_encrypt\_block}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{eblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{keyblock}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{data}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{salt}}{}%
16166\pysigstopmultiline
16167\end{fulllineitems}
16168
16169\begin{quote}\begin{description}
16170\item[{param}] \leavevmode
16171\sphinxAtStartPar
16172\sphinxstylestrong{context}
16173
16174\sphinxAtStartPar
16175\sphinxstylestrong{eblock}
16176
16177\sphinxAtStartPar
16178\sphinxstylestrong{keyblock}
16179
16180\sphinxAtStartPar
16181\sphinxstylestrong{data}
16182
16183\sphinxAtStartPar
16184\sphinxstylestrong{salt}
16185
16186\end{description}\end{quote}
16187
16188\sphinxAtStartPar
16189DEPRECATED See krb5\_c\_string\_to\_key()
16190
16191
16192\subsubsection{krb5\_use\_enctype}
16193\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)@\spxentry{krb5\_use\_enctype}\spxextra{C function}}
16194
16195\begin{fulllineitems}
16196\phantomsection\label{\detokenize{appdev/refs/api/krb5_use_enctype:c.krb5_use_enctype}}%
16197\pysigstartmultiline
16198\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_use\_enctype}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{\DUrole{n}{krb5\_encrypt\_block}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{eblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{n}{enctype}}{}%
16199\pysigstopmultiline
16200\end{fulllineitems}
16201
16202\begin{quote}\begin{description}
16203\item[{param}] \leavevmode
16204\sphinxAtStartPar
16205\sphinxstylestrong{context}
16206
16207\sphinxAtStartPar
16208\sphinxstylestrong{eblock}
16209
16210\sphinxAtStartPar
16211\sphinxstylestrong{enctype}
16212
16213\end{description}\end{quote}
16214
16215\sphinxAtStartPar
16216DEPRECATED Replaced by krb5\_c\_* API family.
16217
16218
16219\subsubsection{krb5\_verify\_checksum}
16220\label{\detokenize{appdev/refs/api/krb5_verify_checksum:krb5-verify-checksum}}\label{\detokenize{appdev/refs/api/krb5_verify_checksum::doc}}\index{krb5\_verify\_checksum (C function)@\spxentry{krb5\_verify\_checksum}\spxextra{C function}}
16221
16222\begin{fulllineitems}
16223\phantomsection\label{\detokenize{appdev/refs/api/krb5_verify_checksum:c.krb5_verify_checksum}}%
16224\pysigstartmultiline
16225\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{\DUrole{n}{krb5\_error\_code}}}}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_verify\_checksum}}}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{\DUrole{n}{krb5\_context}}}}\DUrole{w}{  }\DUrole{n}{context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{\DUrole{n}{krb5\_cksumtype}}}}\DUrole{w}{  }\DUrole{n}{ctype}, \DUrole{k}{const}\DUrole{w}{  }{\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{\DUrole{n}{krb5\_checksum}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{n}{cksum}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_pointer}}}}\DUrole{w}{  }\DUrole{n}{in}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{in\_length}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_pointer}}}}\DUrole{w}{  }\DUrole{n}{seed}, \DUrole{n}{size\_t}\DUrole{w}{  }\DUrole{n}{seed\_length}}{}%
16226\pysigstopmultiline
16227\end{fulllineitems}
16228
16229\begin{quote}\begin{description}
16230\item[{param}] \leavevmode
16231\sphinxAtStartPar
16232\sphinxstylestrong{context}
16233
16234\sphinxAtStartPar
16235\sphinxstylestrong{ctype}
16236
16237\sphinxAtStartPar
16238\sphinxstylestrong{cksum}
16239
16240\sphinxAtStartPar
16241\sphinxstylestrong{in}
16242
16243\sphinxAtStartPar
16244\sphinxstylestrong{in\_length}
16245
16246\sphinxAtStartPar
16247\sphinxstylestrong{seed}
16248
16249\sphinxAtStartPar
16250\sphinxstylestrong{seed\_length}
16251
16252\end{description}\end{quote}
16253
16254\sphinxAtStartPar
16255DEPRECATED See krb5\_c\_verify\_checksum()
16256
16257
16258\section{krb5 types and structures}
16259\label{\detokenize{appdev/refs/types/index:krb5-types-and-structures}}\label{\detokenize{appdev/refs/types/index::doc}}
16260
16261\subsection{Public}
16262\label{\detokenize{appdev/refs/types/index:public}}
16263
16264\subsubsection{krb5\_address}
16265\label{\detokenize{appdev/refs/types/krb5_address:krb5-address}}\label{\detokenize{appdev/refs/types/krb5_address:krb5-address-struct}}\label{\detokenize{appdev/refs/types/krb5_address::doc}}\index{krb5\_address (C type)@\spxentry{krb5\_address}\spxextra{C type}}
16266
16267\begin{fulllineitems}
16268\phantomsection\label{\detokenize{appdev/refs/types/krb5_address:c.krb5_address}}%
16269\pysigstartmultiline
16270\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_address}}}}%
16271\pysigstopmultiline
16272\end{fulllineitems}
16273
16274
16275\sphinxAtStartPar
16276Structure for address.
16277
16278
16279\paragraph{Declaration}
16280\label{\detokenize{appdev/refs/types/krb5_address:declaration}}
16281\sphinxAtStartPar
16282typedef struct \_krb5\_address krb5\_address
16283
16284
16285\paragraph{Members}
16286\label{\detokenize{appdev/refs/types/krb5_address:members}}\index{krb5\_address.magic (C member)@\spxentry{krb5\_address.magic}\spxextra{C member}}
16287
16288\begin{fulllineitems}
16289\phantomsection\label{\detokenize{appdev/refs/types/krb5_address:c.krb5_address.magic}}%
16290\pysigstartmultiline
16291\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
16292\pysigstopmultiline
16293\end{fulllineitems}
16294
16295\index{krb5\_address.addrtype (C member)@\spxentry{krb5\_address.addrtype}\spxextra{C member}}
16296
16297\begin{fulllineitems}
16298\phantomsection\label{\detokenize{appdev/refs/types/krb5_address:c.krb5_address.addrtype}}%
16299\pysigstartmultiline
16300\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_addrtype:c.krb5_addrtype}]{\sphinxcrossref{\DUrole{n}{krb5\_addrtype}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{addrtype}}}}%
16301\pysigstopmultiline
16302\end{fulllineitems}
16303
16304\index{krb5\_address.length (C member)@\spxentry{krb5\_address.length}\spxextra{C member}}
16305
16306\begin{fulllineitems}
16307\phantomsection\label{\detokenize{appdev/refs/types/krb5_address:c.krb5_address.length}}%
16308\pysigstartmultiline
16309\pysigline{\DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{length}}}}%
16310\pysigstopmultiline
16311\end{fulllineitems}
16312
16313\index{krb5\_address.contents (C member)@\spxentry{krb5\_address.contents}\spxextra{C member}}
16314
16315\begin{fulllineitems}
16316\phantomsection\label{\detokenize{appdev/refs/types/krb5_address:c.krb5_address.contents}}%
16317\pysigstartmultiline
16318\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{\DUrole{n}{krb5\_octet}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{contents}}}}%
16319\pysigstopmultiline
16320\end{fulllineitems}
16321
16322
16323
16324\subsubsection{krb5\_addrtype}
16325\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)@\spxentry{krb5\_addrtype}\spxextra{C type}}
16326
16327\begin{fulllineitems}
16328\phantomsection\label{\detokenize{appdev/refs/types/krb5_addrtype:c.krb5_addrtype}}%
16329\pysigstartmultiline
16330\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_addrtype}}}}%
16331\pysigstopmultiline
16332\end{fulllineitems}
16333
16334
16335
16336\paragraph{Declaration}
16337\label{\detokenize{appdev/refs/types/krb5_addrtype:declaration}}
16338\sphinxAtStartPar
16339typedef krb5\_int32 krb5\_addrtype
16340
16341
16342\subsubsection{krb5\_ap\_req}
16343\label{\detokenize{appdev/refs/types/krb5_ap_req:krb5-ap-req}}\label{\detokenize{appdev/refs/types/krb5_ap_req:krb5-ap-req-struct}}\label{\detokenize{appdev/refs/types/krb5_ap_req::doc}}\index{krb5\_ap\_req (C type)@\spxentry{krb5\_ap\_req}\spxextra{C type}}
16344
16345\begin{fulllineitems}
16346\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req}}%
16347\pysigstartmultiline
16348\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_ap\_req}}}}%
16349\pysigstopmultiline
16350\end{fulllineitems}
16351
16352
16353\sphinxAtStartPar
16354Authentication header.
16355
16356
16357\paragraph{Declaration}
16358\label{\detokenize{appdev/refs/types/krb5_ap_req:declaration}}
16359\sphinxAtStartPar
16360typedef struct \_krb5\_ap\_req krb5\_ap\_req
16361
16362
16363\paragraph{Members}
16364\label{\detokenize{appdev/refs/types/krb5_ap_req:members}}\index{krb5\_ap\_req.magic (C member)@\spxentry{krb5\_ap\_req.magic}\spxextra{C member}}
16365
16366\begin{fulllineitems}
16367\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req.magic}}%
16368\pysigstartmultiline
16369\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req}]{\sphinxcrossref{\DUrole{n}{krb5\_ap\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
16370\pysigstopmultiline
16371\end{fulllineitems}
16372
16373\index{krb5\_ap\_req.ap\_options (C member)@\spxentry{krb5\_ap\_req.ap\_options}\spxextra{C member}}
16374
16375\begin{fulllineitems}
16376\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req.ap_options}}%
16377\pysigstartmultiline
16378\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req}]{\sphinxcrossref{\DUrole{n}{krb5\_ap\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{ap\_options}}}}%
16379\pysigstopmultiline
16380\sphinxAtStartPar
16381Requested options.
16382
16383\end{fulllineitems}
16384
16385\index{krb5\_ap\_req.ticket (C member)@\spxentry{krb5\_ap\_req.ticket}\spxextra{C member}}
16386
16387\begin{fulllineitems}
16388\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req.ticket}}%
16389\pysigstartmultiline
16390\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req}]{\sphinxcrossref{\DUrole{n}{krb5\_ap\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{ticket}}}}%
16391\pysigstopmultiline
16392\sphinxAtStartPar
16393Ticket.
16394
16395\end{fulllineitems}
16396
16397\index{krb5\_ap\_req.authenticator (C member)@\spxentry{krb5\_ap\_req.authenticator}\spxextra{C member}}
16398
16399\begin{fulllineitems}
16400\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req.authenticator}}%
16401\pysigstartmultiline
16402\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_data}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req}]{\sphinxcrossref{\DUrole{n}{krb5\_ap\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{authenticator}}}}%
16403\pysigstopmultiline
16404\sphinxAtStartPar
16405Encrypted authenticator.
16406
16407\end{fulllineitems}
16408
16409
16410
16411\subsubsection{krb5\_ap\_rep}
16412\label{\detokenize{appdev/refs/types/krb5_ap_rep:krb5-ap-rep}}\label{\detokenize{appdev/refs/types/krb5_ap_rep:krb5-ap-rep-struct}}\label{\detokenize{appdev/refs/types/krb5_ap_rep::doc}}\index{krb5\_ap\_rep (C type)@\spxentry{krb5\_ap\_rep}\spxextra{C type}}
16413
16414\begin{fulllineitems}
16415\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep:c.krb5_ap_rep}}%
16416\pysigstartmultiline
16417\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_ap\_rep}}}}%
16418\pysigstopmultiline
16419\end{fulllineitems}
16420
16421
16422\sphinxAtStartPar
16423C representaton of AP\sphinxhyphen{}REP message.
16424
16425\sphinxAtStartPar
16426The server’s response to a client’s request for mutual authentication.
16427
16428
16429\paragraph{Declaration}
16430\label{\detokenize{appdev/refs/types/krb5_ap_rep:declaration}}
16431\sphinxAtStartPar
16432typedef struct \_krb5\_ap\_rep krb5\_ap\_rep
16433
16434
16435\paragraph{Members}
16436\label{\detokenize{appdev/refs/types/krb5_ap_rep:members}}\index{krb5\_ap\_rep.magic (C member)@\spxentry{krb5\_ap\_rep.magic}\spxextra{C member}}
16437
16438\begin{fulllineitems}
16439\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep:c.krb5_ap_rep.magic}}%
16440\pysigstartmultiline
16441\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_ap_rep:c.krb5_ap_rep}]{\sphinxcrossref{\DUrole{n}{krb5\_ap\_rep}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
16442\pysigstopmultiline
16443\end{fulllineitems}
16444
16445\index{krb5\_ap\_rep.enc\_part (C member)@\spxentry{krb5\_ap\_rep.enc\_part}\spxextra{C member}}
16446
16447\begin{fulllineitems}
16448\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep:c.krb5_ap_rep.enc_part}}%
16449\pysigstartmultiline
16450\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_data}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_ap_rep:c.krb5_ap_rep}]{\sphinxcrossref{\DUrole{n}{krb5\_ap\_rep}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{enc\_part}}}}%
16451\pysigstopmultiline
16452\sphinxAtStartPar
16453Ciphertext of ApRepEncPart.
16454
16455\end{fulllineitems}
16456
16457
16458
16459\subsubsection{krb5\_ap\_rep\_enc\_part}
16460\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:krb5-ap-rep-enc-part}}\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}}\index{krb5\_ap\_rep\_enc\_part (C type)@\spxentry{krb5\_ap\_rep\_enc\_part}\spxextra{C type}}
16461
16462\begin{fulllineitems}
16463\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part}}%
16464\pysigstartmultiline
16465\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_ap\_rep\_enc\_part}}}}%
16466\pysigstopmultiline
16467\end{fulllineitems}
16468
16469
16470\sphinxAtStartPar
16471Cleartext that is encrypted and put into \sphinxcode{\sphinxupquote{\_krb5\_ap\_rep}} .
16472
16473
16474\paragraph{Declaration}
16475\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:declaration}}
16476\sphinxAtStartPar
16477typedef struct \_krb5\_ap\_rep\_enc\_part krb5\_ap\_rep\_enc\_part
16478
16479
16480\paragraph{Members}
16481\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:members}}\index{krb5\_ap\_rep\_enc\_part.magic (C member)@\spxentry{krb5\_ap\_rep\_enc\_part.magic}\spxextra{C member}}
16482
16483\begin{fulllineitems}
16484\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part.magic}}%
16485\pysigstartmultiline
16486\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part}]{\sphinxcrossref{\DUrole{n}{krb5\_ap\_rep\_enc\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
16487\pysigstopmultiline
16488\end{fulllineitems}
16489
16490\index{krb5\_ap\_rep\_enc\_part.ctime (C member)@\spxentry{krb5\_ap\_rep\_enc\_part.ctime}\spxextra{C member}}
16491
16492\begin{fulllineitems}
16493\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part.ctime}}%
16494\pysigstartmultiline
16495\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part}]{\sphinxcrossref{\DUrole{n}{krb5\_ap\_rep\_enc\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{ctime}}}}%
16496\pysigstopmultiline
16497\sphinxAtStartPar
16498Client time, seconds portion.
16499
16500\end{fulllineitems}
16501
16502\index{krb5\_ap\_rep\_enc\_part.cusec (C member)@\spxentry{krb5\_ap\_rep\_enc\_part.cusec}\spxextra{C member}}
16503
16504\begin{fulllineitems}
16505\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part.cusec}}%
16506\pysigstartmultiline
16507\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part}]{\sphinxcrossref{\DUrole{n}{krb5\_ap\_rep\_enc\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{cusec}}}}%
16508\pysigstopmultiline
16509\sphinxAtStartPar
16510Client time, microseconds portion.
16511
16512\end{fulllineitems}
16513
16514\index{krb5\_ap\_rep\_enc\_part.subkey (C member)@\spxentry{krb5\_ap\_rep\_enc\_part.subkey}\spxextra{C member}}
16515
16516\begin{fulllineitems}
16517\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part.subkey}}%
16518\pysigstartmultiline
16519\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part}]{\sphinxcrossref{\DUrole{n}{krb5\_ap\_rep\_enc\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{subkey}}}}%
16520\pysigstopmultiline
16521\sphinxAtStartPar
16522Subkey (optional)
16523
16524\end{fulllineitems}
16525
16526\index{krb5\_ap\_rep\_enc\_part.seq\_number (C member)@\spxentry{krb5\_ap\_rep\_enc\_part.seq\_number}\spxextra{C member}}
16527
16528\begin{fulllineitems}
16529\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part.seq_number}}%
16530\pysigstartmultiline
16531\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{\DUrole{n}{krb5\_ui\_4}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part}]{\sphinxcrossref{\DUrole{n}{krb5\_ap\_rep\_enc\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{seq\_number}}}}%
16532\pysigstopmultiline
16533\sphinxAtStartPar
16534Sequence number.
16535
16536\end{fulllineitems}
16537
16538
16539
16540\subsubsection{krb5\_authdata}
16541\label{\detokenize{appdev/refs/types/krb5_authdata:krb5-authdata}}\label{\detokenize{appdev/refs/types/krb5_authdata:krb5-authdata-struct}}\label{\detokenize{appdev/refs/types/krb5_authdata::doc}}\index{krb5\_authdata (C type)@\spxentry{krb5\_authdata}\spxextra{C type}}
16542
16543\begin{fulllineitems}
16544\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}}%
16545\pysigstartmultiline
16546\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_authdata}}}}%
16547\pysigstopmultiline
16548\end{fulllineitems}
16549
16550
16551\sphinxAtStartPar
16552Structure for auth data.
16553
16554
16555\paragraph{Declaration}
16556\label{\detokenize{appdev/refs/types/krb5_authdata:declaration}}
16557\sphinxAtStartPar
16558typedef struct \_krb5\_authdata krb5\_authdata
16559
16560
16561\paragraph{Members}
16562\label{\detokenize{appdev/refs/types/krb5_authdata:members}}\index{krb5\_authdata.magic (C member)@\spxentry{krb5\_authdata.magic}\spxextra{C member}}
16563
16564\begin{fulllineitems}
16565\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata.magic}}%
16566\pysigstartmultiline
16567\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
16568\pysigstopmultiline
16569\end{fulllineitems}
16570
16571\index{krb5\_authdata.ad\_type (C member)@\spxentry{krb5\_authdata.ad\_type}\spxextra{C member}}
16572
16573\begin{fulllineitems}
16574\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata.ad_type}}%
16575\pysigstartmultiline
16576\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_authdatatype:c.krb5_authdatatype}]{\sphinxcrossref{\DUrole{n}{krb5\_authdatatype}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{ad\_type}}}}%
16577\pysigstopmultiline
16578\sphinxAtStartPar
16579ADTYPE.
16580
16581\end{fulllineitems}
16582
16583\index{krb5\_authdata.length (C member)@\spxentry{krb5\_authdata.length}\spxextra{C member}}
16584
16585\begin{fulllineitems}
16586\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata.length}}%
16587\pysigstartmultiline
16588\pysigline{\DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{length}}}}%
16589\pysigstopmultiline
16590\sphinxAtStartPar
16591Length of data.
16592
16593\end{fulllineitems}
16594
16595\index{krb5\_authdata.contents (C member)@\spxentry{krb5\_authdata.contents}\spxextra{C member}}
16596
16597\begin{fulllineitems}
16598\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata.contents}}%
16599\pysigstartmultiline
16600\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{\DUrole{n}{krb5\_octet}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{contents}}}}%
16601\pysigstopmultiline
16602\sphinxAtStartPar
16603Data.
16604
16605\end{fulllineitems}
16606
16607
16608
16609\subsubsection{krb5\_authdatatype}
16610\label{\detokenize{appdev/refs/types/krb5_authdatatype:krb5-authdatatype}}\label{\detokenize{appdev/refs/types/krb5_authdatatype:krb5-authdatatype-struct}}\label{\detokenize{appdev/refs/types/krb5_authdatatype::doc}}\index{krb5\_authdatatype (C type)@\spxentry{krb5\_authdatatype}\spxextra{C type}}
16611
16612\begin{fulllineitems}
16613\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdatatype:c.krb5_authdatatype}}%
16614\pysigstartmultiline
16615\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_authdatatype}}}}%
16616\pysigstopmultiline
16617\end{fulllineitems}
16618
16619
16620
16621\paragraph{Declaration}
16622\label{\detokenize{appdev/refs/types/krb5_authdatatype:declaration}}
16623\sphinxAtStartPar
16624typedef krb5\_int32 krb5\_authdatatype
16625
16626
16627\subsubsection{krb5\_authenticator}
16628\label{\detokenize{appdev/refs/types/krb5_authenticator:krb5-authenticator}}\label{\detokenize{appdev/refs/types/krb5_authenticator:krb5-authenticator-struct}}\label{\detokenize{appdev/refs/types/krb5_authenticator::doc}}\index{krb5\_authenticator (C type)@\spxentry{krb5\_authenticator}\spxextra{C type}}
16629
16630\begin{fulllineitems}
16631\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}}%
16632\pysigstartmultiline
16633\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_authenticator}}}}%
16634\pysigstopmultiline
16635\end{fulllineitems}
16636
16637
16638\sphinxAtStartPar
16639Ticket authenticator.
16640
16641\sphinxAtStartPar
16642The C representation of an unencrypted authenticator.
16643
16644
16645\paragraph{Declaration}
16646\label{\detokenize{appdev/refs/types/krb5_authenticator:declaration}}
16647\sphinxAtStartPar
16648typedef struct \_krb5\_authenticator krb5\_authenticator
16649
16650
16651\paragraph{Members}
16652\label{\detokenize{appdev/refs/types/krb5_authenticator:members}}\index{krb5\_authenticator.magic (C member)@\spxentry{krb5\_authenticator.magic}\spxextra{C member}}
16653
16654\begin{fulllineitems}
16655\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.magic}}%
16656\pysigstartmultiline
16657\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{\DUrole{n}{krb5\_authenticator}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
16658\pysigstopmultiline
16659\end{fulllineitems}
16660
16661\index{krb5\_authenticator.client (C member)@\spxentry{krb5\_authenticator.client}\spxextra{C member}}
16662
16663\begin{fulllineitems}
16664\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.client}}%
16665\pysigstartmultiline
16666\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{\DUrole{n}{krb5\_authenticator}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{client}}}}%
16667\pysigstopmultiline
16668\sphinxAtStartPar
16669client name/realm
16670
16671\end{fulllineitems}
16672
16673\index{krb5\_authenticator.checksum (C member)@\spxentry{krb5\_authenticator.checksum}\spxextra{C member}}
16674
16675\begin{fulllineitems}
16676\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.checksum}}%
16677\pysigstartmultiline
16678\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{\DUrole{n}{krb5\_checksum}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{\DUrole{n}{krb5\_authenticator}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{checksum}}}}%
16679\pysigstopmultiline
16680\sphinxAtStartPar
16681checksum, includes type, optional
16682
16683\end{fulllineitems}
16684
16685\index{krb5\_authenticator.cusec (C member)@\spxentry{krb5\_authenticator.cusec}\spxextra{C member}}
16686
16687\begin{fulllineitems}
16688\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.cusec}}%
16689\pysigstartmultiline
16690\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{\DUrole{n}{krb5\_authenticator}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{cusec}}}}%
16691\pysigstopmultiline
16692\sphinxAtStartPar
16693client usec portion
16694
16695\end{fulllineitems}
16696
16697\index{krb5\_authenticator.ctime (C member)@\spxentry{krb5\_authenticator.ctime}\spxextra{C member}}
16698
16699\begin{fulllineitems}
16700\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.ctime}}%
16701\pysigstartmultiline
16702\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{\DUrole{n}{krb5\_authenticator}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{ctime}}}}%
16703\pysigstopmultiline
16704\sphinxAtStartPar
16705client sec portion
16706
16707\end{fulllineitems}
16708
16709\index{krb5\_authenticator.subkey (C member)@\spxentry{krb5\_authenticator.subkey}\spxextra{C member}}
16710
16711\begin{fulllineitems}
16712\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.subkey}}%
16713\pysigstartmultiline
16714\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{\DUrole{n}{krb5\_authenticator}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{subkey}}}}%
16715\pysigstopmultiline
16716\sphinxAtStartPar
16717true session key, optional
16718
16719\end{fulllineitems}
16720
16721\index{krb5\_authenticator.seq\_number (C member)@\spxentry{krb5\_authenticator.seq\_number}\spxextra{C member}}
16722
16723\begin{fulllineitems}
16724\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.seq_number}}%
16725\pysigstartmultiline
16726\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{\DUrole{n}{krb5\_ui\_4}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{\DUrole{n}{krb5\_authenticator}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{seq\_number}}}}%
16727\pysigstopmultiline
16728\sphinxAtStartPar
16729sequence \#, optional
16730
16731\end{fulllineitems}
16732
16733\index{krb5\_authenticator.authorization\_data (C member)@\spxentry{krb5\_authenticator.authorization\_data}\spxextra{C member}}
16734
16735\begin{fulllineitems}
16736\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.authorization_data}}%
16737\pysigstartmultiline
16738\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{\DUrole{n}{krb5\_authenticator}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{authorization\_data}}}}%
16739\pysigstopmultiline
16740\sphinxAtStartPar
16741authoriazation data
16742
16743\end{fulllineitems}
16744
16745
16746
16747\subsubsection{krb5\_boolean}
16748\label{\detokenize{appdev/refs/types/krb5_boolean:krb5-boolean}}\label{\detokenize{appdev/refs/types/krb5_boolean:krb5-boolean-struct}}\label{\detokenize{appdev/refs/types/krb5_boolean::doc}}\index{krb5\_boolean (C type)@\spxentry{krb5\_boolean}\spxextra{C type}}
16749
16750\begin{fulllineitems}
16751\phantomsection\label{\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}}%
16752\pysigstartmultiline
16753\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_boolean}}}}%
16754\pysigstopmultiline
16755\end{fulllineitems}
16756
16757
16758
16759\paragraph{Declaration}
16760\label{\detokenize{appdev/refs/types/krb5_boolean:declaration}}
16761\sphinxAtStartPar
16762typedef unsigned int krb5\_boolean
16763
16764
16765\subsubsection{krb5\_checksum}
16766\label{\detokenize{appdev/refs/types/krb5_checksum:krb5-checksum}}\label{\detokenize{appdev/refs/types/krb5_checksum:krb5-checksum-struct}}\label{\detokenize{appdev/refs/types/krb5_checksum::doc}}\index{krb5\_checksum (C type)@\spxentry{krb5\_checksum}\spxextra{C type}}
16767
16768\begin{fulllineitems}
16769\phantomsection\label{\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}}%
16770\pysigstartmultiline
16771\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_checksum}}}}%
16772\pysigstopmultiline
16773\end{fulllineitems}
16774
16775
16776
16777\paragraph{Declaration}
16778\label{\detokenize{appdev/refs/types/krb5_checksum:declaration}}
16779\sphinxAtStartPar
16780typedef struct \_krb5\_checksum krb5\_checksum
16781
16782
16783\paragraph{Members}
16784\label{\detokenize{appdev/refs/types/krb5_checksum:members}}\index{krb5\_checksum.magic (C member)@\spxentry{krb5\_checksum.magic}\spxextra{C member}}
16785
16786\begin{fulllineitems}
16787\phantomsection\label{\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum.magic}}%
16788\pysigstartmultiline
16789\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{\DUrole{n}{krb5\_checksum}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
16790\pysigstopmultiline
16791\end{fulllineitems}
16792
16793\index{krb5\_checksum.checksum\_type (C member)@\spxentry{krb5\_checksum.checksum\_type}\spxextra{C member}}
16794
16795\begin{fulllineitems}
16796\phantomsection\label{\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum.checksum_type}}%
16797\pysigstartmultiline
16798\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{\DUrole{n}{krb5\_cksumtype}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{\DUrole{n}{krb5\_checksum}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{checksum\_type}}}}%
16799\pysigstopmultiline
16800\end{fulllineitems}
16801
16802\index{krb5\_checksum.length (C member)@\spxentry{krb5\_checksum.length}\spxextra{C member}}
16803
16804\begin{fulllineitems}
16805\phantomsection\label{\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum.length}}%
16806\pysigstartmultiline
16807\pysigline{\DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{\DUrole{n}{krb5\_checksum}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{length}}}}%
16808\pysigstopmultiline
16809\end{fulllineitems}
16810
16811\index{krb5\_checksum.contents (C member)@\spxentry{krb5\_checksum.contents}\spxextra{C member}}
16812
16813\begin{fulllineitems}
16814\phantomsection\label{\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum.contents}}%
16815\pysigstartmultiline
16816\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{\DUrole{n}{krb5\_octet}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{\DUrole{n}{krb5\_checksum}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{contents}}}}%
16817\pysigstopmultiline
16818\end{fulllineitems}
16819
16820
16821
16822\subsubsection{krb5\_const\_pointer}
16823\label{\detokenize{appdev/refs/types/krb5_const_pointer:krb5-const-pointer}}\label{\detokenize{appdev/refs/types/krb5_const_pointer:krb5-const-pointer-struct}}\label{\detokenize{appdev/refs/types/krb5_const_pointer::doc}}\index{krb5\_const\_pointer (C type)@\spxentry{krb5\_const\_pointer}\spxextra{C type}}
16824
16825\begin{fulllineitems}
16826\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}}%
16827\pysigstartmultiline
16828\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_const\_pointer}}}}%
16829\pysigstopmultiline
16830\end{fulllineitems}
16831
16832
16833
16834\paragraph{Declaration}
16835\label{\detokenize{appdev/refs/types/krb5_const_pointer:declaration}}
16836\sphinxAtStartPar
16837typedef void const* krb5\_const\_pointer
16838
16839
16840\subsubsection{krb5\_const\_principal}
16841\label{\detokenize{appdev/refs/types/krb5_const_principal:krb5-const-principal}}\label{\detokenize{appdev/refs/types/krb5_const_principal:krb5-const-principal-struct}}\label{\detokenize{appdev/refs/types/krb5_const_principal::doc}}\index{krb5\_const\_principal (C type)@\spxentry{krb5\_const\_principal}\spxextra{C type}}
16842
16843\begin{fulllineitems}
16844\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}}%
16845\pysigstartmultiline
16846\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_const\_principal}}}}%
16847\pysigstopmultiline
16848\end{fulllineitems}
16849
16850
16851\sphinxAtStartPar
16852Constant version of {\hyperref[\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data}]{\sphinxcrossref{\sphinxcode{\sphinxupquote{krb5\_principal\_data}}}}} .
16853
16854
16855\paragraph{Declaration}
16856\label{\detokenize{appdev/refs/types/krb5_const_principal:declaration}}
16857\sphinxAtStartPar
16858typedef const krb5\_principal\_data* krb5\_const\_principal
16859
16860
16861\paragraph{Members}
16862\label{\detokenize{appdev/refs/types/krb5_const_principal:members}}\index{krb5\_const\_principal.magic (C member)@\spxentry{krb5\_const\_principal.magic}\spxextra{C member}}
16863
16864\begin{fulllineitems}
16865\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal.magic}}%
16866\pysigstartmultiline
16867\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
16868\pysigstopmultiline
16869\end{fulllineitems}
16870
16871\index{krb5\_const\_principal.realm (C member)@\spxentry{krb5\_const\_principal.realm}\spxextra{C member}}
16872
16873\begin{fulllineitems}
16874\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal.realm}}%
16875\pysigstartmultiline
16876\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{realm}}}}%
16877\pysigstopmultiline
16878\end{fulllineitems}
16879
16880\index{krb5\_const\_principal.data (C member)@\spxentry{krb5\_const\_principal.data}\spxextra{C member}}
16881
16882\begin{fulllineitems}
16883\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal.data}}%
16884\pysigstartmultiline
16885\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{data}}}}%
16886\pysigstopmultiline
16887\sphinxAtStartPar
16888An array of strings.
16889
16890\end{fulllineitems}
16891
16892\index{krb5\_const\_principal.length (C member)@\spxentry{krb5\_const\_principal.length}\spxextra{C member}}
16893
16894\begin{fulllineitems}
16895\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal.length}}%
16896\pysigstartmultiline
16897\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{length}}}}%
16898\pysigstopmultiline
16899\end{fulllineitems}
16900
16901\index{krb5\_const\_principal.type (C member)@\spxentry{krb5\_const\_principal.type}\spxextra{C member}}
16902
16903\begin{fulllineitems}
16904\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal.type}}%
16905\pysigstartmultiline
16906\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_const\_principal}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{type}}}}%
16907\pysigstopmultiline
16908\end{fulllineitems}
16909
16910
16911
16912\subsubsection{krb5\_cred}
16913\label{\detokenize{appdev/refs/types/krb5_cred:krb5-cred}}\label{\detokenize{appdev/refs/types/krb5_cred:krb5-cred-struct}}\label{\detokenize{appdev/refs/types/krb5_cred::doc}}\index{krb5\_cred (C type)@\spxentry{krb5\_cred}\spxextra{C type}}
16914
16915\begin{fulllineitems}
16916\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred}}%
16917\pysigstartmultiline
16918\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cred}}}}%
16919\pysigstopmultiline
16920\end{fulllineitems}
16921
16922
16923\sphinxAtStartPar
16924Credentials data structure.
16925
16926
16927\paragraph{Declaration}
16928\label{\detokenize{appdev/refs/types/krb5_cred:declaration}}
16929\sphinxAtStartPar
16930typedef struct \_krb5\_cred krb5\_cred
16931
16932
16933\paragraph{Members}
16934\label{\detokenize{appdev/refs/types/krb5_cred:members}}\index{krb5\_cred.magic (C member)@\spxentry{krb5\_cred.magic}\spxextra{C member}}
16935
16936\begin{fulllineitems}
16937\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred.magic}}%
16938\pysigstartmultiline
16939\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred}]{\sphinxcrossref{\DUrole{n}{krb5\_cred}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
16940\pysigstopmultiline
16941\end{fulllineitems}
16942
16943\index{krb5\_cred.tickets (C member)@\spxentry{krb5\_cred.tickets}\spxextra{C member}}
16944
16945\begin{fulllineitems}
16946\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred.tickets}}%
16947\pysigstartmultiline
16948\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred}]{\sphinxcrossref{\DUrole{n}{krb5\_cred}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{tickets}}}}%
16949\pysigstopmultiline
16950\sphinxAtStartPar
16951Tickets.
16952
16953\end{fulllineitems}
16954
16955\index{krb5\_cred.enc\_part (C member)@\spxentry{krb5\_cred.enc\_part}\spxextra{C member}}
16956
16957\begin{fulllineitems}
16958\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred.enc_part}}%
16959\pysigstartmultiline
16960\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_data}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred}]{\sphinxcrossref{\DUrole{n}{krb5\_cred}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{enc\_part}}}}%
16961\pysigstopmultiline
16962\sphinxAtStartPar
16963Encrypted part.
16964
16965\end{fulllineitems}
16966
16967\index{krb5\_cred.enc\_part2 (C member)@\spxentry{krb5\_cred.enc\_part2}\spxextra{C member}}
16968
16969\begin{fulllineitems}
16970\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred.enc_part2}}%
16971\pysigstartmultiline
16972\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part}]{\sphinxcrossref{\DUrole{n}{krb5\_cred\_enc\_part}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred}]{\sphinxcrossref{\DUrole{n}{krb5\_cred}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{enc\_part2}}}}%
16973\pysigstopmultiline
16974\sphinxAtStartPar
16975Unencrypted version, if available.
16976
16977\end{fulllineitems}
16978
16979
16980
16981\subsubsection{krb5\_cred\_enc\_part}
16982\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}}\label{\detokenize{appdev/refs/types/krb5_cred_enc_part::doc}}\index{krb5\_cred\_enc\_part (C type)@\spxentry{krb5\_cred\_enc\_part}\spxextra{C type}}
16983
16984\begin{fulllineitems}
16985\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part}}%
16986\pysigstartmultiline
16987\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cred\_enc\_part}}}}%
16988\pysigstopmultiline
16989\end{fulllineitems}
16990
16991
16992\sphinxAtStartPar
16993Cleartext credentials information.
16994
16995
16996\paragraph{Declaration}
16997\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:declaration}}
16998\sphinxAtStartPar
16999typedef struct \_krb5\_cred\_enc\_part krb5\_cred\_enc\_part
17000
17001
17002\paragraph{Members}
17003\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:members}}\index{krb5\_cred\_enc\_part.magic (C member)@\spxentry{krb5\_cred\_enc\_part.magic}\spxextra{C member}}
17004
17005\begin{fulllineitems}
17006\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.magic}}%
17007\pysigstartmultiline
17008\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part}]{\sphinxcrossref{\DUrole{n}{krb5\_cred\_enc\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
17009\pysigstopmultiline
17010\end{fulllineitems}
17011
17012\index{krb5\_cred\_enc\_part.nonce (C member)@\spxentry{krb5\_cred\_enc\_part.nonce}\spxextra{C member}}
17013
17014\begin{fulllineitems}
17015\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.nonce}}%
17016\pysigstartmultiline
17017\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part}]{\sphinxcrossref{\DUrole{n}{krb5\_cred\_enc\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{nonce}}}}%
17018\pysigstopmultiline
17019\sphinxAtStartPar
17020Nonce (optional)
17021
17022\end{fulllineitems}
17023
17024\index{krb5\_cred\_enc\_part.timestamp (C member)@\spxentry{krb5\_cred\_enc\_part.timestamp}\spxextra{C member}}
17025
17026\begin{fulllineitems}
17027\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.timestamp}}%
17028\pysigstartmultiline
17029\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part}]{\sphinxcrossref{\DUrole{n}{krb5\_cred\_enc\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{timestamp}}}}%
17030\pysigstopmultiline
17031\sphinxAtStartPar
17032Generation time, seconds portion.
17033
17034\end{fulllineitems}
17035
17036\index{krb5\_cred\_enc\_part.usec (C member)@\spxentry{krb5\_cred\_enc\_part.usec}\spxextra{C member}}
17037
17038\begin{fulllineitems}
17039\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.usec}}%
17040\pysigstartmultiline
17041\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part}]{\sphinxcrossref{\DUrole{n}{krb5\_cred\_enc\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{usec}}}}%
17042\pysigstopmultiline
17043\sphinxAtStartPar
17044Generation time, microseconds portion.
17045
17046\end{fulllineitems}
17047
17048\index{krb5\_cred\_enc\_part.s\_address (C member)@\spxentry{krb5\_cred\_enc\_part.s\_address}\spxextra{C member}}
17049
17050\begin{fulllineitems}
17051\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.s_address}}%
17052\pysigstartmultiline
17053\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part}]{\sphinxcrossref{\DUrole{n}{krb5\_cred\_enc\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{s\_address}}}}%
17054\pysigstopmultiline
17055\sphinxAtStartPar
17056Sender address (optional)
17057
17058\end{fulllineitems}
17059
17060\index{krb5\_cred\_enc\_part.r\_address (C member)@\spxentry{krb5\_cred\_enc\_part.r\_address}\spxextra{C member}}
17061
17062\begin{fulllineitems}
17063\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.r_address}}%
17064\pysigstartmultiline
17065\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part}]{\sphinxcrossref{\DUrole{n}{krb5\_cred\_enc\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{r\_address}}}}%
17066\pysigstopmultiline
17067\sphinxAtStartPar
17068Recipient address (optional)
17069
17070\end{fulllineitems}
17071
17072\index{krb5\_cred\_enc\_part.ticket\_info (C member)@\spxentry{krb5\_cred\_enc\_part.ticket\_info}\spxextra{C member}}
17073
17074\begin{fulllineitems}
17075\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.ticket_info}}%
17076\pysigstartmultiline
17077\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info}]{\sphinxcrossref{\DUrole{n}{krb5\_cred\_info}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part}]{\sphinxcrossref{\DUrole{n}{krb5\_cred\_enc\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{ticket\_info}}}}%
17078\pysigstopmultiline
17079\end{fulllineitems}
17080
17081
17082
17083\subsubsection{krb5\_cred\_info}
17084\label{\detokenize{appdev/refs/types/krb5_cred_info:krb5-cred-info}}\label{\detokenize{appdev/refs/types/krb5_cred_info:krb5-cred-info-struct}}\label{\detokenize{appdev/refs/types/krb5_cred_info::doc}}\index{krb5\_cred\_info (C type)@\spxentry{krb5\_cred\_info}\spxextra{C type}}
17085
17086\begin{fulllineitems}
17087\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info}}%
17088\pysigstartmultiline
17089\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cred\_info}}}}%
17090\pysigstopmultiline
17091\end{fulllineitems}
17092
17093
17094\sphinxAtStartPar
17095Credentials information inserted into \sphinxstyleemphasis{EncKrbCredPart} .
17096
17097
17098\paragraph{Declaration}
17099\label{\detokenize{appdev/refs/types/krb5_cred_info:declaration}}
17100\sphinxAtStartPar
17101typedef struct \_krb5\_cred\_info krb5\_cred\_info
17102
17103
17104\paragraph{Members}
17105\label{\detokenize{appdev/refs/types/krb5_cred_info:members}}\index{krb5\_cred\_info.magic (C member)@\spxentry{krb5\_cred\_info.magic}\spxextra{C member}}
17106
17107\begin{fulllineitems}
17108\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.magic}}%
17109\pysigstartmultiline
17110\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info}]{\sphinxcrossref{\DUrole{n}{krb5\_cred\_info}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
17111\pysigstopmultiline
17112\end{fulllineitems}
17113
17114\index{krb5\_cred\_info.session (C member)@\spxentry{krb5\_cred\_info.session}\spxextra{C member}}
17115
17116\begin{fulllineitems}
17117\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.session}}%
17118\pysigstartmultiline
17119\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info}]{\sphinxcrossref{\DUrole{n}{krb5\_cred\_info}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{session}}}}%
17120\pysigstopmultiline
17121\sphinxAtStartPar
17122Session key used to encrypt ticket.
17123
17124\end{fulllineitems}
17125
17126\index{krb5\_cred\_info.client (C member)@\spxentry{krb5\_cred\_info.client}\spxextra{C member}}
17127
17128\begin{fulllineitems}
17129\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.client}}%
17130\pysigstartmultiline
17131\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info}]{\sphinxcrossref{\DUrole{n}{krb5\_cred\_info}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{client}}}}%
17132\pysigstopmultiline
17133\sphinxAtStartPar
17134Client principal and realm.
17135
17136\end{fulllineitems}
17137
17138\index{krb5\_cred\_info.server (C member)@\spxentry{krb5\_cred\_info.server}\spxextra{C member}}
17139
17140\begin{fulllineitems}
17141\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.server}}%
17142\pysigstartmultiline
17143\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info}]{\sphinxcrossref{\DUrole{n}{krb5\_cred\_info}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{server}}}}%
17144\pysigstopmultiline
17145\sphinxAtStartPar
17146Server principal and realm.
17147
17148\end{fulllineitems}
17149
17150\index{krb5\_cred\_info.flags (C member)@\spxentry{krb5\_cred\_info.flags}\spxextra{C member}}
17151
17152\begin{fulllineitems}
17153\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.flags}}%
17154\pysigstartmultiline
17155\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info}]{\sphinxcrossref{\DUrole{n}{krb5\_cred\_info}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{flags}}}}%
17156\pysigstopmultiline
17157\sphinxAtStartPar
17158Ticket flags.
17159
17160\end{fulllineitems}
17161
17162\index{krb5\_cred\_info.times (C member)@\spxentry{krb5\_cred\_info.times}\spxextra{C member}}
17163
17164\begin{fulllineitems}
17165\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.times}}%
17166\pysigstartmultiline
17167\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket\_times}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info}]{\sphinxcrossref{\DUrole{n}{krb5\_cred\_info}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{times}}}}%
17168\pysigstopmultiline
17169\sphinxAtStartPar
17170Auth, start, end, renew\_till.
17171
17172\end{fulllineitems}
17173
17174\index{krb5\_cred\_info.caddrs (C member)@\spxentry{krb5\_cred\_info.caddrs}\spxextra{C member}}
17175
17176\begin{fulllineitems}
17177\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.caddrs}}%
17178\pysigstartmultiline
17179\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info}]{\sphinxcrossref{\DUrole{n}{krb5\_cred\_info}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{caddrs}}}}%
17180\pysigstopmultiline
17181\sphinxAtStartPar
17182Array of pointers to addrs (optional)
17183
17184\end{fulllineitems}
17185
17186
17187
17188\subsubsection{krb5\_creds}
17189\label{\detokenize{appdev/refs/types/krb5_creds:krb5-creds}}\label{\detokenize{appdev/refs/types/krb5_creds:krb5-creds-struct}}\label{\detokenize{appdev/refs/types/krb5_creds::doc}}\index{krb5\_creds (C type)@\spxentry{krb5\_creds}\spxextra{C type}}
17190
17191\begin{fulllineitems}
17192\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}}%
17193\pysigstartmultiline
17194\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_creds}}}}%
17195\pysigstopmultiline
17196\end{fulllineitems}
17197
17198
17199\sphinxAtStartPar
17200Credentials structure including ticket, session key, and lifetime info.
17201
17202
17203\paragraph{Declaration}
17204\label{\detokenize{appdev/refs/types/krb5_creds:declaration}}
17205\sphinxAtStartPar
17206typedef struct \_krb5\_creds krb5\_creds
17207
17208
17209\paragraph{Members}
17210\label{\detokenize{appdev/refs/types/krb5_creds:members}}\index{krb5\_creds.magic (C member)@\spxentry{krb5\_creds.magic}\spxextra{C member}}
17211
17212\begin{fulllineitems}
17213\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.magic}}%
17214\pysigstartmultiline
17215\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
17216\pysigstopmultiline
17217\end{fulllineitems}
17218
17219\index{krb5\_creds.client (C member)@\spxentry{krb5\_creds.client}\spxextra{C member}}
17220
17221\begin{fulllineitems}
17222\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.client}}%
17223\pysigstartmultiline
17224\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{client}}}}%
17225\pysigstopmultiline
17226\sphinxAtStartPar
17227client’s principal identifier
17228
17229\end{fulllineitems}
17230
17231\index{krb5\_creds.server (C member)@\spxentry{krb5\_creds.server}\spxextra{C member}}
17232
17233\begin{fulllineitems}
17234\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.server}}%
17235\pysigstartmultiline
17236\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{server}}}}%
17237\pysigstopmultiline
17238\sphinxAtStartPar
17239server’s principal identifier
17240
17241\end{fulllineitems}
17242
17243\index{krb5\_creds.keyblock (C member)@\spxentry{krb5\_creds.keyblock}\spxextra{C member}}
17244
17245\begin{fulllineitems}
17246\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.keyblock}}%
17247\pysigstartmultiline
17248\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{keyblock}}}}%
17249\pysigstopmultiline
17250\sphinxAtStartPar
17251session encryption key info
17252
17253\end{fulllineitems}
17254
17255\index{krb5\_creds.times (C member)@\spxentry{krb5\_creds.times}\spxextra{C member}}
17256
17257\begin{fulllineitems}
17258\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.times}}%
17259\pysigstartmultiline
17260\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket\_times}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{times}}}}%
17261\pysigstopmultiline
17262\sphinxAtStartPar
17263lifetime info
17264
17265\end{fulllineitems}
17266
17267\index{krb5\_creds.is\_skey (C member)@\spxentry{krb5\_creds.is\_skey}\spxextra{C member}}
17268
17269\begin{fulllineitems}
17270\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.is_skey}}%
17271\pysigstartmultiline
17272\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{is\_skey}}}}%
17273\pysigstopmultiline
17274\sphinxAtStartPar
17275true if ticket is encrypted in another ticket’s skey
17276
17277\end{fulllineitems}
17278
17279\index{krb5\_creds.ticket\_flags (C member)@\spxentry{krb5\_creds.ticket\_flags}\spxextra{C member}}
17280
17281\begin{fulllineitems}
17282\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.ticket_flags}}%
17283\pysigstartmultiline
17284\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{ticket\_flags}}}}%
17285\pysigstopmultiline
17286\sphinxAtStartPar
17287flags in ticket
17288
17289\end{fulllineitems}
17290
17291\index{krb5\_creds.addresses (C member)@\spxentry{krb5\_creds.addresses}\spxextra{C member}}
17292
17293\begin{fulllineitems}
17294\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.addresses}}%
17295\pysigstartmultiline
17296\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{addresses}}}}%
17297\pysigstopmultiline
17298\sphinxAtStartPar
17299addrs in ticket
17300
17301\end{fulllineitems}
17302
17303\index{krb5\_creds.ticket (C member)@\spxentry{krb5\_creds.ticket}\spxextra{C member}}
17304
17305\begin{fulllineitems}
17306\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.ticket}}%
17307\pysigstartmultiline
17308\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{ticket}}}}%
17309\pysigstopmultiline
17310\sphinxAtStartPar
17311ticket string itself
17312
17313\end{fulllineitems}
17314
17315\index{krb5\_creds.second\_ticket (C member)@\spxentry{krb5\_creds.second\_ticket}\spxextra{C member}}
17316
17317\begin{fulllineitems}
17318\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.second_ticket}}%
17319\pysigstartmultiline
17320\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{second\_ticket}}}}%
17321\pysigstopmultiline
17322\sphinxAtStartPar
17323second ticket, if related to ticket (via DUPLICATE\sphinxhyphen{}SKEY or ENC\sphinxhyphen{}TKT\sphinxhyphen{}IN\sphinxhyphen{}SKEY)
17324
17325\end{fulllineitems}
17326
17327\index{krb5\_creds.authdata (C member)@\spxentry{krb5\_creds.authdata}\spxextra{C member}}
17328
17329\begin{fulllineitems}
17330\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.authdata}}%
17331\pysigstartmultiline
17332\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{\DUrole{n}{krb5\_creds}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{authdata}}}}%
17333\pysigstopmultiline
17334\sphinxAtStartPar
17335authorization data
17336
17337\end{fulllineitems}
17338
17339
17340
17341\subsubsection{krb5\_crypto\_iov}
17342\label{\detokenize{appdev/refs/types/krb5_crypto_iov:krb5-crypto-iov}}\label{\detokenize{appdev/refs/types/krb5_crypto_iov:krb5-crypto-iov-struct}}\label{\detokenize{appdev/refs/types/krb5_crypto_iov::doc}}\index{krb5\_crypto\_iov (C type)@\spxentry{krb5\_crypto\_iov}\spxextra{C type}}
17343
17344\begin{fulllineitems}
17345\phantomsection\label{\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}}%
17346\pysigstartmultiline
17347\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_crypto\_iov}}}}%
17348\pysigstopmultiline
17349\end{fulllineitems}
17350
17351
17352\sphinxAtStartPar
17353Structure to describe a region of text to be encrypted or decrypted.
17354
17355\sphinxAtStartPar
17356The \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\sphinxhyphen{}place; data is overwritten. Callers must allocate the right number of krb5\_crypto\_iov structures before calling into an iov API.
17357
17358
17359\paragraph{Declaration}
17360\label{\detokenize{appdev/refs/types/krb5_crypto_iov:declaration}}
17361\sphinxAtStartPar
17362typedef struct \_krb5\_crypto\_iov krb5\_crypto\_iov
17363
17364
17365\paragraph{Members}
17366\label{\detokenize{appdev/refs/types/krb5_crypto_iov:members}}\index{krb5\_crypto\_iov.flags (C member)@\spxentry{krb5\_crypto\_iov.flags}\spxextra{C member}}
17367
17368\begin{fulllineitems}
17369\phantomsection\label{\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov.flags}}%
17370\pysigstartmultiline
17371\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_cryptotype:c.krb5_cryptotype}]{\sphinxcrossref{\DUrole{n}{krb5\_cryptotype}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{\DUrole{n}{krb5\_crypto\_iov}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{flags}}}}%
17372\pysigstopmultiline
17373\sphinxAtStartPar
17374iov type (see KRB5\_CRYPTO\_TYPE macros)
17375
17376\end{fulllineitems}
17377
17378\index{krb5\_crypto\_iov.data (C member)@\spxentry{krb5\_crypto\_iov.data}\spxextra{C member}}
17379
17380\begin{fulllineitems}
17381\phantomsection\label{\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov.data}}%
17382\pysigstartmultiline
17383\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{\DUrole{n}{krb5\_crypto\_iov}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{data}}}}%
17384\pysigstopmultiline
17385\end{fulllineitems}
17386
17387
17388
17389\subsubsection{krb5\_cryptotype}
17390\label{\detokenize{appdev/refs/types/krb5_cryptotype:krb5-cryptotype}}\label{\detokenize{appdev/refs/types/krb5_cryptotype:krb5-cryptotype-struct}}\label{\detokenize{appdev/refs/types/krb5_cryptotype::doc}}\index{krb5\_cryptotype (C type)@\spxentry{krb5\_cryptotype}\spxextra{C type}}
17391
17392\begin{fulllineitems}
17393\phantomsection\label{\detokenize{appdev/refs/types/krb5_cryptotype:c.krb5_cryptotype}}%
17394\pysigstartmultiline
17395\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cryptotype}}}}%
17396\pysigstopmultiline
17397\end{fulllineitems}
17398
17399
17400
17401\paragraph{Declaration}
17402\label{\detokenize{appdev/refs/types/krb5_cryptotype:declaration}}
17403\sphinxAtStartPar
17404typedef krb5\_int32 krb5\_cryptotype
17405
17406
17407\subsubsection{krb5\_data}
17408\label{\detokenize{appdev/refs/types/krb5_data:krb5-data}}\label{\detokenize{appdev/refs/types/krb5_data:krb5-data-struct}}\label{\detokenize{appdev/refs/types/krb5_data::doc}}\index{krb5\_data (C type)@\spxentry{krb5\_data}\spxextra{C type}}
17409
17410\begin{fulllineitems}
17411\phantomsection\label{\detokenize{appdev/refs/types/krb5_data:c.krb5_data}}%
17412\pysigstartmultiline
17413\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_data}}}}%
17414\pysigstopmultiline
17415\end{fulllineitems}
17416
17417
17418
17419\paragraph{Declaration}
17420\label{\detokenize{appdev/refs/types/krb5_data:declaration}}
17421\sphinxAtStartPar
17422typedef struct \_krb5\_data krb5\_data
17423
17424
17425\paragraph{Members}
17426\label{\detokenize{appdev/refs/types/krb5_data:members}}\index{krb5\_data.magic (C member)@\spxentry{krb5\_data.magic}\spxextra{C member}}
17427
17428\begin{fulllineitems}
17429\phantomsection\label{\detokenize{appdev/refs/types/krb5_data:c.krb5_data.magic}}%
17430\pysigstartmultiline
17431\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
17432\pysigstopmultiline
17433\end{fulllineitems}
17434
17435\index{krb5\_data.length (C member)@\spxentry{krb5\_data.length}\spxextra{C member}}
17436
17437\begin{fulllineitems}
17438\phantomsection\label{\detokenize{appdev/refs/types/krb5_data:c.krb5_data.length}}%
17439\pysigstartmultiline
17440\pysigline{\DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{length}}}}%
17441\pysigstopmultiline
17442\end{fulllineitems}
17443
17444\index{krb5\_data.data (C member)@\spxentry{krb5\_data.data}\spxextra{C member}}
17445
17446\begin{fulllineitems}
17447\phantomsection\label{\detokenize{appdev/refs/types/krb5_data:c.krb5_data.data}}%
17448\pysigstartmultiline
17449\pysigline{\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{data}}}}%
17450\pysigstopmultiline
17451\end{fulllineitems}
17452
17453
17454
17455\subsubsection{krb5\_deltat}
17456\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)@\spxentry{krb5\_deltat}\spxextra{C type}}
17457
17458\begin{fulllineitems}
17459\phantomsection\label{\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}}%
17460\pysigstartmultiline
17461\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_deltat}}}}%
17462\pysigstopmultiline
17463\end{fulllineitems}
17464
17465
17466
17467\paragraph{Declaration}
17468\label{\detokenize{appdev/refs/types/krb5_deltat:declaration}}
17469\sphinxAtStartPar
17470typedef krb5\_int32 krb5\_deltat
17471
17472
17473\subsubsection{krb5\_enc\_data}
17474\label{\detokenize{appdev/refs/types/krb5_enc_data:krb5-enc-data}}\label{\detokenize{appdev/refs/types/krb5_enc_data:krb5-enc-data-struct}}\label{\detokenize{appdev/refs/types/krb5_enc_data::doc}}\index{krb5\_enc\_data (C type)@\spxentry{krb5\_enc\_data}\spxextra{C type}}
17475
17476\begin{fulllineitems}
17477\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}}%
17478\pysigstartmultiline
17479\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_enc\_data}}}}%
17480\pysigstopmultiline
17481\end{fulllineitems}
17482
17483
17484
17485\paragraph{Declaration}
17486\label{\detokenize{appdev/refs/types/krb5_enc_data:declaration}}
17487\sphinxAtStartPar
17488typedef struct \_krb5\_enc\_data krb5\_enc\_data
17489
17490
17491\paragraph{Members}
17492\label{\detokenize{appdev/refs/types/krb5_enc_data:members}}\index{krb5\_enc\_data.magic (C member)@\spxentry{krb5\_enc\_data.magic}\spxextra{C member}}
17493
17494\begin{fulllineitems}
17495\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data.magic}}%
17496\pysigstartmultiline
17497\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
17498\pysigstopmultiline
17499\end{fulllineitems}
17500
17501\index{krb5\_enc\_data.enctype (C member)@\spxentry{krb5\_enc\_data.enctype}\spxextra{C member}}
17502
17503\begin{fulllineitems}
17504\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data.enctype}}%
17505\pysigstartmultiline
17506\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{enctype}}}}%
17507\pysigstopmultiline
17508\end{fulllineitems}
17509
17510\index{krb5\_enc\_data.kvno (C member)@\spxentry{krb5\_enc\_data.kvno}\spxextra{C member}}
17511
17512\begin{fulllineitems}
17513\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data.kvno}}%
17514\pysigstartmultiline
17515\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_kvno:c.krb5_kvno}]{\sphinxcrossref{\DUrole{n}{krb5\_kvno}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{kvno}}}}%
17516\pysigstopmultiline
17517\end{fulllineitems}
17518
17519\index{krb5\_enc\_data.ciphertext (C member)@\spxentry{krb5\_enc\_data.ciphertext}\spxextra{C member}}
17520
17521\begin{fulllineitems}
17522\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data.ciphertext}}%
17523\pysigstartmultiline
17524\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{ciphertext}}}}%
17525\pysigstopmultiline
17526\end{fulllineitems}
17527
17528
17529
17530\subsubsection{krb5\_enc\_kdc\_rep\_part}
17531\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}}\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part::doc}}\index{krb5\_enc\_kdc\_rep\_part (C type)@\spxentry{krb5\_enc\_kdc\_rep\_part}\spxextra{C type}}
17532
17533\begin{fulllineitems}
17534\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part}}%
17535\pysigstartmultiline
17536\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_enc\_kdc\_rep\_part}}}}%
17537\pysigstopmultiline
17538\end{fulllineitems}
17539
17540
17541\sphinxAtStartPar
17542C representation of \sphinxstyleemphasis{EncKDCRepPart} protocol message.
17543
17544\sphinxAtStartPar
17545This is the cleartext message that is encrypted and inserted in \sphinxstyleemphasis{KDC\sphinxhyphen{}REP} .
17546
17547
17548\paragraph{Declaration}
17549\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:declaration}}
17550\sphinxAtStartPar
17551typedef struct \_krb5\_enc\_kdc\_rep\_part krb5\_enc\_kdc\_rep\_part
17552
17553
17554\paragraph{Members}
17555\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:members}}\index{krb5\_enc\_kdc\_rep\_part.magic (C member)@\spxentry{krb5\_enc\_kdc\_rep\_part.magic}\spxextra{C member}}
17556
17557\begin{fulllineitems}
17558\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.magic}}%
17559\pysigstartmultiline
17560\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_kdc\_rep\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
17561\pysigstopmultiline
17562\end{fulllineitems}
17563
17564\index{krb5\_enc\_kdc\_rep\_part.msg\_type (C member)@\spxentry{krb5\_enc\_kdc\_rep\_part.msg\_type}\spxextra{C member}}
17565
17566\begin{fulllineitems}
17567\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.msg_type}}%
17568\pysigstartmultiline
17569\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_msgtype:c.krb5_msgtype}]{\sphinxcrossref{\DUrole{n}{krb5\_msgtype}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_kdc\_rep\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{msg\_type}}}}%
17570\pysigstopmultiline
17571\sphinxAtStartPar
17572krb5 message type
17573
17574\end{fulllineitems}
17575
17576\index{krb5\_enc\_kdc\_rep\_part.session (C member)@\spxentry{krb5\_enc\_kdc\_rep\_part.session}\spxextra{C member}}
17577
17578\begin{fulllineitems}
17579\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.session}}%
17580\pysigstartmultiline
17581\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_kdc\_rep\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{session}}}}%
17582\pysigstopmultiline
17583\sphinxAtStartPar
17584Session key.
17585
17586\end{fulllineitems}
17587
17588\index{krb5\_enc\_kdc\_rep\_part.last\_req (C member)@\spxentry{krb5\_enc\_kdc\_rep\_part.last\_req}\spxextra{C member}}
17589
17590\begin{fulllineitems}
17591\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.last_req}}%
17592\pysigstartmultiline
17593\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_last_req_entry:c.krb5_last_req_entry}]{\sphinxcrossref{\DUrole{n}{krb5\_last\_req\_entry}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_kdc\_rep\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{last\_req}}}}%
17594\pysigstopmultiline
17595\sphinxAtStartPar
17596Array of pointers to entries.
17597
17598\end{fulllineitems}
17599
17600\index{krb5\_enc\_kdc\_rep\_part.nonce (C member)@\spxentry{krb5\_enc\_kdc\_rep\_part.nonce}\spxextra{C member}}
17601
17602\begin{fulllineitems}
17603\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.nonce}}%
17604\pysigstartmultiline
17605\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_kdc\_rep\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{nonce}}}}%
17606\pysigstopmultiline
17607\sphinxAtStartPar
17608Nonce from request.
17609
17610\end{fulllineitems}
17611
17612\index{krb5\_enc\_kdc\_rep\_part.key\_exp (C member)@\spxentry{krb5\_enc\_kdc\_rep\_part.key\_exp}\spxextra{C member}}
17613
17614\begin{fulllineitems}
17615\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.key_exp}}%
17616\pysigstartmultiline
17617\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_kdc\_rep\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{key\_exp}}}}%
17618\pysigstopmultiline
17619\sphinxAtStartPar
17620Expiration date.
17621
17622\end{fulllineitems}
17623
17624\index{krb5\_enc\_kdc\_rep\_part.flags (C member)@\spxentry{krb5\_enc\_kdc\_rep\_part.flags}\spxextra{C member}}
17625
17626\begin{fulllineitems}
17627\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.flags}}%
17628\pysigstartmultiline
17629\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_kdc\_rep\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{flags}}}}%
17630\pysigstopmultiline
17631\sphinxAtStartPar
17632Ticket flags.
17633
17634\end{fulllineitems}
17635
17636\index{krb5\_enc\_kdc\_rep\_part.times (C member)@\spxentry{krb5\_enc\_kdc\_rep\_part.times}\spxextra{C member}}
17637
17638\begin{fulllineitems}
17639\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.times}}%
17640\pysigstartmultiline
17641\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket\_times}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_kdc\_rep\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{times}}}}%
17642\pysigstopmultiline
17643\sphinxAtStartPar
17644Lifetime info.
17645
17646\end{fulllineitems}
17647
17648\index{krb5\_enc\_kdc\_rep\_part.server (C member)@\spxentry{krb5\_enc\_kdc\_rep\_part.server}\spxextra{C member}}
17649
17650\begin{fulllineitems}
17651\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.server}}%
17652\pysigstartmultiline
17653\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_kdc\_rep\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{server}}}}%
17654\pysigstopmultiline
17655\sphinxAtStartPar
17656Server’s principal identifier.
17657
17658\end{fulllineitems}
17659
17660\index{krb5\_enc\_kdc\_rep\_part.caddrs (C member)@\spxentry{krb5\_enc\_kdc\_rep\_part.caddrs}\spxextra{C member}}
17661
17662\begin{fulllineitems}
17663\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.caddrs}}%
17664\pysigstartmultiline
17665\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_kdc\_rep\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{caddrs}}}}%
17666\pysigstopmultiline
17667\sphinxAtStartPar
17668Array of ptrs to addrs, optional.
17669
17670\end{fulllineitems}
17671
17672\index{krb5\_enc\_kdc\_rep\_part.enc\_padata (C member)@\spxentry{krb5\_enc\_kdc\_rep\_part.enc\_padata}\spxextra{C member}}
17673
17674\begin{fulllineitems}
17675\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.enc_padata}}%
17676\pysigstartmultiline
17677\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data}]{\sphinxcrossref{\DUrole{n}{krb5\_pa\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_kdc\_rep\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{enc\_padata}}}}%
17678\pysigstopmultiline
17679\sphinxAtStartPar
17680Encrypted preauthentication data.
17681
17682\end{fulllineitems}
17683
17684
17685
17686\subsubsection{krb5\_enc\_tkt\_part}
17687\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:krb5-enc-tkt-part}}\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:krb5-enc-tkt-part-struct}}\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part::doc}}\index{krb5\_enc\_tkt\_part (C type)@\spxentry{krb5\_enc\_tkt\_part}\spxextra{C type}}
17688
17689\begin{fulllineitems}
17690\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part}}%
17691\pysigstartmultiline
17692\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_enc\_tkt\_part}}}}%
17693\pysigstopmultiline
17694\end{fulllineitems}
17695
17696
17697\sphinxAtStartPar
17698Encrypted part of ticket.
17699
17700
17701\paragraph{Declaration}
17702\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:declaration}}
17703\sphinxAtStartPar
17704typedef struct \_krb5\_enc\_tkt\_part krb5\_enc\_tkt\_part
17705
17706
17707\paragraph{Members}
17708\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:members}}\index{krb5\_enc\_tkt\_part.magic (C member)@\spxentry{krb5\_enc\_tkt\_part.magic}\spxextra{C member}}
17709
17710\begin{fulllineitems}
17711\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.magic}}%
17712\pysigstartmultiline
17713\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_tkt\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
17714\pysigstopmultiline
17715\end{fulllineitems}
17716
17717\index{krb5\_enc\_tkt\_part.flags (C member)@\spxentry{krb5\_enc\_tkt\_part.flags}\spxextra{C member}}
17718
17719\begin{fulllineitems}
17720\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.flags}}%
17721\pysigstartmultiline
17722\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_tkt\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{flags}}}}%
17723\pysigstopmultiline
17724\sphinxAtStartPar
17725flags
17726
17727\end{fulllineitems}
17728
17729\index{krb5\_enc\_tkt\_part.session (C member)@\spxentry{krb5\_enc\_tkt\_part.session}\spxextra{C member}}
17730
17731\begin{fulllineitems}
17732\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.session}}%
17733\pysigstartmultiline
17734\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_tkt\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{session}}}}%
17735\pysigstopmultiline
17736\sphinxAtStartPar
17737session key: includes enctype
17738
17739\end{fulllineitems}
17740
17741\index{krb5\_enc\_tkt\_part.client (C member)@\spxentry{krb5\_enc\_tkt\_part.client}\spxextra{C member}}
17742
17743\begin{fulllineitems}
17744\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.client}}%
17745\pysigstartmultiline
17746\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_tkt\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{client}}}}%
17747\pysigstopmultiline
17748\sphinxAtStartPar
17749client name/realm
17750
17751\end{fulllineitems}
17752
17753\index{krb5\_enc\_tkt\_part.transited (C member)@\spxentry{krb5\_enc\_tkt\_part.transited}\spxextra{C member}}
17754
17755\begin{fulllineitems}
17756\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.transited}}%
17757\pysigstartmultiline
17758\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_transited:c.krb5_transited}]{\sphinxcrossref{\DUrole{n}{krb5\_transited}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_tkt\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{transited}}}}%
17759\pysigstopmultiline
17760\sphinxAtStartPar
17761list of transited realms
17762
17763\end{fulllineitems}
17764
17765\index{krb5\_enc\_tkt\_part.times (C member)@\spxentry{krb5\_enc\_tkt\_part.times}\spxextra{C member}}
17766
17767\begin{fulllineitems}
17768\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.times}}%
17769\pysigstartmultiline
17770\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket\_times}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_tkt\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{times}}}}%
17771\pysigstopmultiline
17772\sphinxAtStartPar
17773auth, start, end, renew\_till
17774
17775\end{fulllineitems}
17776
17777\index{krb5\_enc\_tkt\_part.caddrs (C member)@\spxentry{krb5\_enc\_tkt\_part.caddrs}\spxextra{C member}}
17778
17779\begin{fulllineitems}
17780\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.caddrs}}%
17781\pysigstartmultiline
17782\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_tkt\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{caddrs}}}}%
17783\pysigstopmultiline
17784\sphinxAtStartPar
17785array of ptrs to addresses
17786
17787\end{fulllineitems}
17788
17789\index{krb5\_enc\_tkt\_part.authorization\_data (C member)@\spxentry{krb5\_enc\_tkt\_part.authorization\_data}\spxextra{C member}}
17790
17791\begin{fulllineitems}
17792\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.authorization_data}}%
17793\pysigstartmultiline
17794\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_tkt\_part}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{authorization\_data}}}}%
17795\pysigstopmultiline
17796\sphinxAtStartPar
17797auth data
17798
17799\end{fulllineitems}
17800
17801
17802
17803\subsubsection{krb5\_encrypt\_block}
17804\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)@\spxentry{krb5\_encrypt\_block}\spxextra{C type}}
17805
17806\begin{fulllineitems}
17807\phantomsection\label{\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}}%
17808\pysigstartmultiline
17809\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_encrypt\_block}}}}%
17810\pysigstopmultiline
17811\end{fulllineitems}
17812
17813
17814
17815\paragraph{Declaration}
17816\label{\detokenize{appdev/refs/types/krb5_encrypt_block:declaration}}
17817\sphinxAtStartPar
17818typedef struct \_krb5\_encrypt\_block krb5\_encrypt\_block
17819
17820
17821\paragraph{Members}
17822\label{\detokenize{appdev/refs/types/krb5_encrypt_block:members}}\index{krb5\_encrypt\_block.magic (C member)@\spxentry{krb5\_encrypt\_block.magic}\spxextra{C member}}
17823
17824\begin{fulllineitems}
17825\phantomsection\label{\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block.magic}}%
17826\pysigstartmultiline
17827\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{\DUrole{n}{krb5\_encrypt\_block}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
17828\pysigstopmultiline
17829\end{fulllineitems}
17830
17831\index{krb5\_encrypt\_block.crypto\_entry (C member)@\spxentry{krb5\_encrypt\_block.crypto\_entry}\spxextra{C member}}
17832
17833\begin{fulllineitems}
17834\phantomsection\label{\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block.crypto_entry}}%
17835\pysigstartmultiline
17836\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{\DUrole{n}{krb5\_encrypt\_block}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{crypto\_entry}}}}%
17837\pysigstopmultiline
17838\end{fulllineitems}
17839
17840\index{krb5\_encrypt\_block.key (C member)@\spxentry{krb5\_encrypt\_block.key}\spxextra{C member}}
17841
17842\begin{fulllineitems}
17843\phantomsection\label{\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block.key}}%
17844\pysigstartmultiline
17845\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{\DUrole{n}{krb5\_encrypt\_block}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{key}}}}%
17846\pysigstopmultiline
17847\end{fulllineitems}
17848
17849
17850
17851\subsubsection{krb5\_enctype}
17852\label{\detokenize{appdev/refs/types/krb5_enctype:krb5-enctype}}\label{\detokenize{appdev/refs/types/krb5_enctype:krb5-enctype-struct}}\label{\detokenize{appdev/refs/types/krb5_enctype::doc}}\index{krb5\_enctype (C type)@\spxentry{krb5\_enctype}\spxextra{C type}}
17853
17854\begin{fulllineitems}
17855\phantomsection\label{\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}}%
17856\pysigstartmultiline
17857\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_enctype}}}}%
17858\pysigstopmultiline
17859\end{fulllineitems}
17860
17861
17862
17863\paragraph{Declaration}
17864\label{\detokenize{appdev/refs/types/krb5_enctype:declaration}}
17865\sphinxAtStartPar
17866typedef krb5\_int32 krb5\_enctype
17867
17868
17869\subsubsection{krb5\_error}
17870\label{\detokenize{appdev/refs/types/krb5_error:krb5-error}}\label{\detokenize{appdev/refs/types/krb5_error:krb5-error-struct}}\label{\detokenize{appdev/refs/types/krb5_error::doc}}\index{krb5\_error (C type)@\spxentry{krb5\_error}\spxextra{C type}}
17871
17872\begin{fulllineitems}
17873\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error}}%
17874\pysigstartmultiline
17875\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_error}}}}%
17876\pysigstopmultiline
17877\end{fulllineitems}
17878
17879
17880\sphinxAtStartPar
17881Error message structure.
17882
17883
17884\paragraph{Declaration}
17885\label{\detokenize{appdev/refs/types/krb5_error:declaration}}
17886\sphinxAtStartPar
17887typedef struct \_krb5\_error krb5\_error
17888
17889
17890\paragraph{Members}
17891\label{\detokenize{appdev/refs/types/krb5_error:members}}\index{krb5\_error.magic (C member)@\spxentry{krb5\_error.magic}\spxextra{C member}}
17892
17893\begin{fulllineitems}
17894\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.magic}}%
17895\pysigstartmultiline
17896\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{\DUrole{n}{krb5\_error}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
17897\pysigstopmultiline
17898\end{fulllineitems}
17899
17900\index{krb5\_error.ctime (C member)@\spxentry{krb5\_error.ctime}\spxextra{C member}}
17901
17902\begin{fulllineitems}
17903\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.ctime}}%
17904\pysigstartmultiline
17905\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{\DUrole{n}{krb5\_error}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{ctime}}}}%
17906\pysigstopmultiline
17907\sphinxAtStartPar
17908Client sec portion; optional.
17909
17910\end{fulllineitems}
17911
17912\index{krb5\_error.cusec (C member)@\spxentry{krb5\_error.cusec}\spxextra{C member}}
17913
17914\begin{fulllineitems}
17915\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.cusec}}%
17916\pysigstartmultiline
17917\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{\DUrole{n}{krb5\_error}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{cusec}}}}%
17918\pysigstopmultiline
17919\sphinxAtStartPar
17920Client usec portion; optional.
17921
17922\end{fulllineitems}
17923
17924\index{krb5\_error.susec (C member)@\spxentry{krb5\_error.susec}\spxextra{C member}}
17925
17926\begin{fulllineitems}
17927\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.susec}}%
17928\pysigstartmultiline
17929\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{\DUrole{n}{krb5\_error}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{susec}}}}%
17930\pysigstopmultiline
17931\sphinxAtStartPar
17932Server usec portion.
17933
17934\end{fulllineitems}
17935
17936\index{krb5\_error.stime (C member)@\spxentry{krb5\_error.stime}\spxextra{C member}}
17937
17938\begin{fulllineitems}
17939\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.stime}}%
17940\pysigstartmultiline
17941\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{\DUrole{n}{krb5\_error}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{stime}}}}%
17942\pysigstopmultiline
17943\sphinxAtStartPar
17944Server sec portion.
17945
17946\end{fulllineitems}
17947
17948\index{krb5\_error.error (C member)@\spxentry{krb5\_error.error}\spxextra{C member}}
17949
17950\begin{fulllineitems}
17951\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.error}}%
17952\pysigstartmultiline
17953\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{\DUrole{n}{krb5\_ui\_4}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{\DUrole{n}{krb5\_error}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{error}}}}%
17954\pysigstopmultiline
17955\sphinxAtStartPar
17956Error code (protocol error \#’s)
17957
17958\end{fulllineitems}
17959
17960\index{krb5\_error.client (C member)@\spxentry{krb5\_error.client}\spxextra{C member}}
17961
17962\begin{fulllineitems}
17963\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.client}}%
17964\pysigstartmultiline
17965\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{\DUrole{n}{krb5\_error}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{client}}}}%
17966\pysigstopmultiline
17967\sphinxAtStartPar
17968Client principal and realm.
17969
17970\end{fulllineitems}
17971
17972\index{krb5\_error.server (C member)@\spxentry{krb5\_error.server}\spxextra{C member}}
17973
17974\begin{fulllineitems}
17975\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.server}}%
17976\pysigstartmultiline
17977\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{\DUrole{n}{krb5\_error}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{server}}}}%
17978\pysigstopmultiline
17979\sphinxAtStartPar
17980Server principal and realm.
17981
17982\end{fulllineitems}
17983
17984\index{krb5\_error.text (C member)@\spxentry{krb5\_error.text}\spxextra{C member}}
17985
17986\begin{fulllineitems}
17987\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.text}}%
17988\pysigstartmultiline
17989\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{\DUrole{n}{krb5\_error}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{text}}}}%
17990\pysigstopmultiline
17991\sphinxAtStartPar
17992Descriptive text.
17993
17994\end{fulllineitems}
17995
17996\index{krb5\_error.e\_data (C member)@\spxentry{krb5\_error.e\_data}\spxextra{C member}}
17997
17998\begin{fulllineitems}
17999\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.e_data}}%
18000\pysigstartmultiline
18001\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{\DUrole{n}{krb5\_error}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{e\_data}}}}%
18002\pysigstopmultiline
18003\sphinxAtStartPar
18004Additional error\sphinxhyphen{}describing data.
18005
18006\end{fulllineitems}
18007
18008
18009
18010\subsubsection{krb5\_error\_code}
18011\label{\detokenize{appdev/refs/types/krb5_error_code:krb5-error-code}}\label{\detokenize{appdev/refs/types/krb5_error_code:krb5-error-code-struct}}\label{\detokenize{appdev/refs/types/krb5_error_code::doc}}\index{krb5\_error\_code (C type)@\spxentry{krb5\_error\_code}\spxextra{C type}}
18012
18013\begin{fulllineitems}
18014\phantomsection\label{\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}}%
18015\pysigstartmultiline
18016\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_error\_code}}}}%
18017\pysigstopmultiline
18018\end{fulllineitems}
18019
18020
18021\sphinxAtStartPar
18022Used to convey an operation status.
18023
18024\sphinxAtStartPar
18025The value 0 indicates success; any other values are com\_err codes. Use krb5\_get\_error\_message() to obtain a string describing the error.
18026
18027
18028\paragraph{Declaration}
18029\label{\detokenize{appdev/refs/types/krb5_error_code:declaration}}
18030\sphinxAtStartPar
18031typedef krb5\_int32 krb5\_error\_code
18032
18033
18034\subsubsection{krb5\_expire\_callback\_func}
18035\label{\detokenize{appdev/refs/types/krb5_expire_callback_func:krb5-expire-callback-func}}\label{\detokenize{appdev/refs/types/krb5_expire_callback_func:krb5-expire-callback-func-struct}}\label{\detokenize{appdev/refs/types/krb5_expire_callback_func::doc}}\index{krb5\_expire\_callback\_func (C type)@\spxentry{krb5\_expire\_callback\_func}\spxextra{C type}}
18036
18037\begin{fulllineitems}
18038\phantomsection\label{\detokenize{appdev/refs/types/krb5_expire_callback_func:c.krb5_expire_callback_func}}%
18039\pysigstartmultiline
18040\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_expire\_callback\_func}}}}%
18041\pysigstopmultiline
18042\end{fulllineitems}
18043
18044
18045
18046\paragraph{Declaration}
18047\label{\detokenize{appdev/refs/types/krb5_expire_callback_func:declaration}}
18048\sphinxAtStartPar
18049typedef void( * krb5\_expire\_callback\_func) (krb5\_context context, void *data, krb5\_timestamp password\_expiration, krb5\_timestamp account\_expiration, krb5\_boolean is\_last\_req)
18050
18051
18052\subsubsection{krb5\_flags}
18053\label{\detokenize{appdev/refs/types/krb5_flags:krb5-flags}}\label{\detokenize{appdev/refs/types/krb5_flags:krb5-flags-struct}}\label{\detokenize{appdev/refs/types/krb5_flags::doc}}\index{krb5\_flags (C type)@\spxentry{krb5\_flags}\spxextra{C type}}
18054
18055\begin{fulllineitems}
18056\phantomsection\label{\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}}%
18057\pysigstartmultiline
18058\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_flags}}}}%
18059\pysigstopmultiline
18060\end{fulllineitems}
18061
18062
18063
18064\paragraph{Declaration}
18065\label{\detokenize{appdev/refs/types/krb5_flags:declaration}}
18066\sphinxAtStartPar
18067typedef krb5\_int32 krb5\_flags
18068
18069
18070\subsubsection{krb5\_get\_init\_creds\_opt}
18071\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:krb5-get-init-creds-opt}}\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}}\index{krb5\_get\_init\_creds\_opt (C type)@\spxentry{krb5\_get\_init\_creds\_opt}\spxextra{C type}}
18072
18073\begin{fulllineitems}
18074\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}}%
18075\pysigstartmultiline
18076\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}%
18077\pysigstopmultiline
18078\end{fulllineitems}
18079
18080
18081\sphinxAtStartPar
18082Store options for \sphinxstyleemphasis{\_krb5\_get\_init\_creds} .
18083
18084
18085\paragraph{Declaration}
18086\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:declaration}}
18087\sphinxAtStartPar
18088typedef struct \_krb5\_get\_init\_creds\_opt krb5\_get\_init\_creds\_opt
18089
18090
18091\paragraph{Members}
18092\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:members}}\index{krb5\_get\_init\_creds\_opt.flags (C member)@\spxentry{krb5\_get\_init\_creds\_opt.flags}\spxextra{C member}}
18093
18094\begin{fulllineitems}
18095\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.flags}}%
18096\pysigstartmultiline
18097\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{flags}}}}%
18098\pysigstopmultiline
18099\end{fulllineitems}
18100
18101\index{krb5\_get\_init\_creds\_opt.tkt\_life (C member)@\spxentry{krb5\_get\_init\_creds\_opt.tkt\_life}\spxextra{C member}}
18102
18103\begin{fulllineitems}
18104\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.tkt_life}}%
18105\pysigstartmultiline
18106\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{\DUrole{n}{krb5\_deltat}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{tkt\_life}}}}%
18107\pysigstopmultiline
18108\end{fulllineitems}
18109
18110\index{krb5\_get\_init\_creds\_opt.renew\_life (C member)@\spxentry{krb5\_get\_init\_creds\_opt.renew\_life}\spxextra{C member}}
18111
18112\begin{fulllineitems}
18113\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.renew_life}}%
18114\pysigstartmultiline
18115\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{\DUrole{n}{krb5\_deltat}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{renew\_life}}}}%
18116\pysigstopmultiline
18117\end{fulllineitems}
18118
18119\index{krb5\_get\_init\_creds\_opt.forwardable (C member)@\spxentry{krb5\_get\_init\_creds\_opt.forwardable}\spxextra{C member}}
18120
18121\begin{fulllineitems}
18122\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.forwardable}}%
18123\pysigstartmultiline
18124\pysigline{\DUrole{kt}{int}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{forwardable}}}}%
18125\pysigstopmultiline
18126\end{fulllineitems}
18127
18128\index{krb5\_get\_init\_creds\_opt.proxiable (C member)@\spxentry{krb5\_get\_init\_creds\_opt.proxiable}\spxextra{C member}}
18129
18130\begin{fulllineitems}
18131\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.proxiable}}%
18132\pysigstartmultiline
18133\pysigline{\DUrole{kt}{int}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{proxiable}}}}%
18134\pysigstopmultiline
18135\end{fulllineitems}
18136
18137\index{krb5\_get\_init\_creds\_opt.etype\_list (C member)@\spxentry{krb5\_get\_init\_creds\_opt.etype\_list}\spxextra{C member}}
18138
18139\begin{fulllineitems}
18140\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.etype_list}}%
18141\pysigstartmultiline
18142\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{etype\_list}}}}%
18143\pysigstopmultiline
18144\end{fulllineitems}
18145
18146\index{krb5\_get\_init\_creds\_opt.etype\_list\_length (C member)@\spxentry{krb5\_get\_init\_creds\_opt.etype\_list\_length}\spxextra{C member}}
18147
18148\begin{fulllineitems}
18149\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.etype_list_length}}%
18150\pysigstartmultiline
18151\pysigline{\DUrole{kt}{int}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{etype\_list\_length}}}}%
18152\pysigstopmultiline
18153\end{fulllineitems}
18154
18155\index{krb5\_get\_init\_creds\_opt.address\_list (C member)@\spxentry{krb5\_get\_init\_creds\_opt.address\_list}\spxextra{C member}}
18156
18157\begin{fulllineitems}
18158\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.address_list}}%
18159\pysigstartmultiline
18160\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{address\_list}}}}%
18161\pysigstopmultiline
18162\end{fulllineitems}
18163
18164\index{krb5\_get\_init\_creds\_opt.preauth\_list (C member)@\spxentry{krb5\_get\_init\_creds\_opt.preauth\_list}\spxextra{C member}}
18165
18166\begin{fulllineitems}
18167\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.preauth_list}}%
18168\pysigstartmultiline
18169\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}]{\sphinxcrossref{\DUrole{n}{krb5\_preauthtype}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{preauth\_list}}}}%
18170\pysigstopmultiline
18171\end{fulllineitems}
18172
18173\index{krb5\_get\_init\_creds\_opt.preauth\_list\_length (C member)@\spxentry{krb5\_get\_init\_creds\_opt.preauth\_list\_length}\spxextra{C member}}
18174
18175\begin{fulllineitems}
18176\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.preauth_list_length}}%
18177\pysigstartmultiline
18178\pysigline{\DUrole{kt}{int}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{preauth\_list\_length}}}}%
18179\pysigstopmultiline
18180\end{fulllineitems}
18181
18182\index{krb5\_get\_init\_creds\_opt.salt (C member)@\spxentry{krb5\_get\_init\_creds\_opt.salt}\spxextra{C member}}
18183
18184\begin{fulllineitems}
18185\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.salt}}%
18186\pysigstartmultiline
18187\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_get\_init\_creds\_opt}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{salt}}}}%
18188\pysigstopmultiline
18189\end{fulllineitems}
18190
18191
18192
18193\subsubsection{krb5\_gic\_opt\_pa\_data}
18194\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}}\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data::doc}}\index{krb5\_gic\_opt\_pa\_data (C type)@\spxentry{krb5\_gic\_opt\_pa\_data}\spxextra{C type}}
18195
18196\begin{fulllineitems}
18197\phantomsection\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:c.krb5_gic_opt_pa_data}}%
18198\pysigstartmultiline
18199\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_gic\_opt\_pa\_data}}}}%
18200\pysigstopmultiline
18201\end{fulllineitems}
18202
18203
18204\sphinxAtStartPar
18205Generic preauth option attribute/value pairs.
18206
18207
18208\paragraph{Declaration}
18209\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:declaration}}
18210\sphinxAtStartPar
18211typedef struct \_krb5\_gic\_opt\_pa\_data krb5\_gic\_opt\_pa\_data
18212
18213
18214\paragraph{Members}
18215\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:members}}\index{krb5\_gic\_opt\_pa\_data.attr (C member)@\spxentry{krb5\_gic\_opt\_pa\_data.attr}\spxextra{C member}}
18216
18217\begin{fulllineitems}
18218\phantomsection\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:c.krb5_gic_opt_pa_data.attr}}%
18219\pysigstartmultiline
18220\pysigline{\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:c.krb5_gic_opt_pa_data}]{\sphinxcrossref{\DUrole{n}{krb5\_gic\_opt\_pa\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{attr}}}}%
18221\pysigstopmultiline
18222\end{fulllineitems}
18223
18224\index{krb5\_gic\_opt\_pa\_data.value (C member)@\spxentry{krb5\_gic\_opt\_pa\_data.value}\spxextra{C member}}
18225
18226\begin{fulllineitems}
18227\phantomsection\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:c.krb5_gic_opt_pa_data.value}}%
18228\pysigstartmultiline
18229\pysigline{\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:c.krb5_gic_opt_pa_data}]{\sphinxcrossref{\DUrole{n}{krb5\_gic\_opt\_pa\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{value}}}}%
18230\pysigstopmultiline
18231\end{fulllineitems}
18232
18233
18234
18235\subsubsection{krb5\_int16}
18236\label{\detokenize{appdev/refs/types/krb5_int16:krb5-int16}}\label{\detokenize{appdev/refs/types/krb5_int16:krb5-int16-struct}}\label{\detokenize{appdev/refs/types/krb5_int16::doc}}\index{krb5\_int16 (C type)@\spxentry{krb5\_int16}\spxextra{C type}}
18237
18238\begin{fulllineitems}
18239\phantomsection\label{\detokenize{appdev/refs/types/krb5_int16:c.krb5_int16}}%
18240\pysigstartmultiline
18241\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_int16}}}}%
18242\pysigstopmultiline
18243\end{fulllineitems}
18244
18245
18246
18247\paragraph{Declaration}
18248\label{\detokenize{appdev/refs/types/krb5_int16:declaration}}
18249\sphinxAtStartPar
18250typedef int16\_t krb5\_int16
18251
18252
18253\subsubsection{krb5\_int32}
18254\label{\detokenize{appdev/refs/types/krb5_int32:krb5-int32}}\label{\detokenize{appdev/refs/types/krb5_int32:krb5-int32-struct}}\label{\detokenize{appdev/refs/types/krb5_int32::doc}}\index{krb5\_int32 (C type)@\spxentry{krb5\_int32}\spxextra{C type}}
18255
18256\begin{fulllineitems}
18257\phantomsection\label{\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}}%
18258\pysigstartmultiline
18259\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_int32}}}}%
18260\pysigstopmultiline
18261\end{fulllineitems}
18262
18263
18264
18265\paragraph{Declaration}
18266\label{\detokenize{appdev/refs/types/krb5_int32:declaration}}
18267\sphinxAtStartPar
18268typedef int32\_t krb5\_int32
18269
18270
18271\subsubsection{krb5\_kdc\_rep}
18272\label{\detokenize{appdev/refs/types/krb5_kdc_rep:krb5-kdc-rep}}\label{\detokenize{appdev/refs/types/krb5_kdc_rep:krb5-kdc-rep-struct}}\label{\detokenize{appdev/refs/types/krb5_kdc_rep::doc}}\index{krb5\_kdc\_rep (C type)@\spxentry{krb5\_kdc\_rep}\spxextra{C type}}
18273
18274\begin{fulllineitems}
18275\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}}%
18276\pysigstartmultiline
18277\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kdc\_rep}}}}%
18278\pysigstopmultiline
18279\end{fulllineitems}
18280
18281
18282\sphinxAtStartPar
18283Representation of the \sphinxstyleemphasis{KDC\sphinxhyphen{}REP} protocol message.
18284
18285
18286\paragraph{Declaration}
18287\label{\detokenize{appdev/refs/types/krb5_kdc_rep:declaration}}
18288\sphinxAtStartPar
18289typedef struct \_krb5\_kdc\_rep krb5\_kdc\_rep
18290
18291
18292\paragraph{Members}
18293\label{\detokenize{appdev/refs/types/krb5_kdc_rep:members}}\index{krb5\_kdc\_rep.magic (C member)@\spxentry{krb5\_kdc\_rep.magic}\spxextra{C member}}
18294
18295\begin{fulllineitems}
18296\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.magic}}%
18297\pysigstartmultiline
18298\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_rep}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
18299\pysigstopmultiline
18300\end{fulllineitems}
18301
18302\index{krb5\_kdc\_rep.msg\_type (C member)@\spxentry{krb5\_kdc\_rep.msg\_type}\spxextra{C member}}
18303
18304\begin{fulllineitems}
18305\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.msg_type}}%
18306\pysigstartmultiline
18307\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_msgtype:c.krb5_msgtype}]{\sphinxcrossref{\DUrole{n}{krb5\_msgtype}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_rep}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{msg\_type}}}}%
18308\pysigstopmultiline
18309\sphinxAtStartPar
18310KRB5\_AS\_REP or KRB5\_KDC\_REP.
18311
18312\end{fulllineitems}
18313
18314\index{krb5\_kdc\_rep.padata (C member)@\spxentry{krb5\_kdc\_rep.padata}\spxextra{C member}}
18315
18316\begin{fulllineitems}
18317\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.padata}}%
18318\pysigstartmultiline
18319\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data}]{\sphinxcrossref{\DUrole{n}{krb5\_pa\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_rep}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{padata}}}}%
18320\pysigstopmultiline
18321\sphinxAtStartPar
18322Preauthentication data from KDC.
18323
18324\end{fulllineitems}
18325
18326\index{krb5\_kdc\_rep.client (C member)@\spxentry{krb5\_kdc\_rep.client}\spxextra{C member}}
18327
18328\begin{fulllineitems}
18329\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.client}}%
18330\pysigstartmultiline
18331\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_rep}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{client}}}}%
18332\pysigstopmultiline
18333\sphinxAtStartPar
18334Client principal and realm.
18335
18336\end{fulllineitems}
18337
18338\index{krb5\_kdc\_rep.ticket (C member)@\spxentry{krb5\_kdc\_rep.ticket}\spxextra{C member}}
18339
18340\begin{fulllineitems}
18341\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.ticket}}%
18342\pysigstartmultiline
18343\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_rep}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{ticket}}}}%
18344\pysigstopmultiline
18345\sphinxAtStartPar
18346Ticket.
18347
18348\end{fulllineitems}
18349
18350\index{krb5\_kdc\_rep.enc\_part (C member)@\spxentry{krb5\_kdc\_rep.enc\_part}\spxextra{C member}}
18351
18352\begin{fulllineitems}
18353\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.enc_part}}%
18354\pysigstartmultiline
18355\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_data}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_rep}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{enc\_part}}}}%
18356\pysigstopmultiline
18357\sphinxAtStartPar
18358Encrypted part of reply.
18359
18360\end{fulllineitems}
18361
18362\index{krb5\_kdc\_rep.enc\_part2 (C member)@\spxentry{krb5\_kdc\_rep.enc\_part2}\spxextra{C member}}
18363
18364\begin{fulllineitems}
18365\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.enc_part2}}%
18366\pysigstartmultiline
18367\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_kdc\_rep\_part}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_rep}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{enc\_part2}}}}%
18368\pysigstopmultiline
18369\sphinxAtStartPar
18370Unencrypted version, if available.
18371
18372\end{fulllineitems}
18373
18374
18375
18376\subsubsection{krb5\_kdc\_req}
18377\label{\detokenize{appdev/refs/types/krb5_kdc_req:krb5-kdc-req}}\label{\detokenize{appdev/refs/types/krb5_kdc_req:krb5-kdc-req-struct}}\label{\detokenize{appdev/refs/types/krb5_kdc_req::doc}}\index{krb5\_kdc\_req (C type)@\spxentry{krb5\_kdc\_req}\spxextra{C type}}
18378
18379\begin{fulllineitems}
18380\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}}%
18381\pysigstartmultiline
18382\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kdc\_req}}}}%
18383\pysigstopmultiline
18384\end{fulllineitems}
18385
18386
18387\sphinxAtStartPar
18388C representation of KDC\sphinxhyphen{}REQ protocol message, including KDC\sphinxhyphen{}REQ\sphinxhyphen{}BODY.
18389
18390
18391\paragraph{Declaration}
18392\label{\detokenize{appdev/refs/types/krb5_kdc_req:declaration}}
18393\sphinxAtStartPar
18394typedef struct \_krb5\_kdc\_req krb5\_kdc\_req
18395
18396
18397\paragraph{Members}
18398\label{\detokenize{appdev/refs/types/krb5_kdc_req:members}}\index{krb5\_kdc\_req.magic (C member)@\spxentry{krb5\_kdc\_req.magic}\spxextra{C member}}
18399
18400\begin{fulllineitems}
18401\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.magic}}%
18402\pysigstartmultiline
18403\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
18404\pysigstopmultiline
18405\end{fulllineitems}
18406
18407\index{krb5\_kdc\_req.msg\_type (C member)@\spxentry{krb5\_kdc\_req.msg\_type}\spxextra{C member}}
18408
18409\begin{fulllineitems}
18410\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.msg_type}}%
18411\pysigstartmultiline
18412\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_msgtype:c.krb5_msgtype}]{\sphinxcrossref{\DUrole{n}{krb5\_msgtype}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{msg\_type}}}}%
18413\pysigstopmultiline
18414\sphinxAtStartPar
18415KRB5\_AS\_REQ or KRB5\_TGS\_REQ.
18416
18417\end{fulllineitems}
18418
18419\index{krb5\_kdc\_req.padata (C member)@\spxentry{krb5\_kdc\_req.padata}\spxextra{C member}}
18420
18421\begin{fulllineitems}
18422\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.padata}}%
18423\pysigstartmultiline
18424\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data}]{\sphinxcrossref{\DUrole{n}{krb5\_pa\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{padata}}}}%
18425\pysigstopmultiline
18426\sphinxAtStartPar
18427Preauthentication data.
18428
18429\end{fulllineitems}
18430
18431\index{krb5\_kdc\_req.kdc\_options (C member)@\spxentry{krb5\_kdc\_req.kdc\_options}\spxextra{C member}}
18432
18433\begin{fulllineitems}
18434\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.kdc_options}}%
18435\pysigstartmultiline
18436\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{kdc\_options}}}}%
18437\pysigstopmultiline
18438\sphinxAtStartPar
18439Requested options.
18440
18441\end{fulllineitems}
18442
18443\index{krb5\_kdc\_req.client (C member)@\spxentry{krb5\_kdc\_req.client}\spxextra{C member}}
18444
18445\begin{fulllineitems}
18446\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.client}}%
18447\pysigstartmultiline
18448\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{client}}}}%
18449\pysigstopmultiline
18450\sphinxAtStartPar
18451Client principal and realm.
18452
18453\end{fulllineitems}
18454
18455\index{krb5\_kdc\_req.server (C member)@\spxentry{krb5\_kdc\_req.server}\spxextra{C member}}
18456
18457\begin{fulllineitems}
18458\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.server}}%
18459\pysigstartmultiline
18460\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{server}}}}%
18461\pysigstopmultiline
18462\sphinxAtStartPar
18463Server principal and realm.
18464
18465\end{fulllineitems}
18466
18467\index{krb5\_kdc\_req.from (C member)@\spxentry{krb5\_kdc\_req.from}\spxextra{C member}}
18468
18469\begin{fulllineitems}
18470\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.from}}%
18471\pysigstartmultiline
18472\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{from}}}}%
18473\pysigstopmultiline
18474\sphinxAtStartPar
18475Requested start time.
18476
18477\end{fulllineitems}
18478
18479\index{krb5\_kdc\_req.till (C member)@\spxentry{krb5\_kdc\_req.till}\spxextra{C member}}
18480
18481\begin{fulllineitems}
18482\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.till}}%
18483\pysigstartmultiline
18484\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{till}}}}%
18485\pysigstopmultiline
18486\sphinxAtStartPar
18487Requested end time.
18488
18489\end{fulllineitems}
18490
18491\index{krb5\_kdc\_req.rtime (C member)@\spxentry{krb5\_kdc\_req.rtime}\spxextra{C member}}
18492
18493\begin{fulllineitems}
18494\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.rtime}}%
18495\pysigstartmultiline
18496\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{rtime}}}}%
18497\pysigstopmultiline
18498\sphinxAtStartPar
18499Requested renewable end time.
18500
18501\end{fulllineitems}
18502
18503\index{krb5\_kdc\_req.nonce (C member)@\spxentry{krb5\_kdc\_req.nonce}\spxextra{C member}}
18504
18505\begin{fulllineitems}
18506\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.nonce}}%
18507\pysigstartmultiline
18508\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{nonce}}}}%
18509\pysigstopmultiline
18510\sphinxAtStartPar
18511Nonce to match request and response.
18512
18513\end{fulllineitems}
18514
18515\index{krb5\_kdc\_req.nktypes (C member)@\spxentry{krb5\_kdc\_req.nktypes}\spxextra{C member}}
18516
18517\begin{fulllineitems}
18518\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.nktypes}}%
18519\pysigstartmultiline
18520\pysigline{\DUrole{kt}{int}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{nktypes}}}}%
18521\pysigstopmultiline
18522\sphinxAtStartPar
18523Number of enctypes.
18524
18525\end{fulllineitems}
18526
18527\index{krb5\_kdc\_req.ktype (C member)@\spxentry{krb5\_kdc\_req.ktype}\spxextra{C member}}
18528
18529\begin{fulllineitems}
18530\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.ktype}}%
18531\pysigstartmultiline
18532\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{ktype}}}}%
18533\pysigstopmultiline
18534\sphinxAtStartPar
18535Requested enctypes.
18536
18537\end{fulllineitems}
18538
18539\index{krb5\_kdc\_req.addresses (C member)@\spxentry{krb5\_kdc\_req.addresses}\spxextra{C member}}
18540
18541\begin{fulllineitems}
18542\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.addresses}}%
18543\pysigstartmultiline
18544\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{\DUrole{n}{krb5\_address}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{addresses}}}}%
18545\pysigstopmultiline
18546\sphinxAtStartPar
18547Requested addresses (optional)
18548
18549\end{fulllineitems}
18550
18551\index{krb5\_kdc\_req.authorization\_data (C member)@\spxentry{krb5\_kdc\_req.authorization\_data}\spxextra{C member}}
18552
18553\begin{fulllineitems}
18554\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.authorization_data}}%
18555\pysigstartmultiline
18556\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_data}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{authorization\_data}}}}%
18557\pysigstopmultiline
18558\sphinxAtStartPar
18559Encrypted authz data (optional)
18560
18561\end{fulllineitems}
18562
18563\index{krb5\_kdc\_req.unenc\_authdata (C member)@\spxentry{krb5\_kdc\_req.unenc\_authdata}\spxextra{C member}}
18564
18565\begin{fulllineitems}
18566\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.unenc_authdata}}%
18567\pysigstartmultiline
18568\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{\DUrole{n}{krb5\_authdata}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{unenc\_authdata}}}}%
18569\pysigstopmultiline
18570\sphinxAtStartPar
18571Unencrypted authz data.
18572
18573\end{fulllineitems}
18574
18575\index{krb5\_kdc\_req.second\_ticket (C member)@\spxentry{krb5\_kdc\_req.second\_ticket}\spxextra{C member}}
18576
18577\begin{fulllineitems}
18578\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.second_ticket}}%
18579\pysigstartmultiline
18580\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}]{\sphinxcrossref{\DUrole{n}{krb5\_kdc\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{second\_ticket}}}}%
18581\pysigstopmultiline
18582\sphinxAtStartPar
18583Second ticket array (optional)
18584
18585\end{fulllineitems}
18586
18587
18588
18589\subsubsection{krb5\_keyblock}
18590\label{\detokenize{appdev/refs/types/krb5_keyblock:krb5-keyblock}}\label{\detokenize{appdev/refs/types/krb5_keyblock:krb5-keyblock-struct}}\label{\detokenize{appdev/refs/types/krb5_keyblock::doc}}\index{krb5\_keyblock (C type)@\spxentry{krb5\_keyblock}\spxextra{C type}}
18591
18592\begin{fulllineitems}
18593\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}}%
18594\pysigstartmultiline
18595\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_keyblock}}}}%
18596\pysigstopmultiline
18597\end{fulllineitems}
18598
18599
18600\sphinxAtStartPar
18601Exposed contents of a key.
18602
18603
18604\paragraph{Declaration}
18605\label{\detokenize{appdev/refs/types/krb5_keyblock:declaration}}
18606\sphinxAtStartPar
18607typedef struct \_krb5\_keyblock krb5\_keyblock
18608
18609
18610\paragraph{Members}
18611\label{\detokenize{appdev/refs/types/krb5_keyblock:members}}\index{krb5\_keyblock.magic (C member)@\spxentry{krb5\_keyblock.magic}\spxextra{C member}}
18612
18613\begin{fulllineitems}
18614\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock.magic}}%
18615\pysigstartmultiline
18616\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
18617\pysigstopmultiline
18618\end{fulllineitems}
18619
18620\index{krb5\_keyblock.enctype (C member)@\spxentry{krb5\_keyblock.enctype}\spxextra{C member}}
18621
18622\begin{fulllineitems}
18623\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock.enctype}}%
18624\pysigstartmultiline
18625\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{\DUrole{n}{krb5\_enctype}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{enctype}}}}%
18626\pysigstopmultiline
18627\end{fulllineitems}
18628
18629\index{krb5\_keyblock.length (C member)@\spxentry{krb5\_keyblock.length}\spxextra{C member}}
18630
18631\begin{fulllineitems}
18632\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock.length}}%
18633\pysigstartmultiline
18634\pysigline{\DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{length}}}}%
18635\pysigstopmultiline
18636\end{fulllineitems}
18637
18638\index{krb5\_keyblock.contents (C member)@\spxentry{krb5\_keyblock.contents}\spxextra{C member}}
18639
18640\begin{fulllineitems}
18641\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock.contents}}%
18642\pysigstartmultiline
18643\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{\DUrole{n}{krb5\_octet}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{contents}}}}%
18644\pysigstopmultiline
18645\end{fulllineitems}
18646
18647
18648
18649\subsubsection{krb5\_keytab\_entry}
18650\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)@\spxentry{krb5\_keytab\_entry}\spxextra{C type}}
18651
18652\begin{fulllineitems}
18653\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}}%
18654\pysigstartmultiline
18655\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_keytab\_entry}}}}%
18656\pysigstopmultiline
18657\end{fulllineitems}
18658
18659
18660\sphinxAtStartPar
18661A key table entry.
18662
18663
18664\paragraph{Declaration}
18665\label{\detokenize{appdev/refs/types/krb5_keytab_entry:declaration}}
18666\sphinxAtStartPar
18667typedef struct krb5\_keytab\_entry\_st krb5\_keytab\_entry
18668
18669
18670\paragraph{Members}
18671\label{\detokenize{appdev/refs/types/krb5_keytab_entry:members}}\index{krb5\_keytab\_entry.magic (C member)@\spxentry{krb5\_keytab\_entry.magic}\spxextra{C member}}
18672
18673\begin{fulllineitems}
18674\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry.magic}}%
18675\pysigstartmultiline
18676\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab\_entry}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
18677\pysigstopmultiline
18678\end{fulllineitems}
18679
18680\index{krb5\_keytab\_entry.principal (C member)@\spxentry{krb5\_keytab\_entry.principal}\spxextra{C member}}
18681
18682\begin{fulllineitems}
18683\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry.principal}}%
18684\pysigstartmultiline
18685\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab\_entry}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{principal}}}}%
18686\pysigstopmultiline
18687\sphinxAtStartPar
18688Principal of this key.
18689
18690\end{fulllineitems}
18691
18692\index{krb5\_keytab\_entry.timestamp (C member)@\spxentry{krb5\_keytab\_entry.timestamp}\spxextra{C member}}
18693
18694\begin{fulllineitems}
18695\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry.timestamp}}%
18696\pysigstartmultiline
18697\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab\_entry}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{timestamp}}}}%
18698\pysigstopmultiline
18699\sphinxAtStartPar
18700Time entry written to keytable.
18701
18702\end{fulllineitems}
18703
18704\index{krb5\_keytab\_entry.vno (C member)@\spxentry{krb5\_keytab\_entry.vno}\spxextra{C member}}
18705
18706\begin{fulllineitems}
18707\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry.vno}}%
18708\pysigstartmultiline
18709\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_kvno:c.krb5_kvno}]{\sphinxcrossref{\DUrole{n}{krb5\_kvno}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab\_entry}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{vno}}}}%
18710\pysigstopmultiline
18711\sphinxAtStartPar
18712Key version number.
18713
18714\end{fulllineitems}
18715
18716\index{krb5\_keytab\_entry.key (C member)@\spxentry{krb5\_keytab\_entry.key}\spxextra{C member}}
18717
18718\begin{fulllineitems}
18719\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry.key}}%
18720\pysigstartmultiline
18721\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{\DUrole{n}{krb5\_keyblock}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{\DUrole{n}{krb5\_keytab\_entry}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{key}}}}%
18722\pysigstopmultiline
18723\sphinxAtStartPar
18724The secret key.
18725
18726\end{fulllineitems}
18727
18728
18729
18730\subsubsection{krb5\_keyusage}
18731\label{\detokenize{appdev/refs/types/krb5_keyusage:krb5-keyusage}}\label{\detokenize{appdev/refs/types/krb5_keyusage:krb5-keyusage-struct}}\label{\detokenize{appdev/refs/types/krb5_keyusage::doc}}\index{krb5\_keyusage (C type)@\spxentry{krb5\_keyusage}\spxextra{C type}}
18732
18733\begin{fulllineitems}
18734\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}}%
18735\pysigstartmultiline
18736\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_keyusage}}}}%
18737\pysigstopmultiline
18738\end{fulllineitems}
18739
18740
18741
18742\paragraph{Declaration}
18743\label{\detokenize{appdev/refs/types/krb5_keyusage:declaration}}
18744\sphinxAtStartPar
18745typedef krb5\_int32 krb5\_keyusage
18746
18747
18748\subsubsection{krb5\_kt\_cursor}
18749\label{\detokenize{appdev/refs/types/krb5_kt_cursor:krb5-kt-cursor}}\label{\detokenize{appdev/refs/types/krb5_kt_cursor:krb5-kt-cursor-struct}}\label{\detokenize{appdev/refs/types/krb5_kt_cursor::doc}}\index{krb5\_kt\_cursor (C type)@\spxentry{krb5\_kt\_cursor}\spxextra{C type}}
18750
18751\begin{fulllineitems}
18752\phantomsection\label{\detokenize{appdev/refs/types/krb5_kt_cursor:c.krb5_kt_cursor}}%
18753\pysigstartmultiline
18754\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kt\_cursor}}}}%
18755\pysigstopmultiline
18756\end{fulllineitems}
18757
18758
18759
18760\paragraph{Declaration}
18761\label{\detokenize{appdev/refs/types/krb5_kt_cursor:declaration}}
18762\sphinxAtStartPar
18763typedef krb5\_pointer krb5\_kt\_cursor
18764
18765
18766\subsubsection{krb5\_kvno}
18767\label{\detokenize{appdev/refs/types/krb5_kvno:krb5-kvno}}\label{\detokenize{appdev/refs/types/krb5_kvno:krb5-kvno-struct}}\label{\detokenize{appdev/refs/types/krb5_kvno::doc}}\index{krb5\_kvno (C type)@\spxentry{krb5\_kvno}\spxextra{C type}}
18768
18769\begin{fulllineitems}
18770\phantomsection\label{\detokenize{appdev/refs/types/krb5_kvno:c.krb5_kvno}}%
18771\pysigstartmultiline
18772\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_kvno}}}}%
18773\pysigstopmultiline
18774\end{fulllineitems}
18775
18776
18777
18778\paragraph{Declaration}
18779\label{\detokenize{appdev/refs/types/krb5_kvno:declaration}}
18780\sphinxAtStartPar
18781typedef unsigned int krb5\_kvno
18782
18783
18784\subsubsection{krb5\_last\_req\_entry}
18785\label{\detokenize{appdev/refs/types/krb5_last_req_entry:krb5-last-req-entry}}\label{\detokenize{appdev/refs/types/krb5_last_req_entry:krb5-last-req-entry-struct}}\label{\detokenize{appdev/refs/types/krb5_last_req_entry::doc}}\index{krb5\_last\_req\_entry (C type)@\spxentry{krb5\_last\_req\_entry}\spxextra{C type}}
18786
18787\begin{fulllineitems}
18788\phantomsection\label{\detokenize{appdev/refs/types/krb5_last_req_entry:c.krb5_last_req_entry}}%
18789\pysigstartmultiline
18790\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_last\_req\_entry}}}}%
18791\pysigstopmultiline
18792\end{fulllineitems}
18793
18794
18795\sphinxAtStartPar
18796Last request entry.
18797
18798
18799\paragraph{Declaration}
18800\label{\detokenize{appdev/refs/types/krb5_last_req_entry:declaration}}
18801\sphinxAtStartPar
18802typedef struct \_krb5\_last\_req\_entry krb5\_last\_req\_entry
18803
18804
18805\paragraph{Members}
18806\label{\detokenize{appdev/refs/types/krb5_last_req_entry:members}}\index{krb5\_last\_req\_entry.magic (C member)@\spxentry{krb5\_last\_req\_entry.magic}\spxextra{C member}}
18807
18808\begin{fulllineitems}
18809\phantomsection\label{\detokenize{appdev/refs/types/krb5_last_req_entry:c.krb5_last_req_entry.magic}}%
18810\pysigstartmultiline
18811\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_last_req_entry:c.krb5_last_req_entry}]{\sphinxcrossref{\DUrole{n}{krb5\_last\_req\_entry}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
18812\pysigstopmultiline
18813\end{fulllineitems}
18814
18815\index{krb5\_last\_req\_entry.lr\_type (C member)@\spxentry{krb5\_last\_req\_entry.lr\_type}\spxextra{C member}}
18816
18817\begin{fulllineitems}
18818\phantomsection\label{\detokenize{appdev/refs/types/krb5_last_req_entry:c.krb5_last_req_entry.lr_type}}%
18819\pysigstartmultiline
18820\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_last_req_entry:c.krb5_last_req_entry}]{\sphinxcrossref{\DUrole{n}{krb5\_last\_req\_entry}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{lr\_type}}}}%
18821\pysigstopmultiline
18822\sphinxAtStartPar
18823LR type.
18824
18825\end{fulllineitems}
18826
18827\index{krb5\_last\_req\_entry.value (C member)@\spxentry{krb5\_last\_req\_entry.value}\spxextra{C member}}
18828
18829\begin{fulllineitems}
18830\phantomsection\label{\detokenize{appdev/refs/types/krb5_last_req_entry:c.krb5_last_req_entry.value}}%
18831\pysigstartmultiline
18832\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_last_req_entry:c.krb5_last_req_entry}]{\sphinxcrossref{\DUrole{n}{krb5\_last\_req\_entry}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{value}}}}%
18833\pysigstopmultiline
18834\sphinxAtStartPar
18835Timestamp.
18836
18837\end{fulllineitems}
18838
18839
18840
18841\subsubsection{krb5\_magic}
18842\label{\detokenize{appdev/refs/types/krb5_magic:krb5-magic}}\label{\detokenize{appdev/refs/types/krb5_magic:krb5-magic-struct}}\label{\detokenize{appdev/refs/types/krb5_magic::doc}}\index{krb5\_magic (C type)@\spxentry{krb5\_magic}\spxextra{C type}}
18843
18844\begin{fulllineitems}
18845\phantomsection\label{\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}}%
18846\pysigstartmultiline
18847\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_magic}}}}%
18848\pysigstopmultiline
18849\end{fulllineitems}
18850
18851
18852
18853\paragraph{Declaration}
18854\label{\detokenize{appdev/refs/types/krb5_magic:declaration}}
18855\sphinxAtStartPar
18856typedef krb5\_error\_code krb5\_magic
18857
18858
18859\subsubsection{krb5\_mk\_req\_checksum\_func}
18860\label{\detokenize{appdev/refs/types/krb5_mk_req_checksum_func:krb5-mk-req-checksum-func}}\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}}\index{krb5\_mk\_req\_checksum\_func (C type)@\spxentry{krb5\_mk\_req\_checksum\_func}\spxextra{C type}}
18861
18862\begin{fulllineitems}
18863\phantomsection\label{\detokenize{appdev/refs/types/krb5_mk_req_checksum_func:c.krb5_mk_req_checksum_func}}%
18864\pysigstartmultiline
18865\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_mk\_req\_checksum\_func}}}}%
18866\pysigstopmultiline
18867\end{fulllineitems}
18868
18869
18870\sphinxAtStartPar
18871Type of function used as a callback to generate checksum data for mk\_req.
18872
18873
18874\paragraph{Declaration}
18875\label{\detokenize{appdev/refs/types/krb5_mk_req_checksum_func:declaration}}
18876\sphinxAtStartPar
18877typedef krb5\_error\_code( * krb5\_mk\_req\_checksum\_func) (krb5\_context, krb5\_auth\_context, void *, krb5\_data **)
18878
18879
18880\subsubsection{krb5\_msgtype}
18881\label{\detokenize{appdev/refs/types/krb5_msgtype:krb5-msgtype}}\label{\detokenize{appdev/refs/types/krb5_msgtype:krb5-msgtype-struct}}\label{\detokenize{appdev/refs/types/krb5_msgtype::doc}}\index{krb5\_msgtype (C type)@\spxentry{krb5\_msgtype}\spxextra{C type}}
18882
18883\begin{fulllineitems}
18884\phantomsection\label{\detokenize{appdev/refs/types/krb5_msgtype:c.krb5_msgtype}}%
18885\pysigstartmultiline
18886\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_msgtype}}}}%
18887\pysigstopmultiline
18888\end{fulllineitems}
18889
18890
18891
18892\paragraph{Declaration}
18893\label{\detokenize{appdev/refs/types/krb5_msgtype:declaration}}
18894\sphinxAtStartPar
18895typedef unsigned int krb5\_msgtype
18896
18897
18898\subsubsection{krb5\_octet}
18899\label{\detokenize{appdev/refs/types/krb5_octet:krb5-octet}}\label{\detokenize{appdev/refs/types/krb5_octet:krb5-octet-struct}}\label{\detokenize{appdev/refs/types/krb5_octet::doc}}\index{krb5\_octet (C type)@\spxentry{krb5\_octet}\spxextra{C type}}
18900
18901\begin{fulllineitems}
18902\phantomsection\label{\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}}%
18903\pysigstartmultiline
18904\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_octet}}}}%
18905\pysigstopmultiline
18906\end{fulllineitems}
18907
18908
18909
18910\paragraph{Declaration}
18911\label{\detokenize{appdev/refs/types/krb5_octet:declaration}}
18912\sphinxAtStartPar
18913typedef uint8\_t krb5\_octet
18914
18915
18916\subsubsection{krb5\_pa\_pac\_req}
18917\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:krb5-pa-pac-req}}\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:krb5-pa-pac-req-struct}}\label{\detokenize{appdev/refs/types/krb5_pa_pac_req::doc}}\index{krb5\_pa\_pac\_req (C type)@\spxentry{krb5\_pa\_pac\_req}\spxextra{C type}}
18918
18919\begin{fulllineitems}
18920\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:c.krb5_pa_pac_req}}%
18921\pysigstartmultiline
18922\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_pa\_pac\_req}}}}%
18923\pysigstopmultiline
18924\end{fulllineitems}
18925
18926
18927
18928\paragraph{Declaration}
18929\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:declaration}}
18930\sphinxAtStartPar
18931typedef struct \_krb5\_pa\_pac\_req krb5\_pa\_pac\_req
18932
18933
18934\paragraph{Members}
18935\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:members}}\index{krb5\_pa\_pac\_req.include\_pac (C member)@\spxentry{krb5\_pa\_pac\_req.include\_pac}\spxextra{C member}}
18936
18937\begin{fulllineitems}
18938\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:c.krb5_pa_pac_req.include_pac}}%
18939\pysigstartmultiline
18940\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{\DUrole{n}{krb5\_boolean}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_pac_req:c.krb5_pa_pac_req}]{\sphinxcrossref{\DUrole{n}{krb5\_pa\_pac\_req}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{include\_pac}}}}%
18941\pysigstopmultiline
18942\sphinxAtStartPar
18943TRUE if a PAC should be included in TGS\sphinxhyphen{}REP.
18944
18945\end{fulllineitems}
18946
18947
18948
18949\subsubsection{krb5\_pa\_server\_referral\_data}
18950\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:krb5-pa-server-referral-data}}\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}}\index{krb5\_pa\_server\_referral\_data (C type)@\spxentry{krb5\_pa\_server\_referral\_data}\spxextra{C type}}
18951
18952\begin{fulllineitems}
18953\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data}}%
18954\pysigstartmultiline
18955\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_pa\_server\_referral\_data}}}}%
18956\pysigstopmultiline
18957\end{fulllineitems}
18958
18959
18960
18961\paragraph{Declaration}
18962\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:declaration}}
18963\sphinxAtStartPar
18964typedef struct \_krb5\_pa\_server\_referral\_data krb5\_pa\_server\_referral\_data
18965
18966
18967\paragraph{Members}
18968\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:members}}\index{krb5\_pa\_server\_referral\_data.referred\_realm (C member)@\spxentry{krb5\_pa\_server\_referral\_data.referred\_realm}\spxextra{C member}}
18969
18970\begin{fulllineitems}
18971\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data.referred_realm}}%
18972\pysigstartmultiline
18973\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data}]{\sphinxcrossref{\DUrole{n}{krb5\_pa\_server\_referral\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{referred\_realm}}}}%
18974\pysigstopmultiline
18975\end{fulllineitems}
18976
18977\index{krb5\_pa\_server\_referral\_data.true\_principal\_name (C member)@\spxentry{krb5\_pa\_server\_referral\_data.true\_principal\_name}\spxextra{C member}}
18978
18979\begin{fulllineitems}
18980\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data.true_principal_name}}%
18981\pysigstartmultiline
18982\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data}]{\sphinxcrossref{\DUrole{n}{krb5\_pa\_server\_referral\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{true\_principal\_name}}}}%
18983\pysigstopmultiline
18984\end{fulllineitems}
18985
18986\index{krb5\_pa\_server\_referral\_data.requested\_principal\_name (C member)@\spxentry{krb5\_pa\_server\_referral\_data.requested\_principal\_name}\spxextra{C member}}
18987
18988\begin{fulllineitems}
18989\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data.requested_principal_name}}%
18990\pysigstartmultiline
18991\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data}]{\sphinxcrossref{\DUrole{n}{krb5\_pa\_server\_referral\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{requested\_principal\_name}}}}%
18992\pysigstopmultiline
18993\end{fulllineitems}
18994
18995\index{krb5\_pa\_server\_referral\_data.referral\_valid\_until (C member)@\spxentry{krb5\_pa\_server\_referral\_data.referral\_valid\_until}\spxextra{C member}}
18996
18997\begin{fulllineitems}
18998\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data.referral_valid_until}}%
18999\pysigstartmultiline
19000\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data}]{\sphinxcrossref{\DUrole{n}{krb5\_pa\_server\_referral\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{referral\_valid\_until}}}}%
19001\pysigstopmultiline
19002\end{fulllineitems}
19003
19004\index{krb5\_pa\_server\_referral\_data.rep\_cksum (C member)@\spxentry{krb5\_pa\_server\_referral\_data.rep\_cksum}\spxextra{C member}}
19005
19006\begin{fulllineitems}
19007\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data.rep_cksum}}%
19008\pysigstartmultiline
19009\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{\DUrole{n}{krb5\_checksum}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data}]{\sphinxcrossref{\DUrole{n}{krb5\_pa\_server\_referral\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{rep\_cksum}}}}%
19010\pysigstopmultiline
19011\end{fulllineitems}
19012
19013
19014
19015\subsubsection{krb5\_pa\_svr\_referral\_data}
19016\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:krb5-pa-svr-referral-data-struct}}\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data::doc}}\index{krb5\_pa\_svr\_referral\_data (C type)@\spxentry{krb5\_pa\_svr\_referral\_data}\spxextra{C type}}
19017
19018\begin{fulllineitems}
19019\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:c.krb5_pa_svr_referral_data}}%
19020\pysigstartmultiline
19021\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_pa\_svr\_referral\_data}}}}%
19022\pysigstopmultiline
19023\end{fulllineitems}
19024
19025
19026
19027\paragraph{Declaration}
19028\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:declaration}}
19029\sphinxAtStartPar
19030typedef struct \_krb5\_pa\_svr\_referral\_data krb5\_pa\_svr\_referral\_data
19031
19032
19033\paragraph{Members}
19034\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:members}}\index{krb5\_pa\_svr\_referral\_data.principal (C member)@\spxentry{krb5\_pa\_svr\_referral\_data.principal}\spxextra{C member}}
19035
19036\begin{fulllineitems}
19037\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:c.krb5_pa_svr_referral_data.principal}}%
19038\pysigstartmultiline
19039\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:c.krb5_pa_svr_referral_data}]{\sphinxcrossref{\DUrole{n}{krb5\_pa\_svr\_referral\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{principal}}}}%
19040\pysigstopmultiline
19041\sphinxAtStartPar
19042Referred name, only realm is required.
19043
19044\end{fulllineitems}
19045
19046
19047
19048\subsubsection{krb5\_pa\_data}
19049\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)@\spxentry{krb5\_pa\_data}\spxextra{C type}}
19050
19051\begin{fulllineitems}
19052\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data}}%
19053\pysigstartmultiline
19054\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_pa\_data}}}}%
19055\pysigstopmultiline
19056\end{fulllineitems}
19057
19058
19059\sphinxAtStartPar
19060Pre\sphinxhyphen{}authentication data.
19061
19062
19063\paragraph{Declaration}
19064\label{\detokenize{appdev/refs/types/krb5_pa_data:declaration}}
19065\sphinxAtStartPar
19066typedef struct \_krb5\_pa\_data krb5\_pa\_data
19067
19068
19069\paragraph{Members}
19070\label{\detokenize{appdev/refs/types/krb5_pa_data:members}}\index{krb5\_pa\_data.magic (C member)@\spxentry{krb5\_pa\_data.magic}\spxextra{C member}}
19071
19072\begin{fulllineitems}
19073\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data.magic}}%
19074\pysigstartmultiline
19075\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data}]{\sphinxcrossref{\DUrole{n}{krb5\_pa\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
19076\pysigstopmultiline
19077\end{fulllineitems}
19078
19079\index{krb5\_pa\_data.pa\_type (C member)@\spxentry{krb5\_pa\_data.pa\_type}\spxextra{C member}}
19080
19081\begin{fulllineitems}
19082\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data.pa_type}}%
19083\pysigstartmultiline
19084\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}]{\sphinxcrossref{\DUrole{n}{krb5\_preauthtype}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data}]{\sphinxcrossref{\DUrole{n}{krb5\_pa\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{pa\_type}}}}%
19085\pysigstopmultiline
19086\sphinxAtStartPar
19087Preauthentication data type.
19088
19089\end{fulllineitems}
19090
19091\index{krb5\_pa\_data.length (C member)@\spxentry{krb5\_pa\_data.length}\spxextra{C member}}
19092
19093\begin{fulllineitems}
19094\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data.length}}%
19095\pysigstartmultiline
19096\pysigline{\DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data}]{\sphinxcrossref{\DUrole{n}{krb5\_pa\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{length}}}}%
19097\pysigstopmultiline
19098\sphinxAtStartPar
19099Length of data.
19100
19101\end{fulllineitems}
19102
19103\index{krb5\_pa\_data.contents (C member)@\spxentry{krb5\_pa\_data.contents}\spxextra{C member}}
19104
19105\begin{fulllineitems}
19106\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data.contents}}%
19107\pysigstartmultiline
19108\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{\DUrole{n}{krb5\_octet}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data}]{\sphinxcrossref{\DUrole{n}{krb5\_pa\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{contents}}}}%
19109\pysigstopmultiline
19110\sphinxAtStartPar
19111Data.
19112
19113\end{fulllineitems}
19114
19115
19116
19117\subsubsection{krb5\_pointer}
19118\label{\detokenize{appdev/refs/types/krb5_pointer:krb5-pointer}}\label{\detokenize{appdev/refs/types/krb5_pointer:krb5-pointer-struct}}\label{\detokenize{appdev/refs/types/krb5_pointer::doc}}\index{krb5\_pointer (C type)@\spxentry{krb5\_pointer}\spxextra{C type}}
19119
19120\begin{fulllineitems}
19121\phantomsection\label{\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}}%
19122\pysigstartmultiline
19123\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_pointer}}}}%
19124\pysigstopmultiline
19125\end{fulllineitems}
19126
19127
19128
19129\paragraph{Declaration}
19130\label{\detokenize{appdev/refs/types/krb5_pointer:declaration}}
19131\sphinxAtStartPar
19132typedef void* krb5\_pointer
19133
19134
19135\subsubsection{krb5\_post\_recv\_fn}
19136\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)@\spxentry{krb5\_post\_recv\_fn}\spxextra{C type}}
19137
19138\begin{fulllineitems}
19139\phantomsection\label{\detokenize{appdev/refs/types/krb5_post_recv_fn:c.krb5_post_recv_fn}}%
19140\pysigstartmultiline
19141\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_post\_recv\_fn}}}}%
19142\pysigstopmultiline
19143\end{fulllineitems}
19144
19145
19146\sphinxAtStartPar
19147Hook function for inspecting or overriding KDC replies.
19148
19149\sphinxAtStartPar
19150If \sphinxstyleemphasis{code} is non\sphinxhyphen{}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.
19151The hook function should use krb5\_copy\_data() to construct the value for \sphinxstyleemphasis{new\_reply\_out} , to ensure that it can be freed correctly by the library.
19152
19153
19154\paragraph{Declaration}
19155\label{\detokenize{appdev/refs/types/krb5_post_recv_fn:declaration}}
19156\sphinxAtStartPar
19157typedef 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)
19158
19159
19160\subsubsection{krb5\_pre\_send\_fn}
19161\label{\detokenize{appdev/refs/types/krb5_pre_send_fn:krb5-pre-send-fn}}\label{\detokenize{appdev/refs/types/krb5_pre_send_fn:krb5-pre-send-fn-struct}}\label{\detokenize{appdev/refs/types/krb5_pre_send_fn::doc}}\index{krb5\_pre\_send\_fn (C type)@\spxentry{krb5\_pre\_send\_fn}\spxextra{C type}}
19162
19163\begin{fulllineitems}
19164\phantomsection\label{\detokenize{appdev/refs/types/krb5_pre_send_fn:c.krb5_pre_send_fn}}%
19165\pysigstartmultiline
19166\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_pre\_send\_fn}}}}%
19167\pysigstopmultiline
19168\end{fulllineitems}
19169
19170
19171\sphinxAtStartPar
19172Hook function for inspecting or modifying messages sent to KDCs.
19173
19174\sphinxAtStartPar
19175If the hook function sets \sphinxstyleemphasis{new\_reply\_out} , \sphinxstyleemphasis{message} will not be sent to the KDC, and the given reply will used instead.
19176If the hook function sets \sphinxstyleemphasis{new\_message\_out} , the given message will be sent to the KDC in place of \sphinxstyleemphasis{message} .
19177If the hook function returns successfully without setting either output, \sphinxstyleemphasis{message} will be sent to the KDC normally.
19178The hook function should use 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.
19179
19180
19181\paragraph{Declaration}
19182\label{\detokenize{appdev/refs/types/krb5_pre_send_fn:declaration}}
19183\sphinxAtStartPar
19184typedef 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)
19185
19186
19187\subsubsection{krb5\_preauthtype}
19188\label{\detokenize{appdev/refs/types/krb5_preauthtype:krb5-preauthtype}}\label{\detokenize{appdev/refs/types/krb5_preauthtype:krb5-preauthtype-struct}}\label{\detokenize{appdev/refs/types/krb5_preauthtype::doc}}\index{krb5\_preauthtype (C type)@\spxentry{krb5\_preauthtype}\spxextra{C type}}
19189
19190\begin{fulllineitems}
19191\phantomsection\label{\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}}%
19192\pysigstartmultiline
19193\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_preauthtype}}}}%
19194\pysigstopmultiline
19195\end{fulllineitems}
19196
19197
19198
19199\paragraph{Declaration}
19200\label{\detokenize{appdev/refs/types/krb5_preauthtype:declaration}}
19201\sphinxAtStartPar
19202typedef krb5\_int32 krb5\_preauthtype
19203
19204
19205\subsubsection{krb5\_principal}
19206\label{\detokenize{appdev/refs/types/krb5_principal:krb5-principal}}\label{\detokenize{appdev/refs/types/krb5_principal:krb5-principal-struct}}\label{\detokenize{appdev/refs/types/krb5_principal::doc}}\index{krb5\_principal (C type)@\spxentry{krb5\_principal}\spxextra{C type}}
19207
19208\begin{fulllineitems}
19209\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}}%
19210\pysigstartmultiline
19211\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_principal}}}}%
19212\pysigstopmultiline
19213\end{fulllineitems}
19214
19215
19216
19217\paragraph{Declaration}
19218\label{\detokenize{appdev/refs/types/krb5_principal:declaration}}
19219\sphinxAtStartPar
19220typedef krb5\_principal\_data* krb5\_principal
19221
19222
19223\paragraph{Members}
19224\label{\detokenize{appdev/refs/types/krb5_principal:members}}\index{krb5\_principal.magic (C member)@\spxentry{krb5\_principal.magic}\spxextra{C member}}
19225
19226\begin{fulllineitems}
19227\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal.magic}}%
19228\pysigstartmultiline
19229\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
19230\pysigstopmultiline
19231\end{fulllineitems}
19232
19233\index{krb5\_principal.realm (C member)@\spxentry{krb5\_principal.realm}\spxextra{C member}}
19234
19235\begin{fulllineitems}
19236\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal.realm}}%
19237\pysigstartmultiline
19238\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{realm}}}}%
19239\pysigstopmultiline
19240\end{fulllineitems}
19241
19242\index{krb5\_principal.data (C member)@\spxentry{krb5\_principal.data}\spxextra{C member}}
19243
19244\begin{fulllineitems}
19245\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal.data}}%
19246\pysigstartmultiline
19247\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{data}}}}%
19248\pysigstopmultiline
19249\sphinxAtStartPar
19250An array of strings.
19251
19252\end{fulllineitems}
19253
19254\index{krb5\_principal.length (C member)@\spxentry{krb5\_principal.length}\spxextra{C member}}
19255
19256\begin{fulllineitems}
19257\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal.length}}%
19258\pysigstartmultiline
19259\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{length}}}}%
19260\pysigstopmultiline
19261\end{fulllineitems}
19262
19263\index{krb5\_principal.type (C member)@\spxentry{krb5\_principal.type}\spxextra{C member}}
19264
19265\begin{fulllineitems}
19266\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal.type}}%
19267\pysigstartmultiline
19268\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{type}}}}%
19269\pysigstopmultiline
19270\end{fulllineitems}
19271
19272
19273
19274\subsubsection{krb5\_principal\_data}
19275\label{\detokenize{appdev/refs/types/krb5_principal_data:krb5-principal-data}}\label{\detokenize{appdev/refs/types/krb5_principal_data:krb5-principal-data-struct}}\label{\detokenize{appdev/refs/types/krb5_principal_data::doc}}\index{krb5\_principal\_data (C type)@\spxentry{krb5\_principal\_data}\spxextra{C type}}
19276
19277\begin{fulllineitems}
19278\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data}}%
19279\pysigstartmultiline
19280\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_principal\_data}}}}%
19281\pysigstopmultiline
19282\end{fulllineitems}
19283
19284
19285
19286\paragraph{Declaration}
19287\label{\detokenize{appdev/refs/types/krb5_principal_data:declaration}}
19288\sphinxAtStartPar
19289typedef struct krb5\_principal\_data krb5\_principal\_data
19290
19291
19292\paragraph{Members}
19293\label{\detokenize{appdev/refs/types/krb5_principal_data:members}}\index{krb5\_principal\_data.magic (C member)@\spxentry{krb5\_principal\_data.magic}\spxextra{C member}}
19294
19295\begin{fulllineitems}
19296\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data.magic}}%
19297\pysigstartmultiline
19298\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data}]{\sphinxcrossref{\DUrole{n}{krb5\_principal\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
19299\pysigstopmultiline
19300\end{fulllineitems}
19301
19302\index{krb5\_principal\_data.realm (C member)@\spxentry{krb5\_principal\_data.realm}\spxextra{C member}}
19303
19304\begin{fulllineitems}
19305\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data.realm}}%
19306\pysigstartmultiline
19307\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data}]{\sphinxcrossref{\DUrole{n}{krb5\_principal\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{realm}}}}%
19308\pysigstopmultiline
19309\end{fulllineitems}
19310
19311\index{krb5\_principal\_data.data (C member)@\spxentry{krb5\_principal\_data.data}\spxextra{C member}}
19312
19313\begin{fulllineitems}
19314\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data.data}}%
19315\pysigstartmultiline
19316\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data}]{\sphinxcrossref{\DUrole{n}{krb5\_principal\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{data}}}}%
19317\pysigstopmultiline
19318\sphinxAtStartPar
19319An array of strings.
19320
19321\end{fulllineitems}
19322
19323\index{krb5\_principal\_data.length (C member)@\spxentry{krb5\_principal\_data.length}\spxextra{C member}}
19324
19325\begin{fulllineitems}
19326\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data.length}}%
19327\pysigstartmultiline
19328\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data}]{\sphinxcrossref{\DUrole{n}{krb5\_principal\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{length}}}}%
19329\pysigstopmultiline
19330\end{fulllineitems}
19331
19332\index{krb5\_principal\_data.type (C member)@\spxentry{krb5\_principal\_data.type}\spxextra{C member}}
19333
19334\begin{fulllineitems}
19335\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data.type}}%
19336\pysigstartmultiline
19337\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data}]{\sphinxcrossref{\DUrole{n}{krb5\_principal\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{type}}}}%
19338\pysigstopmultiline
19339\end{fulllineitems}
19340
19341
19342
19343\subsubsection{krb5\_prompt}
19344\label{\detokenize{appdev/refs/types/krb5_prompt:krb5-prompt}}\label{\detokenize{appdev/refs/types/krb5_prompt:krb5-prompt-struct}}\label{\detokenize{appdev/refs/types/krb5_prompt::doc}}\index{krb5\_prompt (C type)@\spxentry{krb5\_prompt}\spxextra{C type}}
19345
19346\begin{fulllineitems}
19347\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt}}%
19348\pysigstartmultiline
19349\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_prompt}}}}%
19350\pysigstopmultiline
19351\end{fulllineitems}
19352
19353
19354\sphinxAtStartPar
19355Text for prompt used in prompter callback function.
19356
19357
19358\paragraph{Declaration}
19359\label{\detokenize{appdev/refs/types/krb5_prompt:declaration}}
19360\sphinxAtStartPar
19361typedef struct \_krb5\_prompt krb5\_prompt
19362
19363
19364\paragraph{Members}
19365\label{\detokenize{appdev/refs/types/krb5_prompt:members}}\index{krb5\_prompt.prompt (C member)@\spxentry{krb5\_prompt.prompt}\spxextra{C member}}
19366
19367\begin{fulllineitems}
19368\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt.prompt}}%
19369\pysigstartmultiline
19370\pysigline{\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt}]{\sphinxcrossref{\DUrole{n}{krb5\_prompt}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{prompt}}}}%
19371\pysigstopmultiline
19372\sphinxAtStartPar
19373The prompt to show to the user.
19374
19375\end{fulllineitems}
19376
19377\index{krb5\_prompt.hidden (C member)@\spxentry{krb5\_prompt.hidden}\spxextra{C member}}
19378
19379\begin{fulllineitems}
19380\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt.hidden}}%
19381\pysigstartmultiline
19382\pysigline{\DUrole{kt}{int}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt}]{\sphinxcrossref{\DUrole{n}{krb5\_prompt}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{hidden}}}}%
19383\pysigstopmultiline
19384\sphinxAtStartPar
19385Boolean; informative prompt or hidden (e.g.
19386PIN)
19387
19388\end{fulllineitems}
19389
19390\index{krb5\_prompt.reply (C member)@\spxentry{krb5\_prompt.reply}\spxextra{C member}}
19391
19392\begin{fulllineitems}
19393\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt.reply}}%
19394\pysigstartmultiline
19395\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt}]{\sphinxcrossref{\DUrole{n}{krb5\_prompt}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{reply}}}}%
19396\pysigstopmultiline
19397\sphinxAtStartPar
19398Must be allocated before call to prompt routine.
19399
19400\end{fulllineitems}
19401
19402
19403
19404\subsubsection{krb5\_prompt\_type}
19405\label{\detokenize{appdev/refs/types/krb5_prompt_type:krb5-prompt-type}}\label{\detokenize{appdev/refs/types/krb5_prompt_type:krb5-prompt-type-struct}}\label{\detokenize{appdev/refs/types/krb5_prompt_type::doc}}\index{krb5\_prompt\_type (C type)@\spxentry{krb5\_prompt\_type}\spxextra{C type}}
19406
19407\begin{fulllineitems}
19408\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompt_type:c.krb5_prompt_type}}%
19409\pysigstartmultiline
19410\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_prompt\_type}}}}%
19411\pysigstopmultiline
19412\end{fulllineitems}
19413
19414
19415
19416\paragraph{Declaration}
19417\label{\detokenize{appdev/refs/types/krb5_prompt_type:declaration}}
19418\sphinxAtStartPar
19419typedef krb5\_int32 krb5\_prompt\_type
19420
19421
19422\subsubsection{krb5\_prompter\_fct}
19423\label{\detokenize{appdev/refs/types/krb5_prompter_fct:krb5-prompter-fct}}\label{\detokenize{appdev/refs/types/krb5_prompter_fct:krb5-prompter-fct-struct}}\label{\detokenize{appdev/refs/types/krb5_prompter_fct::doc}}\index{krb5\_prompter\_fct (C type)@\spxentry{krb5\_prompter\_fct}\spxextra{C type}}
19424
19425\begin{fulllineitems}
19426\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompter_fct:c.krb5_prompter_fct}}%
19427\pysigstartmultiline
19428\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_prompter\_fct}}}}%
19429\pysigstopmultiline
19430\end{fulllineitems}
19431
19432
19433\sphinxAtStartPar
19434Pointer to a prompter callback function.
19435
19436
19437\paragraph{Declaration}
19438\label{\detokenize{appdev/refs/types/krb5_prompter_fct:declaration}}
19439\sphinxAtStartPar
19440typedef krb5\_error\_code( * krb5\_prompter\_fct) (krb5\_context context, void *data, const char *name, const char *banner, int num\_prompts, krb5\_prompt prompts{[}{]})
19441
19442
19443\subsubsection{krb5\_pwd\_data}
19444\label{\detokenize{appdev/refs/types/krb5_pwd_data:krb5-pwd-data}}\label{\detokenize{appdev/refs/types/krb5_pwd_data:krb5-pwd-data-struct}}\label{\detokenize{appdev/refs/types/krb5_pwd_data::doc}}\index{krb5\_pwd\_data (C type)@\spxentry{krb5\_pwd\_data}\spxextra{C type}}
19445
19446\begin{fulllineitems}
19447\phantomsection\label{\detokenize{appdev/refs/types/krb5_pwd_data:c.krb5_pwd_data}}%
19448\pysigstartmultiline
19449\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_pwd\_data}}}}%
19450\pysigstopmultiline
19451\end{fulllineitems}
19452
19453
19454
19455\paragraph{Declaration}
19456\label{\detokenize{appdev/refs/types/krb5_pwd_data:declaration}}
19457\sphinxAtStartPar
19458typedef struct \_krb5\_pwd\_data krb5\_pwd\_data
19459
19460
19461\paragraph{Members}
19462\label{\detokenize{appdev/refs/types/krb5_pwd_data:members}}\index{krb5\_pwd\_data.magic (C member)@\spxentry{krb5\_pwd\_data.magic}\spxextra{C member}}
19463
19464\begin{fulllineitems}
19465\phantomsection\label{\detokenize{appdev/refs/types/krb5_pwd_data:c.krb5_pwd_data.magic}}%
19466\pysigstartmultiline
19467\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_pwd_data:c.krb5_pwd_data}]{\sphinxcrossref{\DUrole{n}{krb5\_pwd\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
19468\pysigstopmultiline
19469\end{fulllineitems}
19470
19471\index{krb5\_pwd\_data.sequence\_count (C member)@\spxentry{krb5\_pwd\_data.sequence\_count}\spxextra{C member}}
19472
19473\begin{fulllineitems}
19474\phantomsection\label{\detokenize{appdev/refs/types/krb5_pwd_data:c.krb5_pwd_data.sequence_count}}%
19475\pysigstartmultiline
19476\pysigline{\DUrole{kt}{int}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_pwd_data:c.krb5_pwd_data}]{\sphinxcrossref{\DUrole{n}{krb5\_pwd\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{sequence\_count}}}}%
19477\pysigstopmultiline
19478\end{fulllineitems}
19479
19480\index{krb5\_pwd\_data.element (C member)@\spxentry{krb5\_pwd\_data.element}\spxextra{C member}}
19481
19482\begin{fulllineitems}
19483\phantomsection\label{\detokenize{appdev/refs/types/krb5_pwd_data:c.krb5_pwd_data.element}}%
19484\pysigstartmultiline
19485\pysigline{{\hyperref[\detokenize{appdev/refs/types/passwd_phrase_element:c.passwd_phrase_element}]{\sphinxcrossref{\DUrole{n}{passwd\_phrase\_element}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_pwd_data:c.krb5_pwd_data}]{\sphinxcrossref{\DUrole{n}{krb5\_pwd\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{element}}}}%
19486\pysigstopmultiline
19487\end{fulllineitems}
19488
19489
19490
19491\subsubsection{krb5\_responder\_context}
19492\label{\detokenize{appdev/refs/types/krb5_responder_context:krb5-responder-context}}\label{\detokenize{appdev/refs/types/krb5_responder_context:krb5-responder-context-struct}}\label{\detokenize{appdev/refs/types/krb5_responder_context::doc}}\index{krb5\_responder\_context (C type)@\spxentry{krb5\_responder\_context}\spxextra{C type}}
19493
19494\begin{fulllineitems}
19495\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}}%
19496\pysigstartmultiline
19497\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_responder\_context}}}}%
19498\pysigstopmultiline
19499\end{fulllineitems}
19500
19501
19502\sphinxAtStartPar
19503A container for a set of preauthentication questions and answers.
19504
19505\sphinxAtStartPar
19506A responder context is supplied by the krb5 authentication system to a krb5\_responder\_fn callback. It contains a list of questions and can receive answers. Questions contained in a responder context can be listed using krb5\_responder\_list\_questions(), retrieved using krb5\_responder\_get\_challenge(), or answered using krb5\_responder\_set\_answer(). The form of a question’s challenge and answer depend on the question name.
19507
19508
19509\paragraph{Declaration}
19510\label{\detokenize{appdev/refs/types/krb5_responder_context:declaration}}
19511\sphinxAtStartPar
19512typedef struct krb5\_responder\_context\_st* krb5\_responder\_context
19513
19514
19515\subsubsection{krb5\_responder\_fn}
19516\label{\detokenize{appdev/refs/types/krb5_responder_fn:krb5-responder-fn}}\label{\detokenize{appdev/refs/types/krb5_responder_fn:krb5-responder-fn-struct}}\label{\detokenize{appdev/refs/types/krb5_responder_fn::doc}}\index{krb5\_responder\_fn (C type)@\spxentry{krb5\_responder\_fn}\spxextra{C type}}
19517
19518\begin{fulllineitems}
19519\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_fn:c.krb5_responder_fn}}%
19520\pysigstartmultiline
19521\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_responder\_fn}}}}%
19522\pysigstopmultiline
19523\end{fulllineitems}
19524
19525
19526\sphinxAtStartPar
19527Responder function for an initial credential exchange.
19528
19529\sphinxAtStartPar
19530If a required question is unanswered, the prompter may be called.
19531
19532
19533\paragraph{Declaration}
19534\label{\detokenize{appdev/refs/types/krb5_responder_fn:declaration}}
19535\sphinxAtStartPar
19536typedef krb5\_error\_code( * krb5\_responder\_fn) (krb5\_context ctx, void *data, krb5\_responder\_context rctx)
19537
19538
19539\subsubsection{krb5\_responder\_otp\_challenge}
19540\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)@\spxentry{krb5\_responder\_otp\_challenge}\spxextra{C type}}
19541
19542\begin{fulllineitems}
19543\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:c.krb5_responder_otp_challenge}}%
19544\pysigstartmultiline
19545\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_responder\_otp\_challenge}}}}%
19546\pysigstopmultiline
19547\end{fulllineitems}
19548
19549
19550
19551\paragraph{Declaration}
19552\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:declaration}}
19553\sphinxAtStartPar
19554typedef struct \_krb5\_responder\_otp\_challenge krb5\_responder\_otp\_challenge
19555
19556
19557\paragraph{Members}
19558\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:members}}\index{krb5\_responder\_otp\_challenge.service (C member)@\spxentry{krb5\_responder\_otp\_challenge.service}\spxextra{C member}}
19559
19560\begin{fulllineitems}
19561\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:c.krb5_responder_otp_challenge.service}}%
19562\pysigstartmultiline
19563\pysigline{\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_responder_otp_challenge:c.krb5_responder_otp_challenge}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_otp\_challenge}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{service}}}}%
19564\pysigstopmultiline
19565\end{fulllineitems}
19566
19567\index{krb5\_responder\_otp\_challenge.tokeninfo (C member)@\spxentry{krb5\_responder\_otp\_challenge.tokeninfo}\spxextra{C member}}
19568
19569\begin{fulllineitems}
19570\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:c.krb5_responder_otp_challenge.tokeninfo}}%
19571\pysigstartmultiline
19572\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_otp\_tokeninfo}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_responder_otp_challenge:c.krb5_responder_otp_challenge}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_otp\_challenge}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{tokeninfo}}}}%
19573\pysigstopmultiline
19574\end{fulllineitems}
19575
19576
19577
19578\subsubsection{krb5\_responder\_otp\_tokeninfo}
19579\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)@\spxentry{krb5\_responder\_otp\_tokeninfo}\spxextra{C type}}
19580
19581\begin{fulllineitems}
19582\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo}}%
19583\pysigstartmultiline
19584\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_responder\_otp\_tokeninfo}}}}%
19585\pysigstopmultiline
19586\end{fulllineitems}
19587
19588
19589
19590\paragraph{Declaration}
19591\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:declaration}}
19592\sphinxAtStartPar
19593typedef struct \_krb5\_responder\_otp\_tokeninfo krb5\_responder\_otp\_tokeninfo
19594
19595
19596\paragraph{Members}
19597\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:members}}\index{krb5\_responder\_otp\_tokeninfo.flags (C member)@\spxentry{krb5\_responder\_otp\_tokeninfo.flags}\spxextra{C member}}
19598
19599\begin{fulllineitems}
19600\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.flags}}%
19601\pysigstartmultiline
19602\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_otp\_tokeninfo}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{flags}}}}%
19603\pysigstopmultiline
19604\end{fulllineitems}
19605
19606\index{krb5\_responder\_otp\_tokeninfo.format (C member)@\spxentry{krb5\_responder\_otp\_tokeninfo.format}\spxextra{C member}}
19607
19608\begin{fulllineitems}
19609\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.format}}%
19610\pysigstartmultiline
19611\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_otp\_tokeninfo}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{format}}}}%
19612\pysigstopmultiline
19613\end{fulllineitems}
19614
19615\index{krb5\_responder\_otp\_tokeninfo.length (C member)@\spxentry{krb5\_responder\_otp\_tokeninfo.length}\spxextra{C member}}
19616
19617\begin{fulllineitems}
19618\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.length}}%
19619\pysigstartmultiline
19620\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_otp\_tokeninfo}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{length}}}}%
19621\pysigstopmultiline
19622\end{fulllineitems}
19623
19624\index{krb5\_responder\_otp\_tokeninfo.vendor (C member)@\spxentry{krb5\_responder\_otp\_tokeninfo.vendor}\spxextra{C member}}
19625
19626\begin{fulllineitems}
19627\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.vendor}}%
19628\pysigstartmultiline
19629\pysigline{\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_otp\_tokeninfo}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{vendor}}}}%
19630\pysigstopmultiline
19631\end{fulllineitems}
19632
19633\index{krb5\_responder\_otp\_tokeninfo.challenge (C member)@\spxentry{krb5\_responder\_otp\_tokeninfo.challenge}\spxextra{C member}}
19634
19635\begin{fulllineitems}
19636\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.challenge}}%
19637\pysigstartmultiline
19638\pysigline{\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_otp\_tokeninfo}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{challenge}}}}%
19639\pysigstopmultiline
19640\end{fulllineitems}
19641
19642\index{krb5\_responder\_otp\_tokeninfo.token\_id (C member)@\spxentry{krb5\_responder\_otp\_tokeninfo.token\_id}\spxextra{C member}}
19643
19644\begin{fulllineitems}
19645\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.token_id}}%
19646\pysigstartmultiline
19647\pysigline{\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_otp\_tokeninfo}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{token\_id}}}}%
19648\pysigstopmultiline
19649\end{fulllineitems}
19650
19651\index{krb5\_responder\_otp\_tokeninfo.alg\_id (C member)@\spxentry{krb5\_responder\_otp\_tokeninfo.alg\_id}\spxextra{C member}}
19652
19653\begin{fulllineitems}
19654\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.alg_id}}%
19655\pysigstartmultiline
19656\pysigline{\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_otp\_tokeninfo}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{alg\_id}}}}%
19657\pysigstopmultiline
19658\end{fulllineitems}
19659
19660
19661
19662\subsubsection{krb5\_responder\_pkinit\_challenge}
19663\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:krb5-responder-pkinit-challenge}}\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:krb5-responder-pkinit-challenge-struct}}\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge::doc}}\index{krb5\_responder\_pkinit\_challenge (C type)@\spxentry{krb5\_responder\_pkinit\_challenge}\spxextra{C type}}
19664
19665\begin{fulllineitems}
19666\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:c.krb5_responder_pkinit_challenge}}%
19667\pysigstartmultiline
19668\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_responder\_pkinit\_challenge}}}}%
19669\pysigstopmultiline
19670\end{fulllineitems}
19671
19672
19673
19674\paragraph{Declaration}
19675\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:declaration}}
19676\sphinxAtStartPar
19677typedef struct \_krb5\_responder\_pkinit\_challenge krb5\_responder\_pkinit\_challenge
19678
19679
19680\paragraph{Members}
19681\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:members}}\index{krb5\_responder\_pkinit\_challenge.identities (C member)@\spxentry{krb5\_responder\_pkinit\_challenge.identities}\spxextra{C member}}
19682
19683\begin{fulllineitems}
19684\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:c.krb5_responder_pkinit_challenge.identities}}%
19685\pysigstartmultiline
19686\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:c.krb5_responder_pkinit_identity}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_pkinit\_identity}}}}\DUrole{w}{  }\DUrole{p}{*}\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:c.krb5_responder_pkinit_challenge}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_pkinit\_challenge}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{identities}}}}%
19687\pysigstopmultiline
19688\end{fulllineitems}
19689
19690
19691
19692\subsubsection{krb5\_responder\_pkinit\_identity}
19693\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:krb5-responder-pkinit-identity}}\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:krb5-responder-pkinit-identity-struct}}\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity::doc}}\index{krb5\_responder\_pkinit\_identity (C type)@\spxentry{krb5\_responder\_pkinit\_identity}\spxextra{C type}}
19694
19695\begin{fulllineitems}
19696\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:c.krb5_responder_pkinit_identity}}%
19697\pysigstartmultiline
19698\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_responder\_pkinit\_identity}}}}%
19699\pysigstopmultiline
19700\end{fulllineitems}
19701
19702
19703
19704\paragraph{Declaration}
19705\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:declaration}}
19706\sphinxAtStartPar
19707typedef struct \_krb5\_responder\_pkinit\_identity krb5\_responder\_pkinit\_identity
19708
19709
19710\paragraph{Members}
19711\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:members}}\index{krb5\_responder\_pkinit\_identity.identity (C member)@\spxentry{krb5\_responder\_pkinit\_identity.identity}\spxextra{C member}}
19712
19713\begin{fulllineitems}
19714\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:c.krb5_responder_pkinit_identity.identity}}%
19715\pysigstartmultiline
19716\pysigline{\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:c.krb5_responder_pkinit_identity}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_pkinit\_identity}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{identity}}}}%
19717\pysigstopmultiline
19718\end{fulllineitems}
19719
19720\index{krb5\_responder\_pkinit\_identity.token\_flags (C member)@\spxentry{krb5\_responder\_pkinit\_identity.token\_flags}\spxextra{C member}}
19721
19722\begin{fulllineitems}
19723\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:c.krb5_responder_pkinit_identity.token_flags}}%
19724\pysigstartmultiline
19725\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:c.krb5_responder_pkinit_identity}]{\sphinxcrossref{\DUrole{n}{krb5\_responder\_pkinit\_identity}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{token\_flags}}}}%
19726\pysigstopmultiline
19727\end{fulllineitems}
19728
19729
19730
19731\subsubsection{krb5\_response}
19732\label{\detokenize{appdev/refs/types/krb5_response:krb5-response}}\label{\detokenize{appdev/refs/types/krb5_response:krb5-response-struct}}\label{\detokenize{appdev/refs/types/krb5_response::doc}}\index{krb5\_response (C type)@\spxentry{krb5\_response}\spxextra{C type}}
19733
19734\begin{fulllineitems}
19735\phantomsection\label{\detokenize{appdev/refs/types/krb5_response:c.krb5_response}}%
19736\pysigstartmultiline
19737\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_response}}}}%
19738\pysigstopmultiline
19739\end{fulllineitems}
19740
19741
19742
19743\paragraph{Declaration}
19744\label{\detokenize{appdev/refs/types/krb5_response:declaration}}
19745\sphinxAtStartPar
19746typedef struct \_krb5\_response krb5\_response
19747
19748
19749\paragraph{Members}
19750\label{\detokenize{appdev/refs/types/krb5_response:members}}\index{krb5\_response.magic (C member)@\spxentry{krb5\_response.magic}\spxextra{C member}}
19751
19752\begin{fulllineitems}
19753\phantomsection\label{\detokenize{appdev/refs/types/krb5_response:c.krb5_response.magic}}%
19754\pysigstartmultiline
19755\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_response:c.krb5_response}]{\sphinxcrossref{\DUrole{n}{krb5\_response}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
19756\pysigstopmultiline
19757\end{fulllineitems}
19758
19759\index{krb5\_response.message\_type (C member)@\spxentry{krb5\_response.message\_type}\spxextra{C member}}
19760
19761\begin{fulllineitems}
19762\phantomsection\label{\detokenize{appdev/refs/types/krb5_response:c.krb5_response.message_type}}%
19763\pysigstartmultiline
19764\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{\DUrole{n}{krb5\_octet}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_response:c.krb5_response}]{\sphinxcrossref{\DUrole{n}{krb5\_response}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{message\_type}}}}%
19765\pysigstopmultiline
19766\end{fulllineitems}
19767
19768\index{krb5\_response.response (C member)@\spxentry{krb5\_response.response}\spxextra{C member}}
19769
19770\begin{fulllineitems}
19771\phantomsection\label{\detokenize{appdev/refs/types/krb5_response:c.krb5_response.response}}%
19772\pysigstartmultiline
19773\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_response:c.krb5_response}]{\sphinxcrossref{\DUrole{n}{krb5\_response}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{response}}}}%
19774\pysigstopmultiline
19775\end{fulllineitems}
19776
19777\index{krb5\_response.expected\_nonce (C member)@\spxentry{krb5\_response.expected\_nonce}\spxextra{C member}}
19778
19779\begin{fulllineitems}
19780\phantomsection\label{\detokenize{appdev/refs/types/krb5_response:c.krb5_response.expected_nonce}}%
19781\pysigstartmultiline
19782\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_response:c.krb5_response}]{\sphinxcrossref{\DUrole{n}{krb5\_response}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{expected\_nonce}}}}%
19783\pysigstopmultiline
19784\end{fulllineitems}
19785
19786\index{krb5\_response.request\_time (C member)@\spxentry{krb5\_response.request\_time}\spxextra{C member}}
19787
19788\begin{fulllineitems}
19789\phantomsection\label{\detokenize{appdev/refs/types/krb5_response:c.krb5_response.request_time}}%
19790\pysigstartmultiline
19791\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_response:c.krb5_response}]{\sphinxcrossref{\DUrole{n}{krb5\_response}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{request\_time}}}}%
19792\pysigstopmultiline
19793\end{fulllineitems}
19794
19795
19796
19797\subsubsection{krb5\_replay\_data}
19798\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)@\spxentry{krb5\_replay\_data}\spxextra{C type}}
19799
19800\begin{fulllineitems}
19801\phantomsection\label{\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}}%
19802\pysigstartmultiline
19803\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_replay\_data}}}}%
19804\pysigstopmultiline
19805\end{fulllineitems}
19806
19807
19808\sphinxAtStartPar
19809Replay data.
19810
19811\sphinxAtStartPar
19812Sequence number and timestamp information output by krb5\_rd\_priv() and krb5\_rd\_safe().
19813
19814
19815\paragraph{Declaration}
19816\label{\detokenize{appdev/refs/types/krb5_replay_data:declaration}}
19817\sphinxAtStartPar
19818typedef struct krb5\_replay\_data krb5\_replay\_data
19819
19820
19821\paragraph{Members}
19822\label{\detokenize{appdev/refs/types/krb5_replay_data:members}}\index{krb5\_replay\_data.timestamp (C member)@\spxentry{krb5\_replay\_data.timestamp}\spxextra{C member}}
19823
19824\begin{fulllineitems}
19825\phantomsection\label{\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data.timestamp}}%
19826\pysigstartmultiline
19827\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{\DUrole{n}{krb5\_replay\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{timestamp}}}}%
19828\pysigstopmultiline
19829\sphinxAtStartPar
19830Timestamp, seconds portion.
19831
19832\end{fulllineitems}
19833
19834\index{krb5\_replay\_data.usec (C member)@\spxentry{krb5\_replay\_data.usec}\spxextra{C member}}
19835
19836\begin{fulllineitems}
19837\phantomsection\label{\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data.usec}}%
19838\pysigstartmultiline
19839\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{\DUrole{n}{krb5\_replay\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{usec}}}}%
19840\pysigstopmultiline
19841\sphinxAtStartPar
19842Timestamp, microseconds portion.
19843
19844\end{fulllineitems}
19845
19846\index{krb5\_replay\_data.seq (C member)@\spxentry{krb5\_replay\_data.seq}\spxextra{C member}}
19847
19848\begin{fulllineitems}
19849\phantomsection\label{\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data.seq}}%
19850\pysigstartmultiline
19851\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{\DUrole{n}{krb5\_ui\_4}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{\DUrole{n}{krb5\_replay\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{seq}}}}%
19852\pysigstopmultiline
19853\sphinxAtStartPar
19854Sequence number.
19855
19856\end{fulllineitems}
19857
19858
19859
19860\subsubsection{krb5\_ticket}
19861\label{\detokenize{appdev/refs/types/krb5_ticket:krb5-ticket}}\label{\detokenize{appdev/refs/types/krb5_ticket:krb5-ticket-struct}}\label{\detokenize{appdev/refs/types/krb5_ticket::doc}}\index{krb5\_ticket (C type)@\spxentry{krb5\_ticket}\spxextra{C type}}
19862
19863\begin{fulllineitems}
19864\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}}%
19865\pysigstartmultiline
19866\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_ticket}}}}%
19867\pysigstopmultiline
19868\end{fulllineitems}
19869
19870
19871\sphinxAtStartPar
19872Ticket structure.
19873
19874\sphinxAtStartPar
19875The C representation of the ticket message, with a pointer to the C representation of the encrypted part.
19876
19877
19878\paragraph{Declaration}
19879\label{\detokenize{appdev/refs/types/krb5_ticket:declaration}}
19880\sphinxAtStartPar
19881typedef struct \_krb5\_ticket krb5\_ticket
19882
19883
19884\paragraph{Members}
19885\label{\detokenize{appdev/refs/types/krb5_ticket:members}}\index{krb5\_ticket.magic (C member)@\spxentry{krb5\_ticket.magic}\spxextra{C member}}
19886
19887\begin{fulllineitems}
19888\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket.magic}}%
19889\pysigstartmultiline
19890\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
19891\pysigstopmultiline
19892\end{fulllineitems}
19893
19894\index{krb5\_ticket.server (C member)@\spxentry{krb5\_ticket.server}\spxextra{C member}}
19895
19896\begin{fulllineitems}
19897\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket.server}}%
19898\pysigstartmultiline
19899\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\DUrole{n}{krb5\_principal}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{server}}}}%
19900\pysigstopmultiline
19901\sphinxAtStartPar
19902server name/realm
19903
19904\end{fulllineitems}
19905
19906\index{krb5\_ticket.enc\_part (C member)@\spxentry{krb5\_ticket.enc\_part}\spxextra{C member}}
19907
19908\begin{fulllineitems}
19909\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket.enc_part}}%
19910\pysigstartmultiline
19911\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_data}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{enc\_part}}}}%
19912\pysigstopmultiline
19913\sphinxAtStartPar
19914encryption type, kvno, encrypted encoding
19915
19916\end{fulllineitems}
19917
19918\index{krb5\_ticket.enc\_part2 (C member)@\spxentry{krb5\_ticket.enc\_part2}\spxextra{C member}}
19919
19920\begin{fulllineitems}
19921\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket.enc_part2}}%
19922\pysigstartmultiline
19923\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part}]{\sphinxcrossref{\DUrole{n}{krb5\_enc\_tkt\_part}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{enc\_part2}}}}%
19924\pysigstopmultiline
19925\sphinxAtStartPar
19926ptr to decrypted version, if available
19927
19928\end{fulllineitems}
19929
19930
19931
19932\subsubsection{krb5\_ticket\_times}
19933\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)@\spxentry{krb5\_ticket\_times}\spxextra{C type}}
19934
19935\begin{fulllineitems}
19936\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}}%
19937\pysigstartmultiline
19938\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_ticket\_times}}}}%
19939\pysigstopmultiline
19940\end{fulllineitems}
19941
19942
19943\sphinxAtStartPar
19944Ticket start time, end time, and renewal duration.
19945
19946
19947\paragraph{Declaration}
19948\label{\detokenize{appdev/refs/types/krb5_ticket_times:declaration}}
19949\sphinxAtStartPar
19950typedef struct \_krb5\_ticket\_times krb5\_ticket\_times
19951
19952
19953\paragraph{Members}
19954\label{\detokenize{appdev/refs/types/krb5_ticket_times:members}}\index{krb5\_ticket\_times.authtime (C member)@\spxentry{krb5\_ticket\_times.authtime}\spxextra{C member}}
19955
19956\begin{fulllineitems}
19957\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times.authtime}}%
19958\pysigstartmultiline
19959\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket\_times}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{authtime}}}}%
19960\pysigstopmultiline
19961\sphinxAtStartPar
19962Time at which KDC issued the initial ticket that corresponds to this ticket.
19963
19964\end{fulllineitems}
19965
19966\index{krb5\_ticket\_times.starttime (C member)@\spxentry{krb5\_ticket\_times.starttime}\spxextra{C member}}
19967
19968\begin{fulllineitems}
19969\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times.starttime}}%
19970\pysigstartmultiline
19971\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket\_times}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{starttime}}}}%
19972\pysigstopmultiline
19973\sphinxAtStartPar
19974optional in ticket, if not present, use \sphinxstyleemphasis{authtime}
19975
19976\end{fulllineitems}
19977
19978\index{krb5\_ticket\_times.endtime (C member)@\spxentry{krb5\_ticket\_times.endtime}\spxextra{C member}}
19979
19980\begin{fulllineitems}
19981\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times.endtime}}%
19982\pysigstartmultiline
19983\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket\_times}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{endtime}}}}%
19984\pysigstopmultiline
19985\sphinxAtStartPar
19986Ticket expiration time.
19987
19988\end{fulllineitems}
19989
19990\index{krb5\_ticket\_times.renew\_till (C member)@\spxentry{krb5\_ticket\_times.renew\_till}\spxextra{C member}}
19991
19992\begin{fulllineitems}
19993\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times.renew_till}}%
19994\pysigstartmultiline
19995\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\DUrole{n}{krb5\_timestamp}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket\_times}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{renew\_till}}}}%
19996\pysigstopmultiline
19997\sphinxAtStartPar
19998Latest time at which renewal of ticket can be valid.
19999
20000\end{fulllineitems}
20001
20002
20003
20004\subsubsection{krb5\_timestamp}
20005\label{\detokenize{appdev/refs/types/krb5_timestamp:krb5-timestamp}}\label{\detokenize{appdev/refs/types/krb5_timestamp:krb5-timestamp-struct}}\label{\detokenize{appdev/refs/types/krb5_timestamp::doc}}\index{krb5\_timestamp (C type)@\spxentry{krb5\_timestamp}\spxextra{C type}}
20006
20007\begin{fulllineitems}
20008\phantomsection\label{\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}}%
20009\pysigstartmultiline
20010\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_timestamp}}}}%
20011\pysigstopmultiline
20012\end{fulllineitems}
20013
20014
20015\sphinxAtStartPar
20016Represents a timestamp in seconds since the POSIX epoch.
20017
20018\sphinxAtStartPar
20019This 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\sphinxhyphen{}bit time\_t.
20020
20021
20022\paragraph{Declaration}
20023\label{\detokenize{appdev/refs/types/krb5_timestamp:declaration}}
20024\sphinxAtStartPar
20025typedef krb5\_int32 krb5\_timestamp
20026
20027
20028\subsubsection{krb5\_tkt\_authent}
20029\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)@\spxentry{krb5\_tkt\_authent}\spxextra{C type}}
20030
20031\begin{fulllineitems}
20032\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent}}%
20033\pysigstartmultiline
20034\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_tkt\_authent}}}}%
20035\pysigstopmultiline
20036\end{fulllineitems}
20037
20038
20039\sphinxAtStartPar
20040Ticket authentication data.
20041
20042
20043\paragraph{Declaration}
20044\label{\detokenize{appdev/refs/types/krb5_tkt_authent:declaration}}
20045\sphinxAtStartPar
20046typedef struct \_krb5\_tkt\_authent krb5\_tkt\_authent
20047
20048
20049\paragraph{Members}
20050\label{\detokenize{appdev/refs/types/krb5_tkt_authent:members}}\index{krb5\_tkt\_authent.magic (C member)@\spxentry{krb5\_tkt\_authent.magic}\spxextra{C member}}
20051
20052\begin{fulllineitems}
20053\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent.magic}}%
20054\pysigstartmultiline
20055\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent}]{\sphinxcrossref{\DUrole{n}{krb5\_tkt\_authent}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
20056\pysigstopmultiline
20057\end{fulllineitems}
20058
20059\index{krb5\_tkt\_authent.ticket (C member)@\spxentry{krb5\_tkt\_authent.ticket}\spxextra{C member}}
20060
20061\begin{fulllineitems}
20062\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent.ticket}}%
20063\pysigstartmultiline
20064\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{\DUrole{n}{krb5\_ticket}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent}]{\sphinxcrossref{\DUrole{n}{krb5\_tkt\_authent}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{ticket}}}}%
20065\pysigstopmultiline
20066\end{fulllineitems}
20067
20068\index{krb5\_tkt\_authent.authenticator (C member)@\spxentry{krb5\_tkt\_authent.authenticator}\spxextra{C member}}
20069
20070\begin{fulllineitems}
20071\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent.authenticator}}%
20072\pysigstartmultiline
20073\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{\DUrole{n}{krb5\_authenticator}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent}]{\sphinxcrossref{\DUrole{n}{krb5\_tkt\_authent}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{authenticator}}}}%
20074\pysigstopmultiline
20075\end{fulllineitems}
20076
20077\index{krb5\_tkt\_authent.ap\_options (C member)@\spxentry{krb5\_tkt\_authent.ap\_options}\spxextra{C member}}
20078
20079\begin{fulllineitems}
20080\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent.ap_options}}%
20081\pysigstartmultiline
20082\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent}]{\sphinxcrossref{\DUrole{n}{krb5\_tkt\_authent}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{ap\_options}}}}%
20083\pysigstopmultiline
20084\end{fulllineitems}
20085
20086
20087
20088\subsubsection{krb5\_trace\_callback}
20089\label{\detokenize{appdev/refs/types/krb5_trace_callback:krb5-trace-callback}}\label{\detokenize{appdev/refs/types/krb5_trace_callback:krb5-trace-callback-struct}}\label{\detokenize{appdev/refs/types/krb5_trace_callback::doc}}\index{krb5\_trace\_callback (C type)@\spxentry{krb5\_trace\_callback}\spxextra{C type}}
20090
20091\begin{fulllineitems}
20092\phantomsection\label{\detokenize{appdev/refs/types/krb5_trace_callback:c.krb5_trace_callback}}%
20093\pysigstartmultiline
20094\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_trace\_callback}}}}%
20095\pysigstopmultiline
20096\end{fulllineitems}
20097
20098
20099
20100\paragraph{Declaration}
20101\label{\detokenize{appdev/refs/types/krb5_trace_callback:declaration}}
20102\sphinxAtStartPar
20103typedef void( * krb5\_trace\_callback) (krb5\_context context, const krb5\_trace\_info *info, void *cb\_data)
20104
20105
20106\subsubsection{krb5\_trace\_info}
20107\label{\detokenize{appdev/refs/types/krb5_trace_info:krb5-trace-info}}\label{\detokenize{appdev/refs/types/krb5_trace_info:krb5-trace-info-struct}}\label{\detokenize{appdev/refs/types/krb5_trace_info::doc}}\index{krb5\_trace\_info (C type)@\spxentry{krb5\_trace\_info}\spxextra{C type}}
20108
20109\begin{fulllineitems}
20110\phantomsection\label{\detokenize{appdev/refs/types/krb5_trace_info:c.krb5_trace_info}}%
20111\pysigstartmultiline
20112\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_trace\_info}}}}%
20113\pysigstopmultiline
20114\end{fulllineitems}
20115
20116
20117\sphinxAtStartPar
20118A wrapper for passing information to a \sphinxstyleemphasis{krb5\_trace\_callback} .
20119
20120\sphinxAtStartPar
20121Currently, 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.
20122
20123
20124\paragraph{Declaration}
20125\label{\detokenize{appdev/refs/types/krb5_trace_info:declaration}}
20126\sphinxAtStartPar
20127typedef struct \_krb5\_trace\_info krb5\_trace\_info
20128
20129
20130\paragraph{Members}
20131\label{\detokenize{appdev/refs/types/krb5_trace_info:members}}\index{krb5\_trace\_info.message (C member)@\spxentry{krb5\_trace\_info.message}\spxextra{C member}}
20132
20133\begin{fulllineitems}
20134\phantomsection\label{\detokenize{appdev/refs/types/krb5_trace_info:c.krb5_trace_info.message}}%
20135\pysigstartmultiline
20136\pysigline{\DUrole{k}{const}\DUrole{w}{  }\DUrole{kt}{char}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_trace_info:c.krb5_trace_info}]{\sphinxcrossref{\DUrole{n}{krb5\_trace\_info}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{message}}}}%
20137\pysigstopmultiline
20138\end{fulllineitems}
20139
20140
20141
20142\subsubsection{krb5\_transited}
20143\label{\detokenize{appdev/refs/types/krb5_transited:krb5-transited}}\label{\detokenize{appdev/refs/types/krb5_transited:krb5-transited-struct}}\label{\detokenize{appdev/refs/types/krb5_transited::doc}}\index{krb5\_transited (C type)@\spxentry{krb5\_transited}\spxextra{C type}}
20144
20145\begin{fulllineitems}
20146\phantomsection\label{\detokenize{appdev/refs/types/krb5_transited:c.krb5_transited}}%
20147\pysigstartmultiline
20148\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_transited}}}}%
20149\pysigstopmultiline
20150\end{fulllineitems}
20151
20152
20153\sphinxAtStartPar
20154Structure for transited encoding.
20155
20156
20157\paragraph{Declaration}
20158\label{\detokenize{appdev/refs/types/krb5_transited:declaration}}
20159\sphinxAtStartPar
20160typedef struct \_krb5\_transited krb5\_transited
20161
20162
20163\paragraph{Members}
20164\label{\detokenize{appdev/refs/types/krb5_transited:members}}\index{krb5\_transited.magic (C member)@\spxentry{krb5\_transited.magic}\spxextra{C member}}
20165
20166\begin{fulllineitems}
20167\phantomsection\label{\detokenize{appdev/refs/types/krb5_transited:c.krb5_transited.magic}}%
20168\pysigstartmultiline
20169\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_transited:c.krb5_transited}]{\sphinxcrossref{\DUrole{n}{krb5\_transited}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
20170\pysigstopmultiline
20171\end{fulllineitems}
20172
20173\index{krb5\_transited.tr\_type (C member)@\spxentry{krb5\_transited.tr\_type}\spxextra{C member}}
20174
20175\begin{fulllineitems}
20176\phantomsection\label{\detokenize{appdev/refs/types/krb5_transited:c.krb5_transited.tr_type}}%
20177\pysigstartmultiline
20178\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{\DUrole{n}{krb5\_octet}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_transited:c.krb5_transited}]{\sphinxcrossref{\DUrole{n}{krb5\_transited}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{tr\_type}}}}%
20179\pysigstopmultiline
20180\sphinxAtStartPar
20181Transited encoding type.
20182
20183\end{fulllineitems}
20184
20185\index{krb5\_transited.tr\_contents (C member)@\spxentry{krb5\_transited.tr\_contents}\spxextra{C member}}
20186
20187\begin{fulllineitems}
20188\phantomsection\label{\detokenize{appdev/refs/types/krb5_transited:c.krb5_transited.tr_contents}}%
20189\pysigstartmultiline
20190\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_transited:c.krb5_transited}]{\sphinxcrossref{\DUrole{n}{krb5\_transited}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{tr\_contents}}}}%
20191\pysigstopmultiline
20192\sphinxAtStartPar
20193Contents.
20194
20195\end{fulllineitems}
20196
20197
20198
20199\subsubsection{krb5\_typed\_data}
20200\label{\detokenize{appdev/refs/types/krb5_typed_data:krb5-typed-data}}\label{\detokenize{appdev/refs/types/krb5_typed_data:krb5-typed-data-struct}}\label{\detokenize{appdev/refs/types/krb5_typed_data::doc}}\index{krb5\_typed\_data (C type)@\spxentry{krb5\_typed\_data}\spxextra{C type}}
20201
20202\begin{fulllineitems}
20203\phantomsection\label{\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data}}%
20204\pysigstartmultiline
20205\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_typed\_data}}}}%
20206\pysigstopmultiline
20207\end{fulllineitems}
20208
20209
20210
20211\paragraph{Declaration}
20212\label{\detokenize{appdev/refs/types/krb5_typed_data:declaration}}
20213\sphinxAtStartPar
20214typedef struct \_krb5\_typed\_data krb5\_typed\_data
20215
20216
20217\paragraph{Members}
20218\label{\detokenize{appdev/refs/types/krb5_typed_data:members}}\index{krb5\_typed\_data.magic (C member)@\spxentry{krb5\_typed\_data.magic}\spxextra{C member}}
20219
20220\begin{fulllineitems}
20221\phantomsection\label{\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data.magic}}%
20222\pysigstartmultiline
20223\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data}]{\sphinxcrossref{\DUrole{n}{krb5\_typed\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
20224\pysigstopmultiline
20225\end{fulllineitems}
20226
20227\index{krb5\_typed\_data.type (C member)@\spxentry{krb5\_typed\_data.type}\spxextra{C member}}
20228
20229\begin{fulllineitems}
20230\phantomsection\label{\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data.type}}%
20231\pysigstartmultiline
20232\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{\DUrole{n}{krb5\_int32}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data}]{\sphinxcrossref{\DUrole{n}{krb5\_typed\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{type}}}}%
20233\pysigstopmultiline
20234\end{fulllineitems}
20235
20236\index{krb5\_typed\_data.length (C member)@\spxentry{krb5\_typed\_data.length}\spxextra{C member}}
20237
20238\begin{fulllineitems}
20239\phantomsection\label{\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data.length}}%
20240\pysigstartmultiline
20241\pysigline{\DUrole{kt}{unsigned}\DUrole{w}{  }\DUrole{kt}{int}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data}]{\sphinxcrossref{\DUrole{n}{krb5\_typed\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{length}}}}%
20242\pysigstopmultiline
20243\end{fulllineitems}
20244
20245\index{krb5\_typed\_data.data (C member)@\spxentry{krb5\_typed\_data.data}\spxextra{C member}}
20246
20247\begin{fulllineitems}
20248\phantomsection\label{\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data.data}}%
20249\pysigstartmultiline
20250\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{\DUrole{n}{krb5\_octet}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data}]{\sphinxcrossref{\DUrole{n}{krb5\_typed\_data}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{data}}}}%
20251\pysigstopmultiline
20252\end{fulllineitems}
20253
20254
20255
20256\subsubsection{krb5\_ui\_2}
20257\label{\detokenize{appdev/refs/types/krb5_ui_2:krb5-ui-2}}\label{\detokenize{appdev/refs/types/krb5_ui_2:krb5-ui-2-struct}}\label{\detokenize{appdev/refs/types/krb5_ui_2::doc}}\index{krb5\_ui\_2 (C type)@\spxentry{krb5\_ui\_2}\spxextra{C type}}
20258
20259\begin{fulllineitems}
20260\phantomsection\label{\detokenize{appdev/refs/types/krb5_ui_2:c.krb5_ui_2}}%
20261\pysigstartmultiline
20262\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_ui\_2}}}}%
20263\pysigstopmultiline
20264\end{fulllineitems}
20265
20266
20267
20268\paragraph{Declaration}
20269\label{\detokenize{appdev/refs/types/krb5_ui_2:declaration}}
20270\sphinxAtStartPar
20271typedef uint16\_t krb5\_ui\_2
20272
20273
20274\subsubsection{krb5\_ui\_4}
20275\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)@\spxentry{krb5\_ui\_4}\spxextra{C type}}
20276
20277\begin{fulllineitems}
20278\phantomsection\label{\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}}%
20279\pysigstartmultiline
20280\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_ui\_4}}}}%
20281\pysigstopmultiline
20282\end{fulllineitems}
20283
20284
20285
20286\paragraph{Declaration}
20287\label{\detokenize{appdev/refs/types/krb5_ui_4:declaration}}
20288\sphinxAtStartPar
20289typedef uint32\_t krb5\_ui\_4
20290
20291
20292\subsubsection{krb5\_verify\_init\_creds\_opt}
20293\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:krb5-verify-init-creds-opt}}\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}}\index{krb5\_verify\_init\_creds\_opt (C type)@\spxentry{krb5\_verify\_init\_creds\_opt}\spxextra{C type}}
20294
20295\begin{fulllineitems}
20296\phantomsection\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt}}%
20297\pysigstartmultiline
20298\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_verify\_init\_creds\_opt}}}}%
20299\pysigstopmultiline
20300\end{fulllineitems}
20301
20302
20303
20304\paragraph{Declaration}
20305\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:declaration}}
20306\sphinxAtStartPar
20307typedef struct \_krb5\_verify\_init\_creds\_opt krb5\_verify\_init\_creds\_opt
20308
20309
20310\paragraph{Members}
20311\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:members}}\index{krb5\_verify\_init\_creds\_opt.flags (C member)@\spxentry{krb5\_verify\_init\_creds\_opt.flags}\spxextra{C member}}
20312
20313\begin{fulllineitems}
20314\phantomsection\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt.flags}}%
20315\pysigstartmultiline
20316\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{\DUrole{n}{krb5\_flags}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_verify\_init\_creds\_opt}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{flags}}}}%
20317\pysigstopmultiline
20318\end{fulllineitems}
20319
20320\index{krb5\_verify\_init\_creds\_opt.ap\_req\_nofail (C member)@\spxentry{krb5\_verify\_init\_creds\_opt.ap\_req\_nofail}\spxextra{C member}}
20321
20322\begin{fulllineitems}
20323\phantomsection\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt.ap_req_nofail}}%
20324\pysigstartmultiline
20325\pysigline{\DUrole{kt}{int}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt}]{\sphinxcrossref{\DUrole{n}{krb5\_verify\_init\_creds\_opt}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{ap\_req\_nofail}}}}%
20326\pysigstopmultiline
20327\sphinxAtStartPar
20328boolean
20329
20330\end{fulllineitems}
20331
20332
20333
20334\subsubsection{passwd\_phrase\_element}
20335\label{\detokenize{appdev/refs/types/passwd_phrase_element:passwd-phrase-element}}\label{\detokenize{appdev/refs/types/passwd_phrase_element:passwd-phrase-element-struct}}\label{\detokenize{appdev/refs/types/passwd_phrase_element::doc}}\index{passwd\_phrase\_element (C type)@\spxentry{passwd\_phrase\_element}\spxextra{C type}}
20336
20337\begin{fulllineitems}
20338\phantomsection\label{\detokenize{appdev/refs/types/passwd_phrase_element:c.passwd_phrase_element}}%
20339\pysigstartmultiline
20340\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{passwd\_phrase\_element}}}}%
20341\pysigstopmultiline
20342\end{fulllineitems}
20343
20344
20345
20346\paragraph{Declaration}
20347\label{\detokenize{appdev/refs/types/passwd_phrase_element:declaration}}
20348\sphinxAtStartPar
20349typedef struct \_passwd\_phrase\_element passwd\_phrase\_element
20350
20351
20352\paragraph{Members}
20353\label{\detokenize{appdev/refs/types/passwd_phrase_element:members}}\index{passwd\_phrase\_element.magic (C member)@\spxentry{passwd\_phrase\_element.magic}\spxextra{C member}}
20354
20355\begin{fulllineitems}
20356\phantomsection\label{\detokenize{appdev/refs/types/passwd_phrase_element:c.passwd_phrase_element.magic}}%
20357\pysigstartmultiline
20358\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{\DUrole{n}{krb5\_magic}}}}\DUrole{w}{  }\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/passwd_phrase_element:c.passwd_phrase_element}]{\sphinxcrossref{\DUrole{n}{passwd\_phrase\_element}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{magic}}}}%
20359\pysigstopmultiline
20360\end{fulllineitems}
20361
20362\index{passwd\_phrase\_element.passwd (C member)@\spxentry{passwd\_phrase\_element.passwd}\spxextra{C member}}
20363
20364\begin{fulllineitems}
20365\phantomsection\label{\detokenize{appdev/refs/types/passwd_phrase_element:c.passwd_phrase_element.passwd}}%
20366\pysigstartmultiline
20367\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/passwd_phrase_element:c.passwd_phrase_element}]{\sphinxcrossref{\DUrole{n}{passwd\_phrase\_element}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{passwd}}}}%
20368\pysigstopmultiline
20369\end{fulllineitems}
20370
20371\index{passwd\_phrase\_element.phrase (C member)@\spxentry{passwd\_phrase\_element.phrase}\spxextra{C member}}
20372
20373\begin{fulllineitems}
20374\phantomsection\label{\detokenize{appdev/refs/types/passwd_phrase_element:c.passwd_phrase_element.phrase}}%
20375\pysigstartmultiline
20376\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{\DUrole{n}{krb5\_data}}}}\DUrole{w}{  }\DUrole{p}{*}\sphinxcode{\sphinxupquote{{\hyperref[\detokenize{appdev/refs/types/passwd_phrase_element:c.passwd_phrase_element}]{\sphinxcrossref{\DUrole{n}{passwd\_phrase\_element}}}}\DUrole{p}{.}}}\sphinxbfcode{\sphinxupquote{\DUrole{n}{phrase}}}}%
20377\pysigstopmultiline
20378\end{fulllineitems}
20379
20380
20381
20382\subsection{Internal}
20383\label{\detokenize{appdev/refs/types/index:internal}}
20384
20385\subsubsection{krb5\_auth\_context}
20386\label{\detokenize{appdev/refs/types/krb5_auth_context:krb5-auth-context}}\label{\detokenize{appdev/refs/types/krb5_auth_context:krb5-auth-context-struct}}\label{\detokenize{appdev/refs/types/krb5_auth_context::doc}}\index{krb5\_auth\_context (C type)@\spxentry{krb5\_auth\_context}\spxextra{C type}}
20387
20388\begin{fulllineitems}
20389\phantomsection\label{\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}}%
20390\pysigstartmultiline
20391\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_auth\_context}}}}%
20392\pysigstopmultiline
20393\end{fulllineitems}
20394
20395
20396
20397\paragraph{Declaration}
20398\label{\detokenize{appdev/refs/types/krb5_auth_context:declaration}}
20399\sphinxAtStartPar
20400typedef struct \_krb5\_auth\_context* krb5\_auth\_context
20401
20402
20403\subsubsection{krb5\_cksumtype}
20404\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)@\spxentry{krb5\_cksumtype}\spxextra{C type}}
20405
20406\begin{fulllineitems}
20407\phantomsection\label{\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}}%
20408\pysigstartmultiline
20409\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cksumtype}}}}%
20410\pysigstopmultiline
20411\end{fulllineitems}
20412
20413
20414
20415\paragraph{Declaration}
20416\label{\detokenize{appdev/refs/types/krb5_cksumtype:declaration}}
20417\sphinxAtStartPar
20418typedef krb5\_int32 krb5\_cksumtype
20419
20420
20421\subsubsection{krb5\_context}
20422\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)@\spxentry{krb5\_context}\spxextra{C type}}
20423
20424\begin{fulllineitems}
20425\phantomsection\label{\detokenize{appdev/refs/types/krb5_context:c.krb5_context}}%
20426\pysigstartmultiline
20427\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_context}}}}%
20428\pysigstopmultiline
20429\end{fulllineitems}
20430
20431
20432
20433\paragraph{Declaration}
20434\label{\detokenize{appdev/refs/types/krb5_context:declaration}}
20435\sphinxAtStartPar
20436typedef struct \_krb5\_context* krb5\_context
20437
20438
20439\subsubsection{krb5\_cc\_cursor}
20440\label{\detokenize{appdev/refs/types/krb5_cc_cursor:krb5-cc-cursor}}\label{\detokenize{appdev/refs/types/krb5_cc_cursor:krb5-cc-cursor-struct}}\label{\detokenize{appdev/refs/types/krb5_cc_cursor::doc}}\index{krb5\_cc\_cursor (C type)@\spxentry{krb5\_cc\_cursor}\spxextra{C type}}
20441
20442\begin{fulllineitems}
20443\phantomsection\label{\detokenize{appdev/refs/types/krb5_cc_cursor:c.krb5_cc_cursor}}%
20444\pysigstartmultiline
20445\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cc\_cursor}}}}%
20446\pysigstopmultiline
20447\end{fulllineitems}
20448
20449
20450\sphinxAtStartPar
20451Cursor for sequential lookup.
20452
20453
20454\paragraph{Declaration}
20455\label{\detokenize{appdev/refs/types/krb5_cc_cursor:declaration}}
20456\sphinxAtStartPar
20457typedef krb5\_pointer krb5\_cc\_cursor
20458
20459
20460\subsubsection{krb5\_ccache}
20461\label{\detokenize{appdev/refs/types/krb5_ccache:krb5-ccache}}\label{\detokenize{appdev/refs/types/krb5_ccache:krb5-ccache-struct}}\label{\detokenize{appdev/refs/types/krb5_ccache::doc}}\index{krb5\_ccache (C type)@\spxentry{krb5\_ccache}\spxextra{C type}}
20462
20463\begin{fulllineitems}
20464\phantomsection\label{\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}}%
20465\pysigstartmultiline
20466\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_ccache}}}}%
20467\pysigstopmultiline
20468\end{fulllineitems}
20469
20470
20471
20472\paragraph{Declaration}
20473\label{\detokenize{appdev/refs/types/krb5_ccache:declaration}}
20474\sphinxAtStartPar
20475typedef struct \_krb5\_ccache* krb5\_ccache
20476
20477
20478\subsubsection{krb5\_cccol\_cursor}
20479\label{\detokenize{appdev/refs/types/krb5_cccol_cursor:krb5-cccol-cursor}}\label{\detokenize{appdev/refs/types/krb5_cccol_cursor:krb5-cccol-cursor-struct}}\label{\detokenize{appdev/refs/types/krb5_cccol_cursor::doc}}\index{krb5\_cccol\_cursor (C type)@\spxentry{krb5\_cccol\_cursor}\spxextra{C type}}
20480
20481\begin{fulllineitems}
20482\phantomsection\label{\detokenize{appdev/refs/types/krb5_cccol_cursor:c.krb5_cccol_cursor}}%
20483\pysigstartmultiline
20484\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_cccol\_cursor}}}}%
20485\pysigstopmultiline
20486\end{fulllineitems}
20487
20488
20489\sphinxAtStartPar
20490Cursor for iterating over all ccaches.
20491
20492
20493\paragraph{Declaration}
20494\label{\detokenize{appdev/refs/types/krb5_cccol_cursor:declaration}}
20495\sphinxAtStartPar
20496typedef struct \_krb5\_cccol\_cursor* krb5\_cccol\_cursor
20497
20498
20499\subsubsection{krb5\_init\_creds\_context}
20500\label{\detokenize{appdev/refs/types/krb5_init_creds_context:krb5-init-creds-context}}\label{\detokenize{appdev/refs/types/krb5_init_creds_context:krb5-init-creds-context-struct}}\label{\detokenize{appdev/refs/types/krb5_init_creds_context::doc}}\index{krb5\_init\_creds\_context (C type)@\spxentry{krb5\_init\_creds\_context}\spxextra{C type}}
20501
20502\begin{fulllineitems}
20503\phantomsection\label{\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}}%
20504\pysigstartmultiline
20505\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_init\_creds\_context}}}}%
20506\pysigstopmultiline
20507\end{fulllineitems}
20508
20509
20510
20511\paragraph{Declaration}
20512\label{\detokenize{appdev/refs/types/krb5_init_creds_context:declaration}}
20513\sphinxAtStartPar
20514typedef struct \_krb5\_init\_creds\_context* krb5\_init\_creds\_context
20515
20516
20517\subsubsection{krb5\_key}
20518\label{\detokenize{appdev/refs/types/krb5_key:krb5-key}}\label{\detokenize{appdev/refs/types/krb5_key:krb5-key-struct}}\label{\detokenize{appdev/refs/types/krb5_key::doc}}\index{krb5\_key (C type)@\spxentry{krb5\_key}\spxextra{C type}}
20519
20520\begin{fulllineitems}
20521\phantomsection\label{\detokenize{appdev/refs/types/krb5_key:c.krb5_key}}%
20522\pysigstartmultiline
20523\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_key}}}}%
20524\pysigstopmultiline
20525\end{fulllineitems}
20526
20527
20528\sphinxAtStartPar
20529Opaque identifier for a key.
20530
20531\sphinxAtStartPar
20532Use 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\sphinxhyphen{}protected.
20533
20534
20535\paragraph{Declaration}
20536\label{\detokenize{appdev/refs/types/krb5_key:declaration}}
20537\sphinxAtStartPar
20538typedef struct krb5\_key\_st* krb5\_key
20539
20540
20541\subsubsection{krb5\_keytab}
20542\label{\detokenize{appdev/refs/types/krb5_keytab:krb5-keytab}}\label{\detokenize{appdev/refs/types/krb5_keytab:krb5-keytab-struct}}\label{\detokenize{appdev/refs/types/krb5_keytab::doc}}\index{krb5\_keytab (C type)@\spxentry{krb5\_keytab}\spxextra{C type}}
20543
20544\begin{fulllineitems}
20545\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}}%
20546\pysigstartmultiline
20547\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_keytab}}}}%
20548\pysigstopmultiline
20549\end{fulllineitems}
20550
20551
20552
20553\paragraph{Declaration}
20554\label{\detokenize{appdev/refs/types/krb5_keytab:declaration}}
20555\sphinxAtStartPar
20556typedef struct \_krb5\_kt* krb5\_keytab
20557
20558
20559\subsubsection{krb5\_pac}
20560\label{\detokenize{appdev/refs/types/krb5_pac:krb5-pac}}\label{\detokenize{appdev/refs/types/krb5_pac:krb5-pac-struct}}\label{\detokenize{appdev/refs/types/krb5_pac::doc}}\index{krb5\_pac (C type)@\spxentry{krb5\_pac}\spxextra{C type}}
20561
20562\begin{fulllineitems}
20563\phantomsection\label{\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}}%
20564\pysigstartmultiline
20565\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_pac}}}}%
20566\pysigstopmultiline
20567\end{fulllineitems}
20568
20569
20570\sphinxAtStartPar
20571PAC data structure to convey authorization information.
20572
20573
20574\paragraph{Declaration}
20575\label{\detokenize{appdev/refs/types/krb5_pac:declaration}}
20576\sphinxAtStartPar
20577typedef struct krb5\_pac\_data* krb5\_pac
20578
20579
20580\subsubsection{krb5\_rcache}
20581\label{\detokenize{appdev/refs/types/krb5_rcache:krb5-rcache}}\label{\detokenize{appdev/refs/types/krb5_rcache:krb5-rcache-struct}}\label{\detokenize{appdev/refs/types/krb5_rcache::doc}}\index{krb5\_rcache (C type)@\spxentry{krb5\_rcache}\spxextra{C type}}
20582
20583\begin{fulllineitems}
20584\phantomsection\label{\detokenize{appdev/refs/types/krb5_rcache:c.krb5_rcache}}%
20585\pysigstartmultiline
20586\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_rcache}}}}%
20587\pysigstopmultiline
20588\end{fulllineitems}
20589
20590
20591
20592\paragraph{Declaration}
20593\label{\detokenize{appdev/refs/types/krb5_rcache:declaration}}
20594\sphinxAtStartPar
20595typedef struct krb5\_rc\_st* krb5\_rcache
20596
20597
20598\subsubsection{krb5\_tkt\_creds\_context}
20599\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}}\label{\detokenize{appdev/refs/types/krb5_tkt_creds_context::doc}}\index{krb5\_tkt\_creds\_context (C type)@\spxentry{krb5\_tkt\_creds\_context}\spxextra{C type}}
20600
20601\begin{fulllineitems}
20602\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}}%
20603\pysigstartmultiline
20604\pysigline{\DUrole{k}{type}\DUrole{w}{  }\sphinxbfcode{\sphinxupquote{\DUrole{n}{krb5\_tkt\_creds\_context}}}}%
20605\pysigstopmultiline
20606\end{fulllineitems}
20607
20608
20609
20610\paragraph{Declaration}
20611\label{\detokenize{appdev/refs/types/krb5_tkt_creds_context:declaration}}
20612\sphinxAtStartPar
20613typedef struct \_krb5\_tkt\_creds\_context* krb5\_tkt\_creds\_context
20614
20615
20616\section{krb5 simple macros}
20617\label{\detokenize{appdev/refs/macros/index:krb5-simple-macros}}\label{\detokenize{appdev/refs/macros/index::doc}}
20618
20619\subsection{Public}
20620\label{\detokenize{appdev/refs/macros/index:public}}
20621
20622\subsubsection{ADDRTYPE\_ADDRPORT}
20623\label{\detokenize{appdev/refs/macros/ADDRTYPE_ADDRPORT:addrtype-addrport}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_ADDRPORT:addrtype-addrport-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_ADDRPORT::doc}}\index{ADDRTYPE\_ADDRPORT (built\sphinxhyphen{}in variable)@\spxentry{ADDRTYPE\_ADDRPORT}\spxextra{built\sphinxhyphen{}in variable}}
20624
20625\begin{fulllineitems}
20626\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_ADDRPORT:ADDRTYPE_ADDRPORT}}\pysigline{\sphinxbfcode{\sphinxupquote{ADDRTYPE\_ADDRPORT}}}
20627\end{fulllineitems}
20628
20629
20630
20631\begin{savenotes}\sphinxattablestart
20632\centering
20633\begin{tabulary}{\linewidth}[t]{|T|T|}
20634\hline
20635
20636\sphinxAtStartPar
20637\sphinxcode{\sphinxupquote{ADDRTYPE\_ADDRPORT}}
20638&
20639\sphinxAtStartPar
20640\sphinxcode{\sphinxupquote{0x0100}}
20641\\
20642\hline
20643\end{tabulary}
20644\par
20645\sphinxattableend\end{savenotes}
20646
20647
20648\subsubsection{ADDRTYPE\_CHAOS}
20649\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\sphinxhyphen{}in variable)@\spxentry{ADDRTYPE\_CHAOS}\spxextra{built\sphinxhyphen{}in variable}}
20650
20651\begin{fulllineitems}
20652\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_CHAOS:ADDRTYPE_CHAOS}}\pysigline{\sphinxbfcode{\sphinxupquote{ADDRTYPE\_CHAOS}}}
20653\end{fulllineitems}
20654
20655
20656
20657\begin{savenotes}\sphinxattablestart
20658\centering
20659\begin{tabulary}{\linewidth}[t]{|T|T|}
20660\hline
20661
20662\sphinxAtStartPar
20663\sphinxcode{\sphinxupquote{ADDRTYPE\_CHAOS}}
20664&
20665\sphinxAtStartPar
20666\sphinxcode{\sphinxupquote{0x0005}}
20667\\
20668\hline
20669\end{tabulary}
20670\par
20671\sphinxattableend\end{savenotes}
20672
20673
20674\subsubsection{ADDRTYPE\_DDP}
20675\label{\detokenize{appdev/refs/macros/ADDRTYPE_DDP:addrtype-ddp}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_DDP:addrtype-ddp-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_DDP::doc}}\index{ADDRTYPE\_DDP (built\sphinxhyphen{}in variable)@\spxentry{ADDRTYPE\_DDP}\spxextra{built\sphinxhyphen{}in variable}}
20676
20677\begin{fulllineitems}
20678\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_DDP:ADDRTYPE_DDP}}\pysigline{\sphinxbfcode{\sphinxupquote{ADDRTYPE\_DDP}}}
20679\end{fulllineitems}
20680
20681
20682
20683\begin{savenotes}\sphinxattablestart
20684\centering
20685\begin{tabulary}{\linewidth}[t]{|T|T|}
20686\hline
20687
20688\sphinxAtStartPar
20689\sphinxcode{\sphinxupquote{ADDRTYPE\_DDP}}
20690&
20691\sphinxAtStartPar
20692\sphinxcode{\sphinxupquote{0x0010}}
20693\\
20694\hline
20695\end{tabulary}
20696\par
20697\sphinxattableend\end{savenotes}
20698
20699
20700\subsubsection{ADDRTYPE\_INET}
20701\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\sphinxhyphen{}in variable)@\spxentry{ADDRTYPE\_INET}\spxextra{built\sphinxhyphen{}in variable}}
20702
20703\begin{fulllineitems}
20704\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET:ADDRTYPE_INET}}\pysigline{\sphinxbfcode{\sphinxupquote{ADDRTYPE\_INET}}}
20705\end{fulllineitems}
20706
20707
20708
20709\begin{savenotes}\sphinxattablestart
20710\centering
20711\begin{tabulary}{\linewidth}[t]{|T|T|}
20712\hline
20713
20714\sphinxAtStartPar
20715\sphinxcode{\sphinxupquote{ADDRTYPE\_INET}}
20716&
20717\sphinxAtStartPar
20718\sphinxcode{\sphinxupquote{0x0002}}
20719\\
20720\hline
20721\end{tabulary}
20722\par
20723\sphinxattableend\end{savenotes}
20724
20725
20726\subsubsection{ADDRTYPE\_INET6}
20727\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET6:addrtype-inet6}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET6:addrtype-inet6-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET6::doc}}\index{ADDRTYPE\_INET6 (built\sphinxhyphen{}in variable)@\spxentry{ADDRTYPE\_INET6}\spxextra{built\sphinxhyphen{}in variable}}
20728
20729\begin{fulllineitems}
20730\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET6:ADDRTYPE_INET6}}\pysigline{\sphinxbfcode{\sphinxupquote{ADDRTYPE\_INET6}}}
20731\end{fulllineitems}
20732
20733
20734
20735\begin{savenotes}\sphinxattablestart
20736\centering
20737\begin{tabulary}{\linewidth}[t]{|T|T|}
20738\hline
20739
20740\sphinxAtStartPar
20741\sphinxcode{\sphinxupquote{ADDRTYPE\_INET6}}
20742&
20743\sphinxAtStartPar
20744\sphinxcode{\sphinxupquote{0x0018}}
20745\\
20746\hline
20747\end{tabulary}
20748\par
20749\sphinxattableend\end{savenotes}
20750
20751
20752\subsubsection{ADDRTYPE\_IPPORT}
20753\label{\detokenize{appdev/refs/macros/ADDRTYPE_IPPORT:addrtype-ipport}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_IPPORT:addrtype-ipport-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_IPPORT::doc}}\index{ADDRTYPE\_IPPORT (built\sphinxhyphen{}in variable)@\spxentry{ADDRTYPE\_IPPORT}\spxextra{built\sphinxhyphen{}in variable}}
20754
20755\begin{fulllineitems}
20756\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_IPPORT:ADDRTYPE_IPPORT}}\pysigline{\sphinxbfcode{\sphinxupquote{ADDRTYPE\_IPPORT}}}
20757\end{fulllineitems}
20758
20759
20760
20761\begin{savenotes}\sphinxattablestart
20762\centering
20763\begin{tabulary}{\linewidth}[t]{|T|T|}
20764\hline
20765
20766\sphinxAtStartPar
20767\sphinxcode{\sphinxupquote{ADDRTYPE\_IPPORT}}
20768&
20769\sphinxAtStartPar
20770\sphinxcode{\sphinxupquote{0x0101}}
20771\\
20772\hline
20773\end{tabulary}
20774\par
20775\sphinxattableend\end{savenotes}
20776
20777
20778\subsubsection{ADDRTYPE\_ISO}
20779\label{\detokenize{appdev/refs/macros/ADDRTYPE_ISO:addrtype-iso}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_ISO:addrtype-iso-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_ISO::doc}}\index{ADDRTYPE\_ISO (built\sphinxhyphen{}in variable)@\spxentry{ADDRTYPE\_ISO}\spxextra{built\sphinxhyphen{}in variable}}
20780
20781\begin{fulllineitems}
20782\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_ISO:ADDRTYPE_ISO}}\pysigline{\sphinxbfcode{\sphinxupquote{ADDRTYPE\_ISO}}}
20783\end{fulllineitems}
20784
20785
20786
20787\begin{savenotes}\sphinxattablestart
20788\centering
20789\begin{tabulary}{\linewidth}[t]{|T|T|}
20790\hline
20791
20792\sphinxAtStartPar
20793\sphinxcode{\sphinxupquote{ADDRTYPE\_ISO}}
20794&
20795\sphinxAtStartPar
20796\sphinxcode{\sphinxupquote{0x0007}}
20797\\
20798\hline
20799\end{tabulary}
20800\par
20801\sphinxattableend\end{savenotes}
20802
20803
20804\subsubsection{ADDRTYPE\_IS\_LOCAL}
20805\label{\detokenize{appdev/refs/macros/ADDRTYPE_IS_LOCAL:addrtype-is-local}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_IS_LOCAL:addrtype-is-local-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_IS_LOCAL::doc}}\index{ADDRTYPE\_IS\_LOCAL (built\sphinxhyphen{}in variable)@\spxentry{ADDRTYPE\_IS\_LOCAL}\spxextra{built\sphinxhyphen{}in variable}}
20806
20807\begin{fulllineitems}
20808\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_IS_LOCAL:ADDRTYPE_IS_LOCAL}}\pysigline{\sphinxbfcode{\sphinxupquote{ADDRTYPE\_IS\_LOCAL}}}
20809\end{fulllineitems}
20810
20811
20812
20813\begin{savenotes}\sphinxattablestart
20814\centering
20815\begin{tabulary}{\linewidth}[t]{|T|T|}
20816\hline
20817
20818\sphinxAtStartPar
20819\sphinxcode{\sphinxupquote{ADDRTYPE\_IS\_LOCAL (addrtype)}}
20820&
20821\sphinxAtStartPar
20822\sphinxcode{\sphinxupquote{(addrtype \& 0x8000)}}
20823\\
20824\hline
20825\end{tabulary}
20826\par
20827\sphinxattableend\end{savenotes}
20828
20829
20830\subsubsection{ADDRTYPE\_NETBIOS}
20831\label{\detokenize{appdev/refs/macros/ADDRTYPE_NETBIOS:addrtype-netbios}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_NETBIOS:addrtype-netbios-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_NETBIOS::doc}}\index{ADDRTYPE\_NETBIOS (built\sphinxhyphen{}in variable)@\spxentry{ADDRTYPE\_NETBIOS}\spxextra{built\sphinxhyphen{}in variable}}
20832
20833\begin{fulllineitems}
20834\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_NETBIOS:ADDRTYPE_NETBIOS}}\pysigline{\sphinxbfcode{\sphinxupquote{ADDRTYPE\_NETBIOS}}}
20835\end{fulllineitems}
20836
20837
20838
20839\begin{savenotes}\sphinxattablestart
20840\centering
20841\begin{tabulary}{\linewidth}[t]{|T|T|}
20842\hline
20843
20844\sphinxAtStartPar
20845\sphinxcode{\sphinxupquote{ADDRTYPE\_NETBIOS}}
20846&
20847\sphinxAtStartPar
20848\sphinxcode{\sphinxupquote{0x0014}}
20849\\
20850\hline
20851\end{tabulary}
20852\par
20853\sphinxattableend\end{savenotes}
20854
20855
20856\subsubsection{ADDRTYPE\_XNS}
20857\label{\detokenize{appdev/refs/macros/ADDRTYPE_XNS:addrtype-xns}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_XNS:addrtype-xns-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_XNS::doc}}\index{ADDRTYPE\_XNS (built\sphinxhyphen{}in variable)@\spxentry{ADDRTYPE\_XNS}\spxextra{built\sphinxhyphen{}in variable}}
20858
20859\begin{fulllineitems}
20860\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_XNS:ADDRTYPE_XNS}}\pysigline{\sphinxbfcode{\sphinxupquote{ADDRTYPE\_XNS}}}
20861\end{fulllineitems}
20862
20863
20864
20865\begin{savenotes}\sphinxattablestart
20866\centering
20867\begin{tabulary}{\linewidth}[t]{|T|T|}
20868\hline
20869
20870\sphinxAtStartPar
20871\sphinxcode{\sphinxupquote{ADDRTYPE\_XNS}}
20872&
20873\sphinxAtStartPar
20874\sphinxcode{\sphinxupquote{0x0006}}
20875\\
20876\hline
20877\end{tabulary}
20878\par
20879\sphinxattableend\end{savenotes}
20880
20881
20882\subsubsection{AD\_TYPE\_EXTERNAL}
20883\label{\detokenize{appdev/refs/macros/AD_TYPE_EXTERNAL:ad-type-external}}\label{\detokenize{appdev/refs/macros/AD_TYPE_EXTERNAL:ad-type-external-data}}\label{\detokenize{appdev/refs/macros/AD_TYPE_EXTERNAL::doc}}\index{AD\_TYPE\_EXTERNAL (built\sphinxhyphen{}in variable)@\spxentry{AD\_TYPE\_EXTERNAL}\spxextra{built\sphinxhyphen{}in variable}}
20884
20885\begin{fulllineitems}
20886\phantomsection\label{\detokenize{appdev/refs/macros/AD_TYPE_EXTERNAL:AD_TYPE_EXTERNAL}}\pysigline{\sphinxbfcode{\sphinxupquote{AD\_TYPE\_EXTERNAL}}}
20887\end{fulllineitems}
20888
20889
20890
20891\begin{savenotes}\sphinxattablestart
20892\centering
20893\begin{tabulary}{\linewidth}[t]{|T|T|}
20894\hline
20895
20896\sphinxAtStartPar
20897\sphinxcode{\sphinxupquote{AD\_TYPE\_EXTERNAL}}
20898&
20899\sphinxAtStartPar
20900\sphinxcode{\sphinxupquote{0x4000}}
20901\\
20902\hline
20903\end{tabulary}
20904\par
20905\sphinxattableend\end{savenotes}
20906
20907
20908\subsubsection{AD\_TYPE\_FIELD\_TYPE\_MASK}
20909\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:ad-type-field-type-mask-data}}\label{\detokenize{appdev/refs/macros/AD_TYPE_FIELD_TYPE_MASK::doc}}\index{AD\_TYPE\_FIELD\_TYPE\_MASK (built\sphinxhyphen{}in variable)@\spxentry{AD\_TYPE\_FIELD\_TYPE\_MASK}\spxextra{built\sphinxhyphen{}in variable}}
20910
20911\begin{fulllineitems}
20912\phantomsection\label{\detokenize{appdev/refs/macros/AD_TYPE_FIELD_TYPE_MASK:AD_TYPE_FIELD_TYPE_MASK}}\pysigline{\sphinxbfcode{\sphinxupquote{AD\_TYPE\_FIELD\_TYPE\_MASK}}}
20913\end{fulllineitems}
20914
20915
20916
20917\begin{savenotes}\sphinxattablestart
20918\centering
20919\begin{tabulary}{\linewidth}[t]{|T|T|}
20920\hline
20921
20922\sphinxAtStartPar
20923\sphinxcode{\sphinxupquote{AD\_TYPE\_FIELD\_TYPE\_MASK}}
20924&
20925\sphinxAtStartPar
20926\sphinxcode{\sphinxupquote{0x1fff}}
20927\\
20928\hline
20929\end{tabulary}
20930\par
20931\sphinxattableend\end{savenotes}
20932
20933
20934\subsubsection{AD\_TYPE\_REGISTERED}
20935\label{\detokenize{appdev/refs/macros/AD_TYPE_REGISTERED:ad-type-registered}}\label{\detokenize{appdev/refs/macros/AD_TYPE_REGISTERED:ad-type-registered-data}}\label{\detokenize{appdev/refs/macros/AD_TYPE_REGISTERED::doc}}\index{AD\_TYPE\_REGISTERED (built\sphinxhyphen{}in variable)@\spxentry{AD\_TYPE\_REGISTERED}\spxextra{built\sphinxhyphen{}in variable}}
20936
20937\begin{fulllineitems}
20938\phantomsection\label{\detokenize{appdev/refs/macros/AD_TYPE_REGISTERED:AD_TYPE_REGISTERED}}\pysigline{\sphinxbfcode{\sphinxupquote{AD\_TYPE\_REGISTERED}}}
20939\end{fulllineitems}
20940
20941
20942
20943\begin{savenotes}\sphinxattablestart
20944\centering
20945\begin{tabulary}{\linewidth}[t]{|T|T|}
20946\hline
20947
20948\sphinxAtStartPar
20949\sphinxcode{\sphinxupquote{AD\_TYPE\_REGISTERED}}
20950&
20951\sphinxAtStartPar
20952\sphinxcode{\sphinxupquote{0x2000}}
20953\\
20954\hline
20955\end{tabulary}
20956\par
20957\sphinxattableend\end{savenotes}
20958
20959
20960\subsubsection{AD\_TYPE\_RESERVED}
20961\label{\detokenize{appdev/refs/macros/AD_TYPE_RESERVED:ad-type-reserved}}\label{\detokenize{appdev/refs/macros/AD_TYPE_RESERVED:ad-type-reserved-data}}\label{\detokenize{appdev/refs/macros/AD_TYPE_RESERVED::doc}}\index{AD\_TYPE\_RESERVED (built\sphinxhyphen{}in variable)@\spxentry{AD\_TYPE\_RESERVED}\spxextra{built\sphinxhyphen{}in variable}}
20962
20963\begin{fulllineitems}
20964\phantomsection\label{\detokenize{appdev/refs/macros/AD_TYPE_RESERVED:AD_TYPE_RESERVED}}\pysigline{\sphinxbfcode{\sphinxupquote{AD\_TYPE\_RESERVED}}}
20965\end{fulllineitems}
20966
20967
20968
20969\begin{savenotes}\sphinxattablestart
20970\centering
20971\begin{tabulary}{\linewidth}[t]{|T|T|}
20972\hline
20973
20974\sphinxAtStartPar
20975\sphinxcode{\sphinxupquote{AD\_TYPE\_RESERVED}}
20976&
20977\sphinxAtStartPar
20978\sphinxcode{\sphinxupquote{0x8000}}
20979\\
20980\hline
20981\end{tabulary}
20982\par
20983\sphinxattableend\end{savenotes}
20984
20985
20986\subsubsection{AP\_OPTS\_ETYPE\_NEGOTIATION}
20987\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}}\label{\detokenize{appdev/refs/macros/AP_OPTS_ETYPE_NEGOTIATION::doc}}\index{AP\_OPTS\_ETYPE\_NEGOTIATION (built\sphinxhyphen{}in variable)@\spxentry{AP\_OPTS\_ETYPE\_NEGOTIATION}\spxextra{built\sphinxhyphen{}in variable}}
20988
20989\begin{fulllineitems}
20990\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_ETYPE_NEGOTIATION:AP_OPTS_ETYPE_NEGOTIATION}}\pysigline{\sphinxbfcode{\sphinxupquote{AP\_OPTS\_ETYPE\_NEGOTIATION}}}
20991\end{fulllineitems}
20992
20993
20994
20995\begin{savenotes}\sphinxattablestart
20996\centering
20997\begin{tabulary}{\linewidth}[t]{|T|T|}
20998\hline
20999
21000\sphinxAtStartPar
21001\sphinxcode{\sphinxupquote{AP\_OPTS\_ETYPE\_NEGOTIATION}}
21002&
21003\sphinxAtStartPar
21004\sphinxcode{\sphinxupquote{0x00000002}}
21005\\
21006\hline
21007\end{tabulary}
21008\par
21009\sphinxattableend\end{savenotes}
21010
21011
21012\subsubsection{AP\_OPTS\_MUTUAL\_REQUIRED}
21013\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\sphinxhyphen{}in variable)@\spxentry{AP\_OPTS\_MUTUAL\_REQUIRED}\spxextra{built\sphinxhyphen{}in variable}}
21014
21015\begin{fulllineitems}
21016\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED:AP_OPTS_MUTUAL_REQUIRED}}\pysigline{\sphinxbfcode{\sphinxupquote{AP\_OPTS\_MUTUAL\_REQUIRED}}}
21017\end{fulllineitems}
21018
21019
21020\sphinxAtStartPar
21021Perform a mutual authentication exchange.
21022
21023
21024\begin{savenotes}\sphinxattablestart
21025\centering
21026\begin{tabulary}{\linewidth}[t]{|T|T|}
21027\hline
21028
21029\sphinxAtStartPar
21030\sphinxcode{\sphinxupquote{AP\_OPTS\_MUTUAL\_REQUIRED}}
21031&
21032\sphinxAtStartPar
21033\sphinxcode{\sphinxupquote{0x20000000}}
21034\\
21035\hline
21036\end{tabulary}
21037\par
21038\sphinxattableend\end{savenotes}
21039
21040
21041\subsubsection{AP\_OPTS\_RESERVED}
21042\label{\detokenize{appdev/refs/macros/AP_OPTS_RESERVED:ap-opts-reserved}}\label{\detokenize{appdev/refs/macros/AP_OPTS_RESERVED:ap-opts-reserved-data}}\label{\detokenize{appdev/refs/macros/AP_OPTS_RESERVED::doc}}\index{AP\_OPTS\_RESERVED (built\sphinxhyphen{}in variable)@\spxentry{AP\_OPTS\_RESERVED}\spxextra{built\sphinxhyphen{}in variable}}
21043
21044\begin{fulllineitems}
21045\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_RESERVED:AP_OPTS_RESERVED}}\pysigline{\sphinxbfcode{\sphinxupquote{AP\_OPTS\_RESERVED}}}
21046\end{fulllineitems}
21047
21048
21049
21050\begin{savenotes}\sphinxattablestart
21051\centering
21052\begin{tabulary}{\linewidth}[t]{|T|T|}
21053\hline
21054
21055\sphinxAtStartPar
21056\sphinxcode{\sphinxupquote{AP\_OPTS\_RESERVED}}
21057&
21058\sphinxAtStartPar
21059\sphinxcode{\sphinxupquote{0x80000000}}
21060\\
21061\hline
21062\end{tabulary}
21063\par
21064\sphinxattableend\end{savenotes}
21065
21066
21067\subsubsection{AP\_OPTS\_USE\_SESSION\_KEY}
21068\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:ap-opts-use-session-key-data}}\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SESSION_KEY::doc}}\index{AP\_OPTS\_USE\_SESSION\_KEY (built\sphinxhyphen{}in variable)@\spxentry{AP\_OPTS\_USE\_SESSION\_KEY}\spxextra{built\sphinxhyphen{}in variable}}
21069
21070\begin{fulllineitems}
21071\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SESSION_KEY:AP_OPTS_USE_SESSION_KEY}}\pysigline{\sphinxbfcode{\sphinxupquote{AP\_OPTS\_USE\_SESSION\_KEY}}}
21072\end{fulllineitems}
21073
21074
21075\sphinxAtStartPar
21076Use session key.
21077
21078
21079\begin{savenotes}\sphinxattablestart
21080\centering
21081\begin{tabulary}{\linewidth}[t]{|T|T|}
21082\hline
21083
21084\sphinxAtStartPar
21085\sphinxcode{\sphinxupquote{AP\_OPTS\_USE\_SESSION\_KEY}}
21086&
21087\sphinxAtStartPar
21088\sphinxcode{\sphinxupquote{0x40000000}}
21089\\
21090\hline
21091\end{tabulary}
21092\par
21093\sphinxattableend\end{savenotes}
21094
21095
21096\subsubsection{AP\_OPTS\_USE\_SUBKEY}
21097\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\sphinxhyphen{}in variable)@\spxentry{AP\_OPTS\_USE\_SUBKEY}\spxextra{built\sphinxhyphen{}in variable}}
21098
21099\begin{fulllineitems}
21100\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SUBKEY:AP_OPTS_USE_SUBKEY}}\pysigline{\sphinxbfcode{\sphinxupquote{AP\_OPTS\_USE\_SUBKEY}}}
21101\end{fulllineitems}
21102
21103
21104\sphinxAtStartPar
21105Generate a subsession key from the current session key obtained from the credentials.
21106
21107
21108\begin{savenotes}\sphinxattablestart
21109\centering
21110\begin{tabulary}{\linewidth}[t]{|T|T|}
21111\hline
21112
21113\sphinxAtStartPar
21114\sphinxcode{\sphinxupquote{AP\_OPTS\_USE\_SUBKEY}}
21115&
21116\sphinxAtStartPar
21117\sphinxcode{\sphinxupquote{0x00000001}}
21118\\
21119\hline
21120\end{tabulary}
21121\par
21122\sphinxattableend\end{savenotes}
21123
21124
21125\subsubsection{AP\_OPTS\_WIRE\_MASK}
21126\label{\detokenize{appdev/refs/macros/AP_OPTS_WIRE_MASK:ap-opts-wire-mask}}\label{\detokenize{appdev/refs/macros/AP_OPTS_WIRE_MASK:ap-opts-wire-mask-data}}\label{\detokenize{appdev/refs/macros/AP_OPTS_WIRE_MASK::doc}}\index{AP\_OPTS\_WIRE\_MASK (built\sphinxhyphen{}in variable)@\spxentry{AP\_OPTS\_WIRE\_MASK}\spxextra{built\sphinxhyphen{}in variable}}
21127
21128\begin{fulllineitems}
21129\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_WIRE_MASK:AP_OPTS_WIRE_MASK}}\pysigline{\sphinxbfcode{\sphinxupquote{AP\_OPTS\_WIRE\_MASK}}}
21130\end{fulllineitems}
21131
21132
21133
21134\begin{savenotes}\sphinxattablestart
21135\centering
21136\begin{tabulary}{\linewidth}[t]{|T|T|}
21137\hline
21138
21139\sphinxAtStartPar
21140\sphinxcode{\sphinxupquote{AP\_OPTS\_WIRE\_MASK}}
21141&
21142\sphinxAtStartPar
21143\sphinxcode{\sphinxupquote{0xfffffff0}}
21144\\
21145\hline
21146\end{tabulary}
21147\par
21148\sphinxattableend\end{savenotes}
21149
21150
21151\subsubsection{CKSUMTYPE\_CMAC\_CAMELLIA128}
21152\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA128:cksumtype-cmac-camellia128}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA128:cksumtype-cmac-camellia128-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA128::doc}}\index{CKSUMTYPE\_CMAC\_CAMELLIA128 (built\sphinxhyphen{}in variable)@\spxentry{CKSUMTYPE\_CMAC\_CAMELLIA128}\spxextra{built\sphinxhyphen{}in variable}}
21153
21154\begin{fulllineitems}
21155\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA128:CKSUMTYPE_CMAC_CAMELLIA128}}\pysigline{\sphinxbfcode{\sphinxupquote{CKSUMTYPE\_CMAC\_CAMELLIA128}}}
21156\end{fulllineitems}
21157
21158
21159\sphinxAtStartPar
21160RFC 6803.
21161
21162
21163\begin{savenotes}\sphinxattablestart
21164\centering
21165\begin{tabulary}{\linewidth}[t]{|T|T|}
21166\hline
21167
21168\sphinxAtStartPar
21169\sphinxcode{\sphinxupquote{CKSUMTYPE\_CMAC\_CAMELLIA128}}
21170&
21171\sphinxAtStartPar
21172\sphinxcode{\sphinxupquote{0x0011}}
21173\\
21174\hline
21175\end{tabulary}
21176\par
21177\sphinxattableend\end{savenotes}
21178
21179
21180\subsubsection{CKSUMTYPE\_CMAC\_CAMELLIA256}
21181\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA256:cksumtype-cmac-camellia256}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA256:cksumtype-cmac-camellia256-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA256::doc}}\index{CKSUMTYPE\_CMAC\_CAMELLIA256 (built\sphinxhyphen{}in variable)@\spxentry{CKSUMTYPE\_CMAC\_CAMELLIA256}\spxextra{built\sphinxhyphen{}in variable}}
21182
21183\begin{fulllineitems}
21184\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA256:CKSUMTYPE_CMAC_CAMELLIA256}}\pysigline{\sphinxbfcode{\sphinxupquote{CKSUMTYPE\_CMAC\_CAMELLIA256}}}
21185\end{fulllineitems}
21186
21187
21188\sphinxAtStartPar
21189RFC 6803.
21190
21191
21192\begin{savenotes}\sphinxattablestart
21193\centering
21194\begin{tabulary}{\linewidth}[t]{|T|T|}
21195\hline
21196
21197\sphinxAtStartPar
21198\sphinxcode{\sphinxupquote{CKSUMTYPE\_CMAC\_CAMELLIA256}}
21199&
21200\sphinxAtStartPar
21201\sphinxcode{\sphinxupquote{0x0012}}
21202\\
21203\hline
21204\end{tabulary}
21205\par
21206\sphinxattableend\end{savenotes}
21207
21208
21209\subsubsection{CKSUMTYPE\_CRC32}
21210\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CRC32:cksumtype-crc32}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CRC32:cksumtype-crc32-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CRC32::doc}}\index{CKSUMTYPE\_CRC32 (built\sphinxhyphen{}in variable)@\spxentry{CKSUMTYPE\_CRC32}\spxextra{built\sphinxhyphen{}in variable}}
21211
21212\begin{fulllineitems}
21213\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CRC32:CKSUMTYPE_CRC32}}\pysigline{\sphinxbfcode{\sphinxupquote{CKSUMTYPE\_CRC32}}}
21214\end{fulllineitems}
21215
21216
21217
21218\begin{savenotes}\sphinxattablestart
21219\centering
21220\begin{tabulary}{\linewidth}[t]{|T|T|}
21221\hline
21222
21223\sphinxAtStartPar
21224\sphinxcode{\sphinxupquote{CKSUMTYPE\_CRC32}}
21225&
21226\sphinxAtStartPar
21227\sphinxcode{\sphinxupquote{0x0001}}
21228\\
21229\hline
21230\end{tabulary}
21231\par
21232\sphinxattableend\end{savenotes}
21233
21234
21235\subsubsection{CKSUMTYPE\_DESCBC}
21236\label{\detokenize{appdev/refs/macros/CKSUMTYPE_DESCBC:cksumtype-descbc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_DESCBC:cksumtype-descbc-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_DESCBC::doc}}\index{CKSUMTYPE\_DESCBC (built\sphinxhyphen{}in variable)@\spxentry{CKSUMTYPE\_DESCBC}\spxextra{built\sphinxhyphen{}in variable}}
21237
21238\begin{fulllineitems}
21239\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_DESCBC:CKSUMTYPE_DESCBC}}\pysigline{\sphinxbfcode{\sphinxupquote{CKSUMTYPE\_DESCBC}}}
21240\end{fulllineitems}
21241
21242
21243
21244\begin{savenotes}\sphinxattablestart
21245\centering
21246\begin{tabulary}{\linewidth}[t]{|T|T|}
21247\hline
21248
21249\sphinxAtStartPar
21250\sphinxcode{\sphinxupquote{CKSUMTYPE\_DESCBC}}
21251&
21252\sphinxAtStartPar
21253\sphinxcode{\sphinxupquote{0x0004}}
21254\\
21255\hline
21256\end{tabulary}
21257\par
21258\sphinxattableend\end{savenotes}
21259
21260
21261\subsubsection{CKSUMTYPE\_HMAC\_MD5\_ARCFOUR}
21262\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_MD5_ARCFOUR:cksumtype-hmac-md5-arcfour}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_MD5_ARCFOUR:cksumtype-hmac-md5-arcfour-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_MD5_ARCFOUR::doc}}\index{CKSUMTYPE\_HMAC\_MD5\_ARCFOUR (built\sphinxhyphen{}in variable)@\spxentry{CKSUMTYPE\_HMAC\_MD5\_ARCFOUR}\spxextra{built\sphinxhyphen{}in variable}}
21263
21264\begin{fulllineitems}
21265\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_MD5_ARCFOUR:CKSUMTYPE_HMAC_MD5_ARCFOUR}}\pysigline{\sphinxbfcode{\sphinxupquote{CKSUMTYPE\_HMAC\_MD5\_ARCFOUR}}}
21266\end{fulllineitems}
21267
21268
21269\sphinxAtStartPar
21270RFC 4757.
21271
21272
21273\begin{savenotes}\sphinxattablestart
21274\centering
21275\begin{tabulary}{\linewidth}[t]{|T|T|}
21276\hline
21277
21278\sphinxAtStartPar
21279\sphinxcode{\sphinxupquote{CKSUMTYPE\_HMAC\_MD5\_ARCFOUR}}
21280&
21281\sphinxAtStartPar
21282\sphinxcode{\sphinxupquote{\sphinxhyphen{}138}}
21283\\
21284\hline
21285\end{tabulary}
21286\par
21287\sphinxattableend\end{savenotes}
21288
21289
21290\subsubsection{CKSUMTYPE\_HMAC\_SHA1\_96\_AES128}
21291\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}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES128::doc}}\index{CKSUMTYPE\_HMAC\_SHA1\_96\_AES128 (built\sphinxhyphen{}in variable)@\spxentry{CKSUMTYPE\_HMAC\_SHA1\_96\_AES128}\spxextra{built\sphinxhyphen{}in variable}}
21292
21293\begin{fulllineitems}
21294\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES128:CKSUMTYPE_HMAC_SHA1_96_AES128}}\pysigline{\sphinxbfcode{\sphinxupquote{CKSUMTYPE\_HMAC\_SHA1\_96\_AES128}}}
21295\end{fulllineitems}
21296
21297
21298\sphinxAtStartPar
21299RFC 3962.
21300
21301\sphinxAtStartPar
21302Used with ENCTYPE\_AES128\_CTS\_HMAC\_SHA1\_96
21303
21304
21305\begin{savenotes}\sphinxattablestart
21306\centering
21307\begin{tabulary}{\linewidth}[t]{|T|T|}
21308\hline
21309
21310\sphinxAtStartPar
21311\sphinxcode{\sphinxupquote{CKSUMTYPE\_HMAC\_SHA1\_96\_AES128}}
21312&
21313\sphinxAtStartPar
21314\sphinxcode{\sphinxupquote{0x000f}}
21315\\
21316\hline
21317\end{tabulary}
21318\par
21319\sphinxattableend\end{savenotes}
21320
21321
21322\subsubsection{CKSUMTYPE\_HMAC\_SHA1\_96\_AES256}
21323\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}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES256::doc}}\index{CKSUMTYPE\_HMAC\_SHA1\_96\_AES256 (built\sphinxhyphen{}in variable)@\spxentry{CKSUMTYPE\_HMAC\_SHA1\_96\_AES256}\spxextra{built\sphinxhyphen{}in variable}}
21324
21325\begin{fulllineitems}
21326\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES256:CKSUMTYPE_HMAC_SHA1_96_AES256}}\pysigline{\sphinxbfcode{\sphinxupquote{CKSUMTYPE\_HMAC\_SHA1\_96\_AES256}}}
21327\end{fulllineitems}
21328
21329
21330\sphinxAtStartPar
21331RFC 3962.
21332
21333\sphinxAtStartPar
21334Used with ENCTYPE\_AES256\_CTS\_HMAC\_SHA1\_96
21335
21336
21337\begin{savenotes}\sphinxattablestart
21338\centering
21339\begin{tabulary}{\linewidth}[t]{|T|T|}
21340\hline
21341
21342\sphinxAtStartPar
21343\sphinxcode{\sphinxupquote{CKSUMTYPE\_HMAC\_SHA1\_96\_AES256}}
21344&
21345\sphinxAtStartPar
21346\sphinxcode{\sphinxupquote{0x0010}}
21347\\
21348\hline
21349\end{tabulary}
21350\par
21351\sphinxattableend\end{savenotes}
21352
21353
21354\subsubsection{CKSUMTYPE\_HMAC\_SHA256\_128\_AES128}
21355\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA256_128_AES128:cksumtype-hmac-sha256-128-aes128}}\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}}\index{CKSUMTYPE\_HMAC\_SHA256\_128\_AES128 (built\sphinxhyphen{}in variable)@\spxentry{CKSUMTYPE\_HMAC\_SHA256\_128\_AES128}\spxextra{built\sphinxhyphen{}in variable}}
21356
21357\begin{fulllineitems}
21358\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA256_128_AES128:CKSUMTYPE_HMAC_SHA256_128_AES128}}\pysigline{\sphinxbfcode{\sphinxupquote{CKSUMTYPE\_HMAC\_SHA256\_128\_AES128}}}
21359\end{fulllineitems}
21360
21361
21362\sphinxAtStartPar
21363RFC 8009.
21364
21365
21366\begin{savenotes}\sphinxattablestart
21367\centering
21368\begin{tabulary}{\linewidth}[t]{|T|T|}
21369\hline
21370
21371\sphinxAtStartPar
21372\sphinxcode{\sphinxupquote{CKSUMTYPE\_HMAC\_SHA256\_128\_AES128}}
21373&
21374\sphinxAtStartPar
21375\sphinxcode{\sphinxupquote{0x0013}}
21376\\
21377\hline
21378\end{tabulary}
21379\par
21380\sphinxattableend\end{savenotes}
21381
21382
21383\subsubsection{CKSUMTYPE\_HMAC\_SHA384\_192\_AES256}
21384\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\sphinxhyphen{}in variable)@\spxentry{CKSUMTYPE\_HMAC\_SHA384\_192\_AES256}\spxextra{built\sphinxhyphen{}in variable}}
21385
21386\begin{fulllineitems}
21387\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA384_192_AES256:CKSUMTYPE_HMAC_SHA384_192_AES256}}\pysigline{\sphinxbfcode{\sphinxupquote{CKSUMTYPE\_HMAC\_SHA384\_192\_AES256}}}
21388\end{fulllineitems}
21389
21390
21391\sphinxAtStartPar
21392RFC 8009.
21393
21394
21395\begin{savenotes}\sphinxattablestart
21396\centering
21397\begin{tabulary}{\linewidth}[t]{|T|T|}
21398\hline
21399
21400\sphinxAtStartPar
21401\sphinxcode{\sphinxupquote{CKSUMTYPE\_HMAC\_SHA384\_192\_AES256}}
21402&
21403\sphinxAtStartPar
21404\sphinxcode{\sphinxupquote{0x0014}}
21405\\
21406\hline
21407\end{tabulary}
21408\par
21409\sphinxattableend\end{savenotes}
21410
21411
21412\subsubsection{CKSUMTYPE\_HMAC\_SHA1\_DES3}
21413\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}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_DES3::doc}}\index{CKSUMTYPE\_HMAC\_SHA1\_DES3 (built\sphinxhyphen{}in variable)@\spxentry{CKSUMTYPE\_HMAC\_SHA1\_DES3}\spxextra{built\sphinxhyphen{}in variable}}
21414
21415\begin{fulllineitems}
21416\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_DES3:CKSUMTYPE_HMAC_SHA1_DES3}}\pysigline{\sphinxbfcode{\sphinxupquote{CKSUMTYPE\_HMAC\_SHA1\_DES3}}}
21417\end{fulllineitems}
21418
21419
21420
21421\begin{savenotes}\sphinxattablestart
21422\centering
21423\begin{tabulary}{\linewidth}[t]{|T|T|}
21424\hline
21425
21426\sphinxAtStartPar
21427\sphinxcode{\sphinxupquote{CKSUMTYPE\_HMAC\_SHA1\_DES3}}
21428&
21429\sphinxAtStartPar
21430\sphinxcode{\sphinxupquote{0x000c}}
21431\\
21432\hline
21433\end{tabulary}
21434\par
21435\sphinxattableend\end{savenotes}
21436
21437
21438\subsubsection{CKSUMTYPE\_MD5\_HMAC\_ARCFOUR}
21439\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\sphinxhyphen{}in variable)@\spxentry{CKSUMTYPE\_MD5\_HMAC\_ARCFOUR}\spxextra{built\sphinxhyphen{}in variable}}
21440
21441\begin{fulllineitems}
21442\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_MD5_HMAC_ARCFOUR:CKSUMTYPE_MD5_HMAC_ARCFOUR}}\pysigline{\sphinxbfcode{\sphinxupquote{CKSUMTYPE\_MD5\_HMAC\_ARCFOUR}}}
21443\end{fulllineitems}
21444
21445
21446
21447\begin{savenotes}\sphinxattablestart
21448\centering
21449\begin{tabulary}{\linewidth}[t]{|T|T|}
21450\hline
21451
21452\sphinxAtStartPar
21453\sphinxcode{\sphinxupquote{CKSUMTYPE\_MD5\_HMAC\_ARCFOUR}}
21454&
21455\sphinxAtStartPar
21456\sphinxcode{\sphinxupquote{\sphinxhyphen{}137 /* Microsoft netlogon */}}
21457\\
21458\hline
21459\end{tabulary}
21460\par
21461\sphinxattableend\end{savenotes}
21462
21463
21464\subsubsection{CKSUMTYPE\_NIST\_SHA}
21465\label{\detokenize{appdev/refs/macros/CKSUMTYPE_NIST_SHA:cksumtype-nist-sha}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_NIST_SHA:cksumtype-nist-sha-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_NIST_SHA::doc}}\index{CKSUMTYPE\_NIST\_SHA (built\sphinxhyphen{}in variable)@\spxentry{CKSUMTYPE\_NIST\_SHA}\spxextra{built\sphinxhyphen{}in variable}}
21466
21467\begin{fulllineitems}
21468\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_NIST_SHA:CKSUMTYPE_NIST_SHA}}\pysigline{\sphinxbfcode{\sphinxupquote{CKSUMTYPE\_NIST\_SHA}}}
21469\end{fulllineitems}
21470
21471
21472
21473\begin{savenotes}\sphinxattablestart
21474\centering
21475\begin{tabulary}{\linewidth}[t]{|T|T|}
21476\hline
21477
21478\sphinxAtStartPar
21479\sphinxcode{\sphinxupquote{CKSUMTYPE\_NIST\_SHA}}
21480&
21481\sphinxAtStartPar
21482\sphinxcode{\sphinxupquote{0x0009}}
21483\\
21484\hline
21485\end{tabulary}
21486\par
21487\sphinxattableend\end{savenotes}
21488
21489
21490\subsubsection{CKSUMTYPE\_RSA\_MD4}
21491\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4:cksumtype-rsa-md4}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4:cksumtype-rsa-md4-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4::doc}}\index{CKSUMTYPE\_RSA\_MD4 (built\sphinxhyphen{}in variable)@\spxentry{CKSUMTYPE\_RSA\_MD4}\spxextra{built\sphinxhyphen{}in variable}}
21492
21493\begin{fulllineitems}
21494\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4:CKSUMTYPE_RSA_MD4}}\pysigline{\sphinxbfcode{\sphinxupquote{CKSUMTYPE\_RSA\_MD4}}}
21495\end{fulllineitems}
21496
21497
21498
21499\begin{savenotes}\sphinxattablestart
21500\centering
21501\begin{tabulary}{\linewidth}[t]{|T|T|}
21502\hline
21503
21504\sphinxAtStartPar
21505\sphinxcode{\sphinxupquote{CKSUMTYPE\_RSA\_MD4}}
21506&
21507\sphinxAtStartPar
21508\sphinxcode{\sphinxupquote{0x0002}}
21509\\
21510\hline
21511\end{tabulary}
21512\par
21513\sphinxattableend\end{savenotes}
21514
21515
21516\subsubsection{CKSUMTYPE\_RSA\_MD4\_DES}
21517\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}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4_DES::doc}}\index{CKSUMTYPE\_RSA\_MD4\_DES (built\sphinxhyphen{}in variable)@\spxentry{CKSUMTYPE\_RSA\_MD4\_DES}\spxextra{built\sphinxhyphen{}in variable}}
21518
21519\begin{fulllineitems}
21520\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4_DES:CKSUMTYPE_RSA_MD4_DES}}\pysigline{\sphinxbfcode{\sphinxupquote{CKSUMTYPE\_RSA\_MD4\_DES}}}
21521\end{fulllineitems}
21522
21523
21524
21525\begin{savenotes}\sphinxattablestart
21526\centering
21527\begin{tabulary}{\linewidth}[t]{|T|T|}
21528\hline
21529
21530\sphinxAtStartPar
21531\sphinxcode{\sphinxupquote{CKSUMTYPE\_RSA\_MD4\_DES}}
21532&
21533\sphinxAtStartPar
21534\sphinxcode{\sphinxupquote{0x0003}}
21535\\
21536\hline
21537\end{tabulary}
21538\par
21539\sphinxattableend\end{savenotes}
21540
21541
21542\subsubsection{CKSUMTYPE\_RSA\_MD5}
21543\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5:cksumtype-rsa-md5}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5:cksumtype-rsa-md5-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5::doc}}\index{CKSUMTYPE\_RSA\_MD5 (built\sphinxhyphen{}in variable)@\spxentry{CKSUMTYPE\_RSA\_MD5}\spxextra{built\sphinxhyphen{}in variable}}
21544
21545\begin{fulllineitems}
21546\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5:CKSUMTYPE_RSA_MD5}}\pysigline{\sphinxbfcode{\sphinxupquote{CKSUMTYPE\_RSA\_MD5}}}
21547\end{fulllineitems}
21548
21549
21550
21551\begin{savenotes}\sphinxattablestart
21552\centering
21553\begin{tabulary}{\linewidth}[t]{|T|T|}
21554\hline
21555
21556\sphinxAtStartPar
21557\sphinxcode{\sphinxupquote{CKSUMTYPE\_RSA\_MD5}}
21558&
21559\sphinxAtStartPar
21560\sphinxcode{\sphinxupquote{0x0007}}
21561\\
21562\hline
21563\end{tabulary}
21564\par
21565\sphinxattableend\end{savenotes}
21566
21567
21568\subsubsection{CKSUMTYPE\_RSA\_MD5\_DES}
21569\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5_DES:cksumtype-rsa-md5-des}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5_DES:cksumtype-rsa-md5-des-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5_DES::doc}}\index{CKSUMTYPE\_RSA\_MD5\_DES (built\sphinxhyphen{}in variable)@\spxentry{CKSUMTYPE\_RSA\_MD5\_DES}\spxextra{built\sphinxhyphen{}in variable}}
21570
21571\begin{fulllineitems}
21572\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5_DES:CKSUMTYPE_RSA_MD5_DES}}\pysigline{\sphinxbfcode{\sphinxupquote{CKSUMTYPE\_RSA\_MD5\_DES}}}
21573\end{fulllineitems}
21574
21575
21576
21577\begin{savenotes}\sphinxattablestart
21578\centering
21579\begin{tabulary}{\linewidth}[t]{|T|T|}
21580\hline
21581
21582\sphinxAtStartPar
21583\sphinxcode{\sphinxupquote{CKSUMTYPE\_RSA\_MD5\_DES}}
21584&
21585\sphinxAtStartPar
21586\sphinxcode{\sphinxupquote{0x0008}}
21587\\
21588\hline
21589\end{tabulary}
21590\par
21591\sphinxattableend\end{savenotes}
21592
21593
21594\subsubsection{CKSUMTYPE\_SHA1}
21595\label{\detokenize{appdev/refs/macros/CKSUMTYPE_SHA1:cksumtype-sha1}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_SHA1:cksumtype-sha1-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_SHA1::doc}}\index{CKSUMTYPE\_SHA1 (built\sphinxhyphen{}in variable)@\spxentry{CKSUMTYPE\_SHA1}\spxextra{built\sphinxhyphen{}in variable}}
21596
21597\begin{fulllineitems}
21598\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_SHA1:CKSUMTYPE_SHA1}}\pysigline{\sphinxbfcode{\sphinxupquote{CKSUMTYPE\_SHA1}}}
21599\end{fulllineitems}
21600
21601
21602\sphinxAtStartPar
21603RFC 3961.
21604
21605
21606\begin{savenotes}\sphinxattablestart
21607\centering
21608\begin{tabulary}{\linewidth}[t]{|T|T|}
21609\hline
21610
21611\sphinxAtStartPar
21612\sphinxcode{\sphinxupquote{CKSUMTYPE\_SHA1}}
21613&
21614\sphinxAtStartPar
21615\sphinxcode{\sphinxupquote{0x000e}}
21616\\
21617\hline
21618\end{tabulary}
21619\par
21620\sphinxattableend\end{savenotes}
21621
21622
21623\subsubsection{ENCTYPE\_AES128\_CTS\_HMAC\_SHA1\_96}
21624\label{\detokenize{appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA1_96:enctype-aes128-cts-hmac-sha1-96}}\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}}\index{ENCTYPE\_AES128\_CTS\_HMAC\_SHA1\_96 (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_AES128\_CTS\_HMAC\_SHA1\_96}\spxextra{built\sphinxhyphen{}in variable}}
21625
21626\begin{fulllineitems}
21627\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA1_96:ENCTYPE_AES128_CTS_HMAC_SHA1_96}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_AES128\_CTS\_HMAC\_SHA1\_96}}}
21628\end{fulllineitems}
21629
21630
21631\sphinxAtStartPar
21632RFC 3962.
21633
21634
21635\begin{savenotes}\sphinxattablestart
21636\centering
21637\begin{tabulary}{\linewidth}[t]{|T|T|}
21638\hline
21639
21640\sphinxAtStartPar
21641\sphinxcode{\sphinxupquote{ENCTYPE\_AES128\_CTS\_HMAC\_SHA1\_96}}
21642&
21643\sphinxAtStartPar
21644\sphinxcode{\sphinxupquote{0x0011}}
21645\\
21646\hline
21647\end{tabulary}
21648\par
21649\sphinxattableend\end{savenotes}
21650
21651
21652\subsubsection{ENCTYPE\_AES128\_CTS\_HMAC\_SHA256\_128}
21653\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\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_AES128\_CTS\_HMAC\_SHA256\_128}\spxextra{built\sphinxhyphen{}in variable}}
21654
21655\begin{fulllineitems}
21656\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA256_128:ENCTYPE_AES128_CTS_HMAC_SHA256_128}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_AES128\_CTS\_HMAC\_SHA256\_128}}}
21657\end{fulllineitems}
21658
21659
21660\sphinxAtStartPar
21661RFC 8009.
21662
21663
21664\begin{savenotes}\sphinxattablestart
21665\centering
21666\begin{tabulary}{\linewidth}[t]{|T|T|}
21667\hline
21668
21669\sphinxAtStartPar
21670\sphinxcode{\sphinxupquote{ENCTYPE\_AES128\_CTS\_HMAC\_SHA256\_128}}
21671&
21672\sphinxAtStartPar
21673\sphinxcode{\sphinxupquote{0x0013}}
21674\\
21675\hline
21676\end{tabulary}
21677\par
21678\sphinxattableend\end{savenotes}
21679
21680
21681\subsubsection{ENCTYPE\_AES256\_CTS\_HMAC\_SHA1\_96}
21682\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA1_96:enctype-aes256-cts-hmac-sha1-96}}\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}}\index{ENCTYPE\_AES256\_CTS\_HMAC\_SHA1\_96 (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_AES256\_CTS\_HMAC\_SHA1\_96}\spxextra{built\sphinxhyphen{}in variable}}
21683
21684\begin{fulllineitems}
21685\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA1_96:ENCTYPE_AES256_CTS_HMAC_SHA1_96}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_AES256\_CTS\_HMAC\_SHA1\_96}}}
21686\end{fulllineitems}
21687
21688
21689\sphinxAtStartPar
21690RFC 3962.
21691
21692
21693\begin{savenotes}\sphinxattablestart
21694\centering
21695\begin{tabulary}{\linewidth}[t]{|T|T|}
21696\hline
21697
21698\sphinxAtStartPar
21699\sphinxcode{\sphinxupquote{ENCTYPE\_AES256\_CTS\_HMAC\_SHA1\_96}}
21700&
21701\sphinxAtStartPar
21702\sphinxcode{\sphinxupquote{0x0012}}
21703\\
21704\hline
21705\end{tabulary}
21706\par
21707\sphinxattableend\end{savenotes}
21708
21709
21710\subsubsection{ENCTYPE\_AES256\_CTS\_HMAC\_SHA384\_192}
21711\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:enctype-aes256-cts-hmac-sha384-192-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA384_192::doc}}\index{ENCTYPE\_AES256\_CTS\_HMAC\_SHA384\_192 (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_AES256\_CTS\_HMAC\_SHA384\_192}\spxextra{built\sphinxhyphen{}in variable}}
21712
21713\begin{fulllineitems}
21714\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA384_192:ENCTYPE_AES256_CTS_HMAC_SHA384_192}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_AES256\_CTS\_HMAC\_SHA384\_192}}}
21715\end{fulllineitems}
21716
21717
21718\sphinxAtStartPar
21719RFC 8009.
21720
21721
21722\begin{savenotes}\sphinxattablestart
21723\centering
21724\begin{tabulary}{\linewidth}[t]{|T|T|}
21725\hline
21726
21727\sphinxAtStartPar
21728\sphinxcode{\sphinxupquote{ENCTYPE\_AES256\_CTS\_HMAC\_SHA384\_192}}
21729&
21730\sphinxAtStartPar
21731\sphinxcode{\sphinxupquote{0x0014}}
21732\\
21733\hline
21734\end{tabulary}
21735\par
21736\sphinxattableend\end{savenotes}
21737
21738
21739\subsubsection{ENCTYPE\_ARCFOUR\_HMAC}
21740\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\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_ARCFOUR\_HMAC}\spxextra{built\sphinxhyphen{}in variable}}
21741
21742\begin{fulllineitems}
21743\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC:ENCTYPE_ARCFOUR_HMAC}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_ARCFOUR\_HMAC}}}
21744\end{fulllineitems}
21745
21746
21747\sphinxAtStartPar
21748RFC 4757.
21749
21750
21751\begin{savenotes}\sphinxattablestart
21752\centering
21753\begin{tabulary}{\linewidth}[t]{|T|T|}
21754\hline
21755
21756\sphinxAtStartPar
21757\sphinxcode{\sphinxupquote{ENCTYPE\_ARCFOUR\_HMAC}}
21758&
21759\sphinxAtStartPar
21760\sphinxcode{\sphinxupquote{0x0017}}
21761\\
21762\hline
21763\end{tabulary}
21764\par
21765\sphinxattableend\end{savenotes}
21766
21767
21768\subsubsection{ENCTYPE\_ARCFOUR\_HMAC\_EXP}
21769\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC_EXP:enctype-arcfour-hmac-exp}}\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC_EXP:enctype-arcfour-hmac-exp-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC_EXP::doc}}\index{ENCTYPE\_ARCFOUR\_HMAC\_EXP (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_ARCFOUR\_HMAC\_EXP}\spxextra{built\sphinxhyphen{}in variable}}
21770
21771\begin{fulllineitems}
21772\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC_EXP:ENCTYPE_ARCFOUR_HMAC_EXP}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_ARCFOUR\_HMAC\_EXP}}}
21773\end{fulllineitems}
21774
21775
21776\sphinxAtStartPar
21777RFC 4757.
21778
21779
21780\begin{savenotes}\sphinxattablestart
21781\centering
21782\begin{tabulary}{\linewidth}[t]{|T|T|}
21783\hline
21784
21785\sphinxAtStartPar
21786\sphinxcode{\sphinxupquote{ENCTYPE\_ARCFOUR\_HMAC\_EXP}}
21787&
21788\sphinxAtStartPar
21789\sphinxcode{\sphinxupquote{0x0018}}
21790\\
21791\hline
21792\end{tabulary}
21793\par
21794\sphinxattableend\end{savenotes}
21795
21796
21797\subsubsection{ENCTYPE\_CAMELLIA128\_CTS\_CMAC}
21798\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA128_CTS_CMAC:enctype-camellia128-cts-cmac}}\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA128_CTS_CMAC:enctype-camellia128-cts-cmac-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA128_CTS_CMAC::doc}}\index{ENCTYPE\_CAMELLIA128\_CTS\_CMAC (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_CAMELLIA128\_CTS\_CMAC}\spxextra{built\sphinxhyphen{}in variable}}
21799
21800\begin{fulllineitems}
21801\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA128_CTS_CMAC:ENCTYPE_CAMELLIA128_CTS_CMAC}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_CAMELLIA128\_CTS\_CMAC}}}
21802\end{fulllineitems}
21803
21804
21805\sphinxAtStartPar
21806RFC 6803.
21807
21808
21809\begin{savenotes}\sphinxattablestart
21810\centering
21811\begin{tabulary}{\linewidth}[t]{|T|T|}
21812\hline
21813
21814\sphinxAtStartPar
21815\sphinxcode{\sphinxupquote{ENCTYPE\_CAMELLIA128\_CTS\_CMAC}}
21816&
21817\sphinxAtStartPar
21818\sphinxcode{\sphinxupquote{0x0019}}
21819\\
21820\hline
21821\end{tabulary}
21822\par
21823\sphinxattableend\end{savenotes}
21824
21825
21826\subsubsection{ENCTYPE\_CAMELLIA256\_CTS\_CMAC}
21827\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA256_CTS_CMAC:enctype-camellia256-cts-cmac}}\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA256_CTS_CMAC:enctype-camellia256-cts-cmac-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA256_CTS_CMAC::doc}}\index{ENCTYPE\_CAMELLIA256\_CTS\_CMAC (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_CAMELLIA256\_CTS\_CMAC}\spxextra{built\sphinxhyphen{}in variable}}
21828
21829\begin{fulllineitems}
21830\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA256_CTS_CMAC:ENCTYPE_CAMELLIA256_CTS_CMAC}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_CAMELLIA256\_CTS\_CMAC}}}
21831\end{fulllineitems}
21832
21833
21834\sphinxAtStartPar
21835RFC 6803.
21836
21837
21838\begin{savenotes}\sphinxattablestart
21839\centering
21840\begin{tabulary}{\linewidth}[t]{|T|T|}
21841\hline
21842
21843\sphinxAtStartPar
21844\sphinxcode{\sphinxupquote{ENCTYPE\_CAMELLIA256\_CTS\_CMAC}}
21845&
21846\sphinxAtStartPar
21847\sphinxcode{\sphinxupquote{0x001a}}
21848\\
21849\hline
21850\end{tabulary}
21851\par
21852\sphinxattableend\end{savenotes}
21853
21854
21855\subsubsection{ENCTYPE\_DES3\_CBC\_ENV}
21856\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}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_ENV::doc}}\index{ENCTYPE\_DES3\_CBC\_ENV (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_DES3\_CBC\_ENV}\spxextra{built\sphinxhyphen{}in variable}}
21857
21858\begin{fulllineitems}
21859\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_ENV:ENCTYPE_DES3_CBC_ENV}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_DES3\_CBC\_ENV}}}
21860\end{fulllineitems}
21861
21862
21863\sphinxAtStartPar
21864DES\sphinxhyphen{}3 cbc mode, CMS enveloped data.
21865
21866
21867\begin{savenotes}\sphinxattablestart
21868\centering
21869\begin{tabulary}{\linewidth}[t]{|T|T|}
21870\hline
21871
21872\sphinxAtStartPar
21873\sphinxcode{\sphinxupquote{ENCTYPE\_DES3\_CBC\_ENV}}
21874&
21875\sphinxAtStartPar
21876\sphinxcode{\sphinxupquote{0x000f}}
21877\\
21878\hline
21879\end{tabulary}
21880\par
21881\sphinxattableend\end{savenotes}
21882
21883
21884\subsubsection{ENCTYPE\_DES3\_CBC\_RAW}
21885\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_RAW:enctype-des3-cbc-raw}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_RAW:enctype-des3-cbc-raw-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_RAW::doc}}\index{ENCTYPE\_DES3\_CBC\_RAW (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_DES3\_CBC\_RAW}\spxextra{built\sphinxhyphen{}in variable}}
21886
21887\begin{fulllineitems}
21888\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_RAW:ENCTYPE_DES3_CBC_RAW}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_DES3\_CBC\_RAW}}}
21889\end{fulllineitems}
21890
21891
21892
21893\begin{savenotes}\sphinxattablestart
21894\centering
21895\begin{tabulary}{\linewidth}[t]{|T|T|}
21896\hline
21897
21898\sphinxAtStartPar
21899\sphinxcode{\sphinxupquote{ENCTYPE\_DES3\_CBC\_RAW}}
21900&
21901\sphinxAtStartPar
21902\sphinxcode{\sphinxupquote{0x0006}}
21903\\
21904\hline
21905\end{tabulary}
21906\par
21907\sphinxattableend\end{savenotes}
21908
21909
21910\subsubsection{ENCTYPE\_DES3\_CBC\_SHA}
21911\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA:enctype-des3-cbc-sha}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA:enctype-des3-cbc-sha-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA::doc}}\index{ENCTYPE\_DES3\_CBC\_SHA (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_DES3\_CBC\_SHA}\spxextra{built\sphinxhyphen{}in variable}}
21912
21913\begin{fulllineitems}
21914\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA:ENCTYPE_DES3_CBC_SHA}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_DES3\_CBC\_SHA}}}
21915\end{fulllineitems}
21916
21917
21918
21919\begin{savenotes}\sphinxattablestart
21920\centering
21921\begin{tabulary}{\linewidth}[t]{|T|T|}
21922\hline
21923
21924\sphinxAtStartPar
21925\sphinxcode{\sphinxupquote{ENCTYPE\_DES3\_CBC\_SHA}}
21926&
21927\sphinxAtStartPar
21928\sphinxcode{\sphinxupquote{0x0005}}
21929\\
21930\hline
21931\end{tabulary}
21932\par
21933\sphinxattableend\end{savenotes}
21934
21935
21936\subsubsection{ENCTYPE\_DES3\_CBC\_SHA1}
21937\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}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA1::doc}}\index{ENCTYPE\_DES3\_CBC\_SHA1 (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_DES3\_CBC\_SHA1}\spxextra{built\sphinxhyphen{}in variable}}
21938
21939\begin{fulllineitems}
21940\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA1:ENCTYPE_DES3_CBC_SHA1}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_DES3\_CBC\_SHA1}}}
21941\end{fulllineitems}
21942
21943
21944
21945\begin{savenotes}\sphinxattablestart
21946\centering
21947\begin{tabulary}{\linewidth}[t]{|T|T|}
21948\hline
21949
21950\sphinxAtStartPar
21951\sphinxcode{\sphinxupquote{ENCTYPE\_DES3\_CBC\_SHA1}}
21952&
21953\sphinxAtStartPar
21954\sphinxcode{\sphinxupquote{0x0010}}
21955\\
21956\hline
21957\end{tabulary}
21958\par
21959\sphinxattableend\end{savenotes}
21960
21961
21962\subsubsection{ENCTYPE\_DES\_CBC\_CRC}
21963\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_CRC:enctype-des-cbc-crc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_CRC:enctype-des-cbc-crc-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_CRC::doc}}\index{ENCTYPE\_DES\_CBC\_CRC (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_DES\_CBC\_CRC}\spxextra{built\sphinxhyphen{}in variable}}
21964
21965\begin{fulllineitems}
21966\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_CRC:ENCTYPE_DES_CBC_CRC}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_DES\_CBC\_CRC}}}
21967\end{fulllineitems}
21968
21969
21970
21971\begin{savenotes}\sphinxattablestart
21972\centering
21973\begin{tabulary}{\linewidth}[t]{|T|T|}
21974\hline
21975
21976\sphinxAtStartPar
21977\sphinxcode{\sphinxupquote{ENCTYPE\_DES\_CBC\_CRC}}
21978&
21979\sphinxAtStartPar
21980\sphinxcode{\sphinxupquote{0x0001}}
21981\\
21982\hline
21983\end{tabulary}
21984\par
21985\sphinxattableend\end{savenotes}
21986
21987
21988\subsubsection{ENCTYPE\_DES\_CBC\_MD4}
21989\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD4:enctype-des-cbc-md4}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD4:enctype-des-cbc-md4-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD4::doc}}\index{ENCTYPE\_DES\_CBC\_MD4 (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_DES\_CBC\_MD4}\spxextra{built\sphinxhyphen{}in variable}}
21990
21991\begin{fulllineitems}
21992\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD4:ENCTYPE_DES_CBC_MD4}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_DES\_CBC\_MD4}}}
21993\end{fulllineitems}
21994
21995
21996
21997\begin{savenotes}\sphinxattablestart
21998\centering
21999\begin{tabulary}{\linewidth}[t]{|T|T|}
22000\hline
22001
22002\sphinxAtStartPar
22003\sphinxcode{\sphinxupquote{ENCTYPE\_DES\_CBC\_MD4}}
22004&
22005\sphinxAtStartPar
22006\sphinxcode{\sphinxupquote{0x0002}}
22007\\
22008\hline
22009\end{tabulary}
22010\par
22011\sphinxattableend\end{savenotes}
22012
22013
22014\subsubsection{ENCTYPE\_DES\_CBC\_MD5}
22015\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD5:enctype-des-cbc-md5}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD5:enctype-des-cbc-md5-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD5::doc}}\index{ENCTYPE\_DES\_CBC\_MD5 (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_DES\_CBC\_MD5}\spxextra{built\sphinxhyphen{}in variable}}
22016
22017\begin{fulllineitems}
22018\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD5:ENCTYPE_DES_CBC_MD5}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_DES\_CBC\_MD5}}}
22019\end{fulllineitems}
22020
22021
22022
22023\begin{savenotes}\sphinxattablestart
22024\centering
22025\begin{tabulary}{\linewidth}[t]{|T|T|}
22026\hline
22027
22028\sphinxAtStartPar
22029\sphinxcode{\sphinxupquote{ENCTYPE\_DES\_CBC\_MD5}}
22030&
22031\sphinxAtStartPar
22032\sphinxcode{\sphinxupquote{0x0003}}
22033\\
22034\hline
22035\end{tabulary}
22036\par
22037\sphinxattableend\end{savenotes}
22038
22039
22040\subsubsection{ENCTYPE\_DES\_CBC\_RAW}
22041\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_RAW:enctype-des-cbc-raw}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_RAW:enctype-des-cbc-raw-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_RAW::doc}}\index{ENCTYPE\_DES\_CBC\_RAW (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_DES\_CBC\_RAW}\spxextra{built\sphinxhyphen{}in variable}}
22042
22043\begin{fulllineitems}
22044\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_RAW:ENCTYPE_DES_CBC_RAW}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_DES\_CBC\_RAW}}}
22045\end{fulllineitems}
22046
22047
22048
22049\begin{savenotes}\sphinxattablestart
22050\centering
22051\begin{tabulary}{\linewidth}[t]{|T|T|}
22052\hline
22053
22054\sphinxAtStartPar
22055\sphinxcode{\sphinxupquote{ENCTYPE\_DES\_CBC\_RAW}}
22056&
22057\sphinxAtStartPar
22058\sphinxcode{\sphinxupquote{0x0004}}
22059\\
22060\hline
22061\end{tabulary}
22062\par
22063\sphinxattableend\end{savenotes}
22064
22065
22066\subsubsection{ENCTYPE\_DES\_HMAC\_SHA1}
22067\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_HMAC_SHA1:enctype-des-hmac-sha1}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_HMAC_SHA1:enctype-des-hmac-sha1-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_HMAC_SHA1::doc}}\index{ENCTYPE\_DES\_HMAC\_SHA1 (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_DES\_HMAC\_SHA1}\spxextra{built\sphinxhyphen{}in variable}}
22068
22069\begin{fulllineitems}
22070\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_HMAC_SHA1:ENCTYPE_DES_HMAC_SHA1}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_DES\_HMAC\_SHA1}}}
22071\end{fulllineitems}
22072
22073
22074
22075\begin{savenotes}\sphinxattablestart
22076\centering
22077\begin{tabulary}{\linewidth}[t]{|T|T|}
22078\hline
22079
22080\sphinxAtStartPar
22081\sphinxcode{\sphinxupquote{ENCTYPE\_DES\_HMAC\_SHA1}}
22082&
22083\sphinxAtStartPar
22084\sphinxcode{\sphinxupquote{0x0008}}
22085\\
22086\hline
22087\end{tabulary}
22088\par
22089\sphinxattableend\end{savenotes}
22090
22091
22092\subsubsection{ENCTYPE\_DSA\_SHA1\_CMS}
22093\label{\detokenize{appdev/refs/macros/ENCTYPE_DSA_SHA1_CMS:enctype-dsa-sha1-cms}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DSA_SHA1_CMS:enctype-dsa-sha1-cms-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DSA_SHA1_CMS::doc}}\index{ENCTYPE\_DSA\_SHA1\_CMS (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_DSA\_SHA1\_CMS}\spxextra{built\sphinxhyphen{}in variable}}
22094
22095\begin{fulllineitems}
22096\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DSA_SHA1_CMS:ENCTYPE_DSA_SHA1_CMS}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_DSA\_SHA1\_CMS}}}
22097\end{fulllineitems}
22098
22099
22100\sphinxAtStartPar
22101DSA with SHA1, CMS signature.
22102
22103
22104\begin{savenotes}\sphinxattablestart
22105\centering
22106\begin{tabulary}{\linewidth}[t]{|T|T|}
22107\hline
22108
22109\sphinxAtStartPar
22110\sphinxcode{\sphinxupquote{ENCTYPE\_DSA\_SHA1\_CMS}}
22111&
22112\sphinxAtStartPar
22113\sphinxcode{\sphinxupquote{0x0009}}
22114\\
22115\hline
22116\end{tabulary}
22117\par
22118\sphinxattableend\end{savenotes}
22119
22120
22121\subsubsection{ENCTYPE\_MD5\_RSA\_CMS}
22122\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\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_MD5\_RSA\_CMS}\spxextra{built\sphinxhyphen{}in variable}}
22123
22124\begin{fulllineitems}
22125\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_MD5_RSA_CMS:ENCTYPE_MD5_RSA_CMS}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_MD5\_RSA\_CMS}}}
22126\end{fulllineitems}
22127
22128
22129\sphinxAtStartPar
22130MD5 with RSA, CMS signature.
22131
22132
22133\begin{savenotes}\sphinxattablestart
22134\centering
22135\begin{tabulary}{\linewidth}[t]{|T|T|}
22136\hline
22137
22138\sphinxAtStartPar
22139\sphinxcode{\sphinxupquote{ENCTYPE\_MD5\_RSA\_CMS}}
22140&
22141\sphinxAtStartPar
22142\sphinxcode{\sphinxupquote{0x000a}}
22143\\
22144\hline
22145\end{tabulary}
22146\par
22147\sphinxattableend\end{savenotes}
22148
22149
22150\subsubsection{ENCTYPE\_NULL}
22151\label{\detokenize{appdev/refs/macros/ENCTYPE_NULL:enctype-null}}\label{\detokenize{appdev/refs/macros/ENCTYPE_NULL:enctype-null-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_NULL::doc}}\index{ENCTYPE\_NULL (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_NULL}\spxextra{built\sphinxhyphen{}in variable}}
22152
22153\begin{fulllineitems}
22154\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_NULL:ENCTYPE_NULL}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_NULL}}}
22155\end{fulllineitems}
22156
22157
22158
22159\begin{savenotes}\sphinxattablestart
22160\centering
22161\begin{tabulary}{\linewidth}[t]{|T|T|}
22162\hline
22163
22164\sphinxAtStartPar
22165\sphinxcode{\sphinxupquote{ENCTYPE\_NULL}}
22166&
22167\sphinxAtStartPar
22168\sphinxcode{\sphinxupquote{0x0000}}
22169\\
22170\hline
22171\end{tabulary}
22172\par
22173\sphinxattableend\end{savenotes}
22174
22175
22176\subsubsection{ENCTYPE\_RC2\_CBC\_ENV}
22177\label{\detokenize{appdev/refs/macros/ENCTYPE_RC2_CBC_ENV:enctype-rc2-cbc-env}}\label{\detokenize{appdev/refs/macros/ENCTYPE_RC2_CBC_ENV:enctype-rc2-cbc-env-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_RC2_CBC_ENV::doc}}\index{ENCTYPE\_RC2\_CBC\_ENV (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_RC2\_CBC\_ENV}\spxextra{built\sphinxhyphen{}in variable}}
22178
22179\begin{fulllineitems}
22180\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_RC2_CBC_ENV:ENCTYPE_RC2_CBC_ENV}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_RC2\_CBC\_ENV}}}
22181\end{fulllineitems}
22182
22183
22184\sphinxAtStartPar
22185RC2 cbc mode, CMS enveloped data.
22186
22187
22188\begin{savenotes}\sphinxattablestart
22189\centering
22190\begin{tabulary}{\linewidth}[t]{|T|T|}
22191\hline
22192
22193\sphinxAtStartPar
22194\sphinxcode{\sphinxupquote{ENCTYPE\_RC2\_CBC\_ENV}}
22195&
22196\sphinxAtStartPar
22197\sphinxcode{\sphinxupquote{0x000c}}
22198\\
22199\hline
22200\end{tabulary}
22201\par
22202\sphinxattableend\end{savenotes}
22203
22204
22205\subsubsection{ENCTYPE\_RSA\_ENV}
22206\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ENV:enctype-rsa-env}}\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ENV:enctype-rsa-env-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ENV::doc}}\index{ENCTYPE\_RSA\_ENV (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_RSA\_ENV}\spxextra{built\sphinxhyphen{}in variable}}
22207
22208\begin{fulllineitems}
22209\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ENV:ENCTYPE_RSA_ENV}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_RSA\_ENV}}}
22210\end{fulllineitems}
22211
22212
22213\sphinxAtStartPar
22214RSA encryption, CMS enveloped data.
22215
22216
22217\begin{savenotes}\sphinxattablestart
22218\centering
22219\begin{tabulary}{\linewidth}[t]{|T|T|}
22220\hline
22221
22222\sphinxAtStartPar
22223\sphinxcode{\sphinxupquote{ENCTYPE\_RSA\_ENV}}
22224&
22225\sphinxAtStartPar
22226\sphinxcode{\sphinxupquote{0x000d}}
22227\\
22228\hline
22229\end{tabulary}
22230\par
22231\sphinxattableend\end{savenotes}
22232
22233
22234\subsubsection{ENCTYPE\_RSA\_ES\_OAEP\_ENV}
22235\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}}\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ES_OAEP_ENV::doc}}\index{ENCTYPE\_RSA\_ES\_OAEP\_ENV (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_RSA\_ES\_OAEP\_ENV}\spxextra{built\sphinxhyphen{}in variable}}
22236
22237\begin{fulllineitems}
22238\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ES_OAEP_ENV:ENCTYPE_RSA_ES_OAEP_ENV}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_RSA\_ES\_OAEP\_ENV}}}
22239\end{fulllineitems}
22240
22241
22242\sphinxAtStartPar
22243RSA w/OEAP encryption, CMS enveloped data.
22244
22245
22246\begin{savenotes}\sphinxattablestart
22247\centering
22248\begin{tabulary}{\linewidth}[t]{|T|T|}
22249\hline
22250
22251\sphinxAtStartPar
22252\sphinxcode{\sphinxupquote{ENCTYPE\_RSA\_ES\_OAEP\_ENV}}
22253&
22254\sphinxAtStartPar
22255\sphinxcode{\sphinxupquote{0x000e}}
22256\\
22257\hline
22258\end{tabulary}
22259\par
22260\sphinxattableend\end{savenotes}
22261
22262
22263\subsubsection{ENCTYPE\_SHA1\_RSA\_CMS}
22264\label{\detokenize{appdev/refs/macros/ENCTYPE_SHA1_RSA_CMS:enctype-sha1-rsa-cms}}\label{\detokenize{appdev/refs/macros/ENCTYPE_SHA1_RSA_CMS:enctype-sha1-rsa-cms-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_SHA1_RSA_CMS::doc}}\index{ENCTYPE\_SHA1\_RSA\_CMS (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_SHA1\_RSA\_CMS}\spxextra{built\sphinxhyphen{}in variable}}
22265
22266\begin{fulllineitems}
22267\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_SHA1_RSA_CMS:ENCTYPE_SHA1_RSA_CMS}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_SHA1\_RSA\_CMS}}}
22268\end{fulllineitems}
22269
22270
22271\sphinxAtStartPar
22272SHA1 with RSA, CMS signature.
22273
22274
22275\begin{savenotes}\sphinxattablestart
22276\centering
22277\begin{tabulary}{\linewidth}[t]{|T|T|}
22278\hline
22279
22280\sphinxAtStartPar
22281\sphinxcode{\sphinxupquote{ENCTYPE\_SHA1\_RSA\_CMS}}
22282&
22283\sphinxAtStartPar
22284\sphinxcode{\sphinxupquote{0x000b}}
22285\\
22286\hline
22287\end{tabulary}
22288\par
22289\sphinxattableend\end{savenotes}
22290
22291
22292\subsubsection{ENCTYPE\_UNKNOWN}
22293\label{\detokenize{appdev/refs/macros/ENCTYPE_UNKNOWN:enctype-unknown}}\label{\detokenize{appdev/refs/macros/ENCTYPE_UNKNOWN:enctype-unknown-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_UNKNOWN::doc}}\index{ENCTYPE\_UNKNOWN (built\sphinxhyphen{}in variable)@\spxentry{ENCTYPE\_UNKNOWN}\spxextra{built\sphinxhyphen{}in variable}}
22294
22295\begin{fulllineitems}
22296\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_UNKNOWN:ENCTYPE_UNKNOWN}}\pysigline{\sphinxbfcode{\sphinxupquote{ENCTYPE\_UNKNOWN}}}
22297\end{fulllineitems}
22298
22299
22300
22301\begin{savenotes}\sphinxattablestart
22302\centering
22303\begin{tabulary}{\linewidth}[t]{|T|T|}
22304\hline
22305
22306\sphinxAtStartPar
22307\sphinxcode{\sphinxupquote{ENCTYPE\_UNKNOWN}}
22308&
22309\sphinxAtStartPar
22310\sphinxcode{\sphinxupquote{0x01ff}}
22311\\
22312\hline
22313\end{tabulary}
22314\par
22315\sphinxattableend\end{savenotes}
22316
22317
22318\subsubsection{KDC\_OPT\_ALLOW\_POSTDATE}
22319\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\sphinxhyphen{}in variable)@\spxentry{KDC\_OPT\_ALLOW\_POSTDATE}\spxextra{built\sphinxhyphen{}in variable}}
22320
22321\begin{fulllineitems}
22322\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_ALLOW_POSTDATE:KDC_OPT_ALLOW_POSTDATE}}\pysigline{\sphinxbfcode{\sphinxupquote{KDC\_OPT\_ALLOW\_POSTDATE}}}
22323\end{fulllineitems}
22324
22325
22326
22327\begin{savenotes}\sphinxattablestart
22328\centering
22329\begin{tabulary}{\linewidth}[t]{|T|T|}
22330\hline
22331
22332\sphinxAtStartPar
22333\sphinxcode{\sphinxupquote{KDC\_OPT\_ALLOW\_POSTDATE}}
22334&
22335\sphinxAtStartPar
22336\sphinxcode{\sphinxupquote{0x04000000}}
22337\\
22338\hline
22339\end{tabulary}
22340\par
22341\sphinxattableend\end{savenotes}
22342
22343
22344\subsubsection{KDC\_OPT\_CANONICALIZE}
22345\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\sphinxhyphen{}in variable)@\spxentry{KDC\_OPT\_CANONICALIZE}\spxextra{built\sphinxhyphen{}in variable}}
22346
22347\begin{fulllineitems}
22348\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_CANONICALIZE:KDC_OPT_CANONICALIZE}}\pysigline{\sphinxbfcode{\sphinxupquote{KDC\_OPT\_CANONICALIZE}}}
22349\end{fulllineitems}
22350
22351
22352
22353\begin{savenotes}\sphinxattablestart
22354\centering
22355\begin{tabulary}{\linewidth}[t]{|T|T|}
22356\hline
22357
22358\sphinxAtStartPar
22359\sphinxcode{\sphinxupquote{KDC\_OPT\_CANONICALIZE}}
22360&
22361\sphinxAtStartPar
22362\sphinxcode{\sphinxupquote{0x00010000}}
22363\\
22364\hline
22365\end{tabulary}
22366\par
22367\sphinxattableend\end{savenotes}
22368
22369
22370\subsubsection{KDC\_OPT\_CNAME\_IN\_ADDL\_TKT}
22371\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:kdc-opt-cname-in-addl-tkt-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_CNAME_IN_ADDL_TKT::doc}}\index{KDC\_OPT\_CNAME\_IN\_ADDL\_TKT (built\sphinxhyphen{}in variable)@\spxentry{KDC\_OPT\_CNAME\_IN\_ADDL\_TKT}\spxextra{built\sphinxhyphen{}in variable}}
22372
22373\begin{fulllineitems}
22374\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_CNAME_IN_ADDL_TKT:KDC_OPT_CNAME_IN_ADDL_TKT}}\pysigline{\sphinxbfcode{\sphinxupquote{KDC\_OPT\_CNAME\_IN\_ADDL\_TKT}}}
22375\end{fulllineitems}
22376
22377
22378
22379\begin{savenotes}\sphinxattablestart
22380\centering
22381\begin{tabulary}{\linewidth}[t]{|T|T|}
22382\hline
22383
22384\sphinxAtStartPar
22385\sphinxcode{\sphinxupquote{KDC\_OPT\_CNAME\_IN\_ADDL\_TKT}}
22386&
22387\sphinxAtStartPar
22388\sphinxcode{\sphinxupquote{0x00020000}}
22389\\
22390\hline
22391\end{tabulary}
22392\par
22393\sphinxattableend\end{savenotes}
22394
22395
22396\subsubsection{KDC\_OPT\_DISABLE\_TRANSITED\_CHECK}
22397\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:kdc-opt-disable-transited-check-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_DISABLE_TRANSITED_CHECK::doc}}\index{KDC\_OPT\_DISABLE\_TRANSITED\_CHECK (built\sphinxhyphen{}in variable)@\spxentry{KDC\_OPT\_DISABLE\_TRANSITED\_CHECK}\spxextra{built\sphinxhyphen{}in variable}}
22398
22399\begin{fulllineitems}
22400\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_DISABLE_TRANSITED_CHECK:KDC_OPT_DISABLE_TRANSITED_CHECK}}\pysigline{\sphinxbfcode{\sphinxupquote{KDC\_OPT\_DISABLE\_TRANSITED\_CHECK}}}
22401\end{fulllineitems}
22402
22403
22404
22405\begin{savenotes}\sphinxattablestart
22406\centering
22407\begin{tabulary}{\linewidth}[t]{|T|T|}
22408\hline
22409
22410\sphinxAtStartPar
22411\sphinxcode{\sphinxupquote{KDC\_OPT\_DISABLE\_TRANSITED\_CHECK}}
22412&
22413\sphinxAtStartPar
22414\sphinxcode{\sphinxupquote{0x00000020}}
22415\\
22416\hline
22417\end{tabulary}
22418\par
22419\sphinxattableend\end{savenotes}
22420
22421
22422\subsubsection{KDC\_OPT\_ENC\_TKT\_IN\_SKEY}
22423\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:kdc-opt-enc-tkt-in-skey-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_ENC_TKT_IN_SKEY::doc}}\index{KDC\_OPT\_ENC\_TKT\_IN\_SKEY (built\sphinxhyphen{}in variable)@\spxentry{KDC\_OPT\_ENC\_TKT\_IN\_SKEY}\spxextra{built\sphinxhyphen{}in variable}}
22424
22425\begin{fulllineitems}
22426\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_ENC_TKT_IN_SKEY:KDC_OPT_ENC_TKT_IN_SKEY}}\pysigline{\sphinxbfcode{\sphinxupquote{KDC\_OPT\_ENC\_TKT\_IN\_SKEY}}}
22427\end{fulllineitems}
22428
22429
22430
22431\begin{savenotes}\sphinxattablestart
22432\centering
22433\begin{tabulary}{\linewidth}[t]{|T|T|}
22434\hline
22435
22436\sphinxAtStartPar
22437\sphinxcode{\sphinxupquote{KDC\_OPT\_ENC\_TKT\_IN\_SKEY}}
22438&
22439\sphinxAtStartPar
22440\sphinxcode{\sphinxupquote{0x00000008}}
22441\\
22442\hline
22443\end{tabulary}
22444\par
22445\sphinxattableend\end{savenotes}
22446
22447
22448\subsubsection{KDC\_OPT\_FORWARDABLE}
22449\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDABLE:kdc-opt-forwardable}}\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDABLE:kdc-opt-forwardable-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDABLE::doc}}\index{KDC\_OPT\_FORWARDABLE (built\sphinxhyphen{}in variable)@\spxentry{KDC\_OPT\_FORWARDABLE}\spxextra{built\sphinxhyphen{}in variable}}
22450
22451\begin{fulllineitems}
22452\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDABLE:KDC_OPT_FORWARDABLE}}\pysigline{\sphinxbfcode{\sphinxupquote{KDC\_OPT\_FORWARDABLE}}}
22453\end{fulllineitems}
22454
22455
22456
22457\begin{savenotes}\sphinxattablestart
22458\centering
22459\begin{tabulary}{\linewidth}[t]{|T|T|}
22460\hline
22461
22462\sphinxAtStartPar
22463\sphinxcode{\sphinxupquote{KDC\_OPT\_FORWARDABLE}}
22464&
22465\sphinxAtStartPar
22466\sphinxcode{\sphinxupquote{0x40000000}}
22467\\
22468\hline
22469\end{tabulary}
22470\par
22471\sphinxattableend\end{savenotes}
22472
22473
22474\subsubsection{KDC\_OPT\_FORWARDED}
22475\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDED:kdc-opt-forwarded}}\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDED:kdc-opt-forwarded-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDED::doc}}\index{KDC\_OPT\_FORWARDED (built\sphinxhyphen{}in variable)@\spxentry{KDC\_OPT\_FORWARDED}\spxextra{built\sphinxhyphen{}in variable}}
22476
22477\begin{fulllineitems}
22478\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDED:KDC_OPT_FORWARDED}}\pysigline{\sphinxbfcode{\sphinxupquote{KDC\_OPT\_FORWARDED}}}
22479\end{fulllineitems}
22480
22481
22482
22483\begin{savenotes}\sphinxattablestart
22484\centering
22485\begin{tabulary}{\linewidth}[t]{|T|T|}
22486\hline
22487
22488\sphinxAtStartPar
22489\sphinxcode{\sphinxupquote{KDC\_OPT\_FORWARDED}}
22490&
22491\sphinxAtStartPar
22492\sphinxcode{\sphinxupquote{0x20000000}}
22493\\
22494\hline
22495\end{tabulary}
22496\par
22497\sphinxattableend\end{savenotes}
22498
22499
22500\subsubsection{KDC\_OPT\_POSTDATED}
22501\label{\detokenize{appdev/refs/macros/KDC_OPT_POSTDATED:kdc-opt-postdated}}\label{\detokenize{appdev/refs/macros/KDC_OPT_POSTDATED:kdc-opt-postdated-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_POSTDATED::doc}}\index{KDC\_OPT\_POSTDATED (built\sphinxhyphen{}in variable)@\spxentry{KDC\_OPT\_POSTDATED}\spxextra{built\sphinxhyphen{}in variable}}
22502
22503\begin{fulllineitems}
22504\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_POSTDATED:KDC_OPT_POSTDATED}}\pysigline{\sphinxbfcode{\sphinxupquote{KDC\_OPT\_POSTDATED}}}
22505\end{fulllineitems}
22506
22507
22508
22509\begin{savenotes}\sphinxattablestart
22510\centering
22511\begin{tabulary}{\linewidth}[t]{|T|T|}
22512\hline
22513
22514\sphinxAtStartPar
22515\sphinxcode{\sphinxupquote{KDC\_OPT\_POSTDATED}}
22516&
22517\sphinxAtStartPar
22518\sphinxcode{\sphinxupquote{0x02000000}}
22519\\
22520\hline
22521\end{tabulary}
22522\par
22523\sphinxattableend\end{savenotes}
22524
22525
22526\subsubsection{KDC\_OPT\_PROXIABLE}
22527\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXIABLE:kdc-opt-proxiable}}\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXIABLE:kdc-opt-proxiable-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXIABLE::doc}}\index{KDC\_OPT\_PROXIABLE (built\sphinxhyphen{}in variable)@\spxentry{KDC\_OPT\_PROXIABLE}\spxextra{built\sphinxhyphen{}in variable}}
22528
22529\begin{fulllineitems}
22530\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXIABLE:KDC_OPT_PROXIABLE}}\pysigline{\sphinxbfcode{\sphinxupquote{KDC\_OPT\_PROXIABLE}}}
22531\end{fulllineitems}
22532
22533
22534
22535\begin{savenotes}\sphinxattablestart
22536\centering
22537\begin{tabulary}{\linewidth}[t]{|T|T|}
22538\hline
22539
22540\sphinxAtStartPar
22541\sphinxcode{\sphinxupquote{KDC\_OPT\_PROXIABLE}}
22542&
22543\sphinxAtStartPar
22544\sphinxcode{\sphinxupquote{0x10000000}}
22545\\
22546\hline
22547\end{tabulary}
22548\par
22549\sphinxattableend\end{savenotes}
22550
22551
22552\subsubsection{KDC\_OPT\_PROXY}
22553\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXY:kdc-opt-proxy}}\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXY:kdc-opt-proxy-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXY::doc}}\index{KDC\_OPT\_PROXY (built\sphinxhyphen{}in variable)@\spxentry{KDC\_OPT\_PROXY}\spxextra{built\sphinxhyphen{}in variable}}
22554
22555\begin{fulllineitems}
22556\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXY:KDC_OPT_PROXY}}\pysigline{\sphinxbfcode{\sphinxupquote{KDC\_OPT\_PROXY}}}
22557\end{fulllineitems}
22558
22559
22560
22561\begin{savenotes}\sphinxattablestart
22562\centering
22563\begin{tabulary}{\linewidth}[t]{|T|T|}
22564\hline
22565
22566\sphinxAtStartPar
22567\sphinxcode{\sphinxupquote{KDC\_OPT\_PROXY}}
22568&
22569\sphinxAtStartPar
22570\sphinxcode{\sphinxupquote{0x08000000}}
22571\\
22572\hline
22573\end{tabulary}
22574\par
22575\sphinxattableend\end{savenotes}
22576
22577
22578\subsubsection{KDC\_OPT\_RENEW}
22579\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEW:kdc-opt-renew}}\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEW:kdc-opt-renew-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEW::doc}}\index{KDC\_OPT\_RENEW (built\sphinxhyphen{}in variable)@\spxentry{KDC\_OPT\_RENEW}\spxextra{built\sphinxhyphen{}in variable}}
22580
22581\begin{fulllineitems}
22582\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEW:KDC_OPT_RENEW}}\pysigline{\sphinxbfcode{\sphinxupquote{KDC\_OPT\_RENEW}}}
22583\end{fulllineitems}
22584
22585
22586
22587\begin{savenotes}\sphinxattablestart
22588\centering
22589\begin{tabulary}{\linewidth}[t]{|T|T|}
22590\hline
22591
22592\sphinxAtStartPar
22593\sphinxcode{\sphinxupquote{KDC\_OPT\_RENEW}}
22594&
22595\sphinxAtStartPar
22596\sphinxcode{\sphinxupquote{0x00000002}}
22597\\
22598\hline
22599\end{tabulary}
22600\par
22601\sphinxattableend\end{savenotes}
22602
22603
22604\subsubsection{KDC\_OPT\_RENEWABLE}
22605\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\sphinxhyphen{}in variable)@\spxentry{KDC\_OPT\_RENEWABLE}\spxextra{built\sphinxhyphen{}in variable}}
22606
22607\begin{fulllineitems}
22608\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE:KDC_OPT_RENEWABLE}}\pysigline{\sphinxbfcode{\sphinxupquote{KDC\_OPT\_RENEWABLE}}}
22609\end{fulllineitems}
22610
22611
22612
22613\begin{savenotes}\sphinxattablestart
22614\centering
22615\begin{tabulary}{\linewidth}[t]{|T|T|}
22616\hline
22617
22618\sphinxAtStartPar
22619\sphinxcode{\sphinxupquote{KDC\_OPT\_RENEWABLE}}
22620&
22621\sphinxAtStartPar
22622\sphinxcode{\sphinxupquote{0x00800000}}
22623\\
22624\hline
22625\end{tabulary}
22626\par
22627\sphinxattableend\end{savenotes}
22628
22629
22630\subsubsection{KDC\_OPT\_RENEWABLE\_OK}
22631\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE_OK:kdc-opt-renewable-ok}}\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE_OK:kdc-opt-renewable-ok-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE_OK::doc}}\index{KDC\_OPT\_RENEWABLE\_OK (built\sphinxhyphen{}in variable)@\spxentry{KDC\_OPT\_RENEWABLE\_OK}\spxextra{built\sphinxhyphen{}in variable}}
22632
22633\begin{fulllineitems}
22634\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE_OK:KDC_OPT_RENEWABLE_OK}}\pysigline{\sphinxbfcode{\sphinxupquote{KDC\_OPT\_RENEWABLE\_OK}}}
22635\end{fulllineitems}
22636
22637
22638
22639\begin{savenotes}\sphinxattablestart
22640\centering
22641\begin{tabulary}{\linewidth}[t]{|T|T|}
22642\hline
22643
22644\sphinxAtStartPar
22645\sphinxcode{\sphinxupquote{KDC\_OPT\_RENEWABLE\_OK}}
22646&
22647\sphinxAtStartPar
22648\sphinxcode{\sphinxupquote{0x00000010}}
22649\\
22650\hline
22651\end{tabulary}
22652\par
22653\sphinxattableend\end{savenotes}
22654
22655
22656\subsubsection{KDC\_OPT\_REQUEST\_ANONYMOUS}
22657\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\sphinxhyphen{}in variable)@\spxentry{KDC\_OPT\_REQUEST\_ANONYMOUS}\spxextra{built\sphinxhyphen{}in variable}}
22658
22659\begin{fulllineitems}
22660\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_REQUEST_ANONYMOUS:KDC_OPT_REQUEST_ANONYMOUS}}\pysigline{\sphinxbfcode{\sphinxupquote{KDC\_OPT\_REQUEST\_ANONYMOUS}}}
22661\end{fulllineitems}
22662
22663
22664
22665\begin{savenotes}\sphinxattablestart
22666\centering
22667\begin{tabulary}{\linewidth}[t]{|T|T|}
22668\hline
22669
22670\sphinxAtStartPar
22671\sphinxcode{\sphinxupquote{KDC\_OPT\_REQUEST\_ANONYMOUS}}
22672&
22673\sphinxAtStartPar
22674\sphinxcode{\sphinxupquote{0x00008000}}
22675\\
22676\hline
22677\end{tabulary}
22678\par
22679\sphinxattableend\end{savenotes}
22680
22681
22682\subsubsection{KDC\_OPT\_VALIDATE}
22683\label{\detokenize{appdev/refs/macros/KDC_OPT_VALIDATE:kdc-opt-validate}}\label{\detokenize{appdev/refs/macros/KDC_OPT_VALIDATE:kdc-opt-validate-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_VALIDATE::doc}}\index{KDC\_OPT\_VALIDATE (built\sphinxhyphen{}in variable)@\spxentry{KDC\_OPT\_VALIDATE}\spxextra{built\sphinxhyphen{}in variable}}
22684
22685\begin{fulllineitems}
22686\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_VALIDATE:KDC_OPT_VALIDATE}}\pysigline{\sphinxbfcode{\sphinxupquote{KDC\_OPT\_VALIDATE}}}
22687\end{fulllineitems}
22688
22689
22690
22691\begin{savenotes}\sphinxattablestart
22692\centering
22693\begin{tabulary}{\linewidth}[t]{|T|T|}
22694\hline
22695
22696\sphinxAtStartPar
22697\sphinxcode{\sphinxupquote{KDC\_OPT\_VALIDATE}}
22698&
22699\sphinxAtStartPar
22700\sphinxcode{\sphinxupquote{0x00000001}}
22701\\
22702\hline
22703\end{tabulary}
22704\par
22705\sphinxattableend\end{savenotes}
22706
22707
22708\subsubsection{KDC\_TKT\_COMMON\_MASK}
22709\label{\detokenize{appdev/refs/macros/KDC_TKT_COMMON_MASK:kdc-tkt-common-mask}}\label{\detokenize{appdev/refs/macros/KDC_TKT_COMMON_MASK:kdc-tkt-common-mask-data}}\label{\detokenize{appdev/refs/macros/KDC_TKT_COMMON_MASK::doc}}\index{KDC\_TKT\_COMMON\_MASK (built\sphinxhyphen{}in variable)@\spxentry{KDC\_TKT\_COMMON\_MASK}\spxextra{built\sphinxhyphen{}in variable}}
22710
22711\begin{fulllineitems}
22712\phantomsection\label{\detokenize{appdev/refs/macros/KDC_TKT_COMMON_MASK:KDC_TKT_COMMON_MASK}}\pysigline{\sphinxbfcode{\sphinxupquote{KDC\_TKT\_COMMON\_MASK}}}
22713\end{fulllineitems}
22714
22715
22716
22717\begin{savenotes}\sphinxattablestart
22718\centering
22719\begin{tabulary}{\linewidth}[t]{|T|T|}
22720\hline
22721
22722\sphinxAtStartPar
22723\sphinxcode{\sphinxupquote{KDC\_TKT\_COMMON\_MASK}}
22724&
22725\sphinxAtStartPar
22726\sphinxcode{\sphinxupquote{0x54800000}}
22727\\
22728\hline
22729\end{tabulary}
22730\par
22731\sphinxattableend\end{savenotes}
22732
22733
22734\subsubsection{KRB5\_ALTAUTH\_ATT\_CHALLENGE\_RESPONSE}
22735\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_ALTAUTH\_ATT\_CHALLENGE\_RESPONSE}\spxextra{built\sphinxhyphen{}in variable}}
22736
22737\begin{fulllineitems}
22738\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_ALTAUTH_ATT_CHALLENGE_RESPONSE:KRB5_ALTAUTH_ATT_CHALLENGE_RESPONSE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_ALTAUTH\_ATT\_CHALLENGE\_RESPONSE}}}
22739\end{fulllineitems}
22740
22741
22742\sphinxAtStartPar
22743alternate authentication types
22744
22745
22746\begin{savenotes}\sphinxattablestart
22747\centering
22748\begin{tabulary}{\linewidth}[t]{|T|T|}
22749\hline
22750
22751\sphinxAtStartPar
22752\sphinxcode{\sphinxupquote{KRB5\_ALTAUTH\_ATT\_CHALLENGE\_RESPONSE}}
22753&
22754\sphinxAtStartPar
22755\sphinxcode{\sphinxupquote{64}}
22756\\
22757\hline
22758\end{tabulary}
22759\par
22760\sphinxattableend\end{savenotes}
22761
22762
22763\subsubsection{KRB5\_ANONYMOUS\_PRINCSTR}
22764\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_ANONYMOUS\_PRINCSTR}\spxextra{built\sphinxhyphen{}in variable}}
22765
22766\begin{fulllineitems}
22767\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_PRINCSTR:KRB5_ANONYMOUS_PRINCSTR}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_ANONYMOUS\_PRINCSTR}}}
22768\end{fulllineitems}
22769
22770
22771\sphinxAtStartPar
22772Anonymous principal name.
22773
22774
22775\begin{savenotes}\sphinxattablestart
22776\centering
22777\begin{tabulary}{\linewidth}[t]{|T|T|}
22778\hline
22779
22780\sphinxAtStartPar
22781\sphinxcode{\sphinxupquote{KRB5\_ANONYMOUS\_PRINCSTR}}
22782&
22783\sphinxAtStartPar
22784\sphinxcode{\sphinxupquote{"ANONYMOUS"}}
22785\\
22786\hline
22787\end{tabulary}
22788\par
22789\sphinxattableend\end{savenotes}
22790
22791
22792\subsubsection{KRB5\_ANONYMOUS\_REALMSTR}
22793\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR:krb5-anonymous-realmstr}}\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR:krb5-anonymous-realmstr-data}}\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR::doc}}\index{KRB5\_ANONYMOUS\_REALMSTR (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_ANONYMOUS\_REALMSTR}\spxextra{built\sphinxhyphen{}in variable}}
22794
22795\begin{fulllineitems}
22796\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR:KRB5_ANONYMOUS_REALMSTR}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_ANONYMOUS\_REALMSTR}}}
22797\end{fulllineitems}
22798
22799
22800\sphinxAtStartPar
22801Anonymous realm.
22802
22803
22804\begin{savenotes}\sphinxattablestart
22805\centering
22806\begin{tabulary}{\linewidth}[t]{|T|T|}
22807\hline
22808
22809\sphinxAtStartPar
22810\sphinxcode{\sphinxupquote{KRB5\_ANONYMOUS\_REALMSTR}}
22811&
22812\sphinxAtStartPar
22813\sphinxcode{\sphinxupquote{"WELLKNOWN:ANONYMOUS"}}
22814\\
22815\hline
22816\end{tabulary}
22817\par
22818\sphinxattableend\end{savenotes}
22819
22820
22821\subsubsection{KRB5\_AP\_REP}
22822\label{\detokenize{appdev/refs/macros/KRB5_AP_REP:krb5-ap-rep}}\label{\detokenize{appdev/refs/macros/KRB5_AP_REP:krb5-ap-rep-data}}\label{\detokenize{appdev/refs/macros/KRB5_AP_REP::doc}}\index{KRB5\_AP\_REP (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AP\_REP}\spxextra{built\sphinxhyphen{}in variable}}
22823
22824\begin{fulllineitems}
22825\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AP_REP:KRB5_AP_REP}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AP\_REP}}}
22826\end{fulllineitems}
22827
22828
22829\sphinxAtStartPar
22830Response to mutual AP request.
22831
22832
22833\begin{savenotes}\sphinxattablestart
22834\centering
22835\begin{tabulary}{\linewidth}[t]{|T|T|}
22836\hline
22837
22838\sphinxAtStartPar
22839\sphinxcode{\sphinxupquote{KRB5\_AP\_REP}}
22840&
22841\sphinxAtStartPar
22842\sphinxcode{\sphinxupquote{((krb5\_msgtype)15)}}
22843\\
22844\hline
22845\end{tabulary}
22846\par
22847\sphinxattableend\end{savenotes}
22848
22849
22850\subsubsection{KRB5\_AP\_REQ}
22851\label{\detokenize{appdev/refs/macros/KRB5_AP_REQ:krb5-ap-req}}\label{\detokenize{appdev/refs/macros/KRB5_AP_REQ:krb5-ap-req-data}}\label{\detokenize{appdev/refs/macros/KRB5_AP_REQ::doc}}\index{KRB5\_AP\_REQ (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AP\_REQ}\spxextra{built\sphinxhyphen{}in variable}}
22852
22853\begin{fulllineitems}
22854\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AP_REQ:KRB5_AP_REQ}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AP\_REQ}}}
22855\end{fulllineitems}
22856
22857
22858\sphinxAtStartPar
22859Auth req to application server.
22860
22861
22862\begin{savenotes}\sphinxattablestart
22863\centering
22864\begin{tabulary}{\linewidth}[t]{|T|T|}
22865\hline
22866
22867\sphinxAtStartPar
22868\sphinxcode{\sphinxupquote{KRB5\_AP\_REQ}}
22869&
22870\sphinxAtStartPar
22871\sphinxcode{\sphinxupquote{((krb5\_msgtype)14)}}
22872\\
22873\hline
22874\end{tabulary}
22875\par
22876\sphinxattableend\end{savenotes}
22877
22878
22879\subsubsection{KRB5\_AS\_REP}
22880\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_AS\_REP}\spxextra{built\sphinxhyphen{}in variable}}
22881
22882\begin{fulllineitems}
22883\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AS_REP:KRB5_AS_REP}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AS\_REP}}}
22884\end{fulllineitems}
22885
22886
22887\sphinxAtStartPar
22888Response to AS request.
22889
22890
22891\begin{savenotes}\sphinxattablestart
22892\centering
22893\begin{tabulary}{\linewidth}[t]{|T|T|}
22894\hline
22895
22896\sphinxAtStartPar
22897\sphinxcode{\sphinxupquote{KRB5\_AS\_REP}}
22898&
22899\sphinxAtStartPar
22900\sphinxcode{\sphinxupquote{((krb5\_msgtype)11)}}
22901\\
22902\hline
22903\end{tabulary}
22904\par
22905\sphinxattableend\end{savenotes}
22906
22907
22908\subsubsection{KRB5\_AS\_REQ}
22909\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_AS\_REQ}\spxextra{built\sphinxhyphen{}in variable}}
22910
22911\begin{fulllineitems}
22912\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AS_REQ:KRB5_AS_REQ}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AS\_REQ}}}
22913\end{fulllineitems}
22914
22915
22916\sphinxAtStartPar
22917Initial authentication request.
22918
22919
22920\begin{savenotes}\sphinxattablestart
22921\centering
22922\begin{tabulary}{\linewidth}[t]{|T|T|}
22923\hline
22924
22925\sphinxAtStartPar
22926\sphinxcode{\sphinxupquote{KRB5\_AS\_REQ}}
22927&
22928\sphinxAtStartPar
22929\sphinxcode{\sphinxupquote{((krb5\_msgtype)10)}}
22930\\
22931\hline
22932\end{tabulary}
22933\par
22934\sphinxattableend\end{savenotes}
22935
22936
22937\subsubsection{KRB5\_AUTHDATA\_AND\_OR}
22938\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AND_OR:krb5-authdata-and-or}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AND_OR:krb5-authdata-and-or-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AND_OR::doc}}\index{KRB5\_AUTHDATA\_AND\_OR (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTHDATA\_AND\_OR}\spxextra{built\sphinxhyphen{}in variable}}
22939
22940\begin{fulllineitems}
22941\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AND_OR:KRB5_AUTHDATA_AND_OR}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTHDATA\_AND\_OR}}}
22942\end{fulllineitems}
22943
22944
22945
22946\begin{savenotes}\sphinxattablestart
22947\centering
22948\begin{tabulary}{\linewidth}[t]{|T|T|}
22949\hline
22950
22951\sphinxAtStartPar
22952\sphinxcode{\sphinxupquote{KRB5\_AUTHDATA\_AND\_OR}}
22953&
22954\sphinxAtStartPar
22955\sphinxcode{\sphinxupquote{5}}
22956\\
22957\hline
22958\end{tabulary}
22959\par
22960\sphinxattableend\end{savenotes}
22961
22962
22963\subsubsection{KRB5\_AUTHDATA\_AP\_OPTIONS}
22964\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AP_OPTIONS:krb5-authdata-ap-options}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AP_OPTIONS:krb5-authdata-ap-options-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AP_OPTIONS::doc}}\index{KRB5\_AUTHDATA\_AP\_OPTIONS (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTHDATA\_AP\_OPTIONS}\spxextra{built\sphinxhyphen{}in variable}}
22965
22966\begin{fulllineitems}
22967\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AP_OPTIONS:KRB5_AUTHDATA_AP_OPTIONS}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTHDATA\_AP\_OPTIONS}}}
22968\end{fulllineitems}
22969
22970
22971
22972\begin{savenotes}\sphinxattablestart
22973\centering
22974\begin{tabulary}{\linewidth}[t]{|T|T|}
22975\hline
22976
22977\sphinxAtStartPar
22978\sphinxcode{\sphinxupquote{KRB5\_AUTHDATA\_AP\_OPTIONS}}
22979&
22980\sphinxAtStartPar
22981\sphinxcode{\sphinxupquote{143}}
22982\\
22983\hline
22984\end{tabulary}
22985\par
22986\sphinxattableend\end{savenotes}
22987
22988
22989\subsubsection{KRB5\_AUTHDATA\_AUTH\_INDICATOR}
22990\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AUTH_INDICATOR:krb5-authdata-auth-indicator}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AUTH_INDICATOR:krb5-authdata-auth-indicator-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AUTH_INDICATOR::doc}}\index{KRB5\_AUTHDATA\_AUTH\_INDICATOR (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTHDATA\_AUTH\_INDICATOR}\spxextra{built\sphinxhyphen{}in variable}}
22991
22992\begin{fulllineitems}
22993\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AUTH_INDICATOR:KRB5_AUTHDATA_AUTH_INDICATOR}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTHDATA\_AUTH\_INDICATOR}}}
22994\end{fulllineitems}
22995
22996
22997
22998\begin{savenotes}\sphinxattablestart
22999\centering
23000\begin{tabulary}{\linewidth}[t]{|T|T|}
23001\hline
23002
23003\sphinxAtStartPar
23004\sphinxcode{\sphinxupquote{KRB5\_AUTHDATA\_AUTH\_INDICATOR}}
23005&
23006\sphinxAtStartPar
23007\sphinxcode{\sphinxupquote{97}}
23008\\
23009\hline
23010\end{tabulary}
23011\par
23012\sphinxattableend\end{savenotes}
23013
23014
23015\subsubsection{KRB5\_AUTHDATA\_CAMMAC}
23016\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_CAMMAC:krb5-authdata-cammac}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_CAMMAC:krb5-authdata-cammac-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_CAMMAC::doc}}\index{KRB5\_AUTHDATA\_CAMMAC (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTHDATA\_CAMMAC}\spxextra{built\sphinxhyphen{}in variable}}
23017
23018\begin{fulllineitems}
23019\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_CAMMAC:KRB5_AUTHDATA_CAMMAC}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTHDATA\_CAMMAC}}}
23020\end{fulllineitems}
23021
23022
23023
23024\begin{savenotes}\sphinxattablestart
23025\centering
23026\begin{tabulary}{\linewidth}[t]{|T|T|}
23027\hline
23028
23029\sphinxAtStartPar
23030\sphinxcode{\sphinxupquote{KRB5\_AUTHDATA\_CAMMAC}}
23031&
23032\sphinxAtStartPar
23033\sphinxcode{\sphinxupquote{96}}
23034\\
23035\hline
23036\end{tabulary}
23037\par
23038\sphinxattableend\end{savenotes}
23039
23040
23041\subsubsection{KRB5\_AUTHDATA\_ETYPE\_NEGOTIATION}
23042\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_ETYPE_NEGOTIATION:krb5-authdata-etype-negotiation}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_ETYPE_NEGOTIATION:krb5-authdata-etype-negotiation-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_ETYPE_NEGOTIATION::doc}}\index{KRB5\_AUTHDATA\_ETYPE\_NEGOTIATION (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTHDATA\_ETYPE\_NEGOTIATION}\spxextra{built\sphinxhyphen{}in variable}}
23043
23044\begin{fulllineitems}
23045\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_ETYPE_NEGOTIATION:KRB5_AUTHDATA_ETYPE_NEGOTIATION}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTHDATA\_ETYPE\_NEGOTIATION}}}
23046\end{fulllineitems}
23047
23048
23049\sphinxAtStartPar
23050RFC 4537.
23051
23052
23053\begin{savenotes}\sphinxattablestart
23054\centering
23055\begin{tabulary}{\linewidth}[t]{|T|T|}
23056\hline
23057
23058\sphinxAtStartPar
23059\sphinxcode{\sphinxupquote{KRB5\_AUTHDATA\_ETYPE\_NEGOTIATION}}
23060&
23061\sphinxAtStartPar
23062\sphinxcode{\sphinxupquote{129}}
23063\\
23064\hline
23065\end{tabulary}
23066\par
23067\sphinxattableend\end{savenotes}
23068
23069
23070\subsubsection{KRB5\_AUTHDATA\_FX\_ARMOR}
23071\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}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_FX_ARMOR::doc}}\index{KRB5\_AUTHDATA\_FX\_ARMOR (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTHDATA\_FX\_ARMOR}\spxextra{built\sphinxhyphen{}in variable}}
23072
23073\begin{fulllineitems}
23074\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_FX_ARMOR:KRB5_AUTHDATA_FX_ARMOR}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTHDATA\_FX\_ARMOR}}}
23075\end{fulllineitems}
23076
23077
23078
23079\begin{savenotes}\sphinxattablestart
23080\centering
23081\begin{tabulary}{\linewidth}[t]{|T|T|}
23082\hline
23083
23084\sphinxAtStartPar
23085\sphinxcode{\sphinxupquote{KRB5\_AUTHDATA\_FX\_ARMOR}}
23086&
23087\sphinxAtStartPar
23088\sphinxcode{\sphinxupquote{71}}
23089\\
23090\hline
23091\end{tabulary}
23092\par
23093\sphinxattableend\end{savenotes}
23094
23095
23096\subsubsection{KRB5\_AUTHDATA\_IF\_RELEVANT}
23097\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_IF_RELEVANT:krb5-authdata-if-relevant}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_IF_RELEVANT:krb5-authdata-if-relevant-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_IF_RELEVANT::doc}}\index{KRB5\_AUTHDATA\_IF\_RELEVANT (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTHDATA\_IF\_RELEVANT}\spxextra{built\sphinxhyphen{}in variable}}
23098
23099\begin{fulllineitems}
23100\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_IF_RELEVANT:KRB5_AUTHDATA_IF_RELEVANT}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTHDATA\_IF\_RELEVANT}}}
23101\end{fulllineitems}
23102
23103
23104
23105\begin{savenotes}\sphinxattablestart
23106\centering
23107\begin{tabulary}{\linewidth}[t]{|T|T|}
23108\hline
23109
23110\sphinxAtStartPar
23111\sphinxcode{\sphinxupquote{KRB5\_AUTHDATA\_IF\_RELEVANT}}
23112&
23113\sphinxAtStartPar
23114\sphinxcode{\sphinxupquote{1}}
23115\\
23116\hline
23117\end{tabulary}
23118\par
23119\sphinxattableend\end{savenotes}
23120
23121
23122\subsubsection{KRB5\_AUTHDATA\_INITIAL\_VERIFIED\_CAS}
23123\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:krb5-authdata-initial-verified-cas-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_INITIAL_VERIFIED_CAS::doc}}\index{KRB5\_AUTHDATA\_INITIAL\_VERIFIED\_CAS (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTHDATA\_INITIAL\_VERIFIED\_CAS}\spxextra{built\sphinxhyphen{}in variable}}
23124
23125\begin{fulllineitems}
23126\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_INITIAL_VERIFIED_CAS:KRB5_AUTHDATA_INITIAL_VERIFIED_CAS}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTHDATA\_INITIAL\_VERIFIED\_CAS}}}
23127\end{fulllineitems}
23128
23129
23130
23131\begin{savenotes}\sphinxattablestart
23132\centering
23133\begin{tabulary}{\linewidth}[t]{|T|T|}
23134\hline
23135
23136\sphinxAtStartPar
23137\sphinxcode{\sphinxupquote{KRB5\_AUTHDATA\_INITIAL\_VERIFIED\_CAS}}
23138&
23139\sphinxAtStartPar
23140\sphinxcode{\sphinxupquote{9}}
23141\\
23142\hline
23143\end{tabulary}
23144\par
23145\sphinxattableend\end{savenotes}
23146
23147
23148\subsubsection{KRB5\_AUTHDATA\_KDC\_ISSUED}
23149\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_KDC_ISSUED:krb5-authdata-kdc-issued}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_KDC_ISSUED:krb5-authdata-kdc-issued-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_KDC_ISSUED::doc}}\index{KRB5\_AUTHDATA\_KDC\_ISSUED (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTHDATA\_KDC\_ISSUED}\spxextra{built\sphinxhyphen{}in variable}}
23150
23151\begin{fulllineitems}
23152\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_KDC_ISSUED:KRB5_AUTHDATA_KDC_ISSUED}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTHDATA\_KDC\_ISSUED}}}
23153\end{fulllineitems}
23154
23155
23156
23157\begin{savenotes}\sphinxattablestart
23158\centering
23159\begin{tabulary}{\linewidth}[t]{|T|T|}
23160\hline
23161
23162\sphinxAtStartPar
23163\sphinxcode{\sphinxupquote{KRB5\_AUTHDATA\_KDC\_ISSUED}}
23164&
23165\sphinxAtStartPar
23166\sphinxcode{\sphinxupquote{4}}
23167\\
23168\hline
23169\end{tabulary}
23170\par
23171\sphinxattableend\end{savenotes}
23172
23173
23174\subsubsection{KRB5\_AUTHDATA\_MANDATORY\_FOR\_KDC}
23175\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:krb5-authdata-mandatory-for-kdc-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_MANDATORY_FOR_KDC::doc}}\index{KRB5\_AUTHDATA\_MANDATORY\_FOR\_KDC (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTHDATA\_MANDATORY\_FOR\_KDC}\spxextra{built\sphinxhyphen{}in variable}}
23176
23177\begin{fulllineitems}
23178\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_MANDATORY_FOR_KDC:KRB5_AUTHDATA_MANDATORY_FOR_KDC}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTHDATA\_MANDATORY\_FOR\_KDC}}}
23179\end{fulllineitems}
23180
23181
23182
23183\begin{savenotes}\sphinxattablestart
23184\centering
23185\begin{tabulary}{\linewidth}[t]{|T|T|}
23186\hline
23187
23188\sphinxAtStartPar
23189\sphinxcode{\sphinxupquote{KRB5\_AUTHDATA\_MANDATORY\_FOR\_KDC}}
23190&
23191\sphinxAtStartPar
23192\sphinxcode{\sphinxupquote{8}}
23193\\
23194\hline
23195\end{tabulary}
23196\par
23197\sphinxattableend\end{savenotes}
23198
23199
23200\subsubsection{KRB5\_AUTHDATA\_OSF\_DCE}
23201\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_OSF_DCE:krb5-authdata-osf-dce}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_OSF_DCE:krb5-authdata-osf-dce-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_OSF_DCE::doc}}\index{KRB5\_AUTHDATA\_OSF\_DCE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTHDATA\_OSF\_DCE}\spxextra{built\sphinxhyphen{}in variable}}
23202
23203\begin{fulllineitems}
23204\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_OSF_DCE:KRB5_AUTHDATA_OSF_DCE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTHDATA\_OSF\_DCE}}}
23205\end{fulllineitems}
23206
23207
23208
23209\begin{savenotes}\sphinxattablestart
23210\centering
23211\begin{tabulary}{\linewidth}[t]{|T|T|}
23212\hline
23213
23214\sphinxAtStartPar
23215\sphinxcode{\sphinxupquote{KRB5\_AUTHDATA\_OSF\_DCE}}
23216&
23217\sphinxAtStartPar
23218\sphinxcode{\sphinxupquote{64}}
23219\\
23220\hline
23221\end{tabulary}
23222\par
23223\sphinxattableend\end{savenotes}
23224
23225
23226\subsubsection{KRB5\_AUTHDATA\_SESAME}
23227\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SESAME:krb5-authdata-sesame}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SESAME:krb5-authdata-sesame-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SESAME::doc}}\index{KRB5\_AUTHDATA\_SESAME (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTHDATA\_SESAME}\spxextra{built\sphinxhyphen{}in variable}}
23228
23229\begin{fulllineitems}
23230\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SESAME:KRB5_AUTHDATA_SESAME}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTHDATA\_SESAME}}}
23231\end{fulllineitems}
23232
23233
23234
23235\begin{savenotes}\sphinxattablestart
23236\centering
23237\begin{tabulary}{\linewidth}[t]{|T|T|}
23238\hline
23239
23240\sphinxAtStartPar
23241\sphinxcode{\sphinxupquote{KRB5\_AUTHDATA\_SESAME}}
23242&
23243\sphinxAtStartPar
23244\sphinxcode{\sphinxupquote{65}}
23245\\
23246\hline
23247\end{tabulary}
23248\par
23249\sphinxattableend\end{savenotes}
23250
23251
23252\subsubsection{KRB5\_AUTHDATA\_SIGNTICKET}
23253\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SIGNTICKET:krb5-authdata-signticket}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SIGNTICKET:krb5-authdata-signticket-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SIGNTICKET::doc}}\index{KRB5\_AUTHDATA\_SIGNTICKET (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTHDATA\_SIGNTICKET}\spxextra{built\sphinxhyphen{}in variable}}
23254
23255\begin{fulllineitems}
23256\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SIGNTICKET:KRB5_AUTHDATA_SIGNTICKET}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTHDATA\_SIGNTICKET}}}
23257\end{fulllineitems}
23258
23259
23260
23261\begin{savenotes}\sphinxattablestart
23262\centering
23263\begin{tabulary}{\linewidth}[t]{|T|T|}
23264\hline
23265
23266\sphinxAtStartPar
23267\sphinxcode{\sphinxupquote{KRB5\_AUTHDATA\_SIGNTICKET}}
23268&
23269\sphinxAtStartPar
23270\sphinxcode{\sphinxupquote{512}}
23271\\
23272\hline
23273\end{tabulary}
23274\par
23275\sphinxattableend\end{savenotes}
23276
23277
23278\subsubsection{KRB5\_AUTHDATA\_WIN2K\_PAC}
23279\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_WIN2K_PAC:krb5-authdata-win2k-pac}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_WIN2K_PAC:krb5-authdata-win2k-pac-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_WIN2K_PAC::doc}}\index{KRB5\_AUTHDATA\_WIN2K\_PAC (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTHDATA\_WIN2K\_PAC}\spxextra{built\sphinxhyphen{}in variable}}
23280
23281\begin{fulllineitems}
23282\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_WIN2K_PAC:KRB5_AUTHDATA_WIN2K_PAC}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTHDATA\_WIN2K\_PAC}}}
23283\end{fulllineitems}
23284
23285
23286
23287\begin{savenotes}\sphinxattablestart
23288\centering
23289\begin{tabulary}{\linewidth}[t]{|T|T|}
23290\hline
23291
23292\sphinxAtStartPar
23293\sphinxcode{\sphinxupquote{KRB5\_AUTHDATA\_WIN2K\_PAC}}
23294&
23295\sphinxAtStartPar
23296\sphinxcode{\sphinxupquote{128}}
23297\\
23298\hline
23299\end{tabulary}
23300\par
23301\sphinxattableend\end{savenotes}
23302
23303
23304\subsubsection{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}
23305\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:krb5-auth-context-do-sequence-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE::doc}}\index{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}\spxextra{built\sphinxhyphen{}in variable}}
23306
23307\begin{fulllineitems}
23308\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}
23309\end{fulllineitems}
23310
23311
23312\sphinxAtStartPar
23313Prevent replays with sequence numbers.
23314
23315
23316\begin{savenotes}\sphinxattablestart
23317\centering
23318\begin{tabulary}{\linewidth}[t]{|T|T|}
23319\hline
23320
23321\sphinxAtStartPar
23322\sphinxcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}
23323&
23324\sphinxAtStartPar
23325\sphinxcode{\sphinxupquote{0x00000004}}
23326\\
23327\hline
23328\end{tabulary}
23329\par
23330\sphinxattableend\end{savenotes}
23331
23332
23333\subsubsection{KRB5\_AUTH\_CONTEXT\_DO\_TIME}
23334\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:krb5-auth-context-do-time-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME::doc}}\index{KRB5\_AUTH\_CONTEXT\_DO\_TIME (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTH\_CONTEXT\_DO\_TIME}\spxextra{built\sphinxhyphen{}in variable}}
23335
23336\begin{fulllineitems}
23337\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}
23338\end{fulllineitems}
23339
23340
23341\sphinxAtStartPar
23342Prevent replays with timestamps and replay cache.
23343
23344
23345\begin{savenotes}\sphinxattablestart
23346\centering
23347\begin{tabulary}{\linewidth}[t]{|T|T|}
23348\hline
23349
23350\sphinxAtStartPar
23351\sphinxcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}
23352&
23353\sphinxAtStartPar
23354\sphinxcode{\sphinxupquote{0x00000001}}
23355\\
23356\hline
23357\end{tabulary}
23358\par
23359\sphinxattableend\end{savenotes}
23360
23361
23362\subsubsection{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_ADDR}
23363\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}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR::doc}}\index{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_ADDR (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_ADDR}\spxextra{built\sphinxhyphen{}in variable}}
23364
23365\begin{fulllineitems}
23366\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR:KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_ADDR}}}
23367\end{fulllineitems}
23368
23369
23370\sphinxAtStartPar
23371Generate the local network address.
23372
23373
23374\begin{savenotes}\sphinxattablestart
23375\centering
23376\begin{tabulary}{\linewidth}[t]{|T|T|}
23377\hline
23378
23379\sphinxAtStartPar
23380\sphinxcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_ADDR}}
23381&
23382\sphinxAtStartPar
23383\sphinxcode{\sphinxupquote{0x00000001}}
23384\\
23385\hline
23386\end{tabulary}
23387\par
23388\sphinxattableend\end{savenotes}
23389
23390
23391\subsubsection{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_FULL\_ADDR}
23392\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_FULL\_ADDR}\spxextra{built\sphinxhyphen{}in variable}}
23393
23394\begin{fulllineitems}
23395\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR:KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_FULL\_ADDR}}}
23396\end{fulllineitems}
23397
23398
23399\sphinxAtStartPar
23400Generate the local network address and the local port.
23401
23402
23403\begin{savenotes}\sphinxattablestart
23404\centering
23405\begin{tabulary}{\linewidth}[t]{|T|T|}
23406\hline
23407
23408\sphinxAtStartPar
23409\sphinxcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_FULL\_ADDR}}
23410&
23411\sphinxAtStartPar
23412\sphinxcode{\sphinxupquote{0x00000004}}
23413\\
23414\hline
23415\end{tabulary}
23416\par
23417\sphinxattableend\end{savenotes}
23418
23419
23420\subsubsection{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_ADDR}
23421\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:krb5-auth-context-generate-remote-addr-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR::doc}}\index{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_ADDR (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_ADDR}\spxextra{built\sphinxhyphen{}in variable}}
23422
23423\begin{fulllineitems}
23424\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR:KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_ADDR}}}
23425\end{fulllineitems}
23426
23427
23428\sphinxAtStartPar
23429Generate the remote network address.
23430
23431
23432\begin{savenotes}\sphinxattablestart
23433\centering
23434\begin{tabulary}{\linewidth}[t]{|T|T|}
23435\hline
23436
23437\sphinxAtStartPar
23438\sphinxcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_ADDR}}
23439&
23440\sphinxAtStartPar
23441\sphinxcode{\sphinxupquote{0x00000002}}
23442\\
23443\hline
23444\end{tabulary}
23445\par
23446\sphinxattableend\end{savenotes}
23447
23448
23449\subsubsection{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_FULL\_ADDR}
23450\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:krb5-auth-context-generate-remote-full-addr-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR::doc}}\index{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_FULL\_ADDR (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_FULL\_ADDR}\spxextra{built\sphinxhyphen{}in variable}}
23451
23452\begin{fulllineitems}
23453\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR:KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_FULL\_ADDR}}}
23454\end{fulllineitems}
23455
23456
23457\sphinxAtStartPar
23458Generate the remote network address and the remote port.
23459
23460
23461\begin{savenotes}\sphinxattablestart
23462\centering
23463\begin{tabulary}{\linewidth}[t]{|T|T|}
23464\hline
23465
23466\sphinxAtStartPar
23467\sphinxcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_FULL\_ADDR}}
23468&
23469\sphinxAtStartPar
23470\sphinxcode{\sphinxupquote{0x00000008}}
23471\\
23472\hline
23473\end{tabulary}
23474\par
23475\sphinxattableend\end{savenotes}
23476
23477
23478\subsubsection{KRB5\_AUTH\_CONTEXT\_PERMIT\_ALL}
23479\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTH\_CONTEXT\_PERMIT\_ALL}\spxextra{built\sphinxhyphen{}in variable}}
23480
23481\begin{fulllineitems}
23482\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_PERMIT_ALL:KRB5_AUTH_CONTEXT_PERMIT_ALL}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_PERMIT\_ALL}}}
23483\end{fulllineitems}
23484
23485
23486
23487\begin{savenotes}\sphinxattablestart
23488\centering
23489\begin{tabulary}{\linewidth}[t]{|T|T|}
23490\hline
23491
23492\sphinxAtStartPar
23493\sphinxcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_PERMIT\_ALL}}
23494&
23495\sphinxAtStartPar
23496\sphinxcode{\sphinxupquote{0x00000010}}
23497\\
23498\hline
23499\end{tabulary}
23500\par
23501\sphinxattableend\end{savenotes}
23502
23503
23504\subsubsection{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}
23505\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}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE::doc}}\index{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}\spxextra{built\sphinxhyphen{}in variable}}
23506
23507\begin{fulllineitems}
23508\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}
23509\end{fulllineitems}
23510
23511
23512\sphinxAtStartPar
23513Save sequence numbers for application.
23514
23515
23516\begin{savenotes}\sphinxattablestart
23517\centering
23518\begin{tabulary}{\linewidth}[t]{|T|T|}
23519\hline
23520
23521\sphinxAtStartPar
23522\sphinxcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}
23523&
23524\sphinxAtStartPar
23525\sphinxcode{\sphinxupquote{0x00000008}}
23526\\
23527\hline
23528\end{tabulary}
23529\par
23530\sphinxattableend\end{savenotes}
23531
23532
23533\subsubsection{KRB5\_AUTH\_CONTEXT\_RET\_TIME}
23534\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}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME::doc}}\index{KRB5\_AUTH\_CONTEXT\_RET\_TIME (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTH\_CONTEXT\_RET\_TIME}\spxextra{built\sphinxhyphen{}in variable}}
23535
23536\begin{fulllineitems}
23537\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}
23538\end{fulllineitems}
23539
23540
23541\sphinxAtStartPar
23542Save timestamps for application.
23543
23544
23545\begin{savenotes}\sphinxattablestart
23546\centering
23547\begin{tabulary}{\linewidth}[t]{|T|T|}
23548\hline
23549
23550\sphinxAtStartPar
23551\sphinxcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}
23552&
23553\sphinxAtStartPar
23554\sphinxcode{\sphinxupquote{0x00000002}}
23555\\
23556\hline
23557\end{tabulary}
23558\par
23559\sphinxattableend\end{savenotes}
23560
23561
23562\subsubsection{KRB5\_AUTH\_CONTEXT\_USE\_SUBKEY}
23563\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_USE_SUBKEY:krb5-auth-context-use-subkey}}\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::doc}}\index{KRB5\_AUTH\_CONTEXT\_USE\_SUBKEY (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_AUTH\_CONTEXT\_USE\_SUBKEY}\spxextra{built\sphinxhyphen{}in variable}}
23564
23565\begin{fulllineitems}
23566\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_USE_SUBKEY:KRB5_AUTH_CONTEXT_USE_SUBKEY}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_USE\_SUBKEY}}}
23567\end{fulllineitems}
23568
23569
23570
23571\begin{savenotes}\sphinxattablestart
23572\centering
23573\begin{tabulary}{\linewidth}[t]{|T|T|}
23574\hline
23575
23576\sphinxAtStartPar
23577\sphinxcode{\sphinxupquote{KRB5\_AUTH\_CONTEXT\_USE\_SUBKEY}}
23578&
23579\sphinxAtStartPar
23580\sphinxcode{\sphinxupquote{0x00000020}}
23581\\
23582\hline
23583\end{tabulary}
23584\par
23585\sphinxattableend\end{savenotes}
23586
23587
23588\subsubsection{KRB5\_CRED}
23589\label{\detokenize{appdev/refs/macros/KRB5_CRED:krb5-cred}}\label{\detokenize{appdev/refs/macros/KRB5_CRED:krb5-cred-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRED::doc}}\index{KRB5\_CRED (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_CRED}\spxextra{built\sphinxhyphen{}in variable}}
23590
23591\begin{fulllineitems}
23592\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRED:KRB5_CRED}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_CRED}}}
23593\end{fulllineitems}
23594
23595
23596\sphinxAtStartPar
23597Cred forwarding message.
23598
23599
23600\begin{savenotes}\sphinxattablestart
23601\centering
23602\begin{tabulary}{\linewidth}[t]{|T|T|}
23603\hline
23604
23605\sphinxAtStartPar
23606\sphinxcode{\sphinxupquote{KRB5\_CRED}}
23607&
23608\sphinxAtStartPar
23609\sphinxcode{\sphinxupquote{((krb5\_msgtype)22)}}
23610\\
23611\hline
23612\end{tabulary}
23613\par
23614\sphinxattableend\end{savenotes}
23615
23616
23617\subsubsection{KRB5\_CRYPTO\_TYPE\_CHECKSUM}
23618\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:krb5-crypto-type-checksum}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:krb5-crypto-type-checksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM::doc}}\index{KRB5\_CRYPTO\_TYPE\_CHECKSUM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_CRYPTO\_TYPE\_CHECKSUM}\spxextra{built\sphinxhyphen{}in variable}}
23619
23620\begin{fulllineitems}
23621\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:KRB5_CRYPTO_TYPE_CHECKSUM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_CRYPTO\_TYPE\_CHECKSUM}}}
23622\end{fulllineitems}
23623
23624
23625\sphinxAtStartPar
23626{[}out{]} checksum for MIC
23627
23628
23629\begin{savenotes}\sphinxattablestart
23630\centering
23631\begin{tabulary}{\linewidth}[t]{|T|T|}
23632\hline
23633
23634\sphinxAtStartPar
23635\sphinxcode{\sphinxupquote{KRB5\_CRYPTO\_TYPE\_CHECKSUM}}
23636&
23637\sphinxAtStartPar
23638\sphinxcode{\sphinxupquote{6}}
23639\\
23640\hline
23641\end{tabulary}
23642\par
23643\sphinxattableend\end{savenotes}
23644
23645
23646\subsubsection{KRB5\_CRYPTO\_TYPE\_DATA}
23647\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}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA::doc}}\index{KRB5\_CRYPTO\_TYPE\_DATA (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_CRYPTO\_TYPE\_DATA}\spxextra{built\sphinxhyphen{}in variable}}
23648
23649\begin{fulllineitems}
23650\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA:KRB5_CRYPTO_TYPE_DATA}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_CRYPTO\_TYPE\_DATA}}}
23651\end{fulllineitems}
23652
23653
23654\sphinxAtStartPar
23655{[}in, out{]} plaintext
23656
23657
23658\begin{savenotes}\sphinxattablestart
23659\centering
23660\begin{tabulary}{\linewidth}[t]{|T|T|}
23661\hline
23662
23663\sphinxAtStartPar
23664\sphinxcode{\sphinxupquote{KRB5\_CRYPTO\_TYPE\_DATA}}
23665&
23666\sphinxAtStartPar
23667\sphinxcode{\sphinxupquote{2}}
23668\\
23669\hline
23670\end{tabulary}
23671\par
23672\sphinxattableend\end{savenotes}
23673
23674
23675\subsubsection{KRB5\_CRYPTO\_TYPE\_EMPTY}
23676\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}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_EMPTY::doc}}\index{KRB5\_CRYPTO\_TYPE\_EMPTY (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_CRYPTO\_TYPE\_EMPTY}\spxextra{built\sphinxhyphen{}in variable}}
23677
23678\begin{fulllineitems}
23679\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_EMPTY:KRB5_CRYPTO_TYPE_EMPTY}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_CRYPTO\_TYPE\_EMPTY}}}
23680\end{fulllineitems}
23681
23682
23683\sphinxAtStartPar
23684{[}in{]} ignored
23685
23686
23687\begin{savenotes}\sphinxattablestart
23688\centering
23689\begin{tabulary}{\linewidth}[t]{|T|T|}
23690\hline
23691
23692\sphinxAtStartPar
23693\sphinxcode{\sphinxupquote{KRB5\_CRYPTO\_TYPE\_EMPTY}}
23694&
23695\sphinxAtStartPar
23696\sphinxcode{\sphinxupquote{0}}
23697\\
23698\hline
23699\end{tabulary}
23700\par
23701\sphinxattableend\end{savenotes}
23702
23703
23704\subsubsection{KRB5\_CRYPTO\_TYPE\_HEADER}
23705\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_CRYPTO\_TYPE\_HEADER}\spxextra{built\sphinxhyphen{}in variable}}
23706
23707\begin{fulllineitems}
23708\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_HEADER:KRB5_CRYPTO_TYPE_HEADER}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_CRYPTO\_TYPE\_HEADER}}}
23709\end{fulllineitems}
23710
23711
23712\sphinxAtStartPar
23713{[}out{]} header
23714
23715
23716\begin{savenotes}\sphinxattablestart
23717\centering
23718\begin{tabulary}{\linewidth}[t]{|T|T|}
23719\hline
23720
23721\sphinxAtStartPar
23722\sphinxcode{\sphinxupquote{KRB5\_CRYPTO\_TYPE\_HEADER}}
23723&
23724\sphinxAtStartPar
23725\sphinxcode{\sphinxupquote{1}}
23726\\
23727\hline
23728\end{tabulary}
23729\par
23730\sphinxattableend\end{savenotes}
23731
23732
23733\subsubsection{KRB5\_CRYPTO\_TYPE\_PADDING}
23734\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_PADDING:krb5-crypto-type-padding}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_PADDING:krb5-crypto-type-padding-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_PADDING::doc}}\index{KRB5\_CRYPTO\_TYPE\_PADDING (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_CRYPTO\_TYPE\_PADDING}\spxextra{built\sphinxhyphen{}in variable}}
23735
23736\begin{fulllineitems}
23737\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_PADDING:KRB5_CRYPTO_TYPE_PADDING}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_CRYPTO\_TYPE\_PADDING}}}
23738\end{fulllineitems}
23739
23740
23741\sphinxAtStartPar
23742{[}out{]} padding
23743
23744
23745\begin{savenotes}\sphinxattablestart
23746\centering
23747\begin{tabulary}{\linewidth}[t]{|T|T|}
23748\hline
23749
23750\sphinxAtStartPar
23751\sphinxcode{\sphinxupquote{KRB5\_CRYPTO\_TYPE\_PADDING}}
23752&
23753\sphinxAtStartPar
23754\sphinxcode{\sphinxupquote{4}}
23755\\
23756\hline
23757\end{tabulary}
23758\par
23759\sphinxattableend\end{savenotes}
23760
23761
23762\subsubsection{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}
23763\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}\spxextra{built\sphinxhyphen{}in variable}}
23764
23765\begin{fulllineitems}
23766\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY:KRB5_CRYPTO_TYPE_SIGN_ONLY}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}}}
23767\end{fulllineitems}
23768
23769
23770\sphinxAtStartPar
23771{[}in{]} associated data
23772
23773
23774\begin{savenotes}\sphinxattablestart
23775\centering
23776\begin{tabulary}{\linewidth}[t]{|T|T|}
23777\hline
23778
23779\sphinxAtStartPar
23780\sphinxcode{\sphinxupquote{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}}
23781&
23782\sphinxAtStartPar
23783\sphinxcode{\sphinxupquote{3}}
23784\\
23785\hline
23786\end{tabulary}
23787\par
23788\sphinxattableend\end{savenotes}
23789
23790
23791\subsubsection{KRB5\_CRYPTO\_TYPE\_STREAM}
23792\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_STREAM:krb5-crypto-type-stream}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_STREAM:krb5-crypto-type-stream-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_STREAM::doc}}\index{KRB5\_CRYPTO\_TYPE\_STREAM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_CRYPTO\_TYPE\_STREAM}\spxextra{built\sphinxhyphen{}in variable}}
23793
23794\begin{fulllineitems}
23795\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_STREAM:KRB5_CRYPTO_TYPE_STREAM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_CRYPTO\_TYPE\_STREAM}}}
23796\end{fulllineitems}
23797
23798
23799\sphinxAtStartPar
23800{[}in{]} entire message without decomposing the structure into header, data and trailer buffers
23801
23802
23803\begin{savenotes}\sphinxattablestart
23804\centering
23805\begin{tabulary}{\linewidth}[t]{|T|T|}
23806\hline
23807
23808\sphinxAtStartPar
23809\sphinxcode{\sphinxupquote{KRB5\_CRYPTO\_TYPE\_STREAM}}
23810&
23811\sphinxAtStartPar
23812\sphinxcode{\sphinxupquote{7}}
23813\\
23814\hline
23815\end{tabulary}
23816\par
23817\sphinxattableend\end{savenotes}
23818
23819
23820\subsubsection{KRB5\_CRYPTO\_TYPE\_TRAILER}
23821\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_CRYPTO\_TYPE\_TRAILER}\spxextra{built\sphinxhyphen{}in variable}}
23822
23823\begin{fulllineitems}
23824\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_TRAILER:KRB5_CRYPTO_TYPE_TRAILER}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_CRYPTO\_TYPE\_TRAILER}}}
23825\end{fulllineitems}
23826
23827
23828\sphinxAtStartPar
23829{[}out{]} checksum for encrypt
23830
23831
23832\begin{savenotes}\sphinxattablestart
23833\centering
23834\begin{tabulary}{\linewidth}[t]{|T|T|}
23835\hline
23836
23837\sphinxAtStartPar
23838\sphinxcode{\sphinxupquote{KRB5\_CRYPTO\_TYPE\_TRAILER}}
23839&
23840\sphinxAtStartPar
23841\sphinxcode{\sphinxupquote{5}}
23842\\
23843\hline
23844\end{tabulary}
23845\par
23846\sphinxattableend\end{savenotes}
23847
23848
23849\subsubsection{KRB5\_CYBERSAFE\_SECUREID}
23850\label{\detokenize{appdev/refs/macros/KRB5_CYBERSAFE_SECUREID:krb5-cybersafe-secureid}}\label{\detokenize{appdev/refs/macros/KRB5_CYBERSAFE_SECUREID:krb5-cybersafe-secureid-data}}\label{\detokenize{appdev/refs/macros/KRB5_CYBERSAFE_SECUREID::doc}}\index{KRB5\_CYBERSAFE\_SECUREID (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_CYBERSAFE\_SECUREID}\spxextra{built\sphinxhyphen{}in variable}}
23851
23852\begin{fulllineitems}
23853\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CYBERSAFE_SECUREID:KRB5_CYBERSAFE_SECUREID}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_CYBERSAFE\_SECUREID}}}
23854\end{fulllineitems}
23855
23856
23857\sphinxAtStartPar
23858Cybersafe.
23859
23860\sphinxAtStartPar
23861RFC 4120
23862
23863
23864\begin{savenotes}\sphinxattablestart
23865\centering
23866\begin{tabulary}{\linewidth}[t]{|T|T|}
23867\hline
23868
23869\sphinxAtStartPar
23870\sphinxcode{\sphinxupquote{KRB5\_CYBERSAFE\_SECUREID}}
23871&
23872\sphinxAtStartPar
23873\sphinxcode{\sphinxupquote{9}}
23874\\
23875\hline
23876\end{tabulary}
23877\par
23878\sphinxattableend\end{savenotes}
23879
23880
23881\subsubsection{KRB5\_DOMAIN\_X500\_COMPRESS}
23882\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}}\label{\detokenize{appdev/refs/macros/KRB5_DOMAIN_X500_COMPRESS::doc}}\index{KRB5\_DOMAIN\_X500\_COMPRESS (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_DOMAIN\_X500\_COMPRESS}\spxextra{built\sphinxhyphen{}in variable}}
23883
23884\begin{fulllineitems}
23885\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_DOMAIN_X500_COMPRESS:KRB5_DOMAIN_X500_COMPRESS}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_DOMAIN\_X500\_COMPRESS}}}
23886\end{fulllineitems}
23887
23888
23889\sphinxAtStartPar
23890Transited encoding types.
23891
23892
23893\begin{savenotes}\sphinxattablestart
23894\centering
23895\begin{tabulary}{\linewidth}[t]{|T|T|}
23896\hline
23897
23898\sphinxAtStartPar
23899\sphinxcode{\sphinxupquote{KRB5\_DOMAIN\_X500\_COMPRESS}}
23900&
23901\sphinxAtStartPar
23902\sphinxcode{\sphinxupquote{1}}
23903\\
23904\hline
23905\end{tabulary}
23906\par
23907\sphinxattableend\end{savenotes}
23908
23909
23910\subsubsection{KRB5\_ENCPADATA\_REQ\_ENC\_PA\_REP}
23911\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_ENCPADATA\_REQ\_ENC\_PA\_REP}\spxextra{built\sphinxhyphen{}in variable}}
23912
23913\begin{fulllineitems}
23914\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_ENCPADATA_REQ_ENC_PA_REP:KRB5_ENCPADATA_REQ_ENC_PA_REP}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_ENCPADATA\_REQ\_ENC\_PA\_REP}}}
23915\end{fulllineitems}
23916
23917
23918\sphinxAtStartPar
23919RFC 6806.
23920
23921
23922\begin{savenotes}\sphinxattablestart
23923\centering
23924\begin{tabulary}{\linewidth}[t]{|T|T|}
23925\hline
23926
23927\sphinxAtStartPar
23928\sphinxcode{\sphinxupquote{KRB5\_ENCPADATA\_REQ\_ENC\_PA\_REP}}
23929&
23930\sphinxAtStartPar
23931\sphinxcode{\sphinxupquote{149}}
23932\\
23933\hline
23934\end{tabulary}
23935\par
23936\sphinxattableend\end{savenotes}
23937
23938
23939\subsubsection{KRB5\_ERROR}
23940\label{\detokenize{appdev/refs/macros/KRB5_ERROR:krb5-error}}\label{\detokenize{appdev/refs/macros/KRB5_ERROR:krb5-error-data}}\label{\detokenize{appdev/refs/macros/KRB5_ERROR::doc}}\index{KRB5\_ERROR (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_ERROR}\spxextra{built\sphinxhyphen{}in variable}}
23941
23942\begin{fulllineitems}
23943\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_ERROR:KRB5_ERROR}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_ERROR}}}
23944\end{fulllineitems}
23945
23946
23947\sphinxAtStartPar
23948Error response.
23949
23950
23951\begin{savenotes}\sphinxattablestart
23952\centering
23953\begin{tabulary}{\linewidth}[t]{|T|T|}
23954\hline
23955
23956\sphinxAtStartPar
23957\sphinxcode{\sphinxupquote{KRB5\_ERROR}}
23958&
23959\sphinxAtStartPar
23960\sphinxcode{\sphinxupquote{((krb5\_msgtype)30)}}
23961\\
23962\hline
23963\end{tabulary}
23964\par
23965\sphinxattableend\end{savenotes}
23966
23967
23968\subsubsection{KRB5\_FAST\_REQUIRED}
23969\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_FAST\_REQUIRED}\spxextra{built\sphinxhyphen{}in variable}}
23970
23971\begin{fulllineitems}
23972\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_FAST_REQUIRED:KRB5_FAST_REQUIRED}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_FAST\_REQUIRED}}}
23973\end{fulllineitems}
23974
23975
23976\sphinxAtStartPar
23977Require KDC to support FAST.
23978
23979
23980\begin{savenotes}\sphinxattablestart
23981\centering
23982\begin{tabulary}{\linewidth}[t]{|T|T|}
23983\hline
23984
23985\sphinxAtStartPar
23986\sphinxcode{\sphinxupquote{KRB5\_FAST\_REQUIRED}}
23987&
23988\sphinxAtStartPar
23989\sphinxcode{\sphinxupquote{0x0001}}
23990\\
23991\hline
23992\end{tabulary}
23993\par
23994\sphinxattableend\end{savenotes}
23995
23996
23997\subsubsection{KRB5\_GC\_CACHED}
23998\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_GC\_CACHED}\spxextra{built\sphinxhyphen{}in variable}}
23999
24000\begin{fulllineitems}
24001\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_CACHED:KRB5_GC_CACHED}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_GC\_CACHED}}}
24002\end{fulllineitems}
24003
24004
24005\sphinxAtStartPar
24006Want cached ticket only.
24007
24008
24009\begin{savenotes}\sphinxattablestart
24010\centering
24011\begin{tabulary}{\linewidth}[t]{|T|T|}
24012\hline
24013
24014\sphinxAtStartPar
24015\sphinxcode{\sphinxupquote{KRB5\_GC\_CACHED}}
24016&
24017\sphinxAtStartPar
24018\sphinxcode{\sphinxupquote{2}}
24019\\
24020\hline
24021\end{tabulary}
24022\par
24023\sphinxattableend\end{savenotes}
24024
24025
24026\subsubsection{KRB5\_GC\_CANONICALIZE}
24027\label{\detokenize{appdev/refs/macros/KRB5_GC_CANONICALIZE:krb5-gc-canonicalize}}\label{\detokenize{appdev/refs/macros/KRB5_GC_CANONICALIZE:krb5-gc-canonicalize-data}}\label{\detokenize{appdev/refs/macros/KRB5_GC_CANONICALIZE::doc}}\index{KRB5\_GC\_CANONICALIZE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_GC\_CANONICALIZE}\spxextra{built\sphinxhyphen{}in variable}}
24028
24029\begin{fulllineitems}
24030\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_CANONICALIZE:KRB5_GC_CANONICALIZE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_GC\_CANONICALIZE}}}
24031\end{fulllineitems}
24032
24033
24034\sphinxAtStartPar
24035Set canonicalize KDC option.
24036
24037
24038\begin{savenotes}\sphinxattablestart
24039\centering
24040\begin{tabulary}{\linewidth}[t]{|T|T|}
24041\hline
24042
24043\sphinxAtStartPar
24044\sphinxcode{\sphinxupquote{KRB5\_GC\_CANONICALIZE}}
24045&
24046\sphinxAtStartPar
24047\sphinxcode{\sphinxupquote{4}}
24048\\
24049\hline
24050\end{tabulary}
24051\par
24052\sphinxattableend\end{savenotes}
24053
24054
24055\subsubsection{KRB5\_GC\_CONSTRAINED\_DELEGATION}
24056\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_GC\_CONSTRAINED\_DELEGATION}\spxextra{built\sphinxhyphen{}in variable}}
24057
24058\begin{fulllineitems}
24059\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_CONSTRAINED_DELEGATION:KRB5_GC_CONSTRAINED_DELEGATION}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_GC\_CONSTRAINED\_DELEGATION}}}
24060\end{fulllineitems}
24061
24062
24063\sphinxAtStartPar
24064Constrained delegation.
24065
24066
24067\begin{savenotes}\sphinxattablestart
24068\centering
24069\begin{tabulary}{\linewidth}[t]{|T|T|}
24070\hline
24071
24072\sphinxAtStartPar
24073\sphinxcode{\sphinxupquote{KRB5\_GC\_CONSTRAINED\_DELEGATION}}
24074&
24075\sphinxAtStartPar
24076\sphinxcode{\sphinxupquote{64}}
24077\\
24078\hline
24079\end{tabulary}
24080\par
24081\sphinxattableend\end{savenotes}
24082
24083
24084\subsubsection{KRB5\_GC\_FORWARDABLE}
24085\label{\detokenize{appdev/refs/macros/KRB5_GC_FORWARDABLE:krb5-gc-forwardable}}\label{\detokenize{appdev/refs/macros/KRB5_GC_FORWARDABLE:krb5-gc-forwardable-data}}\label{\detokenize{appdev/refs/macros/KRB5_GC_FORWARDABLE::doc}}\index{KRB5\_GC\_FORWARDABLE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_GC\_FORWARDABLE}\spxextra{built\sphinxhyphen{}in variable}}
24086
24087\begin{fulllineitems}
24088\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_FORWARDABLE:KRB5_GC_FORWARDABLE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_GC\_FORWARDABLE}}}
24089\end{fulllineitems}
24090
24091
24092\sphinxAtStartPar
24093Acquire forwardable tickets.
24094
24095
24096\begin{savenotes}\sphinxattablestart
24097\centering
24098\begin{tabulary}{\linewidth}[t]{|T|T|}
24099\hline
24100
24101\sphinxAtStartPar
24102\sphinxcode{\sphinxupquote{KRB5\_GC\_FORWARDABLE}}
24103&
24104\sphinxAtStartPar
24105\sphinxcode{\sphinxupquote{16}}
24106\\
24107\hline
24108\end{tabulary}
24109\par
24110\sphinxattableend\end{savenotes}
24111
24112
24113\subsubsection{KRB5\_GC\_NO\_STORE}
24114\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}}\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_STORE::doc}}\index{KRB5\_GC\_NO\_STORE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_GC\_NO\_STORE}\spxextra{built\sphinxhyphen{}in variable}}
24115
24116\begin{fulllineitems}
24117\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_STORE:KRB5_GC_NO_STORE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_GC\_NO\_STORE}}}
24118\end{fulllineitems}
24119
24120
24121\sphinxAtStartPar
24122Do not store in credential cache.
24123
24124
24125\begin{savenotes}\sphinxattablestart
24126\centering
24127\begin{tabulary}{\linewidth}[t]{|T|T|}
24128\hline
24129
24130\sphinxAtStartPar
24131\sphinxcode{\sphinxupquote{KRB5\_GC\_NO\_STORE}}
24132&
24133\sphinxAtStartPar
24134\sphinxcode{\sphinxupquote{8}}
24135\\
24136\hline
24137\end{tabulary}
24138\par
24139\sphinxattableend\end{savenotes}
24140
24141
24142\subsubsection{KRB5\_GC\_NO\_TRANSIT\_CHECK}
24143\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:krb5-gc-no-transit-check-data}}\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_TRANSIT_CHECK::doc}}\index{KRB5\_GC\_NO\_TRANSIT\_CHECK (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_GC\_NO\_TRANSIT\_CHECK}\spxextra{built\sphinxhyphen{}in variable}}
24144
24145\begin{fulllineitems}
24146\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_TRANSIT_CHECK:KRB5_GC_NO_TRANSIT_CHECK}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_GC\_NO\_TRANSIT\_CHECK}}}
24147\end{fulllineitems}
24148
24149
24150\sphinxAtStartPar
24151Disable transited check.
24152
24153
24154\begin{savenotes}\sphinxattablestart
24155\centering
24156\begin{tabulary}{\linewidth}[t]{|T|T|}
24157\hline
24158
24159\sphinxAtStartPar
24160\sphinxcode{\sphinxupquote{KRB5\_GC\_NO\_TRANSIT\_CHECK}}
24161&
24162\sphinxAtStartPar
24163\sphinxcode{\sphinxupquote{32}}
24164\\
24165\hline
24166\end{tabulary}
24167\par
24168\sphinxattableend\end{savenotes}
24169
24170
24171\subsubsection{KRB5\_GC\_USER\_USER}
24172\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}}\label{\detokenize{appdev/refs/macros/KRB5_GC_USER_USER::doc}}\index{KRB5\_GC\_USER\_USER (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_GC\_USER\_USER}\spxextra{built\sphinxhyphen{}in variable}}
24173
24174\begin{fulllineitems}
24175\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_USER_USER:KRB5_GC_USER_USER}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_GC\_USER\_USER}}}
24176\end{fulllineitems}
24177
24178
24179\sphinxAtStartPar
24180Want user\sphinxhyphen{}user ticket.
24181
24182
24183\begin{savenotes}\sphinxattablestart
24184\centering
24185\begin{tabulary}{\linewidth}[t]{|T|T|}
24186\hline
24187
24188\sphinxAtStartPar
24189\sphinxcode{\sphinxupquote{KRB5\_GC\_USER\_USER}}
24190&
24191\sphinxAtStartPar
24192\sphinxcode{\sphinxupquote{1}}
24193\\
24194\hline
24195\end{tabulary}
24196\par
24197\sphinxattableend\end{savenotes}
24198
24199
24200\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_ADDRESS\_LIST}
24201\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:krb5-get-init-creds-opt-address-list-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ADDRESS_LIST::doc}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_ADDRESS\_LIST (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_GET\_INIT\_CREDS\_OPT\_ADDRESS\_LIST}\spxextra{built\sphinxhyphen{}in variable}}
24202
24203\begin{fulllineitems}
24204\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ADDRESS_LIST:KRB5_GET_INIT_CREDS_OPT_ADDRESS_LIST}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_ADDRESS\_LIST}}}
24205\end{fulllineitems}
24206
24207
24208
24209\begin{savenotes}\sphinxattablestart
24210\centering
24211\begin{tabulary}{\linewidth}[t]{|T|T|}
24212\hline
24213
24214\sphinxAtStartPar
24215\sphinxcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_ADDRESS\_LIST}}
24216&
24217\sphinxAtStartPar
24218\sphinxcode{\sphinxupquote{0x0020}}
24219\\
24220\hline
24221\end{tabulary}
24222\par
24223\sphinxattableend\end{savenotes}
24224
24225
24226\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_ANONYMOUS}
24227\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ANONYMOUS:krb5-get-init-creds-opt-anonymous}}\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}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_ANONYMOUS (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_GET\_INIT\_CREDS\_OPT\_ANONYMOUS}\spxextra{built\sphinxhyphen{}in variable}}
24228
24229\begin{fulllineitems}
24230\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ANONYMOUS:KRB5_GET_INIT_CREDS_OPT_ANONYMOUS}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_ANONYMOUS}}}
24231\end{fulllineitems}
24232
24233
24234
24235\begin{savenotes}\sphinxattablestart
24236\centering
24237\begin{tabulary}{\linewidth}[t]{|T|T|}
24238\hline
24239
24240\sphinxAtStartPar
24241\sphinxcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_ANONYMOUS}}
24242&
24243\sphinxAtStartPar
24244\sphinxcode{\sphinxupquote{0x0400}}
24245\\
24246\hline
24247\end{tabulary}
24248\par
24249\sphinxattableend\end{savenotes}
24250
24251
24252\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_CANONICALIZE}
24253\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CANONICALIZE:krb5-get-init-creds-opt-canonicalize}}\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::doc}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_CANONICALIZE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_GET\_INIT\_CREDS\_OPT\_CANONICALIZE}\spxextra{built\sphinxhyphen{}in variable}}
24254
24255\begin{fulllineitems}
24256\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CANONICALIZE:KRB5_GET_INIT_CREDS_OPT_CANONICALIZE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_CANONICALIZE}}}
24257\end{fulllineitems}
24258
24259
24260
24261\begin{savenotes}\sphinxattablestart
24262\centering
24263\begin{tabulary}{\linewidth}[t]{|T|T|}
24264\hline
24265
24266\sphinxAtStartPar
24267\sphinxcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_CANONICALIZE}}
24268&
24269\sphinxAtStartPar
24270\sphinxcode{\sphinxupquote{0x0200}}
24271\\
24272\hline
24273\end{tabulary}
24274\par
24275\sphinxattableend\end{savenotes}
24276
24277
24278\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_CHG\_PWD\_PRMPT}
24279\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}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CHG_PWD_PRMPT::doc}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_CHG\_PWD\_PRMPT (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_GET\_INIT\_CREDS\_OPT\_CHG\_PWD\_PRMPT}\spxextra{built\sphinxhyphen{}in variable}}
24280
24281\begin{fulllineitems}
24282\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CHG_PWD_PRMPT:KRB5_GET_INIT_CREDS_OPT_CHG_PWD_PRMPT}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_CHG\_PWD\_PRMPT}}}
24283\end{fulllineitems}
24284
24285
24286
24287\begin{savenotes}\sphinxattablestart
24288\centering
24289\begin{tabulary}{\linewidth}[t]{|T|T|}
24290\hline
24291
24292\sphinxAtStartPar
24293\sphinxcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_CHG\_PWD\_PRMPT}}
24294&
24295\sphinxAtStartPar
24296\sphinxcode{\sphinxupquote{0x0100}}
24297\\
24298\hline
24299\end{tabulary}
24300\par
24301\sphinxattableend\end{savenotes}
24302
24303
24304\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_ETYPE\_LIST}
24305\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:krb5-get-init-creds-opt-etype-list-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST::doc}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_ETYPE\_LIST (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_GET\_INIT\_CREDS\_OPT\_ETYPE\_LIST}\spxextra{built\sphinxhyphen{}in variable}}
24306
24307\begin{fulllineitems}
24308\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST:KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_ETYPE\_LIST}}}
24309\end{fulllineitems}
24310
24311
24312
24313\begin{savenotes}\sphinxattablestart
24314\centering
24315\begin{tabulary}{\linewidth}[t]{|T|T|}
24316\hline
24317
24318\sphinxAtStartPar
24319\sphinxcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_ETYPE\_LIST}}
24320&
24321\sphinxAtStartPar
24322\sphinxcode{\sphinxupquote{0x0010}}
24323\\
24324\hline
24325\end{tabulary}
24326\par
24327\sphinxattableend\end{savenotes}
24328
24329
24330\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_FORWARDABLE}
24331\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}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_FORWARDABLE::doc}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_FORWARDABLE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_GET\_INIT\_CREDS\_OPT\_FORWARDABLE}\spxextra{built\sphinxhyphen{}in variable}}
24332
24333\begin{fulllineitems}
24334\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_FORWARDABLE:KRB5_GET_INIT_CREDS_OPT_FORWARDABLE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_FORWARDABLE}}}
24335\end{fulllineitems}
24336
24337
24338
24339\begin{savenotes}\sphinxattablestart
24340\centering
24341\begin{tabulary}{\linewidth}[t]{|T|T|}
24342\hline
24343
24344\sphinxAtStartPar
24345\sphinxcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_FORWARDABLE}}
24346&
24347\sphinxAtStartPar
24348\sphinxcode{\sphinxupquote{0x0004}}
24349\\
24350\hline
24351\end{tabulary}
24352\par
24353\sphinxattableend\end{savenotes}
24354
24355
24356\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_PREAUTH\_LIST}
24357\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_GET\_INIT\_CREDS\_OPT\_PREAUTH\_LIST}\spxextra{built\sphinxhyphen{}in variable}}
24358
24359\begin{fulllineitems}
24360\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PREAUTH_LIST:KRB5_GET_INIT_CREDS_OPT_PREAUTH_LIST}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_PREAUTH\_LIST}}}
24361\end{fulllineitems}
24362
24363
24364
24365\begin{savenotes}\sphinxattablestart
24366\centering
24367\begin{tabulary}{\linewidth}[t]{|T|T|}
24368\hline
24369
24370\sphinxAtStartPar
24371\sphinxcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_PREAUTH\_LIST}}
24372&
24373\sphinxAtStartPar
24374\sphinxcode{\sphinxupquote{0x0040}}
24375\\
24376\hline
24377\end{tabulary}
24378\par
24379\sphinxattableend\end{savenotes}
24380
24381
24382\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_PROXIABLE}
24383\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:krb5-get-init-creds-opt-proxiable-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PROXIABLE::doc}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_PROXIABLE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_GET\_INIT\_CREDS\_OPT\_PROXIABLE}\spxextra{built\sphinxhyphen{}in variable}}
24384
24385\begin{fulllineitems}
24386\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PROXIABLE:KRB5_GET_INIT_CREDS_OPT_PROXIABLE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_PROXIABLE}}}
24387\end{fulllineitems}
24388
24389
24390
24391\begin{savenotes}\sphinxattablestart
24392\centering
24393\begin{tabulary}{\linewidth}[t]{|T|T|}
24394\hline
24395
24396\sphinxAtStartPar
24397\sphinxcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_PROXIABLE}}
24398&
24399\sphinxAtStartPar
24400\sphinxcode{\sphinxupquote{0x0008}}
24401\\
24402\hline
24403\end{tabulary}
24404\par
24405\sphinxattableend\end{savenotes}
24406
24407
24408\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_RENEW\_LIFE}
24409\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_RENEW_LIFE:krb5-get-init-creds-opt-renew-life}}\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::doc}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_RENEW\_LIFE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_GET\_INIT\_CREDS\_OPT\_RENEW\_LIFE}\spxextra{built\sphinxhyphen{}in variable}}
24410
24411\begin{fulllineitems}
24412\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_RENEW_LIFE:KRB5_GET_INIT_CREDS_OPT_RENEW_LIFE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_RENEW\_LIFE}}}
24413\end{fulllineitems}
24414
24415
24416
24417\begin{savenotes}\sphinxattablestart
24418\centering
24419\begin{tabulary}{\linewidth}[t]{|T|T|}
24420\hline
24421
24422\sphinxAtStartPar
24423\sphinxcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_RENEW\_LIFE}}
24424&
24425\sphinxAtStartPar
24426\sphinxcode{\sphinxupquote{0x0002}}
24427\\
24428\hline
24429\end{tabulary}
24430\par
24431\sphinxattableend\end{savenotes}
24432
24433
24434\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_SALT}
24435\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:krb5-get-init-creds-opt-salt-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_SALT::doc}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_SALT (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_GET\_INIT\_CREDS\_OPT\_SALT}\spxextra{built\sphinxhyphen{}in variable}}
24436
24437\begin{fulllineitems}
24438\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_SALT:KRB5_GET_INIT_CREDS_OPT_SALT}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_SALT}}}
24439\end{fulllineitems}
24440
24441
24442
24443\begin{savenotes}\sphinxattablestart
24444\centering
24445\begin{tabulary}{\linewidth}[t]{|T|T|}
24446\hline
24447
24448\sphinxAtStartPar
24449\sphinxcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_SALT}}
24450&
24451\sphinxAtStartPar
24452\sphinxcode{\sphinxupquote{0x0080}}
24453\\
24454\hline
24455\end{tabulary}
24456\par
24457\sphinxattableend\end{savenotes}
24458
24459
24460\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_TKT\_LIFE}
24461\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_TKT_LIFE:krb5-get-init-creds-opt-tkt-life}}\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::doc}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_TKT\_LIFE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_GET\_INIT\_CREDS\_OPT\_TKT\_LIFE}\spxextra{built\sphinxhyphen{}in variable}}
24462
24463\begin{fulllineitems}
24464\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_TKT_LIFE:KRB5_GET_INIT_CREDS_OPT_TKT_LIFE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_TKT\_LIFE}}}
24465\end{fulllineitems}
24466
24467
24468
24469\begin{savenotes}\sphinxattablestart
24470\centering
24471\begin{tabulary}{\linewidth}[t]{|T|T|}
24472\hline
24473
24474\sphinxAtStartPar
24475\sphinxcode{\sphinxupquote{KRB5\_GET\_INIT\_CREDS\_OPT\_TKT\_LIFE}}
24476&
24477\sphinxAtStartPar
24478\sphinxcode{\sphinxupquote{0x0001}}
24479\\
24480\hline
24481\end{tabulary}
24482\par
24483\sphinxattableend\end{savenotes}
24484
24485
24486\subsubsection{KRB5\_INIT\_CONTEXT\_SECURE}
24487\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}}\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_SECURE::doc}}\index{KRB5\_INIT\_CONTEXT\_SECURE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_INIT\_CONTEXT\_SECURE}\spxextra{built\sphinxhyphen{}in variable}}
24488
24489\begin{fulllineitems}
24490\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_SECURE:KRB5_INIT_CONTEXT_SECURE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_INIT\_CONTEXT\_SECURE}}}
24491\end{fulllineitems}
24492
24493
24494\sphinxAtStartPar
24495Use secure context configuration.
24496
24497
24498\begin{savenotes}\sphinxattablestart
24499\centering
24500\begin{tabulary}{\linewidth}[t]{|T|T|}
24501\hline
24502
24503\sphinxAtStartPar
24504\sphinxcode{\sphinxupquote{KRB5\_INIT\_CONTEXT\_SECURE}}
24505&
24506\sphinxAtStartPar
24507\sphinxcode{\sphinxupquote{0x1}}
24508\\
24509\hline
24510\end{tabulary}
24511\par
24512\sphinxattableend\end{savenotes}
24513
24514
24515\subsubsection{KRB5\_INIT\_CONTEXT\_KDC}
24516\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_KDC:krb5-init-context-kdc}}\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_KDC:krb5-init-context-kdc-data}}\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_KDC::doc}}\index{KRB5\_INIT\_CONTEXT\_KDC (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_INIT\_CONTEXT\_KDC}\spxextra{built\sphinxhyphen{}in variable}}
24517
24518\begin{fulllineitems}
24519\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_KDC:KRB5_INIT_CONTEXT_KDC}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_INIT\_CONTEXT\_KDC}}}
24520\end{fulllineitems}
24521
24522
24523\sphinxAtStartPar
24524Use KDC configuration if available.
24525
24526
24527\begin{savenotes}\sphinxattablestart
24528\centering
24529\begin{tabulary}{\linewidth}[t]{|T|T|}
24530\hline
24531
24532\sphinxAtStartPar
24533\sphinxcode{\sphinxupquote{KRB5\_INIT\_CONTEXT\_KDC}}
24534&
24535\sphinxAtStartPar
24536\sphinxcode{\sphinxupquote{0x2}}
24537\\
24538\hline
24539\end{tabulary}
24540\par
24541\sphinxattableend\end{savenotes}
24542
24543
24544\subsubsection{KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE}
24545\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:krb5-init-creds-step-flag-continue-data}}\label{\detokenize{appdev/refs/macros/KRB5_INIT_CREDS_STEP_FLAG_CONTINUE::doc}}\index{KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE}\spxextra{built\sphinxhyphen{}in variable}}
24546
24547\begin{fulllineitems}
24548\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INIT_CREDS_STEP_FLAG_CONTINUE:KRB5_INIT_CREDS_STEP_FLAG_CONTINUE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE}}}
24549\end{fulllineitems}
24550
24551
24552\sphinxAtStartPar
24553More responses needed.
24554
24555
24556\begin{savenotes}\sphinxattablestart
24557\centering
24558\begin{tabulary}{\linewidth}[t]{|T|T|}
24559\hline
24560
24561\sphinxAtStartPar
24562\sphinxcode{\sphinxupquote{KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE}}
24563&
24564\sphinxAtStartPar
24565\sphinxcode{\sphinxupquote{0x1}}
24566\\
24567\hline
24568\end{tabulary}
24569\par
24570\sphinxattableend\end{savenotes}
24571
24572
24573\subsubsection{KRB5\_INT16\_MAX}
24574\label{\detokenize{appdev/refs/macros/KRB5_INT16_MAX:krb5-int16-max}}\label{\detokenize{appdev/refs/macros/KRB5_INT16_MAX:krb5-int16-max-data}}\label{\detokenize{appdev/refs/macros/KRB5_INT16_MAX::doc}}\index{KRB5\_INT16\_MAX (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_INT16\_MAX}\spxextra{built\sphinxhyphen{}in variable}}
24575
24576\begin{fulllineitems}
24577\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INT16_MAX:KRB5_INT16_MAX}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_INT16\_MAX}}}
24578\end{fulllineitems}
24579
24580
24581
24582\begin{savenotes}\sphinxattablestart
24583\centering
24584\begin{tabulary}{\linewidth}[t]{|T|T|}
24585\hline
24586
24587\sphinxAtStartPar
24588\sphinxcode{\sphinxupquote{KRB5\_INT16\_MAX}}
24589&
24590\sphinxAtStartPar
24591\sphinxcode{\sphinxupquote{65535}}
24592\\
24593\hline
24594\end{tabulary}
24595\par
24596\sphinxattableend\end{savenotes}
24597
24598
24599\subsubsection{KRB5\_INT16\_MIN}
24600\label{\detokenize{appdev/refs/macros/KRB5_INT16_MIN:krb5-int16-min}}\label{\detokenize{appdev/refs/macros/KRB5_INT16_MIN:krb5-int16-min-data}}\label{\detokenize{appdev/refs/macros/KRB5_INT16_MIN::doc}}\index{KRB5\_INT16\_MIN (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_INT16\_MIN}\spxextra{built\sphinxhyphen{}in variable}}
24601
24602\begin{fulllineitems}
24603\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INT16_MIN:KRB5_INT16_MIN}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_INT16\_MIN}}}
24604\end{fulllineitems}
24605
24606
24607
24608\begin{savenotes}\sphinxattablestart
24609\centering
24610\begin{tabulary}{\linewidth}[t]{|T|T|}
24611\hline
24612
24613\sphinxAtStartPar
24614\sphinxcode{\sphinxupquote{KRB5\_INT16\_MIN}}
24615&
24616\sphinxAtStartPar
24617\sphinxcode{\sphinxupquote{(\sphinxhyphen{}KRB5\_INT16\_MAX\sphinxhyphen{}1)}}
24618\\
24619\hline
24620\end{tabulary}
24621\par
24622\sphinxattableend\end{savenotes}
24623
24624
24625\subsubsection{KRB5\_INT32\_MAX}
24626\label{\detokenize{appdev/refs/macros/KRB5_INT32_MAX:krb5-int32-max}}\label{\detokenize{appdev/refs/macros/KRB5_INT32_MAX:krb5-int32-max-data}}\label{\detokenize{appdev/refs/macros/KRB5_INT32_MAX::doc}}\index{KRB5\_INT32\_MAX (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_INT32\_MAX}\spxextra{built\sphinxhyphen{}in variable}}
24627
24628\begin{fulllineitems}
24629\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INT32_MAX:KRB5_INT32_MAX}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_INT32\_MAX}}}
24630\end{fulllineitems}
24631
24632
24633
24634\begin{savenotes}\sphinxattablestart
24635\centering
24636\begin{tabulary}{\linewidth}[t]{|T|T|}
24637\hline
24638
24639\sphinxAtStartPar
24640\sphinxcode{\sphinxupquote{KRB5\_INT32\_MAX}}
24641&
24642\sphinxAtStartPar
24643\sphinxcode{\sphinxupquote{2147483647}}
24644\\
24645\hline
24646\end{tabulary}
24647\par
24648\sphinxattableend\end{savenotes}
24649
24650
24651\subsubsection{KRB5\_INT32\_MIN}
24652\label{\detokenize{appdev/refs/macros/KRB5_INT32_MIN:krb5-int32-min}}\label{\detokenize{appdev/refs/macros/KRB5_INT32_MIN:krb5-int32-min-data}}\label{\detokenize{appdev/refs/macros/KRB5_INT32_MIN::doc}}\index{KRB5\_INT32\_MIN (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_INT32\_MIN}\spxextra{built\sphinxhyphen{}in variable}}
24653
24654\begin{fulllineitems}
24655\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INT32_MIN:KRB5_INT32_MIN}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_INT32\_MIN}}}
24656\end{fulllineitems}
24657
24658
24659
24660\begin{savenotes}\sphinxattablestart
24661\centering
24662\begin{tabulary}{\linewidth}[t]{|T|T|}
24663\hline
24664
24665\sphinxAtStartPar
24666\sphinxcode{\sphinxupquote{KRB5\_INT32\_MIN}}
24667&
24668\sphinxAtStartPar
24669\sphinxcode{\sphinxupquote{(\sphinxhyphen{}KRB5\_INT32\_MAX\sphinxhyphen{}1)}}
24670\\
24671\hline
24672\end{tabulary}
24673\par
24674\sphinxattableend\end{savenotes}
24675
24676
24677\subsubsection{KRB5\_KEYUSAGE\_AD\_ITE}
24678\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_ITE:krb5-keyusage-ad-ite}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_ITE:krb5-keyusage-ad-ite-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_ITE::doc}}\index{KRB5\_KEYUSAGE\_AD\_ITE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_AD\_ITE}\spxextra{built\sphinxhyphen{}in variable}}
24679
24680\begin{fulllineitems}
24681\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_ITE:KRB5_KEYUSAGE_AD_ITE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_AD\_ITE}}}
24682\end{fulllineitems}
24683
24684
24685
24686\begin{savenotes}\sphinxattablestart
24687\centering
24688\begin{tabulary}{\linewidth}[t]{|T|T|}
24689\hline
24690
24691\sphinxAtStartPar
24692\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_AD\_ITE}}
24693&
24694\sphinxAtStartPar
24695\sphinxcode{\sphinxupquote{21}}
24696\\
24697\hline
24698\end{tabulary}
24699\par
24700\sphinxattableend\end{savenotes}
24701
24702
24703\subsubsection{KRB5\_KEYUSAGE\_AD\_KDCISSUED\_CKSUM}
24704\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM:krb5-keyusage-ad-kdcissued-cksum}}\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::doc}}\index{KRB5\_KEYUSAGE\_AD\_KDCISSUED\_CKSUM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_AD\_KDCISSUED\_CKSUM}\spxextra{built\sphinxhyphen{}in variable}}
24705
24706\begin{fulllineitems}
24707\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM:KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_AD\_KDCISSUED\_CKSUM}}}
24708\end{fulllineitems}
24709
24710
24711
24712\begin{savenotes}\sphinxattablestart
24713\centering
24714\begin{tabulary}{\linewidth}[t]{|T|T|}
24715\hline
24716
24717\sphinxAtStartPar
24718\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_AD\_KDCISSUED\_CKSUM}}
24719&
24720\sphinxAtStartPar
24721\sphinxcode{\sphinxupquote{19}}
24722\\
24723\hline
24724\end{tabulary}
24725\par
24726\sphinxattableend\end{savenotes}
24727
24728
24729\subsubsection{KRB5\_KEYUSAGE\_AD\_MTE}
24730\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_MTE:krb5-keyusage-ad-mte}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_MTE:krb5-keyusage-ad-mte-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_MTE::doc}}\index{KRB5\_KEYUSAGE\_AD\_MTE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_AD\_MTE}\spxextra{built\sphinxhyphen{}in variable}}
24731
24732\begin{fulllineitems}
24733\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_MTE:KRB5_KEYUSAGE_AD_MTE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_AD\_MTE}}}
24734\end{fulllineitems}
24735
24736
24737
24738\begin{savenotes}\sphinxattablestart
24739\centering
24740\begin{tabulary}{\linewidth}[t]{|T|T|}
24741\hline
24742
24743\sphinxAtStartPar
24744\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_AD\_MTE}}
24745&
24746\sphinxAtStartPar
24747\sphinxcode{\sphinxupquote{20}}
24748\\
24749\hline
24750\end{tabulary}
24751\par
24752\sphinxattableend\end{savenotes}
24753
24754
24755\subsubsection{KRB5\_KEYUSAGE\_AD\_SIGNEDPATH}
24756\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_SIGNEDPATH:krb5-keyusage-ad-signedpath}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_SIGNEDPATH:krb5-keyusage-ad-signedpath-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_SIGNEDPATH::doc}}\index{KRB5\_KEYUSAGE\_AD\_SIGNEDPATH (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_AD\_SIGNEDPATH}\spxextra{built\sphinxhyphen{}in variable}}
24757
24758\begin{fulllineitems}
24759\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_SIGNEDPATH:KRB5_KEYUSAGE_AD_SIGNEDPATH}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_AD\_SIGNEDPATH}}}
24760\end{fulllineitems}
24761
24762
24763
24764\begin{savenotes}\sphinxattablestart
24765\centering
24766\begin{tabulary}{\linewidth}[t]{|T|T|}
24767\hline
24768
24769\sphinxAtStartPar
24770\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_AD\_SIGNEDPATH}}
24771&
24772\sphinxAtStartPar
24773\sphinxcode{\sphinxupquote{\sphinxhyphen{}21}}
24774\\
24775\hline
24776\end{tabulary}
24777\par
24778\sphinxattableend\end{savenotes}
24779
24780
24781\subsubsection{KRB5\_KEYUSAGE\_APP\_DATA\_CKSUM}
24782\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_CKSUM:krb5-keyusage-app-data-cksum}}\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}}\index{KRB5\_KEYUSAGE\_APP\_DATA\_CKSUM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_APP\_DATA\_CKSUM}\spxextra{built\sphinxhyphen{}in variable}}
24783
24784\begin{fulllineitems}
24785\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_CKSUM:KRB5_KEYUSAGE_APP_DATA_CKSUM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_APP\_DATA\_CKSUM}}}
24786\end{fulllineitems}
24787
24788
24789
24790\begin{savenotes}\sphinxattablestart
24791\centering
24792\begin{tabulary}{\linewidth}[t]{|T|T|}
24793\hline
24794
24795\sphinxAtStartPar
24796\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_APP\_DATA\_CKSUM}}
24797&
24798\sphinxAtStartPar
24799\sphinxcode{\sphinxupquote{17}}
24800\\
24801\hline
24802\end{tabulary}
24803\par
24804\sphinxattableend\end{savenotes}
24805
24806
24807\subsubsection{KRB5\_KEYUSAGE\_APP\_DATA\_ENCRYPT}
24808\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_APP\_DATA\_ENCRYPT}\spxextra{built\sphinxhyphen{}in variable}}
24809
24810\begin{fulllineitems}
24811\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_ENCRYPT:KRB5_KEYUSAGE_APP_DATA_ENCRYPT}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_APP\_DATA\_ENCRYPT}}}
24812\end{fulllineitems}
24813
24814
24815
24816\begin{savenotes}\sphinxattablestart
24817\centering
24818\begin{tabulary}{\linewidth}[t]{|T|T|}
24819\hline
24820
24821\sphinxAtStartPar
24822\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_APP\_DATA\_ENCRYPT}}
24823&
24824\sphinxAtStartPar
24825\sphinxcode{\sphinxupquote{16}}
24826\\
24827\hline
24828\end{tabulary}
24829\par
24830\sphinxattableend\end{savenotes}
24831
24832
24833\subsubsection{KRB5\_KEYUSAGE\_AP\_REP\_ENCPART}
24834\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}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REP_ENCPART::doc}}\index{KRB5\_KEYUSAGE\_AP\_REP\_ENCPART (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_AP\_REP\_ENCPART}\spxextra{built\sphinxhyphen{}in variable}}
24835
24836\begin{fulllineitems}
24837\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REP_ENCPART:KRB5_KEYUSAGE_AP_REP_ENCPART}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_AP\_REP\_ENCPART}}}
24838\end{fulllineitems}
24839
24840
24841
24842\begin{savenotes}\sphinxattablestart
24843\centering
24844\begin{tabulary}{\linewidth}[t]{|T|T|}
24845\hline
24846
24847\sphinxAtStartPar
24848\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_AP\_REP\_ENCPART}}
24849&
24850\sphinxAtStartPar
24851\sphinxcode{\sphinxupquote{12}}
24852\\
24853\hline
24854\end{tabulary}
24855\par
24856\sphinxattableend\end{savenotes}
24857
24858
24859\subsubsection{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH}
24860\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}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH::doc}}\index{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH}\spxextra{built\sphinxhyphen{}in variable}}
24861
24862\begin{fulllineitems}
24863\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH:KRB5_KEYUSAGE_AP_REQ_AUTH}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH}}}
24864\end{fulllineitems}
24865
24866
24867
24868\begin{savenotes}\sphinxattablestart
24869\centering
24870\begin{tabulary}{\linewidth}[t]{|T|T|}
24871\hline
24872
24873\sphinxAtStartPar
24874\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH}}
24875&
24876\sphinxAtStartPar
24877\sphinxcode{\sphinxupquote{11}}
24878\\
24879\hline
24880\end{tabulary}
24881\par
24882\sphinxattableend\end{savenotes}
24883
24884
24885\subsubsection{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH\_CKSUM}
24886\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:krb5-keyusage-ap-req-auth-cksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH_CKSUM::doc}}\index{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH\_CKSUM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH\_CKSUM}\spxextra{built\sphinxhyphen{}in variable}}
24887
24888\begin{fulllineitems}
24889\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH_CKSUM:KRB5_KEYUSAGE_AP_REQ_AUTH_CKSUM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH\_CKSUM}}}
24890\end{fulllineitems}
24891
24892
24893
24894\begin{savenotes}\sphinxattablestart
24895\centering
24896\begin{tabulary}{\linewidth}[t]{|T|T|}
24897\hline
24898
24899\sphinxAtStartPar
24900\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH\_CKSUM}}
24901&
24902\sphinxAtStartPar
24903\sphinxcode{\sphinxupquote{10}}
24904\\
24905\hline
24906\end{tabulary}
24907\par
24908\sphinxattableend\end{savenotes}
24909
24910
24911\subsubsection{KRB5\_KEYUSAGE\_AS\_REP\_ENCPART}
24912\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REP_ENCPART:krb5-keyusage-as-rep-encpart}}\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}}\index{KRB5\_KEYUSAGE\_AS\_REP\_ENCPART (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_AS\_REP\_ENCPART}\spxextra{built\sphinxhyphen{}in variable}}
24913
24914\begin{fulllineitems}
24915\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REP_ENCPART:KRB5_KEYUSAGE_AS_REP_ENCPART}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_AS\_REP\_ENCPART}}}
24916\end{fulllineitems}
24917
24918
24919
24920\begin{savenotes}\sphinxattablestart
24921\centering
24922\begin{tabulary}{\linewidth}[t]{|T|T|}
24923\hline
24924
24925\sphinxAtStartPar
24926\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_AS\_REP\_ENCPART}}
24927&
24928\sphinxAtStartPar
24929\sphinxcode{\sphinxupquote{3}}
24930\\
24931\hline
24932\end{tabulary}
24933\par
24934\sphinxattableend\end{savenotes}
24935
24936
24937\subsubsection{KRB5\_KEYUSAGE\_AS\_REQ}
24938\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ:krb5-keyusage-as-req}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ:krb5-keyusage-as-req-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ::doc}}\index{KRB5\_KEYUSAGE\_AS\_REQ (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_AS\_REQ}\spxextra{built\sphinxhyphen{}in variable}}
24939
24940\begin{fulllineitems}
24941\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ:KRB5_KEYUSAGE_AS_REQ}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_AS\_REQ}}}
24942\end{fulllineitems}
24943
24944
24945
24946\begin{savenotes}\sphinxattablestart
24947\centering
24948\begin{tabulary}{\linewidth}[t]{|T|T|}
24949\hline
24950
24951\sphinxAtStartPar
24952\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_AS\_REQ}}
24953&
24954\sphinxAtStartPar
24955\sphinxcode{\sphinxupquote{56}}
24956\\
24957\hline
24958\end{tabulary}
24959\par
24960\sphinxattableend\end{savenotes}
24961
24962
24963\subsubsection{KRB5\_KEYUSAGE\_AS\_REQ\_PA\_ENC\_TS}
24964\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ_PA_ENC_TS:krb5-keyusage-as-req-pa-enc-ts}}\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}}\index{KRB5\_KEYUSAGE\_AS\_REQ\_PA\_ENC\_TS (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_AS\_REQ\_PA\_ENC\_TS}\spxextra{built\sphinxhyphen{}in variable}}
24965
24966\begin{fulllineitems}
24967\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ_PA_ENC_TS:KRB5_KEYUSAGE_AS_REQ_PA_ENC_TS}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_AS\_REQ\_PA\_ENC\_TS}}}
24968\end{fulllineitems}
24969
24970
24971
24972\begin{savenotes}\sphinxattablestart
24973\centering
24974\begin{tabulary}{\linewidth}[t]{|T|T|}
24975\hline
24976
24977\sphinxAtStartPar
24978\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_AS\_REQ\_PA\_ENC\_TS}}
24979&
24980\sphinxAtStartPar
24981\sphinxcode{\sphinxupquote{1}}
24982\\
24983\hline
24984\end{tabulary}
24985\par
24986\sphinxattableend\end{savenotes}
24987
24988
24989\subsubsection{KRB5\_KEYUSAGE\_CAMMAC}
24990\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_CAMMAC:krb5-keyusage-cammac}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_CAMMAC:krb5-keyusage-cammac-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_CAMMAC::doc}}\index{KRB5\_KEYUSAGE\_CAMMAC (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_CAMMAC}\spxextra{built\sphinxhyphen{}in variable}}
24991
24992\begin{fulllineitems}
24993\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_CAMMAC:KRB5_KEYUSAGE_CAMMAC}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_CAMMAC}}}
24994\end{fulllineitems}
24995
24996
24997
24998\begin{savenotes}\sphinxattablestart
24999\centering
25000\begin{tabulary}{\linewidth}[t]{|T|T|}
25001\hline
25002
25003\sphinxAtStartPar
25004\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_CAMMAC}}
25005&
25006\sphinxAtStartPar
25007\sphinxcode{\sphinxupquote{64}}
25008\\
25009\hline
25010\end{tabulary}
25011\par
25012\sphinxattableend\end{savenotes}
25013
25014
25015\subsubsection{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_CLIENT}
25016\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT:krb5-keyusage-enc-challenge-client}}\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}}\index{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_CLIENT (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_CLIENT}\spxextra{built\sphinxhyphen{}in variable}}
25017
25018\begin{fulllineitems}
25019\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT:KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_CLIENT}}}
25020\end{fulllineitems}
25021
25022
25023
25024\begin{savenotes}\sphinxattablestart
25025\centering
25026\begin{tabulary}{\linewidth}[t]{|T|T|}
25027\hline
25028
25029\sphinxAtStartPar
25030\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_CLIENT}}
25031&
25032\sphinxAtStartPar
25033\sphinxcode{\sphinxupquote{54}}
25034\\
25035\hline
25036\end{tabulary}
25037\par
25038\sphinxattableend\end{savenotes}
25039
25040
25041\subsubsection{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_KDC}
25042\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:krb5-keyusage-enc-challenge-kdc-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_KDC::doc}}\index{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_KDC (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_KDC}\spxextra{built\sphinxhyphen{}in variable}}
25043
25044\begin{fulllineitems}
25045\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_KDC:KRB5_KEYUSAGE_ENC_CHALLENGE_KDC}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_KDC}}}
25046\end{fulllineitems}
25047
25048
25049
25050\begin{savenotes}\sphinxattablestart
25051\centering
25052\begin{tabulary}{\linewidth}[t]{|T|T|}
25053\hline
25054
25055\sphinxAtStartPar
25056\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_KDC}}
25057&
25058\sphinxAtStartPar
25059\sphinxcode{\sphinxupquote{55}}
25060\\
25061\hline
25062\end{tabulary}
25063\par
25064\sphinxattableend\end{savenotes}
25065
25066
25067\subsubsection{KRB5\_KEYUSAGE\_FAST\_ENC}
25068\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_ENC:krb5-keyusage-fast-enc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_ENC:krb5-keyusage-fast-enc-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_ENC::doc}}\index{KRB5\_KEYUSAGE\_FAST\_ENC (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_FAST\_ENC}\spxextra{built\sphinxhyphen{}in variable}}
25069
25070\begin{fulllineitems}
25071\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_ENC:KRB5_KEYUSAGE_FAST_ENC}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_FAST\_ENC}}}
25072\end{fulllineitems}
25073
25074
25075
25076\begin{savenotes}\sphinxattablestart
25077\centering
25078\begin{tabulary}{\linewidth}[t]{|T|T|}
25079\hline
25080
25081\sphinxAtStartPar
25082\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_FAST\_ENC}}
25083&
25084\sphinxAtStartPar
25085\sphinxcode{\sphinxupquote{51}}
25086\\
25087\hline
25088\end{tabulary}
25089\par
25090\sphinxattableend\end{savenotes}
25091
25092
25093\subsubsection{KRB5\_KEYUSAGE\_FAST\_FINISHED}
25094\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_FINISHED:krb5-keyusage-fast-finished}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_FINISHED:krb5-keyusage-fast-finished-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_FINISHED::doc}}\index{KRB5\_KEYUSAGE\_FAST\_FINISHED (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_FAST\_FINISHED}\spxextra{built\sphinxhyphen{}in variable}}
25095
25096\begin{fulllineitems}
25097\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_FINISHED:KRB5_KEYUSAGE_FAST_FINISHED}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_FAST\_FINISHED}}}
25098\end{fulllineitems}
25099
25100
25101
25102\begin{savenotes}\sphinxattablestart
25103\centering
25104\begin{tabulary}{\linewidth}[t]{|T|T|}
25105\hline
25106
25107\sphinxAtStartPar
25108\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_FAST\_FINISHED}}
25109&
25110\sphinxAtStartPar
25111\sphinxcode{\sphinxupquote{53}}
25112\\
25113\hline
25114\end{tabulary}
25115\par
25116\sphinxattableend\end{savenotes}
25117
25118
25119\subsubsection{KRB5\_KEYUSAGE\_FAST\_REP}
25120\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REP:krb5-keyusage-fast-rep}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REP:krb5-keyusage-fast-rep-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REP::doc}}\index{KRB5\_KEYUSAGE\_FAST\_REP (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_FAST\_REP}\spxextra{built\sphinxhyphen{}in variable}}
25121
25122\begin{fulllineitems}
25123\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REP:KRB5_KEYUSAGE_FAST_REP}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_FAST\_REP}}}
25124\end{fulllineitems}
25125
25126
25127
25128\begin{savenotes}\sphinxattablestart
25129\centering
25130\begin{tabulary}{\linewidth}[t]{|T|T|}
25131\hline
25132
25133\sphinxAtStartPar
25134\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_FAST\_REP}}
25135&
25136\sphinxAtStartPar
25137\sphinxcode{\sphinxupquote{52}}
25138\\
25139\hline
25140\end{tabulary}
25141\par
25142\sphinxattableend\end{savenotes}
25143
25144
25145\subsubsection{KRB5\_KEYUSAGE\_FAST\_REQ\_CHKSUM}
25146\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REQ_CHKSUM:krb5-keyusage-fast-req-chksum}}\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}}\index{KRB5\_KEYUSAGE\_FAST\_REQ\_CHKSUM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_FAST\_REQ\_CHKSUM}\spxextra{built\sphinxhyphen{}in variable}}
25147
25148\begin{fulllineitems}
25149\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REQ_CHKSUM:KRB5_KEYUSAGE_FAST_REQ_CHKSUM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_FAST\_REQ\_CHKSUM}}}
25150\end{fulllineitems}
25151
25152
25153
25154\begin{savenotes}\sphinxattablestart
25155\centering
25156\begin{tabulary}{\linewidth}[t]{|T|T|}
25157\hline
25158
25159\sphinxAtStartPar
25160\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_FAST\_REQ\_CHKSUM}}
25161&
25162\sphinxAtStartPar
25163\sphinxcode{\sphinxupquote{50}}
25164\\
25165\hline
25166\end{tabulary}
25167\par
25168\sphinxattableend\end{savenotes}
25169
25170
25171\subsubsection{KRB5\_KEYUSAGE\_GSS\_TOK\_MIC}
25172\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:krb5-keyusage-gss-tok-mic-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_MIC::doc}}\index{KRB5\_KEYUSAGE\_GSS\_TOK\_MIC (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_GSS\_TOK\_MIC}\spxextra{built\sphinxhyphen{}in variable}}
25173
25174\begin{fulllineitems}
25175\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_MIC:KRB5_KEYUSAGE_GSS_TOK_MIC}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_GSS\_TOK\_MIC}}}
25176\end{fulllineitems}
25177
25178
25179
25180\begin{savenotes}\sphinxattablestart
25181\centering
25182\begin{tabulary}{\linewidth}[t]{|T|T|}
25183\hline
25184
25185\sphinxAtStartPar
25186\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_GSS\_TOK\_MIC}}
25187&
25188\sphinxAtStartPar
25189\sphinxcode{\sphinxupquote{22}}
25190\\
25191\hline
25192\end{tabulary}
25193\par
25194\sphinxattableend\end{savenotes}
25195
25196
25197\subsubsection{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_INTEG}
25198\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}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_INTEG::doc}}\index{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_INTEG (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_INTEG}\spxextra{built\sphinxhyphen{}in variable}}
25199
25200\begin{fulllineitems}
25201\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_INTEG:KRB5_KEYUSAGE_GSS_TOK_WRAP_INTEG}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_INTEG}}}
25202\end{fulllineitems}
25203
25204
25205
25206\begin{savenotes}\sphinxattablestart
25207\centering
25208\begin{tabulary}{\linewidth}[t]{|T|T|}
25209\hline
25210
25211\sphinxAtStartPar
25212\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_INTEG}}
25213&
25214\sphinxAtStartPar
25215\sphinxcode{\sphinxupquote{23}}
25216\\
25217\hline
25218\end{tabulary}
25219\par
25220\sphinxattableend\end{savenotes}
25221
25222
25223\subsubsection{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_PRIV}
25224\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_PRIV:krb5-keyusage-gss-tok-wrap-priv}}\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}}\index{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_PRIV (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_PRIV}\spxextra{built\sphinxhyphen{}in variable}}
25225
25226\begin{fulllineitems}
25227\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_PRIV:KRB5_KEYUSAGE_GSS_TOK_WRAP_PRIV}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_PRIV}}}
25228\end{fulllineitems}
25229
25230
25231
25232\begin{savenotes}\sphinxattablestart
25233\centering
25234\begin{tabulary}{\linewidth}[t]{|T|T|}
25235\hline
25236
25237\sphinxAtStartPar
25238\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_PRIV}}
25239&
25240\sphinxAtStartPar
25241\sphinxcode{\sphinxupquote{24}}
25242\\
25243\hline
25244\end{tabulary}
25245\par
25246\sphinxattableend\end{savenotes}
25247
25248
25249\subsubsection{KRB5\_KEYUSAGE\_IAKERB\_FINISHED}
25250\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_IAKERB_FINISHED:krb5-keyusage-iakerb-finished}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_IAKERB_FINISHED:krb5-keyusage-iakerb-finished-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_IAKERB_FINISHED::doc}}\index{KRB5\_KEYUSAGE\_IAKERB\_FINISHED (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_IAKERB\_FINISHED}\spxextra{built\sphinxhyphen{}in variable}}
25251
25252\begin{fulllineitems}
25253\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_IAKERB_FINISHED:KRB5_KEYUSAGE_IAKERB_FINISHED}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_IAKERB\_FINISHED}}}
25254\end{fulllineitems}
25255
25256
25257
25258\begin{savenotes}\sphinxattablestart
25259\centering
25260\begin{tabulary}{\linewidth}[t]{|T|T|}
25261\hline
25262
25263\sphinxAtStartPar
25264\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_IAKERB\_FINISHED}}
25265&
25266\sphinxAtStartPar
25267\sphinxcode{\sphinxupquote{42}}
25268\\
25269\hline
25270\end{tabulary}
25271\par
25272\sphinxattableend\end{savenotes}
25273
25274
25275\subsubsection{KRB5\_KEYUSAGE\_KDC\_REP\_TICKET}
25276\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KDC_REP_TICKET:krb5-keyusage-kdc-rep-ticket}}\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::doc}}\index{KRB5\_KEYUSAGE\_KDC\_REP\_TICKET (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_KDC\_REP\_TICKET}\spxextra{built\sphinxhyphen{}in variable}}
25277
25278\begin{fulllineitems}
25279\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KDC_REP_TICKET:KRB5_KEYUSAGE_KDC_REP_TICKET}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_KDC\_REP\_TICKET}}}
25280\end{fulllineitems}
25281
25282
25283
25284\begin{savenotes}\sphinxattablestart
25285\centering
25286\begin{tabulary}{\linewidth}[t]{|T|T|}
25287\hline
25288
25289\sphinxAtStartPar
25290\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_KDC\_REP\_TICKET}}
25291&
25292\sphinxAtStartPar
25293\sphinxcode{\sphinxupquote{2}}
25294\\
25295\hline
25296\end{tabulary}
25297\par
25298\sphinxattableend\end{savenotes}
25299
25300
25301\subsubsection{KRB5\_KEYUSAGE\_KRB\_CRED\_ENCPART}
25302\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_CRED_ENCPART:krb5-keyusage-krb-cred-encpart}}\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}}\index{KRB5\_KEYUSAGE\_KRB\_CRED\_ENCPART (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_KRB\_CRED\_ENCPART}\spxextra{built\sphinxhyphen{}in variable}}
25303
25304\begin{fulllineitems}
25305\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_CRED_ENCPART:KRB5_KEYUSAGE_KRB_CRED_ENCPART}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_KRB\_CRED\_ENCPART}}}
25306\end{fulllineitems}
25307
25308
25309
25310\begin{savenotes}\sphinxattablestart
25311\centering
25312\begin{tabulary}{\linewidth}[t]{|T|T|}
25313\hline
25314
25315\sphinxAtStartPar
25316\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_KRB\_CRED\_ENCPART}}
25317&
25318\sphinxAtStartPar
25319\sphinxcode{\sphinxupquote{14}}
25320\\
25321\hline
25322\end{tabulary}
25323\par
25324\sphinxattableend\end{savenotes}
25325
25326
25327\subsubsection{KRB5\_KEYUSAGE\_KRB\_ERROR\_CKSUM}
25328\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_ERROR_CKSUM:krb5-keyusage-krb-error-cksum}}\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}}\index{KRB5\_KEYUSAGE\_KRB\_ERROR\_CKSUM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_KRB\_ERROR\_CKSUM}\spxextra{built\sphinxhyphen{}in variable}}
25329
25330\begin{fulllineitems}
25331\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_ERROR_CKSUM:KRB5_KEYUSAGE_KRB_ERROR_CKSUM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_KRB\_ERROR\_CKSUM}}}
25332\end{fulllineitems}
25333
25334
25335
25336\begin{savenotes}\sphinxattablestart
25337\centering
25338\begin{tabulary}{\linewidth}[t]{|T|T|}
25339\hline
25340
25341\sphinxAtStartPar
25342\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_KRB\_ERROR\_CKSUM}}
25343&
25344\sphinxAtStartPar
25345\sphinxcode{\sphinxupquote{18}}
25346\\
25347\hline
25348\end{tabulary}
25349\par
25350\sphinxattableend\end{savenotes}
25351
25352
25353\subsubsection{KRB5\_KEYUSAGE\_KRB\_PRIV\_ENCPART}
25354\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_KRB\_PRIV\_ENCPART}\spxextra{built\sphinxhyphen{}in variable}}
25355
25356\begin{fulllineitems}
25357\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_PRIV_ENCPART:KRB5_KEYUSAGE_KRB_PRIV_ENCPART}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_KRB\_PRIV\_ENCPART}}}
25358\end{fulllineitems}
25359
25360
25361
25362\begin{savenotes}\sphinxattablestart
25363\centering
25364\begin{tabulary}{\linewidth}[t]{|T|T|}
25365\hline
25366
25367\sphinxAtStartPar
25368\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_KRB\_PRIV\_ENCPART}}
25369&
25370\sphinxAtStartPar
25371\sphinxcode{\sphinxupquote{13}}
25372\\
25373\hline
25374\end{tabulary}
25375\par
25376\sphinxattableend\end{savenotes}
25377
25378
25379\subsubsection{KRB5\_KEYUSAGE\_KRB\_SAFE\_CKSUM}
25380\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:krb5-keyusage-krb-safe-cksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_SAFE_CKSUM::doc}}\index{KRB5\_KEYUSAGE\_KRB\_SAFE\_CKSUM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_KRB\_SAFE\_CKSUM}\spxextra{built\sphinxhyphen{}in variable}}
25381
25382\begin{fulllineitems}
25383\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_SAFE_CKSUM:KRB5_KEYUSAGE_KRB_SAFE_CKSUM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_KRB\_SAFE\_CKSUM}}}
25384\end{fulllineitems}
25385
25386
25387
25388\begin{savenotes}\sphinxattablestart
25389\centering
25390\begin{tabulary}{\linewidth}[t]{|T|T|}
25391\hline
25392
25393\sphinxAtStartPar
25394\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_KRB\_SAFE\_CKSUM}}
25395&
25396\sphinxAtStartPar
25397\sphinxcode{\sphinxupquote{15}}
25398\\
25399\hline
25400\end{tabulary}
25401\par
25402\sphinxattableend\end{savenotes}
25403
25404
25405\subsubsection{KRB5\_KEYUSAGE\_PA\_AS\_FRESHNESS}
25406\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_PA\_AS\_FRESHNESS}\spxextra{built\sphinxhyphen{}in variable}}
25407
25408\begin{fulllineitems}
25409\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_AS_FRESHNESS:KRB5_KEYUSAGE_PA_AS_FRESHNESS}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_PA\_AS\_FRESHNESS}}}
25410\end{fulllineitems}
25411
25412
25413\sphinxAtStartPar
25414Used for freshness tokens.
25415
25416
25417\begin{savenotes}\sphinxattablestart
25418\centering
25419\begin{tabulary}{\linewidth}[t]{|T|T|}
25420\hline
25421
25422\sphinxAtStartPar
25423\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_PA\_AS\_FRESHNESS}}
25424&
25425\sphinxAtStartPar
25426\sphinxcode{\sphinxupquote{514}}
25427\\
25428\hline
25429\end{tabulary}
25430\par
25431\sphinxattableend\end{savenotes}
25432
25433
25434\subsubsection{KRB5\_KEYUSAGE\_PA\_FX\_COOKIE}
25435\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}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_FX_COOKIE::doc}}\index{KRB5\_KEYUSAGE\_PA\_FX\_COOKIE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_PA\_FX\_COOKIE}\spxextra{built\sphinxhyphen{}in variable}}
25436
25437\begin{fulllineitems}
25438\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_FX_COOKIE:KRB5_KEYUSAGE_PA_FX_COOKIE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_PA\_FX\_COOKIE}}}
25439\end{fulllineitems}
25440
25441
25442\sphinxAtStartPar
25443Used for encrypted FAST cookies.
25444
25445
25446\begin{savenotes}\sphinxattablestart
25447\centering
25448\begin{tabulary}{\linewidth}[t]{|T|T|}
25449\hline
25450
25451\sphinxAtStartPar
25452\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_PA\_FX\_COOKIE}}
25453&
25454\sphinxAtStartPar
25455\sphinxcode{\sphinxupquote{513}}
25456\\
25457\hline
25458\end{tabulary}
25459\par
25460\sphinxattableend\end{savenotes}
25461
25462
25463\subsubsection{KRB5\_KEYUSAGE\_PA\_OTP\_REQUEST}
25464\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_PA\_OTP\_REQUEST}\spxextra{built\sphinxhyphen{}in variable}}
25465
25466\begin{fulllineitems}
25467\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_OTP_REQUEST:KRB5_KEYUSAGE_PA_OTP_REQUEST}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_PA\_OTP\_REQUEST}}}
25468\end{fulllineitems}
25469
25470
25471\sphinxAtStartPar
25472See RFC 6560 section 4.2.
25473
25474
25475\begin{savenotes}\sphinxattablestart
25476\centering
25477\begin{tabulary}{\linewidth}[t]{|T|T|}
25478\hline
25479
25480\sphinxAtStartPar
25481\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_PA\_OTP\_REQUEST}}
25482&
25483\sphinxAtStartPar
25484\sphinxcode{\sphinxupquote{45}}
25485\\
25486\hline
25487\end{tabulary}
25488\par
25489\sphinxattableend\end{savenotes}
25490
25491
25492\subsubsection{KRB5\_KEYUSAGE\_PA\_PKINIT\_KX}
25493\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_PKINIT_KX:krb5-keyusage-pa-pkinit-kx}}\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::doc}}\index{KRB5\_KEYUSAGE\_PA\_PKINIT\_KX (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_PA\_PKINIT\_KX}\spxextra{built\sphinxhyphen{}in variable}}
25494
25495\begin{fulllineitems}
25496\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_PKINIT_KX:KRB5_KEYUSAGE_PA_PKINIT_KX}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_PA\_PKINIT\_KX}}}
25497\end{fulllineitems}
25498
25499
25500
25501\begin{savenotes}\sphinxattablestart
25502\centering
25503\begin{tabulary}{\linewidth}[t]{|T|T|}
25504\hline
25505
25506\sphinxAtStartPar
25507\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_PA\_PKINIT\_KX}}
25508&
25509\sphinxAtStartPar
25510\sphinxcode{\sphinxupquote{44}}
25511\\
25512\hline
25513\end{tabulary}
25514\par
25515\sphinxattableend\end{savenotes}
25516
25517
25518\subsubsection{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REPLY}
25519\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:krb5-keyusage-pa-s4u-x509-user-reply-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REPLY::doc}}\index{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REPLY (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REPLY}\spxextra{built\sphinxhyphen{}in variable}}
25520
25521\begin{fulllineitems}
25522\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REPLY:KRB5_KEYUSAGE_PA_S4U_X509_USER_REPLY}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REPLY}}}
25523\end{fulllineitems}
25524
25525
25526
25527\begin{savenotes}\sphinxattablestart
25528\centering
25529\begin{tabulary}{\linewidth}[t]{|T|T|}
25530\hline
25531
25532\sphinxAtStartPar
25533\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REPLY}}
25534&
25535\sphinxAtStartPar
25536\sphinxcode{\sphinxupquote{27}}
25537\\
25538\hline
25539\end{tabulary}
25540\par
25541\sphinxattableend\end{savenotes}
25542
25543
25544\subsubsection{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REQUEST}
25545\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}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST::doc}}\index{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REQUEST (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REQUEST}\spxextra{built\sphinxhyphen{}in variable}}
25546
25547\begin{fulllineitems}
25548\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST:KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REQUEST}}}
25549\end{fulllineitems}
25550
25551
25552
25553\begin{savenotes}\sphinxattablestart
25554\centering
25555\begin{tabulary}{\linewidth}[t]{|T|T|}
25556\hline
25557
25558\sphinxAtStartPar
25559\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REQUEST}}
25560&
25561\sphinxAtStartPar
25562\sphinxcode{\sphinxupquote{26}}
25563\\
25564\hline
25565\end{tabulary}
25566\par
25567\sphinxattableend\end{savenotes}
25568
25569
25570\subsubsection{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_CKSUM}
25571\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_CKSUM:krb5-keyusage-pa-sam-challenge-cksum}}\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::doc}}\index{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_CKSUM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_CKSUM}\spxextra{built\sphinxhyphen{}in variable}}
25572
25573\begin{fulllineitems}
25574\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_CKSUM:KRB5_KEYUSAGE_PA_SAM_CHALLENGE_CKSUM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_CKSUM}}}
25575\end{fulllineitems}
25576
25577
25578
25579\begin{savenotes}\sphinxattablestart
25580\centering
25581\begin{tabulary}{\linewidth}[t]{|T|T|}
25582\hline
25583
25584\sphinxAtStartPar
25585\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_CKSUM}}
25586&
25587\sphinxAtStartPar
25588\sphinxcode{\sphinxupquote{25}}
25589\\
25590\hline
25591\end{tabulary}
25592\par
25593\sphinxattableend\end{savenotes}
25594
25595
25596\subsubsection{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_TRACKID}
25597\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_TRACKID}\spxextra{built\sphinxhyphen{}in variable}}
25598
25599\begin{fulllineitems}
25600\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_TRACKID:KRB5_KEYUSAGE_PA_SAM_CHALLENGE_TRACKID}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_TRACKID}}}
25601\end{fulllineitems}
25602
25603
25604
25605\begin{savenotes}\sphinxattablestart
25606\centering
25607\begin{tabulary}{\linewidth}[t]{|T|T|}
25608\hline
25609
25610\sphinxAtStartPar
25611\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_TRACKID}}
25612&
25613\sphinxAtStartPar
25614\sphinxcode{\sphinxupquote{26}}
25615\\
25616\hline
25617\end{tabulary}
25618\par
25619\sphinxattableend\end{savenotes}
25620
25621
25622\subsubsection{KRB5\_KEYUSAGE\_PA\_SAM\_RESPONSE}
25623\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:krb5-keyusage-pa-sam-response-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_RESPONSE::doc}}\index{KRB5\_KEYUSAGE\_PA\_SAM\_RESPONSE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_PA\_SAM\_RESPONSE}\spxextra{built\sphinxhyphen{}in variable}}
25624
25625\begin{fulllineitems}
25626\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_RESPONSE:KRB5_KEYUSAGE_PA_SAM_RESPONSE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_PA\_SAM\_RESPONSE}}}
25627\end{fulllineitems}
25628
25629
25630
25631\begin{savenotes}\sphinxattablestart
25632\centering
25633\begin{tabulary}{\linewidth}[t]{|T|T|}
25634\hline
25635
25636\sphinxAtStartPar
25637\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_PA\_SAM\_RESPONSE}}
25638&
25639\sphinxAtStartPar
25640\sphinxcode{\sphinxupquote{27}}
25641\\
25642\hline
25643\end{tabulary}
25644\par
25645\sphinxattableend\end{savenotes}
25646
25647
25648\subsubsection{KRB5\_KEYUSAGE\_SPAKE}
25649\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_SPAKE}\spxextra{built\sphinxhyphen{}in variable}}
25650
25651\begin{fulllineitems}
25652\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_SPAKE:KRB5_KEYUSAGE_SPAKE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_SPAKE}}}
25653\end{fulllineitems}
25654
25655
25656
25657\begin{savenotes}\sphinxattablestart
25658\centering
25659\begin{tabulary}{\linewidth}[t]{|T|T|}
25660\hline
25661
25662\sphinxAtStartPar
25663\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_SPAKE}}
25664&
25665\sphinxAtStartPar
25666\sphinxcode{\sphinxupquote{65}}
25667\\
25668\hline
25669\end{tabulary}
25670\par
25671\sphinxattableend\end{savenotes}
25672
25673
25674\subsubsection{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SESSKEY}
25675\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SESSKEY}\spxextra{built\sphinxhyphen{}in variable}}
25676
25677\begin{fulllineitems}
25678\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SESSKEY:KRB5_KEYUSAGE_TGS_REP_ENCPART_SESSKEY}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SESSKEY}}}
25679\end{fulllineitems}
25680
25681
25682
25683\begin{savenotes}\sphinxattablestart
25684\centering
25685\begin{tabulary}{\linewidth}[t]{|T|T|}
25686\hline
25687
25688\sphinxAtStartPar
25689\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SESSKEY}}
25690&
25691\sphinxAtStartPar
25692\sphinxcode{\sphinxupquote{8}}
25693\\
25694\hline
25695\end{tabulary}
25696\par
25697\sphinxattableend\end{savenotes}
25698
25699
25700\subsubsection{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SUBKEY}
25701\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SUBKEY:krb5-keyusage-tgs-rep-encpart-subkey}}\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}}\index{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SUBKEY (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SUBKEY}\spxextra{built\sphinxhyphen{}in variable}}
25702
25703\begin{fulllineitems}
25704\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SUBKEY:KRB5_KEYUSAGE_TGS_REP_ENCPART_SUBKEY}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SUBKEY}}}
25705\end{fulllineitems}
25706
25707
25708
25709\begin{savenotes}\sphinxattablestart
25710\centering
25711\begin{tabulary}{\linewidth}[t]{|T|T|}
25712\hline
25713
25714\sphinxAtStartPar
25715\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SUBKEY}}
25716&
25717\sphinxAtStartPar
25718\sphinxcode{\sphinxupquote{9}}
25719\\
25720\hline
25721\end{tabulary}
25722\par
25723\sphinxattableend\end{savenotes}
25724
25725
25726\subsubsection{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SESSKEY}
25727\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}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SESSKEY::doc}}\index{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SESSKEY (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SESSKEY}\spxextra{built\sphinxhyphen{}in variable}}
25728
25729\begin{fulllineitems}
25730\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SESSKEY:KRB5_KEYUSAGE_TGS_REQ_AD_SESSKEY}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SESSKEY}}}
25731\end{fulllineitems}
25732
25733
25734
25735\begin{savenotes}\sphinxattablestart
25736\centering
25737\begin{tabulary}{\linewidth}[t]{|T|T|}
25738\hline
25739
25740\sphinxAtStartPar
25741\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SESSKEY}}
25742&
25743\sphinxAtStartPar
25744\sphinxcode{\sphinxupquote{4}}
25745\\
25746\hline
25747\end{tabulary}
25748\par
25749\sphinxattableend\end{savenotes}
25750
25751
25752\subsubsection{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SUBKEY}
25753\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:krb5-keyusage-tgs-req-ad-subkey-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SUBKEY::doc}}\index{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SUBKEY (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SUBKEY}\spxextra{built\sphinxhyphen{}in variable}}
25754
25755\begin{fulllineitems}
25756\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SUBKEY:KRB5_KEYUSAGE_TGS_REQ_AD_SUBKEY}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SUBKEY}}}
25757\end{fulllineitems}
25758
25759
25760
25761\begin{savenotes}\sphinxattablestart
25762\centering
25763\begin{tabulary}{\linewidth}[t]{|T|T|}
25764\hline
25765
25766\sphinxAtStartPar
25767\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SUBKEY}}
25768&
25769\sphinxAtStartPar
25770\sphinxcode{\sphinxupquote{5}}
25771\\
25772\hline
25773\end{tabulary}
25774\par
25775\sphinxattableend\end{savenotes}
25776
25777
25778\subsubsection{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH}
25779\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}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH::doc}}\index{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH}\spxextra{built\sphinxhyphen{}in variable}}
25780
25781\begin{fulllineitems}
25782\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH:KRB5_KEYUSAGE_TGS_REQ_AUTH}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH}}}
25783\end{fulllineitems}
25784
25785
25786
25787\begin{savenotes}\sphinxattablestart
25788\centering
25789\begin{tabulary}{\linewidth}[t]{|T|T|}
25790\hline
25791
25792\sphinxAtStartPar
25793\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH}}
25794&
25795\sphinxAtStartPar
25796\sphinxcode{\sphinxupquote{7}}
25797\\
25798\hline
25799\end{tabulary}
25800\par
25801\sphinxattableend\end{savenotes}
25802
25803
25804\subsubsection{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH\_CKSUM}
25805\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH_CKSUM:krb5-keyusage-tgs-req-auth-cksum}}\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}}\index{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH\_CKSUM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH\_CKSUM}\spxextra{built\sphinxhyphen{}in variable}}
25806
25807\begin{fulllineitems}
25808\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH_CKSUM:KRB5_KEYUSAGE_TGS_REQ_AUTH_CKSUM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH\_CKSUM}}}
25809\end{fulllineitems}
25810
25811
25812
25813\begin{savenotes}\sphinxattablestart
25814\centering
25815\begin{tabulary}{\linewidth}[t]{|T|T|}
25816\hline
25817
25818\sphinxAtStartPar
25819\sphinxcode{\sphinxupquote{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH\_CKSUM}}
25820&
25821\sphinxAtStartPar
25822\sphinxcode{\sphinxupquote{6}}
25823\\
25824\hline
25825\end{tabulary}
25826\par
25827\sphinxattableend\end{savenotes}
25828
25829
25830\subsubsection{KRB5\_KPASSWD\_ACCESSDENIED}
25831\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_KPASSWD\_ACCESSDENIED}\spxextra{built\sphinxhyphen{}in variable}}
25832
25833\begin{fulllineitems}
25834\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_ACCESSDENIED:KRB5_KPASSWD_ACCESSDENIED}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KPASSWD\_ACCESSDENIED}}}
25835\end{fulllineitems}
25836
25837
25838\sphinxAtStartPar
25839Not authorized.
25840
25841
25842\begin{savenotes}\sphinxattablestart
25843\centering
25844\begin{tabulary}{\linewidth}[t]{|T|T|}
25845\hline
25846
25847\sphinxAtStartPar
25848\sphinxcode{\sphinxupquote{KRB5\_KPASSWD\_ACCESSDENIED}}
25849&
25850\sphinxAtStartPar
25851\sphinxcode{\sphinxupquote{5}}
25852\\
25853\hline
25854\end{tabulary}
25855\par
25856\sphinxattableend\end{savenotes}
25857
25858
25859\subsubsection{KRB5\_KPASSWD\_AUTHERROR}
25860\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_AUTHERROR:krb5-kpasswd-autherror}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_AUTHERROR:krb5-kpasswd-autherror-data}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_AUTHERROR::doc}}\index{KRB5\_KPASSWD\_AUTHERROR (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KPASSWD\_AUTHERROR}\spxextra{built\sphinxhyphen{}in variable}}
25861
25862\begin{fulllineitems}
25863\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_AUTHERROR:KRB5_KPASSWD_AUTHERROR}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KPASSWD\_AUTHERROR}}}
25864\end{fulllineitems}
25865
25866
25867\sphinxAtStartPar
25868Authentication error.
25869
25870
25871\begin{savenotes}\sphinxattablestart
25872\centering
25873\begin{tabulary}{\linewidth}[t]{|T|T|}
25874\hline
25875
25876\sphinxAtStartPar
25877\sphinxcode{\sphinxupquote{KRB5\_KPASSWD\_AUTHERROR}}
25878&
25879\sphinxAtStartPar
25880\sphinxcode{\sphinxupquote{3}}
25881\\
25882\hline
25883\end{tabulary}
25884\par
25885\sphinxattableend\end{savenotes}
25886
25887
25888\subsubsection{KRB5\_KPASSWD\_BAD\_VERSION}
25889\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_BAD_VERSION:krb5-kpasswd-bad-version}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_BAD_VERSION:krb5-kpasswd-bad-version-data}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_BAD_VERSION::doc}}\index{KRB5\_KPASSWD\_BAD\_VERSION (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KPASSWD\_BAD\_VERSION}\spxextra{built\sphinxhyphen{}in variable}}
25890
25891\begin{fulllineitems}
25892\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_BAD_VERSION:KRB5_KPASSWD_BAD_VERSION}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KPASSWD\_BAD\_VERSION}}}
25893\end{fulllineitems}
25894
25895
25896\sphinxAtStartPar
25897Unknown RPC version.
25898
25899
25900\begin{savenotes}\sphinxattablestart
25901\centering
25902\begin{tabulary}{\linewidth}[t]{|T|T|}
25903\hline
25904
25905\sphinxAtStartPar
25906\sphinxcode{\sphinxupquote{KRB5\_KPASSWD\_BAD\_VERSION}}
25907&
25908\sphinxAtStartPar
25909\sphinxcode{\sphinxupquote{6}}
25910\\
25911\hline
25912\end{tabulary}
25913\par
25914\sphinxattableend\end{savenotes}
25915
25916
25917\subsubsection{KRB5\_KPASSWD\_HARDERROR}
25918\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_KPASSWD\_HARDERROR}\spxextra{built\sphinxhyphen{}in variable}}
25919
25920\begin{fulllineitems}
25921\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_HARDERROR:KRB5_KPASSWD_HARDERROR}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KPASSWD\_HARDERROR}}}
25922\end{fulllineitems}
25923
25924
25925\sphinxAtStartPar
25926Server error.
25927
25928
25929\begin{savenotes}\sphinxattablestart
25930\centering
25931\begin{tabulary}{\linewidth}[t]{|T|T|}
25932\hline
25933
25934\sphinxAtStartPar
25935\sphinxcode{\sphinxupquote{KRB5\_KPASSWD\_HARDERROR}}
25936&
25937\sphinxAtStartPar
25938\sphinxcode{\sphinxupquote{2}}
25939\\
25940\hline
25941\end{tabulary}
25942\par
25943\sphinxattableend\end{savenotes}
25944
25945
25946\subsubsection{KRB5\_KPASSWD\_INITIAL\_FLAG\_NEEDED}
25947\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:krb5-kpasswd-initial-flag-needed-data}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_INITIAL_FLAG_NEEDED::doc}}\index{KRB5\_KPASSWD\_INITIAL\_FLAG\_NEEDED (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KPASSWD\_INITIAL\_FLAG\_NEEDED}\spxextra{built\sphinxhyphen{}in variable}}
25948
25949\begin{fulllineitems}
25950\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_INITIAL_FLAG_NEEDED:KRB5_KPASSWD_INITIAL_FLAG_NEEDED}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KPASSWD\_INITIAL\_FLAG\_NEEDED}}}
25951\end{fulllineitems}
25952
25953
25954\sphinxAtStartPar
25955The presented credentials were not obtained using a password directly.
25956
25957
25958\begin{savenotes}\sphinxattablestart
25959\centering
25960\begin{tabulary}{\linewidth}[t]{|T|T|}
25961\hline
25962
25963\sphinxAtStartPar
25964\sphinxcode{\sphinxupquote{KRB5\_KPASSWD\_INITIAL\_FLAG\_NEEDED}}
25965&
25966\sphinxAtStartPar
25967\sphinxcode{\sphinxupquote{7}}
25968\\
25969\hline
25970\end{tabulary}
25971\par
25972\sphinxattableend\end{savenotes}
25973
25974
25975\subsubsection{KRB5\_KPASSWD\_MALFORMED}
25976\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_MALFORMED:krb5-kpasswd-malformed}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_MALFORMED:krb5-kpasswd-malformed-data}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_MALFORMED::doc}}\index{KRB5\_KPASSWD\_MALFORMED (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KPASSWD\_MALFORMED}\spxextra{built\sphinxhyphen{}in variable}}
25977
25978\begin{fulllineitems}
25979\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_MALFORMED:KRB5_KPASSWD_MALFORMED}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KPASSWD\_MALFORMED}}}
25980\end{fulllineitems}
25981
25982
25983\sphinxAtStartPar
25984Malformed request.
25985
25986
25987\begin{savenotes}\sphinxattablestart
25988\centering
25989\begin{tabulary}{\linewidth}[t]{|T|T|}
25990\hline
25991
25992\sphinxAtStartPar
25993\sphinxcode{\sphinxupquote{KRB5\_KPASSWD\_MALFORMED}}
25994&
25995\sphinxAtStartPar
25996\sphinxcode{\sphinxupquote{1}}
25997\\
25998\hline
25999\end{tabulary}
26000\par
26001\sphinxattableend\end{savenotes}
26002
26003
26004\subsubsection{KRB5\_KPASSWD\_SOFTERROR}
26005\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SOFTERROR:krb5-kpasswd-softerror}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SOFTERROR:krb5-kpasswd-softerror-data}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SOFTERROR::doc}}\index{KRB5\_KPASSWD\_SOFTERROR (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KPASSWD\_SOFTERROR}\spxextra{built\sphinxhyphen{}in variable}}
26006
26007\begin{fulllineitems}
26008\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SOFTERROR:KRB5_KPASSWD_SOFTERROR}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KPASSWD\_SOFTERROR}}}
26009\end{fulllineitems}
26010
26011
26012\sphinxAtStartPar
26013Password change rejected.
26014
26015
26016\begin{savenotes}\sphinxattablestart
26017\centering
26018\begin{tabulary}{\linewidth}[t]{|T|T|}
26019\hline
26020
26021\sphinxAtStartPar
26022\sphinxcode{\sphinxupquote{KRB5\_KPASSWD\_SOFTERROR}}
26023&
26024\sphinxAtStartPar
26025\sphinxcode{\sphinxupquote{4}}
26026\\
26027\hline
26028\end{tabulary}
26029\par
26030\sphinxattableend\end{savenotes}
26031
26032
26033\subsubsection{KRB5\_KPASSWD\_SUCCESS}
26034\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SUCCESS:krb5-kpasswd-success}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SUCCESS:krb5-kpasswd-success-data}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SUCCESS::doc}}\index{KRB5\_KPASSWD\_SUCCESS (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_KPASSWD\_SUCCESS}\spxextra{built\sphinxhyphen{}in variable}}
26035
26036\begin{fulllineitems}
26037\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SUCCESS:KRB5_KPASSWD_SUCCESS}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_KPASSWD\_SUCCESS}}}
26038\end{fulllineitems}
26039
26040
26041\sphinxAtStartPar
26042Success.
26043
26044
26045\begin{savenotes}\sphinxattablestart
26046\centering
26047\begin{tabulary}{\linewidth}[t]{|T|T|}
26048\hline
26049
26050\sphinxAtStartPar
26051\sphinxcode{\sphinxupquote{KRB5\_KPASSWD\_SUCCESS}}
26052&
26053\sphinxAtStartPar
26054\sphinxcode{\sphinxupquote{0}}
26055\\
26056\hline
26057\end{tabulary}
26058\par
26059\sphinxattableend\end{savenotes}
26060
26061
26062\subsubsection{KRB5\_LRQ\_ALL\_ACCT\_EXPTIME}
26063\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}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_ACCT_EXPTIME::doc}}\index{KRB5\_LRQ\_ALL\_ACCT\_EXPTIME (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_LRQ\_ALL\_ACCT\_EXPTIME}\spxextra{built\sphinxhyphen{}in variable}}
26064
26065\begin{fulllineitems}
26066\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_ACCT_EXPTIME:KRB5_LRQ_ALL_ACCT_EXPTIME}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_LRQ\_ALL\_ACCT\_EXPTIME}}}
26067\end{fulllineitems}
26068
26069
26070
26071\begin{savenotes}\sphinxattablestart
26072\centering
26073\begin{tabulary}{\linewidth}[t]{|T|T|}
26074\hline
26075
26076\sphinxAtStartPar
26077\sphinxcode{\sphinxupquote{KRB5\_LRQ\_ALL\_ACCT\_EXPTIME}}
26078&
26079\sphinxAtStartPar
26080\sphinxcode{\sphinxupquote{7}}
26081\\
26082\hline
26083\end{tabulary}
26084\par
26085\sphinxattableend\end{savenotes}
26086
26087
26088\subsubsection{KRB5\_LRQ\_ALL\_LAST\_INITIAL}
26089\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}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_INITIAL::doc}}\index{KRB5\_LRQ\_ALL\_LAST\_INITIAL (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_LRQ\_ALL\_LAST\_INITIAL}\spxextra{built\sphinxhyphen{}in variable}}
26090
26091\begin{fulllineitems}
26092\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_INITIAL:KRB5_LRQ_ALL_LAST_INITIAL}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_LRQ\_ALL\_LAST\_INITIAL}}}
26093\end{fulllineitems}
26094
26095
26096
26097\begin{savenotes}\sphinxattablestart
26098\centering
26099\begin{tabulary}{\linewidth}[t]{|T|T|}
26100\hline
26101
26102\sphinxAtStartPar
26103\sphinxcode{\sphinxupquote{KRB5\_LRQ\_ALL\_LAST\_INITIAL}}
26104&
26105\sphinxAtStartPar
26106\sphinxcode{\sphinxupquote{2}}
26107\\
26108\hline
26109\end{tabulary}
26110\par
26111\sphinxattableend\end{savenotes}
26112
26113
26114\subsubsection{KRB5\_LRQ\_ALL\_LAST\_RENEWAL}
26115\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_LRQ\_ALL\_LAST\_RENEWAL}\spxextra{built\sphinxhyphen{}in variable}}
26116
26117\begin{fulllineitems}
26118\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_RENEWAL:KRB5_LRQ_ALL_LAST_RENEWAL}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_LRQ\_ALL\_LAST\_RENEWAL}}}
26119\end{fulllineitems}
26120
26121
26122
26123\begin{savenotes}\sphinxattablestart
26124\centering
26125\begin{tabulary}{\linewidth}[t]{|T|T|}
26126\hline
26127
26128\sphinxAtStartPar
26129\sphinxcode{\sphinxupquote{KRB5\_LRQ\_ALL\_LAST\_RENEWAL}}
26130&
26131\sphinxAtStartPar
26132\sphinxcode{\sphinxupquote{4}}
26133\\
26134\hline
26135\end{tabulary}
26136\par
26137\sphinxattableend\end{savenotes}
26138
26139
26140\subsubsection{KRB5\_LRQ\_ALL\_LAST\_REQ}
26141\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}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_REQ::doc}}\index{KRB5\_LRQ\_ALL\_LAST\_REQ (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_LRQ\_ALL\_LAST\_REQ}\spxextra{built\sphinxhyphen{}in variable}}
26142
26143\begin{fulllineitems}
26144\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_REQ:KRB5_LRQ_ALL_LAST_REQ}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_LRQ\_ALL\_LAST\_REQ}}}
26145\end{fulllineitems}
26146
26147
26148
26149\begin{savenotes}\sphinxattablestart
26150\centering
26151\begin{tabulary}{\linewidth}[t]{|T|T|}
26152\hline
26153
26154\sphinxAtStartPar
26155\sphinxcode{\sphinxupquote{KRB5\_LRQ\_ALL\_LAST\_REQ}}
26156&
26157\sphinxAtStartPar
26158\sphinxcode{\sphinxupquote{5}}
26159\\
26160\hline
26161\end{tabulary}
26162\par
26163\sphinxattableend\end{savenotes}
26164
26165
26166\subsubsection{KRB5\_LRQ\_ALL\_LAST\_TGT}
26167\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:krb5-lrq-all-last-tgt-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT::doc}}\index{KRB5\_LRQ\_ALL\_LAST\_TGT (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_LRQ\_ALL\_LAST\_TGT}\spxextra{built\sphinxhyphen{}in variable}}
26168
26169\begin{fulllineitems}
26170\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT:KRB5_LRQ_ALL_LAST_TGT}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_LRQ\_ALL\_LAST\_TGT}}}
26171\end{fulllineitems}
26172
26173
26174
26175\begin{savenotes}\sphinxattablestart
26176\centering
26177\begin{tabulary}{\linewidth}[t]{|T|T|}
26178\hline
26179
26180\sphinxAtStartPar
26181\sphinxcode{\sphinxupquote{KRB5\_LRQ\_ALL\_LAST\_TGT}}
26182&
26183\sphinxAtStartPar
26184\sphinxcode{\sphinxupquote{1}}
26185\\
26186\hline
26187\end{tabulary}
26188\par
26189\sphinxattableend\end{savenotes}
26190
26191
26192\subsubsection{KRB5\_LRQ\_ALL\_LAST\_TGT\_ISSUED}
26193\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}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT_ISSUED::doc}}\index{KRB5\_LRQ\_ALL\_LAST\_TGT\_ISSUED (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_LRQ\_ALL\_LAST\_TGT\_ISSUED}\spxextra{built\sphinxhyphen{}in variable}}
26194
26195\begin{fulllineitems}
26196\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT_ISSUED:KRB5_LRQ_ALL_LAST_TGT_ISSUED}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_LRQ\_ALL\_LAST\_TGT\_ISSUED}}}
26197\end{fulllineitems}
26198
26199
26200
26201\begin{savenotes}\sphinxattablestart
26202\centering
26203\begin{tabulary}{\linewidth}[t]{|T|T|}
26204\hline
26205
26206\sphinxAtStartPar
26207\sphinxcode{\sphinxupquote{KRB5\_LRQ\_ALL\_LAST\_TGT\_ISSUED}}
26208&
26209\sphinxAtStartPar
26210\sphinxcode{\sphinxupquote{3}}
26211\\
26212\hline
26213\end{tabulary}
26214\par
26215\sphinxattableend\end{savenotes}
26216
26217
26218\subsubsection{KRB5\_LRQ\_ALL\_PW\_EXPTIME}
26219\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_PW_EXPTIME:krb5-lrq-all-pw-exptime}}\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}}\index{KRB5\_LRQ\_ALL\_PW\_EXPTIME (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_LRQ\_ALL\_PW\_EXPTIME}\spxextra{built\sphinxhyphen{}in variable}}
26220
26221\begin{fulllineitems}
26222\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_PW_EXPTIME:KRB5_LRQ_ALL_PW_EXPTIME}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_LRQ\_ALL\_PW\_EXPTIME}}}
26223\end{fulllineitems}
26224
26225
26226
26227\begin{savenotes}\sphinxattablestart
26228\centering
26229\begin{tabulary}{\linewidth}[t]{|T|T|}
26230\hline
26231
26232\sphinxAtStartPar
26233\sphinxcode{\sphinxupquote{KRB5\_LRQ\_ALL\_PW\_EXPTIME}}
26234&
26235\sphinxAtStartPar
26236\sphinxcode{\sphinxupquote{6}}
26237\\
26238\hline
26239\end{tabulary}
26240\par
26241\sphinxattableend\end{savenotes}
26242
26243
26244\subsubsection{KRB5\_LRQ\_NONE}
26245\label{\detokenize{appdev/refs/macros/KRB5_LRQ_NONE:krb5-lrq-none}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_NONE:krb5-lrq-none-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_NONE::doc}}\index{KRB5\_LRQ\_NONE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_LRQ\_NONE}\spxextra{built\sphinxhyphen{}in variable}}
26246
26247\begin{fulllineitems}
26248\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_NONE:KRB5_LRQ_NONE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_LRQ\_NONE}}}
26249\end{fulllineitems}
26250
26251
26252
26253\begin{savenotes}\sphinxattablestart
26254\centering
26255\begin{tabulary}{\linewidth}[t]{|T|T|}
26256\hline
26257
26258\sphinxAtStartPar
26259\sphinxcode{\sphinxupquote{KRB5\_LRQ\_NONE}}
26260&
26261\sphinxAtStartPar
26262\sphinxcode{\sphinxupquote{0}}
26263\\
26264\hline
26265\end{tabulary}
26266\par
26267\sphinxattableend\end{savenotes}
26268
26269
26270\subsubsection{KRB5\_LRQ\_ONE\_ACCT\_EXPTIME}
26271\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}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_ACCT_EXPTIME::doc}}\index{KRB5\_LRQ\_ONE\_ACCT\_EXPTIME (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_LRQ\_ONE\_ACCT\_EXPTIME}\spxextra{built\sphinxhyphen{}in variable}}
26272
26273\begin{fulllineitems}
26274\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_ACCT_EXPTIME:KRB5_LRQ_ONE_ACCT_EXPTIME}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_LRQ\_ONE\_ACCT\_EXPTIME}}}
26275\end{fulllineitems}
26276
26277
26278
26279\begin{savenotes}\sphinxattablestart
26280\centering
26281\begin{tabulary}{\linewidth}[t]{|T|T|}
26282\hline
26283
26284\sphinxAtStartPar
26285\sphinxcode{\sphinxupquote{KRB5\_LRQ\_ONE\_ACCT\_EXPTIME}}
26286&
26287\sphinxAtStartPar
26288\sphinxcode{\sphinxupquote{(\sphinxhyphen{}7)}}
26289\\
26290\hline
26291\end{tabulary}
26292\par
26293\sphinxattableend\end{savenotes}
26294
26295
26296\subsubsection{KRB5\_LRQ\_ONE\_LAST\_INITIAL}
26297\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_INITIAL:krb5-lrq-one-last-initial}}\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}}\index{KRB5\_LRQ\_ONE\_LAST\_INITIAL (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_LRQ\_ONE\_LAST\_INITIAL}\spxextra{built\sphinxhyphen{}in variable}}
26298
26299\begin{fulllineitems}
26300\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_INITIAL:KRB5_LRQ_ONE_LAST_INITIAL}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_LRQ\_ONE\_LAST\_INITIAL}}}
26301\end{fulllineitems}
26302
26303
26304
26305\begin{savenotes}\sphinxattablestart
26306\centering
26307\begin{tabulary}{\linewidth}[t]{|T|T|}
26308\hline
26309
26310\sphinxAtStartPar
26311\sphinxcode{\sphinxupquote{KRB5\_LRQ\_ONE\_LAST\_INITIAL}}
26312&
26313\sphinxAtStartPar
26314\sphinxcode{\sphinxupquote{(\sphinxhyphen{}2)}}
26315\\
26316\hline
26317\end{tabulary}
26318\par
26319\sphinxattableend\end{savenotes}
26320
26321
26322\subsubsection{KRB5\_LRQ\_ONE\_LAST\_RENEWAL}
26323\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_RENEWAL:krb5-lrq-one-last-renewal}}\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}}\index{KRB5\_LRQ\_ONE\_LAST\_RENEWAL (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_LRQ\_ONE\_LAST\_RENEWAL}\spxextra{built\sphinxhyphen{}in variable}}
26324
26325\begin{fulllineitems}
26326\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_RENEWAL:KRB5_LRQ_ONE_LAST_RENEWAL}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_LRQ\_ONE\_LAST\_RENEWAL}}}
26327\end{fulllineitems}
26328
26329
26330
26331\begin{savenotes}\sphinxattablestart
26332\centering
26333\begin{tabulary}{\linewidth}[t]{|T|T|}
26334\hline
26335
26336\sphinxAtStartPar
26337\sphinxcode{\sphinxupquote{KRB5\_LRQ\_ONE\_LAST\_RENEWAL}}
26338&
26339\sphinxAtStartPar
26340\sphinxcode{\sphinxupquote{(\sphinxhyphen{}4)}}
26341\\
26342\hline
26343\end{tabulary}
26344\par
26345\sphinxattableend\end{savenotes}
26346
26347
26348\subsubsection{KRB5\_LRQ\_ONE\_LAST\_REQ}
26349\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}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_REQ::doc}}\index{KRB5\_LRQ\_ONE\_LAST\_REQ (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_LRQ\_ONE\_LAST\_REQ}\spxextra{built\sphinxhyphen{}in variable}}
26350
26351\begin{fulllineitems}
26352\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_REQ:KRB5_LRQ_ONE_LAST_REQ}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_LRQ\_ONE\_LAST\_REQ}}}
26353\end{fulllineitems}
26354
26355
26356
26357\begin{savenotes}\sphinxattablestart
26358\centering
26359\begin{tabulary}{\linewidth}[t]{|T|T|}
26360\hline
26361
26362\sphinxAtStartPar
26363\sphinxcode{\sphinxupquote{KRB5\_LRQ\_ONE\_LAST\_REQ}}
26364&
26365\sphinxAtStartPar
26366\sphinxcode{\sphinxupquote{(\sphinxhyphen{}5)}}
26367\\
26368\hline
26369\end{tabulary}
26370\par
26371\sphinxattableend\end{savenotes}
26372
26373
26374\subsubsection{KRB5\_LRQ\_ONE\_LAST\_TGT}
26375\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT:krb5-lrq-one-last-tgt}}\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}}\index{KRB5\_LRQ\_ONE\_LAST\_TGT (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_LRQ\_ONE\_LAST\_TGT}\spxextra{built\sphinxhyphen{}in variable}}
26376
26377\begin{fulllineitems}
26378\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT:KRB5_LRQ_ONE_LAST_TGT}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_LRQ\_ONE\_LAST\_TGT}}}
26379\end{fulllineitems}
26380
26381
26382
26383\begin{savenotes}\sphinxattablestart
26384\centering
26385\begin{tabulary}{\linewidth}[t]{|T|T|}
26386\hline
26387
26388\sphinxAtStartPar
26389\sphinxcode{\sphinxupquote{KRB5\_LRQ\_ONE\_LAST\_TGT}}
26390&
26391\sphinxAtStartPar
26392\sphinxcode{\sphinxupquote{(\sphinxhyphen{}1)}}
26393\\
26394\hline
26395\end{tabulary}
26396\par
26397\sphinxattableend\end{savenotes}
26398
26399
26400\subsubsection{KRB5\_LRQ\_ONE\_LAST\_TGT\_ISSUED}
26401\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_LRQ\_ONE\_LAST\_TGT\_ISSUED}\spxextra{built\sphinxhyphen{}in variable}}
26402
26403\begin{fulllineitems}
26404\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT_ISSUED:KRB5_LRQ_ONE_LAST_TGT_ISSUED}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_LRQ\_ONE\_LAST\_TGT\_ISSUED}}}
26405\end{fulllineitems}
26406
26407
26408
26409\begin{savenotes}\sphinxattablestart
26410\centering
26411\begin{tabulary}{\linewidth}[t]{|T|T|}
26412\hline
26413
26414\sphinxAtStartPar
26415\sphinxcode{\sphinxupquote{KRB5\_LRQ\_ONE\_LAST\_TGT\_ISSUED}}
26416&
26417\sphinxAtStartPar
26418\sphinxcode{\sphinxupquote{(\sphinxhyphen{}3)}}
26419\\
26420\hline
26421\end{tabulary}
26422\par
26423\sphinxattableend\end{savenotes}
26424
26425
26426\subsubsection{KRB5\_LRQ\_ONE\_PW\_EXPTIME}
26427\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_LRQ\_ONE\_PW\_EXPTIME}\spxextra{built\sphinxhyphen{}in variable}}
26428
26429\begin{fulllineitems}
26430\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_PW_EXPTIME:KRB5_LRQ_ONE_PW_EXPTIME}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_LRQ\_ONE\_PW\_EXPTIME}}}
26431\end{fulllineitems}
26432
26433
26434
26435\begin{savenotes}\sphinxattablestart
26436\centering
26437\begin{tabulary}{\linewidth}[t]{|T|T|}
26438\hline
26439
26440\sphinxAtStartPar
26441\sphinxcode{\sphinxupquote{KRB5\_LRQ\_ONE\_PW\_EXPTIME}}
26442&
26443\sphinxAtStartPar
26444\sphinxcode{\sphinxupquote{(\sphinxhyphen{}6)}}
26445\\
26446\hline
26447\end{tabulary}
26448\par
26449\sphinxattableend\end{savenotes}
26450
26451
26452\subsubsection{KRB5\_NT\_ENTERPRISE\_PRINCIPAL}
26453\label{\detokenize{appdev/refs/macros/KRB5_NT_ENTERPRISE_PRINCIPAL:krb5-nt-enterprise-principal}}\label{\detokenize{appdev/refs/macros/KRB5_NT_ENTERPRISE_PRINCIPAL:krb5-nt-enterprise-principal-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_ENTERPRISE_PRINCIPAL::doc}}\index{KRB5\_NT\_ENTERPRISE\_PRINCIPAL (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_NT\_ENTERPRISE\_PRINCIPAL}\spxextra{built\sphinxhyphen{}in variable}}
26454
26455\begin{fulllineitems}
26456\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_ENTERPRISE_PRINCIPAL:KRB5_NT_ENTERPRISE_PRINCIPAL}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_NT\_ENTERPRISE\_PRINCIPAL}}}
26457\end{fulllineitems}
26458
26459
26460\sphinxAtStartPar
26461Windows 2000 UPN.
26462
26463
26464\begin{savenotes}\sphinxattablestart
26465\centering
26466\begin{tabulary}{\linewidth}[t]{|T|T|}
26467\hline
26468
26469\sphinxAtStartPar
26470\sphinxcode{\sphinxupquote{KRB5\_NT\_ENTERPRISE\_PRINCIPAL}}
26471&
26472\sphinxAtStartPar
26473\sphinxcode{\sphinxupquote{10}}
26474\\
26475\hline
26476\end{tabulary}
26477\par
26478\sphinxattableend\end{savenotes}
26479
26480
26481\subsubsection{KRB5\_NT\_ENT\_PRINCIPAL\_AND\_ID}
26482\label{\detokenize{appdev/refs/macros/KRB5_NT_ENT_PRINCIPAL_AND_ID:krb5-nt-ent-principal-and-id}}\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}}\index{KRB5\_NT\_ENT\_PRINCIPAL\_AND\_ID (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_NT\_ENT\_PRINCIPAL\_AND\_ID}\spxextra{built\sphinxhyphen{}in variable}}
26483
26484\begin{fulllineitems}
26485\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_ENT_PRINCIPAL_AND_ID:KRB5_NT_ENT_PRINCIPAL_AND_ID}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_NT\_ENT\_PRINCIPAL\_AND\_ID}}}
26486\end{fulllineitems}
26487
26488
26489\sphinxAtStartPar
26490NT 4 style name and SID.
26491
26492
26493\begin{savenotes}\sphinxattablestart
26494\centering
26495\begin{tabulary}{\linewidth}[t]{|T|T|}
26496\hline
26497
26498\sphinxAtStartPar
26499\sphinxcode{\sphinxupquote{KRB5\_NT\_ENT\_PRINCIPAL\_AND\_ID}}
26500&
26501\sphinxAtStartPar
26502\sphinxcode{\sphinxupquote{\sphinxhyphen{}130}}
26503\\
26504\hline
26505\end{tabulary}
26506\par
26507\sphinxattableend\end{savenotes}
26508
26509
26510\subsubsection{KRB5\_NT\_MS\_PRINCIPAL}
26511\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}}\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL::doc}}\index{KRB5\_NT\_MS\_PRINCIPAL (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_NT\_MS\_PRINCIPAL}\spxextra{built\sphinxhyphen{}in variable}}
26512
26513\begin{fulllineitems}
26514\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL:KRB5_NT_MS_PRINCIPAL}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_NT\_MS\_PRINCIPAL}}}
26515\end{fulllineitems}
26516
26517
26518\sphinxAtStartPar
26519Windows 2000 UPN and SID.
26520
26521
26522\begin{savenotes}\sphinxattablestart
26523\centering
26524\begin{tabulary}{\linewidth}[t]{|T|T|}
26525\hline
26526
26527\sphinxAtStartPar
26528\sphinxcode{\sphinxupquote{KRB5\_NT\_MS\_PRINCIPAL}}
26529&
26530\sphinxAtStartPar
26531\sphinxcode{\sphinxupquote{\sphinxhyphen{}128}}
26532\\
26533\hline
26534\end{tabulary}
26535\par
26536\sphinxattableend\end{savenotes}
26537
26538
26539\subsubsection{KRB5\_NT\_MS\_PRINCIPAL\_AND\_ID}
26540\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL_AND_ID:krb5-nt-ms-principal-and-id}}\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}}\index{KRB5\_NT\_MS\_PRINCIPAL\_AND\_ID (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_NT\_MS\_PRINCIPAL\_AND\_ID}\spxextra{built\sphinxhyphen{}in variable}}
26541
26542\begin{fulllineitems}
26543\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL_AND_ID:KRB5_NT_MS_PRINCIPAL_AND_ID}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_NT\_MS\_PRINCIPAL\_AND\_ID}}}
26544\end{fulllineitems}
26545
26546
26547\sphinxAtStartPar
26548NT 4 style name.
26549
26550
26551\begin{savenotes}\sphinxattablestart
26552\centering
26553\begin{tabulary}{\linewidth}[t]{|T|T|}
26554\hline
26555
26556\sphinxAtStartPar
26557\sphinxcode{\sphinxupquote{KRB5\_NT\_MS\_PRINCIPAL\_AND\_ID}}
26558&
26559\sphinxAtStartPar
26560\sphinxcode{\sphinxupquote{\sphinxhyphen{}129}}
26561\\
26562\hline
26563\end{tabulary}
26564\par
26565\sphinxattableend\end{savenotes}
26566
26567
26568\subsubsection{KRB5\_NT\_PRINCIPAL}
26569\label{\detokenize{appdev/refs/macros/KRB5_NT_PRINCIPAL:krb5-nt-principal}}\label{\detokenize{appdev/refs/macros/KRB5_NT_PRINCIPAL:krb5-nt-principal-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_PRINCIPAL::doc}}\index{KRB5\_NT\_PRINCIPAL (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_NT\_PRINCIPAL}\spxextra{built\sphinxhyphen{}in variable}}
26570
26571\begin{fulllineitems}
26572\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_PRINCIPAL:KRB5_NT_PRINCIPAL}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_NT\_PRINCIPAL}}}
26573\end{fulllineitems}
26574
26575
26576\sphinxAtStartPar
26577Just the name of the principal as in DCE, or for users.
26578
26579
26580\begin{savenotes}\sphinxattablestart
26581\centering
26582\begin{tabulary}{\linewidth}[t]{|T|T|}
26583\hline
26584
26585\sphinxAtStartPar
26586\sphinxcode{\sphinxupquote{KRB5\_NT\_PRINCIPAL}}
26587&
26588\sphinxAtStartPar
26589\sphinxcode{\sphinxupquote{1}}
26590\\
26591\hline
26592\end{tabulary}
26593\par
26594\sphinxattableend\end{savenotes}
26595
26596
26597\subsubsection{KRB5\_NT\_SMTP\_NAME}
26598\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_NT\_SMTP\_NAME}\spxextra{built\sphinxhyphen{}in variable}}
26599
26600\begin{fulllineitems}
26601\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_SMTP_NAME:KRB5_NT_SMTP_NAME}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_NT\_SMTP\_NAME}}}
26602\end{fulllineitems}
26603
26604
26605\sphinxAtStartPar
26606Name in form of SMTP email name.
26607
26608
26609\begin{savenotes}\sphinxattablestart
26610\centering
26611\begin{tabulary}{\linewidth}[t]{|T|T|}
26612\hline
26613
26614\sphinxAtStartPar
26615\sphinxcode{\sphinxupquote{KRB5\_NT\_SMTP\_NAME}}
26616&
26617\sphinxAtStartPar
26618\sphinxcode{\sphinxupquote{7}}
26619\\
26620\hline
26621\end{tabulary}
26622\par
26623\sphinxattableend\end{savenotes}
26624
26625
26626\subsubsection{KRB5\_NT\_SRV\_HST}
26627\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_HST:krb5-nt-srv-hst}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_HST:krb5-nt-srv-hst-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_HST::doc}}\index{KRB5\_NT\_SRV\_HST (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_NT\_SRV\_HST}\spxextra{built\sphinxhyphen{}in variable}}
26628
26629\begin{fulllineitems}
26630\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_HST:KRB5_NT_SRV_HST}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_NT\_SRV\_HST}}}
26631\end{fulllineitems}
26632
26633
26634\sphinxAtStartPar
26635Service with host name as instance (telnet, rcommands)
26636
26637
26638\begin{savenotes}\sphinxattablestart
26639\centering
26640\begin{tabulary}{\linewidth}[t]{|T|T|}
26641\hline
26642
26643\sphinxAtStartPar
26644\sphinxcode{\sphinxupquote{KRB5\_NT\_SRV\_HST}}
26645&
26646\sphinxAtStartPar
26647\sphinxcode{\sphinxupquote{3}}
26648\\
26649\hline
26650\end{tabulary}
26651\par
26652\sphinxattableend\end{savenotes}
26653
26654
26655\subsubsection{KRB5\_NT\_SRV\_INST}
26656\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_INST:krb5-nt-srv-inst}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_INST:krb5-nt-srv-inst-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_INST::doc}}\index{KRB5\_NT\_SRV\_INST (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_NT\_SRV\_INST}\spxextra{built\sphinxhyphen{}in variable}}
26657
26658\begin{fulllineitems}
26659\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_INST:KRB5_NT_SRV_INST}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_NT\_SRV\_INST}}}
26660\end{fulllineitems}
26661
26662
26663\sphinxAtStartPar
26664Service and other unique instance (krbtgt)
26665
26666
26667\begin{savenotes}\sphinxattablestart
26668\centering
26669\begin{tabulary}{\linewidth}[t]{|T|T|}
26670\hline
26671
26672\sphinxAtStartPar
26673\sphinxcode{\sphinxupquote{KRB5\_NT\_SRV\_INST}}
26674&
26675\sphinxAtStartPar
26676\sphinxcode{\sphinxupquote{2}}
26677\\
26678\hline
26679\end{tabulary}
26680\par
26681\sphinxattableend\end{savenotes}
26682
26683
26684\subsubsection{KRB5\_NT\_SRV\_XHST}
26685\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_NT\_SRV\_XHST}\spxextra{built\sphinxhyphen{}in variable}}
26686
26687\begin{fulllineitems}
26688\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_XHST:KRB5_NT_SRV_XHST}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_NT\_SRV\_XHST}}}
26689\end{fulllineitems}
26690
26691
26692\sphinxAtStartPar
26693Service with host as remaining components.
26694
26695
26696\begin{savenotes}\sphinxattablestart
26697\centering
26698\begin{tabulary}{\linewidth}[t]{|T|T|}
26699\hline
26700
26701\sphinxAtStartPar
26702\sphinxcode{\sphinxupquote{KRB5\_NT\_SRV\_XHST}}
26703&
26704\sphinxAtStartPar
26705\sphinxcode{\sphinxupquote{4}}
26706\\
26707\hline
26708\end{tabulary}
26709\par
26710\sphinxattableend\end{savenotes}
26711
26712
26713\subsubsection{KRB5\_NT\_UID}
26714\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_NT\_UID}\spxextra{built\sphinxhyphen{}in variable}}
26715
26716\begin{fulllineitems}
26717\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_UID:KRB5_NT_UID}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_NT\_UID}}}
26718\end{fulllineitems}
26719
26720
26721\sphinxAtStartPar
26722Unique ID.
26723
26724
26725\begin{savenotes}\sphinxattablestart
26726\centering
26727\begin{tabulary}{\linewidth}[t]{|T|T|}
26728\hline
26729
26730\sphinxAtStartPar
26731\sphinxcode{\sphinxupquote{KRB5\_NT\_UID}}
26732&
26733\sphinxAtStartPar
26734\sphinxcode{\sphinxupquote{5}}
26735\\
26736\hline
26737\end{tabulary}
26738\par
26739\sphinxattableend\end{savenotes}
26740
26741
26742\subsubsection{KRB5\_NT\_UNKNOWN}
26743\label{\detokenize{appdev/refs/macros/KRB5_NT_UNKNOWN:krb5-nt-unknown}}\label{\detokenize{appdev/refs/macros/KRB5_NT_UNKNOWN:krb5-nt-unknown-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_UNKNOWN::doc}}\index{KRB5\_NT\_UNKNOWN (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_NT\_UNKNOWN}\spxextra{built\sphinxhyphen{}in variable}}
26744
26745\begin{fulllineitems}
26746\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_UNKNOWN:KRB5_NT_UNKNOWN}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_NT\_UNKNOWN}}}
26747\end{fulllineitems}
26748
26749
26750\sphinxAtStartPar
26751Name type not known.
26752
26753
26754\begin{savenotes}\sphinxattablestart
26755\centering
26756\begin{tabulary}{\linewidth}[t]{|T|T|}
26757\hline
26758
26759\sphinxAtStartPar
26760\sphinxcode{\sphinxupquote{KRB5\_NT\_UNKNOWN}}
26761&
26762\sphinxAtStartPar
26763\sphinxcode{\sphinxupquote{0}}
26764\\
26765\hline
26766\end{tabulary}
26767\par
26768\sphinxattableend\end{savenotes}
26769
26770
26771\subsubsection{KRB5\_NT\_WELLKNOWN}
26772\label{\detokenize{appdev/refs/macros/KRB5_NT_WELLKNOWN:krb5-nt-wellknown}}\label{\detokenize{appdev/refs/macros/KRB5_NT_WELLKNOWN:krb5-nt-wellknown-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_WELLKNOWN::doc}}\index{KRB5\_NT\_WELLKNOWN (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_NT\_WELLKNOWN}\spxextra{built\sphinxhyphen{}in variable}}
26773
26774\begin{fulllineitems}
26775\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_WELLKNOWN:KRB5_NT_WELLKNOWN}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_NT\_WELLKNOWN}}}
26776\end{fulllineitems}
26777
26778
26779\sphinxAtStartPar
26780Well\sphinxhyphen{}known (special) principal.
26781
26782
26783\begin{savenotes}\sphinxattablestart
26784\centering
26785\begin{tabulary}{\linewidth}[t]{|T|T|}
26786\hline
26787
26788\sphinxAtStartPar
26789\sphinxcode{\sphinxupquote{KRB5\_NT\_WELLKNOWN}}
26790&
26791\sphinxAtStartPar
26792\sphinxcode{\sphinxupquote{11}}
26793\\
26794\hline
26795\end{tabulary}
26796\par
26797\sphinxattableend\end{savenotes}
26798
26799
26800\subsubsection{KRB5\_NT\_X500\_PRINCIPAL}
26801\label{\detokenize{appdev/refs/macros/KRB5_NT_X500_PRINCIPAL:krb5-nt-x500-principal}}\label{\detokenize{appdev/refs/macros/KRB5_NT_X500_PRINCIPAL:krb5-nt-x500-principal-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_X500_PRINCIPAL::doc}}\index{KRB5\_NT\_X500\_PRINCIPAL (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_NT\_X500\_PRINCIPAL}\spxextra{built\sphinxhyphen{}in variable}}
26802
26803\begin{fulllineitems}
26804\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_X500_PRINCIPAL:KRB5_NT_X500_PRINCIPAL}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_NT\_X500\_PRINCIPAL}}}
26805\end{fulllineitems}
26806
26807
26808\sphinxAtStartPar
26809PKINIT.
26810
26811
26812\begin{savenotes}\sphinxattablestart
26813\centering
26814\begin{tabulary}{\linewidth}[t]{|T|T|}
26815\hline
26816
26817\sphinxAtStartPar
26818\sphinxcode{\sphinxupquote{KRB5\_NT\_X500\_PRINCIPAL}}
26819&
26820\sphinxAtStartPar
26821\sphinxcode{\sphinxupquote{6}}
26822\\
26823\hline
26824\end{tabulary}
26825\par
26826\sphinxattableend\end{savenotes}
26827
26828
26829\subsubsection{KRB5\_PAC\_ATTRIBUTES\_INFO}
26830\label{\detokenize{appdev/refs/macros/KRB5_PAC_ATTRIBUTES_INFO:krb5-pac-attributes-info}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_ATTRIBUTES_INFO:krb5-pac-attributes-info-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_ATTRIBUTES_INFO::doc}}\index{KRB5\_PAC\_ATTRIBUTES\_INFO (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PAC\_ATTRIBUTES\_INFO}\spxextra{built\sphinxhyphen{}in variable}}
26831
26832\begin{fulllineitems}
26833\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_ATTRIBUTES_INFO:KRB5_PAC_ATTRIBUTES_INFO}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PAC\_ATTRIBUTES\_INFO}}}
26834\end{fulllineitems}
26835
26836
26837\sphinxAtStartPar
26838PAC attributes.
26839
26840
26841\begin{savenotes}\sphinxattablestart
26842\centering
26843\begin{tabulary}{\linewidth}[t]{|T|T|}
26844\hline
26845
26846\sphinxAtStartPar
26847\sphinxcode{\sphinxupquote{KRB5\_PAC\_ATTRIBUTES\_INFO}}
26848&
26849\sphinxAtStartPar
26850\sphinxcode{\sphinxupquote{17}}
26851\\
26852\hline
26853\end{tabulary}
26854\par
26855\sphinxattableend\end{savenotes}
26856
26857
26858\subsubsection{KRB5\_PAC\_CLIENT\_INFO}
26859\label{\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_INFO:krb5-pac-client-info}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_INFO:krb5-pac-client-info-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_INFO::doc}}\index{KRB5\_PAC\_CLIENT\_INFO (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PAC\_CLIENT\_INFO}\spxextra{built\sphinxhyphen{}in variable}}
26860
26861\begin{fulllineitems}
26862\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_INFO:KRB5_PAC_CLIENT_INFO}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PAC\_CLIENT\_INFO}}}
26863\end{fulllineitems}
26864
26865
26866\sphinxAtStartPar
26867Client name and ticket info.
26868
26869
26870\begin{savenotes}\sphinxattablestart
26871\centering
26872\begin{tabulary}{\linewidth}[t]{|T|T|}
26873\hline
26874
26875\sphinxAtStartPar
26876\sphinxcode{\sphinxupquote{KRB5\_PAC\_CLIENT\_INFO}}
26877&
26878\sphinxAtStartPar
26879\sphinxcode{\sphinxupquote{10}}
26880\\
26881\hline
26882\end{tabulary}
26883\par
26884\sphinxattableend\end{savenotes}
26885
26886
26887\subsubsection{KRB5\_PAC\_CLIENT\_CLAIMS}
26888\label{\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_CLAIMS:krb5-pac-client-claims}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_CLAIMS:krb5-pac-client-claims-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_CLAIMS::doc}}\index{KRB5\_PAC\_CLIENT\_CLAIMS (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PAC\_CLIENT\_CLAIMS}\spxextra{built\sphinxhyphen{}in variable}}
26889
26890\begin{fulllineitems}
26891\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_CLAIMS:KRB5_PAC_CLIENT_CLAIMS}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PAC\_CLIENT\_CLAIMS}}}
26892\end{fulllineitems}
26893
26894
26895\sphinxAtStartPar
26896Client claims information.
26897
26898
26899\begin{savenotes}\sphinxattablestart
26900\centering
26901\begin{tabulary}{\linewidth}[t]{|T|T|}
26902\hline
26903
26904\sphinxAtStartPar
26905\sphinxcode{\sphinxupquote{KRB5\_PAC\_CLIENT\_CLAIMS}}
26906&
26907\sphinxAtStartPar
26908\sphinxcode{\sphinxupquote{13}}
26909\\
26910\hline
26911\end{tabulary}
26912\par
26913\sphinxattableend\end{savenotes}
26914
26915
26916\subsubsection{KRB5\_PAC\_CREDENTIALS\_INFO}
26917\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}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_CREDENTIALS_INFO::doc}}\index{KRB5\_PAC\_CREDENTIALS\_INFO (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PAC\_CREDENTIALS\_INFO}\spxextra{built\sphinxhyphen{}in variable}}
26918
26919\begin{fulllineitems}
26920\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_CREDENTIALS_INFO:KRB5_PAC_CREDENTIALS_INFO}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PAC\_CREDENTIALS\_INFO}}}
26921\end{fulllineitems}
26922
26923
26924\sphinxAtStartPar
26925Credentials information.
26926
26927
26928\begin{savenotes}\sphinxattablestart
26929\centering
26930\begin{tabulary}{\linewidth}[t]{|T|T|}
26931\hline
26932
26933\sphinxAtStartPar
26934\sphinxcode{\sphinxupquote{KRB5\_PAC\_CREDENTIALS\_INFO}}
26935&
26936\sphinxAtStartPar
26937\sphinxcode{\sphinxupquote{2}}
26938\\
26939\hline
26940\end{tabulary}
26941\par
26942\sphinxattableend\end{savenotes}
26943
26944
26945\subsubsection{KRB5\_PAC\_DELEGATION\_INFO}
26946\label{\detokenize{appdev/refs/macros/KRB5_PAC_DELEGATION_INFO:krb5-pac-delegation-info}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_DELEGATION_INFO:krb5-pac-delegation-info-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_DELEGATION_INFO::doc}}\index{KRB5\_PAC\_DELEGATION\_INFO (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PAC\_DELEGATION\_INFO}\spxextra{built\sphinxhyphen{}in variable}}
26947
26948\begin{fulllineitems}
26949\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_DELEGATION_INFO:KRB5_PAC_DELEGATION_INFO}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PAC\_DELEGATION\_INFO}}}
26950\end{fulllineitems}
26951
26952
26953\sphinxAtStartPar
26954Constrained delegation info.
26955
26956
26957\begin{savenotes}\sphinxattablestart
26958\centering
26959\begin{tabulary}{\linewidth}[t]{|T|T|}
26960\hline
26961
26962\sphinxAtStartPar
26963\sphinxcode{\sphinxupquote{KRB5\_PAC\_DELEGATION\_INFO}}
26964&
26965\sphinxAtStartPar
26966\sphinxcode{\sphinxupquote{11}}
26967\\
26968\hline
26969\end{tabulary}
26970\par
26971\sphinxattableend\end{savenotes}
26972
26973
26974\subsubsection{KRB5\_PAC\_DEVICE\_CLAIMS}
26975\label{\detokenize{appdev/refs/macros/KRB5_PAC_DEVICE_CLAIMS:krb5-pac-device-claims}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_DEVICE_CLAIMS:krb5-pac-device-claims-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_DEVICE_CLAIMS::doc}}\index{KRB5\_PAC\_DEVICE\_CLAIMS (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PAC\_DEVICE\_CLAIMS}\spxextra{built\sphinxhyphen{}in variable}}
26976
26977\begin{fulllineitems}
26978\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_DEVICE_CLAIMS:KRB5_PAC_DEVICE_CLAIMS}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PAC\_DEVICE\_CLAIMS}}}
26979\end{fulllineitems}
26980
26981
26982\sphinxAtStartPar
26983Device claims information.
26984
26985
26986\begin{savenotes}\sphinxattablestart
26987\centering
26988\begin{tabulary}{\linewidth}[t]{|T|T|}
26989\hline
26990
26991\sphinxAtStartPar
26992\sphinxcode{\sphinxupquote{KRB5\_PAC\_DEVICE\_CLAIMS}}
26993&
26994\sphinxAtStartPar
26995\sphinxcode{\sphinxupquote{15}}
26996\\
26997\hline
26998\end{tabulary}
26999\par
27000\sphinxattableend\end{savenotes}
27001
27002
27003\subsubsection{KRB5\_PAC\_DEVICE\_INFO}
27004\label{\detokenize{appdev/refs/macros/KRB5_PAC_DEVICE_INFO:krb5-pac-device-info}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_DEVICE_INFO:krb5-pac-device-info-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_DEVICE_INFO::doc}}\index{KRB5\_PAC\_DEVICE\_INFO (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PAC\_DEVICE\_INFO}\spxextra{built\sphinxhyphen{}in variable}}
27005
27006\begin{fulllineitems}
27007\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_DEVICE_INFO:KRB5_PAC_DEVICE_INFO}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PAC\_DEVICE\_INFO}}}
27008\end{fulllineitems}
27009
27010
27011\sphinxAtStartPar
27012Device information.
27013
27014
27015\begin{savenotes}\sphinxattablestart
27016\centering
27017\begin{tabulary}{\linewidth}[t]{|T|T|}
27018\hline
27019
27020\sphinxAtStartPar
27021\sphinxcode{\sphinxupquote{KRB5\_PAC\_DEVICE\_INFO}}
27022&
27023\sphinxAtStartPar
27024\sphinxcode{\sphinxupquote{14}}
27025\\
27026\hline
27027\end{tabulary}
27028\par
27029\sphinxattableend\end{savenotes}
27030
27031
27032\subsubsection{KRB5\_PAC\_LOGON\_INFO}
27033\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_PAC\_LOGON\_INFO}\spxextra{built\sphinxhyphen{}in variable}}
27034
27035\begin{fulllineitems}
27036\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_LOGON_INFO:KRB5_PAC_LOGON_INFO}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PAC\_LOGON\_INFO}}}
27037\end{fulllineitems}
27038
27039
27040\sphinxAtStartPar
27041Logon information.
27042
27043
27044\begin{savenotes}\sphinxattablestart
27045\centering
27046\begin{tabulary}{\linewidth}[t]{|T|T|}
27047\hline
27048
27049\sphinxAtStartPar
27050\sphinxcode{\sphinxupquote{KRB5\_PAC\_LOGON\_INFO}}
27051&
27052\sphinxAtStartPar
27053\sphinxcode{\sphinxupquote{1}}
27054\\
27055\hline
27056\end{tabulary}
27057\par
27058\sphinxattableend\end{savenotes}
27059
27060
27061\subsubsection{KRB5\_PAC\_PRIVSVR\_CHECKSUM}
27062\label{\detokenize{appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM:krb5-pac-privsvr-checksum}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM:krb5-pac-privsvr-checksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM::doc}}\index{KRB5\_PAC\_PRIVSVR\_CHECKSUM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PAC\_PRIVSVR\_CHECKSUM}\spxextra{built\sphinxhyphen{}in variable}}
27063
27064\begin{fulllineitems}
27065\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM:KRB5_PAC_PRIVSVR_CHECKSUM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PAC\_PRIVSVR\_CHECKSUM}}}
27066\end{fulllineitems}
27067
27068
27069\sphinxAtStartPar
27070KDC checksum.
27071
27072
27073\begin{savenotes}\sphinxattablestart
27074\centering
27075\begin{tabulary}{\linewidth}[t]{|T|T|}
27076\hline
27077
27078\sphinxAtStartPar
27079\sphinxcode{\sphinxupquote{KRB5\_PAC\_PRIVSVR\_CHECKSUM}}
27080&
27081\sphinxAtStartPar
27082\sphinxcode{\sphinxupquote{7}}
27083\\
27084\hline
27085\end{tabulary}
27086\par
27087\sphinxattableend\end{savenotes}
27088
27089
27090\subsubsection{KRB5\_PAC\_REQUESTOR}
27091\label{\detokenize{appdev/refs/macros/KRB5_PAC_REQUESTOR:krb5-pac-requestor}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_REQUESTOR:krb5-pac-requestor-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_REQUESTOR::doc}}\index{KRB5\_PAC\_REQUESTOR (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PAC\_REQUESTOR}\spxextra{built\sphinxhyphen{}in variable}}
27092
27093\begin{fulllineitems}
27094\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_REQUESTOR:KRB5_PAC_REQUESTOR}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PAC\_REQUESTOR}}}
27095\end{fulllineitems}
27096
27097
27098\sphinxAtStartPar
27099PAC requestor SID.
27100
27101
27102\begin{savenotes}\sphinxattablestart
27103\centering
27104\begin{tabulary}{\linewidth}[t]{|T|T|}
27105\hline
27106
27107\sphinxAtStartPar
27108\sphinxcode{\sphinxupquote{KRB5\_PAC\_REQUESTOR}}
27109&
27110\sphinxAtStartPar
27111\sphinxcode{\sphinxupquote{18}}
27112\\
27113\hline
27114\end{tabulary}
27115\par
27116\sphinxattableend\end{savenotes}
27117
27118
27119\subsubsection{KRB5\_PAC\_SERVER\_CHECKSUM}
27120\label{\detokenize{appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM:krb5-pac-server-checksum}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM:krb5-pac-server-checksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM::doc}}\index{KRB5\_PAC\_SERVER\_CHECKSUM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PAC\_SERVER\_CHECKSUM}\spxextra{built\sphinxhyphen{}in variable}}
27121
27122\begin{fulllineitems}
27123\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM:KRB5_PAC_SERVER_CHECKSUM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PAC\_SERVER\_CHECKSUM}}}
27124\end{fulllineitems}
27125
27126
27127\sphinxAtStartPar
27128Server checksum.
27129
27130
27131\begin{savenotes}\sphinxattablestart
27132\centering
27133\begin{tabulary}{\linewidth}[t]{|T|T|}
27134\hline
27135
27136\sphinxAtStartPar
27137\sphinxcode{\sphinxupquote{KRB5\_PAC\_SERVER\_CHECKSUM}}
27138&
27139\sphinxAtStartPar
27140\sphinxcode{\sphinxupquote{6}}
27141\\
27142\hline
27143\end{tabulary}
27144\par
27145\sphinxattableend\end{savenotes}
27146
27147
27148\subsubsection{KRB5\_PAC\_TICKET\_CHECKSUM}
27149\label{\detokenize{appdev/refs/macros/KRB5_PAC_TICKET_CHECKSUM:krb5-pac-ticket-checksum}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_TICKET_CHECKSUM:krb5-pac-ticket-checksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_TICKET_CHECKSUM::doc}}\index{KRB5\_PAC\_TICKET\_CHECKSUM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PAC\_TICKET\_CHECKSUM}\spxextra{built\sphinxhyphen{}in variable}}
27150
27151\begin{fulllineitems}
27152\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_TICKET_CHECKSUM:KRB5_PAC_TICKET_CHECKSUM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PAC\_TICKET\_CHECKSUM}}}
27153\end{fulllineitems}
27154
27155
27156\sphinxAtStartPar
27157Ticket checksum.
27158
27159
27160\begin{savenotes}\sphinxattablestart
27161\centering
27162\begin{tabulary}{\linewidth}[t]{|T|T|}
27163\hline
27164
27165\sphinxAtStartPar
27166\sphinxcode{\sphinxupquote{KRB5\_PAC\_TICKET\_CHECKSUM}}
27167&
27168\sphinxAtStartPar
27169\sphinxcode{\sphinxupquote{16}}
27170\\
27171\hline
27172\end{tabulary}
27173\par
27174\sphinxattableend\end{savenotes}
27175
27176
27177\subsubsection{KRB5\_PAC\_UPN\_DNS\_INFO}
27178\label{\detokenize{appdev/refs/macros/KRB5_PAC_UPN_DNS_INFO:krb5-pac-upn-dns-info}}\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}}\index{KRB5\_PAC\_UPN\_DNS\_INFO (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PAC\_UPN\_DNS\_INFO}\spxextra{built\sphinxhyphen{}in variable}}
27179
27180\begin{fulllineitems}
27181\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_UPN_DNS_INFO:KRB5_PAC_UPN_DNS_INFO}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PAC\_UPN\_DNS\_INFO}}}
27182\end{fulllineitems}
27183
27184
27185\sphinxAtStartPar
27186User principal name and DNS info.
27187
27188
27189\begin{savenotes}\sphinxattablestart
27190\centering
27191\begin{tabulary}{\linewidth}[t]{|T|T|}
27192\hline
27193
27194\sphinxAtStartPar
27195\sphinxcode{\sphinxupquote{KRB5\_PAC\_UPN\_DNS\_INFO}}
27196&
27197\sphinxAtStartPar
27198\sphinxcode{\sphinxupquote{12}}
27199\\
27200\hline
27201\end{tabulary}
27202\par
27203\sphinxattableend\end{savenotes}
27204
27205
27206\subsubsection{KRB5\_PAC\_FULL\_CHECKSUM}
27207\label{\detokenize{appdev/refs/macros/KRB5_PAC_FULL_CHECKSUM:krb5-pac-full-checksum}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_FULL_CHECKSUM:krb5-pac-full-checksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_FULL_CHECKSUM::doc}}\index{KRB5\_PAC\_FULL\_CHECKSUM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PAC\_FULL\_CHECKSUM}\spxextra{built\sphinxhyphen{}in variable}}
27208
27209\begin{fulllineitems}
27210\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_FULL_CHECKSUM:KRB5_PAC_FULL_CHECKSUM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PAC\_FULL\_CHECKSUM}}}
27211\end{fulllineitems}
27212
27213
27214\sphinxAtStartPar
27215KDC full checksum.
27216
27217
27218\begin{savenotes}\sphinxattablestart
27219\centering
27220\begin{tabulary}{\linewidth}[t]{|T|T|}
27221\hline
27222
27223\sphinxAtStartPar
27224\sphinxcode{\sphinxupquote{KRB5\_PAC\_FULL\_CHECKSUM}}
27225&
27226\sphinxAtStartPar
27227\sphinxcode{\sphinxupquote{19}}
27228\\
27229\hline
27230\end{tabulary}
27231\par
27232\sphinxattableend\end{savenotes}
27233
27234
27235\subsubsection{KRB5\_PADATA\_AFS3\_SALT}
27236\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}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AFS3_SALT::doc}}\index{KRB5\_PADATA\_AFS3\_SALT (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_AFS3\_SALT}\spxextra{built\sphinxhyphen{}in variable}}
27237
27238\begin{fulllineitems}
27239\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AFS3_SALT:KRB5_PADATA_AFS3_SALT}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_AFS3\_SALT}}}
27240\end{fulllineitems}
27241
27242
27243\sphinxAtStartPar
27244Cygnus.
27245
27246\sphinxAtStartPar
27247RFC 4120, 3961
27248
27249
27250\begin{savenotes}\sphinxattablestart
27251\centering
27252\begin{tabulary}{\linewidth}[t]{|T|T|}
27253\hline
27254
27255\sphinxAtStartPar
27256\sphinxcode{\sphinxupquote{KRB5\_PADATA\_AFS3\_SALT}}
27257&
27258\sphinxAtStartPar
27259\sphinxcode{\sphinxupquote{10}}
27260\\
27261\hline
27262\end{tabulary}
27263\par
27264\sphinxattableend\end{savenotes}
27265
27266
27267\subsubsection{KRB5\_PADATA\_AP\_REQ}
27268\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AP_REQ:krb5-padata-ap-req}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AP_REQ:krb5-padata-ap-req-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AP_REQ::doc}}\index{KRB5\_PADATA\_AP\_REQ (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_AP\_REQ}\spxextra{built\sphinxhyphen{}in variable}}
27269
27270\begin{fulllineitems}
27271\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AP_REQ:KRB5_PADATA_AP_REQ}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_AP\_REQ}}}
27272\end{fulllineitems}
27273
27274
27275
27276\begin{savenotes}\sphinxattablestart
27277\centering
27278\begin{tabulary}{\linewidth}[t]{|T|T|}
27279\hline
27280
27281\sphinxAtStartPar
27282\sphinxcode{\sphinxupquote{KRB5\_PADATA\_AP\_REQ}}
27283&
27284\sphinxAtStartPar
27285\sphinxcode{\sphinxupquote{1}}
27286\\
27287\hline
27288\end{tabulary}
27289\par
27290\sphinxattableend\end{savenotes}
27291
27292
27293\subsubsection{KRB5\_PADATA\_AS\_CHECKSUM}
27294\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_AS\_CHECKSUM}\spxextra{built\sphinxhyphen{}in variable}}
27295
27296\begin{fulllineitems}
27297\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_CHECKSUM:KRB5_PADATA_AS_CHECKSUM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_AS\_CHECKSUM}}}
27298\end{fulllineitems}
27299
27300
27301\sphinxAtStartPar
27302AS checksum.
27303
27304
27305\begin{savenotes}\sphinxattablestart
27306\centering
27307\begin{tabulary}{\linewidth}[t]{|T|T|}
27308\hline
27309
27310\sphinxAtStartPar
27311\sphinxcode{\sphinxupquote{KRB5\_PADATA\_AS\_CHECKSUM}}
27312&
27313\sphinxAtStartPar
27314\sphinxcode{\sphinxupquote{132}}
27315\\
27316\hline
27317\end{tabulary}
27318\par
27319\sphinxattableend\end{savenotes}
27320
27321
27322\subsubsection{KRB5\_PADATA\_AS\_FRESHNESS}
27323\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_FRESHNESS:krb5-padata-as-freshness}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_FRESHNESS:krb5-padata-as-freshness-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_FRESHNESS::doc}}\index{KRB5\_PADATA\_AS\_FRESHNESS (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_AS\_FRESHNESS}\spxextra{built\sphinxhyphen{}in variable}}
27324
27325\begin{fulllineitems}
27326\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_FRESHNESS:KRB5_PADATA_AS_FRESHNESS}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_AS\_FRESHNESS}}}
27327\end{fulllineitems}
27328
27329
27330\sphinxAtStartPar
27331RFC 8070.
27332
27333
27334\begin{savenotes}\sphinxattablestart
27335\centering
27336\begin{tabulary}{\linewidth}[t]{|T|T|}
27337\hline
27338
27339\sphinxAtStartPar
27340\sphinxcode{\sphinxupquote{KRB5\_PADATA\_AS\_FRESHNESS}}
27341&
27342\sphinxAtStartPar
27343\sphinxcode{\sphinxupquote{150}}
27344\\
27345\hline
27346\end{tabulary}
27347\par
27348\sphinxattableend\end{savenotes}
27349
27350
27351\subsubsection{KRB5\_PADATA\_ENCRYPTED\_CHALLENGE}
27352\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENCRYPTED_CHALLENGE:krb5-padata-encrypted-challenge}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENCRYPTED_CHALLENGE:krb5-padata-encrypted-challenge-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENCRYPTED_CHALLENGE::doc}}\index{KRB5\_PADATA\_ENCRYPTED\_CHALLENGE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_ENCRYPTED\_CHALLENGE}\spxextra{built\sphinxhyphen{}in variable}}
27353
27354\begin{fulllineitems}
27355\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENCRYPTED_CHALLENGE:KRB5_PADATA_ENCRYPTED_CHALLENGE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_ENCRYPTED\_CHALLENGE}}}
27356\end{fulllineitems}
27357
27358
27359\sphinxAtStartPar
27360RFC 6113.
27361
27362
27363\begin{savenotes}\sphinxattablestart
27364\centering
27365\begin{tabulary}{\linewidth}[t]{|T|T|}
27366\hline
27367
27368\sphinxAtStartPar
27369\sphinxcode{\sphinxupquote{KRB5\_PADATA\_ENCRYPTED\_CHALLENGE}}
27370&
27371\sphinxAtStartPar
27372\sphinxcode{\sphinxupquote{138}}
27373\\
27374\hline
27375\end{tabulary}
27376\par
27377\sphinxattableend\end{savenotes}
27378
27379
27380\subsubsection{KRB5\_PADATA\_ENC\_SANDIA\_SECURID}
27381\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:krb5-padata-enc-sandia-securid-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_SANDIA_SECURID::doc}}\index{KRB5\_PADATA\_ENC\_SANDIA\_SECURID (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_ENC\_SANDIA\_SECURID}\spxextra{built\sphinxhyphen{}in variable}}
27382
27383\begin{fulllineitems}
27384\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_SANDIA_SECURID:KRB5_PADATA_ENC_SANDIA_SECURID}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_ENC\_SANDIA\_SECURID}}}
27385\end{fulllineitems}
27386
27387
27388\sphinxAtStartPar
27389SecurId passcode.
27390
27391\sphinxAtStartPar
27392RFC 4120
27393
27394
27395\begin{savenotes}\sphinxattablestart
27396\centering
27397\begin{tabulary}{\linewidth}[t]{|T|T|}
27398\hline
27399
27400\sphinxAtStartPar
27401\sphinxcode{\sphinxupquote{KRB5\_PADATA\_ENC\_SANDIA\_SECURID}}
27402&
27403\sphinxAtStartPar
27404\sphinxcode{\sphinxupquote{6}}
27405\\
27406\hline
27407\end{tabulary}
27408\par
27409\sphinxattableend\end{savenotes}
27410
27411
27412\subsubsection{KRB5\_PADATA\_ENC\_TIMESTAMP}
27413\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}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_TIMESTAMP::doc}}\index{KRB5\_PADATA\_ENC\_TIMESTAMP (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_ENC\_TIMESTAMP}\spxextra{built\sphinxhyphen{}in variable}}
27414
27415\begin{fulllineitems}
27416\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_TIMESTAMP:KRB5_PADATA_ENC_TIMESTAMP}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_ENC\_TIMESTAMP}}}
27417\end{fulllineitems}
27418
27419
27420\sphinxAtStartPar
27421RFC 4120.
27422
27423
27424\begin{savenotes}\sphinxattablestart
27425\centering
27426\begin{tabulary}{\linewidth}[t]{|T|T|}
27427\hline
27428
27429\sphinxAtStartPar
27430\sphinxcode{\sphinxupquote{KRB5\_PADATA\_ENC\_TIMESTAMP}}
27431&
27432\sphinxAtStartPar
27433\sphinxcode{\sphinxupquote{2}}
27434\\
27435\hline
27436\end{tabulary}
27437\par
27438\sphinxattableend\end{savenotes}
27439
27440
27441\subsubsection{KRB5\_PADATA\_ENC\_UNIX\_TIME}
27442\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_ENC\_UNIX\_TIME}\spxextra{built\sphinxhyphen{}in variable}}
27443
27444\begin{fulllineitems}
27445\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_UNIX_TIME:KRB5_PADATA_ENC_UNIX_TIME}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_ENC\_UNIX\_TIME}}}
27446\end{fulllineitems}
27447
27448
27449\sphinxAtStartPar
27450timestamp encrypted in key.
27451
27452\sphinxAtStartPar
27453RFC 4120
27454
27455
27456\begin{savenotes}\sphinxattablestart
27457\centering
27458\begin{tabulary}{\linewidth}[t]{|T|T|}
27459\hline
27460
27461\sphinxAtStartPar
27462\sphinxcode{\sphinxupquote{KRB5\_PADATA\_ENC\_UNIX\_TIME}}
27463&
27464\sphinxAtStartPar
27465\sphinxcode{\sphinxupquote{5}}
27466\\
27467\hline
27468\end{tabulary}
27469\par
27470\sphinxattableend\end{savenotes}
27471
27472
27473\subsubsection{KRB5\_PADATA\_ETYPE\_INFO}
27474\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}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO::doc}}\index{KRB5\_PADATA\_ETYPE\_INFO (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_ETYPE\_INFO}\spxextra{built\sphinxhyphen{}in variable}}
27475
27476\begin{fulllineitems}
27477\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO:KRB5_PADATA_ETYPE_INFO}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_ETYPE\_INFO}}}
27478\end{fulllineitems}
27479
27480
27481\sphinxAtStartPar
27482Etype info for preauth.
27483
27484\sphinxAtStartPar
27485RFC 4120
27486
27487
27488\begin{savenotes}\sphinxattablestart
27489\centering
27490\begin{tabulary}{\linewidth}[t]{|T|T|}
27491\hline
27492
27493\sphinxAtStartPar
27494\sphinxcode{\sphinxupquote{KRB5\_PADATA\_ETYPE\_INFO}}
27495&
27496\sphinxAtStartPar
27497\sphinxcode{\sphinxupquote{11}}
27498\\
27499\hline
27500\end{tabulary}
27501\par
27502\sphinxattableend\end{savenotes}
27503
27504
27505\subsubsection{KRB5\_PADATA\_ETYPE\_INFO2}
27506\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO2:krb5-padata-etype-info2}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO2:krb5-padata-etype-info2-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO2::doc}}\index{KRB5\_PADATA\_ETYPE\_INFO2 (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_ETYPE\_INFO2}\spxextra{built\sphinxhyphen{}in variable}}
27507
27508\begin{fulllineitems}
27509\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO2:KRB5_PADATA_ETYPE_INFO2}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_ETYPE\_INFO2}}}
27510\end{fulllineitems}
27511
27512
27513\sphinxAtStartPar
27514RFC 4120.
27515
27516
27517\begin{savenotes}\sphinxattablestart
27518\centering
27519\begin{tabulary}{\linewidth}[t]{|T|T|}
27520\hline
27521
27522\sphinxAtStartPar
27523\sphinxcode{\sphinxupquote{KRB5\_PADATA\_ETYPE\_INFO2}}
27524&
27525\sphinxAtStartPar
27526\sphinxcode{\sphinxupquote{19}}
27527\\
27528\hline
27529\end{tabulary}
27530\par
27531\sphinxattableend\end{savenotes}
27532
27533
27534\subsubsection{KRB5\_PADATA\_FOR\_USER}
27535\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FOR_USER:krb5-padata-for-user}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FOR_USER:krb5-padata-for-user-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FOR_USER::doc}}\index{KRB5\_PADATA\_FOR\_USER (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_FOR\_USER}\spxextra{built\sphinxhyphen{}in variable}}
27536
27537\begin{fulllineitems}
27538\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FOR_USER:KRB5_PADATA_FOR_USER}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_FOR\_USER}}}
27539\end{fulllineitems}
27540
27541
27542\sphinxAtStartPar
27543username protocol transition request
27544
27545
27546\begin{savenotes}\sphinxattablestart
27547\centering
27548\begin{tabulary}{\linewidth}[t]{|T|T|}
27549\hline
27550
27551\sphinxAtStartPar
27552\sphinxcode{\sphinxupquote{KRB5\_PADATA\_FOR\_USER}}
27553&
27554\sphinxAtStartPar
27555\sphinxcode{\sphinxupquote{129}}
27556\\
27557\hline
27558\end{tabulary}
27559\par
27560\sphinxattableend\end{savenotes}
27561
27562
27563\subsubsection{KRB5\_PADATA\_FX\_COOKIE}
27564\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_COOKIE:krb5-padata-fx-cookie}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_COOKIE:krb5-padata-fx-cookie-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_COOKIE::doc}}\index{KRB5\_PADATA\_FX\_COOKIE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_FX\_COOKIE}\spxextra{built\sphinxhyphen{}in variable}}
27565
27566\begin{fulllineitems}
27567\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_COOKIE:KRB5_PADATA_FX_COOKIE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_FX\_COOKIE}}}
27568\end{fulllineitems}
27569
27570
27571\sphinxAtStartPar
27572RFC 6113.
27573
27574
27575\begin{savenotes}\sphinxattablestart
27576\centering
27577\begin{tabulary}{\linewidth}[t]{|T|T|}
27578\hline
27579
27580\sphinxAtStartPar
27581\sphinxcode{\sphinxupquote{KRB5\_PADATA\_FX\_COOKIE}}
27582&
27583\sphinxAtStartPar
27584\sphinxcode{\sphinxupquote{133}}
27585\\
27586\hline
27587\end{tabulary}
27588\par
27589\sphinxattableend\end{savenotes}
27590
27591
27592\subsubsection{KRB5\_PADATA\_FX\_ERROR}
27593\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_ERROR:krb5-padata-fx-error}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_ERROR:krb5-padata-fx-error-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_ERROR::doc}}\index{KRB5\_PADATA\_FX\_ERROR (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_FX\_ERROR}\spxextra{built\sphinxhyphen{}in variable}}
27594
27595\begin{fulllineitems}
27596\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_ERROR:KRB5_PADATA_FX_ERROR}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_FX\_ERROR}}}
27597\end{fulllineitems}
27598
27599
27600\sphinxAtStartPar
27601RFC 6113.
27602
27603
27604\begin{savenotes}\sphinxattablestart
27605\centering
27606\begin{tabulary}{\linewidth}[t]{|T|T|}
27607\hline
27608
27609\sphinxAtStartPar
27610\sphinxcode{\sphinxupquote{KRB5\_PADATA\_FX\_ERROR}}
27611&
27612\sphinxAtStartPar
27613\sphinxcode{\sphinxupquote{137}}
27614\\
27615\hline
27616\end{tabulary}
27617\par
27618\sphinxattableend\end{savenotes}
27619
27620
27621\subsubsection{KRB5\_PADATA\_FX\_FAST}
27622\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}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_FAST::doc}}\index{KRB5\_PADATA\_FX\_FAST (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_FX\_FAST}\spxextra{built\sphinxhyphen{}in variable}}
27623
27624\begin{fulllineitems}
27625\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_FAST:KRB5_PADATA_FX_FAST}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_FX\_FAST}}}
27626\end{fulllineitems}
27627
27628
27629\sphinxAtStartPar
27630RFC 6113.
27631
27632
27633\begin{savenotes}\sphinxattablestart
27634\centering
27635\begin{tabulary}{\linewidth}[t]{|T|T|}
27636\hline
27637
27638\sphinxAtStartPar
27639\sphinxcode{\sphinxupquote{KRB5\_PADATA\_FX\_FAST}}
27640&
27641\sphinxAtStartPar
27642\sphinxcode{\sphinxupquote{136}}
27643\\
27644\hline
27645\end{tabulary}
27646\par
27647\sphinxattableend\end{savenotes}
27648
27649
27650\subsubsection{KRB5\_PADATA\_GET\_FROM\_TYPED\_DATA}
27651\label{\detokenize{appdev/refs/macros/KRB5_PADATA_GET_FROM_TYPED_DATA:krb5-padata-get-from-typed-data}}\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}}\index{KRB5\_PADATA\_GET\_FROM\_TYPED\_DATA (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_GET\_FROM\_TYPED\_DATA}\spxextra{built\sphinxhyphen{}in variable}}
27652
27653\begin{fulllineitems}
27654\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_GET_FROM_TYPED_DATA:KRB5_PADATA_GET_FROM_TYPED_DATA}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_GET\_FROM\_TYPED\_DATA}}}
27655\end{fulllineitems}
27656
27657
27658\sphinxAtStartPar
27659Embedded in typed data.
27660
27661\sphinxAtStartPar
27662RFC 4120
27663
27664
27665\begin{savenotes}\sphinxattablestart
27666\centering
27667\begin{tabulary}{\linewidth}[t]{|T|T|}
27668\hline
27669
27670\sphinxAtStartPar
27671\sphinxcode{\sphinxupquote{KRB5\_PADATA\_GET\_FROM\_TYPED\_DATA}}
27672&
27673\sphinxAtStartPar
27674\sphinxcode{\sphinxupquote{22}}
27675\\
27676\hline
27677\end{tabulary}
27678\par
27679\sphinxattableend\end{savenotes}
27680
27681
27682\subsubsection{KRB5\_PADATA\_NONE}
27683\label{\detokenize{appdev/refs/macros/KRB5_PADATA_NONE:krb5-padata-none}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_NONE:krb5-padata-none-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_NONE::doc}}\index{KRB5\_PADATA\_NONE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_NONE}\spxextra{built\sphinxhyphen{}in variable}}
27684
27685\begin{fulllineitems}
27686\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_NONE:KRB5_PADATA_NONE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_NONE}}}
27687\end{fulllineitems}
27688
27689
27690
27691\begin{savenotes}\sphinxattablestart
27692\centering
27693\begin{tabulary}{\linewidth}[t]{|T|T|}
27694\hline
27695
27696\sphinxAtStartPar
27697\sphinxcode{\sphinxupquote{KRB5\_PADATA\_NONE}}
27698&
27699\sphinxAtStartPar
27700\sphinxcode{\sphinxupquote{0}}
27701\\
27702\hline
27703\end{tabulary}
27704\par
27705\sphinxattableend\end{savenotes}
27706
27707
27708\subsubsection{KRB5\_PADATA\_OSF\_DCE}
27709\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OSF_DCE:krb5-padata-osf-dce}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OSF_DCE:krb5-padata-osf-dce-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OSF_DCE::doc}}\index{KRB5\_PADATA\_OSF\_DCE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_OSF\_DCE}\spxextra{built\sphinxhyphen{}in variable}}
27710
27711\begin{fulllineitems}
27712\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OSF_DCE:KRB5_PADATA_OSF_DCE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_OSF\_DCE}}}
27713\end{fulllineitems}
27714
27715
27716\sphinxAtStartPar
27717OSF DCE.
27718
27719\sphinxAtStartPar
27720RFC 4120
27721
27722
27723\begin{savenotes}\sphinxattablestart
27724\centering
27725\begin{tabulary}{\linewidth}[t]{|T|T|}
27726\hline
27727
27728\sphinxAtStartPar
27729\sphinxcode{\sphinxupquote{KRB5\_PADATA\_OSF\_DCE}}
27730&
27731\sphinxAtStartPar
27732\sphinxcode{\sphinxupquote{8}}
27733\\
27734\hline
27735\end{tabulary}
27736\par
27737\sphinxattableend\end{savenotes}
27738
27739
27740\subsubsection{KRB5\_PADATA\_OTP\_CHALLENGE}
27741\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}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_CHALLENGE::doc}}\index{KRB5\_PADATA\_OTP\_CHALLENGE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_OTP\_CHALLENGE}\spxextra{built\sphinxhyphen{}in variable}}
27742
27743\begin{fulllineitems}
27744\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_CHALLENGE:KRB5_PADATA_OTP_CHALLENGE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_OTP\_CHALLENGE}}}
27745\end{fulllineitems}
27746
27747
27748\sphinxAtStartPar
27749RFC 6560 section 4.1.
27750
27751
27752\begin{savenotes}\sphinxattablestart
27753\centering
27754\begin{tabulary}{\linewidth}[t]{|T|T|}
27755\hline
27756
27757\sphinxAtStartPar
27758\sphinxcode{\sphinxupquote{KRB5\_PADATA\_OTP\_CHALLENGE}}
27759&
27760\sphinxAtStartPar
27761\sphinxcode{\sphinxupquote{141}}
27762\\
27763\hline
27764\end{tabulary}
27765\par
27766\sphinxattableend\end{savenotes}
27767
27768
27769\subsubsection{KRB5\_PADATA\_OTP\_PIN\_CHANGE}
27770\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}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_PIN_CHANGE::doc}}\index{KRB5\_PADATA\_OTP\_PIN\_CHANGE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_OTP\_PIN\_CHANGE}\spxextra{built\sphinxhyphen{}in variable}}
27771
27772\begin{fulllineitems}
27773\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_PIN_CHANGE:KRB5_PADATA_OTP_PIN_CHANGE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_OTP\_PIN\_CHANGE}}}
27774\end{fulllineitems}
27775
27776
27777\sphinxAtStartPar
27778RFC 6560 section 4.3.
27779
27780
27781\begin{savenotes}\sphinxattablestart
27782\centering
27783\begin{tabulary}{\linewidth}[t]{|T|T|}
27784\hline
27785
27786\sphinxAtStartPar
27787\sphinxcode{\sphinxupquote{KRB5\_PADATA\_OTP\_PIN\_CHANGE}}
27788&
27789\sphinxAtStartPar
27790\sphinxcode{\sphinxupquote{144}}
27791\\
27792\hline
27793\end{tabulary}
27794\par
27795\sphinxattableend\end{savenotes}
27796
27797
27798\subsubsection{KRB5\_PADATA\_OTP\_REQUEST}
27799\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_REQUEST:krb5-padata-otp-request}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_REQUEST:krb5-padata-otp-request-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_REQUEST::doc}}\index{KRB5\_PADATA\_OTP\_REQUEST (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_OTP\_REQUEST}\spxextra{built\sphinxhyphen{}in variable}}
27800
27801\begin{fulllineitems}
27802\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_REQUEST:KRB5_PADATA_OTP_REQUEST}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_OTP\_REQUEST}}}
27803\end{fulllineitems}
27804
27805
27806\sphinxAtStartPar
27807RFC 6560 section 4.2.
27808
27809
27810\begin{savenotes}\sphinxattablestart
27811\centering
27812\begin{tabulary}{\linewidth}[t]{|T|T|}
27813\hline
27814
27815\sphinxAtStartPar
27816\sphinxcode{\sphinxupquote{KRB5\_PADATA\_OTP\_REQUEST}}
27817&
27818\sphinxAtStartPar
27819\sphinxcode{\sphinxupquote{142}}
27820\\
27821\hline
27822\end{tabulary}
27823\par
27824\sphinxattableend\end{savenotes}
27825
27826
27827\subsubsection{KRB5\_PADATA\_PAC\_OPTIONS}
27828\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}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_OPTIONS::doc}}\index{KRB5\_PADATA\_PAC\_OPTIONS (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_PAC\_OPTIONS}\spxextra{built\sphinxhyphen{}in variable}}
27829
27830\begin{fulllineitems}
27831\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_OPTIONS:KRB5_PADATA_PAC_OPTIONS}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_PAC\_OPTIONS}}}
27832\end{fulllineitems}
27833
27834
27835\sphinxAtStartPar
27836MS\sphinxhyphen{}KILE and MS\sphinxhyphen{}SFU.
27837
27838
27839\begin{savenotes}\sphinxattablestart
27840\centering
27841\begin{tabulary}{\linewidth}[t]{|T|T|}
27842\hline
27843
27844\sphinxAtStartPar
27845\sphinxcode{\sphinxupquote{KRB5\_PADATA\_PAC\_OPTIONS}}
27846&
27847\sphinxAtStartPar
27848\sphinxcode{\sphinxupquote{167}}
27849\\
27850\hline
27851\end{tabulary}
27852\par
27853\sphinxattableend\end{savenotes}
27854
27855
27856\subsubsection{KRB5\_PADATA\_PAC\_REQUEST}
27857\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_REQUEST:krb5-padata-pac-request}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_REQUEST:krb5-padata-pac-request-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_REQUEST::doc}}\index{KRB5\_PADATA\_PAC\_REQUEST (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_PAC\_REQUEST}\spxextra{built\sphinxhyphen{}in variable}}
27858
27859\begin{fulllineitems}
27860\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_REQUEST:KRB5_PADATA_PAC_REQUEST}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_PAC\_REQUEST}}}
27861\end{fulllineitems}
27862
27863
27864\sphinxAtStartPar
27865include Windows PAC
27866
27867
27868\begin{savenotes}\sphinxattablestart
27869\centering
27870\begin{tabulary}{\linewidth}[t]{|T|T|}
27871\hline
27872
27873\sphinxAtStartPar
27874\sphinxcode{\sphinxupquote{KRB5\_PADATA\_PAC\_REQUEST}}
27875&
27876\sphinxAtStartPar
27877\sphinxcode{\sphinxupquote{128}}
27878\\
27879\hline
27880\end{tabulary}
27881\par
27882\sphinxattableend\end{savenotes}
27883
27884
27885\subsubsection{KRB5\_PADATA\_PKINIT\_KX}
27886\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_PKINIT\_KX}\spxextra{built\sphinxhyphen{}in variable}}
27887
27888\begin{fulllineitems}
27889\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PKINIT_KX:KRB5_PADATA_PKINIT_KX}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_PKINIT\_KX}}}
27890\end{fulllineitems}
27891
27892
27893\sphinxAtStartPar
27894RFC 6112.
27895
27896
27897\begin{savenotes}\sphinxattablestart
27898\centering
27899\begin{tabulary}{\linewidth}[t]{|T|T|}
27900\hline
27901
27902\sphinxAtStartPar
27903\sphinxcode{\sphinxupquote{KRB5\_PADATA\_PKINIT\_KX}}
27904&
27905\sphinxAtStartPar
27906\sphinxcode{\sphinxupquote{147}}
27907\\
27908\hline
27909\end{tabulary}
27910\par
27911\sphinxattableend\end{savenotes}
27912
27913
27914\subsubsection{KRB5\_PADATA\_PK\_AS\_REP}
27915\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:krb5-padata-pk-as-rep-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP::doc}}\index{KRB5\_PADATA\_PK\_AS\_REP (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_PK\_AS\_REP}\spxextra{built\sphinxhyphen{}in variable}}
27916
27917\begin{fulllineitems}
27918\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP:KRB5_PADATA_PK_AS_REP}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_PK\_AS\_REP}}}
27919\end{fulllineitems}
27920
27921
27922\sphinxAtStartPar
27923PKINIT.
27924
27925\sphinxAtStartPar
27926RFC 4556
27927
27928
27929\begin{savenotes}\sphinxattablestart
27930\centering
27931\begin{tabulary}{\linewidth}[t]{|T|T|}
27932\hline
27933
27934\sphinxAtStartPar
27935\sphinxcode{\sphinxupquote{KRB5\_PADATA\_PK\_AS\_REP}}
27936&
27937\sphinxAtStartPar
27938\sphinxcode{\sphinxupquote{17}}
27939\\
27940\hline
27941\end{tabulary}
27942\par
27943\sphinxattableend\end{savenotes}
27944
27945
27946\subsubsection{KRB5\_PADATA\_PK\_AS\_REP\_OLD}
27947\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP_OLD:krb5-padata-pk-as-rep-old}}\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}}\index{KRB5\_PADATA\_PK\_AS\_REP\_OLD (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_PK\_AS\_REP\_OLD}\spxextra{built\sphinxhyphen{}in variable}}
27948
27949\begin{fulllineitems}
27950\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP_OLD:KRB5_PADATA_PK_AS_REP_OLD}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_PK\_AS\_REP\_OLD}}}
27951\end{fulllineitems}
27952
27953
27954\sphinxAtStartPar
27955PKINIT.
27956
27957
27958\begin{savenotes}\sphinxattablestart
27959\centering
27960\begin{tabulary}{\linewidth}[t]{|T|T|}
27961\hline
27962
27963\sphinxAtStartPar
27964\sphinxcode{\sphinxupquote{KRB5\_PADATA\_PK\_AS\_REP\_OLD}}
27965&
27966\sphinxAtStartPar
27967\sphinxcode{\sphinxupquote{15}}
27968\\
27969\hline
27970\end{tabulary}
27971\par
27972\sphinxattableend\end{savenotes}
27973
27974
27975\subsubsection{KRB5\_PADATA\_PK\_AS\_REQ}
27976\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}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ::doc}}\index{KRB5\_PADATA\_PK\_AS\_REQ (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_PK\_AS\_REQ}\spxextra{built\sphinxhyphen{}in variable}}
27977
27978\begin{fulllineitems}
27979\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ:KRB5_PADATA_PK_AS_REQ}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_PK\_AS\_REQ}}}
27980\end{fulllineitems}
27981
27982
27983\sphinxAtStartPar
27984PKINIT.
27985
27986\sphinxAtStartPar
27987RFC 4556
27988
27989
27990\begin{savenotes}\sphinxattablestart
27991\centering
27992\begin{tabulary}{\linewidth}[t]{|T|T|}
27993\hline
27994
27995\sphinxAtStartPar
27996\sphinxcode{\sphinxupquote{KRB5\_PADATA\_PK\_AS\_REQ}}
27997&
27998\sphinxAtStartPar
27999\sphinxcode{\sphinxupquote{16}}
28000\\
28001\hline
28002\end{tabulary}
28003\par
28004\sphinxattableend\end{savenotes}
28005
28006
28007\subsubsection{KRB5\_PADATA\_PK\_AS\_REQ\_OLD}
28008\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_PK\_AS\_REQ\_OLD}\spxextra{built\sphinxhyphen{}in variable}}
28009
28010\begin{fulllineitems}
28011\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ_OLD:KRB5_PADATA_PK_AS_REQ_OLD}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_PK\_AS\_REQ\_OLD}}}
28012\end{fulllineitems}
28013
28014
28015\sphinxAtStartPar
28016PKINIT.
28017
28018
28019\begin{savenotes}\sphinxattablestart
28020\centering
28021\begin{tabulary}{\linewidth}[t]{|T|T|}
28022\hline
28023
28024\sphinxAtStartPar
28025\sphinxcode{\sphinxupquote{KRB5\_PADATA\_PK\_AS\_REQ\_OLD}}
28026&
28027\sphinxAtStartPar
28028\sphinxcode{\sphinxupquote{14}}
28029\\
28030\hline
28031\end{tabulary}
28032\par
28033\sphinxattableend\end{savenotes}
28034
28035
28036\subsubsection{KRB5\_PADATA\_PW\_SALT}
28037\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PW_SALT:krb5-padata-pw-salt}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PW_SALT:krb5-padata-pw-salt-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PW_SALT::doc}}\index{KRB5\_PADATA\_PW\_SALT (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_PW\_SALT}\spxextra{built\sphinxhyphen{}in variable}}
28038
28039\begin{fulllineitems}
28040\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PW_SALT:KRB5_PADATA_PW_SALT}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_PW\_SALT}}}
28041\end{fulllineitems}
28042
28043
28044\sphinxAtStartPar
28045RFC 4120.
28046
28047
28048\begin{savenotes}\sphinxattablestart
28049\centering
28050\begin{tabulary}{\linewidth}[t]{|T|T|}
28051\hline
28052
28053\sphinxAtStartPar
28054\sphinxcode{\sphinxupquote{KRB5\_PADATA\_PW\_SALT}}
28055&
28056\sphinxAtStartPar
28057\sphinxcode{\sphinxupquote{3}}
28058\\
28059\hline
28060\end{tabulary}
28061\par
28062\sphinxattableend\end{savenotes}
28063
28064
28065\subsubsection{KRB5\_PADATA\_REFERRAL}
28066\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REFERRAL:krb5-padata-referral}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REFERRAL:krb5-padata-referral-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REFERRAL::doc}}\index{KRB5\_PADATA\_REFERRAL (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_REFERRAL}\spxextra{built\sphinxhyphen{}in variable}}
28067
28068\begin{fulllineitems}
28069\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REFERRAL:KRB5_PADATA_REFERRAL}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_REFERRAL}}}
28070\end{fulllineitems}
28071
28072
28073\sphinxAtStartPar
28074draft referral system
28075
28076
28077\begin{savenotes}\sphinxattablestart
28078\centering
28079\begin{tabulary}{\linewidth}[t]{|T|T|}
28080\hline
28081
28082\sphinxAtStartPar
28083\sphinxcode{\sphinxupquote{KRB5\_PADATA\_REFERRAL}}
28084&
28085\sphinxAtStartPar
28086\sphinxcode{\sphinxupquote{25}}
28087\\
28088\hline
28089\end{tabulary}
28090\par
28091\sphinxattableend\end{savenotes}
28092
28093
28094\subsubsection{KRB5\_PADATA\_S4U\_X509\_USER}
28095\label{\detokenize{appdev/refs/macros/KRB5_PADATA_S4U_X509_USER:krb5-padata-s4u-x509-user}}\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}}\index{KRB5\_PADATA\_S4U\_X509\_USER (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_S4U\_X509\_USER}\spxextra{built\sphinxhyphen{}in variable}}
28096
28097\begin{fulllineitems}
28098\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_S4U_X509_USER:KRB5_PADATA_S4U_X509_USER}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_S4U\_X509\_USER}}}
28099\end{fulllineitems}
28100
28101
28102\sphinxAtStartPar
28103certificate protocol transition request
28104
28105
28106\begin{savenotes}\sphinxattablestart
28107\centering
28108\begin{tabulary}{\linewidth}[t]{|T|T|}
28109\hline
28110
28111\sphinxAtStartPar
28112\sphinxcode{\sphinxupquote{KRB5\_PADATA\_S4U\_X509\_USER}}
28113&
28114\sphinxAtStartPar
28115\sphinxcode{\sphinxupquote{130}}
28116\\
28117\hline
28118\end{tabulary}
28119\par
28120\sphinxattableend\end{savenotes}
28121
28122
28123\subsubsection{KRB5\_PADATA\_SAM\_CHALLENGE}
28124\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE:krb5-padata-sam-challenge}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE:krb5-padata-sam-challenge-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE::doc}}\index{KRB5\_PADATA\_SAM\_CHALLENGE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_SAM\_CHALLENGE}\spxextra{built\sphinxhyphen{}in variable}}
28125
28126\begin{fulllineitems}
28127\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE:KRB5_PADATA_SAM_CHALLENGE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_SAM\_CHALLENGE}}}
28128\end{fulllineitems}
28129
28130
28131\sphinxAtStartPar
28132SAM/OTP.
28133
28134
28135\begin{savenotes}\sphinxattablestart
28136\centering
28137\begin{tabulary}{\linewidth}[t]{|T|T|}
28138\hline
28139
28140\sphinxAtStartPar
28141\sphinxcode{\sphinxupquote{KRB5\_PADATA\_SAM\_CHALLENGE}}
28142&
28143\sphinxAtStartPar
28144\sphinxcode{\sphinxupquote{12}}
28145\\
28146\hline
28147\end{tabulary}
28148\par
28149\sphinxattableend\end{savenotes}
28150
28151
28152\subsubsection{KRB5\_PADATA\_SAM\_CHALLENGE\_2}
28153\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:krb5-padata-sam-challenge-2-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE_2::doc}}\index{KRB5\_PADATA\_SAM\_CHALLENGE\_2 (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_SAM\_CHALLENGE\_2}\spxextra{built\sphinxhyphen{}in variable}}
28154
28155\begin{fulllineitems}
28156\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE_2:KRB5_PADATA_SAM_CHALLENGE_2}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_SAM\_CHALLENGE\_2}}}
28157\end{fulllineitems}
28158
28159
28160\sphinxAtStartPar
28161draft challenge system, updated
28162
28163
28164\begin{savenotes}\sphinxattablestart
28165\centering
28166\begin{tabulary}{\linewidth}[t]{|T|T|}
28167\hline
28168
28169\sphinxAtStartPar
28170\sphinxcode{\sphinxupquote{KRB5\_PADATA\_SAM\_CHALLENGE\_2}}
28171&
28172\sphinxAtStartPar
28173\sphinxcode{\sphinxupquote{30}}
28174\\
28175\hline
28176\end{tabulary}
28177\par
28178\sphinxattableend\end{savenotes}
28179
28180
28181\subsubsection{KRB5\_PADATA\_SAM\_REDIRECT}
28182\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_REDIRECT:krb5-padata-sam-redirect}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_REDIRECT:krb5-padata-sam-redirect-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_REDIRECT::doc}}\index{KRB5\_PADATA\_SAM\_REDIRECT (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_SAM\_REDIRECT}\spxextra{built\sphinxhyphen{}in variable}}
28183
28184\begin{fulllineitems}
28185\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_REDIRECT:KRB5_PADATA_SAM_REDIRECT}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_SAM\_REDIRECT}}}
28186\end{fulllineitems}
28187
28188
28189\sphinxAtStartPar
28190SAM/OTP.
28191
28192\sphinxAtStartPar
28193RFC 4120
28194
28195
28196\begin{savenotes}\sphinxattablestart
28197\centering
28198\begin{tabulary}{\linewidth}[t]{|T|T|}
28199\hline
28200
28201\sphinxAtStartPar
28202\sphinxcode{\sphinxupquote{KRB5\_PADATA\_SAM\_REDIRECT}}
28203&
28204\sphinxAtStartPar
28205\sphinxcode{\sphinxupquote{21}}
28206\\
28207\hline
28208\end{tabulary}
28209\par
28210\sphinxattableend\end{savenotes}
28211
28212
28213\subsubsection{KRB5\_PADATA\_SAM\_RESPONSE}
28214\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE:krb5-padata-sam-response}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE:krb5-padata-sam-response-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE::doc}}\index{KRB5\_PADATA\_SAM\_RESPONSE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_SAM\_RESPONSE}\spxextra{built\sphinxhyphen{}in variable}}
28215
28216\begin{fulllineitems}
28217\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE:KRB5_PADATA_SAM_RESPONSE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_SAM\_RESPONSE}}}
28218\end{fulllineitems}
28219
28220
28221\sphinxAtStartPar
28222SAM/OTP.
28223
28224
28225\begin{savenotes}\sphinxattablestart
28226\centering
28227\begin{tabulary}{\linewidth}[t]{|T|T|}
28228\hline
28229
28230\sphinxAtStartPar
28231\sphinxcode{\sphinxupquote{KRB5\_PADATA\_SAM\_RESPONSE}}
28232&
28233\sphinxAtStartPar
28234\sphinxcode{\sphinxupquote{13}}
28235\\
28236\hline
28237\end{tabulary}
28238\par
28239\sphinxattableend\end{savenotes}
28240
28241
28242\subsubsection{KRB5\_PADATA\_SAM\_RESPONSE\_2}
28243\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}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE_2::doc}}\index{KRB5\_PADATA\_SAM\_RESPONSE\_2 (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_SAM\_RESPONSE\_2}\spxextra{built\sphinxhyphen{}in variable}}
28244
28245\begin{fulllineitems}
28246\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE_2:KRB5_PADATA_SAM_RESPONSE_2}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_SAM\_RESPONSE\_2}}}
28247\end{fulllineitems}
28248
28249
28250\sphinxAtStartPar
28251draft challenge system, updated
28252
28253
28254\begin{savenotes}\sphinxattablestart
28255\centering
28256\begin{tabulary}{\linewidth}[t]{|T|T|}
28257\hline
28258
28259\sphinxAtStartPar
28260\sphinxcode{\sphinxupquote{KRB5\_PADATA\_SAM\_RESPONSE\_2}}
28261&
28262\sphinxAtStartPar
28263\sphinxcode{\sphinxupquote{31}}
28264\\
28265\hline
28266\end{tabulary}
28267\par
28268\sphinxattableend\end{savenotes}
28269
28270
28271\subsubsection{KRB5\_PADATA\_SESAME}
28272\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SESAME:krb5-padata-sesame}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SESAME:krb5-padata-sesame-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SESAME::doc}}\index{KRB5\_PADATA\_SESAME (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_SESAME}\spxextra{built\sphinxhyphen{}in variable}}
28273
28274\begin{fulllineitems}
28275\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SESAME:KRB5_PADATA_SESAME}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_SESAME}}}
28276\end{fulllineitems}
28277
28278
28279\sphinxAtStartPar
28280Sesame project.
28281
28282\sphinxAtStartPar
28283RFC 4120
28284
28285
28286\begin{savenotes}\sphinxattablestart
28287\centering
28288\begin{tabulary}{\linewidth}[t]{|T|T|}
28289\hline
28290
28291\sphinxAtStartPar
28292\sphinxcode{\sphinxupquote{KRB5\_PADATA\_SESAME}}
28293&
28294\sphinxAtStartPar
28295\sphinxcode{\sphinxupquote{7}}
28296\\
28297\hline
28298\end{tabulary}
28299\par
28300\sphinxattableend\end{savenotes}
28301
28302
28303\subsubsection{KRB5\_PADATA\_SPAKE}
28304\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SPAKE:krb5-padata-spake}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SPAKE:krb5-padata-spake-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SPAKE::doc}}\index{KRB5\_PADATA\_SPAKE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_SPAKE}\spxextra{built\sphinxhyphen{}in variable}}
28305
28306\begin{fulllineitems}
28307\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SPAKE:KRB5_PADATA_SPAKE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_SPAKE}}}
28308\end{fulllineitems}
28309
28310
28311
28312\begin{savenotes}\sphinxattablestart
28313\centering
28314\begin{tabulary}{\linewidth}[t]{|T|T|}
28315\hline
28316
28317\sphinxAtStartPar
28318\sphinxcode{\sphinxupquote{KRB5\_PADATA\_SPAKE}}
28319&
28320\sphinxAtStartPar
28321\sphinxcode{\sphinxupquote{151}}
28322\\
28323\hline
28324\end{tabulary}
28325\par
28326\sphinxattableend\end{savenotes}
28327
28328
28329\subsubsection{KRB5\_PADATA\_REDHAT\_IDP\_OAUTH2}
28330\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REDHAT_IDP_OAUTH2:krb5-padata-redhat-idp-oauth2}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REDHAT_IDP_OAUTH2:krb5-padata-redhat-idp-oauth2-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REDHAT_IDP_OAUTH2::doc}}\index{KRB5\_PADATA\_REDHAT\_IDP\_OAUTH2 (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_REDHAT\_IDP\_OAUTH2}\spxextra{built\sphinxhyphen{}in variable}}
28331
28332\begin{fulllineitems}
28333\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REDHAT_IDP_OAUTH2:KRB5_PADATA_REDHAT_IDP_OAUTH2}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_REDHAT\_IDP\_OAUTH2}}}
28334\end{fulllineitems}
28335
28336
28337\sphinxAtStartPar
28338Red Hat IdP mechanism.
28339
28340
28341\begin{savenotes}\sphinxattablestart
28342\centering
28343\begin{tabulary}{\linewidth}[t]{|T|T|}
28344\hline
28345
28346\sphinxAtStartPar
28347\sphinxcode{\sphinxupquote{KRB5\_PADATA\_REDHAT\_IDP\_OAUTH2}}
28348&
28349\sphinxAtStartPar
28350\sphinxcode{\sphinxupquote{152}}
28351\\
28352\hline
28353\end{tabulary}
28354\par
28355\sphinxattableend\end{savenotes}
28356
28357
28358\subsubsection{KRB5\_PADATA\_REDHAT\_PASSKEY}
28359\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REDHAT_PASSKEY:krb5-padata-redhat-passkey}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REDHAT_PASSKEY:krb5-padata-redhat-passkey-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REDHAT_PASSKEY::doc}}\index{KRB5\_PADATA\_REDHAT\_PASSKEY (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_REDHAT\_PASSKEY}\spxextra{built\sphinxhyphen{}in variable}}
28360
28361\begin{fulllineitems}
28362\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REDHAT_PASSKEY:KRB5_PADATA_REDHAT_PASSKEY}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_REDHAT\_PASSKEY}}}
28363\end{fulllineitems}
28364
28365
28366\sphinxAtStartPar
28367Red Hat Passkey mechanism.
28368
28369
28370\begin{savenotes}\sphinxattablestart
28371\centering
28372\begin{tabulary}{\linewidth}[t]{|T|T|}
28373\hline
28374
28375\sphinxAtStartPar
28376\sphinxcode{\sphinxupquote{KRB5\_PADATA\_REDHAT\_PASSKEY}}
28377&
28378\sphinxAtStartPar
28379\sphinxcode{\sphinxupquote{153}}
28380\\
28381\hline
28382\end{tabulary}
28383\par
28384\sphinxattableend\end{savenotes}
28385
28386
28387\subsubsection{KRB5\_PADATA\_SVR\_REFERRAL\_INFO}
28388\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}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SVR_REFERRAL_INFO::doc}}\index{KRB5\_PADATA\_SVR\_REFERRAL\_INFO (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_SVR\_REFERRAL\_INFO}\spxextra{built\sphinxhyphen{}in variable}}
28389
28390\begin{fulllineitems}
28391\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SVR_REFERRAL_INFO:KRB5_PADATA_SVR_REFERRAL_INFO}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_SVR\_REFERRAL\_INFO}}}
28392\end{fulllineitems}
28393
28394
28395\sphinxAtStartPar
28396Windows 2000 referrals.
28397
28398\sphinxAtStartPar
28399RFC 6820
28400
28401
28402\begin{savenotes}\sphinxattablestart
28403\centering
28404\begin{tabulary}{\linewidth}[t]{|T|T|}
28405\hline
28406
28407\sphinxAtStartPar
28408\sphinxcode{\sphinxupquote{KRB5\_PADATA\_SVR\_REFERRAL\_INFO}}
28409&
28410\sphinxAtStartPar
28411\sphinxcode{\sphinxupquote{20}}
28412\\
28413\hline
28414\end{tabulary}
28415\par
28416\sphinxattableend\end{savenotes}
28417
28418
28419\subsubsection{KRB5\_PADATA\_TGS\_REQ}
28420\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}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_TGS_REQ::doc}}\index{KRB5\_PADATA\_TGS\_REQ (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_TGS\_REQ}\spxextra{built\sphinxhyphen{}in variable}}
28421
28422\begin{fulllineitems}
28423\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_TGS_REQ:KRB5_PADATA_TGS_REQ}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_TGS\_REQ}}}
28424\end{fulllineitems}
28425
28426
28427
28428\begin{savenotes}\sphinxattablestart
28429\centering
28430\begin{tabulary}{\linewidth}[t]{|T|T|}
28431\hline
28432
28433\sphinxAtStartPar
28434\sphinxcode{\sphinxupquote{KRB5\_PADATA\_TGS\_REQ}}
28435&
28436\sphinxAtStartPar
28437\sphinxcode{\sphinxupquote{KRB5\_PADATA\_AP\_REQ}}
28438\\
28439\hline
28440\end{tabulary}
28441\par
28442\sphinxattableend\end{savenotes}
28443
28444
28445\subsubsection{KRB5\_PADATA\_USE\_SPECIFIED\_KVNO}
28446\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_PADATA\_USE\_SPECIFIED\_KVNO}\spxextra{built\sphinxhyphen{}in variable}}
28447
28448\begin{fulllineitems}
28449\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_USE_SPECIFIED_KVNO:KRB5_PADATA_USE_SPECIFIED_KVNO}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PADATA\_USE\_SPECIFIED\_KVNO}}}
28450\end{fulllineitems}
28451
28452
28453\sphinxAtStartPar
28454RFC 4120.
28455
28456
28457\begin{savenotes}\sphinxattablestart
28458\centering
28459\begin{tabulary}{\linewidth}[t]{|T|T|}
28460\hline
28461
28462\sphinxAtStartPar
28463\sphinxcode{\sphinxupquote{KRB5\_PADATA\_USE\_SPECIFIED\_KVNO}}
28464&
28465\sphinxAtStartPar
28466\sphinxcode{\sphinxupquote{20}}
28467\\
28468\hline
28469\end{tabulary}
28470\par
28471\sphinxattableend\end{savenotes}
28472
28473
28474\subsubsection{KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD}
28475\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD:krb5-principal-compare-casefold}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD:krb5-principal-compare-casefold-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD::doc}}\index{KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD}\spxextra{built\sphinxhyphen{}in variable}}
28476
28477\begin{fulllineitems}
28478\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD:KRB5_PRINCIPAL_COMPARE_CASEFOLD}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD}}}
28479\end{fulllineitems}
28480
28481
28482\sphinxAtStartPar
28483case\sphinxhyphen{}insensitive
28484
28485
28486\begin{savenotes}\sphinxattablestart
28487\centering
28488\begin{tabulary}{\linewidth}[t]{|T|T|}
28489\hline
28490
28491\sphinxAtStartPar
28492\sphinxcode{\sphinxupquote{KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD}}
28493&
28494\sphinxAtStartPar
28495\sphinxcode{\sphinxupquote{4}}
28496\\
28497\hline
28498\end{tabulary}
28499\par
28500\sphinxattableend\end{savenotes}
28501
28502
28503\subsubsection{KRB5\_PRINCIPAL\_COMPARE\_ENTERPRISE}
28504\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_PRINCIPAL\_COMPARE\_ENTERPRISE}\spxextra{built\sphinxhyphen{}in variable}}
28505
28506\begin{fulllineitems}
28507\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_ENTERPRISE:KRB5_PRINCIPAL_COMPARE_ENTERPRISE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PRINCIPAL\_COMPARE\_ENTERPRISE}}}
28508\end{fulllineitems}
28509
28510
28511\sphinxAtStartPar
28512UPNs as real principals.
28513
28514
28515\begin{savenotes}\sphinxattablestart
28516\centering
28517\begin{tabulary}{\linewidth}[t]{|T|T|}
28518\hline
28519
28520\sphinxAtStartPar
28521\sphinxcode{\sphinxupquote{KRB5\_PRINCIPAL\_COMPARE\_ENTERPRISE}}
28522&
28523\sphinxAtStartPar
28524\sphinxcode{\sphinxupquote{2}}
28525\\
28526\hline
28527\end{tabulary}
28528\par
28529\sphinxattableend\end{savenotes}
28530
28531
28532\subsubsection{KRB5\_PRINCIPAL\_COMPARE\_IGNORE\_REALM}
28533\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:krb5-principal-compare-ignore-realm-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_IGNORE_REALM::doc}}\index{KRB5\_PRINCIPAL\_COMPARE\_IGNORE\_REALM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PRINCIPAL\_COMPARE\_IGNORE\_REALM}\spxextra{built\sphinxhyphen{}in variable}}
28534
28535\begin{fulllineitems}
28536\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_IGNORE_REALM:KRB5_PRINCIPAL_COMPARE_IGNORE_REALM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PRINCIPAL\_COMPARE\_IGNORE\_REALM}}}
28537\end{fulllineitems}
28538
28539
28540\sphinxAtStartPar
28541ignore realm component
28542
28543
28544\begin{savenotes}\sphinxattablestart
28545\centering
28546\begin{tabulary}{\linewidth}[t]{|T|T|}
28547\hline
28548
28549\sphinxAtStartPar
28550\sphinxcode{\sphinxupquote{KRB5\_PRINCIPAL\_COMPARE\_IGNORE\_REALM}}
28551&
28552\sphinxAtStartPar
28553\sphinxcode{\sphinxupquote{1}}
28554\\
28555\hline
28556\end{tabulary}
28557\par
28558\sphinxattableend\end{savenotes}
28559
28560
28561\subsubsection{KRB5\_PRINCIPAL\_COMPARE\_UTF8}
28562\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8:krb5-principal-compare-utf8}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8:krb5-principal-compare-utf8-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8::doc}}\index{KRB5\_PRINCIPAL\_COMPARE\_UTF8 (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PRINCIPAL\_COMPARE\_UTF8}\spxextra{built\sphinxhyphen{}in variable}}
28563
28564\begin{fulllineitems}
28565\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8:KRB5_PRINCIPAL_COMPARE_UTF8}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PRINCIPAL\_COMPARE\_UTF8}}}
28566\end{fulllineitems}
28567
28568
28569\sphinxAtStartPar
28570treat principals as UTF\sphinxhyphen{}8
28571
28572
28573\begin{savenotes}\sphinxattablestart
28574\centering
28575\begin{tabulary}{\linewidth}[t]{|T|T|}
28576\hline
28577
28578\sphinxAtStartPar
28579\sphinxcode{\sphinxupquote{KRB5\_PRINCIPAL\_COMPARE\_UTF8}}
28580&
28581\sphinxAtStartPar
28582\sphinxcode{\sphinxupquote{8}}
28583\\
28584\hline
28585\end{tabulary}
28586\par
28587\sphinxattableend\end{savenotes}
28588
28589
28590\subsubsection{KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE}
28591\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE:krb5-principal-parse-enterprise}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE:krb5-principal-parse-enterprise-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE::doc}}\index{KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE}\spxextra{built\sphinxhyphen{}in variable}}
28592
28593\begin{fulllineitems}
28594\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE:KRB5_PRINCIPAL_PARSE_ENTERPRISE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE}}}
28595\end{fulllineitems}
28596
28597
28598\sphinxAtStartPar
28599Create single\sphinxhyphen{}component enterprise principle.
28600
28601
28602\begin{savenotes}\sphinxattablestart
28603\centering
28604\begin{tabulary}{\linewidth}[t]{|T|T|}
28605\hline
28606
28607\sphinxAtStartPar
28608\sphinxcode{\sphinxupquote{KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE}}
28609&
28610\sphinxAtStartPar
28611\sphinxcode{\sphinxupquote{0x4}}
28612\\
28613\hline
28614\end{tabulary}
28615\par
28616\sphinxattableend\end{savenotes}
28617
28618
28619\subsubsection{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM}
28620\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}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_IGNORE_REALM::doc}}\index{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM}\spxextra{built\sphinxhyphen{}in variable}}
28621
28622\begin{fulllineitems}
28623\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_IGNORE_REALM:KRB5_PRINCIPAL_PARSE_IGNORE_REALM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM}}}
28624\end{fulllineitems}
28625
28626
28627\sphinxAtStartPar
28628Ignore realm if present.
28629
28630
28631\begin{savenotes}\sphinxattablestart
28632\centering
28633\begin{tabulary}{\linewidth}[t]{|T|T|}
28634\hline
28635
28636\sphinxAtStartPar
28637\sphinxcode{\sphinxupquote{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM}}
28638&
28639\sphinxAtStartPar
28640\sphinxcode{\sphinxupquote{0x8}}
28641\\
28642\hline
28643\end{tabulary}
28644\par
28645\sphinxattableend\end{savenotes}
28646
28647
28648\subsubsection{KRB5\_PRINCIPAL\_PARSE\_NO\_DEF\_REALM}
28649\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_DEF_REALM:krb5-principal-parse-no-def-realm}}\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}}\index{KRB5\_PRINCIPAL\_PARSE\_NO\_DEF\_REALM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PRINCIPAL\_PARSE\_NO\_DEF\_REALM}\spxextra{built\sphinxhyphen{}in variable}}
28650
28651\begin{fulllineitems}
28652\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_DEF_REALM:KRB5_PRINCIPAL_PARSE_NO_DEF_REALM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PRINCIPAL\_PARSE\_NO\_DEF\_REALM}}}
28653\end{fulllineitems}
28654
28655
28656\sphinxAtStartPar
28657Don’t add default realm.
28658
28659
28660\begin{savenotes}\sphinxattablestart
28661\centering
28662\begin{tabulary}{\linewidth}[t]{|T|T|}
28663\hline
28664
28665\sphinxAtStartPar
28666\sphinxcode{\sphinxupquote{KRB5\_PRINCIPAL\_PARSE\_NO\_DEF\_REALM}}
28667&
28668\sphinxAtStartPar
28669\sphinxcode{\sphinxupquote{0x10}}
28670\\
28671\hline
28672\end{tabulary}
28673\par
28674\sphinxattableend\end{savenotes}
28675
28676
28677\subsubsection{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM}
28678\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_REALM:krb5-principal-parse-no-realm}}\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}}\index{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM}\spxextra{built\sphinxhyphen{}in variable}}
28679
28680\begin{fulllineitems}
28681\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_REALM:KRB5_PRINCIPAL_PARSE_NO_REALM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM}}}
28682\end{fulllineitems}
28683
28684
28685\sphinxAtStartPar
28686Error if realm is present.
28687
28688
28689\begin{savenotes}\sphinxattablestart
28690\centering
28691\begin{tabulary}{\linewidth}[t]{|T|T|}
28692\hline
28693
28694\sphinxAtStartPar
28695\sphinxcode{\sphinxupquote{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM}}
28696&
28697\sphinxAtStartPar
28698\sphinxcode{\sphinxupquote{0x1}}
28699\\
28700\hline
28701\end{tabulary}
28702\par
28703\sphinxattableend\end{savenotes}
28704
28705
28706\subsubsection{KRB5\_PRINCIPAL\_PARSE\_REQUIRE\_REALM}
28707\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}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_REQUIRE_REALM::doc}}\index{KRB5\_PRINCIPAL\_PARSE\_REQUIRE\_REALM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PRINCIPAL\_PARSE\_REQUIRE\_REALM}\spxextra{built\sphinxhyphen{}in variable}}
28708
28709\begin{fulllineitems}
28710\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_REQUIRE_REALM:KRB5_PRINCIPAL_PARSE_REQUIRE_REALM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PRINCIPAL\_PARSE\_REQUIRE\_REALM}}}
28711\end{fulllineitems}
28712
28713
28714\sphinxAtStartPar
28715Error if realm is not present.
28716
28717
28718\begin{savenotes}\sphinxattablestart
28719\centering
28720\begin{tabulary}{\linewidth}[t]{|T|T|}
28721\hline
28722
28723\sphinxAtStartPar
28724\sphinxcode{\sphinxupquote{KRB5\_PRINCIPAL\_PARSE\_REQUIRE\_REALM}}
28725&
28726\sphinxAtStartPar
28727\sphinxcode{\sphinxupquote{0x2}}
28728\\
28729\hline
28730\end{tabulary}
28731\par
28732\sphinxattableend\end{savenotes}
28733
28734
28735\subsubsection{KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY}
28736\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY:krb5-principal-unparse-display}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY:krb5-principal-unparse-display-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY::doc}}\index{KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY}\spxextra{built\sphinxhyphen{}in variable}}
28737
28738\begin{fulllineitems}
28739\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY:KRB5_PRINCIPAL_UNPARSE_DISPLAY}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY}}}
28740\end{fulllineitems}
28741
28742
28743\sphinxAtStartPar
28744Don’t escape special characters.
28745
28746
28747\begin{savenotes}\sphinxattablestart
28748\centering
28749\begin{tabulary}{\linewidth}[t]{|T|T|}
28750\hline
28751
28752\sphinxAtStartPar
28753\sphinxcode{\sphinxupquote{KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY}}
28754&
28755\sphinxAtStartPar
28756\sphinxcode{\sphinxupquote{0x4}}
28757\\
28758\hline
28759\end{tabulary}
28760\par
28761\sphinxattableend\end{savenotes}
28762
28763
28764\subsubsection{KRB5\_PRINCIPAL\_UNPARSE\_NO\_REALM}
28765\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_PRINCIPAL\_UNPARSE\_NO\_REALM}\spxextra{built\sphinxhyphen{}in variable}}
28766
28767\begin{fulllineitems}
28768\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_NO_REALM:KRB5_PRINCIPAL_UNPARSE_NO_REALM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PRINCIPAL\_UNPARSE\_NO\_REALM}}}
28769\end{fulllineitems}
28770
28771
28772\sphinxAtStartPar
28773Omit realm always.
28774
28775
28776\begin{savenotes}\sphinxattablestart
28777\centering
28778\begin{tabulary}{\linewidth}[t]{|T|T|}
28779\hline
28780
28781\sphinxAtStartPar
28782\sphinxcode{\sphinxupquote{KRB5\_PRINCIPAL\_UNPARSE\_NO\_REALM}}
28783&
28784\sphinxAtStartPar
28785\sphinxcode{\sphinxupquote{0x2}}
28786\\
28787\hline
28788\end{tabulary}
28789\par
28790\sphinxattableend\end{savenotes}
28791
28792
28793\subsubsection{KRB5\_PRINCIPAL\_UNPARSE\_SHORT}
28794\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}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_SHORT::doc}}\index{KRB5\_PRINCIPAL\_UNPARSE\_SHORT (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PRINCIPAL\_UNPARSE\_SHORT}\spxextra{built\sphinxhyphen{}in variable}}
28795
28796\begin{fulllineitems}
28797\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_SHORT:KRB5_PRINCIPAL_UNPARSE_SHORT}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PRINCIPAL\_UNPARSE\_SHORT}}}
28798\end{fulllineitems}
28799
28800
28801\sphinxAtStartPar
28802Omit realm if it is the local realm.
28803
28804
28805\begin{savenotes}\sphinxattablestart
28806\centering
28807\begin{tabulary}{\linewidth}[t]{|T|T|}
28808\hline
28809
28810\sphinxAtStartPar
28811\sphinxcode{\sphinxupquote{KRB5\_PRINCIPAL\_UNPARSE\_SHORT}}
28812&
28813\sphinxAtStartPar
28814\sphinxcode{\sphinxupquote{0x1}}
28815\\
28816\hline
28817\end{tabulary}
28818\par
28819\sphinxattableend\end{savenotes}
28820
28821
28822\subsubsection{KRB5\_PRIV}
28823\label{\detokenize{appdev/refs/macros/KRB5_PRIV:krb5-priv}}\label{\detokenize{appdev/refs/macros/KRB5_PRIV:krb5-priv-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRIV::doc}}\index{KRB5\_PRIV (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PRIV}\spxextra{built\sphinxhyphen{}in variable}}
28824
28825\begin{fulllineitems}
28826\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRIV:KRB5_PRIV}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PRIV}}}
28827\end{fulllineitems}
28828
28829
28830\sphinxAtStartPar
28831Private application message.
28832
28833
28834\begin{savenotes}\sphinxattablestart
28835\centering
28836\begin{tabulary}{\linewidth}[t]{|T|T|}
28837\hline
28838
28839\sphinxAtStartPar
28840\sphinxcode{\sphinxupquote{KRB5\_PRIV}}
28841&
28842\sphinxAtStartPar
28843\sphinxcode{\sphinxupquote{((krb5\_msgtype)21)}}
28844\\
28845\hline
28846\end{tabulary}
28847\par
28848\sphinxattableend\end{savenotes}
28849
28850
28851\subsubsection{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD}
28852\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:krb5-prompt-type-new-password-data}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD::doc}}\index{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD}\spxextra{built\sphinxhyphen{}in variable}}
28853
28854\begin{fulllineitems}
28855\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD:KRB5_PROMPT_TYPE_NEW_PASSWORD}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD}}}
28856\end{fulllineitems}
28857
28858
28859\sphinxAtStartPar
28860Prompt for new password (during password change)
28861
28862
28863\begin{savenotes}\sphinxattablestart
28864\centering
28865\begin{tabulary}{\linewidth}[t]{|T|T|}
28866\hline
28867
28868\sphinxAtStartPar
28869\sphinxcode{\sphinxupquote{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD}}
28870&
28871\sphinxAtStartPar
28872\sphinxcode{\sphinxupquote{0x2}}
28873\\
28874\hline
28875\end{tabulary}
28876\par
28877\sphinxattableend\end{savenotes}
28878
28879
28880\subsubsection{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD\_AGAIN}
28881\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD\_AGAIN}\spxextra{built\sphinxhyphen{}in variable}}
28882
28883\begin{fulllineitems}
28884\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD_AGAIN:KRB5_PROMPT_TYPE_NEW_PASSWORD_AGAIN}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD\_AGAIN}}}
28885\end{fulllineitems}
28886
28887
28888\sphinxAtStartPar
28889Prompt for new password again.
28890
28891
28892\begin{savenotes}\sphinxattablestart
28893\centering
28894\begin{tabulary}{\linewidth}[t]{|T|T|}
28895\hline
28896
28897\sphinxAtStartPar
28898\sphinxcode{\sphinxupquote{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD\_AGAIN}}
28899&
28900\sphinxAtStartPar
28901\sphinxcode{\sphinxupquote{0x3}}
28902\\
28903\hline
28904\end{tabulary}
28905\par
28906\sphinxattableend\end{savenotes}
28907
28908
28909\subsubsection{KRB5\_PROMPT\_TYPE\_PASSWORD}
28910\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PASSWORD:krb5-prompt-type-password}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PASSWORD:krb5-prompt-type-password-data}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PASSWORD::doc}}\index{KRB5\_PROMPT\_TYPE\_PASSWORD (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PROMPT\_TYPE\_PASSWORD}\spxextra{built\sphinxhyphen{}in variable}}
28911
28912\begin{fulllineitems}
28913\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PASSWORD:KRB5_PROMPT_TYPE_PASSWORD}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PROMPT\_TYPE\_PASSWORD}}}
28914\end{fulllineitems}
28915
28916
28917\sphinxAtStartPar
28918Prompt for password.
28919
28920
28921\begin{savenotes}\sphinxattablestart
28922\centering
28923\begin{tabulary}{\linewidth}[t]{|T|T|}
28924\hline
28925
28926\sphinxAtStartPar
28927\sphinxcode{\sphinxupquote{KRB5\_PROMPT\_TYPE\_PASSWORD}}
28928&
28929\sphinxAtStartPar
28930\sphinxcode{\sphinxupquote{0x1}}
28931\\
28932\hline
28933\end{tabulary}
28934\par
28935\sphinxattableend\end{savenotes}
28936
28937
28938\subsubsection{KRB5\_PROMPT\_TYPE\_PREAUTH}
28939\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PREAUTH:krb5-prompt-type-preauth}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PREAUTH:krb5-prompt-type-preauth-data}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PREAUTH::doc}}\index{KRB5\_PROMPT\_TYPE\_PREAUTH (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PROMPT\_TYPE\_PREAUTH}\spxextra{built\sphinxhyphen{}in variable}}
28940
28941\begin{fulllineitems}
28942\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PREAUTH:KRB5_PROMPT_TYPE_PREAUTH}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PROMPT\_TYPE\_PREAUTH}}}
28943\end{fulllineitems}
28944
28945
28946\sphinxAtStartPar
28947Prompt for preauthentication data (such as an OTP value)
28948
28949
28950\begin{savenotes}\sphinxattablestart
28951\centering
28952\begin{tabulary}{\linewidth}[t]{|T|T|}
28953\hline
28954
28955\sphinxAtStartPar
28956\sphinxcode{\sphinxupquote{KRB5\_PROMPT\_TYPE\_PREAUTH}}
28957&
28958\sphinxAtStartPar
28959\sphinxcode{\sphinxupquote{0x4}}
28960\\
28961\hline
28962\end{tabulary}
28963\par
28964\sphinxattableend\end{savenotes}
28965
28966
28967\subsubsection{KRB5\_PVNO}
28968\label{\detokenize{appdev/refs/macros/KRB5_PVNO:krb5-pvno}}\label{\detokenize{appdev/refs/macros/KRB5_PVNO:krb5-pvno-data}}\label{\detokenize{appdev/refs/macros/KRB5_PVNO::doc}}\index{KRB5\_PVNO (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_PVNO}\spxextra{built\sphinxhyphen{}in variable}}
28969
28970\begin{fulllineitems}
28971\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PVNO:KRB5_PVNO}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_PVNO}}}
28972\end{fulllineitems}
28973
28974
28975\sphinxAtStartPar
28976Protocol version number.
28977
28978
28979\begin{savenotes}\sphinxattablestart
28980\centering
28981\begin{tabulary}{\linewidth}[t]{|T|T|}
28982\hline
28983
28984\sphinxAtStartPar
28985\sphinxcode{\sphinxupquote{KRB5\_PVNO}}
28986&
28987\sphinxAtStartPar
28988\sphinxcode{\sphinxupquote{5}}
28989\\
28990\hline
28991\end{tabulary}
28992\par
28993\sphinxattableend\end{savenotes}
28994
28995
28996\subsubsection{KRB5\_REALM\_BRANCH\_CHAR}
28997\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}}\label{\detokenize{appdev/refs/macros/KRB5_REALM_BRANCH_CHAR::doc}}\index{KRB5\_REALM\_BRANCH\_CHAR (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_REALM\_BRANCH\_CHAR}\spxextra{built\sphinxhyphen{}in variable}}
28998
28999\begin{fulllineitems}
29000\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_REALM_BRANCH_CHAR:KRB5_REALM_BRANCH_CHAR}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_REALM\_BRANCH\_CHAR}}}
29001\end{fulllineitems}
29002
29003
29004
29005\begin{savenotes}\sphinxattablestart
29006\centering
29007\begin{tabulary}{\linewidth}[t]{|T|T|}
29008\hline
29009
29010\sphinxAtStartPar
29011\sphinxcode{\sphinxupquote{KRB5\_REALM\_BRANCH\_CHAR}}
29012&
29013\sphinxAtStartPar
29014\sphinxcode{\sphinxupquote{\textquotesingle{}.\textquotesingle{}}}
29015\\
29016\hline
29017\end{tabulary}
29018\par
29019\sphinxattableend\end{savenotes}
29020
29021
29022\subsubsection{KRB5\_RECVAUTH\_BADAUTHVERS}
29023\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_BADAUTHVERS:krb5-recvauth-badauthvers}}\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_BADAUTHVERS:krb5-recvauth-badauthvers-data}}\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_BADAUTHVERS::doc}}\index{KRB5\_RECVAUTH\_BADAUTHVERS (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_RECVAUTH\_BADAUTHVERS}\spxextra{built\sphinxhyphen{}in variable}}
29024
29025\begin{fulllineitems}
29026\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_BADAUTHVERS:KRB5_RECVAUTH_BADAUTHVERS}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_RECVAUTH\_BADAUTHVERS}}}
29027\end{fulllineitems}
29028
29029
29030
29031\begin{savenotes}\sphinxattablestart
29032\centering
29033\begin{tabulary}{\linewidth}[t]{|T|T|}
29034\hline
29035
29036\sphinxAtStartPar
29037\sphinxcode{\sphinxupquote{KRB5\_RECVAUTH\_BADAUTHVERS}}
29038&
29039\sphinxAtStartPar
29040\sphinxcode{\sphinxupquote{0x0002}}
29041\\
29042\hline
29043\end{tabulary}
29044\par
29045\sphinxattableend\end{savenotes}
29046
29047
29048\subsubsection{KRB5\_RECVAUTH\_SKIP\_VERSION}
29049\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_RECVAUTH\_SKIP\_VERSION}\spxextra{built\sphinxhyphen{}in variable}}
29050
29051\begin{fulllineitems}
29052\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_SKIP_VERSION:KRB5_RECVAUTH_SKIP_VERSION}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_RECVAUTH\_SKIP\_VERSION}}}
29053\end{fulllineitems}
29054
29055
29056
29057\begin{savenotes}\sphinxattablestart
29058\centering
29059\begin{tabulary}{\linewidth}[t]{|T|T|}
29060\hline
29061
29062\sphinxAtStartPar
29063\sphinxcode{\sphinxupquote{KRB5\_RECVAUTH\_SKIP\_VERSION}}
29064&
29065\sphinxAtStartPar
29066\sphinxcode{\sphinxupquote{0x0001}}
29067\\
29068\hline
29069\end{tabulary}
29070\par
29071\sphinxattableend\end{savenotes}
29072
29073
29074\subsubsection{KRB5\_REFERRAL\_REALM}
29075\label{\detokenize{appdev/refs/macros/KRB5_REFERRAL_REALM:krb5-referral-realm}}\label{\detokenize{appdev/refs/macros/KRB5_REFERRAL_REALM:krb5-referral-realm-data}}\label{\detokenize{appdev/refs/macros/KRB5_REFERRAL_REALM::doc}}\index{KRB5\_REFERRAL\_REALM (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_REFERRAL\_REALM}\spxextra{built\sphinxhyphen{}in variable}}
29076
29077\begin{fulllineitems}
29078\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_REFERRAL_REALM:KRB5_REFERRAL_REALM}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_REFERRAL\_REALM}}}
29079\end{fulllineitems}
29080
29081
29082\sphinxAtStartPar
29083Constant for realm referrals.
29084
29085
29086\begin{savenotes}\sphinxattablestart
29087\centering
29088\begin{tabulary}{\linewidth}[t]{|T|T|}
29089\hline
29090
29091\sphinxAtStartPar
29092\sphinxcode{\sphinxupquote{KRB5\_REFERRAL\_REALM}}
29093&
29094\sphinxAtStartPar
29095\sphinxcode{\sphinxupquote{""}}
29096\\
29097\hline
29098\end{tabulary}
29099\par
29100\sphinxattableend\end{savenotes}
29101
29102
29103\subsubsection{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_COUNT\_LOW}
29104\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_COUNT_LOW:krb5-responder-pkinit-flags-token-user-pin-count-low}}\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}}\index{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_COUNT\_LOW (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_COUNT\_LOW}\spxextra{built\sphinxhyphen{}in variable}}
29105
29106\begin{fulllineitems}
29107\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{\sphinxupquote{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_COUNT\_LOW}}}
29108\end{fulllineitems}
29109
29110
29111\sphinxAtStartPar
29112This flag indicates that an incorrect PIN was supplied at least once since the last time the correct PIN was supplied.
29113
29114
29115\begin{savenotes}\sphinxattablestart
29116\centering
29117\begin{tabulary}{\linewidth}[t]{|T|T|}
29118\hline
29119
29120\sphinxAtStartPar
29121\sphinxcode{\sphinxupquote{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_COUNT\_LOW}}
29122&
29123\sphinxAtStartPar
29124\sphinxcode{\sphinxupquote{(1 \textless{}\textless{} 0)}}
29125\\
29126\hline
29127\end{tabulary}
29128\par
29129\sphinxattableend\end{savenotes}
29130
29131
29132\subsubsection{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_FINAL\_TRY}
29133\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:krb5-responder-pkinit-flags-token-user-pin-final-try-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_FINAL_TRY::doc}}\index{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_FINAL\_TRY (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_FINAL\_TRY}\spxextra{built\sphinxhyphen{}in variable}}
29134
29135\begin{fulllineitems}
29136\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{\sphinxupquote{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_FINAL\_TRY}}}
29137\end{fulllineitems}
29138
29139
29140\sphinxAtStartPar
29141This flag indicates that supplying an incorrect PIN will cause the token to lock itself.
29142
29143
29144\begin{savenotes}\sphinxattablestart
29145\centering
29146\begin{tabulary}{\linewidth}[t]{|T|T|}
29147\hline
29148
29149\sphinxAtStartPar
29150\sphinxcode{\sphinxupquote{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_FINAL\_TRY}}
29151&
29152\sphinxAtStartPar
29153\sphinxcode{\sphinxupquote{(1 \textless{}\textless{} 1)}}
29154\\
29155\hline
29156\end{tabulary}
29157\par
29158\sphinxattableend\end{savenotes}
29159
29160
29161\subsubsection{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_LOCKED}
29162\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}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_LOCKED::doc}}\index{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_LOCKED (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_LOCKED}\spxextra{built\sphinxhyphen{}in variable}}
29163
29164\begin{fulllineitems}
29165\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_LOCKED:KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_LOCKED}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_LOCKED}}}
29166\end{fulllineitems}
29167
29168
29169\sphinxAtStartPar
29170This flag indicates that the user PIN is locked, and you can’t log in to the token with it.
29171
29172
29173\begin{savenotes}\sphinxattablestart
29174\centering
29175\begin{tabulary}{\linewidth}[t]{|T|T|}
29176\hline
29177
29178\sphinxAtStartPar
29179\sphinxcode{\sphinxupquote{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_LOCKED}}
29180&
29181\sphinxAtStartPar
29182\sphinxcode{\sphinxupquote{(1 \textless{}\textless{} 2)}}
29183\\
29184\hline
29185\end{tabulary}
29186\par
29187\sphinxattableend\end{savenotes}
29188
29189
29190\subsubsection{KRB5\_RESPONDER\_QUESTION\_PKINIT}
29191\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_RESPONDER\_QUESTION\_PKINIT}\spxextra{built\sphinxhyphen{}in variable}}
29192
29193\begin{fulllineitems}
29194\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PKINIT:KRB5_RESPONDER_QUESTION_PKINIT}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_RESPONDER\_QUESTION\_PKINIT}}}
29195\end{fulllineitems}
29196
29197
29198\sphinxAtStartPar
29199PKINIT responder question.
29200
29201\sphinxAtStartPar
29202The 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\sphinxhyphen{}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\sphinxhyphen{}named CKF\_* values in the PKCS\#11 API should not be depended on.
29203
29204\begin{sphinxVerbatim}[commandchars=\\\{\}]
29205\PYG{p}{\PYGZob{}}
29206\PYG{+w}{    }\PYG{n}{identity}\PYG{+w}{ }\PYG{o}{\PYGZlt{}}\PYG{n}{string}\PYG{o}{\PYGZgt{}}\PYG{+w}{ }\PYG{o}{:}\PYG{+w}{ }\PYG{n}{flags}\PYG{+w}{ }\PYG{o}{\PYGZlt{}}\PYG{n}{number}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
29207\PYG{+w}{    }\PYG{p}{.}\PYG{p}{.}\PYG{p}{.}
29208\PYG{p}{\PYGZcb{}}
29209\end{sphinxVerbatim}
29210
29211\sphinxAtStartPar
29212The answer to the question MUST be JSON formatted:
29213
29214\begin{sphinxVerbatim}[commandchars=\\\{\}]
29215\PYG{p}{\PYGZob{}}
29216\PYG{+w}{    }\PYG{n}{identity}\PYG{+w}{ }\PYG{o}{\PYGZlt{}}\PYG{n}{string}\PYG{o}{\PYGZgt{}}\PYG{+w}{ }\PYG{o}{:}\PYG{+w}{ }\PYG{n}{password}\PYG{+w}{ }\PYG{o}{\PYGZlt{}}\PYG{n}{string}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
29217\PYG{+w}{    }\PYG{p}{.}\PYG{p}{.}\PYG{p}{.}
29218\PYG{p}{\PYGZcb{}}
29219\end{sphinxVerbatim}
29220
29221
29222\begin{savenotes}\sphinxattablestart
29223\centering
29224\begin{tabulary}{\linewidth}[t]{|T|T|}
29225\hline
29226
29227\sphinxAtStartPar
29228\sphinxcode{\sphinxupquote{KRB5\_RESPONDER\_QUESTION\_PKINIT}}
29229&
29230\sphinxAtStartPar
29231\sphinxcode{\sphinxupquote{"pkinit"}}
29232\\
29233\hline
29234\end{tabulary}
29235\par
29236\sphinxattableend\end{savenotes}
29237
29238
29239\subsubsection{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_PIN}
29240\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_PIN:krb5-responder-otp-flags-collect-pin}}\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}}\index{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_PIN (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_PIN}\spxextra{built\sphinxhyphen{}in variable}}
29241
29242\begin{fulllineitems}
29243\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_PIN:KRB5_RESPONDER_OTP_FLAGS_COLLECT_PIN}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_PIN}}}
29244\end{fulllineitems}
29245
29246
29247\sphinxAtStartPar
29248This flag indicates that the PIN value MUST be collected.
29249
29250
29251\begin{savenotes}\sphinxattablestart
29252\centering
29253\begin{tabulary}{\linewidth}[t]{|T|T|}
29254\hline
29255
29256\sphinxAtStartPar
29257\sphinxcode{\sphinxupquote{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_PIN}}
29258&
29259\sphinxAtStartPar
29260\sphinxcode{\sphinxupquote{0x0002}}
29261\\
29262\hline
29263\end{tabulary}
29264\par
29265\sphinxattableend\end{savenotes}
29266
29267
29268\subsubsection{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_TOKEN}
29269\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:krb5-responder-otp-flags-collect-token-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_TOKEN::doc}}\index{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_TOKEN (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_TOKEN}\spxextra{built\sphinxhyphen{}in variable}}
29270
29271\begin{fulllineitems}
29272\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_TOKEN:KRB5_RESPONDER_OTP_FLAGS_COLLECT_TOKEN}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_TOKEN}}}
29273\end{fulllineitems}
29274
29275
29276\sphinxAtStartPar
29277This flag indicates that the token value MUST be collected.
29278
29279
29280\begin{savenotes}\sphinxattablestart
29281\centering
29282\begin{tabulary}{\linewidth}[t]{|T|T|}
29283\hline
29284
29285\sphinxAtStartPar
29286\sphinxcode{\sphinxupquote{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_TOKEN}}
29287&
29288\sphinxAtStartPar
29289\sphinxcode{\sphinxupquote{0x0001}}
29290\\
29291\hline
29292\end{tabulary}
29293\par
29294\sphinxattableend\end{savenotes}
29295
29296
29297\subsubsection{KRB5\_RESPONDER\_OTP\_FLAGS\_NEXTOTP}
29298\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_NEXTOTP:krb5-responder-otp-flags-nextotp}}\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}}\index{KRB5\_RESPONDER\_OTP\_FLAGS\_NEXTOTP (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_RESPONDER\_OTP\_FLAGS\_NEXTOTP}\spxextra{built\sphinxhyphen{}in variable}}
29299
29300\begin{fulllineitems}
29301\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_NEXTOTP:KRB5_RESPONDER_OTP_FLAGS_NEXTOTP}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_RESPONDER\_OTP\_FLAGS\_NEXTOTP}}}
29302\end{fulllineitems}
29303
29304
29305\sphinxAtStartPar
29306This flag indicates that the token is now in re\sphinxhyphen{}synchronization mode with the server.
29307
29308\sphinxAtStartPar
29309The user is expected to reply with the next code displayed on the token.
29310
29311
29312\begin{savenotes}\sphinxattablestart
29313\centering
29314\begin{tabulary}{\linewidth}[t]{|T|T|}
29315\hline
29316
29317\sphinxAtStartPar
29318\sphinxcode{\sphinxupquote{KRB5\_RESPONDER\_OTP\_FLAGS\_NEXTOTP}}
29319&
29320\sphinxAtStartPar
29321\sphinxcode{\sphinxupquote{0x0004}}
29322\\
29323\hline
29324\end{tabulary}
29325\par
29326\sphinxattableend\end{savenotes}
29327
29328
29329\subsubsection{KRB5\_RESPONDER\_OTP\_FLAGS\_SEPARATE\_PIN}
29330\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_RESPONDER\_OTP\_FLAGS\_SEPARATE\_PIN}\spxextra{built\sphinxhyphen{}in variable}}
29331
29332\begin{fulllineitems}
29333\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_SEPARATE_PIN:KRB5_RESPONDER_OTP_FLAGS_SEPARATE_PIN}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_RESPONDER\_OTP\_FLAGS\_SEPARATE\_PIN}}}
29334\end{fulllineitems}
29335
29336
29337\sphinxAtStartPar
29338This flag indicates that the PIN MUST be returned as a separate item.
29339
29340\sphinxAtStartPar
29341This 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.
29342
29343
29344\begin{savenotes}\sphinxattablestart
29345\centering
29346\begin{tabulary}{\linewidth}[t]{|T|T|}
29347\hline
29348
29349\sphinxAtStartPar
29350\sphinxcode{\sphinxupquote{KRB5\_RESPONDER\_OTP\_FLAGS\_SEPARATE\_PIN}}
29351&
29352\sphinxAtStartPar
29353\sphinxcode{\sphinxupquote{0x0008}}
29354\\
29355\hline
29356\end{tabulary}
29357\par
29358\sphinxattableend\end{savenotes}
29359
29360
29361\subsubsection{KRB5\_RESPONDER\_OTP\_FORMAT\_ALPHANUMERIC}
29362\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:krb5-responder-otp-format-alphanumeric-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC::doc}}\index{KRB5\_RESPONDER\_OTP\_FORMAT\_ALPHANUMERIC (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_RESPONDER\_OTP\_FORMAT\_ALPHANUMERIC}\spxextra{built\sphinxhyphen{}in variable}}
29363
29364\begin{fulllineitems}
29365\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC:KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_RESPONDER\_OTP\_FORMAT\_ALPHANUMERIC}}}
29366\end{fulllineitems}
29367
29368
29369
29370\begin{savenotes}\sphinxattablestart
29371\centering
29372\begin{tabulary}{\linewidth}[t]{|T|T|}
29373\hline
29374
29375\sphinxAtStartPar
29376\sphinxcode{\sphinxupquote{KRB5\_RESPONDER\_OTP\_FORMAT\_ALPHANUMERIC}}
29377&
29378\sphinxAtStartPar
29379\sphinxcode{\sphinxupquote{2}}
29380\\
29381\hline
29382\end{tabulary}
29383\par
29384\sphinxattableend\end{savenotes}
29385
29386
29387\subsubsection{KRB5\_RESPONDER\_OTP\_FORMAT\_DECIMAL}
29388\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_DECIMAL:krb5-responder-otp-format-decimal}}\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}}\index{KRB5\_RESPONDER\_OTP\_FORMAT\_DECIMAL (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_RESPONDER\_OTP\_FORMAT\_DECIMAL}\spxextra{built\sphinxhyphen{}in variable}}
29389
29390\begin{fulllineitems}
29391\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_DECIMAL:KRB5_RESPONDER_OTP_FORMAT_DECIMAL}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_RESPONDER\_OTP\_FORMAT\_DECIMAL}}}
29392\end{fulllineitems}
29393
29394
29395\sphinxAtStartPar
29396These format constants identify the format of the token value.
29397
29398
29399\begin{savenotes}\sphinxattablestart
29400\centering
29401\begin{tabulary}{\linewidth}[t]{|T|T|}
29402\hline
29403
29404\sphinxAtStartPar
29405\sphinxcode{\sphinxupquote{KRB5\_RESPONDER\_OTP\_FORMAT\_DECIMAL}}
29406&
29407\sphinxAtStartPar
29408\sphinxcode{\sphinxupquote{0}}
29409\\
29410\hline
29411\end{tabulary}
29412\par
29413\sphinxattableend\end{savenotes}
29414
29415
29416\subsubsection{KRB5\_RESPONDER\_OTP\_FORMAT\_HEXADECIMAL}
29417\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL:krb5-responder-otp-format-hexadecimal}}\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}}\index{KRB5\_RESPONDER\_OTP\_FORMAT\_HEXADECIMAL (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_RESPONDER\_OTP\_FORMAT\_HEXADECIMAL}\spxextra{built\sphinxhyphen{}in variable}}
29418
29419\begin{fulllineitems}
29420\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL:KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_RESPONDER\_OTP\_FORMAT\_HEXADECIMAL}}}
29421\end{fulllineitems}
29422
29423
29424
29425\begin{savenotes}\sphinxattablestart
29426\centering
29427\begin{tabulary}{\linewidth}[t]{|T|T|}
29428\hline
29429
29430\sphinxAtStartPar
29431\sphinxcode{\sphinxupquote{KRB5\_RESPONDER\_OTP\_FORMAT\_HEXADECIMAL}}
29432&
29433\sphinxAtStartPar
29434\sphinxcode{\sphinxupquote{1}}
29435\\
29436\hline
29437\end{tabulary}
29438\par
29439\sphinxattableend\end{savenotes}
29440
29441
29442\subsubsection{KRB5\_RESPONDER\_QUESTION\_OTP}
29443\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_RESPONDER\_QUESTION\_OTP}\spxextra{built\sphinxhyphen{}in variable}}
29444
29445\begin{fulllineitems}
29446\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_OTP:KRB5_RESPONDER_QUESTION_OTP}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_RESPONDER\_QUESTION\_OTP}}}
29447\end{fulllineitems}
29448
29449
29450\sphinxAtStartPar
29451OTP responder question.
29452
29453\sphinxAtStartPar
29454The 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:
29455
29456\begin{sphinxVerbatim}[commandchars=\\\{\}]
29457\PYG{p}{\PYGZob{}}
29458\PYG{+w}{  }\PYG{l+s}{\PYGZdq{}}\PYG{l+s}{service}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}\PYG{+w}{ }\PYG{o}{\PYGZlt{}}\PYG{n}{string}\PYG{+w}{ }\PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
29459\PYG{+w}{  }\PYG{l+s}{\PYGZdq{}}\PYG{l+s}{tokenInfo}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}\PYG{+w}{ }\PYG{p}{[}
29460\PYG{+w}{    }\PYG{p}{\PYGZob{}}
29461\PYG{+w}{      }\PYG{l+s}{\PYGZdq{}}\PYG{l+s}{flags}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}\PYG{+w}{     }\PYG{o}{\PYGZlt{}}\PYG{n}{number}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
29462\PYG{+w}{      }\PYG{l+s}{\PYGZdq{}}\PYG{l+s}{vendor}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}\PYG{+w}{    }\PYG{o}{\PYGZlt{}}\PYG{n}{string}\PYG{+w}{ }\PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
29463\PYG{+w}{      }\PYG{l+s}{\PYGZdq{}}\PYG{l+s}{challenge}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}\PYG{+w}{ }\PYG{o}{\PYGZlt{}}\PYG{n}{string}\PYG{+w}{ }\PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
29464\PYG{+w}{      }\PYG{l+s}{\PYGZdq{}}\PYG{l+s}{length}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}\PYG{+w}{    }\PYG{o}{\PYGZlt{}}\PYG{n}{number}\PYG{+w}{ }\PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
29465\PYG{+w}{      }\PYG{l+s}{\PYGZdq{}}\PYG{l+s}{format}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}\PYG{+w}{    }\PYG{o}{\PYGZlt{}}\PYG{n}{number}\PYG{+w}{ }\PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
29466\PYG{+w}{      }\PYG{l+s}{\PYGZdq{}}\PYG{l+s}{tokenID}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}\PYG{+w}{   }\PYG{o}{\PYGZlt{}}\PYG{n}{string}\PYG{+w}{ }\PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
29467\PYG{+w}{      }\PYG{l+s}{\PYGZdq{}}\PYG{l+s}{algID}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}\PYG{+w}{     }\PYG{o}{\PYGZlt{}}\PYG{n}{string}\PYG{+w}{ }\PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
29468\PYG{+w}{    }\PYG{p}{\PYGZcb{}}\PYG{p}{,}
29469\PYG{+w}{    }\PYG{p}{.}\PYG{p}{.}\PYG{p}{.}
29470\PYG{+w}{  }\PYG{p}{]}
29471\PYG{p}{\PYGZcb{}}
29472\end{sphinxVerbatim}
29473
29474\sphinxAtStartPar
29475The answer to the question MUST be JSON formatted:
29476
29477\begin{sphinxVerbatim}[commandchars=\\\{\}]
29478\PYG{p}{\PYGZob{}}
29479\PYG{+w}{  }\PYG{l+s}{\PYGZdq{}}\PYG{l+s}{tokeninfo}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}\PYG{+w}{ }\PYG{o}{\PYGZlt{}}\PYG{n}{number}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
29480\PYG{+w}{  }\PYG{l+s}{\PYGZdq{}}\PYG{l+s}{value}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}\PYG{+w}{     }\PYG{o}{\PYGZlt{}}\PYG{n}{string}\PYG{+w}{ }\PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
29481\PYG{+w}{  }\PYG{l+s}{\PYGZdq{}}\PYG{l+s}{pin}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}\PYG{+w}{       }\PYG{o}{\PYGZlt{}}\PYG{n}{string}\PYG{+w}{ }\PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
29482\PYG{p}{\PYGZcb{}}
29483\end{sphinxVerbatim}
29484
29485\sphinxAtStartPar
29486For more detail, please see RFC 6560.
29487
29488
29489\begin{savenotes}\sphinxattablestart
29490\centering
29491\begin{tabulary}{\linewidth}[t]{|T|T|}
29492\hline
29493
29494\sphinxAtStartPar
29495\sphinxcode{\sphinxupquote{KRB5\_RESPONDER\_QUESTION\_OTP}}
29496&
29497\sphinxAtStartPar
29498\sphinxcode{\sphinxupquote{"otp"}}
29499\\
29500\hline
29501\end{tabulary}
29502\par
29503\sphinxattableend\end{savenotes}
29504
29505
29506\subsubsection{KRB5\_RESPONDER\_QUESTION\_PASSWORD}
29507\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PASSWORD:krb5-responder-question-password}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PASSWORD:krb5-responder-question-password-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PASSWORD::doc}}\index{KRB5\_RESPONDER\_QUESTION\_PASSWORD (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_RESPONDER\_QUESTION\_PASSWORD}\spxextra{built\sphinxhyphen{}in variable}}
29508
29509\begin{fulllineitems}
29510\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PASSWORD:KRB5_RESPONDER_QUESTION_PASSWORD}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_RESPONDER\_QUESTION\_PASSWORD}}}
29511\end{fulllineitems}
29512
29513
29514\sphinxAtStartPar
29515Long\sphinxhyphen{}term password responder question.
29516
29517\sphinxAtStartPar
29518This question is asked when the long\sphinxhyphen{}term password is needed. It has no challenge and the response is simply the password string.
29519
29520
29521\begin{savenotes}\sphinxattablestart
29522\centering
29523\begin{tabulary}{\linewidth}[t]{|T|T|}
29524\hline
29525
29526\sphinxAtStartPar
29527\sphinxcode{\sphinxupquote{KRB5\_RESPONDER\_QUESTION\_PASSWORD}}
29528&
29529\sphinxAtStartPar
29530\sphinxcode{\sphinxupquote{"password"}}
29531\\
29532\hline
29533\end{tabulary}
29534\par
29535\sphinxattableend\end{savenotes}
29536
29537
29538\subsubsection{KRB5\_SAFE}
29539\label{\detokenize{appdev/refs/macros/KRB5_SAFE:krb5-safe}}\label{\detokenize{appdev/refs/macros/KRB5_SAFE:krb5-safe-data}}\label{\detokenize{appdev/refs/macros/KRB5_SAFE::doc}}\index{KRB5\_SAFE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_SAFE}\spxextra{built\sphinxhyphen{}in variable}}
29540
29541\begin{fulllineitems}
29542\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_SAFE:KRB5_SAFE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_SAFE}}}
29543\end{fulllineitems}
29544
29545
29546\sphinxAtStartPar
29547Safe application message.
29548
29549
29550\begin{savenotes}\sphinxattablestart
29551\centering
29552\begin{tabulary}{\linewidth}[t]{|T|T|}
29553\hline
29554
29555\sphinxAtStartPar
29556\sphinxcode{\sphinxupquote{KRB5\_SAFE}}
29557&
29558\sphinxAtStartPar
29559\sphinxcode{\sphinxupquote{((krb5\_msgtype)20)}}
29560\\
29561\hline
29562\end{tabulary}
29563\par
29564\sphinxattableend\end{savenotes}
29565
29566
29567\subsubsection{KRB5\_SAM\_MUST\_PK\_ENCRYPT\_SAD}
29568\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_SAM\_MUST\_PK\_ENCRYPT\_SAD}\spxextra{built\sphinxhyphen{}in variable}}
29569
29570\begin{fulllineitems}
29571\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_SAM_MUST_PK_ENCRYPT_SAD:KRB5_SAM_MUST_PK_ENCRYPT_SAD}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_SAM\_MUST\_PK\_ENCRYPT\_SAD}}}
29572\end{fulllineitems}
29573
29574
29575\sphinxAtStartPar
29576currently must be zero
29577
29578
29579\begin{savenotes}\sphinxattablestart
29580\centering
29581\begin{tabulary}{\linewidth}[t]{|T|T|}
29582\hline
29583
29584\sphinxAtStartPar
29585\sphinxcode{\sphinxupquote{KRB5\_SAM\_MUST\_PK\_ENCRYPT\_SAD}}
29586&
29587\sphinxAtStartPar
29588\sphinxcode{\sphinxupquote{0x20000000}}
29589\\
29590\hline
29591\end{tabulary}
29592\par
29593\sphinxattableend\end{savenotes}
29594
29595
29596\subsubsection{KRB5\_SAM\_SEND\_ENCRYPTED\_SAD}
29597\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:krb5-sam-send-encrypted-sad-data}}\label{\detokenize{appdev/refs/macros/KRB5_SAM_SEND_ENCRYPTED_SAD::doc}}\index{KRB5\_SAM\_SEND\_ENCRYPTED\_SAD (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_SAM\_SEND\_ENCRYPTED\_SAD}\spxextra{built\sphinxhyphen{}in variable}}
29598
29599\begin{fulllineitems}
29600\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_SAM_SEND_ENCRYPTED_SAD:KRB5_SAM_SEND_ENCRYPTED_SAD}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_SAM\_SEND\_ENCRYPTED\_SAD}}}
29601\end{fulllineitems}
29602
29603
29604
29605\begin{savenotes}\sphinxattablestart
29606\centering
29607\begin{tabulary}{\linewidth}[t]{|T|T|}
29608\hline
29609
29610\sphinxAtStartPar
29611\sphinxcode{\sphinxupquote{KRB5\_SAM\_SEND\_ENCRYPTED\_SAD}}
29612&
29613\sphinxAtStartPar
29614\sphinxcode{\sphinxupquote{0x40000000}}
29615\\
29616\hline
29617\end{tabulary}
29618\par
29619\sphinxattableend\end{savenotes}
29620
29621
29622\subsubsection{KRB5\_SAM\_USE\_SAD\_AS\_KEY}
29623\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}}\label{\detokenize{appdev/refs/macros/KRB5_SAM_USE_SAD_AS_KEY::doc}}\index{KRB5\_SAM\_USE\_SAD\_AS\_KEY (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_SAM\_USE\_SAD\_AS\_KEY}\spxextra{built\sphinxhyphen{}in variable}}
29624
29625\begin{fulllineitems}
29626\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_SAM_USE_SAD_AS_KEY:KRB5_SAM_USE_SAD_AS_KEY}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_SAM\_USE\_SAD\_AS\_KEY}}}
29627\end{fulllineitems}
29628
29629
29630
29631\begin{savenotes}\sphinxattablestart
29632\centering
29633\begin{tabulary}{\linewidth}[t]{|T|T|}
29634\hline
29635
29636\sphinxAtStartPar
29637\sphinxcode{\sphinxupquote{KRB5\_SAM\_USE\_SAD\_AS\_KEY}}
29638&
29639\sphinxAtStartPar
29640\sphinxcode{\sphinxupquote{0x80000000}}
29641\\
29642\hline
29643\end{tabulary}
29644\par
29645\sphinxattableend\end{savenotes}
29646
29647
29648\subsubsection{KRB5\_TC\_MATCH\_2ND\_TKT}
29649\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_2ND_TKT:krb5-tc-match-2nd-tkt}}\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}}\index{KRB5\_TC\_MATCH\_2ND\_TKT (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_TC\_MATCH\_2ND\_TKT}\spxextra{built\sphinxhyphen{}in variable}}
29650
29651\begin{fulllineitems}
29652\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_2ND_TKT:KRB5_TC_MATCH_2ND_TKT}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_TC\_MATCH\_2ND\_TKT}}}
29653\end{fulllineitems}
29654
29655
29656\sphinxAtStartPar
29657The second ticket must match.
29658
29659
29660\begin{savenotes}\sphinxattablestart
29661\centering
29662\begin{tabulary}{\linewidth}[t]{|T|T|}
29663\hline
29664
29665\sphinxAtStartPar
29666\sphinxcode{\sphinxupquote{KRB5\_TC\_MATCH\_2ND\_TKT}}
29667&
29668\sphinxAtStartPar
29669\sphinxcode{\sphinxupquote{0x00000080}}
29670\\
29671\hline
29672\end{tabulary}
29673\par
29674\sphinxattableend\end{savenotes}
29675
29676
29677\subsubsection{KRB5\_TC\_MATCH\_AUTHDATA}
29678\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA:krb5-tc-match-authdata}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA:krb5-tc-match-authdata-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA::doc}}\index{KRB5\_TC\_MATCH\_AUTHDATA (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_TC\_MATCH\_AUTHDATA}\spxextra{built\sphinxhyphen{}in variable}}
29679
29680\begin{fulllineitems}
29681\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA:KRB5_TC_MATCH_AUTHDATA}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_TC\_MATCH\_AUTHDATA}}}
29682\end{fulllineitems}
29683
29684
29685\sphinxAtStartPar
29686The authorization data must match.
29687
29688
29689\begin{savenotes}\sphinxattablestart
29690\centering
29691\begin{tabulary}{\linewidth}[t]{|T|T|}
29692\hline
29693
29694\sphinxAtStartPar
29695\sphinxcode{\sphinxupquote{KRB5\_TC\_MATCH\_AUTHDATA}}
29696&
29697\sphinxAtStartPar
29698\sphinxcode{\sphinxupquote{0x00000020}}
29699\\
29700\hline
29701\end{tabulary}
29702\par
29703\sphinxattableend\end{savenotes}
29704
29705
29706\subsubsection{KRB5\_TC\_MATCH\_FLAGS}
29707\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS:krb5-tc-match-flags}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS:krb5-tc-match-flags-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS::doc}}\index{KRB5\_TC\_MATCH\_FLAGS (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_TC\_MATCH\_FLAGS}\spxextra{built\sphinxhyphen{}in variable}}
29708
29709\begin{fulllineitems}
29710\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS:KRB5_TC_MATCH_FLAGS}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_TC\_MATCH\_FLAGS}}}
29711\end{fulllineitems}
29712
29713
29714\sphinxAtStartPar
29715All the flags set in the match credentials must be set.
29716
29717
29718\begin{savenotes}\sphinxattablestart
29719\centering
29720\begin{tabulary}{\linewidth}[t]{|T|T|}
29721\hline
29722
29723\sphinxAtStartPar
29724\sphinxcode{\sphinxupquote{KRB5\_TC\_MATCH\_FLAGS}}
29725&
29726\sphinxAtStartPar
29727\sphinxcode{\sphinxupquote{0x00000004}}
29728\\
29729\hline
29730\end{tabulary}
29731\par
29732\sphinxattableend\end{savenotes}
29733
29734
29735\subsubsection{KRB5\_TC\_MATCH\_FLAGS\_EXACT}
29736\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:krb5-tc-match-flags-exact-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS_EXACT::doc}}\index{KRB5\_TC\_MATCH\_FLAGS\_EXACT (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_TC\_MATCH\_FLAGS\_EXACT}\spxextra{built\sphinxhyphen{}in variable}}
29737
29738\begin{fulllineitems}
29739\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS_EXACT:KRB5_TC_MATCH_FLAGS_EXACT}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_TC\_MATCH\_FLAGS\_EXACT}}}
29740\end{fulllineitems}
29741
29742
29743\sphinxAtStartPar
29744All the flags must match exactly.
29745
29746
29747\begin{savenotes}\sphinxattablestart
29748\centering
29749\begin{tabulary}{\linewidth}[t]{|T|T|}
29750\hline
29751
29752\sphinxAtStartPar
29753\sphinxcode{\sphinxupquote{KRB5\_TC\_MATCH\_FLAGS\_EXACT}}
29754&
29755\sphinxAtStartPar
29756\sphinxcode{\sphinxupquote{0x00000010}}
29757\\
29758\hline
29759\end{tabulary}
29760\par
29761\sphinxattableend\end{savenotes}
29762
29763
29764\subsubsection{KRB5\_TC\_MATCH\_IS\_SKEY}
29765\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_TC\_MATCH\_IS\_SKEY}\spxextra{built\sphinxhyphen{}in variable}}
29766
29767\begin{fulllineitems}
29768\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_IS_SKEY:KRB5_TC_MATCH_IS_SKEY}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_TC\_MATCH\_IS\_SKEY}}}
29769\end{fulllineitems}
29770
29771
29772\sphinxAtStartPar
29773The is\_skey field must match exactly.
29774
29775
29776\begin{savenotes}\sphinxattablestart
29777\centering
29778\begin{tabulary}{\linewidth}[t]{|T|T|}
29779\hline
29780
29781\sphinxAtStartPar
29782\sphinxcode{\sphinxupquote{KRB5\_TC\_MATCH\_IS\_SKEY}}
29783&
29784\sphinxAtStartPar
29785\sphinxcode{\sphinxupquote{0x00000002}}
29786\\
29787\hline
29788\end{tabulary}
29789\par
29790\sphinxattableend\end{savenotes}
29791
29792
29793\subsubsection{KRB5\_TC\_MATCH\_KTYPE}
29794\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_TC\_MATCH\_KTYPE}\spxextra{built\sphinxhyphen{}in variable}}
29795
29796\begin{fulllineitems}
29797\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_KTYPE:KRB5_TC_MATCH_KTYPE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_TC\_MATCH\_KTYPE}}}
29798\end{fulllineitems}
29799
29800
29801\sphinxAtStartPar
29802The encryption key type must match.
29803
29804
29805\begin{savenotes}\sphinxattablestart
29806\centering
29807\begin{tabulary}{\linewidth}[t]{|T|T|}
29808\hline
29809
29810\sphinxAtStartPar
29811\sphinxcode{\sphinxupquote{KRB5\_TC\_MATCH\_KTYPE}}
29812&
29813\sphinxAtStartPar
29814\sphinxcode{\sphinxupquote{0x00000100}}
29815\\
29816\hline
29817\end{tabulary}
29818\par
29819\sphinxattableend\end{savenotes}
29820
29821
29822\subsubsection{KRB5\_TC\_MATCH\_SRV\_NAMEONLY}
29823\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}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_SRV_NAMEONLY::doc}}\index{KRB5\_TC\_MATCH\_SRV\_NAMEONLY (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_TC\_MATCH\_SRV\_NAMEONLY}\spxextra{built\sphinxhyphen{}in variable}}
29824
29825\begin{fulllineitems}
29826\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_SRV_NAMEONLY:KRB5_TC_MATCH_SRV_NAMEONLY}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_TC\_MATCH\_SRV\_NAMEONLY}}}
29827\end{fulllineitems}
29828
29829
29830\sphinxAtStartPar
29831Only the name portion of the principal name must match.
29832
29833
29834\begin{savenotes}\sphinxattablestart
29835\centering
29836\begin{tabulary}{\linewidth}[t]{|T|T|}
29837\hline
29838
29839\sphinxAtStartPar
29840\sphinxcode{\sphinxupquote{KRB5\_TC\_MATCH\_SRV\_NAMEONLY}}
29841&
29842\sphinxAtStartPar
29843\sphinxcode{\sphinxupquote{0x00000040}}
29844\\
29845\hline
29846\end{tabulary}
29847\par
29848\sphinxattableend\end{savenotes}
29849
29850
29851\subsubsection{KRB5\_TC\_MATCH\_TIMES}
29852\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_TC\_MATCH\_TIMES}\spxextra{built\sphinxhyphen{}in variable}}
29853
29854\begin{fulllineitems}
29855\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES:KRB5_TC_MATCH_TIMES}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_TC\_MATCH\_TIMES}}}
29856\end{fulllineitems}
29857
29858
29859\sphinxAtStartPar
29860The requested lifetime must be at least as great as the time specified.
29861
29862
29863\begin{savenotes}\sphinxattablestart
29864\centering
29865\begin{tabulary}{\linewidth}[t]{|T|T|}
29866\hline
29867
29868\sphinxAtStartPar
29869\sphinxcode{\sphinxupquote{KRB5\_TC\_MATCH\_TIMES}}
29870&
29871\sphinxAtStartPar
29872\sphinxcode{\sphinxupquote{0x00000001}}
29873\\
29874\hline
29875\end{tabulary}
29876\par
29877\sphinxattableend\end{savenotes}
29878
29879
29880\subsubsection{KRB5\_TC\_MATCH\_TIMES\_EXACT}
29881\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES_EXACT:krb5-tc-match-times-exact}}\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}}\index{KRB5\_TC\_MATCH\_TIMES\_EXACT (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_TC\_MATCH\_TIMES\_EXACT}\spxextra{built\sphinxhyphen{}in variable}}
29882
29883\begin{fulllineitems}
29884\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES_EXACT:KRB5_TC_MATCH_TIMES_EXACT}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_TC\_MATCH\_TIMES\_EXACT}}}
29885\end{fulllineitems}
29886
29887
29888\sphinxAtStartPar
29889All the time fields must match exactly.
29890
29891
29892\begin{savenotes}\sphinxattablestart
29893\centering
29894\begin{tabulary}{\linewidth}[t]{|T|T|}
29895\hline
29896
29897\sphinxAtStartPar
29898\sphinxcode{\sphinxupquote{KRB5\_TC\_MATCH\_TIMES\_EXACT}}
29899&
29900\sphinxAtStartPar
29901\sphinxcode{\sphinxupquote{0x00000008}}
29902\\
29903\hline
29904\end{tabulary}
29905\par
29906\sphinxattableend\end{savenotes}
29907
29908
29909\subsubsection{KRB5\_TC\_NOTICKET}
29910\label{\detokenize{appdev/refs/macros/KRB5_TC_NOTICKET:krb5-tc-noticket}}\label{\detokenize{appdev/refs/macros/KRB5_TC_NOTICKET:krb5-tc-noticket-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_NOTICKET::doc}}\index{KRB5\_TC\_NOTICKET (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_TC\_NOTICKET}\spxextra{built\sphinxhyphen{}in variable}}
29911
29912\begin{fulllineitems}
29913\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_NOTICKET:KRB5_TC_NOTICKET}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_TC\_NOTICKET}}}
29914\end{fulllineitems}
29915
29916
29917
29918\begin{savenotes}\sphinxattablestart
29919\centering
29920\begin{tabulary}{\linewidth}[t]{|T|T|}
29921\hline
29922
29923\sphinxAtStartPar
29924\sphinxcode{\sphinxupquote{KRB5\_TC\_NOTICKET}}
29925&
29926\sphinxAtStartPar
29927\sphinxcode{\sphinxupquote{0x00000002}}
29928\\
29929\hline
29930\end{tabulary}
29931\par
29932\sphinxattableend\end{savenotes}
29933
29934
29935\subsubsection{KRB5\_TC\_OPENCLOSE}
29936\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_TC\_OPENCLOSE}\spxextra{built\sphinxhyphen{}in variable}}
29937
29938\begin{fulllineitems}
29939\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_OPENCLOSE:KRB5_TC_OPENCLOSE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_TC\_OPENCLOSE}}}
29940\end{fulllineitems}
29941
29942
29943\sphinxAtStartPar
29944Open and close the file for each cache operation.
29945
29946
29947\begin{savenotes}\sphinxattablestart
29948\centering
29949\begin{tabulary}{\linewidth}[t]{|T|T|}
29950\hline
29951
29952\sphinxAtStartPar
29953\sphinxcode{\sphinxupquote{KRB5\_TC\_OPENCLOSE}}
29954&
29955\sphinxAtStartPar
29956\sphinxcode{\sphinxupquote{0x00000001}}
29957\\
29958\hline
29959\end{tabulary}
29960\par
29961\sphinxattableend\end{savenotes}
29962
29963
29964\subsubsection{KRB5\_TC\_SUPPORTED\_KTYPES}
29965\label{\detokenize{appdev/refs/macros/KRB5_TC_SUPPORTED_KTYPES:krb5-tc-supported-ktypes}}\label{\detokenize{appdev/refs/macros/KRB5_TC_SUPPORTED_KTYPES:krb5-tc-supported-ktypes-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_SUPPORTED_KTYPES::doc}}\index{KRB5\_TC\_SUPPORTED\_KTYPES (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_TC\_SUPPORTED\_KTYPES}\spxextra{built\sphinxhyphen{}in variable}}
29966
29967\begin{fulllineitems}
29968\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_SUPPORTED_KTYPES:KRB5_TC_SUPPORTED_KTYPES}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_TC\_SUPPORTED\_KTYPES}}}
29969\end{fulllineitems}
29970
29971
29972\sphinxAtStartPar
29973The supported key types must match.
29974
29975
29976\begin{savenotes}\sphinxattablestart
29977\centering
29978\begin{tabulary}{\linewidth}[t]{|T|T|}
29979\hline
29980
29981\sphinxAtStartPar
29982\sphinxcode{\sphinxupquote{KRB5\_TC\_SUPPORTED\_KTYPES}}
29983&
29984\sphinxAtStartPar
29985\sphinxcode{\sphinxupquote{0x00000200}}
29986\\
29987\hline
29988\end{tabulary}
29989\par
29990\sphinxattableend\end{savenotes}
29991
29992
29993\subsubsection{KRB5\_TGS\_NAME}
29994\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME:krb5-tgs-name}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME:krb5-tgs-name-data}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME::doc}}\index{KRB5\_TGS\_NAME (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_TGS\_NAME}\spxextra{built\sphinxhyphen{}in variable}}
29995
29996\begin{fulllineitems}
29997\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME:KRB5_TGS_NAME}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_TGS\_NAME}}}
29998\end{fulllineitems}
29999
30000
30001
30002\begin{savenotes}\sphinxattablestart
30003\centering
30004\begin{tabulary}{\linewidth}[t]{|T|T|}
30005\hline
30006
30007\sphinxAtStartPar
30008\sphinxcode{\sphinxupquote{KRB5\_TGS\_NAME}}
30009&
30010\sphinxAtStartPar
30011\sphinxcode{\sphinxupquote{"krbtgt"}}
30012\\
30013\hline
30014\end{tabulary}
30015\par
30016\sphinxattableend\end{savenotes}
30017
30018
30019\subsubsection{KRB5\_TGS\_NAME\_SIZE}
30020\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\sphinxhyphen{}in variable)@\spxentry{KRB5\_TGS\_NAME\_SIZE}\spxextra{built\sphinxhyphen{}in variable}}
30021
30022\begin{fulllineitems}
30023\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME_SIZE:KRB5_TGS_NAME_SIZE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_TGS\_NAME\_SIZE}}}
30024\end{fulllineitems}
30025
30026
30027
30028\begin{savenotes}\sphinxattablestart
30029\centering
30030\begin{tabulary}{\linewidth}[t]{|T|T|}
30031\hline
30032
30033\sphinxAtStartPar
30034\sphinxcode{\sphinxupquote{KRB5\_TGS\_NAME\_SIZE}}
30035&
30036\sphinxAtStartPar
30037\sphinxcode{\sphinxupquote{6}}
30038\\
30039\hline
30040\end{tabulary}
30041\par
30042\sphinxattableend\end{savenotes}
30043
30044
30045\subsubsection{KRB5\_TGS\_REP}
30046\label{\detokenize{appdev/refs/macros/KRB5_TGS_REP:krb5-tgs-rep}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_REP:krb5-tgs-rep-data}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_REP::doc}}\index{KRB5\_TGS\_REP (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_TGS\_REP}\spxextra{built\sphinxhyphen{}in variable}}
30047
30048\begin{fulllineitems}
30049\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TGS_REP:KRB5_TGS_REP}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_TGS\_REP}}}
30050\end{fulllineitems}
30051
30052
30053\sphinxAtStartPar
30054Response to TGS request.
30055
30056
30057\begin{savenotes}\sphinxattablestart
30058\centering
30059\begin{tabulary}{\linewidth}[t]{|T|T|}
30060\hline
30061
30062\sphinxAtStartPar
30063\sphinxcode{\sphinxupquote{KRB5\_TGS\_REP}}
30064&
30065\sphinxAtStartPar
30066\sphinxcode{\sphinxupquote{((krb5\_msgtype)13)}}
30067\\
30068\hline
30069\end{tabulary}
30070\par
30071\sphinxattableend\end{savenotes}
30072
30073
30074\subsubsection{KRB5\_TGS\_REQ}
30075\label{\detokenize{appdev/refs/macros/KRB5_TGS_REQ:krb5-tgs-req}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_REQ:krb5-tgs-req-data}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_REQ::doc}}\index{KRB5\_TGS\_REQ (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_TGS\_REQ}\spxextra{built\sphinxhyphen{}in variable}}
30076
30077\begin{fulllineitems}
30078\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TGS_REQ:KRB5_TGS_REQ}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_TGS\_REQ}}}
30079\end{fulllineitems}
30080
30081
30082\sphinxAtStartPar
30083Ticket granting server request.
30084
30085
30086\begin{savenotes}\sphinxattablestart
30087\centering
30088\begin{tabulary}{\linewidth}[t]{|T|T|}
30089\hline
30090
30091\sphinxAtStartPar
30092\sphinxcode{\sphinxupquote{KRB5\_TGS\_REQ}}
30093&
30094\sphinxAtStartPar
30095\sphinxcode{\sphinxupquote{((krb5\_msgtype)12)}}
30096\\
30097\hline
30098\end{tabulary}
30099\par
30100\sphinxattableend\end{savenotes}
30101
30102
30103\subsubsection{KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE}
30104\label{\detokenize{appdev/refs/macros/KRB5_TKT_CREDS_STEP_FLAG_CONTINUE:krb5-tkt-creds-step-flag-continue}}\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}}\index{KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE}\spxextra{built\sphinxhyphen{}in variable}}
30105
30106\begin{fulllineitems}
30107\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TKT_CREDS_STEP_FLAG_CONTINUE:KRB5_TKT_CREDS_STEP_FLAG_CONTINUE}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE}}}
30108\end{fulllineitems}
30109
30110
30111\sphinxAtStartPar
30112More responses needed.
30113
30114
30115\begin{savenotes}\sphinxattablestart
30116\centering
30117\begin{tabulary}{\linewidth}[t]{|T|T|}
30118\hline
30119
30120\sphinxAtStartPar
30121\sphinxcode{\sphinxupquote{KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE}}
30122&
30123\sphinxAtStartPar
30124\sphinxcode{\sphinxupquote{0x1}}
30125\\
30126\hline
30127\end{tabulary}
30128\par
30129\sphinxattableend\end{savenotes}
30130
30131
30132\subsubsection{KRB5\_VERIFY\_INIT\_CREDS\_OPT\_AP\_REQ\_NOFAIL}
30133\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:krb5-verify-init-creds-opt-ap-req-nofail-data}}\label{\detokenize{appdev/refs/macros/KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL::doc}}\index{KRB5\_VERIFY\_INIT\_CREDS\_OPT\_AP\_REQ\_NOFAIL (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_VERIFY\_INIT\_CREDS\_OPT\_AP\_REQ\_NOFAIL}\spxextra{built\sphinxhyphen{}in variable}}
30134
30135\begin{fulllineitems}
30136\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL:KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_VERIFY\_INIT\_CREDS\_OPT\_AP\_REQ\_NOFAIL}}}
30137\end{fulllineitems}
30138
30139
30140
30141\begin{savenotes}\sphinxattablestart
30142\centering
30143\begin{tabulary}{\linewidth}[t]{|T|T|}
30144\hline
30145
30146\sphinxAtStartPar
30147\sphinxcode{\sphinxupquote{KRB5\_VERIFY\_INIT\_CREDS\_OPT\_AP\_REQ\_NOFAIL}}
30148&
30149\sphinxAtStartPar
30150\sphinxcode{\sphinxupquote{0x0001}}
30151\\
30152\hline
30153\end{tabulary}
30154\par
30155\sphinxattableend\end{savenotes}
30156
30157
30158\subsubsection{KRB5\_WELLKNOWN\_NAMESTR}
30159\label{\detokenize{appdev/refs/macros/KRB5_WELLKNOWN_NAMESTR:krb5-wellknown-namestr}}\label{\detokenize{appdev/refs/macros/KRB5_WELLKNOWN_NAMESTR:krb5-wellknown-namestr-data}}\label{\detokenize{appdev/refs/macros/KRB5_WELLKNOWN_NAMESTR::doc}}\index{KRB5\_WELLKNOWN\_NAMESTR (built\sphinxhyphen{}in variable)@\spxentry{KRB5\_WELLKNOWN\_NAMESTR}\spxextra{built\sphinxhyphen{}in variable}}
30160
30161\begin{fulllineitems}
30162\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_WELLKNOWN_NAMESTR:KRB5_WELLKNOWN_NAMESTR}}\pysigline{\sphinxbfcode{\sphinxupquote{KRB5\_WELLKNOWN\_NAMESTR}}}
30163\end{fulllineitems}
30164
30165
30166\sphinxAtStartPar
30167First component of NT\_WELLKNOWN principals.
30168
30169
30170\begin{savenotes}\sphinxattablestart
30171\centering
30172\begin{tabulary}{\linewidth}[t]{|T|T|}
30173\hline
30174
30175\sphinxAtStartPar
30176\sphinxcode{\sphinxupquote{KRB5\_WELLKNOWN\_NAMESTR}}
30177&
30178\sphinxAtStartPar
30179\sphinxcode{\sphinxupquote{"WELLKNOWN"}}
30180\\
30181\hline
30182\end{tabulary}
30183\par
30184\sphinxattableend\end{savenotes}
30185
30186
30187\subsubsection{LR\_TYPE\_INTERPRETATION\_MASK}
30188\label{\detokenize{appdev/refs/macros/LR_TYPE_INTERPRETATION_MASK:lr-type-interpretation-mask}}\label{\detokenize{appdev/refs/macros/LR_TYPE_INTERPRETATION_MASK:lr-type-interpretation-mask-data}}\label{\detokenize{appdev/refs/macros/LR_TYPE_INTERPRETATION_MASK::doc}}\index{LR\_TYPE\_INTERPRETATION\_MASK (built\sphinxhyphen{}in variable)@\spxentry{LR\_TYPE\_INTERPRETATION\_MASK}\spxextra{built\sphinxhyphen{}in variable}}
30189
30190\begin{fulllineitems}
30191\phantomsection\label{\detokenize{appdev/refs/macros/LR_TYPE_INTERPRETATION_MASK:LR_TYPE_INTERPRETATION_MASK}}\pysigline{\sphinxbfcode{\sphinxupquote{LR\_TYPE\_INTERPRETATION\_MASK}}}
30192\end{fulllineitems}
30193
30194
30195
30196\begin{savenotes}\sphinxattablestart
30197\centering
30198\begin{tabulary}{\linewidth}[t]{|T|T|}
30199\hline
30200
30201\sphinxAtStartPar
30202\sphinxcode{\sphinxupquote{LR\_TYPE\_INTERPRETATION\_MASK}}
30203&
30204\sphinxAtStartPar
30205\sphinxcode{\sphinxupquote{0x7fff}}
30206\\
30207\hline
30208\end{tabulary}
30209\par
30210\sphinxattableend\end{savenotes}
30211
30212
30213\subsubsection{LR\_TYPE\_THIS\_SERVER\_ONLY}
30214\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:lr-type-this-server-only-data}}\label{\detokenize{appdev/refs/macros/LR_TYPE_THIS_SERVER_ONLY::doc}}\index{LR\_TYPE\_THIS\_SERVER\_ONLY (built\sphinxhyphen{}in variable)@\spxentry{LR\_TYPE\_THIS\_SERVER\_ONLY}\spxextra{built\sphinxhyphen{}in variable}}
30215
30216\begin{fulllineitems}
30217\phantomsection\label{\detokenize{appdev/refs/macros/LR_TYPE_THIS_SERVER_ONLY:LR_TYPE_THIS_SERVER_ONLY}}\pysigline{\sphinxbfcode{\sphinxupquote{LR\_TYPE\_THIS\_SERVER\_ONLY}}}
30218\end{fulllineitems}
30219
30220
30221
30222\begin{savenotes}\sphinxattablestart
30223\centering
30224\begin{tabulary}{\linewidth}[t]{|T|T|}
30225\hline
30226
30227\sphinxAtStartPar
30228\sphinxcode{\sphinxupquote{LR\_TYPE\_THIS\_SERVER\_ONLY}}
30229&
30230\sphinxAtStartPar
30231\sphinxcode{\sphinxupquote{0x8000}}
30232\\
30233\hline
30234\end{tabulary}
30235\par
30236\sphinxattableend\end{savenotes}
30237
30238
30239\subsubsection{MAX\_KEYTAB\_NAME\_LEN}
30240\label{\detokenize{appdev/refs/macros/MAX_KEYTAB_NAME_LEN:max-keytab-name-len}}\label{\detokenize{appdev/refs/macros/MAX_KEYTAB_NAME_LEN:max-keytab-name-len-data}}\label{\detokenize{appdev/refs/macros/MAX_KEYTAB_NAME_LEN::doc}}\index{MAX\_KEYTAB\_NAME\_LEN (built\sphinxhyphen{}in variable)@\spxentry{MAX\_KEYTAB\_NAME\_LEN}\spxextra{built\sphinxhyphen{}in variable}}
30241
30242\begin{fulllineitems}
30243\phantomsection\label{\detokenize{appdev/refs/macros/MAX_KEYTAB_NAME_LEN:MAX_KEYTAB_NAME_LEN}}\pysigline{\sphinxbfcode{\sphinxupquote{MAX\_KEYTAB\_NAME\_LEN}}}
30244\end{fulllineitems}
30245
30246
30247\sphinxAtStartPar
30248Long enough for MAXPATHLEN + some extra.
30249
30250
30251\begin{savenotes}\sphinxattablestart
30252\centering
30253\begin{tabulary}{\linewidth}[t]{|T|T|}
30254\hline
30255
30256\sphinxAtStartPar
30257\sphinxcode{\sphinxupquote{MAX\_KEYTAB\_NAME\_LEN}}
30258&
30259\sphinxAtStartPar
30260\sphinxcode{\sphinxupquote{1100}}
30261\\
30262\hline
30263\end{tabulary}
30264\par
30265\sphinxattableend\end{savenotes}
30266
30267
30268\subsubsection{MSEC\_DIRBIT}
30269\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\sphinxhyphen{}in variable)@\spxentry{MSEC\_DIRBIT}\spxextra{built\sphinxhyphen{}in variable}}
30270
30271\begin{fulllineitems}
30272\phantomsection\label{\detokenize{appdev/refs/macros/MSEC_DIRBIT:MSEC_DIRBIT}}\pysigline{\sphinxbfcode{\sphinxupquote{MSEC\_DIRBIT}}}
30273\end{fulllineitems}
30274
30275
30276
30277\begin{savenotes}\sphinxattablestart
30278\centering
30279\begin{tabulary}{\linewidth}[t]{|T|T|}
30280\hline
30281
30282\sphinxAtStartPar
30283\sphinxcode{\sphinxupquote{MSEC\_DIRBIT}}
30284&
30285\sphinxAtStartPar
30286\sphinxcode{\sphinxupquote{0x8000}}
30287\\
30288\hline
30289\end{tabulary}
30290\par
30291\sphinxattableend\end{savenotes}
30292
30293
30294\subsubsection{MSEC\_VAL\_MASK}
30295\label{\detokenize{appdev/refs/macros/MSEC_VAL_MASK:msec-val-mask}}\label{\detokenize{appdev/refs/macros/MSEC_VAL_MASK:msec-val-mask-data}}\label{\detokenize{appdev/refs/macros/MSEC_VAL_MASK::doc}}\index{MSEC\_VAL\_MASK (built\sphinxhyphen{}in variable)@\spxentry{MSEC\_VAL\_MASK}\spxextra{built\sphinxhyphen{}in variable}}
30296
30297\begin{fulllineitems}
30298\phantomsection\label{\detokenize{appdev/refs/macros/MSEC_VAL_MASK:MSEC_VAL_MASK}}\pysigline{\sphinxbfcode{\sphinxupquote{MSEC\_VAL\_MASK}}}
30299\end{fulllineitems}
30300
30301
30302
30303\begin{savenotes}\sphinxattablestart
30304\centering
30305\begin{tabulary}{\linewidth}[t]{|T|T|}
30306\hline
30307
30308\sphinxAtStartPar
30309\sphinxcode{\sphinxupquote{MSEC\_VAL\_MASK}}
30310&
30311\sphinxAtStartPar
30312\sphinxcode{\sphinxupquote{0x7fff}}
30313\\
30314\hline
30315\end{tabulary}
30316\par
30317\sphinxattableend\end{savenotes}
30318
30319
30320\subsubsection{SALT\_TYPE\_AFS\_LENGTH}
30321\label{\detokenize{appdev/refs/macros/SALT_TYPE_AFS_LENGTH:salt-type-afs-length}}\label{\detokenize{appdev/refs/macros/SALT_TYPE_AFS_LENGTH:salt-type-afs-length-data}}\label{\detokenize{appdev/refs/macros/SALT_TYPE_AFS_LENGTH::doc}}\index{SALT\_TYPE\_AFS\_LENGTH (built\sphinxhyphen{}in variable)@\spxentry{SALT\_TYPE\_AFS\_LENGTH}\spxextra{built\sphinxhyphen{}in variable}}
30322
30323\begin{fulllineitems}
30324\phantomsection\label{\detokenize{appdev/refs/macros/SALT_TYPE_AFS_LENGTH:SALT_TYPE_AFS_LENGTH}}\pysigline{\sphinxbfcode{\sphinxupquote{SALT\_TYPE\_AFS\_LENGTH}}}
30325\end{fulllineitems}
30326
30327
30328
30329\begin{savenotes}\sphinxattablestart
30330\centering
30331\begin{tabulary}{\linewidth}[t]{|T|T|}
30332\hline
30333
30334\sphinxAtStartPar
30335\sphinxcode{\sphinxupquote{SALT\_TYPE\_AFS\_LENGTH}}
30336&
30337\sphinxAtStartPar
30338\sphinxcode{\sphinxupquote{UINT\_MAX}}
30339\\
30340\hline
30341\end{tabulary}
30342\par
30343\sphinxattableend\end{savenotes}
30344
30345
30346\subsubsection{SALT\_TYPE\_NO\_LENGTH}
30347\label{\detokenize{appdev/refs/macros/SALT_TYPE_NO_LENGTH:salt-type-no-length}}\label{\detokenize{appdev/refs/macros/SALT_TYPE_NO_LENGTH:salt-type-no-length-data}}\label{\detokenize{appdev/refs/macros/SALT_TYPE_NO_LENGTH::doc}}\index{SALT\_TYPE\_NO\_LENGTH (built\sphinxhyphen{}in variable)@\spxentry{SALT\_TYPE\_NO\_LENGTH}\spxextra{built\sphinxhyphen{}in variable}}
30348
30349\begin{fulllineitems}
30350\phantomsection\label{\detokenize{appdev/refs/macros/SALT_TYPE_NO_LENGTH:SALT_TYPE_NO_LENGTH}}\pysigline{\sphinxbfcode{\sphinxupquote{SALT\_TYPE\_NO\_LENGTH}}}
30351\end{fulllineitems}
30352
30353
30354
30355\begin{savenotes}\sphinxattablestart
30356\centering
30357\begin{tabulary}{\linewidth}[t]{|T|T|}
30358\hline
30359
30360\sphinxAtStartPar
30361\sphinxcode{\sphinxupquote{SALT\_TYPE\_NO\_LENGTH}}
30362&
30363\sphinxAtStartPar
30364\sphinxcode{\sphinxupquote{UINT\_MAX}}
30365\\
30366\hline
30367\end{tabulary}
30368\par
30369\sphinxattableend\end{savenotes}
30370
30371
30372\subsubsection{THREEPARAMOPEN}
30373\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\sphinxhyphen{}in variable)@\spxentry{THREEPARAMOPEN}\spxextra{built\sphinxhyphen{}in variable}}
30374
30375\begin{fulllineitems}
30376\phantomsection\label{\detokenize{appdev/refs/macros/THREEPARAMOPEN:THREEPARAMOPEN}}\pysigline{\sphinxbfcode{\sphinxupquote{THREEPARAMOPEN}}}
30377\end{fulllineitems}
30378
30379
30380
30381\begin{savenotes}\sphinxattablestart
30382\centering
30383\begin{tabulary}{\linewidth}[t]{|T|T|}
30384\hline
30385
30386\sphinxAtStartPar
30387\sphinxcode{\sphinxupquote{THREEPARAMOPEN (x, y, z)}}
30388&
30389\sphinxAtStartPar
30390\sphinxcode{\sphinxupquote{open(x,y,z)}}
30391\\
30392\hline
30393\end{tabulary}
30394\par
30395\sphinxattableend\end{savenotes}
30396
30397
30398\subsubsection{TKT\_FLG\_ANONYMOUS}
30399\label{\detokenize{appdev/refs/macros/TKT_FLG_ANONYMOUS:tkt-flg-anonymous}}\label{\detokenize{appdev/refs/macros/TKT_FLG_ANONYMOUS:tkt-flg-anonymous-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_ANONYMOUS::doc}}\index{TKT\_FLG\_ANONYMOUS (built\sphinxhyphen{}in variable)@\spxentry{TKT\_FLG\_ANONYMOUS}\spxextra{built\sphinxhyphen{}in variable}}
30400
30401\begin{fulllineitems}
30402\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_ANONYMOUS:TKT_FLG_ANONYMOUS}}\pysigline{\sphinxbfcode{\sphinxupquote{TKT\_FLG\_ANONYMOUS}}}
30403\end{fulllineitems}
30404
30405
30406
30407\begin{savenotes}\sphinxattablestart
30408\centering
30409\begin{tabulary}{\linewidth}[t]{|T|T|}
30410\hline
30411
30412\sphinxAtStartPar
30413\sphinxcode{\sphinxupquote{TKT\_FLG\_ANONYMOUS}}
30414&
30415\sphinxAtStartPar
30416\sphinxcode{\sphinxupquote{0x00008000}}
30417\\
30418\hline
30419\end{tabulary}
30420\par
30421\sphinxattableend\end{savenotes}
30422
30423
30424\subsubsection{TKT\_FLG\_ENC\_PA\_REP}
30425\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\sphinxhyphen{}in variable)@\spxentry{TKT\_FLG\_ENC\_PA\_REP}\spxextra{built\sphinxhyphen{}in variable}}
30426
30427\begin{fulllineitems}
30428\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_ENC_PA_REP:TKT_FLG_ENC_PA_REP}}\pysigline{\sphinxbfcode{\sphinxupquote{TKT\_FLG\_ENC\_PA\_REP}}}
30429\end{fulllineitems}
30430
30431
30432
30433\begin{savenotes}\sphinxattablestart
30434\centering
30435\begin{tabulary}{\linewidth}[t]{|T|T|}
30436\hline
30437
30438\sphinxAtStartPar
30439\sphinxcode{\sphinxupquote{TKT\_FLG\_ENC\_PA\_REP}}
30440&
30441\sphinxAtStartPar
30442\sphinxcode{\sphinxupquote{0x00010000}}
30443\\
30444\hline
30445\end{tabulary}
30446\par
30447\sphinxattableend\end{savenotes}
30448
30449
30450\subsubsection{TKT\_FLG\_FORWARDABLE}
30451\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDABLE:tkt-flg-forwardable}}\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDABLE:tkt-flg-forwardable-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDABLE::doc}}\index{TKT\_FLG\_FORWARDABLE (built\sphinxhyphen{}in variable)@\spxentry{TKT\_FLG\_FORWARDABLE}\spxextra{built\sphinxhyphen{}in variable}}
30452
30453\begin{fulllineitems}
30454\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDABLE:TKT_FLG_FORWARDABLE}}\pysigline{\sphinxbfcode{\sphinxupquote{TKT\_FLG\_FORWARDABLE}}}
30455\end{fulllineitems}
30456
30457
30458
30459\begin{savenotes}\sphinxattablestart
30460\centering
30461\begin{tabulary}{\linewidth}[t]{|T|T|}
30462\hline
30463
30464\sphinxAtStartPar
30465\sphinxcode{\sphinxupquote{TKT\_FLG\_FORWARDABLE}}
30466&
30467\sphinxAtStartPar
30468\sphinxcode{\sphinxupquote{0x40000000}}
30469\\
30470\hline
30471\end{tabulary}
30472\par
30473\sphinxattableend\end{savenotes}
30474
30475
30476\subsubsection{TKT\_FLG\_FORWARDED}
30477\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDED:tkt-flg-forwarded}}\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDED:tkt-flg-forwarded-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDED::doc}}\index{TKT\_FLG\_FORWARDED (built\sphinxhyphen{}in variable)@\spxentry{TKT\_FLG\_FORWARDED}\spxextra{built\sphinxhyphen{}in variable}}
30478
30479\begin{fulllineitems}
30480\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDED:TKT_FLG_FORWARDED}}\pysigline{\sphinxbfcode{\sphinxupquote{TKT\_FLG\_FORWARDED}}}
30481\end{fulllineitems}
30482
30483
30484
30485\begin{savenotes}\sphinxattablestart
30486\centering
30487\begin{tabulary}{\linewidth}[t]{|T|T|}
30488\hline
30489
30490\sphinxAtStartPar
30491\sphinxcode{\sphinxupquote{TKT\_FLG\_FORWARDED}}
30492&
30493\sphinxAtStartPar
30494\sphinxcode{\sphinxupquote{0x20000000}}
30495\\
30496\hline
30497\end{tabulary}
30498\par
30499\sphinxattableend\end{savenotes}
30500
30501
30502\subsubsection{TKT\_FLG\_HW\_AUTH}
30503\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}}\label{\detokenize{appdev/refs/macros/TKT_FLG_HW_AUTH::doc}}\index{TKT\_FLG\_HW\_AUTH (built\sphinxhyphen{}in variable)@\spxentry{TKT\_FLG\_HW\_AUTH}\spxextra{built\sphinxhyphen{}in variable}}
30504
30505\begin{fulllineitems}
30506\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_HW_AUTH:TKT_FLG_HW_AUTH}}\pysigline{\sphinxbfcode{\sphinxupquote{TKT\_FLG\_HW\_AUTH}}}
30507\end{fulllineitems}
30508
30509
30510
30511\begin{savenotes}\sphinxattablestart
30512\centering
30513\begin{tabulary}{\linewidth}[t]{|T|T|}
30514\hline
30515
30516\sphinxAtStartPar
30517\sphinxcode{\sphinxupquote{TKT\_FLG\_HW\_AUTH}}
30518&
30519\sphinxAtStartPar
30520\sphinxcode{\sphinxupquote{0x00100000}}
30521\\
30522\hline
30523\end{tabulary}
30524\par
30525\sphinxattableend\end{savenotes}
30526
30527
30528\subsubsection{TKT\_FLG\_INITIAL}
30529\label{\detokenize{appdev/refs/macros/TKT_FLG_INITIAL:tkt-flg-initial}}\label{\detokenize{appdev/refs/macros/TKT_FLG_INITIAL:tkt-flg-initial-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_INITIAL::doc}}\index{TKT\_FLG\_INITIAL (built\sphinxhyphen{}in variable)@\spxentry{TKT\_FLG\_INITIAL}\spxextra{built\sphinxhyphen{}in variable}}
30530
30531\begin{fulllineitems}
30532\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_INITIAL:TKT_FLG_INITIAL}}\pysigline{\sphinxbfcode{\sphinxupquote{TKT\_FLG\_INITIAL}}}
30533\end{fulllineitems}
30534
30535
30536
30537\begin{savenotes}\sphinxattablestart
30538\centering
30539\begin{tabulary}{\linewidth}[t]{|T|T|}
30540\hline
30541
30542\sphinxAtStartPar
30543\sphinxcode{\sphinxupquote{TKT\_FLG\_INITIAL}}
30544&
30545\sphinxAtStartPar
30546\sphinxcode{\sphinxupquote{0x00400000}}
30547\\
30548\hline
30549\end{tabulary}
30550\par
30551\sphinxattableend\end{savenotes}
30552
30553
30554\subsubsection{TKT\_FLG\_INVALID}
30555\label{\detokenize{appdev/refs/macros/TKT_FLG_INVALID:tkt-flg-invalid}}\label{\detokenize{appdev/refs/macros/TKT_FLG_INVALID:tkt-flg-invalid-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_INVALID::doc}}\index{TKT\_FLG\_INVALID (built\sphinxhyphen{}in variable)@\spxentry{TKT\_FLG\_INVALID}\spxextra{built\sphinxhyphen{}in variable}}
30556
30557\begin{fulllineitems}
30558\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_INVALID:TKT_FLG_INVALID}}\pysigline{\sphinxbfcode{\sphinxupquote{TKT\_FLG\_INVALID}}}
30559\end{fulllineitems}
30560
30561
30562
30563\begin{savenotes}\sphinxattablestart
30564\centering
30565\begin{tabulary}{\linewidth}[t]{|T|T|}
30566\hline
30567
30568\sphinxAtStartPar
30569\sphinxcode{\sphinxupquote{TKT\_FLG\_INVALID}}
30570&
30571\sphinxAtStartPar
30572\sphinxcode{\sphinxupquote{0x01000000}}
30573\\
30574\hline
30575\end{tabulary}
30576\par
30577\sphinxattableend\end{savenotes}
30578
30579
30580\subsubsection{TKT\_FLG\_MAY\_POSTDATE}
30581\label{\detokenize{appdev/refs/macros/TKT_FLG_MAY_POSTDATE:tkt-flg-may-postdate}}\label{\detokenize{appdev/refs/macros/TKT_FLG_MAY_POSTDATE:tkt-flg-may-postdate-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_MAY_POSTDATE::doc}}\index{TKT\_FLG\_MAY\_POSTDATE (built\sphinxhyphen{}in variable)@\spxentry{TKT\_FLG\_MAY\_POSTDATE}\spxextra{built\sphinxhyphen{}in variable}}
30582
30583\begin{fulllineitems}
30584\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_MAY_POSTDATE:TKT_FLG_MAY_POSTDATE}}\pysigline{\sphinxbfcode{\sphinxupquote{TKT\_FLG\_MAY\_POSTDATE}}}
30585\end{fulllineitems}
30586
30587
30588
30589\begin{savenotes}\sphinxattablestart
30590\centering
30591\begin{tabulary}{\linewidth}[t]{|T|T|}
30592\hline
30593
30594\sphinxAtStartPar
30595\sphinxcode{\sphinxupquote{TKT\_FLG\_MAY\_POSTDATE}}
30596&
30597\sphinxAtStartPar
30598\sphinxcode{\sphinxupquote{0x04000000}}
30599\\
30600\hline
30601\end{tabulary}
30602\par
30603\sphinxattableend\end{savenotes}
30604
30605
30606\subsubsection{TKT\_FLG\_OK\_AS\_DELEGATE}
30607\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:tkt-flg-ok-as-delegate-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_OK_AS_DELEGATE::doc}}\index{TKT\_FLG\_OK\_AS\_DELEGATE (built\sphinxhyphen{}in variable)@\spxentry{TKT\_FLG\_OK\_AS\_DELEGATE}\spxextra{built\sphinxhyphen{}in variable}}
30608
30609\begin{fulllineitems}
30610\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_OK_AS_DELEGATE:TKT_FLG_OK_AS_DELEGATE}}\pysigline{\sphinxbfcode{\sphinxupquote{TKT\_FLG\_OK\_AS\_DELEGATE}}}
30611\end{fulllineitems}
30612
30613
30614
30615\begin{savenotes}\sphinxattablestart
30616\centering
30617\begin{tabulary}{\linewidth}[t]{|T|T|}
30618\hline
30619
30620\sphinxAtStartPar
30621\sphinxcode{\sphinxupquote{TKT\_FLG\_OK\_AS\_DELEGATE}}
30622&
30623\sphinxAtStartPar
30624\sphinxcode{\sphinxupquote{0x00040000}}
30625\\
30626\hline
30627\end{tabulary}
30628\par
30629\sphinxattableend\end{savenotes}
30630
30631
30632\subsubsection{TKT\_FLG\_POSTDATED}
30633\label{\detokenize{appdev/refs/macros/TKT_FLG_POSTDATED:tkt-flg-postdated}}\label{\detokenize{appdev/refs/macros/TKT_FLG_POSTDATED:tkt-flg-postdated-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_POSTDATED::doc}}\index{TKT\_FLG\_POSTDATED (built\sphinxhyphen{}in variable)@\spxentry{TKT\_FLG\_POSTDATED}\spxextra{built\sphinxhyphen{}in variable}}
30634
30635\begin{fulllineitems}
30636\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_POSTDATED:TKT_FLG_POSTDATED}}\pysigline{\sphinxbfcode{\sphinxupquote{TKT\_FLG\_POSTDATED}}}
30637\end{fulllineitems}
30638
30639
30640
30641\begin{savenotes}\sphinxattablestart
30642\centering
30643\begin{tabulary}{\linewidth}[t]{|T|T|}
30644\hline
30645
30646\sphinxAtStartPar
30647\sphinxcode{\sphinxupquote{TKT\_FLG\_POSTDATED}}
30648&
30649\sphinxAtStartPar
30650\sphinxcode{\sphinxupquote{0x02000000}}
30651\\
30652\hline
30653\end{tabulary}
30654\par
30655\sphinxattableend\end{savenotes}
30656
30657
30658\subsubsection{TKT\_FLG\_PRE\_AUTH}
30659\label{\detokenize{appdev/refs/macros/TKT_FLG_PRE_AUTH:tkt-flg-pre-auth}}\label{\detokenize{appdev/refs/macros/TKT_FLG_PRE_AUTH:tkt-flg-pre-auth-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_PRE_AUTH::doc}}\index{TKT\_FLG\_PRE\_AUTH (built\sphinxhyphen{}in variable)@\spxentry{TKT\_FLG\_PRE\_AUTH}\spxextra{built\sphinxhyphen{}in variable}}
30660
30661\begin{fulllineitems}
30662\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_PRE_AUTH:TKT_FLG_PRE_AUTH}}\pysigline{\sphinxbfcode{\sphinxupquote{TKT\_FLG\_PRE\_AUTH}}}
30663\end{fulllineitems}
30664
30665
30666
30667\begin{savenotes}\sphinxattablestart
30668\centering
30669\begin{tabulary}{\linewidth}[t]{|T|T|}
30670\hline
30671
30672\sphinxAtStartPar
30673\sphinxcode{\sphinxupquote{TKT\_FLG\_PRE\_AUTH}}
30674&
30675\sphinxAtStartPar
30676\sphinxcode{\sphinxupquote{0x00200000}}
30677\\
30678\hline
30679\end{tabulary}
30680\par
30681\sphinxattableend\end{savenotes}
30682
30683
30684\subsubsection{TKT\_FLG\_PROXIABLE}
30685\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\sphinxhyphen{}in variable)@\spxentry{TKT\_FLG\_PROXIABLE}\spxextra{built\sphinxhyphen{}in variable}}
30686
30687\begin{fulllineitems}
30688\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXIABLE:TKT_FLG_PROXIABLE}}\pysigline{\sphinxbfcode{\sphinxupquote{TKT\_FLG\_PROXIABLE}}}
30689\end{fulllineitems}
30690
30691
30692
30693\begin{savenotes}\sphinxattablestart
30694\centering
30695\begin{tabulary}{\linewidth}[t]{|T|T|}
30696\hline
30697
30698\sphinxAtStartPar
30699\sphinxcode{\sphinxupquote{TKT\_FLG\_PROXIABLE}}
30700&
30701\sphinxAtStartPar
30702\sphinxcode{\sphinxupquote{0x10000000}}
30703\\
30704\hline
30705\end{tabulary}
30706\par
30707\sphinxattableend\end{savenotes}
30708
30709
30710\subsubsection{TKT\_FLG\_PROXY}
30711\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXY:tkt-flg-proxy}}\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXY:tkt-flg-proxy-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXY::doc}}\index{TKT\_FLG\_PROXY (built\sphinxhyphen{}in variable)@\spxentry{TKT\_FLG\_PROXY}\spxextra{built\sphinxhyphen{}in variable}}
30712
30713\begin{fulllineitems}
30714\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXY:TKT_FLG_PROXY}}\pysigline{\sphinxbfcode{\sphinxupquote{TKT\_FLG\_PROXY}}}
30715\end{fulllineitems}
30716
30717
30718
30719\begin{savenotes}\sphinxattablestart
30720\centering
30721\begin{tabulary}{\linewidth}[t]{|T|T|}
30722\hline
30723
30724\sphinxAtStartPar
30725\sphinxcode{\sphinxupquote{TKT\_FLG\_PROXY}}
30726&
30727\sphinxAtStartPar
30728\sphinxcode{\sphinxupquote{0x08000000}}
30729\\
30730\hline
30731\end{tabulary}
30732\par
30733\sphinxattableend\end{savenotes}
30734
30735
30736\subsubsection{TKT\_FLG\_RENEWABLE}
30737\label{\detokenize{appdev/refs/macros/TKT_FLG_RENEWABLE:tkt-flg-renewable}}\label{\detokenize{appdev/refs/macros/TKT_FLG_RENEWABLE:tkt-flg-renewable-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_RENEWABLE::doc}}\index{TKT\_FLG\_RENEWABLE (built\sphinxhyphen{}in variable)@\spxentry{TKT\_FLG\_RENEWABLE}\spxextra{built\sphinxhyphen{}in variable}}
30738
30739\begin{fulllineitems}
30740\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_RENEWABLE:TKT_FLG_RENEWABLE}}\pysigline{\sphinxbfcode{\sphinxupquote{TKT\_FLG\_RENEWABLE}}}
30741\end{fulllineitems}
30742
30743
30744
30745\begin{savenotes}\sphinxattablestart
30746\centering
30747\begin{tabulary}{\linewidth}[t]{|T|T|}
30748\hline
30749
30750\sphinxAtStartPar
30751\sphinxcode{\sphinxupquote{TKT\_FLG\_RENEWABLE}}
30752&
30753\sphinxAtStartPar
30754\sphinxcode{\sphinxupquote{0x00800000}}
30755\\
30756\hline
30757\end{tabulary}
30758\par
30759\sphinxattableend\end{savenotes}
30760
30761
30762\subsubsection{TKT\_FLG\_TRANSIT\_POLICY\_CHECKED}
30763\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}}\label{\detokenize{appdev/refs/macros/TKT_FLG_TRANSIT_POLICY_CHECKED::doc}}\index{TKT\_FLG\_TRANSIT\_POLICY\_CHECKED (built\sphinxhyphen{}in variable)@\spxentry{TKT\_FLG\_TRANSIT\_POLICY\_CHECKED}\spxextra{built\sphinxhyphen{}in variable}}
30764
30765\begin{fulllineitems}
30766\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_TRANSIT_POLICY_CHECKED:TKT_FLG_TRANSIT_POLICY_CHECKED}}\pysigline{\sphinxbfcode{\sphinxupquote{TKT\_FLG\_TRANSIT\_POLICY\_CHECKED}}}
30767\end{fulllineitems}
30768
30769
30770
30771\begin{savenotes}\sphinxattablestart
30772\centering
30773\begin{tabulary}{\linewidth}[t]{|T|T|}
30774\hline
30775
30776\sphinxAtStartPar
30777\sphinxcode{\sphinxupquote{TKT\_FLG\_TRANSIT\_POLICY\_CHECKED}}
30778&
30779\sphinxAtStartPar
30780\sphinxcode{\sphinxupquote{0x00080000}}
30781\\
30782\hline
30783\end{tabulary}
30784\par
30785\sphinxattableend\end{savenotes}
30786
30787
30788\subsubsection{VALID\_INT\_BITS}
30789\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\sphinxhyphen{}in variable)@\spxentry{VALID\_INT\_BITS}\spxextra{built\sphinxhyphen{}in variable}}
30790
30791\begin{fulllineitems}
30792\phantomsection\label{\detokenize{appdev/refs/macros/VALID_INT_BITS:VALID_INT_BITS}}\pysigline{\sphinxbfcode{\sphinxupquote{VALID\_INT\_BITS}}}
30793\end{fulllineitems}
30794
30795
30796
30797\begin{savenotes}\sphinxattablestart
30798\centering
30799\begin{tabulary}{\linewidth}[t]{|T|T|}
30800\hline
30801
30802\sphinxAtStartPar
30803\sphinxcode{\sphinxupquote{VALID\_INT\_BITS}}
30804&
30805\sphinxAtStartPar
30806\sphinxcode{\sphinxupquote{INT\_MAX}}
30807\\
30808\hline
30809\end{tabulary}
30810\par
30811\sphinxattableend\end{savenotes}
30812
30813
30814\subsubsection{VALID\_UINT\_BITS}
30815\label{\detokenize{appdev/refs/macros/VALID_UINT_BITS:valid-uint-bits}}\label{\detokenize{appdev/refs/macros/VALID_UINT_BITS:valid-uint-bits-data}}\label{\detokenize{appdev/refs/macros/VALID_UINT_BITS::doc}}\index{VALID\_UINT\_BITS (built\sphinxhyphen{}in variable)@\spxentry{VALID\_UINT\_BITS}\spxextra{built\sphinxhyphen{}in variable}}
30816
30817\begin{fulllineitems}
30818\phantomsection\label{\detokenize{appdev/refs/macros/VALID_UINT_BITS:VALID_UINT_BITS}}\pysigline{\sphinxbfcode{\sphinxupquote{VALID\_UINT\_BITS}}}
30819\end{fulllineitems}
30820
30821
30822
30823\begin{savenotes}\sphinxattablestart
30824\centering
30825\begin{tabulary}{\linewidth}[t]{|T|T|}
30826\hline
30827
30828\sphinxAtStartPar
30829\sphinxcode{\sphinxupquote{VALID\_UINT\_BITS}}
30830&
30831\sphinxAtStartPar
30832\sphinxcode{\sphinxupquote{UINT\_MAX}}
30833\\
30834\hline
30835\end{tabulary}
30836\par
30837\sphinxattableend\end{savenotes}
30838
30839
30840\subsubsection{krb5\_const}
30841\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\sphinxhyphen{}in variable)@\spxentry{krb5\_const}\spxextra{built\sphinxhyphen{}in variable}}
30842
30843\begin{fulllineitems}
30844\phantomsection\label{\detokenize{appdev/refs/macros/krb5_const:krb5_const}}\pysigline{\sphinxbfcode{\sphinxupquote{krb5\_const}}}
30845\end{fulllineitems}
30846
30847
30848
30849\begin{savenotes}\sphinxattablestart
30850\centering
30851\begin{tabulary}{\linewidth}[t]{|T|T|}
30852\hline
30853
30854\sphinxAtStartPar
30855\sphinxcode{\sphinxupquote{krb5\_const}}
30856&
30857\sphinxAtStartPar
30858\sphinxcode{\sphinxupquote{const}}
30859\\
30860\hline
30861\end{tabulary}
30862\par
30863\sphinxattableend\end{savenotes}
30864
30865
30866\subsubsection{krb5\_princ\_component}
30867\label{\detokenize{appdev/refs/macros/krb5_princ_component:krb5-princ-component}}\label{\detokenize{appdev/refs/macros/krb5_princ_component:krb5-princ-component-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_component::doc}}\index{krb5\_princ\_component (built\sphinxhyphen{}in variable)@\spxentry{krb5\_princ\_component}\spxextra{built\sphinxhyphen{}in variable}}
30868
30869\begin{fulllineitems}
30870\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_component:krb5_princ_component}}\pysigline{\sphinxbfcode{\sphinxupquote{krb5\_princ\_component}}}
30871\end{fulllineitems}
30872
30873
30874
30875\begin{savenotes}\sphinxattablestart
30876\centering
30877\begin{tabulary}{\linewidth}[t]{|T|T|}
30878\hline
30879
30880\sphinxAtStartPar
30881\sphinxcode{\sphinxupquote{krb5\_princ\_component (context, princ, i)}}
30882&
30883\sphinxAtStartPar
30884\textasciigrave{}\textasciigrave{}    (((i) \textless{} krb5\_princ\_size(context, princ)) ? (princ)\sphinxhyphen{}\textgreater{}data + (i) : NULL)\textasciigrave{}\textasciigrave{}
30885\\
30886\hline
30887\end{tabulary}
30888\par
30889\sphinxattableend\end{savenotes}
30890
30891
30892\subsubsection{krb5\_princ\_name}
30893\label{\detokenize{appdev/refs/macros/krb5_princ_name:krb5-princ-name}}\label{\detokenize{appdev/refs/macros/krb5_princ_name:krb5-princ-name-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_name::doc}}\index{krb5\_princ\_name (built\sphinxhyphen{}in variable)@\spxentry{krb5\_princ\_name}\spxextra{built\sphinxhyphen{}in variable}}
30894
30895\begin{fulllineitems}
30896\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_name:krb5_princ_name}}\pysigline{\sphinxbfcode{\sphinxupquote{krb5\_princ\_name}}}
30897\end{fulllineitems}
30898
30899
30900
30901\begin{savenotes}\sphinxattablestart
30902\centering
30903\begin{tabulary}{\linewidth}[t]{|T|T|}
30904\hline
30905
30906\sphinxAtStartPar
30907\sphinxcode{\sphinxupquote{krb5\_princ\_name (context, princ)}}
30908&
30909\sphinxAtStartPar
30910\sphinxcode{\sphinxupquote{(princ)\sphinxhyphen{}\textgreater{}data}}
30911\\
30912\hline
30913\end{tabulary}
30914\par
30915\sphinxattableend\end{savenotes}
30916
30917
30918\subsubsection{krb5\_princ\_realm}
30919\label{\detokenize{appdev/refs/macros/krb5_princ_realm:krb5-princ-realm}}\label{\detokenize{appdev/refs/macros/krb5_princ_realm:krb5-princ-realm-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_realm::doc}}\index{krb5\_princ\_realm (built\sphinxhyphen{}in variable)@\spxentry{krb5\_princ\_realm}\spxextra{built\sphinxhyphen{}in variable}}
30920
30921\begin{fulllineitems}
30922\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_realm:krb5_princ_realm}}\pysigline{\sphinxbfcode{\sphinxupquote{krb5\_princ\_realm}}}
30923\end{fulllineitems}
30924
30925
30926
30927\begin{savenotes}\sphinxattablestart
30928\centering
30929\begin{tabulary}{\linewidth}[t]{|T|T|}
30930\hline
30931
30932\sphinxAtStartPar
30933\sphinxcode{\sphinxupquote{krb5\_princ\_realm (context, princ)}}
30934&
30935\sphinxAtStartPar
30936\sphinxcode{\sphinxupquote{(\&(princ)\sphinxhyphen{}\textgreater{}realm)}}
30937\\
30938\hline
30939\end{tabulary}
30940\par
30941\sphinxattableend\end{savenotes}
30942
30943
30944\subsubsection{krb5\_princ\_set\_realm}
30945\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm:krb5-princ-set-realm}}\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm:krb5-princ-set-realm-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm::doc}}\index{krb5\_princ\_set\_realm (built\sphinxhyphen{}in variable)@\spxentry{krb5\_princ\_set\_realm}\spxextra{built\sphinxhyphen{}in variable}}
30946
30947\begin{fulllineitems}
30948\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm:krb5_princ_set_realm}}\pysigline{\sphinxbfcode{\sphinxupquote{krb5\_princ\_set\_realm}}}
30949\end{fulllineitems}
30950
30951
30952
30953\begin{savenotes}\sphinxattablestart
30954\centering
30955\begin{tabulary}{\linewidth}[t]{|T|T|}
30956\hline
30957
30958\sphinxAtStartPar
30959\sphinxcode{\sphinxupquote{krb5\_princ\_set\_realm (context, princ, value)}}
30960&
30961\sphinxAtStartPar
30962\sphinxcode{\sphinxupquote{((princ)\sphinxhyphen{}\textgreater{}realm = *(value))}}
30963\\
30964\hline
30965\end{tabulary}
30966\par
30967\sphinxattableend\end{savenotes}
30968
30969
30970\subsubsection{krb5\_princ\_set\_realm\_data}
30971\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_data:krb5-princ-set-realm-data}}\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}}\index{krb5\_princ\_set\_realm\_data (built\sphinxhyphen{}in variable)@\spxentry{krb5\_princ\_set\_realm\_data}\spxextra{built\sphinxhyphen{}in variable}}
30972
30973\begin{fulllineitems}
30974\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_data:krb5_princ_set_realm_data}}\pysigline{\sphinxbfcode{\sphinxupquote{krb5\_princ\_set\_realm\_data}}}
30975\end{fulllineitems}
30976
30977
30978
30979\begin{savenotes}\sphinxattablestart
30980\centering
30981\begin{tabulary}{\linewidth}[t]{|T|T|}
30982\hline
30983
30984\sphinxAtStartPar
30985\sphinxcode{\sphinxupquote{krb5\_princ\_set\_realm\_data (context, princ, value)}}
30986&
30987\sphinxAtStartPar
30988\sphinxcode{\sphinxupquote{(princ)\sphinxhyphen{}\textgreater{}realm.data = (value)}}
30989\\
30990\hline
30991\end{tabulary}
30992\par
30993\sphinxattableend\end{savenotes}
30994
30995
30996\subsubsection{krb5\_princ\_set\_realm\_length}
30997\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_length:krb5-princ-set-realm-length}}\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}}\index{krb5\_princ\_set\_realm\_length (built\sphinxhyphen{}in variable)@\spxentry{krb5\_princ\_set\_realm\_length}\spxextra{built\sphinxhyphen{}in variable}}
30998
30999\begin{fulllineitems}
31000\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_length:krb5_princ_set_realm_length}}\pysigline{\sphinxbfcode{\sphinxupquote{krb5\_princ\_set\_realm\_length}}}
31001\end{fulllineitems}
31002
31003
31004
31005\begin{savenotes}\sphinxattablestart
31006\centering
31007\begin{tabulary}{\linewidth}[t]{|T|T|}
31008\hline
31009
31010\sphinxAtStartPar
31011\sphinxcode{\sphinxupquote{krb5\_princ\_set\_realm\_length (context, princ, value)}}
31012&
31013\sphinxAtStartPar
31014\sphinxcode{\sphinxupquote{(princ)\sphinxhyphen{}\textgreater{}realm.length = (value)}}
31015\\
31016\hline
31017\end{tabulary}
31018\par
31019\sphinxattableend\end{savenotes}
31020
31021
31022\subsubsection{krb5\_princ\_size}
31023\label{\detokenize{appdev/refs/macros/krb5_princ_size:krb5-princ-size}}\label{\detokenize{appdev/refs/macros/krb5_princ_size:krb5-princ-size-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_size::doc}}\index{krb5\_princ\_size (built\sphinxhyphen{}in variable)@\spxentry{krb5\_princ\_size}\spxextra{built\sphinxhyphen{}in variable}}
31024
31025\begin{fulllineitems}
31026\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_size:krb5_princ_size}}\pysigline{\sphinxbfcode{\sphinxupquote{krb5\_princ\_size}}}
31027\end{fulllineitems}
31028
31029
31030
31031\begin{savenotes}\sphinxattablestart
31032\centering
31033\begin{tabulary}{\linewidth}[t]{|T|T|}
31034\hline
31035
31036\sphinxAtStartPar
31037\sphinxcode{\sphinxupquote{krb5\_princ\_size (context, princ)}}
31038&
31039\sphinxAtStartPar
31040\sphinxcode{\sphinxupquote{(princ)\sphinxhyphen{}\textgreater{}length}}
31041\\
31042\hline
31043\end{tabulary}
31044\par
31045\sphinxattableend\end{savenotes}
31046
31047
31048\subsubsection{krb5\_princ\_type}
31049\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\sphinxhyphen{}in variable)@\spxentry{krb5\_princ\_type}\spxextra{built\sphinxhyphen{}in variable}}
31050
31051\begin{fulllineitems}
31052\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_type:krb5_princ_type}}\pysigline{\sphinxbfcode{\sphinxupquote{krb5\_princ\_type}}}
31053\end{fulllineitems}
31054
31055
31056
31057\begin{savenotes}\sphinxattablestart
31058\centering
31059\begin{tabulary}{\linewidth}[t]{|T|T|}
31060\hline
31061
31062\sphinxAtStartPar
31063\sphinxcode{\sphinxupquote{krb5\_princ\_type (context, princ)}}
31064&
31065\sphinxAtStartPar
31066\sphinxcode{\sphinxupquote{(princ)\sphinxhyphen{}\textgreater{}type}}
31067\\
31068\hline
31069\end{tabulary}
31070\par
31071\sphinxattableend\end{savenotes}
31072
31073
31074\subsubsection{krb5\_roundup}
31075\label{\detokenize{appdev/refs/macros/krb5_roundup:krb5-roundup}}\label{\detokenize{appdev/refs/macros/krb5_roundup:krb5-roundup-data}}\label{\detokenize{appdev/refs/macros/krb5_roundup::doc}}\index{krb5\_roundup (built\sphinxhyphen{}in variable)@\spxentry{krb5\_roundup}\spxextra{built\sphinxhyphen{}in variable}}
31076
31077\begin{fulllineitems}
31078\phantomsection\label{\detokenize{appdev/refs/macros/krb5_roundup:krb5_roundup}}\pysigline{\sphinxbfcode{\sphinxupquote{krb5\_roundup}}}
31079\end{fulllineitems}
31080
31081
31082
31083\begin{savenotes}\sphinxattablestart
31084\centering
31085\begin{tabulary}{\linewidth}[t]{|T|T|}
31086\hline
31087
31088\sphinxAtStartPar
31089\sphinxcode{\sphinxupquote{krb5\_roundup (x, y)}}
31090&
31091\sphinxAtStartPar
31092\sphinxcode{\sphinxupquote{((((x) + (y) \sphinxhyphen{} 1)/(y))*(y))}}
31093\\
31094\hline
31095\end{tabulary}
31096\par
31097\sphinxattableend\end{savenotes}
31098
31099
31100\subsubsection{krb5\_x}
31101\label{\detokenize{appdev/refs/macros/krb5_x:krb5-x}}\label{\detokenize{appdev/refs/macros/krb5_x:krb5-x-data}}\label{\detokenize{appdev/refs/macros/krb5_x::doc}}\index{krb5\_x (built\sphinxhyphen{}in variable)@\spxentry{krb5\_x}\spxextra{built\sphinxhyphen{}in variable}}
31102
31103\begin{fulllineitems}
31104\phantomsection\label{\detokenize{appdev/refs/macros/krb5_x:krb5_x}}\pysigline{\sphinxbfcode{\sphinxupquote{krb5\_x}}}
31105\end{fulllineitems}
31106
31107
31108
31109\begin{savenotes}\sphinxattablestart
31110\centering
31111\begin{tabulary}{\linewidth}[t]{|T|T|}
31112\hline
31113
31114\sphinxAtStartPar
31115\sphinxcode{\sphinxupquote{krb5\_x (ptr, args)}}
31116&
31117\sphinxAtStartPar
31118\sphinxcode{\sphinxupquote{((ptr)?((*(ptr)) args):(abort(),1))}}
31119\\
31120\hline
31121\end{tabulary}
31122\par
31123\sphinxattableend\end{savenotes}
31124
31125
31126\subsubsection{krb5\_xc}
31127\label{\detokenize{appdev/refs/macros/krb5_xc:krb5-xc}}\label{\detokenize{appdev/refs/macros/krb5_xc:krb5-xc-data}}\label{\detokenize{appdev/refs/macros/krb5_xc::doc}}\index{krb5\_xc (built\sphinxhyphen{}in variable)@\spxentry{krb5\_xc}\spxextra{built\sphinxhyphen{}in variable}}
31128
31129\begin{fulllineitems}
31130\phantomsection\label{\detokenize{appdev/refs/macros/krb5_xc:krb5_xc}}\pysigline{\sphinxbfcode{\sphinxupquote{krb5\_xc}}}
31131\end{fulllineitems}
31132
31133
31134
31135\begin{savenotes}\sphinxattablestart
31136\centering
31137\begin{tabulary}{\linewidth}[t]{|T|T|}
31138\hline
31139
31140\sphinxAtStartPar
31141\sphinxcode{\sphinxupquote{krb5\_xc (ptr, args)}}
31142&
31143\sphinxAtStartPar
31144\sphinxcode{\sphinxupquote{((ptr)?((*(ptr)) args):(abort(),(char*)0))}}
31145\\
31146\hline
31147\end{tabulary}
31148\par
31149\sphinxattableend\end{savenotes}
31150
31151
31152\subsection{Deprecated macros}
31153\label{\detokenize{appdev/refs/macros/index:deprecated-macros}}
31154
31155\subsubsection{krb524\_convert\_creds\_kdc}
31156\label{\detokenize{appdev/refs/macros/krb524_convert_creds_kdc:krb524-convert-creds-kdc}}\label{\detokenize{appdev/refs/macros/krb524_convert_creds_kdc:krb524-convert-creds-kdc-data}}\label{\detokenize{appdev/refs/macros/krb524_convert_creds_kdc::doc}}\index{krb524\_convert\_creds\_kdc (built\sphinxhyphen{}in variable)@\spxentry{krb524\_convert\_creds\_kdc}\spxextra{built\sphinxhyphen{}in variable}}
31157
31158\begin{fulllineitems}
31159\phantomsection\label{\detokenize{appdev/refs/macros/krb524_convert_creds_kdc:krb524_convert_creds_kdc}}\pysigline{\sphinxbfcode{\sphinxupquote{krb524\_convert\_creds\_kdc}}}
31160\end{fulllineitems}
31161
31162
31163
31164\begin{savenotes}\sphinxattablestart
31165\centering
31166\begin{tabulary}{\linewidth}[t]{|T|T|}
31167\hline
31168
31169\sphinxAtStartPar
31170\sphinxcode{\sphinxupquote{krb524\_convert\_creds\_kdc}}
31171&
31172\sphinxAtStartPar
31173\sphinxcode{\sphinxupquote{krb5\_524\_convert\_creds}}
31174\\
31175\hline
31176\end{tabulary}
31177\par
31178\sphinxattableend\end{savenotes}
31179
31180
31181\subsubsection{krb524\_init\_ets}
31182\label{\detokenize{appdev/refs/macros/krb524_init_ets:krb524-init-ets}}\label{\detokenize{appdev/refs/macros/krb524_init_ets:krb524-init-ets-data}}\label{\detokenize{appdev/refs/macros/krb524_init_ets::doc}}\index{krb524\_init\_ets (built\sphinxhyphen{}in variable)@\spxentry{krb524\_init\_ets}\spxextra{built\sphinxhyphen{}in variable}}
31183
31184\begin{fulllineitems}
31185\phantomsection\label{\detokenize{appdev/refs/macros/krb524_init_ets:krb524_init_ets}}\pysigline{\sphinxbfcode{\sphinxupquote{krb524\_init\_ets}}}
31186\end{fulllineitems}
31187
31188
31189
31190\begin{savenotes}\sphinxattablestart
31191\centering
31192\begin{tabulary}{\linewidth}[t]{|T|T|}
31193\hline
31194
31195\sphinxAtStartPar
31196\sphinxcode{\sphinxupquote{krb524\_init\_ets (x)}}
31197&
31198\sphinxAtStartPar
31199\sphinxcode{\sphinxupquote{(0)}}
31200\\
31201\hline
31202\end{tabulary}
31203\par
31204\sphinxattableend\end{savenotes}
31205
31206
31207
31208\renewcommand{\indexname}{Index}
31209\printindex
31210\end{document}