1%% Generated by Sphinx.
2\def\sphinxdocclass{report}
3\documentclass[letterpaper,10pt,english]{sphinxmanual}
4\ifdefined\pdfpxdimen
5   \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen
6\fi \sphinxpxdimen=.75bp\relax
7
8\usepackage[utf8]{inputenc}
9\ifdefined\DeclareUnicodeCharacter
10 \ifdefined\DeclareUnicodeCharacterAsOptional
11  \DeclareUnicodeCharacter{"00A0}{\nobreakspace}
12  \DeclareUnicodeCharacter{"2500}{\sphinxunichar{2500}}
13  \DeclareUnicodeCharacter{"2502}{\sphinxunichar{2502}}
14  \DeclareUnicodeCharacter{"2514}{\sphinxunichar{2514}}
15  \DeclareUnicodeCharacter{"251C}{\sphinxunichar{251C}}
16  \DeclareUnicodeCharacter{"2572}{\textbackslash}
17 \else
18  \DeclareUnicodeCharacter{00A0}{\nobreakspace}
19  \DeclareUnicodeCharacter{2500}{\sphinxunichar{2500}}
20  \DeclareUnicodeCharacter{2502}{\sphinxunichar{2502}}
21  \DeclareUnicodeCharacter{2514}{\sphinxunichar{2514}}
22  \DeclareUnicodeCharacter{251C}{\sphinxunichar{251C}}
23  \DeclareUnicodeCharacter{2572}{\textbackslash}
24 \fi
25\fi
26\usepackage{cmap}
27\usepackage[T1]{fontenc}
28\usepackage{amsmath,amssymb,amstext}
29\usepackage{babel}
30\usepackage{times}
31\usepackage[Bjarne]{fncychap}
32\usepackage[dontkeepoldnames]{sphinx}
33
34\usepackage{geometry}
35
36% Include hyperref last.
37\usepackage{hyperref}
38% Fix anchor placement for figures with captions.
39\usepackage{hypcap}% it must be loaded after hyperref.
40% Set up styles of URL: it should be placed after hyperref.
41\urlstyle{same}
42
43\addto\captionsenglish{\renewcommand{\figurename}{Fig.}}
44\addto\captionsenglish{\renewcommand{\tablename}{Table}}
45\addto\captionsenglish{\renewcommand{\literalblockname}{Listing}}
46
47\addto\captionsenglish{\renewcommand{\literalblockcontinuedname}{continued from previous page}}
48\addto\captionsenglish{\renewcommand{\literalblockcontinuesname}{continues on next page}}
49
50\addto\extrasenglish{\def\pageautorefname{page}}
51
52\setcounter{tocdepth}{0}
53
54
55
56\title{Kerberos Application Developer Guide}
57\date{ }
58\release{1.19.2}
59\author{MIT}
60\newcommand{\sphinxlogo}{\vbox{}}
61\renewcommand{\releasename}{Release}
62\makeindex
63
64\begin{document}
65
66\maketitle
67\sphinxtableofcontents
68\phantomsection\label{\detokenize{appdev/index::doc}}
69
70
71
72\chapter{Developing with GSSAPI}
73\label{\detokenize{appdev/gssapi:for-application-developers}}\label{\detokenize{appdev/gssapi::doc}}\label{\detokenize{appdev/gssapi:developing-with-gssapi}}
74The GSSAPI (Generic Security Services API) allows applications to
75communicate securely using Kerberos 5 or other security mechanisms.
76We recommend using the GSSAPI (or a higher-level framework which
77encompasses GSSAPI, such as SASL) for secure network communication
78over using the libkrb5 API directly.
79
80GSSAPIv2 is specified in \index{RFC!RFC 2743}\sphinxhref{https://tools.ietf.org/html/rfc2743.html}{\sphinxstylestrong{RFC 2743}} and \index{RFC!RFC 2744}\sphinxhref{https://tools.ietf.org/html/rfc2744.html}{\sphinxstylestrong{RFC 2744}}.  Also see
81\index{RFC!RFC 7546}\sphinxhref{https://tools.ietf.org/html/rfc7546.html}{\sphinxstylestrong{RFC 7546}} for a description of how to use the GSSAPI in a client or
82server program.
83
84This documentation will describe how various ways of using the
85GSSAPI will behave with the krb5 mechanism as implemented in MIT krb5,
86as well as krb5-specific extensions to the GSSAPI.
87
88
89\section{Name types}
90\label{\detokenize{appdev/gssapi:name-types}}
91A GSSAPI application can name a local or remote entity by calling
92\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.16}{gss\_import\_name}, specifying a name type and a value.  The following
93name types are supported by the krb5 mechanism:
94\begin{itemize}
95\item {}
96\sphinxstylestrong{GSS\_C\_NT\_HOSTBASED\_SERVICE}: The value should be a string of the
97form \sphinxcode{service} or \sphinxcode{service@hostname}.  This is the most common
98way to name target services when initiating a security context, and
99is the most likely name type to work across multiple mechanisms.
100
101\item {}
102\sphinxstylestrong{GSS\_KRB5\_NT\_PRINCIPAL\_NAME}: The value should be a principal name
103string.  This name type only works with the krb5 mechanism, and is
104defined in the \sphinxcode{\textless{}gssapi/gssapi\_krb5.h\textgreater{}} header.
105
106\item {}
107\sphinxstylestrong{GSS\_C\_NT\_USER\_NAME} or \sphinxstylestrong{GSS\_C\_NULL\_OID}: The value is treated
108as an unparsed principal name string, as above.  These name types
109may work with mechanisms other than krb5, but will have different
110interpretations in those mechanisms.  \sphinxstylestrong{GSS\_C\_NT\_USER\_NAME} is
111intended to be used with a local username, which will parse into a
112single-component principal in the default realm.
113
114\item {}
115\sphinxstylestrong{GSS\_C\_NT\_ANONYMOUS}: The value is ignored.  The anonymous
116principal is used, allowing a client to authenticate to a server
117without asserting a particular identity (which may or may not be
118allowed by a particular server or Kerberos realm).
119
120\item {}
121\sphinxstylestrong{GSS\_C\_NT\_MACHINE\_UID\_NAME}: The value is uid\_t object.  On
122Unix-like systems, the username of the uid is looked up in the
123system user database and the resulting username is parsed as a
124principal name.
125
126\item {}
127\sphinxstylestrong{GSS\_C\_NT\_STRING\_UID\_NAME}: As above, but the value is a decimal
128string representation of the uid.
129
130\item {}
131\sphinxstylestrong{GSS\_C\_NT\_EXPORT\_NAME}: The value must be the result of a
132\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.13}{gss\_export\_name} call.
133
134\item {}
135\sphinxstylestrong{GSS\_KRB5\_NT\_ENTERPRISE\_NAME}: The value should be a krb5
136enterprise name string (see \index{RFC!RFC 6806}\sphinxhref{https://tools.ietf.org/html/rfc6806.html}{\sphinxstylestrong{RFC 6806}} section 5), in the form
137\sphinxcode{user@suffix}.  This name type is used to convey alias names, and
138is defined in the \sphinxcode{\textless{}gssapi/gssapi\_krb5.h\textgreater{}} header.  (New in
139release 1.17.)
140
141\item {}
142\sphinxstylestrong{GSS\_KRB5\_NT\_X509\_CERT}: The value should be an X.509 certificate
143encoded according to \index{RFC!RFC 5280}\sphinxhref{https://tools.ietf.org/html/rfc5280.html}{\sphinxstylestrong{RFC 5280}}.  This name form can be used for
144the desired\_name parameter of gss\_acquire\_cred\_impersonate\_name(),
145to identify the S4U2Self user by certificate.  (New in release
1461.19.)
147
148\end{itemize}
149
150
151\section{Initiator credentials}
152\label{\detokenize{appdev/gssapi:initiator-credentials}}
153A GSSAPI client application uses \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.19}{gss\_init\_sec\_context} to establish a
154security context.  The \sphinxstyleemphasis{initiator\_cred\_handle} parameter determines
155what tickets are used to establish the connection.  An application can
156either pass \sphinxstylestrong{GSS\_C\_NO\_CREDENTIAL} to use the default client
157credential, or it can use \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred} beforehand to acquire an
158initiator credential.  The call to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred} may include a
159\sphinxstyleemphasis{desired\_name} parameter, or it may pass \sphinxstylestrong{GSS\_C\_NO\_NAME} if it does
160not have a specific name preference.
161
162If the desired name for a krb5 initiator credential is a host-based
163name, it is converted to a principal name of the form
164\sphinxcode{service/hostname} in the local realm, where \sphinxstyleemphasis{hostname} is the local
165hostname if not specified.  The hostname will be canonicalized using
166forward name resolution, and possibly also using reverse name
167resolution depending on the value of the \sphinxstylestrong{rdns} variable in
168\DUrole{xref,std,std-ref}{libdefaults}.
169
170If a desired name is specified in the call to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred}, the
171krb5 mechanism will attempt to find existing tickets for that client
172principal name in the default credential cache or collection.  If the
173default cache type does not support a collection, and the default
174cache contains credentials for a different principal than the desired
175name, a \sphinxstylestrong{GSS\_S\_CRED\_UNAVAIL} error will be returned with a minor
176code indicating a mismatch.
177
178If no existing tickets are available for the desired name, but the
179name has an entry in the default client \DUrole{xref,std,std-ref}{keytab\_definition}, the
180krb5 mechanism will acquire initial tickets for the name using the
181default client keytab.
182
183If no desired name is specified, credential acquisition will be
184deferred until the credential is used in a call to
185\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.19}{gss\_init\_sec\_context} or \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.21}{gss\_inquire\_cred}.  If the call is to
186\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.19}{gss\_init\_sec\_context}, the target name will be used to choose a client
187principal name using the credential cache selection facility.  (This
188facility might, for instance, try to choose existing tickets for a
189client principal in the same realm as the target service).  If there
190are no existing tickets for the chosen principal, but it is present in
191the default client keytab, the krb5 mechanism will acquire initial
192tickets using the keytab.
193
194If the target name cannot be used to select a client principal
195(because the credentials are used in a call to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.21}{gss\_inquire\_cred}), or
196if the credential cache selection facility cannot choose a principal
197for it, the default credential cache will be selected if it exists and
198contains tickets.
199
200If the default credential cache does not exist, but the default client
201keytab does, the krb5 mechanism will try to acquire initial tickets
202for the first principal in the default client keytab.
203
204If the krb5 mechanism acquires initial tickets using the default
205client keytab, the resulting tickets will be stored in the default
206cache or collection, and will be refreshed by future calls to
207\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred} as they approach their expire time.
208
209
210\section{Acceptor names}
211\label{\detokenize{appdev/gssapi:acceptor-names}}
212A GSSAPI server application uses \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.1}{gss\_accept\_sec\_context} to establish
213a security context based on tokens provided by the client.  The
214\sphinxstyleemphasis{acceptor\_cred\_handle} parameter determines what
215\DUrole{xref,std,std-ref}{keytab\_definition} entries may be authenticated to by the
216client, if the krb5 mechanism is used.
217
218The simplest choice is to pass \sphinxstylestrong{GSS\_C\_NO\_CREDENTIAL} as the acceptor
219credential.  In this case, clients may authenticate to any service
220principal in the default keytab (typically \DUrole{xref,std,std-ref}{DEFKTNAME}, or the value of
221the \sphinxstylestrong{KRB5\_KTNAME} environment variable).  This is the recommended
222approach if the server application has no specific requirements to the
223contrary.
224
225A server may acquire an acceptor credential with \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred} and
226a \sphinxstyleemphasis{cred\_usage} of \sphinxstylestrong{GSS\_C\_ACCEPT} or \sphinxstylestrong{GSS\_C\_BOTH}.  If the
227\sphinxstyleemphasis{desired\_name} parameter is \sphinxstylestrong{GSS\_C\_NO\_NAME}, then clients will be
228allowed to authenticate to any service principal in the default
229keytab, just as if no acceptor credential was supplied.
230
231If a server wishes to specify a \sphinxstyleemphasis{desired\_name} to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred},
232the most common choice is a host-based name.  If the host-based
233\sphinxstyleemphasis{desired\_name} contains just a \sphinxstyleemphasis{service}, then clients will be allowed
234to authenticate to any host-based service principal (that is, a
235principal of the form \sphinxcode{service/hostname@REALM}) for the named
236service, regardless of hostname or realm, as long as it is present in
237the default keytab.  If the input name contains both a \sphinxstyleemphasis{service} and a
238\sphinxstyleemphasis{hostname}, clients will be allowed to authenticate to any host-based
239principal for the named service and hostname, regardless of realm.
240
241\begin{sphinxadmonition}{note}{Note:}
242If a \sphinxstyleemphasis{hostname} is specified, it will be canonicalized
243using forward name resolution, and possibly also using
244reverse name resolution depending on the value of the
245\sphinxstylestrong{rdns} variable in \DUrole{xref,std,std-ref}{libdefaults}.
246\end{sphinxadmonition}
247
248\begin{sphinxadmonition}{note}{Note:}
249If the \sphinxstylestrong{ignore\_acceptor\_hostname} variable in
250\DUrole{xref,std,std-ref}{libdefaults} is enabled, then \sphinxstyleemphasis{hostname} will be
251ignored even if one is specified in the input name.
252\end{sphinxadmonition}
253
254\begin{sphinxadmonition}{note}{Note:}
255In MIT krb5 versions prior to 1.10, and in Heimdal’s
256implementation of the krb5 mechanism, an input name with
257just a \sphinxstyleemphasis{service} is treated like an input name of
258\sphinxcode{service@localhostname}, where \sphinxstyleemphasis{localhostname} is the
259string returned by gethostname().
260\end{sphinxadmonition}
261
262If the \sphinxstyleemphasis{desired\_name} is a krb5 principal name or a local system name
263type which is mapped to a krb5 principal name, clients will only be
264allowed to authenticate to that principal in the default keytab.
265
266
267\section{Name Attributes}
268\label{\detokenize{appdev/gssapi:name-attributes}}
269In release 1.8 or later, the \sphinxhref{https://tools.ietf.org/html/rfc6680.txt\#section-7.4}{gss\_inquire\_name} and
270\sphinxhref{https://tools.ietf.org/html/6680.html\#section-7.5}{gss\_get\_name\_attribute} functions, specified in \index{RFC!RFC 6680}\sphinxhref{https://tools.ietf.org/html/rfc6680.html}{\sphinxstylestrong{RFC 6680}}, can be
271used to retrieve name attributes from the \sphinxstyleemphasis{src\_name} returned by
272\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.1}{gss\_accept\_sec\_context}.  The following attributes are defined when
273the krb5 mechanism is used:
274
275\phantomsection\label{\detokenize{appdev/gssapi:gssapi-authind-attr}}\begin{itemize}
276\item {}
277“auth-indicators” attribute:
278
279\end{itemize}
280
281This attribute will be included in the \sphinxhref{https://tools.ietf.org/html/rfc6680.txt\#section-7.4}{gss\_inquire\_name} output if the
282ticket contains \DUrole{xref,std,std-ref}{authentication indicators}.
283One indicator is returned per invocation of \sphinxhref{https://tools.ietf.org/html/6680.html\#section-7.5}{gss\_get\_name\_attribute},
284so multiple invocations may be necessary to retrieve all of the
285indicators from the ticket.  (New in release 1.15.)
286
287
288\section{Credential store extensions}
289\label{\detokenize{appdev/gssapi:credential-store-extensions}}
290Beginning with release 1.11, the following GSSAPI extensions declared
291in \sphinxcode{\textless{}gssapi/gssapi\_ext.h\textgreater{}} can be used to specify how credentials
292are acquired or stored:
293
294\fvset{hllines={, ,}}%
295\begin{sphinxVerbatim}[commandchars=\\\{\}]
296\PYG{n}{struct} \PYG{n}{gss\PYGZus{}key\PYGZus{}value\PYGZus{}element\PYGZus{}struct} \PYG{p}{\PYGZob{}}
297    \PYG{n}{const} \PYG{n}{char} \PYG{o}{*}\PYG{n}{key}\PYG{p}{;}
298    \PYG{n}{const} \PYG{n}{char} \PYG{o}{*}\PYG{n}{value}\PYG{p}{;}
299\PYG{p}{\PYGZcb{}}\PYG{p}{;}
300\PYG{n}{typedef} \PYG{n}{struct} \PYG{n}{gss\PYGZus{}key\PYGZus{}value\PYGZus{}element\PYGZus{}struct} \PYG{n}{gss\PYGZus{}key\PYGZus{}value\PYGZus{}element\PYGZus{}desc}\PYG{p}{;}
301
302\PYG{n}{struct} \PYG{n}{gss\PYGZus{}key\PYGZus{}value\PYGZus{}set\PYGZus{}struct} \PYG{p}{\PYGZob{}}
303    \PYG{n}{OM\PYGZus{}uint32} \PYG{n}{count}\PYG{p}{;}
304    \PYG{n}{gss\PYGZus{}key\PYGZus{}value\PYGZus{}element\PYGZus{}desc} \PYG{o}{*}\PYG{n}{elements}\PYG{p}{;}
305\PYG{p}{\PYGZcb{}}\PYG{p}{;}
306\PYG{n}{typedef} \PYG{n}{const} \PYG{n}{struct} \PYG{n}{gss\PYGZus{}key\PYGZus{}value\PYGZus{}set\PYGZus{}struct} \PYG{n}{gss\PYGZus{}key\PYGZus{}value\PYGZus{}set\PYGZus{}desc}\PYG{p}{;}
307\PYG{n}{typedef} \PYG{n}{const} \PYG{n}{gss\PYGZus{}key\PYGZus{}value\PYGZus{}set\PYGZus{}desc} \PYG{o}{*}\PYG{n}{gss\PYGZus{}const\PYGZus{}key\PYGZus{}value\PYGZus{}set\PYGZus{}t}\PYG{p}{;}
308
309\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}acquire\PYGZus{}cred\PYGZus{}from}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,}
310                                \PYG{n}{const} \PYG{n}{gss\PYGZus{}name\PYGZus{}t} \PYG{n}{desired\PYGZus{}name}\PYG{p}{,}
311                                \PYG{n}{OM\PYGZus{}uint32} \PYG{n}{time\PYGZus{}req}\PYG{p}{,}
312                                \PYG{n}{const} \PYG{n}{gss\PYGZus{}OID\PYGZus{}set} \PYG{n}{desired\PYGZus{}mechs}\PYG{p}{,}
313                                \PYG{n}{gss\PYGZus{}cred\PYGZus{}usage\PYGZus{}t} \PYG{n}{cred\PYGZus{}usage}\PYG{p}{,}
314                                \PYG{n}{gss\PYGZus{}const\PYGZus{}key\PYGZus{}value\PYGZus{}set\PYGZus{}t} \PYG{n}{cred\PYGZus{}store}\PYG{p}{,}
315                                \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{o}{*}\PYG{n}{output\PYGZus{}cred\PYGZus{}handle}\PYG{p}{,}
316                                \PYG{n}{gss\PYGZus{}OID\PYGZus{}set} \PYG{o}{*}\PYG{n}{actual\PYGZus{}mechs}\PYG{p}{,}
317                                \PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{time\PYGZus{}rec}\PYG{p}{)}\PYG{p}{;}
318
319\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}store\PYGZus{}cred\PYGZus{}into}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,}
320                              \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{n}{input\PYGZus{}cred\PYGZus{}handle}\PYG{p}{,}
321                              \PYG{n}{gss\PYGZus{}cred\PYGZus{}usage\PYGZus{}t} \PYG{n}{cred\PYGZus{}usage}\PYG{p}{,}
322                              \PYG{n}{const} \PYG{n}{gss\PYGZus{}OID} \PYG{n}{desired\PYGZus{}mech}\PYG{p}{,}
323                              \PYG{n}{OM\PYGZus{}uint32} \PYG{n}{overwrite\PYGZus{}cred}\PYG{p}{,}
324                              \PYG{n}{OM\PYGZus{}uint32} \PYG{n}{default\PYGZus{}cred}\PYG{p}{,}
325                              \PYG{n}{gss\PYGZus{}const\PYGZus{}key\PYGZus{}value\PYGZus{}set\PYGZus{}t} \PYG{n}{cred\PYGZus{}store}\PYG{p}{,}
326                              \PYG{n}{gss\PYGZus{}OID\PYGZus{}set} \PYG{o}{*}\PYG{n}{elements\PYGZus{}stored}\PYG{p}{,}
327                              \PYG{n}{gss\PYGZus{}cred\PYGZus{}usage\PYGZus{}t} \PYG{o}{*}\PYG{n}{cred\PYGZus{}usage\PYGZus{}stored}\PYG{p}{)}\PYG{p}{;}
328\end{sphinxVerbatim}
329
330The additional \sphinxstyleemphasis{cred\_store} parameter allows the caller to specify
331information about how the credentials should be obtained and stored.
332The following options are supported by the krb5 mechanism:
333\begin{itemize}
334\item {}
335\sphinxstylestrong{ccache}: For acquiring initiator credentials, the name of the
336\DUrole{xref,std,std-ref}{credential cache} to which the handle will
337refer.  For storing credentials, the name of the cache where the
338credentials should be stored.  If a collection name is given, the
339primary cache of the collection will be used; this behavior may
340change in future releases to select a cache from the collection.
341
342\item {}
343\sphinxstylestrong{client\_keytab}: For acquiring initiator credentials, the name of
344the \DUrole{xref,std,std-ref}{keytab} which will be used, if
345necessary, to refresh the credentials in the cache.
346
347\item {}
348\sphinxstylestrong{keytab}: For acquiring acceptor credentials, the name of the
349\DUrole{xref,std,std-ref}{keytab} to which the handle will refer.
350In release 1.19 and later, this option also determines the keytab to
351be used for verification when initiator credentials are acquired
352using a password and verified.
353
354\item {}
355\sphinxstylestrong{password}: For acquiring initiator credentials, this option
356instructs the mechanism to acquire fresh credentials into a unique
357memory credential cache.  This option may not be used with the
358\sphinxstylestrong{ccache} or \sphinxstylestrong{client\_keytab} options, and a \sphinxstyleemphasis{desired\_name} must
359be specified.  (New in release 1.19.)
360
361\item {}
362\sphinxstylestrong{rcache}: For acquiring acceptor credentials, the name of the
363\DUrole{xref,std,std-ref}{replay cache} to be used when processing
364the initiator tokens.  (New in release 1.13.)
365
366\item {}
367\sphinxstylestrong{verify}: For acquiring initiator credentials, this option
368instructs the mechanism to verify the credentials by obtaining a
369ticket to a service with a known key.  The service key is obtained
370from the keytab specified with the \sphinxstylestrong{keytab} option or the default
371keytab.  The value may be the name of a principal in the keytab, or
372the empty string.  If the empty string is given, any \sphinxcode{host}
373service principal in the keytab may be used.  (New in release 1.19.)
374
375\end{itemize}
376
377
378\section{Importing and exporting credentials}
379\label{\detokenize{appdev/gssapi:importing-and-exporting-credentials}}
380The following GSSAPI extensions can be used to import and export
381credentials (declared in \sphinxcode{\textless{}gssapi/gssapi\_ext.h\textgreater{}}):
382
383\fvset{hllines={, ,}}%
384\begin{sphinxVerbatim}[commandchars=\\\{\}]
385\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}export\PYGZus{}cred}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,}
386                          \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{n}{cred\PYGZus{}handle}\PYG{p}{,}
387                          \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{token}\PYG{p}{)}\PYG{p}{;}
388
389\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}import\PYGZus{}cred}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,}
390                          \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{token}\PYG{p}{,}
391                          \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{o}{*}\PYG{n}{cred\PYGZus{}handle}\PYG{p}{)}\PYG{p}{;}
392\end{sphinxVerbatim}
393
394The first function serializes a GSSAPI credential handle into a
395buffer; the second unseralizes a buffer into a GSSAPI credential
396handle.  Serializing a credential does not destroy it.  If any of the
397mechanisms used in \sphinxstyleemphasis{cred\_handle} do not support serialization,
398gss\_export\_cred will return \sphinxstylestrong{GSS\_S\_UNAVAILABLE}.  As with other
399GSSAPI serialization functions, these extensions are only intended to
400work with a matching implementation on the other side; they do not
401serialize credentials in a standardized format.
402
403A serialized credential may contain secret information such as ticket
404session keys.  The serialization format does not protect this
405information from eavesdropping or tampering.  The calling application
406must take care to protect the serialized credential when communicating
407it over an insecure channel or to an untrusted party.
408
409A krb5 GSSAPI credential may contain references to a credential cache,
410a client keytab, an acceptor keytab, and a replay cache.  These
411resources are normally serialized as references to their external
412locations (such as the filename of the credential cache).  Because of
413this, a serialized krb5 credential can only be imported by a process
414with similar privileges to the exporter.  A serialized credential
415should not be trusted if it originates from a source with lower
416privileges than the importer, as it may contain references to external
417credential cache, keytab, or replay cache resources not accessible to
418the originator.
419
420An exception to the above rule applies when a krb5 GSSAPI credential
421refers to a memory credential cache, as is normally the case for
422delegated credentials received by \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.1}{gss\_accept\_sec\_context}.  In this
423case, the contents of the credential cache are serialized, so that the
424resulting token may be imported even if the original memory credential
425cache no longer exists.
426
427
428\section{Constrained delegation (S4U)}
429\label{\detokenize{appdev/gssapi:constrained-delegation-s4u}}
430The Microsoft S4U2Self and S4U2Proxy Kerberos protocol extensions
431allow an intermediate service to acquire credentials from a client to
432a target service without requiring the client to delegate a
433ticket-granting ticket, if the KDC is configured to allow it.
434
435To perform a constrained delegation operation, the intermediate
436service must submit to the KDC an “evidence ticket” from the client to
437the intermediate service.  An evidence ticket can be acquired when the
438client authenticates to the intermediate service with Kerberos, or
439with an S4U2Self request if the KDC allows it.  The MIT krb5 GSSAPI
440library represents an evidence ticket using a “proxy credential”,
441which is a special kind of gss\_cred\_id\_t object whose underlying
442credential cache contains the evidence ticket and a krbtgt ticket for
443the intermediate service.
444
445To acquire a proxy credential during client authentication, the
446service should first create an acceptor credential using the
447\sphinxstylestrong{GSS\_C\_BOTH} usage.  The application should then pass this
448credential as the \sphinxstyleemphasis{acceptor\_cred\_handle} to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.1}{gss\_accept\_sec\_context},
449and also pass a \sphinxstyleemphasis{delegated\_cred\_handle} output parameter to receive a
450proxy credential containing the evidence ticket.  The output value of
451\sphinxstyleemphasis{delegated\_cred\_handle} may be a delegated ticket-granting ticket if
452the client sent one, or a proxy credential if not.  If the library can
453determine that the client’s ticket is not a valid evidence ticket, it
454will place \sphinxstylestrong{GSS\_C\_NO\_CREDENTIAL} in \sphinxstyleemphasis{delegated\_cred\_handle}.
455
456To acquire a proxy credential using an S4U2Self request, the service
457can use the following GSSAPI extension:
458
459\fvset{hllines={, ,}}%
460\begin{sphinxVerbatim}[commandchars=\\\{\}]
461\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}acquire\PYGZus{}cred\PYGZus{}impersonate\PYGZus{}name}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,}
462                                            \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{n}{icred}\PYG{p}{,}
463                                            \PYG{n}{gss\PYGZus{}name\PYGZus{}t} \PYG{n}{desired\PYGZus{}name}\PYG{p}{,}
464                                            \PYG{n}{OM\PYGZus{}uint32} \PYG{n}{time\PYGZus{}req}\PYG{p}{,}
465                                            \PYG{n}{gss\PYGZus{}OID\PYGZus{}set} \PYG{n}{desired\PYGZus{}mechs}\PYG{p}{,}
466                                            \PYG{n}{gss\PYGZus{}cred\PYGZus{}usage\PYGZus{}t} \PYG{n}{cred\PYGZus{}usage}\PYG{p}{,}
467                                            \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{o}{*}\PYG{n}{output\PYGZus{}cred}\PYG{p}{,}
468                                            \PYG{n}{gss\PYGZus{}OID\PYGZus{}set} \PYG{o}{*}\PYG{n}{actual\PYGZus{}mechs}\PYG{p}{,}
469                                            \PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{time\PYGZus{}rec}\PYG{p}{)}\PYG{p}{;}
470\end{sphinxVerbatim}
471
472The parameters to this function are similar to those of
473\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred}, except that \sphinxstyleemphasis{icred} is used to make an S4U2Self
474request to the KDC for a ticket from \sphinxstyleemphasis{desired\_name} to the
475intermediate service.  Both \sphinxstyleemphasis{icred} and \sphinxstyleemphasis{desired\_name} are required
476for this function; passing \sphinxstylestrong{GSS\_C\_NO\_CREDENTIAL} or
477\sphinxstylestrong{GSS\_C\_NO\_NAME} will cause the call to fail.  \sphinxstyleemphasis{icred} must contain a
478krbtgt ticket for the intermediate service.  The result of this
479operation is a proxy credential.  (Prior to release 1.18, the result
480of this operation may be a regular credential for \sphinxstyleemphasis{desired\_name}, if
481the KDC issues a non-forwardable ticket.)
482
483Once the intermediate service has a proxy credential, it can simply
484pass it to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.19}{gss\_init\_sec\_context} as the \sphinxstyleemphasis{initiator\_cred\_handle}
485parameter, and the desired service as the \sphinxstyleemphasis{target\_name} parameter.
486The GSSAPI library will present the krbtgt ticket and evidence ticket
487in the proxy credential to the KDC in an S4U2Proxy request; if the
488intermediate service has the appropriate permissions, the KDC will
489issue a ticket from the client to the target service.  The GSSAPI
490library will then use this ticket to authenticate to the target
491service.
492
493If an application needs to find out whether a credential it holds is a
494proxy credential and the name of the intermediate service, it can
495query the credential with the \sphinxstylestrong{GSS\_KRB5\_GET\_CRED\_IMPERSONATOR} OID
496(new in release 1.16, declared in \sphinxcode{\textless{}gssapi/gssapi\_krb5.h\textgreater{}}) using
497the gss\_inquire\_cred\_by\_oid extension (declared in
498\sphinxcode{\textless{}gssapi/gssapi\_ext.h\textgreater{}}):
499
500\fvset{hllines={, ,}}%
501\begin{sphinxVerbatim}[commandchars=\\\{\}]
502\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}inquire\PYGZus{}cred\PYGZus{}by\PYGZus{}oid}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,}
503                                  \PYG{n}{const} \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{n}{cred\PYGZus{}handle}\PYG{p}{,}
504                                  \PYG{n}{gss\PYGZus{}OID} \PYG{n}{desired\PYGZus{}object}\PYG{p}{,}
505                                  \PYG{n}{gss\PYGZus{}buffer\PYGZus{}set\PYGZus{}t} \PYG{o}{*}\PYG{n}{data\PYGZus{}set}\PYG{p}{)}\PYG{p}{;}
506\end{sphinxVerbatim}
507
508If the call succeeds and \sphinxstyleemphasis{cred\_handle} is a proxy credential,
509\sphinxstyleemphasis{data\_set} will be set to a single-element buffer set containing the
510unparsed principal name of the intermediate service.  If \sphinxstyleemphasis{cred\_handle}
511is not a proxy credential, \sphinxstyleemphasis{data\_set} will be set to an empty buffer
512set.  If the library does not support the query,
513gss\_inquire\_cred\_by\_oid will return \sphinxstylestrong{GSS\_S\_UNAVAILABLE}.
514
515
516\section{AEAD message wrapping}
517\label{\detokenize{appdev/gssapi:aead-message-wrapping}}
518The following GSSAPI extensions (declared in
519\sphinxcode{\textless{}gssapi/gssapi\_ext.h\textgreater{}}) can be used to wrap and unwrap messages
520with additional “associated data” which is integrity-checked but is
521not included in the output buffer:
522
523\fvset{hllines={, ,}}%
524\begin{sphinxVerbatim}[commandchars=\\\{\}]
525\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}wrap\PYGZus{}aead}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,}
526                        \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
527                        \PYG{n+nb}{int} \PYG{n}{conf\PYGZus{}req\PYGZus{}flag}\PYG{p}{,} \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{n}{qop\PYGZus{}req}\PYG{p}{,}
528                        \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{input\PYGZus{}assoc\PYGZus{}buffer}\PYG{p}{,}
529                        \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{input\PYGZus{}payload\PYGZus{}buffer}\PYG{p}{,}
530                        \PYG{n+nb}{int} \PYG{o}{*}\PYG{n}{conf\PYGZus{}state}\PYG{p}{,}
531                        \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{output\PYGZus{}message\PYGZus{}buffer}\PYG{p}{)}\PYG{p}{;}
532
533\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}unwrap\PYGZus{}aead}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,}
534                          \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
535                          \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{input\PYGZus{}message\PYGZus{}buffer}\PYG{p}{,}
536                          \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{input\PYGZus{}assoc\PYGZus{}buffer}\PYG{p}{,}
537                          \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{output\PYGZus{}payload\PYGZus{}buffer}\PYG{p}{,}
538                          \PYG{n+nb}{int} \PYG{o}{*}\PYG{n}{conf\PYGZus{}state}\PYG{p}{,}
539                          \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{o}{*}\PYG{n}{qop\PYGZus{}state}\PYG{p}{)}\PYG{p}{;}
540\end{sphinxVerbatim}
541
542Wrap tokens created with gss\_wrap\_aead will successfully unwrap only
543if the same \sphinxstyleemphasis{input\_assoc\_buffer} contents are presented to
544gss\_unwrap\_aead.
545
546
547\section{IOV message wrapping}
548\label{\detokenize{appdev/gssapi:iov-message-wrapping}}
549The following extensions (declared in \sphinxcode{\textless{}gssapi/gssapi\_ext.h\textgreater{}}) can
550be used for in-place encryption, fine-grained control over wrap token
551layout, and for constructing wrap tokens compatible with Microsoft DCE
552RPC:
553
554\fvset{hllines={, ,}}%
555\begin{sphinxVerbatim}[commandchars=\\\{\}]
556\PYG{n}{typedef} \PYG{n}{struct} \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc\PYGZus{}struct} \PYG{p}{\PYGZob{}}
557    \PYG{n}{OM\PYGZus{}uint32} \PYG{n+nb}{type}\PYG{p}{;}
558    \PYG{n}{gss\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{buffer}\PYG{p}{;}
559\PYG{p}{\PYGZcb{}} \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc}\PYG{p}{,} \PYG{o}{*}\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}t}\PYG{p}{;}
560
561\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}wrap\PYGZus{}iov}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,}
562                       \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
563                       \PYG{n+nb}{int} \PYG{n}{conf\PYGZus{}req\PYGZus{}flag}\PYG{p}{,} \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{n}{qop\PYGZus{}req}\PYG{p}{,}
564                       \PYG{n+nb}{int} \PYG{o}{*}\PYG{n}{conf\PYGZus{}state}\PYG{p}{,}
565                       \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,} \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;}
566
567\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}unwrap\PYGZus{}iov}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,}
568                         \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
569                         \PYG{n+nb}{int} \PYG{o}{*}\PYG{n}{conf\PYGZus{}state}\PYG{p}{,} \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{o}{*}\PYG{n}{qop\PYGZus{}state}\PYG{p}{,}
570                         \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,} \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;}
571
572\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}wrap\PYGZus{}iov\PYGZus{}length}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,}
573                              \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
574                              \PYG{n+nb}{int} \PYG{n}{conf\PYGZus{}req\PYGZus{}flag}\PYG{p}{,}
575                              \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{n}{qop\PYGZus{}req}\PYG{p}{,} \PYG{n+nb}{int} \PYG{o}{*}\PYG{n}{conf\PYGZus{}state}\PYG{p}{,}
576                              \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,}
577                              \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;}
578
579\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}release\PYGZus{}iov\PYGZus{}buffer}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,}
580                                 \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,}
581                                 \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;}
582\end{sphinxVerbatim}
583
584The caller of gss\_wrap\_iov provides an array of gss\_iov\_buffer\_desc
585structures, each containing a type and a gss\_buffer\_desc structure.
586Valid types include:
587\begin{itemize}
588\item {}
589\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_DATA}: A data buffer to be included in the
590token, and to be encrypted or decrypted in-place if the token is
591confidentiality-protected.
592
593\item {}
594\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_HEADER}: The GSSAPI wrap token header and
595underlying cryptographic header.
596
597\item {}
598\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_TRAILER}: The cryptographic trailer, if one is
599required.
600
601\item {}
602\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_PADDING}: Padding to be combined with the data
603during encryption and decryption.  (The implementation may choose to
604place padding in the trailer buffer, in which case it will set the
605padding buffer length to 0.)
606
607\item {}
608\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_STREAM}: For unwrapping only, a buffer
609containing a complete wrap token in standard format to be unwrapped.
610
611\item {}
612\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_SIGN\_ONLY}: A buffer to be included in the
613token’s integrity protection checksum, but not to be encrypted or
614included in the token itself.
615
616\end{itemize}
617
618For gss\_wrap\_iov, the IOV list should contain one HEADER buffer,
619followed by zero or more SIGN\_ONLY buffers, followed by one or more
620DATA buffers, followed by a TRAILER buffer.  The memory pointed to by
621the buffers is not required to be contiguous or in any particular
622order.  If \sphinxstyleemphasis{conf\_req\_flag} is true, DATA buffers will be encrypted
623in-place, while SIGN\_ONLY buffers will not be modified.
624
625The type of an output buffer may be combined with
626\sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATE} to request that gss\_wrap\_iov allocate
627the buffer contents.  If gss\_wrap\_iov allocates a buffer, it sets the
628\sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATED} flag on the buffer type.
629gss\_release\_iov\_buffer can be used to release all allocated buffers
630within an iov list and unset their allocated flags.  Here is an
631example of how gss\_wrap\_iov can be used with allocation requested
632(\sphinxstyleemphasis{ctx} is assumed to be a previously established gss\_ctx\_id\_t):
633
634\fvset{hllines={, ,}}%
635\begin{sphinxVerbatim}[commandchars=\\\{\}]
636\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;}
637\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{4}\PYG{p}{]}\PYG{p}{;}
638\PYG{n}{char} \PYG{n+nb}{str}\PYG{p}{[}\PYG{p}{]} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{message}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{;}
639
640\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}HEADER} \PYG{o}{\textbar{}} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}FLAG\PYGZus{}ALLOCATE}\PYG{p}{;}
641\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}DATA}\PYG{p}{;}
642\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{n+nb}{str}\PYG{p}{;}
643\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{=} \PYG{n}{strlen}\PYG{p}{(}\PYG{n+nb}{str}\PYG{p}{)}\PYG{p}{;}
644\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}PADDING} \PYG{o}{\textbar{}} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}FLAG\PYGZus{}ALLOCATE}\PYG{p}{;}
645\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{3}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}TRAILER} \PYG{o}{\textbar{}} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}FLAG\PYGZus{}ALLOCATE}\PYG{p}{;}
646
647\PYG{n}{major} \PYG{o}{=} \PYG{n}{gss\PYGZus{}wrap\PYGZus{}iov}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{minor}\PYG{p}{,} \PYG{n}{ctx}\PYG{p}{,} \PYG{l+m+mi}{1}\PYG{p}{,} \PYG{n}{GSS\PYGZus{}C\PYGZus{}QOP\PYGZus{}DEFAULT}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,}
648                     \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{4}\PYG{p}{)}\PYG{p}{;}
649\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
650    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
651
652\PYG{o}{/}\PYG{o}{*} \PYG{n}{Transmit} \PYG{o+ow}{or} \PYG{n}{otherwise} \PYG{n}{use} \PYG{n}{resulting} \PYG{n}{buffers}\PYG{o}{.} \PYG{o}{*}\PYG{o}{/}
653
654\PYG{p}{(}\PYG{n}{void}\PYG{p}{)}\PYG{n}{gss\PYGZus{}release\PYGZus{}iov\PYGZus{}buffer}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{minor}\PYG{p}{,} \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{4}\PYG{p}{)}\PYG{p}{;}
655\end{sphinxVerbatim}
656
657If the caller does not choose to request buffer allocation by
658gss\_wrap\_iov, it should first call gss\_wrap\_iov\_length to query the
659lengths of the HEADER, PADDING, and TRAILER buffers.  DATA buffers
660must be provided in the iov list so that padding length can be
661computed correctly, but the output buffers need not be initialized.
662Here is an example of using gss\_wrap\_iov\_length and gss\_wrap\_iov:
663
664\fvset{hllines={, ,}}%
665\begin{sphinxVerbatim}[commandchars=\\\{\}]
666\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;}
667\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{4}\PYG{p}{]}\PYG{p}{;}
668\PYG{n}{char} \PYG{n+nb}{str}\PYG{p}{[}\PYG{l+m+mi}{1024}\PYG{p}{]} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{message}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,} \PYG{o}{*}\PYG{n}{ptr}\PYG{p}{;}
669
670\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}HEADER}\PYG{p}{;}
671\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}DATA}\PYG{p}{;}
672\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{n+nb}{str}\PYG{p}{;}
673\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{=} \PYG{n}{strlen}\PYG{p}{(}\PYG{n+nb}{str}\PYG{p}{)}\PYG{p}{;}
674
675\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}PADDING}\PYG{p}{;}
676\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{3}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}TRAILER}\PYG{p}{;}
677
678\PYG{n}{major} \PYG{o}{=} \PYG{n}{gss\PYGZus{}wrap\PYGZus{}iov\PYGZus{}length}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{minor}\PYG{p}{,} \PYG{n}{ctx}\PYG{p}{,} \PYG{l+m+mi}{1}\PYG{p}{,} \PYG{n}{GSS\PYGZus{}C\PYGZus{}QOP\PYGZus{}DEFAULT}\PYG{p}{,}
679                            \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{4}\PYG{p}{)}\PYG{p}{;}
680\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
681    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
682\PYG{k}{if} \PYG{p}{(}\PYG{n}{strlen}\PYG{p}{(}\PYG{n+nb}{str}\PYG{p}{)} \PYG{o}{+} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{+} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{+}
683    \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{3}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{\PYGZgt{}} \PYG{n}{sizeof}\PYG{p}{(}\PYG{n+nb}{str}\PYG{p}{)}\PYG{p}{)}
684    \PYG{n}{handle\PYGZus{}out\PYGZus{}of\PYGZus{}space\PYGZus{}error}\PYG{p}{(}\PYG{p}{)}\PYG{p}{;}
685\PYG{n}{ptr} \PYG{o}{=} \PYG{n+nb}{str} \PYG{o}{+} \PYG{n}{strlen}\PYG{p}{(}\PYG{n+nb}{str}\PYG{p}{)}\PYG{p}{;}
686\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{n}{ptr}\PYG{p}{;}
687\PYG{n}{ptr} \PYG{o}{+}\PYG{o}{=} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length}\PYG{p}{;}
688\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{n}{ptr}\PYG{p}{;}
689\PYG{n}{ptr} \PYG{o}{+}\PYG{o}{=} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length}\PYG{p}{;}
690\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{3}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{n}{ptr}\PYG{p}{;}
691
692\PYG{n}{major} \PYG{o}{=} \PYG{n}{gss\PYGZus{}wrap\PYGZus{}iov}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{minor}\PYG{p}{,} \PYG{n}{ctx}\PYG{p}{,} \PYG{l+m+mi}{1}\PYG{p}{,} \PYG{n}{GSS\PYGZus{}C\PYGZus{}QOP\PYGZus{}DEFAULT}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,}
693                     \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{4}\PYG{p}{)}\PYG{p}{;}
694\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
695    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
696\end{sphinxVerbatim}
697
698If the context was established using the \sphinxstylestrong{GSS\_C\_DCE\_STYLE} flag
699(described in \index{RFC!RFC 4757}\sphinxhref{https://tools.ietf.org/html/rfc4757.html}{\sphinxstylestrong{RFC 4757}}), wrap tokens compatible with Microsoft DCE
700RPC can be constructed.  In this case, the IOV list must include a
701SIGN\_ONLY buffer, a DATA buffer, a second SIGN\_ONLY buffer, and a
702HEADER buffer in that order (the order of the buffer contents remains
703arbitrary).  The application must pad the DATA buffer to a multiple of
70416 bytes as no padding or trailer buffer is used.
705
706gss\_unwrap\_iov may be called with an IOV list just like one which
707would be provided to gss\_wrap\_iov.  DATA buffers will be decrypted
708in-place if they were encrypted, and SIGN\_ONLY buffers will not be
709modified.
710
711Alternatively, gss\_unwrap\_iov may be called with a single STREAM
712buffer, zero or more SIGN\_ONLY buffers, and a single DATA buffer.  The
713STREAM buffer is interpreted as a complete wrap token.  The STREAM
714buffer will be modified in-place to decrypt its contents.  The DATA
715buffer will be initialized to point to the decrypted data within the
716STREAM buffer, unless it has the \sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATE} flag
717set, in which case it will be initialized with a copy of the decrypted
718data.  Here is an example (\sphinxstyleemphasis{token} and \sphinxstyleemphasis{token\_len} are assumed to be a
719pre-existing pointer and length for a modifiable region of data):
720
721\fvset{hllines={, ,}}%
722\begin{sphinxVerbatim}[commandchars=\\\{\}]
723\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;}
724\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{p}{;}
725
726\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}STREAM}\PYG{p}{;}
727\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{n}{token}\PYG{p}{;}
728\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{=} \PYG{n}{token\PYGZus{}len}\PYG{p}{;}
729\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}DATA}\PYG{p}{;}
730\PYG{n}{major} \PYG{o}{=} \PYG{n}{gss\PYGZus{}unwrap\PYGZus{}iov}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{minor}\PYG{p}{,} \PYG{n}{ctx}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{2}\PYG{p}{)}\PYG{p}{;}
731\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
732    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
733
734\PYG{o}{/}\PYG{o}{*} \PYG{n}{Decrypted} \PYG{n}{data} \PYG{o+ow}{is} \PYG{o+ow}{in} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{p}{,} \PYG{n}{pointing} \PYG{n}{to} \PYG{n}{a} \PYG{n}{subregion} \PYG{n}{of}
735 \PYG{o}{*} \PYG{n}{token}\PYG{o}{.} \PYG{o}{*}\PYG{o}{/}
736\end{sphinxVerbatim}
737
738
739\section{IOV MIC tokens}
740\label{\detokenize{appdev/gssapi:gssapi-mic-token}}\label{\detokenize{appdev/gssapi:iov-mic-tokens}}
741The following extensions (declared in \sphinxcode{\textless{}gssapi/gssapi\_ext.h\textgreater{}}) can
742be used in release 1.12 or later to construct and verify MIC tokens
743using an IOV list:
744
745\fvset{hllines={, ,}}%
746\begin{sphinxVerbatim}[commandchars=\\\{\}]
747\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}get\PYGZus{}mic\PYGZus{}iov}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,}
748                          \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
749                          \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{n}{qop\PYGZus{}req}\PYG{p}{,}
750                          \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,}
751                          \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;}
752
753\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}get\PYGZus{}mic\PYGZus{}iov\PYGZus{}length}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,}
754                                 \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
755                                 \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{n}{qop\PYGZus{}req}\PYG{p}{,}
756                                 \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,}
757                                 \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;}
758
759\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{gss\PYGZus{}verify\PYGZus{}mic\PYGZus{}iov}\PYG{p}{(}\PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{minor\PYGZus{}status}\PYG{p}{,}
760                             \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
761                             \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{o}{*}\PYG{n}{qop\PYGZus{}state}\PYG{p}{,}
762                             \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,}
763                             \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;}
764\end{sphinxVerbatim}
765
766The caller of gss\_get\_mic\_iov provides an array of gss\_iov\_buffer\_desc
767structures, each containing a type and a gss\_buffer\_desc structure.
768Valid types include:
769\begin{itemize}
770\item {}
771\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_DATA} and \sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_SIGN\_ONLY}: The
772corresponding buffer for each of these types will be signed for the
773MIC token, in the order provided.
774
775\item {}
776\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_MIC\_TOKEN}: The GSSAPI MIC token.
777
778\end{itemize}
779
780The type of the MIC\_TOKEN buffer may be combined with
781\sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATE} to request that gss\_get\_mic\_iov
782allocate the buffer contents.  If gss\_get\_mic\_iov allocates the
783buffer, it sets the \sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATED} flag on the buffer
784type.  gss\_release\_iov\_buffer can be used to release all allocated
785buffers within an iov list and unset their allocated flags.  Here is
786an example of how gss\_get\_mic\_iov can be used with allocation
787requested (\sphinxstyleemphasis{ctx} is assumed to be a previously established
788gss\_ctx\_id\_t):
789
790\fvset{hllines={, ,}}%
791\begin{sphinxVerbatim}[commandchars=\\\{\}]
792\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;}
793\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{3}\PYG{p}{]}\PYG{p}{;}
794
795\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}DATA}\PYG{p}{;}
796\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{sign1}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{;}
797\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{=} \PYG{l+m+mi}{5}\PYG{p}{;}
798\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}SIGN\PYGZus{}ONLY}\PYG{p}{;}
799\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{sign2}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{;}
800\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{=} \PYG{l+m+mi}{5}\PYG{p}{;}
801\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}MIC\PYGZus{}TOKEN} \PYG{o}{\textbar{}} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}FLAG\PYGZus{}ALLOCATE}\PYG{p}{;}
802
803\PYG{n}{major} \PYG{o}{=} \PYG{n}{gss\PYGZus{}get\PYGZus{}mic\PYGZus{}iov}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{minor}\PYG{p}{,} \PYG{n}{ctx}\PYG{p}{,} \PYG{n}{GSS\PYGZus{}C\PYGZus{}QOP\PYGZus{}DEFAULT}\PYG{p}{,} \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{3}\PYG{p}{)}\PYG{p}{;}
804\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
805    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
806
807\PYG{o}{/}\PYG{o}{*} \PYG{n}{Transmit} \PYG{o+ow}{or} \PYG{n}{otherwise} \PYG{n}{use} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.} \PYG{o}{*}\PYG{o}{/}
808
809\PYG{p}{(}\PYG{n}{void}\PYG{p}{)}\PYG{n}{gss\PYGZus{}release\PYGZus{}iov\PYGZus{}buffer}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{minor}\PYG{p}{,} \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{3}\PYG{p}{)}\PYG{p}{;}
810\end{sphinxVerbatim}
811
812If the caller does not choose to request buffer allocation by
813gss\_get\_mic\_iov, it should first call gss\_get\_mic\_iov\_length to query
814the length of the MIC\_TOKEN buffer.  Here is an example of using
815gss\_get\_mic\_iov\_length and gss\_get\_mic\_iov:
816
817\fvset{hllines={, ,}}%
818\begin{sphinxVerbatim}[commandchars=\\\{\}]
819\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;}
820\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{p}{;}
821\PYG{n}{char} \PYG{n}{data}\PYG{p}{[}\PYG{l+m+mi}{1024}\PYG{p}{]}\PYG{p}{;}
822
823\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}MIC\PYGZus{}TOKEN}\PYG{p}{;}
824\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{type} \PYG{o}{=} \PYG{n}{GSS\PYGZus{}IOV\PYGZus{}BUFFER\PYGZus{}TYPE\PYGZus{}DATA}\PYG{p}{;}
825\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{message}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{;}
826\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{1}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{=} \PYG{l+m+mi}{7}\PYG{p}{;}
827
828\PYG{n}{major} \PYG{o}{=} \PYG{n}{gss\PYGZus{}get\PYGZus{}mic\PYGZus{}iov\PYGZus{}length}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{minor}\PYG{p}{,} \PYG{n}{ctx}\PYG{p}{,} \PYG{n}{GSS\PYGZus{}C\PYGZus{}QOP\PYGZus{}DEFAULT}\PYG{p}{,} \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{2}\PYG{p}{)}\PYG{p}{;}
829\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
830    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
831\PYG{k}{if} \PYG{p}{(}\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{length} \PYG{o}{\PYGZgt{}} \PYG{n}{sizeof}\PYG{p}{(}\PYG{n}{data}\PYG{p}{)}\PYG{p}{)}
832    \PYG{n}{handle\PYGZus{}out\PYGZus{}of\PYGZus{}space\PYGZus{}error}\PYG{p}{(}\PYG{p}{)}\PYG{p}{;}
833\PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{0}\PYG{p}{]}\PYG{o}{.}\PYG{n}{buffer}\PYG{o}{.}\PYG{n}{value} \PYG{o}{=} \PYG{n}{data}\PYG{p}{;}
834
835\PYG{n}{major} \PYG{o}{=} \PYG{n}{gss\PYGZus{}get\PYGZus{}mic\PYGZus{}iov}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{minor}\PYG{p}{,} \PYG{n}{ctx}\PYG{p}{,} \PYG{n}{GSS\PYGZus{}C\PYGZus{}QOP\PYGZus{}DEFAULT}\PYG{p}{,} \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{2}\PYG{p}{)}\PYG{p}{;}
836\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
837    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
838\end{sphinxVerbatim}
839
840
841\chapter{Year 2038 considerations for uses of krb5\_timestamp}
842\label{\detokenize{appdev/y2038::doc}}\label{\detokenize{appdev/y2038:year-2038-considerations-for-uses-of-krb5-timestamp}}
843POSIX time values, which measure the number of seconds since January 1
8441970, will exceed the maximum value representable in a signed 32-bit
845integer in January 2038.  This documentation describes considerations
846for consumers of the MIT krb5 libraries.
847
848Applications or libraries which use libkrb5 and consume the timestamps
849included in credentials or other structures make use of the
850{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\sphinxcode{krb5\_timestamp}}}} type.  For historical reasons, krb5\_timestamp
851is a signed 32-bit integer, even on platforms where a larger type is
852natively used to represent time values.  To behave properly for time
853values after January 2038, calling code should cast krb5\_timestamp
854values to uint32\_t, and then to time\_t:
855
856\fvset{hllines={, ,}}%
857\begin{sphinxVerbatim}[commandchars=\\\{\}]
858\PYG{p}{(}\PYG{n}{time\PYGZus{}t}\PYG{p}{)}\PYG{p}{(}\PYG{n}{uint32\PYGZus{}t}\PYG{p}{)}\PYG{n}{timestamp}
859\end{sphinxVerbatim}
860
861Used in this way, krb5\_timestamp values can represent time values up
862until February 2106, provided that the platform uses a 64-bit or
863larger time\_t type.  This usage will also remain safe if a later
864version of MIT krb5 changes krb5\_timestamp to an unsigned 32-bit
865integer.
866
867The GSSAPI only uses representations of time intervals, not absolute
868times.  Callers of the GSSAPI should require no changes to behave
869correctly after January 2038, provided that they use MIT krb5 release
8701.16 or later.
871
872
873\chapter{Differences between Heimdal and MIT Kerberos API}
874\label{\detokenize{appdev/h5l_mit_apidiff:differences-between-heimdal-and-mit-kerberos-api}}\label{\detokenize{appdev/h5l_mit_apidiff::doc}}
875
876\begin{savenotes}\sphinxattablestart
877\centering
878\begin{tabulary}{\linewidth}[t]{|l|l|}
879\hline
880
881{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_getaddrs:c.krb5_auth_con_getaddrs}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_getaddrs()}}}}
882&
883H5l: If either of the pointers to local\_addr
884and remote\_addr is not NULL, it is freed
885first and then reallocated before being
886populated with the content of corresponding
887address from authentication context.
888\\
889\hline
890{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setaddrs:c.krb5_auth_con_setaddrs}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_setaddrs()}}}}
891&
892H5l: If either address is NULL, the previous
893address remains in place
894\\
895\hline
896{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setports:c.krb5_auth_con_setports}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_setports()}}}}
897&
898H5l: Not implemented as of version 1.3.3
899\\
900\hline
901{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey:c.krb5_auth_con_setrecvsubkey}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_setrecvsubkey()}}}}
902&
903H5l: If either port is NULL, the previous
904port remains in place
905\\
906\hline
907{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey:c.krb5_auth_con_setsendsubkey}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_setsendsubkey()}}}}
908&
909H5l: Not implemented as of version 1.3.3
910\\
911\hline
912{\hyperref[\detokenize{appdev/refs/api/krb5_cc_set_config:c.krb5_cc_set_config}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_set\_config()}}}}
913&
914MIT: Before version 1.10 it was assumed that
915the last argument \sphinxstyleemphasis{data} is ALWAYS non-zero.
916\\
917\hline
918\sphinxcode{krb5\_cccol\_last\_change\_time()}
919&
920MIT: not implemented
921\\
922\hline
923{\hyperref[\detokenize{appdev/refs/api/krb5_set_default_realm:c.krb5_set_default_realm}]{\sphinxcrossref{\sphinxcode{krb5\_set\_default\_realm()}}}}
924&
925H5l: Caches the computed default realm context
926field.  If the second argument is NULL,
927it tries to retrieve it from libdefaults or DNS.
928MIT: Computes the default realm each time
929if it wasn’t explicitly set in the context
930\\
931\hline
932\end{tabulary}
933\par
934\sphinxattableend\end{savenotes}
935
936
937\chapter{Initial credentials}
938\label{\detokenize{appdev/init_creds:initial-credentials}}\label{\detokenize{appdev/init_creds::doc}}
939Software that performs tasks such as logging users into a computer
940when they type their Kerberos password needs to get initial
941credentials (usually ticket granting tickets) from Kerberos.  Such
942software shares some behavior with the \DUrole{xref,std,std-ref}{kinit(1)} program.
943
944Whenever a program grants access to a resource (such as a local login
945session on a desktop computer) based on a user successfully getting
946initial Kerberos credentials, it must verify those credentials against
947a secure shared secret (e.g., a host keytab) to ensure that the user
948credentials actually originate from a legitimate KDC.  Failure to
949perform this verification is a critical vulnerability, because a
950malicious user can execute the “Zanarotti attack”: the user constructs
951a fake response that appears to come from the legitimate KDC, but
952whose contents come from an attacker-controlled KDC.
953
954Some applications read a Kerberos password over the network (ideally
955over a secure channel), which they then verify against the KDC.  While
956this technique may be the only practical way to integrate Kerberos
957into some existing legacy systems, its use is contrary to the original
958design goals of Kerberos.
959
960The function {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_password()}}}} will get initial
961credentials for a client using a password.  An application that needs
962to verify the credentials can call {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds()}}}}.
963Here is an example of code to obtain and verify TGT credentials, given
964strings \sphinxstyleemphasis{princname} and \sphinxstyleemphasis{password} for the client principal name and
965password:
966
967\fvset{hllines={, ,}}%
968\begin{sphinxVerbatim}[commandchars=\\\{\}]
969\PYG{n}{krb5\PYGZus{}error\PYGZus{}code} \PYG{n}{ret}\PYG{p}{;}
970\PYG{n}{krb5\PYGZus{}creds} \PYG{n}{creds}\PYG{p}{;}
971\PYG{n}{krb5\PYGZus{}principal} \PYG{n}{client\PYGZus{}princ} \PYG{o}{=} \PYG{n}{NULL}\PYG{p}{;}
972
973\PYG{n}{memset}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{,} \PYG{n}{sizeof}\PYG{p}{(}\PYG{n}{creds}\PYG{p}{)}\PYG{p}{)}\PYG{p}{;}
974\PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}parse\PYGZus{}name}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{princname}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{client\PYGZus{}princ}\PYG{p}{)}\PYG{p}{;}
975\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
976    \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
977\PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}password}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{n}{client\PYGZus{}princ}\PYG{p}{,}
978                                   \PYG{n}{password}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{)}\PYG{p}{;}
979\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
980    \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
981\PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}verify\PYGZus{}init\PYGZus{}creds}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{)}\PYG{p}{;}
982
983\PYG{n}{cleanup}\PYG{p}{:}
984\PYG{n}{krb5\PYGZus{}free\PYGZus{}principal}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{client\PYGZus{}princ}\PYG{p}{)}\PYG{p}{;}
985\PYG{n}{krb5\PYGZus{}free\PYGZus{}cred\PYGZus{}contents}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{)}\PYG{p}{;}
986\PYG{k}{return} \PYG{n}{ret}\PYG{p}{;}
987\end{sphinxVerbatim}
988
989
990\section{Options for get\_init\_creds}
991\label{\detokenize{appdev/init_creds:options-for-get-init-creds}}
992The function {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_password()}}}} takes an options
993parameter (which can be a null pointer).  Use the function
994{\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_alloc:c.krb5_get_init_creds_opt_alloc}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_alloc()}}}} to allocate an options
995structure, and {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_free:c.krb5_get_init_creds_opt_free}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_free()}}}} to free it.  For
996example:
997
998\fvset{hllines={, ,}}%
999\begin{sphinxVerbatim}[commandchars=\\\{\}]
1000\PYG{n}{krb5\PYGZus{}error\PYGZus{}code} \PYG{n}{ret}\PYG{p}{;}
1001\PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt} \PYG{o}{*}\PYG{n}{opt} \PYG{o}{=} \PYG{n}{NULL}\PYG{p}{;}
1002\PYG{n}{krb5\PYGZus{}creds} \PYG{n}{creds}\PYG{p}{;}
1003
1004\PYG{n}{memset}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{,} \PYG{n}{sizeof}\PYG{p}{(}\PYG{n}{creds}\PYG{p}{)}\PYG{p}{)}\PYG{p}{;}
1005\PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt\PYGZus{}alloc}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{opt}\PYG{p}{)}\PYG{p}{;}
1006\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1007    \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
1008\PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt\PYGZus{}set\PYGZus{}tkt\PYGZus{}life}\PYG{p}{(}\PYG{n}{opt}\PYG{p}{,} \PYG{l+m+mi}{24} \PYG{o}{*} \PYG{l+m+mi}{60} \PYG{o}{*} \PYG{l+m+mi}{60}\PYG{p}{)}\PYG{p}{;}
1009\PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}password}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{n}{client\PYGZus{}princ}\PYG{p}{,}
1010                                   \PYG{n}{password}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{opt}\PYG{p}{)}\PYG{p}{;}
1011\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1012    \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
1013
1014\PYG{n}{cleanup}\PYG{p}{:}
1015\PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt\PYGZus{}free}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{opt}\PYG{p}{)}\PYG{p}{;}
1016\PYG{n}{krb5\PYGZus{}free\PYGZus{}cred\PYGZus{}contents}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{)}\PYG{p}{;}
1017\PYG{k}{return} \PYG{n}{ret}\PYG{p}{;}
1018\end{sphinxVerbatim}
1019
1020
1021\section{Getting anonymous credentials}
1022\label{\detokenize{appdev/init_creds:getting-anonymous-credentials}}
1023As of release 1.8, it is possible to obtain fully anonymous or
1024partially anonymous (realm-exposed) credentials, if the KDC supports
1025it.  The MIT KDC supports issuing fully anonymous credentials as of
1026release 1.8 if configured appropriately (see \DUrole{xref,std,std-ref}{anonymous\_pkinit}),
1027but does not support issuing realm-exposed anonymous credentials at
1028this time.
1029
1030To obtain fully anonymous credentials, call
1031{\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_anonymous:c.krb5_get_init_creds_opt_set_anonymous}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_set\_anonymous()}}}} on the options
1032structure to set the anonymous flag, and specify a client principal
1033with the KDC’s realm and a single empty data component (the principal
1034obtained by parsing \sphinxcode{@}\sphinxstyleemphasis{realmname}).  Authentication will take
1035place using anonymous PKINIT; if successful, the client principal of
1036the resulting tickets will be
1037\sphinxcode{WELLKNOWN/ANONYMOUS@WELLKNOWN:ANONYMOUS}.  Here is an example:
1038
1039\fvset{hllines={, ,}}%
1040\begin{sphinxVerbatim}[commandchars=\\\{\}]
1041\PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt\PYGZus{}set\PYGZus{}anonymous}\PYG{p}{(}\PYG{n}{opt}\PYG{p}{,} \PYG{l+m+mi}{1}\PYG{p}{)}\PYG{p}{;}
1042\PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}build\PYGZus{}principal}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{client\PYGZus{}princ}\PYG{p}{,} \PYG{n}{strlen}\PYG{p}{(}\PYG{n}{myrealm}\PYG{p}{)}\PYG{p}{,}
1043                           \PYG{n}{myrealm}\PYG{p}{,} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,} \PYG{p}{(}\PYG{n}{char} \PYG{o}{*}\PYG{p}{)}\PYG{n}{NULL}\PYG{p}{)}\PYG{p}{;}
1044\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1045    \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
1046\PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}password}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{n}{client\PYGZus{}princ}\PYG{p}{,}
1047                                   \PYG{n}{password}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{opt}\PYG{p}{)}\PYG{p}{;}
1048\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1049    \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
1050\end{sphinxVerbatim}
1051
1052To obtain realm-exposed anonymous credentials, set the anonymous flag
1053on the options structure as above, but specify a normal client
1054principal in order to prove membership in the realm.  Authentication
1055will take place as it normally does; if successful, the client
1056principal of the resulting tickets will be \sphinxcode{WELLKNOWN/ANONYMOUS@}\sphinxstyleemphasis{realmname}.
1057
1058
1059\section{User interaction}
1060\label{\detokenize{appdev/init_creds:user-interaction}}
1061Authenticating a user usually requires the entry of secret
1062information, such as a password.  A password can be supplied directly
1063to {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_password()}}}} via the \sphinxstyleemphasis{password}
1064parameter, or the application can supply prompter and/or responder
1065callbacks instead.  If callbacks are used, the user can also be
1066queried for other secret information such as a PIN, informed of
1067impending password expiration, or prompted to change a password which
1068has expired.
1069
1070
1071\subsection{Prompter callback}
1072\label{\detokenize{appdev/init_creds:prompter-callback}}
1073A prompter callback can be specified via the \sphinxstyleemphasis{prompter} and \sphinxstyleemphasis{data}
1074parameters to {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_password()}}}}.  The prompter
1075will be invoked each time the krb5 library has a question to ask or
1076information to present.  When the prompter callback is invoked, the
1077\sphinxstyleemphasis{banner} argument (if not null) is intended to be displayed to the
1078user, and the questions to be answered are specified in the \sphinxstyleemphasis{prompts}
1079array.  Each prompt contains a text question in the \sphinxstyleemphasis{prompt} field, a
1080\sphinxstyleemphasis{hidden} bit to indicate whether the answer should be hidden from
1081display, and a storage area for the answer in the \sphinxstyleemphasis{reply} field.  The
1082callback should fill in each question’s \sphinxcode{reply-\textgreater{}data} with the
1083answer, up to a maximum number of \sphinxcode{reply-\textgreater{}length} bytes, and then
1084reset \sphinxcode{reply-\textgreater{}length} to the length of the answer.
1085
1086A prompter callback can call {\hyperref[\detokenize{appdev/refs/api/krb5_get_prompt_types:c.krb5_get_prompt_types}]{\sphinxcrossref{\sphinxcode{krb5\_get\_prompt\_types()}}}} to get an
1087array of type constants corresponding to the prompts, to get
1088programmatic information about the semantic meaning of the questions.
1089{\hyperref[\detokenize{appdev/refs/api/krb5_get_prompt_types:c.krb5_get_prompt_types}]{\sphinxcrossref{\sphinxcode{krb5\_get\_prompt\_types()}}}} may return a null pointer if no prompt
1090type information is available.
1091
1092Text-based applications can use a built-in text prompter
1093implementation by supplying {\hyperref[\detokenize{appdev/refs/api/krb5_prompter_posix:c.krb5_prompter_posix}]{\sphinxcrossref{\sphinxcode{krb5\_prompter\_posix()}}}} as the
1094\sphinxstyleemphasis{prompter} parameter and a null pointer as the \sphinxstyleemphasis{data} parameter.  For
1095example:
1096
1097\fvset{hllines={, ,}}%
1098\begin{sphinxVerbatim}[commandchars=\\\{\}]
1099\PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}password}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{n}{client\PYGZus{}princ}\PYG{p}{,}
1100                                   \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{krb5\PYGZus{}prompter\PYGZus{}posix}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{,}
1101                                   \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{)}\PYG{p}{;}
1102\end{sphinxVerbatim}
1103
1104
1105\subsection{Responder callback}
1106\label{\detokenize{appdev/init_creds:responder-callback}}
1107A responder callback can be specified through the init\_creds options
1108using the {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_responder:c.krb5_get_init_creds_opt_set_responder}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_set\_responder()}}}} function.
1109Responder callbacks can present a more sophisticated user interface
1110for authentication secrets.  The responder callback is usually invoked
1111only once per authentication, with a list of questions produced by all
1112of the allowed preauthentication mechanisms.
1113
1114When the responder callback is invoked, the \sphinxstyleemphasis{rctx} argument can be
1115accessed to obtain the list of questions and to answer them.  The
1116{\hyperref[\detokenize{appdev/refs/api/krb5_responder_list_questions:c.krb5_responder_list_questions}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_list\_questions()}}}} function retrieves an array of
1117question types.  For each question type, the
1118{\hyperref[\detokenize{appdev/refs/api/krb5_responder_get_challenge:c.krb5_responder_get_challenge}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_get\_challenge()}}}} function retrieves additional
1119information about the question, if applicable, and the
1120{\hyperref[\detokenize{appdev/refs/api/krb5_responder_set_answer:c.krb5_responder_set_answer}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_set\_answer()}}}} function sets the answer.
1121
1122Responder question types, challenges, and answers are UTF-8 strings.
1123The question type is a well-known string; the meaning of the challenge
1124and answer depend on the question type.  If an application does not
1125understand a question type, it cannot interpret the challenge or
1126provide an answer.  Failing to answer a question typically results in
1127the prompter callback being used as a fallback.
1128
1129
1130\subsubsection{Password question}
1131\label{\detokenize{appdev/init_creds:password-question}}
1132The \sphinxcode{KRB5\_RESPONDER\_QUESTION\_PASSWORD} (or \sphinxcode{"password"})
1133question type requests the user’s password.  This question does not
1134have a challenge, and the response is simply the password string.
1135
1136
1137\subsubsection{One-time password question}
1138\label{\detokenize{appdev/init_creds:one-time-password-question}}
1139The \sphinxcode{KRB5\_RESPONDER\_QUESTION\_OTP} (or \sphinxcode{"otp"}) question
1140type requests a choice among one-time password tokens and the PIN and
1141value for the chosen token.  The challenge and answer are JSON-encoded
1142strings, but an application can use convenience functions to avoid
1143doing any JSON processing itself.
1144
1145The {\hyperref[\detokenize{appdev/refs/api/krb5_responder_otp_get_challenge:c.krb5_responder_otp_get_challenge}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_otp\_get\_challenge()}}}} function decodes the
1146challenge into a krb5\_responder\_otp\_challenge structure.  The
1147{\hyperref[\detokenize{appdev/refs/api/krb5_responder_otp_set_answer:c.krb5_responder_otp_set_answer}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_otp\_set\_answer()}}}} function selects one of the
1148token information elements from the challenge and supplies the value
1149and pin for that token.
1150
1151
1152\subsubsection{PKINIT password or PIN question}
1153\label{\detokenize{appdev/init_creds:pkinit-password-or-pin-question}}
1154The \sphinxcode{KRB5\_RESPONDER\_QUESTION\_PKINIT} (or \sphinxcode{"pkinit"}) question
1155type requests PINs for hardware devices and/or passwords for encrypted
1156credentials which are stored on disk, potentially also supplying
1157information about the state of the hardware devices.  The challenge and
1158answer are JSON-encoded strings, but an application can use convenience
1159functions to avoid doing any JSON processing itself.
1160
1161The {\hyperref[\detokenize{appdev/refs/api/krb5_responder_pkinit_get_challenge:c.krb5_responder_pkinit_get_challenge}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_pkinit\_get\_challenge()}}}} function decodes the
1162challenges into a krb5\_responder\_pkinit\_challenge structure.  The
1163{\hyperref[\detokenize{appdev/refs/api/krb5_responder_pkinit_set_answer:c.krb5_responder_pkinit_set_answer}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_pkinit\_set\_answer()}}}} function can be used to
1164supply the PIN or password for a particular client credential, and can
1165be called multiple times.
1166
1167
1168\subsubsection{Example}
1169\label{\detokenize{appdev/init_creds:example}}
1170Here is an example of using a responder callback:
1171
1172\fvset{hllines={, ,}}%
1173\begin{sphinxVerbatim}[commandchars=\\\{\}]
1174\PYG{n}{static} \PYG{n}{krb5\PYGZus{}error\PYGZus{}code}
1175\PYG{n}{my\PYGZus{}responder}\PYG{p}{(}\PYG{n}{krb5\PYGZus{}context} \PYG{n}{context}\PYG{p}{,} \PYG{n}{void} \PYG{o}{*}\PYG{n}{data}\PYG{p}{,}
1176             \PYG{n}{krb5\PYGZus{}responder\PYGZus{}context} \PYG{n}{rctx}\PYG{p}{)}
1177\PYG{p}{\PYGZob{}}
1178    \PYG{n}{krb5\PYGZus{}error\PYGZus{}code} \PYG{n}{ret}\PYG{p}{;}
1179    \PYG{n}{krb5\PYGZus{}responder\PYGZus{}otp\PYGZus{}challenge} \PYG{o}{*}\PYG{n}{chl}\PYG{p}{;}
1180
1181    \PYG{k}{if} \PYG{p}{(}\PYG{n}{krb5\PYGZus{}responder\PYGZus{}get\PYGZus{}challenge}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{rctx}\PYG{p}{,}
1182                                     \PYG{n}{KRB5\PYGZus{}RESPONDER\PYGZus{}QUESTION\PYGZus{}PASSWORD}\PYG{p}{)}\PYG{p}{)} \PYG{p}{\PYGZob{}}
1183        \PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}responder\PYGZus{}set\PYGZus{}answer}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{rctx}\PYG{p}{,}
1184                                        \PYG{n}{KRB5\PYGZus{}RESPONDER\PYGZus{}QUESTION\PYGZus{}PASSWORD}\PYG{p}{,}
1185                                        \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{open sesame}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{)}\PYG{p}{;}
1186        \PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1187            \PYG{k}{return} \PYG{n}{ret}\PYG{p}{;}
1188    \PYG{p}{\PYGZcb{}}
1189    \PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}responder\PYGZus{}otp\PYGZus{}get\PYGZus{}challenge}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{rctx}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{chl}\PYG{p}{)}\PYG{p}{;}
1190    \PYG{k}{if} \PYG{p}{(}\PYG{n}{ret} \PYG{o}{==} \PYG{l+m+mi}{0} \PYG{o}{\PYGZam{}}\PYG{o}{\PYGZam{}} \PYG{n}{chl} \PYG{o}{!=} \PYG{n}{NULL}\PYG{p}{)} \PYG{p}{\PYGZob{}}
1191        \PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}responder\PYGZus{}otp\PYGZus{}set\PYGZus{}answer}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{rctx}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{,} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{1234}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{,}
1192                                            \PYG{n}{NULL}\PYG{p}{)}\PYG{p}{;}
1193        \PYG{n}{krb5\PYGZus{}responder\PYGZus{}otp\PYGZus{}challenge\PYGZus{}free}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{rctx}\PYG{p}{,} \PYG{n}{chl}\PYG{p}{)}\PYG{p}{;}
1194        \PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1195            \PYG{k}{return} \PYG{n}{ret}\PYG{p}{;}
1196    \PYG{p}{\PYGZcb{}}
1197    \PYG{k}{return} \PYG{l+m+mi}{0}\PYG{p}{;}
1198\PYG{p}{\PYGZcb{}}
1199
1200\PYG{n}{static} \PYG{n}{krb5\PYGZus{}error\PYGZus{}code}
1201\PYG{n}{get\PYGZus{}creds}\PYG{p}{(}\PYG{n}{krb5\PYGZus{}context} \PYG{n}{context}\PYG{p}{,} \PYG{n}{krb5\PYGZus{}principal} \PYG{n}{client\PYGZus{}princ}\PYG{p}{)}
1202\PYG{p}{\PYGZob{}}
1203    \PYG{n}{krb5\PYGZus{}error\PYGZus{}code} \PYG{n}{ret}\PYG{p}{;}
1204    \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt} \PYG{o}{*}\PYG{n}{opt} \PYG{o}{=} \PYG{n}{NULL}\PYG{p}{;}
1205    \PYG{n}{krb5\PYGZus{}creds} \PYG{n}{creds}\PYG{p}{;}
1206
1207    \PYG{n}{memset}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{,} \PYG{n}{sizeof}\PYG{p}{(}\PYG{n}{creds}\PYG{p}{)}\PYG{p}{)}\PYG{p}{;}
1208    \PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt\PYGZus{}alloc}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{opt}\PYG{p}{)}\PYG{p}{;}
1209    \PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1210        \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
1211    \PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt\PYGZus{}set\PYGZus{}responder}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{opt}\PYG{p}{,} \PYG{n}{my\PYGZus{}responder}\PYG{p}{,}
1212                                                \PYG{n}{NULL}\PYG{p}{)}\PYG{p}{;}
1213    \PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1214        \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
1215    \PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}password}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{n}{client\PYGZus{}princ}\PYG{p}{,}
1216                                       \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{l+m+mi}{0}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{opt}\PYG{p}{)}\PYG{p}{;}
1217
1218\PYG{n}{cleanup}\PYG{p}{:}
1219    \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt\PYGZus{}free}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{opt}\PYG{p}{)}\PYG{p}{;}
1220    \PYG{n}{krb5\PYGZus{}free\PYGZus{}cred\PYGZus{}contents}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{)}\PYG{p}{;}
1221    \PYG{k}{return} \PYG{n}{ret}\PYG{p}{;}
1222\PYG{p}{\PYGZcb{}}
1223\end{sphinxVerbatim}
1224
1225
1226\section{Verifying initial credentials}
1227\label{\detokenize{appdev/init_creds:verifying-initial-credentials}}
1228Use the function {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds()}}}} to verify initial
1229credentials.  It takes an options structure (which can be a null
1230pointer).  Use {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_init:c.krb5_verify_init_creds_opt_init}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds\_opt\_init()}}}} to initialize
1231the caller-allocated options structure, and
1232{\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_set_ap_req_nofail:c.krb5_verify_init_creds_opt_set_ap_req_nofail}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds\_opt\_set\_ap\_req\_nofail()}}}} to set the
1233“nofail” option.  For example:
1234
1235\fvset{hllines={, ,}}%
1236\begin{sphinxVerbatim}[commandchars=\\\{\}]
1237\PYG{n}{krb5\PYGZus{}verify\PYGZus{}init\PYGZus{}creds\PYGZus{}opt} \PYG{n}{vopt}\PYG{p}{;}
1238
1239\PYG{n}{krb5\PYGZus{}verify\PYGZus{}init\PYGZus{}creds\PYGZus{}opt\PYGZus{}init}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{vopt}\PYG{p}{)}\PYG{p}{;}
1240\PYG{n}{krb5\PYGZus{}verify\PYGZus{}init\PYGZus{}creds\PYGZus{}opt\PYGZus{}set\PYGZus{}ap\PYGZus{}req\PYGZus{}nofail}\PYG{p}{(}\PYG{o}{\PYGZam{}}\PYG{n}{vopt}\PYG{p}{,} \PYG{l+m+mi}{1}\PYG{p}{)}\PYG{p}{;}
1241\PYG{n}{ret} \PYG{o}{=} \PYG{n}{krb5\PYGZus{}verify\PYGZus{}init\PYGZus{}creds}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{creds}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{,} \PYG{o}{\PYGZam{}}\PYG{n}{vopt}\PYG{p}{)}\PYG{p}{;}
1242\end{sphinxVerbatim}
1243
1244The confusingly named “nofail” option, when set, means that the
1245verification must actually succeed in order for
1246{\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds()}}}} to indicate success.  The default
1247state of this option (cleared) means that if there is no key material
1248available to verify the user credentials, the verification will
1249succeed anyway.  (The default can be changed by a configuration file
1250setting.)
1251
1252This accommodates a use case where a large number of unkeyed shared
1253desktop workstations need to allow users to log in using Kerberos.
1254The security risks from this practice are mitigated by the absence of
1255valuable state on the shared workstations—any valuable resources
1256that the users would access reside on networked servers.
1257
1258
1259\chapter{Principal manipulation and parsing}
1260\label{\detokenize{appdev/princ_handle:principal-manipulation-and-parsing}}\label{\detokenize{appdev/princ_handle::doc}}
1261Kerberos principal structure
1262
1263{\hyperref[\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_data}}}}
1264
1265{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\sphinxcode{krb5\_principal}}}}
1266
1267Create and free principal
1268
1269{\hyperref[\detokenize{appdev/refs/api/krb5_build_principal:c.krb5_build_principal}]{\sphinxcrossref{\sphinxcode{krb5\_build\_principal()}}}}
1270
1271{\hyperref[\detokenize{appdev/refs/api/krb5_build_principal_alloc_va:c.krb5_build_principal_alloc_va}]{\sphinxcrossref{\sphinxcode{krb5\_build\_principal\_alloc\_va()}}}}
1272
1273{\hyperref[\detokenize{appdev/refs/api/krb5_build_principal_ext:c.krb5_build_principal_ext}]{\sphinxcrossref{\sphinxcode{krb5\_build\_principal\_ext()}}}}
1274
1275{\hyperref[\detokenize{appdev/refs/api/krb5_copy_principal:c.krb5_copy_principal}]{\sphinxcrossref{\sphinxcode{krb5\_copy\_principal()}}}}
1276
1277{\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}}
1278
1279{\hyperref[\detokenize{appdev/refs/api/krb5_cc_get_principal:c.krb5_cc_get_principal}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_get\_principal()}}}}
1280
1281Comparing
1282
1283{\hyperref[\detokenize{appdev/refs/api/krb5_principal_compare:c.krb5_principal_compare}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_compare()}}}}
1284
1285{\hyperref[\detokenize{appdev/refs/api/krb5_principal_compare_flags:c.krb5_principal_compare_flags}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_compare\_flags()}}}}
1286
1287{\hyperref[\detokenize{appdev/refs/api/krb5_principal_compare_any_realm:c.krb5_principal_compare_any_realm}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_compare\_any\_realm()}}}}
1288
1289{\hyperref[\detokenize{appdev/refs/api/krb5_sname_match:c.krb5_sname_match}]{\sphinxcrossref{\sphinxcode{krb5\_sname\_match()}}}}
1290
1291{\hyperref[\detokenize{appdev/refs/api/krb5_sname_to_principal:c.krb5_sname_to_principal}]{\sphinxcrossref{\sphinxcode{krb5\_sname\_to\_principal()}}}}
1292
1293Parsing:
1294
1295{\hyperref[\detokenize{appdev/refs/api/krb5_parse_name:c.krb5_parse_name}]{\sphinxcrossref{\sphinxcode{krb5\_parse\_name()}}}}
1296
1297{\hyperref[\detokenize{appdev/refs/api/krb5_parse_name_flags:c.krb5_parse_name_flags}]{\sphinxcrossref{\sphinxcode{krb5\_parse\_name\_flags()}}}}
1298
1299{\hyperref[\detokenize{appdev/refs/api/krb5_unparse_name:c.krb5_unparse_name}]{\sphinxcrossref{\sphinxcode{krb5\_unparse\_name()}}}}
1300
1301{\hyperref[\detokenize{appdev/refs/api/krb5_unparse_name_flags:c.krb5_unparse_name_flags}]{\sphinxcrossref{\sphinxcode{krb5\_unparse\_name\_flags()}}}}
1302
1303Utilities:
1304
1305{\hyperref[\detokenize{appdev/refs/api/krb5_is_config_principal:c.krb5_is_config_principal}]{\sphinxcrossref{\sphinxcode{krb5\_is\_config\_principal()}}}}
1306
1307{\hyperref[\detokenize{appdev/refs/api/krb5_kuserok:c.krb5_kuserok}]{\sphinxcrossref{\sphinxcode{krb5\_kuserok()}}}}
1308
1309{\hyperref[\detokenize{appdev/refs/api/krb5_set_password:c.krb5_set_password}]{\sphinxcrossref{\sphinxcode{krb5\_set\_password()}}}}
1310
1311{\hyperref[\detokenize{appdev/refs/api/krb5_set_password_using_ccache:c.krb5_set_password_using_ccache}]{\sphinxcrossref{\sphinxcode{krb5\_set\_password\_using\_ccache()}}}}
1312
1313{\hyperref[\detokenize{appdev/refs/api/krb5_set_principal_realm:c.krb5_set_principal_realm}]{\sphinxcrossref{\sphinxcode{krb5\_set\_principal\_realm()}}}}
1314
1315{\hyperref[\detokenize{appdev/refs/api/krb5_realm_compare:c.krb5_realm_compare}]{\sphinxcrossref{\sphinxcode{krb5\_realm\_compare()}}}}
1316
1317
1318\chapter{Complete reference - API and datatypes}
1319\label{\detokenize{appdev/refs/index:complete-reference-api-and-datatypes}}\label{\detokenize{appdev/refs/index::doc}}
1320
1321\section{krb5 API}
1322\label{\detokenize{appdev/refs/api/index:krb5-api}}\label{\detokenize{appdev/refs/api/index::doc}}
1323
1324\subsection{Frequently used public interfaces}
1325\label{\detokenize{appdev/refs/api/index:frequently-used-public-interfaces}}
1326
1327\subsubsection{krb5\_build\_principal -  Build a principal name using null-terminated strings.}
1328\label{\detokenize{appdev/refs/api/krb5_build_principal:krb5-build-principal-build-a-principal-name-using-null-terminated-strings}}\label{\detokenize{appdev/refs/api/krb5_build_principal::doc}}\index{krb5\_build\_principal (C function)}
1329
1330\begin{fulllineitems}
1331\phantomsection\label{\detokenize{appdev/refs/api/krb5_build_principal:c.krb5_build_principal}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_build\_principal}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ princ}, unsigned int\sphinxstyleemphasis{ rlen}, const char *\sphinxstyleemphasis{ realm}, ...}{}
1332\end{fulllineitems}
1333
1334\begin{quote}\begin{description}
1335\item[{param}] \leavevmode
1336\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1337
1338\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ} - Principal name
1339
1340\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rlen} - Realm name length
1341
1342\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm name
1343
1344\end{description}\end{quote}
1345\begin{quote}\begin{description}
1346\item[{retval}] \leavevmode\begin{itemize}
1347\item {}
13480   Success
1349
1350\end{itemize}
1351
1352\item[{return}] \leavevmode\begin{itemize}
1353\item {}
1354Kerberos error codes
1355
1356\end{itemize}
1357
1358\end{description}\end{quote}
1359
1360Call {\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}} to free \sphinxstyleemphasis{princ} when it is no longer needed.
1361
1362\begin{sphinxadmonition}{note}{Note:}
1363{\hyperref[\detokenize{appdev/refs/api/krb5_build_principal:c.krb5_build_principal}]{\sphinxcrossref{\sphinxcode{krb5\_build\_principal()}}}} and {\hyperref[\detokenize{appdev/refs/api/krb5_build_principal_alloc_va:c.krb5_build_principal_alloc_va}]{\sphinxcrossref{\sphinxcode{krb5\_build\_principal\_alloc\_va()}}}} perform the same task. {\hyperref[\detokenize{appdev/refs/api/krb5_build_principal:c.krb5_build_principal}]{\sphinxcrossref{\sphinxcode{krb5\_build\_principal()}}}} takes variadic arguments. {\hyperref[\detokenize{appdev/refs/api/krb5_build_principal_alloc_va:c.krb5_build_principal_alloc_va}]{\sphinxcrossref{\sphinxcode{krb5\_build\_principal\_alloc\_va()}}}} takes a pre-computed \sphinxstyleemphasis{varargs} pointer.
1364\end{sphinxadmonition}
1365
1366
1367\subsubsection{krb5\_build\_principal\_alloc\_va -  Build a principal name, using a precomputed variable argument list.}
1368\label{\detokenize{appdev/refs/api/krb5_build_principal_alloc_va:krb5-build-principal-alloc-va-build-a-principal-name-using-a-precomputed-variable-argument-list}}\label{\detokenize{appdev/refs/api/krb5_build_principal_alloc_va::doc}}\index{krb5\_build\_principal\_alloc\_va (C function)}
1369
1370\begin{fulllineitems}
1371\phantomsection\label{\detokenize{appdev/refs/api/krb5_build_principal_alloc_va:c.krb5_build_principal_alloc_va}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_build\_principal\_alloc\_va}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ princ}, unsigned int\sphinxstyleemphasis{ rlen}, const char *\sphinxstyleemphasis{ realm}, va\_list\sphinxstyleemphasis{ ap}}{}
1372\end{fulllineitems}
1373
1374\begin{quote}\begin{description}
1375\item[{param}] \leavevmode
1376\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1377
1378\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ} - Principal structure
1379
1380\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rlen} - Realm name length
1381
1382\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm name
1383
1384\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap} - List of char * components, ending with NULL
1385
1386\end{description}\end{quote}
1387\begin{quote}\begin{description}
1388\item[{retval}] \leavevmode\begin{itemize}
1389\item {}
13900   Success
1391
1392\end{itemize}
1393
1394\item[{return}] \leavevmode\begin{itemize}
1395\item {}
1396Kerberos error codes
1397
1398\end{itemize}
1399
1400\end{description}\end{quote}
1401
1402Similar to {\hyperref[\detokenize{appdev/refs/api/krb5_build_principal:c.krb5_build_principal}]{\sphinxcrossref{\sphinxcode{krb5\_build\_principal()}}}} , this function builds a principal name, but its name components are specified as a va\_list.
1403
1404Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}} to deallocate \sphinxstyleemphasis{princ} when it is no longer needed.
1405
1406
1407\subsubsection{krb5\_build\_principal\_ext -  Build a principal name using length-counted strings.}
1408\label{\detokenize{appdev/refs/api/krb5_build_principal_ext:krb5-build-principal-ext-build-a-principal-name-using-length-counted-strings}}\label{\detokenize{appdev/refs/api/krb5_build_principal_ext::doc}}\index{krb5\_build\_principal\_ext (C function)}
1409
1410\begin{fulllineitems}
1411\phantomsection\label{\detokenize{appdev/refs/api/krb5_build_principal_ext:c.krb5_build_principal_ext}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_build\_principal\_ext}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ princ}, unsigned int\sphinxstyleemphasis{ rlen}, const char *\sphinxstyleemphasis{ realm}, ...}{}
1412\end{fulllineitems}
1413
1414\begin{quote}\begin{description}
1415\item[{param}] \leavevmode
1416\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1417
1418\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ} - Principal name
1419
1420\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rlen} - Realm name length
1421
1422\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm name
1423
1424\end{description}\end{quote}
1425\begin{quote}\begin{description}
1426\item[{retval}] \leavevmode\begin{itemize}
1427\item {}
14280   Success
1429
1430\end{itemize}
1431
1432\item[{return}] \leavevmode\begin{itemize}
1433\item {}
1434Kerberos error codes
1435
1436\end{itemize}
1437
1438\end{description}\end{quote}
1439
1440This function creates a principal from a length-counted string and a variable-length list of length-counted components. The list of components ends with the first 0 length argument (so it is not possible to specify an empty component with this function). Call {\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}} to free allocated memory for principal when it is no longer needed.
1441
1442
1443\subsubsection{krb5\_cc\_close -  Close a credential cache handle.}
1444\label{\detokenize{appdev/refs/api/krb5_cc_close:krb5-cc-close-close-a-credential-cache-handle}}\label{\detokenize{appdev/refs/api/krb5_cc_close::doc}}\index{krb5\_cc\_close (C function)}
1445
1446\begin{fulllineitems}
1447\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_close:c.krb5_cc_close}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_close}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}}{}
1448\end{fulllineitems}
1449
1450\begin{quote}\begin{description}
1451\item[{param}] \leavevmode
1452\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1453
1454\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
1455
1456\end{description}\end{quote}
1457\begin{quote}\begin{description}
1458\item[{retval}] \leavevmode\begin{itemize}
1459\item {}
14600   Success
1461
1462\end{itemize}
1463
1464\item[{return}] \leavevmode\begin{itemize}
1465\item {}
1466Kerberos error codes
1467
1468\end{itemize}
1469
1470\end{description}\end{quote}
1471
1472This function closes a credential cache handle \sphinxstyleemphasis{cache} without affecting the contents of the cache.
1473
1474
1475\subsubsection{krb5\_cc\_default -  Resolve the default credential cache name.}
1476\label{\detokenize{appdev/refs/api/krb5_cc_default::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_default:krb5-cc-default-resolve-the-default-credential-cache-name}}\index{krb5\_cc\_default (C function)}
1477
1478\begin{fulllineitems}
1479\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_default:c.krb5_cc_default}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_default}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}} *\sphinxstyleemphasis{ ccache}}{}
1480\end{fulllineitems}
1481
1482\begin{quote}\begin{description}
1483\item[{param}] \leavevmode
1484\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1485
1486\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ccache} - Pointer to credential cache name
1487
1488\end{description}\end{quote}
1489\begin{quote}\begin{description}
1490\item[{retval}] \leavevmode\begin{itemize}
1491\item {}
14920   Success
1493
1494\item {}
1495KV5M\_CONTEXT   Bad magic number for \_krb5\_context structure
1496
1497\item {}
1498KRB5\_FCC\_INTERNAL   The name of the default credential cache cannot be obtained
1499
1500\end{itemize}
1501
1502\item[{return}] \leavevmode\begin{itemize}
1503\item {}
1504Kerberos error codes
1505
1506\end{itemize}
1507
1508\end{description}\end{quote}
1509
1510Create a handle to the default credential cache as given by {\hyperref[\detokenize{appdev/refs/api/krb5_cc_default_name:c.krb5_cc_default_name}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_default\_name()}}}} .
1511
1512
1513\subsubsection{krb5\_cc\_default\_name -  Return the name of the default credential cache.}
1514\label{\detokenize{appdev/refs/api/krb5_cc_default_name::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_default_name:krb5-cc-default-name-return-the-name-of-the-default-credential-cache}}\index{krb5\_cc\_default\_name (C function)}
1515
1516\begin{fulllineitems}
1517\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_default_name:c.krb5_cc_default_name}}\pysiglinewithargsret{const char * \sphinxbfcode{krb5\_cc\_default\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}}{}
1518\end{fulllineitems}
1519
1520\begin{quote}\begin{description}
1521\item[{param}] \leavevmode
1522\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1523
1524\end{description}\end{quote}
1525\begin{quote}\begin{description}
1526\item[{return}] \leavevmode\begin{itemize}
1527\item {}
1528Name of default credential cache for the current user.
1529
1530\end{itemize}
1531
1532\end{description}\end{quote}
1533
1534Return a pointer to the default credential cache name for \sphinxstyleemphasis{context} , as determined by a prior call to {\hyperref[\detokenize{appdev/refs/api/krb5_cc_set_default_name:c.krb5_cc_set_default_name}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_set\_default\_name()}}}} , by the KRB5CCNAME environment variable, by the default\_ccache\_name profile variable, or by the operating system or build-time default value. The returned value must not be modified or freed by the caller. The returned value becomes invalid when \sphinxstyleemphasis{context} is destroyed {\hyperref[\detokenize{appdev/refs/api/krb5_free_context:c.krb5_free_context}]{\sphinxcrossref{\sphinxcode{krb5\_free\_context()}}}} or if a subsequent call to {\hyperref[\detokenize{appdev/refs/api/krb5_cc_set_default_name:c.krb5_cc_set_default_name}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_set\_default\_name()}}}} is made on \sphinxstyleemphasis{context} .
1535
1536The default credential cache name is cached in \sphinxstyleemphasis{context} between calls to this function, so if the value of KRB5CCNAME changes in the process environment after the first call to this function on, that change will not be reflected in later calls with the same context. The caller can invoke {\hyperref[\detokenize{appdev/refs/api/krb5_cc_set_default_name:c.krb5_cc_set_default_name}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_set\_default\_name()}}}} with a NULL value of \sphinxstyleemphasis{name} to clear the cached value and force the default name to be recomputed.
1537
1538
1539\subsubsection{krb5\_cc\_destroy -  Destroy a credential cache.}
1540\label{\detokenize{appdev/refs/api/krb5_cc_destroy:krb5-cc-destroy-destroy-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_destroy::doc}}\index{krb5\_cc\_destroy (C function)}
1541
1542\begin{fulllineitems}
1543\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_destroy:c.krb5_cc_destroy}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_destroy}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}}{}
1544\end{fulllineitems}
1545
1546\begin{quote}\begin{description}
1547\item[{param}] \leavevmode
1548\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1549
1550\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
1551
1552\end{description}\end{quote}
1553\begin{quote}\begin{description}
1554\item[{retval}] \leavevmode\begin{itemize}
1555\item {}
15560   Success
1557
1558\end{itemize}
1559
1560\item[{return}] \leavevmode\begin{itemize}
1561\item {}
1562Permission errors
1563
1564\end{itemize}
1565
1566\end{description}\end{quote}
1567
1568This function destroys any existing contents of \sphinxstyleemphasis{cache} and closes the handle to it.
1569
1570
1571\subsubsection{krb5\_cc\_dup -  Duplicate ccache handle.}
1572\label{\detokenize{appdev/refs/api/krb5_cc_dup:krb5-cc-dup-duplicate-ccache-handle}}\label{\detokenize{appdev/refs/api/krb5_cc_dup::doc}}\index{krb5\_cc\_dup (C function)}
1573
1574\begin{fulllineitems}
1575\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_dup:c.krb5_cc_dup}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_dup}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ in}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}} *\sphinxstyleemphasis{ out}}{}
1576\end{fulllineitems}
1577
1578\begin{quote}\begin{description}
1579\item[{param}] \leavevmode
1580\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1581
1582\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in} - Credential cache handle to be duplicated
1583
1584\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Credential cache handle
1585
1586\end{description}\end{quote}
1587
1588Create a new handle referring to the same cache as \sphinxstyleemphasis{in} . The new handle and \sphinxstyleemphasis{in} can be closed independently.
1589
1590
1591\subsubsection{krb5\_cc\_get\_name -  Retrieve the name, but not type of a credential cache.}
1592\label{\detokenize{appdev/refs/api/krb5_cc_get_name::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_get_name:krb5-cc-get-name-retrieve-the-name-but-not-type-of-a-credential-cache}}\index{krb5\_cc\_get\_name (C function)}
1593
1594\begin{fulllineitems}
1595\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_get_name:c.krb5_cc_get_name}}\pysiglinewithargsret{const char * \sphinxbfcode{krb5\_cc\_get\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}}{}
1596\end{fulllineitems}
1597
1598\begin{quote}\begin{description}
1599\item[{param}] \leavevmode
1600\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1601
1602\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
1603
1604\end{description}\end{quote}
1605\begin{quote}\begin{description}
1606\item[{return}] \leavevmode\begin{itemize}
1607\item {}
1608On success - the name of the credential cache.
1609
1610\end{itemize}
1611
1612\end{description}\end{quote}
1613
1614\begin{sphinxadmonition}{warning}{Warning:}
1615Returns the name of the credential cache. The result is an alias into \sphinxstyleemphasis{cache} and should not be freed or modified by the caller. This name does not include the cache type, so should not be used as input to {\hyperref[\detokenize{appdev/refs/api/krb5_cc_resolve:c.krb5_cc_resolve}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_resolve()}}}} .
1616\end{sphinxadmonition}
1617
1618
1619\subsubsection{krb5\_cc\_get\_principal -  Get the default principal of a credential cache.}
1620\label{\detokenize{appdev/refs/api/krb5_cc_get_principal:krb5-cc-get-principal-get-the-default-principal-of-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_get_principal::doc}}\index{krb5\_cc\_get\_principal (C function)}
1621
1622\begin{fulllineitems}
1623\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_get_principal:c.krb5_cc_get_principal}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_get\_principal}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ principal}}{}
1624\end{fulllineitems}
1625
1626\begin{quote}\begin{description}
1627\item[{param}] \leavevmode
1628\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1629
1630\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
1631
1632\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{principal} - Primary principal
1633
1634\end{description}\end{quote}
1635\begin{quote}\begin{description}
1636\item[{retval}] \leavevmode\begin{itemize}
1637\item {}
16380   Success
1639
1640\end{itemize}
1641
1642\item[{return}] \leavevmode\begin{itemize}
1643\item {}
1644Kerberos error codes
1645
1646\end{itemize}
1647
1648\end{description}\end{quote}
1649
1650Returns the default client principal of a credential cache as set by {\hyperref[\detokenize{appdev/refs/api/krb5_cc_initialize:c.krb5_cc_initialize}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_initialize()}}}} .
1651
1652Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}} to free \sphinxstyleemphasis{principal} when it is no longer needed.
1653
1654
1655\subsubsection{krb5\_cc\_get\_type -  Retrieve the type of a credential cache.}
1656\label{\detokenize{appdev/refs/api/krb5_cc_get_type:krb5-cc-get-type-retrieve-the-type-of-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_get_type::doc}}\index{krb5\_cc\_get\_type (C function)}
1657
1658\begin{fulllineitems}
1659\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_get_type:c.krb5_cc_get_type}}\pysiglinewithargsret{const char * \sphinxbfcode{krb5\_cc\_get\_type}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}}{}
1660\end{fulllineitems}
1661
1662\begin{quote}\begin{description}
1663\item[{param}] \leavevmode
1664\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1665
1666\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
1667
1668\end{description}\end{quote}
1669\begin{quote}\begin{description}
1670\item[{return}] \leavevmode\begin{itemize}
1671\item {}
1672The type of a credential cache as an alias that must not be modified or freed by the caller.
1673
1674\end{itemize}
1675
1676\end{description}\end{quote}
1677
1678
1679\subsubsection{krb5\_cc\_initialize -  Initialize a credential cache.}
1680\label{\detokenize{appdev/refs/api/krb5_cc_initialize::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_initialize:krb5-cc-initialize-initialize-a-credential-cache}}\index{krb5\_cc\_initialize (C function)}
1681
1682\begin{fulllineitems}
1683\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_initialize:c.krb5_cc_initialize}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_initialize}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ principal}}{}
1684\end{fulllineitems}
1685
1686\begin{quote}\begin{description}
1687\item[{param}] \leavevmode
1688\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1689
1690\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
1691
1692\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Default principal name
1693
1694\end{description}\end{quote}
1695\begin{quote}\begin{description}
1696\item[{retval}] \leavevmode\begin{itemize}
1697\item {}
16980   Success
1699
1700\end{itemize}
1701
1702\item[{return}] \leavevmode\begin{itemize}
1703\item {}
1704System errors; Permission errors; Kerberos error codes
1705
1706\end{itemize}
1707
1708\end{description}\end{quote}
1709
1710Destroy any existing contents of \sphinxstyleemphasis{cache} and initialize it for the default principal \sphinxstyleemphasis{principal} .
1711
1712
1713\subsubsection{krb5\_cc\_new\_unique -  Create a new credential cache of the specified type with a unique name.}
1714\label{\detokenize{appdev/refs/api/krb5_cc_new_unique:krb5-cc-new-unique-create-a-new-credential-cache-of-the-specified-type-with-a-unique-name}}\label{\detokenize{appdev/refs/api/krb5_cc_new_unique::doc}}\index{krb5\_cc\_new\_unique (C function)}
1715
1716\begin{fulllineitems}
1717\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_new_unique:c.krb5_cc_new_unique}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_new\_unique}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ type}, const char *\sphinxstyleemphasis{ hint}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}} *\sphinxstyleemphasis{ id}}{}
1718\end{fulllineitems}
1719
1720\begin{quote}\begin{description}
1721\item[{param}] \leavevmode
1722\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1723
1724\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - Credential cache type name
1725
1726\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{hint} - Unused
1727
1728\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{id} - Credential cache handle
1729
1730\end{description}\end{quote}
1731\begin{quote}\begin{description}
1732\item[{retval}] \leavevmode\begin{itemize}
1733\item {}
17340   Success
1735
1736\end{itemize}
1737
1738\item[{return}] \leavevmode\begin{itemize}
1739\item {}
1740Kerberos error codes
1741
1742\end{itemize}
1743
1744\end{description}\end{quote}
1745
1746
1747\subsubsection{krb5\_cc\_resolve -  Resolve a credential cache name.}
1748\label{\detokenize{appdev/refs/api/krb5_cc_resolve:krb5-cc-resolve-resolve-a-credential-cache-name}}\label{\detokenize{appdev/refs/api/krb5_cc_resolve::doc}}\index{krb5\_cc\_resolve (C function)}
1749
1750\begin{fulllineitems}
1751\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_resolve:c.krb5_cc_resolve}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_resolve}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ name}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}} *\sphinxstyleemphasis{ cache}}{}
1752\end{fulllineitems}
1753
1754\begin{quote}\begin{description}
1755\item[{param}] \leavevmode
1756\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1757
1758\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - Credential cache name to be resolved
1759
1760\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cache} - Credential cache handle
1761
1762\end{description}\end{quote}
1763\begin{quote}\begin{description}
1764\item[{retval}] \leavevmode\begin{itemize}
1765\item {}
17660   Success
1767
1768\end{itemize}
1769
1770\item[{return}] \leavevmode\begin{itemize}
1771\item {}
1772Kerberos error codes
1773
1774\end{itemize}
1775
1776\end{description}\end{quote}
1777
1778Fills in \sphinxstyleemphasis{cache} with a \sphinxstyleemphasis{cache} handle that corresponds to the name in \sphinxstyleemphasis{name} . \sphinxstyleemphasis{name} should be of the form \sphinxstylestrong{type:residual} , and \sphinxstyleemphasis{type} must be a type known to the library. If the \sphinxstyleemphasis{name} does not contain a colon, interpret it as a file name.
1779
1780
1781\subsubsection{krb5\_change\_password -  Change a password for an existing Kerberos account.}
1782\label{\detokenize{appdev/refs/api/krb5_change_password:krb5-change-password-change-a-password-for-an-existing-kerberos-account}}\label{\detokenize{appdev/refs/api/krb5_change_password::doc}}\index{krb5\_change\_password (C function)}
1783
1784\begin{fulllineitems}
1785\phantomsection\label{\detokenize{appdev/refs/api/krb5_change_password:c.krb5_change_password}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_change\_password}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, const char *\sphinxstyleemphasis{ newpw}, int *\sphinxstyleemphasis{ result\_code}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ result\_code\_string}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ result\_string}}{}
1786\end{fulllineitems}
1787
1788\begin{quote}\begin{description}
1789\item[{param}] \leavevmode
1790\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1791
1792\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Credentials for kadmin/changepw service
1793
1794\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{newpw} - New password
1795
1796\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code} - Numeric error code from server
1797
1798\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code\_string} - String equivalent to \sphinxstyleemphasis{result\_code}
1799
1800\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_string} - Change password response from the KDC
1801
1802\end{description}\end{quote}
1803\begin{quote}\begin{description}
1804\item[{retval}] \leavevmode\begin{itemize}
1805\item {}
18060   Success; otherwise - Kerberos error codes
1807
1808\end{itemize}
1809
1810\end{description}\end{quote}
1811
1812Change the password for the existing principal identified by \sphinxstyleemphasis{creds} .
1813
1814The possible values of the output \sphinxstyleemphasis{result\_code} are:
1815\begin{itemize}
1816\item {}
1817{\hyperref[\detokenize{appdev/refs/macros/KRB5_KPASSWD_SUCCESS:KRB5_KPASSWD_SUCCESS}]{\sphinxcrossref{\sphinxcode{KRB5\_KPASSWD\_SUCCESS}}}} (0) - success
1818
1819\item {}
1820{\hyperref[\detokenize{appdev/refs/macros/KRB5_KPASSWD_MALFORMED:KRB5_KPASSWD_MALFORMED}]{\sphinxcrossref{\sphinxcode{KRB5\_KPASSWD\_MALFORMED}}}} (1) - Malformed request error
1821
1822\item {}
1823{\hyperref[\detokenize{appdev/refs/macros/KRB5_KPASSWD_HARDERROR:KRB5_KPASSWD_HARDERROR}]{\sphinxcrossref{\sphinxcode{KRB5\_KPASSWD\_HARDERROR}}}} (2) - Server error
1824
1825\item {}
1826{\hyperref[\detokenize{appdev/refs/macros/KRB5_KPASSWD_AUTHERROR:KRB5_KPASSWD_AUTHERROR}]{\sphinxcrossref{\sphinxcode{KRB5\_KPASSWD\_AUTHERROR}}}} (3) - Authentication error
1827
1828\item {}
1829{\hyperref[\detokenize{appdev/refs/macros/KRB5_KPASSWD_SOFTERROR:KRB5_KPASSWD_SOFTERROR}]{\sphinxcrossref{\sphinxcode{KRB5\_KPASSWD\_SOFTERROR}}}} (4) - Password change rejected
1830
1831\end{itemize}
1832
1833
1834\subsubsection{krb5\_chpw\_message -  Get a result message for changing or setting a password.}
1835\label{\detokenize{appdev/refs/api/krb5_chpw_message:krb5-chpw-message-get-a-result-message-for-changing-or-setting-a-password}}\label{\detokenize{appdev/refs/api/krb5_chpw_message::doc}}\index{krb5\_chpw\_message (C function)}
1836
1837\begin{fulllineitems}
1838\phantomsection\label{\detokenize{appdev/refs/api/krb5_chpw_message:c.krb5_chpw_message}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_chpw\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ server\_string}, char **\sphinxstyleemphasis{ message\_out}}{}
1839\end{fulllineitems}
1840
1841\begin{quote}\begin{description}
1842\item[{param}] \leavevmode
1843\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1844
1845\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server\_string} - Data returned from the remote system
1846
1847\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{message\_out} - A message displayable to the user
1848
1849\end{description}\end{quote}
1850\begin{quote}\begin{description}
1851\item[{retval}] \leavevmode\begin{itemize}
1852\item {}
18530   Success
1854
1855\end{itemize}
1856
1857\item[{return}] \leavevmode\begin{itemize}
1858\item {}
1859Kerberos error codes
1860
1861\end{itemize}
1862
1863\end{description}\end{quote}
1864
1865This function processes the \sphinxstyleemphasis{server\_string} returned in the \sphinxstyleemphasis{result\_string} parameter of {\hyperref[\detokenize{appdev/refs/api/krb5_change_password:c.krb5_change_password}]{\sphinxcrossref{\sphinxcode{krb5\_change\_password()}}}} , {\hyperref[\detokenize{appdev/refs/api/krb5_set_password:c.krb5_set_password}]{\sphinxcrossref{\sphinxcode{krb5\_set\_password()}}}} , and related functions, and returns a displayable string. If \sphinxstyleemphasis{server\_string} contains Active Directory structured policy information, it will be converted into human-readable text.
1866
1867Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_string:c.krb5_free_string}]{\sphinxcrossref{\sphinxcode{krb5\_free\_string()}}}} to free \sphinxstyleemphasis{message\_out} when it is no longer needed.
1868
1869\begin{sphinxadmonition}{note}{Note:}
1870New in 1.11
1871\end{sphinxadmonition}
1872
1873
1874\subsubsection{krb5\_expand\_hostname -  Canonicalize a hostname, possibly using name service.}
1875\label{\detokenize{appdev/refs/api/krb5_expand_hostname:krb5-expand-hostname-canonicalize-a-hostname-possibly-using-name-service}}\label{\detokenize{appdev/refs/api/krb5_expand_hostname::doc}}\index{krb5\_expand\_hostname (C function)}
1876
1877\begin{fulllineitems}
1878\phantomsection\label{\detokenize{appdev/refs/api/krb5_expand_hostname:c.krb5_expand_hostname}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_expand\_hostname}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ host}, char **\sphinxstyleemphasis{ canonhost\_out}}{}
1879\end{fulllineitems}
1880
1881\begin{quote}\begin{description}
1882\item[{param}] \leavevmode
1883\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1884
1885\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{host} - Input hostname
1886
1887\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{canonhost\_out} - Canonicalized hostname
1888
1889\end{description}\end{quote}
1890
1891This function canonicalizes orig\_hostname, possibly using name service lookups if configuration permits. Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_string:c.krb5_free_string}]{\sphinxcrossref{\sphinxcode{krb5\_free\_string()}}}} to free \sphinxstyleemphasis{canonhost\_out} when it is no longer needed.
1892
1893\begin{sphinxadmonition}{note}{Note:}
1894New in 1.15
1895\end{sphinxadmonition}
1896
1897
1898\subsubsection{krb5\_free\_context -  Free a krb5 library context.}
1899\label{\detokenize{appdev/refs/api/krb5_free_context:krb5-free-context-free-a-krb5-library-context}}\label{\detokenize{appdev/refs/api/krb5_free_context::doc}}\index{krb5\_free\_context (C function)}
1900
1901\begin{fulllineitems}
1902\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_context:c.krb5_free_context}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_context}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}}{}
1903\end{fulllineitems}
1904
1905\begin{quote}\begin{description}
1906\item[{param}] \leavevmode
1907\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1908
1909\end{description}\end{quote}
1910
1911This function frees a \sphinxstyleemphasis{context} that was created by {\hyperref[\detokenize{appdev/refs/api/krb5_init_context:c.krb5_init_context}]{\sphinxcrossref{\sphinxcode{krb5\_init\_context()}}}} or {\hyperref[\detokenize{appdev/refs/api/krb5_init_secure_context:c.krb5_init_secure_context}]{\sphinxcrossref{\sphinxcode{krb5\_init\_secure\_context()}}}} .
1912
1913
1914\subsubsection{krb5\_free\_error\_message -  Free an error message generated by krb5\_get\_error\_message() .}
1915\label{\detokenize{appdev/refs/api/krb5_free_error_message:krb5-free-error-message-free-an-error-message-generated-by-krb5-get-error-message}}\label{\detokenize{appdev/refs/api/krb5_free_error_message::doc}}\index{krb5\_free\_error\_message (C function)}
1916
1917\begin{fulllineitems}
1918\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_error_message:c.krb5_free_error_message}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, const char *\sphinxstyleemphasis{ msg}}{}
1919\end{fulllineitems}
1920
1921\begin{quote}\begin{description}
1922\item[{param}] \leavevmode
1923\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
1924
1925\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{msg} - Pointer to error message
1926
1927\end{description}\end{quote}
1928
1929
1930\subsubsection{krb5\_free\_principal -  Free the storage assigned to a principal.}
1931\label{\detokenize{appdev/refs/api/krb5_free_principal::doc}}\label{\detokenize{appdev/refs/api/krb5_free_principal:krb5-free-principal-free-the-storage-assigned-to-a-principal}}\index{krb5\_free\_principal (C function)}
1932
1933\begin{fulllineitems}
1934\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_principal}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ val}}{}
1935\end{fulllineitems}
1936
1937\begin{quote}\begin{description}
1938\item[{param}] \leavevmode
1939\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1940
1941\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Principal to be freed
1942
1943\end{description}\end{quote}
1944
1945
1946\subsubsection{krb5\_fwd\_tgt\_creds -  Get a forwarded TGT and format a KRB-CRED message.}
1947\label{\detokenize{appdev/refs/api/krb5_fwd_tgt_creds:krb5-fwd-tgt-creds-get-a-forwarded-tgt-and-format-a-krb-cred-message}}\label{\detokenize{appdev/refs/api/krb5_fwd_tgt_creds::doc}}\index{krb5\_fwd\_tgt\_creds (C function)}
1948
1949\begin{fulllineitems}
1950\phantomsection\label{\detokenize{appdev/refs/api/krb5_fwd_tgt_creds:c.krb5_fwd_tgt_creds}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_fwd\_tgt\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, const char *\sphinxstyleemphasis{ rhost}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ client}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ server}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cc}, int\sphinxstyleemphasis{ forwardable}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ outbuf}}{}
1951\end{fulllineitems}
1952
1953\begin{quote}\begin{description}
1954\item[{param}] \leavevmode
1955\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1956
1957\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
1958
1959\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rhost} - Remote host
1960
1961\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal of TGT
1962
1963\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Principal of server to receive TGT
1964
1965\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cc} - Credential cache handle (NULL to use default)
1966
1967\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{forwardable} - Whether TGT should be forwardable
1968
1969\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} - KRB-CRED message
1970
1971\end{description}\end{quote}
1972\begin{quote}\begin{description}
1973\item[{retval}] \leavevmode\begin{itemize}
1974\item {}
19750   Success
1976
1977\item {}
1978ENOMEM   Insufficient memory
1979
1980\item {}
1981KRB5\_PRINC\_NOMATCH   Requested principal and ticket do not match
1982
1983\item {}
1984KRB5\_NO\_TKT\_SUPPLIED   Request did not supply a ticket
1985
1986\item {}
1987KRB5\_CC\_BADNAME   Credential cache name or principal name malformed
1988
1989\end{itemize}
1990
1991\item[{return}] \leavevmode\begin{itemize}
1992\item {}
1993Kerberos error codes
1994
1995\end{itemize}
1996
1997\end{description}\end{quote}
1998
1999Get a TGT for use at the remote host \sphinxstyleemphasis{rhost} and format it into a KRB-CRED message. If \sphinxstyleemphasis{rhost} is NULL and \sphinxstyleemphasis{server} is of type {\hyperref[\detokenize{appdev/refs/macros/KRB5_NT_SRV_HST:KRB5_NT_SRV_HST}]{\sphinxcrossref{\sphinxcode{KRB5\_NT\_SRV\_HST}}}} , the second component of \sphinxstyleemphasis{server} will be used.
2000
2001
2002\subsubsection{krb5\_get\_default\_realm -  Retrieve the default realm.}
2003\label{\detokenize{appdev/refs/api/krb5_get_default_realm:krb5-get-default-realm-retrieve-the-default-realm}}\label{\detokenize{appdev/refs/api/krb5_get_default_realm::doc}}\index{krb5\_get\_default\_realm (C function)}
2004
2005\begin{fulllineitems}
2006\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_default_realm:c.krb5_get_default_realm}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_default\_realm}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, char **\sphinxstyleemphasis{ lrealm}}{}
2007\end{fulllineitems}
2008
2009\begin{quote}\begin{description}
2010\item[{param}] \leavevmode
2011\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2012
2013\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{lrealm} - Default realm name
2014
2015\end{description}\end{quote}
2016\begin{quote}\begin{description}
2017\item[{retval}] \leavevmode\begin{itemize}
2018\item {}
20190   Success
2020
2021\end{itemize}
2022
2023\item[{return}] \leavevmode\begin{itemize}
2024\item {}
2025Kerberos error codes
2026
2027\end{itemize}
2028
2029\end{description}\end{quote}
2030
2031Retrieves the default realm to be used if no user-specified realm is available.
2032
2033Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_default_realm:c.krb5_free_default_realm}]{\sphinxcrossref{\sphinxcode{krb5\_free\_default\_realm()}}}} to free \sphinxstyleemphasis{lrealm} when it is no longer needed.
2034
2035
2036\subsubsection{krb5\_get\_error\_message -  Get the (possibly extended) error message for a code.}
2037\label{\detokenize{appdev/refs/api/krb5_get_error_message::doc}}\label{\detokenize{appdev/refs/api/krb5_get_error_message:krb5-get-error-message-get-the-possibly-extended-error-message-for-a-code}}\index{krb5\_get\_error\_message (C function)}
2038
2039\begin{fulllineitems}
2040\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_error_message:c.krb5_get_error_message}}\pysiglinewithargsret{const char * \sphinxbfcode{krb5\_get\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}}\sphinxstyleemphasis{ code}}{}
2041\end{fulllineitems}
2042
2043\begin{quote}\begin{description}
2044\item[{param}] \leavevmode
2045\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
2046
2047\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code
2048
2049\end{description}\end{quote}
2050
2051The behavior of {\hyperref[\detokenize{appdev/refs/api/krb5_get_error_message:c.krb5_get_error_message}]{\sphinxcrossref{\sphinxcode{krb5\_get\_error\_message()}}}} is only defined the first time it is called after a failed call to a krb5 function using the same context, and only when the error code passed in is the same as that returned by the krb5 function.
2052
2053This function never returns NULL, so its result may be used unconditionally as a C string.
2054
2055The string returned by this function must be freed using {\hyperref[\detokenize{appdev/refs/api/krb5_free_error_message:c.krb5_free_error_message}]{\sphinxcrossref{\sphinxcode{krb5\_free\_error\_message()}}}}
2056
2057\begin{sphinxadmonition}{note}{Note:}
2058Future versions may return the same string for the second and following calls.
2059\end{sphinxadmonition}
2060
2061
2062\subsubsection{krb5\_get\_host\_realm -  Get the Kerberos realm names for a host.}
2063\label{\detokenize{appdev/refs/api/krb5_get_host_realm:krb5-get-host-realm-get-the-kerberos-realm-names-for-a-host}}\label{\detokenize{appdev/refs/api/krb5_get_host_realm::doc}}\index{krb5\_get\_host\_realm (C function)}
2064
2065\begin{fulllineitems}
2066\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_host_realm:c.krb5_get_host_realm}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_host\_realm}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ host}, char ***\sphinxstyleemphasis{ realmsp}}{}
2067\end{fulllineitems}
2068
2069\begin{quote}\begin{description}
2070\item[{param}] \leavevmode
2071\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2072
2073\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{host} - Host name (or NULL)
2074
2075\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realmsp} - Null-terminated list of realm names
2076
2077\end{description}\end{quote}
2078\begin{quote}\begin{description}
2079\item[{retval}] \leavevmode\begin{itemize}
2080\item {}
20810   Success
2082
2083\item {}
2084ENOMEM   Insufficient memory
2085
2086\end{itemize}
2087
2088\item[{return}] \leavevmode\begin{itemize}
2089\item {}
2090Kerberos error codes
2091
2092\end{itemize}
2093
2094\end{description}\end{quote}
2095
2096Fill in \sphinxstyleemphasis{realmsp} with a pointer to a null-terminated list of realm names. If there are no known realms for the host, a list containing the referral (empty) realm is returned.
2097
2098If \sphinxstyleemphasis{host} is NULL, the local host’s realms are determined.
2099
2100Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_host_realm:c.krb5_free_host_realm}]{\sphinxcrossref{\sphinxcode{krb5\_free\_host\_realm()}}}} to release \sphinxstyleemphasis{realmsp} when it is no longer needed.
2101
2102
2103\subsubsection{krb5\_get\_credentials -  Get an additional ticket.}
2104\label{\detokenize{appdev/refs/api/krb5_get_credentials:krb5-get-credentials-get-an-additional-ticket}}\label{\detokenize{appdev/refs/api/krb5_get_credentials::doc}}\index{krb5\_get\_credentials (C function)}
2105
2106\begin{fulllineitems}
2107\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_credentials:c.krb5_get_credentials}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_credentials}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ options}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ in\_creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} **\sphinxstyleemphasis{ out\_creds}}{}
2108\end{fulllineitems}
2109
2110\begin{quote}\begin{description}
2111\item[{param}] \leavevmode
2112\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2113
2114\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{options} - Options
2115
2116\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache handle
2117
2118\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_creds} - Input credentials
2119
2120\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out\_creds} - Output updated credentials
2121
2122\end{description}\end{quote}
2123\begin{quote}\begin{description}
2124\item[{retval}] \leavevmode\begin{itemize}
2125\item {}
21260   Success
2127
2128\end{itemize}
2129
2130\item[{return}] \leavevmode\begin{itemize}
2131\item {}
2132Kerberos error codes
2133
2134\end{itemize}
2135
2136\end{description}\end{quote}
2137
2138Use \sphinxstyleemphasis{ccache} or a TGS exchange to get a service ticket matching \sphinxstyleemphasis{in\_creds} .
2139
2140Valid values for \sphinxstyleemphasis{options} are:
2141\begin{quote}
2142\begin{itemize}
2143\item {}
2144{\hyperref[\detokenize{appdev/refs/macros/KRB5_GC_CACHED:KRB5_GC_CACHED}]{\sphinxcrossref{\sphinxcode{KRB5\_GC\_CACHED}}}} Search only credential cache for the ticket
2145
2146\item {}
2147{\hyperref[\detokenize{appdev/refs/macros/KRB5_GC_USER_USER:KRB5_GC_USER_USER}]{\sphinxcrossref{\sphinxcode{KRB5\_GC\_USER\_USER}}}} Return a user to user authentication ticket
2148
2149\end{itemize}
2150
2151\sphinxstyleemphasis{in\_creds} must be non-null. \sphinxstyleemphasis{in\_creds-\textgreater{}client} and \sphinxstyleemphasis{in\_creds-\textgreater{}server} must be filled in to specify the client and the server respectively. If any authorization data needs to be requested for the service ticket (such as restrictions on how the ticket can be used), specify it in \sphinxstyleemphasis{in\_creds-\textgreater{}authdata} ; otherwise set \sphinxstyleemphasis{in\_creds-\textgreater{}authdata} to NULL. The session key type is specified in \sphinxstyleemphasis{in\_creds-\textgreater{}keyblock.enctype} , if it is nonzero.
2152\end{quote}
2153
2154The expiration date is specified in \sphinxstyleemphasis{in\_creds-\textgreater{}times.endtime} . The KDC may return tickets with an earlier expiration date. If \sphinxstyleemphasis{in\_creds-\textgreater{}times.endtime} is set to 0, the latest possible expiration date will be requested.
2155
2156Any returned ticket and intermediate ticket-granting tickets are stored in \sphinxstyleemphasis{ccache} .
2157
2158Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_creds:c.krb5_free_creds}]{\sphinxcrossref{\sphinxcode{krb5\_free\_creds()}}}} to free \sphinxstyleemphasis{out\_creds} when it is no longer needed.
2159
2160
2161\subsubsection{krb5\_get\_fallback\_host\_realm}
2162\label{\detokenize{appdev/refs/api/krb5_get_fallback_host_realm:krb5-get-fallback-host-realm}}\label{\detokenize{appdev/refs/api/krb5_get_fallback_host_realm::doc}}\index{krb5\_get\_fallback\_host\_realm (C function)}
2163
2164\begin{fulllineitems}
2165\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_fallback_host_realm:c.krb5_get_fallback_host_realm}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_fallback\_host\_realm}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ hdata}, char ***\sphinxstyleemphasis{ realmsp}}{}
2166\end{fulllineitems}
2167
2168\begin{quote}\begin{description}
2169\item[{param}] \leavevmode
2170\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2171
2172\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{hdata} - Host name (or NULL)
2173
2174\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realmsp} - Null-terminated list of realm names
2175
2176\end{description}\end{quote}
2177
2178Fill in \sphinxstyleemphasis{realmsp} with a pointer to a null-terminated list of realm names obtained through heuristics or insecure resolution methods which have lower priority than KDC referrals.
2179
2180If \sphinxstyleemphasis{host} is NULL, the local host’s realms are determined.
2181
2182Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_host_realm:c.krb5_free_host_realm}]{\sphinxcrossref{\sphinxcode{krb5\_free\_host\_realm()}}}} to release \sphinxstyleemphasis{realmsp} when it is no longer needed.
2183
2184
2185\subsubsection{krb5\_get\_init\_creds\_keytab -  Get initial credentials using a key table.}
2186\label{\detokenize{appdev/refs/api/krb5_get_init_creds_keytab:krb5-get-init-creds-keytab-get-initial-credentials-using-a-key-table}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_keytab::doc}}\index{krb5\_get\_init\_creds\_keytab (C function)}
2187
2188\begin{fulllineitems}
2189\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_keytab:c.krb5_get_init_creds_keytab}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_keytab}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ client}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ arg\_keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{krb5\_deltat}}}\sphinxstyleemphasis{ start\_time}, const char *\sphinxstyleemphasis{ in\_tkt\_service}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ k5\_gic\_options}}{}
2190\end{fulllineitems}
2191
2192\begin{quote}\begin{description}
2193\item[{param}] \leavevmode
2194\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2195
2196\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - New credentials
2197
2198\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal
2199
2200\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{arg\_keytab} - Key table handle
2201
2202\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{start\_time} - Time when ticket becomes valid (0 for now)
2203
2204\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_tkt\_service} - Service name of initial credentials (or NULL)
2205
2206\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k5\_gic\_options} - Initial credential options
2207
2208\end{description}\end{quote}
2209\begin{quote}\begin{description}
2210\item[{retval}] \leavevmode\begin{itemize}
2211\item {}
22120   Success
2213
2214\end{itemize}
2215
2216\item[{return}] \leavevmode\begin{itemize}
2217\item {}
2218Kerberos error codes
2219
2220\end{itemize}
2221
2222\end{description}\end{quote}
2223
2224This function requests KDC for an initial credentials for \sphinxstyleemphasis{client} using a client key stored in \sphinxstyleemphasis{arg\_keytab} . If \sphinxstyleemphasis{in\_tkt\_service} is specified, it is parsed as a principal name (with the realm ignored) and used as the service principal for the request; otherwise the ticket-granting service is used.
2225
2226
2227\subsubsection{krb5\_get\_init\_creds\_opt\_alloc -  Allocate a new initial credential options structure.}
2228\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_alloc:krb5-get-init-creds-opt-alloc-allocate-a-new-initial-credential-options-structure}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_alloc::doc}}\index{krb5\_get\_init\_creds\_opt\_alloc (C function)}
2229
2230\begin{fulllineitems}
2231\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_alloc:c.krb5_get_init_creds_opt_alloc}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_alloc}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} **\sphinxstyleemphasis{ opt}}{}
2232\end{fulllineitems}
2233
2234\begin{quote}\begin{description}
2235\item[{param}] \leavevmode
2236\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2237
2238\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{opt} - New options structure
2239
2240\end{description}\end{quote}
2241\begin{quote}\begin{description}
2242\item[{retval}] \leavevmode\begin{itemize}
2243\item {}
22440   - Success; Kerberos errors otherwise.
2245
2246\end{itemize}
2247
2248\end{description}\end{quote}
2249
2250This function is the preferred way to create an options structure for getting initial credentials, and is required to make use of certain options. Use {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_free:c.krb5_get_init_creds_opt_free}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_free()}}}} to free \sphinxstyleemphasis{opt} when it is no longer needed.
2251
2252
2253\subsubsection{krb5\_get\_init\_creds\_opt\_free -  Free initial credential options.}
2254\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_free::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_free:krb5-get-init-creds-opt-free-free-initial-credential-options}}\index{krb5\_get\_init\_creds\_opt\_free (C function)}
2255
2256\begin{fulllineitems}
2257\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_free:c.krb5_get_init_creds_opt_free}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_free}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}}{}
2258\end{fulllineitems}
2259
2260\begin{quote}\begin{description}
2261\item[{param}] \leavevmode
2262\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2263
2264\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure to free
2265
2266\end{description}\end{quote}
2267
2268
2269\sphinxstrong{See also:}
2270
2271
2272{\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_alloc:c.krb5_get_init_creds_opt_alloc}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_alloc()}}}}
2273
2274
2275
2276
2277\subsubsection{krb5\_get\_init\_creds\_opt\_get\_fast\_flags -  Retrieve FAST flags from initial credential options.}
2278\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_get_fast_flags::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_get_fast_flags:krb5-get-init-creds-opt-get-fast-flags-retrieve-fast-flags-from-initial-credential-options}}\index{krb5\_get\_init\_creds\_opt\_get\_fast\_flags (C function)}
2279
2280\begin{fulllineitems}
2281\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_get_fast_flags:c.krb5_get_init_creds_opt_get_fast_flags}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_get\_fast\_flags}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}} *\sphinxstyleemphasis{ out\_flags}}{}
2282\end{fulllineitems}
2283
2284\begin{quote}\begin{description}
2285\item[{param}] \leavevmode
2286\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2287
2288\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options
2289
2290\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out\_flags} - FAST flags
2291
2292\end{description}\end{quote}
2293\begin{quote}\begin{description}
2294\item[{retval}] \leavevmode\begin{itemize}
2295\item {}
22960   - Success; Kerberos errors otherwise.
2297
2298\end{itemize}
2299
2300\end{description}\end{quote}
2301
2302
2303\subsubsection{krb5\_get\_init\_creds\_opt\_set\_address\_list -  Set address restrictions in initial credential options.}
2304\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_address_list:krb5-get-init-creds-opt-set-address-list-set-address-restrictions-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_address_list::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_address\_list (C function)}
2305
2306\begin{fulllineitems}
2307\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_address_list:c.krb5_get_init_creds_opt_set_address_list}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_address\_list}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} **\sphinxstyleemphasis{ addresses}}{}
2308\end{fulllineitems}
2309
2310\begin{quote}\begin{description}
2311\item[{param}] \leavevmode
2312\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2313
2314\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addresses} - Null-terminated array of addresses
2315
2316\end{description}\end{quote}
2317
2318
2319\subsubsection{krb5\_get\_init\_creds\_opt\_set\_anonymous -  Set or unset the anonymous flag in initial credential options.}
2320\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_anonymous:krb5-get-init-creds-opt-set-anonymous-set-or-unset-the-anonymous-flag-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_anonymous::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_anonymous (C function)}
2321
2322\begin{fulllineitems}
2323\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_anonymous:c.krb5_get_init_creds_opt_set_anonymous}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_anonymous}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, int\sphinxstyleemphasis{ anonymous}}{}
2324\end{fulllineitems}
2325
2326\begin{quote}\begin{description}
2327\item[{param}] \leavevmode
2328\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2329
2330\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{anonymous} - Whether to make an anonymous request
2331
2332\end{description}\end{quote}
2333
2334This function may be used to request anonymous credentials from the KDC by setting \sphinxstyleemphasis{anonymous} to non-zero. Note that anonymous credentials are only a request; clients must verify that credentials are anonymous if that is a requirement.
2335
2336
2337\subsubsection{krb5\_get\_init\_creds\_opt\_set\_canonicalize -  Set or unset the canonicalize flag in initial credential options.}
2338\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_canonicalize:krb5-get-init-creds-opt-set-canonicalize-set-or-unset-the-canonicalize-flag-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_canonicalize::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_canonicalize (C function)}
2339
2340\begin{fulllineitems}
2341\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_canonicalize:c.krb5_get_init_creds_opt_set_canonicalize}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_canonicalize}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, int\sphinxstyleemphasis{ canonicalize}}{}
2342\end{fulllineitems}
2343
2344\begin{quote}\begin{description}
2345\item[{param}] \leavevmode
2346\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2347
2348\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{canonicalize} - Whether to canonicalize client principal
2349
2350\end{description}\end{quote}
2351
2352
2353\subsubsection{krb5\_get\_init\_creds\_opt\_set\_change\_password\_prompt -  Set or unset change-password-prompt flag in initial credential options.}
2354\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_change_password_prompt::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_change_password_prompt:krb5-get-init-creds-opt-set-change-password-prompt-set-or-unset-change-password-prompt-flag-in-initial-credential-options}}\index{krb5\_get\_init\_creds\_opt\_set\_change\_password\_prompt (C function)}
2355
2356\begin{fulllineitems}
2357\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_change_password_prompt:c.krb5_get_init_creds_opt_set_change_password_prompt}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_change\_password\_prompt}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, int\sphinxstyleemphasis{ prompt}}{}
2358\end{fulllineitems}
2359
2360\begin{quote}\begin{description}
2361\item[{param}] \leavevmode
2362\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2363
2364\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompt} - Whether to prompt to change password
2365
2366\end{description}\end{quote}
2367
2368This flag is on by default. It controls whether {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_password()}}}} will react to an expired-password error by prompting for a new password and attempting to change the old one.
2369
2370
2371\subsubsection{krb5\_get\_init\_creds\_opt\_set\_etype\_list -  Set allowable encryption types in initial credential options.}
2372\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_etype_list:krb5-get-init-creds-opt-set-etype-list-set-allowable-encryption-types-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_etype_list::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_etype\_list (C function)}
2373
2374\begin{fulllineitems}
2375\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_etype_list:c.krb5_get_init_creds_opt_set_etype_list}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_etype\_list}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} *\sphinxstyleemphasis{ etype\_list}, int\sphinxstyleemphasis{ etype\_list\_length}}{}
2376\end{fulllineitems}
2377
2378\begin{quote}\begin{description}
2379\item[{param}] \leavevmode
2380\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2381
2382\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{etype\_list} - Array of encryption types
2383
2384\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{etype\_list\_length} - Length of \sphinxstyleemphasis{etype\_list}
2385
2386\end{description}\end{quote}
2387
2388
2389\subsubsection{krb5\_get\_init\_creds\_opt\_set\_expire\_callback -  Set an expiration callback in initial credential options.}
2390\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_expire_callback::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_expire_callback:krb5-get-init-creds-opt-set-expire-callback-set-an-expiration-callback-in-initial-credential-options}}\index{krb5\_get\_init\_creds\_opt\_set\_expire\_callback (C function)}
2391
2392\begin{fulllineitems}
2393\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_expire_callback:c.krb5_get_init_creds_opt_set_expire_callback}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_expire\_callback}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_expire_callback_func:c.krb5_expire_callback_func}]{\sphinxcrossref{krb5\_expire\_callback\_func}}}\sphinxstyleemphasis{ cb}, void *\sphinxstyleemphasis{ data}}{}
2394\end{fulllineitems}
2395
2396\begin{quote}\begin{description}
2397\item[{param}] \leavevmode
2398\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2399
2400\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2401
2402\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cb} - Callback function
2403
2404\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Callback argument
2405
2406\end{description}\end{quote}
2407
2408Set a callback to receive password and account expiration times.
2409\begin{quote}
2410
2411\sphinxstyleemphasis{cb} will be invoked if and only if credentials are successfully acquired. The callback will receive the \sphinxstyleemphasis{context} from the calling function and the \sphinxstyleemphasis{data} argument supplied with this API. The remaining arguments should be interpreted as follows:
2412\end{quote}
2413
2414If \sphinxstyleemphasis{is\_last\_req} is true, then the KDC reply contained last-req entries which unambiguously indicated the password expiration, account expiration, or both. (If either value was not present, the corresponding argument will be 0.) Furthermore, a non-zero \sphinxstyleemphasis{password\_expiration} should be taken as a suggestion from the KDC that a warning be displayed.
2415
2416If \sphinxstyleemphasis{is\_last\_req} is false, then \sphinxstyleemphasis{account\_expiration} will be 0 and \sphinxstyleemphasis{password\_expiration} will contain the expiration time of either the password or account, or 0 if no expiration time was indicated in the KDC reply. The callback should independently decide whether to display a password expiration warning.
2417
2418Note that \sphinxstyleemphasis{cb} may be invoked even if credentials are being acquired for the kadmin/changepw service in order to change the password. It is the caller’s responsibility to avoid displaying a password expiry warning in this case.
2419
2420\begin{sphinxadmonition}{warning}{Warning:}
2421Setting an expire callback with this API will cause {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_password()}}}} not to send password expiry warnings to the prompter, as it ordinarily may.
2422\end{sphinxadmonition}
2423
2424\begin{sphinxadmonition}{note}{Note:}
2425New in 1.9
2426\end{sphinxadmonition}
2427
2428
2429\subsubsection{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache -  Set FAST armor cache in initial credential options.}
2430\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache:krb5-get-init-creds-opt-set-fast-ccache-set-fast-armor-cache-in-initial-credential-options}}\index{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache (C function)}
2431
2432\begin{fulllineitems}
2433\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache:c.krb5_get_init_creds_opt_set_fast_ccache}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}}{}
2434\end{fulllineitems}
2435
2436\begin{quote}\begin{description}
2437\item[{param}] \leavevmode
2438\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2439
2440\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options
2441
2442\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache handle
2443
2444\end{description}\end{quote}
2445
2446This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache_name:c.krb5_get_init_creds_opt_set_fast_ccache_name}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache\_name()}}}} , but uses a credential cache handle instead of a name.
2447
2448\begin{sphinxadmonition}{note}{Note:}
2449New in 1.9
2450\end{sphinxadmonition}
2451
2452
2453\subsubsection{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache\_name -  Set location of FAST armor ccache in initial credential options.}
2454\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache_name:krb5-get-init-creds-opt-set-fast-ccache-name-set-location-of-fast-armor-ccache-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache_name::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache\_name (C function)}
2455
2456\begin{fulllineitems}
2457\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache_name:c.krb5_get_init_creds_opt_set_fast_ccache_name}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, const char *\sphinxstyleemphasis{ fast\_ccache\_name}}{}
2458\end{fulllineitems}
2459
2460\begin{quote}\begin{description}
2461\item[{param}] \leavevmode
2462\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2463
2464\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options
2465
2466\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fast\_ccache\_name} - Credential cache name
2467
2468\end{description}\end{quote}
2469
2470Sets the location of a credential cache containing an armor ticket to protect an initial credential exchange using the FAST protocol extension.
2471
2472In version 1.7, setting an armor ccache requires that FAST be used for the exchange. In version 1.8 or later, setting the armor ccache causes FAST to be used if the KDC supports it; {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_flags:c.krb5_get_init_creds_opt_set_fast_flags}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_set\_fast\_flags()}}}} must be used to require that FAST be used.
2473
2474
2475\subsubsection{krb5\_get\_init\_creds\_opt\_set\_fast\_flags -  Set FAST flags in initial credential options.}
2476\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_flags:krb5-get-init-creds-opt-set-fast-flags-set-fast-flags-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_flags::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_fast\_flags (C function)}
2477
2478\begin{fulllineitems}
2479\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_flags:c.krb5_get_init_creds_opt_set_fast_flags}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_fast\_flags}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ flags}}{}
2480\end{fulllineitems}
2481
2482\begin{quote}\begin{description}
2483\item[{param}] \leavevmode
2484\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2485
2486\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options
2487
2488\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - FAST flags
2489
2490\end{description}\end{quote}
2491\begin{quote}\begin{description}
2492\item[{retval}] \leavevmode\begin{itemize}
2493\item {}
24940   - Success; Kerberos errors otherwise.
2495
2496\end{itemize}
2497
2498\end{description}\end{quote}
2499
2500The following flag values are valid:
2501\begin{itemize}
2502\item {}
2503{\hyperref[\detokenize{appdev/refs/macros/KRB5_FAST_REQUIRED:KRB5_FAST_REQUIRED}]{\sphinxcrossref{\sphinxcode{KRB5\_FAST\_REQUIRED}}}} - Require FAST to be used
2504
2505\end{itemize}
2506
2507
2508\subsubsection{krb5\_get\_init\_creds\_opt\_set\_forwardable -  Set or unset the forwardable flag in initial credential options.}
2509\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_forwardable:krb5-get-init-creds-opt-set-forwardable-set-or-unset-the-forwardable-flag-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_forwardable::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_forwardable (C function)}
2510
2511\begin{fulllineitems}
2512\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_forwardable:c.krb5_get_init_creds_opt_set_forwardable}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_forwardable}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, int\sphinxstyleemphasis{ forwardable}}{}
2513\end{fulllineitems}
2514
2515\begin{quote}\begin{description}
2516\item[{param}] \leavevmode
2517\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2518
2519\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{forwardable} - Whether credentials should be forwardable
2520
2521\end{description}\end{quote}
2522
2523
2524\subsubsection{krb5\_get\_init\_creds\_opt\_set\_in\_ccache -  Set an input credential cache in initial credential options.}
2525\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_in_ccache::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_in_ccache:krb5-get-init-creds-opt-set-in-ccache-set-an-input-credential-cache-in-initial-credential-options}}\index{krb5\_get\_init\_creds\_opt\_set\_in\_ccache (C function)}
2526
2527\begin{fulllineitems}
2528\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_in_ccache:c.krb5_get_init_creds_opt_set_in_ccache}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_in\_ccache}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}}{}
2529\end{fulllineitems}
2530
2531\begin{quote}\begin{description}
2532\item[{param}] \leavevmode
2533\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2534
2535\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options
2536
2537\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache handle
2538
2539\end{description}\end{quote}
2540
2541If an input credential cache is set, then the krb5\_get\_init\_creds family of APIs will read settings from it. Setting an input ccache is desirable when the application wishes to perform authentication in the same way (using the same preauthentication mechanisms, and making the same non-security- sensitive choices) as the previous authentication attempt, which stored information in the passed-in ccache.
2542
2543\begin{sphinxadmonition}{note}{Note:}
2544New in 1.11
2545\end{sphinxadmonition}
2546
2547
2548\subsubsection{krb5\_get\_init\_creds\_opt\_set\_out\_ccache -  Set an output credential cache in initial credential options.}
2549\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_out_ccache:krb5-get-init-creds-opt-set-out-ccache-set-an-output-credential-cache-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_out_ccache::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_out\_ccache (C function)}
2550
2551\begin{fulllineitems}
2552\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_out_ccache:c.krb5_get_init_creds_opt_set_out_ccache}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_out\_ccache}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}}{}
2553\end{fulllineitems}
2554
2555\begin{quote}\begin{description}
2556\item[{param}] \leavevmode
2557\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2558
2559\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options
2560
2561\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache handle
2562
2563\end{description}\end{quote}
2564
2565If an output credential cache is set, then the krb5\_get\_init\_creds family of APIs will write credentials to it. Setting an output ccache is desirable both because it simplifies calling code and because it permits the krb5\_get\_init\_creds APIs to write out configuration information about the realm to the ccache.
2566
2567
2568\subsubsection{krb5\_get\_init\_creds\_opt\_set\_pa -  Supply options for preauthentication in initial credential options.}
2569\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_pa::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_pa:krb5-get-init-creds-opt-set-pa-supply-options-for-preauthentication-in-initial-credential-options}}\index{krb5\_get\_init\_creds\_opt\_set\_pa (C function)}
2570
2571\begin{fulllineitems}
2572\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_pa:c.krb5_get_init_creds_opt_set_pa}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_pa}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, const char *\sphinxstyleemphasis{ attr}, const char *\sphinxstyleemphasis{ value}}{}
2573\end{fulllineitems}
2574
2575\begin{quote}\begin{description}
2576\item[{param}] \leavevmode
2577\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2578
2579\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2580
2581\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{attr} - Preauthentication option name
2582
2583\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{value} - Preauthentication option value
2584
2585\end{description}\end{quote}
2586
2587This function allows the caller to supply options for preauthentication. The values of \sphinxstyleemphasis{attr} and \sphinxstyleemphasis{value} are supplied to each preauthentication module available within \sphinxstyleemphasis{context} .
2588
2589
2590\subsubsection{krb5\_get\_init\_creds\_opt\_set\_pac\_request -  Ask the KDC to include or not include a PAC in the ticket.}
2591\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_pac_request:krb5-get-init-creds-opt-set-pac-request-ask-the-kdc-to-include-or-not-include-a-pac-in-the-ticket}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_pac_request::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_pac\_request (C function)}
2592
2593\begin{fulllineitems}
2594\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_pac_request:c.krb5_get_init_creds_opt_set_pac_request}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_pac\_request}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}}\sphinxstyleemphasis{ req\_pac}}{}
2595\end{fulllineitems}
2596
2597\begin{quote}\begin{description}
2598\item[{param}] \leavevmode
2599\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2600
2601\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2602
2603\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{req\_pac} - Whether to request a PAC or not
2604
2605\end{description}\end{quote}
2606
2607If this option is set, the AS request will include a PAC-REQUEST pa-data item explicitly asking the KDC to either include or not include a privilege attribute certificate in the ticket authorization data. By default, no request is made; typically the KDC will default to including a PAC if it supports them.
2608
2609\begin{sphinxadmonition}{note}{Note:}
2610New in 1.15
2611\end{sphinxadmonition}
2612
2613
2614\subsubsection{krb5\_get\_init\_creds\_opt\_set\_preauth\_list -  Set preauthentication types in initial credential options.}
2615\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_preauth_list:krb5-get-init-creds-opt-set-preauth-list-set-preauthentication-types-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_preauth_list::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_preauth\_list (C function)}
2616
2617\begin{fulllineitems}
2618\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_preauth_list:c.krb5_get_init_creds_opt_set_preauth_list}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_preauth\_list}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}]{\sphinxcrossref{krb5\_preauthtype}}} *\sphinxstyleemphasis{ preauth\_list}, int\sphinxstyleemphasis{ preauth\_list\_length}}{}
2619\end{fulllineitems}
2620
2621\begin{quote}\begin{description}
2622\item[{param}] \leavevmode
2623\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2624
2625\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{preauth\_list} - Array of preauthentication types
2626
2627\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{preauth\_list\_length} - Length of \sphinxstyleemphasis{preauth\_list}
2628
2629\end{description}\end{quote}
2630
2631This function can be used to perform optimistic preauthentication when getting initial credentials, in combination with {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_salt:c.krb5_get_init_creds_opt_set_salt}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_set\_salt()}}}} and {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_pa:c.krb5_get_init_creds_opt_set_pa}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_set\_pa()}}}} .
2632
2633
2634\subsubsection{krb5\_get\_init\_creds\_opt\_set\_proxiable -  Set or unset the proxiable flag in initial credential options.}
2635\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_proxiable::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_proxiable:krb5-get-init-creds-opt-set-proxiable-set-or-unset-the-proxiable-flag-in-initial-credential-options}}\index{krb5\_get\_init\_creds\_opt\_set\_proxiable (C function)}
2636
2637\begin{fulllineitems}
2638\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_proxiable:c.krb5_get_init_creds_opt_set_proxiable}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_proxiable}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, int\sphinxstyleemphasis{ proxiable}}{}
2639\end{fulllineitems}
2640
2641\begin{quote}\begin{description}
2642\item[{param}] \leavevmode
2643\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2644
2645\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{proxiable} - Whether credentials should be proxiable
2646
2647\end{description}\end{quote}
2648
2649
2650\subsubsection{krb5\_get\_init\_creds\_opt\_set\_renew\_life -  Set the ticket renewal lifetime in initial credential options.}
2651\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_renew_life::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_renew_life:krb5-get-init-creds-opt-set-renew-life-set-the-ticket-renewal-lifetime-in-initial-credential-options}}\index{krb5\_get\_init\_creds\_opt\_set\_renew\_life (C function)}
2652
2653\begin{fulllineitems}
2654\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_renew_life:c.krb5_get_init_creds_opt_set_renew_life}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_renew\_life}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{krb5\_deltat}}}\sphinxstyleemphasis{ renew\_life}}{}
2655\end{fulllineitems}
2656
2657\begin{quote}\begin{description}
2658\item[{param}] \leavevmode
2659\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Pointer to \sphinxstyleemphasis{options} field
2660
2661\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{renew\_life} - Ticket renewal lifetime
2662
2663\end{description}\end{quote}
2664
2665
2666\subsubsection{krb5\_get\_init\_creds\_opt\_set\_responder -  Set the responder function in initial credential options.}
2667\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_responder:krb5-get-init-creds-opt-set-responder-set-the-responder-function-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_responder::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_responder (C function)}
2668
2669\begin{fulllineitems}
2670\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_responder:c.krb5_get_init_creds_opt_set_responder}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_responder}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_fn:c.krb5_responder_fn}]{\sphinxcrossref{krb5\_responder\_fn}}}\sphinxstyleemphasis{ responder}, void *\sphinxstyleemphasis{ data}}{}
2671\end{fulllineitems}
2672
2673\begin{quote}\begin{description}
2674\item[{param}] \leavevmode
2675\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2676
2677\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2678
2679\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{responder} - Responder function
2680
2681\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Responder data argument
2682
2683\end{description}\end{quote}
2684
2685\begin{sphinxadmonition}{note}{Note:}
2686New in 1.11
2687\end{sphinxadmonition}
2688
2689
2690\subsubsection{krb5\_get\_init\_creds\_opt\_set\_salt -  Set salt for optimistic preauthentication in initial credential options.}
2691\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_salt:krb5-get-init-creds-opt-set-salt-set-salt-for-optimistic-preauthentication-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_salt::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_salt (C function)}
2692
2693\begin{fulllineitems}
2694\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_salt:c.krb5_get_init_creds_opt_set_salt}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_salt}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ salt}}{}
2695\end{fulllineitems}
2696
2697\begin{quote}\begin{description}
2698\item[{param}] \leavevmode
2699\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2700
2701\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{salt} - Salt data
2702
2703\end{description}\end{quote}
2704
2705When getting initial credentials with a password, a salt string it used to convert the password to a key. Normally this salt is obtained from the first KDC reply, but when performing optimistic preauthentication, the client may need to supply the salt string with this function.
2706
2707
2708\subsubsection{krb5\_get\_init\_creds\_opt\_set\_tkt\_life -  Set the ticket lifetime in initial credential options.}
2709\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_tkt_life:krb5-get-init-creds-opt-set-tkt-life-set-the-ticket-lifetime-in-initial-credential-options}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_tkt_life::doc}}\index{krb5\_get\_init\_creds\_opt\_set\_tkt\_life (C function)}
2710
2711\begin{fulllineitems}
2712\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_tkt_life:c.krb5_get_init_creds_opt_set_tkt_life}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_set\_tkt\_life}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{krb5\_deltat}}}\sphinxstyleemphasis{ tkt\_life}}{}
2713\end{fulllineitems}
2714
2715\begin{quote}\begin{description}
2716\item[{param}] \leavevmode
2717\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2718
2719\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{tkt\_life} - Ticket lifetime
2720
2721\end{description}\end{quote}
2722
2723
2724\subsubsection{krb5\_get\_init\_creds\_password -  Get initial credentials using a password.}
2725\label{\detokenize{appdev/refs/api/krb5_get_init_creds_password::doc}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_password:krb5-get-init-creds-password-get-initial-credentials-using-a-password}}\index{krb5\_get\_init\_creds\_password (C function)}
2726
2727\begin{fulllineitems}
2728\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_init\_creds\_password}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ client}, const char *\sphinxstyleemphasis{ password}, {\hyperref[\detokenize{appdev/refs/types/krb5_prompter_fct:c.krb5_prompter_fct}]{\sphinxcrossref{krb5\_prompter\_fct}}}\sphinxstyleemphasis{ prompter}, void *\sphinxstyleemphasis{ data}, {\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{krb5\_deltat}}}\sphinxstyleemphasis{ start\_time}, const char *\sphinxstyleemphasis{ in\_tkt\_service}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ k5\_gic\_options}}{}
2729\end{fulllineitems}
2730
2731\begin{quote}\begin{description}
2732\item[{param}] \leavevmode
2733\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2734
2735\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - New credentials
2736
2737\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal
2738
2739\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{password} - Password (or NULL)
2740
2741\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompter} - Prompter function
2742
2743\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Prompter callback data
2744
2745\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{start\_time} - Time when ticket becomes valid (0 for now)
2746
2747\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_tkt\_service} - Service name of initial credentials (or NULL)
2748
2749\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k5\_gic\_options} - Initial credential options
2750
2751\end{description}\end{quote}
2752\begin{quote}\begin{description}
2753\item[{retval}] \leavevmode\begin{itemize}
2754\item {}
27550   Success
2756
2757\item {}
2758EINVAL   Invalid argument
2759
2760\item {}
2761KRB5\_KDC\_UNREACH   Cannot contact any KDC for requested realm
2762
2763\item {}
2764KRB5\_PREAUTH\_FAILED   Generic Pre-athentication failure
2765
2766\item {}
2767KRB5\_LIBOS\_PWDINTR   Password read interrupted
2768
2769\item {}
2770KRB5\_REALM\_CANT\_RESOLVE   Cannot resolve network address for KDC in requested realm
2771
2772\item {}
2773KRB5KDC\_ERR\_KEY\_EXP   Password has expired
2774
2775\item {}
2776KRB5\_LIBOS\_BADPWDMATCH   Password mismatch
2777
2778\item {}
2779KRB5\_CHPW\_PWDNULL   New password cannot be zero length
2780
2781\item {}
2782KRB5\_CHPW\_FAIL   Password change failed
2783
2784\end{itemize}
2785
2786\item[{return}] \leavevmode\begin{itemize}
2787\item {}
2788Kerberos error codes
2789
2790\end{itemize}
2791
2792\end{description}\end{quote}
2793
2794This function requests KDC for an initial credentials for \sphinxstyleemphasis{client} using \sphinxstyleemphasis{password} . If \sphinxstyleemphasis{password} is NULL, a password will be prompted for using \sphinxstyleemphasis{prompter} if necessary. If \sphinxstyleemphasis{in\_tkt\_service} is specified, it is parsed as a principal name (with the realm ignored) and used as the service principal for the request; otherwise the ticket-granting service is used.
2795
2796
2797\subsubsection{krb5\_get\_profile -  Retrieve configuration profile from the context.}
2798\label{\detokenize{appdev/refs/api/krb5_get_profile::doc}}\label{\detokenize{appdev/refs/api/krb5_get_profile:krb5-get-profile-retrieve-configuration-profile-from-the-context}}\index{krb5\_get\_profile (C function)}
2799
2800\begin{fulllineitems}
2801\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_profile:c.krb5_get_profile}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_profile}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, struct \_profile\_t **\sphinxstyleemphasis{ profile}}{}
2802\end{fulllineitems}
2803
2804\begin{quote}\begin{description}
2805\item[{param}] \leavevmode
2806\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2807
2808\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{profile} - Pointer to data read from a configuration file
2809
2810\end{description}\end{quote}
2811\begin{quote}\begin{description}
2812\item[{retval}] \leavevmode\begin{itemize}
2813\item {}
28140   Success
2815
2816\end{itemize}
2817
2818\item[{return}] \leavevmode\begin{itemize}
2819\item {}
2820Kerberos error codes
2821
2822\end{itemize}
2823
2824\end{description}\end{quote}
2825
2826This function creates a new \sphinxstyleemphasis{profile} object that reflects profile in the supplied \sphinxstyleemphasis{context} .
2827
2828The \sphinxstyleemphasis{profile} object may be freed with profile\_release() function. See profile.h and profile API for more details.
2829
2830
2831\subsubsection{krb5\_get\_prompt\_types -  Get prompt types array from a context.}
2832\label{\detokenize{appdev/refs/api/krb5_get_prompt_types::doc}}\label{\detokenize{appdev/refs/api/krb5_get_prompt_types:krb5-get-prompt-types-get-prompt-types-array-from-a-context}}\index{krb5\_get\_prompt\_types (C function)}
2833
2834\begin{fulllineitems}
2835\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_prompt_types:c.krb5_get_prompt_types}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_prompt_type:c.krb5_prompt_type}]{\sphinxcrossref{krb5\_prompt\_type}}} * \sphinxbfcode{krb5\_get\_prompt\_types}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}}{}
2836\end{fulllineitems}
2837
2838\begin{quote}\begin{description}
2839\item[{param}] \leavevmode
2840\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2841
2842\end{description}\end{quote}
2843\begin{quote}\begin{description}
2844\item[{return}] \leavevmode\begin{itemize}
2845\item {}
2846Pointer to an array of prompt types corresponding to the prompter’s prompts arguments. Each type has one of the following values: KRB5\_PROMPT\_TYPE\_PASSWORD KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD\_AGAIN KRB5\_PROMPT\_TYPE\_PREAUTH
2847
2848\end{itemize}
2849
2850\end{description}\end{quote}
2851
2852
2853\subsubsection{krb5\_get\_renewed\_creds -  Get renewed credential from KDC using an existing credential.}
2854\label{\detokenize{appdev/refs/api/krb5_get_renewed_creds:krb5-get-renewed-creds-get-renewed-credential-from-kdc-using-an-existing-credential}}\label{\detokenize{appdev/refs/api/krb5_get_renewed_creds::doc}}\index{krb5\_get\_renewed\_creds (C function)}
2855
2856\begin{fulllineitems}
2857\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_renewed_creds:c.krb5_get_renewed_creds}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_renewed\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ client}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, const char *\sphinxstyleemphasis{ in\_tkt\_service}}{}
2858\end{fulllineitems}
2859
2860\begin{quote}\begin{description}
2861\item[{param}] \leavevmode
2862\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2863
2864\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - Renewed credentials
2865
2866\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal name
2867
2868\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache
2869
2870\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_tkt\_service} - Server principal string (or NULL)
2871
2872\end{description}\end{quote}
2873\begin{quote}\begin{description}
2874\item[{retval}] \leavevmode\begin{itemize}
2875\item {}
28760   Success
2877
2878\end{itemize}
2879
2880\item[{return}] \leavevmode\begin{itemize}
2881\item {}
2882Kerberos error codes
2883
2884\end{itemize}
2885
2886\end{description}\end{quote}
2887
2888This function gets a renewed credential using an existing one from \sphinxstyleemphasis{ccache} . If \sphinxstyleemphasis{in\_tkt\_service} is specified, it is parsed (with the realm part ignored) and used as the server principal of the credential; otherwise, the ticket-granting service is used.
2889
2890If successful, the renewed credential is placed in \sphinxstyleemphasis{creds} .
2891
2892
2893\subsubsection{krb5\_get\_validated\_creds -  Get validated credentials from the KDC.}
2894\label{\detokenize{appdev/refs/api/krb5_get_validated_creds:krb5-get-validated-creds-get-validated-credentials-from-the-kdc}}\label{\detokenize{appdev/refs/api/krb5_get_validated_creds::doc}}\index{krb5\_get\_validated\_creds (C function)}
2895
2896\begin{fulllineitems}
2897\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_validated_creds:c.krb5_get_validated_creds}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_validated\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ client}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, const char *\sphinxstyleemphasis{ in\_tkt\_service}}{}
2898\end{fulllineitems}
2899
2900\begin{quote}\begin{description}
2901\item[{param}] \leavevmode
2902\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2903
2904\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - Validated credentials
2905
2906\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal name
2907
2908\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache
2909
2910\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_tkt\_service} - Server principal string (or NULL)
2911
2912\end{description}\end{quote}
2913\begin{quote}\begin{description}
2914\item[{retval}] \leavevmode\begin{itemize}
2915\item {}
29160   Success
2917
2918\item {}
2919KRB5\_NO\_2ND\_TKT   Request missing second ticket
2920
2921\item {}
2922KRB5\_NO\_TKT\_SUPPLIED   Request did not supply a ticket
2923
2924\item {}
2925KRB5\_PRINC\_NOMATCH   Requested principal and ticket do not match
2926
2927\item {}
2928KRB5\_KDCREP\_MODIFIED   KDC reply did not match expectations
2929
2930\item {}
2931KRB5\_KDCREP\_SKEW   Clock skew too great in KDC reply
2932
2933\end{itemize}
2934
2935\item[{return}] \leavevmode\begin{itemize}
2936\item {}
2937Kerberos error codes
2938
2939\end{itemize}
2940
2941\end{description}\end{quote}
2942
2943This function gets a validated credential using a postdated credential from \sphinxstyleemphasis{ccache} . If \sphinxstyleemphasis{in\_tkt\_service} is specified, it is parsed (with the realm part ignored) and used as the server principal of the credential; otherwise, the ticket-granting service is used.
2944
2945If successful, the validated credential is placed in \sphinxstyleemphasis{creds} .
2946
2947
2948\subsubsection{krb5\_init\_context -  Create a krb5 library context.}
2949\label{\detokenize{appdev/refs/api/krb5_init_context:krb5-init-context-create-a-krb5-library-context}}\label{\detokenize{appdev/refs/api/krb5_init_context::doc}}\index{krb5\_init\_context (C function)}
2950
2951\begin{fulllineitems}
2952\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_context:c.krb5_init_context}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_context}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}} *\sphinxstyleemphasis{ context}}{}
2953\end{fulllineitems}
2954
2955\begin{quote}\begin{description}
2956\item[{param}] \leavevmode
2957\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{context} - Library context
2958
2959\end{description}\end{quote}
2960\begin{quote}\begin{description}
2961\item[{retval}] \leavevmode\begin{itemize}
2962\item {}
29630   Success
2964
2965\end{itemize}
2966
2967\item[{return}] \leavevmode\begin{itemize}
2968\item {}
2969Kerberos error codes
2970
2971\end{itemize}
2972
2973\end{description}\end{quote}
2974
2975The \sphinxstyleemphasis{context} must be released by calling {\hyperref[\detokenize{appdev/refs/api/krb5_free_context:c.krb5_free_context}]{\sphinxcrossref{\sphinxcode{krb5\_free\_context()}}}} when it is no longer needed.
2976
2977\begin{sphinxadmonition}{warning}{Warning:}
2978Any program or module that needs the Kerberos code to not trust the environment must use {\hyperref[\detokenize{appdev/refs/api/krb5_init_secure_context:c.krb5_init_secure_context}]{\sphinxcrossref{\sphinxcode{krb5\_init\_secure\_context()}}}} , or clean out the environment.
2979\end{sphinxadmonition}
2980
2981
2982\subsubsection{krb5\_init\_secure\_context -  Create a krb5 library context using only configuration files.}
2983\label{\detokenize{appdev/refs/api/krb5_init_secure_context::doc}}\label{\detokenize{appdev/refs/api/krb5_init_secure_context:krb5-init-secure-context-create-a-krb5-library-context-using-only-configuration-files}}\index{krb5\_init\_secure\_context (C function)}
2984
2985\begin{fulllineitems}
2986\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_secure_context:c.krb5_init_secure_context}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_secure\_context}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}} *\sphinxstyleemphasis{ context}}{}
2987\end{fulllineitems}
2988
2989\begin{quote}\begin{description}
2990\item[{param}] \leavevmode
2991\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{context} - Library context
2992
2993\end{description}\end{quote}
2994\begin{quote}\begin{description}
2995\item[{retval}] \leavevmode\begin{itemize}
2996\item {}
29970   Success
2998
2999\end{itemize}
3000
3001\item[{return}] \leavevmode\begin{itemize}
3002\item {}
3003Kerberos error codes
3004
3005\end{itemize}
3006
3007\end{description}\end{quote}
3008
3009Create a context structure, using only system configuration files. All information passed through the environment variables is ignored.
3010
3011The \sphinxstyleemphasis{context} must be released by calling {\hyperref[\detokenize{appdev/refs/api/krb5_free_context:c.krb5_free_context}]{\sphinxcrossref{\sphinxcode{krb5\_free\_context()}}}} when it is no longer needed.
3012
3013
3014\subsubsection{krb5\_is\_config\_principal -  Test whether a principal is a configuration principal.}
3015\label{\detokenize{appdev/refs/api/krb5_is_config_principal:krb5-is-config-principal-test-whether-a-principal-is-a-configuration-principal}}\label{\detokenize{appdev/refs/api/krb5_is_config_principal::doc}}\index{krb5\_is\_config\_principal (C function)}
3016
3017\begin{fulllineitems}
3018\phantomsection\label{\detokenize{appdev/refs/api/krb5_is_config_principal:c.krb5_is_config_principal}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_is\_config\_principal}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}}{}
3019\end{fulllineitems}
3020
3021\begin{quote}\begin{description}
3022\item[{param}] \leavevmode
3023\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3024
3025\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal to check
3026
3027\end{description}\end{quote}
3028\begin{quote}\begin{description}
3029\item[{return}] \leavevmode\begin{itemize}
3030\item {}
3031TRUE if the principal is a configuration principal (generated part of krb5\_cc\_set\_config() ); FALSE otherwise.
3032
3033\end{itemize}
3034
3035\end{description}\end{quote}
3036
3037
3038\subsubsection{krb5\_is\_thread\_safe -  Test whether the Kerberos library was built with multithread support.}
3039\label{\detokenize{appdev/refs/api/krb5_is_thread_safe::doc}}\label{\detokenize{appdev/refs/api/krb5_is_thread_safe:krb5-is-thread-safe-test-whether-the-kerberos-library-was-built-with-multithread-support}}\index{krb5\_is\_thread\_safe (C function)}
3040
3041\begin{fulllineitems}
3042\phantomsection\label{\detokenize{appdev/refs/api/krb5_is_thread_safe:c.krb5_is_thread_safe}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_is\_thread\_safe}}{void\sphinxstyleemphasis{ None}}{}
3043\end{fulllineitems}
3044
3045\begin{quote}\begin{description}
3046\item[{param}] \leavevmode
3047\sphinxstylestrong{None}
3048
3049\end{description}\end{quote}
3050\begin{quote}\begin{description}
3051\item[{retval}] \leavevmode\begin{itemize}
3052\item {}
3053TRUE   if the library is threadsafe; FALSE otherwise
3054
3055\end{itemize}
3056
3057\end{description}\end{quote}
3058
3059
3060\subsubsection{krb5\_kt\_close -  Close a key table handle.}
3061\label{\detokenize{appdev/refs/api/krb5_kt_close:krb5-kt-close-close-a-key-table-handle}}\label{\detokenize{appdev/refs/api/krb5_kt_close::doc}}\index{krb5\_kt\_close (C function)}
3062
3063\begin{fulllineitems}
3064\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_close:c.krb5_kt_close}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_close}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}}{}
3065\end{fulllineitems}
3066
3067\begin{quote}\begin{description}
3068\item[{param}] \leavevmode
3069\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3070
3071\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle
3072
3073\end{description}\end{quote}
3074\begin{quote}\begin{description}
3075\item[{retval}] \leavevmode\begin{itemize}
3076\item {}
30770   None
3078
3079\end{itemize}
3080
3081\end{description}\end{quote}
3082
3083
3084\subsubsection{krb5\_kt\_client\_default -  Resolve the default client key table.}
3085\label{\detokenize{appdev/refs/api/krb5_kt_client_default::doc}}\label{\detokenize{appdev/refs/api/krb5_kt_client_default:krb5-kt-client-default-resolve-the-default-client-key-table}}\index{krb5\_kt\_client\_default (C function)}
3086
3087\begin{fulllineitems}
3088\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_client_default:c.krb5_kt_client_default}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_client\_default}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}} *\sphinxstyleemphasis{ keytab\_out}}{}
3089\end{fulllineitems}
3090
3091\begin{quote}\begin{description}
3092\item[{param}] \leavevmode
3093\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3094
3095\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keytab\_out} - Key table handle
3096
3097\end{description}\end{quote}
3098\begin{quote}\begin{description}
3099\item[{retval}] \leavevmode\begin{itemize}
3100\item {}
31010   Success
3102
3103\end{itemize}
3104
3105\item[{return}] \leavevmode\begin{itemize}
3106\item {}
3107Kerberos error codes
3108
3109\end{itemize}
3110
3111\end{description}\end{quote}
3112
3113Fill \sphinxstyleemphasis{keytab\_out} with a handle to the default client key table.
3114
3115\begin{sphinxadmonition}{note}{Note:}
3116New in 1.11
3117\end{sphinxadmonition}
3118
3119
3120\subsubsection{krb5\_kt\_default -  Resolve the default key table.}
3121\label{\detokenize{appdev/refs/api/krb5_kt_default:krb5-kt-default-resolve-the-default-key-table}}\label{\detokenize{appdev/refs/api/krb5_kt_default::doc}}\index{krb5\_kt\_default (C function)}
3122
3123\begin{fulllineitems}
3124\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_default:c.krb5_kt_default}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_default}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}} *\sphinxstyleemphasis{ id}}{}
3125\end{fulllineitems}
3126
3127\begin{quote}\begin{description}
3128\item[{param}] \leavevmode
3129\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3130
3131\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{id} - Key table handle
3132
3133\end{description}\end{quote}
3134\begin{quote}\begin{description}
3135\item[{retval}] \leavevmode\begin{itemize}
3136\item {}
31370   Success
3138
3139\end{itemize}
3140
3141\item[{return}] \leavevmode\begin{itemize}
3142\item {}
3143Kerberos error codes
3144
3145\end{itemize}
3146
3147\end{description}\end{quote}
3148
3149Set \sphinxstyleemphasis{id} to a handle to the default key table. The key table is not opened.
3150
3151
3152\subsubsection{krb5\_kt\_default\_name -  Get the default key table name.}
3153\label{\detokenize{appdev/refs/api/krb5_kt_default_name::doc}}\label{\detokenize{appdev/refs/api/krb5_kt_default_name:krb5-kt-default-name-get-the-default-key-table-name}}\index{krb5\_kt\_default\_name (C function)}
3154
3155\begin{fulllineitems}
3156\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_default_name:c.krb5_kt_default_name}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_default\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, char *\sphinxstyleemphasis{ name}, int\sphinxstyleemphasis{ name\_size}}{}
3157\end{fulllineitems}
3158
3159\begin{quote}\begin{description}
3160\item[{param}] \leavevmode
3161\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3162
3163\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} - Default key table name
3164
3165\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name\_size} - Space available in \sphinxstyleemphasis{name}
3166
3167\end{description}\end{quote}
3168\begin{quote}\begin{description}
3169\item[{retval}] \leavevmode\begin{itemize}
3170\item {}
31710   Success
3172
3173\item {}
3174KRB5\_CONFIG\_NOTENUFSPACE   Buffer is too short
3175
3176\end{itemize}
3177
3178\item[{return}] \leavevmode\begin{itemize}
3179\item {}
3180Kerberos error codes
3181
3182\end{itemize}
3183
3184\end{description}\end{quote}
3185
3186Fill \sphinxstyleemphasis{name} with the name of the default key table for \sphinxstyleemphasis{context} .
3187
3188
3189\subsubsection{krb5\_kt\_dup -  Duplicate keytab handle.}
3190\label{\detokenize{appdev/refs/api/krb5_kt_dup:krb5-kt-dup-duplicate-keytab-handle}}\label{\detokenize{appdev/refs/api/krb5_kt_dup::doc}}\index{krb5\_kt\_dup (C function)}
3191
3192\begin{fulllineitems}
3193\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_dup:c.krb5_kt_dup}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_dup}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ in}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}} *\sphinxstyleemphasis{ out}}{}
3194\end{fulllineitems}
3195
3196\begin{quote}\begin{description}
3197\item[{param}] \leavevmode
3198\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3199
3200\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in} - Key table handle to be duplicated
3201
3202\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Key table handle
3203
3204\end{description}\end{quote}
3205
3206Create a new handle referring to the same key table as \sphinxstyleemphasis{in} . The new handle and \sphinxstyleemphasis{in} can be closed independently.
3207
3208\begin{sphinxadmonition}{note}{Note:}
3209New in 1.12
3210\end{sphinxadmonition}
3211
3212
3213\subsubsection{krb5\_kt\_get\_name -  Get a key table name.}
3214\label{\detokenize{appdev/refs/api/krb5_kt_get_name::doc}}\label{\detokenize{appdev/refs/api/krb5_kt_get_name:krb5-kt-get-name-get-a-key-table-name}}\index{krb5\_kt\_get\_name (C function)}
3215
3216\begin{fulllineitems}
3217\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_get_name:c.krb5_kt_get_name}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_get\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}, char *\sphinxstyleemphasis{ name}, unsigned int\sphinxstyleemphasis{ namelen}}{}
3218\end{fulllineitems}
3219
3220\begin{quote}\begin{description}
3221\item[{param}] \leavevmode
3222\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3223
3224\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle
3225
3226\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} - Key table name
3227
3228\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{namelen} - Maximum length to fill in name
3229
3230\end{description}\end{quote}
3231\begin{quote}\begin{description}
3232\item[{retval}] \leavevmode\begin{itemize}
3233\item {}
32340   Success
3235
3236\item {}
3237KRB5\_KT\_NAME\_TOOLONG   Key table name does not fit in namelen bytes
3238
3239\end{itemize}
3240
3241\item[{return}] \leavevmode\begin{itemize}
3242\item {}
3243Kerberos error codes
3244
3245\end{itemize}
3246
3247\end{description}\end{quote}
3248
3249Fill \sphinxstyleemphasis{name} with the name of \sphinxstyleemphasis{keytab} including the type and delimiter.
3250
3251
3252\subsubsection{krb5\_kt\_get\_type -  Return the type of a key table.}
3253\label{\detokenize{appdev/refs/api/krb5_kt_get_type:krb5-kt-get-type-return-the-type-of-a-key-table}}\label{\detokenize{appdev/refs/api/krb5_kt_get_type::doc}}\index{krb5\_kt\_get\_type (C function)}
3254
3255\begin{fulllineitems}
3256\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_get_type:c.krb5_kt_get_type}}\pysiglinewithargsret{const char * \sphinxbfcode{krb5\_kt\_get\_type}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}}{}
3257\end{fulllineitems}
3258
3259\begin{quote}\begin{description}
3260\item[{param}] \leavevmode
3261\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3262
3263\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle
3264
3265\end{description}\end{quote}
3266\begin{quote}\begin{description}
3267\item[{return}] \leavevmode\begin{itemize}
3268\item {}
3269The type of a key table as an alias that must not be modified or freed by the caller.
3270
3271\end{itemize}
3272
3273\end{description}\end{quote}
3274
3275
3276\subsubsection{krb5\_kt\_resolve -  Get a handle for a key table.}
3277\label{\detokenize{appdev/refs/api/krb5_kt_resolve:krb5-kt-resolve-get-a-handle-for-a-key-table}}\label{\detokenize{appdev/refs/api/krb5_kt_resolve::doc}}\index{krb5\_kt\_resolve (C function)}
3278
3279\begin{fulllineitems}
3280\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_resolve:c.krb5_kt_resolve}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_resolve}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ name}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}} *\sphinxstyleemphasis{ ktid}}{}
3281\end{fulllineitems}
3282
3283\begin{quote}\begin{description}
3284\item[{param}] \leavevmode
3285\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3286
3287\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - Name of the key table
3288
3289\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ktid} - Key table handle
3290
3291\end{description}\end{quote}
3292\begin{quote}\begin{description}
3293\item[{retval}] \leavevmode\begin{itemize}
3294\item {}
32950   Success
3296
3297\end{itemize}
3298
3299\item[{return}] \leavevmode\begin{itemize}
3300\item {}
3301Kerberos error codes
3302
3303\end{itemize}
3304
3305\end{description}\end{quote}
3306
3307Resolve the key table name \sphinxstyleemphasis{name} and set \sphinxstyleemphasis{ktid} to a handle identifying the key table. Use {\hyperref[\detokenize{appdev/refs/api/krb5_kt_close:c.krb5_kt_close}]{\sphinxcrossref{\sphinxcode{krb5\_kt\_close()}}}} to free \sphinxstyleemphasis{ktid} when it is no longer needed.
3308\begin{quote}
3309
3310\sphinxstyleemphasis{name} must be of the form \sphinxstylestrong{type:residual} , where \sphinxstyleemphasis{type} must be a type known to the library and \sphinxstyleemphasis{residual} portion should be specific to the particular keytab type. If no \sphinxstyleemphasis{type} is given, the default is \sphinxstylestrong{FILE} .
3311\end{quote}
3312
3313If \sphinxstyleemphasis{name} is of type \sphinxstylestrong{FILE} , the keytab file is not opened by this call.
3314
3315
3316\subsubsection{krb5\_kuserok -  Determine if a principal is authorized to log in as a local user.}
3317\label{\detokenize{appdev/refs/api/krb5_kuserok:krb5-kuserok-determine-if-a-principal-is-authorized-to-log-in-as-a-local-user}}\label{\detokenize{appdev/refs/api/krb5_kuserok::doc}}\index{krb5\_kuserok (C function)}
3318
3319\begin{fulllineitems}
3320\phantomsection\label{\detokenize{appdev/refs/api/krb5_kuserok:c.krb5_kuserok}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_kuserok}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ principal}, const char *\sphinxstyleemphasis{ luser}}{}
3321\end{fulllineitems}
3322
3323\begin{quote}\begin{description}
3324\item[{param}] \leavevmode
3325\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3326
3327\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal name
3328
3329\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{luser} - Local username
3330
3331\end{description}\end{quote}
3332\begin{quote}\begin{description}
3333\item[{retval}] \leavevmode\begin{itemize}
3334\item {}
3335TRUE   Principal is authorized to log in as user; FALSE otherwise.
3336
3337\end{itemize}
3338
3339\end{description}\end{quote}
3340
3341Determine whether \sphinxstyleemphasis{principal} is authorized to log in as a local user \sphinxstyleemphasis{luser} .
3342
3343
3344\subsubsection{krb5\_parse\_name -  Convert a string principal name to a krb5\_principal structure.}
3345\label{\detokenize{appdev/refs/api/krb5_parse_name::doc}}\label{\detokenize{appdev/refs/api/krb5_parse_name:krb5-parse-name-convert-a-string-principal-name-to-a-krb5-principal-structure}}\index{krb5\_parse\_name (C function)}
3346
3347\begin{fulllineitems}
3348\phantomsection\label{\detokenize{appdev/refs/api/krb5_parse_name:c.krb5_parse_name}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_parse\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ name}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ principal\_out}}{}
3349\end{fulllineitems}
3350
3351\begin{quote}\begin{description}
3352\item[{param}] \leavevmode
3353\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3354
3355\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - String representation of a principal name
3356
3357\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{principal\_out} - New principal
3358
3359\end{description}\end{quote}
3360\begin{quote}\begin{description}
3361\item[{retval}] \leavevmode\begin{itemize}
3362\item {}
33630   Success
3364
3365\end{itemize}
3366
3367\item[{return}] \leavevmode\begin{itemize}
3368\item {}
3369Kerberos error codes
3370
3371\end{itemize}
3372
3373\end{description}\end{quote}
3374
3375Convert a string representation of a principal name to a krb5\_principal structure.
3376
3377A string representation of a Kerberos name consists of one or more principal name components, separated by slashes, optionally followed by the @ character and a realm name. If the realm name is not specified, the local realm is used.
3378
3379To use the slash and @ symbols as part of a component (quoted) instead of using them as a component separator or as a realm prefix), put a backslash () character in front of the symbol. Similarly, newline, tab, backspace, and NULL characters can be included in a component by using \sphinxstylestrong{n} , \sphinxstylestrong{t} , \sphinxstylestrong{b} or \sphinxstylestrong{0} , respectively.
3380
3381Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}} to free \sphinxstyleemphasis{principal\_out} when it is no longer needed.
3382
3383\begin{sphinxadmonition}{note}{Note:}
3384The realm in a Kerberos \sphinxstyleemphasis{name} cannot contain slash, colon, or NULL characters.
3385\end{sphinxadmonition}
3386
3387
3388\subsubsection{krb5\_parse\_name\_flags -  Convert a string principal name to a krb5\_principal with flags.}
3389\label{\detokenize{appdev/refs/api/krb5_parse_name_flags:krb5-parse-name-flags-convert-a-string-principal-name-to-a-krb5-principal-with-flags}}\label{\detokenize{appdev/refs/api/krb5_parse_name_flags::doc}}\index{krb5\_parse\_name\_flags (C function)}
3390
3391\begin{fulllineitems}
3392\phantomsection\label{\detokenize{appdev/refs/api/krb5_parse_name_flags:c.krb5_parse_name_flags}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_parse\_name\_flags}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ name}, int\sphinxstyleemphasis{ flags}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ principal\_out}}{}
3393\end{fulllineitems}
3394
3395\begin{quote}\begin{description}
3396\item[{param}] \leavevmode
3397\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3398
3399\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - String representation of a principal name
3400
3401\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flag
3402
3403\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{principal\_out} - New principal
3404
3405\end{description}\end{quote}
3406\begin{quote}\begin{description}
3407\item[{retval}] \leavevmode\begin{itemize}
3408\item {}
34090   Success
3410
3411\end{itemize}
3412
3413\item[{return}] \leavevmode\begin{itemize}
3414\item {}
3415Kerberos error codes
3416
3417\end{itemize}
3418
3419\end{description}\end{quote}
3420
3421Similar to {\hyperref[\detokenize{appdev/refs/api/krb5_parse_name:c.krb5_parse_name}]{\sphinxcrossref{\sphinxcode{krb5\_parse\_name()}}}} , this function converts a single-string representation of a principal name to a krb5\_principal structure.
3422
3423The following flags are valid:
3424\begin{quote}
3425\begin{itemize}
3426\item {}
3427{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_REALM:KRB5_PRINCIPAL_PARSE_NO_REALM}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM}}}} - no realm must be present in \sphinxstyleemphasis{name}
3428
3429\item {}
3430{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_REQUIRE_REALM:KRB5_PRINCIPAL_PARSE_REQUIRE_REALM}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_REQUIRE\_REALM}}}} - realm must be present in \sphinxstyleemphasis{name}
3431
3432\item {}
3433{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE:KRB5_PRINCIPAL_PARSE_ENTERPRISE}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE}}}} - create single-component enterprise principal
3434
3435\item {}
3436{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_IGNORE_REALM:KRB5_PRINCIPAL_PARSE_IGNORE_REALM}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM}}}} - ignore realm if present in \sphinxstyleemphasis{name}
3437
3438\end{itemize}
3439
3440If \sphinxstylestrong{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM} or \sphinxstylestrong{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM} is specified in \sphinxstyleemphasis{flags} , the realm of the new principal will be empty. Otherwise, the default realm for \sphinxstyleemphasis{context} will be used if \sphinxstyleemphasis{name} does not specify a realm.
3441\end{quote}
3442
3443Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}} to free \sphinxstyleemphasis{principal\_out} when it is no longer needed.
3444
3445
3446\subsubsection{krb5\_principal\_compare -  Compare two principals.}
3447\label{\detokenize{appdev/refs/api/krb5_principal_compare:krb5-principal-compare-compare-two-principals}}\label{\detokenize{appdev/refs/api/krb5_principal_compare::doc}}\index{krb5\_principal\_compare (C function)}
3448
3449\begin{fulllineitems}
3450\phantomsection\label{\detokenize{appdev/refs/api/krb5_principal_compare:c.krb5_principal_compare}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_principal\_compare}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ1}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ2}}{}
3451\end{fulllineitems}
3452
3453\begin{quote}\begin{description}
3454\item[{param}] \leavevmode
3455\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3456
3457\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ1} - First principal
3458
3459\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ2} - Second principal
3460
3461\end{description}\end{quote}
3462\begin{quote}\begin{description}
3463\item[{retval}] \leavevmode\begin{itemize}
3464\item {}
3465TRUE   if the principals are the same; FALSE otherwise
3466
3467\end{itemize}
3468
3469\end{description}\end{quote}
3470
3471
3472\subsubsection{krb5\_principal\_compare\_any\_realm -  Compare two principals ignoring realm components.}
3473\label{\detokenize{appdev/refs/api/krb5_principal_compare_any_realm:krb5-principal-compare-any-realm-compare-two-principals-ignoring-realm-components}}\label{\detokenize{appdev/refs/api/krb5_principal_compare_any_realm::doc}}\index{krb5\_principal\_compare\_any\_realm (C function)}
3474
3475\begin{fulllineitems}
3476\phantomsection\label{\detokenize{appdev/refs/api/krb5_principal_compare_any_realm:c.krb5_principal_compare_any_realm}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_principal\_compare\_any\_realm}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ1}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ2}}{}
3477\end{fulllineitems}
3478
3479\begin{quote}\begin{description}
3480\item[{param}] \leavevmode
3481\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3482
3483\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ1} - First principal
3484
3485\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ2} - Second principal
3486
3487\end{description}\end{quote}
3488\begin{quote}\begin{description}
3489\item[{retval}] \leavevmode\begin{itemize}
3490\item {}
3491TRUE   if the principals are the same; FALSE otherwise
3492
3493\end{itemize}
3494
3495\end{description}\end{quote}
3496
3497Similar to {\hyperref[\detokenize{appdev/refs/api/krb5_principal_compare:c.krb5_principal_compare}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_compare()}}}} , but do not compare the realm components of the principals.
3498
3499
3500\subsubsection{krb5\_principal\_compare\_flags -  Compare two principals with additional flags.}
3501\label{\detokenize{appdev/refs/api/krb5_principal_compare_flags:krb5-principal-compare-flags-compare-two-principals-with-additional-flags}}\label{\detokenize{appdev/refs/api/krb5_principal_compare_flags::doc}}\index{krb5\_principal\_compare\_flags (C function)}
3502
3503\begin{fulllineitems}
3504\phantomsection\label{\detokenize{appdev/refs/api/krb5_principal_compare_flags:c.krb5_principal_compare_flags}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_principal\_compare\_flags}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ1}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ2}, int\sphinxstyleemphasis{ flags}}{}
3505\end{fulllineitems}
3506
3507\begin{quote}\begin{description}
3508\item[{param}] \leavevmode
3509\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3510
3511\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ1} - First principal
3512
3513\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ2} - Second principal
3514
3515\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flags
3516
3517\end{description}\end{quote}
3518\begin{quote}\begin{description}
3519\item[{retval}] \leavevmode\begin{itemize}
3520\item {}
3521TRUE   if the principal names are the same; FALSE otherwise
3522
3523\end{itemize}
3524
3525\end{description}\end{quote}
3526
3527Valid flags are:
3528\begin{itemize}
3529\item {}
3530{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_IGNORE_REALM:KRB5_PRINCIPAL_COMPARE_IGNORE_REALM}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_IGNORE\_REALM}}}} - ignore realm component
3531
3532\item {}
3533{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_ENTERPRISE:KRB5_PRINCIPAL_COMPARE_ENTERPRISE}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_ENTERPRISE}}}} - UPNs as real principals
3534
3535\item {}
3536{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD:KRB5_PRINCIPAL_COMPARE_CASEFOLD}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD}}}} case-insensitive
3537
3538\item {}
3539{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8:KRB5_PRINCIPAL_COMPARE_UTF8}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_UTF8}}}} - treat principals as UTF-8
3540
3541\end{itemize}
3542
3543
3544\sphinxstrong{See also:}
3545
3546
3547{\hyperref[\detokenize{appdev/refs/api/krb5_principal_compare:c.krb5_principal_compare}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_compare()}}}}
3548
3549
3550
3551
3552\subsubsection{krb5\_prompter\_posix -  Prompt user for password.}
3553\label{\detokenize{appdev/refs/api/krb5_prompter_posix:krb5-prompter-posix-prompt-user-for-password}}\label{\detokenize{appdev/refs/api/krb5_prompter_posix::doc}}\index{krb5\_prompter\_posix (C function)}
3554
3555\begin{fulllineitems}
3556\phantomsection\label{\detokenize{appdev/refs/api/krb5_prompter_posix:c.krb5_prompter_posix}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_prompter\_posix}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, void *\sphinxstyleemphasis{ data}, const char *\sphinxstyleemphasis{ name}, const char *\sphinxstyleemphasis{ banner}, int\sphinxstyleemphasis{ num\_prompts}, {\hyperref[\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt}]{\sphinxcrossref{krb5\_prompt}}}\sphinxstyleemphasis{ prompts}}{}
3557\end{fulllineitems}
3558
3559\begin{quote}\begin{description}
3560\item[{param}] \leavevmode
3561\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3562
3563\sphinxstylestrong{data} - Unused (callback argument)
3564
3565\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - Name to output during prompt
3566
3567\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{banner} - Banner to output during prompt
3568
3569\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_prompts} - Number of prompts in \sphinxstyleemphasis{prompts}
3570
3571\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompts} - Array of prompts and replies
3572
3573\end{description}\end{quote}
3574\begin{quote}\begin{description}
3575\item[{retval}] \leavevmode\begin{itemize}
3576\item {}
35770   Success
3578
3579\end{itemize}
3580
3581\item[{return}] \leavevmode\begin{itemize}
3582\item {}
3583Kerberos error codes
3584
3585\end{itemize}
3586
3587\end{description}\end{quote}
3588
3589This function is intended to be used as a prompter callback for {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_password()}}}} or {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_init:c.krb5_init_creds_init}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_init()}}}} .
3590
3591Writes \sphinxstyleemphasis{name} and \sphinxstyleemphasis{banner} to stdout, each followed by a newline, then writes each prompt field in the \sphinxstyleemphasis{prompts} array, followed by”:”, and sets the reply field of the entry to a line of input read from stdin. If the hidden flag is set for a prompt, then terminal echoing is turned off when input is read.
3592
3593
3594\subsubsection{krb5\_realm\_compare -  Compare the realms of two principals.}
3595\label{\detokenize{appdev/refs/api/krb5_realm_compare::doc}}\label{\detokenize{appdev/refs/api/krb5_realm_compare:krb5-realm-compare-compare-the-realms-of-two-principals}}\index{krb5\_realm\_compare (C function)}
3596
3597\begin{fulllineitems}
3598\phantomsection\label{\detokenize{appdev/refs/api/krb5_realm_compare:c.krb5_realm_compare}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_realm\_compare}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ1}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ2}}{}
3599\end{fulllineitems}
3600
3601\begin{quote}\begin{description}
3602\item[{param}] \leavevmode
3603\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3604
3605\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ1} - First principal
3606
3607\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ2} - Second principal
3608
3609\end{description}\end{quote}
3610\begin{quote}\begin{description}
3611\item[{retval}] \leavevmode\begin{itemize}
3612\item {}
3613TRUE   if the realm names are the same; FALSE otherwise
3614
3615\end{itemize}
3616
3617\end{description}\end{quote}
3618
3619
3620\subsubsection{krb5\_responder\_get\_challenge -  Retrieve the challenge data for a given question in the responder context.}
3621\label{\detokenize{appdev/refs/api/krb5_responder_get_challenge:krb5-responder-get-challenge-retrieve-the-challenge-data-for-a-given-question-in-the-responder-context}}\label{\detokenize{appdev/refs/api/krb5_responder_get_challenge::doc}}\index{krb5\_responder\_get\_challenge (C function)}
3622
3623\begin{fulllineitems}
3624\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_get_challenge:c.krb5_responder_get_challenge}}\pysiglinewithargsret{const char * \sphinxbfcode{krb5\_responder\_get\_challenge}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{krb5\_responder\_context}}}\sphinxstyleemphasis{ rctx}, const char *\sphinxstyleemphasis{ question}}{}
3625\end{fulllineitems}
3626
3627\begin{quote}\begin{description}
3628\item[{param}] \leavevmode
3629\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
3630
3631\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context
3632
3633\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{question} - Question name
3634
3635\end{description}\end{quote}
3636
3637Return a pointer to a C string containing the challenge for \sphinxstyleemphasis{question} within \sphinxstyleemphasis{rctx} , or NULL if the question is not present in \sphinxstyleemphasis{rctx} . The structure of the question depends on the question name, but will always be printable UTF-8 text. The returned pointer is an alias, valid only as long as the lifetime of \sphinxstyleemphasis{rctx} , and should not be modified or freed by the caller.
3638
3639\begin{sphinxadmonition}{note}{Note:}
3640New in 1.11
3641\end{sphinxadmonition}
3642
3643
3644\subsubsection{krb5\_responder\_list\_questions -  List the question names contained in the responder context.}
3645\label{\detokenize{appdev/refs/api/krb5_responder_list_questions::doc}}\label{\detokenize{appdev/refs/api/krb5_responder_list_questions:krb5-responder-list-questions-list-the-question-names-contained-in-the-responder-context}}\index{krb5\_responder\_list\_questions (C function)}
3646
3647\begin{fulllineitems}
3648\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_list_questions:c.krb5_responder_list_questions}}\pysiglinewithargsret{const char *const * \sphinxbfcode{krb5\_responder\_list\_questions}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{krb5\_responder\_context}}}\sphinxstyleemphasis{ rctx}}{}
3649\end{fulllineitems}
3650
3651\begin{quote}\begin{description}
3652\item[{param}] \leavevmode
3653\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
3654
3655\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context
3656
3657\end{description}\end{quote}
3658
3659Return a pointer to a null-terminated list of question names which are present in \sphinxstyleemphasis{rctx} . The pointer is an alias, valid only as long as the lifetime of \sphinxstyleemphasis{rctx} , and should not be modified or freed by the caller. A question’s challenge can be retrieved using {\hyperref[\detokenize{appdev/refs/api/krb5_responder_get_challenge:c.krb5_responder_get_challenge}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_get\_challenge()}}}} and answered using {\hyperref[\detokenize{appdev/refs/api/krb5_responder_set_answer:c.krb5_responder_set_answer}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_set\_answer()}}}} .
3660
3661\begin{sphinxadmonition}{note}{Note:}
3662New in 1.11
3663\end{sphinxadmonition}
3664
3665
3666\subsubsection{krb5\_responder\_set\_answer -  Answer a named question in the responder context.}
3667\label{\detokenize{appdev/refs/api/krb5_responder_set_answer:krb5-responder-set-answer-answer-a-named-question-in-the-responder-context}}\label{\detokenize{appdev/refs/api/krb5_responder_set_answer::doc}}\index{krb5\_responder\_set\_answer (C function)}
3668
3669\begin{fulllineitems}
3670\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_set_answer:c.krb5_responder_set_answer}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_responder\_set\_answer}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{krb5\_responder\_context}}}\sphinxstyleemphasis{ rctx}, const char *\sphinxstyleemphasis{ question}, const char *\sphinxstyleemphasis{ answer}}{}
3671\end{fulllineitems}
3672
3673\begin{quote}\begin{description}
3674\item[{param}] \leavevmode
3675\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
3676
3677\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context
3678
3679\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{question} - Question name
3680
3681\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{answer} - The string to set (MUST be printable UTF-8)
3682
3683\end{description}\end{quote}
3684\begin{quote}\begin{description}
3685\item[{retval}] \leavevmode\begin{itemize}
3686\item {}
3687EINVAL    question is not present within rctx
3688
3689\end{itemize}
3690
3691\end{description}\end{quote}
3692
3693This function supplies an answer to \sphinxstyleemphasis{question} within \sphinxstyleemphasis{rctx} . The appropriate form of the answer depends on the question name.
3694
3695\begin{sphinxadmonition}{note}{Note:}
3696New in 1.11
3697\end{sphinxadmonition}
3698
3699
3700\subsubsection{krb5\_responder\_otp\_get\_challenge -  Decode the KRB5\_RESPONDER\_QUESTION\_OTP to a C struct.}
3701\label{\detokenize{appdev/refs/api/krb5_responder_otp_get_challenge:krb5-responder-otp-get-challenge-decode-the-krb5-responder-question-otp-to-a-c-struct}}\label{\detokenize{appdev/refs/api/krb5_responder_otp_get_challenge::doc}}\index{krb5\_responder\_otp\_get\_challenge (C function)}
3702
3703\begin{fulllineitems}
3704\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_otp_get_challenge:c.krb5_responder_otp_get_challenge}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_responder\_otp\_get\_challenge}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{krb5\_responder\_context}}}\sphinxstyleemphasis{ rctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_otp_challenge:c.krb5_responder_otp_challenge}]{\sphinxcrossref{krb5\_responder\_otp\_challenge}}} **\sphinxstyleemphasis{ chl}}{}
3705\end{fulllineitems}
3706
3707\begin{quote}\begin{description}
3708\item[{param}] \leavevmode
3709\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
3710
3711\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context
3712
3713\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{chl} - Challenge structure
3714
3715\end{description}\end{quote}
3716
3717A convenience function which parses the KRB5\_RESPONDER\_QUESTION\_OTP question challenge data, making it available in native C. The main feature of this function is the ability to interact with OTP tokens without parsing the JSON.
3718
3719The returned value must be passed to {\hyperref[\detokenize{appdev/refs/api/krb5_responder_otp_challenge_free:c.krb5_responder_otp_challenge_free}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_otp\_challenge\_free()}}}} to be freed.
3720
3721\begin{sphinxadmonition}{note}{Note:}
3722New in 1.11
3723\end{sphinxadmonition}
3724
3725
3726\subsubsection{krb5\_responder\_otp\_set\_answer -  Answer the KRB5\_RESPONDER\_QUESTION\_OTP question.}
3727\label{\detokenize{appdev/refs/api/krb5_responder_otp_set_answer:krb5-responder-otp-set-answer-answer-the-krb5-responder-question-otp-question}}\label{\detokenize{appdev/refs/api/krb5_responder_otp_set_answer::doc}}\index{krb5\_responder\_otp\_set\_answer (C function)}
3728
3729\begin{fulllineitems}
3730\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_otp_set_answer:c.krb5_responder_otp_set_answer}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_responder\_otp\_set\_answer}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{krb5\_responder\_context}}}\sphinxstyleemphasis{ rctx}, size\_t\sphinxstyleemphasis{ ti}, const char *\sphinxstyleemphasis{ value}, const char *\sphinxstyleemphasis{ pin}}{}
3731\end{fulllineitems}
3732
3733\begin{quote}\begin{description}
3734\item[{param}] \leavevmode
3735\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
3736
3737\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context
3738
3739\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ti} - The index of the tokeninfo selected
3740
3741\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{value} - The value to set, or NULL for none
3742
3743\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pin} - The pin to set, or NULL for none
3744
3745\end{description}\end{quote}
3746
3747\begin{sphinxadmonition}{note}{Note:}
3748New in 1.11
3749\end{sphinxadmonition}
3750
3751
3752\subsubsection{krb5\_responder\_otp\_challenge\_free -  Free the value returned by krb5\_responder\_otp\_get\_challenge() .}
3753\label{\detokenize{appdev/refs/api/krb5_responder_otp_challenge_free:krb5-responder-otp-challenge-free-free-the-value-returned-by-krb5-responder-otp-get-challenge}}\label{\detokenize{appdev/refs/api/krb5_responder_otp_challenge_free::doc}}\index{krb5\_responder\_otp\_challenge\_free (C function)}
3754
3755\begin{fulllineitems}
3756\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_otp_challenge_free:c.krb5_responder_otp_challenge_free}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_responder\_otp\_challenge\_free}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{krb5\_responder\_context}}}\sphinxstyleemphasis{ rctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_otp_challenge:c.krb5_responder_otp_challenge}]{\sphinxcrossref{krb5\_responder\_otp\_challenge}}} *\sphinxstyleemphasis{ chl}}{}
3757\end{fulllineitems}
3758
3759\begin{quote}\begin{description}
3760\item[{param}] \leavevmode
3761\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
3762
3763\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context
3764
3765\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{chl} - The challenge to free
3766
3767\end{description}\end{quote}
3768
3769\begin{sphinxadmonition}{note}{Note:}
3770New in 1.11
3771\end{sphinxadmonition}
3772
3773
3774\subsubsection{krb5\_responder\_pkinit\_get\_challenge -  Decode the KRB5\_RESPONDER\_QUESTION\_PKINIT to a C struct.}
3775\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_get_challenge:krb5-responder-pkinit-get-challenge-decode-the-krb5-responder-question-pkinit-to-a-c-struct}}\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_get_challenge::doc}}\index{krb5\_responder\_pkinit\_get\_challenge (C function)}
3776
3777\begin{fulllineitems}
3778\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_get_challenge:c.krb5_responder_pkinit_get_challenge}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_responder\_pkinit\_get\_challenge}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{krb5\_responder\_context}}}\sphinxstyleemphasis{ rctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:c.krb5_responder_pkinit_challenge}]{\sphinxcrossref{krb5\_responder\_pkinit\_challenge}}} **\sphinxstyleemphasis{ chl\_out}}{}
3779\end{fulllineitems}
3780
3781\begin{quote}\begin{description}
3782\item[{param}] \leavevmode
3783\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
3784
3785\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context
3786
3787\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{chl\_out} - Challenge structure
3788
3789\end{description}\end{quote}
3790
3791A convenience function which parses the KRB5\_RESPONDER\_QUESTION\_PKINIT question challenge data, making it available in native C. The main feature of this function is the ability to read the challenge without parsing the JSON.
3792
3793The returned value must be passed to {\hyperref[\detokenize{appdev/refs/api/krb5_responder_pkinit_challenge_free:c.krb5_responder_pkinit_challenge_free}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_pkinit\_challenge\_free()}}}} to be freed.
3794
3795\begin{sphinxadmonition}{note}{Note:}
3796New in 1.12
3797\end{sphinxadmonition}
3798
3799
3800\subsubsection{krb5\_responder\_pkinit\_set\_answer -  Answer the KRB5\_RESPONDER\_QUESTION\_PKINIT question for one identity.}
3801\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_set_answer:krb5-responder-pkinit-set-answer-answer-the-krb5-responder-question-pkinit-question-for-one-identity}}\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_set_answer::doc}}\index{krb5\_responder\_pkinit\_set\_answer (C function)}
3802
3803\begin{fulllineitems}
3804\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_set_answer:c.krb5_responder_pkinit_set_answer}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_responder\_pkinit\_set\_answer}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{krb5\_responder\_context}}}\sphinxstyleemphasis{ rctx}, const char *\sphinxstyleemphasis{ identity}, const char *\sphinxstyleemphasis{ pin}}{}
3805\end{fulllineitems}
3806
3807\begin{quote}\begin{description}
3808\item[{param}] \leavevmode
3809\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
3810
3811\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context
3812
3813\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{identity} - The identity for which a PIN is being supplied
3814
3815\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pin} - The provided PIN, or NULL for none
3816
3817\end{description}\end{quote}
3818
3819\begin{sphinxadmonition}{note}{Note:}
3820New in 1.12
3821\end{sphinxadmonition}
3822
3823
3824\subsubsection{krb5\_responder\_pkinit\_challenge\_free -  Free the value returned by krb5\_responder\_pkinit\_get\_challenge() .}
3825\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_challenge_free:krb5-responder-pkinit-challenge-free-free-the-value-returned-by-krb5-responder-pkinit-get-challenge}}\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_challenge_free::doc}}\index{krb5\_responder\_pkinit\_challenge\_free (C function)}
3826
3827\begin{fulllineitems}
3828\phantomsection\label{\detokenize{appdev/refs/api/krb5_responder_pkinit_challenge_free:c.krb5_responder_pkinit_challenge_free}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_responder\_pkinit\_challenge\_free}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}]{\sphinxcrossref{krb5\_responder\_context}}}\sphinxstyleemphasis{ rctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:c.krb5_responder_pkinit_challenge}]{\sphinxcrossref{krb5\_responder\_pkinit\_challenge}}} *\sphinxstyleemphasis{ chl}}{}
3829\end{fulllineitems}
3830
3831\begin{quote}\begin{description}
3832\item[{param}] \leavevmode
3833\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
3834
3835\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context
3836
3837\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{chl} - The challenge to free
3838
3839\end{description}\end{quote}
3840
3841\begin{sphinxadmonition}{note}{Note:}
3842New in 1.12
3843\end{sphinxadmonition}
3844
3845
3846\subsubsection{krb5\_set\_default\_realm -  Override the default realm for the specified context.}
3847\label{\detokenize{appdev/refs/api/krb5_set_default_realm::doc}}\label{\detokenize{appdev/refs/api/krb5_set_default_realm:krb5-set-default-realm-override-the-default-realm-for-the-specified-context}}\index{krb5\_set\_default\_realm (C function)}
3848
3849\begin{fulllineitems}
3850\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_default_realm:c.krb5_set_default_realm}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_set\_default\_realm}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ lrealm}}{}
3851\end{fulllineitems}
3852
3853\begin{quote}\begin{description}
3854\item[{param}] \leavevmode
3855\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3856
3857\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{lrealm} - Realm name for the default realm
3858
3859\end{description}\end{quote}
3860\begin{quote}\begin{description}
3861\item[{retval}] \leavevmode\begin{itemize}
3862\item {}
38630   Success
3864
3865\end{itemize}
3866
3867\item[{return}] \leavevmode\begin{itemize}
3868\item {}
3869Kerberos error codes
3870
3871\end{itemize}
3872
3873\end{description}\end{quote}
3874
3875If \sphinxstyleemphasis{lrealm} is NULL, clear the default realm setting.
3876
3877
3878\subsubsection{krb5\_set\_password -  Set a password for a principal using specified credentials.}
3879\label{\detokenize{appdev/refs/api/krb5_set_password:krb5-set-password-set-a-password-for-a-principal-using-specified-credentials}}\label{\detokenize{appdev/refs/api/krb5_set_password::doc}}\index{krb5\_set\_password (C function)}
3880
3881\begin{fulllineitems}
3882\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_password:c.krb5_set_password}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_set\_password}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, const char *\sphinxstyleemphasis{ newpw}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ change\_password\_for}, int *\sphinxstyleemphasis{ result\_code}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ result\_code\_string}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ result\_string}}{}
3883\end{fulllineitems}
3884
3885\begin{quote}\begin{description}
3886\item[{param}] \leavevmode
3887\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3888
3889\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Credentials for kadmin/changepw service
3890
3891\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{newpw} - New password
3892
3893\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{change\_password\_for} - Change the password for this principal
3894
3895\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code} - Numeric error code from server
3896
3897\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code\_string} - String equivalent to \sphinxstyleemphasis{result\_code}
3898
3899\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_string} - Data returned from the remote system
3900
3901\end{description}\end{quote}
3902\begin{quote}\begin{description}
3903\item[{retval}] \leavevmode\begin{itemize}
3904\item {}
39050   Success and result\_code is set to KRB5\_KPASSWD\_SUCCESS .
3906
3907\end{itemize}
3908
3909\item[{return}] \leavevmode\begin{itemize}
3910\item {}
3911Kerberos error codes.
3912
3913\end{itemize}
3914
3915\end{description}\end{quote}
3916
3917This function uses the credentials \sphinxstyleemphasis{creds} to set the password \sphinxstyleemphasis{newpw} for the principal \sphinxstyleemphasis{change\_password\_for} . It implements the set password operation of RFC 3244, for interoperability with Microsoft Windows implementations.
3918
3919The error code and strings are returned in \sphinxstyleemphasis{result\_code} , \sphinxstyleemphasis{result\_code\_string} and \sphinxstyleemphasis{result\_string} .
3920
3921\begin{sphinxadmonition}{note}{Note:}
3922If \sphinxstyleemphasis{change\_password\_for} is NULL, the change is performed on the current principal. If \sphinxstyleemphasis{change\_password\_for} is non-null, the change is performed on the principal name passed in \sphinxstyleemphasis{change\_password\_for} .
3923\end{sphinxadmonition}
3924
3925
3926\subsubsection{krb5\_set\_password\_using\_ccache -  Set a password for a principal using cached credentials.}
3927\label{\detokenize{appdev/refs/api/krb5_set_password_using_ccache:krb5-set-password-using-ccache-set-a-password-for-a-principal-using-cached-credentials}}\label{\detokenize{appdev/refs/api/krb5_set_password_using_ccache::doc}}\index{krb5\_set\_password\_using\_ccache (C function)}
3928
3929\begin{fulllineitems}
3930\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_password_using_ccache:c.krb5_set_password_using_ccache}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_set\_password\_using\_ccache}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, const char *\sphinxstyleemphasis{ newpw}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ change\_password\_for}, int *\sphinxstyleemphasis{ result\_code}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ result\_code\_string}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ result\_string}}{}
3931\end{fulllineitems}
3932
3933\begin{quote}\begin{description}
3934\item[{param}] \leavevmode
3935\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3936
3937\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache
3938
3939\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{newpw} - New password
3940
3941\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{change\_password\_for} - Change the password for this principal
3942
3943\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code} - Numeric error code from server
3944
3945\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code\_string} - String equivalent to \sphinxstyleemphasis{result\_code}
3946
3947\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_string} - Data returned from the remote system
3948
3949\end{description}\end{quote}
3950\begin{quote}\begin{description}
3951\item[{retval}] \leavevmode\begin{itemize}
3952\item {}
39530   Success
3954
3955\end{itemize}
3956
3957\item[{return}] \leavevmode\begin{itemize}
3958\item {}
3959Kerberos error codes
3960
3961\end{itemize}
3962
3963\end{description}\end{quote}
3964
3965This function uses the cached credentials from \sphinxstyleemphasis{ccache} to set the password \sphinxstyleemphasis{newpw} for the principal \sphinxstyleemphasis{change\_password\_for} . It implements RFC 3244 set password operation (interoperable with MS Windows implementations) using the credential cache.
3966
3967The error code and strings are returned in \sphinxstyleemphasis{result\_code} , \sphinxstyleemphasis{result\_code\_string} and \sphinxstyleemphasis{result\_string} .
3968
3969\begin{sphinxadmonition}{note}{Note:}
3970If \sphinxstyleemphasis{change\_password\_for} is set to NULL, the change is performed on the default principal in \sphinxstyleemphasis{ccache} . If \sphinxstyleemphasis{change\_password\_for} is non null, the change is performed on the specified principal.
3971\end{sphinxadmonition}
3972
3973
3974\subsubsection{krb5\_set\_principal\_realm -  Set the realm field of a principal.}
3975\label{\detokenize{appdev/refs/api/krb5_set_principal_realm::doc}}\label{\detokenize{appdev/refs/api/krb5_set_principal_realm:krb5-set-principal-realm-set-the-realm-field-of-a-principal}}\index{krb5\_set\_principal\_realm (C function)}
3976
3977\begin{fulllineitems}
3978\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_principal_realm:c.krb5_set_principal_realm}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_set\_principal\_realm}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ principal}, const char *\sphinxstyleemphasis{ realm}}{}
3979\end{fulllineitems}
3980
3981\begin{quote}\begin{description}
3982\item[{param}] \leavevmode
3983\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3984
3985\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal name
3986
3987\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm name
3988
3989\end{description}\end{quote}
3990\begin{quote}\begin{description}
3991\item[{retval}] \leavevmode\begin{itemize}
3992\item {}
39930   Success
3994
3995\end{itemize}
3996
3997\item[{return}] \leavevmode\begin{itemize}
3998\item {}
3999Kerberos error codes
4000
4001\end{itemize}
4002
4003\end{description}\end{quote}
4004
4005Set the realm name part of \sphinxstyleemphasis{principal} to \sphinxstyleemphasis{realm} , overwriting the previous realm.
4006
4007
4008\subsubsection{krb5\_set\_trace\_callback -  Specify a callback function for trace events.}
4009\label{\detokenize{appdev/refs/api/krb5_set_trace_callback:krb5-set-trace-callback-specify-a-callback-function-for-trace-events}}\label{\detokenize{appdev/refs/api/krb5_set_trace_callback::doc}}\index{krb5\_set\_trace\_callback (C function)}
4010
4011\begin{fulllineitems}
4012\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_trace_callback:c.krb5_set_trace_callback}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_set\_trace\_callback}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_trace_callback:c.krb5_trace_callback}]{\sphinxcrossref{krb5\_trace\_callback}}}\sphinxstyleemphasis{ fn}, void *\sphinxstyleemphasis{ cb\_data}}{}
4013\end{fulllineitems}
4014
4015\begin{quote}\begin{description}
4016\item[{param}] \leavevmode
4017\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4018
4019\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fn} - Callback function
4020
4021\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cb\_data} - Callback data
4022
4023\end{description}\end{quote}
4024\begin{quote}\begin{description}
4025\item[{return}] \leavevmode\begin{itemize}
4026\item {}
4027Returns KRB5\_TRACE\_NOSUPP if tracing is not supported in the library (unless fn is NULL).
4028
4029\end{itemize}
4030
4031\end{description}\end{quote}
4032
4033Specify a callback for trace events occurring in krb5 operations performed within \sphinxstyleemphasis{context} . \sphinxstyleemphasis{fn} will be invoked with \sphinxstyleemphasis{context} as the first argument, \sphinxstyleemphasis{cb\_data} as the last argument, and a pointer to a krb5\_trace\_info as the second argument. If the trace callback is reset via this function or \sphinxstyleemphasis{context} is destroyed, \sphinxstyleemphasis{fn} will be invoked with a NULL second argument so it can clean up \sphinxstyleemphasis{cb\_data} . Supply a NULL value for \sphinxstyleemphasis{fn} to disable trace callbacks within \sphinxstyleemphasis{context} .
4034
4035\begin{sphinxadmonition}{note}{Note:}
4036This function overrides the information passed through the \sphinxstyleemphasis{KRB5\_TRACE} environment variable.
4037\end{sphinxadmonition}
4038
4039\begin{sphinxadmonition}{note}{Note:}
4040New in 1.9
4041\end{sphinxadmonition}
4042
4043
4044\subsubsection{krb5\_set\_trace\_filename -  Specify a file name for directing trace events.}
4045\label{\detokenize{appdev/refs/api/krb5_set_trace_filename:krb5-set-trace-filename-specify-a-file-name-for-directing-trace-events}}\label{\detokenize{appdev/refs/api/krb5_set_trace_filename::doc}}\index{krb5\_set\_trace\_filename (C function)}
4046
4047\begin{fulllineitems}
4048\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_trace_filename:c.krb5_set_trace_filename}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_set\_trace\_filename}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ filename}}{}
4049\end{fulllineitems}
4050
4051\begin{quote}\begin{description}
4052\item[{param}] \leavevmode
4053\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4054
4055\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{filename} - File name
4056
4057\end{description}\end{quote}
4058\begin{quote}\begin{description}
4059\item[{retval}] \leavevmode\begin{itemize}
4060\item {}
4061KRB5\_TRACE\_NOSUPP   Tracing is not supported in the library.
4062
4063\end{itemize}
4064
4065\end{description}\end{quote}
4066
4067Open \sphinxstyleemphasis{filename} for appending (creating it, if necessary) and set up a callback to write trace events to it.
4068
4069\begin{sphinxadmonition}{note}{Note:}
4070This function overrides the information passed through the \sphinxstyleemphasis{KRB5\_TRACE} environment variable.
4071\end{sphinxadmonition}
4072
4073\begin{sphinxadmonition}{note}{Note:}
4074New in 1.9
4075\end{sphinxadmonition}
4076
4077
4078\subsubsection{krb5\_sname\_match -  Test whether a principal matches a matching principal.}
4079\label{\detokenize{appdev/refs/api/krb5_sname_match::doc}}\label{\detokenize{appdev/refs/api/krb5_sname_match:krb5-sname-match-test-whether-a-principal-matches-a-matching-principal}}\index{krb5\_sname\_match (C function)}
4080
4081\begin{fulllineitems}
4082\phantomsection\label{\detokenize{appdev/refs/api/krb5_sname_match:c.krb5_sname_match}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_sname\_match}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ matching}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ}}{}
4083\end{fulllineitems}
4084
4085\begin{quote}\begin{description}
4086\item[{param}] \leavevmode
4087\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4088
4089\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{matching} - Matching principal
4090
4091\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ} - Principal to test
4092
4093\end{description}\end{quote}
4094\begin{quote}\begin{description}
4095\item[{return}] \leavevmode\begin{itemize}
4096\item {}
4097TRUE if princ matches matching , FALSE otherwise.
4098
4099\end{itemize}
4100
4101\end{description}\end{quote}
4102
4103If \sphinxstyleemphasis{matching} is NULL, return TRUE. If \sphinxstyleemphasis{matching} is not a matching principal, return the value of krb5\_principal\_compare(context, matching, princ).
4104
4105\begin{sphinxadmonition}{note}{Note:}
4106A matching principal is a host-based principal with an empty realm and/or second data component (hostname). Profile configuration may cause the hostname to be ignored even if it is present. A principal matches a matching principal if the former has the same non-empty (and non-ignored) components of the latter.
4107\end{sphinxadmonition}
4108
4109
4110\subsubsection{krb5\_sname\_to\_principal -  Generate a full principal name from a service name.}
4111\label{\detokenize{appdev/refs/api/krb5_sname_to_principal:krb5-sname-to-principal-generate-a-full-principal-name-from-a-service-name}}\label{\detokenize{appdev/refs/api/krb5_sname_to_principal::doc}}\index{krb5\_sname\_to\_principal (C function)}
4112
4113\begin{fulllineitems}
4114\phantomsection\label{\detokenize{appdev/refs/api/krb5_sname_to_principal:c.krb5_sname_to_principal}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_sname\_to\_principal}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ hostname}, const char *\sphinxstyleemphasis{ sname}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}\sphinxstyleemphasis{ type}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ ret\_princ}}{}
4115\end{fulllineitems}
4116
4117\begin{quote}\begin{description}
4118\item[{param}] \leavevmode
4119\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4120
4121\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{hostname} - Host name, or NULL to use local host
4122
4123\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{sname} - Service name, or NULL to use \sphinxstylestrong{“host”}
4124
4125\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - Principal type
4126
4127\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ret\_princ} - Generated principal
4128
4129\end{description}\end{quote}
4130\begin{quote}\begin{description}
4131\item[{retval}] \leavevmode\begin{itemize}
4132\item {}
41330   Success
4134
4135\end{itemize}
4136
4137\item[{return}] \leavevmode\begin{itemize}
4138\item {}
4139Kerberos error codes
4140
4141\end{itemize}
4142
4143\end{description}\end{quote}
4144
4145This function converts a \sphinxstyleemphasis{hostname} and \sphinxstyleemphasis{sname} into \sphinxstyleemphasis{krb5\_principal} structure \sphinxstyleemphasis{ret\_princ} . The returned principal will be of the form \sphinxstyleemphasis{sname/hostname@REALM} where REALM is determined by {\hyperref[\detokenize{appdev/refs/api/krb5_get_host_realm:c.krb5_get_host_realm}]{\sphinxcrossref{\sphinxcode{krb5\_get\_host\_realm()}}}} . In some cases this may be the referral (empty) realm.
4146
4147The \sphinxstyleemphasis{type} can be one of the following:
4148\begin{quote}
4149\begin{itemize}
4150\item {}
4151{\hyperref[\detokenize{appdev/refs/macros/KRB5_NT_SRV_HST:KRB5_NT_SRV_HST}]{\sphinxcrossref{\sphinxcode{KRB5\_NT\_SRV\_HST}}}} canonicalizes the host name before looking up the realm and generating the principal.
4152
4153\item {}
4154{\hyperref[\detokenize{appdev/refs/macros/KRB5_NT_UNKNOWN:KRB5_NT_UNKNOWN}]{\sphinxcrossref{\sphinxcode{KRB5\_NT\_UNKNOWN}}}} accepts the hostname as given, and does not canonicalize it.
4155
4156\end{itemize}
4157
4158Use krb5\_free\_principal to free \sphinxstyleemphasis{ret\_princ} when it is no longer needed.
4159\end{quote}
4160
4161
4162\subsubsection{krb5\_unparse\_name -  Convert a krb5\_principal structure to a string representation.}
4163\label{\detokenize{appdev/refs/api/krb5_unparse_name:krb5-unparse-name-convert-a-krb5-principal-structure-to-a-string-representation}}\label{\detokenize{appdev/refs/api/krb5_unparse_name::doc}}\index{krb5\_unparse\_name (C function)}
4164
4165\begin{fulllineitems}
4166\phantomsection\label{\detokenize{appdev/refs/api/krb5_unparse_name:c.krb5_unparse_name}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_unparse\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, char **\sphinxstyleemphasis{ name}}{}
4167\end{fulllineitems}
4168
4169\begin{quote}\begin{description}
4170\item[{param}] \leavevmode
4171\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4172
4173\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal
4174
4175\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} - String representation of principal name
4176
4177\end{description}\end{quote}
4178\begin{quote}\begin{description}
4179\item[{retval}] \leavevmode\begin{itemize}
4180\item {}
41810   Success
4182
4183\end{itemize}
4184
4185\item[{return}] \leavevmode\begin{itemize}
4186\item {}
4187Kerberos error codes
4188
4189\end{itemize}
4190
4191\end{description}\end{quote}
4192
4193The resulting string representation uses the format and quoting conventions described for {\hyperref[\detokenize{appdev/refs/api/krb5_parse_name:c.krb5_parse_name}]{\sphinxcrossref{\sphinxcode{krb5\_parse\_name()}}}} .
4194
4195Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_unparsed_name:c.krb5_free_unparsed_name}]{\sphinxcrossref{\sphinxcode{krb5\_free\_unparsed\_name()}}}} to free \sphinxstyleemphasis{name} when it is no longer needed.
4196
4197
4198\subsubsection{krb5\_unparse\_name\_ext -  Convert krb5\_principal structure to string and length.}
4199\label{\detokenize{appdev/refs/api/krb5_unparse_name_ext:krb5-unparse-name-ext-convert-krb5-principal-structure-to-string-and-length}}\label{\detokenize{appdev/refs/api/krb5_unparse_name_ext::doc}}\index{krb5\_unparse\_name\_ext (C function)}
4200
4201\begin{fulllineitems}
4202\phantomsection\label{\detokenize{appdev/refs/api/krb5_unparse_name_ext:c.krb5_unparse_name_ext}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_unparse\_name\_ext}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, char **\sphinxstyleemphasis{ name}, unsigned int *\sphinxstyleemphasis{ size}}{}
4203\end{fulllineitems}
4204
4205\begin{quote}\begin{description}
4206\item[{param}] \leavevmode
4207\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4208
4209\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal
4210
4211\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{name} - String representation of principal name
4212
4213\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{size} - Size of unparsed name
4214
4215\end{description}\end{quote}
4216\begin{quote}\begin{description}
4217\item[{retval}] \leavevmode\begin{itemize}
4218\item {}
42190   Success
4220
4221\end{itemize}
4222
4223\item[{return}] \leavevmode\begin{itemize}
4224\item {}
4225Kerberos error codes. On failure name is set to NULL
4226
4227\end{itemize}
4228
4229\end{description}\end{quote}
4230
4231This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_unparse_name:c.krb5_unparse_name}]{\sphinxcrossref{\sphinxcode{krb5\_unparse\_name()}}}} , but allows the use of an existing buffer for the result. If size is not NULL, then \sphinxstyleemphasis{name} must point to either NULL or an existing buffer of at least the size pointed to by \sphinxstyleemphasis{size} . The buffer will be allocated or resized if necessary, with the new pointer stored into \sphinxstyleemphasis{name} . Whether or not the buffer is resized, the necessary space for the result, including null terminator, will be stored into \sphinxstyleemphasis{size} .
4232
4233If size is NULL, this function behaves exactly as {\hyperref[\detokenize{appdev/refs/api/krb5_unparse_name:c.krb5_unparse_name}]{\sphinxcrossref{\sphinxcode{krb5\_unparse\_name()}}}} .
4234
4235
4236\subsubsection{krb5\_unparse\_name\_flags -  Convert krb5\_principal structure to a string with flags.}
4237\label{\detokenize{appdev/refs/api/krb5_unparse_name_flags::doc}}\label{\detokenize{appdev/refs/api/krb5_unparse_name_flags:krb5-unparse-name-flags-convert-krb5-principal-structure-to-a-string-with-flags}}\index{krb5\_unparse\_name\_flags (C function)}
4238
4239\begin{fulllineitems}
4240\phantomsection\label{\detokenize{appdev/refs/api/krb5_unparse_name_flags:c.krb5_unparse_name_flags}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_unparse\_name\_flags}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, int\sphinxstyleemphasis{ flags}, char **\sphinxstyleemphasis{ name}}{}
4241\end{fulllineitems}
4242
4243\begin{quote}\begin{description}
4244\item[{param}] \leavevmode
4245\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4246
4247\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal
4248
4249\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flags
4250
4251\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} - String representation of principal name
4252
4253\end{description}\end{quote}
4254\begin{quote}\begin{description}
4255\item[{retval}] \leavevmode\begin{itemize}
4256\item {}
42570   Success
4258
4259\end{itemize}
4260
4261\item[{return}] \leavevmode\begin{itemize}
4262\item {}
4263Kerberos error codes. On failure name is set to NULL
4264
4265\end{itemize}
4266
4267\end{description}\end{quote}
4268
4269Similar to {\hyperref[\detokenize{appdev/refs/api/krb5_unparse_name:c.krb5_unparse_name}]{\sphinxcrossref{\sphinxcode{krb5\_unparse\_name()}}}} , this function converts a krb5\_principal structure to a string representation.
4270
4271The following flags are valid:
4272\begin{quote}
4273\begin{itemize}
4274\item {}
4275{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_SHORT:KRB5_PRINCIPAL_UNPARSE_SHORT}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_UNPARSE\_SHORT}}}} - omit realm if it is the local realm
4276
4277\item {}
4278{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_NO_REALM:KRB5_PRINCIPAL_UNPARSE_NO_REALM}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_UNPARSE\_NO\_REALM}}}} - omit realm
4279
4280\item {}
4281{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY:KRB5_PRINCIPAL_UNPARSE_DISPLAY}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY}}}} - do not quote special characters
4282
4283\end{itemize}
4284
4285Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_unparsed_name:c.krb5_free_unparsed_name}]{\sphinxcrossref{\sphinxcode{krb5\_free\_unparsed\_name()}}}} to free \sphinxstyleemphasis{name} when it is no longer needed.
4286\end{quote}
4287
4288
4289\subsubsection{krb5\_unparse\_name\_flags\_ext -  Convert krb5\_principal structure to string format with flags.}
4290\label{\detokenize{appdev/refs/api/krb5_unparse_name_flags_ext:krb5-unparse-name-flags-ext-convert-krb5-principal-structure-to-string-format-with-flags}}\label{\detokenize{appdev/refs/api/krb5_unparse_name_flags_ext::doc}}\index{krb5\_unparse\_name\_flags\_ext (C function)}
4291
4292\begin{fulllineitems}
4293\phantomsection\label{\detokenize{appdev/refs/api/krb5_unparse_name_flags_ext:c.krb5_unparse_name_flags_ext}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_unparse\_name\_flags\_ext}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, int\sphinxstyleemphasis{ flags}, char **\sphinxstyleemphasis{ name}, unsigned int *\sphinxstyleemphasis{ size}}{}
4294\end{fulllineitems}
4295
4296\begin{quote}\begin{description}
4297\item[{param}] \leavevmode
4298\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4299
4300\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal
4301
4302\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flags
4303
4304\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} - Single string format of principal name
4305
4306\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{size} - Size of unparsed name buffer
4307
4308\end{description}\end{quote}
4309\begin{quote}\begin{description}
4310\item[{retval}] \leavevmode\begin{itemize}
4311\item {}
43120   Success
4313
4314\end{itemize}
4315
4316\item[{return}] \leavevmode\begin{itemize}
4317\item {}
4318Kerberos error codes. On failure name is set to NULL
4319
4320\end{itemize}
4321
4322\end{description}\end{quote}
4323
4324
4325\subsubsection{krb5\_us\_timeofday -  Retrieve the system time of day, in sec and ms, since the epoch.}
4326\label{\detokenize{appdev/refs/api/krb5_us_timeofday:krb5-us-timeofday-retrieve-the-system-time-of-day-in-sec-and-ms-since-the-epoch}}\label{\detokenize{appdev/refs/api/krb5_us_timeofday::doc}}\index{krb5\_us\_timeofday (C function)}
4327
4328\begin{fulllineitems}
4329\phantomsection\label{\detokenize{appdev/refs/api/krb5_us_timeofday:c.krb5_us_timeofday}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_us\_timeofday}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} *\sphinxstyleemphasis{ seconds}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} *\sphinxstyleemphasis{ microseconds}}{}
4330\end{fulllineitems}
4331
4332\begin{quote}\begin{description}
4333\item[{param}] \leavevmode
4334\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4335
4336\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{seconds} - System timeofday, seconds portion
4337
4338\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{microseconds} - System timeofday, microseconds portion
4339
4340\end{description}\end{quote}
4341\begin{quote}\begin{description}
4342\item[{retval}] \leavevmode\begin{itemize}
4343\item {}
43440   Success
4345
4346\end{itemize}
4347
4348\item[{return}] \leavevmode\begin{itemize}
4349\item {}
4350Kerberos error codes
4351
4352\end{itemize}
4353
4354\end{description}\end{quote}
4355
4356This function retrieves the system time of day with the context specific time offset adjustment.
4357
4358
4359\subsubsection{krb5\_verify\_authdata\_kdc\_issued -  Unwrap and verify AD-KDCIssued authorization data.}
4360\label{\detokenize{appdev/refs/api/krb5_verify_authdata_kdc_issued:krb5-verify-authdata-kdc-issued-unwrap-and-verify-ad-kdcissued-authorization-data}}\label{\detokenize{appdev/refs/api/krb5_verify_authdata_kdc_issued::doc}}\index{krb5\_verify\_authdata\_kdc\_issued (C function)}
4361
4362\begin{fulllineitems}
4363\phantomsection\label{\detokenize{appdev/refs/api/krb5_verify_authdata_kdc_issued:c.krb5_verify_authdata_kdc_issued}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_verify\_authdata\_kdc\_issued}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, const {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} *\sphinxstyleemphasis{ ad\_kdcissued}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ issuer}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} ***\sphinxstyleemphasis{ authdata}}{}
4364\end{fulllineitems}
4365
4366\begin{quote}\begin{description}
4367\item[{param}] \leavevmode
4368\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4369
4370\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Session key
4371
4372\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ad\_kdcissued} - AD-KDCIssued authorization data to be unwrapped
4373
4374\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{issuer} - Name of issuing principal (or NULL)
4375
4376\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{authdata} - Unwrapped list of authorization data
4377
4378\end{description}\end{quote}
4379
4380This function unwraps an AD-KDCIssued authdatum (see RFC 4120 section 5.2.6.2) and verifies its signature against \sphinxstyleemphasis{key} . The issuer field of the authdatum element is returned in \sphinxstyleemphasis{issuer} , and the unwrapped list of authdata is returned in \sphinxstyleemphasis{authdata} .
4381
4382
4383\subsection{Rarely used public interfaces}
4384\label{\detokenize{appdev/refs/api/index:rarely-used-public-interfaces}}
4385
4386\subsubsection{krb5\_425\_conv\_principal -  Convert a Kerberos V4 principal to a Kerberos V5 principal.}
4387\label{\detokenize{appdev/refs/api/krb5_425_conv_principal:krb5-425-conv-principal-convert-a-kerberos-v4-principal-to-a-kerberos-v5-principal}}\label{\detokenize{appdev/refs/api/krb5_425_conv_principal::doc}}\index{krb5\_425\_conv\_principal (C function)}
4388
4389\begin{fulllineitems}
4390\phantomsection\label{\detokenize{appdev/refs/api/krb5_425_conv_principal:c.krb5_425_conv_principal}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_425\_conv\_principal}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ name}, const char *\sphinxstyleemphasis{ instance}, const char *\sphinxstyleemphasis{ realm}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ princ}}{}
4391\end{fulllineitems}
4392
4393\begin{quote}\begin{description}
4394\item[{param}] \leavevmode
4395\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4396
4397\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - V4 name
4398
4399\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{instance} - V4 instance
4400
4401\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm
4402
4403\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ} - V5 principal
4404
4405\end{description}\end{quote}
4406\begin{quote}\begin{description}
4407\item[{retval}] \leavevmode\begin{itemize}
4408\item {}
44090   Success; otherwise - Kerberos error codes
4410
4411\end{itemize}
4412
4413\end{description}\end{quote}
4414
4415This function builds a \sphinxstyleemphasis{princ} from V4 specification based on given input \sphinxstyleemphasis{name.instance@realm} .
4416
4417Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}} to free \sphinxstyleemphasis{princ} when it is no longer needed.
4418
4419
4420\subsubsection{krb5\_524\_conv\_principal -  Convert a Kerberos V5 principal to a Kerberos V4 principal.}
4421\label{\detokenize{appdev/refs/api/krb5_524_conv_principal:krb5-524-conv-principal-convert-a-kerberos-v5-principal-to-a-kerberos-v4-principal}}\label{\detokenize{appdev/refs/api/krb5_524_conv_principal::doc}}\index{krb5\_524\_conv\_principal (C function)}
4422
4423\begin{fulllineitems}
4424\phantomsection\label{\detokenize{appdev/refs/api/krb5_524_conv_principal:c.krb5_524_conv_principal}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_524\_conv\_principal}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ princ}, char *\sphinxstyleemphasis{ name}, char *\sphinxstyleemphasis{ inst}, char *\sphinxstyleemphasis{ realm}}{}
4425\end{fulllineitems}
4426
4427\begin{quote}\begin{description}
4428\item[{param}] \leavevmode
4429\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4430
4431\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ} - V5 Principal
4432
4433\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} - V4 principal’s name to be filled in
4434
4435\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{inst} - V4 principal’s instance name to be filled in
4436
4437\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realm} - Principal’s realm name to be filled in
4438
4439\end{description}\end{quote}
4440\begin{quote}\begin{description}
4441\item[{retval}] \leavevmode\begin{itemize}
4442\item {}
44430   Success
4444
4445\item {}
4446KRB5\_INVALID\_PRINCIPAL   Invalid principal name
4447
4448\item {}
4449KRB5\_CONFIG\_CANTOPEN   Can’t open or find Kerberos configuration file
4450
4451\end{itemize}
4452
4453\item[{return}] \leavevmode\begin{itemize}
4454\item {}
4455Kerberos error codes
4456
4457\end{itemize}
4458
4459\end{description}\end{quote}
4460
4461This function separates a V5 principal \sphinxstyleemphasis{princ} into \sphinxstyleemphasis{name} , \sphinxstyleemphasis{instance} , and \sphinxstyleemphasis{realm} .
4462
4463
4464\subsubsection{krb5\_address\_compare -  Compare two Kerberos addresses.}
4465\label{\detokenize{appdev/refs/api/krb5_address_compare:krb5-address-compare-compare-two-kerberos-addresses}}\label{\detokenize{appdev/refs/api/krb5_address_compare::doc}}\index{krb5\_address\_compare (C function)}
4466
4467\begin{fulllineitems}
4468\phantomsection\label{\detokenize{appdev/refs/api/krb5_address_compare:c.krb5_address_compare}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_address\_compare}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *\sphinxstyleemphasis{ addr1}, const {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *\sphinxstyleemphasis{ addr2}}{}
4469\end{fulllineitems}
4470
4471\begin{quote}\begin{description}
4472\item[{param}] \leavevmode
4473\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4474
4475\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr1} - First address to be compared
4476
4477\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr2} - Second address to be compared
4478
4479\end{description}\end{quote}
4480\begin{quote}\begin{description}
4481\item[{return}] \leavevmode\begin{itemize}
4482\item {}
4483TRUE if the addresses are the same, FALSE otherwise
4484
4485\end{itemize}
4486
4487\end{description}\end{quote}
4488
4489
4490\subsubsection{krb5\_address\_order -  Return an ordering of the specified addresses.}
4491\label{\detokenize{appdev/refs/api/krb5_address_order:krb5-address-order-return-an-ordering-of-the-specified-addresses}}\label{\detokenize{appdev/refs/api/krb5_address_order::doc}}\index{krb5\_address\_order (C function)}
4492
4493\begin{fulllineitems}
4494\phantomsection\label{\detokenize{appdev/refs/api/krb5_address_order:c.krb5_address_order}}\pysiglinewithargsret{int \sphinxbfcode{krb5\_address\_order}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *\sphinxstyleemphasis{ addr1}, const {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *\sphinxstyleemphasis{ addr2}}{}
4495\end{fulllineitems}
4496
4497\begin{quote}\begin{description}
4498\item[{param}] \leavevmode
4499\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4500
4501\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr1} - First address
4502
4503\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr2} - Second address
4504
4505\end{description}\end{quote}
4506\begin{quote}\begin{description}
4507\item[{retval}] \leavevmode\begin{itemize}
4508\item {}
45090   The two addresses are the same
4510
4511\item {}
4512\end{itemize}
4513
4514\end{description}\end{quote}
4515
4516
4517\subsubsection{krb5\_address\_search -  Search a list of addresses for a specified address.}
4518\label{\detokenize{appdev/refs/api/krb5_address_search:krb5-address-search-search-a-list-of-addresses-for-a-specified-address}}\label{\detokenize{appdev/refs/api/krb5_address_search::doc}}\index{krb5\_address\_search (C function)}
4519
4520\begin{fulllineitems}
4521\phantomsection\label{\detokenize{appdev/refs/api/krb5_address_search:c.krb5_address_search}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_address\_search}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *\sphinxstyleemphasis{ addr}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *const *\sphinxstyleemphasis{ addrlist}}{}
4522\end{fulllineitems}
4523
4524\begin{quote}\begin{description}
4525\item[{param}] \leavevmode
4526\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4527
4528\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr} - Address to search for
4529
4530\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addrlist} - Address list to be searched (or NULL)
4531
4532\end{description}\end{quote}
4533\begin{quote}\begin{description}
4534\item[{return}] \leavevmode\begin{itemize}
4535\item {}
4536TRUE if addr is listed in addrlist , or addrlist is NULL; FALSE otherwise
4537
4538\end{itemize}
4539
4540\end{description}\end{quote}
4541
4542\begin{sphinxadmonition}{note}{Note:}
4543If \sphinxstyleemphasis{addrlist} contains only a NetBIOS addresses, it will be treated as a null list.
4544\end{sphinxadmonition}
4545
4546
4547\subsubsection{krb5\_allow\_weak\_crypto -  Allow the application to override the profile’s allow\_weak\_crypto setting.}
4548\label{\detokenize{appdev/refs/api/krb5_allow_weak_crypto::doc}}\label{\detokenize{appdev/refs/api/krb5_allow_weak_crypto:krb5-allow-weak-crypto-allow-the-application-to-override-the-profile-s-allow-weak-crypto-setting}}\index{krb5\_allow\_weak\_crypto (C function)}
4549
4550\begin{fulllineitems}
4551\phantomsection\label{\detokenize{appdev/refs/api/krb5_allow_weak_crypto:c.krb5_allow_weak_crypto}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_allow\_weak\_crypto}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}}\sphinxstyleemphasis{ enable}}{}
4552\end{fulllineitems}
4553
4554\begin{quote}\begin{description}
4555\item[{param}] \leavevmode
4556\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4557
4558\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enable} - Boolean flag
4559
4560\end{description}\end{quote}
4561\begin{quote}\begin{description}
4562\item[{retval}] \leavevmode\begin{itemize}
4563\item {}
45640   (always)
4565
4566\end{itemize}
4567
4568\end{description}\end{quote}
4569
4570This function allows an application to override the allow\_weak\_crypto setting. It is primarily for use by aklog.
4571
4572
4573\subsubsection{krb5\_aname\_to\_localname -  Convert a principal name to a local name.}
4574\label{\detokenize{appdev/refs/api/krb5_aname_to_localname::doc}}\label{\detokenize{appdev/refs/api/krb5_aname_to_localname:krb5-aname-to-localname-convert-a-principal-name-to-a-local-name}}\index{krb5\_aname\_to\_localname (C function)}
4575
4576\begin{fulllineitems}
4577\phantomsection\label{\detokenize{appdev/refs/api/krb5_aname_to_localname:c.krb5_aname_to_localname}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_aname\_to\_localname}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ aname}, int\sphinxstyleemphasis{ lnsize\_in}, char *\sphinxstyleemphasis{ lname}}{}
4578\end{fulllineitems}
4579
4580\begin{quote}\begin{description}
4581\item[{param}] \leavevmode
4582\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4583
4584\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{aname} - Principal name
4585
4586\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{lnsize\_in} - Space available in \sphinxstyleemphasis{lname}
4587
4588\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{lname} - Local name buffer to be filled in
4589
4590\end{description}\end{quote}
4591\begin{quote}\begin{description}
4592\item[{retval}] \leavevmode\begin{itemize}
4593\item {}
45940   Success
4595
4596\item {}
4597System   errors
4598
4599\end{itemize}
4600
4601\item[{return}] \leavevmode\begin{itemize}
4602\item {}
4603Kerberos error codes
4604
4605\end{itemize}
4606
4607\end{description}\end{quote}
4608
4609If \sphinxstyleemphasis{aname} does not correspond to any local account, KRB5\_LNAME\_NOTRANS is returned. If \sphinxstyleemphasis{lnsize\_in} is too small for the local name, KRB5\_CONFIG\_NOTENUFSPACE is returned.
4610
4611Local names, rather than principal names, can be used by programs that translate to an environment-specific name (for example, a user account name).
4612
4613
4614\subsubsection{krb5\_anonymous\_principal -  Build an anonymous principal.}
4615\label{\detokenize{appdev/refs/api/krb5_anonymous_principal:krb5-anonymous-principal-build-an-anonymous-principal}}\label{\detokenize{appdev/refs/api/krb5_anonymous_principal::doc}}\index{krb5\_anonymous\_principal (C function)}
4616
4617\begin{fulllineitems}
4618\phantomsection\label{\detokenize{appdev/refs/api/krb5_anonymous_principal:c.krb5_anonymous_principal}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}} \sphinxbfcode{krb5\_anonymous\_principal}}{void\sphinxstyleemphasis{ None}}{}
4619\end{fulllineitems}
4620
4621\begin{quote}\begin{description}
4622\item[{param}] \leavevmode
4623\sphinxstylestrong{None}
4624
4625\end{description}\end{quote}
4626
4627This function returns constant storage that must not be freed.
4628
4629
4630\sphinxstrong{See also:}
4631
4632
4633{\hyperref[\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_PRINCSTR:KRB5_ANONYMOUS_PRINCSTR}]{\sphinxcrossref{\sphinxcode{KRB5\_ANONYMOUS\_PRINCSTR}}}}
4634
4635
4636
4637
4638\subsubsection{krb5\_anonymous\_realm -  Return an anonymous realm data.}
4639\label{\detokenize{appdev/refs/api/krb5_anonymous_realm::doc}}\label{\detokenize{appdev/refs/api/krb5_anonymous_realm:krb5-anonymous-realm-return-an-anonymous-realm-data}}\index{krb5\_anonymous\_realm (C function)}
4640
4641\begin{fulllineitems}
4642\phantomsection\label{\detokenize{appdev/refs/api/krb5_anonymous_realm:c.krb5_anonymous_realm}}\pysiglinewithargsret{const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} * \sphinxbfcode{krb5\_anonymous\_realm}}{void\sphinxstyleemphasis{ None}}{}
4643\end{fulllineitems}
4644
4645\begin{quote}\begin{description}
4646\item[{param}] \leavevmode
4647\sphinxstylestrong{None}
4648
4649\end{description}\end{quote}
4650
4651This function returns constant storage that must not be freed.
4652
4653
4654\sphinxstrong{See also:}
4655
4656
4657{\hyperref[\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR:KRB5_ANONYMOUS_REALMSTR}]{\sphinxcrossref{\sphinxcode{KRB5\_ANONYMOUS\_REALMSTR}}}}
4658
4659
4660
4661
4662\subsubsection{krb5\_appdefault\_boolean -  Retrieve a boolean value from the appdefaults section of krb5.conf.}
4663\label{\detokenize{appdev/refs/api/krb5_appdefault_boolean::doc}}\label{\detokenize{appdev/refs/api/krb5_appdefault_boolean:krb5-appdefault-boolean-retrieve-a-boolean-value-from-the-appdefaults-section-of-krb5-conf}}\index{krb5\_appdefault\_boolean (C function)}
4664
4665\begin{fulllineitems}
4666\phantomsection\label{\detokenize{appdev/refs/api/krb5_appdefault_boolean:c.krb5_appdefault_boolean}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_appdefault\_boolean}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ appname}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ realm}, const char *\sphinxstyleemphasis{ option}, int\sphinxstyleemphasis{ default\_value}, int *\sphinxstyleemphasis{ ret\_value}}{}
4667\end{fulllineitems}
4668
4669\begin{quote}\begin{description}
4670\item[{param}] \leavevmode
4671\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4672
4673\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{appname} - Application name
4674
4675\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm name
4676
4677\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{option} - Option to be checked
4678
4679\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{default\_value} - Default value to return if no match is found
4680
4681\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ret\_value} - Boolean value of \sphinxstyleemphasis{option}
4682
4683\end{description}\end{quote}
4684
4685This function gets the application defaults for \sphinxstyleemphasis{option} based on the given \sphinxstyleemphasis{appname} and/or \sphinxstyleemphasis{realm} .
4686
4687
4688\sphinxstrong{See also:}
4689
4690
4691{\hyperref[\detokenize{appdev/refs/api/krb5_appdefault_string:c.krb5_appdefault_string}]{\sphinxcrossref{\sphinxcode{krb5\_appdefault\_string()}}}}
4692
4693
4694
4695
4696\subsubsection{krb5\_appdefault\_string -  Retrieve a string value from the appdefaults section of krb5.conf.}
4697\label{\detokenize{appdev/refs/api/krb5_appdefault_string::doc}}\label{\detokenize{appdev/refs/api/krb5_appdefault_string:krb5-appdefault-string-retrieve-a-string-value-from-the-appdefaults-section-of-krb5-conf}}\index{krb5\_appdefault\_string (C function)}
4698
4699\begin{fulllineitems}
4700\phantomsection\label{\detokenize{appdev/refs/api/krb5_appdefault_string:c.krb5_appdefault_string}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_appdefault\_string}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ appname}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ realm}, const char *\sphinxstyleemphasis{ option}, const char *\sphinxstyleemphasis{ default\_value}, char **\sphinxstyleemphasis{ ret\_value}}{}
4701\end{fulllineitems}
4702
4703\begin{quote}\begin{description}
4704\item[{param}] \leavevmode
4705\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4706
4707\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{appname} - Application name
4708
4709\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm name
4710
4711\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{option} - Option to be checked
4712
4713\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{default\_value} - Default value to return if no match is found
4714
4715\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ret\_value} - String value of \sphinxstyleemphasis{option}
4716
4717\end{description}\end{quote}
4718
4719This function gets the application defaults for \sphinxstyleemphasis{option} based on the given \sphinxstyleemphasis{appname} and/or \sphinxstyleemphasis{realm} .
4720
4721
4722\sphinxstrong{See also:}
4723
4724
4725{\hyperref[\detokenize{appdev/refs/api/krb5_appdefault_boolean:c.krb5_appdefault_boolean}]{\sphinxcrossref{\sphinxcode{krb5\_appdefault\_boolean()}}}}
4726
4727
4728
4729
4730\subsubsection{krb5\_auth\_con\_free -  Free a krb5\_auth\_context structure.}
4731\label{\detokenize{appdev/refs/api/krb5_auth_con_free:krb5-auth-con-free-free-a-krb5-auth-context-structure}}\label{\detokenize{appdev/refs/api/krb5_auth_con_free::doc}}\index{krb5\_auth\_con\_free (C function)}
4732
4733\begin{fulllineitems}
4734\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_free:c.krb5_auth_con_free}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_free}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}}{}
4735\end{fulllineitems}
4736
4737\begin{quote}\begin{description}
4738\item[{param}] \leavevmode
4739\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4740
4741\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context to be freed
4742
4743\end{description}\end{quote}
4744\begin{quote}\begin{description}
4745\item[{retval}] \leavevmode\begin{itemize}
4746\item {}
47470   (always)
4748
4749\end{itemize}
4750
4751\end{description}\end{quote}
4752
4753This function frees an auth context allocated by {\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_init:c.krb5_auth_con_init}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_init()}}}} .
4754
4755
4756\subsubsection{krb5\_auth\_con\_genaddrs -  Generate auth context addresses from a connected socket.}
4757\label{\detokenize{appdev/refs/api/krb5_auth_con_genaddrs::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_genaddrs:krb5-auth-con-genaddrs-generate-auth-context-addresses-from-a-connected-socket}}\index{krb5\_auth\_con\_genaddrs (C function)}
4758
4759\begin{fulllineitems}
4760\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_genaddrs:c.krb5_auth_con_genaddrs}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_genaddrs}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, int\sphinxstyleemphasis{ infd}, int\sphinxstyleemphasis{ flags}}{}
4761\end{fulllineitems}
4762
4763\begin{quote}\begin{description}
4764\item[{param}] \leavevmode
4765\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4766
4767\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
4768
4769\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{infd} - Connected socket descriptor
4770
4771\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flags
4772
4773\end{description}\end{quote}
4774\begin{quote}\begin{description}
4775\item[{retval}] \leavevmode\begin{itemize}
4776\item {}
47770   Success; otherwise - Kerberos error codes
4778
4779\end{itemize}
4780
4781\end{description}\end{quote}
4782
4783This function sets the local and/or remote addresses in \sphinxstyleemphasis{auth\_context} based on the local and remote endpoints of the socket \sphinxstyleemphasis{infd} . The following flags determine the operations performed:
4784\begin{itemize}
4785\item {}
4786{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR:KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_ADDR}}}} Generate local address.
4787
4788\item {}
4789{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR:KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_ADDR}}}} Generate remote address.
4790
4791\item {}
4792{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR:KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_FULL\_ADDR}}}} Generate local address and port.
4793
4794\item {}
4795{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR:KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_FULL\_ADDR}}}} Generate remote address and port.
4796
4797\end{itemize}
4798
4799
4800\subsubsection{krb5\_auth\_con\_get\_checksum\_func -  Get the checksum callback from an auth context.}
4801\label{\detokenize{appdev/refs/api/krb5_auth_con_get_checksum_func::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_get_checksum_func:krb5-auth-con-get-checksum-func-get-the-checksum-callback-from-an-auth-context}}\index{krb5\_auth\_con\_get\_checksum\_func (C function)}
4802
4803\begin{fulllineitems}
4804\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_get_checksum_func:c.krb5_auth_con_get_checksum_func}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_get\_checksum\_func}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_mk_req_checksum_func:c.krb5_mk_req_checksum_func}]{\sphinxcrossref{krb5\_mk\_req\_checksum\_func}}} *\sphinxstyleemphasis{ func}, void **\sphinxstyleemphasis{ data}}{}
4805\end{fulllineitems}
4806
4807\begin{quote}\begin{description}
4808\item[{param}] \leavevmode
4809\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4810
4811\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
4812
4813\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{func} - Checksum callback
4814
4815\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} - Callback argument
4816
4817\end{description}\end{quote}
4818\begin{quote}\begin{description}
4819\item[{retval}] \leavevmode\begin{itemize}
4820\item {}
48210   (always)
4822
4823\end{itemize}
4824
4825\end{description}\end{quote}
4826
4827
4828\subsubsection{krb5\_auth\_con\_getaddrs -  Retrieve address fields from an auth context.}
4829\label{\detokenize{appdev/refs/api/krb5_auth_con_getaddrs:krb5-auth-con-getaddrs-retrieve-address-fields-from-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getaddrs::doc}}\index{krb5\_auth\_con\_getaddrs (C function)}
4830
4831\begin{fulllineitems}
4832\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getaddrs:c.krb5_auth_con_getaddrs}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getaddrs}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} **\sphinxstyleemphasis{ local\_addr}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} **\sphinxstyleemphasis{ remote\_addr}}{}
4833\end{fulllineitems}
4834
4835\begin{quote}\begin{description}
4836\item[{param}] \leavevmode
4837\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4838
4839\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
4840
4841\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{local\_addr} - Local address (NULL if not needed)
4842
4843\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{remote\_addr} - Remote address (NULL if not needed)
4844
4845\end{description}\end{quote}
4846\begin{quote}\begin{description}
4847\item[{retval}] \leavevmode\begin{itemize}
4848\item {}
48490   Success; otherwise - Kerberos error codes
4850
4851\end{itemize}
4852
4853\end{description}\end{quote}
4854
4855
4856\subsubsection{krb5\_auth\_con\_getauthenticator -  Retrieve the authenticator from an auth context.}
4857\label{\detokenize{appdev/refs/api/krb5_auth_con_getauthenticator:krb5-auth-con-getauthenticator-retrieve-the-authenticator-from-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getauthenticator::doc}}\index{krb5\_auth\_con\_getauthenticator (C function)}
4858
4859\begin{fulllineitems}
4860\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getauthenticator:c.krb5_auth_con_getauthenticator}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getauthenticator}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{krb5\_authenticator}}} **\sphinxstyleemphasis{ authenticator}}{}
4861\end{fulllineitems}
4862
4863\begin{quote}\begin{description}
4864\item[{param}] \leavevmode
4865\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4866
4867\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
4868
4869\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{authenticator} - Authenticator
4870
4871\end{description}\end{quote}
4872\begin{quote}\begin{description}
4873\item[{retval}] \leavevmode\begin{itemize}
4874\item {}
48750   Success. Otherwise - Kerberos error codes
4876
4877\end{itemize}
4878
4879\end{description}\end{quote}
4880
4881Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_authenticator:c.krb5_free_authenticator}]{\sphinxcrossref{\sphinxcode{krb5\_free\_authenticator()}}}} to free \sphinxstyleemphasis{authenticator} when it is no longer needed.
4882
4883
4884\subsubsection{krb5\_auth\_con\_getflags -  Retrieve flags from a krb5\_auth\_context structure.}
4885\label{\detokenize{appdev/refs/api/krb5_auth_con_getflags:krb5-auth-con-getflags-retrieve-flags-from-a-krb5-auth-context-structure}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getflags::doc}}\index{krb5\_auth\_con\_getflags (C function)}
4886
4887\begin{fulllineitems}
4888\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getflags:c.krb5_auth_con_getflags}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getflags}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} *\sphinxstyleemphasis{ flags}}{}
4889\end{fulllineitems}
4890
4891\begin{quote}\begin{description}
4892\item[{param}] \leavevmode
4893\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4894
4895\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
4896
4897\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{flags} - Flags bit mask
4898
4899\end{description}\end{quote}
4900\begin{quote}\begin{description}
4901\item[{retval}] \leavevmode\begin{itemize}
4902\item {}
49030   (always)
4904
4905\end{itemize}
4906
4907\end{description}\end{quote}
4908
4909Valid values for \sphinxstyleemphasis{flags} are:
4910\begin{itemize}
4911\item {}
4912{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} Use timestamps
4913
4914\item {}
4915{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} Save timestamps
4916
4917\item {}
4918{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} Use sequence numbers
4919
4920\item {}
4921{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} Save sequence numbers
4922
4923\end{itemize}
4924
4925
4926\subsubsection{krb5\_auth\_con\_getkey -  Retrieve the session key from an auth context as a keyblock.}
4927\label{\detokenize{appdev/refs/api/krb5_auth_con_getkey::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getkey:krb5-auth-con-getkey-retrieve-the-session-key-from-an-auth-context-as-a-keyblock}}\index{krb5\_auth\_con\_getkey (C function)}
4928
4929\begin{fulllineitems}
4930\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getkey:c.krb5_auth_con_getkey}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getkey}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ keyblock}}{}
4931\end{fulllineitems}
4932
4933\begin{quote}\begin{description}
4934\item[{param}] \leavevmode
4935\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4936
4937\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
4938
4939\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keyblock} - Session key
4940
4941\end{description}\end{quote}
4942\begin{quote}\begin{description}
4943\item[{retval}] \leavevmode\begin{itemize}
4944\item {}
49450   Success. Otherwise - Kerberos error codes
4946
4947\end{itemize}
4948
4949\end{description}\end{quote}
4950
4951This function creates a keyblock containing the session key from \sphinxstyleemphasis{auth\_context} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock:c.krb5_free_keyblock}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock()}}}} to free \sphinxstyleemphasis{keyblock} when it is no longer needed
4952
4953
4954\subsubsection{krb5\_auth\_con\_getkey\_k -  Retrieve the session key from an auth context.}
4955\label{\detokenize{appdev/refs/api/krb5_auth_con_getkey_k:krb5-auth-con-getkey-k-retrieve-the-session-key-from-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getkey_k::doc}}\index{krb5\_auth\_con\_getkey\_k (C function)}
4956
4957\begin{fulllineitems}
4958\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getkey_k:c.krb5_auth_con_getkey_k}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getkey\_k}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}} *\sphinxstyleemphasis{ key}}{}
4959\end{fulllineitems}
4960
4961\begin{quote}\begin{description}
4962\item[{param}] \leavevmode
4963\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4964
4965\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
4966
4967\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Session key
4968
4969\end{description}\end{quote}
4970\begin{quote}\begin{description}
4971\item[{retval}] \leavevmode\begin{itemize}
4972\item {}
49730   (always)
4974
4975\end{itemize}
4976
4977\end{description}\end{quote}
4978
4979This function sets \sphinxstyleemphasis{key} to the session key from \sphinxstyleemphasis{auth\_context} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_k_free_key:c.krb5_k_free_key}]{\sphinxcrossref{\sphinxcode{krb5\_k\_free\_key()}}}} to release \sphinxstyleemphasis{key} when it is no longer needed.
4980
4981
4982\subsubsection{krb5\_auth\_con\_getlocalseqnumber -  Retrieve the local sequence number from an auth context.}
4983\label{\detokenize{appdev/refs/api/krb5_auth_con_getlocalseqnumber::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getlocalseqnumber:krb5-auth-con-getlocalseqnumber-retrieve-the-local-sequence-number-from-an-auth-context}}\index{krb5\_auth\_con\_getlocalseqnumber (C function)}
4984
4985\begin{fulllineitems}
4986\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getlocalseqnumber:c.krb5_auth_con_getlocalseqnumber}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getlocalseqnumber}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} *\sphinxstyleemphasis{ seqnumber}}{}
4987\end{fulllineitems}
4988
4989\begin{quote}\begin{description}
4990\item[{param}] \leavevmode
4991\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4992
4993\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
4994
4995\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{seqnumber} - Local sequence number
4996
4997\end{description}\end{quote}
4998\begin{quote}\begin{description}
4999\item[{retval}] \leavevmode\begin{itemize}
5000\item {}
50010   Success; otherwise - Kerberos error codes
5002
5003\end{itemize}
5004
5005\end{description}\end{quote}
5006
5007Retrieve the local sequence number from \sphinxstyleemphasis{auth\_context} and return it in \sphinxstyleemphasis{seqnumber} . The {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} flag must be set in \sphinxstyleemphasis{auth\_context} for this function to be useful.
5008
5009
5010\subsubsection{krb5\_auth\_con\_getrcache -  Retrieve the replay cache from an auth context.}
5011\label{\detokenize{appdev/refs/api/krb5_auth_con_getrcache:krb5-auth-con-getrcache-retrieve-the-replay-cache-from-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getrcache::doc}}\index{krb5\_auth\_con\_getrcache (C function)}
5012
5013\begin{fulllineitems}
5014\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getrcache:c.krb5_auth_con_getrcache}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getrcache}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_rcache:c.krb5_rcache}]{\sphinxcrossref{krb5\_rcache}}} *\sphinxstyleemphasis{ rcache}}{}
5015\end{fulllineitems}
5016
5017\begin{quote}\begin{description}
5018\item[{param}] \leavevmode
5019\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5020
5021\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
5022
5023\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rcache} - Replay cache handle
5024
5025\end{description}\end{quote}
5026\begin{quote}\begin{description}
5027\item[{retval}] \leavevmode\begin{itemize}
5028\item {}
50290   (always)
5030
5031\end{itemize}
5032
5033\end{description}\end{quote}
5034
5035This function fetches the replay cache from \sphinxstyleemphasis{auth\_context} . The caller should not close \sphinxstyleemphasis{rcache} .
5036
5037
5038\subsubsection{krb5\_auth\_con\_getrecvsubkey -  Retrieve the receiving subkey from an auth context as a keyblock.}
5039\label{\detokenize{appdev/refs/api/krb5_auth_con_getrecvsubkey:krb5-auth-con-getrecvsubkey-retrieve-the-receiving-subkey-from-an-auth-context-as-a-keyblock}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getrecvsubkey::doc}}\index{krb5\_auth\_con\_getrecvsubkey (C function)}
5040
5041\begin{fulllineitems}
5042\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getrecvsubkey:c.krb5_auth_con_getrecvsubkey}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getrecvsubkey}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ keyblock}}{}
5043\end{fulllineitems}
5044
5045\begin{quote}\begin{description}
5046\item[{param}] \leavevmode
5047\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
5048
5049\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context
5050
5051\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keyblock} - Receiving subkey
5052
5053\end{description}\end{quote}
5054\begin{quote}\begin{description}
5055\item[{retval}] \leavevmode\begin{itemize}
5056\item {}
50570   Success; otherwise - Kerberos error codes
5058
5059\end{itemize}
5060
5061\end{description}\end{quote}
5062
5063This function creates a keyblock containing the receiving subkey from \sphinxstyleemphasis{auth\_context} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock:c.krb5_free_keyblock}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock()}}}} to free \sphinxstyleemphasis{keyblock} when it is no longer needed.
5064
5065
5066\subsubsection{krb5\_auth\_con\_getrecvsubkey\_k -  Retrieve the receiving subkey from an auth context as a keyblock.}
5067\label{\detokenize{appdev/refs/api/krb5_auth_con_getrecvsubkey_k:krb5-auth-con-getrecvsubkey-k-retrieve-the-receiving-subkey-from-an-auth-context-as-a-keyblock}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getrecvsubkey_k::doc}}\index{krb5\_auth\_con\_getrecvsubkey\_k (C function)}
5068
5069\begin{fulllineitems}
5070\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getrecvsubkey_k:c.krb5_auth_con_getrecvsubkey_k}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getrecvsubkey\_k}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}} *\sphinxstyleemphasis{ key}}{}
5071\end{fulllineitems}
5072
5073\begin{quote}\begin{description}
5074\item[{param}] \leavevmode
5075\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
5076
5077\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context
5078
5079\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Receiving subkey
5080
5081\end{description}\end{quote}
5082\begin{quote}\begin{description}
5083\item[{retval}] \leavevmode\begin{itemize}
5084\item {}
50850   Success; otherwise - Kerberos error codes
5086
5087\end{itemize}
5088
5089\end{description}\end{quote}
5090
5091This function sets \sphinxstyleemphasis{key} to the receiving subkey from \sphinxstyleemphasis{auth\_context} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_k_free_key:c.krb5_k_free_key}]{\sphinxcrossref{\sphinxcode{krb5\_k\_free\_key()}}}} to release \sphinxstyleemphasis{key} when it is no longer needed.
5092
5093
5094\subsubsection{krb5\_auth\_con\_getremoteseqnumber -  Retrieve the remote sequence number from an auth context.}
5095\label{\detokenize{appdev/refs/api/krb5_auth_con_getremoteseqnumber:krb5-auth-con-getremoteseqnumber-retrieve-the-remote-sequence-number-from-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getremoteseqnumber::doc}}\index{krb5\_auth\_con\_getremoteseqnumber (C function)}
5096
5097\begin{fulllineitems}
5098\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getremoteseqnumber:c.krb5_auth_con_getremoteseqnumber}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getremoteseqnumber}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} *\sphinxstyleemphasis{ seqnumber}}{}
5099\end{fulllineitems}
5100
5101\begin{quote}\begin{description}
5102\item[{param}] \leavevmode
5103\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5104
5105\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
5106
5107\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{seqnumber} - Remote sequence number
5108
5109\end{description}\end{quote}
5110\begin{quote}\begin{description}
5111\item[{retval}] \leavevmode\begin{itemize}
5112\item {}
51130   Success; otherwise - Kerberos error codes
5114
5115\end{itemize}
5116
5117\end{description}\end{quote}
5118
5119Retrieve the remote sequence number from \sphinxstyleemphasis{auth\_context} and return it in \sphinxstyleemphasis{seqnumber} . The {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} flag must be set in \sphinxstyleemphasis{auth\_context} for this function to be useful.
5120
5121
5122\subsubsection{krb5\_auth\_con\_getsendsubkey -  Retrieve the send subkey from an auth context as a keyblock.}
5123\label{\detokenize{appdev/refs/api/krb5_auth_con_getsendsubkey:krb5-auth-con-getsendsubkey-retrieve-the-send-subkey-from-an-auth-context-as-a-keyblock}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getsendsubkey::doc}}\index{krb5\_auth\_con\_getsendsubkey (C function)}
5124
5125\begin{fulllineitems}
5126\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getsendsubkey:c.krb5_auth_con_getsendsubkey}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getsendsubkey}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ keyblock}}{}
5127\end{fulllineitems}
5128
5129\begin{quote}\begin{description}
5130\item[{param}] \leavevmode
5131\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
5132
5133\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context
5134
5135\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keyblock} - Send subkey
5136
5137\end{description}\end{quote}
5138\begin{quote}\begin{description}
5139\item[{retval}] \leavevmode\begin{itemize}
5140\item {}
51410   Success; otherwise - Kerberos error codes
5142
5143\end{itemize}
5144
5145\end{description}\end{quote}
5146
5147This function creates a keyblock containing the send subkey from \sphinxstyleemphasis{auth\_context} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock:c.krb5_free_keyblock}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock()}}}} to free \sphinxstyleemphasis{keyblock} when it is no longer needed.
5148
5149
5150\subsubsection{krb5\_auth\_con\_getsendsubkey\_k -  Retrieve the send subkey from an auth context.}
5151\label{\detokenize{appdev/refs/api/krb5_auth_con_getsendsubkey_k:krb5-auth-con-getsendsubkey-k-retrieve-the-send-subkey-from-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getsendsubkey_k::doc}}\index{krb5\_auth\_con\_getsendsubkey\_k (C function)}
5152
5153\begin{fulllineitems}
5154\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getsendsubkey_k:c.krb5_auth_con_getsendsubkey_k}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getsendsubkey\_k}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}} *\sphinxstyleemphasis{ key}}{}
5155\end{fulllineitems}
5156
5157\begin{quote}\begin{description}
5158\item[{param}] \leavevmode
5159\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
5160
5161\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context
5162
5163\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Send subkey
5164
5165\end{description}\end{quote}
5166\begin{quote}\begin{description}
5167\item[{retval}] \leavevmode\begin{itemize}
5168\item {}
51690   Success; otherwise - Kerberos error codes
5170
5171\end{itemize}
5172
5173\end{description}\end{quote}
5174
5175This function sets \sphinxstyleemphasis{key} to the send subkey from \sphinxstyleemphasis{auth\_context} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_k_free_key:c.krb5_k_free_key}]{\sphinxcrossref{\sphinxcode{krb5\_k\_free\_key()}}}} to release \sphinxstyleemphasis{key} when it is no longer needed.
5176
5177
5178\subsubsection{krb5\_auth\_con\_init -  Create and initialize an authentication context.}
5179\label{\detokenize{appdev/refs/api/krb5_auth_con_init:krb5-auth-con-init-create-and-initialize-an-authentication-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_init::doc}}\index{krb5\_auth\_con\_init (C function)}
5180
5181\begin{fulllineitems}
5182\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_init:c.krb5_auth_con_init}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_init}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}} *\sphinxstyleemphasis{ auth\_context}}{}
5183\end{fulllineitems}
5184
5185\begin{quote}\begin{description}
5186\item[{param}] \leavevmode
5187\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5188
5189\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{auth\_context} - Authentication context
5190
5191\end{description}\end{quote}
5192\begin{quote}\begin{description}
5193\item[{retval}] \leavevmode\begin{itemize}
5194\item {}
51950   Success; otherwise - Kerberos error codes
5196
5197\end{itemize}
5198
5199\end{description}\end{quote}
5200
5201This function creates an authentication context to hold configuration and state relevant to krb5 functions for authenticating principals and protecting messages once authentication has occurred.
5202
5203By default, flags for the context are set to enable the use of the replay cache ( {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} ), but not sequence numbers. Use {\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setflags:c.krb5_auth_con_setflags}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_setflags()}}}} to change the flags.
5204
5205The allocated \sphinxstyleemphasis{auth\_context} must be freed with {\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_free:c.krb5_auth_con_free}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_free()}}}} when it is no longer needed.
5206
5207
5208\subsubsection{krb5\_auth\_con\_set\_checksum\_func -  Set a checksum callback in an auth context.}
5209\label{\detokenize{appdev/refs/api/krb5_auth_con_set_checksum_func:krb5-auth-con-set-checksum-func-set-a-checksum-callback-in-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_set_checksum_func::doc}}\index{krb5\_auth\_con\_set\_checksum\_func (C function)}
5210
5211\begin{fulllineitems}
5212\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_set_checksum_func:c.krb5_auth_con_set_checksum_func}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_set\_checksum\_func}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_mk_req_checksum_func:c.krb5_mk_req_checksum_func}]{\sphinxcrossref{krb5\_mk\_req\_checksum\_func}}}\sphinxstyleemphasis{ func}, void *\sphinxstyleemphasis{ data}}{}
5213\end{fulllineitems}
5214
5215\begin{quote}\begin{description}
5216\item[{param}] \leavevmode
5217\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5218
5219\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
5220
5221\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{func} - Checksum callback
5222
5223\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Callback argument
5224
5225\end{description}\end{quote}
5226\begin{quote}\begin{description}
5227\item[{retval}] \leavevmode\begin{itemize}
5228\item {}
52290   (always)
5230
5231\end{itemize}
5232
5233\end{description}\end{quote}
5234
5235Set a callback to obtain checksum data in {\hyperref[\detokenize{appdev/refs/api/krb5_mk_req:c.krb5_mk_req}]{\sphinxcrossref{\sphinxcode{krb5\_mk\_req()}}}} . The callback will be invoked after the subkey and local sequence number are stored in \sphinxstyleemphasis{auth\_context} .
5236
5237
5238\subsubsection{krb5\_auth\_con\_set\_req\_cksumtype -  Set checksum type in an an auth context.}
5239\label{\detokenize{appdev/refs/api/krb5_auth_con_set_req_cksumtype:krb5-auth-con-set-req-cksumtype-set-checksum-type-in-an-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_set_req_cksumtype::doc}}\index{krb5\_auth\_con\_set\_req\_cksumtype (C function)}
5240
5241\begin{fulllineitems}
5242\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_set_req_cksumtype:c.krb5_auth_con_set_req_cksumtype}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_set\_req\_cksumtype}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ cksumtype}}{}
5243\end{fulllineitems}
5244
5245\begin{quote}\begin{description}
5246\item[{param}] \leavevmode
5247\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5248
5249\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
5250
5251\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type
5252
5253\end{description}\end{quote}
5254\begin{quote}\begin{description}
5255\item[{retval}] \leavevmode\begin{itemize}
5256\item {}
52570   Success. Otherwise - Kerberos error codes
5258
5259\end{itemize}
5260
5261\end{description}\end{quote}
5262
5263This function sets the checksum type in \sphinxstyleemphasis{auth\_context} to be used by {\hyperref[\detokenize{appdev/refs/api/krb5_mk_req:c.krb5_mk_req}]{\sphinxcrossref{\sphinxcode{krb5\_mk\_req()}}}} for the authenticator checksum.
5264
5265
5266\subsubsection{krb5\_auth\_con\_setaddrs -  Set the local and remote addresses in an auth context.}
5267\label{\detokenize{appdev/refs/api/krb5_auth_con_setaddrs::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setaddrs:krb5-auth-con-setaddrs-set-the-local-and-remote-addresses-in-an-auth-context}}\index{krb5\_auth\_con\_setaddrs (C function)}
5268
5269\begin{fulllineitems}
5270\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setaddrs:c.krb5_auth_con_setaddrs}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_setaddrs}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *\sphinxstyleemphasis{ local\_addr}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *\sphinxstyleemphasis{ remote\_addr}}{}
5271\end{fulllineitems}
5272
5273\begin{quote}\begin{description}
5274\item[{param}] \leavevmode
5275\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5276
5277\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
5278
5279\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{local\_addr} - Local address
5280
5281\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{remote\_addr} - Remote address
5282
5283\end{description}\end{quote}
5284\begin{quote}\begin{description}
5285\item[{retval}] \leavevmode\begin{itemize}
5286\item {}
52870   Success; otherwise - Kerberos error codes
5288
5289\end{itemize}
5290
5291\end{description}\end{quote}
5292
5293This function releases the storage assigned to the contents of the local and remote addresses of \sphinxstyleemphasis{auth\_context} and then sets them to \sphinxstyleemphasis{local\_addr} and \sphinxstyleemphasis{remote\_addr} respectively.
5294
5295
5296\sphinxstrong{See also:}
5297
5298
5299{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_genaddrs:c.krb5_auth_con_genaddrs}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_genaddrs()}}}}
5300
5301
5302
5303
5304\subsubsection{krb5\_auth\_con\_setflags -  Set a flags field in a krb5\_auth\_context structure.}
5305\label{\detokenize{appdev/refs/api/krb5_auth_con_setflags:krb5-auth-con-setflags-set-a-flags-field-in-a-krb5-auth-context-structure}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setflags::doc}}\index{krb5\_auth\_con\_setflags (C function)}
5306
5307\begin{fulllineitems}
5308\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setflags:c.krb5_auth_con_setflags}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_setflags}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}\sphinxstyleemphasis{ flags}}{}
5309\end{fulllineitems}
5310
5311\begin{quote}\begin{description}
5312\item[{param}] \leavevmode
5313\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5314
5315\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
5316
5317\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flags bit mask
5318
5319\end{description}\end{quote}
5320\begin{quote}\begin{description}
5321\item[{retval}] \leavevmode\begin{itemize}
5322\item {}
53230   (always)
5324
5325\end{itemize}
5326
5327\end{description}\end{quote}
5328
5329Valid values for \sphinxstyleemphasis{flags} are:
5330\begin{itemize}
5331\item {}
5332{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} Use timestamps
5333
5334\item {}
5335{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} Save timestamps
5336
5337\item {}
5338{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} Use sequence numbers
5339
5340\item {}
5341{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} Save sequence numbers
5342
5343\end{itemize}
5344
5345
5346\subsubsection{krb5\_auth\_con\_setports -  Set local and remote port fields in an auth context.}
5347\label{\detokenize{appdev/refs/api/krb5_auth_con_setports:krb5-auth-con-setports-set-local-and-remote-port-fields-in-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setports::doc}}\index{krb5\_auth\_con\_setports (C function)}
5348
5349\begin{fulllineitems}
5350\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setports:c.krb5_auth_con_setports}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_setports}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *\sphinxstyleemphasis{ local\_port}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *\sphinxstyleemphasis{ remote\_port}}{}
5351\end{fulllineitems}
5352
5353\begin{quote}\begin{description}
5354\item[{param}] \leavevmode
5355\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5356
5357\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
5358
5359\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{local\_port} - Local port
5360
5361\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{remote\_port} - Remote port
5362
5363\end{description}\end{quote}
5364\begin{quote}\begin{description}
5365\item[{retval}] \leavevmode\begin{itemize}
5366\item {}
53670   Success; otherwise - Kerberos error codes
5368
5369\end{itemize}
5370
5371\end{description}\end{quote}
5372
5373This function releases the storage assigned to the contents of the local and remote ports of \sphinxstyleemphasis{auth\_context} and then sets them to \sphinxstyleemphasis{local\_port} and \sphinxstyleemphasis{remote\_port} respectively.
5374
5375
5376\sphinxstrong{See also:}
5377
5378
5379{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_genaddrs:c.krb5_auth_con_genaddrs}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_genaddrs()}}}}
5380
5381
5382
5383
5384\subsubsection{krb5\_auth\_con\_setrcache -  Set the replay cache in an auth context.}
5385\label{\detokenize{appdev/refs/api/krb5_auth_con_setrcache::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setrcache:krb5-auth-con-setrcache-set-the-replay-cache-in-an-auth-context}}\index{krb5\_auth\_con\_setrcache (C function)}
5386
5387\begin{fulllineitems}
5388\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setrcache:c.krb5_auth_con_setrcache}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_setrcache}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_rcache:c.krb5_rcache}]{\sphinxcrossref{krb5\_rcache}}}\sphinxstyleemphasis{ rcache}}{}
5389\end{fulllineitems}
5390
5391\begin{quote}\begin{description}
5392\item[{param}] \leavevmode
5393\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5394
5395\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
5396
5397\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rcache} - Replay cache haddle
5398
5399\end{description}\end{quote}
5400\begin{quote}\begin{description}
5401\item[{retval}] \leavevmode\begin{itemize}
5402\item {}
54030   Success; otherwise - Kerberos error codes
5404
5405\end{itemize}
5406
5407\end{description}\end{quote}
5408
5409This function sets the replay cache in \sphinxstyleemphasis{auth\_context} to \sphinxstyleemphasis{rcache} . \sphinxstyleemphasis{rcache} will be closed when \sphinxstyleemphasis{auth\_context} is freed, so the caller should relinquish that responsibility.
5410
5411
5412\subsubsection{krb5\_auth\_con\_setrecvsubkey -  Set the receiving subkey in an auth context with a keyblock.}
5413\label{\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey:krb5-auth-con-setrecvsubkey-set-the-receiving-subkey-in-an-auth-context-with-a-keyblock}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey::doc}}\index{krb5\_auth\_con\_setrecvsubkey (C function)}
5414
5415\begin{fulllineitems}
5416\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey:c.krb5_auth_con_setrecvsubkey}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_setrecvsubkey}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ keyblock}}{}
5417\end{fulllineitems}
5418
5419\begin{quote}\begin{description}
5420\item[{param}] \leavevmode
5421\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
5422
5423\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context
5424
5425\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} - Receiving subkey
5426
5427\end{description}\end{quote}
5428\begin{quote}\begin{description}
5429\item[{retval}] \leavevmode\begin{itemize}
5430\item {}
54310   Success; otherwise - Kerberos error codes
5432
5433\end{itemize}
5434
5435\end{description}\end{quote}
5436
5437This function sets the receiving subkey in \sphinxstyleemphasis{ac} to a copy of \sphinxstyleemphasis{keyblock} .
5438
5439
5440\subsubsection{krb5\_auth\_con\_setrecvsubkey\_k -  Set the receiving subkey in an auth context.}
5441\label{\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey_k::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey_k:krb5-auth-con-setrecvsubkey-k-set-the-receiving-subkey-in-an-auth-context}}\index{krb5\_auth\_con\_setrecvsubkey\_k (C function)}
5442
5443\begin{fulllineitems}
5444\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey_k:c.krb5_auth_con_setrecvsubkey_k}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_setrecvsubkey\_k}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}}{}
5445\end{fulllineitems}
5446
5447\begin{quote}\begin{description}
5448\item[{param}] \leavevmode
5449\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
5450
5451\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context
5452
5453\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Receiving subkey
5454
5455\end{description}\end{quote}
5456\begin{quote}\begin{description}
5457\item[{retval}] \leavevmode\begin{itemize}
5458\item {}
54590   Success; otherwise - Kerberos error codes
5460
5461\end{itemize}
5462
5463\end{description}\end{quote}
5464
5465This function sets the receiving subkey in \sphinxstyleemphasis{ac} to \sphinxstyleemphasis{key} , incrementing its reference count.
5466
5467\begin{sphinxadmonition}{note}{Note:}
5468New in 1.9
5469\end{sphinxadmonition}
5470
5471
5472\subsubsection{krb5\_auth\_con\_setsendsubkey -  Set the send subkey in an auth context with a keyblock.}
5473\label{\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey:krb5-auth-con-setsendsubkey-set-the-send-subkey-in-an-auth-context-with-a-keyblock}}\index{krb5\_auth\_con\_setsendsubkey (C function)}
5474
5475\begin{fulllineitems}
5476\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey:c.krb5_auth_con_setsendsubkey}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_setsendsubkey}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ keyblock}}{}
5477\end{fulllineitems}
5478
5479\begin{quote}\begin{description}
5480\item[{param}] \leavevmode
5481\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
5482
5483\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context
5484
5485\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} - Send subkey
5486
5487\end{description}\end{quote}
5488\begin{quote}\begin{description}
5489\item[{retval}] \leavevmode\begin{itemize}
5490\item {}
54910   Success. Otherwise - Kerberos error codes
5492
5493\end{itemize}
5494
5495\end{description}\end{quote}
5496
5497This function sets the send subkey in \sphinxstyleemphasis{ac} to a copy of \sphinxstyleemphasis{keyblock} .
5498
5499
5500\subsubsection{krb5\_auth\_con\_setsendsubkey\_k -  Set the send subkey in an auth context.}
5501\label{\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey_k:krb5-auth-con-setsendsubkey-k-set-the-send-subkey-in-an-auth-context}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey_k::doc}}\index{krb5\_auth\_con\_setsendsubkey\_k (C function)}
5502
5503\begin{fulllineitems}
5504\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey_k:c.krb5_auth_con_setsendsubkey_k}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_setsendsubkey\_k}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ ac}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}}{}
5505\end{fulllineitems}
5506
5507\begin{quote}\begin{description}
5508\item[{param}] \leavevmode
5509\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
5510
5511\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context
5512
5513\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Send subkey
5514
5515\end{description}\end{quote}
5516\begin{quote}\begin{description}
5517\item[{retval}] \leavevmode\begin{itemize}
5518\item {}
55190   Success; otherwise - Kerberos error codes
5520
5521\end{itemize}
5522
5523\end{description}\end{quote}
5524
5525This function sets the send subkey in \sphinxstyleemphasis{ac} to \sphinxstyleemphasis{key} , incrementing its reference count.
5526
5527\begin{sphinxadmonition}{note}{Note:}
5528New in 1.9
5529\end{sphinxadmonition}
5530
5531
5532\subsubsection{krb5\_auth\_con\_setuseruserkey -  Set the session key in an auth context.}
5533\label{\detokenize{appdev/refs/api/krb5_auth_con_setuseruserkey::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_setuseruserkey:krb5-auth-con-setuseruserkey-set-the-session-key-in-an-auth-context}}\index{krb5\_auth\_con\_setuseruserkey (C function)}
5534
5535\begin{fulllineitems}
5536\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_setuseruserkey:c.krb5_auth_con_setuseruserkey}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_setuseruserkey}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ keyblock}}{}
5537\end{fulllineitems}
5538
5539\begin{quote}\begin{description}
5540\item[{param}] \leavevmode
5541\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5542
5543\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
5544
5545\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} - User key
5546
5547\end{description}\end{quote}
5548\begin{quote}\begin{description}
5549\item[{retval}] \leavevmode\begin{itemize}
5550\item {}
55510   Success; otherwise - Kerberos error codes
5552
5553\end{itemize}
5554
5555\end{description}\end{quote}
5556
5557
5558\subsubsection{krb5\_cc\_cache\_match -  Find a credential cache with a specified client principal.}
5559\label{\detokenize{appdev/refs/api/krb5_cc_cache_match:krb5-cc-cache-match-find-a-credential-cache-with-a-specified-client-principal}}\label{\detokenize{appdev/refs/api/krb5_cc_cache_match::doc}}\index{krb5\_cc\_cache\_match (C function)}
5560
5561\begin{fulllineitems}
5562\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_cache_match:c.krb5_cc_cache_match}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_cache\_match}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ client}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}} *\sphinxstyleemphasis{ cache\_out}}{}
5563\end{fulllineitems}
5564
5565\begin{quote}\begin{description}
5566\item[{param}] \leavevmode
5567\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5568
5569\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal
5570
5571\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cache\_out} - Credential cache handle
5572
5573\end{description}\end{quote}
5574\begin{quote}\begin{description}
5575\item[{retval}] \leavevmode\begin{itemize}
5576\item {}
55770   Success
5578
5579\item {}
5580KRB5\_CC\_NOTFOUND   None
5581
5582\end{itemize}
5583
5584\end{description}\end{quote}
5585
5586Find a cache within the collection whose default principal is \sphinxstyleemphasis{client} . Use \sphinxstyleemphasis{krb5\_cc\_close} to close \sphinxstyleemphasis{ccache} when it is no longer needed.
5587
5588\begin{sphinxadmonition}{note}{Note:}
5589New in 1.10
5590\end{sphinxadmonition}
5591
5592
5593\subsubsection{krb5\_cc\_copy\_creds -  Copy a credential cache.}
5594\label{\detokenize{appdev/refs/api/krb5_cc_copy_creds::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_copy_creds:krb5-cc-copy-creds-copy-a-credential-cache}}\index{krb5\_cc\_copy\_creds (C function)}
5595
5596\begin{fulllineitems}
5597\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_copy_creds:c.krb5_cc_copy_creds}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_copy\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ incc}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ outcc}}{}
5598\end{fulllineitems}
5599
5600\begin{quote}\begin{description}
5601\item[{param}] \leavevmode
5602\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5603
5604\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{incc} - Credential cache to be copied
5605
5606\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outcc} - Copy of credential cache to be filled in
5607
5608\end{description}\end{quote}
5609\begin{quote}\begin{description}
5610\item[{retval}] \leavevmode\begin{itemize}
5611\item {}
56120   Success; otherwise - Kerberos error codes
5613
5614\end{itemize}
5615
5616\end{description}\end{quote}
5617
5618
5619\subsubsection{krb5\_cc\_end\_seq\_get -  Finish a series of sequential processing credential cache entries.}
5620\label{\detokenize{appdev/refs/api/krb5_cc_end_seq_get:krb5-cc-end-seq-get-finish-a-series-of-sequential-processing-credential-cache-entries}}\label{\detokenize{appdev/refs/api/krb5_cc_end_seq_get::doc}}\index{krb5\_cc\_end\_seq\_get (C function)}
5621
5622\begin{fulllineitems}
5623\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_end_seq_get:c.krb5_cc_end_seq_get}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_end\_seq\_get}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_cc_cursor:c.krb5_cc_cursor}]{\sphinxcrossref{krb5\_cc\_cursor}}} *\sphinxstyleemphasis{ cursor}}{}
5624\end{fulllineitems}
5625
5626\begin{quote}\begin{description}
5627\item[{param}] \leavevmode
5628\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5629
5630\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
5631
5632\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} - Cursor
5633
5634\end{description}\end{quote}
5635\begin{quote}\begin{description}
5636\item[{retval}] \leavevmode\begin{itemize}
5637\item {}
56380   (always)
5639
5640\end{itemize}
5641
5642\end{description}\end{quote}
5643
5644This function finishes processing credential cache entries and invalidates \sphinxstyleemphasis{cursor} .
5645
5646
5647\sphinxstrong{See also:}
5648
5649
5650{\hyperref[\detokenize{appdev/refs/api/krb5_cc_start_seq_get:c.krb5_cc_start_seq_get}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_start\_seq\_get()}}}} , {\hyperref[\detokenize{appdev/refs/api/krb5_cc_next_cred:c.krb5_cc_next_cred}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_next\_cred()}}}}
5651
5652
5653
5654
5655\subsubsection{krb5\_cc\_get\_config -  Get a configuration value from a credential cache.}
5656\label{\detokenize{appdev/refs/api/krb5_cc_get_config:krb5-cc-get-config-get-a-configuration-value-from-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_get_config::doc}}\index{krb5\_cc\_get\_config (C function)}
5657
5658\begin{fulllineitems}
5659\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_get_config:c.krb5_cc_get_config}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_get\_config}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ id}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, const char *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}}{}
5660\end{fulllineitems}
5661
5662\begin{quote}\begin{description}
5663\item[{param}] \leavevmode
5664\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5665
5666\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{id} - Credential cache handle
5667
5668\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Configuration for this principal; if NULL, global for the whole cache
5669
5670\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Name of config variable
5671
5672\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} - Data to be fetched
5673
5674\end{description}\end{quote}
5675\begin{quote}\begin{description}
5676\item[{retval}] \leavevmode\begin{itemize}
5677\item {}
56780   Success
5679
5680\end{itemize}
5681
5682\item[{return}] \leavevmode\begin{itemize}
5683\item {}
5684Kerberos error codes
5685
5686\end{itemize}
5687
5688\end{description}\end{quote}
5689
5690Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{data} when it is no longer needed.
5691
5692
5693\subsubsection{krb5\_cc\_get\_flags -  Retrieve flags from a credential cache structure.}
5694\label{\detokenize{appdev/refs/api/krb5_cc_get_flags:krb5-cc-get-flags-retrieve-flags-from-a-credential-cache-structure}}\label{\detokenize{appdev/refs/api/krb5_cc_get_flags::doc}}\index{krb5\_cc\_get\_flags (C function)}
5695
5696\begin{fulllineitems}
5697\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_get_flags:c.krb5_cc_get_flags}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_get\_flags}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}} *\sphinxstyleemphasis{ flags}}{}
5698\end{fulllineitems}
5699
5700\begin{quote}\begin{description}
5701\item[{param}] \leavevmode
5702\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5703
5704\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
5705
5706\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{flags} - Flag bit mask
5707
5708\end{description}\end{quote}
5709\begin{quote}\begin{description}
5710\item[{retval}] \leavevmode\begin{itemize}
5711\item {}
57120   Success; otherwise - Kerberos error codes
5713
5714\end{itemize}
5715
5716\end{description}\end{quote}
5717
5718\begin{sphinxadmonition}{warning}{Warning:}
5719For memory credential cache always returns a flag mask of 0.
5720\end{sphinxadmonition}
5721
5722
5723\subsubsection{krb5\_cc\_get\_full\_name -  Retrieve the full name of a credential cache.}
5724\label{\detokenize{appdev/refs/api/krb5_cc_get_full_name::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_get_full_name:krb5-cc-get-full-name-retrieve-the-full-name-of-a-credential-cache}}\index{krb5\_cc\_get\_full\_name (C function)}
5725
5726\begin{fulllineitems}
5727\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_get_full_name:c.krb5_cc_get_full_name}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_get\_full\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, char **\sphinxstyleemphasis{ fullname\_out}}{}
5728\end{fulllineitems}
5729
5730\begin{quote}\begin{description}
5731\item[{param}] \leavevmode
5732\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5733
5734\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
5735
5736\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{fullname\_out} - Full name of cache
5737
5738\end{description}\end{quote}
5739
5740Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_string:c.krb5_free_string}]{\sphinxcrossref{\sphinxcode{krb5\_free\_string()}}}} to free \sphinxstyleemphasis{fullname\_out} when it is no longer needed.
5741
5742\begin{sphinxadmonition}{note}{Note:}
5743New in 1.10
5744\end{sphinxadmonition}
5745
5746
5747\subsubsection{krb5\_cc\_move -  Move a credential cache.}
5748\label{\detokenize{appdev/refs/api/krb5_cc_move:krb5-cc-move-move-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_move::doc}}\index{krb5\_cc\_move (C function)}
5749
5750\begin{fulllineitems}
5751\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_move:c.krb5_cc_move}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_move}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ src}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ dst}}{}
5752\end{fulllineitems}
5753
5754\begin{quote}\begin{description}
5755\item[{param}] \leavevmode
5756\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5757
5758\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{src} - The credential cache to move the content from
5759
5760\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{dst} - The credential cache to move the content to
5761
5762\end{description}\end{quote}
5763\begin{quote}\begin{description}
5764\item[{retval}] \leavevmode\begin{itemize}
5765\item {}
57660   Success; src is closed.
5767
5768\end{itemize}
5769
5770\item[{return}] \leavevmode\begin{itemize}
5771\item {}
5772Kerberos error codes; src is still allocated.
5773
5774\end{itemize}
5775
5776\end{description}\end{quote}
5777
5778This function reinitializes \sphinxstyleemphasis{dst} and populates it with the credentials and default principal of \sphinxstyleemphasis{src} ; then, if successful, destroys \sphinxstyleemphasis{src} .
5779
5780
5781\subsubsection{krb5\_cc\_next\_cred -  Retrieve the next entry from the credential cache.}
5782\label{\detokenize{appdev/refs/api/krb5_cc_next_cred::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_next_cred:krb5-cc-next-cred-retrieve-the-next-entry-from-the-credential-cache}}\index{krb5\_cc\_next\_cred (C function)}
5783
5784\begin{fulllineitems}
5785\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_next_cred:c.krb5_cc_next_cred}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_next\_cred}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_cc_cursor:c.krb5_cc_cursor}]{\sphinxcrossref{krb5\_cc\_cursor}}} *\sphinxstyleemphasis{ cursor}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}}{}
5786\end{fulllineitems}
5787
5788\begin{quote}\begin{description}
5789\item[{param}] \leavevmode
5790\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5791
5792\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
5793
5794\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} - Cursor
5795
5796\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - Next credential cache entry
5797
5798\end{description}\end{quote}
5799\begin{quote}\begin{description}
5800\item[{retval}] \leavevmode\begin{itemize}
5801\item {}
58020   Success; otherwise - Kerberos error codes
5803
5804\end{itemize}
5805
5806\end{description}\end{quote}
5807
5808This function fills in \sphinxstyleemphasis{creds} with the next entry in \sphinxstyleemphasis{cache} and advances \sphinxstyleemphasis{cursor} .
5809
5810Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_cred_contents:c.krb5_free_cred_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_cred\_contents()}}}} to free \sphinxstyleemphasis{creds} when it is no longer needed.
5811
5812
5813\sphinxstrong{See also:}
5814
5815
5816{\hyperref[\detokenize{appdev/refs/api/krb5_cc_start_seq_get:c.krb5_cc_start_seq_get}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_start\_seq\_get()}}}} , krb5\_end\_seq\_get()
5817
5818
5819
5820
5821\subsubsection{krb5\_cc\_remove\_cred -  Remove credentials from a credential cache.}
5822\label{\detokenize{appdev/refs/api/krb5_cc_remove_cred:krb5-cc-remove-cred-remove-credentials-from-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_remove_cred::doc}}\index{krb5\_cc\_remove\_cred (C function)}
5823
5824\begin{fulllineitems}
5825\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_remove_cred:c.krb5_cc_remove_cred}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_remove\_cred}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ flags}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}}{}
5826\end{fulllineitems}
5827
5828\begin{quote}\begin{description}
5829\item[{param}] \leavevmode
5830\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5831
5832\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
5833
5834\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Bitwise-ORed search flags
5835
5836\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Credentials to be matched
5837
5838\end{description}\end{quote}
5839\begin{quote}\begin{description}
5840\item[{retval}] \leavevmode\begin{itemize}
5841\item {}
5842KRB5\_CC\_NOSUPP   Not implemented for this cache type
5843
5844\end{itemize}
5845
5846\item[{return}] \leavevmode\begin{itemize}
5847\item {}
5848No matches found; Data cannot be deleted; Kerberos error codes
5849
5850\end{itemize}
5851
5852\end{description}\end{quote}
5853
5854This function accepts the same flag values as {\hyperref[\detokenize{appdev/refs/api/krb5_cc_retrieve_cred:c.krb5_cc_retrieve_cred}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_retrieve\_cred()}}}} .
5855
5856\begin{sphinxadmonition}{warning}{Warning:}
5857This function is not implemented for some cache types.
5858\end{sphinxadmonition}
5859
5860
5861\subsubsection{krb5\_cc\_retrieve\_cred -  Retrieve a specified credentials from a credential cache.}
5862\label{\detokenize{appdev/refs/api/krb5_cc_retrieve_cred:krb5-cc-retrieve-cred-retrieve-a-specified-credentials-from-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_retrieve_cred::doc}}\index{krb5\_cc\_retrieve\_cred (C function)}
5863
5864\begin{fulllineitems}
5865\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_retrieve_cred:c.krb5_cc_retrieve_cred}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_retrieve\_cred}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ flags}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ mcreds}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}}{}
5866\end{fulllineitems}
5867
5868\begin{quote}\begin{description}
5869\item[{param}] \leavevmode
5870\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5871
5872\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
5873
5874\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flags bit mask
5875
5876\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{mcreds} - Credentials to match
5877
5878\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - Credentials matching the requested value
5879
5880\end{description}\end{quote}
5881\begin{quote}\begin{description}
5882\item[{retval}] \leavevmode\begin{itemize}
5883\item {}
58840   Success; otherwise - Kerberos error codes
5885
5886\end{itemize}
5887
5888\end{description}\end{quote}
5889
5890This function searches a credential cache for credentials matching \sphinxstyleemphasis{mcreds} and returns it if found.
5891
5892Valid values for \sphinxstyleemphasis{flags} are:
5893\begin{quote}
5894\begin{itemize}
5895\item {}
5896{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES:KRB5_TC_MATCH_TIMES}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_MATCH\_TIMES}}}} The requested lifetime must be at least as great as in \sphinxstyleemphasis{mcreds} .
5897
5898\item {}
5899{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_MATCH_IS_SKEY:KRB5_TC_MATCH_IS_SKEY}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_MATCH\_IS\_SKEY}}}} The \sphinxstyleemphasis{is\_skey} field much match exactly.
5900
5901\item {}
5902{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS:KRB5_TC_MATCH_FLAGS}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_MATCH\_FLAGS}}}} Flags set in \sphinxstyleemphasis{mcreds} must be set.
5903
5904\item {}
5905{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES_EXACT:KRB5_TC_MATCH_TIMES_EXACT}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_MATCH\_TIMES\_EXACT}}}} The requested lifetime must match exactly.
5906
5907\item {}
5908{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS_EXACT:KRB5_TC_MATCH_FLAGS_EXACT}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_MATCH\_FLAGS\_EXACT}}}} Flags must match exactly.
5909
5910\item {}
5911{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA:KRB5_TC_MATCH_AUTHDATA}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_MATCH\_AUTHDATA}}}} The authorization data must match.
5912
5913\item {}
5914{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_MATCH_SRV_NAMEONLY:KRB5_TC_MATCH_SRV_NAMEONLY}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_MATCH\_SRV\_NAMEONLY}}}} Only the name portion of the principal name must match, not the realm.
5915
5916\item {}
5917{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_MATCH_2ND_TKT:KRB5_TC_MATCH_2ND_TKT}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_MATCH\_2ND\_TKT}}}} The second tickets must match.
5918
5919\item {}
5920{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_MATCH_KTYPE:KRB5_TC_MATCH_KTYPE}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_MATCH\_KTYPE}}}} The encryption key types must match.
5921
5922\item {}
5923{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_SUPPORTED_KTYPES:KRB5_TC_SUPPORTED_KTYPES}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_SUPPORTED\_KTYPES}}}} Check all matching entries that have any supported encryption type and return the one with the encryption type listed earliest.
5924
5925\end{itemize}
5926
5927Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_cred_contents:c.krb5_free_cred_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_cred\_contents()}}}} to free \sphinxstyleemphasis{creds} when it is no longer needed.
5928\end{quote}
5929
5930
5931\subsubsection{krb5\_cc\_select -  Select a credential cache to use with a server principal.}
5932\label{\detokenize{appdev/refs/api/krb5_cc_select::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_select:krb5-cc-select-select-a-credential-cache-to-use-with-a-server-principal}}\index{krb5\_cc\_select (C function)}
5933
5934\begin{fulllineitems}
5935\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_select:c.krb5_cc_select}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_select}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ server}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}} *\sphinxstyleemphasis{ cache\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ princ\_out}}{}
5936\end{fulllineitems}
5937
5938\begin{quote}\begin{description}
5939\item[{param}] \leavevmode
5940\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5941
5942\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Server principal
5943
5944\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cache\_out} - Credential cache handle
5945
5946\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ\_out} - Client principal
5947
5948\end{description}\end{quote}
5949\begin{quote}\begin{description}
5950\item[{return}] \leavevmode\begin{itemize}
5951\item {}
5952If an appropriate cache is found, 0 is returned, cache\_out is set to the selected cache, and princ\_out is set to the default principal of that cache.
5953
5954\end{itemize}
5955
5956\end{description}\end{quote}
5957
5958Select a cache within the collection containing credentials most appropriate for use with \sphinxstyleemphasis{server} , according to configured rules and heuristics.
5959
5960Use {\hyperref[\detokenize{appdev/refs/api/krb5_cc_close:c.krb5_cc_close}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_close()}}}} to release \sphinxstyleemphasis{cache\_out} when it is no longer needed. Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}} to release \sphinxstyleemphasis{princ\_out} when it is no longer needed. Note that \sphinxstyleemphasis{princ\_out} is set in some error conditions.
5961
5962If the appropriate client principal can be authoritatively determined but the cache collection contains no credentials for that principal, then KRB5\_CC\_NOTFOUND is returned, \sphinxstyleemphasis{cache\_out} is set to NULL, and \sphinxstyleemphasis{princ\_out} is set to the appropriate client principal.
5963
5964If no configured mechanism can determine the appropriate cache or principal, KRB5\_CC\_NOTFOUND is returned and \sphinxstyleemphasis{cache\_out} and \sphinxstyleemphasis{princ\_out} are set to NULL.
5965
5966Any other error code indicates a fatal error in the processing of a cache selection mechanism.
5967
5968\begin{sphinxadmonition}{note}{Note:}
5969New in 1.10
5970\end{sphinxadmonition}
5971
5972
5973\subsubsection{krb5\_cc\_set\_config -  Store a configuration value in a credential cache.}
5974\label{\detokenize{appdev/refs/api/krb5_cc_set_config::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_set_config:krb5-cc-set-config-store-a-configuration-value-in-a-credential-cache}}\index{krb5\_cc\_set\_config (C function)}
5975
5976\begin{fulllineitems}
5977\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_set_config:c.krb5_cc_set_config}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_set\_config}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ id}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, const char *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}}{}
5978\end{fulllineitems}
5979
5980\begin{quote}\begin{description}
5981\item[{param}] \leavevmode
5982\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5983
5984\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{id} - Credential cache handle
5985
5986\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Configuration for a specific principal; if NULL, global for the whole cache
5987
5988\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Name of config variable
5989
5990\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Data to store, or NULL to remove
5991
5992\end{description}\end{quote}
5993\begin{quote}\begin{description}
5994\item[{retval}] \leavevmode\begin{itemize}
5995\item {}
59960   Success
5997
5998\end{itemize}
5999
6000\item[{return}] \leavevmode\begin{itemize}
6001\item {}
6002Kerberos error codes
6003
6004\end{itemize}
6005
6006\end{description}\end{quote}
6007
6008\begin{sphinxadmonition}{warning}{Warning:}
6009Before version 1.10 \sphinxstyleemphasis{data} was assumed to be always non-null.
6010\end{sphinxadmonition}
6011
6012\begin{sphinxadmonition}{note}{Note:}
6013Existing configuration under the same key is over-written.
6014\end{sphinxadmonition}
6015
6016
6017\subsubsection{krb5\_cc\_set\_default\_name -  Set the default credential cache name.}
6018\label{\detokenize{appdev/refs/api/krb5_cc_set_default_name:krb5-cc-set-default-name-set-the-default-credential-cache-name}}\label{\detokenize{appdev/refs/api/krb5_cc_set_default_name::doc}}\index{krb5\_cc\_set\_default\_name (C function)}
6019
6020\begin{fulllineitems}
6021\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_set_default_name:c.krb5_cc_set_default_name}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_set\_default\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ name}}{}
6022\end{fulllineitems}
6023
6024\begin{quote}\begin{description}
6025\item[{param}] \leavevmode
6026\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6027
6028\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - Default credential cache name or NULL
6029
6030\end{description}\end{quote}
6031\begin{quote}\begin{description}
6032\item[{retval}] \leavevmode\begin{itemize}
6033\item {}
60340   Success
6035
6036\item {}
6037KV5M\_CONTEXT   Bad magic number for \_krb5\_context structure
6038
6039\end{itemize}
6040
6041\item[{return}] \leavevmode\begin{itemize}
6042\item {}
6043Kerberos error codes
6044
6045\end{itemize}
6046
6047\end{description}\end{quote}
6048
6049Set the default credential cache name to \sphinxstyleemphasis{name} for future operations using \sphinxstyleemphasis{context} . If \sphinxstyleemphasis{name} is NULL, clear any previous application-set default name and forget any cached value of the default name for \sphinxstyleemphasis{context} .
6050
6051Calls to this function invalidate the result of any previous calls to {\hyperref[\detokenize{appdev/refs/api/krb5_cc_default_name:c.krb5_cc_default_name}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_default\_name()}}}} using \sphinxstyleemphasis{context} .
6052
6053
6054\subsubsection{krb5\_cc\_set\_flags -  Set options flags on a credential cache.}
6055\label{\detokenize{appdev/refs/api/krb5_cc_set_flags:krb5-cc-set-flags-set-options-flags-on-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_set_flags::doc}}\index{krb5\_cc\_set\_flags (C function)}
6056
6057\begin{fulllineitems}
6058\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_set_flags:c.krb5_cc_set_flags}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_set\_flags}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ flags}}{}
6059\end{fulllineitems}
6060
6061\begin{quote}\begin{description}
6062\item[{param}] \leavevmode
6063\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6064
6065\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
6066
6067\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flag bit mask
6068
6069\end{description}\end{quote}
6070\begin{quote}\begin{description}
6071\item[{retval}] \leavevmode\begin{itemize}
6072\item {}
60730   Success; otherwise - Kerberos error codes
6074
6075\end{itemize}
6076
6077\end{description}\end{quote}
6078
6079This function resets \sphinxstyleemphasis{cache} flags to \sphinxstyleemphasis{flags} .
6080
6081
6082\subsubsection{krb5\_cc\_start\_seq\_get -  Prepare to sequentially read every credential in a credential cache.}
6083\label{\detokenize{appdev/refs/api/krb5_cc_start_seq_get::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_start_seq_get:krb5-cc-start-seq-get-prepare-to-sequentially-read-every-credential-in-a-credential-cache}}\index{krb5\_cc\_start\_seq\_get (C function)}
6084
6085\begin{fulllineitems}
6086\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_start_seq_get:c.krb5_cc_start_seq_get}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_start\_seq\_get}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_cc_cursor:c.krb5_cc_cursor}]{\sphinxcrossref{krb5\_cc\_cursor}}} *\sphinxstyleemphasis{ cursor}}{}
6087\end{fulllineitems}
6088
6089\begin{quote}\begin{description}
6090\item[{param}] \leavevmode
6091\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6092
6093\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
6094
6095\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cursor} - Cursor
6096
6097\end{description}\end{quote}
6098\begin{quote}\begin{description}
6099\item[{retval}] \leavevmode\begin{itemize}
6100\item {}
61010   Success; otherwise - Kerberos error codes
6102
6103\end{itemize}
6104
6105\end{description}\end{quote}
6106\begin{quote}
6107
6108{\hyperref[\detokenize{appdev/refs/api/krb5_cc_end_seq_get:c.krb5_cc_end_seq_get}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_end\_seq\_get()}}}} must be called to complete the retrieve operation.
6109\end{quote}
6110
6111\begin{sphinxadmonition}{note}{Note:}
6112If the cache represented by \sphinxstyleemphasis{cache} is modified between the time of the call to this function and the time of the final {\hyperref[\detokenize{appdev/refs/api/krb5_cc_end_seq_get:c.krb5_cc_end_seq_get}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_end\_seq\_get()}}}} , these changes may not be reflected in the results of {\hyperref[\detokenize{appdev/refs/api/krb5_cc_next_cred:c.krb5_cc_next_cred}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_next\_cred()}}}} calls.
6113\end{sphinxadmonition}
6114
6115
6116\subsubsection{krb5\_cc\_store\_cred -  Store credentials in a credential cache.}
6117\label{\detokenize{appdev/refs/api/krb5_cc_store_cred:krb5-cc-store-cred-store-credentials-in-a-credential-cache}}\label{\detokenize{appdev/refs/api/krb5_cc_store_cred::doc}}\index{krb5\_cc\_store\_cred (C function)}
6118
6119\begin{fulllineitems}
6120\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_store_cred:c.krb5_cc_store_cred}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_store\_cred}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}}{}
6121\end{fulllineitems}
6122
6123\begin{quote}\begin{description}
6124\item[{param}] \leavevmode
6125\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6126
6127\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
6128
6129\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Credentials to be stored in cache
6130
6131\end{description}\end{quote}
6132\begin{quote}\begin{description}
6133\item[{retval}] \leavevmode\begin{itemize}
6134\item {}
61350   Success
6136
6137\end{itemize}
6138
6139\item[{return}] \leavevmode\begin{itemize}
6140\item {}
6141Permission errors; storage failure errors; Kerberos error codes
6142
6143\end{itemize}
6144
6145\end{description}\end{quote}
6146
6147This function stores \sphinxstyleemphasis{creds} into \sphinxstyleemphasis{cache} . If \sphinxstyleemphasis{creds-\textgreater{}server} and the server in the decoded ticket \sphinxstyleemphasis{creds-\textgreater{}ticket} differ, the credentials will be stored under both server principal names.
6148
6149
6150\subsubsection{krb5\_cc\_support\_switch -  Determine whether a credential cache type supports switching.}
6151\label{\detokenize{appdev/refs/api/krb5_cc_support_switch::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_support_switch:krb5-cc-support-switch-determine-whether-a-credential-cache-type-supports-switching}}\index{krb5\_cc\_support\_switch (C function)}
6152
6153\begin{fulllineitems}
6154\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_support_switch:c.krb5_cc_support_switch}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_cc\_support\_switch}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ type}}{}
6155\end{fulllineitems}
6156
6157\begin{quote}\begin{description}
6158\item[{param}] \leavevmode
6159\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6160
6161\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - Credential cache type
6162
6163\end{description}\end{quote}
6164\begin{quote}\begin{description}
6165\item[{retval}] \leavevmode\begin{itemize}
6166\item {}
6167TRUE   if type supports switching
6168
6169\item {}
6170FALSE   if it does not or is not a valid credential cache type.
6171
6172\end{itemize}
6173
6174\end{description}\end{quote}
6175
6176\begin{sphinxadmonition}{note}{Note:}
6177New in 1.10
6178\end{sphinxadmonition}
6179
6180
6181\subsubsection{krb5\_cc\_switch -  Make a credential cache the primary cache for its collection.}
6182\label{\detokenize{appdev/refs/api/krb5_cc_switch::doc}}\label{\detokenize{appdev/refs/api/krb5_cc_switch:krb5-cc-switch-make-a-credential-cache-the-primary-cache-for-its-collection}}\index{krb5\_cc\_switch (C function)}
6183
6184\begin{fulllineitems}
6185\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_switch:c.krb5_cc_switch}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_switch}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ cache}}{}
6186\end{fulllineitems}
6187
6188\begin{quote}\begin{description}
6189\item[{param}] \leavevmode
6190\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6191
6192\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
6193
6194\end{description}\end{quote}
6195\begin{quote}\begin{description}
6196\item[{retval}] \leavevmode\begin{itemize}
6197\item {}
61980   Success, or the type of cache doesn’t support switching
6199
6200\end{itemize}
6201
6202\item[{return}] \leavevmode\begin{itemize}
6203\item {}
6204Kerberos error codes
6205
6206\end{itemize}
6207
6208\end{description}\end{quote}
6209
6210If the type of \sphinxstyleemphasis{cache} supports it, set \sphinxstyleemphasis{cache} to be the primary credential cache for the collection it belongs to.
6211
6212
6213\subsubsection{krb5\_cccol\_cursor\_free -  Free a credential cache collection cursor.}
6214\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_free::doc}}\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_free:krb5-cccol-cursor-free-free-a-credential-cache-collection-cursor}}\index{krb5\_cccol\_cursor\_free (C function)}
6215
6216\begin{fulllineitems}
6217\phantomsection\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_free:c.krb5_cccol_cursor_free}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cccol\_cursor\_free}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cccol_cursor:c.krb5_cccol_cursor}]{\sphinxcrossref{krb5\_cccol\_cursor}}} *\sphinxstyleemphasis{ cursor}}{}
6218\end{fulllineitems}
6219
6220\begin{quote}\begin{description}
6221\item[{param}] \leavevmode
6222\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6223
6224\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} - Cursor
6225
6226\end{description}\end{quote}
6227\begin{quote}\begin{description}
6228\item[{retval}] \leavevmode\begin{itemize}
6229\item {}
62300   Success; otherwise - Kerberos error codes
6231
6232\end{itemize}
6233
6234\end{description}\end{quote}
6235
6236
6237\sphinxstrong{See also:}
6238
6239
6240{\hyperref[\detokenize{appdev/refs/api/krb5_cccol_cursor_new:c.krb5_cccol_cursor_new}]{\sphinxcrossref{\sphinxcode{krb5\_cccol\_cursor\_new()}}}} , {\hyperref[\detokenize{appdev/refs/api/krb5_cccol_cursor_next:c.krb5_cccol_cursor_next}]{\sphinxcrossref{\sphinxcode{krb5\_cccol\_cursor\_next()}}}}
6241
6242
6243
6244
6245\subsubsection{krb5\_cccol\_cursor\_new -  Prepare to iterate over the collection of known credential caches.}
6246\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_new::doc}}\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_new:krb5-cccol-cursor-new-prepare-to-iterate-over-the-collection-of-known-credential-caches}}\index{krb5\_cccol\_cursor\_new (C function)}
6247
6248\begin{fulllineitems}
6249\phantomsection\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_new:c.krb5_cccol_cursor_new}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cccol\_cursor\_new}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cccol_cursor:c.krb5_cccol_cursor}]{\sphinxcrossref{krb5\_cccol\_cursor}}} *\sphinxstyleemphasis{ cursor}}{}
6250\end{fulllineitems}
6251
6252\begin{quote}\begin{description}
6253\item[{param}] \leavevmode
6254\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6255
6256\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cursor} - Cursor
6257
6258\end{description}\end{quote}
6259\begin{quote}\begin{description}
6260\item[{retval}] \leavevmode\begin{itemize}
6261\item {}
62620   Success; otherwise - Kerberos error codes
6263
6264\end{itemize}
6265
6266\end{description}\end{quote}
6267
6268Get a new cache iteration \sphinxstyleemphasis{cursor} that will iterate over all known credential caches independent of type.
6269
6270Use {\hyperref[\detokenize{appdev/refs/api/krb5_cccol_cursor_free:c.krb5_cccol_cursor_free}]{\sphinxcrossref{\sphinxcode{krb5\_cccol\_cursor\_free()}}}} to release \sphinxstyleemphasis{cursor} when it is no longer needed.
6271
6272
6273\sphinxstrong{See also:}
6274
6275
6276{\hyperref[\detokenize{appdev/refs/api/krb5_cccol_cursor_next:c.krb5_cccol_cursor_next}]{\sphinxcrossref{\sphinxcode{krb5\_cccol\_cursor\_next()}}}}
6277
6278
6279
6280
6281\subsubsection{krb5\_cccol\_cursor\_next -  Get the next credential cache in the collection.}
6282\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_next::doc}}\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_next:krb5-cccol-cursor-next-get-the-next-credential-cache-in-the-collection}}\index{krb5\_cccol\_cursor\_next (C function)}
6283
6284\begin{fulllineitems}
6285\phantomsection\label{\detokenize{appdev/refs/api/krb5_cccol_cursor_next:c.krb5_cccol_cursor_next}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cccol\_cursor\_next}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cccol_cursor:c.krb5_cccol_cursor}]{\sphinxcrossref{krb5\_cccol\_cursor}}}\sphinxstyleemphasis{ cursor}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}} *\sphinxstyleemphasis{ ccache}}{}
6286\end{fulllineitems}
6287
6288\begin{quote}\begin{description}
6289\item[{param}] \leavevmode
6290\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6291
6292\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} - Cursor
6293
6294\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ccache} - Credential cache handle
6295
6296\end{description}\end{quote}
6297\begin{quote}\begin{description}
6298\item[{retval}] \leavevmode\begin{itemize}
6299\item {}
63000   Success; otherwise - Kerberos error codes
6301
6302\end{itemize}
6303
6304\end{description}\end{quote}
6305
6306Use {\hyperref[\detokenize{appdev/refs/api/krb5_cc_close:c.krb5_cc_close}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_close()}}}} to close \sphinxstyleemphasis{ccache} when it is no longer needed.
6307
6308
6309\sphinxstrong{See also:}
6310
6311
6312{\hyperref[\detokenize{appdev/refs/api/krb5_cccol_cursor_new:c.krb5_cccol_cursor_new}]{\sphinxcrossref{\sphinxcode{krb5\_cccol\_cursor\_new()}}}} , {\hyperref[\detokenize{appdev/refs/api/krb5_cccol_cursor_free:c.krb5_cccol_cursor_free}]{\sphinxcrossref{\sphinxcode{krb5\_cccol\_cursor\_free()}}}}
6313
6314
6315
6316\begin{sphinxadmonition}{note}{Note:}
6317When all caches are iterated over and the end of the list is reached, \sphinxstyleemphasis{ccache} is set to NULL.
6318\end{sphinxadmonition}
6319
6320
6321\subsubsection{krb5\_cccol\_have\_content -  Check if the credential cache collection contains any credentials.}
6322\label{\detokenize{appdev/refs/api/krb5_cccol_have_content:krb5-cccol-have-content-check-if-the-credential-cache-collection-contains-any-credentials}}\label{\detokenize{appdev/refs/api/krb5_cccol_have_content::doc}}\index{krb5\_cccol\_have\_content (C function)}
6323
6324\begin{fulllineitems}
6325\phantomsection\label{\detokenize{appdev/refs/api/krb5_cccol_have_content:c.krb5_cccol_have_content}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cccol\_have\_content}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}}{}
6326\end{fulllineitems}
6327
6328\begin{quote}\begin{description}
6329\item[{param}] \leavevmode
6330\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6331
6332\end{description}\end{quote}
6333\begin{quote}\begin{description}
6334\item[{retval}] \leavevmode\begin{itemize}
6335\item {}
63360   Credentials are available in the collection
6337
6338\item {}
6339KRB5\_CC\_NOTFOUND   The collection contains no credentials
6340
6341\end{itemize}
6342
6343\end{description}\end{quote}
6344
6345\begin{sphinxadmonition}{note}{Note:}
6346New in 1.11
6347\end{sphinxadmonition}
6348
6349
6350\subsubsection{krb5\_clear\_error\_message -  Clear the extended error message in a context.}
6351\label{\detokenize{appdev/refs/api/krb5_clear_error_message:krb5-clear-error-message-clear-the-extended-error-message-in-a-context}}\label{\detokenize{appdev/refs/api/krb5_clear_error_message::doc}}\index{krb5\_clear\_error\_message (C function)}
6352
6353\begin{fulllineitems}
6354\phantomsection\label{\detokenize{appdev/refs/api/krb5_clear_error_message:c.krb5_clear_error_message}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_clear\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}}{}
6355\end{fulllineitems}
6356
6357\begin{quote}\begin{description}
6358\item[{param}] \leavevmode
6359\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
6360
6361\end{description}\end{quote}
6362
6363This function unsets the extended error message in a context, to ensure that it is not mistakenly applied to another occurrence of the same error code.
6364
6365
6366\subsubsection{krb5\_check\_clockskew -  Check if a timestamp is within the allowed clock skew of the current time.}
6367\label{\detokenize{appdev/refs/api/krb5_check_clockskew:krb5-check-clockskew-check-if-a-timestamp-is-within-the-allowed-clock-skew-of-the-current-time}}\label{\detokenize{appdev/refs/api/krb5_check_clockskew::doc}}\index{krb5\_check\_clockskew (C function)}
6368
6369\begin{fulllineitems}
6370\phantomsection\label{\detokenize{appdev/refs/api/krb5_check_clockskew:c.krb5_check_clockskew}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_check\_clockskew}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}\sphinxstyleemphasis{ date}}{}
6371\end{fulllineitems}
6372
6373\begin{quote}\begin{description}
6374\item[{param}] \leavevmode
6375\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6376
6377\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{date} - Timestamp to check
6378
6379\end{description}\end{quote}
6380\begin{quote}\begin{description}
6381\item[{retval}] \leavevmode\begin{itemize}
6382\item {}
63830   Success
6384
6385\item {}
6386KRB5KRB\_AP\_ERR\_SKEW    date is not within allowable clock skew
6387
6388\end{itemize}
6389
6390\end{description}\end{quote}
6391
6392This function checks if \sphinxstyleemphasis{date} is close enough to the current time according to the configured allowable clock skew.
6393
6394\begin{sphinxadmonition}{note}{Note:}
6395New in 1.10
6396\end{sphinxadmonition}
6397
6398
6399\subsubsection{krb5\_copy\_addresses -  Copy an array of addresses.}
6400\label{\detokenize{appdev/refs/api/krb5_copy_addresses:krb5-copy-addresses-copy-an-array-of-addresses}}\label{\detokenize{appdev/refs/api/krb5_copy_addresses::doc}}\index{krb5\_copy\_addresses (C function)}
6401
6402\begin{fulllineitems}
6403\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_addresses:c.krb5_copy_addresses}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_addresses}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *const *\sphinxstyleemphasis{ inaddr}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} ***\sphinxstyleemphasis{ outaddr}}{}
6404\end{fulllineitems}
6405
6406\begin{quote}\begin{description}
6407\item[{param}] \leavevmode
6408\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6409
6410\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inaddr} - Array of addresses to be copied
6411
6412\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outaddr} - Copy of array of addresses
6413
6414\end{description}\end{quote}
6415\begin{quote}\begin{description}
6416\item[{retval}] \leavevmode\begin{itemize}
6417\item {}
64180   Success; otherwise - Kerberos error codes
6419
6420\end{itemize}
6421
6422\end{description}\end{quote}
6423
6424This function creates a new address array containing a copy of \sphinxstyleemphasis{inaddr} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_addresses:c.krb5_free_addresses}]{\sphinxcrossref{\sphinxcode{krb5\_free\_addresses()}}}} to free \sphinxstyleemphasis{outaddr} when it is no longer needed.
6425
6426
6427\subsubsection{krb5\_copy\_authdata -  Copy an authorization data list.}
6428\label{\detokenize{appdev/refs/api/krb5_copy_authdata:krb5-copy-authdata-copy-an-authorization-data-list}}\label{\detokenize{appdev/refs/api/krb5_copy_authdata::doc}}\index{krb5\_copy\_authdata (C function)}
6429
6430\begin{fulllineitems}
6431\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_authdata:c.krb5_copy_authdata}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_authdata}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} *const *\sphinxstyleemphasis{ in\_authdat}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} ***\sphinxstyleemphasis{ out}}{}
6432\end{fulllineitems}
6433
6434\begin{quote}\begin{description}
6435\item[{param}] \leavevmode
6436\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6437
6438\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_authdat} - List of \sphinxstyleemphasis{krb5\_authdata} structures
6439
6440\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - New array of \sphinxstyleemphasis{krb5\_authdata} structures
6441
6442\end{description}\end{quote}
6443\begin{quote}\begin{description}
6444\item[{retval}] \leavevmode\begin{itemize}
6445\item {}
64460   Success; otherwise - Kerberos error codes
6447
6448\end{itemize}
6449
6450\end{description}\end{quote}
6451
6452This function creates a new authorization data list containing a copy of \sphinxstyleemphasis{in\_authdat} , which must be null-terminated. Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_authdata:c.krb5_free_authdata}]{\sphinxcrossref{\sphinxcode{krb5\_free\_authdata()}}}} to free \sphinxstyleemphasis{out} when it is no longer needed.
6453
6454\begin{sphinxadmonition}{note}{Note:}
6455The last array entry in \sphinxstyleemphasis{in\_authdat} must be a NULL pointer.
6456\end{sphinxadmonition}
6457
6458
6459\subsubsection{krb5\_copy\_authenticator -  Copy a krb5\_authenticator structure.}
6460\label{\detokenize{appdev/refs/api/krb5_copy_authenticator:krb5-copy-authenticator-copy-a-krb5-authenticator-structure}}\label{\detokenize{appdev/refs/api/krb5_copy_authenticator::doc}}\index{krb5\_copy\_authenticator (C function)}
6461
6462\begin{fulllineitems}
6463\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_authenticator:c.krb5_copy_authenticator}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_authenticator}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{krb5\_authenticator}}} *\sphinxstyleemphasis{ authfrom}, {\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{krb5\_authenticator}}} **\sphinxstyleemphasis{ authto}}{}
6464\end{fulllineitems}
6465
6466\begin{quote}\begin{description}
6467\item[{param}] \leavevmode
6468\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6469
6470\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authfrom} - krb5\_authenticator structure to be copied
6471
6472\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{authto} - Copy of krb5\_authenticator structure
6473
6474\end{description}\end{quote}
6475\begin{quote}\begin{description}
6476\item[{retval}] \leavevmode\begin{itemize}
6477\item {}
64780   Success; otherwise - Kerberos error codes
6479
6480\end{itemize}
6481
6482\end{description}\end{quote}
6483
6484This function creates a new krb5\_authenticator structure with the content of \sphinxstyleemphasis{authfrom} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_authenticator:c.krb5_free_authenticator}]{\sphinxcrossref{\sphinxcode{krb5\_free\_authenticator()}}}} to free \sphinxstyleemphasis{authto} when it is no longer needed.
6485
6486
6487\subsubsection{krb5\_copy\_checksum -  Copy a krb5\_checksum structure.}
6488\label{\detokenize{appdev/refs/api/krb5_copy_checksum:krb5-copy-checksum-copy-a-krb5-checksum-structure}}\label{\detokenize{appdev/refs/api/krb5_copy_checksum::doc}}\index{krb5\_copy\_checksum (C function)}
6489
6490\begin{fulllineitems}
6491\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_checksum:c.krb5_copy_checksum}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_checksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} *\sphinxstyleemphasis{ ckfrom}, {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} **\sphinxstyleemphasis{ ckto}}{}
6492\end{fulllineitems}
6493
6494\begin{quote}\begin{description}
6495\item[{param}] \leavevmode
6496\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6497
6498\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ckfrom} - Checksum to be copied
6499
6500\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ckto} - Copy of krb5\_checksum structure
6501
6502\end{description}\end{quote}
6503\begin{quote}\begin{description}
6504\item[{retval}] \leavevmode\begin{itemize}
6505\item {}
65060   Success; otherwise - Kerberos error codes
6507
6508\end{itemize}
6509
6510\end{description}\end{quote}
6511
6512This function creates a new krb5\_checksum structure with the contents of \sphinxstyleemphasis{ckfrom} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_checksum:c.krb5_free_checksum}]{\sphinxcrossref{\sphinxcode{krb5\_free\_checksum()}}}} to free \sphinxstyleemphasis{ckto} when it is no longer needed.
6513
6514
6515\subsubsection{krb5\_copy\_context -  Copy a krb5\_context structure.}
6516\label{\detokenize{appdev/refs/api/krb5_copy_context:krb5-copy-context-copy-a-krb5-context-structure}}\label{\detokenize{appdev/refs/api/krb5_copy_context::doc}}\index{krb5\_copy\_context (C function)}
6517
6518\begin{fulllineitems}
6519\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_context:c.krb5_copy_context}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_context}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}} *\sphinxstyleemphasis{ nctx\_out}}{}
6520\end{fulllineitems}
6521
6522\begin{quote}\begin{description}
6523\item[{param}] \leavevmode
6524\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
6525
6526\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{nctx\_out} - New context structure
6527
6528\end{description}\end{quote}
6529\begin{quote}\begin{description}
6530\item[{retval}] \leavevmode\begin{itemize}
6531\item {}
65320   Success
6533
6534\end{itemize}
6535
6536\item[{return}] \leavevmode\begin{itemize}
6537\item {}
6538Kerberos error codes
6539
6540\end{itemize}
6541
6542\end{description}\end{quote}
6543
6544The newly created context must be released by calling {\hyperref[\detokenize{appdev/refs/api/krb5_free_context:c.krb5_free_context}]{\sphinxcrossref{\sphinxcode{krb5\_free\_context()}}}} when it is no longer needed.
6545
6546
6547\subsubsection{krb5\_copy\_creds -  Copy a krb5\_creds structure.}
6548\label{\detokenize{appdev/refs/api/krb5_copy_creds:krb5-copy-creds-copy-a-krb5-creds-structure}}\label{\detokenize{appdev/refs/api/krb5_copy_creds::doc}}\index{krb5\_copy\_creds (C function)}
6549
6550\begin{fulllineitems}
6551\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_creds:c.krb5_copy_creds}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ incred}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} **\sphinxstyleemphasis{ outcred}}{}
6552\end{fulllineitems}
6553
6554\begin{quote}\begin{description}
6555\item[{param}] \leavevmode
6556\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6557
6558\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{incred} - Credentials structure to be copied
6559
6560\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outcred} - Copy of \sphinxstyleemphasis{incred}
6561
6562\end{description}\end{quote}
6563\begin{quote}\begin{description}
6564\item[{retval}] \leavevmode\begin{itemize}
6565\item {}
65660   Success; otherwise - Kerberos error codes
6567
6568\end{itemize}
6569
6570\end{description}\end{quote}
6571
6572This function creates a new credential with the contents of \sphinxstyleemphasis{incred} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_creds:c.krb5_free_creds}]{\sphinxcrossref{\sphinxcode{krb5\_free\_creds()}}}} to free \sphinxstyleemphasis{outcred} when it is no longer needed.
6573
6574
6575\subsubsection{krb5\_copy\_data -  Copy a krb5\_data object.}
6576\label{\detokenize{appdev/refs/api/krb5_copy_data:krb5-copy-data-copy-a-krb5-data-object}}\label{\detokenize{appdev/refs/api/krb5_copy_data::doc}}\index{krb5\_copy\_data (C function)}
6577
6578\begin{fulllineitems}
6579\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_data:c.krb5_copy_data}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_data}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ indata}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} **\sphinxstyleemphasis{ outdata}}{}
6580\end{fulllineitems}
6581
6582\begin{quote}\begin{description}
6583\item[{param}] \leavevmode
6584\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6585
6586\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{indata} - Data object to be copied
6587
6588\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outdata} - Copy of \sphinxstyleemphasis{indata}
6589
6590\end{description}\end{quote}
6591\begin{quote}\begin{description}
6592\item[{retval}] \leavevmode\begin{itemize}
6593\item {}
65940   Success; otherwise - Kerberos error codes
6595
6596\end{itemize}
6597
6598\end{description}\end{quote}
6599
6600This function creates a new krb5\_data object with the contents of \sphinxstyleemphasis{indata} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data:c.krb5_free_data}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data()}}}} to free \sphinxstyleemphasis{outdata} when it is no longer needed.
6601
6602
6603\subsubsection{krb5\_copy\_error\_message -  Copy the most recent extended error message from one context to another.}
6604\label{\detokenize{appdev/refs/api/krb5_copy_error_message:krb5-copy-error-message-copy-the-most-recent-extended-error-message-from-one-context-to-another}}\label{\detokenize{appdev/refs/api/krb5_copy_error_message::doc}}\index{krb5\_copy\_error\_message (C function)}
6605
6606\begin{fulllineitems}
6607\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_error_message:c.krb5_copy_error_message}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_copy\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ dest\_ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ src\_ctx}}{}
6608\end{fulllineitems}
6609
6610\begin{quote}\begin{description}
6611\item[{param}] \leavevmode
6612\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{dest\_ctx} - Library context to copy message to
6613
6614\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{src\_ctx} - Library context with current message
6615
6616\end{description}\end{quote}
6617
6618
6619\subsubsection{krb5\_copy\_keyblock -  Copy a keyblock.}
6620\label{\detokenize{appdev/refs/api/krb5_copy_keyblock:krb5-copy-keyblock-copy-a-keyblock}}\label{\detokenize{appdev/refs/api/krb5_copy_keyblock::doc}}\index{krb5\_copy\_keyblock (C function)}
6621
6622\begin{fulllineitems}
6623\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_keyblock:c.krb5_copy_keyblock}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_keyblock}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ from}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ to}}{}
6624\end{fulllineitems}
6625
6626\begin{quote}\begin{description}
6627\item[{param}] \leavevmode
6628\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6629
6630\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{from} - Keyblock to be copied
6631
6632\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{to} - Copy of keyblock \sphinxstyleemphasis{from}
6633
6634\end{description}\end{quote}
6635\begin{quote}\begin{description}
6636\item[{retval}] \leavevmode\begin{itemize}
6637\item {}
66380   Success; otherwise - Kerberos error codes
6639
6640\end{itemize}
6641
6642\end{description}\end{quote}
6643
6644This function creates a new keyblock with the same contents as \sphinxstyleemphasis{from} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock:c.krb5_free_keyblock}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock()}}}} to free \sphinxstyleemphasis{to} when it is no longer needed.
6645
6646
6647\subsubsection{krb5\_copy\_keyblock\_contents -  Copy the contents of a keyblock.}
6648\label{\detokenize{appdev/refs/api/krb5_copy_keyblock_contents:krb5-copy-keyblock-contents-copy-the-contents-of-a-keyblock}}\label{\detokenize{appdev/refs/api/krb5_copy_keyblock_contents::doc}}\index{krb5\_copy\_keyblock\_contents (C function)}
6649
6650\begin{fulllineitems}
6651\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_keyblock_contents:c.krb5_copy_keyblock_contents}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_keyblock\_contents}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ from}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ to}}{}
6652\end{fulllineitems}
6653
6654\begin{quote}\begin{description}
6655\item[{param}] \leavevmode
6656\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6657
6658\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{from} - Key to be copied
6659
6660\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{to} - Output key
6661
6662\end{description}\end{quote}
6663\begin{quote}\begin{description}
6664\item[{retval}] \leavevmode\begin{itemize}
6665\item {}
66660   Success; otherwise - Kerberos error codes
6667
6668\end{itemize}
6669
6670\end{description}\end{quote}
6671
6672This function copies the contents of \sphinxstyleemphasis{from} to \sphinxstyleemphasis{to} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock_contents:c.krb5_free_keyblock_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock\_contents()}}}} to free \sphinxstyleemphasis{to} when it is no longer needed.
6673
6674
6675\subsubsection{krb5\_copy\_principal -  Copy a principal.}
6676\label{\detokenize{appdev/refs/api/krb5_copy_principal:krb5-copy-principal-copy-a-principal}}\label{\detokenize{appdev/refs/api/krb5_copy_principal::doc}}\index{krb5\_copy\_principal (C function)}
6677
6678\begin{fulllineitems}
6679\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_principal:c.krb5_copy_principal}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_principal}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ inprinc}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}} *\sphinxstyleemphasis{ outprinc}}{}
6680\end{fulllineitems}
6681
6682\begin{quote}\begin{description}
6683\item[{param}] \leavevmode
6684\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6685
6686\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inprinc} - Principal to be copied
6687
6688\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outprinc} - Copy of \sphinxstyleemphasis{inprinc}
6689
6690\end{description}\end{quote}
6691\begin{quote}\begin{description}
6692\item[{retval}] \leavevmode\begin{itemize}
6693\item {}
66940   Success; otherwise - Kerberos error codes
6695
6696\end{itemize}
6697
6698\end{description}\end{quote}
6699
6700This function creates a new principal structure with the contents of \sphinxstyleemphasis{inprinc} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}} to free \sphinxstyleemphasis{outprinc} when it is no longer needed.
6701
6702
6703\subsubsection{krb5\_copy\_ticket -  Copy a krb5\_ticket structure.}
6704\label{\detokenize{appdev/refs/api/krb5_copy_ticket:krb5-copy-ticket-copy-a-krb5-ticket-structure}}\label{\detokenize{appdev/refs/api/krb5_copy_ticket::doc}}\index{krb5\_copy\_ticket (C function)}
6705
6706\begin{fulllineitems}
6707\phantomsection\label{\detokenize{appdev/refs/api/krb5_copy_ticket:c.krb5_copy_ticket}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_copy\_ticket}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} *\sphinxstyleemphasis{ from}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} **\sphinxstyleemphasis{ pto}}{}
6708\end{fulllineitems}
6709
6710\begin{quote}\begin{description}
6711\item[{param}] \leavevmode
6712\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6713
6714\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{from} - Ticket to be copied
6715
6716\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{pto} - Copy of ticket
6717
6718\end{description}\end{quote}
6719\begin{quote}\begin{description}
6720\item[{retval}] \leavevmode\begin{itemize}
6721\item {}
67220   Success; otherwise - Kerberos error codes
6723
6724\end{itemize}
6725
6726\end{description}\end{quote}
6727
6728This function creates a new krb5\_ticket structure containing the contents of \sphinxstyleemphasis{from} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_ticket:c.krb5_free_ticket}]{\sphinxcrossref{\sphinxcode{krb5\_free\_ticket()}}}} to free \sphinxstyleemphasis{pto} when it is no longer needed.
6729
6730
6731\subsubsection{krb5\_find\_authdata -  Find authorization data elements.}
6732\label{\detokenize{appdev/refs/api/krb5_find_authdata:krb5-find-authdata-find-authorization-data-elements}}\label{\detokenize{appdev/refs/api/krb5_find_authdata::doc}}\index{krb5\_find\_authdata (C function)}
6733
6734\begin{fulllineitems}
6735\phantomsection\label{\detokenize{appdev/refs/api/krb5_find_authdata:c.krb5_find_authdata}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_find\_authdata}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} *const *\sphinxstyleemphasis{ ticket\_authdata}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} *const *\sphinxstyleemphasis{ ap\_req\_authdata}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdatatype:c.krb5_authdatatype}]{\sphinxcrossref{krb5\_authdatatype}}}\sphinxstyleemphasis{ ad\_type}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} ***\sphinxstyleemphasis{ results}}{}
6736\end{fulllineitems}
6737
6738\begin{quote}\begin{description}
6739\item[{param}] \leavevmode
6740\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6741
6742\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ticket\_authdata} - Authorization data list from ticket
6743
6744\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_authdata} - Authorization data list from AP request
6745
6746\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ad\_type} - Authorization data type to find
6747
6748\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{results} - List of matching entries
6749
6750\end{description}\end{quote}
6751
6752This function searches \sphinxstyleemphasis{ticket\_authdata} and \sphinxstyleemphasis{ap\_req\_authdata} for elements of type \sphinxstyleemphasis{ad\_type} . Either input list may be NULL, in which case it will not be searched; otherwise, the input lists must be terminated by NULL entries. This function will search inside AD-IF-RELEVANT containers if found in either list. Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_authdata:c.krb5_free_authdata}]{\sphinxcrossref{\sphinxcode{krb5\_free\_authdata()}}}} to free \sphinxstyleemphasis{results} when it is no longer needed.
6753
6754\begin{sphinxadmonition}{note}{Note:}
6755New in 1.10
6756\end{sphinxadmonition}
6757
6758
6759\subsubsection{krb5\_free\_addresses -  Free the data stored in array of addresses.}
6760\label{\detokenize{appdev/refs/api/krb5_free_addresses:krb5-free-addresses-free-the-data-stored-in-array-of-addresses}}\label{\detokenize{appdev/refs/api/krb5_free_addresses::doc}}\index{krb5\_free\_addresses (C function)}
6761
6762\begin{fulllineitems}
6763\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_addresses:c.krb5_free_addresses}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_addresses}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} **\sphinxstyleemphasis{ val}}{}
6764\end{fulllineitems}
6765
6766\begin{quote}\begin{description}
6767\item[{param}] \leavevmode
6768\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6769
6770\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Array of addresses to be freed
6771
6772\end{description}\end{quote}
6773
6774This function frees the contents of \sphinxstyleemphasis{val} and the array itself.
6775
6776\begin{sphinxadmonition}{note}{Note:}
6777The last entry in the array must be a NULL pointer.
6778\end{sphinxadmonition}
6779
6780
6781\subsubsection{krb5\_free\_ap\_rep\_enc\_part -  Free a krb5\_ap\_rep\_enc\_part structure.}
6782\label{\detokenize{appdev/refs/api/krb5_free_ap_rep_enc_part:krb5-free-ap-rep-enc-part-free-a-krb5-ap-rep-enc-part-structure}}\label{\detokenize{appdev/refs/api/krb5_free_ap_rep_enc_part::doc}}\index{krb5\_free\_ap\_rep\_enc\_part (C function)}
6783
6784\begin{fulllineitems}
6785\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_ap_rep_enc_part:c.krb5_free_ap_rep_enc_part}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_ap\_rep\_enc\_part}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part}]{\sphinxcrossref{krb5\_ap\_rep\_enc\_part}}} *\sphinxstyleemphasis{ val}}{}
6786\end{fulllineitems}
6787
6788\begin{quote}\begin{description}
6789\item[{param}] \leavevmode
6790\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6791
6792\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - AP-REP enc part to be freed
6793
6794\end{description}\end{quote}
6795
6796This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
6797
6798
6799\subsubsection{krb5\_free\_authdata -  Free the storage assigned to array of authentication data.}
6800\label{\detokenize{appdev/refs/api/krb5_free_authdata::doc}}\label{\detokenize{appdev/refs/api/krb5_free_authdata:krb5-free-authdata-free-the-storage-assigned-to-array-of-authentication-data}}\index{krb5\_free\_authdata (C function)}
6801
6802\begin{fulllineitems}
6803\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_authdata:c.krb5_free_authdata}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_authdata}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} **\sphinxstyleemphasis{ val}}{}
6804\end{fulllineitems}
6805
6806\begin{quote}\begin{description}
6807\item[{param}] \leavevmode
6808\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6809
6810\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Array of authentication data to be freed
6811
6812\end{description}\end{quote}
6813
6814This function frees the contents of \sphinxstyleemphasis{val} and the array itself.
6815
6816\begin{sphinxadmonition}{note}{Note:}
6817The last entry in the array must be a NULL pointer.
6818\end{sphinxadmonition}
6819
6820
6821\subsubsection{krb5\_free\_authenticator -  Free a krb5\_authenticator structure.}
6822\label{\detokenize{appdev/refs/api/krb5_free_authenticator:krb5-free-authenticator-free-a-krb5-authenticator-structure}}\label{\detokenize{appdev/refs/api/krb5_free_authenticator::doc}}\index{krb5\_free\_authenticator (C function)}
6823
6824\begin{fulllineitems}
6825\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_authenticator:c.krb5_free_authenticator}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_authenticator}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{krb5\_authenticator}}} *\sphinxstyleemphasis{ val}}{}
6826\end{fulllineitems}
6827
6828\begin{quote}\begin{description}
6829\item[{param}] \leavevmode
6830\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6831
6832\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Authenticator structure to be freed
6833
6834\end{description}\end{quote}
6835
6836This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
6837
6838
6839\subsubsection{krb5\_free\_cred\_contents -  Free the contents of a krb5\_creds structure.}
6840\label{\detokenize{appdev/refs/api/krb5_free_cred_contents::doc}}\label{\detokenize{appdev/refs/api/krb5_free_cred_contents:krb5-free-cred-contents-free-the-contents-of-a-krb5-creds-structure}}\index{krb5\_free\_cred\_contents (C function)}
6841
6842\begin{fulllineitems}
6843\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_cred_contents:c.krb5_free_cred_contents}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_cred\_contents}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ val}}{}
6844\end{fulllineitems}
6845
6846\begin{quote}\begin{description}
6847\item[{param}] \leavevmode
6848\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6849
6850\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Credential structure to free contents of
6851
6852\end{description}\end{quote}
6853
6854This function frees the contents of \sphinxstyleemphasis{val} , but not the structure itself.
6855
6856
6857\subsubsection{krb5\_free\_creds -  Free a krb5\_creds structure.}
6858\label{\detokenize{appdev/refs/api/krb5_free_creds::doc}}\label{\detokenize{appdev/refs/api/krb5_free_creds:krb5-free-creds-free-a-krb5-creds-structure}}\index{krb5\_free\_creds (C function)}
6859
6860\begin{fulllineitems}
6861\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_creds:c.krb5_free_creds}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ val}}{}
6862\end{fulllineitems}
6863
6864\begin{quote}\begin{description}
6865\item[{param}] \leavevmode
6866\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6867
6868\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Credential structure to be freed.
6869
6870\end{description}\end{quote}
6871
6872This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
6873
6874
6875\subsubsection{krb5\_free\_data -  Free a krb5\_data structure.}
6876\label{\detokenize{appdev/refs/api/krb5_free_data:krb5-free-data-free-a-krb5-data-structure}}\label{\detokenize{appdev/refs/api/krb5_free_data::doc}}\index{krb5\_free\_data (C function)}
6877
6878\begin{fulllineitems}
6879\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_data:c.krb5_free_data}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_data}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ val}}{}
6880\end{fulllineitems}
6881
6882\begin{quote}\begin{description}
6883\item[{param}] \leavevmode
6884\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6885
6886\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Data structure to be freed
6887
6888\end{description}\end{quote}
6889
6890This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
6891
6892
6893\subsubsection{krb5\_free\_data\_contents -  Free the contents of a krb5\_data structure and zero the data field.}
6894\label{\detokenize{appdev/refs/api/krb5_free_data_contents:krb5-free-data-contents-free-the-contents-of-a-krb5-data-structure-and-zero-the-data-field}}\label{\detokenize{appdev/refs/api/krb5_free_data_contents::doc}}\index{krb5\_free\_data\_contents (C function)}
6895
6896\begin{fulllineitems}
6897\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_data\_contents}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ val}}{}
6898\end{fulllineitems}
6899
6900\begin{quote}\begin{description}
6901\item[{param}] \leavevmode
6902\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6903
6904\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Data structure to free contents of
6905
6906\end{description}\end{quote}
6907
6908This function frees the contents of \sphinxstyleemphasis{val} , but not the structure itself. It sets the structure’s data pointer to null and (beginning in release 1.19) sets its length to zero.
6909
6910
6911\subsubsection{krb5\_free\_default\_realm -  Free a default realm string returned by krb5\_get\_default\_realm() .}
6912\label{\detokenize{appdev/refs/api/krb5_free_default_realm:krb5-free-default-realm-free-a-default-realm-string-returned-by-krb5-get-default-realm}}\label{\detokenize{appdev/refs/api/krb5_free_default_realm::doc}}\index{krb5\_free\_default\_realm (C function)}
6913
6914\begin{fulllineitems}
6915\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_default_realm:c.krb5_free_default_realm}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_default\_realm}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, char *\sphinxstyleemphasis{ lrealm}}{}
6916\end{fulllineitems}
6917
6918\begin{quote}\begin{description}
6919\item[{param}] \leavevmode
6920\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6921
6922\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{lrealm} - Realm to be freed
6923
6924\end{description}\end{quote}
6925
6926
6927\subsubsection{krb5\_free\_enctypes -  Free an array of encryption types.}
6928\label{\detokenize{appdev/refs/api/krb5_free_enctypes::doc}}\label{\detokenize{appdev/refs/api/krb5_free_enctypes:krb5-free-enctypes-free-an-array-of-encryption-types}}\index{krb5\_free\_enctypes (C function)}
6929
6930\begin{fulllineitems}
6931\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_enctypes:c.krb5_free_enctypes}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_enctypes}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} *\sphinxstyleemphasis{ val}}{}
6932\end{fulllineitems}
6933
6934\begin{quote}\begin{description}
6935\item[{param}] \leavevmode
6936\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6937
6938\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Array of enctypes to be freed
6939
6940\end{description}\end{quote}
6941
6942\begin{sphinxadmonition}{note}{Note:}
6943New in 1.12
6944\end{sphinxadmonition}
6945
6946
6947\subsubsection{krb5\_free\_error -  Free an error allocated by krb5\_read\_error() or krb5\_sendauth() .}
6948\label{\detokenize{appdev/refs/api/krb5_free_error::doc}}\label{\detokenize{appdev/refs/api/krb5_free_error:krb5-free-error-free-an-error-allocated-by-krb5-read-error-or-krb5-sendauth}}\index{krb5\_free\_error (C function)}
6949
6950\begin{fulllineitems}
6951\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_error:c.krb5_free_error}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_error}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{krb5\_error}}} *\sphinxstyleemphasis{ val}}{}
6952\end{fulllineitems}
6953
6954\begin{quote}\begin{description}
6955\item[{param}] \leavevmode
6956\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6957
6958\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Error data structure to be freed
6959
6960\end{description}\end{quote}
6961
6962This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
6963
6964
6965\subsubsection{krb5\_free\_host\_realm -  Free the memory allocated by krb5\_get\_host\_realm() .}
6966\label{\detokenize{appdev/refs/api/krb5_free_host_realm::doc}}\label{\detokenize{appdev/refs/api/krb5_free_host_realm:krb5-free-host-realm-free-the-memory-allocated-by-krb5-get-host-realm}}\index{krb5\_free\_host\_realm (C function)}
6967
6968\begin{fulllineitems}
6969\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_host_realm:c.krb5_free_host_realm}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_free\_host\_realm}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, char *const *\sphinxstyleemphasis{ realmlist}}{}
6970\end{fulllineitems}
6971
6972\begin{quote}\begin{description}
6973\item[{param}] \leavevmode
6974\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6975
6976\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realmlist} - List of realm names to be released
6977
6978\end{description}\end{quote}
6979\begin{quote}\begin{description}
6980\item[{retval}] \leavevmode\begin{itemize}
6981\item {}
69820   Success
6983
6984\end{itemize}
6985
6986\item[{return}] \leavevmode\begin{itemize}
6987\item {}
6988Kerberos error codes
6989
6990\end{itemize}
6991
6992\end{description}\end{quote}
6993
6994
6995\subsubsection{krb5\_free\_keyblock -  Free a krb5\_keyblock structure.}
6996\label{\detokenize{appdev/refs/api/krb5_free_keyblock:krb5-free-keyblock-free-a-krb5-keyblock-structure}}\label{\detokenize{appdev/refs/api/krb5_free_keyblock::doc}}\index{krb5\_free\_keyblock (C function)}
6997
6998\begin{fulllineitems}
6999\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_keyblock:c.krb5_free_keyblock}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_keyblock}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ val}}{}
7000\end{fulllineitems}
7001
7002\begin{quote}\begin{description}
7003\item[{param}] \leavevmode
7004\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7005
7006\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Keyblock to be freed
7007
7008\end{description}\end{quote}
7009
7010This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
7011
7012
7013\subsubsection{krb5\_free\_keyblock\_contents -  Free the contents of a krb5\_keyblock structure.}
7014\label{\detokenize{appdev/refs/api/krb5_free_keyblock_contents::doc}}\label{\detokenize{appdev/refs/api/krb5_free_keyblock_contents:krb5-free-keyblock-contents-free-the-contents-of-a-krb5-keyblock-structure}}\index{krb5\_free\_keyblock\_contents (C function)}
7015
7016\begin{fulllineitems}
7017\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_keyblock_contents:c.krb5_free_keyblock_contents}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_keyblock\_contents}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}}{}
7018\end{fulllineitems}
7019
7020\begin{quote}\begin{description}
7021\item[{param}] \leavevmode
7022\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7023
7024\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Keyblock to be freed
7025
7026\end{description}\end{quote}
7027
7028This function frees the contents of \sphinxstyleemphasis{key} , but not the structure itself.
7029
7030
7031\subsubsection{krb5\_free\_keytab\_entry\_contents -  Free the contents of a key table entry.}
7032\label{\detokenize{appdev/refs/api/krb5_free_keytab_entry_contents:krb5-free-keytab-entry-contents-free-the-contents-of-a-key-table-entry}}\label{\detokenize{appdev/refs/api/krb5_free_keytab_entry_contents::doc}}\index{krb5\_free\_keytab\_entry\_contents (C function)}
7033
7034\begin{fulllineitems}
7035\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_keytab_entry_contents:c.krb5_free_keytab_entry_contents}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_free\_keytab\_entry\_contents}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{krb5\_keytab\_entry}}} *\sphinxstyleemphasis{ entry}}{}
7036\end{fulllineitems}
7037
7038\begin{quote}\begin{description}
7039\item[{param}] \leavevmode
7040\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7041
7042\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{entry} - Key table entry whose contents are to be freed
7043
7044\end{description}\end{quote}
7045\begin{quote}\begin{description}
7046\item[{retval}] \leavevmode\begin{itemize}
7047\item {}
70480   Success; otherwise - Kerberos error codes
7049
7050\end{itemize}
7051
7052\end{description}\end{quote}
7053
7054\begin{sphinxadmonition}{note}{Note:}
7055The pointer is not freed.
7056\end{sphinxadmonition}
7057
7058
7059\subsubsection{krb5\_free\_string -  Free a string allocated by a krb5 function.}
7060\label{\detokenize{appdev/refs/api/krb5_free_string:krb5-free-string-free-a-string-allocated-by-a-krb5-function}}\label{\detokenize{appdev/refs/api/krb5_free_string::doc}}\index{krb5\_free\_string (C function)}
7061
7062\begin{fulllineitems}
7063\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_string:c.krb5_free_string}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_string}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, char *\sphinxstyleemphasis{ val}}{}
7064\end{fulllineitems}
7065
7066\begin{quote}\begin{description}
7067\item[{param}] \leavevmode
7068\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7069
7070\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - String to be freed
7071
7072\end{description}\end{quote}
7073
7074\begin{sphinxadmonition}{note}{Note:}
7075New in 1.10
7076\end{sphinxadmonition}
7077
7078
7079\subsubsection{krb5\_free\_ticket -  Free a ticket.}
7080\label{\detokenize{appdev/refs/api/krb5_free_ticket:krb5-free-ticket-free-a-ticket}}\label{\detokenize{appdev/refs/api/krb5_free_ticket::doc}}\index{krb5\_free\_ticket (C function)}
7081
7082\begin{fulllineitems}
7083\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_ticket:c.krb5_free_ticket}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_ticket}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} *\sphinxstyleemphasis{ val}}{}
7084\end{fulllineitems}
7085
7086\begin{quote}\begin{description}
7087\item[{param}] \leavevmode
7088\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7089
7090\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Ticket to be freed
7091
7092\end{description}\end{quote}
7093
7094This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
7095
7096
7097\subsubsection{krb5\_free\_unparsed\_name -  Free a string representation of a principal.}
7098\label{\detokenize{appdev/refs/api/krb5_free_unparsed_name::doc}}\label{\detokenize{appdev/refs/api/krb5_free_unparsed_name:krb5-free-unparsed-name-free-a-string-representation-of-a-principal}}\index{krb5\_free\_unparsed\_name (C function)}
7099
7100\begin{fulllineitems}
7101\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_unparsed_name:c.krb5_free_unparsed_name}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_unparsed\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, char *\sphinxstyleemphasis{ val}}{}
7102\end{fulllineitems}
7103
7104\begin{quote}\begin{description}
7105\item[{param}] \leavevmode
7106\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7107
7108\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Name string to be freed
7109
7110\end{description}\end{quote}
7111
7112
7113\subsubsection{krb5\_get\_etype\_info -  Retrieve enctype, salt and s2kparams from KDC.}
7114\label{\detokenize{appdev/refs/api/krb5_get_etype_info:krb5-get-etype-info-retrieve-enctype-salt-and-s2kparams-from-kdc}}\label{\detokenize{appdev/refs/api/krb5_get_etype_info::doc}}\index{krb5\_get\_etype\_info (C function)}
7115
7116\begin{fulllineitems}
7117\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_etype_info:c.krb5_get_etype_info}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_etype\_info}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ principal}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} *\sphinxstyleemphasis{ enctype\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ salt\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ s2kparams\_out}}{}
7118\end{fulllineitems}
7119
7120\begin{quote}\begin{description}
7121\item[{param}] \leavevmode
7122\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7123
7124\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal whose information is requested
7125
7126\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Initial credential options
7127
7128\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{enctype\_out} - The enctype chosen by KDC
7129
7130\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{salt\_out} - Salt returned from KDC
7131
7132\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{s2kparams\_out} - String-to-key parameters returned from KDC
7133
7134\end{description}\end{quote}
7135\begin{quote}\begin{description}
7136\item[{retval}] \leavevmode\begin{itemize}
7137\item {}
71380   Success
7139
7140\end{itemize}
7141
7142\item[{return}] \leavevmode\begin{itemize}
7143\item {}
7144A Kerberos error code
7145
7146\end{itemize}
7147
7148\end{description}\end{quote}
7149
7150Send an initial ticket request for \sphinxstyleemphasis{principal} and extract the encryption type, salt type, and string-to-key parameters from the KDC response. If the KDC provides no etype-info, set \sphinxstyleemphasis{enctype\_out} to \sphinxstylestrong{ENCTYPE\_NULL} and set \sphinxstyleemphasis{salt\_out} and \sphinxstyleemphasis{s2kparams\_out} to empty. If the KDC etype-info provides no salt, compute the default salt and place it in \sphinxstyleemphasis{salt\_out} . If the KDC etype-info provides no string-to-key parameters, set \sphinxstyleemphasis{s2kparams\_out} to empty.
7151\begin{quote}
7152
7153\sphinxstyleemphasis{opt} may be used to specify options which affect the initial request, such as request encryption types or a FAST armor cache (see {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_etype_list:c.krb5_get_init_creds_opt_set_etype_list}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_set\_etype\_list()}}}} and {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache_name:c.krb5_get_init_creds_opt_set_fast_ccache_name}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache\_name()}}}} ).
7154\end{quote}
7155
7156Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{salt\_out} and \sphinxstyleemphasis{s2kparams\_out} when they are no longer needed.
7157
7158\begin{sphinxadmonition}{note}{Note:}
7159New in 1.17
7160\end{sphinxadmonition}
7161
7162
7163\subsubsection{krb5\_get\_permitted\_enctypes -  Return a list of encryption types permitted for session keys.}
7164\label{\detokenize{appdev/refs/api/krb5_get_permitted_enctypes:krb5-get-permitted-enctypes-return-a-list-of-encryption-types-permitted-for-session-keys}}\label{\detokenize{appdev/refs/api/krb5_get_permitted_enctypes::doc}}\index{krb5\_get\_permitted\_enctypes (C function)}
7165
7166\begin{fulllineitems}
7167\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_permitted_enctypes:c.krb5_get_permitted_enctypes}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_permitted\_enctypes}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} **\sphinxstyleemphasis{ ktypes}}{}
7168\end{fulllineitems}
7169
7170\begin{quote}\begin{description}
7171\item[{param}] \leavevmode
7172\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7173
7174\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ktypes} - Zero-terminated list of encryption types
7175
7176\end{description}\end{quote}
7177\begin{quote}\begin{description}
7178\item[{retval}] \leavevmode\begin{itemize}
7179\item {}
71800   Success; otherwise - Kerberos error codes
7181
7182\end{itemize}
7183
7184\end{description}\end{quote}
7185
7186This function returns the list of encryption types permitted for session keys within \sphinxstyleemphasis{context} , as determined by configuration or by a previous call to {\hyperref[\detokenize{appdev/refs/api/krb5_set_default_tgs_enctypes:c.krb5_set_default_tgs_enctypes}]{\sphinxcrossref{\sphinxcode{krb5\_set\_default\_tgs\_enctypes()}}}} .
7187
7188Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_enctypes:c.krb5_free_enctypes}]{\sphinxcrossref{\sphinxcode{krb5\_free\_enctypes()}}}} to free \sphinxstyleemphasis{ktypes} when it is no longer needed.
7189
7190
7191\subsubsection{krb5\_get\_server\_rcache -  Generate a replay cache object for server use and open it.}
7192\label{\detokenize{appdev/refs/api/krb5_get_server_rcache:krb5-get-server-rcache-generate-a-replay-cache-object-for-server-use-and-open-it}}\label{\detokenize{appdev/refs/api/krb5_get_server_rcache::doc}}\index{krb5\_get\_server\_rcache (C function)}
7193
7194\begin{fulllineitems}
7195\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_server_rcache:c.krb5_get_server_rcache}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_server\_rcache}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ piece}, {\hyperref[\detokenize{appdev/refs/types/krb5_rcache:c.krb5_rcache}]{\sphinxcrossref{krb5\_rcache}}} *\sphinxstyleemphasis{ rcptr}}{}
7196\end{fulllineitems}
7197
7198\begin{quote}\begin{description}
7199\item[{param}] \leavevmode
7200\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7201
7202\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{piece} - Unused (replay cache identifier)
7203
7204\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rcptr} - Handle to an open rcache
7205
7206\end{description}\end{quote}
7207\begin{quote}\begin{description}
7208\item[{retval}] \leavevmode\begin{itemize}
7209\item {}
72100   Success; otherwise - Kerberos error codes
7211
7212\end{itemize}
7213
7214\end{description}\end{quote}
7215
7216This function creates a handle to the default replay cache. Use krb5\_rc\_close() to close \sphinxstyleemphasis{rcptr} when it is no longer needed.
7217
7218\begin{sphinxadmonition}{note}{Note:}
7219Prior to release 1.18, this function creates a handle to a different replay cache for each unique value of \sphinxstyleemphasis{piece} .
7220\end{sphinxadmonition}
7221
7222
7223\subsubsection{krb5\_get\_time\_offsets -  Return the time offsets from the os context.}
7224\label{\detokenize{appdev/refs/api/krb5_get_time_offsets:krb5-get-time-offsets-return-the-time-offsets-from-the-os-context}}\label{\detokenize{appdev/refs/api/krb5_get_time_offsets::doc}}\index{krb5\_get\_time\_offsets (C function)}
7225
7226\begin{fulllineitems}
7227\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_time_offsets:c.krb5_get_time_offsets}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_time\_offsets}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} *\sphinxstyleemphasis{ seconds}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} *\sphinxstyleemphasis{ microseconds}}{}
7228\end{fulllineitems}
7229
7230\begin{quote}\begin{description}
7231\item[{param}] \leavevmode
7232\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7233
7234\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{seconds} - Time offset, seconds portion
7235
7236\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{microseconds} - Time offset, microseconds portion
7237
7238\end{description}\end{quote}
7239\begin{quote}\begin{description}
7240\item[{retval}] \leavevmode\begin{itemize}
7241\item {}
72420   Success; otherwise - Kerberos error codes
7243
7244\end{itemize}
7245
7246\end{description}\end{quote}
7247
7248This function returns the time offsets in \sphinxstyleemphasis{context} .
7249
7250
7251\subsubsection{krb5\_init\_context\_profile -  Create a krb5 library context using a specified profile.}
7252\label{\detokenize{appdev/refs/api/krb5_init_context_profile:krb5-init-context-profile-create-a-krb5-library-context-using-a-specified-profile}}\label{\detokenize{appdev/refs/api/krb5_init_context_profile::doc}}\index{krb5\_init\_context\_profile (C function)}
7253
7254\begin{fulllineitems}
7255\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_context_profile:c.krb5_init_context_profile}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_context\_profile}}{struct \_profile\_t *\sphinxstyleemphasis{ profile}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ flags}, {\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}} *\sphinxstyleemphasis{ context}}{}
7256\end{fulllineitems}
7257
7258\begin{quote}\begin{description}
7259\item[{param}] \leavevmode
7260\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{profile} - Profile object (NULL to create default profile)
7261
7262\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Context initialization flags
7263
7264\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{context} - Library context
7265
7266\end{description}\end{quote}
7267
7268Create a context structure, optionally using a specified profile and initialization flags. If \sphinxstyleemphasis{profile} is NULL, the default profile will be created from config files. If \sphinxstyleemphasis{profile} is non-null, a copy of it will be made for the new context; the caller should still clean up its copy. Valid flag values are:
7269\begin{itemize}
7270\item {}
7271{\hyperref[\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_SECURE:KRB5_INIT_CONTEXT_SECURE}]{\sphinxcrossref{\sphinxcode{KRB5\_INIT\_CONTEXT\_SECURE}}}} Ignore environment variables
7272
7273\item {}
7274{\hyperref[\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_KDC:KRB5_INIT_CONTEXT_KDC}]{\sphinxcrossref{\sphinxcode{KRB5\_INIT\_CONTEXT\_KDC}}}} Use KDC configuration if creating profile
7275
7276\end{itemize}
7277
7278
7279\subsubsection{krb5\_init\_creds\_free -  Free an initial credentials context.}
7280\label{\detokenize{appdev/refs/api/krb5_init_creds_free::doc}}\label{\detokenize{appdev/refs/api/krb5_init_creds_free:krb5-init-creds-free-free-an-initial-credentials-context}}\index{krb5\_init\_creds\_free (C function)}
7281
7282\begin{fulllineitems}
7283\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_free:c.krb5_init_creds_free}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_init\_creds\_free}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}}\sphinxstyleemphasis{ ctx}}{}
7284\end{fulllineitems}
7285
7286\begin{quote}\begin{description}
7287\item[{param}] \leavevmode
7288\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7289
7290\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context
7291
7292\end{description}\end{quote}
7293\begin{quote}
7294
7295\sphinxstyleemphasis{context} must be the same as the one passed to {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_init:c.krb5_init_creds_init}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_init()}}}} for this initial credentials context.
7296\end{quote}
7297
7298
7299\subsubsection{krb5\_init\_creds\_get -  Acquire credentials using an initial credentials context.}
7300\label{\detokenize{appdev/refs/api/krb5_init_creds_get::doc}}\label{\detokenize{appdev/refs/api/krb5_init_creds_get:krb5-init-creds-get-acquire-credentials-using-an-initial-credentials-context}}\index{krb5\_init\_creds\_get (C function)}
7301
7302\begin{fulllineitems}
7303\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_get:c.krb5_init_creds_get}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_creds\_get}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}}\sphinxstyleemphasis{ ctx}}{}
7304\end{fulllineitems}
7305
7306\begin{quote}\begin{description}
7307\item[{param}] \leavevmode
7308\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7309
7310\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context
7311
7312\end{description}\end{quote}
7313\begin{quote}\begin{description}
7314\item[{retval}] \leavevmode\begin{itemize}
7315\item {}
73160   Success; otherwise - Kerberos error codes
7317
7318\end{itemize}
7319
7320\end{description}\end{quote}
7321
7322This function synchronously obtains credentials using a context created by {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_init:c.krb5_init_creds_init}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_init()}}}} . On successful return, the credentials can be retrieved with {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_get_creds:c.krb5_init_creds_get_creds}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_get\_creds()}}}} .
7323\begin{quote}
7324
7325\sphinxstyleemphasis{context} must be the same as the one passed to {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_init:c.krb5_init_creds_init}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_init()}}}} for this initial credentials context.
7326\end{quote}
7327
7328
7329\subsubsection{krb5\_init\_creds\_get\_creds -  Retrieve acquired credentials from an initial credentials context.}
7330\label{\detokenize{appdev/refs/api/krb5_init_creds_get_creds::doc}}\label{\detokenize{appdev/refs/api/krb5_init_creds_get_creds:krb5-init-creds-get-creds-retrieve-acquired-credentials-from-an-initial-credentials-context}}\index{krb5\_init\_creds\_get\_creds (C function)}
7331
7332\begin{fulllineitems}
7333\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_get_creds:c.krb5_init_creds_get_creds}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_creds\_get\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}}{}
7334\end{fulllineitems}
7335
7336\begin{quote}\begin{description}
7337\item[{param}] \leavevmode
7338\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7339
7340\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context
7341
7342\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - Acquired credentials
7343
7344\end{description}\end{quote}
7345\begin{quote}\begin{description}
7346\item[{retval}] \leavevmode\begin{itemize}
7347\item {}
73480   Success; otherwise - Kerberos error codes
7349
7350\end{itemize}
7351
7352\end{description}\end{quote}
7353
7354This function copies the acquired initial credentials from \sphinxstyleemphasis{ctx} into \sphinxstyleemphasis{creds} , after the successful completion of {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_get:c.krb5_init_creds_get}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_get()}}}} or {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_step:c.krb5_init_creds_step}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_step()}}}} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_cred_contents:c.krb5_free_cred_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_cred\_contents()}}}} to free \sphinxstyleemphasis{creds} when it is no longer needed.
7355
7356
7357\subsubsection{krb5\_init\_creds\_get\_error -  Get the last error from KDC from an initial credentials context.}
7358\label{\detokenize{appdev/refs/api/krb5_init_creds_get_error:krb5-init-creds-get-error-get-the-last-error-from-kdc-from-an-initial-credentials-context}}\label{\detokenize{appdev/refs/api/krb5_init_creds_get_error::doc}}\index{krb5\_init\_creds\_get\_error (C function)}
7359
7360\begin{fulllineitems}
7361\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_get_error:c.krb5_init_creds_get_error}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_creds\_get\_error}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{krb5\_error}}} **\sphinxstyleemphasis{ error}}{}
7362\end{fulllineitems}
7363
7364\begin{quote}\begin{description}
7365\item[{param}] \leavevmode
7366\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7367
7368\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context
7369
7370\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{error} - Error from KDC, or NULL if none was received
7371
7372\end{description}\end{quote}
7373\begin{quote}\begin{description}
7374\item[{retval}] \leavevmode\begin{itemize}
7375\item {}
73760   Success; otherwise - Kerberos error codes
7377
7378\end{itemize}
7379
7380\end{description}\end{quote}
7381
7382
7383\subsubsection{krb5\_init\_creds\_get\_times -  Retrieve ticket times from an initial credentials context.}
7384\label{\detokenize{appdev/refs/api/krb5_init_creds_get_times::doc}}\label{\detokenize{appdev/refs/api/krb5_init_creds_get_times:krb5-init-creds-get-times-retrieve-ticket-times-from-an-initial-credentials-context}}\index{krb5\_init\_creds\_get\_times (C function)}
7385
7386\begin{fulllineitems}
7387\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_get_times:c.krb5_init_creds_get_times}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_creds\_get\_times}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{krb5\_ticket\_times}}} *\sphinxstyleemphasis{ times}}{}
7388\end{fulllineitems}
7389
7390\begin{quote}\begin{description}
7391\item[{param}] \leavevmode
7392\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7393
7394\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context
7395
7396\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{times} - Ticket times for acquired credentials
7397
7398\end{description}\end{quote}
7399\begin{quote}\begin{description}
7400\item[{retval}] \leavevmode\begin{itemize}
7401\item {}
74020   Success; otherwise - Kerberos error codes
7403
7404\end{itemize}
7405
7406\end{description}\end{quote}
7407
7408The initial credentials context must have completed obtaining credentials via either {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_get:c.krb5_init_creds_get}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_get()}}}} or {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_step:c.krb5_init_creds_step}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_step()}}}} .
7409
7410
7411\subsubsection{krb5\_init\_creds\_init -  Create a context for acquiring initial credentials.}
7412\label{\detokenize{appdev/refs/api/krb5_init_creds_init::doc}}\label{\detokenize{appdev/refs/api/krb5_init_creds_init:krb5-init-creds-init-create-a-context-for-acquiring-initial-credentials}}\index{krb5\_init\_creds\_init (C function)}
7413
7414\begin{fulllineitems}
7415\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_init:c.krb5_init_creds_init}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_creds\_init}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ client}, {\hyperref[\detokenize{appdev/refs/types/krb5_prompter_fct:c.krb5_prompter_fct}]{\sphinxcrossref{krb5\_prompter\_fct}}}\sphinxstyleemphasis{ prompter}, void *\sphinxstyleemphasis{ data}, {\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{krb5\_deltat}}}\sphinxstyleemphasis{ start\_time}, {\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ options}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}} *\sphinxstyleemphasis{ ctx}}{}
7416\end{fulllineitems}
7417
7418\begin{quote}\begin{description}
7419\item[{param}] \leavevmode
7420\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7421
7422\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal to get initial creds for
7423
7424\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompter} - Prompter callback
7425
7426\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Prompter callback argument
7427
7428\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{start\_time} - Time when credentials become valid (0 for now)
7429
7430\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{options} - Options structure (NULL for default)
7431
7432\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ctx} - New initial credentials context
7433
7434\end{description}\end{quote}
7435\begin{quote}\begin{description}
7436\item[{retval}] \leavevmode\begin{itemize}
7437\item {}
74380   Success; otherwise - Kerberos error codes
7439
7440\end{itemize}
7441
7442\end{description}\end{quote}
7443
7444This function creates a new context for acquiring initial credentials. Use {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_free:c.krb5_init_creds_free}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_free()}}}} to free \sphinxstyleemphasis{ctx} when it is no longer needed.
7445
7446Any subsequent calls to {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_step:c.krb5_init_creds_step}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_step()}}}} , {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_get:c.krb5_init_creds_get}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_get()}}}} , or {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_free:c.krb5_init_creds_free}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_free()}}}} for this initial credentials context must use the same \sphinxstyleemphasis{context} argument as the one passed to this function.
7447
7448
7449\subsubsection{krb5\_init\_creds\_set\_keytab -  Specify a keytab to use for acquiring initial credentials.}
7450\label{\detokenize{appdev/refs/api/krb5_init_creds_set_keytab:krb5-init-creds-set-keytab-specify-a-keytab-to-use-for-acquiring-initial-credentials}}\label{\detokenize{appdev/refs/api/krb5_init_creds_set_keytab::doc}}\index{krb5\_init\_creds\_set\_keytab (C function)}
7451
7452\begin{fulllineitems}
7453\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_set_keytab:c.krb5_init_creds_set_keytab}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_creds\_set\_keytab}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}}{}
7454\end{fulllineitems}
7455
7456\begin{quote}\begin{description}
7457\item[{param}] \leavevmode
7458\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7459
7460\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context
7461
7462\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle
7463
7464\end{description}\end{quote}
7465\begin{quote}\begin{description}
7466\item[{retval}] \leavevmode\begin{itemize}
7467\item {}
74680   Success; otherwise - Kerberos error codes
7469
7470\end{itemize}
7471
7472\end{description}\end{quote}
7473
7474This function supplies a keytab containing the client key for an initial credentials request.
7475
7476
7477\subsubsection{krb5\_init\_creds\_set\_password -  Set a password for acquiring initial credentials.}
7478\label{\detokenize{appdev/refs/api/krb5_init_creds_set_password:krb5-init-creds-set-password-set-a-password-for-acquiring-initial-credentials}}\label{\detokenize{appdev/refs/api/krb5_init_creds_set_password::doc}}\index{krb5\_init\_creds\_set\_password (C function)}
7479
7480\begin{fulllineitems}
7481\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_set_password:c.krb5_init_creds_set_password}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_creds\_set\_password}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}}\sphinxstyleemphasis{ ctx}, const char *\sphinxstyleemphasis{ password}}{}
7482\end{fulllineitems}
7483
7484\begin{quote}\begin{description}
7485\item[{param}] \leavevmode
7486\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7487
7488\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context
7489
7490\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{password} - Password
7491
7492\end{description}\end{quote}
7493\begin{quote}\begin{description}
7494\item[{retval}] \leavevmode\begin{itemize}
7495\item {}
74960   Success; otherwise - Kerberos error codes
7497
7498\end{itemize}
7499
7500\end{description}\end{quote}
7501
7502This function supplies a password to be used to construct the client key for an initial credentials request.
7503
7504
7505\subsubsection{krb5\_init\_creds\_set\_service -  Specify a service principal for acquiring initial credentials.}
7506\label{\detokenize{appdev/refs/api/krb5_init_creds_set_service::doc}}\label{\detokenize{appdev/refs/api/krb5_init_creds_set_service:krb5-init-creds-set-service-specify-a-service-principal-for-acquiring-initial-credentials}}\index{krb5\_init\_creds\_set\_service (C function)}
7507
7508\begin{fulllineitems}
7509\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_set_service:c.krb5_init_creds_set_service}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_creds\_set\_service}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}}\sphinxstyleemphasis{ ctx}, const char *\sphinxstyleemphasis{ service}}{}
7510\end{fulllineitems}
7511
7512\begin{quote}\begin{description}
7513\item[{param}] \leavevmode
7514\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7515
7516\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context
7517
7518\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{service} - Service principal string
7519
7520\end{description}\end{quote}
7521\begin{quote}\begin{description}
7522\item[{retval}] \leavevmode\begin{itemize}
7523\item {}
75240   Success; otherwise - Kerberos error codes
7525
7526\end{itemize}
7527
7528\end{description}\end{quote}
7529
7530This function supplies a service principal string to acquire initial credentials for instead of the default krbtgt service. \sphinxstyleemphasis{service} is parsed as a principal name; any realm part is ignored.
7531
7532
7533\subsubsection{krb5\_init\_creds\_step -  Get the next KDC request for acquiring initial credentials.}
7534\label{\detokenize{appdev/refs/api/krb5_init_creds_step::doc}}\label{\detokenize{appdev/refs/api/krb5_init_creds_step:krb5-init-creds-step-get-the-next-kdc-request-for-acquiring-initial-credentials}}\index{krb5\_init\_creds\_step (C function)}
7535
7536\begin{fulllineitems}
7537\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_creds_step:c.krb5_init_creds_step}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_creds\_step}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}]{\sphinxcrossref{krb5\_init\_creds\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ in}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ out}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ realm}, unsigned int *\sphinxstyleemphasis{ flags}}{}
7538\end{fulllineitems}
7539
7540\begin{quote}\begin{description}
7541\item[{param}] \leavevmode
7542\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7543
7544\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context
7545
7546\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in} - KDC response (empty on the first call)
7547
7548\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Next KDC request
7549
7550\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realm} - Realm for next KDC request
7551
7552\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{flags} - Output flags
7553
7554\end{description}\end{quote}
7555\begin{quote}\begin{description}
7556\item[{retval}] \leavevmode\begin{itemize}
7557\item {}
75580   Success; otherwise - Kerberos error codes
7559
7560\end{itemize}
7561
7562\end{description}\end{quote}
7563
7564This function constructs the next KDC request in an initial credential exchange, allowing the caller to control the transport of KDC requests and replies. On the first call, \sphinxstyleemphasis{in} should be set to an empty buffer; on subsequent calls, it should be set to the KDC’s reply to the previous request.
7565
7566If more requests are needed, \sphinxstyleemphasis{flags} will be set to {\hyperref[\detokenize{appdev/refs/macros/KRB5_INIT_CREDS_STEP_FLAG_CONTINUE:KRB5_INIT_CREDS_STEP_FLAG_CONTINUE}]{\sphinxcrossref{\sphinxcode{KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE}}}} and the next request will be placed in \sphinxstyleemphasis{out} . If no more requests are needed, \sphinxstyleemphasis{flags} will not contain {\hyperref[\detokenize{appdev/refs/macros/KRB5_INIT_CREDS_STEP_FLAG_CONTINUE:KRB5_INIT_CREDS_STEP_FLAG_CONTINUE}]{\sphinxcrossref{\sphinxcode{KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE}}}} and \sphinxstyleemphasis{out} will be empty.
7567
7568If this function returns \sphinxstylestrong{KRB5KRB\_ERR\_RESPONSE\_TOO\_BIG} , the caller should transmit the next request using TCP rather than UDP. If this function returns any other error, the initial credential exchange has failed.
7569\begin{quote}
7570
7571\sphinxstyleemphasis{context} must be the same as the one passed to {\hyperref[\detokenize{appdev/refs/api/krb5_init_creds_init:c.krb5_init_creds_init}]{\sphinxcrossref{\sphinxcode{krb5\_init\_creds\_init()}}}} for this initial credentials context.
7572\end{quote}
7573
7574
7575\subsubsection{krb5\_init\_keyblock -  Initialize an empty krb5\_keyblock .}
7576\label{\detokenize{appdev/refs/api/krb5_init_keyblock:krb5-init-keyblock-initialize-an-empty-krb5-keyblock}}\label{\detokenize{appdev/refs/api/krb5_init_keyblock::doc}}\index{krb5\_init\_keyblock (C function)}
7577
7578\begin{fulllineitems}
7579\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_keyblock:c.krb5_init_keyblock}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_keyblock}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, size\_t\sphinxstyleemphasis{ length}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ out}}{}
7580\end{fulllineitems}
7581
7582\begin{quote}\begin{description}
7583\item[{param}] \leavevmode
7584\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7585
7586\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
7587
7588\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{length} - Length of keyblock (or 0)
7589
7590\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - New keyblock structure
7591
7592\end{description}\end{quote}
7593\begin{quote}\begin{description}
7594\item[{retval}] \leavevmode\begin{itemize}
7595\item {}
75960   Success; otherwise - Kerberos error codes
7597
7598\end{itemize}
7599
7600\end{description}\end{quote}
7601
7602Initialize a new keyblock and allocate storage for the contents of the key. It is legal to pass in a length of 0, in which case contents are left unallocated. Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock:c.krb5_free_keyblock}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock()}}}} to free \sphinxstyleemphasis{out} when it is no longer needed.
7603
7604\begin{sphinxadmonition}{note}{Note:}
7605If \sphinxstyleemphasis{length} is set to 0, contents are left unallocated.
7606\end{sphinxadmonition}
7607
7608
7609\subsubsection{krb5\_is\_referral\_realm -  Check for a match with KRB5\_REFERRAL\_REALM.}
7610\label{\detokenize{appdev/refs/api/krb5_is_referral_realm:krb5-is-referral-realm-check-for-a-match-with-krb5-referral-realm}}\label{\detokenize{appdev/refs/api/krb5_is_referral_realm::doc}}\index{krb5\_is\_referral\_realm (C function)}
7611
7612\begin{fulllineitems}
7613\phantomsection\label{\detokenize{appdev/refs/api/krb5_is_referral_realm:c.krb5_is_referral_realm}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_is\_referral\_realm}}{const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ r}}{}
7614\end{fulllineitems}
7615
7616\begin{quote}\begin{description}
7617\item[{param}] \leavevmode
7618\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{r} - Realm to check
7619
7620\end{description}\end{quote}
7621\begin{quote}\begin{description}
7622\item[{return}] \leavevmode\begin{itemize}
7623\item {}
7624TRUE if r is zero-length, FALSE otherwise
7625
7626\end{itemize}
7627
7628\end{description}\end{quote}
7629
7630
7631\subsubsection{krb5\_kt\_add\_entry -  Add a new entry to a key table.}
7632\label{\detokenize{appdev/refs/api/krb5_kt_add_entry:krb5-kt-add-entry-add-a-new-entry-to-a-key-table}}\label{\detokenize{appdev/refs/api/krb5_kt_add_entry::doc}}\index{krb5\_kt\_add\_entry (C function)}
7633
7634\begin{fulllineitems}
7635\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_add_entry:c.krb5_kt_add_entry}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_add\_entry}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ id}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{krb5\_keytab\_entry}}} *\sphinxstyleemphasis{ entry}}{}
7636\end{fulllineitems}
7637
7638\begin{quote}\begin{description}
7639\item[{param}] \leavevmode
7640\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7641
7642\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{id} - Key table handle
7643
7644\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{entry} - Entry to be added
7645
7646\end{description}\end{quote}
7647\begin{quote}\begin{description}
7648\item[{retval}] \leavevmode\begin{itemize}
7649\item {}
76500   Success
7651
7652\item {}
7653ENOMEM   Insufficient memory
7654
7655\item {}
7656KRB5\_KT\_NOWRITE   Key table is not writeable
7657
7658\end{itemize}
7659
7660\item[{return}] \leavevmode\begin{itemize}
7661\item {}
7662Kerberos error codes
7663
7664\end{itemize}
7665
7666\end{description}\end{quote}
7667
7668
7669\subsubsection{krb5\_kt\_end\_seq\_get -  Release a keytab cursor.}
7670\label{\detokenize{appdev/refs/api/krb5_kt_end_seq_get::doc}}\label{\detokenize{appdev/refs/api/krb5_kt_end_seq_get:krb5-kt-end-seq-get-release-a-keytab-cursor}}\index{krb5\_kt\_end\_seq\_get (C function)}
7671
7672\begin{fulllineitems}
7673\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_end_seq_get:c.krb5_kt_end_seq_get}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_end\_seq\_get}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_kt_cursor:c.krb5_kt_cursor}]{\sphinxcrossref{krb5\_kt\_cursor}}} *\sphinxstyleemphasis{ cursor}}{}
7674\end{fulllineitems}
7675
7676\begin{quote}\begin{description}
7677\item[{param}] \leavevmode
7678\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7679
7680\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle
7681
7682\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cursor} - Cursor
7683
7684\end{description}\end{quote}
7685\begin{quote}\begin{description}
7686\item[{retval}] \leavevmode\begin{itemize}
7687\item {}
76880   Success
7689
7690\end{itemize}
7691
7692\item[{return}] \leavevmode\begin{itemize}
7693\item {}
7694Kerberos error codes
7695
7696\end{itemize}
7697
7698\end{description}\end{quote}
7699
7700This function should be called to release the cursor created by {\hyperref[\detokenize{appdev/refs/api/krb5_kt_start_seq_get:c.krb5_kt_start_seq_get}]{\sphinxcrossref{\sphinxcode{krb5\_kt\_start\_seq\_get()}}}} .
7701
7702
7703\subsubsection{krb5\_kt\_get\_entry -  Get an entry from a key table.}
7704\label{\detokenize{appdev/refs/api/krb5_kt_get_entry:krb5-kt-get-entry-get-an-entry-from-a-key-table}}\label{\detokenize{appdev/refs/api/krb5_kt_get_entry::doc}}\index{krb5\_kt\_get\_entry (C function)}
7705
7706\begin{fulllineitems}
7707\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_get_entry:c.krb5_kt_get_entry}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_get\_entry}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, {\hyperref[\detokenize{appdev/refs/types/krb5_kvno:c.krb5_kvno}]{\sphinxcrossref{krb5\_kvno}}}\sphinxstyleemphasis{ vno}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{krb5\_keytab\_entry}}} *\sphinxstyleemphasis{ entry}}{}
7708\end{fulllineitems}
7709
7710\begin{quote}\begin{description}
7711\item[{param}] \leavevmode
7712\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7713
7714\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle
7715
7716\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal name
7717
7718\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{vno} - Key version number (0 for highest available)
7719
7720\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type (0 zero for any enctype)
7721
7722\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{entry} - Returned entry from key table
7723
7724\end{description}\end{quote}
7725\begin{quote}\begin{description}
7726\item[{retval}] \leavevmode\begin{itemize}
7727\item {}
77280   Success
7729
7730\item {}
7731Kerberos   error codes on failure
7732
7733\end{itemize}
7734
7735\end{description}\end{quote}
7736
7737Retrieve an entry from a key table which matches the \sphinxstyleemphasis{keytab} , \sphinxstyleemphasis{principal} , \sphinxstyleemphasis{vno} , and \sphinxstyleemphasis{enctype} . If \sphinxstyleemphasis{vno} is zero, retrieve the highest-numbered kvno matching the other fields. If \sphinxstyleemphasis{enctype} is 0, match any enctype.
7738
7739Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_keytab_entry_contents:c.krb5_free_keytab_entry_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keytab\_entry\_contents()}}}} to free \sphinxstyleemphasis{entry} when it is no longer needed.
7740
7741\begin{sphinxadmonition}{note}{Note:}
7742If \sphinxstyleemphasis{vno} is zero, the function retrieves the highest-numbered-kvno entry that matches the specified principal.
7743\end{sphinxadmonition}
7744
7745
7746\subsubsection{krb5\_kt\_have\_content -  Check if a keytab exists and contains entries.}
7747\label{\detokenize{appdev/refs/api/krb5_kt_have_content::doc}}\label{\detokenize{appdev/refs/api/krb5_kt_have_content:krb5-kt-have-content-check-if-a-keytab-exists-and-contains-entries}}\index{krb5\_kt\_have\_content (C function)}
7748
7749\begin{fulllineitems}
7750\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_have_content:c.krb5_kt_have_content}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_have\_content}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}}{}
7751\end{fulllineitems}
7752
7753\begin{quote}\begin{description}
7754\item[{param}] \leavevmode
7755\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7756
7757\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle
7758
7759\end{description}\end{quote}
7760\begin{quote}\begin{description}
7761\item[{retval}] \leavevmode\begin{itemize}
7762\item {}
77630   Keytab exists and contains entries
7764
7765\item {}
7766KRB5\_KT\_NOTFOUND   Keytab does not contain entries
7767
7768\end{itemize}
7769
7770\end{description}\end{quote}
7771
7772\begin{sphinxadmonition}{note}{Note:}
7773New in 1.11
7774\end{sphinxadmonition}
7775
7776
7777\subsubsection{krb5\_kt\_next\_entry -  Retrieve the next entry from the key table.}
7778\label{\detokenize{appdev/refs/api/krb5_kt_next_entry:krb5-kt-next-entry-retrieve-the-next-entry-from-the-key-table}}\label{\detokenize{appdev/refs/api/krb5_kt_next_entry::doc}}\index{krb5\_kt\_next\_entry (C function)}
7779
7780\begin{fulllineitems}
7781\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_next_entry:c.krb5_kt_next_entry}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_next\_entry}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{krb5\_keytab\_entry}}} *\sphinxstyleemphasis{ entry}, {\hyperref[\detokenize{appdev/refs/types/krb5_kt_cursor:c.krb5_kt_cursor}]{\sphinxcrossref{krb5\_kt\_cursor}}} *\sphinxstyleemphasis{ cursor}}{}
7782\end{fulllineitems}
7783
7784\begin{quote}\begin{description}
7785\item[{param}] \leavevmode
7786\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7787
7788\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle
7789
7790\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{entry} - Returned key table entry
7791
7792\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} - Key table cursor
7793
7794\end{description}\end{quote}
7795\begin{quote}\begin{description}
7796\item[{retval}] \leavevmode\begin{itemize}
7797\item {}
77980   Success
7799
7800\item {}
7801KRB5\_KT\_END   - if the last entry was reached
7802
7803\end{itemize}
7804
7805\item[{return}] \leavevmode\begin{itemize}
7806\item {}
7807Kerberos error codes
7808
7809\end{itemize}
7810
7811\end{description}\end{quote}
7812
7813Return the next sequential entry in \sphinxstyleemphasis{keytab} and advance \sphinxstyleemphasis{cursor} . Callers must release the returned entry with {\hyperref[\detokenize{appdev/refs/api/krb5_kt_free_entry:c.krb5_kt_free_entry}]{\sphinxcrossref{\sphinxcode{krb5\_kt\_free\_entry()}}}} .
7814
7815
7816\subsubsection{krb5\_kt\_read\_service\_key -  Retrieve a service key from a key table.}
7817\label{\detokenize{appdev/refs/api/krb5_kt_read_service_key::doc}}\label{\detokenize{appdev/refs/api/krb5_kt_read_service_key:krb5-kt-read-service-key-retrieve-a-service-key-from-a-key-table}}\index{krb5\_kt\_read\_service\_key (C function)}
7818
7819\begin{fulllineitems}
7820\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_read_service_key:c.krb5_kt_read_service_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_read\_service\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}}\sphinxstyleemphasis{ keyprocarg}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ principal}, {\hyperref[\detokenize{appdev/refs/types/krb5_kvno:c.krb5_kvno}]{\sphinxcrossref{krb5\_kvno}}}\sphinxstyleemphasis{ vno}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ key}}{}
7821\end{fulllineitems}
7822
7823\begin{quote}\begin{description}
7824\item[{param}] \leavevmode
7825\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7826
7827\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyprocarg} - Name of a key table (NULL to use default name)
7828
7829\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Service principal
7830
7831\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{vno} - Key version number (0 for highest available)
7832
7833\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type (0 for any type)
7834
7835\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Service key from key table
7836
7837\end{description}\end{quote}
7838\begin{quote}\begin{description}
7839\item[{retval}] \leavevmode\begin{itemize}
7840\item {}
78410   Success
7842
7843\end{itemize}
7844
7845\item[{return}] \leavevmode\begin{itemize}
7846\item {}
7847Kerberos error code if not found or keyprocarg is invalid.
7848
7849\end{itemize}
7850
7851\end{description}\end{quote}
7852
7853Open and search the specified key table for the entry identified by \sphinxstyleemphasis{principal} , \sphinxstyleemphasis{enctype} , and \sphinxstyleemphasis{vno} . If no key is found, return an error code.
7854
7855The default key table is used, unless \sphinxstyleemphasis{keyprocarg} is non-null. \sphinxstyleemphasis{keyprocarg} designates a specific key table.
7856
7857Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock:c.krb5_free_keyblock}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock()}}}} to free \sphinxstyleemphasis{key} when it is no longer needed.
7858
7859
7860\subsubsection{krb5\_kt\_remove\_entry -  Remove an entry from a key table.}
7861\label{\detokenize{appdev/refs/api/krb5_kt_remove_entry::doc}}\label{\detokenize{appdev/refs/api/krb5_kt_remove_entry:krb5-kt-remove-entry-remove-an-entry-from-a-key-table}}\index{krb5\_kt\_remove\_entry (C function)}
7862
7863\begin{fulllineitems}
7864\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_remove_entry:c.krb5_kt_remove_entry}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_remove\_entry}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ id}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{krb5\_keytab\_entry}}} *\sphinxstyleemphasis{ entry}}{}
7865\end{fulllineitems}
7866
7867\begin{quote}\begin{description}
7868\item[{param}] \leavevmode
7869\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7870
7871\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{id} - Key table handle
7872
7873\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{entry} - Entry to remove from key table
7874
7875\end{description}\end{quote}
7876\begin{quote}\begin{description}
7877\item[{retval}] \leavevmode\begin{itemize}
7878\item {}
78790   Success
7880
7881\item {}
7882KRB5\_KT\_NOWRITE   Key table is not writable
7883
7884\end{itemize}
7885
7886\item[{return}] \leavevmode\begin{itemize}
7887\item {}
7888Kerberos error codes
7889
7890\end{itemize}
7891
7892\end{description}\end{quote}
7893
7894
7895\subsubsection{krb5\_kt\_start\_seq\_get -  Start a sequential retrieval of key table entries.}
7896\label{\detokenize{appdev/refs/api/krb5_kt_start_seq_get:krb5-kt-start-seq-get-start-a-sequential-retrieval-of-key-table-entries}}\label{\detokenize{appdev/refs/api/krb5_kt_start_seq_get::doc}}\index{krb5\_kt\_start\_seq\_get (C function)}
7897
7898\begin{fulllineitems}
7899\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_start_seq_get:c.krb5_kt_start_seq_get}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_start\_seq\_get}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_kt_cursor:c.krb5_kt_cursor}]{\sphinxcrossref{krb5\_kt\_cursor}}} *\sphinxstyleemphasis{ cursor}}{}
7900\end{fulllineitems}
7901
7902\begin{quote}\begin{description}
7903\item[{param}] \leavevmode
7904\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7905
7906\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle
7907
7908\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cursor} - Cursor
7909
7910\end{description}\end{quote}
7911\begin{quote}\begin{description}
7912\item[{retval}] \leavevmode\begin{itemize}
7913\item {}
79140   Success
7915
7916\end{itemize}
7917
7918\item[{return}] \leavevmode\begin{itemize}
7919\item {}
7920Kerberos error codes
7921
7922\end{itemize}
7923
7924\end{description}\end{quote}
7925
7926Prepare to read sequentially every key in the specified key table. Use {\hyperref[\detokenize{appdev/refs/api/krb5_kt_end_seq_get:c.krb5_kt_end_seq_get}]{\sphinxcrossref{\sphinxcode{krb5\_kt\_end\_seq\_get()}}}} to release the cursor when it is no longer needed.
7927
7928
7929\subsubsection{krb5\_make\_authdata\_kdc\_issued -  Encode and sign AD-KDCIssued authorization data.}
7930\label{\detokenize{appdev/refs/api/krb5_make_authdata_kdc_issued:krb5-make-authdata-kdc-issued-encode-and-sign-ad-kdcissued-authorization-data}}\label{\detokenize{appdev/refs/api/krb5_make_authdata_kdc_issued::doc}}\index{krb5\_make\_authdata\_kdc\_issued (C function)}
7931
7932\begin{fulllineitems}
7933\phantomsection\label{\detokenize{appdev/refs/api/krb5_make_authdata_kdc_issued:c.krb5_make_authdata_kdc_issued}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_make\_authdata\_kdc\_issued}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ issuer}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} *const *\sphinxstyleemphasis{ authdata}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} ***\sphinxstyleemphasis{ ad\_kdcissued}}{}
7934\end{fulllineitems}
7935
7936\begin{quote}\begin{description}
7937\item[{param}] \leavevmode
7938\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7939
7940\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Session key
7941
7942\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{issuer} - The name of the issuing principal
7943
7944\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authdata} - List of authorization data to be signed
7945
7946\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ad\_kdcissued} - List containing AD-KDCIssued authdata
7947
7948\end{description}\end{quote}
7949
7950This function wraps a list of authorization data entries \sphinxstyleemphasis{authdata} in an AD-KDCIssued container (see RFC 4120 section 5.2.6.2) signed with \sphinxstyleemphasis{key} . The result is returned in \sphinxstyleemphasis{ad\_kdcissued} as a single-element list.
7951
7952
7953\subsubsection{krb5\_merge\_authdata -  Merge two authorization data lists into a new list.}
7954\label{\detokenize{appdev/refs/api/krb5_merge_authdata:krb5-merge-authdata-merge-two-authorization-data-lists-into-a-new-list}}\label{\detokenize{appdev/refs/api/krb5_merge_authdata::doc}}\index{krb5\_merge\_authdata (C function)}
7955
7956\begin{fulllineitems}
7957\phantomsection\label{\detokenize{appdev/refs/api/krb5_merge_authdata:c.krb5_merge_authdata}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_merge\_authdata}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} *const *\sphinxstyleemphasis{ inauthdat1}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} *const *\sphinxstyleemphasis{ inauthdat2}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} ***\sphinxstyleemphasis{ outauthdat}}{}
7958\end{fulllineitems}
7959
7960\begin{quote}\begin{description}
7961\item[{param}] \leavevmode
7962\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7963
7964\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inauthdat1} - First list of \sphinxstyleemphasis{krb5\_authdata} structures
7965
7966\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inauthdat2} - Second list of \sphinxstyleemphasis{krb5\_authdata} structures
7967
7968\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outauthdat} - Merged list of \sphinxstyleemphasis{krb5\_authdata} structures
7969
7970\end{description}\end{quote}
7971\begin{quote}\begin{description}
7972\item[{retval}] \leavevmode\begin{itemize}
7973\item {}
79740   Success; otherwise - Kerberos error codes
7975
7976\end{itemize}
7977
7978\end{description}\end{quote}
7979
7980Merge two authdata arrays, such as the array from a ticket and authenticator. Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_authdata:c.krb5_free_authdata}]{\sphinxcrossref{\sphinxcode{krb5\_free\_authdata()}}}} to free \sphinxstyleemphasis{outauthdat} when it is no longer needed.
7981
7982\begin{sphinxadmonition}{note}{Note:}
7983The last array entry in \sphinxstyleemphasis{inauthdat1} and \sphinxstyleemphasis{inauthdat2} must be a NULL pointer.
7984\end{sphinxadmonition}
7985
7986
7987\subsubsection{krb5\_mk\_1cred -  Format a KRB-CRED message for a single set of credentials.}
7988\label{\detokenize{appdev/refs/api/krb5_mk_1cred:krb5-mk-1cred-format-a-krb-cred-message-for-a-single-set-of-credentials}}\label{\detokenize{appdev/refs/api/krb5_mk_1cred::doc}}\index{krb5\_mk\_1cred (C function)}
7989
7990\begin{fulllineitems}
7991\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_1cred:c.krb5_mk_1cred}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_mk\_1cred}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} **\sphinxstyleemphasis{ der\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{krb5\_replay\_data}}} *\sphinxstyleemphasis{ rdata\_out}}{}
7992\end{fulllineitems}
7993
7994\begin{quote}\begin{description}
7995\item[{param}] \leavevmode
7996\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7997
7998\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
7999
8000\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Pointer to credentials
8001
8002\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{der\_out} - Encoded credentials
8003
8004\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay cache data (NULL if not needed)
8005
8006\end{description}\end{quote}
8007\begin{quote}\begin{description}
8008\item[{retval}] \leavevmode\begin{itemize}
8009\item {}
80100   Success
8011
8012\item {}
8013ENOMEM   Insufficient memory
8014
8015\item {}
8016KRB5\_RC\_REQUIRED   Message replay detection requires rcache parameter
8017
8018\end{itemize}
8019
8020\item[{return}] \leavevmode\begin{itemize}
8021\item {}
8022Kerberos error codes
8023
8024\end{itemize}
8025
8026\end{description}\end{quote}
8027
8028This is a convenience function that calls {\hyperref[\detokenize{appdev/refs/api/krb5_mk_ncred:c.krb5_mk_ncred}]{\sphinxcrossref{\sphinxcode{krb5\_mk\_ncred()}}}} with a single set of credentials.
8029
8030
8031\subsubsection{krb5\_mk\_error -  Format and encode a KRB\_ERROR message.}
8032\label{\detokenize{appdev/refs/api/krb5_mk_error:krb5-mk-error-format-and-encode-a-krb-error-message}}\label{\detokenize{appdev/refs/api/krb5_mk_error::doc}}\index{krb5\_mk\_error (C function)}
8033
8034\begin{fulllineitems}
8035\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_error:c.krb5_mk_error}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_mk\_error}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{krb5\_error}}} *\sphinxstyleemphasis{ dec\_err}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ enc\_err}}{}
8036\end{fulllineitems}
8037
8038\begin{quote}\begin{description}
8039\item[{param}] \leavevmode
8040\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8041
8042\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{dec\_err} - Error structure to be encoded
8043
8044\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{enc\_err} - Encoded error structure
8045
8046\end{description}\end{quote}
8047\begin{quote}\begin{description}
8048\item[{retval}] \leavevmode\begin{itemize}
8049\item {}
80500   Success; otherwise - Kerberos error codes
8051
8052\end{itemize}
8053
8054\end{description}\end{quote}
8055
8056This function creates a \sphinxstylestrong{KRB\_ERROR} message in \sphinxstyleemphasis{enc\_err} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{enc\_err} when it is no longer needed.
8057
8058
8059\subsubsection{krb5\_mk\_ncred -  Format a KRB-CRED message for an array of credentials.}
8060\label{\detokenize{appdev/refs/api/krb5_mk_ncred::doc}}\label{\detokenize{appdev/refs/api/krb5_mk_ncred:krb5-mk-ncred-format-a-krb-cred-message-for-an-array-of-credentials}}\index{krb5\_mk\_ncred (C function)}
8061
8062\begin{fulllineitems}
8063\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_ncred:c.krb5_mk_ncred}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_mk\_ncred}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} **\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} **\sphinxstyleemphasis{ der\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{krb5\_replay\_data}}} *\sphinxstyleemphasis{ rdata\_out}}{}
8064\end{fulllineitems}
8065
8066\begin{quote}\begin{description}
8067\item[{param}] \leavevmode
8068\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8069
8070\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
8071
8072\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Null-terminated array of credentials
8073
8074\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{der\_out} - Encoded credentials
8075
8076\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay cache information (NULL if not needed)
8077
8078\end{description}\end{quote}
8079\begin{quote}\begin{description}
8080\item[{retval}] \leavevmode\begin{itemize}
8081\item {}
80820   Success
8083
8084\item {}
8085ENOMEM   Insufficient memory
8086
8087\item {}
8088KRB5\_RC\_REQUIRED   Message replay detection requires rcache parameter
8089
8090\end{itemize}
8091
8092\item[{return}] \leavevmode\begin{itemize}
8093\item {}
8094Kerberos error codes
8095
8096\end{itemize}
8097
8098\end{description}\end{quote}
8099
8100This function takes an array of credentials \sphinxstyleemphasis{creds} and formats a \sphinxstylestrong{KRB-CRED} message \sphinxstyleemphasis{der\_out} to pass to {\hyperref[\detokenize{appdev/refs/api/krb5_rd_cred:c.krb5_rd_cred}]{\sphinxcrossref{\sphinxcode{krb5\_rd\_cred()}}}} .
8101
8102The local and remote addresses in \sphinxstyleemphasis{auth\_context} are optional; if either is specified, they are used to form the sender and receiver addresses in the KRB-CRED message.
8103
8104If the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} flag is set in \sphinxstyleemphasis{auth\_context} , an entry for the message is entered in an in-memory replay cache to detect if the message is reflected by an attacker. If {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} is not set, no replay cache is used. If {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} is set in \sphinxstyleemphasis{auth\_context} , the timestamp used for the KRB-CRED message is stored in \sphinxstyleemphasis{rdata\_out} .
8105
8106If either {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} is set, the \sphinxstyleemphasis{auth\_context} local sequence number is included in the KRB-CRED message and then incremented. If {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} is set, the sequence number used is stored in \sphinxstyleemphasis{rdata\_out} .
8107
8108Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{der\_out} when it is no longer needed.
8109
8110The message will be encrypted using the send subkey of \sphinxstyleemphasis{auth\_context} if it is present, or the session key otherwise. If neither key is present, the credentials will not be encrypted, and the message should only be sent over a secure channel. No replay cache entry is used in this case.
8111
8112\begin{sphinxadmonition}{note}{Note:}
8113The \sphinxstyleemphasis{rdata\_out} argument is required if the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} flag is set in \sphinxstyleemphasis{auth\_context} .
8114\end{sphinxadmonition}
8115
8116
8117\subsubsection{krb5\_mk\_priv -  Format a KRB-PRIV message.}
8118\label{\detokenize{appdev/refs/api/krb5_mk_priv:krb5-mk-priv-format-a-krb-priv-message}}\label{\detokenize{appdev/refs/api/krb5_mk_priv::doc}}\index{krb5\_mk\_priv (C function)}
8119
8120\begin{fulllineitems}
8121\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_priv:c.krb5_mk_priv}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_mk\_priv}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ userdata}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ der\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{krb5\_replay\_data}}} *\sphinxstyleemphasis{ rdata\_out}}{}
8122\end{fulllineitems}
8123
8124\begin{quote}\begin{description}
8125\item[{param}] \leavevmode
8126\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8127
8128\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
8129
8130\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{userdata} - User data for \sphinxstylestrong{KRB-PRIV} message
8131
8132\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{der\_out} - Formatted \sphinxstylestrong{KRB-PRIV} message
8133
8134\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay data (NULL if not needed)
8135
8136\end{description}\end{quote}
8137\begin{quote}\begin{description}
8138\item[{retval}] \leavevmode\begin{itemize}
8139\item {}
81400   Success; otherwise - Kerberos error codes
8141
8142\end{itemize}
8143
8144\end{description}\end{quote}
8145
8146This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_mk_safe:c.krb5_mk_safe}]{\sphinxcrossref{\sphinxcode{krb5\_mk\_safe()}}}} , but the message is encrypted and integrity-protected, not just integrity-protected.
8147
8148The local address in \sphinxstyleemphasis{auth\_context} must be set, and is used to form the sender address used in the KRB-PRIV message. The remote address is optional; if specified, it will be used to form the receiver address used in the message.
8149
8150If the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} flag is set in \sphinxstyleemphasis{auth\_context} , a timestamp is included in the KRB-PRIV message, and an entry for the message is entered in an in-memory replay cache to detect if the message is reflected by an attacker. If {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} is not set, no replay cache is used. If {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} is set in \sphinxstyleemphasis{auth\_context} , a timestamp is included in the KRB-PRIV message and is stored in \sphinxstyleemphasis{rdata\_out} .
8151
8152If either {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} is set, the \sphinxstyleemphasis{auth\_context} local sequence number is included in the KRB-PRIV message and then incremented. If {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} is set, the sequence number used is stored in \sphinxstyleemphasis{rdata\_out} .
8153
8154Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{der\_out} when it is no longer needed.
8155
8156\begin{sphinxadmonition}{note}{Note:}
8157The \sphinxstyleemphasis{rdata\_out} argument is required if the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} flag is set in \sphinxstyleemphasis{auth\_context} .
8158\end{sphinxadmonition}
8159
8160
8161\subsubsection{krb5\_mk\_rep -  Format and encrypt a KRB\_AP\_REP message.}
8162\label{\detokenize{appdev/refs/api/krb5_mk_rep:krb5-mk-rep-format-and-encrypt-a-krb-ap-rep-message}}\label{\detokenize{appdev/refs/api/krb5_mk_rep::doc}}\index{krb5\_mk\_rep (C function)}
8163
8164\begin{fulllineitems}
8165\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_rep:c.krb5_mk_rep}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_mk\_rep}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ outbuf}}{}
8166\end{fulllineitems}
8167
8168\begin{quote}\begin{description}
8169\item[{param}] \leavevmode
8170\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8171
8172\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
8173
8174\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} - \sphinxstylestrong{AP-REP} message
8175
8176\end{description}\end{quote}
8177\begin{quote}\begin{description}
8178\item[{retval}] \leavevmode\begin{itemize}
8179\item {}
81800   Success; otherwise - Kerberos error codes
8181
8182\end{itemize}
8183
8184\end{description}\end{quote}
8185
8186This function fills in \sphinxstyleemphasis{outbuf} with an AP-REP message using information from \sphinxstyleemphasis{auth\_context} .
8187
8188If the flags in \sphinxstyleemphasis{auth\_context} indicate that a sequence number should be used (either {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} ) and the local sequence number in \sphinxstyleemphasis{auth\_context} is 0, a new number will be generated with krb5\_generate\_seq\_number().
8189
8190Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{outbuf} when it is no longer needed.
8191
8192
8193\subsubsection{krb5\_mk\_rep\_dce -  Format and encrypt a KRB\_AP\_REP message for DCE RPC.}
8194\label{\detokenize{appdev/refs/api/krb5_mk_rep_dce:krb5-mk-rep-dce-format-and-encrypt-a-krb-ap-rep-message-for-dce-rpc}}\label{\detokenize{appdev/refs/api/krb5_mk_rep_dce::doc}}\index{krb5\_mk\_rep\_dce (C function)}
8195
8196\begin{fulllineitems}
8197\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_rep_dce:c.krb5_mk_rep_dce}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_mk\_rep\_dce}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ outbuf}}{}
8198\end{fulllineitems}
8199
8200\begin{quote}\begin{description}
8201\item[{param}] \leavevmode
8202\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8203
8204\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
8205
8206\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} - \sphinxstylestrong{AP-REP} message
8207
8208\end{description}\end{quote}
8209\begin{quote}\begin{description}
8210\item[{retval}] \leavevmode\begin{itemize}
8211\item {}
82120   Success; otherwise - Kerberos error codes
8213
8214\end{itemize}
8215
8216\end{description}\end{quote}
8217
8218Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{outbuf} when it is no longer needed.
8219
8220
8221\subsubsection{krb5\_mk\_req -  Create a KRB\_AP\_REQ message.}
8222\label{\detokenize{appdev/refs/api/krb5_mk_req:krb5-mk-req-create-a-krb-ap-req-message}}\label{\detokenize{appdev/refs/api/krb5_mk_req::doc}}\index{krb5\_mk\_req (C function)}
8223
8224\begin{fulllineitems}
8225\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_req:c.krb5_mk_req}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_mk\_req}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}} *\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ ap\_req\_options}, const char *\sphinxstyleemphasis{ service}, const char *\sphinxstyleemphasis{ hostname}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ in\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ outbuf}}{}
8226\end{fulllineitems}
8227
8228\begin{quote}\begin{description}
8229\item[{param}] \leavevmode
8230\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8231
8232\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} - Pre-existing or newly created auth context
8233
8234\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_options} - \sphinxcode{AP\_OPTS} options
8235
8236\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{service} - Service name, or NULL to use \sphinxstylestrong{“host”}
8237
8238\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{hostname} - Host name, or NULL to use local hostname
8239
8240\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_data} - Application data to be checksummed in the authenticator, or NULL
8241
8242\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache used to obtain credentials for the desired service.
8243
8244\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} - \sphinxstylestrong{AP-REQ} message
8245
8246\end{description}\end{quote}
8247\begin{quote}\begin{description}
8248\item[{retval}] \leavevmode\begin{itemize}
8249\item {}
82500   Success; otherwise - Kerberos error codes
8251
8252\end{itemize}
8253
8254\end{description}\end{quote}
8255
8256This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_mk_req_extended:c.krb5_mk_req_extended}]{\sphinxcrossref{\sphinxcode{krb5\_mk\_req\_extended()}}}} except that it uses a given \sphinxstyleemphasis{hostname} , \sphinxstyleemphasis{service} , and \sphinxstyleemphasis{ccache} to construct a service principal name and obtain credentials.
8257
8258Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{outbuf} when it is no longer needed.
8259
8260
8261\subsubsection{krb5\_mk\_req\_extended -  Create a KRB\_AP\_REQ message using supplied credentials.}
8262\label{\detokenize{appdev/refs/api/krb5_mk_req_extended::doc}}\label{\detokenize{appdev/refs/api/krb5_mk_req_extended:krb5-mk-req-extended-create-a-krb-ap-req-message-using-supplied-credentials}}\index{krb5\_mk\_req\_extended (C function)}
8263
8264\begin{fulllineitems}
8265\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_req_extended:c.krb5_mk_req_extended}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_mk\_req\_extended}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}} *\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ ap\_req\_options}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ in\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ in\_creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ outbuf}}{}
8266\end{fulllineitems}
8267
8268\begin{quote}\begin{description}
8269\item[{param}] \leavevmode
8270\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8271
8272\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} - Pre-existing or newly created auth context
8273
8274\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_options} - \sphinxcode{AP\_OPTS} options
8275
8276\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_data} - Application data to be checksummed in the authenticator, or NULL
8277
8278\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_creds} - Credentials for the service with valid ticket and key
8279
8280\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} - \sphinxstylestrong{AP-REQ} message
8281
8282\end{description}\end{quote}
8283\begin{quote}\begin{description}
8284\item[{retval}] \leavevmode\begin{itemize}
8285\item {}
82860   Success; otherwise - Kerberos error codes
8287
8288\end{itemize}
8289
8290\end{description}\end{quote}
8291
8292Valid \sphinxstyleemphasis{ap\_req\_options} are:
8293\begin{quote}
8294\begin{itemize}
8295\item {}
8296{\hyperref[\detokenize{appdev/refs/macros/AP_OPTS_USE_SESSION_KEY:AP_OPTS_USE_SESSION_KEY}]{\sphinxcrossref{\sphinxcode{AP\_OPTS\_USE\_SESSION\_KEY}}}} - Use the session key when creating the request used for user to user authentication.
8297
8298\item {}
8299{\hyperref[\detokenize{appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED:AP_OPTS_MUTUAL_REQUIRED}]{\sphinxcrossref{\sphinxcode{AP\_OPTS\_MUTUAL\_REQUIRED}}}} - Request a mutual authentication packet from the receiver.
8300
8301\item {}
8302{\hyperref[\detokenize{appdev/refs/macros/AP_OPTS_USE_SUBKEY:AP_OPTS_USE_SUBKEY}]{\sphinxcrossref{\sphinxcode{AP\_OPTS\_USE\_SUBKEY}}}} - Generate a subsession key from the current session key obtained from the credentials.
8303
8304\end{itemize}
8305
8306This function creates a KRB\_AP\_REQ message using supplied credentials \sphinxstyleemphasis{in\_creds} . \sphinxstyleemphasis{auth\_context} may point to an existing auth context or to NULL, in which case a new one will be created. If \sphinxstyleemphasis{in\_data} is non-null, a checksum of it will be included in the authenticator contained in the KRB\_AP\_REQ message. Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{outbuf} when it is no longer needed.
8307\end{quote}
8308
8309On successful return, the authenticator is stored in \sphinxstyleemphasis{auth\_context} with the \sphinxstyleemphasis{client} and \sphinxstyleemphasis{checksum} fields nulled out. (This is to prevent pointer-sharing problems; the caller should not need these fields anyway, since the caller supplied them.)
8310
8311
8312\sphinxstrong{See also:}
8313
8314
8315{\hyperref[\detokenize{appdev/refs/api/krb5_mk_req:c.krb5_mk_req}]{\sphinxcrossref{\sphinxcode{krb5\_mk\_req()}}}}
8316
8317
8318
8319
8320\subsubsection{krb5\_mk\_safe -  Format a KRB-SAFE message.}
8321\label{\detokenize{appdev/refs/api/krb5_mk_safe:krb5-mk-safe-format-a-krb-safe-message}}\label{\detokenize{appdev/refs/api/krb5_mk_safe::doc}}\index{krb5\_mk\_safe (C function)}
8322
8323\begin{fulllineitems}
8324\phantomsection\label{\detokenize{appdev/refs/api/krb5_mk_safe:c.krb5_mk_safe}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_mk\_safe}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ userdata}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ der\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{krb5\_replay\_data}}} *\sphinxstyleemphasis{ rdata\_out}}{}
8325\end{fulllineitems}
8326
8327\begin{quote}\begin{description}
8328\item[{param}] \leavevmode
8329\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8330
8331\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
8332
8333\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{userdata} - User data in the message
8334
8335\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{der\_out} - Formatted \sphinxstylestrong{KRB-SAFE} buffer
8336
8337\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay data. Specify NULL if not needed
8338
8339\end{description}\end{quote}
8340\begin{quote}\begin{description}
8341\item[{retval}] \leavevmode\begin{itemize}
8342\item {}
83430   Success; otherwise - Kerberos error codes
8344
8345\end{itemize}
8346
8347\end{description}\end{quote}
8348
8349This function creates an integrity protected \sphinxstylestrong{KRB-SAFE} message using data supplied by the application.
8350
8351Fields in \sphinxstyleemphasis{auth\_context} specify the checksum type, the keyblock that can be used to seed the checksum, full addresses (host and port) for the sender and receiver, and \sphinxcode{KRB5\_AUTH\_CONTEXT} flags.
8352
8353The local address in \sphinxstyleemphasis{auth\_context} must be set, and is used to form the sender address used in the KRB-SAFE message. The remote address is optional; if specified, it will be used to form the receiver address used in the message.
8354
8355If the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} flag is set in \sphinxstyleemphasis{auth\_context} , a timestamp is included in the KRB-SAFE message, and an entry for the message is entered in an in-memory replay cache to detect if the message is reflected by an attacker. If {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} is not set, no replay cache is used. If {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} is set in \sphinxstyleemphasis{auth\_context} , a timestamp is included in the KRB-SAFE message and is stored in \sphinxstyleemphasis{rdata\_out} .
8356
8357If either {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} is set, the \sphinxstyleemphasis{auth\_context} local sequence number is included in the KRB-SAFE message and then incremented. If {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} is set, the sequence number used is stored in \sphinxstyleemphasis{rdata\_out} .
8358
8359Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{der\_out} when it is no longer needed.
8360
8361\begin{sphinxadmonition}{note}{Note:}
8362The \sphinxstyleemphasis{rdata\_out} argument is required if the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} flag is set in \sphinxstyleemphasis{auth\_context} .
8363\end{sphinxadmonition}
8364
8365
8366\subsubsection{krb5\_os\_localaddr -  Return all interface addresses for this host.}
8367\label{\detokenize{appdev/refs/api/krb5_os_localaddr:krb5-os-localaddr-return-all-interface-addresses-for-this-host}}\label{\detokenize{appdev/refs/api/krb5_os_localaddr::doc}}\index{krb5\_os\_localaddr (C function)}
8368
8369\begin{fulllineitems}
8370\phantomsection\label{\detokenize{appdev/refs/api/krb5_os_localaddr:c.krb5_os_localaddr}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_os\_localaddr}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} ***\sphinxstyleemphasis{ addr}}{}
8371\end{fulllineitems}
8372
8373\begin{quote}\begin{description}
8374\item[{param}] \leavevmode
8375\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8376
8377\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{addr} - Array of krb5\_address pointers, ending with NULL
8378
8379\end{description}\end{quote}
8380\begin{quote}\begin{description}
8381\item[{retval}] \leavevmode\begin{itemize}
8382\item {}
83830   Success; otherwise - Kerberos error codes
8384
8385\end{itemize}
8386
8387\end{description}\end{quote}
8388
8389Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_addresses:c.krb5_free_addresses}]{\sphinxcrossref{\sphinxcode{krb5\_free\_addresses()}}}} to free \sphinxstyleemphasis{addr} when it is no longer needed.
8390
8391
8392\subsubsection{krb5\_pac\_add\_buffer -  Add a buffer to a PAC handle.}
8393\label{\detokenize{appdev/refs/api/krb5_pac_add_buffer:krb5-pac-add-buffer-add-a-buffer-to-a-pac-handle}}\label{\detokenize{appdev/refs/api/krb5_pac_add_buffer::doc}}\index{krb5\_pac\_add\_buffer (C function)}
8394
8395\begin{fulllineitems}
8396\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_add_buffer:c.krb5_pac_add_buffer}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_add\_buffer}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}}\sphinxstyleemphasis{ pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{krb5\_ui\_4}}}\sphinxstyleemphasis{ type}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}}{}
8397\end{fulllineitems}
8398
8399\begin{quote}\begin{description}
8400\item[{param}] \leavevmode
8401\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8402
8403\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle
8404
8405\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - Buffer type
8406
8407\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - contents
8408
8409\end{description}\end{quote}
8410\begin{quote}\begin{description}
8411\item[{retval}] \leavevmode\begin{itemize}
8412\item {}
84130   Success; otherwise - Kerberos error codes
8414
8415\end{itemize}
8416
8417\end{description}\end{quote}
8418
8419This function adds a buffer of type \sphinxstyleemphasis{type} and contents \sphinxstyleemphasis{data} to \sphinxstyleemphasis{pac} if there isn’t already a buffer of this type present.
8420
8421The valid values of \sphinxstyleemphasis{type} is one of the following:
8422\begin{itemize}
8423\item {}
8424{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_LOGON_INFO:KRB5_PAC_LOGON_INFO}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_LOGON\_INFO}}}} - Logon information
8425
8426\item {}
8427{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_CREDENTIALS_INFO:KRB5_PAC_CREDENTIALS_INFO}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_CREDENTIALS\_INFO}}}} - Credentials information
8428
8429\item {}
8430{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM:KRB5_PAC_SERVER_CHECKSUM}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_SERVER\_CHECKSUM}}}} - Server checksum
8431
8432\item {}
8433{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM:KRB5_PAC_PRIVSVR_CHECKSUM}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_PRIVSVR\_CHECKSUM}}}} - KDC checksum
8434
8435\item {}
8436{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_INFO:KRB5_PAC_CLIENT_INFO}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_CLIENT\_INFO}}}} - Client name and ticket information
8437
8438\item {}
8439{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_DELEGATION_INFO:KRB5_PAC_DELEGATION_INFO}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_DELEGATION\_INFO}}}} - Constrained delegation information
8440
8441\item {}
8442{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_UPN_DNS_INFO:KRB5_PAC_UPN_DNS_INFO}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_UPN\_DNS\_INFO}}}} - User principal name and DNS information
8443
8444\end{itemize}
8445
8446
8447\subsubsection{krb5\_pac\_free -  Free a PAC handle.}
8448\label{\detokenize{appdev/refs/api/krb5_pac_free:krb5-pac-free-free-a-pac-handle}}\label{\detokenize{appdev/refs/api/krb5_pac_free::doc}}\index{krb5\_pac\_free (C function)}
8449
8450\begin{fulllineitems}
8451\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_free:c.krb5_pac_free}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_pac\_free}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}}\sphinxstyleemphasis{ pac}}{}
8452\end{fulllineitems}
8453
8454\begin{quote}\begin{description}
8455\item[{param}] \leavevmode
8456\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8457
8458\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC to be freed
8459
8460\end{description}\end{quote}
8461
8462This function frees the contents of \sphinxstyleemphasis{pac} and the structure itself.
8463
8464
8465\subsubsection{krb5\_pac\_get\_buffer -  Retrieve a buffer value from a PAC.}
8466\label{\detokenize{appdev/refs/api/krb5_pac_get_buffer::doc}}\label{\detokenize{appdev/refs/api/krb5_pac_get_buffer:krb5-pac-get-buffer-retrieve-a-buffer-value-from-a-pac}}\index{krb5\_pac\_get\_buffer (C function)}
8467
8468\begin{fulllineitems}
8469\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_get_buffer:c.krb5_pac_get_buffer}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_get\_buffer}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}}\sphinxstyleemphasis{ pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{krb5\_ui\_4}}}\sphinxstyleemphasis{ type}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}}{}
8470\end{fulllineitems}
8471
8472\begin{quote}\begin{description}
8473\item[{param}] \leavevmode
8474\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8475
8476\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle
8477
8478\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - Type of buffer to retrieve
8479
8480\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} - Buffer value
8481
8482\end{description}\end{quote}
8483\begin{quote}\begin{description}
8484\item[{retval}] \leavevmode\begin{itemize}
8485\item {}
84860   Success; otherwise - Kerberos error codes
8487
8488\end{itemize}
8489
8490\end{description}\end{quote}
8491
8492Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{data} when it is no longer needed.
8493
8494
8495\subsubsection{krb5\_pac\_get\_types -  Return an array of buffer types in a PAC handle.}
8496\label{\detokenize{appdev/refs/api/krb5_pac_get_types:krb5-pac-get-types-return-an-array-of-buffer-types-in-a-pac-handle}}\label{\detokenize{appdev/refs/api/krb5_pac_get_types::doc}}\index{krb5\_pac\_get\_types (C function)}
8497
8498\begin{fulllineitems}
8499\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_get_types:c.krb5_pac_get_types}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_get\_types}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}}\sphinxstyleemphasis{ pac}, size\_t *\sphinxstyleemphasis{ len}, {\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{krb5\_ui\_4}}} **\sphinxstyleemphasis{ types}}{}
8500\end{fulllineitems}
8501
8502\begin{quote}\begin{description}
8503\item[{param}] \leavevmode
8504\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8505
8506\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle
8507
8508\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{len} - Number of entries in \sphinxstyleemphasis{types}
8509
8510\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{types} - Array of buffer types
8511
8512\end{description}\end{quote}
8513\begin{quote}\begin{description}
8514\item[{retval}] \leavevmode\begin{itemize}
8515\item {}
85160   Success; otherwise - Kerberos error codes
8517
8518\end{itemize}
8519
8520\end{description}\end{quote}
8521
8522
8523\subsubsection{krb5\_pac\_init -  Create an empty Privilege Attribute Certificate (PAC) handle.}
8524\label{\detokenize{appdev/refs/api/krb5_pac_init:krb5-pac-init-create-an-empty-privilege-attribute-certificate-pac-handle}}\label{\detokenize{appdev/refs/api/krb5_pac_init::doc}}\index{krb5\_pac\_init (C function)}
8525
8526\begin{fulllineitems}
8527\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_init:c.krb5_pac_init}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_init}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}} *\sphinxstyleemphasis{ pac}}{}
8528\end{fulllineitems}
8529
8530\begin{quote}\begin{description}
8531\item[{param}] \leavevmode
8532\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8533
8534\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{pac} - New PAC handle
8535
8536\end{description}\end{quote}
8537\begin{quote}\begin{description}
8538\item[{retval}] \leavevmode\begin{itemize}
8539\item {}
85400   Success; otherwise - Kerberos error codes
8541
8542\end{itemize}
8543
8544\end{description}\end{quote}
8545
8546Use {\hyperref[\detokenize{appdev/refs/api/krb5_pac_free:c.krb5_pac_free}]{\sphinxcrossref{\sphinxcode{krb5\_pac\_free()}}}} to free \sphinxstyleemphasis{pac} when it is no longer needed.
8547
8548
8549\subsubsection{krb5\_pac\_parse -  Unparse an encoded PAC into a new handle.}
8550\label{\detokenize{appdev/refs/api/krb5_pac_parse:krb5-pac-parse-unparse-an-encoded-pac-into-a-new-handle}}\label{\detokenize{appdev/refs/api/krb5_pac_parse::doc}}\index{krb5\_pac\_parse (C function)}
8551
8552\begin{fulllineitems}
8553\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_parse:c.krb5_pac_parse}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_parse}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const void *\sphinxstyleemphasis{ ptr}, size\_t\sphinxstyleemphasis{ len}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}} *\sphinxstyleemphasis{ pac}}{}
8554\end{fulllineitems}
8555
8556\begin{quote}\begin{description}
8557\item[{param}] \leavevmode
8558\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8559
8560\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ptr} - PAC buffer
8561
8562\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{len} - Length of \sphinxstyleemphasis{ptr}
8563
8564\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{pac} - PAC handle
8565
8566\end{description}\end{quote}
8567\begin{quote}\begin{description}
8568\item[{retval}] \leavevmode\begin{itemize}
8569\item {}
85700   Success; otherwise - Kerberos error codes
8571
8572\end{itemize}
8573
8574\end{description}\end{quote}
8575
8576Use {\hyperref[\detokenize{appdev/refs/api/krb5_pac_free:c.krb5_pac_free}]{\sphinxcrossref{\sphinxcode{krb5\_pac\_free()}}}} to free \sphinxstyleemphasis{pac} when it is no longer needed.
8577
8578
8579\subsubsection{krb5\_pac\_sign -  Sign a PAC.}
8580\label{\detokenize{appdev/refs/api/krb5_pac_sign:krb5-pac-sign-sign-a-pac}}\label{\detokenize{appdev/refs/api/krb5_pac_sign::doc}}\index{krb5\_pac\_sign (C function)}
8581
8582\begin{fulllineitems}
8583\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_sign:c.krb5_pac_sign}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_sign}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}}\sphinxstyleemphasis{ pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}\sphinxstyleemphasis{ authtime}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ server\_key}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ privsvr\_key}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}}{}
8584\end{fulllineitems}
8585
8586\begin{quote}\begin{description}
8587\item[{param}] \leavevmode
8588\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8589
8590\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle
8591
8592\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authtime} - Expected timestamp
8593
8594\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Expected principal name (or NULL)
8595
8596\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server\_key} - Key for server checksum
8597
8598\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{privsvr\_key} - Key for KDC checksum
8599
8600\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} - Signed PAC encoding
8601
8602\end{description}\end{quote}
8603
8604This function signs \sphinxstyleemphasis{pac} using the keys \sphinxstyleemphasis{server\_key} and \sphinxstyleemphasis{privsvr\_key} and returns the signed encoding in \sphinxstyleemphasis{data} . \sphinxstyleemphasis{pac} is modified to include the server and KDC checksum buffers. Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{data} when it is no longer needed.
8605
8606\begin{sphinxadmonition}{note}{Note:}
8607New in 1.10
8608\end{sphinxadmonition}
8609
8610
8611\subsubsection{krb5\_pac\_sign\_ext -  Sign a PAC, possibly with a specified realm.}
8612\label{\detokenize{appdev/refs/api/krb5_pac_sign_ext:krb5-pac-sign-ext-sign-a-pac-possibly-with-a-specified-realm}}\label{\detokenize{appdev/refs/api/krb5_pac_sign_ext::doc}}\index{krb5\_pac\_sign\_ext (C function)}
8613
8614\begin{fulllineitems}
8615\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_sign_ext:c.krb5_pac_sign_ext}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_sign\_ext}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}}\sphinxstyleemphasis{ pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}\sphinxstyleemphasis{ authtime}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ server\_key}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ privsvr\_key}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}}\sphinxstyleemphasis{ with\_realm}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}}{}
8616\end{fulllineitems}
8617
8618\begin{quote}\begin{description}
8619\item[{param}] \leavevmode
8620\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8621
8622\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle
8623
8624\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authtime} - Expected timestamp
8625
8626\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal name (or NULL)
8627
8628\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server\_key} - Key for server checksum
8629
8630\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{privsvr\_key} - Key for KDC checksum
8631
8632\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{with\_realm} - If true, include the realm of \sphinxstyleemphasis{principal}
8633
8634\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} - Signed PAC encoding
8635
8636\end{description}\end{quote}
8637
8638This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_pac_sign:c.krb5_pac_sign}]{\sphinxcrossref{\sphinxcode{krb5\_pac\_sign()}}}} , but adds a parameter \sphinxstyleemphasis{with\_realm} . If \sphinxstyleemphasis{with\_realm} is true, the PAC\_CLIENT\_INFO field of the signed PAC will include the realm of \sphinxstyleemphasis{principal} as well as the name. This flag is necessary to generate PACs for cross-realm S4U2Self referrals.
8639
8640\begin{sphinxadmonition}{note}{Note:}
8641New in 1.17
8642\end{sphinxadmonition}
8643
8644
8645\subsubsection{krb5\_pac\_verify -  Verify a PAC.}
8646\label{\detokenize{appdev/refs/api/krb5_pac_verify::doc}}\label{\detokenize{appdev/refs/api/krb5_pac_verify:krb5-pac-verify-verify-a-pac}}\index{krb5\_pac\_verify (C function)}
8647
8648\begin{fulllineitems}
8649\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_verify:c.krb5_pac_verify}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_verify}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}}\sphinxstyleemphasis{ pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}\sphinxstyleemphasis{ authtime}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ server}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ privsvr}}{}
8650\end{fulllineitems}
8651
8652\begin{quote}\begin{description}
8653\item[{param}] \leavevmode
8654\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8655
8656\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle
8657
8658\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authtime} - Expected timestamp
8659
8660\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Expected principal name (or NULL)
8661
8662\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Key to validate server checksum (or NULL)
8663
8664\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{privsvr} - Key to validate KDC checksum (or NULL)
8665
8666\end{description}\end{quote}
8667\begin{quote}\begin{description}
8668\item[{retval}] \leavevmode\begin{itemize}
8669\item {}
86700   Success; otherwise - Kerberos error codes
8671
8672\end{itemize}
8673
8674\end{description}\end{quote}
8675
8676This function validates \sphinxstyleemphasis{pac} against the supplied \sphinxstyleemphasis{server} , \sphinxstyleemphasis{privsvr} , \sphinxstyleemphasis{principal} and \sphinxstyleemphasis{authtime} . If \sphinxstyleemphasis{principal} is NULL, the principal and authtime are not verified. If \sphinxstyleemphasis{server} or \sphinxstyleemphasis{privsvr} is NULL, the corresponding checksum is not verified.
8677
8678If successful, \sphinxstyleemphasis{pac} is marked as verified.
8679
8680\begin{sphinxadmonition}{note}{Note:}
8681A checksum mismatch can occur if the PAC was copied from a cross-realm TGT by an ignorant KDC; also macOS Server Open Directory (as of 10.6) generates PACs with no server checksum at all. One should consider not failing the whole authentication because of this reason, but, instead, treating the ticket as if it did not contain a PAC or marking the PAC information as non-verified.
8682\end{sphinxadmonition}
8683
8684
8685\subsubsection{krb5\_pac\_verify\_ext -  Verify a PAC, possibly from a specified realm.}
8686\label{\detokenize{appdev/refs/api/krb5_pac_verify_ext:krb5-pac-verify-ext-verify-a-pac-possibly-from-a-specified-realm}}\label{\detokenize{appdev/refs/api/krb5_pac_verify_ext::doc}}\index{krb5\_pac\_verify\_ext (C function)}
8687
8688\begin{fulllineitems}
8689\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_verify_ext:c.krb5_pac_verify_ext}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_verify\_ext}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}}\sphinxstyleemphasis{ pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}\sphinxstyleemphasis{ authtime}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ principal}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ server}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ privsvr}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}}\sphinxstyleemphasis{ with\_realm}}{}
8690\end{fulllineitems}
8691
8692\begin{quote}\begin{description}
8693\item[{param}] \leavevmode
8694\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8695
8696\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle
8697
8698\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authtime} - Expected timestamp
8699
8700\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Expected principal name (or NULL)
8701
8702\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Key to validate server checksum (or NULL)
8703
8704\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{privsvr} - Key to validate KDC checksum (or NULL)
8705
8706\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{with\_realm} - If true, expect the realm of \sphinxstyleemphasis{principal}
8707
8708\end{description}\end{quote}
8709
8710This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_pac_verify:c.krb5_pac_verify}]{\sphinxcrossref{\sphinxcode{krb5\_pac\_verify()}}}} , but adds a parameter \sphinxstyleemphasis{with\_realm} . If \sphinxstyleemphasis{with\_realm} is true, the PAC\_CLIENT\_INFO field is expected to include the realm of \sphinxstyleemphasis{principal} as well as the name. This flag is necessary to verify PACs in cross-realm S4U2Self referral TGTs.
8711
8712\begin{sphinxadmonition}{note}{Note:}
8713New in 1.17
8714\end{sphinxadmonition}
8715
8716
8717\subsubsection{krb5\_pac\_get\_client\_info}
8718\label{\detokenize{appdev/refs/api/krb5_pac_get_client_info:krb5-pac-get-client-info}}\label{\detokenize{appdev/refs/api/krb5_pac_get_client_info::doc}}\index{krb5\_pac\_get\_client\_info (C function)}
8719
8720\begin{fulllineitems}
8721\phantomsection\label{\detokenize{appdev/refs/api/krb5_pac_get_client_info:c.krb5_pac_get_client_info}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_pac\_get\_client\_info}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}]{\sphinxcrossref{krb5\_pac}}}\sphinxstyleemphasis{ pac}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} *\sphinxstyleemphasis{ authtime\_out}, char **\sphinxstyleemphasis{ princname\_out}}{}
8722\end{fulllineitems}
8723
8724\begin{quote}\begin{description}
8725\item[{param}] \leavevmode
8726\sphinxstylestrong{context}
8727
8728\sphinxstylestrong{pac}
8729
8730\sphinxstylestrong{authtime\_out}
8731
8732\sphinxstylestrong{princname\_out}
8733
8734\end{description}\end{quote}
8735
8736
8737\subsubsection{krb5\_prepend\_error\_message -  Add a prefix to the message for an error code.}
8738\label{\detokenize{appdev/refs/api/krb5_prepend_error_message:krb5-prepend-error-message-add-a-prefix-to-the-message-for-an-error-code}}\label{\detokenize{appdev/refs/api/krb5_prepend_error_message::doc}}\index{krb5\_prepend\_error\_message (C function)}
8739
8740\begin{fulllineitems}
8741\phantomsection\label{\detokenize{appdev/refs/api/krb5_prepend_error_message:c.krb5_prepend_error_message}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_prepend\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}}\sphinxstyleemphasis{ code}, const char *\sphinxstyleemphasis{ fmt}, ...}{}
8742\end{fulllineitems}
8743
8744\begin{quote}\begin{description}
8745\item[{param}] \leavevmode
8746\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
8747
8748\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code
8749
8750\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} - Format string for error message prefix
8751
8752\end{description}\end{quote}
8753
8754Format a message and prepend it to the current message for \sphinxstyleemphasis{code} . The prefix will be separated from the old message with a colon and space.
8755
8756
8757\subsubsection{krb5\_principal2salt -  Convert a principal name into the default salt for that principal.}
8758\label{\detokenize{appdev/refs/api/krb5_principal2salt:krb5-principal2salt-convert-a-principal-name-into-the-default-salt-for-that-principal}}\label{\detokenize{appdev/refs/api/krb5_principal2salt::doc}}\index{krb5\_principal2salt (C function)}
8759
8760\begin{fulllineitems}
8761\phantomsection\label{\detokenize{appdev/refs/api/krb5_principal2salt:c.krb5_principal2salt}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_principal2salt}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ pr}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ ret}}{}
8762\end{fulllineitems}
8763
8764\begin{quote}\begin{description}
8765\item[{param}] \leavevmode
8766\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8767
8768\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pr} - Principal name
8769
8770\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ret} - Default salt for \sphinxstyleemphasis{pr} to be filled in
8771
8772\end{description}\end{quote}
8773\begin{quote}\begin{description}
8774\item[{retval}] \leavevmode\begin{itemize}
8775\item {}
87760   Success; otherwise - Kerberos error codes
8777
8778\end{itemize}
8779
8780\end{description}\end{quote}
8781
8782
8783\subsubsection{krb5\_rd\_cred -  Read and validate a KRB-CRED message.}
8784\label{\detokenize{appdev/refs/api/krb5_rd_cred:krb5-rd-cred-read-and-validate-a-krb-cred-message}}\label{\detokenize{appdev/refs/api/krb5_rd_cred::doc}}\index{krb5\_rd\_cred (C function)}
8785
8786\begin{fulllineitems}
8787\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_cred:c.krb5_rd_cred}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_rd\_cred}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ creddata}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} ***\sphinxstyleemphasis{ creds\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{krb5\_replay\_data}}} *\sphinxstyleemphasis{ rdata\_out}}{}
8788\end{fulllineitems}
8789
8790\begin{quote}\begin{description}
8791\item[{param}] \leavevmode
8792\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8793
8794\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
8795
8796\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creddata} - \sphinxstylestrong{KRB-CRED} message
8797
8798\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds\_out} - Null-terminated array of forwarded credentials
8799
8800\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay data (NULL if not needed)
8801
8802\end{description}\end{quote}
8803\begin{quote}\begin{description}
8804\item[{retval}] \leavevmode\begin{itemize}
8805\item {}
88060   Success; otherwise - Kerberos error codes
8807
8808\end{itemize}
8809
8810\end{description}\end{quote}
8811\begin{quote}
8812
8813\sphinxstyleemphasis{creddata} will be decrypted using the receiving subkey if it is present in \sphinxstyleemphasis{auth\_context} , or the session key if the receiving subkey is not present or fails to decrypt the message.
8814\end{quote}
8815
8816Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_tgt_creds:c.krb5_free_tgt_creds}]{\sphinxcrossref{\sphinxcode{krb5\_free\_tgt\_creds()}}}} to free \sphinxstyleemphasis{creds\_out} when it is no longer needed.
8817
8818\begin{sphinxadmonition}{note}{Note:}
8819The \sphinxstyleemphasis{rdata\_out} argument is required if the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} flag is set in \sphinxstyleemphasis{auth\_context} .{}`
8820\end{sphinxadmonition}
8821
8822
8823\subsubsection{krb5\_rd\_error -  Decode a KRB-ERROR message.}
8824\label{\detokenize{appdev/refs/api/krb5_rd_error:krb5-rd-error-decode-a-krb-error-message}}\label{\detokenize{appdev/refs/api/krb5_rd_error::doc}}\index{krb5\_rd\_error (C function)}
8825
8826\begin{fulllineitems}
8827\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_error:c.krb5_rd_error}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_rd\_error}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ enc\_errbuf}, {\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{krb5\_error}}} **\sphinxstyleemphasis{ dec\_error}}{}
8828\end{fulllineitems}
8829
8830\begin{quote}\begin{description}
8831\item[{param}] \leavevmode
8832\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8833
8834\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enc\_errbuf} - Encoded error message
8835
8836\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{dec\_error} - Decoded error message
8837
8838\end{description}\end{quote}
8839\begin{quote}\begin{description}
8840\item[{retval}] \leavevmode\begin{itemize}
8841\item {}
88420   Success; otherwise - Kerberos error codes
8843
8844\end{itemize}
8845
8846\end{description}\end{quote}
8847
8848This function processes \sphinxstylestrong{KRB-ERROR} message \sphinxstyleemphasis{enc\_errbuf} and returns an allocated structure \sphinxstyleemphasis{dec\_error} containing the error message. Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_error:c.krb5_free_error}]{\sphinxcrossref{\sphinxcode{krb5\_free\_error()}}}} to free \sphinxstyleemphasis{dec\_error} when it is no longer needed.
8849
8850
8851\subsubsection{krb5\_rd\_priv -  Process a KRB-PRIV message.}
8852\label{\detokenize{appdev/refs/api/krb5_rd_priv:krb5-rd-priv-process-a-krb-priv-message}}\label{\detokenize{appdev/refs/api/krb5_rd_priv::doc}}\index{krb5\_rd\_priv (C function)}
8853
8854\begin{fulllineitems}
8855\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_priv:c.krb5_rd_priv}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_rd\_priv}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ inbuf}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ userdata\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{krb5\_replay\_data}}} *\sphinxstyleemphasis{ rdata\_out}}{}
8856\end{fulllineitems}
8857
8858\begin{quote}\begin{description}
8859\item[{param}] \leavevmode
8860\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8861
8862\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication structure
8863
8864\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} - \sphinxstylestrong{KRB-PRIV} message to be parsed
8865
8866\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{userdata\_out} - Data parsed from \sphinxstylestrong{KRB-PRIV} message
8867
8868\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay data. Specify NULL if not needed
8869
8870\end{description}\end{quote}
8871\begin{quote}\begin{description}
8872\item[{retval}] \leavevmode\begin{itemize}
8873\item {}
88740   Success; otherwise - Kerberos error codes
8875
8876\end{itemize}
8877
8878\end{description}\end{quote}
8879
8880This function parses a \sphinxstylestrong{KRB-PRIV} message, verifies its integrity, and stores its unencrypted data into \sphinxstyleemphasis{userdata\_out} .
8881
8882If \sphinxstyleemphasis{auth\_context} has a remote address set, the address will be used to verify the sender address in the KRB-PRIV message. If \sphinxstyleemphasis{auth\_context} has a local address set, it will be used to verify the receiver address in the KRB-PRIV message if the message contains one.
8883
8884If the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} flag is set in \sphinxstyleemphasis{auth\_context} , the sequence number of the KRB-PRIV message is checked against the remote sequence number field of \sphinxstyleemphasis{auth\_context} . Otherwise, the sequence number is not used.
8885
8886If the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} flag is set in \sphinxstyleemphasis{auth\_context} , then the timestamp in the message is verified to be within the permitted clock skew of the current time, and the message is checked against an in-memory replay cache to detect reflections or replays.
8887
8888Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{userdata\_out} when it is no longer needed.
8889
8890\begin{sphinxadmonition}{note}{Note:}
8891The \sphinxstyleemphasis{rdata\_out} argument is required if the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} flag is set in \sphinxstyleemphasis{auth\_context} .
8892\end{sphinxadmonition}
8893
8894
8895\subsubsection{krb5\_rd\_rep -  Parse and decrypt a KRB\_AP\_REP message.}
8896\label{\detokenize{appdev/refs/api/krb5_rd_rep::doc}}\label{\detokenize{appdev/refs/api/krb5_rd_rep:krb5-rd-rep-parse-and-decrypt-a-krb-ap-rep-message}}\index{krb5\_rd\_rep (C function)}
8897
8898\begin{fulllineitems}
8899\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_rep:c.krb5_rd_rep}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_rd\_rep}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ inbuf}, {\hyperref[\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part}]{\sphinxcrossref{krb5\_ap\_rep\_enc\_part}}} **\sphinxstyleemphasis{ repl}}{}
8900\end{fulllineitems}
8901
8902\begin{quote}\begin{description}
8903\item[{param}] \leavevmode
8904\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8905
8906\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
8907
8908\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} - AP-REP message
8909
8910\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{repl} - Decrypted reply message
8911
8912\end{description}\end{quote}
8913\begin{quote}\begin{description}
8914\item[{retval}] \leavevmode\begin{itemize}
8915\item {}
89160   Success; otherwise - Kerberos error codes
8917
8918\end{itemize}
8919
8920\end{description}\end{quote}
8921
8922This function parses, decrypts and verifies a message from \sphinxstyleemphasis{inbuf} and fills in \sphinxstyleemphasis{repl} with a pointer to allocated memory containing the fields from the encrypted response.
8923
8924Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_ap_rep_enc_part:c.krb5_free_ap_rep_enc_part}]{\sphinxcrossref{\sphinxcode{krb5\_free\_ap\_rep\_enc\_part()}}}} to free \sphinxstyleemphasis{repl} when it is no longer needed.
8925
8926
8927\subsubsection{krb5\_rd\_rep\_dce -  Parse and decrypt a KRB\_AP\_REP message for DCE RPC.}
8928\label{\detokenize{appdev/refs/api/krb5_rd_rep_dce::doc}}\label{\detokenize{appdev/refs/api/krb5_rd_rep_dce:krb5-rd-rep-dce-parse-and-decrypt-a-krb-ap-rep-message-for-dce-rpc}}\index{krb5\_rd\_rep\_dce (C function)}
8929
8930\begin{fulllineitems}
8931\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_rep_dce:c.krb5_rd_rep_dce}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_rd\_rep\_dce}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ inbuf}, {\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{krb5\_ui\_4}}} *\sphinxstyleemphasis{ nonce}}{}
8932\end{fulllineitems}
8933
8934\begin{quote}\begin{description}
8935\item[{param}] \leavevmode
8936\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8937
8938\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
8939
8940\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} - AP-REP message
8941
8942\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{nonce} - Sequence number from the decrypted reply
8943
8944\end{description}\end{quote}
8945\begin{quote}\begin{description}
8946\item[{retval}] \leavevmode\begin{itemize}
8947\item {}
89480   Success; otherwise - Kerberos error codes
8949
8950\end{itemize}
8951
8952\end{description}\end{quote}
8953
8954This function parses, decrypts and verifies a message from \sphinxstyleemphasis{inbuf} and fills in \sphinxstyleemphasis{nonce} with a decrypted reply sequence number.
8955
8956
8957\subsubsection{krb5\_rd\_req -  Parse and decrypt a KRB\_AP\_REQ message.}
8958\label{\detokenize{appdev/refs/api/krb5_rd_req::doc}}\label{\detokenize{appdev/refs/api/krb5_rd_req:krb5-rd-req-parse-and-decrypt-a-krb-ap-req-message}}\index{krb5\_rd\_req (C function)}
8959
8960\begin{fulllineitems}
8961\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_req:c.krb5_rd_req}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_rd\_req}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}} *\sphinxstyleemphasis{ auth\_context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ inbuf}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}]{\sphinxcrossref{krb5\_const\_principal}}}\sphinxstyleemphasis{ server}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}} *\sphinxstyleemphasis{ ap\_req\_options}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} **\sphinxstyleemphasis{ ticket}}{}
8962\end{fulllineitems}
8963
8964\begin{quote}\begin{description}
8965\item[{param}] \leavevmode
8966\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8967
8968\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} - Pre-existing or newly created auth context
8969
8970\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} - AP-REQ message to be parsed
8971
8972\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Matching principal for server, or NULL to allow any principal in keytab
8973
8974\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table, or NULL to use the default
8975
8976\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ap\_req\_options} - If non-null, the AP-REQ flags on output
8977
8978\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ticket} - If non-null, ticket from the AP-REQ message
8979
8980\end{description}\end{quote}
8981\begin{quote}\begin{description}
8982\item[{retval}] \leavevmode\begin{itemize}
8983\item {}
89840   Success; otherwise - Kerberos error codes
8985
8986\end{itemize}
8987
8988\end{description}\end{quote}
8989
8990This function parses, decrypts and verifies a AP-REQ message from \sphinxstyleemphasis{inbuf} and stores the authenticator in \sphinxstyleemphasis{auth\_context} .
8991
8992If a keyblock was specified in \sphinxstyleemphasis{auth\_context} using {\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setuseruserkey:c.krb5_auth_con_setuseruserkey}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_setuseruserkey()}}}} , that key is used to decrypt the ticket in AP-REQ message and \sphinxstyleemphasis{keytab} is ignored. In this case, \sphinxstyleemphasis{server} should be specified as a complete principal name to allow for proper transited-path checking and replay cache selection.
8993
8994Otherwise, the decryption key is obtained from \sphinxstyleemphasis{keytab} , or from the default keytab if it is NULL. In this case, \sphinxstyleemphasis{server} may be a complete principal name, a matching principal (see {\hyperref[\detokenize{appdev/refs/api/krb5_sname_match:c.krb5_sname_match}]{\sphinxcrossref{\sphinxcode{krb5\_sname\_match()}}}} ), or NULL to match any principal name. The keys tried against the encrypted part of the ticket are determined as follows:
8995\begin{itemize}
8996\item {}
8997If \sphinxstyleemphasis{server} is a complete principal name, then its entry in \sphinxstyleemphasis{keytab} is tried.
8998
8999\item {}
9000Otherwise, if \sphinxstyleemphasis{keytab} is iterable, then all entries in \sphinxstyleemphasis{keytab} which match \sphinxstyleemphasis{server} are tried.
9001
9002\item {}
9003Otherwise, the server principal in the ticket must match \sphinxstyleemphasis{server} , and its entry in \sphinxstyleemphasis{keytab} is tried.
9004
9005\end{itemize}
9006
9007The client specified in the decrypted authenticator must match the client specified in the decrypted ticket.
9008
9009If the \sphinxstyleemphasis{remote\_addr} field of \sphinxstyleemphasis{auth\_context} is set, the request must come from that address.
9010
9011If a replay cache handle is provided in the \sphinxstyleemphasis{auth\_context} , the authenticator and ticket are verified against it. If no conflict is found, the new authenticator is then stored in the replay cache of \sphinxstyleemphasis{auth\_context} .
9012
9013Various other checks are performed on the decoded data, including cross-realm policy, clockskew, and ticket validation times.
9014
9015On success the authenticator, subkey, and remote sequence number of the request are stored in \sphinxstyleemphasis{auth\_context} . If the {\hyperref[\detokenize{appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED:AP_OPTS_MUTUAL_REQUIRED}]{\sphinxcrossref{\sphinxcode{AP\_OPTS\_MUTUAL\_REQUIRED}}}} bit is set, the local sequence number is XORed with the remote sequence number in the request.
9016
9017Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_ticket:c.krb5_free_ticket}]{\sphinxcrossref{\sphinxcode{krb5\_free\_ticket()}}}} to free \sphinxstyleemphasis{ticket} when it is no longer needed.
9018
9019
9020\subsubsection{krb5\_rd\_safe -  Process KRB-SAFE message.}
9021\label{\detokenize{appdev/refs/api/krb5_rd_safe:krb5-rd-safe-process-krb-safe-message}}\label{\detokenize{appdev/refs/api/krb5_rd_safe::doc}}\index{krb5\_rd\_safe (C function)}
9022
9023\begin{fulllineitems}
9024\phantomsection\label{\detokenize{appdev/refs/api/krb5_rd_safe:c.krb5_rd_safe}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_rd\_safe}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ inbuf}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ userdata\_out}, {\hyperref[\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}]{\sphinxcrossref{krb5\_replay\_data}}} *\sphinxstyleemphasis{ rdata\_out}}{}
9025\end{fulllineitems}
9026
9027\begin{quote}\begin{description}
9028\item[{param}] \leavevmode
9029\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9030
9031\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
9032
9033\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} - \sphinxstylestrong{KRB-SAFE} message to be parsed
9034
9035\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{userdata\_out} - Data parsed from \sphinxstylestrong{KRB-SAFE} message
9036
9037\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay data. Specify NULL if not needed
9038
9039\end{description}\end{quote}
9040\begin{quote}\begin{description}
9041\item[{retval}] \leavevmode\begin{itemize}
9042\item {}
90430   Success; otherwise - Kerberos error codes
9044
9045\end{itemize}
9046
9047\end{description}\end{quote}
9048
9049This function parses a \sphinxstylestrong{KRB-SAFE} message, verifies its integrity, and stores its data into \sphinxstyleemphasis{userdata\_out} .
9050
9051If \sphinxstyleemphasis{auth\_context} has a remote address set, the address will be used to verify the sender address in the KRB-SAFE message. If \sphinxstyleemphasis{auth\_context} has a local address set, it will be used to verify the receiver address in the KRB-SAFE message if the message contains one.
9052
9053If the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}}} flag is set in \sphinxstyleemphasis{auth\_context} , the sequence number of the KRB-SAFE message is checked against the remote sequence number field of \sphinxstyleemphasis{auth\_context} . Otherwise, the sequence number is not used.
9054
9055If the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} flag is set in \sphinxstyleemphasis{auth\_context} , then the timestamp in the message is verified to be within the permitted clock skew of the current time, and the message is checked against an in-memory replay cache to detect reflections or replays.
9056
9057Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_data_contents:c.krb5_free_data_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_data\_contents()}}}} to free \sphinxstyleemphasis{userdata\_out} when it is no longer needed.
9058
9059\begin{sphinxadmonition}{note}{Note:}
9060The \sphinxstyleemphasis{rdata\_out} argument is required if the {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} or {\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}}} flag is set in \sphinxstyleemphasis{auth\_context} .
9061\end{sphinxadmonition}
9062
9063
9064\subsubsection{krb5\_read\_password -  Read a password from keyboard input.}
9065\label{\detokenize{appdev/refs/api/krb5_read_password:krb5-read-password-read-a-password-from-keyboard-input}}\label{\detokenize{appdev/refs/api/krb5_read_password::doc}}\index{krb5\_read\_password (C function)}
9066
9067\begin{fulllineitems}
9068\phantomsection\label{\detokenize{appdev/refs/api/krb5_read_password:c.krb5_read_password}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_read\_password}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const char *\sphinxstyleemphasis{ prompt}, const char *\sphinxstyleemphasis{ prompt2}, char *\sphinxstyleemphasis{ return\_pwd}, unsigned int *\sphinxstyleemphasis{ size\_return}}{}
9069\end{fulllineitems}
9070
9071\begin{quote}\begin{description}
9072\item[{param}] \leavevmode
9073\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9074
9075\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompt} - First user prompt when reading password
9076
9077\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompt2} - Second user prompt (NULL to prompt only once)
9078
9079\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{return\_pwd} - Returned password
9080
9081\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{size\_return} - On input, maximum size of password; on output, size of password read
9082
9083\end{description}\end{quote}
9084\begin{quote}\begin{description}
9085\item[{retval}] \leavevmode\begin{itemize}
9086\item {}
90870   Success
9088
9089\end{itemize}
9090
9091\item[{return}] \leavevmode\begin{itemize}
9092\item {}
9093Error in reading or verifying the password
9094
9095\item {}
9096Kerberos error codes
9097
9098\end{itemize}
9099
9100\end{description}\end{quote}
9101
9102This function reads a password from keyboard input and stores it in \sphinxstyleemphasis{return\_pwd} . \sphinxstyleemphasis{size\_return} should be set by the caller to the amount of storage space available in \sphinxstyleemphasis{return\_pwd} ; on successful return, it will be set to the length of the password read.
9103\begin{quote}
9104
9105\sphinxstyleemphasis{prompt} is printed to the terminal, followed by”:”, and then a password is read from the keyboard.
9106\end{quote}
9107
9108If \sphinxstyleemphasis{prompt2} is NULL, the password is read only once. Otherwise, \sphinxstyleemphasis{prompt2} is printed to the terminal and a second password is read. If the two passwords entered are not identical, KRB5\_LIBOS\_BADPWDMATCH is returned.
9109
9110Echoing is turned off when the password is read.
9111
9112
9113\subsubsection{krb5\_salttype\_to\_string -  Convert a salt type to a string.}
9114\label{\detokenize{appdev/refs/api/krb5_salttype_to_string::doc}}\label{\detokenize{appdev/refs/api/krb5_salttype_to_string:krb5-salttype-to-string-convert-a-salt-type-to-a-string}}\index{krb5\_salttype\_to\_string (C function)}
9115
9116\begin{fulllineitems}
9117\phantomsection\label{\detokenize{appdev/refs/api/krb5_salttype_to_string:c.krb5_salttype_to_string}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_salttype\_to\_string}}{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}\sphinxstyleemphasis{ salttype}, char *\sphinxstyleemphasis{ buffer}, size\_t\sphinxstyleemphasis{ buflen}}{}
9118\end{fulllineitems}
9119
9120\begin{quote}\begin{description}
9121\item[{param}] \leavevmode
9122\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{salttype} - Salttype to convert
9123
9124\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to receive the converted string
9125
9126\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Storage available in \sphinxstyleemphasis{buffer}
9127
9128\end{description}\end{quote}
9129\begin{quote}\begin{description}
9130\item[{retval}] \leavevmode\begin{itemize}
9131\item {}
91320   Success; otherwise - Kerberos error codes
9133
9134\end{itemize}
9135
9136\end{description}\end{quote}
9137
9138
9139\subsubsection{krb5\_server\_decrypt\_ticket\_keytab -  Decrypt a ticket using the specified key table.}
9140\label{\detokenize{appdev/refs/api/krb5_server_decrypt_ticket_keytab:krb5-server-decrypt-ticket-keytab-decrypt-a-ticket-using-the-specified-key-table}}\label{\detokenize{appdev/refs/api/krb5_server_decrypt_ticket_keytab::doc}}\index{krb5\_server\_decrypt\_ticket\_keytab (C function)}
9141
9142\begin{fulllineitems}
9143\phantomsection\label{\detokenize{appdev/refs/api/krb5_server_decrypt_ticket_keytab:c.krb5_server_decrypt_ticket_keytab}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_server\_decrypt\_ticket\_keytab}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ kt}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} *\sphinxstyleemphasis{ ticket}}{}
9144\end{fulllineitems}
9145
9146\begin{quote}\begin{description}
9147\item[{param}] \leavevmode
9148\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9149
9150\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{kt} - Key table
9151
9152\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ticket} - Ticket to be decrypted
9153
9154\end{description}\end{quote}
9155\begin{quote}\begin{description}
9156\item[{retval}] \leavevmode\begin{itemize}
9157\item {}
91580   Success; otherwise - Kerberos error codes
9159
9160\end{itemize}
9161
9162\end{description}\end{quote}
9163
9164This function takes a \sphinxstyleemphasis{ticket} as input and decrypts it using key data from \sphinxstyleemphasis{kt} . The result is placed into \sphinxstyleemphasis{ticket-\textgreater{}enc\_part2} .
9165
9166
9167\subsubsection{krb5\_set\_default\_tgs\_enctypes -  Set default TGS encryption types in a krb5\_context structure.}
9168\label{\detokenize{appdev/refs/api/krb5_set_default_tgs_enctypes::doc}}\label{\detokenize{appdev/refs/api/krb5_set_default_tgs_enctypes:krb5-set-default-tgs-enctypes-set-default-tgs-encryption-types-in-a-krb5-context-structure}}\index{krb5\_set\_default\_tgs\_enctypes (C function)}
9169
9170\begin{fulllineitems}
9171\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_default_tgs_enctypes:c.krb5_set_default_tgs_enctypes}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_set\_default\_tgs\_enctypes}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} *\sphinxstyleemphasis{ etypes}}{}
9172\end{fulllineitems}
9173
9174\begin{quote}\begin{description}
9175\item[{param}] \leavevmode
9176\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9177
9178\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{etypes} - Encryption type(s) to set
9179
9180\end{description}\end{quote}
9181\begin{quote}\begin{description}
9182\item[{retval}] \leavevmode\begin{itemize}
9183\item {}
91840   Success
9185
9186\item {}
9187KRB5\_PROG\_ETYPE\_NOSUPP   Program lacks support for encryption type
9188
9189\end{itemize}
9190
9191\item[{return}] \leavevmode\begin{itemize}
9192\item {}
9193Kerberos error codes
9194
9195\end{itemize}
9196
9197\end{description}\end{quote}
9198
9199This function sets the default enctype list for TGS requests made using \sphinxstyleemphasis{context} to \sphinxstyleemphasis{etypes} .
9200
9201\begin{sphinxadmonition}{note}{Note:}
9202This overrides the default list (from config file or built-in).
9203\end{sphinxadmonition}
9204
9205
9206\subsubsection{krb5\_set\_error\_message -  Set an extended error message for an error code.}
9207\label{\detokenize{appdev/refs/api/krb5_set_error_message::doc}}\label{\detokenize{appdev/refs/api/krb5_set_error_message:krb5-set-error-message-set-an-extended-error-message-for-an-error-code}}\index{krb5\_set\_error\_message (C function)}
9208
9209\begin{fulllineitems}
9210\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_error_message:c.krb5_set_error_message}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_set\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}}\sphinxstyleemphasis{ code}, const char *\sphinxstyleemphasis{ fmt}, ...}{}
9211\end{fulllineitems}
9212
9213\begin{quote}\begin{description}
9214\item[{param}] \leavevmode
9215\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
9216
9217\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code
9218
9219\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} - Error string for the error code
9220
9221\end{description}\end{quote}
9222
9223
9224\subsubsection{krb5\_set\_kdc\_recv\_hook -  Set a KDC post-receive hook function.}
9225\label{\detokenize{appdev/refs/api/krb5_set_kdc_recv_hook::doc}}\label{\detokenize{appdev/refs/api/krb5_set_kdc_recv_hook:krb5-set-kdc-recv-hook-set-a-kdc-post-receive-hook-function}}\index{krb5\_set\_kdc\_recv\_hook (C function)}
9226
9227\begin{fulllineitems}
9228\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_kdc_recv_hook:c.krb5_set_kdc_recv_hook}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_set\_kdc\_recv\_hook}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_post_recv_fn:c.krb5_post_recv_fn}]{\sphinxcrossref{krb5\_post\_recv\_fn}}}\sphinxstyleemphasis{ recv\_hook}, void *\sphinxstyleemphasis{ data}}{}
9229\end{fulllineitems}
9230
9231\begin{quote}\begin{description}
9232\item[{param}] \leavevmode
9233\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - The library context.
9234
9235\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{recv\_hook} - Hook function (or NULL to disable the hook)
9236
9237\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Callback data to be passed to \sphinxstyleemphasis{recv\_hook}
9238
9239\end{description}\end{quote}
9240\begin{quote}
9241
9242\sphinxstyleemphasis{recv\_hook} will be called after a reply is received from a KDC during a call to a library function such as {\hyperref[\detokenize{appdev/refs/api/krb5_get_credentials:c.krb5_get_credentials}]{\sphinxcrossref{\sphinxcode{krb5\_get\_credentials()}}}} . The hook function may inspect or override the reply. This hook will not be executed if the pre-send hook returns a synthetic reply.
9243\end{quote}
9244
9245\begin{sphinxadmonition}{note}{Note:}
9246New in 1.15
9247\end{sphinxadmonition}
9248
9249
9250\subsubsection{krb5\_set\_kdc\_send\_hook -  Set a KDC pre-send hook function.}
9251\label{\detokenize{appdev/refs/api/krb5_set_kdc_send_hook:krb5-set-kdc-send-hook-set-a-kdc-pre-send-hook-function}}\label{\detokenize{appdev/refs/api/krb5_set_kdc_send_hook::doc}}\index{krb5\_set\_kdc\_send\_hook (C function)}
9252
9253\begin{fulllineitems}
9254\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_kdc_send_hook:c.krb5_set_kdc_send_hook}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_set\_kdc\_send\_hook}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pre_send_fn:c.krb5_pre_send_fn}]{\sphinxcrossref{krb5\_pre\_send\_fn}}}\sphinxstyleemphasis{ send\_hook}, void *\sphinxstyleemphasis{ data}}{}
9255\end{fulllineitems}
9256
9257\begin{quote}\begin{description}
9258\item[{param}] \leavevmode
9259\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9260
9261\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{send\_hook} - Hook function (or NULL to disable the hook)
9262
9263\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Callback data to be passed to \sphinxstyleemphasis{send\_hook}
9264
9265\end{description}\end{quote}
9266\begin{quote}
9267
9268\sphinxstyleemphasis{send\_hook} will be called before messages are sent to KDCs by library functions such as {\hyperref[\detokenize{appdev/refs/api/krb5_get_credentials:c.krb5_get_credentials}]{\sphinxcrossref{\sphinxcode{krb5\_get\_credentials()}}}} . The hook function may inspect, override, or synthesize its own reply to the message.
9269\end{quote}
9270
9271\begin{sphinxadmonition}{note}{Note:}
9272New in 1.15
9273\end{sphinxadmonition}
9274
9275
9276\subsubsection{krb5\_set\_real\_time -  Set time offset field in a krb5\_context structure.}
9277\label{\detokenize{appdev/refs/api/krb5_set_real_time::doc}}\label{\detokenize{appdev/refs/api/krb5_set_real_time:krb5-set-real-time-set-time-offset-field-in-a-krb5-context-structure}}\index{krb5\_set\_real\_time (C function)}
9278
9279\begin{fulllineitems}
9280\phantomsection\label{\detokenize{appdev/refs/api/krb5_set_real_time:c.krb5_set_real_time}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_set\_real\_time}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}\sphinxstyleemphasis{ seconds}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}\sphinxstyleemphasis{ microseconds}}{}
9281\end{fulllineitems}
9282
9283\begin{quote}\begin{description}
9284\item[{param}] \leavevmode
9285\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9286
9287\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{seconds} - Real time, seconds portion
9288
9289\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{microseconds} - Real time, microseconds portion
9290
9291\end{description}\end{quote}
9292\begin{quote}\begin{description}
9293\item[{retval}] \leavevmode\begin{itemize}
9294\item {}
92950   Success; otherwise - Kerberos error codes
9296
9297\end{itemize}
9298
9299\end{description}\end{quote}
9300
9301This function sets the time offset in \sphinxstyleemphasis{context} to the difference between the system time and the real time as determined by \sphinxstyleemphasis{seconds} and \sphinxstyleemphasis{microseconds} .
9302
9303
9304\subsubsection{krb5\_string\_to\_cksumtype -  Convert a string to a checksum type.}
9305\label{\detokenize{appdev/refs/api/krb5_string_to_cksumtype:krb5-string-to-cksumtype-convert-a-string-to-a-checksum-type}}\label{\detokenize{appdev/refs/api/krb5_string_to_cksumtype::doc}}\index{krb5\_string\_to\_cksumtype (C function)}
9306
9307\begin{fulllineitems}
9308\phantomsection\label{\detokenize{appdev/refs/api/krb5_string_to_cksumtype:c.krb5_string_to_cksumtype}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_string\_to\_cksumtype}}{char *\sphinxstyleemphasis{ string}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}} *\sphinxstyleemphasis{ cksumtypep}}{}
9309\end{fulllineitems}
9310
9311\begin{quote}\begin{description}
9312\item[{param}] \leavevmode
9313\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to be converted
9314
9315\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cksumtypep} - Checksum type to be filled in
9316
9317\end{description}\end{quote}
9318\begin{quote}\begin{description}
9319\item[{retval}] \leavevmode\begin{itemize}
9320\item {}
93210   Success; otherwise - EINVAL
9322
9323\end{itemize}
9324
9325\end{description}\end{quote}
9326
9327
9328\subsubsection{krb5\_string\_to\_deltat -  Convert a string to a delta time value.}
9329\label{\detokenize{appdev/refs/api/krb5_string_to_deltat::doc}}\label{\detokenize{appdev/refs/api/krb5_string_to_deltat:krb5-string-to-deltat-convert-a-string-to-a-delta-time-value}}\index{krb5\_string\_to\_deltat (C function)}
9330
9331\begin{fulllineitems}
9332\phantomsection\label{\detokenize{appdev/refs/api/krb5_string_to_deltat:c.krb5_string_to_deltat}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_string\_to\_deltat}}{char *\sphinxstyleemphasis{ string}, {\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{krb5\_deltat}}} *\sphinxstyleemphasis{ deltatp}}{}
9333\end{fulllineitems}
9334
9335\begin{quote}\begin{description}
9336\item[{param}] \leavevmode
9337\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to be converted
9338
9339\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{deltatp} - Delta time to be filled in
9340
9341\end{description}\end{quote}
9342\begin{quote}\begin{description}
9343\item[{retval}] \leavevmode\begin{itemize}
9344\item {}
93450   Success; otherwise - KRB5\_DELTAT\_BADFORMAT
9346
9347\end{itemize}
9348
9349\end{description}\end{quote}
9350
9351
9352\subsubsection{krb5\_string\_to\_enctype -  Convert a string to an encryption type.}
9353\label{\detokenize{appdev/refs/api/krb5_string_to_enctype::doc}}\label{\detokenize{appdev/refs/api/krb5_string_to_enctype:krb5-string-to-enctype-convert-a-string-to-an-encryption-type}}\index{krb5\_string\_to\_enctype (C function)}
9354
9355\begin{fulllineitems}
9356\phantomsection\label{\detokenize{appdev/refs/api/krb5_string_to_enctype:c.krb5_string_to_enctype}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_string\_to\_enctype}}{char *\sphinxstyleemphasis{ string}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} *\sphinxstyleemphasis{ enctypep}}{}
9357\end{fulllineitems}
9358
9359\begin{quote}\begin{description}
9360\item[{param}] \leavevmode
9361\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to convert to an encryption type
9362
9363\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{enctypep} - Encryption type
9364
9365\end{description}\end{quote}
9366\begin{quote}\begin{description}
9367\item[{retval}] \leavevmode\begin{itemize}
9368\item {}
93690   Success; otherwise - EINVAL
9370
9371\end{itemize}
9372
9373\end{description}\end{quote}
9374
9375
9376\subsubsection{krb5\_string\_to\_salttype -  Convert a string to a salt type.}
9377\label{\detokenize{appdev/refs/api/krb5_string_to_salttype:krb5-string-to-salttype-convert-a-string-to-a-salt-type}}\label{\detokenize{appdev/refs/api/krb5_string_to_salttype::doc}}\index{krb5\_string\_to\_salttype (C function)}
9378
9379\begin{fulllineitems}
9380\phantomsection\label{\detokenize{appdev/refs/api/krb5_string_to_salttype:c.krb5_string_to_salttype}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_string\_to\_salttype}}{char *\sphinxstyleemphasis{ string}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}} *\sphinxstyleemphasis{ salttypep}}{}
9381\end{fulllineitems}
9382
9383\begin{quote}\begin{description}
9384\item[{param}] \leavevmode
9385\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to convert to an encryption type
9386
9387\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{salttypep} - Salt type to be filled in
9388
9389\end{description}\end{quote}
9390\begin{quote}\begin{description}
9391\item[{retval}] \leavevmode\begin{itemize}
9392\item {}
93930   Success; otherwise - EINVAL
9394
9395\end{itemize}
9396
9397\end{description}\end{quote}
9398
9399
9400\subsubsection{krb5\_string\_to\_timestamp -  Convert a string to a timestamp.}
9401\label{\detokenize{appdev/refs/api/krb5_string_to_timestamp::doc}}\label{\detokenize{appdev/refs/api/krb5_string_to_timestamp:krb5-string-to-timestamp-convert-a-string-to-a-timestamp}}\index{krb5\_string\_to\_timestamp (C function)}
9402
9403\begin{fulllineitems}
9404\phantomsection\label{\detokenize{appdev/refs/api/krb5_string_to_timestamp:c.krb5_string_to_timestamp}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_string\_to\_timestamp}}{char *\sphinxstyleemphasis{ string}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} *\sphinxstyleemphasis{ timestampp}}{}
9405\end{fulllineitems}
9406
9407\begin{quote}\begin{description}
9408\item[{param}] \leavevmode
9409\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to be converted
9410
9411\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{timestampp} - Pointer to timestamp
9412
9413\end{description}\end{quote}
9414\begin{quote}\begin{description}
9415\item[{retval}] \leavevmode\begin{itemize}
9416\item {}
94170   Success; otherwise - EINVAL
9418
9419\end{itemize}
9420
9421\end{description}\end{quote}
9422
9423
9424\subsubsection{krb5\_timeofday -  Retrieve the current time with context specific time offset adjustment.}
9425\label{\detokenize{appdev/refs/api/krb5_timeofday:krb5-timeofday-retrieve-the-current-time-with-context-specific-time-offset-adjustment}}\label{\detokenize{appdev/refs/api/krb5_timeofday::doc}}\index{krb5\_timeofday (C function)}
9426
9427\begin{fulllineitems}
9428\phantomsection\label{\detokenize{appdev/refs/api/krb5_timeofday:c.krb5_timeofday}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_timeofday}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}} *\sphinxstyleemphasis{ timeret}}{}
9429\end{fulllineitems}
9430
9431\begin{quote}\begin{description}
9432\item[{param}] \leavevmode
9433\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9434
9435\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{timeret} - Timestamp to fill in
9436
9437\end{description}\end{quote}
9438\begin{quote}\begin{description}
9439\item[{retval}] \leavevmode\begin{itemize}
9440\item {}
94410   Success
9442
9443\end{itemize}
9444
9445\item[{return}] \leavevmode\begin{itemize}
9446\item {}
9447Kerberos error codes
9448
9449\end{itemize}
9450
9451\end{description}\end{quote}
9452
9453This function retrieves the system time of day with the context specific time offset adjustment.
9454
9455
9456\subsubsection{krb5\_timestamp\_to\_sfstring -  Convert a timestamp to a string, with optional output padding.}
9457\label{\detokenize{appdev/refs/api/krb5_timestamp_to_sfstring:krb5-timestamp-to-sfstring-convert-a-timestamp-to-a-string-with-optional-output-padding}}\label{\detokenize{appdev/refs/api/krb5_timestamp_to_sfstring::doc}}\index{krb5\_timestamp\_to\_sfstring (C function)}
9458
9459\begin{fulllineitems}
9460\phantomsection\label{\detokenize{appdev/refs/api/krb5_timestamp_to_sfstring:c.krb5_timestamp_to_sfstring}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_timestamp\_to\_sfstring}}{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}\sphinxstyleemphasis{ timestamp}, char *\sphinxstyleemphasis{ buffer}, size\_t\sphinxstyleemphasis{ buflen}, char *\sphinxstyleemphasis{ pad}}{}
9461\end{fulllineitems}
9462
9463\begin{quote}\begin{description}
9464\item[{param}] \leavevmode
9465\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{timestamp} - Timestamp to convert
9466
9467\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to hold the converted timestamp
9468
9469\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Length of buffer
9470
9471\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pad} - Optional value to pad \sphinxstyleemphasis{buffer} if converted timestamp does not fill it
9472
9473\end{description}\end{quote}
9474\begin{quote}\begin{description}
9475\item[{retval}] \leavevmode\begin{itemize}
9476\item {}
94770   Success; otherwise - Kerberos error codes
9478
9479\end{itemize}
9480
9481\end{description}\end{quote}
9482
9483If \sphinxstyleemphasis{pad} is not NULL, \sphinxstyleemphasis{buffer} is padded out to \sphinxstyleemphasis{buflen} - 1 characters with the value of * \sphinxstyleemphasis{pad} .
9484
9485
9486\subsubsection{krb5\_timestamp\_to\_string -  Convert a timestamp to a string.}
9487\label{\detokenize{appdev/refs/api/krb5_timestamp_to_string::doc}}\label{\detokenize{appdev/refs/api/krb5_timestamp_to_string:krb5-timestamp-to-string-convert-a-timestamp-to-a-string}}\index{krb5\_timestamp\_to\_string (C function)}
9488
9489\begin{fulllineitems}
9490\phantomsection\label{\detokenize{appdev/refs/api/krb5_timestamp_to_string:c.krb5_timestamp_to_string}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_timestamp\_to\_string}}{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}\sphinxstyleemphasis{ timestamp}, char *\sphinxstyleemphasis{ buffer}, size\_t\sphinxstyleemphasis{ buflen}}{}
9491\end{fulllineitems}
9492
9493\begin{quote}\begin{description}
9494\item[{param}] \leavevmode
9495\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{timestamp} - Timestamp to convert
9496
9497\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to hold converted timestamp
9498
9499\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Storage available in \sphinxstyleemphasis{buffer}
9500
9501\end{description}\end{quote}
9502\begin{quote}\begin{description}
9503\item[{retval}] \leavevmode\begin{itemize}
9504\item {}
95050   Success; otherwise - Kerberos error codes
9506
9507\end{itemize}
9508
9509\end{description}\end{quote}
9510
9511The string is returned in the locale’s appropriate date and time representation.
9512
9513
9514\subsubsection{krb5\_tkt\_creds\_free -  Free a TGS request context.}
9515\label{\detokenize{appdev/refs/api/krb5_tkt_creds_free::doc}}\label{\detokenize{appdev/refs/api/krb5_tkt_creds_free:krb5-tkt-creds-free-free-a-tgs-request-context}}\index{krb5\_tkt\_creds\_free (C function)}
9516
9517\begin{fulllineitems}
9518\phantomsection\label{\detokenize{appdev/refs/api/krb5_tkt_creds_free:c.krb5_tkt_creds_free}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_tkt\_creds\_free}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}]{\sphinxcrossref{krb5\_tkt\_creds\_context}}}\sphinxstyleemphasis{ ctx}}{}
9519\end{fulllineitems}
9520
9521\begin{quote}\begin{description}
9522\item[{param}] \leavevmode
9523\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9524
9525\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - TGS request context
9526
9527\end{description}\end{quote}
9528
9529\begin{sphinxadmonition}{note}{Note:}
9530New in 1.9
9531\end{sphinxadmonition}
9532
9533
9534\subsubsection{krb5\_tkt\_creds\_get -  Synchronously obtain credentials using a TGS request context.}
9535\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get:krb5-tkt-creds-get-synchronously-obtain-credentials-using-a-tgs-request-context}}\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get::doc}}\index{krb5\_tkt\_creds\_get (C function)}
9536
9537\begin{fulllineitems}
9538\phantomsection\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get:c.krb5_tkt_creds_get}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_tkt\_creds\_get}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}]{\sphinxcrossref{krb5\_tkt\_creds\_context}}}\sphinxstyleemphasis{ ctx}}{}
9539\end{fulllineitems}
9540
9541\begin{quote}\begin{description}
9542\item[{param}] \leavevmode
9543\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9544
9545\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - TGS request context
9546
9547\end{description}\end{quote}
9548\begin{quote}\begin{description}
9549\item[{retval}] \leavevmode\begin{itemize}
9550\item {}
95510   Success; otherwise - Kerberos error codes
9552
9553\end{itemize}
9554
9555\end{description}\end{quote}
9556
9557This function synchronously obtains credentials using a context created by {\hyperref[\detokenize{appdev/refs/api/krb5_tkt_creds_init:c.krb5_tkt_creds_init}]{\sphinxcrossref{\sphinxcode{krb5\_tkt\_creds\_init()}}}} . On successful return, the credentials can be retrieved with {\hyperref[\detokenize{appdev/refs/api/krb5_tkt_creds_get_creds:c.krb5_tkt_creds_get_creds}]{\sphinxcrossref{\sphinxcode{krb5\_tkt\_creds\_get\_creds()}}}} .
9558
9559\begin{sphinxadmonition}{note}{Note:}
9560New in 1.9
9561\end{sphinxadmonition}
9562
9563
9564\subsubsection{krb5\_tkt\_creds\_get\_creds -  Retrieve acquired credentials from a TGS request context.}
9565\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get_creds:krb5-tkt-creds-get-creds-retrieve-acquired-credentials-from-a-tgs-request-context}}\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get_creds::doc}}\index{krb5\_tkt\_creds\_get\_creds (C function)}
9566
9567\begin{fulllineitems}
9568\phantomsection\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get_creds:c.krb5_tkt_creds_get_creds}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_tkt\_creds\_get\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}]{\sphinxcrossref{krb5\_tkt\_creds\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}}{}
9569\end{fulllineitems}
9570
9571\begin{quote}\begin{description}
9572\item[{param}] \leavevmode
9573\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9574
9575\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - TGS request context
9576
9577\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - Acquired credentials
9578
9579\end{description}\end{quote}
9580\begin{quote}\begin{description}
9581\item[{retval}] \leavevmode\begin{itemize}
9582\item {}
95830   Success; otherwise - Kerberos error codes
9584
9585\end{itemize}
9586
9587\end{description}\end{quote}
9588
9589This function copies the acquired initial credentials from \sphinxstyleemphasis{ctx} into \sphinxstyleemphasis{creds} , after the successful completion of {\hyperref[\detokenize{appdev/refs/api/krb5_tkt_creds_get:c.krb5_tkt_creds_get}]{\sphinxcrossref{\sphinxcode{krb5\_tkt\_creds\_get()}}}} or {\hyperref[\detokenize{appdev/refs/api/krb5_tkt_creds_step:c.krb5_tkt_creds_step}]{\sphinxcrossref{\sphinxcode{krb5\_tkt\_creds\_step()}}}} . Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_cred_contents:c.krb5_free_cred_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_cred\_contents()}}}} to free \sphinxstyleemphasis{creds} when it is no longer needed.
9590
9591\begin{sphinxadmonition}{note}{Note:}
9592New in 1.9
9593\end{sphinxadmonition}
9594
9595
9596\subsubsection{krb5\_tkt\_creds\_get\_times -  Retrieve ticket times from a TGS request context.}
9597\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get_times:krb5-tkt-creds-get-times-retrieve-ticket-times-from-a-tgs-request-context}}\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get_times::doc}}\index{krb5\_tkt\_creds\_get\_times (C function)}
9598
9599\begin{fulllineitems}
9600\phantomsection\label{\detokenize{appdev/refs/api/krb5_tkt_creds_get_times:c.krb5_tkt_creds_get_times}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_tkt\_creds\_get\_times}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}]{\sphinxcrossref{krb5\_tkt\_creds\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{krb5\_ticket\_times}}} *\sphinxstyleemphasis{ times}}{}
9601\end{fulllineitems}
9602
9603\begin{quote}\begin{description}
9604\item[{param}] \leavevmode
9605\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9606
9607\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - TGS request context
9608
9609\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{times} - Ticket times for acquired credentials
9610
9611\end{description}\end{quote}
9612\begin{quote}\begin{description}
9613\item[{retval}] \leavevmode\begin{itemize}
9614\item {}
96150   Success; otherwise - Kerberos error codes
9616
9617\end{itemize}
9618
9619\end{description}\end{quote}
9620
9621The TGS request context must have completed obtaining credentials via either {\hyperref[\detokenize{appdev/refs/api/krb5_tkt_creds_get:c.krb5_tkt_creds_get}]{\sphinxcrossref{\sphinxcode{krb5\_tkt\_creds\_get()}}}} or {\hyperref[\detokenize{appdev/refs/api/krb5_tkt_creds_step:c.krb5_tkt_creds_step}]{\sphinxcrossref{\sphinxcode{krb5\_tkt\_creds\_step()}}}} .
9622
9623\begin{sphinxadmonition}{note}{Note:}
9624New in 1.9
9625\end{sphinxadmonition}
9626
9627
9628\subsubsection{krb5\_tkt\_creds\_init -  Create a context to get credentials from a KDC’s Ticket Granting Service.}
9629\label{\detokenize{appdev/refs/api/krb5_tkt_creds_init:krb5-tkt-creds-init-create-a-context-to-get-credentials-from-a-kdc-s-ticket-granting-service}}\label{\detokenize{appdev/refs/api/krb5_tkt_creds_init::doc}}\index{krb5\_tkt\_creds\_init (C function)}
9630
9631\begin{fulllineitems}
9632\phantomsection\label{\detokenize{appdev/refs/api/krb5_tkt_creds_init:c.krb5_tkt_creds_init}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_tkt\_creds\_init}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ options}, {\hyperref[\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}]{\sphinxcrossref{krb5\_tkt\_creds\_context}}} *\sphinxstyleemphasis{ ctx}}{}
9633\end{fulllineitems}
9634
9635\begin{quote}\begin{description}
9636\item[{param}] \leavevmode
9637\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9638
9639\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache handle
9640
9641\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Input credentials
9642
9643\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{options} - \sphinxcode{KRB5\_GC} options for this request.
9644
9645\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ctx} - New TGS request context
9646
9647\end{description}\end{quote}
9648\begin{quote}\begin{description}
9649\item[{retval}] \leavevmode\begin{itemize}
9650\item {}
96510   Success; otherwise - Kerberos error codes
9652
9653\end{itemize}
9654
9655\end{description}\end{quote}
9656
9657This function prepares to obtain credentials matching \sphinxstyleemphasis{creds} , either by retrieving them from \sphinxstyleemphasis{ccache} or by making requests to ticket-granting services beginning with a ticket-granting ticket for the client principal’s realm.
9658
9659The resulting TGS acquisition context can be used asynchronously with {\hyperref[\detokenize{appdev/refs/api/krb5_tkt_creds_step:c.krb5_tkt_creds_step}]{\sphinxcrossref{\sphinxcode{krb5\_tkt\_creds\_step()}}}} or synchronously with {\hyperref[\detokenize{appdev/refs/api/krb5_tkt_creds_get:c.krb5_tkt_creds_get}]{\sphinxcrossref{\sphinxcode{krb5\_tkt\_creds\_get()}}}} . See also {\hyperref[\detokenize{appdev/refs/api/krb5_get_credentials:c.krb5_get_credentials}]{\sphinxcrossref{\sphinxcode{krb5\_get\_credentials()}}}} for synchronous use.
9660
9661Use {\hyperref[\detokenize{appdev/refs/api/krb5_tkt_creds_free:c.krb5_tkt_creds_free}]{\sphinxcrossref{\sphinxcode{krb5\_tkt\_creds\_free()}}}} to free \sphinxstyleemphasis{ctx} when it is no longer needed.
9662
9663\begin{sphinxadmonition}{note}{Note:}
9664New in 1.9
9665\end{sphinxadmonition}
9666
9667
9668\subsubsection{krb5\_tkt\_creds\_step -  Get the next KDC request in a TGS exchange.}
9669\label{\detokenize{appdev/refs/api/krb5_tkt_creds_step:krb5-tkt-creds-step-get-the-next-kdc-request-in-a-tgs-exchange}}\label{\detokenize{appdev/refs/api/krb5_tkt_creds_step::doc}}\index{krb5\_tkt\_creds\_step (C function)}
9670
9671\begin{fulllineitems}
9672\phantomsection\label{\detokenize{appdev/refs/api/krb5_tkt_creds_step:c.krb5_tkt_creds_step}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_tkt\_creds\_step}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}]{\sphinxcrossref{krb5\_tkt\_creds\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ in}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ out}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ realm}, unsigned int *\sphinxstyleemphasis{ flags}}{}
9673\end{fulllineitems}
9674
9675\begin{quote}\begin{description}
9676\item[{param}] \leavevmode
9677\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9678
9679\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - TGS request context
9680
9681\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in} - KDC response (empty on the first call)
9682
9683\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Next KDC request
9684
9685\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realm} - Realm for next KDC request
9686
9687\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{flags} - Output flags
9688
9689\end{description}\end{quote}
9690\begin{quote}\begin{description}
9691\item[{retval}] \leavevmode\begin{itemize}
9692\item {}
96930   Success; otherwise - Kerberos error codes
9694
9695\end{itemize}
9696
9697\end{description}\end{quote}
9698
9699This function constructs the next KDC request for a TGS exchange, allowing the caller to control the transport of KDC requests and replies. On the first call, \sphinxstyleemphasis{in} should be set to an empty buffer; on subsequent calls, it should be set to the KDC’s reply to the previous request.
9700
9701If more requests are needed, \sphinxstyleemphasis{flags} will be set to {\hyperref[\detokenize{appdev/refs/macros/KRB5_TKT_CREDS_STEP_FLAG_CONTINUE:KRB5_TKT_CREDS_STEP_FLAG_CONTINUE}]{\sphinxcrossref{\sphinxcode{KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE}}}} and the next request will be placed in \sphinxstyleemphasis{out} . If no more requests are needed, \sphinxstyleemphasis{flags} will not contain {\hyperref[\detokenize{appdev/refs/macros/KRB5_TKT_CREDS_STEP_FLAG_CONTINUE:KRB5_TKT_CREDS_STEP_FLAG_CONTINUE}]{\sphinxcrossref{\sphinxcode{KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE}}}} and \sphinxstyleemphasis{out} will be empty.
9702
9703If this function returns \sphinxstylestrong{KRB5KRB\_ERR\_RESPONSE\_TOO\_BIG} , the caller should transmit the next request using TCP rather than UDP. If this function returns any other error, the TGS exchange has failed.
9704
9705\begin{sphinxadmonition}{note}{Note:}
9706New in 1.9
9707\end{sphinxadmonition}
9708
9709
9710\subsubsection{krb5\_verify\_init\_creds -  Verify initial credentials against a keytab.}
9711\label{\detokenize{appdev/refs/api/krb5_verify_init_creds:krb5-verify-init-creds-verify-initial-credentials-against-a-keytab}}\label{\detokenize{appdev/refs/api/krb5_verify_init_creds::doc}}\index{krb5\_verify\_init\_creds (C function)}
9712
9713\begin{fulllineitems}
9714\phantomsection\label{\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_verify\_init\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ server}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}} *\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt}]{\sphinxcrossref{krb5\_verify\_init\_creds\_opt}}} *\sphinxstyleemphasis{ options}}{}
9715\end{fulllineitems}
9716
9717\begin{quote}\begin{description}
9718\item[{param}] \leavevmode
9719\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9720
9721\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Initial credentials to be verified
9722
9723\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Server principal (or NULL)
9724
9725\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table (NULL to use default keytab)
9726
9727\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache for fetched creds (or NULL)
9728
9729\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{options} - Verification options (NULL for default options)
9730
9731\end{description}\end{quote}
9732\begin{quote}\begin{description}
9733\item[{retval}] \leavevmode\begin{itemize}
9734\item {}
97350   Success; otherwise - Kerberos error codes
9736
9737\end{itemize}
9738
9739\end{description}\end{quote}
9740
9741This function attempts to verify that \sphinxstyleemphasis{creds} were obtained from a KDC with knowledge of a key in \sphinxstyleemphasis{keytab} , or the default keytab if \sphinxstyleemphasis{keytab} is NULL. If \sphinxstyleemphasis{server} is provided, the highest-kvno key entry for that principal name is used to verify the credentials; otherwise, all unique”host”service principals in the keytab are tried.
9742
9743If the specified keytab does not exist, or is empty, or cannot be read, or does not contain an entry for \sphinxstyleemphasis{server} , then credential verification may be skipped unless configuration demands that it succeed. The caller can control this behavior by providing a verification options structure; see {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_init:c.krb5_verify_init_creds_opt_init}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds\_opt\_init()}}}} and {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_set_ap_req_nofail:c.krb5_verify_init_creds_opt_set_ap_req_nofail}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds\_opt\_set\_ap\_req\_nofail()}}}} .
9744
9745If \sphinxstyleemphasis{ccache} is NULL, any additional credentials fetched during the verification process will be destroyed. If \sphinxstyleemphasis{ccache} points to NULL, a memory ccache will be created for the additional credentials and returned in \sphinxstyleemphasis{ccache} . If \sphinxstyleemphasis{ccache} points to a valid credential cache handle, the additional credentials will be stored in that cache.
9746
9747
9748\subsubsection{krb5\_verify\_init\_creds\_opt\_init -  Initialize a credential verification options structure.}
9749\label{\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_init:krb5-verify-init-creds-opt-init-initialize-a-credential-verification-options-structure}}\label{\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_init::doc}}\index{krb5\_verify\_init\_creds\_opt\_init (C function)}
9750
9751\begin{fulllineitems}
9752\phantomsection\label{\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_init:c.krb5_verify_init_creds_opt_init}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_verify\_init\_creds\_opt\_init}}{{\hyperref[\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt}]{\sphinxcrossref{krb5\_verify\_init\_creds\_opt}}} *\sphinxstyleemphasis{ k5\_vic\_options}}{}
9753\end{fulllineitems}
9754
9755\begin{quote}\begin{description}
9756\item[{param}] \leavevmode
9757\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k5\_vic\_options} - Verification options structure
9758
9759\end{description}\end{quote}
9760
9761
9762\subsubsection{krb5\_verify\_init\_creds\_opt\_set\_ap\_req\_nofail -  Set whether credential verification is required.}
9763\label{\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_set_ap_req_nofail::doc}}\label{\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_set_ap_req_nofail:krb5-verify-init-creds-opt-set-ap-req-nofail-set-whether-credential-verification-is-required}}\index{krb5\_verify\_init\_creds\_opt\_set\_ap\_req\_nofail (C function)}
9764
9765\begin{fulllineitems}
9766\phantomsection\label{\detokenize{appdev/refs/api/krb5_verify_init_creds_opt_set_ap_req_nofail:c.krb5_verify_init_creds_opt_set_ap_req_nofail}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_verify\_init\_creds\_opt\_set\_ap\_req\_nofail}}{{\hyperref[\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt}]{\sphinxcrossref{krb5\_verify\_init\_creds\_opt}}} *\sphinxstyleemphasis{ k5\_vic\_options}, int\sphinxstyleemphasis{ ap\_req\_nofail}}{}
9767\end{fulllineitems}
9768
9769\begin{quote}\begin{description}
9770\item[{param}] \leavevmode
9771\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k5\_vic\_options} - Verification options structure
9772
9773\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_nofail} - Whether to require successful verification
9774
9775\end{description}\end{quote}
9776
9777This function determines how {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds()}}}} behaves if no keytab information is available. If \sphinxstyleemphasis{ap\_req\_nofail} is \sphinxstylestrong{FALSE} , verification will be skipped in this case and {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds()}}}} will return successfully. If \sphinxstyleemphasis{ap\_req\_nofail} is \sphinxstylestrong{TRUE} , {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds()}}}} will not return successfully unless verification can be performed.
9778
9779If this function is not used, the behavior of {\hyperref[\detokenize{appdev/refs/api/krb5_verify_init_creds:c.krb5_verify_init_creds}]{\sphinxcrossref{\sphinxcode{krb5\_verify\_init\_creds()}}}} is determined through configuration.
9780
9781
9782\subsubsection{krb5\_vprepend\_error\_message -  Add a prefix to the message for an error code using a va\_list.}
9783\label{\detokenize{appdev/refs/api/krb5_vprepend_error_message::doc}}\label{\detokenize{appdev/refs/api/krb5_vprepend_error_message:krb5-vprepend-error-message-add-a-prefix-to-the-message-for-an-error-code-using-a-va-list}}\index{krb5\_vprepend\_error\_message (C function)}
9784
9785\begin{fulllineitems}
9786\phantomsection\label{\detokenize{appdev/refs/api/krb5_vprepend_error_message:c.krb5_vprepend_error_message}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_vprepend\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}}\sphinxstyleemphasis{ code}, const char *\sphinxstyleemphasis{ fmt}, va\_list\sphinxstyleemphasis{ args}}{}
9787\end{fulllineitems}
9788
9789\begin{quote}\begin{description}
9790\item[{param}] \leavevmode
9791\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
9792
9793\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code
9794
9795\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} - Format string for error message prefix
9796
9797\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{args} - List of vprintf(3) style arguments
9798
9799\end{description}\end{quote}
9800
9801This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_prepend_error_message:c.krb5_prepend_error_message}]{\sphinxcrossref{\sphinxcode{krb5\_prepend\_error\_message()}}}} , but uses a va\_list instead of variadic arguments.
9802
9803
9804\subsubsection{krb5\_vset\_error\_message -  Set an extended error message for an error code using a va\_list.}
9805\label{\detokenize{appdev/refs/api/krb5_vset_error_message:krb5-vset-error-message-set-an-extended-error-message-for-an-error-code-using-a-va-list}}\label{\detokenize{appdev/refs/api/krb5_vset_error_message::doc}}\index{krb5\_vset\_error\_message (C function)}
9806
9807\begin{fulllineitems}
9808\phantomsection\label{\detokenize{appdev/refs/api/krb5_vset_error_message:c.krb5_vset_error_message}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_vset\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}}\sphinxstyleemphasis{ code}, const char *\sphinxstyleemphasis{ fmt}, va\_list\sphinxstyleemphasis{ args}}{}
9809\end{fulllineitems}
9810
9811\begin{quote}\begin{description}
9812\item[{param}] \leavevmode
9813\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
9814
9815\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code
9816
9817\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} - Error string for the error code
9818
9819\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{args} - List of vprintf(3) style arguments
9820
9821\end{description}\end{quote}
9822
9823
9824\subsubsection{krb5\_vwrap\_error\_message -  Add a prefix to a different error code’s message using a va\_list.}
9825\label{\detokenize{appdev/refs/api/krb5_vwrap_error_message:krb5-vwrap-error-message-add-a-prefix-to-a-different-error-code-s-message-using-a-va-list}}\label{\detokenize{appdev/refs/api/krb5_vwrap_error_message::doc}}\index{krb5\_vwrap\_error\_message (C function)}
9826
9827\begin{fulllineitems}
9828\phantomsection\label{\detokenize{appdev/refs/api/krb5_vwrap_error_message:c.krb5_vwrap_error_message}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_vwrap\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}}\sphinxstyleemphasis{ old\_code}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}}\sphinxstyleemphasis{ code}, const char *\sphinxstyleemphasis{ fmt}, va\_list\sphinxstyleemphasis{ args}}{}
9829\end{fulllineitems}
9830
9831\begin{quote}\begin{description}
9832\item[{param}] \leavevmode
9833\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
9834
9835\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{old\_code} - Previous error code
9836
9837\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code
9838
9839\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} - Format string for error message prefix
9840
9841\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{args} - List of vprintf(3) style arguments
9842
9843\end{description}\end{quote}
9844
9845This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_wrap_error_message:c.krb5_wrap_error_message}]{\sphinxcrossref{\sphinxcode{krb5\_wrap\_error\_message()}}}} , but uses a va\_list instead of variadic arguments.
9846
9847
9848\subsubsection{krb5\_wrap\_error\_message -  Add a prefix to a different error code’s message.}
9849\label{\detokenize{appdev/refs/api/krb5_wrap_error_message:krb5-wrap-error-message-add-a-prefix-to-a-different-error-code-s-message}}\label{\detokenize{appdev/refs/api/krb5_wrap_error_message::doc}}\index{krb5\_wrap\_error\_message (C function)}
9850
9851\begin{fulllineitems}
9852\phantomsection\label{\detokenize{appdev/refs/api/krb5_wrap_error_message:c.krb5_wrap_error_message}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_wrap\_error\_message}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ ctx}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}}\sphinxstyleemphasis{ old\_code}, {\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}}\sphinxstyleemphasis{ code}, const char *\sphinxstyleemphasis{ fmt}, ...}{}
9853\end{fulllineitems}
9854
9855\begin{quote}\begin{description}
9856\item[{param}] \leavevmode
9857\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
9858
9859\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{old\_code} - Previous error code
9860
9861\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code
9862
9863\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} - Format string for error message prefix
9864
9865\end{description}\end{quote}
9866
9867Format a message and prepend it to the message for \sphinxstyleemphasis{old\_code} . The prefix will be separated from the old message with a colon and space. Set the resulting message as the extended error message for \sphinxstyleemphasis{code} .
9868
9869
9870\subsection{Public interfaces that should not be called directly}
9871\label{\detokenize{appdev/refs/api/index:public-interfaces-that-should-not-be-called-directly}}
9872
9873\subsubsection{krb5\_c\_block\_size -  Return cipher block size.}
9874\label{\detokenize{appdev/refs/api/krb5_c_block_size:krb5-c-block-size-return-cipher-block-size}}\label{\detokenize{appdev/refs/api/krb5_c_block_size::doc}}\index{krb5\_c\_block\_size (C function)}
9875
9876\begin{fulllineitems}
9877\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_block_size:c.krb5_c_block_size}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_block\_size}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, size\_t *\sphinxstyleemphasis{ blocksize}}{}
9878\end{fulllineitems}
9879
9880\begin{quote}\begin{description}
9881\item[{param}] \leavevmode
9882\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9883
9884\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
9885
9886\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{blocksize} - Block size for \sphinxstyleemphasis{enctype}
9887
9888\end{description}\end{quote}
9889\begin{quote}\begin{description}
9890\item[{retval}] \leavevmode\begin{itemize}
9891\item {}
98920   Success; otherwise - Kerberos error codes
9893
9894\end{itemize}
9895
9896\end{description}\end{quote}
9897
9898
9899\subsubsection{krb5\_c\_checksum\_length -  Return the length of checksums for a checksum type.}
9900\label{\detokenize{appdev/refs/api/krb5_c_checksum_length:krb5-c-checksum-length-return-the-length-of-checksums-for-a-checksum-type}}\label{\detokenize{appdev/refs/api/krb5_c_checksum_length::doc}}\index{krb5\_c\_checksum\_length (C function)}
9901
9902\begin{fulllineitems}
9903\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_checksum_length:c.krb5_c_checksum_length}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_checksum\_length}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ cksumtype}, size\_t *\sphinxstyleemphasis{ length}}{}
9904\end{fulllineitems}
9905
9906\begin{quote}\begin{description}
9907\item[{param}] \leavevmode
9908\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9909
9910\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type
9911
9912\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{length} - Checksum length
9913
9914\end{description}\end{quote}
9915\begin{quote}\begin{description}
9916\item[{retval}] \leavevmode\begin{itemize}
9917\item {}
99180   Success; otherwise - Kerberos error codes
9919
9920\end{itemize}
9921
9922\end{description}\end{quote}
9923
9924
9925\subsubsection{krb5\_c\_crypto\_length -  Return a length of a message field specific to the encryption type.}
9926\label{\detokenize{appdev/refs/api/krb5_c_crypto_length:krb5-c-crypto-length-return-a-length-of-a-message-field-specific-to-the-encryption-type}}\label{\detokenize{appdev/refs/api/krb5_c_crypto_length::doc}}\index{krb5\_c\_crypto\_length (C function)}
9927
9928\begin{fulllineitems}
9929\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_crypto_length:c.krb5_c_crypto_length}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_crypto\_length}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_cryptotype:c.krb5_cryptotype}]{\sphinxcrossref{krb5\_cryptotype}}}\sphinxstyleemphasis{ type}, unsigned int *\sphinxstyleemphasis{ size}}{}
9930\end{fulllineitems}
9931
9932\begin{quote}\begin{description}
9933\item[{param}] \leavevmode
9934\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9935
9936\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
9937
9938\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - Type field (See \sphinxcode{KRB5\_CRYPTO\_TYPE} types)
9939
9940\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{size} - Length of the \sphinxstyleemphasis{type} specific to \sphinxstyleemphasis{enctype}
9941
9942\end{description}\end{quote}
9943\begin{quote}\begin{description}
9944\item[{retval}] \leavevmode\begin{itemize}
9945\item {}
99460   Success; otherwise - Kerberos error codes
9947
9948\end{itemize}
9949
9950\end{description}\end{quote}
9951
9952
9953\subsubsection{krb5\_c\_crypto\_length\_iov -  Fill in lengths for header, trailer and padding in a IOV array.}
9954\label{\detokenize{appdev/refs/api/krb5_c_crypto_length_iov:krb5-c-crypto-length-iov-fill-in-lengths-for-header-trailer-and-padding-in-a-iov-array}}\label{\detokenize{appdev/refs/api/krb5_c_crypto_length_iov::doc}}\index{krb5\_c\_crypto\_length\_iov (C function)}
9955
9956\begin{fulllineitems}
9957\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_crypto_length_iov:c.krb5_c_crypto_length_iov}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_crypto\_length\_iov}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{krb5\_crypto\_iov}}} *\sphinxstyleemphasis{ data}, size\_t\sphinxstyleemphasis{ num\_data}}{}
9958\end{fulllineitems}
9959
9960\begin{quote}\begin{description}
9961\item[{param}] \leavevmode
9962\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9963
9964\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
9965
9966\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array
9967
9968\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data}
9969
9970\end{description}\end{quote}
9971\begin{quote}\begin{description}
9972\item[{retval}] \leavevmode\begin{itemize}
9973\item {}
99740   Success; otherwise - Kerberos error codes
9975
9976\end{itemize}
9977
9978\end{description}\end{quote}
9979
9980Padding is set to the actual padding required based on the provided \sphinxstyleemphasis{data} buffers. Typically this API is used after setting up the data buffers and {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY:KRB5_CRYPTO_TYPE_SIGN_ONLY}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}}}} buffers, but before actually allocating header, trailer and padding.
9981
9982
9983\subsubsection{krb5\_c\_decrypt -  Decrypt data using a key (operates on keyblock).}
9984\label{\detokenize{appdev/refs/api/krb5_c_decrypt::doc}}\label{\detokenize{appdev/refs/api/krb5_c_decrypt:krb5-c-decrypt-decrypt-data-using-a-key-operates-on-keyblock}}\index{krb5\_c\_decrypt (C function)}
9985
9986\begin{fulllineitems}
9987\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_decrypt:c.krb5_c_decrypt}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_decrypt}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ cipher\_state}, const {\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ output}}{}
9988\end{fulllineitems}
9989
9990\begin{quote}\begin{description}
9991\item[{param}] \leavevmode
9992\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9993
9994\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key
9995
9996\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
9997
9998\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed
9999
10000\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Encrypted data
10001
10002\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Decrypted data
10003
10004\end{description}\end{quote}
10005\begin{quote}\begin{description}
10006\item[{retval}] \leavevmode\begin{itemize}
10007\item {}
100080   Success; otherwise - Kerberos error codes
10009
10010\end{itemize}
10011
10012\end{description}\end{quote}
10013
10014This function decrypts the data block \sphinxstyleemphasis{input} and stores the output into \sphinxstyleemphasis{output} . The actual decryption key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the encryption type. If non-null, \sphinxstyleemphasis{cipher\_state} specifies the beginning state for the decryption operation, and is updated with the state to be passed as input to the next operation.
10015
10016\begin{sphinxadmonition}{note}{Note:}
10017The caller must initialize \sphinxstyleemphasis{output} and allocate at least enough space for the result. The usual practice is to allocate an output buffer as long as the ciphertext, and let {\hyperref[\detokenize{appdev/refs/api/krb5_c_decrypt:c.krb5_c_decrypt}]{\sphinxcrossref{\sphinxcode{krb5\_c\_decrypt()}}}} trim \sphinxstyleemphasis{output-\textgreater{}length} . For some enctypes, the resulting \sphinxstyleemphasis{output-\textgreater{}length} may include padding bytes.
10018\end{sphinxadmonition}
10019
10020
10021\subsubsection{krb5\_c\_decrypt\_iov -  Decrypt data in place supporting AEAD (operates on keyblock).}
10022\label{\detokenize{appdev/refs/api/krb5_c_decrypt_iov:krb5-c-decrypt-iov-decrypt-data-in-place-supporting-aead-operates-on-keyblock}}\label{\detokenize{appdev/refs/api/krb5_c_decrypt_iov::doc}}\index{krb5\_c\_decrypt\_iov (C function)}
10023
10024\begin{fulllineitems}
10025\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_decrypt_iov:c.krb5_c_decrypt_iov}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_decrypt\_iov}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ keyblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ cipher\_state}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{krb5\_crypto\_iov}}} *\sphinxstyleemphasis{ data}, size\_t\sphinxstyleemphasis{ num\_data}}{}
10026\end{fulllineitems}
10027
10028\begin{quote}\begin{description}
10029\item[{param}] \leavevmode
10030\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10031
10032\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} - Encryption key
10033
10034\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
10035
10036\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed
10037
10038\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array. Modified in-place.
10039
10040\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data}
10041
10042\end{description}\end{quote}
10043\begin{quote}\begin{description}
10044\item[{retval}] \leavevmode\begin{itemize}
10045\item {}
100460   Success; otherwise - Kerberos error codes
10047
10048\end{itemize}
10049
10050\end{description}\end{quote}
10051
10052This function decrypts the data block \sphinxstyleemphasis{data} and stores the output in-place. The actual decryption key will be derived from \sphinxstyleemphasis{keyblock} and \sphinxstyleemphasis{usage} if key derivation is specified for the encryption type. If non-null, \sphinxstyleemphasis{cipher\_state} specifies the beginning state for the decryption operation, and is updated with the state to be passed as input to the next operation. The caller must allocate the right number of krb5\_crypto\_iov structures before calling into this API.
10053
10054
10055\sphinxstrong{See also:}
10056
10057
10058{\hyperref[\detokenize{appdev/refs/api/krb5_c_decrypt_iov:c.krb5_c_decrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_decrypt\_iov()}}}}
10059
10060
10061
10062\begin{sphinxadmonition}{note}{Note:}
10063On return from a {\hyperref[\detokenize{appdev/refs/api/krb5_c_decrypt_iov:c.krb5_c_decrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_decrypt\_iov()}}}} call, the \sphinxstyleemphasis{data-\textgreater{}length} in the iov structure are adjusted to reflect actual lengths of the ciphertext used. For example, if the padding length is too large, the length will be reduced. Lengths are never increased.
10064\end{sphinxadmonition}
10065
10066
10067\subsubsection{krb5\_c\_derive\_prfplus -  Derive a key using some input data (via RFC 6113 PRF+).}
10068\label{\detokenize{appdev/refs/api/krb5_c_derive_prfplus::doc}}\label{\detokenize{appdev/refs/api/krb5_c_derive_prfplus:krb5-c-derive-prfplus-derive-a-key-using-some-input-data-via-rfc-6113-prf}}\index{krb5\_c\_derive\_prfplus (C function)}
10069
10070\begin{fulllineitems}
10071\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_derive_prfplus:c.krb5_c_derive_prfplus}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_derive\_prfplus}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ k}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ out}}{}
10072\end{fulllineitems}
10073
10074\begin{quote}\begin{description}
10075\item[{param}] \leavevmode
10076\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10077
10078\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k} - KDC contribution key
10079
10080\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Input string
10081
10082\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Output key enctype (or \sphinxstylestrong{ENCTYPE\_NULL} )
10083
10084\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Derived keyblock
10085
10086\end{description}\end{quote}
10087
10088This function uses PRF+ as defined in RFC 6113 to derive a key from another key and an input string. If \sphinxstyleemphasis{enctype} is \sphinxstylestrong{ENCTYPE\_NULL} , the output key will have the same enctype as the input key.
10089
10090
10091\subsubsection{krb5\_c\_encrypt -  Encrypt data using a key (operates on keyblock).}
10092\label{\detokenize{appdev/refs/api/krb5_c_encrypt::doc}}\label{\detokenize{appdev/refs/api/krb5_c_encrypt:krb5-c-encrypt-encrypt-data-using-a-key-operates-on-keyblock}}\index{krb5\_c\_encrypt (C function)}
10093
10094\begin{fulllineitems}
10095\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_encrypt:c.krb5_c_encrypt}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_encrypt}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ cipher\_state}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}} *\sphinxstyleemphasis{ output}}{}
10096\end{fulllineitems}
10097
10098\begin{quote}\begin{description}
10099\item[{param}] \leavevmode
10100\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10101
10102\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key
10103
10104\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
10105
10106\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed
10107
10108\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Data to be encrypted
10109
10110\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Encrypted data
10111
10112\end{description}\end{quote}
10113\begin{quote}\begin{description}
10114\item[{retval}] \leavevmode\begin{itemize}
10115\item {}
101160   Success; otherwise - Kerberos error codes
10117
10118\end{itemize}
10119
10120\end{description}\end{quote}
10121
10122This function encrypts the data block \sphinxstyleemphasis{input} and stores the output into \sphinxstyleemphasis{output} . The actual encryption key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the encryption type. If non-null, \sphinxstyleemphasis{cipher\_state} specifies the beginning state for the encryption operation, and is updated with the state to be passed as input to the next operation.
10123
10124\begin{sphinxadmonition}{note}{Note:}
10125The caller must initialize \sphinxstyleemphasis{output} and allocate at least enough space for the result (using {\hyperref[\detokenize{appdev/refs/api/krb5_c_encrypt_length:c.krb5_c_encrypt_length}]{\sphinxcrossref{\sphinxcode{krb5\_c\_encrypt\_length()}}}} to determine the amount of space needed). \sphinxstyleemphasis{output-\textgreater{}length} will be set to the actual length of the ciphertext.
10126\end{sphinxadmonition}
10127
10128
10129\subsubsection{krb5\_c\_encrypt\_iov -  Encrypt data in place supporting AEAD (operates on keyblock).}
10130\label{\detokenize{appdev/refs/api/krb5_c_encrypt_iov:krb5-c-encrypt-iov-encrypt-data-in-place-supporting-aead-operates-on-keyblock}}\label{\detokenize{appdev/refs/api/krb5_c_encrypt_iov::doc}}\index{krb5\_c\_encrypt\_iov (C function)}
10131
10132\begin{fulllineitems}
10133\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_encrypt_iov:c.krb5_c_encrypt_iov}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_encrypt\_iov}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ keyblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ cipher\_state}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{krb5\_crypto\_iov}}} *\sphinxstyleemphasis{ data}, size\_t\sphinxstyleemphasis{ num\_data}}{}
10134\end{fulllineitems}
10135
10136\begin{quote}\begin{description}
10137\item[{param}] \leavevmode
10138\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10139
10140\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} - Encryption key
10141
10142\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
10143
10144\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed
10145
10146\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array. Modified in-place.
10147
10148\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data}
10149
10150\end{description}\end{quote}
10151\begin{quote}\begin{description}
10152\item[{retval}] \leavevmode\begin{itemize}
10153\item {}
101540   Success; otherwise - Kerberos error codes
10155
10156\end{itemize}
10157
10158\end{description}\end{quote}
10159
10160This function encrypts the data block \sphinxstyleemphasis{data} and stores the output in-place. The actual encryption key will be derived from \sphinxstyleemphasis{keyblock} and \sphinxstyleemphasis{usage} if key derivation is specified for the encryption type. If non-null, \sphinxstyleemphasis{cipher\_state} specifies the beginning state for the encryption operation, and is updated with the state to be passed as input to the next operation. The caller must allocate the right number of krb5\_crypto\_iov structures before calling into this API.
10161
10162
10163\sphinxstrong{See also:}
10164
10165
10166{\hyperref[\detokenize{appdev/refs/api/krb5_c_decrypt_iov:c.krb5_c_decrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_decrypt\_iov()}}}}
10167
10168
10169
10170\begin{sphinxadmonition}{note}{Note:}
10171On return from a {\hyperref[\detokenize{appdev/refs/api/krb5_c_encrypt_iov:c.krb5_c_encrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_encrypt\_iov()}}}} call, the \sphinxstyleemphasis{data-\textgreater{}length} in the iov structure are adjusted to reflect actual lengths of the ciphertext used. For example, if the padding length is too large, the length will be reduced. Lengths are never increased.
10172\end{sphinxadmonition}
10173
10174
10175\subsubsection{krb5\_c\_encrypt\_length -  Compute encrypted data length.}
10176\label{\detokenize{appdev/refs/api/krb5_c_encrypt_length:krb5-c-encrypt-length-compute-encrypted-data-length}}\label{\detokenize{appdev/refs/api/krb5_c_encrypt_length::doc}}\index{krb5\_c\_encrypt\_length (C function)}
10177
10178\begin{fulllineitems}
10179\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_encrypt_length:c.krb5_c_encrypt_length}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_encrypt\_length}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, size\_t\sphinxstyleemphasis{ inputlen}, size\_t *\sphinxstyleemphasis{ length}}{}
10180\end{fulllineitems}
10181
10182\begin{quote}\begin{description}
10183\item[{param}] \leavevmode
10184\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10185
10186\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
10187
10188\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inputlen} - Length of the data to be encrypted
10189
10190\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{length} - Length of the encrypted data
10191
10192\end{description}\end{quote}
10193\begin{quote}\begin{description}
10194\item[{retval}] \leavevmode\begin{itemize}
10195\item {}
101960   Success; otherwise - Kerberos error codes
10197
10198\end{itemize}
10199
10200\end{description}\end{quote}
10201
10202This function computes the length of the ciphertext produced by encrypting \sphinxstyleemphasis{inputlen} bytes including padding, confounder, and checksum.
10203
10204
10205\subsubsection{krb5\_c\_enctype\_compare -  Compare two encryption types.}
10206\label{\detokenize{appdev/refs/api/krb5_c_enctype_compare::doc}}\label{\detokenize{appdev/refs/api/krb5_c_enctype_compare:krb5-c-enctype-compare-compare-two-encryption-types}}\index{krb5\_c\_enctype\_compare (C function)}
10207
10208\begin{fulllineitems}
10209\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_enctype_compare:c.krb5_c_enctype_compare}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_enctype\_compare}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ e1}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ e2}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} *\sphinxstyleemphasis{ similar}}{}
10210\end{fulllineitems}
10211
10212\begin{quote}\begin{description}
10213\item[{param}] \leavevmode
10214\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10215
10216\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{e1} - First encryption type
10217
10218\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{e2} - Second encryption type
10219
10220\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{similar} - \sphinxstylestrong{TRUE} if types are similar, \sphinxstylestrong{FALSE} if not
10221
10222\end{description}\end{quote}
10223\begin{quote}\begin{description}
10224\item[{retval}] \leavevmode\begin{itemize}
10225\item {}
102260   Success; otherwise - Kerberos error codes
10227
10228\end{itemize}
10229
10230\end{description}\end{quote}
10231
10232This function determines whether two encryption types use the same kind of keys.
10233
10234
10235\subsubsection{krb5\_c\_free\_state -  Free a cipher state previously allocated by krb5\_c\_init\_state() .}
10236\label{\detokenize{appdev/refs/api/krb5_c_free_state:krb5-c-free-state-free-a-cipher-state-previously-allocated-by-krb5-c-init-state}}\label{\detokenize{appdev/refs/api/krb5_c_free_state::doc}}\index{krb5\_c\_free\_state (C function)}
10237
10238\begin{fulllineitems}
10239\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_free_state:c.krb5_c_free_state}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_free\_state}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ state}}{}
10240\end{fulllineitems}
10241
10242\begin{quote}\begin{description}
10243\item[{param}] \leavevmode
10244\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10245
10246\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Key
10247
10248\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{state} - Cipher state to be freed
10249
10250\end{description}\end{quote}
10251\begin{quote}\begin{description}
10252\item[{retval}] \leavevmode\begin{itemize}
10253\item {}
102540   Success; otherwise - Kerberos error codes
10255
10256\end{itemize}
10257
10258\end{description}\end{quote}
10259
10260
10261\subsubsection{krb5\_c\_fx\_cf2\_simple -  Compute the KRB-FX-CF2 combination of two keys and pepper strings.}
10262\label{\detokenize{appdev/refs/api/krb5_c_fx_cf2_simple:krb5-c-fx-cf2-simple-compute-the-krb-fx-cf2-combination-of-two-keys-and-pepper-strings}}\label{\detokenize{appdev/refs/api/krb5_c_fx_cf2_simple::doc}}\index{krb5\_c\_fx\_cf2\_simple (C function)}
10263
10264\begin{fulllineitems}
10265\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_fx_cf2_simple:c.krb5_c_fx_cf2_simple}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_fx\_cf2\_simple}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ k1}, const char *\sphinxstyleemphasis{ pepper1}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ k2}, const char *\sphinxstyleemphasis{ pepper2}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ out}}{}
10266\end{fulllineitems}
10267
10268\begin{quote}\begin{description}
10269\item[{param}] \leavevmode
10270\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10271
10272\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k1} - KDC contribution key
10273
10274\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pepper1} - String”PKINIT”
10275
10276\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k2} - Reply key
10277
10278\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pepper2} - String”KeyExchange”
10279
10280\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Output key
10281
10282\end{description}\end{quote}
10283\begin{quote}\begin{description}
10284\item[{retval}] \leavevmode\begin{itemize}
10285\item {}
102860   Success; otherwise - Kerberos error codes
10287
10288\end{itemize}
10289
10290\end{description}\end{quote}
10291
10292This function computes the KRB-FX-CF2 function over its inputs and places the results in a newly allocated keyblock. This function is simple in that it assumes that \sphinxstyleemphasis{pepper1} and \sphinxstyleemphasis{pepper2} are C strings with no internal nulls and that the enctype of the result will be the same as that of \sphinxstyleemphasis{k1} . \sphinxstyleemphasis{k1} and \sphinxstyleemphasis{k2} may be of different enctypes.
10293
10294
10295\subsubsection{krb5\_c\_init\_state -  Initialize a new cipher state.}
10296\label{\detokenize{appdev/refs/api/krb5_c_init_state:krb5-c-init-state-initialize-a-new-cipher-state}}\label{\detokenize{appdev/refs/api/krb5_c_init_state::doc}}\index{krb5\_c\_init\_state (C function)}
10297
10298\begin{fulllineitems}
10299\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_init_state:c.krb5_c_init_state}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_init\_state}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ new\_state}}{}
10300\end{fulllineitems}
10301
10302\begin{quote}\begin{description}
10303\item[{param}] \leavevmode
10304\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10305
10306\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Key
10307
10308\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
10309
10310\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{new\_state} - New cipher state
10311
10312\end{description}\end{quote}
10313\begin{quote}\begin{description}
10314\item[{retval}] \leavevmode\begin{itemize}
10315\item {}
103160   Success; otherwise - Kerberos error codes
10317
10318\end{itemize}
10319
10320\end{description}\end{quote}
10321
10322
10323\subsubsection{krb5\_c\_is\_coll\_proof\_cksum -  Test whether a checksum type is collision-proof.}
10324\label{\detokenize{appdev/refs/api/krb5_c_is_coll_proof_cksum:krb5-c-is-coll-proof-cksum-test-whether-a-checksum-type-is-collision-proof}}\label{\detokenize{appdev/refs/api/krb5_c_is_coll_proof_cksum::doc}}\index{krb5\_c\_is\_coll\_proof\_cksum (C function)}
10325
10326\begin{fulllineitems}
10327\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_is_coll_proof_cksum:c.krb5_c_is_coll_proof_cksum}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_c\_is\_coll\_proof\_cksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ ctype}}{}
10328\end{fulllineitems}
10329
10330\begin{quote}\begin{description}
10331\item[{param}] \leavevmode
10332\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctype} - Checksum type
10333
10334\end{description}\end{quote}
10335\begin{quote}\begin{description}
10336\item[{return}] \leavevmode\begin{itemize}
10337\item {}
10338TRUE if ctype is collision-proof, FALSE if it is not collision-proof or not a valid checksum type.
10339
10340\end{itemize}
10341
10342\end{description}\end{quote}
10343
10344
10345\subsubsection{krb5\_c\_is\_keyed\_cksum -  Test whether a checksum type is keyed.}
10346\label{\detokenize{appdev/refs/api/krb5_c_is_keyed_cksum::doc}}\label{\detokenize{appdev/refs/api/krb5_c_is_keyed_cksum:krb5-c-is-keyed-cksum-test-whether-a-checksum-type-is-keyed}}\index{krb5\_c\_is\_keyed\_cksum (C function)}
10347
10348\begin{fulllineitems}
10349\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_is_keyed_cksum:c.krb5_c_is_keyed_cksum}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_c\_is\_keyed\_cksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ ctype}}{}
10350\end{fulllineitems}
10351
10352\begin{quote}\begin{description}
10353\item[{param}] \leavevmode
10354\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctype} - Checksum type
10355
10356\end{description}\end{quote}
10357\begin{quote}\begin{description}
10358\item[{return}] \leavevmode\begin{itemize}
10359\item {}
10360TRUE if ctype is a keyed checksum type, FALSE otherwise.
10361
10362\end{itemize}
10363
10364\end{description}\end{quote}
10365
10366
10367\subsubsection{krb5\_c\_keyed\_checksum\_types -  Return a list of keyed checksum types usable with an encryption type.}
10368\label{\detokenize{appdev/refs/api/krb5_c_keyed_checksum_types::doc}}\label{\detokenize{appdev/refs/api/krb5_c_keyed_checksum_types:krb5-c-keyed-checksum-types-return-a-list-of-keyed-checksum-types-usable-with-an-encryption-type}}\index{krb5\_c\_keyed\_checksum\_types (C function)}
10369
10370\begin{fulllineitems}
10371\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_keyed_checksum_types:c.krb5_c_keyed_checksum_types}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_keyed\_checksum\_types}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, unsigned int *\sphinxstyleemphasis{ count}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}} **\sphinxstyleemphasis{ cksumtypes}}{}
10372\end{fulllineitems}
10373
10374\begin{quote}\begin{description}
10375\item[{param}] \leavevmode
10376\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10377
10378\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
10379
10380\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{count} - Count of allowable checksum types
10381
10382\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cksumtypes} - Array of allowable checksum types
10383
10384\end{description}\end{quote}
10385\begin{quote}\begin{description}
10386\item[{retval}] \leavevmode\begin{itemize}
10387\item {}
103880   Success; otherwise - Kerberos error codes
10389
10390\end{itemize}
10391
10392\end{description}\end{quote}
10393
10394Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_cksumtypes:c.krb5_free_cksumtypes}]{\sphinxcrossref{\sphinxcode{krb5\_free\_cksumtypes()}}}} to free \sphinxstyleemphasis{cksumtypes} when it is no longer needed.
10395
10396
10397\subsubsection{krb5\_c\_keylengths -  Return length of the specified key in bytes.}
10398\label{\detokenize{appdev/refs/api/krb5_c_keylengths::doc}}\label{\detokenize{appdev/refs/api/krb5_c_keylengths:krb5-c-keylengths-return-length-of-the-specified-key-in-bytes}}\index{krb5\_c\_keylengths (C function)}
10399
10400\begin{fulllineitems}
10401\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_keylengths:c.krb5_c_keylengths}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_keylengths}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, size\_t *\sphinxstyleemphasis{ keybytes}, size\_t *\sphinxstyleemphasis{ keylength}}{}
10402\end{fulllineitems}
10403
10404\begin{quote}\begin{description}
10405\item[{param}] \leavevmode
10406\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10407
10408\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
10409
10410\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keybytes} - Number of bytes required to make a key
10411
10412\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keylength} - Length of final key
10413
10414\end{description}\end{quote}
10415\begin{quote}\begin{description}
10416\item[{retval}] \leavevmode\begin{itemize}
10417\item {}
104180   Success; otherwise - Kerberos error codes
10419
10420\end{itemize}
10421
10422\end{description}\end{quote}
10423
10424
10425\subsubsection{krb5\_c\_make\_checksum -  Compute a checksum (operates on keyblock).}
10426\label{\detokenize{appdev/refs/api/krb5_c_make_checksum::doc}}\label{\detokenize{appdev/refs/api/krb5_c_make_checksum:krb5-c-make-checksum-compute-a-checksum-operates-on-keyblock}}\index{krb5\_c\_make\_checksum (C function)}
10427
10428\begin{fulllineitems}
10429\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_make_checksum:c.krb5_c_make_checksum}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_make\_checksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ cksumtype}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} *\sphinxstyleemphasis{ cksum}}{}
10430\end{fulllineitems}
10431
10432\begin{quote}\begin{description}
10433\item[{param}] \leavevmode
10434\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10435
10436\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type (0 for mandatory type)
10437
10438\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum
10439
10440\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
10441
10442\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Input data
10443
10444\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cksum} - Generated checksum
10445
10446\end{description}\end{quote}
10447\begin{quote}\begin{description}
10448\item[{retval}] \leavevmode\begin{itemize}
10449\item {}
104500   Success; otherwise - Kerberos error codes
10451
10452\end{itemize}
10453
10454\end{description}\end{quote}
10455
10456This function computes a checksum of type \sphinxstyleemphasis{cksumtype} over \sphinxstyleemphasis{input} , using \sphinxstyleemphasis{key} if the checksum type is a keyed checksum. If \sphinxstyleemphasis{cksumtype} is 0 and \sphinxstyleemphasis{key} is non-null, the checksum type will be the mandatory-to-implement checksum type for the key’s encryption type. The actual checksum key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the checksum type. The newly created \sphinxstyleemphasis{cksum} must be released by calling {\hyperref[\detokenize{appdev/refs/api/krb5_free_checksum_contents:c.krb5_free_checksum_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_checksum\_contents()}}}} when it is no longer needed.
10457
10458
10459\sphinxstrong{See also:}
10460
10461
10462{\hyperref[\detokenize{appdev/refs/api/krb5_c_verify_checksum:c.krb5_c_verify_checksum}]{\sphinxcrossref{\sphinxcode{krb5\_c\_verify\_checksum()}}}}
10463
10464
10465
10466\begin{sphinxadmonition}{note}{Note:}
10467This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_k_make_checksum:c.krb5_k_make_checksum}]{\sphinxcrossref{\sphinxcode{krb5\_k\_make\_checksum()}}}} , but operates on keyblock \sphinxstyleemphasis{key} .
10468\end{sphinxadmonition}
10469
10470
10471\subsubsection{krb5\_c\_make\_checksum\_iov -  Fill in a checksum element in IOV array (operates on keyblock)}
10472\label{\detokenize{appdev/refs/api/krb5_c_make_checksum_iov:krb5-c-make-checksum-iov-fill-in-a-checksum-element-in-iov-array-operates-on-keyblock}}\label{\detokenize{appdev/refs/api/krb5_c_make_checksum_iov::doc}}\index{krb5\_c\_make\_checksum\_iov (C function)}
10473
10474\begin{fulllineitems}
10475\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_make_checksum_iov:c.krb5_c_make_checksum_iov}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_make\_checksum\_iov}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ cksumtype}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{krb5\_crypto\_iov}}} *\sphinxstyleemphasis{ data}, size\_t\sphinxstyleemphasis{ num\_data}}{}
10476\end{fulllineitems}
10477
10478\begin{quote}\begin{description}
10479\item[{param}] \leavevmode
10480\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10481
10482\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type (0 for mandatory type)
10483
10484\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum
10485
10486\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
10487
10488\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array
10489
10490\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data}
10491
10492\end{description}\end{quote}
10493\begin{quote}\begin{description}
10494\item[{retval}] \leavevmode\begin{itemize}
10495\item {}
104960   Success; otherwise - Kerberos error codes
10497
10498\end{itemize}
10499
10500\end{description}\end{quote}
10501
10502Create a checksum in the {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:KRB5_CRYPTO_TYPE_CHECKSUM}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_CHECKSUM}}}} element over {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA:KRB5_CRYPTO_TYPE_DATA}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_DATA}}}} and {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY:KRB5_CRYPTO_TYPE_SIGN_ONLY}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}}}} chunks in \sphinxstyleemphasis{data} . Only the {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:KRB5_CRYPTO_TYPE_CHECKSUM}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_CHECKSUM}}}} region is modified.
10503
10504
10505\sphinxstrong{See also:}
10506
10507
10508{\hyperref[\detokenize{appdev/refs/api/krb5_c_verify_checksum_iov:c.krb5_c_verify_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_verify\_checksum\_iov()}}}}
10509
10510
10511
10512\begin{sphinxadmonition}{note}{Note:}
10513This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_k_make_checksum_iov:c.krb5_k_make_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_k\_make\_checksum\_iov()}}}} , but operates on keyblock \sphinxstyleemphasis{key} .
10514\end{sphinxadmonition}
10515
10516
10517\subsubsection{krb5\_c\_make\_random\_key -  Generate an enctype-specific random encryption key.}
10518\label{\detokenize{appdev/refs/api/krb5_c_make_random_key:krb5-c-make-random-key-generate-an-enctype-specific-random-encryption-key}}\label{\detokenize{appdev/refs/api/krb5_c_make_random_key::doc}}\index{krb5\_c\_make\_random\_key (C function)}
10519
10520\begin{fulllineitems}
10521\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_make_random_key:c.krb5_c_make_random_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_make\_random\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ k5\_random\_key}}{}
10522\end{fulllineitems}
10523
10524\begin{quote}\begin{description}
10525\item[{param}] \leavevmode
10526\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10527
10528\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type of the generated key
10529
10530\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{k5\_random\_key} - An allocated and initialized keyblock
10531
10532\end{description}\end{quote}
10533\begin{quote}\begin{description}
10534\item[{retval}] \leavevmode\begin{itemize}
10535\item {}
105360   Success; otherwise - Kerberos error codes
10537
10538\end{itemize}
10539
10540\end{description}\end{quote}
10541
10542Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock_contents:c.krb5_free_keyblock_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock\_contents()}}}} to free \sphinxstyleemphasis{k5\_random\_key} when no longer needed.
10543
10544
10545\subsubsection{krb5\_c\_padding\_length -  Return a number of padding octets.}
10546\label{\detokenize{appdev/refs/api/krb5_c_padding_length:krb5-c-padding-length-return-a-number-of-padding-octets}}\label{\detokenize{appdev/refs/api/krb5_c_padding_length::doc}}\index{krb5\_c\_padding\_length (C function)}
10547
10548\begin{fulllineitems}
10549\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_padding_length:c.krb5_c_padding_length}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_padding\_length}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, size\_t\sphinxstyleemphasis{ data\_length}, unsigned int *\sphinxstyleemphasis{ size}}{}
10550\end{fulllineitems}
10551
10552\begin{quote}\begin{description}
10553\item[{param}] \leavevmode
10554\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10555
10556\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
10557
10558\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data\_length} - Length of the plaintext to pad
10559
10560\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{size} - Number of padding octets
10561
10562\end{description}\end{quote}
10563\begin{quote}\begin{description}
10564\item[{retval}] \leavevmode\begin{itemize}
10565\item {}
105660   Success; otherwise - KRB5\_BAD\_ENCTYPE
10567
10568\end{itemize}
10569
10570\end{description}\end{quote}
10571
10572This function returns the number of the padding octets required to pad \sphinxstyleemphasis{data\_length} octets of plaintext.
10573
10574
10575\subsubsection{krb5\_c\_prf -  Generate enctype-specific pseudo-random bytes.}
10576\label{\detokenize{appdev/refs/api/krb5_c_prf:krb5-c-prf-generate-enctype-specific-pseudo-random-bytes}}\label{\detokenize{appdev/refs/api/krb5_c_prf::doc}}\index{krb5\_c\_prf (C function)}
10577
10578\begin{fulllineitems}
10579\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_prf:c.krb5_c_prf}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_prf}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ keyblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ output}}{}
10580\end{fulllineitems}
10581
10582\begin{quote}\begin{description}
10583\item[{param}] \leavevmode
10584\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10585
10586\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} - Key
10587
10588\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Input data
10589
10590\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Output data
10591
10592\end{description}\end{quote}
10593\begin{quote}\begin{description}
10594\item[{retval}] \leavevmode\begin{itemize}
10595\item {}
105960   Success; otherwise - Kerberos error codes
10597
10598\end{itemize}
10599
10600\end{description}\end{quote}
10601
10602This function selects a pseudo-random function based on \sphinxstyleemphasis{keyblock} and computes its value over \sphinxstyleemphasis{input} , placing the result into \sphinxstyleemphasis{output} . The caller must preinitialize \sphinxstyleemphasis{output} and allocate space for the result, using {\hyperref[\detokenize{appdev/refs/api/krb5_c_prf_length:c.krb5_c_prf_length}]{\sphinxcrossref{\sphinxcode{krb5\_c\_prf\_length()}}}} to determine the required length.
10603
10604
10605\subsubsection{krb5\_c\_prfplus -  Generate pseudo-random bytes using RFC 6113 PRF+.}
10606\label{\detokenize{appdev/refs/api/krb5_c_prfplus:krb5-c-prfplus-generate-pseudo-random-bytes-using-rfc-6113-prf}}\label{\detokenize{appdev/refs/api/krb5_c_prfplus::doc}}\index{krb5\_c\_prfplus (C function)}
10607
10608\begin{fulllineitems}
10609\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_prfplus:c.krb5_c_prfplus}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_prfplus}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ k}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ output}}{}
10610\end{fulllineitems}
10611
10612\begin{quote}\begin{description}
10613\item[{param}] \leavevmode
10614\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10615
10616\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k} - KDC contribution key
10617
10618\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Input data
10619
10620\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Pseudo-random output buffer
10621
10622\end{description}\end{quote}
10623\begin{quote}\begin{description}
10624\item[{return}] \leavevmode\begin{itemize}
10625\item {}
106260 on success, E2BIG if output-\textgreater{}length is too large for PRF+ to generate, ENOMEM on allocation failure, or an error code from krb5\_c\_prf()
10627
10628\end{itemize}
10629
10630\end{description}\end{quote}
10631
10632This function fills \sphinxstyleemphasis{output} with PRF+(k, input) as defined in RFC 6113 section 5.1. The caller must preinitialize \sphinxstyleemphasis{output} and allocate the desired amount of space. The length of the pseudo-random output will match the length of \sphinxstyleemphasis{output} .
10633
10634\begin{sphinxadmonition}{note}{Note:}
10635RFC 4402 defines a different PRF+ operation. This function does not implement that operation.
10636\end{sphinxadmonition}
10637
10638
10639\subsubsection{krb5\_c\_prf\_length -  Get the output length of pseudo-random functions for an encryption type.}
10640\label{\detokenize{appdev/refs/api/krb5_c_prf_length::doc}}\label{\detokenize{appdev/refs/api/krb5_c_prf_length:krb5-c-prf-length-get-the-output-length-of-pseudo-random-functions-for-an-encryption-type}}\index{krb5\_c\_prf\_length (C function)}
10641
10642\begin{fulllineitems}
10643\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_prf_length:c.krb5_c_prf_length}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_prf\_length}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, size\_t *\sphinxstyleemphasis{ len}}{}
10644\end{fulllineitems}
10645
10646\begin{quote}\begin{description}
10647\item[{param}] \leavevmode
10648\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10649
10650\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
10651
10652\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{len} - Length of PRF output
10653
10654\end{description}\end{quote}
10655\begin{quote}\begin{description}
10656\item[{retval}] \leavevmode\begin{itemize}
10657\item {}
106580   Success; otherwise - Kerberos error codes
10659
10660\end{itemize}
10661
10662\end{description}\end{quote}
10663
10664
10665\subsubsection{krb5\_c\_random\_add\_entropy -  Add entropy to the pseudo-random number generator.}
10666\label{\detokenize{appdev/refs/api/krb5_c_random_add_entropy::doc}}\label{\detokenize{appdev/refs/api/krb5_c_random_add_entropy:krb5-c-random-add-entropy-add-entropy-to-the-pseudo-random-number-generator}}\index{krb5\_c\_random\_add\_entropy (C function)}
10667
10668\begin{fulllineitems}
10669\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_random_add_entropy:c.krb5_c_random_add_entropy}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_random\_add\_entropy}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, unsigned int\sphinxstyleemphasis{ randsource}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}}{}
10670\end{fulllineitems}
10671
10672\begin{quote}\begin{description}
10673\item[{param}] \leavevmode
10674\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10675
10676\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{randsource} - Entropy source (see KRB5\_RANDSOURCE types)
10677
10678\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Data
10679
10680\end{description}\end{quote}
10681\begin{quote}\begin{description}
10682\item[{retval}] \leavevmode\begin{itemize}
10683\item {}
106840   Success; otherwise - Kerberos error codes
10685
10686\end{itemize}
10687
10688\end{description}\end{quote}
10689
10690Contribute entropy to the PRNG used by krb5 crypto operations. This may or may not affect the output of the next crypto operation requiring random data.
10691
10692
10693\subsubsection{krb5\_c\_random\_make\_octets -  Generate pseudo-random bytes.}
10694\label{\detokenize{appdev/refs/api/krb5_c_random_make_octets::doc}}\label{\detokenize{appdev/refs/api/krb5_c_random_make_octets:krb5-c-random-make-octets-generate-pseudo-random-bytes}}\index{krb5\_c\_random\_make\_octets (C function)}
10695
10696\begin{fulllineitems}
10697\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_random_make_octets:c.krb5_c_random_make_octets}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_random\_make\_octets}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}}{}
10698\end{fulllineitems}
10699
10700\begin{quote}\begin{description}
10701\item[{param}] \leavevmode
10702\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10703
10704\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} - Random data
10705
10706\end{description}\end{quote}
10707\begin{quote}\begin{description}
10708\item[{retval}] \leavevmode\begin{itemize}
10709\item {}
107100   Success; otherwise - Kerberos error codes
10711
10712\end{itemize}
10713
10714\end{description}\end{quote}
10715
10716Fills in \sphinxstyleemphasis{data} with bytes from the PRNG used by krb5 crypto operations. The caller must preinitialize \sphinxstyleemphasis{data} and allocate the desired amount of space.
10717
10718
10719\subsubsection{krb5\_c\_random\_os\_entropy -  Collect entropy from the OS if possible.}
10720\label{\detokenize{appdev/refs/api/krb5_c_random_os_entropy:krb5-c-random-os-entropy-collect-entropy-from-the-os-if-possible}}\label{\detokenize{appdev/refs/api/krb5_c_random_os_entropy::doc}}\index{krb5\_c\_random\_os\_entropy (C function)}
10721
10722\begin{fulllineitems}
10723\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_random_os_entropy:c.krb5_c_random_os_entropy}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_random\_os\_entropy}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, int\sphinxstyleemphasis{ strong}, int *\sphinxstyleemphasis{ success}}{}
10724\end{fulllineitems}
10725
10726\begin{quote}\begin{description}
10727\item[{param}] \leavevmode
10728\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10729
10730\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{strong} - Strongest available source of entropy
10731
10732\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{success} - 1 if OS provides entropy, 0 otherwise
10733
10734\end{description}\end{quote}
10735\begin{quote}\begin{description}
10736\item[{retval}] \leavevmode\begin{itemize}
10737\item {}
107380   Success; otherwise - Kerberos error codes
10739
10740\end{itemize}
10741
10742\end{description}\end{quote}
10743
10744If \sphinxstyleemphasis{strong} is non-zero, this function attempts to use the strongest available source of entropy. Setting this flag may cause the function to block on some operating systems. Good uses include seeding the PRNG for kadmind and realm setup.
10745
10746
10747\subsubsection{krb5\_c\_random\_to\_key -  Generate an enctype-specific key from random data.}
10748\label{\detokenize{appdev/refs/api/krb5_c_random_to_key:krb5-c-random-to-key-generate-an-enctype-specific-key-from-random-data}}\label{\detokenize{appdev/refs/api/krb5_c_random_to_key::doc}}\index{krb5\_c\_random\_to\_key (C function)}
10749
10750\begin{fulllineitems}
10751\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_random_to_key:c.krb5_c_random_to_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_random\_to\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ random\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ k5\_random\_key}}{}
10752\end{fulllineitems}
10753
10754\begin{quote}\begin{description}
10755\item[{param}] \leavevmode
10756\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10757
10758\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
10759
10760\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{random\_data} - Random input data
10761
10762\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{k5\_random\_key} - Resulting key
10763
10764\end{description}\end{quote}
10765\begin{quote}\begin{description}
10766\item[{retval}] \leavevmode\begin{itemize}
10767\item {}
107680   Success; otherwise - Kerberos error codes
10769
10770\end{itemize}
10771
10772\end{description}\end{quote}
10773
10774This function takes random input data \sphinxstyleemphasis{random\_data} and produces a valid key \sphinxstyleemphasis{k5\_random\_key} for a given \sphinxstyleemphasis{enctype} .
10775
10776
10777\sphinxstrong{See also:}
10778
10779
10780{\hyperref[\detokenize{appdev/refs/api/krb5_c_keylengths:c.krb5_c_keylengths}]{\sphinxcrossref{\sphinxcode{krb5\_c\_keylengths()}}}}
10781
10782
10783
10784\begin{sphinxadmonition}{note}{Note:}
10785It is assumed that \sphinxstyleemphasis{k5\_random\_key} has already been initialized and \sphinxstyleemphasis{k5\_random\_key-\textgreater{}contents} has been allocated with the correct length.
10786\end{sphinxadmonition}
10787
10788
10789\subsubsection{krb5\_c\_string\_to\_key -  Convert a string (such a password) to a key.}
10790\label{\detokenize{appdev/refs/api/krb5_c_string_to_key:krb5-c-string-to-key-convert-a-string-such-a-password-to-a-key}}\label{\detokenize{appdev/refs/api/krb5_c_string_to_key::doc}}\index{krb5\_c\_string\_to\_key (C function)}
10791
10792\begin{fulllineitems}
10793\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_string_to_key:c.krb5_c_string_to_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_string\_to\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ string}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ salt}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}}{}
10794\end{fulllineitems}
10795
10796\begin{quote}\begin{description}
10797\item[{param}] \leavevmode
10798\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10799
10800\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
10801
10802\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to be converted
10803
10804\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{salt} - Salt value
10805
10806\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Generated key
10807
10808\end{description}\end{quote}
10809\begin{quote}\begin{description}
10810\item[{retval}] \leavevmode\begin{itemize}
10811\item {}
108120   Success; otherwise - Kerberos error codes
10813
10814\end{itemize}
10815
10816\end{description}\end{quote}
10817
10818This function converts \sphinxstyleemphasis{string} to a \sphinxstyleemphasis{key} of encryption type \sphinxstyleemphasis{enctype} , using the specified \sphinxstyleemphasis{salt} . The newly created \sphinxstyleemphasis{key} must be released by calling {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock_contents:c.krb5_free_keyblock_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock\_contents()}}}} when it is no longer needed.
10819
10820
10821\subsubsection{krb5\_c\_string\_to\_key\_with\_params -  Convert a string (such as a password) to a key with additional parameters.}
10822\label{\detokenize{appdev/refs/api/krb5_c_string_to_key_with_params::doc}}\label{\detokenize{appdev/refs/api/krb5_c_string_to_key_with_params:krb5-c-string-to-key-with-params-convert-a-string-such-as-a-password-to-a-key-with-additional-parameters}}\index{krb5\_c\_string\_to\_key\_with\_params (C function)}
10823
10824\begin{fulllineitems}
10825\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_string_to_key_with_params:c.krb5_c_string_to_key_with_params}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_string\_to\_key\_with\_params}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ string}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ salt}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ params}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}}{}
10826\end{fulllineitems}
10827
10828\begin{quote}\begin{description}
10829\item[{param}] \leavevmode
10830\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10831
10832\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
10833
10834\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to be converted
10835
10836\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{salt} - Salt value
10837
10838\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{params} - Parameters
10839
10840\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Generated key
10841
10842\end{description}\end{quote}
10843\begin{quote}\begin{description}
10844\item[{retval}] \leavevmode\begin{itemize}
10845\item {}
108460   Success; otherwise - Kerberos error codes
10847
10848\end{itemize}
10849
10850\end{description}\end{quote}
10851
10852This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_c_string_to_key:c.krb5_c_string_to_key}]{\sphinxcrossref{\sphinxcode{krb5\_c\_string\_to\_key()}}}} , but also takes parameters which may affect the algorithm in an enctype-dependent way. The newly created \sphinxstyleemphasis{key} must be released by calling {\hyperref[\detokenize{appdev/refs/api/krb5_free_keyblock_contents:c.krb5_free_keyblock_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_keyblock\_contents()}}}} when it is no longer needed.
10853
10854
10855\subsubsection{krb5\_c\_valid\_cksumtype -  Verify that specified checksum type is a valid Kerberos checksum type.}
10856\label{\detokenize{appdev/refs/api/krb5_c_valid_cksumtype:krb5-c-valid-cksumtype-verify-that-specified-checksum-type-is-a-valid-kerberos-checksum-type}}\label{\detokenize{appdev/refs/api/krb5_c_valid_cksumtype::doc}}\index{krb5\_c\_valid\_cksumtype (C function)}
10857
10858\begin{fulllineitems}
10859\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_valid_cksumtype:c.krb5_c_valid_cksumtype}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_c\_valid\_cksumtype}}{{\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ ctype}}{}
10860\end{fulllineitems}
10861
10862\begin{quote}\begin{description}
10863\item[{param}] \leavevmode
10864\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctype} - Checksum type
10865
10866\end{description}\end{quote}
10867\begin{quote}\begin{description}
10868\item[{return}] \leavevmode\begin{itemize}
10869\item {}
10870TRUE if ctype is valid, FALSE if not
10871
10872\end{itemize}
10873
10874\end{description}\end{quote}
10875
10876
10877\subsubsection{krb5\_c\_valid\_enctype -  Verify that a specified encryption type is a valid Kerberos encryption type.}
10878\label{\detokenize{appdev/refs/api/krb5_c_valid_enctype:krb5-c-valid-enctype-verify-that-a-specified-encryption-type-is-a-valid-kerberos-encryption-type}}\label{\detokenize{appdev/refs/api/krb5_c_valid_enctype::doc}}\index{krb5\_c\_valid\_enctype (C function)}
10879
10880\begin{fulllineitems}
10881\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_valid_enctype:c.krb5_c_valid_enctype}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} \sphinxbfcode{krb5\_c\_valid\_enctype}}{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ ktype}}{}
10882\end{fulllineitems}
10883
10884\begin{quote}\begin{description}
10885\item[{param}] \leavevmode
10886\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ktype} - Encryption type
10887
10888\end{description}\end{quote}
10889\begin{quote}\begin{description}
10890\item[{return}] \leavevmode\begin{itemize}
10891\item {}
10892TRUE if ktype is valid, FALSE if not
10893
10894\end{itemize}
10895
10896\end{description}\end{quote}
10897
10898
10899\subsubsection{krb5\_c\_verify\_checksum -  Verify a checksum (operates on keyblock).}
10900\label{\detokenize{appdev/refs/api/krb5_c_verify_checksum:krb5-c-verify-checksum-verify-a-checksum-operates-on-keyblock}}\label{\detokenize{appdev/refs/api/krb5_c_verify_checksum::doc}}\index{krb5\_c\_verify\_checksum (C function)}
10901
10902\begin{fulllineitems}
10903\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_verify_checksum:c.krb5_c_verify_checksum}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_verify\_checksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}, const {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} *\sphinxstyleemphasis{ cksum}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} *\sphinxstyleemphasis{ valid}}{}
10904\end{fulllineitems}
10905
10906\begin{quote}\begin{description}
10907\item[{param}] \leavevmode
10908\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10909
10910\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum
10911
10912\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - \sphinxstyleemphasis{key} usage
10913
10914\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Data to be used to compute a new checksum using \sphinxstyleemphasis{key} to compare \sphinxstyleemphasis{cksum} against
10915
10916\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksum} - Checksum to be verified
10917
10918\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{valid} - Non-zero for success, zero for failure
10919
10920\end{description}\end{quote}
10921\begin{quote}\begin{description}
10922\item[{retval}] \leavevmode\begin{itemize}
10923\item {}
109240   Success; otherwise - Kerberos error codes
10925
10926\end{itemize}
10927
10928\end{description}\end{quote}
10929
10930This function verifies that \sphinxstyleemphasis{cksum} is a valid checksum for \sphinxstyleemphasis{data} . If the checksum type of \sphinxstyleemphasis{cksum} is a keyed checksum, \sphinxstyleemphasis{key} is used to verify the checksum. If the checksum type in \sphinxstyleemphasis{cksum} is 0 and \sphinxstyleemphasis{key} is not NULL, the mandatory checksum type for \sphinxstyleemphasis{key} will be used. The actual checksum key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the checksum type.
10931
10932\begin{sphinxadmonition}{note}{Note:}
10933This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_k_verify_checksum:c.krb5_k_verify_checksum}]{\sphinxcrossref{\sphinxcode{krb5\_k\_verify\_checksum()}}}} , but operates on keyblock \sphinxstyleemphasis{key} .
10934\end{sphinxadmonition}
10935
10936
10937\subsubsection{krb5\_c\_verify\_checksum\_iov -  Validate a checksum element in IOV array (operates on keyblock).}
10938\label{\detokenize{appdev/refs/api/krb5_c_verify_checksum_iov::doc}}\label{\detokenize{appdev/refs/api/krb5_c_verify_checksum_iov:krb5-c-verify-checksum-iov-validate-a-checksum-element-in-iov-array-operates-on-keyblock}}\index{krb5\_c\_verify\_checksum\_iov (C function)}
10939
10940\begin{fulllineitems}
10941\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_verify_checksum_iov:c.krb5_c_verify_checksum_iov}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_verify\_checksum\_iov}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ cksumtype}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{krb5\_crypto\_iov}}} *\sphinxstyleemphasis{ data}, size\_t\sphinxstyleemphasis{ num\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} *\sphinxstyleemphasis{ valid}}{}
10942\end{fulllineitems}
10943
10944\begin{quote}\begin{description}
10945\item[{param}] \leavevmode
10946\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10947
10948\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type (0 for mandatory type)
10949
10950\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum
10951
10952\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
10953
10954\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - IOV array
10955
10956\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data}
10957
10958\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{valid} - Non-zero for success, zero for failure
10959
10960\end{description}\end{quote}
10961\begin{quote}\begin{description}
10962\item[{retval}] \leavevmode\begin{itemize}
10963\item {}
109640   Success; otherwise - Kerberos error codes
10965
10966\end{itemize}
10967
10968\end{description}\end{quote}
10969
10970Confirm that the checksum in the {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:KRB5_CRYPTO_TYPE_CHECKSUM}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_CHECKSUM}}}} element is a valid checksum of the {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA:KRB5_CRYPTO_TYPE_DATA}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_DATA}}}} and {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY:KRB5_CRYPTO_TYPE_SIGN_ONLY}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}}}} regions in the iov.
10971
10972
10973\sphinxstrong{See also:}
10974
10975
10976{\hyperref[\detokenize{appdev/refs/api/krb5_c_make_checksum_iov:c.krb5_c_make_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_make\_checksum\_iov()}}}}
10977
10978
10979
10980\begin{sphinxadmonition}{note}{Note:}
10981This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_k_verify_checksum_iov:c.krb5_k_verify_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_k\_verify\_checksum\_iov()}}}} , but operates on keyblock \sphinxstyleemphasis{key} .
10982\end{sphinxadmonition}
10983
10984
10985\subsubsection{krb5\_cksumtype\_to\_string -  Convert a checksum type to a string.}
10986\label{\detokenize{appdev/refs/api/krb5_cksumtype_to_string::doc}}\label{\detokenize{appdev/refs/api/krb5_cksumtype_to_string:krb5-cksumtype-to-string-convert-a-checksum-type-to-a-string}}\index{krb5\_cksumtype\_to\_string (C function)}
10987
10988\begin{fulllineitems}
10989\phantomsection\label{\detokenize{appdev/refs/api/krb5_cksumtype_to_string:c.krb5_cksumtype_to_string}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cksumtype\_to\_string}}{{\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ cksumtype}, char *\sphinxstyleemphasis{ buffer}, size\_t\sphinxstyleemphasis{ buflen}}{}
10990\end{fulllineitems}
10991
10992\begin{quote}\begin{description}
10993\item[{param}] \leavevmode
10994\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type
10995
10996\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to hold converted checksum type
10997
10998\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Storage available in \sphinxstyleemphasis{buffer}
10999
11000\end{description}\end{quote}
11001\begin{quote}\begin{description}
11002\item[{retval}] \leavevmode\begin{itemize}
11003\item {}
110040   Success; otherwise - Kerberos error codes
11005
11006\end{itemize}
11007
11008\end{description}\end{quote}
11009
11010
11011\subsubsection{krb5\_decode\_authdata\_container -  Unwrap authorization data.}
11012\label{\detokenize{appdev/refs/api/krb5_decode_authdata_container::doc}}\label{\detokenize{appdev/refs/api/krb5_decode_authdata_container:krb5-decode-authdata-container-unwrap-authorization-data}}\index{krb5\_decode\_authdata\_container (C function)}
11013
11014\begin{fulllineitems}
11015\phantomsection\label{\detokenize{appdev/refs/api/krb5_decode_authdata_container:c.krb5_decode_authdata_container}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_decode\_authdata\_container}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdatatype:c.krb5_authdatatype}]{\sphinxcrossref{krb5\_authdatatype}}}\sphinxstyleemphasis{ type}, const {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} *\sphinxstyleemphasis{ container}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} ***\sphinxstyleemphasis{ authdata}}{}
11016\end{fulllineitems}
11017
11018\begin{quote}\begin{description}
11019\item[{param}] \leavevmode
11020\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11021
11022\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - \sphinxcode{KRB5\_AUTHDATA} type of \sphinxstyleemphasis{container}
11023
11024\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{container} - Authorization data to be decoded
11025
11026\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{authdata} - List of decoded authorization data
11027
11028\end{description}\end{quote}
11029\begin{quote}\begin{description}
11030\item[{retval}] \leavevmode\begin{itemize}
11031\item {}
110320   Success; otherwise - Kerberos error codes
11033
11034\end{itemize}
11035
11036\end{description}\end{quote}
11037
11038
11039\sphinxstrong{See also:}
11040
11041
11042{\hyperref[\detokenize{appdev/refs/api/krb5_encode_authdata_container:c.krb5_encode_authdata_container}]{\sphinxcrossref{\sphinxcode{krb5\_encode\_authdata\_container()}}}}
11043
11044
11045
11046
11047\subsubsection{krb5\_decode\_ticket -  Decode an ASN.1-formatted ticket.}
11048\label{\detokenize{appdev/refs/api/krb5_decode_ticket::doc}}\label{\detokenize{appdev/refs/api/krb5_decode_ticket:krb5-decode-ticket-decode-an-asn-1-formatted-ticket}}\index{krb5\_decode\_ticket (C function)}
11049
11050\begin{fulllineitems}
11051\phantomsection\label{\detokenize{appdev/refs/api/krb5_decode_ticket:c.krb5_decode_ticket}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_decode\_ticket}}{const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ code}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} **\sphinxstyleemphasis{ rep}}{}
11052\end{fulllineitems}
11053
11054\begin{quote}\begin{description}
11055\item[{param}] \leavevmode
11056\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - ASN.1-formatted ticket
11057
11058\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rep} - Decoded ticket information
11059
11060\end{description}\end{quote}
11061\begin{quote}\begin{description}
11062\item[{retval}] \leavevmode\begin{itemize}
11063\item {}
110640   Success; otherwise - Kerberos error codes
11065
11066\end{itemize}
11067
11068\end{description}\end{quote}
11069
11070
11071\subsubsection{krb5\_deltat\_to\_string -  Convert a relative time value to a string.}
11072\label{\detokenize{appdev/refs/api/krb5_deltat_to_string::doc}}\label{\detokenize{appdev/refs/api/krb5_deltat_to_string:krb5-deltat-to-string-convert-a-relative-time-value-to-a-string}}\index{krb5\_deltat\_to\_string (C function)}
11073
11074\begin{fulllineitems}
11075\phantomsection\label{\detokenize{appdev/refs/api/krb5_deltat_to_string:c.krb5_deltat_to_string}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_deltat\_to\_string}}{{\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{krb5\_deltat}}}\sphinxstyleemphasis{ deltat}, char *\sphinxstyleemphasis{ buffer}, size\_t\sphinxstyleemphasis{ buflen}}{}
11076\end{fulllineitems}
11077
11078\begin{quote}\begin{description}
11079\item[{param}] \leavevmode
11080\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{deltat} - Relative time value to convert
11081
11082\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to hold time string
11083
11084\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Storage available in \sphinxstyleemphasis{buffer}
11085
11086\end{description}\end{quote}
11087\begin{quote}\begin{description}
11088\item[{retval}] \leavevmode\begin{itemize}
11089\item {}
110900   Success; otherwise - Kerberos error codes
11091
11092\end{itemize}
11093
11094\end{description}\end{quote}
11095
11096
11097\subsubsection{krb5\_encode\_authdata\_container -  Wrap authorization data in a container.}
11098\label{\detokenize{appdev/refs/api/krb5_encode_authdata_container::doc}}\label{\detokenize{appdev/refs/api/krb5_encode_authdata_container:krb5-encode-authdata-container-wrap-authorization-data-in-a-container}}\index{krb5\_encode\_authdata\_container (C function)}
11099
11100\begin{fulllineitems}
11101\phantomsection\label{\detokenize{appdev/refs/api/krb5_encode_authdata_container:c.krb5_encode_authdata_container}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_encode\_authdata\_container}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdatatype:c.krb5_authdatatype}]{\sphinxcrossref{krb5\_authdatatype}}}\sphinxstyleemphasis{ type}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} *const *\sphinxstyleemphasis{ authdata}, {\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}} ***\sphinxstyleemphasis{ container}}{}
11102\end{fulllineitems}
11103
11104\begin{quote}\begin{description}
11105\item[{param}] \leavevmode
11106\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11107
11108\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - \sphinxcode{KRB5\_AUTHDATA} type of \sphinxstyleemphasis{container}
11109
11110\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authdata} - List of authorization data to be encoded
11111
11112\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{container} - List of encoded authorization data
11113
11114\end{description}\end{quote}
11115\begin{quote}\begin{description}
11116\item[{retval}] \leavevmode\begin{itemize}
11117\item {}
111180   Success; otherwise - Kerberos error codes
11119
11120\end{itemize}
11121
11122\end{description}\end{quote}
11123
11124The result is returned in \sphinxstyleemphasis{container} as a single-element list.
11125
11126
11127\sphinxstrong{See also:}
11128
11129
11130{\hyperref[\detokenize{appdev/refs/api/krb5_decode_authdata_container:c.krb5_decode_authdata_container}]{\sphinxcrossref{\sphinxcode{krb5\_decode\_authdata\_container()}}}}
11131
11132
11133
11134
11135\subsubsection{krb5\_enctype\_to\_name -  Convert an encryption type to a name or alias.}
11136\label{\detokenize{appdev/refs/api/krb5_enctype_to_name::doc}}\label{\detokenize{appdev/refs/api/krb5_enctype_to_name:krb5-enctype-to-name-convert-an-encryption-type-to-a-name-or-alias}}\index{krb5\_enctype\_to\_name (C function)}
11137
11138\begin{fulllineitems}
11139\phantomsection\label{\detokenize{appdev/refs/api/krb5_enctype_to_name:c.krb5_enctype_to_name}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_enctype\_to\_name}}{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}}\sphinxstyleemphasis{ shortest}, char *\sphinxstyleemphasis{ buffer}, size\_t\sphinxstyleemphasis{ buflen}}{}
11140\end{fulllineitems}
11141
11142\begin{quote}\begin{description}
11143\item[{param}] \leavevmode
11144\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
11145
11146\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{shortest} - Flag
11147
11148\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to hold encryption type string
11149
11150\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Storage available in \sphinxstyleemphasis{buffer}
11151
11152\end{description}\end{quote}
11153\begin{quote}\begin{description}
11154\item[{retval}] \leavevmode\begin{itemize}
11155\item {}
111560   Success; otherwise - Kerberos error codes
11157
11158\end{itemize}
11159
11160\end{description}\end{quote}
11161
11162If \sphinxstyleemphasis{shortest} is FALSE, this function returns the enctype’s canonical name (like”aes128-cts-hmac-sha1-96”). If \sphinxstyleemphasis{shortest} is TRUE, it return the enctype’s shortest alias (like”aes128-cts”).
11163
11164\begin{sphinxadmonition}{note}{Note:}
11165New in 1.9
11166\end{sphinxadmonition}
11167
11168
11169\subsubsection{krb5\_enctype\_to\_string -  Convert an encryption type to a string.}
11170\label{\detokenize{appdev/refs/api/krb5_enctype_to_string::doc}}\label{\detokenize{appdev/refs/api/krb5_enctype_to_string:krb5-enctype-to-string-convert-an-encryption-type-to-a-string}}\index{krb5\_enctype\_to\_string (C function)}
11171
11172\begin{fulllineitems}
11173\phantomsection\label{\detokenize{appdev/refs/api/krb5_enctype_to_string:c.krb5_enctype_to_string}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_enctype\_to\_string}}{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}, char *\sphinxstyleemphasis{ buffer}, size\_t\sphinxstyleemphasis{ buflen}}{}
11174\end{fulllineitems}
11175
11176\begin{quote}\begin{description}
11177\item[{param}] \leavevmode
11178\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
11179
11180\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to hold encryption type string
11181
11182\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Storage available in \sphinxstyleemphasis{buffer}
11183
11184\end{description}\end{quote}
11185\begin{quote}\begin{description}
11186\item[{retval}] \leavevmode\begin{itemize}
11187\item {}
111880   Success; otherwise - Kerberos error codes
11189
11190\end{itemize}
11191
11192\end{description}\end{quote}
11193
11194
11195\subsubsection{krb5\_free\_checksum -  Free a krb5\_checksum structure.}
11196\label{\detokenize{appdev/refs/api/krb5_free_checksum:krb5-free-checksum-free-a-krb5-checksum-structure}}\label{\detokenize{appdev/refs/api/krb5_free_checksum::doc}}\index{krb5\_free\_checksum (C function)}
11197
11198\begin{fulllineitems}
11199\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_checksum:c.krb5_free_checksum}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_checksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} *\sphinxstyleemphasis{ val}}{}
11200\end{fulllineitems}
11201
11202\begin{quote}\begin{description}
11203\item[{param}] \leavevmode
11204\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11205
11206\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Checksum structure to be freed
11207
11208\end{description}\end{quote}
11209
11210This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
11211
11212
11213\subsubsection{krb5\_free\_checksum\_contents -  Free the contents of a krb5\_checksum structure.}
11214\label{\detokenize{appdev/refs/api/krb5_free_checksum_contents:krb5-free-checksum-contents-free-the-contents-of-a-krb5-checksum-structure}}\label{\detokenize{appdev/refs/api/krb5_free_checksum_contents::doc}}\index{krb5\_free\_checksum\_contents (C function)}
11215
11216\begin{fulllineitems}
11217\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_checksum_contents:c.krb5_free_checksum_contents}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_checksum\_contents}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} *\sphinxstyleemphasis{ val}}{}
11218\end{fulllineitems}
11219
11220\begin{quote}\begin{description}
11221\item[{param}] \leavevmode
11222\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11223
11224\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Checksum structure to free contents of
11225
11226\end{description}\end{quote}
11227
11228This function frees the contents of \sphinxstyleemphasis{val} , but not the structure itself. It sets the checksum’s data pointer to null and (beginning in release 1.19) sets its length to zero.
11229
11230
11231\subsubsection{krb5\_free\_cksumtypes -  Free an array of checksum types.}
11232\label{\detokenize{appdev/refs/api/krb5_free_cksumtypes:krb5-free-cksumtypes-free-an-array-of-checksum-types}}\label{\detokenize{appdev/refs/api/krb5_free_cksumtypes::doc}}\index{krb5\_free\_cksumtypes (C function)}
11233
11234\begin{fulllineitems}
11235\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_cksumtypes:c.krb5_free_cksumtypes}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_cksumtypes}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}} *\sphinxstyleemphasis{ val}}{}
11236\end{fulllineitems}
11237
11238\begin{quote}\begin{description}
11239\item[{param}] \leavevmode
11240\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11241
11242\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Array of checksum types to be freed
11243
11244\end{description}\end{quote}
11245
11246
11247\subsubsection{krb5\_free\_tgt\_creds -  Free an array of credential structures.}
11248\label{\detokenize{appdev/refs/api/krb5_free_tgt_creds::doc}}\label{\detokenize{appdev/refs/api/krb5_free_tgt_creds:krb5-free-tgt-creds-free-an-array-of-credential-structures}}\index{krb5\_free\_tgt\_creds (C function)}
11249
11250\begin{fulllineitems}
11251\phantomsection\label{\detokenize{appdev/refs/api/krb5_free_tgt_creds:c.krb5_free_tgt_creds}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_free\_tgt\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} **\sphinxstyleemphasis{ tgts}}{}
11252\end{fulllineitems}
11253
11254\begin{quote}\begin{description}
11255\item[{param}] \leavevmode
11256\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11257
11258\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{tgts} - Null-terminated array of credentials to free
11259
11260\end{description}\end{quote}
11261
11262\begin{sphinxadmonition}{note}{Note:}
11263The last entry in the array \sphinxstyleemphasis{tgts} must be a NULL pointer.
11264\end{sphinxadmonition}
11265
11266
11267\subsubsection{krb5\_k\_create\_key -  Create a krb5\_key from the enctype and key data in a keyblock.}
11268\label{\detokenize{appdev/refs/api/krb5_k_create_key::doc}}\label{\detokenize{appdev/refs/api/krb5_k_create_key:krb5-k-create-key-create-a-krb5-key-from-the-enctype-and-key-data-in-a-keyblock}}\index{krb5\_k\_create\_key (C function)}
11269
11270\begin{fulllineitems}
11271\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_create_key:c.krb5_k_create_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_create\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}} *\sphinxstyleemphasis{ out}}{}
11272\end{fulllineitems}
11273
11274\begin{quote}\begin{description}
11275\item[{param}] \leavevmode
11276\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11277
11278\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key\_data} - Keyblock
11279
11280\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Opaque key
11281
11282\end{description}\end{quote}
11283\begin{quote}\begin{description}
11284\item[{retval}] \leavevmode\begin{itemize}
11285\item {}
112860   Success; otherwise - KRB5\_BAD\_ENCTYPE
11287
11288\end{itemize}
11289
11290\end{description}\end{quote}
11291
11292The reference count on a key \sphinxstyleemphasis{out} is set to 1. Use {\hyperref[\detokenize{appdev/refs/api/krb5_k_free_key:c.krb5_k_free_key}]{\sphinxcrossref{\sphinxcode{krb5\_k\_free\_key()}}}} to free \sphinxstyleemphasis{out} when it is no longer needed.
11293
11294
11295\subsubsection{krb5\_k\_decrypt -  Decrypt data using a key (operates on opaque key).}
11296\label{\detokenize{appdev/refs/api/krb5_k_decrypt:krb5-k-decrypt-decrypt-data-using-a-key-operates-on-opaque-key}}\label{\detokenize{appdev/refs/api/krb5_k_decrypt::doc}}\index{krb5\_k\_decrypt (C function)}
11297
11298\begin{fulllineitems}
11299\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_decrypt:c.krb5_k_decrypt}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_decrypt}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ cipher\_state}, const {\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ output}}{}
11300\end{fulllineitems}
11301
11302\begin{quote}\begin{description}
11303\item[{param}] \leavevmode
11304\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11305
11306\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key
11307
11308\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
11309
11310\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed
11311
11312\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Encrypted data
11313
11314\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Decrypted data
11315
11316\end{description}\end{quote}
11317\begin{quote}\begin{description}
11318\item[{retval}] \leavevmode\begin{itemize}
11319\item {}
113200   Success; otherwise - Kerberos error codes
11321
11322\end{itemize}
11323
11324\end{description}\end{quote}
11325
11326This function decrypts the data block \sphinxstyleemphasis{input} and stores the output into \sphinxstyleemphasis{output} . The actual decryption key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the encryption type. If non-null, \sphinxstyleemphasis{cipher\_state} specifies the beginning state for the decryption operation, and is updated with the state to be passed as input to the next operation.
11327
11328\begin{sphinxadmonition}{note}{Note:}
11329The caller must initialize \sphinxstyleemphasis{output} and allocate at least enough space for the result. The usual practice is to allocate an output buffer as long as the ciphertext, and let {\hyperref[\detokenize{appdev/refs/api/krb5_c_decrypt:c.krb5_c_decrypt}]{\sphinxcrossref{\sphinxcode{krb5\_c\_decrypt()}}}} trim \sphinxstyleemphasis{output-\textgreater{}length} . For some enctypes, the resulting \sphinxstyleemphasis{output-\textgreater{}length} may include padding bytes.
11330\end{sphinxadmonition}
11331
11332
11333\subsubsection{krb5\_k\_decrypt\_iov -  Decrypt data in place supporting AEAD (operates on opaque key).}
11334\label{\detokenize{appdev/refs/api/krb5_k_decrypt_iov::doc}}\label{\detokenize{appdev/refs/api/krb5_k_decrypt_iov:krb5-k-decrypt-iov-decrypt-data-in-place-supporting-aead-operates-on-opaque-key}}\index{krb5\_k\_decrypt\_iov (C function)}
11335
11336\begin{fulllineitems}
11337\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_decrypt_iov:c.krb5_k_decrypt_iov}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_decrypt\_iov}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ cipher\_state}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{krb5\_crypto\_iov}}} *\sphinxstyleemphasis{ data}, size\_t\sphinxstyleemphasis{ num\_data}}{}
11338\end{fulllineitems}
11339
11340\begin{quote}\begin{description}
11341\item[{param}] \leavevmode
11342\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11343
11344\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key
11345
11346\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
11347
11348\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed
11349
11350\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array. Modified in-place.
11351
11352\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data}
11353
11354\end{description}\end{quote}
11355\begin{quote}\begin{description}
11356\item[{retval}] \leavevmode\begin{itemize}
11357\item {}
113580   Success; otherwise - Kerberos error codes
11359
11360\end{itemize}
11361
11362\end{description}\end{quote}
11363
11364This function decrypts the data block \sphinxstyleemphasis{data} and stores the output in-place. The actual decryption key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the encryption type. If non-null, \sphinxstyleemphasis{cipher\_state} specifies the beginning state for the decryption operation, and is updated with the state to be passed as input to the next operation. The caller must allocate the right number of krb5\_crypto\_iov structures before calling into this API.
11365
11366
11367\sphinxstrong{See also:}
11368
11369
11370{\hyperref[\detokenize{appdev/refs/api/krb5_k_encrypt_iov:c.krb5_k_encrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_k\_encrypt\_iov()}}}}
11371
11372
11373
11374\begin{sphinxadmonition}{note}{Note:}
11375On return from a {\hyperref[\detokenize{appdev/refs/api/krb5_c_decrypt_iov:c.krb5_c_decrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_decrypt\_iov()}}}} call, the \sphinxstyleemphasis{data-\textgreater{}length} in the iov structure are adjusted to reflect actual lengths of the ciphertext used. For example, if the padding length is too large, the length will be reduced. Lengths are never increased.
11376\end{sphinxadmonition}
11377
11378
11379\subsubsection{krb5\_k\_encrypt -  Encrypt data using a key (operates on opaque key).}
11380\label{\detokenize{appdev/refs/api/krb5_k_encrypt:krb5-k-encrypt-encrypt-data-using-a-key-operates-on-opaque-key}}\label{\detokenize{appdev/refs/api/krb5_k_encrypt::doc}}\index{krb5\_k\_encrypt (C function)}
11381
11382\begin{fulllineitems}
11383\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_encrypt:c.krb5_k_encrypt}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_encrypt}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ cipher\_state}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}} *\sphinxstyleemphasis{ output}}{}
11384\end{fulllineitems}
11385
11386\begin{quote}\begin{description}
11387\item[{param}] \leavevmode
11388\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11389
11390\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key
11391
11392\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
11393
11394\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed
11395
11396\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Data to be encrypted
11397
11398\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Encrypted data
11399
11400\end{description}\end{quote}
11401\begin{quote}\begin{description}
11402\item[{retval}] \leavevmode\begin{itemize}
11403\item {}
114040   Success; otherwise - Kerberos error codes
11405
11406\end{itemize}
11407
11408\end{description}\end{quote}
11409
11410This function encrypts the data block \sphinxstyleemphasis{input} and stores the output into \sphinxstyleemphasis{output} . The actual encryption key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the encryption type. If non-null, \sphinxstyleemphasis{cipher\_state} specifies the beginning state for the encryption operation, and is updated with the state to be passed as input to the next operation.
11411
11412\begin{sphinxadmonition}{note}{Note:}
11413The caller must initialize \sphinxstyleemphasis{output} and allocate at least enough space for the result (using {\hyperref[\detokenize{appdev/refs/api/krb5_c_encrypt_length:c.krb5_c_encrypt_length}]{\sphinxcrossref{\sphinxcode{krb5\_c\_encrypt\_length()}}}} to determine the amount of space needed). \sphinxstyleemphasis{output-\textgreater{}length} will be set to the actual length of the ciphertext.
11414\end{sphinxadmonition}
11415
11416
11417\subsubsection{krb5\_k\_encrypt\_iov -  Encrypt data in place supporting AEAD (operates on opaque key).}
11418\label{\detokenize{appdev/refs/api/krb5_k_encrypt_iov::doc}}\label{\detokenize{appdev/refs/api/krb5_k_encrypt_iov:krb5-k-encrypt-iov-encrypt-data-in-place-supporting-aead-operates-on-opaque-key}}\index{krb5\_k\_encrypt\_iov (C function)}
11419
11420\begin{fulllineitems}
11421\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_encrypt_iov:c.krb5_k_encrypt_iov}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_encrypt\_iov}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ cipher\_state}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{krb5\_crypto\_iov}}} *\sphinxstyleemphasis{ data}, size\_t\sphinxstyleemphasis{ num\_data}}{}
11422\end{fulllineitems}
11423
11424\begin{quote}\begin{description}
11425\item[{param}] \leavevmode
11426\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11427
11428\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key
11429
11430\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
11431
11432\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed
11433
11434\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array. Modified in-place.
11435
11436\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data}
11437
11438\end{description}\end{quote}
11439\begin{quote}\begin{description}
11440\item[{retval}] \leavevmode\begin{itemize}
11441\item {}
114420   Success; otherwise - Kerberos error codes
11443
11444\end{itemize}
11445
11446\end{description}\end{quote}
11447
11448This function encrypts the data block \sphinxstyleemphasis{data} and stores the output in-place. The actual encryption key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the encryption type. If non-null, \sphinxstyleemphasis{cipher\_state} specifies the beginning state for the encryption operation, and is updated with the state to be passed as input to the next operation. The caller must allocate the right number of krb5\_crypto\_iov structures before calling into this API.
11449
11450
11451\sphinxstrong{See also:}
11452
11453
11454{\hyperref[\detokenize{appdev/refs/api/krb5_k_decrypt_iov:c.krb5_k_decrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_k\_decrypt\_iov()}}}}
11455
11456
11457
11458\begin{sphinxadmonition}{note}{Note:}
11459On return from a {\hyperref[\detokenize{appdev/refs/api/krb5_c_encrypt_iov:c.krb5_c_encrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_encrypt\_iov()}}}} call, the \sphinxstyleemphasis{data-\textgreater{}length} in the iov structure are adjusted to reflect actual lengths of the ciphertext used. For example, if the padding length is too large, the length will be reduced. Lengths are never increased.
11460\end{sphinxadmonition}
11461
11462
11463\subsubsection{krb5\_k\_free\_key -  Decrement the reference count on a key and free it if it hits zero.}
11464\label{\detokenize{appdev/refs/api/krb5_k_free_key:krb5-k-free-key-decrement-the-reference-count-on-a-key-and-free-it-if-it-hits-zero}}\label{\detokenize{appdev/refs/api/krb5_k_free_key::doc}}\index{krb5\_k\_free\_key (C function)}
11465
11466\begin{fulllineitems}
11467\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_free_key:c.krb5_k_free_key}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_k\_free\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}}{}
11468\end{fulllineitems}
11469
11470\begin{quote}\begin{description}
11471\item[{param}] \leavevmode
11472\sphinxstylestrong{context}
11473
11474\sphinxstylestrong{key}
11475
11476\end{description}\end{quote}
11477
11478
11479\subsubsection{krb5\_k\_key\_enctype -  Retrieve the enctype of a krb5\_key structure.}
11480\label{\detokenize{appdev/refs/api/krb5_k_key_enctype::doc}}\label{\detokenize{appdev/refs/api/krb5_k_key_enctype:krb5-k-key-enctype-retrieve-the-enctype-of-a-krb5-key-structure}}\index{krb5\_k\_key\_enctype (C function)}
11481
11482\begin{fulllineitems}
11483\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_key_enctype:c.krb5_k_key_enctype}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} \sphinxbfcode{krb5\_k\_key\_enctype}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}}{}
11484\end{fulllineitems}
11485
11486\begin{quote}\begin{description}
11487\item[{param}] \leavevmode
11488\sphinxstylestrong{context}
11489
11490\sphinxstylestrong{key}
11491
11492\end{description}\end{quote}
11493
11494
11495\subsubsection{krb5\_k\_key\_keyblock -  Retrieve a copy of the keyblock from a krb5\_key structure.}
11496\label{\detokenize{appdev/refs/api/krb5_k_key_keyblock:krb5-k-key-keyblock-retrieve-a-copy-of-the-keyblock-from-a-krb5-key-structure}}\label{\detokenize{appdev/refs/api/krb5_k_key_keyblock::doc}}\index{krb5\_k\_key\_keyblock (C function)}
11497
11498\begin{fulllineitems}
11499\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_key_keyblock:c.krb5_k_key_keyblock}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_key\_keyblock}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ key\_data}}{}
11500\end{fulllineitems}
11501
11502\begin{quote}\begin{description}
11503\item[{param}] \leavevmode
11504\sphinxstylestrong{context}
11505
11506\sphinxstylestrong{key}
11507
11508\sphinxstylestrong{key\_data}
11509
11510\end{description}\end{quote}
11511
11512
11513\subsubsection{krb5\_k\_make\_checksum -  Compute a checksum (operates on opaque key).}
11514\label{\detokenize{appdev/refs/api/krb5_k_make_checksum::doc}}\label{\detokenize{appdev/refs/api/krb5_k_make_checksum:krb5-k-make-checksum-compute-a-checksum-operates-on-opaque-key}}\index{krb5\_k\_make\_checksum (C function)}
11515
11516\begin{fulllineitems}
11517\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_make_checksum:c.krb5_k_make_checksum}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_make\_checksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ cksumtype}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} *\sphinxstyleemphasis{ cksum}}{}
11518\end{fulllineitems}
11519
11520\begin{quote}\begin{description}
11521\item[{param}] \leavevmode
11522\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11523
11524\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type (0 for mandatory type)
11525
11526\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum
11527
11528\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
11529
11530\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Input data
11531
11532\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cksum} - Generated checksum
11533
11534\end{description}\end{quote}
11535\begin{quote}\begin{description}
11536\item[{retval}] \leavevmode\begin{itemize}
11537\item {}
115380   Success; otherwise - Kerberos error codes
11539
11540\end{itemize}
11541
11542\end{description}\end{quote}
11543
11544This function computes a checksum of type \sphinxstyleemphasis{cksumtype} over \sphinxstyleemphasis{input} , using \sphinxstyleemphasis{key} if the checksum type is a keyed checksum. If \sphinxstyleemphasis{cksumtype} is 0 and \sphinxstyleemphasis{key} is non-null, the checksum type will be the mandatory-to-implement checksum type for the key’s encryption type. The actual checksum key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the checksum type. The newly created \sphinxstyleemphasis{cksum} must be released by calling {\hyperref[\detokenize{appdev/refs/api/krb5_free_checksum_contents:c.krb5_free_checksum_contents}]{\sphinxcrossref{\sphinxcode{krb5\_free\_checksum\_contents()}}}} when it is no longer needed.
11545
11546
11547\sphinxstrong{See also:}
11548
11549
11550{\hyperref[\detokenize{appdev/refs/api/krb5_c_verify_checksum:c.krb5_c_verify_checksum}]{\sphinxcrossref{\sphinxcode{krb5\_c\_verify\_checksum()}}}}
11551
11552
11553
11554\begin{sphinxadmonition}{note}{Note:}
11555This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_c_make_checksum:c.krb5_c_make_checksum}]{\sphinxcrossref{\sphinxcode{krb5\_c\_make\_checksum()}}}} , but operates on opaque \sphinxstyleemphasis{key} .
11556\end{sphinxadmonition}
11557
11558
11559\subsubsection{krb5\_k\_make\_checksum\_iov -  Fill in a checksum element in IOV array (operates on opaque key)}
11560\label{\detokenize{appdev/refs/api/krb5_k_make_checksum_iov::doc}}\label{\detokenize{appdev/refs/api/krb5_k_make_checksum_iov:krb5-k-make-checksum-iov-fill-in-a-checksum-element-in-iov-array-operates-on-opaque-key}}\index{krb5\_k\_make\_checksum\_iov (C function)}
11561
11562\begin{fulllineitems}
11563\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_make_checksum_iov:c.krb5_k_make_checksum_iov}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_make\_checksum\_iov}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ cksumtype}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{krb5\_crypto\_iov}}} *\sphinxstyleemphasis{ data}, size\_t\sphinxstyleemphasis{ num\_data}}{}
11564\end{fulllineitems}
11565
11566\begin{quote}\begin{description}
11567\item[{param}] \leavevmode
11568\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11569
11570\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type (0 for mandatory type)
11571
11572\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum
11573
11574\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
11575
11576\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array
11577
11578\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data}
11579
11580\end{description}\end{quote}
11581\begin{quote}\begin{description}
11582\item[{retval}] \leavevmode\begin{itemize}
11583\item {}
115840   Success; otherwise - Kerberos error codes
11585
11586\end{itemize}
11587
11588\end{description}\end{quote}
11589
11590Create a checksum in the {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:KRB5_CRYPTO_TYPE_CHECKSUM}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_CHECKSUM}}}} element over {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA:KRB5_CRYPTO_TYPE_DATA}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_DATA}}}} and {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY:KRB5_CRYPTO_TYPE_SIGN_ONLY}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}}}} chunks in \sphinxstyleemphasis{data} . Only the {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:KRB5_CRYPTO_TYPE_CHECKSUM}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_CHECKSUM}}}} region is modified.
11591
11592
11593\sphinxstrong{See also:}
11594
11595
11596{\hyperref[\detokenize{appdev/refs/api/krb5_k_verify_checksum_iov:c.krb5_k_verify_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_k\_verify\_checksum\_iov()}}}}
11597
11598
11599
11600\begin{sphinxadmonition}{note}{Note:}
11601This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_c_make_checksum_iov:c.krb5_c_make_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_make\_checksum\_iov()}}}} , but operates on opaque \sphinxstyleemphasis{key} .
11602\end{sphinxadmonition}
11603
11604
11605\subsubsection{krb5\_k\_prf -  Generate enctype-specific pseudo-random bytes (operates on opaque key).}
11606\label{\detokenize{appdev/refs/api/krb5_k_prf:krb5-k-prf-generate-enctype-specific-pseudo-random-bytes-operates-on-opaque-key}}\label{\detokenize{appdev/refs/api/krb5_k_prf::doc}}\index{krb5\_k\_prf (C function)}
11607
11608\begin{fulllineitems}
11609\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_prf:c.krb5_k_prf}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_prf}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ input}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ output}}{}
11610\end{fulllineitems}
11611
11612\begin{quote}\begin{description}
11613\item[{param}] \leavevmode
11614\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11615
11616\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Key
11617
11618\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Input data
11619
11620\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Output data
11621
11622\end{description}\end{quote}
11623\begin{quote}\begin{description}
11624\item[{retval}] \leavevmode\begin{itemize}
11625\item {}
116260   Success; otherwise - Kerberos error codes
11627
11628\end{itemize}
11629
11630\end{description}\end{quote}
11631
11632This function selects a pseudo-random function based on \sphinxstyleemphasis{key} and computes its value over \sphinxstyleemphasis{input} , placing the result into \sphinxstyleemphasis{output} . The caller must preinitialize \sphinxstyleemphasis{output} and allocate space for the result.
11633
11634\begin{sphinxadmonition}{note}{Note:}
11635This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_c_prf:c.krb5_c_prf}]{\sphinxcrossref{\sphinxcode{krb5\_c\_prf()}}}} , but operates on opaque \sphinxstyleemphasis{key} .
11636\end{sphinxadmonition}
11637
11638
11639\subsubsection{krb5\_k\_reference\_key -  Increment the reference count on a key.}
11640\label{\detokenize{appdev/refs/api/krb5_k_reference_key::doc}}\label{\detokenize{appdev/refs/api/krb5_k_reference_key:krb5-k-reference-key-increment-the-reference-count-on-a-key}}\index{krb5\_k\_reference\_key (C function)}
11641
11642\begin{fulllineitems}
11643\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_reference_key:c.krb5_k_reference_key}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_k\_reference\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}}{}
11644\end{fulllineitems}
11645
11646\begin{quote}\begin{description}
11647\item[{param}] \leavevmode
11648\sphinxstylestrong{context}
11649
11650\sphinxstylestrong{key}
11651
11652\end{description}\end{quote}
11653
11654
11655\subsubsection{krb5\_k\_verify\_checksum -  Verify a checksum (operates on opaque key).}
11656\label{\detokenize{appdev/refs/api/krb5_k_verify_checksum::doc}}\label{\detokenize{appdev/refs/api/krb5_k_verify_checksum:krb5-k-verify-checksum-verify-a-checksum-operates-on-opaque-key}}\index{krb5\_k\_verify\_checksum (C function)}
11657
11658\begin{fulllineitems}
11659\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_verify_checksum:c.krb5_k_verify_checksum}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_verify\_checksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}, const {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} *\sphinxstyleemphasis{ cksum}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} *\sphinxstyleemphasis{ valid}}{}
11660\end{fulllineitems}
11661
11662\begin{quote}\begin{description}
11663\item[{param}] \leavevmode
11664\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11665
11666\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum
11667
11668\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - \sphinxstyleemphasis{key} usage
11669
11670\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Data to be used to compute a new checksum using \sphinxstyleemphasis{key} to compare \sphinxstyleemphasis{cksum} against
11671
11672\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksum} - Checksum to be verified
11673
11674\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{valid} - Non-zero for success, zero for failure
11675
11676\end{description}\end{quote}
11677\begin{quote}\begin{description}
11678\item[{retval}] \leavevmode\begin{itemize}
11679\item {}
116800   Success; otherwise - Kerberos error codes
11681
11682\end{itemize}
11683
11684\end{description}\end{quote}
11685
11686This function verifies that \sphinxstyleemphasis{cksum} is a valid checksum for \sphinxstyleemphasis{data} . If the checksum type of \sphinxstyleemphasis{cksum} is a keyed checksum, \sphinxstyleemphasis{key} is used to verify the checksum. If the checksum type in \sphinxstyleemphasis{cksum} is 0 and \sphinxstyleemphasis{key} is not NULL, the mandatory checksum type for \sphinxstyleemphasis{key} will be used. The actual checksum key will be derived from \sphinxstyleemphasis{key} and \sphinxstyleemphasis{usage} if key derivation is specified for the checksum type.
11687
11688\begin{sphinxadmonition}{note}{Note:}
11689This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_c_verify_checksum:c.krb5_c_verify_checksum}]{\sphinxcrossref{\sphinxcode{krb5\_c\_verify\_checksum()}}}} , but operates on opaque \sphinxstyleemphasis{key} .
11690\end{sphinxadmonition}
11691
11692
11693\subsubsection{krb5\_k\_verify\_checksum\_iov -  Validate a checksum element in IOV array (operates on opaque key).}
11694\label{\detokenize{appdev/refs/api/krb5_k_verify_checksum_iov:krb5-k-verify-checksum-iov-validate-a-checksum-element-in-iov-array-operates-on-opaque-key}}\label{\detokenize{appdev/refs/api/krb5_k_verify_checksum_iov::doc}}\index{krb5\_k\_verify\_checksum\_iov (C function)}
11695
11696\begin{fulllineitems}
11697\phantomsection\label{\detokenize{appdev/refs/api/krb5_k_verify_checksum_iov:c.krb5_k_verify_checksum_iov}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_k\_verify\_checksum\_iov}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ cksumtype}, {\hyperref[\detokenize{appdev/refs/types/krb5_key:c.krb5_key}]{\sphinxcrossref{krb5\_key}}}\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}]{\sphinxcrossref{krb5\_keyusage}}}\sphinxstyleemphasis{ usage}, const {\hyperref[\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}]{\sphinxcrossref{krb5\_crypto\_iov}}} *\sphinxstyleemphasis{ data}, size\_t\sphinxstyleemphasis{ num\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}} *\sphinxstyleemphasis{ valid}}{}
11698\end{fulllineitems}
11699
11700\begin{quote}\begin{description}
11701\item[{param}] \leavevmode
11702\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11703
11704\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type (0 for mandatory type)
11705
11706\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum
11707
11708\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
11709
11710\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - IOV array
11711
11712\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data}
11713
11714\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{valid} - Non-zero for success, zero for failure
11715
11716\end{description}\end{quote}
11717\begin{quote}\begin{description}
11718\item[{retval}] \leavevmode\begin{itemize}
11719\item {}
117200   Success; otherwise - Kerberos error codes
11721
11722\end{itemize}
11723
11724\end{description}\end{quote}
11725
11726Confirm that the checksum in the {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:KRB5_CRYPTO_TYPE_CHECKSUM}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_CHECKSUM}}}} element is a valid checksum of the {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA:KRB5_CRYPTO_TYPE_DATA}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_DATA}}}} and {\hyperref[\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY:KRB5_CRYPTO_TYPE_SIGN_ONLY}]{\sphinxcrossref{\sphinxcode{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}}}} regions in the iov.
11727
11728
11729\sphinxstrong{See also:}
11730
11731
11732{\hyperref[\detokenize{appdev/refs/api/krb5_k_make_checksum_iov:c.krb5_k_make_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_k\_make\_checksum\_iov()}}}}
11733
11734
11735
11736\begin{sphinxadmonition}{note}{Note:}
11737This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_c_verify_checksum_iov:c.krb5_c_verify_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_verify\_checksum\_iov()}}}} , but operates on opaque \sphinxstyleemphasis{key} .
11738\end{sphinxadmonition}
11739
11740
11741\subsection{Legacy convenience interfaces}
11742\label{\detokenize{appdev/refs/api/index:legacy-convenience-interfaces}}
11743
11744\subsubsection{krb5\_recvauth -  Server function for sendauth protocol.}
11745\label{\detokenize{appdev/refs/api/krb5_recvauth::doc}}\label{\detokenize{appdev/refs/api/krb5_recvauth:krb5-recvauth-server-function-for-sendauth-protocol}}\index{krb5\_recvauth (C function)}
11746
11747\begin{fulllineitems}
11748\phantomsection\label{\detokenize{appdev/refs/api/krb5_recvauth:c.krb5_recvauth}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_recvauth}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}} *\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}}\sphinxstyleemphasis{ fd}, char *\sphinxstyleemphasis{ appl\_version}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ server}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}\sphinxstyleemphasis{ flags}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} **\sphinxstyleemphasis{ ticket}}{}
11749\end{fulllineitems}
11750
11751\begin{quote}\begin{description}
11752\item[{param}] \leavevmode
11753\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11754
11755\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} - Pre-existing or newly created auth context
11756
11757\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fd} - File descriptor
11758
11759\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{appl\_version} - Application protocol version to be matched against the client’s application version
11760
11761\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Server principal (NULL for any in \sphinxstyleemphasis{keytab} )
11762
11763\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Additional specifications
11764
11765\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table containing service keys
11766
11767\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ticket} - Ticket (NULL if not needed)
11768
11769\end{description}\end{quote}
11770\begin{quote}\begin{description}
11771\item[{retval}] \leavevmode\begin{itemize}
11772\item {}
117730   Success; otherwise - Kerberos error codes
11774
11775\end{itemize}
11776
11777\end{description}\end{quote}
11778
11779This function performs the server side of a sendauth/recvauth exchange by sending and receiving messages over \sphinxstyleemphasis{fd} .
11780
11781Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_ticket:c.krb5_free_ticket}]{\sphinxcrossref{\sphinxcode{krb5\_free\_ticket()}}}} to free \sphinxstyleemphasis{ticket} when it is no longer needed.
11782
11783
11784\sphinxstrong{See also:}
11785
11786
11787{\hyperref[\detokenize{appdev/refs/api/krb5_sendauth:c.krb5_sendauth}]{\sphinxcrossref{\sphinxcode{krb5\_sendauth()}}}}
11788
11789
11790
11791
11792\subsubsection{krb5\_recvauth\_version -  Server function for sendauth protocol with version parameter.}
11793\label{\detokenize{appdev/refs/api/krb5_recvauth_version::doc}}\label{\detokenize{appdev/refs/api/krb5_recvauth_version:krb5-recvauth-version-server-function-for-sendauth-protocol-with-version-parameter}}\index{krb5\_recvauth\_version (C function)}
11794
11795\begin{fulllineitems}
11796\phantomsection\label{\detokenize{appdev/refs/api/krb5_recvauth_version:c.krb5_recvauth_version}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_recvauth\_version}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}} *\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}}\sphinxstyleemphasis{ fd}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ server}, {\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}\sphinxstyleemphasis{ flags}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}} **\sphinxstyleemphasis{ ticket}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ version}}{}
11797\end{fulllineitems}
11798
11799\begin{quote}\begin{description}
11800\item[{param}] \leavevmode
11801\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11802
11803\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} - Pre-existing or newly created auth context
11804
11805\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fd} - File descriptor
11806
11807\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Server principal (NULL for any in \sphinxstyleemphasis{keytab} )
11808
11809\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Additional specifications
11810
11811\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Decryption key
11812
11813\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ticket} - Ticket (NULL if not needed)
11814
11815\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{version} - sendauth protocol version (NULL if not needed)
11816
11817\end{description}\end{quote}
11818\begin{quote}\begin{description}
11819\item[{retval}] \leavevmode\begin{itemize}
11820\item {}
118210   Success; otherwise - Kerberos error codes
11822
11823\end{itemize}
11824
11825\end{description}\end{quote}
11826
11827This function is similar to {\hyperref[\detokenize{appdev/refs/api/krb5_recvauth:c.krb5_recvauth}]{\sphinxcrossref{\sphinxcode{krb5\_recvauth()}}}} with the additional output information place into \sphinxstyleemphasis{version} .
11828
11829
11830\subsubsection{krb5\_sendauth -  Client function for sendauth protocol.}
11831\label{\detokenize{appdev/refs/api/krb5_sendauth:krb5-sendauth-client-function-for-sendauth-protocol}}\label{\detokenize{appdev/refs/api/krb5_sendauth::doc}}\index{krb5\_sendauth (C function)}
11832
11833\begin{fulllineitems}
11834\phantomsection\label{\detokenize{appdev/refs/api/krb5_sendauth:c.krb5_sendauth}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_sendauth}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}} *\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}}\sphinxstyleemphasis{ fd}, char *\sphinxstyleemphasis{ appl\_version}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ client}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ server}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ ap\_req\_options}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ in\_data}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ in\_creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_error:c.krb5_error}]{\sphinxcrossref{krb5\_error}}} **\sphinxstyleemphasis{ error}, {\hyperref[\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part}]{\sphinxcrossref{krb5\_ap\_rep\_enc\_part}}} **\sphinxstyleemphasis{ rep\_result}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} **\sphinxstyleemphasis{ out\_creds}}{}
11835\end{fulllineitems}
11836
11837\begin{quote}\begin{description}
11838\item[{param}] \leavevmode
11839\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11840
11841\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} - Pre-existing or newly created auth context
11842
11843\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fd} - File descriptor that describes network socket
11844
11845\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{appl\_version} - Application protocol version to be matched with the receiver’s application version
11846
11847\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal
11848
11849\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Server principal
11850
11851\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_options} - \sphinxcode{AP\_OPTS} options
11852
11853\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_data} - Data to be sent to the server
11854
11855\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_creds} - Input credentials, or NULL to use \sphinxstyleemphasis{ccache}
11856
11857\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache
11858
11859\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{error} - If non-null, contains KRB\_ERROR message returned from server
11860
11861\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rep\_result} - If non-null and \sphinxstyleemphasis{ap\_req\_options} is {\hyperref[\detokenize{appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED:AP_OPTS_MUTUAL_REQUIRED}]{\sphinxcrossref{\sphinxcode{AP\_OPTS\_MUTUAL\_REQUIRED}}}} , contains the result of mutual authentication exchange
11862
11863\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out\_creds} - If non-null, the retrieved credentials
11864
11865\end{description}\end{quote}
11866\begin{quote}\begin{description}
11867\item[{retval}] \leavevmode\begin{itemize}
11868\item {}
118690   Success; otherwise - Kerberos error codes
11870
11871\end{itemize}
11872
11873\end{description}\end{quote}
11874
11875This function performs the client side of a sendauth/recvauth exchange by sending and receiving messages over \sphinxstyleemphasis{fd} .
11876
11877Credentials may be specified in three ways:
11878\begin{quote}
11879\begin{itemize}
11880\item {}
11881If \sphinxstyleemphasis{in\_creds} is NULL, credentials are obtained with {\hyperref[\detokenize{appdev/refs/api/krb5_get_credentials:c.krb5_get_credentials}]{\sphinxcrossref{\sphinxcode{krb5\_get\_credentials()}}}} using the principals \sphinxstyleemphasis{client} and \sphinxstyleemphasis{server} . \sphinxstyleemphasis{server} must be non-null; \sphinxstyleemphasis{client} may NULL to use the default principal of \sphinxstyleemphasis{ccache} .
11882
11883\item {}
11884If \sphinxstyleemphasis{in\_creds} is non-null, but does not contain a ticket, credentials for the exchange are obtained with {\hyperref[\detokenize{appdev/refs/api/krb5_get_credentials:c.krb5_get_credentials}]{\sphinxcrossref{\sphinxcode{krb5\_get\_credentials()}}}} using \sphinxstyleemphasis{in\_creds} . In this case, the values of \sphinxstyleemphasis{client} and \sphinxstyleemphasis{server} are unused.
11885
11886\item {}
11887If \sphinxstyleemphasis{in\_creds} is a complete credentials structure, it used directly. In this case, the values of \sphinxstyleemphasis{client} , \sphinxstyleemphasis{server} , and \sphinxstyleemphasis{ccache} are unused.
11888
11889\end{itemize}
11890
11891If the server is using a different application protocol than that specified in \sphinxstyleemphasis{appl\_version} , an error will be returned.
11892\end{quote}
11893
11894Use {\hyperref[\detokenize{appdev/refs/api/krb5_free_creds:c.krb5_free_creds}]{\sphinxcrossref{\sphinxcode{krb5\_free\_creds()}}}} to free \sphinxstyleemphasis{out\_creds} , {\hyperref[\detokenize{appdev/refs/api/krb5_free_ap_rep_enc_part:c.krb5_free_ap_rep_enc_part}]{\sphinxcrossref{\sphinxcode{krb5\_free\_ap\_rep\_enc\_part()}}}} to free \sphinxstyleemphasis{rep\_result} , and {\hyperref[\detokenize{appdev/refs/api/krb5_free_error:c.krb5_free_error}]{\sphinxcrossref{\sphinxcode{krb5\_free\_error()}}}} to free \sphinxstyleemphasis{error} when they are no longer needed.
11895
11896
11897\sphinxstrong{See also:}
11898
11899
11900{\hyperref[\detokenize{appdev/refs/api/krb5_recvauth:c.krb5_recvauth}]{\sphinxcrossref{\sphinxcode{krb5\_recvauth()}}}}
11901
11902
11903
11904
11905\subsection{Deprecated public interfaces}
11906\label{\detokenize{appdev/refs/api/index:deprecated-public-interfaces}}
11907
11908\subsubsection{krb5\_524\_convert\_creds -  Convert a Kerberos V5 credentials to a Kerberos V4 credentials.}
11909\label{\detokenize{appdev/refs/api/krb5_524_convert_creds:krb5-524-convert-creds-convert-a-kerberos-v5-credentials-to-a-kerberos-v4-credentials}}\label{\detokenize{appdev/refs/api/krb5_524_convert_creds::doc}}\index{krb5\_524\_convert\_creds (C function)}
11910
11911\begin{fulllineitems}
11912\phantomsection\label{\detokenize{appdev/refs/api/krb5_524_convert_creds:c.krb5_524_convert_creds}}\pysiglinewithargsret{int \sphinxbfcode{krb5\_524\_convert\_creds}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ v5creds}, struct credentials *\sphinxstyleemphasis{ v4creds}}{}
11913\end{fulllineitems}
11914
11915\begin{quote}\begin{description}
11916\item[{param}] \leavevmode
11917\sphinxstylestrong{context}
11918
11919\sphinxstylestrong{v5creds}
11920
11921\sphinxstylestrong{v4creds}
11922
11923\end{description}\end{quote}
11924\begin{quote}\begin{description}
11925\item[{retval}] \leavevmode\begin{itemize}
11926\item {}
11927KRB524\_KRB4\_DISABLED   (always)
11928
11929\end{itemize}
11930
11931\end{description}\end{quote}
11932
11933\begin{sphinxadmonition}{note}{Note:}
11934Not implemented
11935\end{sphinxadmonition}
11936
11937
11938\subsubsection{krb5\_auth\_con\_getlocalsubkey}
11939\label{\detokenize{appdev/refs/api/krb5_auth_con_getlocalsubkey::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getlocalsubkey:krb5-auth-con-getlocalsubkey}}\index{krb5\_auth\_con\_getlocalsubkey (C function)}
11940
11941\begin{fulllineitems}
11942\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getlocalsubkey:c.krb5_auth_con_getlocalsubkey}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getlocalsubkey}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ keyblock}}{}
11943\end{fulllineitems}
11944
11945\begin{quote}\begin{description}
11946\item[{param}] \leavevmode
11947\sphinxstylestrong{context}
11948
11949\sphinxstylestrong{auth\_context}
11950
11951\sphinxstylestrong{keyblock}
11952
11953\end{description}\end{quote}
11954
11955DEPRECATED Replaced by krb5\_auth\_con\_getsendsubkey() .
11956
11957
11958\subsubsection{krb5\_auth\_con\_getremotesubkey}
11959\label{\detokenize{appdev/refs/api/krb5_auth_con_getremotesubkey::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_getremotesubkey:krb5-auth-con-getremotesubkey}}\index{krb5\_auth\_con\_getremotesubkey (C function)}
11960
11961\begin{fulllineitems}
11962\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_getremotesubkey:c.krb5_auth_con_getremotesubkey}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_getremotesubkey}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ keyblock}}{}
11963\end{fulllineitems}
11964
11965\begin{quote}\begin{description}
11966\item[{param}] \leavevmode
11967\sphinxstylestrong{context}
11968
11969\sphinxstylestrong{auth\_context}
11970
11971\sphinxstylestrong{keyblock}
11972
11973\end{description}\end{quote}
11974
11975DEPRECATED Replaced by krb5\_auth\_con\_getrecvsubkey() .
11976
11977
11978\subsubsection{krb5\_auth\_con\_initivector -  Cause an auth context to use cipher state.}
11979\label{\detokenize{appdev/refs/api/krb5_auth_con_initivector::doc}}\label{\detokenize{appdev/refs/api/krb5_auth_con_initivector:krb5-auth-con-initivector-cause-an-auth-context-to-use-cipher-state}}\index{krb5\_auth\_con\_initivector (C function)}
11980
11981\begin{fulllineitems}
11982\phantomsection\label{\detokenize{appdev/refs/api/krb5_auth_con_initivector:c.krb5_auth_con_initivector}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_auth\_con\_initivector}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}]{\sphinxcrossref{krb5\_auth\_context}}}\sphinxstyleemphasis{ auth\_context}}{}
11983\end{fulllineitems}
11984
11985\begin{quote}\begin{description}
11986\item[{param}] \leavevmode
11987\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11988
11989\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
11990
11991\end{description}\end{quote}
11992\begin{quote}\begin{description}
11993\item[{retval}] \leavevmode\begin{itemize}
11994\item {}
119950   Success; otherwise - Kerberos error codes
11996
11997\end{itemize}
11998
11999\end{description}\end{quote}
12000
12001Prepare \sphinxstyleemphasis{auth\_context} to use cipher state when {\hyperref[\detokenize{appdev/refs/api/krb5_mk_priv:c.krb5_mk_priv}]{\sphinxcrossref{\sphinxcode{krb5\_mk\_priv()}}}} or {\hyperref[\detokenize{appdev/refs/api/krb5_rd_priv:c.krb5_rd_priv}]{\sphinxcrossref{\sphinxcode{krb5\_rd\_priv()}}}} encrypt or decrypt data.
12002
12003
12004\subsubsection{krb5\_build\_principal\_va}
12005\label{\detokenize{appdev/refs/api/krb5_build_principal_va:krb5-build-principal-va}}\label{\detokenize{appdev/refs/api/krb5_build_principal_va::doc}}\index{krb5\_build\_principal\_va (C function)}
12006
12007\begin{fulllineitems}
12008\phantomsection\label{\detokenize{appdev/refs/api/krb5_build_principal_va:c.krb5_build_principal_va}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_build\_principal\_va}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}\sphinxstyleemphasis{ princ}, unsigned int\sphinxstyleemphasis{ rlen}, const char *\sphinxstyleemphasis{ realm}, va\_list\sphinxstyleemphasis{ ap}}{}
12009\end{fulllineitems}
12010
12011\begin{quote}\begin{description}
12012\item[{param}] \leavevmode
12013\sphinxstylestrong{context}
12014
12015\sphinxstylestrong{princ}
12016
12017\sphinxstylestrong{rlen}
12018
12019\sphinxstylestrong{realm}
12020
12021\sphinxstylestrong{ap}
12022
12023\end{description}\end{quote}
12024
12025DEPRECATED Replaced by krb5\_build\_principal\_alloc\_va() .
12026
12027
12028\subsubsection{krb5\_c\_random\_seed}
12029\label{\detokenize{appdev/refs/api/krb5_c_random_seed:krb5-c-random-seed}}\label{\detokenize{appdev/refs/api/krb5_c_random_seed::doc}}\index{krb5\_c\_random\_seed (C function)}
12030
12031\begin{fulllineitems}
12032\phantomsection\label{\detokenize{appdev/refs/api/krb5_c_random_seed:c.krb5_c_random_seed}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_c\_random\_seed}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}}{}
12033\end{fulllineitems}
12034
12035\begin{quote}\begin{description}
12036\item[{param}] \leavevmode
12037\sphinxstylestrong{context}
12038
12039\sphinxstylestrong{data}
12040
12041\end{description}\end{quote}
12042
12043DEPRECATED Replaced by krb5\_c\_* API family.
12044
12045
12046\subsubsection{krb5\_calculate\_checksum}
12047\label{\detokenize{appdev/refs/api/krb5_calculate_checksum:krb5-calculate-checksum}}\label{\detokenize{appdev/refs/api/krb5_calculate_checksum::doc}}\index{krb5\_calculate\_checksum (C function)}
12048
12049\begin{fulllineitems}
12050\phantomsection\label{\detokenize{appdev/refs/api/krb5_calculate_checksum:c.krb5_calculate_checksum}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_calculate\_checksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ ctype}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}]{\sphinxcrossref{krb5\_const\_pointer}}}\sphinxstyleemphasis{ in}, size\_t\sphinxstyleemphasis{ in\_length}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}]{\sphinxcrossref{krb5\_const\_pointer}}}\sphinxstyleemphasis{ seed}, size\_t\sphinxstyleemphasis{ seed\_length}, {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} *\sphinxstyleemphasis{ outcksum}}{}
12051\end{fulllineitems}
12052
12053\begin{quote}\begin{description}
12054\item[{param}] \leavevmode
12055\sphinxstylestrong{context}
12056
12057\sphinxstylestrong{ctype}
12058
12059\sphinxstylestrong{in}
12060
12061\sphinxstylestrong{in\_length}
12062
12063\sphinxstylestrong{seed}
12064
12065\sphinxstylestrong{seed\_length}
12066
12067\sphinxstylestrong{outcksum}
12068
12069\end{description}\end{quote}
12070
12071DEPRECATED See krb5\_c\_make\_checksum()
12072
12073
12074\subsubsection{krb5\_checksum\_size}
12075\label{\detokenize{appdev/refs/api/krb5_checksum_size:krb5-checksum-size}}\label{\detokenize{appdev/refs/api/krb5_checksum_size::doc}}\index{krb5\_checksum\_size (C function)}
12076
12077\begin{fulllineitems}
12078\phantomsection\label{\detokenize{appdev/refs/api/krb5_checksum_size:c.krb5_checksum_size}}\pysiglinewithargsret{size\_t \sphinxbfcode{krb5\_checksum\_size}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ ctype}}{}
12079\end{fulllineitems}
12080
12081\begin{quote}\begin{description}
12082\item[{param}] \leavevmode
12083\sphinxstylestrong{context}
12084
12085\sphinxstylestrong{ctype}
12086
12087\end{description}\end{quote}
12088
12089DEPRECATED See krb5\_c\_checksum\_length()
12090
12091
12092\subsubsection{krb5\_encrypt}
12093\label{\detokenize{appdev/refs/api/krb5_encrypt:krb5-encrypt}}\label{\detokenize{appdev/refs/api/krb5_encrypt::doc}}\index{krb5\_encrypt (C function)}
12094
12095\begin{fulllineitems}
12096\phantomsection\label{\detokenize{appdev/refs/api/krb5_encrypt:c.krb5_encrypt}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_encrypt}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}]{\sphinxcrossref{krb5\_const\_pointer}}}\sphinxstyleemphasis{ inptr}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}}\sphinxstyleemphasis{ outptr}, size\_t\sphinxstyleemphasis{ size}, {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}}\sphinxstyleemphasis{ ivec}}{}
12097\end{fulllineitems}
12098
12099\begin{quote}\begin{description}
12100\item[{param}] \leavevmode
12101\sphinxstylestrong{context}
12102
12103\sphinxstylestrong{inptr}
12104
12105\sphinxstylestrong{outptr}
12106
12107\sphinxstylestrong{size}
12108
12109\sphinxstylestrong{eblock}
12110
12111\sphinxstylestrong{ivec}
12112
12113\end{description}\end{quote}
12114
12115DEPRECATED Replaced by krb5\_c\_* API family.
12116
12117
12118\subsubsection{krb5\_decrypt}
12119\label{\detokenize{appdev/refs/api/krb5_decrypt:krb5-decrypt}}\label{\detokenize{appdev/refs/api/krb5_decrypt::doc}}\index{krb5\_decrypt (C function)}
12120
12121\begin{fulllineitems}
12122\phantomsection\label{\detokenize{appdev/refs/api/krb5_decrypt:c.krb5_decrypt}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_decrypt}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}]{\sphinxcrossref{krb5\_const\_pointer}}}\sphinxstyleemphasis{ inptr}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}}\sphinxstyleemphasis{ outptr}, size\_t\sphinxstyleemphasis{ size}, {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}}\sphinxstyleemphasis{ ivec}}{}
12123\end{fulllineitems}
12124
12125\begin{quote}\begin{description}
12126\item[{param}] \leavevmode
12127\sphinxstylestrong{context}
12128
12129\sphinxstylestrong{inptr}
12130
12131\sphinxstylestrong{outptr}
12132
12133\sphinxstylestrong{size}
12134
12135\sphinxstylestrong{eblock}
12136
12137\sphinxstylestrong{ivec}
12138
12139\end{description}\end{quote}
12140
12141DEPRECATED Replaced by krb5\_c\_* API family.
12142
12143
12144\subsubsection{krb5\_eblock\_enctype}
12145\label{\detokenize{appdev/refs/api/krb5_eblock_enctype::doc}}\label{\detokenize{appdev/refs/api/krb5_eblock_enctype:krb5-eblock-enctype}}\index{krb5\_eblock\_enctype (C function)}
12146
12147\begin{fulllineitems}
12148\phantomsection\label{\detokenize{appdev/refs/api/krb5_eblock_enctype:c.krb5_eblock_enctype}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} \sphinxbfcode{krb5\_eblock\_enctype}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}}{}
12149\end{fulllineitems}
12150
12151\begin{quote}\begin{description}
12152\item[{param}] \leavevmode
12153\sphinxstylestrong{context}
12154
12155\sphinxstylestrong{eblock}
12156
12157\end{description}\end{quote}
12158
12159DEPRECATED Replaced by krb5\_c\_* API family.
12160
12161
12162\subsubsection{krb5\_encrypt\_size}
12163\label{\detokenize{appdev/refs/api/krb5_encrypt_size:krb5-encrypt-size}}\label{\detokenize{appdev/refs/api/krb5_encrypt_size::doc}}\index{krb5\_encrypt\_size (C function)}
12164
12165\begin{fulllineitems}
12166\phantomsection\label{\detokenize{appdev/refs/api/krb5_encrypt_size:c.krb5_encrypt_size}}\pysiglinewithargsret{size\_t \sphinxbfcode{krb5\_encrypt\_size}}{size\_t\sphinxstyleemphasis{ length}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ crypto}}{}
12167\end{fulllineitems}
12168
12169\begin{quote}\begin{description}
12170\item[{param}] \leavevmode
12171\sphinxstylestrong{length}
12172
12173\sphinxstylestrong{crypto}
12174
12175\end{description}\end{quote}
12176
12177DEPRECATED Replaced by krb5\_c\_* API family.
12178
12179
12180\subsubsection{krb5\_finish\_key}
12181\label{\detokenize{appdev/refs/api/krb5_finish_key:krb5-finish-key}}\label{\detokenize{appdev/refs/api/krb5_finish_key::doc}}\index{krb5\_finish\_key (C function)}
12182
12183\begin{fulllineitems}
12184\phantomsection\label{\detokenize{appdev/refs/api/krb5_finish_key:c.krb5_finish_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_finish\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}}{}
12185\end{fulllineitems}
12186
12187\begin{quote}\begin{description}
12188\item[{param}] \leavevmode
12189\sphinxstylestrong{context}
12190
12191\sphinxstylestrong{eblock}
12192
12193\end{description}\end{quote}
12194
12195DEPRECATED Replaced by krb5\_c\_* API family.
12196
12197
12198\subsubsection{krb5\_finish\_random\_key}
12199\label{\detokenize{appdev/refs/api/krb5_finish_random_key:krb5-finish-random-key}}\label{\detokenize{appdev/refs/api/krb5_finish_random_key::doc}}\index{krb5\_finish\_random\_key (C function)}
12200
12201\begin{fulllineitems}
12202\phantomsection\label{\detokenize{appdev/refs/api/krb5_finish_random_key:c.krb5_finish_random_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_finish\_random\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}} *\sphinxstyleemphasis{ ptr}}{}
12203\end{fulllineitems}
12204
12205\begin{quote}\begin{description}
12206\item[{param}] \leavevmode
12207\sphinxstylestrong{context}
12208
12209\sphinxstylestrong{eblock}
12210
12211\sphinxstylestrong{ptr}
12212
12213\end{description}\end{quote}
12214
12215DEPRECATED Replaced by krb5\_c\_* API family.
12216
12217
12218\subsubsection{krb5\_cc\_gen\_new}
12219\label{\detokenize{appdev/refs/api/krb5_cc_gen_new:krb5-cc-gen-new}}\label{\detokenize{appdev/refs/api/krb5_cc_gen_new::doc}}\index{krb5\_cc\_gen\_new (C function)}
12220
12221\begin{fulllineitems}
12222\phantomsection\label{\detokenize{appdev/refs/api/krb5_cc_gen_new:c.krb5_cc_gen_new}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_cc\_gen\_new}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}} *\sphinxstyleemphasis{ cache}}{}
12223\end{fulllineitems}
12224
12225\begin{quote}\begin{description}
12226\item[{param}] \leavevmode
12227\sphinxstylestrong{context}
12228
12229\sphinxstylestrong{cache}
12230
12231\end{description}\end{quote}
12232
12233
12234\subsubsection{krb5\_get\_credentials\_renew}
12235\label{\detokenize{appdev/refs/api/krb5_get_credentials_renew:krb5-get-credentials-renew}}\label{\detokenize{appdev/refs/api/krb5_get_credentials_renew::doc}}\index{krb5\_get\_credentials\_renew (C function)}
12236
12237\begin{fulllineitems}
12238\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_credentials_renew:c.krb5_get_credentials_renew}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_credentials\_renew}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ options}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ in\_creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} **\sphinxstyleemphasis{ out\_creds}}{}
12239\end{fulllineitems}
12240
12241\begin{quote}\begin{description}
12242\item[{param}] \leavevmode
12243\sphinxstylestrong{context}
12244
12245\sphinxstylestrong{options}
12246
12247\sphinxstylestrong{ccache}
12248
12249\sphinxstylestrong{in\_creds}
12250
12251\sphinxstylestrong{out\_creds}
12252
12253\end{description}\end{quote}
12254
12255DEPRECATED Replaced by krb5\_get\_renewed\_creds.
12256
12257
12258\subsubsection{krb5\_get\_credentials\_validate}
12259\label{\detokenize{appdev/refs/api/krb5_get_credentials_validate:krb5-get-credentials-validate}}\label{\detokenize{appdev/refs/api/krb5_get_credentials_validate::doc}}\index{krb5\_get\_credentials\_validate (C function)}
12260
12261\begin{fulllineitems}
12262\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_credentials_validate:c.krb5_get_credentials_validate}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_credentials\_validate}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ options}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ in\_creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} **\sphinxstyleemphasis{ out\_creds}}{}
12263\end{fulllineitems}
12264
12265\begin{quote}\begin{description}
12266\item[{param}] \leavevmode
12267\sphinxstylestrong{context}
12268
12269\sphinxstylestrong{options}
12270
12271\sphinxstylestrong{ccache}
12272
12273\sphinxstylestrong{in\_creds}
12274
12275\sphinxstylestrong{out\_creds}
12276
12277\end{description}\end{quote}
12278
12279DEPRECATED Replaced by krb5\_get\_validated\_creds.
12280
12281
12282\subsubsection{krb5\_get\_in\_tkt\_with\_password}
12283\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_password:krb5-get-in-tkt-with-password}}\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_password::doc}}\index{krb5\_get\_in\_tkt\_with\_password (C function)}
12284
12285\begin{fulllineitems}
12286\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_password:c.krb5_get_in_tkt_with_password}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_in\_tkt\_with\_password}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ options}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *const *\sphinxstyleemphasis{ addrs}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} *\sphinxstyleemphasis{ ktypes}, {\hyperref[\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}]{\sphinxcrossref{krb5\_preauthtype}}} *\sphinxstyleemphasis{ pre\_auth\_types}, const char *\sphinxstyleemphasis{ password}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}]{\sphinxcrossref{krb5\_kdc\_rep}}} **\sphinxstyleemphasis{ ret\_as\_reply}}{}
12287\end{fulllineitems}
12288
12289\begin{quote}\begin{description}
12290\item[{param}] \leavevmode
12291\sphinxstylestrong{context}
12292
12293\sphinxstylestrong{options}
12294
12295\sphinxstylestrong{addrs}
12296
12297\sphinxstylestrong{ktypes}
12298
12299\sphinxstylestrong{pre\_auth\_types}
12300
12301\sphinxstylestrong{password}
12302
12303\sphinxstylestrong{ccache}
12304
12305\sphinxstylestrong{creds}
12306
12307\sphinxstylestrong{ret\_as\_reply}
12308
12309\end{description}\end{quote}
12310
12311DEPRECATED Replaced by krb5\_get\_init\_creds\_password() .
12312
12313
12314\subsubsection{krb5\_get\_in\_tkt\_with\_skey}
12315\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_skey:krb5-get-in-tkt-with-skey}}\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_skey::doc}}\index{krb5\_get\_in\_tkt\_with\_skey (C function)}
12316
12317\begin{fulllineitems}
12318\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_skey:c.krb5_get_in_tkt_with_skey}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_in\_tkt\_with\_skey}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ options}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *const *\sphinxstyleemphasis{ addrs}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} *\sphinxstyleemphasis{ ktypes}, {\hyperref[\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}]{\sphinxcrossref{krb5\_preauthtype}}} *\sphinxstyleemphasis{ pre\_auth\_types}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}]{\sphinxcrossref{krb5\_kdc\_rep}}} **\sphinxstyleemphasis{ ret\_as\_reply}}{}
12319\end{fulllineitems}
12320
12321\begin{quote}\begin{description}
12322\item[{param}] \leavevmode
12323\sphinxstylestrong{context}
12324
12325\sphinxstylestrong{options}
12326
12327\sphinxstylestrong{addrs}
12328
12329\sphinxstylestrong{ktypes}
12330
12331\sphinxstylestrong{pre\_auth\_types}
12332
12333\sphinxstylestrong{key}
12334
12335\sphinxstylestrong{ccache}
12336
12337\sphinxstylestrong{creds}
12338
12339\sphinxstylestrong{ret\_as\_reply}
12340
12341\end{description}\end{quote}
12342
12343DEPRECATED Replaced by krb5\_get\_init\_creds().
12344
12345
12346\subsubsection{krb5\_get\_in\_tkt\_with\_keytab}
12347\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_keytab:krb5-get-in-tkt-with-keytab}}\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_keytab::doc}}\index{krb5\_get\_in\_tkt\_with\_keytab (C function)}
12348
12349\begin{fulllineitems}
12350\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_in_tkt_with_keytab:c.krb5_get_in_tkt_with_keytab}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_get\_in\_tkt\_with\_keytab}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}\sphinxstyleemphasis{ options}, {\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}} *const *\sphinxstyleemphasis{ addrs}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} *\sphinxstyleemphasis{ ktypes}, {\hyperref[\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}]{\sphinxcrossref{krb5\_preauthtype}}} *\sphinxstyleemphasis{ pre\_auth\_types}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}]{\sphinxcrossref{krb5\_keytab}}}\sphinxstyleemphasis{ arg\_keytab}, {\hyperref[\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}]{\sphinxcrossref{krb5\_ccache}}}\sphinxstyleemphasis{ ccache}, {\hyperref[\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}]{\sphinxcrossref{krb5\_creds}}} *\sphinxstyleemphasis{ creds}, {\hyperref[\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}]{\sphinxcrossref{krb5\_kdc\_rep}}} **\sphinxstyleemphasis{ ret\_as\_reply}}{}
12351\end{fulllineitems}
12352
12353\begin{quote}\begin{description}
12354\item[{param}] \leavevmode
12355\sphinxstylestrong{context}
12356
12357\sphinxstylestrong{options}
12358
12359\sphinxstylestrong{addrs}
12360
12361\sphinxstylestrong{ktypes}
12362
12363\sphinxstylestrong{pre\_auth\_types}
12364
12365\sphinxstylestrong{arg\_keytab}
12366
12367\sphinxstylestrong{ccache}
12368
12369\sphinxstylestrong{creds}
12370
12371\sphinxstylestrong{ret\_as\_reply}
12372
12373\end{description}\end{quote}
12374
12375DEPRECATED Replaced by krb5\_get\_init\_creds\_keytab() .
12376
12377
12378\subsubsection{krb5\_get\_init\_creds\_opt\_init}
12379\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_init:krb5-get-init-creds-opt-init}}\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_init::doc}}\index{krb5\_get\_init\_creds\_opt\_init (C function)}
12380
12381\begin{fulllineitems}
12382\phantomsection\label{\detokenize{appdev/refs/api/krb5_get_init_creds_opt_init:c.krb5_get_init_creds_opt_init}}\pysiglinewithargsret{void \sphinxbfcode{krb5\_get\_init\_creds\_opt\_init}}{{\hyperref[\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}]{\sphinxcrossref{krb5\_get\_init\_creds\_opt}}} *\sphinxstyleemphasis{ opt}}{}
12383\end{fulllineitems}
12384
12385\begin{quote}\begin{description}
12386\item[{param}] \leavevmode
12387\sphinxstylestrong{opt}
12388
12389\end{description}\end{quote}
12390
12391DEPRECATED Use krb5\_get\_init\_creds\_opt\_alloc() instead.
12392
12393
12394\subsubsection{krb5\_init\_random\_key}
12395\label{\detokenize{appdev/refs/api/krb5_init_random_key:krb5-init-random-key}}\label{\detokenize{appdev/refs/api/krb5_init_random_key::doc}}\index{krb5\_init\_random\_key (C function)}
12396
12397\begin{fulllineitems}
12398\phantomsection\label{\detokenize{appdev/refs/api/krb5_init_random_key:c.krb5_init_random_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_init\_random\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ keyblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}} *\sphinxstyleemphasis{ ptr}}{}
12399\end{fulllineitems}
12400
12401\begin{quote}\begin{description}
12402\item[{param}] \leavevmode
12403\sphinxstylestrong{context}
12404
12405\sphinxstylestrong{eblock}
12406
12407\sphinxstylestrong{keyblock}
12408
12409\sphinxstylestrong{ptr}
12410
12411\end{description}\end{quote}
12412
12413DEPRECATED Replaced by krb5\_c\_* API family.
12414
12415
12416\subsubsection{krb5\_kt\_free\_entry}
12417\label{\detokenize{appdev/refs/api/krb5_kt_free_entry:krb5-kt-free-entry}}\label{\detokenize{appdev/refs/api/krb5_kt_free_entry::doc}}\index{krb5\_kt\_free\_entry (C function)}
12418
12419\begin{fulllineitems}
12420\phantomsection\label{\detokenize{appdev/refs/api/krb5_kt_free_entry:c.krb5_kt_free_entry}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_kt\_free\_entry}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}]{\sphinxcrossref{krb5\_keytab\_entry}}} *\sphinxstyleemphasis{ entry}}{}
12421\end{fulllineitems}
12422
12423\begin{quote}\begin{description}
12424\item[{param}] \leavevmode
12425\sphinxstylestrong{context}
12426
12427\sphinxstylestrong{entry}
12428
12429\end{description}\end{quote}
12430
12431DEPRECATED Use krb5\_free\_keytab\_entry\_contents instead.
12432
12433
12434\subsubsection{krb5\_random\_key}
12435\label{\detokenize{appdev/refs/api/krb5_random_key:krb5-random-key}}\label{\detokenize{appdev/refs/api/krb5_random_key::doc}}\index{krb5\_random\_key (C function)}
12436
12437\begin{fulllineitems}
12438\phantomsection\label{\detokenize{appdev/refs/api/krb5_random_key:c.krb5_random_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_random\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}]{\sphinxcrossref{krb5\_pointer}}}\sphinxstyleemphasis{ ptr}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} **\sphinxstyleemphasis{ keyblock}}{}
12439\end{fulllineitems}
12440
12441\begin{quote}\begin{description}
12442\item[{param}] \leavevmode
12443\sphinxstylestrong{context}
12444
12445\sphinxstylestrong{eblock}
12446
12447\sphinxstylestrong{ptr}
12448
12449\sphinxstylestrong{keyblock}
12450
12451\end{description}\end{quote}
12452
12453DEPRECATED Replaced by krb5\_c\_* API family.
12454
12455
12456\subsubsection{krb5\_process\_key}
12457\label{\detokenize{appdev/refs/api/krb5_process_key:krb5-process-key}}\label{\detokenize{appdev/refs/api/krb5_process_key::doc}}\index{krb5\_process\_key (C function)}
12458
12459\begin{fulllineitems}
12460\phantomsection\label{\detokenize{appdev/refs/api/krb5_process_key:c.krb5_process_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_process\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}, const {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ key}}{}
12461\end{fulllineitems}
12462
12463\begin{quote}\begin{description}
12464\item[{param}] \leavevmode
12465\sphinxstylestrong{context}
12466
12467\sphinxstylestrong{eblock}
12468
12469\sphinxstylestrong{key}
12470
12471\end{description}\end{quote}
12472
12473DEPRECATED Replaced by krb5\_c\_* API family.
12474
12475
12476\subsubsection{krb5\_string\_to\_key}
12477\label{\detokenize{appdev/refs/api/krb5_string_to_key:krb5-string-to-key}}\label{\detokenize{appdev/refs/api/krb5_string_to_key::doc}}\index{krb5\_string\_to\_key (C function)}
12478
12479\begin{fulllineitems}
12480\phantomsection\label{\detokenize{appdev/refs/api/krb5_string_to_key:c.krb5_string_to_key}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_string\_to\_key}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, const {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}} *\sphinxstyleemphasis{ keyblock}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ data}, const {\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} *\sphinxstyleemphasis{ salt}}{}
12481\end{fulllineitems}
12482
12483\begin{quote}\begin{description}
12484\item[{param}] \leavevmode
12485\sphinxstylestrong{context}
12486
12487\sphinxstylestrong{eblock}
12488
12489\sphinxstylestrong{keyblock}
12490
12491\sphinxstylestrong{data}
12492
12493\sphinxstylestrong{salt}
12494
12495\end{description}\end{quote}
12496
12497DEPRECATED See krb5\_c\_string\_to\_key()
12498
12499
12500\subsubsection{krb5\_use\_enctype}
12501\label{\detokenize{appdev/refs/api/krb5_use_enctype:krb5-use-enctype}}\label{\detokenize{appdev/refs/api/krb5_use_enctype::doc}}\index{krb5\_use\_enctype (C function)}
12502
12503\begin{fulllineitems}
12504\phantomsection\label{\detokenize{appdev/refs/api/krb5_use_enctype:c.krb5_use_enctype}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_use\_enctype}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}]{\sphinxcrossref{krb5\_encrypt\_block}}} *\sphinxstyleemphasis{ eblock}, {\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}\sphinxstyleemphasis{ enctype}}{}
12505\end{fulllineitems}
12506
12507\begin{quote}\begin{description}
12508\item[{param}] \leavevmode
12509\sphinxstylestrong{context}
12510
12511\sphinxstylestrong{eblock}
12512
12513\sphinxstylestrong{enctype}
12514
12515\end{description}\end{quote}
12516
12517DEPRECATED Replaced by krb5\_c\_* API family.
12518
12519
12520\subsubsection{krb5\_verify\_checksum}
12521\label{\detokenize{appdev/refs/api/krb5_verify_checksum::doc}}\label{\detokenize{appdev/refs/api/krb5_verify_checksum:krb5-verify-checksum}}\index{krb5\_verify\_checksum (C function)}
12522
12523\begin{fulllineitems}
12524\phantomsection\label{\detokenize{appdev/refs/api/krb5_verify_checksum:c.krb5_verify_checksum}}\pysiglinewithargsret{{\hyperref[\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}]{\sphinxcrossref{krb5\_error\_code}}} \sphinxbfcode{krb5\_verify\_checksum}}{{\hyperref[\detokenize{appdev/refs/types/krb5_context:c.krb5_context}]{\sphinxcrossref{krb5\_context}}}\sphinxstyleemphasis{ context}, {\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}\sphinxstyleemphasis{ ctype}, const {\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}} *\sphinxstyleemphasis{ cksum}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}]{\sphinxcrossref{krb5\_const\_pointer}}}\sphinxstyleemphasis{ in}, size\_t\sphinxstyleemphasis{ in\_length}, {\hyperref[\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}]{\sphinxcrossref{krb5\_const\_pointer}}}\sphinxstyleemphasis{ seed}, size\_t\sphinxstyleemphasis{ seed\_length}}{}
12525\end{fulllineitems}
12526
12527\begin{quote}\begin{description}
12528\item[{param}] \leavevmode
12529\sphinxstylestrong{context}
12530
12531\sphinxstylestrong{ctype}
12532
12533\sphinxstylestrong{cksum}
12534
12535\sphinxstylestrong{in}
12536
12537\sphinxstylestrong{in\_length}
12538
12539\sphinxstylestrong{seed}
12540
12541\sphinxstylestrong{seed\_length}
12542
12543\end{description}\end{quote}
12544
12545DEPRECATED See krb5\_c\_verify\_checksum()
12546
12547
12548\section{krb5 types and structures}
12549\label{\detokenize{appdev/refs/types/index::doc}}\label{\detokenize{appdev/refs/types/index:krb5-types-and-structures}}
12550
12551\subsection{Public}
12552\label{\detokenize{appdev/refs/types/index:public}}
12553
12554\subsubsection{krb5\_address}
12555\label{\detokenize{appdev/refs/types/krb5_address:krb5-address-struct}}\label{\detokenize{appdev/refs/types/krb5_address::doc}}\label{\detokenize{appdev/refs/types/krb5_address:krb5-address}}\index{krb5\_address (C type)}
12556
12557\begin{fulllineitems}
12558\phantomsection\label{\detokenize{appdev/refs/types/krb5_address:c.krb5_address}}\pysigline{\sphinxbfcode{krb5\_address}}
12559\end{fulllineitems}
12560
12561
12562Structure for address.
12563
12564
12565\paragraph{Declaration}
12566\label{\detokenize{appdev/refs/types/krb5_address:declaration}}
12567typedef struct \_krb5\_address  krb5\_address
12568
12569
12570\paragraph{Members}
12571\label{\detokenize{appdev/refs/types/krb5_address:members}}\index{krb5\_address.magic (C member)}
12572
12573\begin{fulllineitems}
12574\phantomsection\label{\detokenize{appdev/refs/types/krb5_address:c.krb5_address.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_address.magic}}
12575\end{fulllineitems}
12576
12577\index{krb5\_address.addrtype (C member)}
12578
12579\begin{fulllineitems}
12580\phantomsection\label{\detokenize{appdev/refs/types/krb5_address:c.krb5_address.addrtype}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_addrtype:c.krb5_addrtype}]{\sphinxcrossref{krb5\_addrtype}}}     \sphinxbfcode{krb5\_address.addrtype}}
12581\end{fulllineitems}
12582
12583\index{krb5\_address.length (C member)}
12584
12585\begin{fulllineitems}
12586\phantomsection\label{\detokenize{appdev/refs/types/krb5_address:c.krb5_address.length}}\pysigline{unsigned int      \sphinxbfcode{krb5\_address.length}}
12587\end{fulllineitems}
12588
12589\index{krb5\_address.contents (C member)}
12590
12591\begin{fulllineitems}
12592\phantomsection\label{\detokenize{appdev/refs/types/krb5_address:c.krb5_address.contents}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{krb5\_octet}}} *      \sphinxbfcode{krb5\_address.contents}}
12593\end{fulllineitems}
12594
12595
12596
12597\subsubsection{krb5\_addrtype}
12598\label{\detokenize{appdev/refs/types/krb5_addrtype:krb5-addrtype}}\label{\detokenize{appdev/refs/types/krb5_addrtype:krb5-addrtype-struct}}\label{\detokenize{appdev/refs/types/krb5_addrtype::doc}}\index{krb5\_addrtype (C type)}
12599
12600\begin{fulllineitems}
12601\phantomsection\label{\detokenize{appdev/refs/types/krb5_addrtype:c.krb5_addrtype}}\pysigline{\sphinxbfcode{krb5\_addrtype}}
12602\end{fulllineitems}
12603
12604
12605
12606\paragraph{Declaration}
12607\label{\detokenize{appdev/refs/types/krb5_addrtype:declaration}}
12608typedef krb5\_int32 krb5\_addrtype
12609
12610
12611\subsubsection{krb5\_ap\_req}
12612\label{\detokenize{appdev/refs/types/krb5_ap_req:krb5-ap-req}}\label{\detokenize{appdev/refs/types/krb5_ap_req::doc}}\label{\detokenize{appdev/refs/types/krb5_ap_req:krb5-ap-req-struct}}\index{krb5\_ap\_req (C type)}
12613
12614\begin{fulllineitems}
12615\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req}}\pysigline{\sphinxbfcode{krb5\_ap\_req}}
12616\end{fulllineitems}
12617
12618
12619Authentication header.
12620
12621
12622\paragraph{Declaration}
12623\label{\detokenize{appdev/refs/types/krb5_ap_req:declaration}}
12624typedef struct \_krb5\_ap\_req  krb5\_ap\_req
12625
12626
12627\paragraph{Members}
12628\label{\detokenize{appdev/refs/types/krb5_ap_req:members}}\index{krb5\_ap\_req.magic (C member)}
12629
12630\begin{fulllineitems}
12631\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_ap\_req.magic}}
12632\end{fulllineitems}
12633
12634\index{krb5\_ap\_req.ap\_options (C member)}
12635
12636\begin{fulllineitems}
12637\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req.ap_options}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}        \sphinxbfcode{krb5\_ap\_req.ap\_options}}
12638Requested options.
12639
12640\end{fulllineitems}
12641
12642\index{krb5\_ap\_req.ticket (C member)}
12643
12644\begin{fulllineitems}
12645\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req.ticket}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}}  *    \sphinxbfcode{krb5\_ap\_req.ticket}}
12646Ticket.
12647
12648\end{fulllineitems}
12649
12650\index{krb5\_ap\_req.authenticator (C member)}
12651
12652\begin{fulllineitems}
12653\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req.authenticator}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}}     \sphinxbfcode{krb5\_ap\_req.authenticator}}
12654Encrypted authenticator.
12655
12656\end{fulllineitems}
12657
12658
12659
12660\subsubsection{krb5\_ap\_rep}
12661\label{\detokenize{appdev/refs/types/krb5_ap_rep:krb5-ap-rep-struct}}\label{\detokenize{appdev/refs/types/krb5_ap_rep:krb5-ap-rep}}\label{\detokenize{appdev/refs/types/krb5_ap_rep::doc}}\index{krb5\_ap\_rep (C type)}
12662
12663\begin{fulllineitems}
12664\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep:c.krb5_ap_rep}}\pysigline{\sphinxbfcode{krb5\_ap\_rep}}
12665\end{fulllineitems}
12666
12667
12668C representaton of AP-REP message.
12669
12670The server’s response to a client’s request for mutual authentication.
12671
12672
12673\paragraph{Declaration}
12674\label{\detokenize{appdev/refs/types/krb5_ap_rep:declaration}}
12675typedef struct \_krb5\_ap\_rep  krb5\_ap\_rep
12676
12677
12678\paragraph{Members}
12679\label{\detokenize{appdev/refs/types/krb5_ap_rep:members}}\index{krb5\_ap\_rep.magic (C member)}
12680
12681\begin{fulllineitems}
12682\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep:c.krb5_ap_rep.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_ap\_rep.magic}}
12683\end{fulllineitems}
12684
12685\index{krb5\_ap\_rep.enc\_part (C member)}
12686
12687\begin{fulllineitems}
12688\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep:c.krb5_ap_rep.enc_part}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}}     \sphinxbfcode{krb5\_ap\_rep.enc\_part}}
12689Ciphertext of ApRepEncPart.
12690
12691\end{fulllineitems}
12692
12693
12694
12695\subsubsection{krb5\_ap\_rep\_enc\_part}
12696\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:krb5-ap-rep-enc-part-struct}}\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part::doc}}\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:krb5-ap-rep-enc-part}}\index{krb5\_ap\_rep\_enc\_part (C type)}
12697
12698\begin{fulllineitems}
12699\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part}}\pysigline{\sphinxbfcode{krb5\_ap\_rep\_enc\_part}}
12700\end{fulllineitems}
12701
12702
12703Cleartext that is encrypted and put into \sphinxcode{\_krb5\_ap\_rep} .
12704
12705
12706\paragraph{Declaration}
12707\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:declaration}}
12708typedef struct \_krb5\_ap\_rep\_enc\_part  krb5\_ap\_rep\_enc\_part
12709
12710
12711\paragraph{Members}
12712\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:members}}\index{krb5\_ap\_rep\_enc\_part.magic (C member)}
12713
12714\begin{fulllineitems}
12715\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_ap\_rep\_enc\_part.magic}}
12716\end{fulllineitems}
12717
12718\index{krb5\_ap\_rep\_enc\_part.ctime (C member)}
12719
12720\begin{fulllineitems}
12721\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part.ctime}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}    \sphinxbfcode{krb5\_ap\_rep\_enc\_part.ctime}}
12722Client time, seconds portion.
12723
12724\end{fulllineitems}
12725
12726\index{krb5\_ap\_rep\_enc\_part.cusec (C member)}
12727
12728\begin{fulllineitems}
12729\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part.cusec}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_ap\_rep\_enc\_part.cusec}}
12730Client time, microseconds portion.
12731
12732\end{fulllineitems}
12733
12734\index{krb5\_ap\_rep\_enc\_part.subkey (C member)}
12735
12736\begin{fulllineitems}
12737\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part.subkey}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}}  *  \sphinxbfcode{krb5\_ap\_rep\_enc\_part.subkey}}
12738Subkey (optional)
12739
12740\end{fulllineitems}
12741
12742\index{krb5\_ap\_rep\_enc\_part.seq\_number (C member)}
12743
12744\begin{fulllineitems}
12745\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part.seq_number}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{krb5\_ui\_4}}} \sphinxbfcode{krb5\_ap\_rep\_enc\_part.seq\_number}}
12746Sequence number.
12747
12748\end{fulllineitems}
12749
12750
12751
12752\subsubsection{krb5\_authdata}
12753\label{\detokenize{appdev/refs/types/krb5_authdata:krb5-authdata}}\label{\detokenize{appdev/refs/types/krb5_authdata::doc}}\label{\detokenize{appdev/refs/types/krb5_authdata:krb5-authdata-struct}}\index{krb5\_authdata (C type)}
12754
12755\begin{fulllineitems}
12756\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}}\pysigline{\sphinxbfcode{krb5\_authdata}}
12757\end{fulllineitems}
12758
12759
12760Structure for auth data.
12761
12762
12763\paragraph{Declaration}
12764\label{\detokenize{appdev/refs/types/krb5_authdata:declaration}}
12765typedef struct \_krb5\_authdata  krb5\_authdata
12766
12767
12768\paragraph{Members}
12769\label{\detokenize{appdev/refs/types/krb5_authdata:members}}\index{krb5\_authdata.magic (C member)}
12770
12771\begin{fulllineitems}
12772\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_authdata.magic}}
12773\end{fulllineitems}
12774
12775\index{krb5\_authdata.ad\_type (C member)}
12776
12777\begin{fulllineitems}
12778\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata.ad_type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_authdatatype:c.krb5_authdatatype}]{\sphinxcrossref{krb5\_authdatatype}}} \sphinxbfcode{krb5\_authdata.ad\_type}}
12779ADTYPE.
12780
12781\end{fulllineitems}
12782
12783\index{krb5\_authdata.length (C member)}
12784
12785\begin{fulllineitems}
12786\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata.length}}\pysigline{unsigned int      \sphinxbfcode{krb5\_authdata.length}}
12787Length of data.
12788
12789\end{fulllineitems}
12790
12791\index{krb5\_authdata.contents (C member)}
12792
12793\begin{fulllineitems}
12794\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata.contents}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{krb5\_octet}}} *      \sphinxbfcode{krb5\_authdata.contents}}
12795Data.
12796
12797\end{fulllineitems}
12798
12799
12800
12801\subsubsection{krb5\_authdatatype}
12802\label{\detokenize{appdev/refs/types/krb5_authdatatype:krb5-authdatatype-struct}}\label{\detokenize{appdev/refs/types/krb5_authdatatype::doc}}\label{\detokenize{appdev/refs/types/krb5_authdatatype:krb5-authdatatype}}\index{krb5\_authdatatype (C type)}
12803
12804\begin{fulllineitems}
12805\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdatatype:c.krb5_authdatatype}}\pysigline{\sphinxbfcode{krb5\_authdatatype}}
12806\end{fulllineitems}
12807
12808
12809
12810\paragraph{Declaration}
12811\label{\detokenize{appdev/refs/types/krb5_authdatatype:declaration}}
12812typedef krb5\_int32 krb5\_authdatatype
12813
12814
12815\subsubsection{krb5\_authenticator}
12816\label{\detokenize{appdev/refs/types/krb5_authenticator:krb5-authenticator-struct}}\label{\detokenize{appdev/refs/types/krb5_authenticator:krb5-authenticator}}\label{\detokenize{appdev/refs/types/krb5_authenticator::doc}}\index{krb5\_authenticator (C type)}
12817
12818\begin{fulllineitems}
12819\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}}\pysigline{\sphinxbfcode{krb5\_authenticator}}
12820\end{fulllineitems}
12821
12822
12823Ticket authenticator.
12824
12825The C representation of an unencrypted authenticator.
12826
12827
12828\paragraph{Declaration}
12829\label{\detokenize{appdev/refs/types/krb5_authenticator:declaration}}
12830typedef struct \_krb5\_authenticator  krb5\_authenticator
12831
12832
12833\paragraph{Members}
12834\label{\detokenize{appdev/refs/types/krb5_authenticator:members}}\index{krb5\_authenticator.magic (C member)}
12835
12836\begin{fulllineitems}
12837\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_authenticator.magic}}
12838\end{fulllineitems}
12839
12840\index{krb5\_authenticator.client (C member)}
12841
12842\begin{fulllineitems}
12843\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.client}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}    \sphinxbfcode{krb5\_authenticator.client}}
12844client name/realm
12845
12846\end{fulllineitems}
12847
12848\index{krb5\_authenticator.checksum (C member)}
12849
12850\begin{fulllineitems}
12851\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.checksum}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}}  *  \sphinxbfcode{krb5\_authenticator.checksum}}
12852checksum, includes type, optional
12853
12854\end{fulllineitems}
12855
12856\index{krb5\_authenticator.cusec (C member)}
12857
12858\begin{fulllineitems}
12859\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.cusec}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_authenticator.cusec}}
12860client usec portion
12861
12862\end{fulllineitems}
12863
12864\index{krb5\_authenticator.ctime (C member)}
12865
12866\begin{fulllineitems}
12867\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.ctime}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}    \sphinxbfcode{krb5\_authenticator.ctime}}
12868client sec portion
12869
12870\end{fulllineitems}
12871
12872\index{krb5\_authenticator.subkey (C member)}
12873
12874\begin{fulllineitems}
12875\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.subkey}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}}  *  \sphinxbfcode{krb5\_authenticator.subkey}}
12876true session key, optional
12877
12878\end{fulllineitems}
12879
12880\index{krb5\_authenticator.seq\_number (C member)}
12881
12882\begin{fulllineitems}
12883\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.seq_number}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{krb5\_ui\_4}}} \sphinxbfcode{krb5\_authenticator.seq\_number}}
12884sequence \#, optional
12885
12886\end{fulllineitems}
12887
12888\index{krb5\_authenticator.authorization\_data (C member)}
12889
12890\begin{fulllineitems}
12891\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator.authorization_data}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}}  ** \sphinxbfcode{krb5\_authenticator.authorization\_data}}
12892authoriazation data
12893
12894\end{fulllineitems}
12895
12896
12897
12898\subsubsection{krb5\_boolean}
12899\label{\detokenize{appdev/refs/types/krb5_boolean:krb5-boolean-struct}}\label{\detokenize{appdev/refs/types/krb5_boolean::doc}}\label{\detokenize{appdev/refs/types/krb5_boolean:krb5-boolean}}\index{krb5\_boolean (C type)}
12900
12901\begin{fulllineitems}
12902\phantomsection\label{\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}}\pysigline{\sphinxbfcode{krb5\_boolean}}
12903\end{fulllineitems}
12904
12905
12906
12907\paragraph{Declaration}
12908\label{\detokenize{appdev/refs/types/krb5_boolean:declaration}}
12909typedef unsigned int krb5\_boolean
12910
12911
12912\subsubsection{krb5\_checksum}
12913\label{\detokenize{appdev/refs/types/krb5_checksum::doc}}\label{\detokenize{appdev/refs/types/krb5_checksum:krb5-checksum}}\label{\detokenize{appdev/refs/types/krb5_checksum:krb5-checksum-struct}}\index{krb5\_checksum (C type)}
12914
12915\begin{fulllineitems}
12916\phantomsection\label{\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}}\pysigline{\sphinxbfcode{krb5\_checksum}}
12917\end{fulllineitems}
12918
12919
12920
12921\paragraph{Declaration}
12922\label{\detokenize{appdev/refs/types/krb5_checksum:declaration}}
12923typedef struct \_krb5\_checksum  krb5\_checksum
12924
12925
12926\paragraph{Members}
12927\label{\detokenize{appdev/refs/types/krb5_checksum:members}}\index{krb5\_checksum.magic (C member)}
12928
12929\begin{fulllineitems}
12930\phantomsection\label{\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_checksum.magic}}
12931\end{fulllineitems}
12932
12933\index{krb5\_checksum.checksum\_type (C member)}
12934
12935\begin{fulllineitems}
12936\phantomsection\label{\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum.checksum_type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}]{\sphinxcrossref{krb5\_cksumtype}}}    \sphinxbfcode{krb5\_checksum.checksum\_type}}
12937\end{fulllineitems}
12938
12939\index{krb5\_checksum.length (C member)}
12940
12941\begin{fulllineitems}
12942\phantomsection\label{\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum.length}}\pysigline{unsigned int      \sphinxbfcode{krb5\_checksum.length}}
12943\end{fulllineitems}
12944
12945\index{krb5\_checksum.contents (C member)}
12946
12947\begin{fulllineitems}
12948\phantomsection\label{\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum.contents}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{krb5\_octet}}} *      \sphinxbfcode{krb5\_checksum.contents}}
12949\end{fulllineitems}
12950
12951
12952
12953\subsubsection{krb5\_const\_pointer}
12954\label{\detokenize{appdev/refs/types/krb5_const_pointer:krb5-const-pointer}}\label{\detokenize{appdev/refs/types/krb5_const_pointer::doc}}\label{\detokenize{appdev/refs/types/krb5_const_pointer:krb5-const-pointer-struct}}\index{krb5\_const\_pointer (C type)}
12955
12956\begin{fulllineitems}
12957\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}}\pysigline{\sphinxbfcode{krb5\_const\_pointer}}
12958\end{fulllineitems}
12959
12960
12961
12962\paragraph{Declaration}
12963\label{\detokenize{appdev/refs/types/krb5_const_pointer:declaration}}
12964typedef void const* krb5\_const\_pointer
12965
12966
12967\subsubsection{krb5\_const\_principal}
12968\label{\detokenize{appdev/refs/types/krb5_const_principal:krb5-const-principal-struct}}\label{\detokenize{appdev/refs/types/krb5_const_principal:krb5-const-principal}}\label{\detokenize{appdev/refs/types/krb5_const_principal::doc}}\index{krb5\_const\_principal (C type)}
12969
12970\begin{fulllineitems}
12971\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}}\pysigline{\sphinxbfcode{krb5\_const\_principal}}
12972\end{fulllineitems}
12973
12974
12975Constant version of {\hyperref[\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_data}}}} .
12976
12977
12978\paragraph{Declaration}
12979\label{\detokenize{appdev/refs/types/krb5_const_principal:declaration}}
12980typedef const krb5\_principal\_data* krb5\_const\_principal
12981
12982
12983\paragraph{Members}
12984\label{\detokenize{appdev/refs/types/krb5_const_principal:members}}\index{krb5\_const\_principal.magic (C member)}
12985
12986\begin{fulllineitems}
12987\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_const\_principal.magic}}
12988\end{fulllineitems}
12989
12990\index{krb5\_const\_principal.realm (C member)}
12991
12992\begin{fulllineitems}
12993\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal.realm}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_const\_principal.realm}}
12994\end{fulllineitems}
12995
12996\index{krb5\_const\_principal.data (C member)}
12997
12998\begin{fulllineitems}
12999\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal.data}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}}  *      \sphinxbfcode{krb5\_const\_principal.data}}
13000An array of strings.
13001
13002\end{fulllineitems}
13003
13004\index{krb5\_const\_principal.length (C member)}
13005
13006\begin{fulllineitems}
13007\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal.length}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_const\_principal.length}}
13008\end{fulllineitems}
13009
13010\index{krb5\_const\_principal.type (C member)}
13011
13012\begin{fulllineitems}
13013\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal.type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_const\_principal.type}}
13014\end{fulllineitems}
13015
13016
13017
13018\subsubsection{krb5\_cred}
13019\label{\detokenize{appdev/refs/types/krb5_cred:krb5-cred-struct}}\label{\detokenize{appdev/refs/types/krb5_cred::doc}}\label{\detokenize{appdev/refs/types/krb5_cred:krb5-cred}}\index{krb5\_cred (C type)}
13020
13021\begin{fulllineitems}
13022\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred}}\pysigline{\sphinxbfcode{krb5\_cred}}
13023\end{fulllineitems}
13024
13025
13026Credentials data structure.
13027
13028
13029\paragraph{Declaration}
13030\label{\detokenize{appdev/refs/types/krb5_cred:declaration}}
13031typedef struct \_krb5\_cred  krb5\_cred
13032
13033
13034\paragraph{Members}
13035\label{\detokenize{appdev/refs/types/krb5_cred:members}}\index{krb5\_cred.magic (C member)}
13036
13037\begin{fulllineitems}
13038\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_cred.magic}}
13039\end{fulllineitems}
13040
13041\index{krb5\_cred.tickets (C member)}
13042
13043\begin{fulllineitems}
13044\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred.tickets}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}}  **   \sphinxbfcode{krb5\_cred.tickets}}
13045Tickets.
13046
13047\end{fulllineitems}
13048
13049\index{krb5\_cred.enc\_part (C member)}
13050
13051\begin{fulllineitems}
13052\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred.enc_part}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}}     \sphinxbfcode{krb5\_cred.enc\_part}}
13053Encrypted part.
13054
13055\end{fulllineitems}
13056
13057\index{krb5\_cred.enc\_part2 (C member)}
13058
13059\begin{fulllineitems}
13060\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred.enc_part2}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part}]{\sphinxcrossref{krb5\_cred\_enc\_part}}}  *     \sphinxbfcode{krb5\_cred.enc\_part2}}
13061Unencrypted version, if available.
13062
13063\end{fulllineitems}
13064
13065
13066
13067\subsubsection{krb5\_cred\_enc\_part}
13068\label{\detokenize{appdev/refs/types/krb5_cred_enc_part::doc}}\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:krb5-cred-enc-part}}\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:krb5-cred-enc-part-struct}}\index{krb5\_cred\_enc\_part (C type)}
13069
13070\begin{fulllineitems}
13071\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part}}\pysigline{\sphinxbfcode{krb5\_cred\_enc\_part}}
13072\end{fulllineitems}
13073
13074
13075Cleartext credentials information.
13076
13077
13078\paragraph{Declaration}
13079\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:declaration}}
13080typedef struct \_krb5\_cred\_enc\_part  krb5\_cred\_enc\_part
13081
13082
13083\paragraph{Members}
13084\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:members}}\index{krb5\_cred\_enc\_part.magic (C member)}
13085
13086\begin{fulllineitems}
13087\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_cred\_enc\_part.magic}}
13088\end{fulllineitems}
13089
13090\index{krb5\_cred\_enc\_part.nonce (C member)}
13091
13092\begin{fulllineitems}
13093\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.nonce}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_cred\_enc\_part.nonce}}
13094Nonce (optional)
13095
13096\end{fulllineitems}
13097
13098\index{krb5\_cred\_enc\_part.timestamp (C member)}
13099
13100\begin{fulllineitems}
13101\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.timestamp}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}    \sphinxbfcode{krb5\_cred\_enc\_part.timestamp}}
13102Generation time, seconds portion.
13103
13104\end{fulllineitems}
13105
13106\index{krb5\_cred\_enc\_part.usec (C member)}
13107
13108\begin{fulllineitems}
13109\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.usec}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_cred\_enc\_part.usec}}
13110Generation time, microseconds portion.
13111
13112\end{fulllineitems}
13113
13114\index{krb5\_cred\_enc\_part.s\_address (C member)}
13115
13116\begin{fulllineitems}
13117\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.s_address}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}}  *   \sphinxbfcode{krb5\_cred\_enc\_part.s\_address}}
13118Sender address (optional)
13119
13120\end{fulllineitems}
13121
13122\index{krb5\_cred\_enc\_part.r\_address (C member)}
13123
13124\begin{fulllineitems}
13125\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.r_address}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}}  *   \sphinxbfcode{krb5\_cred\_enc\_part.r\_address}}
13126Recipient address (optional)
13127
13128\end{fulllineitems}
13129
13130\index{krb5\_cred\_enc\_part.ticket\_info (C member)}
13131
13132\begin{fulllineitems}
13133\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part.ticket_info}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info}]{\sphinxcrossref{krb5\_cred\_info}}}  **        \sphinxbfcode{krb5\_cred\_enc\_part.ticket\_info}}
13134\end{fulllineitems}
13135
13136
13137
13138\subsubsection{krb5\_cred\_info}
13139\label{\detokenize{appdev/refs/types/krb5_cred_info:krb5-cred-info-struct}}\label{\detokenize{appdev/refs/types/krb5_cred_info::doc}}\label{\detokenize{appdev/refs/types/krb5_cred_info:krb5-cred-info}}\index{krb5\_cred\_info (C type)}
13140
13141\begin{fulllineitems}
13142\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info}}\pysigline{\sphinxbfcode{krb5\_cred\_info}}
13143\end{fulllineitems}
13144
13145
13146Credentials information inserted into \sphinxstyleemphasis{EncKrbCredPart} .
13147
13148
13149\paragraph{Declaration}
13150\label{\detokenize{appdev/refs/types/krb5_cred_info:declaration}}
13151typedef struct \_krb5\_cred\_info  krb5\_cred\_info
13152
13153
13154\paragraph{Members}
13155\label{\detokenize{appdev/refs/types/krb5_cred_info:members}}\index{krb5\_cred\_info.magic (C member)}
13156
13157\begin{fulllineitems}
13158\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_cred\_info.magic}}
13159\end{fulllineitems}
13160
13161\index{krb5\_cred\_info.session (C member)}
13162
13163\begin{fulllineitems}
13164\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.session}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}}  *  \sphinxbfcode{krb5\_cred\_info.session}}
13165Session key used to encrypt ticket.
13166
13167\end{fulllineitems}
13168
13169\index{krb5\_cred\_info.client (C member)}
13170
13171\begin{fulllineitems}
13172\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.client}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}    \sphinxbfcode{krb5\_cred\_info.client}}
13173Client principal and realm.
13174
13175\end{fulllineitems}
13176
13177\index{krb5\_cred\_info.server (C member)}
13178
13179\begin{fulllineitems}
13180\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.server}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}    \sphinxbfcode{krb5\_cred\_info.server}}
13181Server principal and realm.
13182
13183\end{fulllineitems}
13184
13185\index{krb5\_cred\_info.flags (C member)}
13186
13187\begin{fulllineitems}
13188\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.flags}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}        \sphinxbfcode{krb5\_cred\_info.flags}}
13189Ticket flags.
13190
13191\end{fulllineitems}
13192
13193\index{krb5\_cred\_info.times (C member)}
13194
13195\begin{fulllineitems}
13196\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.times}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{krb5\_ticket\_times}}} \sphinxbfcode{krb5\_cred\_info.times}}
13197Auth, start, end, renew\_till.
13198
13199\end{fulllineitems}
13200
13201\index{krb5\_cred\_info.caddrs (C member)}
13202
13203\begin{fulllineitems}
13204\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info.caddrs}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}}  **  \sphinxbfcode{krb5\_cred\_info.caddrs}}
13205Array of pointers to addrs (optional)
13206
13207\end{fulllineitems}
13208
13209
13210
13211\subsubsection{krb5\_creds}
13212\label{\detokenize{appdev/refs/types/krb5_creds::doc}}\label{\detokenize{appdev/refs/types/krb5_creds:krb5-creds}}\label{\detokenize{appdev/refs/types/krb5_creds:krb5-creds-struct}}\index{krb5\_creds (C type)}
13213
13214\begin{fulllineitems}
13215\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}}\pysigline{\sphinxbfcode{krb5\_creds}}
13216\end{fulllineitems}
13217
13218
13219Credentials structure including ticket, session key, and lifetime info.
13220
13221
13222\paragraph{Declaration}
13223\label{\detokenize{appdev/refs/types/krb5_creds:declaration}}
13224typedef struct \_krb5\_creds  krb5\_creds
13225
13226
13227\paragraph{Members}
13228\label{\detokenize{appdev/refs/types/krb5_creds:members}}\index{krb5\_creds.magic (C member)}
13229
13230\begin{fulllineitems}
13231\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_creds.magic}}
13232\end{fulllineitems}
13233
13234\index{krb5\_creds.client (C member)}
13235
13236\begin{fulllineitems}
13237\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.client}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}    \sphinxbfcode{krb5\_creds.client}}
13238client’s principal identifier
13239
13240\end{fulllineitems}
13241
13242\index{krb5\_creds.server (C member)}
13243
13244\begin{fulllineitems}
13245\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.server}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}    \sphinxbfcode{krb5\_creds.server}}
13246server’s principal identifier
13247
13248\end{fulllineitems}
13249
13250\index{krb5\_creds.keyblock (C member)}
13251
13252\begin{fulllineitems}
13253\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.keyblock}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}}     \sphinxbfcode{krb5\_creds.keyblock}}
13254session encryption key info
13255
13256\end{fulllineitems}
13257
13258\index{krb5\_creds.times (C member)}
13259
13260\begin{fulllineitems}
13261\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.times}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{krb5\_ticket\_times}}} \sphinxbfcode{krb5\_creds.times}}
13262lifetime info
13263
13264\end{fulllineitems}
13265
13266\index{krb5\_creds.is\_skey (C member)}
13267
13268\begin{fulllineitems}
13269\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.is_skey}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}}      \sphinxbfcode{krb5\_creds.is\_skey}}
13270true if ticket is encrypted in another ticket’s skey
13271
13272\end{fulllineitems}
13273
13274\index{krb5\_creds.ticket\_flags (C member)}
13275
13276\begin{fulllineitems}
13277\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.ticket_flags}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}        \sphinxbfcode{krb5\_creds.ticket\_flags}}
13278flags in ticket
13279
13280\end{fulllineitems}
13281
13282\index{krb5\_creds.addresses (C member)}
13283
13284\begin{fulllineitems}
13285\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.addresses}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}}  **  \sphinxbfcode{krb5\_creds.addresses}}
13286addrs in ticket
13287
13288\end{fulllineitems}
13289
13290\index{krb5\_creds.ticket (C member)}
13291
13292\begin{fulllineitems}
13293\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.ticket}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_creds.ticket}}
13294ticket string itself
13295
13296\end{fulllineitems}
13297
13298\index{krb5\_creds.second\_ticket (C member)}
13299
13300\begin{fulllineitems}
13301\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.second_ticket}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_creds.second\_ticket}}
13302second ticket, if related to ticket (via DUPLICATE-SKEY or ENC-TKT-IN-SKEY)
13303
13304\end{fulllineitems}
13305
13306\index{krb5\_creds.authdata (C member)}
13307
13308\begin{fulllineitems}
13309\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds.authdata}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}}  ** \sphinxbfcode{krb5\_creds.authdata}}
13310authorization data
13311
13312\end{fulllineitems}
13313
13314
13315
13316\subsubsection{krb5\_crypto\_iov}
13317\label{\detokenize{appdev/refs/types/krb5_crypto_iov:krb5-crypto-iov}}\label{\detokenize{appdev/refs/types/krb5_crypto_iov::doc}}\label{\detokenize{appdev/refs/types/krb5_crypto_iov:krb5-crypto-iov-struct}}\index{krb5\_crypto\_iov (C type)}
13318
13319\begin{fulllineitems}
13320\phantomsection\label{\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}}\pysigline{\sphinxbfcode{krb5\_crypto\_iov}}
13321\end{fulllineitems}
13322
13323
13324Structure to describe a region of text to be encrypted or decrypted.
13325
13326The \sphinxstyleemphasis{flags} member describes the type of the iov. The \sphinxstyleemphasis{data} member points to the memory that will be manipulated. All iov APIs take a pointer to the first element of an array of krb5\_crypto\_iov’s along with the size of that array. Buffer contents are manipulated in-place; data is overwritten. Callers must allocate the right number of krb5\_crypto\_iov structures before calling into an iov API.
13327
13328
13329\paragraph{Declaration}
13330\label{\detokenize{appdev/refs/types/krb5_crypto_iov:declaration}}
13331typedef struct \_krb5\_crypto\_iov  krb5\_crypto\_iov
13332
13333
13334\paragraph{Members}
13335\label{\detokenize{appdev/refs/types/krb5_crypto_iov:members}}\index{krb5\_crypto\_iov.flags (C member)}
13336
13337\begin{fulllineitems}
13338\phantomsection\label{\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov.flags}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_cryptotype:c.krb5_cryptotype}]{\sphinxcrossref{krb5\_cryptotype}}}   \sphinxbfcode{krb5\_crypto\_iov.flags}}
13339\sphinxcode{KRB5\_CRYPTO\_TYPE} type of the iov
13340
13341\end{fulllineitems}
13342
13343\index{krb5\_crypto\_iov.data (C member)}
13344
13345\begin{fulllineitems}
13346\phantomsection\label{\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov.data}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_crypto\_iov.data}}
13347\end{fulllineitems}
13348
13349
13350
13351\subsubsection{krb5\_cryptotype}
13352\label{\detokenize{appdev/refs/types/krb5_cryptotype:krb5-cryptotype}}\label{\detokenize{appdev/refs/types/krb5_cryptotype::doc}}\label{\detokenize{appdev/refs/types/krb5_cryptotype:krb5-cryptotype-struct}}\index{krb5\_cryptotype (C type)}
13353
13354\begin{fulllineitems}
13355\phantomsection\label{\detokenize{appdev/refs/types/krb5_cryptotype:c.krb5_cryptotype}}\pysigline{\sphinxbfcode{krb5\_cryptotype}}
13356\end{fulllineitems}
13357
13358
13359
13360\paragraph{Declaration}
13361\label{\detokenize{appdev/refs/types/krb5_cryptotype:declaration}}
13362typedef krb5\_int32 krb5\_cryptotype
13363
13364
13365\subsubsection{krb5\_data}
13366\label{\detokenize{appdev/refs/types/krb5_data:krb5-data}}\label{\detokenize{appdev/refs/types/krb5_data::doc}}\label{\detokenize{appdev/refs/types/krb5_data:krb5-data-struct}}\index{krb5\_data (C type)}
13367
13368\begin{fulllineitems}
13369\phantomsection\label{\detokenize{appdev/refs/types/krb5_data:c.krb5_data}}\pysigline{\sphinxbfcode{krb5\_data}}
13370\end{fulllineitems}
13371
13372
13373
13374\paragraph{Declaration}
13375\label{\detokenize{appdev/refs/types/krb5_data:declaration}}
13376typedef struct \_krb5\_data  krb5\_data
13377
13378
13379\paragraph{Members}
13380\label{\detokenize{appdev/refs/types/krb5_data:members}}\index{krb5\_data.magic (C member)}
13381
13382\begin{fulllineitems}
13383\phantomsection\label{\detokenize{appdev/refs/types/krb5_data:c.krb5_data.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_data.magic}}
13384\end{fulllineitems}
13385
13386\index{krb5\_data.length (C member)}
13387
13388\begin{fulllineitems}
13389\phantomsection\label{\detokenize{appdev/refs/types/krb5_data:c.krb5_data.length}}\pysigline{unsigned int      \sphinxbfcode{krb5\_data.length}}
13390\end{fulllineitems}
13391
13392\index{krb5\_data.data (C member)}
13393
13394\begin{fulllineitems}
13395\phantomsection\label{\detokenize{appdev/refs/types/krb5_data:c.krb5_data.data}}\pysigline{char *    \sphinxbfcode{krb5\_data.data}}
13396\end{fulllineitems}
13397
13398
13399
13400\subsubsection{krb5\_deltat}
13401\label{\detokenize{appdev/refs/types/krb5_deltat:krb5-deltat}}\label{\detokenize{appdev/refs/types/krb5_deltat:krb5-deltat-struct}}\label{\detokenize{appdev/refs/types/krb5_deltat::doc}}\index{krb5\_deltat (C type)}
13402
13403\begin{fulllineitems}
13404\phantomsection\label{\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}}\pysigline{\sphinxbfcode{krb5\_deltat}}
13405\end{fulllineitems}
13406
13407
13408
13409\paragraph{Declaration}
13410\label{\detokenize{appdev/refs/types/krb5_deltat:declaration}}
13411typedef krb5\_int32 krb5\_deltat
13412
13413
13414\subsubsection{krb5\_enc\_data}
13415\label{\detokenize{appdev/refs/types/krb5_enc_data::doc}}\label{\detokenize{appdev/refs/types/krb5_enc_data:krb5-enc-data}}\label{\detokenize{appdev/refs/types/krb5_enc_data:krb5-enc-data-struct}}\index{krb5\_enc\_data (C type)}
13416
13417\begin{fulllineitems}
13418\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}}\pysigline{\sphinxbfcode{krb5\_enc\_data}}
13419\end{fulllineitems}
13420
13421
13422
13423\paragraph{Declaration}
13424\label{\detokenize{appdev/refs/types/krb5_enc_data:declaration}}
13425typedef struct \_krb5\_enc\_data  krb5\_enc\_data
13426
13427
13428\paragraph{Members}
13429\label{\detokenize{appdev/refs/types/krb5_enc_data:members}}\index{krb5\_enc\_data.magic (C member)}
13430
13431\begin{fulllineitems}
13432\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_enc\_data.magic}}
13433\end{fulllineitems}
13434
13435\index{krb5\_enc\_data.enctype (C member)}
13436
13437\begin{fulllineitems}
13438\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data.enctype}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}      \sphinxbfcode{krb5\_enc\_data.enctype}}
13439\end{fulllineitems}
13440
13441\index{krb5\_enc\_data.kvno (C member)}
13442
13443\begin{fulllineitems}
13444\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data.kvno}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_kvno:c.krb5_kvno}]{\sphinxcrossref{krb5\_kvno}}} \sphinxbfcode{krb5\_enc\_data.kvno}}
13445\end{fulllineitems}
13446
13447\index{krb5\_enc\_data.ciphertext (C member)}
13448
13449\begin{fulllineitems}
13450\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data.ciphertext}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_enc\_data.ciphertext}}
13451\end{fulllineitems}
13452
13453
13454
13455\subsubsection{krb5\_enc\_kdc\_rep\_part}
13456\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part::doc}}\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:krb5-enc-kdc-rep-part}}\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:krb5-enc-kdc-rep-part-struct}}\index{krb5\_enc\_kdc\_rep\_part (C type)}
13457
13458\begin{fulllineitems}
13459\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part}}\pysigline{\sphinxbfcode{krb5\_enc\_kdc\_rep\_part}}
13460\end{fulllineitems}
13461
13462
13463C representation of \sphinxstyleemphasis{EncKDCRepPart} protocol message.
13464
13465This is the cleartext message that is encrypted and inserted in \sphinxstyleemphasis{KDC-REP} .
13466
13467
13468\paragraph{Declaration}
13469\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:declaration}}
13470typedef struct \_krb5\_enc\_kdc\_rep\_part  krb5\_enc\_kdc\_rep\_part
13471
13472
13473\paragraph{Members}
13474\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:members}}\index{krb5\_enc\_kdc\_rep\_part.magic (C member)}
13475
13476\begin{fulllineitems}
13477\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.magic}}
13478\end{fulllineitems}
13479
13480\index{krb5\_enc\_kdc\_rep\_part.msg\_type (C member)}
13481
13482\begin{fulllineitems}
13483\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.msg_type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_msgtype:c.krb5_msgtype}]{\sphinxcrossref{krb5\_msgtype}}}      \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.msg\_type}}
13484krb5 message type
13485
13486\end{fulllineitems}
13487
13488\index{krb5\_enc\_kdc\_rep\_part.session (C member)}
13489
13490\begin{fulllineitems}
13491\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.session}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}}  *  \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.session}}
13492Session key.
13493
13494\end{fulllineitems}
13495
13496\index{krb5\_enc\_kdc\_rep\_part.last\_req (C member)}
13497
13498\begin{fulllineitems}
13499\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.last_req}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_last_req_entry:c.krb5_last_req_entry}]{\sphinxcrossref{krb5\_last\_req\_entry}}}  **   \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.last\_req}}
13500Array of pointers to entries.
13501
13502\end{fulllineitems}
13503
13504\index{krb5\_enc\_kdc\_rep\_part.nonce (C member)}
13505
13506\begin{fulllineitems}
13507\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.nonce}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.nonce}}
13508Nonce from request.
13509
13510\end{fulllineitems}
13511
13512\index{krb5\_enc\_kdc\_rep\_part.key\_exp (C member)}
13513
13514\begin{fulllineitems}
13515\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.key_exp}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}    \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.key\_exp}}
13516Expiration date.
13517
13518\end{fulllineitems}
13519
13520\index{krb5\_enc\_kdc\_rep\_part.flags (C member)}
13521
13522\begin{fulllineitems}
13523\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.flags}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}        \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.flags}}
13524Ticket flags.
13525
13526\end{fulllineitems}
13527
13528\index{krb5\_enc\_kdc\_rep\_part.times (C member)}
13529
13530\begin{fulllineitems}
13531\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.times}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{krb5\_ticket\_times}}} \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.times}}
13532Lifetime info.
13533
13534\end{fulllineitems}
13535
13536\index{krb5\_enc\_kdc\_rep\_part.server (C member)}
13537
13538\begin{fulllineitems}
13539\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.server}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}    \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.server}}
13540Server’s principal identifier.
13541
13542\end{fulllineitems}
13543
13544\index{krb5\_enc\_kdc\_rep\_part.caddrs (C member)}
13545
13546\begin{fulllineitems}
13547\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.caddrs}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}}  **  \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.caddrs}}
13548Array of ptrs to addrs, optional.
13549
13550\end{fulllineitems}
13551
13552\index{krb5\_enc\_kdc\_rep\_part.enc\_padata (C member)}
13553
13554\begin{fulllineitems}
13555\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part.enc_padata}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data}]{\sphinxcrossref{krb5\_pa\_data}}}  **  \sphinxbfcode{krb5\_enc\_kdc\_rep\_part.enc\_padata}}
13556Encrypted preauthentication data.
13557
13558\end{fulllineitems}
13559
13560
13561
13562\subsubsection{krb5\_enc\_tkt\_part}
13563\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:krb5-enc-tkt-part}}\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part::doc}}\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:krb5-enc-tkt-part-struct}}\index{krb5\_enc\_tkt\_part (C type)}
13564
13565\begin{fulllineitems}
13566\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part}}\pysigline{\sphinxbfcode{krb5\_enc\_tkt\_part}}
13567\end{fulllineitems}
13568
13569
13570Encrypted part of ticket.
13571
13572
13573\paragraph{Declaration}
13574\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:declaration}}
13575typedef struct \_krb5\_enc\_tkt\_part  krb5\_enc\_tkt\_part
13576
13577
13578\paragraph{Members}
13579\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:members}}\index{krb5\_enc\_tkt\_part.magic (C member)}
13580
13581\begin{fulllineitems}
13582\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_enc\_tkt\_part.magic}}
13583\end{fulllineitems}
13584
13585\index{krb5\_enc\_tkt\_part.flags (C member)}
13586
13587\begin{fulllineitems}
13588\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.flags}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}        \sphinxbfcode{krb5\_enc\_tkt\_part.flags}}
13589flags
13590
13591\end{fulllineitems}
13592
13593\index{krb5\_enc\_tkt\_part.session (C member)}
13594
13595\begin{fulllineitems}
13596\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.session}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}}  *  \sphinxbfcode{krb5\_enc\_tkt\_part.session}}
13597session key: includes enctype
13598
13599\end{fulllineitems}
13600
13601\index{krb5\_enc\_tkt\_part.client (C member)}
13602
13603\begin{fulllineitems}
13604\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.client}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}    \sphinxbfcode{krb5\_enc\_tkt\_part.client}}
13605client name/realm
13606
13607\end{fulllineitems}
13608
13609\index{krb5\_enc\_tkt\_part.transited (C member)}
13610
13611\begin{fulllineitems}
13612\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.transited}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_transited:c.krb5_transited}]{\sphinxcrossref{krb5\_transited}}}    \sphinxbfcode{krb5\_enc\_tkt\_part.transited}}
13613list of transited realms
13614
13615\end{fulllineitems}
13616
13617\index{krb5\_enc\_tkt\_part.times (C member)}
13618
13619\begin{fulllineitems}
13620\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.times}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}]{\sphinxcrossref{krb5\_ticket\_times}}} \sphinxbfcode{krb5\_enc\_tkt\_part.times}}
13621auth, start, end, renew\_till
13622
13623\end{fulllineitems}
13624
13625\index{krb5\_enc\_tkt\_part.caddrs (C member)}
13626
13627\begin{fulllineitems}
13628\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.caddrs}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}}  **  \sphinxbfcode{krb5\_enc\_tkt\_part.caddrs}}
13629array of ptrs to addresses
13630
13631\end{fulllineitems}
13632
13633\index{krb5\_enc\_tkt\_part.authorization\_data (C member)}
13634
13635\begin{fulllineitems}
13636\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part.authorization_data}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}}  ** \sphinxbfcode{krb5\_enc\_tkt\_part.authorization\_data}}
13637auth data
13638
13639\end{fulllineitems}
13640
13641
13642
13643\subsubsection{krb5\_encrypt\_block}
13644\label{\detokenize{appdev/refs/types/krb5_encrypt_block:krb5-encrypt-block}}\label{\detokenize{appdev/refs/types/krb5_encrypt_block:krb5-encrypt-block-struct}}\label{\detokenize{appdev/refs/types/krb5_encrypt_block::doc}}\index{krb5\_encrypt\_block (C type)}
13645
13646\begin{fulllineitems}
13647\phantomsection\label{\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}}\pysigline{\sphinxbfcode{krb5\_encrypt\_block}}
13648\end{fulllineitems}
13649
13650
13651
13652\paragraph{Declaration}
13653\label{\detokenize{appdev/refs/types/krb5_encrypt_block:declaration}}
13654typedef struct \_krb5\_encrypt\_block  krb5\_encrypt\_block
13655
13656
13657\paragraph{Members}
13658\label{\detokenize{appdev/refs/types/krb5_encrypt_block:members}}\index{krb5\_encrypt\_block.magic (C member)}
13659
13660\begin{fulllineitems}
13661\phantomsection\label{\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_encrypt\_block.magic}}
13662\end{fulllineitems}
13663
13664\index{krb5\_encrypt\_block.crypto\_entry (C member)}
13665
13666\begin{fulllineitems}
13667\phantomsection\label{\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block.crypto_entry}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}      \sphinxbfcode{krb5\_encrypt\_block.crypto\_entry}}
13668\end{fulllineitems}
13669
13670\index{krb5\_encrypt\_block.key (C member)}
13671
13672\begin{fulllineitems}
13673\phantomsection\label{\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block.key}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}}  *  \sphinxbfcode{krb5\_encrypt\_block.key}}
13674\end{fulllineitems}
13675
13676
13677
13678\subsubsection{krb5\_enctype}
13679\label{\detokenize{appdev/refs/types/krb5_enctype:krb5-enctype-struct}}\label{\detokenize{appdev/refs/types/krb5_enctype:krb5-enctype}}\label{\detokenize{appdev/refs/types/krb5_enctype::doc}}\index{krb5\_enctype (C type)}
13680
13681\begin{fulllineitems}
13682\phantomsection\label{\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}}\pysigline{\sphinxbfcode{krb5\_enctype}}
13683\end{fulllineitems}
13684
13685
13686
13687\paragraph{Declaration}
13688\label{\detokenize{appdev/refs/types/krb5_enctype:declaration}}
13689typedef krb5\_int32 krb5\_enctype
13690
13691
13692\subsubsection{krb5\_error}
13693\label{\detokenize{appdev/refs/types/krb5_error:krb5-error-struct}}\label{\detokenize{appdev/refs/types/krb5_error:krb5-error}}\label{\detokenize{appdev/refs/types/krb5_error::doc}}\index{krb5\_error (C type)}
13694
13695\begin{fulllineitems}
13696\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error}}\pysigline{\sphinxbfcode{krb5\_error}}
13697\end{fulllineitems}
13698
13699
13700Error message structure.
13701
13702
13703\paragraph{Declaration}
13704\label{\detokenize{appdev/refs/types/krb5_error:declaration}}
13705typedef struct \_krb5\_error  krb5\_error
13706
13707
13708\paragraph{Members}
13709\label{\detokenize{appdev/refs/types/krb5_error:members}}\index{krb5\_error.magic (C member)}
13710
13711\begin{fulllineitems}
13712\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_error.magic}}
13713\end{fulllineitems}
13714
13715\index{krb5\_error.ctime (C member)}
13716
13717\begin{fulllineitems}
13718\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.ctime}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}    \sphinxbfcode{krb5\_error.ctime}}
13719Client sec portion; optional.
13720
13721\end{fulllineitems}
13722
13723\index{krb5\_error.cusec (C member)}
13724
13725\begin{fulllineitems}
13726\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.cusec}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_error.cusec}}
13727Client usec portion; optional.
13728
13729\end{fulllineitems}
13730
13731\index{krb5\_error.susec (C member)}
13732
13733\begin{fulllineitems}
13734\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.susec}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_error.susec}}
13735Server usec portion.
13736
13737\end{fulllineitems}
13738
13739\index{krb5\_error.stime (C member)}
13740
13741\begin{fulllineitems}
13742\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.stime}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}    \sphinxbfcode{krb5\_error.stime}}
13743Server sec portion.
13744
13745\end{fulllineitems}
13746
13747\index{krb5\_error.error (C member)}
13748
13749\begin{fulllineitems}
13750\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.error}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{krb5\_ui\_4}}} \sphinxbfcode{krb5\_error.error}}
13751Error code (protocol error \#’s)
13752
13753\end{fulllineitems}
13754
13755\index{krb5\_error.client (C member)}
13756
13757\begin{fulllineitems}
13758\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.client}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}    \sphinxbfcode{krb5\_error.client}}
13759Client principal and realm.
13760
13761\end{fulllineitems}
13762
13763\index{krb5\_error.server (C member)}
13764
13765\begin{fulllineitems}
13766\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.server}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}    \sphinxbfcode{krb5\_error.server}}
13767Server principal and realm.
13768
13769\end{fulllineitems}
13770
13771\index{krb5\_error.text (C member)}
13772
13773\begin{fulllineitems}
13774\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.text}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_error.text}}
13775Descriptive text.
13776
13777\end{fulllineitems}
13778
13779\index{krb5\_error.e\_data (C member)}
13780
13781\begin{fulllineitems}
13782\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error.e_data}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_error.e\_data}}
13783Additional error-describing data.
13784
13785\end{fulllineitems}
13786
13787
13788
13789\subsubsection{krb5\_error\_code}
13790\label{\detokenize{appdev/refs/types/krb5_error_code:krb5-error-code}}\label{\detokenize{appdev/refs/types/krb5_error_code::doc}}\label{\detokenize{appdev/refs/types/krb5_error_code:krb5-error-code-struct}}\index{krb5\_error\_code (C type)}
13791
13792\begin{fulllineitems}
13793\phantomsection\label{\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}}\pysigline{\sphinxbfcode{krb5\_error\_code}}
13794\end{fulllineitems}
13795
13796
13797Used to convey an operation status.
13798
13799The value 0 indicates success; any other values are com\_err codes. Use {\hyperref[\detokenize{appdev/refs/api/krb5_get_error_message:c.krb5_get_error_message}]{\sphinxcrossref{\sphinxcode{krb5\_get\_error\_message()}}}} to obtain a string describing the error.
13800
13801
13802\paragraph{Declaration}
13803\label{\detokenize{appdev/refs/types/krb5_error_code:declaration}}
13804typedef krb5\_int32 krb5\_error\_code
13805
13806
13807\subsubsection{krb5\_expire\_callback\_func}
13808\label{\detokenize{appdev/refs/types/krb5_expire_callback_func:krb5-expire-callback-func}}\label{\detokenize{appdev/refs/types/krb5_expire_callback_func::doc}}\label{\detokenize{appdev/refs/types/krb5_expire_callback_func:krb5-expire-callback-func-struct}}\index{krb5\_expire\_callback\_func (C type)}
13809
13810\begin{fulllineitems}
13811\phantomsection\label{\detokenize{appdev/refs/types/krb5_expire_callback_func:c.krb5_expire_callback_func}}\pysigline{\sphinxbfcode{krb5\_expire\_callback\_func}}
13812\end{fulllineitems}
13813
13814
13815
13816\paragraph{Declaration}
13817\label{\detokenize{appdev/refs/types/krb5_expire_callback_func:declaration}}
13818typedef void( * krb5\_expire\_callback\_func) (krb5\_context context, void *data, krb5\_timestamp password\_expiration, krb5\_timestamp account\_expiration, krb5\_boolean is\_last\_req)
13819
13820
13821\subsubsection{krb5\_flags}
13822\label{\detokenize{appdev/refs/types/krb5_flags:krb5-flags-struct}}\label{\detokenize{appdev/refs/types/krb5_flags:krb5-flags}}\label{\detokenize{appdev/refs/types/krb5_flags::doc}}\index{krb5\_flags (C type)}
13823
13824\begin{fulllineitems}
13825\phantomsection\label{\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}}\pysigline{\sphinxbfcode{krb5\_flags}}
13826\end{fulllineitems}
13827
13828
13829
13830\paragraph{Declaration}
13831\label{\detokenize{appdev/refs/types/krb5_flags:declaration}}
13832typedef krb5\_int32 krb5\_flags
13833
13834
13835\subsubsection{krb5\_get\_init\_creds\_opt}
13836\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:krb5-get-init-creds-opt-struct}}\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt::doc}}\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:krb5-get-init-creds-opt}}\index{krb5\_get\_init\_creds\_opt (C type)}
13837
13838\begin{fulllineitems}
13839\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}}\pysigline{\sphinxbfcode{krb5\_get\_init\_creds\_opt}}
13840\end{fulllineitems}
13841
13842
13843Store options for \sphinxstyleemphasis{\_krb5\_get\_init\_creds} .
13844
13845
13846\paragraph{Declaration}
13847\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:declaration}}
13848typedef struct \_krb5\_get\_init\_creds\_opt  krb5\_get\_init\_creds\_opt
13849
13850
13851\paragraph{Members}
13852\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:members}}\index{krb5\_get\_init\_creds\_opt.flags (C member)}
13853
13854\begin{fulllineitems}
13855\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.flags}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}        \sphinxbfcode{krb5\_get\_init\_creds\_opt.flags}}
13856\end{fulllineitems}
13857
13858\index{krb5\_get\_init\_creds\_opt.tkt\_life (C member)}
13859
13860\begin{fulllineitems}
13861\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.tkt_life}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{krb5\_deltat}}}       \sphinxbfcode{krb5\_get\_init\_creds\_opt.tkt\_life}}
13862\end{fulllineitems}
13863
13864\index{krb5\_get\_init\_creds\_opt.renew\_life (C member)}
13865
13866\begin{fulllineitems}
13867\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.renew_life}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}]{\sphinxcrossref{krb5\_deltat}}}       \sphinxbfcode{krb5\_get\_init\_creds\_opt.renew\_life}}
13868\end{fulllineitems}
13869
13870\index{krb5\_get\_init\_creds\_opt.forwardable (C member)}
13871
13872\begin{fulllineitems}
13873\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.forwardable}}\pysigline{int       \sphinxbfcode{krb5\_get\_init\_creds\_opt.forwardable}}
13874\end{fulllineitems}
13875
13876\index{krb5\_get\_init\_creds\_opt.proxiable (C member)}
13877
13878\begin{fulllineitems}
13879\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.proxiable}}\pysigline{int       \sphinxbfcode{krb5\_get\_init\_creds\_opt.proxiable}}
13880\end{fulllineitems}
13881
13882\index{krb5\_get\_init\_creds\_opt.etype\_list (C member)}
13883
13884\begin{fulllineitems}
13885\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.etype_list}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} *    \sphinxbfcode{krb5\_get\_init\_creds\_opt.etype\_list}}
13886\end{fulllineitems}
13887
13888\index{krb5\_get\_init\_creds\_opt.etype\_list\_length (C member)}
13889
13890\begin{fulllineitems}
13891\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.etype_list_length}}\pysigline{int       \sphinxbfcode{krb5\_get\_init\_creds\_opt.etype\_list\_length}}
13892\end{fulllineitems}
13893
13894\index{krb5\_get\_init\_creds\_opt.address\_list (C member)}
13895
13896\begin{fulllineitems}
13897\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.address_list}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}}  **  \sphinxbfcode{krb5\_get\_init\_creds\_opt.address\_list}}
13898\end{fulllineitems}
13899
13900\index{krb5\_get\_init\_creds\_opt.preauth\_list (C member)}
13901
13902\begin{fulllineitems}
13903\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.preauth_list}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}]{\sphinxcrossref{krb5\_preauthtype}}} *        \sphinxbfcode{krb5\_get\_init\_creds\_opt.preauth\_list}}
13904\end{fulllineitems}
13905
13906\index{krb5\_get\_init\_creds\_opt.preauth\_list\_length (C member)}
13907
13908\begin{fulllineitems}
13909\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.preauth_list_length}}\pysigline{int       \sphinxbfcode{krb5\_get\_init\_creds\_opt.preauth\_list\_length}}
13910\end{fulllineitems}
13911
13912\index{krb5\_get\_init\_creds\_opt.salt (C member)}
13913
13914\begin{fulllineitems}
13915\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt.salt}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}}  *      \sphinxbfcode{krb5\_get\_init\_creds\_opt.salt}}
13916\end{fulllineitems}
13917
13918
13919
13920\subsubsection{krb5\_gic\_opt\_pa\_data}
13921\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data::doc}}\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:krb5-gic-opt-pa-data}}\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:krb5-gic-opt-pa-data-struct}}\index{krb5\_gic\_opt\_pa\_data (C type)}
13922
13923\begin{fulllineitems}
13924\phantomsection\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:c.krb5_gic_opt_pa_data}}\pysigline{\sphinxbfcode{krb5\_gic\_opt\_pa\_data}}
13925\end{fulllineitems}
13926
13927
13928Generic preauth option attribute/value pairs.
13929
13930
13931\paragraph{Declaration}
13932\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:declaration}}
13933typedef struct \_krb5\_gic\_opt\_pa\_data  krb5\_gic\_opt\_pa\_data
13934
13935
13936\paragraph{Members}
13937\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:members}}\index{krb5\_gic\_opt\_pa\_data.attr (C member)}
13938
13939\begin{fulllineitems}
13940\phantomsection\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:c.krb5_gic_opt_pa_data.attr}}\pysigline{char *    \sphinxbfcode{krb5\_gic\_opt\_pa\_data.attr}}
13941\end{fulllineitems}
13942
13943\index{krb5\_gic\_opt\_pa\_data.value (C member)}
13944
13945\begin{fulllineitems}
13946\phantomsection\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:c.krb5_gic_opt_pa_data.value}}\pysigline{char *    \sphinxbfcode{krb5\_gic\_opt\_pa\_data.value}}
13947\end{fulllineitems}
13948
13949
13950
13951\subsubsection{krb5\_int16}
13952\label{\detokenize{appdev/refs/types/krb5_int16:krb5-int16-struct}}\label{\detokenize{appdev/refs/types/krb5_int16:krb5-int16}}\label{\detokenize{appdev/refs/types/krb5_int16::doc}}\index{krb5\_int16 (C type)}
13953
13954\begin{fulllineitems}
13955\phantomsection\label{\detokenize{appdev/refs/types/krb5_int16:c.krb5_int16}}\pysigline{\sphinxbfcode{krb5\_int16}}
13956\end{fulllineitems}
13957
13958
13959
13960\paragraph{Declaration}
13961\label{\detokenize{appdev/refs/types/krb5_int16:declaration}}
13962typedef int16\_t krb5\_int16
13963
13964
13965\subsubsection{krb5\_int32}
13966\label{\detokenize{appdev/refs/types/krb5_int32:krb5-int32-struct}}\label{\detokenize{appdev/refs/types/krb5_int32::doc}}\label{\detokenize{appdev/refs/types/krb5_int32:krb5-int32}}\index{krb5\_int32 (C type)}
13967
13968\begin{fulllineitems}
13969\phantomsection\label{\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}}\pysigline{\sphinxbfcode{krb5\_int32}}
13970\end{fulllineitems}
13971
13972
13973
13974\paragraph{Declaration}
13975\label{\detokenize{appdev/refs/types/krb5_int32:declaration}}
13976typedef int32\_t krb5\_int32
13977
13978
13979\subsubsection{krb5\_kdc\_rep}
13980\label{\detokenize{appdev/refs/types/krb5_kdc_rep::doc}}\label{\detokenize{appdev/refs/types/krb5_kdc_rep:krb5-kdc-rep}}\label{\detokenize{appdev/refs/types/krb5_kdc_rep:krb5-kdc-rep-struct}}\index{krb5\_kdc\_rep (C type)}
13981
13982\begin{fulllineitems}
13983\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}}\pysigline{\sphinxbfcode{krb5\_kdc\_rep}}
13984\end{fulllineitems}
13985
13986
13987Representation of the \sphinxstyleemphasis{KDC-REP} protocol message.
13988
13989
13990\paragraph{Declaration}
13991\label{\detokenize{appdev/refs/types/krb5_kdc_rep:declaration}}
13992typedef struct \_krb5\_kdc\_rep  krb5\_kdc\_rep
13993
13994
13995\paragraph{Members}
13996\label{\detokenize{appdev/refs/types/krb5_kdc_rep:members}}\index{krb5\_kdc\_rep.magic (C member)}
13997
13998\begin{fulllineitems}
13999\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_kdc\_rep.magic}}
14000\end{fulllineitems}
14001
14002\index{krb5\_kdc\_rep.msg\_type (C member)}
14003
14004\begin{fulllineitems}
14005\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.msg_type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_msgtype:c.krb5_msgtype}]{\sphinxcrossref{krb5\_msgtype}}}      \sphinxbfcode{krb5\_kdc\_rep.msg\_type}}
14006KRB5\_AS\_REP or KRB5\_KDC\_REP.
14007
14008\end{fulllineitems}
14009
14010\index{krb5\_kdc\_rep.padata (C member)}
14011
14012\begin{fulllineitems}
14013\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.padata}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data}]{\sphinxcrossref{krb5\_pa\_data}}}  **  \sphinxbfcode{krb5\_kdc\_rep.padata}}
14014Preauthentication data from KDC.
14015
14016\end{fulllineitems}
14017
14018\index{krb5\_kdc\_rep.client (C member)}
14019
14020\begin{fulllineitems}
14021\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.client}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}    \sphinxbfcode{krb5\_kdc\_rep.client}}
14022Client principal and realm.
14023
14024\end{fulllineitems}
14025
14026\index{krb5\_kdc\_rep.ticket (C member)}
14027
14028\begin{fulllineitems}
14029\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.ticket}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}}  *    \sphinxbfcode{krb5\_kdc\_rep.ticket}}
14030Ticket.
14031
14032\end{fulllineitems}
14033
14034\index{krb5\_kdc\_rep.enc\_part (C member)}
14035
14036\begin{fulllineitems}
14037\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.enc_part}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}}     \sphinxbfcode{krb5\_kdc\_rep.enc\_part}}
14038Encrypted part of reply.
14039
14040\end{fulllineitems}
14041
14042\index{krb5\_kdc\_rep.enc\_part2 (C member)}
14043
14044\begin{fulllineitems}
14045\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep.enc_part2}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part}]{\sphinxcrossref{krb5\_enc\_kdc\_rep\_part}}}  *  \sphinxbfcode{krb5\_kdc\_rep.enc\_part2}}
14046Unencrypted version, if available.
14047
14048\end{fulllineitems}
14049
14050
14051
14052\subsubsection{krb5\_kdc\_req}
14053\label{\detokenize{appdev/refs/types/krb5_kdc_req:krb5-kdc-req-struct}}\label{\detokenize{appdev/refs/types/krb5_kdc_req:krb5-kdc-req}}\label{\detokenize{appdev/refs/types/krb5_kdc_req::doc}}\index{krb5\_kdc\_req (C type)}
14054
14055\begin{fulllineitems}
14056\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}}\pysigline{\sphinxbfcode{krb5\_kdc\_req}}
14057\end{fulllineitems}
14058
14059
14060C representation of KDC-REQ protocol message, including KDC-REQ-BODY.
14061
14062
14063\paragraph{Declaration}
14064\label{\detokenize{appdev/refs/types/krb5_kdc_req:declaration}}
14065typedef struct \_krb5\_kdc\_req  krb5\_kdc\_req
14066
14067
14068\paragraph{Members}
14069\label{\detokenize{appdev/refs/types/krb5_kdc_req:members}}\index{krb5\_kdc\_req.magic (C member)}
14070
14071\begin{fulllineitems}
14072\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_kdc\_req.magic}}
14073\end{fulllineitems}
14074
14075\index{krb5\_kdc\_req.msg\_type (C member)}
14076
14077\begin{fulllineitems}
14078\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.msg_type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_msgtype:c.krb5_msgtype}]{\sphinxcrossref{krb5\_msgtype}}}      \sphinxbfcode{krb5\_kdc\_req.msg\_type}}
14079KRB5\_AS\_REQ or KRB5\_TGS\_REQ.
14080
14081\end{fulllineitems}
14082
14083\index{krb5\_kdc\_req.padata (C member)}
14084
14085\begin{fulllineitems}
14086\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.padata}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data}]{\sphinxcrossref{krb5\_pa\_data}}}  **  \sphinxbfcode{krb5\_kdc\_req.padata}}
14087Preauthentication data.
14088
14089\end{fulllineitems}
14090
14091\index{krb5\_kdc\_req.kdc\_options (C member)}
14092
14093\begin{fulllineitems}
14094\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.kdc_options}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}        \sphinxbfcode{krb5\_kdc\_req.kdc\_options}}
14095Requested options.
14096
14097\end{fulllineitems}
14098
14099\index{krb5\_kdc\_req.client (C member)}
14100
14101\begin{fulllineitems}
14102\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.client}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}    \sphinxbfcode{krb5\_kdc\_req.client}}
14103Client principal and realm.
14104
14105\end{fulllineitems}
14106
14107\index{krb5\_kdc\_req.server (C member)}
14108
14109\begin{fulllineitems}
14110\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.server}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}    \sphinxbfcode{krb5\_kdc\_req.server}}
14111Server principal and realm.
14112
14113\end{fulllineitems}
14114
14115\index{krb5\_kdc\_req.from (C member)}
14116
14117\begin{fulllineitems}
14118\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.from}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}    \sphinxbfcode{krb5\_kdc\_req.from}}
14119Requested start time.
14120
14121\end{fulllineitems}
14122
14123\index{krb5\_kdc\_req.till (C member)}
14124
14125\begin{fulllineitems}
14126\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.till}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}    \sphinxbfcode{krb5\_kdc\_req.till}}
14127Requested end time.
14128
14129\end{fulllineitems}
14130
14131\index{krb5\_kdc\_req.rtime (C member)}
14132
14133\begin{fulllineitems}
14134\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.rtime}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}    \sphinxbfcode{krb5\_kdc\_req.rtime}}
14135Requested renewable end time.
14136
14137\end{fulllineitems}
14138
14139\index{krb5\_kdc\_req.nonce (C member)}
14140
14141\begin{fulllineitems}
14142\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.nonce}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_kdc\_req.nonce}}
14143Nonce to match request and response.
14144
14145\end{fulllineitems}
14146
14147\index{krb5\_kdc\_req.nktypes (C member)}
14148
14149\begin{fulllineitems}
14150\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.nktypes}}\pysigline{int       \sphinxbfcode{krb5\_kdc\_req.nktypes}}
14151Number of enctypes.
14152
14153\end{fulllineitems}
14154
14155\index{krb5\_kdc\_req.ktype (C member)}
14156
14157\begin{fulllineitems}
14158\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.ktype}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}} *    \sphinxbfcode{krb5\_kdc\_req.ktype}}
14159Requested enctypes.
14160
14161\end{fulllineitems}
14162
14163\index{krb5\_kdc\_req.addresses (C member)}
14164
14165\begin{fulllineitems}
14166\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.addresses}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_address:c.krb5_address}]{\sphinxcrossref{krb5\_address}}}  **  \sphinxbfcode{krb5\_kdc\_req.addresses}}
14167Requested addresses (optional)
14168
14169\end{fulllineitems}
14170
14171\index{krb5\_kdc\_req.authorization\_data (C member)}
14172
14173\begin{fulllineitems}
14174\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.authorization_data}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}}     \sphinxbfcode{krb5\_kdc\_req.authorization\_data}}
14175Encrypted authz data (optional)
14176
14177\end{fulllineitems}
14178
14179\index{krb5\_kdc\_req.unenc\_authdata (C member)}
14180
14181\begin{fulllineitems}
14182\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.unenc_authdata}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}]{\sphinxcrossref{krb5\_authdata}}}  ** \sphinxbfcode{krb5\_kdc\_req.unenc\_authdata}}
14183Unencrypted authz data.
14184
14185\end{fulllineitems}
14186
14187\index{krb5\_kdc\_req.second\_ticket (C member)}
14188
14189\begin{fulllineitems}
14190\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.second_ticket}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}}  **   \sphinxbfcode{krb5\_kdc\_req.second\_ticket}}
14191Second ticket array (optional)
14192
14193\end{fulllineitems}
14194
14195
14196
14197\subsubsection{krb5\_keyblock}
14198\label{\detokenize{appdev/refs/types/krb5_keyblock:krb5-keyblock}}\label{\detokenize{appdev/refs/types/krb5_keyblock::doc}}\label{\detokenize{appdev/refs/types/krb5_keyblock:krb5-keyblock-struct}}\index{krb5\_keyblock (C type)}
14199
14200\begin{fulllineitems}
14201\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}}\pysigline{\sphinxbfcode{krb5\_keyblock}}
14202\end{fulllineitems}
14203
14204
14205Exposed contents of a key.
14206
14207
14208\paragraph{Declaration}
14209\label{\detokenize{appdev/refs/types/krb5_keyblock:declaration}}
14210typedef struct \_krb5\_keyblock  krb5\_keyblock
14211
14212
14213\paragraph{Members}
14214\label{\detokenize{appdev/refs/types/krb5_keyblock:members}}\index{krb5\_keyblock.magic (C member)}
14215
14216\begin{fulllineitems}
14217\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_keyblock.magic}}
14218\end{fulllineitems}
14219
14220\index{krb5\_keyblock.enctype (C member)}
14221
14222\begin{fulllineitems}
14223\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock.enctype}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}]{\sphinxcrossref{krb5\_enctype}}}      \sphinxbfcode{krb5\_keyblock.enctype}}
14224\end{fulllineitems}
14225
14226\index{krb5\_keyblock.length (C member)}
14227
14228\begin{fulllineitems}
14229\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock.length}}\pysigline{unsigned int      \sphinxbfcode{krb5\_keyblock.length}}
14230\end{fulllineitems}
14231
14232\index{krb5\_keyblock.contents (C member)}
14233
14234\begin{fulllineitems}
14235\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock.contents}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{krb5\_octet}}} *      \sphinxbfcode{krb5\_keyblock.contents}}
14236\end{fulllineitems}
14237
14238
14239
14240\subsubsection{krb5\_keytab\_entry}
14241\label{\detokenize{appdev/refs/types/krb5_keytab_entry:krb5-keytab-entry}}\label{\detokenize{appdev/refs/types/krb5_keytab_entry:krb5-keytab-entry-struct}}\label{\detokenize{appdev/refs/types/krb5_keytab_entry::doc}}\index{krb5\_keytab\_entry (C type)}
14242
14243\begin{fulllineitems}
14244\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}}\pysigline{\sphinxbfcode{krb5\_keytab\_entry}}
14245\end{fulllineitems}
14246
14247
14248A key table entry.
14249
14250
14251\paragraph{Declaration}
14252\label{\detokenize{appdev/refs/types/krb5_keytab_entry:declaration}}
14253typedef struct krb5\_keytab\_entry\_st  krb5\_keytab\_entry
14254
14255
14256\paragraph{Members}
14257\label{\detokenize{appdev/refs/types/krb5_keytab_entry:members}}\index{krb5\_keytab\_entry.magic (C member)}
14258
14259\begin{fulllineitems}
14260\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_keytab\_entry.magic}}
14261\end{fulllineitems}
14262
14263\index{krb5\_keytab\_entry.principal (C member)}
14264
14265\begin{fulllineitems}
14266\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry.principal}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}    \sphinxbfcode{krb5\_keytab\_entry.principal}}
14267Principal of this key.
14268
14269\end{fulllineitems}
14270
14271\index{krb5\_keytab\_entry.timestamp (C member)}
14272
14273\begin{fulllineitems}
14274\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry.timestamp}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}    \sphinxbfcode{krb5\_keytab\_entry.timestamp}}
14275Time entry written to keytable.
14276
14277\end{fulllineitems}
14278
14279\index{krb5\_keytab\_entry.vno (C member)}
14280
14281\begin{fulllineitems}
14282\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry.vno}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_kvno:c.krb5_kvno}]{\sphinxcrossref{krb5\_kvno}}} \sphinxbfcode{krb5\_keytab\_entry.vno}}
14283Key version number.
14284
14285\end{fulllineitems}
14286
14287\index{krb5\_keytab\_entry.key (C member)}
14288
14289\begin{fulllineitems}
14290\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry.key}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}]{\sphinxcrossref{krb5\_keyblock}}}     \sphinxbfcode{krb5\_keytab\_entry.key}}
14291The secret key.
14292
14293\end{fulllineitems}
14294
14295
14296
14297\subsubsection{krb5\_keyusage}
14298\label{\detokenize{appdev/refs/types/krb5_keyusage:krb5-keyusage}}\label{\detokenize{appdev/refs/types/krb5_keyusage::doc}}\label{\detokenize{appdev/refs/types/krb5_keyusage:krb5-keyusage-struct}}\index{krb5\_keyusage (C type)}
14299
14300\begin{fulllineitems}
14301\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}}\pysigline{\sphinxbfcode{krb5\_keyusage}}
14302\end{fulllineitems}
14303
14304
14305
14306\paragraph{Declaration}
14307\label{\detokenize{appdev/refs/types/krb5_keyusage:declaration}}
14308typedef krb5\_int32 krb5\_keyusage
14309
14310
14311\subsubsection{krb5\_kt\_cursor}
14312\label{\detokenize{appdev/refs/types/krb5_kt_cursor:krb5-kt-cursor-struct}}\label{\detokenize{appdev/refs/types/krb5_kt_cursor::doc}}\label{\detokenize{appdev/refs/types/krb5_kt_cursor:krb5-kt-cursor}}\index{krb5\_kt\_cursor (C type)}
14313
14314\begin{fulllineitems}
14315\phantomsection\label{\detokenize{appdev/refs/types/krb5_kt_cursor:c.krb5_kt_cursor}}\pysigline{\sphinxbfcode{krb5\_kt\_cursor}}
14316\end{fulllineitems}
14317
14318
14319
14320\paragraph{Declaration}
14321\label{\detokenize{appdev/refs/types/krb5_kt_cursor:declaration}}
14322typedef krb5\_pointer krb5\_kt\_cursor
14323
14324
14325\subsubsection{krb5\_kvno}
14326\label{\detokenize{appdev/refs/types/krb5_kvno:krb5-kvno}}\label{\detokenize{appdev/refs/types/krb5_kvno::doc}}\label{\detokenize{appdev/refs/types/krb5_kvno:krb5-kvno-struct}}\index{krb5\_kvno (C type)}
14327
14328\begin{fulllineitems}
14329\phantomsection\label{\detokenize{appdev/refs/types/krb5_kvno:c.krb5_kvno}}\pysigline{\sphinxbfcode{krb5\_kvno}}
14330\end{fulllineitems}
14331
14332
14333
14334\paragraph{Declaration}
14335\label{\detokenize{appdev/refs/types/krb5_kvno:declaration}}
14336typedef unsigned int krb5\_kvno
14337
14338
14339\subsubsection{krb5\_last\_req\_entry}
14340\label{\detokenize{appdev/refs/types/krb5_last_req_entry:krb5-last-req-entry}}\label{\detokenize{appdev/refs/types/krb5_last_req_entry::doc}}\label{\detokenize{appdev/refs/types/krb5_last_req_entry:krb5-last-req-entry-struct}}\index{krb5\_last\_req\_entry (C type)}
14341
14342\begin{fulllineitems}
14343\phantomsection\label{\detokenize{appdev/refs/types/krb5_last_req_entry:c.krb5_last_req_entry}}\pysigline{\sphinxbfcode{krb5\_last\_req\_entry}}
14344\end{fulllineitems}
14345
14346
14347Last request entry.
14348
14349
14350\paragraph{Declaration}
14351\label{\detokenize{appdev/refs/types/krb5_last_req_entry:declaration}}
14352typedef struct \_krb5\_last\_req\_entry  krb5\_last\_req\_entry
14353
14354
14355\paragraph{Members}
14356\label{\detokenize{appdev/refs/types/krb5_last_req_entry:members}}\index{krb5\_last\_req\_entry.magic (C member)}
14357
14358\begin{fulllineitems}
14359\phantomsection\label{\detokenize{appdev/refs/types/krb5_last_req_entry:c.krb5_last_req_entry.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_last\_req\_entry.magic}}
14360\end{fulllineitems}
14361
14362\index{krb5\_last\_req\_entry.lr\_type (C member)}
14363
14364\begin{fulllineitems}
14365\phantomsection\label{\detokenize{appdev/refs/types/krb5_last_req_entry:c.krb5_last_req_entry.lr_type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_last\_req\_entry.lr\_type}}
14366LR type.
14367
14368\end{fulllineitems}
14369
14370\index{krb5\_last\_req\_entry.value (C member)}
14371
14372\begin{fulllineitems}
14373\phantomsection\label{\detokenize{appdev/refs/types/krb5_last_req_entry:c.krb5_last_req_entry.value}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}    \sphinxbfcode{krb5\_last\_req\_entry.value}}
14374Timestamp.
14375
14376\end{fulllineitems}
14377
14378
14379
14380\subsubsection{krb5\_magic}
14381\label{\detokenize{appdev/refs/types/krb5_magic:krb5-magic}}\label{\detokenize{appdev/refs/types/krb5_magic::doc}}\label{\detokenize{appdev/refs/types/krb5_magic:krb5-magic-struct}}\index{krb5\_magic (C type)}
14382
14383\begin{fulllineitems}
14384\phantomsection\label{\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}}\pysigline{\sphinxbfcode{krb5\_magic}}
14385\end{fulllineitems}
14386
14387
14388
14389\paragraph{Declaration}
14390\label{\detokenize{appdev/refs/types/krb5_magic:declaration}}
14391typedef krb5\_error\_code krb5\_magic
14392
14393
14394\subsubsection{krb5\_mk\_req\_checksum\_func}
14395\label{\detokenize{appdev/refs/types/krb5_mk_req_checksum_func:krb5-mk-req-checksum-func-struct}}\label{\detokenize{appdev/refs/types/krb5_mk_req_checksum_func::doc}}\label{\detokenize{appdev/refs/types/krb5_mk_req_checksum_func:krb5-mk-req-checksum-func}}\index{krb5\_mk\_req\_checksum\_func (C type)}
14396
14397\begin{fulllineitems}
14398\phantomsection\label{\detokenize{appdev/refs/types/krb5_mk_req_checksum_func:c.krb5_mk_req_checksum_func}}\pysigline{\sphinxbfcode{krb5\_mk\_req\_checksum\_func}}
14399\end{fulllineitems}
14400
14401
14402Type of function used as a callback to generate checksum data for mk\_req.
14403
14404
14405\paragraph{Declaration}
14406\label{\detokenize{appdev/refs/types/krb5_mk_req_checksum_func:declaration}}
14407typedef krb5\_error\_code( * krb5\_mk\_req\_checksum\_func) (krb5\_context, krb5\_auth\_context, void *, krb5\_data **)
14408
14409
14410\subsubsection{krb5\_msgtype}
14411\label{\detokenize{appdev/refs/types/krb5_msgtype:krb5-msgtype}}\label{\detokenize{appdev/refs/types/krb5_msgtype::doc}}\label{\detokenize{appdev/refs/types/krb5_msgtype:krb5-msgtype-struct}}\index{krb5\_msgtype (C type)}
14412
14413\begin{fulllineitems}
14414\phantomsection\label{\detokenize{appdev/refs/types/krb5_msgtype:c.krb5_msgtype}}\pysigline{\sphinxbfcode{krb5\_msgtype}}
14415\end{fulllineitems}
14416
14417
14418
14419\paragraph{Declaration}
14420\label{\detokenize{appdev/refs/types/krb5_msgtype:declaration}}
14421typedef unsigned int krb5\_msgtype
14422
14423
14424\subsubsection{krb5\_octet}
14425\label{\detokenize{appdev/refs/types/krb5_octet:krb5-octet-struct}}\label{\detokenize{appdev/refs/types/krb5_octet:krb5-octet}}\label{\detokenize{appdev/refs/types/krb5_octet::doc}}\index{krb5\_octet (C type)}
14426
14427\begin{fulllineitems}
14428\phantomsection\label{\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}}\pysigline{\sphinxbfcode{krb5\_octet}}
14429\end{fulllineitems}
14430
14431
14432
14433\paragraph{Declaration}
14434\label{\detokenize{appdev/refs/types/krb5_octet:declaration}}
14435typedef uint8\_t krb5\_octet
14436
14437
14438\subsubsection{krb5\_pa\_pac\_req}
14439\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:krb5-pa-pac-req-struct}}\label{\detokenize{appdev/refs/types/krb5_pa_pac_req::doc}}\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:krb5-pa-pac-req}}\index{krb5\_pa\_pac\_req (C type)}
14440
14441\begin{fulllineitems}
14442\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:c.krb5_pa_pac_req}}\pysigline{\sphinxbfcode{krb5\_pa\_pac\_req}}
14443\end{fulllineitems}
14444
14445
14446
14447\paragraph{Declaration}
14448\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:declaration}}
14449typedef struct \_krb5\_pa\_pac\_req  krb5\_pa\_pac\_req
14450
14451
14452\paragraph{Members}
14453\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:members}}\index{krb5\_pa\_pac\_req.include\_pac (C member)}
14454
14455\begin{fulllineitems}
14456\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:c.krb5_pa_pac_req.include_pac}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}]{\sphinxcrossref{krb5\_boolean}}}      \sphinxbfcode{krb5\_pa\_pac\_req.include\_pac}}
14457TRUE if a PAC should be included in TGS-REP.
14458
14459\end{fulllineitems}
14460
14461
14462
14463\subsubsection{krb5\_pa\_server\_referral\_data}
14464\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:krb5-pa-server-referral-data-struct}}\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data::doc}}\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:krb5-pa-server-referral-data}}\index{krb5\_pa\_server\_referral\_data (C type)}
14465
14466\begin{fulllineitems}
14467\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data}}\pysigline{\sphinxbfcode{krb5\_pa\_server\_referral\_data}}
14468\end{fulllineitems}
14469
14470
14471
14472\paragraph{Declaration}
14473\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:declaration}}
14474typedef struct \_krb5\_pa\_server\_referral\_data  krb5\_pa\_server\_referral\_data
14475
14476
14477\paragraph{Members}
14478\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:members}}\index{krb5\_pa\_server\_referral\_data.referred\_realm (C member)}
14479
14480\begin{fulllineitems}
14481\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data.referred_realm}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}}  *      \sphinxbfcode{krb5\_pa\_server\_referral\_data.referred\_realm}}
14482\end{fulllineitems}
14483
14484\index{krb5\_pa\_server\_referral\_data.true\_principal\_name (C member)}
14485
14486\begin{fulllineitems}
14487\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data.true_principal_name}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}    \sphinxbfcode{krb5\_pa\_server\_referral\_data.true\_principal\_name}}
14488\end{fulllineitems}
14489
14490\index{krb5\_pa\_server\_referral\_data.requested\_principal\_name (C member)}
14491
14492\begin{fulllineitems}
14493\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data.requested_principal_name}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}    \sphinxbfcode{krb5\_pa\_server\_referral\_data.requested\_principal\_name}}
14494\end{fulllineitems}
14495
14496\index{krb5\_pa\_server\_referral\_data.referral\_valid\_until (C member)}
14497
14498\begin{fulllineitems}
14499\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data.referral_valid_until}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}    \sphinxbfcode{krb5\_pa\_server\_referral\_data.referral\_valid\_until}}
14500\end{fulllineitems}
14501
14502\index{krb5\_pa\_server\_referral\_data.rep\_cksum (C member)}
14503
14504\begin{fulllineitems}
14505\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data.rep_cksum}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}]{\sphinxcrossref{krb5\_checksum}}}     \sphinxbfcode{krb5\_pa\_server\_referral\_data.rep\_cksum}}
14506\end{fulllineitems}
14507
14508
14509
14510\subsubsection{krb5\_pa\_svr\_referral\_data}
14511\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:krb5-pa-svr-referral-data}}\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data::doc}}\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:krb5-pa-svr-referral-data-struct}}\index{krb5\_pa\_svr\_referral\_data (C type)}
14512
14513\begin{fulllineitems}
14514\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:c.krb5_pa_svr_referral_data}}\pysigline{\sphinxbfcode{krb5\_pa\_svr\_referral\_data}}
14515\end{fulllineitems}
14516
14517
14518
14519\paragraph{Declaration}
14520\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:declaration}}
14521typedef struct \_krb5\_pa\_svr\_referral\_data  krb5\_pa\_svr\_referral\_data
14522
14523
14524\paragraph{Members}
14525\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:members}}\index{krb5\_pa\_svr\_referral\_data.principal (C member)}
14526
14527\begin{fulllineitems}
14528\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:c.krb5_pa_svr_referral_data.principal}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}    \sphinxbfcode{krb5\_pa\_svr\_referral\_data.principal}}
14529Referred name, only realm is required.
14530
14531\end{fulllineitems}
14532
14533
14534
14535\subsubsection{krb5\_pa\_data}
14536\label{\detokenize{appdev/refs/types/krb5_pa_data:krb5-pa-data}}\label{\detokenize{appdev/refs/types/krb5_pa_data:krb5-pa-data-struct}}\label{\detokenize{appdev/refs/types/krb5_pa_data::doc}}\index{krb5\_pa\_data (C type)}
14537
14538\begin{fulllineitems}
14539\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data}}\pysigline{\sphinxbfcode{krb5\_pa\_data}}
14540\end{fulllineitems}
14541
14542
14543Pre-authentication data.
14544
14545
14546\paragraph{Declaration}
14547\label{\detokenize{appdev/refs/types/krb5_pa_data:declaration}}
14548typedef struct \_krb5\_pa\_data  krb5\_pa\_data
14549
14550
14551\paragraph{Members}
14552\label{\detokenize{appdev/refs/types/krb5_pa_data:members}}\index{krb5\_pa\_data.magic (C member)}
14553
14554\begin{fulllineitems}
14555\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_pa\_data.magic}}
14556\end{fulllineitems}
14557
14558\index{krb5\_pa\_data.pa\_type (C member)}
14559
14560\begin{fulllineitems}
14561\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data.pa_type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}]{\sphinxcrossref{krb5\_preauthtype}}}  \sphinxbfcode{krb5\_pa\_data.pa\_type}}
14562Preauthentication data type.
14563
14564\end{fulllineitems}
14565
14566\index{krb5\_pa\_data.length (C member)}
14567
14568\begin{fulllineitems}
14569\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data.length}}\pysigline{unsigned int      \sphinxbfcode{krb5\_pa\_data.length}}
14570Length of data.
14571
14572\end{fulllineitems}
14573
14574\index{krb5\_pa\_data.contents (C member)}
14575
14576\begin{fulllineitems}
14577\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data.contents}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{krb5\_octet}}} *      \sphinxbfcode{krb5\_pa\_data.contents}}
14578Data.
14579
14580\end{fulllineitems}
14581
14582
14583
14584\subsubsection{krb5\_pointer}
14585\label{\detokenize{appdev/refs/types/krb5_pointer:krb5-pointer-struct}}\label{\detokenize{appdev/refs/types/krb5_pointer:krb5-pointer}}\label{\detokenize{appdev/refs/types/krb5_pointer::doc}}\index{krb5\_pointer (C type)}
14586
14587\begin{fulllineitems}
14588\phantomsection\label{\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}}\pysigline{\sphinxbfcode{krb5\_pointer}}
14589\end{fulllineitems}
14590
14591
14592
14593\paragraph{Declaration}
14594\label{\detokenize{appdev/refs/types/krb5_pointer:declaration}}
14595typedef void* krb5\_pointer
14596
14597
14598\subsubsection{krb5\_post\_recv\_fn}
14599\label{\detokenize{appdev/refs/types/krb5_post_recv_fn:krb5-post-recv-fn}}\label{\detokenize{appdev/refs/types/krb5_post_recv_fn:krb5-post-recv-fn-struct}}\label{\detokenize{appdev/refs/types/krb5_post_recv_fn::doc}}\index{krb5\_post\_recv\_fn (C type)}
14600
14601\begin{fulllineitems}
14602\phantomsection\label{\detokenize{appdev/refs/types/krb5_post_recv_fn:c.krb5_post_recv_fn}}\pysigline{\sphinxbfcode{krb5\_post\_recv\_fn}}
14603\end{fulllineitems}
14604
14605
14606Hook function for inspecting or overriding KDC replies.
14607
14608If \sphinxstyleemphasis{code} is non-zero, KDC communication failed and \sphinxstyleemphasis{reply} should be ignored. The hook function may return \sphinxstyleemphasis{code} or a different error code, or may synthesize a reply by setting \sphinxstyleemphasis{new\_reply\_out} and return successfully.
14609The hook function should use {\hyperref[\detokenize{appdev/refs/api/krb5_copy_data:c.krb5_copy_data}]{\sphinxcrossref{\sphinxcode{krb5\_copy\_data()}}}} to construct the value for \sphinxstyleemphasis{new\_reply\_out} , to ensure that it can be freed correctly by the library.
14610
14611
14612\paragraph{Declaration}
14613\label{\detokenize{appdev/refs/types/krb5_post_recv_fn:declaration}}
14614typedef krb5\_error\_code( * krb5\_post\_recv\_fn) (krb5\_context context, void *data, krb5\_error\_code code, const krb5\_data *realm, const krb5\_data *message, const krb5\_data *reply, krb5\_data **new\_reply\_out)
14615
14616
14617\subsubsection{krb5\_pre\_send\_fn}
14618\label{\detokenize{appdev/refs/types/krb5_pre_send_fn:krb5-pre-send-fn-struct}}\label{\detokenize{appdev/refs/types/krb5_pre_send_fn::doc}}\label{\detokenize{appdev/refs/types/krb5_pre_send_fn:krb5-pre-send-fn}}\index{krb5\_pre\_send\_fn (C type)}
14619
14620\begin{fulllineitems}
14621\phantomsection\label{\detokenize{appdev/refs/types/krb5_pre_send_fn:c.krb5_pre_send_fn}}\pysigline{\sphinxbfcode{krb5\_pre\_send\_fn}}
14622\end{fulllineitems}
14623
14624
14625Hook function for inspecting or modifying messages sent to KDCs.
14626
14627If the hook function sets \sphinxstyleemphasis{reply\_out} , \sphinxstyleemphasis{message} will not be sent to the KDC, and the given reply will used instead.
14628If the hook function sets \sphinxstyleemphasis{new\_message\_out} , the given message will be sent to the KDC in place of \sphinxstyleemphasis{message} .
14629If the hook function returns successfully without setting either output, \sphinxstyleemphasis{message} will be sent to the KDC normally.
14630The hook function should use {\hyperref[\detokenize{appdev/refs/api/krb5_copy_data:c.krb5_copy_data}]{\sphinxcrossref{\sphinxcode{krb5\_copy\_data()}}}} to construct the value for \sphinxstyleemphasis{new\_message\_out} or \sphinxstyleemphasis{reply\_out} , to ensure that it can be freed correctly by the library.
14631
14632
14633\paragraph{Declaration}
14634\label{\detokenize{appdev/refs/types/krb5_pre_send_fn:declaration}}
14635typedef krb5\_error\_code( * krb5\_pre\_send\_fn) (krb5\_context context, void *data, const krb5\_data *realm, const krb5\_data *message, krb5\_data **new\_message\_out, krb5\_data **new\_reply\_out)
14636
14637
14638\subsubsection{krb5\_preauthtype}
14639\label{\detokenize{appdev/refs/types/krb5_preauthtype::doc}}\label{\detokenize{appdev/refs/types/krb5_preauthtype:krb5-preauthtype}}\label{\detokenize{appdev/refs/types/krb5_preauthtype:krb5-preauthtype-struct}}\index{krb5\_preauthtype (C type)}
14640
14641\begin{fulllineitems}
14642\phantomsection\label{\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}}\pysigline{\sphinxbfcode{krb5\_preauthtype}}
14643\end{fulllineitems}
14644
14645
14646
14647\paragraph{Declaration}
14648\label{\detokenize{appdev/refs/types/krb5_preauthtype:declaration}}
14649typedef krb5\_int32 krb5\_preauthtype
14650
14651
14652\subsubsection{krb5\_principal}
14653\label{\detokenize{appdev/refs/types/krb5_principal:krb5-principal-struct}}\label{\detokenize{appdev/refs/types/krb5_principal:krb5-principal}}\label{\detokenize{appdev/refs/types/krb5_principal::doc}}\index{krb5\_principal (C type)}
14654
14655\begin{fulllineitems}
14656\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}}\pysigline{\sphinxbfcode{krb5\_principal}}
14657\end{fulllineitems}
14658
14659
14660
14661\paragraph{Declaration}
14662\label{\detokenize{appdev/refs/types/krb5_principal:declaration}}
14663typedef krb5\_principal\_data* krb5\_principal
14664
14665
14666\paragraph{Members}
14667\label{\detokenize{appdev/refs/types/krb5_principal:members}}\index{krb5\_principal.magic (C member)}
14668
14669\begin{fulllineitems}
14670\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_principal.magic}}
14671\end{fulllineitems}
14672
14673\index{krb5\_principal.realm (C member)}
14674
14675\begin{fulllineitems}
14676\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal.realm}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_principal.realm}}
14677\end{fulllineitems}
14678
14679\index{krb5\_principal.data (C member)}
14680
14681\begin{fulllineitems}
14682\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal.data}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}}  *      \sphinxbfcode{krb5\_principal.data}}
14683An array of strings.
14684
14685\end{fulllineitems}
14686
14687\index{krb5\_principal.length (C member)}
14688
14689\begin{fulllineitems}
14690\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal.length}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_principal.length}}
14691\end{fulllineitems}
14692
14693\index{krb5\_principal.type (C member)}
14694
14695\begin{fulllineitems}
14696\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal.type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_principal.type}}
14697\end{fulllineitems}
14698
14699
14700
14701\subsubsection{krb5\_principal\_data}
14702\label{\detokenize{appdev/refs/types/krb5_principal_data:krb5-principal-data}}\label{\detokenize{appdev/refs/types/krb5_principal_data::doc}}\label{\detokenize{appdev/refs/types/krb5_principal_data:krb5-principal-data-struct}}\index{krb5\_principal\_data (C type)}
14703
14704\begin{fulllineitems}
14705\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data}}\pysigline{\sphinxbfcode{krb5\_principal\_data}}
14706\end{fulllineitems}
14707
14708
14709
14710\paragraph{Declaration}
14711\label{\detokenize{appdev/refs/types/krb5_principal_data:declaration}}
14712typedef struct krb5\_principal\_data  krb5\_principal\_data
14713
14714
14715\paragraph{Members}
14716\label{\detokenize{appdev/refs/types/krb5_principal_data:members}}\index{krb5\_principal\_data.magic (C member)}
14717
14718\begin{fulllineitems}
14719\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_principal\_data.magic}}
14720\end{fulllineitems}
14721
14722\index{krb5\_principal\_data.realm (C member)}
14723
14724\begin{fulllineitems}
14725\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data.realm}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_principal\_data.realm}}
14726\end{fulllineitems}
14727
14728\index{krb5\_principal\_data.data (C member)}
14729
14730\begin{fulllineitems}
14731\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data.data}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}}  *      \sphinxbfcode{krb5\_principal\_data.data}}
14732An array of strings.
14733
14734\end{fulllineitems}
14735
14736\index{krb5\_principal\_data.length (C member)}
14737
14738\begin{fulllineitems}
14739\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data.length}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_principal\_data.length}}
14740\end{fulllineitems}
14741
14742\index{krb5\_principal\_data.type (C member)}
14743
14744\begin{fulllineitems}
14745\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data.type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_principal\_data.type}}
14746\end{fulllineitems}
14747
14748
14749
14750\subsubsection{krb5\_prompt}
14751\label{\detokenize{appdev/refs/types/krb5_prompt:krb5-prompt}}\label{\detokenize{appdev/refs/types/krb5_prompt::doc}}\label{\detokenize{appdev/refs/types/krb5_prompt:krb5-prompt-struct}}\index{krb5\_prompt (C type)}
14752
14753\begin{fulllineitems}
14754\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt}}\pysigline{\sphinxbfcode{krb5\_prompt}}
14755\end{fulllineitems}
14756
14757
14758Text for prompt used in prompter callback function.
14759
14760
14761\paragraph{Declaration}
14762\label{\detokenize{appdev/refs/types/krb5_prompt:declaration}}
14763typedef struct \_krb5\_prompt  krb5\_prompt
14764
14765
14766\paragraph{Members}
14767\label{\detokenize{appdev/refs/types/krb5_prompt:members}}\index{krb5\_prompt.prompt (C member)}
14768
14769\begin{fulllineitems}
14770\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt.prompt}}\pysigline{char *    \sphinxbfcode{krb5\_prompt.prompt}}
14771The prompt to show to the user.
14772
14773\end{fulllineitems}
14774
14775\index{krb5\_prompt.hidden (C member)}
14776
14777\begin{fulllineitems}
14778\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt.hidden}}\pysigline{int       \sphinxbfcode{krb5\_prompt.hidden}}
14779Boolean; informative prompt or hidden (e.g.
14780PIN)
14781
14782\end{fulllineitems}
14783
14784\index{krb5\_prompt.reply (C member)}
14785
14786\begin{fulllineitems}
14787\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt.reply}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}}  *      \sphinxbfcode{krb5\_prompt.reply}}
14788Must be allocated before call to prompt routine.
14789
14790\end{fulllineitems}
14791
14792
14793
14794\subsubsection{krb5\_prompt\_type}
14795\label{\detokenize{appdev/refs/types/krb5_prompt_type:krb5-prompt-type-struct}}\label{\detokenize{appdev/refs/types/krb5_prompt_type:krb5-prompt-type}}\label{\detokenize{appdev/refs/types/krb5_prompt_type::doc}}\index{krb5\_prompt\_type (C type)}
14796
14797\begin{fulllineitems}
14798\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompt_type:c.krb5_prompt_type}}\pysigline{\sphinxbfcode{krb5\_prompt\_type}}
14799\end{fulllineitems}
14800
14801
14802
14803\paragraph{Declaration}
14804\label{\detokenize{appdev/refs/types/krb5_prompt_type:declaration}}
14805typedef krb5\_int32 krb5\_prompt\_type
14806
14807
14808\subsubsection{krb5\_prompter\_fct}
14809\label{\detokenize{appdev/refs/types/krb5_prompter_fct:krb5-prompter-fct-struct}}\label{\detokenize{appdev/refs/types/krb5_prompter_fct:krb5-prompter-fct}}\label{\detokenize{appdev/refs/types/krb5_prompter_fct::doc}}\index{krb5\_prompter\_fct (C type)}
14810
14811\begin{fulllineitems}
14812\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompter_fct:c.krb5_prompter_fct}}\pysigline{\sphinxbfcode{krb5\_prompter\_fct}}
14813\end{fulllineitems}
14814
14815
14816Pointer to a prompter callback function.
14817
14818
14819\paragraph{Declaration}
14820\label{\detokenize{appdev/refs/types/krb5_prompter_fct:declaration}}
14821typedef krb5\_error\_code( * krb5\_prompter\_fct) (krb5\_context context, void *data, const char *name, const char *banner, int num\_prompts, krb5\_prompt prompts{[}{]})
14822
14823
14824\subsubsection{krb5\_pwd\_data}
14825\label{\detokenize{appdev/refs/types/krb5_pwd_data:krb5-pwd-data}}\label{\detokenize{appdev/refs/types/krb5_pwd_data::doc}}\label{\detokenize{appdev/refs/types/krb5_pwd_data:krb5-pwd-data-struct}}\index{krb5\_pwd\_data (C type)}
14826
14827\begin{fulllineitems}
14828\phantomsection\label{\detokenize{appdev/refs/types/krb5_pwd_data:c.krb5_pwd_data}}\pysigline{\sphinxbfcode{krb5\_pwd\_data}}
14829\end{fulllineitems}
14830
14831
14832
14833\paragraph{Declaration}
14834\label{\detokenize{appdev/refs/types/krb5_pwd_data:declaration}}
14835typedef struct \_krb5\_pwd\_data  krb5\_pwd\_data
14836
14837
14838\paragraph{Members}
14839\label{\detokenize{appdev/refs/types/krb5_pwd_data:members}}\index{krb5\_pwd\_data.magic (C member)}
14840
14841\begin{fulllineitems}
14842\phantomsection\label{\detokenize{appdev/refs/types/krb5_pwd_data:c.krb5_pwd_data.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_pwd\_data.magic}}
14843\end{fulllineitems}
14844
14845\index{krb5\_pwd\_data.sequence\_count (C member)}
14846
14847\begin{fulllineitems}
14848\phantomsection\label{\detokenize{appdev/refs/types/krb5_pwd_data:c.krb5_pwd_data.sequence_count}}\pysigline{int       \sphinxbfcode{krb5\_pwd\_data.sequence\_count}}
14849\end{fulllineitems}
14850
14851\index{krb5\_pwd\_data.element (C member)}
14852
14853\begin{fulllineitems}
14854\phantomsection\label{\detokenize{appdev/refs/types/krb5_pwd_data:c.krb5_pwd_data.element}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/passwd_phrase_element:c.passwd_phrase_element}]{\sphinxcrossref{passwd\_phrase\_element}}}  ** \sphinxbfcode{krb5\_pwd\_data.element}}
14855\end{fulllineitems}
14856
14857
14858
14859\subsubsection{krb5\_responder\_context}
14860\label{\detokenize{appdev/refs/types/krb5_responder_context:krb5-responder-context-struct}}\label{\detokenize{appdev/refs/types/krb5_responder_context::doc}}\label{\detokenize{appdev/refs/types/krb5_responder_context:krb5-responder-context}}\index{krb5\_responder\_context (C type)}
14861
14862\begin{fulllineitems}
14863\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}}\pysigline{\sphinxbfcode{krb5\_responder\_context}}
14864\end{fulllineitems}
14865
14866
14867A container for a set of preauthentication questions and answers.
14868
14869A responder context is supplied by the krb5 authentication system to a {\hyperref[\detokenize{appdev/refs/types/krb5_responder_fn:c.krb5_responder_fn}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_fn}}}} callback. It contains a list of questions and can receive answers. Questions contained in a responder context can be listed using {\hyperref[\detokenize{appdev/refs/api/krb5_responder_list_questions:c.krb5_responder_list_questions}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_list\_questions()}}}} , retrieved using {\hyperref[\detokenize{appdev/refs/api/krb5_responder_get_challenge:c.krb5_responder_get_challenge}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_get\_challenge()}}}} , or answered using {\hyperref[\detokenize{appdev/refs/api/krb5_responder_set_answer:c.krb5_responder_set_answer}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_set\_answer()}}}} . The form of a question’s challenge and answer depend on the question name.
14870
14871
14872\paragraph{Declaration}
14873\label{\detokenize{appdev/refs/types/krb5_responder_context:declaration}}
14874typedef struct krb5\_responder\_context\_st* krb5\_responder\_context
14875
14876
14877\subsubsection{krb5\_responder\_fn}
14878\label{\detokenize{appdev/refs/types/krb5_responder_fn:krb5-responder-fn-struct}}\label{\detokenize{appdev/refs/types/krb5_responder_fn::doc}}\label{\detokenize{appdev/refs/types/krb5_responder_fn:krb5-responder-fn}}\index{krb5\_responder\_fn (C type)}
14879
14880\begin{fulllineitems}
14881\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_fn:c.krb5_responder_fn}}\pysigline{\sphinxbfcode{krb5\_responder\_fn}}
14882\end{fulllineitems}
14883
14884
14885Responder function for an initial credential exchange.
14886
14887If a required question is unanswered, the prompter may be called.
14888
14889
14890\paragraph{Declaration}
14891\label{\detokenize{appdev/refs/types/krb5_responder_fn:declaration}}
14892typedef krb5\_error\_code( * krb5\_responder\_fn) (krb5\_context ctx, void *data, krb5\_responder\_context rctx)
14893
14894
14895\subsubsection{krb5\_responder\_otp\_challenge}
14896\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:krb5-responder-otp-challenge}}\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:krb5-responder-otp-challenge-struct}}\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge::doc}}\index{krb5\_responder\_otp\_challenge (C type)}
14897
14898\begin{fulllineitems}
14899\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:c.krb5_responder_otp_challenge}}\pysigline{\sphinxbfcode{krb5\_responder\_otp\_challenge}}
14900\end{fulllineitems}
14901
14902
14903
14904\paragraph{Declaration}
14905\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:declaration}}
14906typedef struct \_krb5\_responder\_otp\_challenge  krb5\_responder\_otp\_challenge
14907
14908
14909\paragraph{Members}
14910\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:members}}\index{krb5\_responder\_otp\_challenge.service (C member)}
14911
14912\begin{fulllineitems}
14913\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:c.krb5_responder_otp_challenge.service}}\pysigline{char *    \sphinxbfcode{krb5\_responder\_otp\_challenge.service}}
14914\end{fulllineitems}
14915
14916\index{krb5\_responder\_otp\_challenge.tokeninfo (C member)}
14917
14918\begin{fulllineitems}
14919\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:c.krb5_responder_otp_challenge.tokeninfo}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo}]{\sphinxcrossref{krb5\_responder\_otp\_tokeninfo}}}  **  \sphinxbfcode{krb5\_responder\_otp\_challenge.tokeninfo}}
14920\end{fulllineitems}
14921
14922
14923
14924\subsubsection{krb5\_responder\_otp\_tokeninfo}
14925\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:krb5-responder-otp-tokeninfo}}\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:krb5-responder-otp-tokeninfo-struct}}\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo::doc}}\index{krb5\_responder\_otp\_tokeninfo (C type)}
14926
14927\begin{fulllineitems}
14928\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo}}\pysigline{\sphinxbfcode{krb5\_responder\_otp\_tokeninfo}}
14929\end{fulllineitems}
14930
14931
14932
14933\paragraph{Declaration}
14934\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:declaration}}
14935typedef struct \_krb5\_responder\_otp\_tokeninfo  krb5\_responder\_otp\_tokeninfo
14936
14937
14938\paragraph{Members}
14939\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:members}}\index{krb5\_responder\_otp\_tokeninfo.flags (C member)}
14940
14941\begin{fulllineitems}
14942\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.flags}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}        \sphinxbfcode{krb5\_responder\_otp\_tokeninfo.flags}}
14943\end{fulllineitems}
14944
14945\index{krb5\_responder\_otp\_tokeninfo.format (C member)}
14946
14947\begin{fulllineitems}
14948\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.format}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_responder\_otp\_tokeninfo.format}}
14949\end{fulllineitems}
14950
14951\index{krb5\_responder\_otp\_tokeninfo.length (C member)}
14952
14953\begin{fulllineitems}
14954\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.length}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_responder\_otp\_tokeninfo.length}}
14955\end{fulllineitems}
14956
14957\index{krb5\_responder\_otp\_tokeninfo.vendor (C member)}
14958
14959\begin{fulllineitems}
14960\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.vendor}}\pysigline{char *    \sphinxbfcode{krb5\_responder\_otp\_tokeninfo.vendor}}
14961\end{fulllineitems}
14962
14963\index{krb5\_responder\_otp\_tokeninfo.challenge (C member)}
14964
14965\begin{fulllineitems}
14966\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.challenge}}\pysigline{char *    \sphinxbfcode{krb5\_responder\_otp\_tokeninfo.challenge}}
14967\end{fulllineitems}
14968
14969\index{krb5\_responder\_otp\_tokeninfo.token\_id (C member)}
14970
14971\begin{fulllineitems}
14972\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.token_id}}\pysigline{char *    \sphinxbfcode{krb5\_responder\_otp\_tokeninfo.token\_id}}
14973\end{fulllineitems}
14974
14975\index{krb5\_responder\_otp\_tokeninfo.alg\_id (C member)}
14976
14977\begin{fulllineitems}
14978\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.alg_id}}\pysigline{char *    \sphinxbfcode{krb5\_responder\_otp\_tokeninfo.alg\_id}}
14979\end{fulllineitems}
14980
14981
14982
14983\subsubsection{krb5\_responder\_pkinit\_challenge}
14984\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:krb5-responder-pkinit-challenge-struct}}\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge::doc}}\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:krb5-responder-pkinit-challenge}}\index{krb5\_responder\_pkinit\_challenge (C type)}
14985
14986\begin{fulllineitems}
14987\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:c.krb5_responder_pkinit_challenge}}\pysigline{\sphinxbfcode{krb5\_responder\_pkinit\_challenge}}
14988\end{fulllineitems}
14989
14990
14991
14992\paragraph{Declaration}
14993\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:declaration}}
14994typedef struct \_krb5\_responder\_pkinit\_challenge  krb5\_responder\_pkinit\_challenge
14995
14996
14997\paragraph{Members}
14998\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:members}}\index{krb5\_responder\_pkinit\_challenge.identities (C member)}
14999
15000\begin{fulllineitems}
15001\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:c.krb5_responder_pkinit_challenge.identities}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:c.krb5_responder_pkinit_identity}]{\sphinxcrossref{krb5\_responder\_pkinit\_identity}}}  **        \sphinxbfcode{krb5\_responder\_pkinit\_challenge.identities}}
15002\end{fulllineitems}
15003
15004
15005
15006\subsubsection{krb5\_responder\_pkinit\_identity}
15007\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:krb5-responder-pkinit-identity}}\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity::doc}}\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:krb5-responder-pkinit-identity-struct}}\index{krb5\_responder\_pkinit\_identity (C type)}
15008
15009\begin{fulllineitems}
15010\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:c.krb5_responder_pkinit_identity}}\pysigline{\sphinxbfcode{krb5\_responder\_pkinit\_identity}}
15011\end{fulllineitems}
15012
15013
15014
15015\paragraph{Declaration}
15016\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:declaration}}
15017typedef struct \_krb5\_responder\_pkinit\_identity  krb5\_responder\_pkinit\_identity
15018
15019
15020\paragraph{Members}
15021\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:members}}\index{krb5\_responder\_pkinit\_identity.identity (C member)}
15022
15023\begin{fulllineitems}
15024\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:c.krb5_responder_pkinit_identity.identity}}\pysigline{char *    \sphinxbfcode{krb5\_responder\_pkinit\_identity.identity}}
15025\end{fulllineitems}
15026
15027\index{krb5\_responder\_pkinit\_identity.token\_flags (C member)}
15028
15029\begin{fulllineitems}
15030\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:c.krb5_responder_pkinit_identity.token_flags}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_responder\_pkinit\_identity.token\_flags}}
15031\end{fulllineitems}
15032
15033
15034
15035\subsubsection{krb5\_response}
15036\label{\detokenize{appdev/refs/types/krb5_response::doc}}\label{\detokenize{appdev/refs/types/krb5_response:krb5-response}}\label{\detokenize{appdev/refs/types/krb5_response:krb5-response-struct}}\index{krb5\_response (C type)}
15037
15038\begin{fulllineitems}
15039\phantomsection\label{\detokenize{appdev/refs/types/krb5_response:c.krb5_response}}\pysigline{\sphinxbfcode{krb5\_response}}
15040\end{fulllineitems}
15041
15042
15043
15044\paragraph{Declaration}
15045\label{\detokenize{appdev/refs/types/krb5_response:declaration}}
15046typedef struct \_krb5\_response  krb5\_response
15047
15048
15049\paragraph{Members}
15050\label{\detokenize{appdev/refs/types/krb5_response:members}}\index{krb5\_response.magic (C member)}
15051
15052\begin{fulllineitems}
15053\phantomsection\label{\detokenize{appdev/refs/types/krb5_response:c.krb5_response.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_response.magic}}
15054\end{fulllineitems}
15055
15056\index{krb5\_response.message\_type (C member)}
15057
15058\begin{fulllineitems}
15059\phantomsection\label{\detokenize{appdev/refs/types/krb5_response:c.krb5_response.message_type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{krb5\_octet}}}        \sphinxbfcode{krb5\_response.message\_type}}
15060\end{fulllineitems}
15061
15062\index{krb5\_response.response (C member)}
15063
15064\begin{fulllineitems}
15065\phantomsection\label{\detokenize{appdev/refs/types/krb5_response:c.krb5_response.response}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_response.response}}
15066\end{fulllineitems}
15067
15068\index{krb5\_response.expected\_nonce (C member)}
15069
15070\begin{fulllineitems}
15071\phantomsection\label{\detokenize{appdev/refs/types/krb5_response:c.krb5_response.expected_nonce}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_response.expected\_nonce}}
15072\end{fulllineitems}
15073
15074\index{krb5\_response.request\_time (C member)}
15075
15076\begin{fulllineitems}
15077\phantomsection\label{\detokenize{appdev/refs/types/krb5_response:c.krb5_response.request_time}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}    \sphinxbfcode{krb5\_response.request\_time}}
15078\end{fulllineitems}
15079
15080
15081
15082\subsubsection{krb5\_replay\_data}
15083\label{\detokenize{appdev/refs/types/krb5_replay_data:krb5-replay-data}}\label{\detokenize{appdev/refs/types/krb5_replay_data:krb5-replay-data-struct}}\label{\detokenize{appdev/refs/types/krb5_replay_data::doc}}\index{krb5\_replay\_data (C type)}
15084
15085\begin{fulllineitems}
15086\phantomsection\label{\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}}\pysigline{\sphinxbfcode{krb5\_replay\_data}}
15087\end{fulllineitems}
15088
15089
15090Replay data.
15091
15092Sequence number and timestamp information output by {\hyperref[\detokenize{appdev/refs/api/krb5_rd_priv:c.krb5_rd_priv}]{\sphinxcrossref{\sphinxcode{krb5\_rd\_priv()}}}} and {\hyperref[\detokenize{appdev/refs/api/krb5_rd_safe:c.krb5_rd_safe}]{\sphinxcrossref{\sphinxcode{krb5\_rd\_safe()}}}} .
15093
15094
15095\paragraph{Declaration}
15096\label{\detokenize{appdev/refs/types/krb5_replay_data:declaration}}
15097typedef struct krb5\_replay\_data  krb5\_replay\_data
15098
15099
15100\paragraph{Members}
15101\label{\detokenize{appdev/refs/types/krb5_replay_data:members}}\index{krb5\_replay\_data.timestamp (C member)}
15102
15103\begin{fulllineitems}
15104\phantomsection\label{\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data.timestamp}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}    \sphinxbfcode{krb5\_replay\_data.timestamp}}
15105Timestamp, seconds portion.
15106
15107\end{fulllineitems}
15108
15109\index{krb5\_replay\_data.usec (C member)}
15110
15111\begin{fulllineitems}
15112\phantomsection\label{\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data.usec}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_replay\_data.usec}}
15113Timestamp, microseconds portion.
15114
15115\end{fulllineitems}
15116
15117\index{krb5\_replay\_data.seq (C member)}
15118
15119\begin{fulllineitems}
15120\phantomsection\label{\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data.seq}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}]{\sphinxcrossref{krb5\_ui\_4}}} \sphinxbfcode{krb5\_replay\_data.seq}}
15121Sequence number.
15122
15123\end{fulllineitems}
15124
15125
15126
15127\subsubsection{krb5\_ticket}
15128\label{\detokenize{appdev/refs/types/krb5_ticket:krb5-ticket}}\label{\detokenize{appdev/refs/types/krb5_ticket::doc}}\label{\detokenize{appdev/refs/types/krb5_ticket:krb5-ticket-struct}}\index{krb5\_ticket (C type)}
15129
15130\begin{fulllineitems}
15131\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}}\pysigline{\sphinxbfcode{krb5\_ticket}}
15132\end{fulllineitems}
15133
15134
15135Ticket structure.
15136
15137The C representation of the ticket message, with a pointer to the C representation of the encrypted part.
15138
15139
15140\paragraph{Declaration}
15141\label{\detokenize{appdev/refs/types/krb5_ticket:declaration}}
15142typedef struct \_krb5\_ticket  krb5\_ticket
15143
15144
15145\paragraph{Members}
15146\label{\detokenize{appdev/refs/types/krb5_ticket:members}}\index{krb5\_ticket.magic (C member)}
15147
15148\begin{fulllineitems}
15149\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_ticket.magic}}
15150\end{fulllineitems}
15151
15152\index{krb5\_ticket.server (C member)}
15153
15154\begin{fulllineitems}
15155\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket.server}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{krb5\_principal}}}    \sphinxbfcode{krb5\_ticket.server}}
15156server name/realm
15157
15158\end{fulllineitems}
15159
15160\index{krb5\_ticket.enc\_part (C member)}
15161
15162\begin{fulllineitems}
15163\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket.enc_part}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}]{\sphinxcrossref{krb5\_enc\_data}}}     \sphinxbfcode{krb5\_ticket.enc\_part}}
15164encryption type, kvno, encrypted encoding
15165
15166\end{fulllineitems}
15167
15168\index{krb5\_ticket.enc\_part2 (C member)}
15169
15170\begin{fulllineitems}
15171\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket.enc_part2}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part}]{\sphinxcrossref{krb5\_enc\_tkt\_part}}}  *      \sphinxbfcode{krb5\_ticket.enc\_part2}}
15172ptr to decrypted version, if available
15173
15174\end{fulllineitems}
15175
15176
15177
15178\subsubsection{krb5\_ticket\_times}
15179\label{\detokenize{appdev/refs/types/krb5_ticket_times:krb5-ticket-times}}\label{\detokenize{appdev/refs/types/krb5_ticket_times:krb5-ticket-times-struct}}\label{\detokenize{appdev/refs/types/krb5_ticket_times::doc}}\index{krb5\_ticket\_times (C type)}
15180
15181\begin{fulllineitems}
15182\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}}\pysigline{\sphinxbfcode{krb5\_ticket\_times}}
15183\end{fulllineitems}
15184
15185
15186Ticket start time, end time, and renewal duration.
15187
15188
15189\paragraph{Declaration}
15190\label{\detokenize{appdev/refs/types/krb5_ticket_times:declaration}}
15191typedef struct \_krb5\_ticket\_times  krb5\_ticket\_times
15192
15193
15194\paragraph{Members}
15195\label{\detokenize{appdev/refs/types/krb5_ticket_times:members}}\index{krb5\_ticket\_times.authtime (C member)}
15196
15197\begin{fulllineitems}
15198\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times.authtime}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}    \sphinxbfcode{krb5\_ticket\_times.authtime}}
15199Time at which KDC issued the initial ticket that corresponds to this ticket.
15200
15201\end{fulllineitems}
15202
15203\index{krb5\_ticket\_times.starttime (C member)}
15204
15205\begin{fulllineitems}
15206\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times.starttime}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}    \sphinxbfcode{krb5\_ticket\_times.starttime}}
15207optional in ticket, if not present, use \sphinxstyleemphasis{authtime}
15208
15209\end{fulllineitems}
15210
15211\index{krb5\_ticket\_times.endtime (C member)}
15212
15213\begin{fulllineitems}
15214\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times.endtime}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}    \sphinxbfcode{krb5\_ticket\_times.endtime}}
15215Ticket expiration time.
15216
15217\end{fulllineitems}
15218
15219\index{krb5\_ticket\_times.renew\_till (C member)}
15220
15221\begin{fulllineitems}
15222\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times.renew_till}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{krb5\_timestamp}}}    \sphinxbfcode{krb5\_ticket\_times.renew\_till}}
15223Latest time at which renewal of ticket can be valid.
15224
15225\end{fulllineitems}
15226
15227
15228
15229\subsubsection{krb5\_timestamp}
15230\label{\detokenize{appdev/refs/types/krb5_timestamp:krb5-timestamp-struct}}\label{\detokenize{appdev/refs/types/krb5_timestamp::doc}}\label{\detokenize{appdev/refs/types/krb5_timestamp:krb5-timestamp}}\index{krb5\_timestamp (C type)}
15231
15232\begin{fulllineitems}
15233\phantomsection\label{\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}}\pysigline{\sphinxbfcode{krb5\_timestamp}}
15234\end{fulllineitems}
15235
15236
15237Represents a timestamp in seconds since the POSIX epoch.
15238
15239This legacy type is used frequently in the ABI, but cannot represent timestamps after 2038 as a positive number. Code which uses this type should cast values of it to uint32\_t so that negative values are treated as timestamps between 2038 and 2106 on platforms with 64-bit time\_t.
15240
15241
15242\paragraph{Declaration}
15243\label{\detokenize{appdev/refs/types/krb5_timestamp:declaration}}
15244typedef krb5\_int32 krb5\_timestamp
15245
15246
15247\subsubsection{krb5\_tkt\_authent}
15248\label{\detokenize{appdev/refs/types/krb5_tkt_authent:krb5-tkt-authent}}\label{\detokenize{appdev/refs/types/krb5_tkt_authent:krb5-tkt-authent-struct}}\label{\detokenize{appdev/refs/types/krb5_tkt_authent::doc}}\index{krb5\_tkt\_authent (C type)}
15249
15250\begin{fulllineitems}
15251\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent}}\pysigline{\sphinxbfcode{krb5\_tkt\_authent}}
15252\end{fulllineitems}
15253
15254
15255Ticket authentication data.
15256
15257
15258\paragraph{Declaration}
15259\label{\detokenize{appdev/refs/types/krb5_tkt_authent:declaration}}
15260typedef struct \_krb5\_tkt\_authent  krb5\_tkt\_authent
15261
15262
15263\paragraph{Members}
15264\label{\detokenize{appdev/refs/types/krb5_tkt_authent:members}}\index{krb5\_tkt\_authent.magic (C member)}
15265
15266\begin{fulllineitems}
15267\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_tkt\_authent.magic}}
15268\end{fulllineitems}
15269
15270\index{krb5\_tkt\_authent.ticket (C member)}
15271
15272\begin{fulllineitems}
15273\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent.ticket}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}]{\sphinxcrossref{krb5\_ticket}}}  *    \sphinxbfcode{krb5\_tkt\_authent.ticket}}
15274\end{fulllineitems}
15275
15276\index{krb5\_tkt\_authent.authenticator (C member)}
15277
15278\begin{fulllineitems}
15279\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent.authenticator}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}]{\sphinxcrossref{krb5\_authenticator}}}  *     \sphinxbfcode{krb5\_tkt\_authent.authenticator}}
15280\end{fulllineitems}
15281
15282\index{krb5\_tkt\_authent.ap\_options (C member)}
15283
15284\begin{fulllineitems}
15285\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent.ap_options}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}        \sphinxbfcode{krb5\_tkt\_authent.ap\_options}}
15286\end{fulllineitems}
15287
15288
15289
15290\subsubsection{krb5\_trace\_callback}
15291\label{\detokenize{appdev/refs/types/krb5_trace_callback:krb5-trace-callback-struct}}\label{\detokenize{appdev/refs/types/krb5_trace_callback:krb5-trace-callback}}\label{\detokenize{appdev/refs/types/krb5_trace_callback::doc}}\index{krb5\_trace\_callback (C type)}
15292
15293\begin{fulllineitems}
15294\phantomsection\label{\detokenize{appdev/refs/types/krb5_trace_callback:c.krb5_trace_callback}}\pysigline{\sphinxbfcode{krb5\_trace\_callback}}
15295\end{fulllineitems}
15296
15297
15298
15299\paragraph{Declaration}
15300\label{\detokenize{appdev/refs/types/krb5_trace_callback:declaration}}
15301typedef void( * krb5\_trace\_callback) (krb5\_context context, const krb5\_trace\_info *info, void *cb\_data)
15302
15303
15304\subsubsection{krb5\_trace\_info}
15305\label{\detokenize{appdev/refs/types/krb5_trace_info:krb5-trace-info-struct}}\label{\detokenize{appdev/refs/types/krb5_trace_info::doc}}\label{\detokenize{appdev/refs/types/krb5_trace_info:krb5-trace-info}}\index{krb5\_trace\_info (C type)}
15306
15307\begin{fulllineitems}
15308\phantomsection\label{\detokenize{appdev/refs/types/krb5_trace_info:c.krb5_trace_info}}\pysigline{\sphinxbfcode{krb5\_trace\_info}}
15309\end{fulllineitems}
15310
15311
15312A wrapper for passing information to a \sphinxstyleemphasis{krb5\_trace\_callback} .
15313
15314Currently, it only contains the formatted message as determined the the format string and arguments of the tracing macro, but it may be extended to contain more fields in the future.
15315
15316
15317\paragraph{Declaration}
15318\label{\detokenize{appdev/refs/types/krb5_trace_info:declaration}}
15319typedef struct \_krb5\_trace\_info  krb5\_trace\_info
15320
15321
15322\paragraph{Members}
15323\label{\detokenize{appdev/refs/types/krb5_trace_info:members}}\index{krb5\_trace\_info.message (C member)}
15324
15325\begin{fulllineitems}
15326\phantomsection\label{\detokenize{appdev/refs/types/krb5_trace_info:c.krb5_trace_info.message}}\pysigline{const char *      \sphinxbfcode{krb5\_trace\_info.message}}
15327\end{fulllineitems}
15328
15329
15330
15331\subsubsection{krb5\_transited}
15332\label{\detokenize{appdev/refs/types/krb5_transited:krb5-transited-struct}}\label{\detokenize{appdev/refs/types/krb5_transited::doc}}\label{\detokenize{appdev/refs/types/krb5_transited:krb5-transited}}\index{krb5\_transited (C type)}
15333
15334\begin{fulllineitems}
15335\phantomsection\label{\detokenize{appdev/refs/types/krb5_transited:c.krb5_transited}}\pysigline{\sphinxbfcode{krb5\_transited}}
15336\end{fulllineitems}
15337
15338
15339Structure for transited encoding.
15340
15341
15342\paragraph{Declaration}
15343\label{\detokenize{appdev/refs/types/krb5_transited:declaration}}
15344typedef struct \_krb5\_transited  krb5\_transited
15345
15346
15347\paragraph{Members}
15348\label{\detokenize{appdev/refs/types/krb5_transited:members}}\index{krb5\_transited.magic (C member)}
15349
15350\begin{fulllineitems}
15351\phantomsection\label{\detokenize{appdev/refs/types/krb5_transited:c.krb5_transited.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_transited.magic}}
15352\end{fulllineitems}
15353
15354\index{krb5\_transited.tr\_type (C member)}
15355
15356\begin{fulllineitems}
15357\phantomsection\label{\detokenize{appdev/refs/types/krb5_transited:c.krb5_transited.tr_type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{krb5\_octet}}}        \sphinxbfcode{krb5\_transited.tr\_type}}
15358Transited encoding type.
15359
15360\end{fulllineitems}
15361
15362\index{krb5\_transited.tr\_contents (C member)}
15363
15364\begin{fulllineitems}
15365\phantomsection\label{\detokenize{appdev/refs/types/krb5_transited:c.krb5_transited.tr_contents}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}} \sphinxbfcode{krb5\_transited.tr\_contents}}
15366Contents.
15367
15368\end{fulllineitems}
15369
15370
15371
15372\subsubsection{krb5\_typed\_data}
15373\label{\detokenize{appdev/refs/types/krb5_typed_data:krb5-typed-data-struct}}\label{\detokenize{appdev/refs/types/krb5_typed_data::doc}}\label{\detokenize{appdev/refs/types/krb5_typed_data:krb5-typed-data}}\index{krb5\_typed\_data (C type)}
15374
15375\begin{fulllineitems}
15376\phantomsection\label{\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data}}\pysigline{\sphinxbfcode{krb5\_typed\_data}}
15377\end{fulllineitems}
15378
15379
15380
15381\paragraph{Declaration}
15382\label{\detokenize{appdev/refs/types/krb5_typed_data:declaration}}
15383typedef struct \_krb5\_typed\_data  krb5\_typed\_data
15384
15385
15386\paragraph{Members}
15387\label{\detokenize{appdev/refs/types/krb5_typed_data:members}}\index{krb5\_typed\_data.magic (C member)}
15388
15389\begin{fulllineitems}
15390\phantomsection\label{\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{krb5\_typed\_data.magic}}
15391\end{fulllineitems}
15392
15393\index{krb5\_typed\_data.type (C member)}
15394
15395\begin{fulllineitems}
15396\phantomsection\label{\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data.type}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}]{\sphinxcrossref{krb5\_int32}}}        \sphinxbfcode{krb5\_typed\_data.type}}
15397\end{fulllineitems}
15398
15399\index{krb5\_typed\_data.length (C member)}
15400
15401\begin{fulllineitems}
15402\phantomsection\label{\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data.length}}\pysigline{unsigned int      \sphinxbfcode{krb5\_typed\_data.length}}
15403\end{fulllineitems}
15404
15405\index{krb5\_typed\_data.data (C member)}
15406
15407\begin{fulllineitems}
15408\phantomsection\label{\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data.data}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}]{\sphinxcrossref{krb5\_octet}}} *      \sphinxbfcode{krb5\_typed\_data.data}}
15409\end{fulllineitems}
15410
15411
15412
15413\subsubsection{krb5\_ui\_2}
15414\label{\detokenize{appdev/refs/types/krb5_ui_2:krb5-ui-2-struct}}\label{\detokenize{appdev/refs/types/krb5_ui_2::doc}}\label{\detokenize{appdev/refs/types/krb5_ui_2:krb5-ui-2}}\index{krb5\_ui\_2 (C type)}
15415
15416\begin{fulllineitems}
15417\phantomsection\label{\detokenize{appdev/refs/types/krb5_ui_2:c.krb5_ui_2}}\pysigline{\sphinxbfcode{krb5\_ui\_2}}
15418\end{fulllineitems}
15419
15420
15421
15422\paragraph{Declaration}
15423\label{\detokenize{appdev/refs/types/krb5_ui_2:declaration}}
15424typedef uint16\_t krb5\_ui\_2
15425
15426
15427\subsubsection{krb5\_ui\_4}
15428\label{\detokenize{appdev/refs/types/krb5_ui_4:krb5-ui-4}}\label{\detokenize{appdev/refs/types/krb5_ui_4:krb5-ui-4-struct}}\label{\detokenize{appdev/refs/types/krb5_ui_4::doc}}\index{krb5\_ui\_4 (C type)}
15429
15430\begin{fulllineitems}
15431\phantomsection\label{\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}}\pysigline{\sphinxbfcode{krb5\_ui\_4}}
15432\end{fulllineitems}
15433
15434
15435
15436\paragraph{Declaration}
15437\label{\detokenize{appdev/refs/types/krb5_ui_4:declaration}}
15438typedef uint32\_t krb5\_ui\_4
15439
15440
15441\subsubsection{krb5\_verify\_init\_creds\_opt}
15442\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:krb5-verify-init-creds-opt-struct}}\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt::doc}}\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:krb5-verify-init-creds-opt}}\index{krb5\_verify\_init\_creds\_opt (C type)}
15443
15444\begin{fulllineitems}
15445\phantomsection\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt}}\pysigline{\sphinxbfcode{krb5\_verify\_init\_creds\_opt}}
15446\end{fulllineitems}
15447
15448
15449
15450\paragraph{Declaration}
15451\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:declaration}}
15452typedef struct \_krb5\_verify\_init\_creds\_opt  krb5\_verify\_init\_creds\_opt
15453
15454
15455\paragraph{Members}
15456\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:members}}\index{krb5\_verify\_init\_creds\_opt.flags (C member)}
15457
15458\begin{fulllineitems}
15459\phantomsection\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt.flags}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}]{\sphinxcrossref{krb5\_flags}}}        \sphinxbfcode{krb5\_verify\_init\_creds\_opt.flags}}
15460\end{fulllineitems}
15461
15462\index{krb5\_verify\_init\_creds\_opt.ap\_req\_nofail (C member)}
15463
15464\begin{fulllineitems}
15465\phantomsection\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt.ap_req_nofail}}\pysigline{int       \sphinxbfcode{krb5\_verify\_init\_creds\_opt.ap\_req\_nofail}}
15466boolean
15467
15468\end{fulllineitems}
15469
15470
15471
15472\subsubsection{passwd\_phrase\_element}
15473\label{\detokenize{appdev/refs/types/passwd_phrase_element:passwd-phrase-element-struct}}\label{\detokenize{appdev/refs/types/passwd_phrase_element::doc}}\label{\detokenize{appdev/refs/types/passwd_phrase_element:passwd-phrase-element}}\index{passwd\_phrase\_element (C type)}
15474
15475\begin{fulllineitems}
15476\phantomsection\label{\detokenize{appdev/refs/types/passwd_phrase_element:c.passwd_phrase_element}}\pysigline{\sphinxbfcode{passwd\_phrase\_element}}
15477\end{fulllineitems}
15478
15479
15480
15481\paragraph{Declaration}
15482\label{\detokenize{appdev/refs/types/passwd_phrase_element:declaration}}
15483typedef struct \_passwd\_phrase\_element  passwd\_phrase\_element
15484
15485
15486\paragraph{Members}
15487\label{\detokenize{appdev/refs/types/passwd_phrase_element:members}}\index{passwd\_phrase\_element.magic (C member)}
15488
15489\begin{fulllineitems}
15490\phantomsection\label{\detokenize{appdev/refs/types/passwd_phrase_element:c.passwd_phrase_element.magic}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}]{\sphinxcrossref{krb5\_magic}}}        \sphinxbfcode{passwd\_phrase\_element.magic}}
15491\end{fulllineitems}
15492
15493\index{passwd\_phrase\_element.passwd (C member)}
15494
15495\begin{fulllineitems}
15496\phantomsection\label{\detokenize{appdev/refs/types/passwd_phrase_element:c.passwd_phrase_element.passwd}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}}  *      \sphinxbfcode{passwd\_phrase\_element.passwd}}
15497\end{fulllineitems}
15498
15499\index{passwd\_phrase\_element.phrase (C member)}
15500
15501\begin{fulllineitems}
15502\phantomsection\label{\detokenize{appdev/refs/types/passwd_phrase_element:c.passwd_phrase_element.phrase}}\pysigline{{\hyperref[\detokenize{appdev/refs/types/krb5_data:c.krb5_data}]{\sphinxcrossref{krb5\_data}}}  *      \sphinxbfcode{passwd\_phrase\_element.phrase}}
15503\end{fulllineitems}
15504
15505
15506
15507\subsection{Internal}
15508\label{\detokenize{appdev/refs/types/index:internal}}
15509
15510\subsubsection{krb5\_auth\_context}
15511\label{\detokenize{appdev/refs/types/krb5_auth_context:krb5-auth-context}}\label{\detokenize{appdev/refs/types/krb5_auth_context::doc}}\label{\detokenize{appdev/refs/types/krb5_auth_context:krb5-auth-context-struct}}\index{krb5\_auth\_context (C type)}
15512
15513\begin{fulllineitems}
15514\phantomsection\label{\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}}\pysigline{\sphinxbfcode{krb5\_auth\_context}}
15515\end{fulllineitems}
15516
15517
15518
15519\paragraph{Declaration}
15520\label{\detokenize{appdev/refs/types/krb5_auth_context:declaration}}
15521typedef struct \_krb5\_auth\_context* krb5\_auth\_context
15522
15523
15524\subsubsection{krb5\_cksumtype}
15525\label{\detokenize{appdev/refs/types/krb5_cksumtype:krb5-cksumtype}}\label{\detokenize{appdev/refs/types/krb5_cksumtype:krb5-cksumtype-struct}}\label{\detokenize{appdev/refs/types/krb5_cksumtype::doc}}\index{krb5\_cksumtype (C type)}
15526
15527\begin{fulllineitems}
15528\phantomsection\label{\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}}\pysigline{\sphinxbfcode{krb5\_cksumtype}}
15529\end{fulllineitems}
15530
15531
15532
15533\paragraph{Declaration}
15534\label{\detokenize{appdev/refs/types/krb5_cksumtype:declaration}}
15535typedef krb5\_int32 krb5\_cksumtype
15536
15537
15538\subsubsection{krb5\_context}
15539\label{\detokenize{appdev/refs/types/krb5_context:krb5-context}}\label{\detokenize{appdev/refs/types/krb5_context:krb5-context-struct}}\label{\detokenize{appdev/refs/types/krb5_context::doc}}\index{krb5\_context (C type)}
15540
15541\begin{fulllineitems}
15542\phantomsection\label{\detokenize{appdev/refs/types/krb5_context:c.krb5_context}}\pysigline{\sphinxbfcode{krb5\_context}}
15543\end{fulllineitems}
15544
15545
15546
15547\paragraph{Declaration}
15548\label{\detokenize{appdev/refs/types/krb5_context:declaration}}
15549typedef struct \_krb5\_context* krb5\_context
15550
15551
15552\subsubsection{krb5\_cc\_cursor}
15553\label{\detokenize{appdev/refs/types/krb5_cc_cursor:krb5-cc-cursor-struct}}\label{\detokenize{appdev/refs/types/krb5_cc_cursor:krb5-cc-cursor}}\label{\detokenize{appdev/refs/types/krb5_cc_cursor::doc}}\index{krb5\_cc\_cursor (C type)}
15554
15555\begin{fulllineitems}
15556\phantomsection\label{\detokenize{appdev/refs/types/krb5_cc_cursor:c.krb5_cc_cursor}}\pysigline{\sphinxbfcode{krb5\_cc\_cursor}}
15557\end{fulllineitems}
15558
15559
15560Cursor for sequential lookup.
15561
15562
15563\paragraph{Declaration}
15564\label{\detokenize{appdev/refs/types/krb5_cc_cursor:declaration}}
15565typedef krb5\_pointer krb5\_cc\_cursor
15566
15567
15568\subsubsection{krb5\_ccache}
15569\label{\detokenize{appdev/refs/types/krb5_ccache:krb5-ccache-struct}}\label{\detokenize{appdev/refs/types/krb5_ccache::doc}}\label{\detokenize{appdev/refs/types/krb5_ccache:krb5-ccache}}\index{krb5\_ccache (C type)}
15570
15571\begin{fulllineitems}
15572\phantomsection\label{\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}}\pysigline{\sphinxbfcode{krb5\_ccache}}
15573\end{fulllineitems}
15574
15575
15576
15577\paragraph{Declaration}
15578\label{\detokenize{appdev/refs/types/krb5_ccache:declaration}}
15579typedef struct \_krb5\_ccache* krb5\_ccache
15580
15581
15582\subsubsection{krb5\_cccol\_cursor}
15583\label{\detokenize{appdev/refs/types/krb5_cccol_cursor:krb5-cccol-cursor-struct}}\label{\detokenize{appdev/refs/types/krb5_cccol_cursor::doc}}\label{\detokenize{appdev/refs/types/krb5_cccol_cursor:krb5-cccol-cursor}}\index{krb5\_cccol\_cursor (C type)}
15584
15585\begin{fulllineitems}
15586\phantomsection\label{\detokenize{appdev/refs/types/krb5_cccol_cursor:c.krb5_cccol_cursor}}\pysigline{\sphinxbfcode{krb5\_cccol\_cursor}}
15587\end{fulllineitems}
15588
15589
15590Cursor for iterating over all ccaches.
15591
15592
15593\paragraph{Declaration}
15594\label{\detokenize{appdev/refs/types/krb5_cccol_cursor:declaration}}
15595typedef struct \_krb5\_cccol\_cursor* krb5\_cccol\_cursor
15596
15597
15598\subsubsection{krb5\_init\_creds\_context}
15599\label{\detokenize{appdev/refs/types/krb5_init_creds_context:krb5-init-creds-context}}\label{\detokenize{appdev/refs/types/krb5_init_creds_context::doc}}\label{\detokenize{appdev/refs/types/krb5_init_creds_context:krb5-init-creds-context-struct}}\index{krb5\_init\_creds\_context (C type)}
15600
15601\begin{fulllineitems}
15602\phantomsection\label{\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}}\pysigline{\sphinxbfcode{krb5\_init\_creds\_context}}
15603\end{fulllineitems}
15604
15605
15606
15607\paragraph{Declaration}
15608\label{\detokenize{appdev/refs/types/krb5_init_creds_context:declaration}}
15609typedef struct \_krb5\_init\_creds\_context* krb5\_init\_creds\_context
15610
15611
15612\subsubsection{krb5\_key}
15613\label{\detokenize{appdev/refs/types/krb5_key::doc}}\label{\detokenize{appdev/refs/types/krb5_key:krb5-key}}\label{\detokenize{appdev/refs/types/krb5_key:krb5-key-struct}}\index{krb5\_key (C type)}
15614
15615\begin{fulllineitems}
15616\phantomsection\label{\detokenize{appdev/refs/types/krb5_key:c.krb5_key}}\pysigline{\sphinxbfcode{krb5\_key}}
15617\end{fulllineitems}
15618
15619
15620Opaque identifier for a key.
15621
15622Use with the krb5\_k APIs for better performance for repeated operations with the same key and usage. Key identifiers must not be used simultaneously within multiple threads, as they may contain mutable internal state and are not mutex-protected.
15623
15624
15625\paragraph{Declaration}
15626\label{\detokenize{appdev/refs/types/krb5_key:declaration}}
15627typedef struct krb5\_key\_st* krb5\_key
15628
15629
15630\subsubsection{krb5\_keytab}
15631\label{\detokenize{appdev/refs/types/krb5_keytab:krb5-keytab}}\label{\detokenize{appdev/refs/types/krb5_keytab::doc}}\label{\detokenize{appdev/refs/types/krb5_keytab:krb5-keytab-struct}}\index{krb5\_keytab (C type)}
15632
15633\begin{fulllineitems}
15634\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}}\pysigline{\sphinxbfcode{krb5\_keytab}}
15635\end{fulllineitems}
15636
15637
15638
15639\paragraph{Declaration}
15640\label{\detokenize{appdev/refs/types/krb5_keytab:declaration}}
15641typedef struct \_krb5\_kt* krb5\_keytab
15642
15643
15644\subsubsection{krb5\_pac}
15645\label{\detokenize{appdev/refs/types/krb5_pac:krb5-pac-struct}}\label{\detokenize{appdev/refs/types/krb5_pac:krb5-pac}}\label{\detokenize{appdev/refs/types/krb5_pac::doc}}\index{krb5\_pac (C type)}
15646
15647\begin{fulllineitems}
15648\phantomsection\label{\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}}\pysigline{\sphinxbfcode{krb5\_pac}}
15649\end{fulllineitems}
15650
15651
15652PAC data structure to convey authorization information.
15653
15654
15655\paragraph{Declaration}
15656\label{\detokenize{appdev/refs/types/krb5_pac:declaration}}
15657typedef struct krb5\_pac\_data* krb5\_pac
15658
15659
15660\subsubsection{krb5\_rcache}
15661\label{\detokenize{appdev/refs/types/krb5_rcache:krb5-rcache-struct}}\label{\detokenize{appdev/refs/types/krb5_rcache::doc}}\label{\detokenize{appdev/refs/types/krb5_rcache:krb5-rcache}}\index{krb5\_rcache (C type)}
15662
15663\begin{fulllineitems}
15664\phantomsection\label{\detokenize{appdev/refs/types/krb5_rcache:c.krb5_rcache}}\pysigline{\sphinxbfcode{krb5\_rcache}}
15665\end{fulllineitems}
15666
15667
15668
15669\paragraph{Declaration}
15670\label{\detokenize{appdev/refs/types/krb5_rcache:declaration}}
15671typedef struct krb5\_rc\_st* krb5\_rcache
15672
15673
15674\subsubsection{krb5\_tkt\_creds\_context}
15675\label{\detokenize{appdev/refs/types/krb5_tkt_creds_context::doc}}\label{\detokenize{appdev/refs/types/krb5_tkt_creds_context:krb5-tkt-creds-context}}\label{\detokenize{appdev/refs/types/krb5_tkt_creds_context:krb5-tkt-creds-context-struct}}\index{krb5\_tkt\_creds\_context (C type)}
15676
15677\begin{fulllineitems}
15678\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}}\pysigline{\sphinxbfcode{krb5\_tkt\_creds\_context}}
15679\end{fulllineitems}
15680
15681
15682
15683\paragraph{Declaration}
15684\label{\detokenize{appdev/refs/types/krb5_tkt_creds_context:declaration}}
15685typedef struct \_krb5\_tkt\_creds\_context* krb5\_tkt\_creds\_context
15686
15687
15688\section{krb5 simple macros}
15689\label{\detokenize{appdev/refs/macros/index:krb5-simple-macros}}\label{\detokenize{appdev/refs/macros/index::doc}}
15690
15691\subsection{Public}
15692\label{\detokenize{appdev/refs/macros/index:public}}
15693
15694\subsubsection{ADDRTYPE\_ADDRPORT}
15695\label{\detokenize{appdev/refs/macros/ADDRTYPE_ADDRPORT:addrtype-addrport-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_ADDRPORT::doc}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_ADDRPORT:addrtype-addrport}}\index{ADDRTYPE\_ADDRPORT (built-in variable)}
15696
15697\begin{fulllineitems}
15698\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_ADDRPORT:ADDRTYPE_ADDRPORT}}\pysigline{\sphinxbfcode{ADDRTYPE\_ADDRPORT}}
15699\end{fulllineitems}
15700
15701
15702
15703\begin{savenotes}\sphinxattablestart
15704\centering
15705\begin{tabulary}{\linewidth}[t]{|T|T|}
15706\hline
15707
15708\sphinxcode{ADDRTYPE\_ADDRPORT}
15709&
15710\sphinxcode{0x0100}
15711\\
15712\hline
15713\end{tabulary}
15714\par
15715\sphinxattableend\end{savenotes}
15716
15717
15718\subsubsection{ADDRTYPE\_CHAOS}
15719\label{\detokenize{appdev/refs/macros/ADDRTYPE_CHAOS:addrtype-chaos}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_CHAOS:addrtype-chaos-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_CHAOS::doc}}\index{ADDRTYPE\_CHAOS (built-in variable)}
15720
15721\begin{fulllineitems}
15722\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_CHAOS:ADDRTYPE_CHAOS}}\pysigline{\sphinxbfcode{ADDRTYPE\_CHAOS}}
15723\end{fulllineitems}
15724
15725
15726
15727\begin{savenotes}\sphinxattablestart
15728\centering
15729\begin{tabulary}{\linewidth}[t]{|T|T|}
15730\hline
15731
15732\sphinxcode{ADDRTYPE\_CHAOS}
15733&
15734\sphinxcode{0x0005}
15735\\
15736\hline
15737\end{tabulary}
15738\par
15739\sphinxattableend\end{savenotes}
15740
15741
15742\subsubsection{ADDRTYPE\_DDP}
15743\label{\detokenize{appdev/refs/macros/ADDRTYPE_DDP:addrtype-ddp-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_DDP::doc}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_DDP:addrtype-ddp}}\index{ADDRTYPE\_DDP (built-in variable)}
15744
15745\begin{fulllineitems}
15746\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_DDP:ADDRTYPE_DDP}}\pysigline{\sphinxbfcode{ADDRTYPE\_DDP}}
15747\end{fulllineitems}
15748
15749
15750
15751\begin{savenotes}\sphinxattablestart
15752\centering
15753\begin{tabulary}{\linewidth}[t]{|T|T|}
15754\hline
15755
15756\sphinxcode{ADDRTYPE\_DDP}
15757&
15758\sphinxcode{0x0010}
15759\\
15760\hline
15761\end{tabulary}
15762\par
15763\sphinxattableend\end{savenotes}
15764
15765
15766\subsubsection{ADDRTYPE\_INET}
15767\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET:addrtype-inet}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET:addrtype-inet-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET::doc}}\index{ADDRTYPE\_INET (built-in variable)}
15768
15769\begin{fulllineitems}
15770\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET:ADDRTYPE_INET}}\pysigline{\sphinxbfcode{ADDRTYPE\_INET}}
15771\end{fulllineitems}
15772
15773
15774
15775\begin{savenotes}\sphinxattablestart
15776\centering
15777\begin{tabulary}{\linewidth}[t]{|T|T|}
15778\hline
15779
15780\sphinxcode{ADDRTYPE\_INET}
15781&
15782\sphinxcode{0x0002}
15783\\
15784\hline
15785\end{tabulary}
15786\par
15787\sphinxattableend\end{savenotes}
15788
15789
15790\subsubsection{ADDRTYPE\_INET6}
15791\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET6:addrtype-inet6-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET6:addrtype-inet6}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET6::doc}}\index{ADDRTYPE\_INET6 (built-in variable)}
15792
15793\begin{fulllineitems}
15794\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET6:ADDRTYPE_INET6}}\pysigline{\sphinxbfcode{ADDRTYPE\_INET6}}
15795\end{fulllineitems}
15796
15797
15798
15799\begin{savenotes}\sphinxattablestart
15800\centering
15801\begin{tabulary}{\linewidth}[t]{|T|T|}
15802\hline
15803
15804\sphinxcode{ADDRTYPE\_INET6}
15805&
15806\sphinxcode{0x0018}
15807\\
15808\hline
15809\end{tabulary}
15810\par
15811\sphinxattableend\end{savenotes}
15812
15813
15814\subsubsection{ADDRTYPE\_IPPORT}
15815\label{\detokenize{appdev/refs/macros/ADDRTYPE_IPPORT:addrtype-ipport}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_IPPORT::doc}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_IPPORT:addrtype-ipport-data}}\index{ADDRTYPE\_IPPORT (built-in variable)}
15816
15817\begin{fulllineitems}
15818\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_IPPORT:ADDRTYPE_IPPORT}}\pysigline{\sphinxbfcode{ADDRTYPE\_IPPORT}}
15819\end{fulllineitems}
15820
15821
15822
15823\begin{savenotes}\sphinxattablestart
15824\centering
15825\begin{tabulary}{\linewidth}[t]{|T|T|}
15826\hline
15827
15828\sphinxcode{ADDRTYPE\_IPPORT}
15829&
15830\sphinxcode{0x0101}
15831\\
15832\hline
15833\end{tabulary}
15834\par
15835\sphinxattableend\end{savenotes}
15836
15837
15838\subsubsection{ADDRTYPE\_ISO}
15839\label{\detokenize{appdev/refs/macros/ADDRTYPE_ISO::doc}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_ISO:addrtype-iso}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_ISO:addrtype-iso-data}}\index{ADDRTYPE\_ISO (built-in variable)}
15840
15841\begin{fulllineitems}
15842\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_ISO:ADDRTYPE_ISO}}\pysigline{\sphinxbfcode{ADDRTYPE\_ISO}}
15843\end{fulllineitems}
15844
15845
15846
15847\begin{savenotes}\sphinxattablestart
15848\centering
15849\begin{tabulary}{\linewidth}[t]{|T|T|}
15850\hline
15851
15852\sphinxcode{ADDRTYPE\_ISO}
15853&
15854\sphinxcode{0x0007}
15855\\
15856\hline
15857\end{tabulary}
15858\par
15859\sphinxattableend\end{savenotes}
15860
15861
15862\subsubsection{ADDRTYPE\_IS\_LOCAL}
15863\label{\detokenize{appdev/refs/macros/ADDRTYPE_IS_LOCAL::doc}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_IS_LOCAL:addrtype-is-local}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_IS_LOCAL:addrtype-is-local-data}}\index{ADDRTYPE\_IS\_LOCAL (built-in variable)}
15864
15865\begin{fulllineitems}
15866\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_IS_LOCAL:ADDRTYPE_IS_LOCAL}}\pysigline{\sphinxbfcode{ADDRTYPE\_IS\_LOCAL}}
15867\end{fulllineitems}
15868
15869
15870
15871\begin{savenotes}\sphinxattablestart
15872\centering
15873\begin{tabulary}{\linewidth}[t]{|T|T|}
15874\hline
15875
15876\sphinxcode{ADDRTYPE\_IS\_LOCAL (addrtype)}
15877&
15878\sphinxcode{(addrtype \& 0x8000)}
15879\\
15880\hline
15881\end{tabulary}
15882\par
15883\sphinxattableend\end{savenotes}
15884
15885
15886\subsubsection{ADDRTYPE\_NETBIOS}
15887\label{\detokenize{appdev/refs/macros/ADDRTYPE_NETBIOS:addrtype-netbios}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_NETBIOS::doc}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_NETBIOS:addrtype-netbios-data}}\index{ADDRTYPE\_NETBIOS (built-in variable)}
15888
15889\begin{fulllineitems}
15890\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_NETBIOS:ADDRTYPE_NETBIOS}}\pysigline{\sphinxbfcode{ADDRTYPE\_NETBIOS}}
15891\end{fulllineitems}
15892
15893
15894
15895\begin{savenotes}\sphinxattablestart
15896\centering
15897\begin{tabulary}{\linewidth}[t]{|T|T|}
15898\hline
15899
15900\sphinxcode{ADDRTYPE\_NETBIOS}
15901&
15902\sphinxcode{0x0014}
15903\\
15904\hline
15905\end{tabulary}
15906\par
15907\sphinxattableend\end{savenotes}
15908
15909
15910\subsubsection{ADDRTYPE\_XNS}
15911\label{\detokenize{appdev/refs/macros/ADDRTYPE_XNS::doc}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_XNS:addrtype-xns-data}}\label{\detokenize{appdev/refs/macros/ADDRTYPE_XNS:addrtype-xns}}\index{ADDRTYPE\_XNS (built-in variable)}
15912
15913\begin{fulllineitems}
15914\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_XNS:ADDRTYPE_XNS}}\pysigline{\sphinxbfcode{ADDRTYPE\_XNS}}
15915\end{fulllineitems}
15916
15917
15918
15919\begin{savenotes}\sphinxattablestart
15920\centering
15921\begin{tabulary}{\linewidth}[t]{|T|T|}
15922\hline
15923
15924\sphinxcode{ADDRTYPE\_XNS}
15925&
15926\sphinxcode{0x0006}
15927\\
15928\hline
15929\end{tabulary}
15930\par
15931\sphinxattableend\end{savenotes}
15932
15933
15934\subsubsection{AD\_TYPE\_EXTERNAL}
15935\label{\detokenize{appdev/refs/macros/AD_TYPE_EXTERNAL:ad-type-external-data}}\label{\detokenize{appdev/refs/macros/AD_TYPE_EXTERNAL::doc}}\label{\detokenize{appdev/refs/macros/AD_TYPE_EXTERNAL:ad-type-external}}\index{AD\_TYPE\_EXTERNAL (built-in variable)}
15936
15937\begin{fulllineitems}
15938\phantomsection\label{\detokenize{appdev/refs/macros/AD_TYPE_EXTERNAL:AD_TYPE_EXTERNAL}}\pysigline{\sphinxbfcode{AD\_TYPE\_EXTERNAL}}
15939\end{fulllineitems}
15940
15941
15942
15943\begin{savenotes}\sphinxattablestart
15944\centering
15945\begin{tabulary}{\linewidth}[t]{|T|T|}
15946\hline
15947
15948\sphinxcode{AD\_TYPE\_EXTERNAL}
15949&
15950\sphinxcode{0x4000}
15951\\
15952\hline
15953\end{tabulary}
15954\par
15955\sphinxattableend\end{savenotes}
15956
15957
15958\subsubsection{AD\_TYPE\_FIELD\_TYPE\_MASK}
15959\label{\detokenize{appdev/refs/macros/AD_TYPE_FIELD_TYPE_MASK:ad-type-field-type-mask}}\label{\detokenize{appdev/refs/macros/AD_TYPE_FIELD_TYPE_MASK::doc}}\label{\detokenize{appdev/refs/macros/AD_TYPE_FIELD_TYPE_MASK:ad-type-field-type-mask-data}}\index{AD\_TYPE\_FIELD\_TYPE\_MASK (built-in variable)}
15960
15961\begin{fulllineitems}
15962\phantomsection\label{\detokenize{appdev/refs/macros/AD_TYPE_FIELD_TYPE_MASK:AD_TYPE_FIELD_TYPE_MASK}}\pysigline{\sphinxbfcode{AD\_TYPE\_FIELD\_TYPE\_MASK}}
15963\end{fulllineitems}
15964
15965
15966
15967\begin{savenotes}\sphinxattablestart
15968\centering
15969\begin{tabulary}{\linewidth}[t]{|T|T|}
15970\hline
15971
15972\sphinxcode{AD\_TYPE\_FIELD\_TYPE\_MASK}
15973&
15974\sphinxcode{0x1fff}
15975\\
15976\hline
15977\end{tabulary}
15978\par
15979\sphinxattableend\end{savenotes}
15980
15981
15982\subsubsection{AD\_TYPE\_REGISTERED}
15983\label{\detokenize{appdev/refs/macros/AD_TYPE_REGISTERED:ad-type-registered-data}}\label{\detokenize{appdev/refs/macros/AD_TYPE_REGISTERED:ad-type-registered}}\label{\detokenize{appdev/refs/macros/AD_TYPE_REGISTERED::doc}}\index{AD\_TYPE\_REGISTERED (built-in variable)}
15984
15985\begin{fulllineitems}
15986\phantomsection\label{\detokenize{appdev/refs/macros/AD_TYPE_REGISTERED:AD_TYPE_REGISTERED}}\pysigline{\sphinxbfcode{AD\_TYPE\_REGISTERED}}
15987\end{fulllineitems}
15988
15989
15990
15991\begin{savenotes}\sphinxattablestart
15992\centering
15993\begin{tabulary}{\linewidth}[t]{|T|T|}
15994\hline
15995
15996\sphinxcode{AD\_TYPE\_REGISTERED}
15997&
15998\sphinxcode{0x2000}
15999\\
16000\hline
16001\end{tabulary}
16002\par
16003\sphinxattableend\end{savenotes}
16004
16005
16006\subsubsection{AD\_TYPE\_RESERVED}
16007\label{\detokenize{appdev/refs/macros/AD_TYPE_RESERVED::doc}}\label{\detokenize{appdev/refs/macros/AD_TYPE_RESERVED:ad-type-reserved}}\label{\detokenize{appdev/refs/macros/AD_TYPE_RESERVED:ad-type-reserved-data}}\index{AD\_TYPE\_RESERVED (built-in variable)}
16008
16009\begin{fulllineitems}
16010\phantomsection\label{\detokenize{appdev/refs/macros/AD_TYPE_RESERVED:AD_TYPE_RESERVED}}\pysigline{\sphinxbfcode{AD\_TYPE\_RESERVED}}
16011\end{fulllineitems}
16012
16013
16014
16015\begin{savenotes}\sphinxattablestart
16016\centering
16017\begin{tabulary}{\linewidth}[t]{|T|T|}
16018\hline
16019
16020\sphinxcode{AD\_TYPE\_RESERVED}
16021&
16022\sphinxcode{0x8000}
16023\\
16024\hline
16025\end{tabulary}
16026\par
16027\sphinxattableend\end{savenotes}
16028
16029
16030\subsubsection{AP\_OPTS\_ETYPE\_NEGOTIATION}
16031\label{\detokenize{appdev/refs/macros/AP_OPTS_ETYPE_NEGOTIATION::doc}}\label{\detokenize{appdev/refs/macros/AP_OPTS_ETYPE_NEGOTIATION:ap-opts-etype-negotiation}}\label{\detokenize{appdev/refs/macros/AP_OPTS_ETYPE_NEGOTIATION:ap-opts-etype-negotiation-data}}\index{AP\_OPTS\_ETYPE\_NEGOTIATION (built-in variable)}
16032
16033\begin{fulllineitems}
16034\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_ETYPE_NEGOTIATION:AP_OPTS_ETYPE_NEGOTIATION}}\pysigline{\sphinxbfcode{AP\_OPTS\_ETYPE\_NEGOTIATION}}
16035\end{fulllineitems}
16036
16037
16038
16039\begin{savenotes}\sphinxattablestart
16040\centering
16041\begin{tabulary}{\linewidth}[t]{|T|T|}
16042\hline
16043
16044\sphinxcode{AP\_OPTS\_ETYPE\_NEGOTIATION}
16045&
16046\sphinxcode{0x00000002}
16047\\
16048\hline
16049\end{tabulary}
16050\par
16051\sphinxattableend\end{savenotes}
16052
16053
16054\subsubsection{AP\_OPTS\_MUTUAL\_REQUIRED}
16055\label{\detokenize{appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED:ap-opts-mutual-required}}\label{\detokenize{appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED:ap-opts-mutual-required-data}}\label{\detokenize{appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED::doc}}\index{AP\_OPTS\_MUTUAL\_REQUIRED (built-in variable)}
16056
16057\begin{fulllineitems}
16058\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED:AP_OPTS_MUTUAL_REQUIRED}}\pysigline{\sphinxbfcode{AP\_OPTS\_MUTUAL\_REQUIRED}}
16059\end{fulllineitems}
16060
16061
16062Perform a mutual authentication exchange.
16063
16064
16065\begin{savenotes}\sphinxattablestart
16066\centering
16067\begin{tabulary}{\linewidth}[t]{|T|T|}
16068\hline
16069
16070\sphinxcode{AP\_OPTS\_MUTUAL\_REQUIRED}
16071&
16072\sphinxcode{0x20000000}
16073\\
16074\hline
16075\end{tabulary}
16076\par
16077\sphinxattableend\end{savenotes}
16078
16079
16080\subsubsection{AP\_OPTS\_RESERVED}
16081\label{\detokenize{appdev/refs/macros/AP_OPTS_RESERVED::doc}}\label{\detokenize{appdev/refs/macros/AP_OPTS_RESERVED:ap-opts-reserved-data}}\label{\detokenize{appdev/refs/macros/AP_OPTS_RESERVED:ap-opts-reserved}}\index{AP\_OPTS\_RESERVED (built-in variable)}
16082
16083\begin{fulllineitems}
16084\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_RESERVED:AP_OPTS_RESERVED}}\pysigline{\sphinxbfcode{AP\_OPTS\_RESERVED}}
16085\end{fulllineitems}
16086
16087
16088
16089\begin{savenotes}\sphinxattablestart
16090\centering
16091\begin{tabulary}{\linewidth}[t]{|T|T|}
16092\hline
16093
16094\sphinxcode{AP\_OPTS\_RESERVED}
16095&
16096\sphinxcode{0x80000000}
16097\\
16098\hline
16099\end{tabulary}
16100\par
16101\sphinxattableend\end{savenotes}
16102
16103
16104\subsubsection{AP\_OPTS\_USE\_SESSION\_KEY}
16105\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SESSION_KEY:ap-opts-use-session-key}}\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SESSION_KEY::doc}}\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SESSION_KEY:ap-opts-use-session-key-data}}\index{AP\_OPTS\_USE\_SESSION\_KEY (built-in variable)}
16106
16107\begin{fulllineitems}
16108\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SESSION_KEY:AP_OPTS_USE_SESSION_KEY}}\pysigline{\sphinxbfcode{AP\_OPTS\_USE\_SESSION\_KEY}}
16109\end{fulllineitems}
16110
16111
16112Use session key.
16113
16114
16115\begin{savenotes}\sphinxattablestart
16116\centering
16117\begin{tabulary}{\linewidth}[t]{|T|T|}
16118\hline
16119
16120\sphinxcode{AP\_OPTS\_USE\_SESSION\_KEY}
16121&
16122\sphinxcode{0x40000000}
16123\\
16124\hline
16125\end{tabulary}
16126\par
16127\sphinxattableend\end{savenotes}
16128
16129
16130\subsubsection{AP\_OPTS\_USE\_SUBKEY}
16131\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SUBKEY:ap-opts-use-subkey}}\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SUBKEY:ap-opts-use-subkey-data}}\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SUBKEY::doc}}\index{AP\_OPTS\_USE\_SUBKEY (built-in variable)}
16132
16133\begin{fulllineitems}
16134\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SUBKEY:AP_OPTS_USE_SUBKEY}}\pysigline{\sphinxbfcode{AP\_OPTS\_USE\_SUBKEY}}
16135\end{fulllineitems}
16136
16137
16138Generate a subsession key from the current session key obtained from the credentials.
16139
16140
16141\begin{savenotes}\sphinxattablestart
16142\centering
16143\begin{tabulary}{\linewidth}[t]{|T|T|}
16144\hline
16145
16146\sphinxcode{AP\_OPTS\_USE\_SUBKEY}
16147&
16148\sphinxcode{0x00000001}
16149\\
16150\hline
16151\end{tabulary}
16152\par
16153\sphinxattableend\end{savenotes}
16154
16155
16156\subsubsection{AP\_OPTS\_WIRE\_MASK}
16157\label{\detokenize{appdev/refs/macros/AP_OPTS_WIRE_MASK:ap-opts-wire-mask-data}}\label{\detokenize{appdev/refs/macros/AP_OPTS_WIRE_MASK:ap-opts-wire-mask}}\label{\detokenize{appdev/refs/macros/AP_OPTS_WIRE_MASK::doc}}\index{AP\_OPTS\_WIRE\_MASK (built-in variable)}
16158
16159\begin{fulllineitems}
16160\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_WIRE_MASK:AP_OPTS_WIRE_MASK}}\pysigline{\sphinxbfcode{AP\_OPTS\_WIRE\_MASK}}
16161\end{fulllineitems}
16162
16163
16164
16165\begin{savenotes}\sphinxattablestart
16166\centering
16167\begin{tabulary}{\linewidth}[t]{|T|T|}
16168\hline
16169
16170\sphinxcode{AP\_OPTS\_WIRE\_MASK}
16171&
16172\sphinxcode{0xfffffff0}
16173\\
16174\hline
16175\end{tabulary}
16176\par
16177\sphinxattableend\end{savenotes}
16178
16179
16180\subsubsection{CKSUMTYPE\_CMAC\_CAMELLIA128}
16181\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA128::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA128:cksumtype-cmac-camellia128}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA128:cksumtype-cmac-camellia128-data}}\index{CKSUMTYPE\_CMAC\_CAMELLIA128 (built-in variable)}
16182
16183\begin{fulllineitems}
16184\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA128:CKSUMTYPE_CMAC_CAMELLIA128}}\pysigline{\sphinxbfcode{CKSUMTYPE\_CMAC\_CAMELLIA128}}
16185\end{fulllineitems}
16186
16187
16188RFC 6803.
16189
16190
16191\begin{savenotes}\sphinxattablestart
16192\centering
16193\begin{tabulary}{\linewidth}[t]{|T|T|}
16194\hline
16195
16196\sphinxcode{CKSUMTYPE\_CMAC\_CAMELLIA128}
16197&
16198\sphinxcode{0x0011}
16199\\
16200\hline
16201\end{tabulary}
16202\par
16203\sphinxattableend\end{savenotes}
16204
16205
16206\subsubsection{CKSUMTYPE\_CMAC\_CAMELLIA256}
16207\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA256::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA256:cksumtype-cmac-camellia256}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA256:cksumtype-cmac-camellia256-data}}\index{CKSUMTYPE\_CMAC\_CAMELLIA256 (built-in variable)}
16208
16209\begin{fulllineitems}
16210\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA256:CKSUMTYPE_CMAC_CAMELLIA256}}\pysigline{\sphinxbfcode{CKSUMTYPE\_CMAC\_CAMELLIA256}}
16211\end{fulllineitems}
16212
16213
16214RFC 6803.
16215
16216
16217\begin{savenotes}\sphinxattablestart
16218\centering
16219\begin{tabulary}{\linewidth}[t]{|T|T|}
16220\hline
16221
16222\sphinxcode{CKSUMTYPE\_CMAC\_CAMELLIA256}
16223&
16224\sphinxcode{0x0012}
16225\\
16226\hline
16227\end{tabulary}
16228\par
16229\sphinxattableend\end{savenotes}
16230
16231
16232\subsubsection{CKSUMTYPE\_CRC32}
16233\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CRC32:cksumtype-crc32-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CRC32::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CRC32:cksumtype-crc32}}\index{CKSUMTYPE\_CRC32 (built-in variable)}
16234
16235\begin{fulllineitems}
16236\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CRC32:CKSUMTYPE_CRC32}}\pysigline{\sphinxbfcode{CKSUMTYPE\_CRC32}}
16237\end{fulllineitems}
16238
16239
16240
16241\begin{savenotes}\sphinxattablestart
16242\centering
16243\begin{tabulary}{\linewidth}[t]{|T|T|}
16244\hline
16245
16246\sphinxcode{CKSUMTYPE\_CRC32}
16247&
16248\sphinxcode{0x0001}
16249\\
16250\hline
16251\end{tabulary}
16252\par
16253\sphinxattableend\end{savenotes}
16254
16255
16256\subsubsection{CKSUMTYPE\_DESCBC}
16257\label{\detokenize{appdev/refs/macros/CKSUMTYPE_DESCBC:cksumtype-descbc-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_DESCBC::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_DESCBC:cksumtype-descbc}}\index{CKSUMTYPE\_DESCBC (built-in variable)}
16258
16259\begin{fulllineitems}
16260\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_DESCBC:CKSUMTYPE_DESCBC}}\pysigline{\sphinxbfcode{CKSUMTYPE\_DESCBC}}
16261\end{fulllineitems}
16262
16263
16264
16265\begin{savenotes}\sphinxattablestart
16266\centering
16267\begin{tabulary}{\linewidth}[t]{|T|T|}
16268\hline
16269
16270\sphinxcode{CKSUMTYPE\_DESCBC}
16271&
16272\sphinxcode{0x0004}
16273\\
16274\hline
16275\end{tabulary}
16276\par
16277\sphinxattableend\end{savenotes}
16278
16279
16280\subsubsection{CKSUMTYPE\_HMAC\_MD5\_ARCFOUR}
16281\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_MD5_ARCFOUR:cksumtype-hmac-md5-arcfour-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_MD5_ARCFOUR:cksumtype-hmac-md5-arcfour}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_MD5_ARCFOUR::doc}}\index{CKSUMTYPE\_HMAC\_MD5\_ARCFOUR (built-in variable)}
16282
16283\begin{fulllineitems}
16284\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_MD5_ARCFOUR:CKSUMTYPE_HMAC_MD5_ARCFOUR}}\pysigline{\sphinxbfcode{CKSUMTYPE\_HMAC\_MD5\_ARCFOUR}}
16285\end{fulllineitems}
16286
16287
16288RFC 4757.
16289
16290
16291\begin{savenotes}\sphinxattablestart
16292\centering
16293\begin{tabulary}{\linewidth}[t]{|T|T|}
16294\hline
16295
16296\sphinxcode{CKSUMTYPE\_HMAC\_MD5\_ARCFOUR}
16297&
16298\sphinxcode{-138}
16299\\
16300\hline
16301\end{tabulary}
16302\par
16303\sphinxattableend\end{savenotes}
16304
16305
16306\subsubsection{CKSUMTYPE\_HMAC\_SHA1\_96\_AES128}
16307\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES128::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES128:cksumtype-hmac-sha1-96-aes128}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES128:cksumtype-hmac-sha1-96-aes128-data}}\index{CKSUMTYPE\_HMAC\_SHA1\_96\_AES128 (built-in variable)}
16308
16309\begin{fulllineitems}
16310\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES128:CKSUMTYPE_HMAC_SHA1_96_AES128}}\pysigline{\sphinxbfcode{CKSUMTYPE\_HMAC\_SHA1\_96\_AES128}}
16311\end{fulllineitems}
16312
16313
16314RFC 3962.
16315
16316Used with ENCTYPE\_AES128\_CTS\_HMAC\_SHA1\_96
16317
16318
16319\begin{savenotes}\sphinxattablestart
16320\centering
16321\begin{tabulary}{\linewidth}[t]{|T|T|}
16322\hline
16323
16324\sphinxcode{CKSUMTYPE\_HMAC\_SHA1\_96\_AES128}
16325&
16326\sphinxcode{0x000f}
16327\\
16328\hline
16329\end{tabulary}
16330\par
16331\sphinxattableend\end{savenotes}
16332
16333
16334\subsubsection{CKSUMTYPE\_HMAC\_SHA1\_96\_AES256}
16335\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES256::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES256:cksumtype-hmac-sha1-96-aes256}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES256:cksumtype-hmac-sha1-96-aes256-data}}\index{CKSUMTYPE\_HMAC\_SHA1\_96\_AES256 (built-in variable)}
16336
16337\begin{fulllineitems}
16338\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES256:CKSUMTYPE_HMAC_SHA1_96_AES256}}\pysigline{\sphinxbfcode{CKSUMTYPE\_HMAC\_SHA1\_96\_AES256}}
16339\end{fulllineitems}
16340
16341
16342RFC 3962.
16343
16344Used with ENCTYPE\_AES256\_CTS\_HMAC\_SHA1\_96
16345
16346
16347\begin{savenotes}\sphinxattablestart
16348\centering
16349\begin{tabulary}{\linewidth}[t]{|T|T|}
16350\hline
16351
16352\sphinxcode{CKSUMTYPE\_HMAC\_SHA1\_96\_AES256}
16353&
16354\sphinxcode{0x0010}
16355\\
16356\hline
16357\end{tabulary}
16358\par
16359\sphinxattableend\end{savenotes}
16360
16361
16362\subsubsection{CKSUMTYPE\_HMAC\_SHA256\_128\_AES128}
16363\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA256_128_AES128:cksumtype-hmac-sha256-128-aes128-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA256_128_AES128::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA256_128_AES128:cksumtype-hmac-sha256-128-aes128}}\index{CKSUMTYPE\_HMAC\_SHA256\_128\_AES128 (built-in variable)}
16364
16365\begin{fulllineitems}
16366\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA256_128_AES128:CKSUMTYPE_HMAC_SHA256_128_AES128}}\pysigline{\sphinxbfcode{CKSUMTYPE\_HMAC\_SHA256\_128\_AES128}}
16367\end{fulllineitems}
16368
16369
16370RFC 8009.
16371
16372
16373\begin{savenotes}\sphinxattablestart
16374\centering
16375\begin{tabulary}{\linewidth}[t]{|T|T|}
16376\hline
16377
16378\sphinxcode{CKSUMTYPE\_HMAC\_SHA256\_128\_AES128}
16379&
16380\sphinxcode{0x0013}
16381\\
16382\hline
16383\end{tabulary}
16384\par
16385\sphinxattableend\end{savenotes}
16386
16387
16388\subsubsection{CKSUMTYPE\_HMAC\_SHA384\_192\_AES256}
16389\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA384_192_AES256:cksumtype-hmac-sha384-192-aes256}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA384_192_AES256:cksumtype-hmac-sha384-192-aes256-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA384_192_AES256::doc}}\index{CKSUMTYPE\_HMAC\_SHA384\_192\_AES256 (built-in variable)}
16390
16391\begin{fulllineitems}
16392\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA384_192_AES256:CKSUMTYPE_HMAC_SHA384_192_AES256}}\pysigline{\sphinxbfcode{CKSUMTYPE\_HMAC\_SHA384\_192\_AES256}}
16393\end{fulllineitems}
16394
16395
16396RFC 8009.
16397
16398
16399\begin{savenotes}\sphinxattablestart
16400\centering
16401\begin{tabulary}{\linewidth}[t]{|T|T|}
16402\hline
16403
16404\sphinxcode{CKSUMTYPE\_HMAC\_SHA384\_192\_AES256}
16405&
16406\sphinxcode{0x0014}
16407\\
16408\hline
16409\end{tabulary}
16410\par
16411\sphinxattableend\end{savenotes}
16412
16413
16414\subsubsection{CKSUMTYPE\_HMAC\_SHA1\_DES3}
16415\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_DES3::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_DES3:cksumtype-hmac-sha1-des3}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_DES3:cksumtype-hmac-sha1-des3-data}}\index{CKSUMTYPE\_HMAC\_SHA1\_DES3 (built-in variable)}
16416
16417\begin{fulllineitems}
16418\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_DES3:CKSUMTYPE_HMAC_SHA1_DES3}}\pysigline{\sphinxbfcode{CKSUMTYPE\_HMAC\_SHA1\_DES3}}
16419\end{fulllineitems}
16420
16421
16422
16423\begin{savenotes}\sphinxattablestart
16424\centering
16425\begin{tabulary}{\linewidth}[t]{|T|T|}
16426\hline
16427
16428\sphinxcode{CKSUMTYPE\_HMAC\_SHA1\_DES3}
16429&
16430\sphinxcode{0x000c}
16431\\
16432\hline
16433\end{tabulary}
16434\par
16435\sphinxattableend\end{savenotes}
16436
16437
16438\subsubsection{CKSUMTYPE\_MD5\_HMAC\_ARCFOUR}
16439\label{\detokenize{appdev/refs/macros/CKSUMTYPE_MD5_HMAC_ARCFOUR:cksumtype-md5-hmac-arcfour}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_MD5_HMAC_ARCFOUR:cksumtype-md5-hmac-arcfour-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_MD5_HMAC_ARCFOUR::doc}}\index{CKSUMTYPE\_MD5\_HMAC\_ARCFOUR (built-in variable)}
16440
16441\begin{fulllineitems}
16442\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_MD5_HMAC_ARCFOUR:CKSUMTYPE_MD5_HMAC_ARCFOUR}}\pysigline{\sphinxbfcode{CKSUMTYPE\_MD5\_HMAC\_ARCFOUR}}
16443\end{fulllineitems}
16444
16445
16446
16447\begin{savenotes}\sphinxattablestart
16448\centering
16449\begin{tabulary}{\linewidth}[t]{|T|T|}
16450\hline
16451
16452\sphinxcode{CKSUMTYPE\_MD5\_HMAC\_ARCFOUR}
16453&
16454\sphinxcode{-137 /* Microsoft netlogon */}
16455\\
16456\hline
16457\end{tabulary}
16458\par
16459\sphinxattableend\end{savenotes}
16460
16461
16462\subsubsection{CKSUMTYPE\_NIST\_SHA}
16463\label{\detokenize{appdev/refs/macros/CKSUMTYPE_NIST_SHA::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_NIST_SHA:cksumtype-nist-sha}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_NIST_SHA:cksumtype-nist-sha-data}}\index{CKSUMTYPE\_NIST\_SHA (built-in variable)}
16464
16465\begin{fulllineitems}
16466\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_NIST_SHA:CKSUMTYPE_NIST_SHA}}\pysigline{\sphinxbfcode{CKSUMTYPE\_NIST\_SHA}}
16467\end{fulllineitems}
16468
16469
16470
16471\begin{savenotes}\sphinxattablestart
16472\centering
16473\begin{tabulary}{\linewidth}[t]{|T|T|}
16474\hline
16475
16476\sphinxcode{CKSUMTYPE\_NIST\_SHA}
16477&
16478\sphinxcode{0x0009}
16479\\
16480\hline
16481\end{tabulary}
16482\par
16483\sphinxattableend\end{savenotes}
16484
16485
16486\subsubsection{CKSUMTYPE\_RSA\_MD4}
16487\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4:cksumtype-rsa-md4}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4:cksumtype-rsa-md4-data}}\index{CKSUMTYPE\_RSA\_MD4 (built-in variable)}
16488
16489\begin{fulllineitems}
16490\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4:CKSUMTYPE_RSA_MD4}}\pysigline{\sphinxbfcode{CKSUMTYPE\_RSA\_MD4}}
16491\end{fulllineitems}
16492
16493
16494
16495\begin{savenotes}\sphinxattablestart
16496\centering
16497\begin{tabulary}{\linewidth}[t]{|T|T|}
16498\hline
16499
16500\sphinxcode{CKSUMTYPE\_RSA\_MD4}
16501&
16502\sphinxcode{0x0002}
16503\\
16504\hline
16505\end{tabulary}
16506\par
16507\sphinxattableend\end{savenotes}
16508
16509
16510\subsubsection{CKSUMTYPE\_RSA\_MD4\_DES}
16511\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4_DES::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4_DES:cksumtype-rsa-md4-des}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4_DES:cksumtype-rsa-md4-des-data}}\index{CKSUMTYPE\_RSA\_MD4\_DES (built-in variable)}
16512
16513\begin{fulllineitems}
16514\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4_DES:CKSUMTYPE_RSA_MD4_DES}}\pysigline{\sphinxbfcode{CKSUMTYPE\_RSA\_MD4\_DES}}
16515\end{fulllineitems}
16516
16517
16518
16519\begin{savenotes}\sphinxattablestart
16520\centering
16521\begin{tabulary}{\linewidth}[t]{|T|T|}
16522\hline
16523
16524\sphinxcode{CKSUMTYPE\_RSA\_MD4\_DES}
16525&
16526\sphinxcode{0x0003}
16527\\
16528\hline
16529\end{tabulary}
16530\par
16531\sphinxattableend\end{savenotes}
16532
16533
16534\subsubsection{CKSUMTYPE\_RSA\_MD5}
16535\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5:cksumtype-rsa-md5-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5:cksumtype-rsa-md5}}\index{CKSUMTYPE\_RSA\_MD5 (built-in variable)}
16536
16537\begin{fulllineitems}
16538\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5:CKSUMTYPE_RSA_MD5}}\pysigline{\sphinxbfcode{CKSUMTYPE\_RSA\_MD5}}
16539\end{fulllineitems}
16540
16541
16542
16543\begin{savenotes}\sphinxattablestart
16544\centering
16545\begin{tabulary}{\linewidth}[t]{|T|T|}
16546\hline
16547
16548\sphinxcode{CKSUMTYPE\_RSA\_MD5}
16549&
16550\sphinxcode{0x0007}
16551\\
16552\hline
16553\end{tabulary}
16554\par
16555\sphinxattableend\end{savenotes}
16556
16557
16558\subsubsection{CKSUMTYPE\_RSA\_MD5\_DES}
16559\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5_DES:cksumtype-rsa-md5-des-data}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5_DES::doc}}\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5_DES:cksumtype-rsa-md5-des}}\index{CKSUMTYPE\_RSA\_MD5\_DES (built-in variable)}
16560
16561\begin{fulllineitems}
16562\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5_DES:CKSUMTYPE_RSA_MD5_DES}}\pysigline{\sphinxbfcode{CKSUMTYPE\_RSA\_MD5\_DES}}
16563\end{fulllineitems}
16564
16565
16566
16567\begin{savenotes}\sphinxattablestart
16568\centering
16569\begin{tabulary}{\linewidth}[t]{|T|T|}
16570\hline
16571
16572\sphinxcode{CKSUMTYPE\_RSA\_MD5\_DES}
16573&
16574\sphinxcode{0x0008}
16575\\
16576\hline
16577\end{tabulary}
16578\par
16579\sphinxattableend\end{savenotes}
16580
16581
16582\subsubsection{ENCTYPE\_AES128\_CTS\_HMAC\_SHA1\_96}
16583\label{\detokenize{appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA1_96:enctype-aes128-cts-hmac-sha1-96-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA1_96::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA1_96:enctype-aes128-cts-hmac-sha1-96}}\index{ENCTYPE\_AES128\_CTS\_HMAC\_SHA1\_96 (built-in variable)}
16584
16585\begin{fulllineitems}
16586\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA1_96:ENCTYPE_AES128_CTS_HMAC_SHA1_96}}\pysigline{\sphinxbfcode{ENCTYPE\_AES128\_CTS\_HMAC\_SHA1\_96}}
16587\end{fulllineitems}
16588
16589
16590RFC 3962.
16591
16592
16593\begin{savenotes}\sphinxattablestart
16594\centering
16595\begin{tabulary}{\linewidth}[t]{|T|T|}
16596\hline
16597
16598\sphinxcode{ENCTYPE\_AES128\_CTS\_HMAC\_SHA1\_96}
16599&
16600\sphinxcode{0x0011}
16601\\
16602\hline
16603\end{tabulary}
16604\par
16605\sphinxattableend\end{savenotes}
16606
16607
16608\subsubsection{ENCTYPE\_AES128\_CTS\_HMAC\_SHA256\_128}
16609\label{\detokenize{appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA256_128:enctype-aes128-cts-hmac-sha256-128}}\label{\detokenize{appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA256_128:enctype-aes128-cts-hmac-sha256-128-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA256_128::doc}}\index{ENCTYPE\_AES128\_CTS\_HMAC\_SHA256\_128 (built-in variable)}
16610
16611\begin{fulllineitems}
16612\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA256_128:ENCTYPE_AES128_CTS_HMAC_SHA256_128}}\pysigline{\sphinxbfcode{ENCTYPE\_AES128\_CTS\_HMAC\_SHA256\_128}}
16613\end{fulllineitems}
16614
16615
16616RFC 8009.
16617
16618
16619\begin{savenotes}\sphinxattablestart
16620\centering
16621\begin{tabulary}{\linewidth}[t]{|T|T|}
16622\hline
16623
16624\sphinxcode{ENCTYPE\_AES128\_CTS\_HMAC\_SHA256\_128}
16625&
16626\sphinxcode{0x0013}
16627\\
16628\hline
16629\end{tabulary}
16630\par
16631\sphinxattableend\end{savenotes}
16632
16633
16634\subsubsection{ENCTYPE\_AES256\_CTS\_HMAC\_SHA1\_96}
16635\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA1_96:enctype-aes256-cts-hmac-sha1-96-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA1_96::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA1_96:enctype-aes256-cts-hmac-sha1-96}}\index{ENCTYPE\_AES256\_CTS\_HMAC\_SHA1\_96 (built-in variable)}
16636
16637\begin{fulllineitems}
16638\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA1_96:ENCTYPE_AES256_CTS_HMAC_SHA1_96}}\pysigline{\sphinxbfcode{ENCTYPE\_AES256\_CTS\_HMAC\_SHA1\_96}}
16639\end{fulllineitems}
16640
16641
16642RFC 3962.
16643
16644
16645\begin{savenotes}\sphinxattablestart
16646\centering
16647\begin{tabulary}{\linewidth}[t]{|T|T|}
16648\hline
16649
16650\sphinxcode{ENCTYPE\_AES256\_CTS\_HMAC\_SHA1\_96}
16651&
16652\sphinxcode{0x0012}
16653\\
16654\hline
16655\end{tabulary}
16656\par
16657\sphinxattableend\end{savenotes}
16658
16659
16660\subsubsection{ENCTYPE\_AES256\_CTS\_HMAC\_SHA384\_192}
16661\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA384_192:enctype-aes256-cts-hmac-sha384-192-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA384_192:enctype-aes256-cts-hmac-sha384-192}}\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA384_192::doc}}\index{ENCTYPE\_AES256\_CTS\_HMAC\_SHA384\_192 (built-in variable)}
16662
16663\begin{fulllineitems}
16664\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA384_192:ENCTYPE_AES256_CTS_HMAC_SHA384_192}}\pysigline{\sphinxbfcode{ENCTYPE\_AES256\_CTS\_HMAC\_SHA384\_192}}
16665\end{fulllineitems}
16666
16667
16668RFC 8009.
16669
16670
16671\begin{savenotes}\sphinxattablestart
16672\centering
16673\begin{tabulary}{\linewidth}[t]{|T|T|}
16674\hline
16675
16676\sphinxcode{ENCTYPE\_AES256\_CTS\_HMAC\_SHA384\_192}
16677&
16678\sphinxcode{0x0014}
16679\\
16680\hline
16681\end{tabulary}
16682\par
16683\sphinxattableend\end{savenotes}
16684
16685
16686\subsubsection{ENCTYPE\_ARCFOUR\_HMAC}
16687\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC:enctype-arcfour-hmac}}\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC:enctype-arcfour-hmac-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC::doc}}\index{ENCTYPE\_ARCFOUR\_HMAC (built-in variable)}
16688
16689\begin{fulllineitems}
16690\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC:ENCTYPE_ARCFOUR_HMAC}}\pysigline{\sphinxbfcode{ENCTYPE\_ARCFOUR\_HMAC}}
16691\end{fulllineitems}
16692
16693
16694RFC 4757.
16695
16696
16697\begin{savenotes}\sphinxattablestart
16698\centering
16699\begin{tabulary}{\linewidth}[t]{|T|T|}
16700\hline
16701
16702\sphinxcode{ENCTYPE\_ARCFOUR\_HMAC}
16703&
16704\sphinxcode{0x0017}
16705\\
16706\hline
16707\end{tabulary}
16708\par
16709\sphinxattableend\end{savenotes}
16710
16711
16712\subsubsection{ENCTYPE\_ARCFOUR\_HMAC\_EXP}
16713\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC_EXP:enctype-arcfour-hmac-exp-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC_EXP:enctype-arcfour-hmac-exp}}\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC_EXP::doc}}\index{ENCTYPE\_ARCFOUR\_HMAC\_EXP (built-in variable)}
16714
16715\begin{fulllineitems}
16716\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC_EXP:ENCTYPE_ARCFOUR_HMAC_EXP}}\pysigline{\sphinxbfcode{ENCTYPE\_ARCFOUR\_HMAC\_EXP}}
16717\end{fulllineitems}
16718
16719
16720RFC 4757.
16721
16722
16723\begin{savenotes}\sphinxattablestart
16724\centering
16725\begin{tabulary}{\linewidth}[t]{|T|T|}
16726\hline
16727
16728\sphinxcode{ENCTYPE\_ARCFOUR\_HMAC\_EXP}
16729&
16730\sphinxcode{0x0018}
16731\\
16732\hline
16733\end{tabulary}
16734\par
16735\sphinxattableend\end{savenotes}
16736
16737
16738\subsubsection{ENCTYPE\_CAMELLIA128\_CTS\_CMAC}
16739\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA128_CTS_CMAC:enctype-camellia128-cts-cmac-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA128_CTS_CMAC:enctype-camellia128-cts-cmac}}\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA128_CTS_CMAC::doc}}\index{ENCTYPE\_CAMELLIA128\_CTS\_CMAC (built-in variable)}
16740
16741\begin{fulllineitems}
16742\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA128_CTS_CMAC:ENCTYPE_CAMELLIA128_CTS_CMAC}}\pysigline{\sphinxbfcode{ENCTYPE\_CAMELLIA128\_CTS\_CMAC}}
16743\end{fulllineitems}
16744
16745
16746RFC 6803.
16747
16748
16749\begin{savenotes}\sphinxattablestart
16750\centering
16751\begin{tabulary}{\linewidth}[t]{|T|T|}
16752\hline
16753
16754\sphinxcode{ENCTYPE\_CAMELLIA128\_CTS\_CMAC}
16755&
16756\sphinxcode{0x0019}
16757\\
16758\hline
16759\end{tabulary}
16760\par
16761\sphinxattableend\end{savenotes}
16762
16763
16764\subsubsection{ENCTYPE\_CAMELLIA256\_CTS\_CMAC}
16765\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA256_CTS_CMAC:enctype-camellia256-cts-cmac-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA256_CTS_CMAC:enctype-camellia256-cts-cmac}}\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA256_CTS_CMAC::doc}}\index{ENCTYPE\_CAMELLIA256\_CTS\_CMAC (built-in variable)}
16766
16767\begin{fulllineitems}
16768\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA256_CTS_CMAC:ENCTYPE_CAMELLIA256_CTS_CMAC}}\pysigline{\sphinxbfcode{ENCTYPE\_CAMELLIA256\_CTS\_CMAC}}
16769\end{fulllineitems}
16770
16771
16772RFC 6803.
16773
16774
16775\begin{savenotes}\sphinxattablestart
16776\centering
16777\begin{tabulary}{\linewidth}[t]{|T|T|}
16778\hline
16779
16780\sphinxcode{ENCTYPE\_CAMELLIA256\_CTS\_CMAC}
16781&
16782\sphinxcode{0x001a}
16783\\
16784\hline
16785\end{tabulary}
16786\par
16787\sphinxattableend\end{savenotes}
16788
16789
16790\subsubsection{ENCTYPE\_DES3\_CBC\_ENV}
16791\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_ENV::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_ENV:enctype-des3-cbc-env}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_ENV:enctype-des3-cbc-env-data}}\index{ENCTYPE\_DES3\_CBC\_ENV (built-in variable)}
16792
16793\begin{fulllineitems}
16794\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_ENV:ENCTYPE_DES3_CBC_ENV}}\pysigline{\sphinxbfcode{ENCTYPE\_DES3\_CBC\_ENV}}
16795\end{fulllineitems}
16796
16797
16798DES-3 cbc mode, CMS enveloped data.
16799
16800
16801\begin{savenotes}\sphinxattablestart
16802\centering
16803\begin{tabulary}{\linewidth}[t]{|T|T|}
16804\hline
16805
16806\sphinxcode{ENCTYPE\_DES3\_CBC\_ENV}
16807&
16808\sphinxcode{0x000f}
16809\\
16810\hline
16811\end{tabulary}
16812\par
16813\sphinxattableend\end{savenotes}
16814
16815
16816\subsubsection{ENCTYPE\_DES3\_CBC\_RAW}
16817\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_RAW:enctype-des3-cbc-raw}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_RAW::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_RAW:enctype-des3-cbc-raw-data}}\index{ENCTYPE\_DES3\_CBC\_RAW (built-in variable)}
16818
16819\begin{fulllineitems}
16820\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_RAW:ENCTYPE_DES3_CBC_RAW}}\pysigline{\sphinxbfcode{ENCTYPE\_DES3\_CBC\_RAW}}
16821\end{fulllineitems}
16822
16823
16824
16825\begin{savenotes}\sphinxattablestart
16826\centering
16827\begin{tabulary}{\linewidth}[t]{|T|T|}
16828\hline
16829
16830\sphinxcode{ENCTYPE\_DES3\_CBC\_RAW}
16831&
16832\sphinxcode{0x0006}
16833\\
16834\hline
16835\end{tabulary}
16836\par
16837\sphinxattableend\end{savenotes}
16838
16839
16840\subsubsection{ENCTYPE\_DES3\_CBC\_SHA}
16841\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA:enctype-des3-cbc-sha}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA:enctype-des3-cbc-sha-data}}\index{ENCTYPE\_DES3\_CBC\_SHA (built-in variable)}
16842
16843\begin{fulllineitems}
16844\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA:ENCTYPE_DES3_CBC_SHA}}\pysigline{\sphinxbfcode{ENCTYPE\_DES3\_CBC\_SHA}}
16845\end{fulllineitems}
16846
16847
16848
16849\begin{savenotes}\sphinxattablestart
16850\centering
16851\begin{tabulary}{\linewidth}[t]{|T|T|}
16852\hline
16853
16854\sphinxcode{ENCTYPE\_DES3\_CBC\_SHA}
16855&
16856\sphinxcode{0x0005}
16857\\
16858\hline
16859\end{tabulary}
16860\par
16861\sphinxattableend\end{savenotes}
16862
16863
16864\subsubsection{ENCTYPE\_DES3\_CBC\_SHA1}
16865\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA1::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA1:enctype-des3-cbc-sha1}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA1:enctype-des3-cbc-sha1-data}}\index{ENCTYPE\_DES3\_CBC\_SHA1 (built-in variable)}
16866
16867\begin{fulllineitems}
16868\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA1:ENCTYPE_DES3_CBC_SHA1}}\pysigline{\sphinxbfcode{ENCTYPE\_DES3\_CBC\_SHA1}}
16869\end{fulllineitems}
16870
16871
16872
16873\begin{savenotes}\sphinxattablestart
16874\centering
16875\begin{tabulary}{\linewidth}[t]{|T|T|}
16876\hline
16877
16878\sphinxcode{ENCTYPE\_DES3\_CBC\_SHA1}
16879&
16880\sphinxcode{0x0010}
16881\\
16882\hline
16883\end{tabulary}
16884\par
16885\sphinxattableend\end{savenotes}
16886
16887
16888\subsubsection{ENCTYPE\_DES\_CBC\_CRC}
16889\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_CRC:enctype-des-cbc-crc-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_CRC:enctype-des-cbc-crc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_CRC::doc}}\index{ENCTYPE\_DES\_CBC\_CRC (built-in variable)}
16890
16891\begin{fulllineitems}
16892\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_CRC:ENCTYPE_DES_CBC_CRC}}\pysigline{\sphinxbfcode{ENCTYPE\_DES\_CBC\_CRC}}
16893\end{fulllineitems}
16894
16895
16896
16897\begin{savenotes}\sphinxattablestart
16898\centering
16899\begin{tabulary}{\linewidth}[t]{|T|T|}
16900\hline
16901
16902\sphinxcode{ENCTYPE\_DES\_CBC\_CRC}
16903&
16904\sphinxcode{0x0001}
16905\\
16906\hline
16907\end{tabulary}
16908\par
16909\sphinxattableend\end{savenotes}
16910
16911
16912\subsubsection{ENCTYPE\_DES\_CBC\_MD4}
16913\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD4:enctype-des-cbc-md4-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD4::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD4:enctype-des-cbc-md4}}\index{ENCTYPE\_DES\_CBC\_MD4 (built-in variable)}
16914
16915\begin{fulllineitems}
16916\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD4:ENCTYPE_DES_CBC_MD4}}\pysigline{\sphinxbfcode{ENCTYPE\_DES\_CBC\_MD4}}
16917\end{fulllineitems}
16918
16919
16920
16921\begin{savenotes}\sphinxattablestart
16922\centering
16923\begin{tabulary}{\linewidth}[t]{|T|T|}
16924\hline
16925
16926\sphinxcode{ENCTYPE\_DES\_CBC\_MD4}
16927&
16928\sphinxcode{0x0002}
16929\\
16930\hline
16931\end{tabulary}
16932\par
16933\sphinxattableend\end{savenotes}
16934
16935
16936\subsubsection{ENCTYPE\_DES\_CBC\_MD5}
16937\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD5:enctype-des-cbc-md5-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD5::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD5:enctype-des-cbc-md5}}\index{ENCTYPE\_DES\_CBC\_MD5 (built-in variable)}
16938
16939\begin{fulllineitems}
16940\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD5:ENCTYPE_DES_CBC_MD5}}\pysigline{\sphinxbfcode{ENCTYPE\_DES\_CBC\_MD5}}
16941\end{fulllineitems}
16942
16943
16944
16945\begin{savenotes}\sphinxattablestart
16946\centering
16947\begin{tabulary}{\linewidth}[t]{|T|T|}
16948\hline
16949
16950\sphinxcode{ENCTYPE\_DES\_CBC\_MD5}
16951&
16952\sphinxcode{0x0003}
16953\\
16954\hline
16955\end{tabulary}
16956\par
16957\sphinxattableend\end{savenotes}
16958
16959
16960\subsubsection{ENCTYPE\_DES\_CBC\_RAW}
16961\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_RAW:enctype-des-cbc-raw-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_RAW:enctype-des-cbc-raw}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_RAW::doc}}\index{ENCTYPE\_DES\_CBC\_RAW (built-in variable)}
16962
16963\begin{fulllineitems}
16964\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_RAW:ENCTYPE_DES_CBC_RAW}}\pysigline{\sphinxbfcode{ENCTYPE\_DES\_CBC\_RAW}}
16965\end{fulllineitems}
16966
16967
16968
16969\begin{savenotes}\sphinxattablestart
16970\centering
16971\begin{tabulary}{\linewidth}[t]{|T|T|}
16972\hline
16973
16974\sphinxcode{ENCTYPE\_DES\_CBC\_RAW}
16975&
16976\sphinxcode{0x0004}
16977\\
16978\hline
16979\end{tabulary}
16980\par
16981\sphinxattableend\end{savenotes}
16982
16983
16984\subsubsection{ENCTYPE\_DES\_HMAC\_SHA1}
16985\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_HMAC_SHA1:enctype-des-hmac-sha1-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_HMAC_SHA1::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_HMAC_SHA1:enctype-des-hmac-sha1}}\index{ENCTYPE\_DES\_HMAC\_SHA1 (built-in variable)}
16986
16987\begin{fulllineitems}
16988\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_HMAC_SHA1:ENCTYPE_DES_HMAC_SHA1}}\pysigline{\sphinxbfcode{ENCTYPE\_DES\_HMAC\_SHA1}}
16989\end{fulllineitems}
16990
16991
16992
16993\begin{savenotes}\sphinxattablestart
16994\centering
16995\begin{tabulary}{\linewidth}[t]{|T|T|}
16996\hline
16997
16998\sphinxcode{ENCTYPE\_DES\_HMAC\_SHA1}
16999&
17000\sphinxcode{0x0008}
17001\\
17002\hline
17003\end{tabulary}
17004\par
17005\sphinxattableend\end{savenotes}
17006
17007
17008\subsubsection{ENCTYPE\_DSA\_SHA1\_CMS}
17009\label{\detokenize{appdev/refs/macros/ENCTYPE_DSA_SHA1_CMS:enctype-dsa-sha1-cms-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DSA_SHA1_CMS:enctype-dsa-sha1-cms}}\label{\detokenize{appdev/refs/macros/ENCTYPE_DSA_SHA1_CMS::doc}}\index{ENCTYPE\_DSA\_SHA1\_CMS (built-in variable)}
17010
17011\begin{fulllineitems}
17012\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DSA_SHA1_CMS:ENCTYPE_DSA_SHA1_CMS}}\pysigline{\sphinxbfcode{ENCTYPE\_DSA\_SHA1\_CMS}}
17013\end{fulllineitems}
17014
17015
17016DSA with SHA1, CMS signature.
17017
17018
17019\begin{savenotes}\sphinxattablestart
17020\centering
17021\begin{tabulary}{\linewidth}[t]{|T|T|}
17022\hline
17023
17024\sphinxcode{ENCTYPE\_DSA\_SHA1\_CMS}
17025&
17026\sphinxcode{0x0009}
17027\\
17028\hline
17029\end{tabulary}
17030\par
17031\sphinxattableend\end{savenotes}
17032
17033
17034\subsubsection{ENCTYPE\_MD5\_RSA\_CMS}
17035\label{\detokenize{appdev/refs/macros/ENCTYPE_MD5_RSA_CMS:enctype-md5-rsa-cms}}\label{\detokenize{appdev/refs/macros/ENCTYPE_MD5_RSA_CMS:enctype-md5-rsa-cms-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_MD5_RSA_CMS::doc}}\index{ENCTYPE\_MD5\_RSA\_CMS (built-in variable)}
17036
17037\begin{fulllineitems}
17038\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_MD5_RSA_CMS:ENCTYPE_MD5_RSA_CMS}}\pysigline{\sphinxbfcode{ENCTYPE\_MD5\_RSA\_CMS}}
17039\end{fulllineitems}
17040
17041
17042MD5 with RSA, CMS signature.
17043
17044
17045\begin{savenotes}\sphinxattablestart
17046\centering
17047\begin{tabulary}{\linewidth}[t]{|T|T|}
17048\hline
17049
17050\sphinxcode{ENCTYPE\_MD5\_RSA\_CMS}
17051&
17052\sphinxcode{0x000a}
17053\\
17054\hline
17055\end{tabulary}
17056\par
17057\sphinxattableend\end{savenotes}
17058
17059
17060\subsubsection{ENCTYPE\_NULL}
17061\label{\detokenize{appdev/refs/macros/ENCTYPE_NULL:enctype-null}}\label{\detokenize{appdev/refs/macros/ENCTYPE_NULL::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_NULL:enctype-null-data}}\index{ENCTYPE\_NULL (built-in variable)}
17062
17063\begin{fulllineitems}
17064\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_NULL:ENCTYPE_NULL}}\pysigline{\sphinxbfcode{ENCTYPE\_NULL}}
17065\end{fulllineitems}
17066
17067
17068
17069\begin{savenotes}\sphinxattablestart
17070\centering
17071\begin{tabulary}{\linewidth}[t]{|T|T|}
17072\hline
17073
17074\sphinxcode{ENCTYPE\_NULL}
17075&
17076\sphinxcode{0x0000}
17077\\
17078\hline
17079\end{tabulary}
17080\par
17081\sphinxattableend\end{savenotes}
17082
17083
17084\subsubsection{ENCTYPE\_RC2\_CBC\_ENV}
17085\label{\detokenize{appdev/refs/macros/ENCTYPE_RC2_CBC_ENV:enctype-rc2-cbc-env}}\label{\detokenize{appdev/refs/macros/ENCTYPE_RC2_CBC_ENV::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_RC2_CBC_ENV:enctype-rc2-cbc-env-data}}\index{ENCTYPE\_RC2\_CBC\_ENV (built-in variable)}
17086
17087\begin{fulllineitems}
17088\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_RC2_CBC_ENV:ENCTYPE_RC2_CBC_ENV}}\pysigline{\sphinxbfcode{ENCTYPE\_RC2\_CBC\_ENV}}
17089\end{fulllineitems}
17090
17091
17092RC2 cbc mode, CMS enveloped data.
17093
17094
17095\begin{savenotes}\sphinxattablestart
17096\centering
17097\begin{tabulary}{\linewidth}[t]{|T|T|}
17098\hline
17099
17100\sphinxcode{ENCTYPE\_RC2\_CBC\_ENV}
17101&
17102\sphinxcode{0x000c}
17103\\
17104\hline
17105\end{tabulary}
17106\par
17107\sphinxattableend\end{savenotes}
17108
17109
17110\subsubsection{ENCTYPE\_RSA\_ENV}
17111\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ENV:enctype-rsa-env-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ENV:enctype-rsa-env}}\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ENV::doc}}\index{ENCTYPE\_RSA\_ENV (built-in variable)}
17112
17113\begin{fulllineitems}
17114\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ENV:ENCTYPE_RSA_ENV}}\pysigline{\sphinxbfcode{ENCTYPE\_RSA\_ENV}}
17115\end{fulllineitems}
17116
17117
17118RSA encryption, CMS enveloped data.
17119
17120
17121\begin{savenotes}\sphinxattablestart
17122\centering
17123\begin{tabulary}{\linewidth}[t]{|T|T|}
17124\hline
17125
17126\sphinxcode{ENCTYPE\_RSA\_ENV}
17127&
17128\sphinxcode{0x000d}
17129\\
17130\hline
17131\end{tabulary}
17132\par
17133\sphinxattableend\end{savenotes}
17134
17135
17136\subsubsection{ENCTYPE\_RSA\_ES\_OAEP\_ENV}
17137\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ES_OAEP_ENV::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ES_OAEP_ENV:enctype-rsa-es-oaep-env}}\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ES_OAEP_ENV:enctype-rsa-es-oaep-env-data}}\index{ENCTYPE\_RSA\_ES\_OAEP\_ENV (built-in variable)}
17138
17139\begin{fulllineitems}
17140\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ES_OAEP_ENV:ENCTYPE_RSA_ES_OAEP_ENV}}\pysigline{\sphinxbfcode{ENCTYPE\_RSA\_ES\_OAEP\_ENV}}
17141\end{fulllineitems}
17142
17143
17144RSA w/OEAP encryption, CMS enveloped data.
17145
17146
17147\begin{savenotes}\sphinxattablestart
17148\centering
17149\begin{tabulary}{\linewidth}[t]{|T|T|}
17150\hline
17151
17152\sphinxcode{ENCTYPE\_RSA\_ES\_OAEP\_ENV}
17153&
17154\sphinxcode{0x000e}
17155\\
17156\hline
17157\end{tabulary}
17158\par
17159\sphinxattableend\end{savenotes}
17160
17161
17162\subsubsection{ENCTYPE\_SHA1\_RSA\_CMS}
17163\label{\detokenize{appdev/refs/macros/ENCTYPE_SHA1_RSA_CMS::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_SHA1_RSA_CMS:enctype-sha1-rsa-cms-data}}\label{\detokenize{appdev/refs/macros/ENCTYPE_SHA1_RSA_CMS:enctype-sha1-rsa-cms}}\index{ENCTYPE\_SHA1\_RSA\_CMS (built-in variable)}
17164
17165\begin{fulllineitems}
17166\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_SHA1_RSA_CMS:ENCTYPE_SHA1_RSA_CMS}}\pysigline{\sphinxbfcode{ENCTYPE\_SHA1\_RSA\_CMS}}
17167\end{fulllineitems}
17168
17169
17170SHA1 with RSA, CMS signature.
17171
17172
17173\begin{savenotes}\sphinxattablestart
17174\centering
17175\begin{tabulary}{\linewidth}[t]{|T|T|}
17176\hline
17177
17178\sphinxcode{ENCTYPE\_SHA1\_RSA\_CMS}
17179&
17180\sphinxcode{0x000b}
17181\\
17182\hline
17183\end{tabulary}
17184\par
17185\sphinxattableend\end{savenotes}
17186
17187
17188\subsubsection{ENCTYPE\_UNKNOWN}
17189\label{\detokenize{appdev/refs/macros/ENCTYPE_UNKNOWN:enctype-unknown}}\label{\detokenize{appdev/refs/macros/ENCTYPE_UNKNOWN::doc}}\label{\detokenize{appdev/refs/macros/ENCTYPE_UNKNOWN:enctype-unknown-data}}\index{ENCTYPE\_UNKNOWN (built-in variable)}
17190
17191\begin{fulllineitems}
17192\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_UNKNOWN:ENCTYPE_UNKNOWN}}\pysigline{\sphinxbfcode{ENCTYPE\_UNKNOWN}}
17193\end{fulllineitems}
17194
17195
17196
17197\begin{savenotes}\sphinxattablestart
17198\centering
17199\begin{tabulary}{\linewidth}[t]{|T|T|}
17200\hline
17201
17202\sphinxcode{ENCTYPE\_UNKNOWN}
17203&
17204\sphinxcode{0x01ff}
17205\\
17206\hline
17207\end{tabulary}
17208\par
17209\sphinxattableend\end{savenotes}
17210
17211
17212\subsubsection{KDC\_OPT\_ALLOW\_POSTDATE}
17213\label{\detokenize{appdev/refs/macros/KDC_OPT_ALLOW_POSTDATE:kdc-opt-allow-postdate}}\label{\detokenize{appdev/refs/macros/KDC_OPT_ALLOW_POSTDATE:kdc-opt-allow-postdate-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_ALLOW_POSTDATE::doc}}\index{KDC\_OPT\_ALLOW\_POSTDATE (built-in variable)}
17214
17215\begin{fulllineitems}
17216\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_ALLOW_POSTDATE:KDC_OPT_ALLOW_POSTDATE}}\pysigline{\sphinxbfcode{KDC\_OPT\_ALLOW\_POSTDATE}}
17217\end{fulllineitems}
17218
17219
17220
17221\begin{savenotes}\sphinxattablestart
17222\centering
17223\begin{tabulary}{\linewidth}[t]{|T|T|}
17224\hline
17225
17226\sphinxcode{KDC\_OPT\_ALLOW\_POSTDATE}
17227&
17228\sphinxcode{0x04000000}
17229\\
17230\hline
17231\end{tabulary}
17232\par
17233\sphinxattableend\end{savenotes}
17234
17235
17236\subsubsection{KDC\_OPT\_CANONICALIZE}
17237\label{\detokenize{appdev/refs/macros/KDC_OPT_CANONICALIZE:kdc-opt-canonicalize}}\label{\detokenize{appdev/refs/macros/KDC_OPT_CANONICALIZE:kdc-opt-canonicalize-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_CANONICALIZE::doc}}\index{KDC\_OPT\_CANONICALIZE (built-in variable)}
17238
17239\begin{fulllineitems}
17240\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_CANONICALIZE:KDC_OPT_CANONICALIZE}}\pysigline{\sphinxbfcode{KDC\_OPT\_CANONICALIZE}}
17241\end{fulllineitems}
17242
17243
17244
17245\begin{savenotes}\sphinxattablestart
17246\centering
17247\begin{tabulary}{\linewidth}[t]{|T|T|}
17248\hline
17249
17250\sphinxcode{KDC\_OPT\_CANONICALIZE}
17251&
17252\sphinxcode{0x00010000}
17253\\
17254\hline
17255\end{tabulary}
17256\par
17257\sphinxattableend\end{savenotes}
17258
17259
17260\subsubsection{KDC\_OPT\_CNAME\_IN\_ADDL\_TKT}
17261\label{\detokenize{appdev/refs/macros/KDC_OPT_CNAME_IN_ADDL_TKT:kdc-opt-cname-in-addl-tkt-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_CNAME_IN_ADDL_TKT:kdc-opt-cname-in-addl-tkt}}\label{\detokenize{appdev/refs/macros/KDC_OPT_CNAME_IN_ADDL_TKT::doc}}\index{KDC\_OPT\_CNAME\_IN\_ADDL\_TKT (built-in variable)}
17262
17263\begin{fulllineitems}
17264\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_CNAME_IN_ADDL_TKT:KDC_OPT_CNAME_IN_ADDL_TKT}}\pysigline{\sphinxbfcode{KDC\_OPT\_CNAME\_IN\_ADDL\_TKT}}
17265\end{fulllineitems}
17266
17267
17268
17269\begin{savenotes}\sphinxattablestart
17270\centering
17271\begin{tabulary}{\linewidth}[t]{|T|T|}
17272\hline
17273
17274\sphinxcode{KDC\_OPT\_CNAME\_IN\_ADDL\_TKT}
17275&
17276\sphinxcode{0x00020000}
17277\\
17278\hline
17279\end{tabulary}
17280\par
17281\sphinxattableend\end{savenotes}
17282
17283
17284\subsubsection{KDC\_OPT\_DISABLE\_TRANSITED\_CHECK}
17285\label{\detokenize{appdev/refs/macros/KDC_OPT_DISABLE_TRANSITED_CHECK:kdc-opt-disable-transited-check}}\label{\detokenize{appdev/refs/macros/KDC_OPT_DISABLE_TRANSITED_CHECK::doc}}\label{\detokenize{appdev/refs/macros/KDC_OPT_DISABLE_TRANSITED_CHECK:kdc-opt-disable-transited-check-data}}\index{KDC\_OPT\_DISABLE\_TRANSITED\_CHECK (built-in variable)}
17286
17287\begin{fulllineitems}
17288\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_DISABLE_TRANSITED_CHECK:KDC_OPT_DISABLE_TRANSITED_CHECK}}\pysigline{\sphinxbfcode{KDC\_OPT\_DISABLE\_TRANSITED\_CHECK}}
17289\end{fulllineitems}
17290
17291
17292
17293\begin{savenotes}\sphinxattablestart
17294\centering
17295\begin{tabulary}{\linewidth}[t]{|T|T|}
17296\hline
17297
17298\sphinxcode{KDC\_OPT\_DISABLE\_TRANSITED\_CHECK}
17299&
17300\sphinxcode{0x00000020}
17301\\
17302\hline
17303\end{tabulary}
17304\par
17305\sphinxattableend\end{savenotes}
17306
17307
17308\subsubsection{KDC\_OPT\_ENC\_TKT\_IN\_SKEY}
17309\label{\detokenize{appdev/refs/macros/KDC_OPT_ENC_TKT_IN_SKEY:kdc-opt-enc-tkt-in-skey}}\label{\detokenize{appdev/refs/macros/KDC_OPT_ENC_TKT_IN_SKEY::doc}}\label{\detokenize{appdev/refs/macros/KDC_OPT_ENC_TKT_IN_SKEY:kdc-opt-enc-tkt-in-skey-data}}\index{KDC\_OPT\_ENC\_TKT\_IN\_SKEY (built-in variable)}
17310
17311\begin{fulllineitems}
17312\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_ENC_TKT_IN_SKEY:KDC_OPT_ENC_TKT_IN_SKEY}}\pysigline{\sphinxbfcode{KDC\_OPT\_ENC\_TKT\_IN\_SKEY}}
17313\end{fulllineitems}
17314
17315
17316
17317\begin{savenotes}\sphinxattablestart
17318\centering
17319\begin{tabulary}{\linewidth}[t]{|T|T|}
17320\hline
17321
17322\sphinxcode{KDC\_OPT\_ENC\_TKT\_IN\_SKEY}
17323&
17324\sphinxcode{0x00000008}
17325\\
17326\hline
17327\end{tabulary}
17328\par
17329\sphinxattableend\end{savenotes}
17330
17331
17332\subsubsection{KDC\_OPT\_FORWARDABLE}
17333\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDABLE:kdc-opt-forwardable-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDABLE::doc}}\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDABLE:kdc-opt-forwardable}}\index{KDC\_OPT\_FORWARDABLE (built-in variable)}
17334
17335\begin{fulllineitems}
17336\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDABLE:KDC_OPT_FORWARDABLE}}\pysigline{\sphinxbfcode{KDC\_OPT\_FORWARDABLE}}
17337\end{fulllineitems}
17338
17339
17340
17341\begin{savenotes}\sphinxattablestart
17342\centering
17343\begin{tabulary}{\linewidth}[t]{|T|T|}
17344\hline
17345
17346\sphinxcode{KDC\_OPT\_FORWARDABLE}
17347&
17348\sphinxcode{0x40000000}
17349\\
17350\hline
17351\end{tabulary}
17352\par
17353\sphinxattableend\end{savenotes}
17354
17355
17356\subsubsection{KDC\_OPT\_FORWARDED}
17357\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDED::doc}}\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDED:kdc-opt-forwarded}}\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDED:kdc-opt-forwarded-data}}\index{KDC\_OPT\_FORWARDED (built-in variable)}
17358
17359\begin{fulllineitems}
17360\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDED:KDC_OPT_FORWARDED}}\pysigline{\sphinxbfcode{KDC\_OPT\_FORWARDED}}
17361\end{fulllineitems}
17362
17363
17364
17365\begin{savenotes}\sphinxattablestart
17366\centering
17367\begin{tabulary}{\linewidth}[t]{|T|T|}
17368\hline
17369
17370\sphinxcode{KDC\_OPT\_FORWARDED}
17371&
17372\sphinxcode{0x20000000}
17373\\
17374\hline
17375\end{tabulary}
17376\par
17377\sphinxattableend\end{savenotes}
17378
17379
17380\subsubsection{KDC\_OPT\_POSTDATED}
17381\label{\detokenize{appdev/refs/macros/KDC_OPT_POSTDATED:kdc-opt-postdated-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_POSTDATED:kdc-opt-postdated}}\label{\detokenize{appdev/refs/macros/KDC_OPT_POSTDATED::doc}}\index{KDC\_OPT\_POSTDATED (built-in variable)}
17382
17383\begin{fulllineitems}
17384\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_POSTDATED:KDC_OPT_POSTDATED}}\pysigline{\sphinxbfcode{KDC\_OPT\_POSTDATED}}
17385\end{fulllineitems}
17386
17387
17388
17389\begin{savenotes}\sphinxattablestart
17390\centering
17391\begin{tabulary}{\linewidth}[t]{|T|T|}
17392\hline
17393
17394\sphinxcode{KDC\_OPT\_POSTDATED}
17395&
17396\sphinxcode{0x02000000}
17397\\
17398\hline
17399\end{tabulary}
17400\par
17401\sphinxattableend\end{savenotes}
17402
17403
17404\subsubsection{KDC\_OPT\_PROXIABLE}
17405\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXIABLE:kdc-opt-proxiable-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXIABLE::doc}}\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXIABLE:kdc-opt-proxiable}}\index{KDC\_OPT\_PROXIABLE (built-in variable)}
17406
17407\begin{fulllineitems}
17408\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXIABLE:KDC_OPT_PROXIABLE}}\pysigline{\sphinxbfcode{KDC\_OPT\_PROXIABLE}}
17409\end{fulllineitems}
17410
17411
17412
17413\begin{savenotes}\sphinxattablestart
17414\centering
17415\begin{tabulary}{\linewidth}[t]{|T|T|}
17416\hline
17417
17418\sphinxcode{KDC\_OPT\_PROXIABLE}
17419&
17420\sphinxcode{0x10000000}
17421\\
17422\hline
17423\end{tabulary}
17424\par
17425\sphinxattableend\end{savenotes}
17426
17427
17428\subsubsection{KDC\_OPT\_PROXY}
17429\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXY::doc}}\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXY:kdc-opt-proxy}}\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXY:kdc-opt-proxy-data}}\index{KDC\_OPT\_PROXY (built-in variable)}
17430
17431\begin{fulllineitems}
17432\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXY:KDC_OPT_PROXY}}\pysigline{\sphinxbfcode{KDC\_OPT\_PROXY}}
17433\end{fulllineitems}
17434
17435
17436
17437\begin{savenotes}\sphinxattablestart
17438\centering
17439\begin{tabulary}{\linewidth}[t]{|T|T|}
17440\hline
17441
17442\sphinxcode{KDC\_OPT\_PROXY}
17443&
17444\sphinxcode{0x08000000}
17445\\
17446\hline
17447\end{tabulary}
17448\par
17449\sphinxattableend\end{savenotes}
17450
17451
17452\subsubsection{KDC\_OPT\_RENEW}
17453\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEW::doc}}\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEW:kdc-opt-renew}}\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEW:kdc-opt-renew-data}}\index{KDC\_OPT\_RENEW (built-in variable)}
17454
17455\begin{fulllineitems}
17456\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEW:KDC_OPT_RENEW}}\pysigline{\sphinxbfcode{KDC\_OPT\_RENEW}}
17457\end{fulllineitems}
17458
17459
17460
17461\begin{savenotes}\sphinxattablestart
17462\centering
17463\begin{tabulary}{\linewidth}[t]{|T|T|}
17464\hline
17465
17466\sphinxcode{KDC\_OPT\_RENEW}
17467&
17468\sphinxcode{0x00000002}
17469\\
17470\hline
17471\end{tabulary}
17472\par
17473\sphinxattableend\end{savenotes}
17474
17475
17476\subsubsection{KDC\_OPT\_RENEWABLE}
17477\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE:kdc-opt-renewable}}\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE:kdc-opt-renewable-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE::doc}}\index{KDC\_OPT\_RENEWABLE (built-in variable)}
17478
17479\begin{fulllineitems}
17480\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE:KDC_OPT_RENEWABLE}}\pysigline{\sphinxbfcode{KDC\_OPT\_RENEWABLE}}
17481\end{fulllineitems}
17482
17483
17484
17485\begin{savenotes}\sphinxattablestart
17486\centering
17487\begin{tabulary}{\linewidth}[t]{|T|T|}
17488\hline
17489
17490\sphinxcode{KDC\_OPT\_RENEWABLE}
17491&
17492\sphinxcode{0x00800000}
17493\\
17494\hline
17495\end{tabulary}
17496\par
17497\sphinxattableend\end{savenotes}
17498
17499
17500\subsubsection{KDC\_OPT\_RENEWABLE\_OK}
17501\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE_OK::doc}}\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE_OK:kdc-opt-renewable-ok-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE_OK:kdc-opt-renewable-ok}}\index{KDC\_OPT\_RENEWABLE\_OK (built-in variable)}
17502
17503\begin{fulllineitems}
17504\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE_OK:KDC_OPT_RENEWABLE_OK}}\pysigline{\sphinxbfcode{KDC\_OPT\_RENEWABLE\_OK}}
17505\end{fulllineitems}
17506
17507
17508
17509\begin{savenotes}\sphinxattablestart
17510\centering
17511\begin{tabulary}{\linewidth}[t]{|T|T|}
17512\hline
17513
17514\sphinxcode{KDC\_OPT\_RENEWABLE\_OK}
17515&
17516\sphinxcode{0x00000010}
17517\\
17518\hline
17519\end{tabulary}
17520\par
17521\sphinxattableend\end{savenotes}
17522
17523
17524\subsubsection{KDC\_OPT\_REQUEST\_ANONYMOUS}
17525\label{\detokenize{appdev/refs/macros/KDC_OPT_REQUEST_ANONYMOUS:kdc-opt-request-anonymous}}\label{\detokenize{appdev/refs/macros/KDC_OPT_REQUEST_ANONYMOUS:kdc-opt-request-anonymous-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_REQUEST_ANONYMOUS::doc}}\index{KDC\_OPT\_REQUEST\_ANONYMOUS (built-in variable)}
17526
17527\begin{fulllineitems}
17528\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_REQUEST_ANONYMOUS:KDC_OPT_REQUEST_ANONYMOUS}}\pysigline{\sphinxbfcode{KDC\_OPT\_REQUEST\_ANONYMOUS}}
17529\end{fulllineitems}
17530
17531
17532
17533\begin{savenotes}\sphinxattablestart
17534\centering
17535\begin{tabulary}{\linewidth}[t]{|T|T|}
17536\hline
17537
17538\sphinxcode{KDC\_OPT\_REQUEST\_ANONYMOUS}
17539&
17540\sphinxcode{0x00008000}
17541\\
17542\hline
17543\end{tabulary}
17544\par
17545\sphinxattableend\end{savenotes}
17546
17547
17548\subsubsection{KDC\_OPT\_VALIDATE}
17549\label{\detokenize{appdev/refs/macros/KDC_OPT_VALIDATE:kdc-opt-validate-data}}\label{\detokenize{appdev/refs/macros/KDC_OPT_VALIDATE:kdc-opt-validate}}\label{\detokenize{appdev/refs/macros/KDC_OPT_VALIDATE::doc}}\index{KDC\_OPT\_VALIDATE (built-in variable)}
17550
17551\begin{fulllineitems}
17552\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_VALIDATE:KDC_OPT_VALIDATE}}\pysigline{\sphinxbfcode{KDC\_OPT\_VALIDATE}}
17553\end{fulllineitems}
17554
17555
17556
17557\begin{savenotes}\sphinxattablestart
17558\centering
17559\begin{tabulary}{\linewidth}[t]{|T|T|}
17560\hline
17561
17562\sphinxcode{KDC\_OPT\_VALIDATE}
17563&
17564\sphinxcode{0x00000001}
17565\\
17566\hline
17567\end{tabulary}
17568\par
17569\sphinxattableend\end{savenotes}
17570
17571
17572\subsubsection{KDC\_TKT\_COMMON\_MASK}
17573\label{\detokenize{appdev/refs/macros/KDC_TKT_COMMON_MASK:kdc-tkt-common-mask-data}}\label{\detokenize{appdev/refs/macros/KDC_TKT_COMMON_MASK::doc}}\label{\detokenize{appdev/refs/macros/KDC_TKT_COMMON_MASK:kdc-tkt-common-mask}}\index{KDC\_TKT\_COMMON\_MASK (built-in variable)}
17574
17575\begin{fulllineitems}
17576\phantomsection\label{\detokenize{appdev/refs/macros/KDC_TKT_COMMON_MASK:KDC_TKT_COMMON_MASK}}\pysigline{\sphinxbfcode{KDC\_TKT\_COMMON\_MASK}}
17577\end{fulllineitems}
17578
17579
17580
17581\begin{savenotes}\sphinxattablestart
17582\centering
17583\begin{tabulary}{\linewidth}[t]{|T|T|}
17584\hline
17585
17586\sphinxcode{KDC\_TKT\_COMMON\_MASK}
17587&
17588\sphinxcode{0x54800000}
17589\\
17590\hline
17591\end{tabulary}
17592\par
17593\sphinxattableend\end{savenotes}
17594
17595
17596\subsubsection{KRB5\_ALTAUTH\_ATT\_CHALLENGE\_RESPONSE}
17597\label{\detokenize{appdev/refs/macros/KRB5_ALTAUTH_ATT_CHALLENGE_RESPONSE:krb5-altauth-att-challenge-response}}\label{\detokenize{appdev/refs/macros/KRB5_ALTAUTH_ATT_CHALLENGE_RESPONSE:krb5-altauth-att-challenge-response-data}}\label{\detokenize{appdev/refs/macros/KRB5_ALTAUTH_ATT_CHALLENGE_RESPONSE::doc}}\index{KRB5\_ALTAUTH\_ATT\_CHALLENGE\_RESPONSE (built-in variable)}
17598
17599\begin{fulllineitems}
17600\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_ALTAUTH_ATT_CHALLENGE_RESPONSE:KRB5_ALTAUTH_ATT_CHALLENGE_RESPONSE}}\pysigline{\sphinxbfcode{KRB5\_ALTAUTH\_ATT\_CHALLENGE\_RESPONSE}}
17601\end{fulllineitems}
17602
17603
17604alternate authentication types
17605
17606
17607\begin{savenotes}\sphinxattablestart
17608\centering
17609\begin{tabulary}{\linewidth}[t]{|T|T|}
17610\hline
17611
17612\sphinxcode{KRB5\_ALTAUTH\_ATT\_CHALLENGE\_RESPONSE}
17613&
17614\sphinxcode{64}
17615\\
17616\hline
17617\end{tabulary}
17618\par
17619\sphinxattableend\end{savenotes}
17620
17621
17622\subsubsection{KRB5\_ANONYMOUS\_PRINCSTR}
17623\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_PRINCSTR:krb5-anonymous-princstr}}\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_PRINCSTR:krb5-anonymous-princstr-data}}\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_PRINCSTR::doc}}\index{KRB5\_ANONYMOUS\_PRINCSTR (built-in variable)}
17624
17625\begin{fulllineitems}
17626\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_PRINCSTR:KRB5_ANONYMOUS_PRINCSTR}}\pysigline{\sphinxbfcode{KRB5\_ANONYMOUS\_PRINCSTR}}
17627\end{fulllineitems}
17628
17629
17630Anonymous principal name.
17631
17632
17633\begin{savenotes}\sphinxattablestart
17634\centering
17635\begin{tabulary}{\linewidth}[t]{|T|T|}
17636\hline
17637
17638\sphinxcode{KRB5\_ANONYMOUS\_PRINCSTR}
17639&
17640\sphinxcode{"ANONYMOUS"}
17641\\
17642\hline
17643\end{tabulary}
17644\par
17645\sphinxattableend\end{savenotes}
17646
17647
17648\subsubsection{KRB5\_ANONYMOUS\_REALMSTR}
17649\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR:krb5-anonymous-realmstr-data}}\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR:krb5-anonymous-realmstr}}\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR::doc}}\index{KRB5\_ANONYMOUS\_REALMSTR (built-in variable)}
17650
17651\begin{fulllineitems}
17652\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR:KRB5_ANONYMOUS_REALMSTR}}\pysigline{\sphinxbfcode{KRB5\_ANONYMOUS\_REALMSTR}}
17653\end{fulllineitems}
17654
17655
17656Anonymous realm.
17657
17658
17659\begin{savenotes}\sphinxattablestart
17660\centering
17661\begin{tabulary}{\linewidth}[t]{|T|T|}
17662\hline
17663
17664\sphinxcode{KRB5\_ANONYMOUS\_REALMSTR}
17665&
17666\sphinxcode{"WELLKNOWN:ANONYMOUS"}
17667\\
17668\hline
17669\end{tabulary}
17670\par
17671\sphinxattableend\end{savenotes}
17672
17673
17674\subsubsection{KRB5\_AP\_REP}
17675\label{\detokenize{appdev/refs/macros/KRB5_AP_REP:krb5-ap-rep}}\label{\detokenize{appdev/refs/macros/KRB5_AP_REP::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AP_REP:krb5-ap-rep-data}}\index{KRB5\_AP\_REP (built-in variable)}
17676
17677\begin{fulllineitems}
17678\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AP_REP:KRB5_AP_REP}}\pysigline{\sphinxbfcode{KRB5\_AP\_REP}}
17679\end{fulllineitems}
17680
17681
17682Response to mutual AP request.
17683
17684
17685\begin{savenotes}\sphinxattablestart
17686\centering
17687\begin{tabulary}{\linewidth}[t]{|T|T|}
17688\hline
17689
17690\sphinxcode{KRB5\_AP\_REP}
17691&
17692\sphinxcode{((krb5\_msgtype)15)}
17693\\
17694\hline
17695\end{tabulary}
17696\par
17697\sphinxattableend\end{savenotes}
17698
17699
17700\subsubsection{KRB5\_AP\_REQ}
17701\label{\detokenize{appdev/refs/macros/KRB5_AP_REQ:krb5-ap-req}}\label{\detokenize{appdev/refs/macros/KRB5_AP_REQ::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AP_REQ:krb5-ap-req-data}}\index{KRB5\_AP\_REQ (built-in variable)}
17702
17703\begin{fulllineitems}
17704\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AP_REQ:KRB5_AP_REQ}}\pysigline{\sphinxbfcode{KRB5\_AP\_REQ}}
17705\end{fulllineitems}
17706
17707
17708Auth req to application server.
17709
17710
17711\begin{savenotes}\sphinxattablestart
17712\centering
17713\begin{tabulary}{\linewidth}[t]{|T|T|}
17714\hline
17715
17716\sphinxcode{KRB5\_AP\_REQ}
17717&
17718\sphinxcode{((krb5\_msgtype)14)}
17719\\
17720\hline
17721\end{tabulary}
17722\par
17723\sphinxattableend\end{savenotes}
17724
17725
17726\subsubsection{KRB5\_AS\_REP}
17727\label{\detokenize{appdev/refs/macros/KRB5_AS_REP:krb5-as-rep}}\label{\detokenize{appdev/refs/macros/KRB5_AS_REP:krb5-as-rep-data}}\label{\detokenize{appdev/refs/macros/KRB5_AS_REP::doc}}\index{KRB5\_AS\_REP (built-in variable)}
17728
17729\begin{fulllineitems}
17730\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AS_REP:KRB5_AS_REP}}\pysigline{\sphinxbfcode{KRB5\_AS\_REP}}
17731\end{fulllineitems}
17732
17733
17734Response to AS request.
17735
17736
17737\begin{savenotes}\sphinxattablestart
17738\centering
17739\begin{tabulary}{\linewidth}[t]{|T|T|}
17740\hline
17741
17742\sphinxcode{KRB5\_AS\_REP}
17743&
17744\sphinxcode{((krb5\_msgtype)11)}
17745\\
17746\hline
17747\end{tabulary}
17748\par
17749\sphinxattableend\end{savenotes}
17750
17751
17752\subsubsection{KRB5\_AS\_REQ}
17753\label{\detokenize{appdev/refs/macros/KRB5_AS_REQ:krb5-as-req}}\label{\detokenize{appdev/refs/macros/KRB5_AS_REQ:krb5-as-req-data}}\label{\detokenize{appdev/refs/macros/KRB5_AS_REQ::doc}}\index{KRB5\_AS\_REQ (built-in variable)}
17754
17755\begin{fulllineitems}
17756\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AS_REQ:KRB5_AS_REQ}}\pysigline{\sphinxbfcode{KRB5\_AS\_REQ}}
17757\end{fulllineitems}
17758
17759
17760Initial authentication request.
17761
17762
17763\begin{savenotes}\sphinxattablestart
17764\centering
17765\begin{tabulary}{\linewidth}[t]{|T|T|}
17766\hline
17767
17768\sphinxcode{KRB5\_AS\_REQ}
17769&
17770\sphinxcode{((krb5\_msgtype)10)}
17771\\
17772\hline
17773\end{tabulary}
17774\par
17775\sphinxattableend\end{savenotes}
17776
17777
17778\subsubsection{KRB5\_AUTHDATA\_AND\_OR}
17779\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AND_OR::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AND_OR:krb5-authdata-and-or-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AND_OR:krb5-authdata-and-or}}\index{KRB5\_AUTHDATA\_AND\_OR (built-in variable)}
17780
17781\begin{fulllineitems}
17782\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AND_OR:KRB5_AUTHDATA_AND_OR}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_AND\_OR}}
17783\end{fulllineitems}
17784
17785
17786
17787\begin{savenotes}\sphinxattablestart
17788\centering
17789\begin{tabulary}{\linewidth}[t]{|T|T|}
17790\hline
17791
17792\sphinxcode{KRB5\_AUTHDATA\_AND\_OR}
17793&
17794\sphinxcode{5}
17795\\
17796\hline
17797\end{tabulary}
17798\par
17799\sphinxattableend\end{savenotes}
17800
17801
17802\subsubsection{KRB5\_AUTHDATA\_AP\_OPTIONS}
17803\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AP_OPTIONS:krb5-authdata-ap-options-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AP_OPTIONS::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AP_OPTIONS:krb5-authdata-ap-options}}\index{KRB5\_AUTHDATA\_AP\_OPTIONS (built-in variable)}
17804
17805\begin{fulllineitems}
17806\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AP_OPTIONS:KRB5_AUTHDATA_AP_OPTIONS}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_AP\_OPTIONS}}
17807\end{fulllineitems}
17808
17809
17810
17811\begin{savenotes}\sphinxattablestart
17812\centering
17813\begin{tabulary}{\linewidth}[t]{|T|T|}
17814\hline
17815
17816\sphinxcode{KRB5\_AUTHDATA\_AP\_OPTIONS}
17817&
17818\sphinxcode{143}
17819\\
17820\hline
17821\end{tabulary}
17822\par
17823\sphinxattableend\end{savenotes}
17824
17825
17826\subsubsection{KRB5\_AUTHDATA\_AUTH\_INDICATOR}
17827\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AUTH_INDICATOR:krb5-authdata-auth-indicator}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AUTH_INDICATOR::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AUTH_INDICATOR:krb5-authdata-auth-indicator-data}}\index{KRB5\_AUTHDATA\_AUTH\_INDICATOR (built-in variable)}
17828
17829\begin{fulllineitems}
17830\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AUTH_INDICATOR:KRB5_AUTHDATA_AUTH_INDICATOR}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_AUTH\_INDICATOR}}
17831\end{fulllineitems}
17832
17833
17834
17835\begin{savenotes}\sphinxattablestart
17836\centering
17837\begin{tabulary}{\linewidth}[t]{|T|T|}
17838\hline
17839
17840\sphinxcode{KRB5\_AUTHDATA\_AUTH\_INDICATOR}
17841&
17842\sphinxcode{97}
17843\\
17844\hline
17845\end{tabulary}
17846\par
17847\sphinxattableend\end{savenotes}
17848
17849
17850\subsubsection{KRB5\_AUTHDATA\_CAMMAC}
17851\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_CAMMAC:krb5-authdata-cammac}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_CAMMAC::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_CAMMAC:krb5-authdata-cammac-data}}\index{KRB5\_AUTHDATA\_CAMMAC (built-in variable)}
17852
17853\begin{fulllineitems}
17854\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_CAMMAC:KRB5_AUTHDATA_CAMMAC}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_CAMMAC}}
17855\end{fulllineitems}
17856
17857
17858
17859\begin{savenotes}\sphinxattablestart
17860\centering
17861\begin{tabulary}{\linewidth}[t]{|T|T|}
17862\hline
17863
17864\sphinxcode{KRB5\_AUTHDATA\_CAMMAC}
17865&
17866\sphinxcode{96}
17867\\
17868\hline
17869\end{tabulary}
17870\par
17871\sphinxattableend\end{savenotes}
17872
17873
17874\subsubsection{KRB5\_AUTHDATA\_ETYPE\_NEGOTIATION}
17875\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_ETYPE_NEGOTIATION:krb5-authdata-etype-negotiation}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_ETYPE_NEGOTIATION::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_ETYPE_NEGOTIATION:krb5-authdata-etype-negotiation-data}}\index{KRB5\_AUTHDATA\_ETYPE\_NEGOTIATION (built-in variable)}
17876
17877\begin{fulllineitems}
17878\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_ETYPE_NEGOTIATION:KRB5_AUTHDATA_ETYPE_NEGOTIATION}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_ETYPE\_NEGOTIATION}}
17879\end{fulllineitems}
17880
17881
17882RFC 4537.
17883
17884
17885\begin{savenotes}\sphinxattablestart
17886\centering
17887\begin{tabulary}{\linewidth}[t]{|T|T|}
17888\hline
17889
17890\sphinxcode{KRB5\_AUTHDATA\_ETYPE\_NEGOTIATION}
17891&
17892\sphinxcode{129}
17893\\
17894\hline
17895\end{tabulary}
17896\par
17897\sphinxattableend\end{savenotes}
17898
17899
17900\subsubsection{KRB5\_AUTHDATA\_FX\_ARMOR}
17901\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_FX_ARMOR::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_FX_ARMOR:krb5-authdata-fx-armor}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_FX_ARMOR:krb5-authdata-fx-armor-data}}\index{KRB5\_AUTHDATA\_FX\_ARMOR (built-in variable)}
17902
17903\begin{fulllineitems}
17904\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_FX_ARMOR:KRB5_AUTHDATA_FX_ARMOR}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_FX\_ARMOR}}
17905\end{fulllineitems}
17906
17907
17908
17909\begin{savenotes}\sphinxattablestart
17910\centering
17911\begin{tabulary}{\linewidth}[t]{|T|T|}
17912\hline
17913
17914\sphinxcode{KRB5\_AUTHDATA\_FX\_ARMOR}
17915&
17916\sphinxcode{71}
17917\\
17918\hline
17919\end{tabulary}
17920\par
17921\sphinxattableend\end{savenotes}
17922
17923
17924\subsubsection{KRB5\_AUTHDATA\_IF\_RELEVANT}
17925\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_IF_RELEVANT:krb5-authdata-if-relevant-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_IF_RELEVANT:krb5-authdata-if-relevant}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_IF_RELEVANT::doc}}\index{KRB5\_AUTHDATA\_IF\_RELEVANT (built-in variable)}
17926
17927\begin{fulllineitems}
17928\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_IF_RELEVANT:KRB5_AUTHDATA_IF_RELEVANT}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_IF\_RELEVANT}}
17929\end{fulllineitems}
17930
17931
17932
17933\begin{savenotes}\sphinxattablestart
17934\centering
17935\begin{tabulary}{\linewidth}[t]{|T|T|}
17936\hline
17937
17938\sphinxcode{KRB5\_AUTHDATA\_IF\_RELEVANT}
17939&
17940\sphinxcode{1}
17941\\
17942\hline
17943\end{tabulary}
17944\par
17945\sphinxattableend\end{savenotes}
17946
17947
17948\subsubsection{KRB5\_AUTHDATA\_INITIAL\_VERIFIED\_CAS}
17949\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_INITIAL_VERIFIED_CAS:krb5-authdata-initial-verified-cas-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_INITIAL_VERIFIED_CAS:krb5-authdata-initial-verified-cas}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_INITIAL_VERIFIED_CAS::doc}}\index{KRB5\_AUTHDATA\_INITIAL\_VERIFIED\_CAS (built-in variable)}
17950
17951\begin{fulllineitems}
17952\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_INITIAL_VERIFIED_CAS:KRB5_AUTHDATA_INITIAL_VERIFIED_CAS}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_INITIAL\_VERIFIED\_CAS}}
17953\end{fulllineitems}
17954
17955
17956
17957\begin{savenotes}\sphinxattablestart
17958\centering
17959\begin{tabulary}{\linewidth}[t]{|T|T|}
17960\hline
17961
17962\sphinxcode{KRB5\_AUTHDATA\_INITIAL\_VERIFIED\_CAS}
17963&
17964\sphinxcode{9}
17965\\
17966\hline
17967\end{tabulary}
17968\par
17969\sphinxattableend\end{savenotes}
17970
17971
17972\subsubsection{KRB5\_AUTHDATA\_KDC\_ISSUED}
17973\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_KDC_ISSUED:krb5-authdata-kdc-issued-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_KDC_ISSUED::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_KDC_ISSUED:krb5-authdata-kdc-issued}}\index{KRB5\_AUTHDATA\_KDC\_ISSUED (built-in variable)}
17974
17975\begin{fulllineitems}
17976\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_KDC_ISSUED:KRB5_AUTHDATA_KDC_ISSUED}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_KDC\_ISSUED}}
17977\end{fulllineitems}
17978
17979
17980
17981\begin{savenotes}\sphinxattablestart
17982\centering
17983\begin{tabulary}{\linewidth}[t]{|T|T|}
17984\hline
17985
17986\sphinxcode{KRB5\_AUTHDATA\_KDC\_ISSUED}
17987&
17988\sphinxcode{4}
17989\\
17990\hline
17991\end{tabulary}
17992\par
17993\sphinxattableend\end{savenotes}
17994
17995
17996\subsubsection{KRB5\_AUTHDATA\_MANDATORY\_FOR\_KDC}
17997\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_MANDATORY_FOR_KDC:krb5-authdata-mandatory-for-kdc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_MANDATORY_FOR_KDC::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_MANDATORY_FOR_KDC:krb5-authdata-mandatory-for-kdc-data}}\index{KRB5\_AUTHDATA\_MANDATORY\_FOR\_KDC (built-in variable)}
17998
17999\begin{fulllineitems}
18000\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_MANDATORY_FOR_KDC:KRB5_AUTHDATA_MANDATORY_FOR_KDC}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_MANDATORY\_FOR\_KDC}}
18001\end{fulllineitems}
18002
18003
18004
18005\begin{savenotes}\sphinxattablestart
18006\centering
18007\begin{tabulary}{\linewidth}[t]{|T|T|}
18008\hline
18009
18010\sphinxcode{KRB5\_AUTHDATA\_MANDATORY\_FOR\_KDC}
18011&
18012\sphinxcode{8}
18013\\
18014\hline
18015\end{tabulary}
18016\par
18017\sphinxattableend\end{savenotes}
18018
18019
18020\subsubsection{KRB5\_AUTHDATA\_OSF\_DCE}
18021\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_OSF_DCE:krb5-authdata-osf-dce-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_OSF_DCE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_OSF_DCE:krb5-authdata-osf-dce}}\index{KRB5\_AUTHDATA\_OSF\_DCE (built-in variable)}
18022
18023\begin{fulllineitems}
18024\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_OSF_DCE:KRB5_AUTHDATA_OSF_DCE}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_OSF\_DCE}}
18025\end{fulllineitems}
18026
18027
18028
18029\begin{savenotes}\sphinxattablestart
18030\centering
18031\begin{tabulary}{\linewidth}[t]{|T|T|}
18032\hline
18033
18034\sphinxcode{KRB5\_AUTHDATA\_OSF\_DCE}
18035&
18036\sphinxcode{64}
18037\\
18038\hline
18039\end{tabulary}
18040\par
18041\sphinxattableend\end{savenotes}
18042
18043
18044\subsubsection{KRB5\_AUTHDATA\_SESAME}
18045\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SESAME:krb5-authdata-sesame}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SESAME::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SESAME:krb5-authdata-sesame-data}}\index{KRB5\_AUTHDATA\_SESAME (built-in variable)}
18046
18047\begin{fulllineitems}
18048\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SESAME:KRB5_AUTHDATA_SESAME}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_SESAME}}
18049\end{fulllineitems}
18050
18051
18052
18053\begin{savenotes}\sphinxattablestart
18054\centering
18055\begin{tabulary}{\linewidth}[t]{|T|T|}
18056\hline
18057
18058\sphinxcode{KRB5\_AUTHDATA\_SESAME}
18059&
18060\sphinxcode{65}
18061\\
18062\hline
18063\end{tabulary}
18064\par
18065\sphinxattableend\end{savenotes}
18066
18067
18068\subsubsection{KRB5\_AUTHDATA\_SIGNTICKET}
18069\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SIGNTICKET:krb5-authdata-signticket-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SIGNTICKET:krb5-authdata-signticket}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SIGNTICKET::doc}}\index{KRB5\_AUTHDATA\_SIGNTICKET (built-in variable)}
18070
18071\begin{fulllineitems}
18072\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SIGNTICKET:KRB5_AUTHDATA_SIGNTICKET}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_SIGNTICKET}}
18073\end{fulllineitems}
18074
18075
18076formerly 142 in krb5 1.8
18077
18078
18079\begin{savenotes}\sphinxattablestart
18080\centering
18081\begin{tabulary}{\linewidth}[t]{|T|T|}
18082\hline
18083
18084\sphinxcode{KRB5\_AUTHDATA\_SIGNTICKET}
18085&
18086\sphinxcode{512}
18087\\
18088\hline
18089\end{tabulary}
18090\par
18091\sphinxattableend\end{savenotes}
18092
18093
18094\subsubsection{KRB5\_AUTHDATA\_WIN2K\_PAC}
18095\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_WIN2K_PAC:krb5-authdata-win2k-pac-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_WIN2K_PAC::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_WIN2K_PAC:krb5-authdata-win2k-pac}}\index{KRB5\_AUTHDATA\_WIN2K\_PAC (built-in variable)}
18096
18097\begin{fulllineitems}
18098\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_WIN2K_PAC:KRB5_AUTHDATA_WIN2K_PAC}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_WIN2K\_PAC}}
18099\end{fulllineitems}
18100
18101
18102
18103\begin{savenotes}\sphinxattablestart
18104\centering
18105\begin{tabulary}{\linewidth}[t]{|T|T|}
18106\hline
18107
18108\sphinxcode{KRB5\_AUTHDATA\_WIN2K\_PAC}
18109&
18110\sphinxcode{128}
18111\\
18112\hline
18113\end{tabulary}
18114\par
18115\sphinxattableend\end{savenotes}
18116
18117
18118\subsubsection{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}
18119\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:krb5-auth-context-do-sequence-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:krb5-auth-context-do-sequence}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE::doc}}\index{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE (built-in variable)}
18120
18121\begin{fulllineitems}
18122\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}
18123\end{fulllineitems}
18124
18125
18126Prevent replays with sequence numbers.
18127
18128
18129\begin{savenotes}\sphinxattablestart
18130\centering
18131\begin{tabulary}{\linewidth}[t]{|T|T|}
18132\hline
18133
18134\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}
18135&
18136\sphinxcode{0x00000004}
18137\\
18138\hline
18139\end{tabulary}
18140\par
18141\sphinxattableend\end{savenotes}
18142
18143
18144\subsubsection{KRB5\_AUTH\_CONTEXT\_DO\_TIME}
18145\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:krb5-auth-context-do-time-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:krb5-auth-context-do-time}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME::doc}}\index{KRB5\_AUTH\_CONTEXT\_DO\_TIME (built-in variable)}
18146
18147\begin{fulllineitems}
18148\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}
18149\end{fulllineitems}
18150
18151
18152Prevent replays with timestamps and replay cache.
18153
18154
18155\begin{savenotes}\sphinxattablestart
18156\centering
18157\begin{tabulary}{\linewidth}[t]{|T|T|}
18158\hline
18159
18160\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}
18161&
18162\sphinxcode{0x00000001}
18163\\
18164\hline
18165\end{tabulary}
18166\par
18167\sphinxattableend\end{savenotes}
18168
18169
18170\subsubsection{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_ADDR}
18171\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR:krb5-auth-context-generate-local-addr}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR:krb5-auth-context-generate-local-addr-data}}\index{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_ADDR (built-in variable)}
18172
18173\begin{fulllineitems}
18174\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR:KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_ADDR}}
18175\end{fulllineitems}
18176
18177
18178Generate the local network address.
18179
18180
18181\begin{savenotes}\sphinxattablestart
18182\centering
18183\begin{tabulary}{\linewidth}[t]{|T|T|}
18184\hline
18185
18186\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_ADDR}
18187&
18188\sphinxcode{0x00000001}
18189\\
18190\hline
18191\end{tabulary}
18192\par
18193\sphinxattableend\end{savenotes}
18194
18195
18196\subsubsection{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_FULL\_ADDR}
18197\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR:krb5-auth-context-generate-local-full-addr}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR:krb5-auth-context-generate-local-full-addr-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR::doc}}\index{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_FULL\_ADDR (built-in variable)}
18198
18199\begin{fulllineitems}
18200\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR:KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_FULL\_ADDR}}
18201\end{fulllineitems}
18202
18203
18204Generate the local network address and the local port.
18205
18206
18207\begin{savenotes}\sphinxattablestart
18208\centering
18209\begin{tabulary}{\linewidth}[t]{|T|T|}
18210\hline
18211
18212\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_FULL\_ADDR}
18213&
18214\sphinxcode{0x00000004}
18215\\
18216\hline
18217\end{tabulary}
18218\par
18219\sphinxattableend\end{savenotes}
18220
18221
18222\subsubsection{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_ADDR}
18223\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR:krb5-auth-context-generate-remote-addr-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR:krb5-auth-context-generate-remote-addr}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR::doc}}\index{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_ADDR (built-in variable)}
18224
18225\begin{fulllineitems}
18226\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR:KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_ADDR}}
18227\end{fulllineitems}
18228
18229
18230Generate the remote network address.
18231
18232
18233\begin{savenotes}\sphinxattablestart
18234\centering
18235\begin{tabulary}{\linewidth}[t]{|T|T|}
18236\hline
18237
18238\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_ADDR}
18239&
18240\sphinxcode{0x00000002}
18241\\
18242\hline
18243\end{tabulary}
18244\par
18245\sphinxattableend\end{savenotes}
18246
18247
18248\subsubsection{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_FULL\_ADDR}
18249\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR:krb5-auth-context-generate-remote-full-addr}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR:krb5-auth-context-generate-remote-full-addr-data}}\index{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_FULL\_ADDR (built-in variable)}
18250
18251\begin{fulllineitems}
18252\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR:KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_FULL\_ADDR}}
18253\end{fulllineitems}
18254
18255
18256Generate the remote network address and the remote port.
18257
18258
18259\begin{savenotes}\sphinxattablestart
18260\centering
18261\begin{tabulary}{\linewidth}[t]{|T|T|}
18262\hline
18263
18264\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_FULL\_ADDR}
18265&
18266\sphinxcode{0x00000008}
18267\\
18268\hline
18269\end{tabulary}
18270\par
18271\sphinxattableend\end{savenotes}
18272
18273
18274\subsubsection{KRB5\_AUTH\_CONTEXT\_PERMIT\_ALL}
18275\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_PERMIT_ALL:krb5-auth-context-permit-all}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_PERMIT_ALL:krb5-auth-context-permit-all-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_PERMIT_ALL::doc}}\index{KRB5\_AUTH\_CONTEXT\_PERMIT\_ALL (built-in variable)}
18276
18277\begin{fulllineitems}
18278\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_PERMIT_ALL:KRB5_AUTH_CONTEXT_PERMIT_ALL}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_PERMIT\_ALL}}
18279\end{fulllineitems}
18280
18281
18282
18283\begin{savenotes}\sphinxattablestart
18284\centering
18285\begin{tabulary}{\linewidth}[t]{|T|T|}
18286\hline
18287
18288\sphinxcode{KRB5\_AUTH\_CONTEXT\_PERMIT\_ALL}
18289&
18290\sphinxcode{0x00000010}
18291\\
18292\hline
18293\end{tabulary}
18294\par
18295\sphinxattableend\end{savenotes}
18296
18297
18298\subsubsection{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}
18299\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:krb5-auth-context-ret-sequence}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:krb5-auth-context-ret-sequence-data}}\index{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE (built-in variable)}
18300
18301\begin{fulllineitems}
18302\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}
18303\end{fulllineitems}
18304
18305
18306Save sequence numbers for application.
18307
18308
18309\begin{savenotes}\sphinxattablestart
18310\centering
18311\begin{tabulary}{\linewidth}[t]{|T|T|}
18312\hline
18313
18314\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}
18315&
18316\sphinxcode{0x00000008}
18317\\
18318\hline
18319\end{tabulary}
18320\par
18321\sphinxattableend\end{savenotes}
18322
18323
18324\subsubsection{KRB5\_AUTH\_CONTEXT\_RET\_TIME}
18325\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:krb5-auth-context-ret-time}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:krb5-auth-context-ret-time-data}}\index{KRB5\_AUTH\_CONTEXT\_RET\_TIME (built-in variable)}
18326
18327\begin{fulllineitems}
18328\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}
18329\end{fulllineitems}
18330
18331
18332Save timestamps for application.
18333
18334
18335\begin{savenotes}\sphinxattablestart
18336\centering
18337\begin{tabulary}{\linewidth}[t]{|T|T|}
18338\hline
18339
18340\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}
18341&
18342\sphinxcode{0x00000002}
18343\\
18344\hline
18345\end{tabulary}
18346\par
18347\sphinxattableend\end{savenotes}
18348
18349
18350\subsubsection{KRB5\_AUTH\_CONTEXT\_USE\_SUBKEY}
18351\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_USE_SUBKEY::doc}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_USE_SUBKEY:krb5-auth-context-use-subkey-data}}\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_USE_SUBKEY:krb5-auth-context-use-subkey}}\index{KRB5\_AUTH\_CONTEXT\_USE\_SUBKEY (built-in variable)}
18352
18353\begin{fulllineitems}
18354\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_USE_SUBKEY:KRB5_AUTH_CONTEXT_USE_SUBKEY}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_USE\_SUBKEY}}
18355\end{fulllineitems}
18356
18357
18358
18359\begin{savenotes}\sphinxattablestart
18360\centering
18361\begin{tabulary}{\linewidth}[t]{|T|T|}
18362\hline
18363
18364\sphinxcode{KRB5\_AUTH\_CONTEXT\_USE\_SUBKEY}
18365&
18366\sphinxcode{0x00000020}
18367\\
18368\hline
18369\end{tabulary}
18370\par
18371\sphinxattableend\end{savenotes}
18372
18373
18374\subsubsection{KRB5\_CRED}
18375\label{\detokenize{appdev/refs/macros/KRB5_CRED:krb5-cred-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRED::doc}}\label{\detokenize{appdev/refs/macros/KRB5_CRED:krb5-cred}}\index{KRB5\_CRED (built-in variable)}
18376
18377\begin{fulllineitems}
18378\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRED:KRB5_CRED}}\pysigline{\sphinxbfcode{KRB5\_CRED}}
18379\end{fulllineitems}
18380
18381
18382Cred forwarding message.
18383
18384
18385\begin{savenotes}\sphinxattablestart
18386\centering
18387\begin{tabulary}{\linewidth}[t]{|T|T|}
18388\hline
18389
18390\sphinxcode{KRB5\_CRED}
18391&
18392\sphinxcode{((krb5\_msgtype)22)}
18393\\
18394\hline
18395\end{tabulary}
18396\par
18397\sphinxattableend\end{savenotes}
18398
18399
18400\subsubsection{KRB5\_CRYPTO\_TYPE\_CHECKSUM}
18401\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:krb5-crypto-type-checksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:krb5-crypto-type-checksum}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM::doc}}\index{KRB5\_CRYPTO\_TYPE\_CHECKSUM (built-in variable)}
18402
18403\begin{fulllineitems}
18404\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:KRB5_CRYPTO_TYPE_CHECKSUM}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_CHECKSUM}}
18405\end{fulllineitems}
18406
18407
18408{[}out{]} checksum for MIC
18409
18410
18411\begin{savenotes}\sphinxattablestart
18412\centering
18413\begin{tabulary}{\linewidth}[t]{|T|T|}
18414\hline
18415
18416\sphinxcode{KRB5\_CRYPTO\_TYPE\_CHECKSUM}
18417&
18418\sphinxcode{6}
18419\\
18420\hline
18421\end{tabulary}
18422\par
18423\sphinxattableend\end{savenotes}
18424
18425
18426\subsubsection{KRB5\_CRYPTO\_TYPE\_DATA}
18427\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA::doc}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA:krb5-crypto-type-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA:krb5-crypto-type-data-data}}\index{KRB5\_CRYPTO\_TYPE\_DATA (built-in variable)}
18428
18429\begin{fulllineitems}
18430\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA:KRB5_CRYPTO_TYPE_DATA}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_DATA}}
18431\end{fulllineitems}
18432
18433
18434{[}in, out{]} plaintext
18435
18436
18437\begin{savenotes}\sphinxattablestart
18438\centering
18439\begin{tabulary}{\linewidth}[t]{|T|T|}
18440\hline
18441
18442\sphinxcode{KRB5\_CRYPTO\_TYPE\_DATA}
18443&
18444\sphinxcode{2}
18445\\
18446\hline
18447\end{tabulary}
18448\par
18449\sphinxattableend\end{savenotes}
18450
18451
18452\subsubsection{KRB5\_CRYPTO\_TYPE\_EMPTY}
18453\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_EMPTY::doc}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_EMPTY:krb5-crypto-type-empty}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_EMPTY:krb5-crypto-type-empty-data}}\index{KRB5\_CRYPTO\_TYPE\_EMPTY (built-in variable)}
18454
18455\begin{fulllineitems}
18456\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_EMPTY:KRB5_CRYPTO_TYPE_EMPTY}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_EMPTY}}
18457\end{fulllineitems}
18458
18459
18460{[}in{]} ignored
18461
18462
18463\begin{savenotes}\sphinxattablestart
18464\centering
18465\begin{tabulary}{\linewidth}[t]{|T|T|}
18466\hline
18467
18468\sphinxcode{KRB5\_CRYPTO\_TYPE\_EMPTY}
18469&
18470\sphinxcode{0}
18471\\
18472\hline
18473\end{tabulary}
18474\par
18475\sphinxattableend\end{savenotes}
18476
18477
18478\subsubsection{KRB5\_CRYPTO\_TYPE\_HEADER}
18479\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_HEADER:krb5-crypto-type-header}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_HEADER:krb5-crypto-type-header-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_HEADER::doc}}\index{KRB5\_CRYPTO\_TYPE\_HEADER (built-in variable)}
18480
18481\begin{fulllineitems}
18482\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_HEADER:KRB5_CRYPTO_TYPE_HEADER}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_HEADER}}
18483\end{fulllineitems}
18484
18485
18486{[}out{]} header
18487
18488
18489\begin{savenotes}\sphinxattablestart
18490\centering
18491\begin{tabulary}{\linewidth}[t]{|T|T|}
18492\hline
18493
18494\sphinxcode{KRB5\_CRYPTO\_TYPE\_HEADER}
18495&
18496\sphinxcode{1}
18497\\
18498\hline
18499\end{tabulary}
18500\par
18501\sphinxattableend\end{savenotes}
18502
18503
18504\subsubsection{KRB5\_CRYPTO\_TYPE\_PADDING}
18505\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_PADDING::doc}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_PADDING:krb5-crypto-type-padding-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_PADDING:krb5-crypto-type-padding}}\index{KRB5\_CRYPTO\_TYPE\_PADDING (built-in variable)}
18506
18507\begin{fulllineitems}
18508\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_PADDING:KRB5_CRYPTO_TYPE_PADDING}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_PADDING}}
18509\end{fulllineitems}
18510
18511
18512{[}out{]} padding
18513
18514
18515\begin{savenotes}\sphinxattablestart
18516\centering
18517\begin{tabulary}{\linewidth}[t]{|T|T|}
18518\hline
18519
18520\sphinxcode{KRB5\_CRYPTO\_TYPE\_PADDING}
18521&
18522\sphinxcode{4}
18523\\
18524\hline
18525\end{tabulary}
18526\par
18527\sphinxattableend\end{savenotes}
18528
18529
18530\subsubsection{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}
18531\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY:krb5-crypto-type-sign-only}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY:krb5-crypto-type-sign-only-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY::doc}}\index{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY (built-in variable)}
18532
18533\begin{fulllineitems}
18534\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY:KRB5_CRYPTO_TYPE_SIGN_ONLY}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}}
18535\end{fulllineitems}
18536
18537
18538{[}in{]} associated data
18539
18540
18541\begin{savenotes}\sphinxattablestart
18542\centering
18543\begin{tabulary}{\linewidth}[t]{|T|T|}
18544\hline
18545
18546\sphinxcode{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}
18547&
18548\sphinxcode{3}
18549\\
18550\hline
18551\end{tabulary}
18552\par
18553\sphinxattableend\end{savenotes}
18554
18555
18556\subsubsection{KRB5\_CRYPTO\_TYPE\_STREAM}
18557\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_STREAM:krb5-crypto-type-stream-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_STREAM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_STREAM:krb5-crypto-type-stream}}\index{KRB5\_CRYPTO\_TYPE\_STREAM (built-in variable)}
18558
18559\begin{fulllineitems}
18560\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_STREAM:KRB5_CRYPTO_TYPE_STREAM}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_STREAM}}
18561\end{fulllineitems}
18562
18563
18564{[}in{]} entire message without decomposing the structure into header, data and trailer buffers
18565
18566
18567\begin{savenotes}\sphinxattablestart
18568\centering
18569\begin{tabulary}{\linewidth}[t]{|T|T|}
18570\hline
18571
18572\sphinxcode{KRB5\_CRYPTO\_TYPE\_STREAM}
18573&
18574\sphinxcode{7}
18575\\
18576\hline
18577\end{tabulary}
18578\par
18579\sphinxattableend\end{savenotes}
18580
18581
18582\subsubsection{KRB5\_CRYPTO\_TYPE\_TRAILER}
18583\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_TRAILER:krb5-crypto-type-trailer}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_TRAILER:krb5-crypto-type-trailer-data}}\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_TRAILER::doc}}\index{KRB5\_CRYPTO\_TYPE\_TRAILER (built-in variable)}
18584
18585\begin{fulllineitems}
18586\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_TRAILER:KRB5_CRYPTO_TYPE_TRAILER}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_TRAILER}}
18587\end{fulllineitems}
18588
18589
18590{[}out{]} checksum for encrypt
18591
18592
18593\begin{savenotes}\sphinxattablestart
18594\centering
18595\begin{tabulary}{\linewidth}[t]{|T|T|}
18596\hline
18597
18598\sphinxcode{KRB5\_CRYPTO\_TYPE\_TRAILER}
18599&
18600\sphinxcode{5}
18601\\
18602\hline
18603\end{tabulary}
18604\par
18605\sphinxattableend\end{savenotes}
18606
18607
18608\subsubsection{KRB5\_CYBERSAFE\_SECUREID}
18609\label{\detokenize{appdev/refs/macros/KRB5_CYBERSAFE_SECUREID:krb5-cybersafe-secureid}}\label{\detokenize{appdev/refs/macros/KRB5_CYBERSAFE_SECUREID::doc}}\label{\detokenize{appdev/refs/macros/KRB5_CYBERSAFE_SECUREID:krb5-cybersafe-secureid-data}}\index{KRB5\_CYBERSAFE\_SECUREID (built-in variable)}
18610
18611\begin{fulllineitems}
18612\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CYBERSAFE_SECUREID:KRB5_CYBERSAFE_SECUREID}}\pysigline{\sphinxbfcode{KRB5\_CYBERSAFE\_SECUREID}}
18613\end{fulllineitems}
18614
18615
18616Cybersafe.
18617
18618RFC 4120
18619
18620
18621\begin{savenotes}\sphinxattablestart
18622\centering
18623\begin{tabulary}{\linewidth}[t]{|T|T|}
18624\hline
18625
18626\sphinxcode{KRB5\_CYBERSAFE\_SECUREID}
18627&
18628\sphinxcode{9}
18629\\
18630\hline
18631\end{tabulary}
18632\par
18633\sphinxattableend\end{savenotes}
18634
18635
18636\subsubsection{KRB5\_DOMAIN\_X500\_COMPRESS}
18637\label{\detokenize{appdev/refs/macros/KRB5_DOMAIN_X500_COMPRESS::doc}}\label{\detokenize{appdev/refs/macros/KRB5_DOMAIN_X500_COMPRESS:krb5-domain-x500-compress}}\label{\detokenize{appdev/refs/macros/KRB5_DOMAIN_X500_COMPRESS:krb5-domain-x500-compress-data}}\index{KRB5\_DOMAIN\_X500\_COMPRESS (built-in variable)}
18638
18639\begin{fulllineitems}
18640\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_DOMAIN_X500_COMPRESS:KRB5_DOMAIN_X500_COMPRESS}}\pysigline{\sphinxbfcode{KRB5\_DOMAIN\_X500\_COMPRESS}}
18641\end{fulllineitems}
18642
18643
18644Transited encoding types.
18645
18646
18647\begin{savenotes}\sphinxattablestart
18648\centering
18649\begin{tabulary}{\linewidth}[t]{|T|T|}
18650\hline
18651
18652\sphinxcode{KRB5\_DOMAIN\_X500\_COMPRESS}
18653&
18654\sphinxcode{1}
18655\\
18656\hline
18657\end{tabulary}
18658\par
18659\sphinxattableend\end{savenotes}
18660
18661
18662\subsubsection{KRB5\_ENCPADATA\_REQ\_ENC\_PA\_REP}
18663\label{\detokenize{appdev/refs/macros/KRB5_ENCPADATA_REQ_ENC_PA_REP:krb5-encpadata-req-enc-pa-rep}}\label{\detokenize{appdev/refs/macros/KRB5_ENCPADATA_REQ_ENC_PA_REP:krb5-encpadata-req-enc-pa-rep-data}}\label{\detokenize{appdev/refs/macros/KRB5_ENCPADATA_REQ_ENC_PA_REP::doc}}\index{KRB5\_ENCPADATA\_REQ\_ENC\_PA\_REP (built-in variable)}
18664
18665\begin{fulllineitems}
18666\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_ENCPADATA_REQ_ENC_PA_REP:KRB5_ENCPADATA_REQ_ENC_PA_REP}}\pysigline{\sphinxbfcode{KRB5\_ENCPADATA\_REQ\_ENC\_PA\_REP}}
18667\end{fulllineitems}
18668
18669
18670RFC 6806.
18671
18672
18673\begin{savenotes}\sphinxattablestart
18674\centering
18675\begin{tabulary}{\linewidth}[t]{|T|T|}
18676\hline
18677
18678\sphinxcode{KRB5\_ENCPADATA\_REQ\_ENC\_PA\_REP}
18679&
18680\sphinxcode{149}
18681\\
18682\hline
18683\end{tabulary}
18684\par
18685\sphinxattableend\end{savenotes}
18686
18687
18688\subsubsection{KRB5\_ERROR}
18689\label{\detokenize{appdev/refs/macros/KRB5_ERROR:krb5-error-data}}\label{\detokenize{appdev/refs/macros/KRB5_ERROR:krb5-error}}\label{\detokenize{appdev/refs/macros/KRB5_ERROR::doc}}\index{KRB5\_ERROR (built-in variable)}
18690
18691\begin{fulllineitems}
18692\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_ERROR:KRB5_ERROR}}\pysigline{\sphinxbfcode{KRB5\_ERROR}}
18693\end{fulllineitems}
18694
18695
18696Error response.
18697
18698
18699\begin{savenotes}\sphinxattablestart
18700\centering
18701\begin{tabulary}{\linewidth}[t]{|T|T|}
18702\hline
18703
18704\sphinxcode{KRB5\_ERROR}
18705&
18706\sphinxcode{((krb5\_msgtype)30)}
18707\\
18708\hline
18709\end{tabulary}
18710\par
18711\sphinxattableend\end{savenotes}
18712
18713
18714\subsubsection{KRB5\_FAST\_REQUIRED}
18715\label{\detokenize{appdev/refs/macros/KRB5_FAST_REQUIRED:krb5-fast-required}}\label{\detokenize{appdev/refs/macros/KRB5_FAST_REQUIRED:krb5-fast-required-data}}\label{\detokenize{appdev/refs/macros/KRB5_FAST_REQUIRED::doc}}\index{KRB5\_FAST\_REQUIRED (built-in variable)}
18716
18717\begin{fulllineitems}
18718\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_FAST_REQUIRED:KRB5_FAST_REQUIRED}}\pysigline{\sphinxbfcode{KRB5\_FAST\_REQUIRED}}
18719\end{fulllineitems}
18720
18721
18722Require KDC to support FAST.
18723
18724
18725\begin{savenotes}\sphinxattablestart
18726\centering
18727\begin{tabulary}{\linewidth}[t]{|T|T|}
18728\hline
18729
18730\sphinxcode{KRB5\_FAST\_REQUIRED}
18731&
18732\sphinxcode{0x0001}
18733\\
18734\hline
18735\end{tabulary}
18736\par
18737\sphinxattableend\end{savenotes}
18738
18739
18740\subsubsection{KRB5\_GC\_CACHED}
18741\label{\detokenize{appdev/refs/macros/KRB5_GC_CACHED:krb5-gc-cached}}\label{\detokenize{appdev/refs/macros/KRB5_GC_CACHED:krb5-gc-cached-data}}\label{\detokenize{appdev/refs/macros/KRB5_GC_CACHED::doc}}\index{KRB5\_GC\_CACHED (built-in variable)}
18742
18743\begin{fulllineitems}
18744\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_CACHED:KRB5_GC_CACHED}}\pysigline{\sphinxbfcode{KRB5\_GC\_CACHED}}
18745\end{fulllineitems}
18746
18747
18748Want cached ticket only.
18749
18750
18751\begin{savenotes}\sphinxattablestart
18752\centering
18753\begin{tabulary}{\linewidth}[t]{|T|T|}
18754\hline
18755
18756\sphinxcode{KRB5\_GC\_CACHED}
18757&
18758\sphinxcode{2}
18759\\
18760\hline
18761\end{tabulary}
18762\par
18763\sphinxattableend\end{savenotes}
18764
18765
18766\subsubsection{KRB5\_GC\_CANONICALIZE}
18767\label{\detokenize{appdev/refs/macros/KRB5_GC_CANONICALIZE:krb5-gc-canonicalize-data}}\label{\detokenize{appdev/refs/macros/KRB5_GC_CANONICALIZE:krb5-gc-canonicalize}}\label{\detokenize{appdev/refs/macros/KRB5_GC_CANONICALIZE::doc}}\index{KRB5\_GC\_CANONICALIZE (built-in variable)}
18768
18769\begin{fulllineitems}
18770\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_CANONICALIZE:KRB5_GC_CANONICALIZE}}\pysigline{\sphinxbfcode{KRB5\_GC\_CANONICALIZE}}
18771\end{fulllineitems}
18772
18773
18774Set canonicalize KDC option.
18775
18776
18777\begin{savenotes}\sphinxattablestart
18778\centering
18779\begin{tabulary}{\linewidth}[t]{|T|T|}
18780\hline
18781
18782\sphinxcode{KRB5\_GC\_CANONICALIZE}
18783&
18784\sphinxcode{4}
18785\\
18786\hline
18787\end{tabulary}
18788\par
18789\sphinxattableend\end{savenotes}
18790
18791
18792\subsubsection{KRB5\_GC\_CONSTRAINED\_DELEGATION}
18793\label{\detokenize{appdev/refs/macros/KRB5_GC_CONSTRAINED_DELEGATION:krb5-gc-constrained-delegation}}\label{\detokenize{appdev/refs/macros/KRB5_GC_CONSTRAINED_DELEGATION:krb5-gc-constrained-delegation-data}}\label{\detokenize{appdev/refs/macros/KRB5_GC_CONSTRAINED_DELEGATION::doc}}\index{KRB5\_GC\_CONSTRAINED\_DELEGATION (built-in variable)}
18794
18795\begin{fulllineitems}
18796\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_CONSTRAINED_DELEGATION:KRB5_GC_CONSTRAINED_DELEGATION}}\pysigline{\sphinxbfcode{KRB5\_GC\_CONSTRAINED\_DELEGATION}}
18797\end{fulllineitems}
18798
18799
18800Constrained delegation.
18801
18802
18803\begin{savenotes}\sphinxattablestart
18804\centering
18805\begin{tabulary}{\linewidth}[t]{|T|T|}
18806\hline
18807
18808\sphinxcode{KRB5\_GC\_CONSTRAINED\_DELEGATION}
18809&
18810\sphinxcode{64}
18811\\
18812\hline
18813\end{tabulary}
18814\par
18815\sphinxattableend\end{savenotes}
18816
18817
18818\subsubsection{KRB5\_GC\_FORWARDABLE}
18819\label{\detokenize{appdev/refs/macros/KRB5_GC_FORWARDABLE:krb5-gc-forwardable-data}}\label{\detokenize{appdev/refs/macros/KRB5_GC_FORWARDABLE:krb5-gc-forwardable}}\label{\detokenize{appdev/refs/macros/KRB5_GC_FORWARDABLE::doc}}\index{KRB5\_GC\_FORWARDABLE (built-in variable)}
18820
18821\begin{fulllineitems}
18822\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_FORWARDABLE:KRB5_GC_FORWARDABLE}}\pysigline{\sphinxbfcode{KRB5\_GC\_FORWARDABLE}}
18823\end{fulllineitems}
18824
18825
18826Acquire forwardable tickets.
18827
18828
18829\begin{savenotes}\sphinxattablestart
18830\centering
18831\begin{tabulary}{\linewidth}[t]{|T|T|}
18832\hline
18833
18834\sphinxcode{KRB5\_GC\_FORWARDABLE}
18835&
18836\sphinxcode{16}
18837\\
18838\hline
18839\end{tabulary}
18840\par
18841\sphinxattableend\end{savenotes}
18842
18843
18844\subsubsection{KRB5\_GC\_NO\_STORE}
18845\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_STORE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_STORE:krb5-gc-no-store}}\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_STORE:krb5-gc-no-store-data}}\index{KRB5\_GC\_NO\_STORE (built-in variable)}
18846
18847\begin{fulllineitems}
18848\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_STORE:KRB5_GC_NO_STORE}}\pysigline{\sphinxbfcode{KRB5\_GC\_NO\_STORE}}
18849\end{fulllineitems}
18850
18851
18852Do not store in credential cache.
18853
18854
18855\begin{savenotes}\sphinxattablestart
18856\centering
18857\begin{tabulary}{\linewidth}[t]{|T|T|}
18858\hline
18859
18860\sphinxcode{KRB5\_GC\_NO\_STORE}
18861&
18862\sphinxcode{8}
18863\\
18864\hline
18865\end{tabulary}
18866\par
18867\sphinxattableend\end{savenotes}
18868
18869
18870\subsubsection{KRB5\_GC\_NO\_TRANSIT\_CHECK}
18871\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_TRANSIT_CHECK:krb5-gc-no-transit-check-data}}\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_TRANSIT_CHECK:krb5-gc-no-transit-check}}\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_TRANSIT_CHECK::doc}}\index{KRB5\_GC\_NO\_TRANSIT\_CHECK (built-in variable)}
18872
18873\begin{fulllineitems}
18874\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_TRANSIT_CHECK:KRB5_GC_NO_TRANSIT_CHECK}}\pysigline{\sphinxbfcode{KRB5\_GC\_NO\_TRANSIT\_CHECK}}
18875\end{fulllineitems}
18876
18877
18878Disable transited check.
18879
18880
18881\begin{savenotes}\sphinxattablestart
18882\centering
18883\begin{tabulary}{\linewidth}[t]{|T|T|}
18884\hline
18885
18886\sphinxcode{KRB5\_GC\_NO\_TRANSIT\_CHECK}
18887&
18888\sphinxcode{32}
18889\\
18890\hline
18891\end{tabulary}
18892\par
18893\sphinxattableend\end{savenotes}
18894
18895
18896\subsubsection{KRB5\_GC\_USER\_USER}
18897\label{\detokenize{appdev/refs/macros/KRB5_GC_USER_USER::doc}}\label{\detokenize{appdev/refs/macros/KRB5_GC_USER_USER:krb5-gc-user-user}}\label{\detokenize{appdev/refs/macros/KRB5_GC_USER_USER:krb5-gc-user-user-data}}\index{KRB5\_GC\_USER\_USER (built-in variable)}
18898
18899\begin{fulllineitems}
18900\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_USER_USER:KRB5_GC_USER_USER}}\pysigline{\sphinxbfcode{KRB5\_GC\_USER\_USER}}
18901\end{fulllineitems}
18902
18903
18904Want user-user ticket.
18905
18906
18907\begin{savenotes}\sphinxattablestart
18908\centering
18909\begin{tabulary}{\linewidth}[t]{|T|T|}
18910\hline
18911
18912\sphinxcode{KRB5\_GC\_USER\_USER}
18913&
18914\sphinxcode{1}
18915\\
18916\hline
18917\end{tabulary}
18918\par
18919\sphinxattableend\end{savenotes}
18920
18921
18922\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_ADDRESS\_LIST}
18923\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ADDRESS_LIST:krb5-get-init-creds-opt-address-list}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ADDRESS_LIST::doc}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ADDRESS_LIST:krb5-get-init-creds-opt-address-list-data}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_ADDRESS\_LIST (built-in variable)}
18924
18925\begin{fulllineitems}
18926\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ADDRESS_LIST:KRB5_GET_INIT_CREDS_OPT_ADDRESS_LIST}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_ADDRESS\_LIST}}
18927\end{fulllineitems}
18928
18929
18930
18931\begin{savenotes}\sphinxattablestart
18932\centering
18933\begin{tabulary}{\linewidth}[t]{|T|T|}
18934\hline
18935
18936\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_ADDRESS\_LIST}
18937&
18938\sphinxcode{0x0020}
18939\\
18940\hline
18941\end{tabulary}
18942\par
18943\sphinxattableend\end{savenotes}
18944
18945
18946\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_ANONYMOUS}
18947\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ANONYMOUS:krb5-get-init-creds-opt-anonymous-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ANONYMOUS::doc}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ANONYMOUS:krb5-get-init-creds-opt-anonymous}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_ANONYMOUS (built-in variable)}
18948
18949\begin{fulllineitems}
18950\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ANONYMOUS:KRB5_GET_INIT_CREDS_OPT_ANONYMOUS}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_ANONYMOUS}}
18951\end{fulllineitems}
18952
18953
18954
18955\begin{savenotes}\sphinxattablestart
18956\centering
18957\begin{tabulary}{\linewidth}[t]{|T|T|}
18958\hline
18959
18960\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_ANONYMOUS}
18961&
18962\sphinxcode{0x0400}
18963\\
18964\hline
18965\end{tabulary}
18966\par
18967\sphinxattableend\end{savenotes}
18968
18969
18970\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_CANONICALIZE}
18971\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CANONICALIZE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CANONICALIZE:krb5-get-init-creds-opt-canonicalize-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CANONICALIZE:krb5-get-init-creds-opt-canonicalize}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_CANONICALIZE (built-in variable)}
18972
18973\begin{fulllineitems}
18974\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CANONICALIZE:KRB5_GET_INIT_CREDS_OPT_CANONICALIZE}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_CANONICALIZE}}
18975\end{fulllineitems}
18976
18977
18978
18979\begin{savenotes}\sphinxattablestart
18980\centering
18981\begin{tabulary}{\linewidth}[t]{|T|T|}
18982\hline
18983
18984\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_CANONICALIZE}
18985&
18986\sphinxcode{0x0200}
18987\\
18988\hline
18989\end{tabulary}
18990\par
18991\sphinxattableend\end{savenotes}
18992
18993
18994\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_CHG\_PWD\_PRMPT}
18995\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CHG_PWD_PRMPT::doc}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CHG_PWD_PRMPT:krb5-get-init-creds-opt-chg-pwd-prmpt}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CHG_PWD_PRMPT:krb5-get-init-creds-opt-chg-pwd-prmpt-data}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_CHG\_PWD\_PRMPT (built-in variable)}
18996
18997\begin{fulllineitems}
18998\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CHG_PWD_PRMPT:KRB5_GET_INIT_CREDS_OPT_CHG_PWD_PRMPT}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_CHG\_PWD\_PRMPT}}
18999\end{fulllineitems}
19000
19001
19002
19003\begin{savenotes}\sphinxattablestart
19004\centering
19005\begin{tabulary}{\linewidth}[t]{|T|T|}
19006\hline
19007
19008\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_CHG\_PWD\_PRMPT}
19009&
19010\sphinxcode{0x0100}
19011\\
19012\hline
19013\end{tabulary}
19014\par
19015\sphinxattableend\end{savenotes}
19016
19017
19018\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_ETYPE\_LIST}
19019\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST:krb5-get-init-creds-opt-etype-list-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST:krb5-get-init-creds-opt-etype-list}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST::doc}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_ETYPE\_LIST (built-in variable)}
19020
19021\begin{fulllineitems}
19022\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST:KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_ETYPE\_LIST}}
19023\end{fulllineitems}
19024
19025
19026
19027\begin{savenotes}\sphinxattablestart
19028\centering
19029\begin{tabulary}{\linewidth}[t]{|T|T|}
19030\hline
19031
19032\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_ETYPE\_LIST}
19033&
19034\sphinxcode{0x0010}
19035\\
19036\hline
19037\end{tabulary}
19038\par
19039\sphinxattableend\end{savenotes}
19040
19041
19042\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_FORWARDABLE}
19043\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_FORWARDABLE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_FORWARDABLE:krb5-get-init-creds-opt-forwardable}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_FORWARDABLE:krb5-get-init-creds-opt-forwardable-data}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_FORWARDABLE (built-in variable)}
19044
19045\begin{fulllineitems}
19046\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_FORWARDABLE:KRB5_GET_INIT_CREDS_OPT_FORWARDABLE}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_FORWARDABLE}}
19047\end{fulllineitems}
19048
19049
19050
19051\begin{savenotes}\sphinxattablestart
19052\centering
19053\begin{tabulary}{\linewidth}[t]{|T|T|}
19054\hline
19055
19056\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_FORWARDABLE}
19057&
19058\sphinxcode{0x0004}
19059\\
19060\hline
19061\end{tabulary}
19062\par
19063\sphinxattableend\end{savenotes}
19064
19065
19066\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_PREAUTH\_LIST}
19067\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PREAUTH_LIST:krb5-get-init-creds-opt-preauth-list}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PREAUTH_LIST:krb5-get-init-creds-opt-preauth-list-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PREAUTH_LIST::doc}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_PREAUTH\_LIST (built-in variable)}
19068
19069\begin{fulllineitems}
19070\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PREAUTH_LIST:KRB5_GET_INIT_CREDS_OPT_PREAUTH_LIST}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_PREAUTH\_LIST}}
19071\end{fulllineitems}
19072
19073
19074
19075\begin{savenotes}\sphinxattablestart
19076\centering
19077\begin{tabulary}{\linewidth}[t]{|T|T|}
19078\hline
19079
19080\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_PREAUTH\_LIST}
19081&
19082\sphinxcode{0x0040}
19083\\
19084\hline
19085\end{tabulary}
19086\par
19087\sphinxattableend\end{savenotes}
19088
19089
19090\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_PROXIABLE}
19091\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PROXIABLE:krb5-get-init-creds-opt-proxiable-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PROXIABLE:krb5-get-init-creds-opt-proxiable}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PROXIABLE::doc}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_PROXIABLE (built-in variable)}
19092
19093\begin{fulllineitems}
19094\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PROXIABLE:KRB5_GET_INIT_CREDS_OPT_PROXIABLE}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_PROXIABLE}}
19095\end{fulllineitems}
19096
19097
19098
19099\begin{savenotes}\sphinxattablestart
19100\centering
19101\begin{tabulary}{\linewidth}[t]{|T|T|}
19102\hline
19103
19104\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_PROXIABLE}
19105&
19106\sphinxcode{0x0008}
19107\\
19108\hline
19109\end{tabulary}
19110\par
19111\sphinxattableend\end{savenotes}
19112
19113
19114\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_RENEW\_LIFE}
19115\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_RENEW_LIFE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_RENEW_LIFE:krb5-get-init-creds-opt-renew-life-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_RENEW_LIFE:krb5-get-init-creds-opt-renew-life}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_RENEW\_LIFE (built-in variable)}
19116
19117\begin{fulllineitems}
19118\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_RENEW_LIFE:KRB5_GET_INIT_CREDS_OPT_RENEW_LIFE}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_RENEW\_LIFE}}
19119\end{fulllineitems}
19120
19121
19122
19123\begin{savenotes}\sphinxattablestart
19124\centering
19125\begin{tabulary}{\linewidth}[t]{|T|T|}
19126\hline
19127
19128\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_RENEW\_LIFE}
19129&
19130\sphinxcode{0x0002}
19131\\
19132\hline
19133\end{tabulary}
19134\par
19135\sphinxattableend\end{savenotes}
19136
19137
19138\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_SALT}
19139\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_SALT:krb5-get-init-creds-opt-salt-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_SALT:krb5-get-init-creds-opt-salt}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_SALT::doc}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_SALT (built-in variable)}
19140
19141\begin{fulllineitems}
19142\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_SALT:KRB5_GET_INIT_CREDS_OPT_SALT}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_SALT}}
19143\end{fulllineitems}
19144
19145
19146
19147\begin{savenotes}\sphinxattablestart
19148\centering
19149\begin{tabulary}{\linewidth}[t]{|T|T|}
19150\hline
19151
19152\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_SALT}
19153&
19154\sphinxcode{0x0080}
19155\\
19156\hline
19157\end{tabulary}
19158\par
19159\sphinxattableend\end{savenotes}
19160
19161
19162\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_TKT\_LIFE}
19163\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_TKT_LIFE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_TKT_LIFE:krb5-get-init-creds-opt-tkt-life-data}}\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_TKT_LIFE:krb5-get-init-creds-opt-tkt-life}}\index{KRB5\_GET\_INIT\_CREDS\_OPT\_TKT\_LIFE (built-in variable)}
19164
19165\begin{fulllineitems}
19166\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_TKT_LIFE:KRB5_GET_INIT_CREDS_OPT_TKT_LIFE}}\pysigline{\sphinxbfcode{KRB5\_GET\_INIT\_CREDS\_OPT\_TKT\_LIFE}}
19167\end{fulllineitems}
19168
19169
19170
19171\begin{savenotes}\sphinxattablestart
19172\centering
19173\begin{tabulary}{\linewidth}[t]{|T|T|}
19174\hline
19175
19176\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_TKT\_LIFE}
19177&
19178\sphinxcode{0x0001}
19179\\
19180\hline
19181\end{tabulary}
19182\par
19183\sphinxattableend\end{savenotes}
19184
19185
19186\subsubsection{KRB5\_INIT\_CONTEXT\_SECURE}
19187\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_SECURE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_SECURE:krb5-init-context-secure}}\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_SECURE:krb5-init-context-secure-data}}\index{KRB5\_INIT\_CONTEXT\_SECURE (built-in variable)}
19188
19189\begin{fulllineitems}
19190\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_SECURE:KRB5_INIT_CONTEXT_SECURE}}\pysigline{\sphinxbfcode{KRB5\_INIT\_CONTEXT\_SECURE}}
19191\end{fulllineitems}
19192
19193
19194Use secure context configuration.
19195
19196
19197\begin{savenotes}\sphinxattablestart
19198\centering
19199\begin{tabulary}{\linewidth}[t]{|T|T|}
19200\hline
19201
19202\sphinxcode{KRB5\_INIT\_CONTEXT\_SECURE}
19203&
19204\sphinxcode{0x1}
19205\\
19206\hline
19207\end{tabulary}
19208\par
19209\sphinxattableend\end{savenotes}
19210
19211
19212\subsubsection{KRB5\_INIT\_CONTEXT\_KDC}
19213\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_KDC:krb5-init-context-kdc}}\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_KDC::doc}}\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_KDC:krb5-init-context-kdc-data}}\index{KRB5\_INIT\_CONTEXT\_KDC (built-in variable)}
19214
19215\begin{fulllineitems}
19216\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_KDC:KRB5_INIT_CONTEXT_KDC}}\pysigline{\sphinxbfcode{KRB5\_INIT\_CONTEXT\_KDC}}
19217\end{fulllineitems}
19218
19219
19220Use KDC configuration if available.
19221
19222
19223\begin{savenotes}\sphinxattablestart
19224\centering
19225\begin{tabulary}{\linewidth}[t]{|T|T|}
19226\hline
19227
19228\sphinxcode{KRB5\_INIT\_CONTEXT\_KDC}
19229&
19230\sphinxcode{0x2}
19231\\
19232\hline
19233\end{tabulary}
19234\par
19235\sphinxattableend\end{savenotes}
19236
19237
19238\subsubsection{KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE}
19239\label{\detokenize{appdev/refs/macros/KRB5_INIT_CREDS_STEP_FLAG_CONTINUE:krb5-init-creds-step-flag-continue-data}}\label{\detokenize{appdev/refs/macros/KRB5_INIT_CREDS_STEP_FLAG_CONTINUE:krb5-init-creds-step-flag-continue}}\label{\detokenize{appdev/refs/macros/KRB5_INIT_CREDS_STEP_FLAG_CONTINUE::doc}}\index{KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE (built-in variable)}
19240
19241\begin{fulllineitems}
19242\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INIT_CREDS_STEP_FLAG_CONTINUE:KRB5_INIT_CREDS_STEP_FLAG_CONTINUE}}\pysigline{\sphinxbfcode{KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE}}
19243\end{fulllineitems}
19244
19245
19246More responses needed.
19247
19248
19249\begin{savenotes}\sphinxattablestart
19250\centering
19251\begin{tabulary}{\linewidth}[t]{|T|T|}
19252\hline
19253
19254\sphinxcode{KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE}
19255&
19256\sphinxcode{0x1}
19257\\
19258\hline
19259\end{tabulary}
19260\par
19261\sphinxattableend\end{savenotes}
19262
19263
19264\subsubsection{KRB5\_INT16\_MAX}
19265\label{\detokenize{appdev/refs/macros/KRB5_INT16_MAX:krb5-int16-max-data}}\label{\detokenize{appdev/refs/macros/KRB5_INT16_MAX::doc}}\label{\detokenize{appdev/refs/macros/KRB5_INT16_MAX:krb5-int16-max}}\index{KRB5\_INT16\_MAX (built-in variable)}
19266
19267\begin{fulllineitems}
19268\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INT16_MAX:KRB5_INT16_MAX}}\pysigline{\sphinxbfcode{KRB5\_INT16\_MAX}}
19269\end{fulllineitems}
19270
19271
19272
19273\begin{savenotes}\sphinxattablestart
19274\centering
19275\begin{tabulary}{\linewidth}[t]{|T|T|}
19276\hline
19277
19278\sphinxcode{KRB5\_INT16\_MAX}
19279&
19280\sphinxcode{65535}
19281\\
19282\hline
19283\end{tabulary}
19284\par
19285\sphinxattableend\end{savenotes}
19286
19287
19288\subsubsection{KRB5\_INT16\_MIN}
19289\label{\detokenize{appdev/refs/macros/KRB5_INT16_MIN:krb5-int16-min-data}}\label{\detokenize{appdev/refs/macros/KRB5_INT16_MIN:krb5-int16-min}}\label{\detokenize{appdev/refs/macros/KRB5_INT16_MIN::doc}}\index{KRB5\_INT16\_MIN (built-in variable)}
19290
19291\begin{fulllineitems}
19292\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INT16_MIN:KRB5_INT16_MIN}}\pysigline{\sphinxbfcode{KRB5\_INT16\_MIN}}
19293\end{fulllineitems}
19294
19295
19296
19297\begin{savenotes}\sphinxattablestart
19298\centering
19299\begin{tabulary}{\linewidth}[t]{|T|T|}
19300\hline
19301
19302\sphinxcode{KRB5\_INT16\_MIN}
19303&
19304\sphinxcode{(-KRB5\_INT16\_MAX-1)}
19305\\
19306\hline
19307\end{tabulary}
19308\par
19309\sphinxattableend\end{savenotes}
19310
19311
19312\subsubsection{KRB5\_INT32\_MAX}
19313\label{\detokenize{appdev/refs/macros/KRB5_INT32_MAX:krb5-int32-max-data}}\label{\detokenize{appdev/refs/macros/KRB5_INT32_MAX:krb5-int32-max}}\label{\detokenize{appdev/refs/macros/KRB5_INT32_MAX::doc}}\index{KRB5\_INT32\_MAX (built-in variable)}
19314
19315\begin{fulllineitems}
19316\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INT32_MAX:KRB5_INT32_MAX}}\pysigline{\sphinxbfcode{KRB5\_INT32\_MAX}}
19317\end{fulllineitems}
19318
19319
19320
19321\begin{savenotes}\sphinxattablestart
19322\centering
19323\begin{tabulary}{\linewidth}[t]{|T|T|}
19324\hline
19325
19326\sphinxcode{KRB5\_INT32\_MAX}
19327&
19328\sphinxcode{2147483647}
19329\\
19330\hline
19331\end{tabulary}
19332\par
19333\sphinxattableend\end{savenotes}
19334
19335
19336\subsubsection{KRB5\_INT32\_MIN}
19337\label{\detokenize{appdev/refs/macros/KRB5_INT32_MIN:krb5-int32-min-data}}\label{\detokenize{appdev/refs/macros/KRB5_INT32_MIN::doc}}\label{\detokenize{appdev/refs/macros/KRB5_INT32_MIN:krb5-int32-min}}\index{KRB5\_INT32\_MIN (built-in variable)}
19338
19339\begin{fulllineitems}
19340\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INT32_MIN:KRB5_INT32_MIN}}\pysigline{\sphinxbfcode{KRB5\_INT32\_MIN}}
19341\end{fulllineitems}
19342
19343
19344
19345\begin{savenotes}\sphinxattablestart
19346\centering
19347\begin{tabulary}{\linewidth}[t]{|T|T|}
19348\hline
19349
19350\sphinxcode{KRB5\_INT32\_MIN}
19351&
19352\sphinxcode{(-KRB5\_INT32\_MAX-1)}
19353\\
19354\hline
19355\end{tabulary}
19356\par
19357\sphinxattableend\end{savenotes}
19358
19359
19360\subsubsection{KRB5\_KEYUSAGE\_AD\_ITE}
19361\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_ITE:krb5-keyusage-ad-ite-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_ITE:krb5-keyusage-ad-ite}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_ITE::doc}}\index{KRB5\_KEYUSAGE\_AD\_ITE (built-in variable)}
19362
19363\begin{fulllineitems}
19364\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_ITE:KRB5_KEYUSAGE_AD_ITE}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AD\_ITE}}
19365\end{fulllineitems}
19366
19367
19368
19369\begin{savenotes}\sphinxattablestart
19370\centering
19371\begin{tabulary}{\linewidth}[t]{|T|T|}
19372\hline
19373
19374\sphinxcode{KRB5\_KEYUSAGE\_AD\_ITE}
19375&
19376\sphinxcode{21}
19377\\
19378\hline
19379\end{tabulary}
19380\par
19381\sphinxattableend\end{savenotes}
19382
19383
19384\subsubsection{KRB5\_KEYUSAGE\_AD\_KDCISSUED\_CKSUM}
19385\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM:krb5-keyusage-ad-kdcissued-cksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM:krb5-keyusage-ad-kdcissued-cksum}}\index{KRB5\_KEYUSAGE\_AD\_KDCISSUED\_CKSUM (built-in variable)}
19386
19387\begin{fulllineitems}
19388\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM:KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AD\_KDCISSUED\_CKSUM}}
19389\end{fulllineitems}
19390
19391
19392
19393\begin{savenotes}\sphinxattablestart
19394\centering
19395\begin{tabulary}{\linewidth}[t]{|T|T|}
19396\hline
19397
19398\sphinxcode{KRB5\_KEYUSAGE\_AD\_KDCISSUED\_CKSUM}
19399&
19400\sphinxcode{19}
19401\\
19402\hline
19403\end{tabulary}
19404\par
19405\sphinxattableend\end{savenotes}
19406
19407
19408\subsubsection{KRB5\_KEYUSAGE\_AD\_MTE}
19409\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_MTE:krb5-keyusage-ad-mte-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_MTE:krb5-keyusage-ad-mte}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_MTE::doc}}\index{KRB5\_KEYUSAGE\_AD\_MTE (built-in variable)}
19410
19411\begin{fulllineitems}
19412\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_MTE:KRB5_KEYUSAGE_AD_MTE}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AD\_MTE}}
19413\end{fulllineitems}
19414
19415
19416
19417\begin{savenotes}\sphinxattablestart
19418\centering
19419\begin{tabulary}{\linewidth}[t]{|T|T|}
19420\hline
19421
19422\sphinxcode{KRB5\_KEYUSAGE\_AD\_MTE}
19423&
19424\sphinxcode{20}
19425\\
19426\hline
19427\end{tabulary}
19428\par
19429\sphinxattableend\end{savenotes}
19430
19431
19432\subsubsection{KRB5\_KEYUSAGE\_AD\_SIGNEDPATH}
19433\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_SIGNEDPATH:krb5-keyusage-ad-signedpath-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_SIGNEDPATH::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_SIGNEDPATH:krb5-keyusage-ad-signedpath}}\index{KRB5\_KEYUSAGE\_AD\_SIGNEDPATH (built-in variable)}
19434
19435\begin{fulllineitems}
19436\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_SIGNEDPATH:KRB5_KEYUSAGE_AD_SIGNEDPATH}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AD\_SIGNEDPATH}}
19437\end{fulllineitems}
19438
19439
19440
19441\begin{savenotes}\sphinxattablestart
19442\centering
19443\begin{tabulary}{\linewidth}[t]{|T|T|}
19444\hline
19445
19446\sphinxcode{KRB5\_KEYUSAGE\_AD\_SIGNEDPATH}
19447&
19448\sphinxcode{-21}
19449\\
19450\hline
19451\end{tabulary}
19452\par
19453\sphinxattableend\end{savenotes}
19454
19455
19456\subsubsection{KRB5\_KEYUSAGE\_APP\_DATA\_CKSUM}
19457\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_CKSUM:krb5-keyusage-app-data-cksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_CKSUM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_CKSUM:krb5-keyusage-app-data-cksum}}\index{KRB5\_KEYUSAGE\_APP\_DATA\_CKSUM (built-in variable)}
19458
19459\begin{fulllineitems}
19460\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_CKSUM:KRB5_KEYUSAGE_APP_DATA_CKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_APP\_DATA\_CKSUM}}
19461\end{fulllineitems}
19462
19463
19464
19465\begin{savenotes}\sphinxattablestart
19466\centering
19467\begin{tabulary}{\linewidth}[t]{|T|T|}
19468\hline
19469
19470\sphinxcode{KRB5\_KEYUSAGE\_APP\_DATA\_CKSUM}
19471&
19472\sphinxcode{17}
19473\\
19474\hline
19475\end{tabulary}
19476\par
19477\sphinxattableend\end{savenotes}
19478
19479
19480\subsubsection{KRB5\_KEYUSAGE\_APP\_DATA\_ENCRYPT}
19481\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_ENCRYPT:krb5-keyusage-app-data-encrypt}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_ENCRYPT:krb5-keyusage-app-data-encrypt-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_ENCRYPT::doc}}\index{KRB5\_KEYUSAGE\_APP\_DATA\_ENCRYPT (built-in variable)}
19482
19483\begin{fulllineitems}
19484\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_ENCRYPT:KRB5_KEYUSAGE_APP_DATA_ENCRYPT}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_APP\_DATA\_ENCRYPT}}
19485\end{fulllineitems}
19486
19487
19488
19489\begin{savenotes}\sphinxattablestart
19490\centering
19491\begin{tabulary}{\linewidth}[t]{|T|T|}
19492\hline
19493
19494\sphinxcode{KRB5\_KEYUSAGE\_APP\_DATA\_ENCRYPT}
19495&
19496\sphinxcode{16}
19497\\
19498\hline
19499\end{tabulary}
19500\par
19501\sphinxattableend\end{savenotes}
19502
19503
19504\subsubsection{KRB5\_KEYUSAGE\_AP\_REP\_ENCPART}
19505\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REP_ENCPART::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REP_ENCPART:krb5-keyusage-ap-rep-encpart}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REP_ENCPART:krb5-keyusage-ap-rep-encpart-data}}\index{KRB5\_KEYUSAGE\_AP\_REP\_ENCPART (built-in variable)}
19506
19507\begin{fulllineitems}
19508\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REP_ENCPART:KRB5_KEYUSAGE_AP_REP_ENCPART}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AP\_REP\_ENCPART}}
19509\end{fulllineitems}
19510
19511
19512
19513\begin{savenotes}\sphinxattablestart
19514\centering
19515\begin{tabulary}{\linewidth}[t]{|T|T|}
19516\hline
19517
19518\sphinxcode{KRB5\_KEYUSAGE\_AP\_REP\_ENCPART}
19519&
19520\sphinxcode{12}
19521\\
19522\hline
19523\end{tabulary}
19524\par
19525\sphinxattableend\end{savenotes}
19526
19527
19528\subsubsection{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH}
19529\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH:krb5-keyusage-ap-req-auth}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH:krb5-keyusage-ap-req-auth-data}}\index{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH (built-in variable)}
19530
19531\begin{fulllineitems}
19532\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH:KRB5_KEYUSAGE_AP_REQ_AUTH}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH}}
19533\end{fulllineitems}
19534
19535
19536
19537\begin{savenotes}\sphinxattablestart
19538\centering
19539\begin{tabulary}{\linewidth}[t]{|T|T|}
19540\hline
19541
19542\sphinxcode{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH}
19543&
19544\sphinxcode{11}
19545\\
19546\hline
19547\end{tabulary}
19548\par
19549\sphinxattableend\end{savenotes}
19550
19551
19552\subsubsection{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH\_CKSUM}
19553\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH_CKSUM:krb5-keyusage-ap-req-auth-cksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH_CKSUM:krb5-keyusage-ap-req-auth-cksum}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH_CKSUM::doc}}\index{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH\_CKSUM (built-in variable)}
19554
19555\begin{fulllineitems}
19556\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH_CKSUM:KRB5_KEYUSAGE_AP_REQ_AUTH_CKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH\_CKSUM}}
19557\end{fulllineitems}
19558
19559
19560
19561\begin{savenotes}\sphinxattablestart
19562\centering
19563\begin{tabulary}{\linewidth}[t]{|T|T|}
19564\hline
19565
19566\sphinxcode{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH\_CKSUM}
19567&
19568\sphinxcode{10}
19569\\
19570\hline
19571\end{tabulary}
19572\par
19573\sphinxattableend\end{savenotes}
19574
19575
19576\subsubsection{KRB5\_KEYUSAGE\_AS\_REP\_ENCPART}
19577\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REP_ENCPART:krb5-keyusage-as-rep-encpart-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REP_ENCPART::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REP_ENCPART:krb5-keyusage-as-rep-encpart}}\index{KRB5\_KEYUSAGE\_AS\_REP\_ENCPART (built-in variable)}
19578
19579\begin{fulllineitems}
19580\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REP_ENCPART:KRB5_KEYUSAGE_AS_REP_ENCPART}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AS\_REP\_ENCPART}}
19581\end{fulllineitems}
19582
19583
19584
19585\begin{savenotes}\sphinxattablestart
19586\centering
19587\begin{tabulary}{\linewidth}[t]{|T|T|}
19588\hline
19589
19590\sphinxcode{KRB5\_KEYUSAGE\_AS\_REP\_ENCPART}
19591&
19592\sphinxcode{3}
19593\\
19594\hline
19595\end{tabulary}
19596\par
19597\sphinxattableend\end{savenotes}
19598
19599
19600\subsubsection{KRB5\_KEYUSAGE\_AS\_REQ}
19601\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ:krb5-keyusage-as-req-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ:krb5-keyusage-as-req}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ::doc}}\index{KRB5\_KEYUSAGE\_AS\_REQ (built-in variable)}
19602
19603\begin{fulllineitems}
19604\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ:KRB5_KEYUSAGE_AS_REQ}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AS\_REQ}}
19605\end{fulllineitems}
19606
19607
19608
19609\begin{savenotes}\sphinxattablestart
19610\centering
19611\begin{tabulary}{\linewidth}[t]{|T|T|}
19612\hline
19613
19614\sphinxcode{KRB5\_KEYUSAGE\_AS\_REQ}
19615&
19616\sphinxcode{56}
19617\\
19618\hline
19619\end{tabulary}
19620\par
19621\sphinxattableend\end{savenotes}
19622
19623
19624\subsubsection{KRB5\_KEYUSAGE\_AS\_REQ\_PA\_ENC\_TS}
19625\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ_PA_ENC_TS:krb5-keyusage-as-req-pa-enc-ts-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ_PA_ENC_TS::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ_PA_ENC_TS:krb5-keyusage-as-req-pa-enc-ts}}\index{KRB5\_KEYUSAGE\_AS\_REQ\_PA\_ENC\_TS (built-in variable)}
19626
19627\begin{fulllineitems}
19628\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ_PA_ENC_TS:KRB5_KEYUSAGE_AS_REQ_PA_ENC_TS}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AS\_REQ\_PA\_ENC\_TS}}
19629\end{fulllineitems}
19630
19631
19632
19633\begin{savenotes}\sphinxattablestart
19634\centering
19635\begin{tabulary}{\linewidth}[t]{|T|T|}
19636\hline
19637
19638\sphinxcode{KRB5\_KEYUSAGE\_AS\_REQ\_PA\_ENC\_TS}
19639&
19640\sphinxcode{1}
19641\\
19642\hline
19643\end{tabulary}
19644\par
19645\sphinxattableend\end{savenotes}
19646
19647
19648\subsubsection{KRB5\_KEYUSAGE\_CAMMAC}
19649\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_CAMMAC:krb5-keyusage-cammac}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_CAMMAC::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_CAMMAC:krb5-keyusage-cammac-data}}\index{KRB5\_KEYUSAGE\_CAMMAC (built-in variable)}
19650
19651\begin{fulllineitems}
19652\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_CAMMAC:KRB5_KEYUSAGE_CAMMAC}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_CAMMAC}}
19653\end{fulllineitems}
19654
19655
19656
19657\begin{savenotes}\sphinxattablestart
19658\centering
19659\begin{tabulary}{\linewidth}[t]{|T|T|}
19660\hline
19661
19662\sphinxcode{KRB5\_KEYUSAGE\_CAMMAC}
19663&
19664\sphinxcode{64}
19665\\
19666\hline
19667\end{tabulary}
19668\par
19669\sphinxattableend\end{savenotes}
19670
19671
19672\subsubsection{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_CLIENT}
19673\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT:krb5-keyusage-enc-challenge-client-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT:krb5-keyusage-enc-challenge-client}}\index{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_CLIENT (built-in variable)}
19674
19675\begin{fulllineitems}
19676\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT:KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_CLIENT}}
19677\end{fulllineitems}
19678
19679
19680
19681\begin{savenotes}\sphinxattablestart
19682\centering
19683\begin{tabulary}{\linewidth}[t]{|T|T|}
19684\hline
19685
19686\sphinxcode{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_CLIENT}
19687&
19688\sphinxcode{54}
19689\\
19690\hline
19691\end{tabulary}
19692\par
19693\sphinxattableend\end{savenotes}
19694
19695
19696\subsubsection{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_KDC}
19697\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_KDC:krb5-keyusage-enc-challenge-kdc-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_KDC:krb5-keyusage-enc-challenge-kdc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_KDC::doc}}\index{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_KDC (built-in variable)}
19698
19699\begin{fulllineitems}
19700\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_KDC:KRB5_KEYUSAGE_ENC_CHALLENGE_KDC}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_KDC}}
19701\end{fulllineitems}
19702
19703
19704
19705\begin{savenotes}\sphinxattablestart
19706\centering
19707\begin{tabulary}{\linewidth}[t]{|T|T|}
19708\hline
19709
19710\sphinxcode{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_KDC}
19711&
19712\sphinxcode{55}
19713\\
19714\hline
19715\end{tabulary}
19716\par
19717\sphinxattableend\end{savenotes}
19718
19719
19720\subsubsection{KRB5\_KEYUSAGE\_FAST\_ENC}
19721\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_ENC:krb5-keyusage-fast-enc-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_ENC:krb5-keyusage-fast-enc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_ENC::doc}}\index{KRB5\_KEYUSAGE\_FAST\_ENC (built-in variable)}
19722
19723\begin{fulllineitems}
19724\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_ENC:KRB5_KEYUSAGE_FAST_ENC}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_FAST\_ENC}}
19725\end{fulllineitems}
19726
19727
19728
19729\begin{savenotes}\sphinxattablestart
19730\centering
19731\begin{tabulary}{\linewidth}[t]{|T|T|}
19732\hline
19733
19734\sphinxcode{KRB5\_KEYUSAGE\_FAST\_ENC}
19735&
19736\sphinxcode{51}
19737\\
19738\hline
19739\end{tabulary}
19740\par
19741\sphinxattableend\end{savenotes}
19742
19743
19744\subsubsection{KRB5\_KEYUSAGE\_FAST\_FINISHED}
19745\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_FINISHED:krb5-keyusage-fast-finished-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_FINISHED::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_FINISHED:krb5-keyusage-fast-finished}}\index{KRB5\_KEYUSAGE\_FAST\_FINISHED (built-in variable)}
19746
19747\begin{fulllineitems}
19748\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_FINISHED:KRB5_KEYUSAGE_FAST_FINISHED}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_FAST\_FINISHED}}
19749\end{fulllineitems}
19750
19751
19752
19753\begin{savenotes}\sphinxattablestart
19754\centering
19755\begin{tabulary}{\linewidth}[t]{|T|T|}
19756\hline
19757
19758\sphinxcode{KRB5\_KEYUSAGE\_FAST\_FINISHED}
19759&
19760\sphinxcode{53}
19761\\
19762\hline
19763\end{tabulary}
19764\par
19765\sphinxattableend\end{savenotes}
19766
19767
19768\subsubsection{KRB5\_KEYUSAGE\_FAST\_REP}
19769\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REP:krb5-keyusage-fast-rep-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REP::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REP:krb5-keyusage-fast-rep}}\index{KRB5\_KEYUSAGE\_FAST\_REP (built-in variable)}
19770
19771\begin{fulllineitems}
19772\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REP:KRB5_KEYUSAGE_FAST_REP}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_FAST\_REP}}
19773\end{fulllineitems}
19774
19775
19776
19777\begin{savenotes}\sphinxattablestart
19778\centering
19779\begin{tabulary}{\linewidth}[t]{|T|T|}
19780\hline
19781
19782\sphinxcode{KRB5\_KEYUSAGE\_FAST\_REP}
19783&
19784\sphinxcode{52}
19785\\
19786\hline
19787\end{tabulary}
19788\par
19789\sphinxattableend\end{savenotes}
19790
19791
19792\subsubsection{KRB5\_KEYUSAGE\_FAST\_REQ\_CHKSUM}
19793\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REQ_CHKSUM:krb5-keyusage-fast-req-chksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REQ_CHKSUM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REQ_CHKSUM:krb5-keyusage-fast-req-chksum}}\index{KRB5\_KEYUSAGE\_FAST\_REQ\_CHKSUM (built-in variable)}
19794
19795\begin{fulllineitems}
19796\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REQ_CHKSUM:KRB5_KEYUSAGE_FAST_REQ_CHKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_FAST\_REQ\_CHKSUM}}
19797\end{fulllineitems}
19798
19799
19800
19801\begin{savenotes}\sphinxattablestart
19802\centering
19803\begin{tabulary}{\linewidth}[t]{|T|T|}
19804\hline
19805
19806\sphinxcode{KRB5\_KEYUSAGE\_FAST\_REQ\_CHKSUM}
19807&
19808\sphinxcode{50}
19809\\
19810\hline
19811\end{tabulary}
19812\par
19813\sphinxattableend\end{savenotes}
19814
19815
19816\subsubsection{KRB5\_KEYUSAGE\_GSS\_TOK\_MIC}
19817\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_MIC:krb5-keyusage-gss-tok-mic}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_MIC::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_MIC:krb5-keyusage-gss-tok-mic-data}}\index{KRB5\_KEYUSAGE\_GSS\_TOK\_MIC (built-in variable)}
19818
19819\begin{fulllineitems}
19820\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_MIC:KRB5_KEYUSAGE_GSS_TOK_MIC}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_GSS\_TOK\_MIC}}
19821\end{fulllineitems}
19822
19823
19824
19825\begin{savenotes}\sphinxattablestart
19826\centering
19827\begin{tabulary}{\linewidth}[t]{|T|T|}
19828\hline
19829
19830\sphinxcode{KRB5\_KEYUSAGE\_GSS\_TOK\_MIC}
19831&
19832\sphinxcode{22}
19833\\
19834\hline
19835\end{tabulary}
19836\par
19837\sphinxattableend\end{savenotes}
19838
19839
19840\subsubsection{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_INTEG}
19841\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_INTEG::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_INTEG:krb5-keyusage-gss-tok-wrap-integ}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_INTEG:krb5-keyusage-gss-tok-wrap-integ-data}}\index{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_INTEG (built-in variable)}
19842
19843\begin{fulllineitems}
19844\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_INTEG:KRB5_KEYUSAGE_GSS_TOK_WRAP_INTEG}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_INTEG}}
19845\end{fulllineitems}
19846
19847
19848
19849\begin{savenotes}\sphinxattablestart
19850\centering
19851\begin{tabulary}{\linewidth}[t]{|T|T|}
19852\hline
19853
19854\sphinxcode{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_INTEG}
19855&
19856\sphinxcode{23}
19857\\
19858\hline
19859\end{tabulary}
19860\par
19861\sphinxattableend\end{savenotes}
19862
19863
19864\subsubsection{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_PRIV}
19865\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_PRIV:krb5-keyusage-gss-tok-wrap-priv-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_PRIV::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_PRIV:krb5-keyusage-gss-tok-wrap-priv}}\index{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_PRIV (built-in variable)}
19866
19867\begin{fulllineitems}
19868\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_PRIV:KRB5_KEYUSAGE_GSS_TOK_WRAP_PRIV}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_PRIV}}
19869\end{fulllineitems}
19870
19871
19872
19873\begin{savenotes}\sphinxattablestart
19874\centering
19875\begin{tabulary}{\linewidth}[t]{|T|T|}
19876\hline
19877
19878\sphinxcode{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_PRIV}
19879&
19880\sphinxcode{24}
19881\\
19882\hline
19883\end{tabulary}
19884\par
19885\sphinxattableend\end{savenotes}
19886
19887
19888\subsubsection{KRB5\_KEYUSAGE\_IAKERB\_FINISHED}
19889\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_IAKERB_FINISHED:krb5-keyusage-iakerb-finished-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_IAKERB_FINISHED::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_IAKERB_FINISHED:krb5-keyusage-iakerb-finished}}\index{KRB5\_KEYUSAGE\_IAKERB\_FINISHED (built-in variable)}
19890
19891\begin{fulllineitems}
19892\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_IAKERB_FINISHED:KRB5_KEYUSAGE_IAKERB_FINISHED}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_IAKERB\_FINISHED}}
19893\end{fulllineitems}
19894
19895
19896
19897\begin{savenotes}\sphinxattablestart
19898\centering
19899\begin{tabulary}{\linewidth}[t]{|T|T|}
19900\hline
19901
19902\sphinxcode{KRB5\_KEYUSAGE\_IAKERB\_FINISHED}
19903&
19904\sphinxcode{42}
19905\\
19906\hline
19907\end{tabulary}
19908\par
19909\sphinxattableend\end{savenotes}
19910
19911
19912\subsubsection{KRB5\_KEYUSAGE\_KDC\_REP\_TICKET}
19913\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KDC_REP_TICKET::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KDC_REP_TICKET:krb5-keyusage-kdc-rep-ticket-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KDC_REP_TICKET:krb5-keyusage-kdc-rep-ticket}}\index{KRB5\_KEYUSAGE\_KDC\_REP\_TICKET (built-in variable)}
19914
19915\begin{fulllineitems}
19916\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KDC_REP_TICKET:KRB5_KEYUSAGE_KDC_REP_TICKET}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_KDC\_REP\_TICKET}}
19917\end{fulllineitems}
19918
19919
19920
19921\begin{savenotes}\sphinxattablestart
19922\centering
19923\begin{tabulary}{\linewidth}[t]{|T|T|}
19924\hline
19925
19926\sphinxcode{KRB5\_KEYUSAGE\_KDC\_REP\_TICKET}
19927&
19928\sphinxcode{2}
19929\\
19930\hline
19931\end{tabulary}
19932\par
19933\sphinxattableend\end{savenotes}
19934
19935
19936\subsubsection{KRB5\_KEYUSAGE\_KRB\_CRED\_ENCPART}
19937\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_CRED_ENCPART:krb5-keyusage-krb-cred-encpart-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_CRED_ENCPART::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_CRED_ENCPART:krb5-keyusage-krb-cred-encpart}}\index{KRB5\_KEYUSAGE\_KRB\_CRED\_ENCPART (built-in variable)}
19938
19939\begin{fulllineitems}
19940\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_CRED_ENCPART:KRB5_KEYUSAGE_KRB_CRED_ENCPART}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_KRB\_CRED\_ENCPART}}
19941\end{fulllineitems}
19942
19943
19944
19945\begin{savenotes}\sphinxattablestart
19946\centering
19947\begin{tabulary}{\linewidth}[t]{|T|T|}
19948\hline
19949
19950\sphinxcode{KRB5\_KEYUSAGE\_KRB\_CRED\_ENCPART}
19951&
19952\sphinxcode{14}
19953\\
19954\hline
19955\end{tabulary}
19956\par
19957\sphinxattableend\end{savenotes}
19958
19959
19960\subsubsection{KRB5\_KEYUSAGE\_KRB\_ERROR\_CKSUM}
19961\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_ERROR_CKSUM:krb5-keyusage-krb-error-cksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_ERROR_CKSUM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_ERROR_CKSUM:krb5-keyusage-krb-error-cksum}}\index{KRB5\_KEYUSAGE\_KRB\_ERROR\_CKSUM (built-in variable)}
19962
19963\begin{fulllineitems}
19964\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_ERROR_CKSUM:KRB5_KEYUSAGE_KRB_ERROR_CKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_KRB\_ERROR\_CKSUM}}
19965\end{fulllineitems}
19966
19967
19968
19969\begin{savenotes}\sphinxattablestart
19970\centering
19971\begin{tabulary}{\linewidth}[t]{|T|T|}
19972\hline
19973
19974\sphinxcode{KRB5\_KEYUSAGE\_KRB\_ERROR\_CKSUM}
19975&
19976\sphinxcode{18}
19977\\
19978\hline
19979\end{tabulary}
19980\par
19981\sphinxattableend\end{savenotes}
19982
19983
19984\subsubsection{KRB5\_KEYUSAGE\_KRB\_PRIV\_ENCPART}
19985\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_PRIV_ENCPART:krb5-keyusage-krb-priv-encpart}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_PRIV_ENCPART:krb5-keyusage-krb-priv-encpart-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_PRIV_ENCPART::doc}}\index{KRB5\_KEYUSAGE\_KRB\_PRIV\_ENCPART (built-in variable)}
19986
19987\begin{fulllineitems}
19988\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_PRIV_ENCPART:KRB5_KEYUSAGE_KRB_PRIV_ENCPART}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_KRB\_PRIV\_ENCPART}}
19989\end{fulllineitems}
19990
19991
19992
19993\begin{savenotes}\sphinxattablestart
19994\centering
19995\begin{tabulary}{\linewidth}[t]{|T|T|}
19996\hline
19997
19998\sphinxcode{KRB5\_KEYUSAGE\_KRB\_PRIV\_ENCPART}
19999&
20000\sphinxcode{13}
20001\\
20002\hline
20003\end{tabulary}
20004\par
20005\sphinxattableend\end{savenotes}
20006
20007
20008\subsubsection{KRB5\_KEYUSAGE\_KRB\_SAFE\_CKSUM}
20009\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_SAFE_CKSUM:krb5-keyusage-krb-safe-cksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_SAFE_CKSUM:krb5-keyusage-krb-safe-cksum}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_SAFE_CKSUM::doc}}\index{KRB5\_KEYUSAGE\_KRB\_SAFE\_CKSUM (built-in variable)}
20010
20011\begin{fulllineitems}
20012\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_SAFE_CKSUM:KRB5_KEYUSAGE_KRB_SAFE_CKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_KRB\_SAFE\_CKSUM}}
20013\end{fulllineitems}
20014
20015
20016
20017\begin{savenotes}\sphinxattablestart
20018\centering
20019\begin{tabulary}{\linewidth}[t]{|T|T|}
20020\hline
20021
20022\sphinxcode{KRB5\_KEYUSAGE\_KRB\_SAFE\_CKSUM}
20023&
20024\sphinxcode{15}
20025\\
20026\hline
20027\end{tabulary}
20028\par
20029\sphinxattableend\end{savenotes}
20030
20031
20032\subsubsection{KRB5\_KEYUSAGE\_PA\_AS\_FRESHNESS}
20033\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_AS_FRESHNESS:krb5-keyusage-pa-as-freshness}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_AS_FRESHNESS:krb5-keyusage-pa-as-freshness-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_AS_FRESHNESS::doc}}\index{KRB5\_KEYUSAGE\_PA\_AS\_FRESHNESS (built-in variable)}
20034
20035\begin{fulllineitems}
20036\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_AS_FRESHNESS:KRB5_KEYUSAGE_PA_AS_FRESHNESS}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_AS\_FRESHNESS}}
20037\end{fulllineitems}
20038
20039
20040Used for freshness tokens.
20041
20042
20043\begin{savenotes}\sphinxattablestart
20044\centering
20045\begin{tabulary}{\linewidth}[t]{|T|T|}
20046\hline
20047
20048\sphinxcode{KRB5\_KEYUSAGE\_PA\_AS\_FRESHNESS}
20049&
20050\sphinxcode{514}
20051\\
20052\hline
20053\end{tabulary}
20054\par
20055\sphinxattableend\end{savenotes}
20056
20057
20058\subsubsection{KRB5\_KEYUSAGE\_PA\_FX\_COOKIE}
20059\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_FX_COOKIE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_FX_COOKIE:krb5-keyusage-pa-fx-cookie}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_FX_COOKIE:krb5-keyusage-pa-fx-cookie-data}}\index{KRB5\_KEYUSAGE\_PA\_FX\_COOKIE (built-in variable)}
20060
20061\begin{fulllineitems}
20062\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_FX_COOKIE:KRB5_KEYUSAGE_PA_FX_COOKIE}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_FX\_COOKIE}}
20063\end{fulllineitems}
20064
20065
20066Used for encrypted FAST cookies.
20067
20068
20069\begin{savenotes}\sphinxattablestart
20070\centering
20071\begin{tabulary}{\linewidth}[t]{|T|T|}
20072\hline
20073
20074\sphinxcode{KRB5\_KEYUSAGE\_PA\_FX\_COOKIE}
20075&
20076\sphinxcode{513}
20077\\
20078\hline
20079\end{tabulary}
20080\par
20081\sphinxattableend\end{savenotes}
20082
20083
20084\subsubsection{KRB5\_KEYUSAGE\_PA\_OTP\_REQUEST}
20085\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_OTP_REQUEST:krb5-keyusage-pa-otp-request}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_OTP_REQUEST:krb5-keyusage-pa-otp-request-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_OTP_REQUEST::doc}}\index{KRB5\_KEYUSAGE\_PA\_OTP\_REQUEST (built-in variable)}
20086
20087\begin{fulllineitems}
20088\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_OTP_REQUEST:KRB5_KEYUSAGE_PA_OTP_REQUEST}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_OTP\_REQUEST}}
20089\end{fulllineitems}
20090
20091
20092See RFC 6560 section 4.2.
20093
20094
20095\begin{savenotes}\sphinxattablestart
20096\centering
20097\begin{tabulary}{\linewidth}[t]{|T|T|}
20098\hline
20099
20100\sphinxcode{KRB5\_KEYUSAGE\_PA\_OTP\_REQUEST}
20101&
20102\sphinxcode{45}
20103\\
20104\hline
20105\end{tabulary}
20106\par
20107\sphinxattableend\end{savenotes}
20108
20109
20110\subsubsection{KRB5\_KEYUSAGE\_PA\_PKINIT\_KX}
20111\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_PKINIT_KX::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_PKINIT_KX:krb5-keyusage-pa-pkinit-kx-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_PKINIT_KX:krb5-keyusage-pa-pkinit-kx}}\index{KRB5\_KEYUSAGE\_PA\_PKINIT\_KX (built-in variable)}
20112
20113\begin{fulllineitems}
20114\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_PKINIT_KX:KRB5_KEYUSAGE_PA_PKINIT_KX}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_PKINIT\_KX}}
20115\end{fulllineitems}
20116
20117
20118
20119\begin{savenotes}\sphinxattablestart
20120\centering
20121\begin{tabulary}{\linewidth}[t]{|T|T|}
20122\hline
20123
20124\sphinxcode{KRB5\_KEYUSAGE\_PA\_PKINIT\_KX}
20125&
20126\sphinxcode{44}
20127\\
20128\hline
20129\end{tabulary}
20130\par
20131\sphinxattableend\end{savenotes}
20132
20133
20134\subsubsection{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REPLY}
20135\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REPLY:krb5-keyusage-pa-s4u-x509-user-reply-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REPLY:krb5-keyusage-pa-s4u-x509-user-reply}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REPLY::doc}}\index{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REPLY (built-in variable)}
20136
20137\begin{fulllineitems}
20138\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REPLY:KRB5_KEYUSAGE_PA_S4U_X509_USER_REPLY}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REPLY}}
20139\end{fulllineitems}
20140
20141
20142Note conflict with \sphinxcode{KRB5\_KEYUSAGE\_PA\_SAM\_RESPONSE} .
20143
20144
20145\begin{savenotes}\sphinxattablestart
20146\centering
20147\begin{tabulary}{\linewidth}[t]{|T|T|}
20148\hline
20149
20150\sphinxcode{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REPLY}
20151&
20152\sphinxcode{27}
20153\\
20154\hline
20155\end{tabulary}
20156\par
20157\sphinxattableend\end{savenotes}
20158
20159
20160\subsubsection{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REQUEST}
20161\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST:krb5-keyusage-pa-s4u-x509-user-request}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST:krb5-keyusage-pa-s4u-x509-user-request-data}}\index{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REQUEST (built-in variable)}
20162
20163\begin{fulllineitems}
20164\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST:KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REQUEST}}
20165\end{fulllineitems}
20166
20167
20168Note conflict with \sphinxcode{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_TRACKID} .
20169
20170
20171\begin{savenotes}\sphinxattablestart
20172\centering
20173\begin{tabulary}{\linewidth}[t]{|T|T|}
20174\hline
20175
20176\sphinxcode{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REQUEST}
20177&
20178\sphinxcode{26}
20179\\
20180\hline
20181\end{tabulary}
20182\par
20183\sphinxattableend\end{savenotes}
20184
20185
20186\subsubsection{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_CKSUM}
20187\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_CKSUM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_CKSUM:krb5-keyusage-pa-sam-challenge-cksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_CKSUM:krb5-keyusage-pa-sam-challenge-cksum}}\index{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_CKSUM (built-in variable)}
20188
20189\begin{fulllineitems}
20190\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_CKSUM:KRB5_KEYUSAGE_PA_SAM_CHALLENGE_CKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_CKSUM}}
20191\end{fulllineitems}
20192
20193
20194
20195\begin{savenotes}\sphinxattablestart
20196\centering
20197\begin{tabulary}{\linewidth}[t]{|T|T|}
20198\hline
20199
20200\sphinxcode{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_CKSUM}
20201&
20202\sphinxcode{25}
20203\\
20204\hline
20205\end{tabulary}
20206\par
20207\sphinxattableend\end{savenotes}
20208
20209
20210\subsubsection{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_TRACKID}
20211\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_TRACKID:krb5-keyusage-pa-sam-challenge-trackid}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_TRACKID:krb5-keyusage-pa-sam-challenge-trackid-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_TRACKID::doc}}\index{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_TRACKID (built-in variable)}
20212
20213\begin{fulllineitems}
20214\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_TRACKID:KRB5_KEYUSAGE_PA_SAM_CHALLENGE_TRACKID}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_TRACKID}}
20215\end{fulllineitems}
20216
20217
20218Note conflict with \sphinxcode{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REQUEST} .
20219
20220
20221\begin{savenotes}\sphinxattablestart
20222\centering
20223\begin{tabulary}{\linewidth}[t]{|T|T|}
20224\hline
20225
20226\sphinxcode{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_TRACKID}
20227&
20228\sphinxcode{26}
20229\\
20230\hline
20231\end{tabulary}
20232\par
20233\sphinxattableend\end{savenotes}
20234
20235
20236\subsubsection{KRB5\_KEYUSAGE\_PA\_SAM\_RESPONSE}
20237\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_RESPONSE:krb5-keyusage-pa-sam-response-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_RESPONSE:krb5-keyusage-pa-sam-response}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_RESPONSE::doc}}\index{KRB5\_KEYUSAGE\_PA\_SAM\_RESPONSE (built-in variable)}
20238
20239\begin{fulllineitems}
20240\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_RESPONSE:KRB5_KEYUSAGE_PA_SAM_RESPONSE}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_SAM\_RESPONSE}}
20241\end{fulllineitems}
20242
20243
20244Note conflict with \sphinxcode{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REPLY} .
20245
20246
20247\begin{savenotes}\sphinxattablestart
20248\centering
20249\begin{tabulary}{\linewidth}[t]{|T|T|}
20250\hline
20251
20252\sphinxcode{KRB5\_KEYUSAGE\_PA\_SAM\_RESPONSE}
20253&
20254\sphinxcode{27}
20255\\
20256\hline
20257\end{tabulary}
20258\par
20259\sphinxattableend\end{savenotes}
20260
20261
20262\subsubsection{KRB5\_KEYUSAGE\_SPAKE}
20263\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_SPAKE:krb5-keyusage-spake}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_SPAKE:krb5-keyusage-spake-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_SPAKE::doc}}\index{KRB5\_KEYUSAGE\_SPAKE (built-in variable)}
20264
20265\begin{fulllineitems}
20266\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_SPAKE:KRB5_KEYUSAGE_SPAKE}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_SPAKE}}
20267\end{fulllineitems}
20268
20269
20270
20271\begin{savenotes}\sphinxattablestart
20272\centering
20273\begin{tabulary}{\linewidth}[t]{|T|T|}
20274\hline
20275
20276\sphinxcode{KRB5\_KEYUSAGE\_SPAKE}
20277&
20278\sphinxcode{65}
20279\\
20280\hline
20281\end{tabulary}
20282\par
20283\sphinxattableend\end{savenotes}
20284
20285
20286\subsubsection{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SESSKEY}
20287\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SESSKEY:krb5-keyusage-tgs-rep-encpart-sesskey}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SESSKEY:krb5-keyusage-tgs-rep-encpart-sesskey-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SESSKEY::doc}}\index{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SESSKEY (built-in variable)}
20288
20289\begin{fulllineitems}
20290\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SESSKEY:KRB5_KEYUSAGE_TGS_REP_ENCPART_SESSKEY}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SESSKEY}}
20291\end{fulllineitems}
20292
20293
20294
20295\begin{savenotes}\sphinxattablestart
20296\centering
20297\begin{tabulary}{\linewidth}[t]{|T|T|}
20298\hline
20299
20300\sphinxcode{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SESSKEY}
20301&
20302\sphinxcode{8}
20303\\
20304\hline
20305\end{tabulary}
20306\par
20307\sphinxattableend\end{savenotes}
20308
20309
20310\subsubsection{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SUBKEY}
20311\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SUBKEY:krb5-keyusage-tgs-rep-encpart-subkey-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SUBKEY::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SUBKEY:krb5-keyusage-tgs-rep-encpart-subkey}}\index{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SUBKEY (built-in variable)}
20312
20313\begin{fulllineitems}
20314\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SUBKEY:KRB5_KEYUSAGE_TGS_REP_ENCPART_SUBKEY}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SUBKEY}}
20315\end{fulllineitems}
20316
20317
20318
20319\begin{savenotes}\sphinxattablestart
20320\centering
20321\begin{tabulary}{\linewidth}[t]{|T|T|}
20322\hline
20323
20324\sphinxcode{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SUBKEY}
20325&
20326\sphinxcode{9}
20327\\
20328\hline
20329\end{tabulary}
20330\par
20331\sphinxattableend\end{savenotes}
20332
20333
20334\subsubsection{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SESSKEY}
20335\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SESSKEY::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SESSKEY:krb5-keyusage-tgs-req-ad-sesskey}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SESSKEY:krb5-keyusage-tgs-req-ad-sesskey-data}}\index{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SESSKEY (built-in variable)}
20336
20337\begin{fulllineitems}
20338\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SESSKEY:KRB5_KEYUSAGE_TGS_REQ_AD_SESSKEY}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SESSKEY}}
20339\end{fulllineitems}
20340
20341
20342
20343\begin{savenotes}\sphinxattablestart
20344\centering
20345\begin{tabulary}{\linewidth}[t]{|T|T|}
20346\hline
20347
20348\sphinxcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SESSKEY}
20349&
20350\sphinxcode{4}
20351\\
20352\hline
20353\end{tabulary}
20354\par
20355\sphinxattableend\end{savenotes}
20356
20357
20358\subsubsection{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SUBKEY}
20359\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SUBKEY:krb5-keyusage-tgs-req-ad-subkey}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SUBKEY::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SUBKEY:krb5-keyusage-tgs-req-ad-subkey-data}}\index{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SUBKEY (built-in variable)}
20360
20361\begin{fulllineitems}
20362\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SUBKEY:KRB5_KEYUSAGE_TGS_REQ_AD_SUBKEY}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SUBKEY}}
20363\end{fulllineitems}
20364
20365
20366
20367\begin{savenotes}\sphinxattablestart
20368\centering
20369\begin{tabulary}{\linewidth}[t]{|T|T|}
20370\hline
20371
20372\sphinxcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SUBKEY}
20373&
20374\sphinxcode{5}
20375\\
20376\hline
20377\end{tabulary}
20378\par
20379\sphinxattableend\end{savenotes}
20380
20381
20382\subsubsection{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH}
20383\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH:krb5-keyusage-tgs-req-auth}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH:krb5-keyusage-tgs-req-auth-data}}\index{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH (built-in variable)}
20384
20385\begin{fulllineitems}
20386\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH:KRB5_KEYUSAGE_TGS_REQ_AUTH}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH}}
20387\end{fulllineitems}
20388
20389
20390
20391\begin{savenotes}\sphinxattablestart
20392\centering
20393\begin{tabulary}{\linewidth}[t]{|T|T|}
20394\hline
20395
20396\sphinxcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH}
20397&
20398\sphinxcode{7}
20399\\
20400\hline
20401\end{tabulary}
20402\par
20403\sphinxattableend\end{savenotes}
20404
20405
20406\subsubsection{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH\_CKSUM}
20407\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH_CKSUM:krb5-keyusage-tgs-req-auth-cksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH_CKSUM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH_CKSUM:krb5-keyusage-tgs-req-auth-cksum}}\index{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH\_CKSUM (built-in variable)}
20408
20409\begin{fulllineitems}
20410\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH_CKSUM:KRB5_KEYUSAGE_TGS_REQ_AUTH_CKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH\_CKSUM}}
20411\end{fulllineitems}
20412
20413
20414
20415\begin{savenotes}\sphinxattablestart
20416\centering
20417\begin{tabulary}{\linewidth}[t]{|T|T|}
20418\hline
20419
20420\sphinxcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH\_CKSUM}
20421&
20422\sphinxcode{6}
20423\\
20424\hline
20425\end{tabulary}
20426\par
20427\sphinxattableend\end{savenotes}
20428
20429
20430\subsubsection{KRB5\_KPASSWD\_ACCESSDENIED}
20431\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_ACCESSDENIED:krb5-kpasswd-accessdenied}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_ACCESSDENIED:krb5-kpasswd-accessdenied-data}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_ACCESSDENIED::doc}}\index{KRB5\_KPASSWD\_ACCESSDENIED (built-in variable)}
20432
20433\begin{fulllineitems}
20434\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_ACCESSDENIED:KRB5_KPASSWD_ACCESSDENIED}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_ACCESSDENIED}}
20435\end{fulllineitems}
20436
20437
20438Not authorized.
20439
20440
20441\begin{savenotes}\sphinxattablestart
20442\centering
20443\begin{tabulary}{\linewidth}[t]{|T|T|}
20444\hline
20445
20446\sphinxcode{KRB5\_KPASSWD\_ACCESSDENIED}
20447&
20448\sphinxcode{5}
20449\\
20450\hline
20451\end{tabulary}
20452\par
20453\sphinxattableend\end{savenotes}
20454
20455
20456\subsubsection{KRB5\_KPASSWD\_AUTHERROR}
20457\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_AUTHERROR:krb5-kpasswd-autherror-data}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_AUTHERROR:krb5-kpasswd-autherror}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_AUTHERROR::doc}}\index{KRB5\_KPASSWD\_AUTHERROR (built-in variable)}
20458
20459\begin{fulllineitems}
20460\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_AUTHERROR:KRB5_KPASSWD_AUTHERROR}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_AUTHERROR}}
20461\end{fulllineitems}
20462
20463
20464Authentication error.
20465
20466
20467\begin{savenotes}\sphinxattablestart
20468\centering
20469\begin{tabulary}{\linewidth}[t]{|T|T|}
20470\hline
20471
20472\sphinxcode{KRB5\_KPASSWD\_AUTHERROR}
20473&
20474\sphinxcode{3}
20475\\
20476\hline
20477\end{tabulary}
20478\par
20479\sphinxattableend\end{savenotes}
20480
20481
20482\subsubsection{KRB5\_KPASSWD\_BAD\_VERSION}
20483\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_BAD_VERSION:krb5-kpasswd-bad-version-data}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_BAD_VERSION:krb5-kpasswd-bad-version}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_BAD_VERSION::doc}}\index{KRB5\_KPASSWD\_BAD\_VERSION (built-in variable)}
20484
20485\begin{fulllineitems}
20486\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_BAD_VERSION:KRB5_KPASSWD_BAD_VERSION}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_BAD\_VERSION}}
20487\end{fulllineitems}
20488
20489
20490Unknown RPC version.
20491
20492
20493\begin{savenotes}\sphinxattablestart
20494\centering
20495\begin{tabulary}{\linewidth}[t]{|T|T|}
20496\hline
20497
20498\sphinxcode{KRB5\_KPASSWD\_BAD\_VERSION}
20499&
20500\sphinxcode{6}
20501\\
20502\hline
20503\end{tabulary}
20504\par
20505\sphinxattableend\end{savenotes}
20506
20507
20508\subsubsection{KRB5\_KPASSWD\_HARDERROR}
20509\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_HARDERROR:krb5-kpasswd-harderror}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_HARDERROR:krb5-kpasswd-harderror-data}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_HARDERROR::doc}}\index{KRB5\_KPASSWD\_HARDERROR (built-in variable)}
20510
20511\begin{fulllineitems}
20512\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_HARDERROR:KRB5_KPASSWD_HARDERROR}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_HARDERROR}}
20513\end{fulllineitems}
20514
20515
20516Server error.
20517
20518
20519\begin{savenotes}\sphinxattablestart
20520\centering
20521\begin{tabulary}{\linewidth}[t]{|T|T|}
20522\hline
20523
20524\sphinxcode{KRB5\_KPASSWD\_HARDERROR}
20525&
20526\sphinxcode{2}
20527\\
20528\hline
20529\end{tabulary}
20530\par
20531\sphinxattableend\end{savenotes}
20532
20533
20534\subsubsection{KRB5\_KPASSWD\_INITIAL\_FLAG\_NEEDED}
20535\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_INITIAL_FLAG_NEEDED:krb5-kpasswd-initial-flag-needed}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_INITIAL_FLAG_NEEDED::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_INITIAL_FLAG_NEEDED:krb5-kpasswd-initial-flag-needed-data}}\index{KRB5\_KPASSWD\_INITIAL\_FLAG\_NEEDED (built-in variable)}
20536
20537\begin{fulllineitems}
20538\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_INITIAL_FLAG_NEEDED:KRB5_KPASSWD_INITIAL_FLAG_NEEDED}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_INITIAL\_FLAG\_NEEDED}}
20539\end{fulllineitems}
20540
20541
20542The presented credentials were not obtained using a password directly.
20543
20544
20545\begin{savenotes}\sphinxattablestart
20546\centering
20547\begin{tabulary}{\linewidth}[t]{|T|T|}
20548\hline
20549
20550\sphinxcode{KRB5\_KPASSWD\_INITIAL\_FLAG\_NEEDED}
20551&
20552\sphinxcode{7}
20553\\
20554\hline
20555\end{tabulary}
20556\par
20557\sphinxattableend\end{savenotes}
20558
20559
20560\subsubsection{KRB5\_KPASSWD\_MALFORMED}
20561\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_MALFORMED:krb5-kpasswd-malformed-data}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_MALFORMED:krb5-kpasswd-malformed}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_MALFORMED::doc}}\index{KRB5\_KPASSWD\_MALFORMED (built-in variable)}
20562
20563\begin{fulllineitems}
20564\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_MALFORMED:KRB5_KPASSWD_MALFORMED}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_MALFORMED}}
20565\end{fulllineitems}
20566
20567
20568Malformed request.
20569
20570
20571\begin{savenotes}\sphinxattablestart
20572\centering
20573\begin{tabulary}{\linewidth}[t]{|T|T|}
20574\hline
20575
20576\sphinxcode{KRB5\_KPASSWD\_MALFORMED}
20577&
20578\sphinxcode{1}
20579\\
20580\hline
20581\end{tabulary}
20582\par
20583\sphinxattableend\end{savenotes}
20584
20585
20586\subsubsection{KRB5\_KPASSWD\_SOFTERROR}
20587\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SOFTERROR::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SOFTERROR:krb5-kpasswd-softerror}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SOFTERROR:krb5-kpasswd-softerror-data}}\index{KRB5\_KPASSWD\_SOFTERROR (built-in variable)}
20588
20589\begin{fulllineitems}
20590\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SOFTERROR:KRB5_KPASSWD_SOFTERROR}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_SOFTERROR}}
20591\end{fulllineitems}
20592
20593
20594Password change rejected.
20595
20596
20597\begin{savenotes}\sphinxattablestart
20598\centering
20599\begin{tabulary}{\linewidth}[t]{|T|T|}
20600\hline
20601
20602\sphinxcode{KRB5\_KPASSWD\_SOFTERROR}
20603&
20604\sphinxcode{4}
20605\\
20606\hline
20607\end{tabulary}
20608\par
20609\sphinxattableend\end{savenotes}
20610
20611
20612\subsubsection{KRB5\_KPASSWD\_SUCCESS}
20613\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SUCCESS:krb5-kpasswd-success-data}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SUCCESS::doc}}\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SUCCESS:krb5-kpasswd-success}}\index{KRB5\_KPASSWD\_SUCCESS (built-in variable)}
20614
20615\begin{fulllineitems}
20616\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SUCCESS:KRB5_KPASSWD_SUCCESS}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_SUCCESS}}
20617\end{fulllineitems}
20618
20619
20620Success.
20621
20622
20623\begin{savenotes}\sphinxattablestart
20624\centering
20625\begin{tabulary}{\linewidth}[t]{|T|T|}
20626\hline
20627
20628\sphinxcode{KRB5\_KPASSWD\_SUCCESS}
20629&
20630\sphinxcode{0}
20631\\
20632\hline
20633\end{tabulary}
20634\par
20635\sphinxattableend\end{savenotes}
20636
20637
20638\subsubsection{KRB5\_LRQ\_ALL\_ACCT\_EXPTIME}
20639\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_ACCT_EXPTIME::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_ACCT_EXPTIME:krb5-lrq-all-acct-exptime}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_ACCT_EXPTIME:krb5-lrq-all-acct-exptime-data}}\index{KRB5\_LRQ\_ALL\_ACCT\_EXPTIME (built-in variable)}
20640
20641\begin{fulllineitems}
20642\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_ACCT_EXPTIME:KRB5_LRQ_ALL_ACCT_EXPTIME}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_ACCT\_EXPTIME}}
20643\end{fulllineitems}
20644
20645
20646
20647\begin{savenotes}\sphinxattablestart
20648\centering
20649\begin{tabulary}{\linewidth}[t]{|T|T|}
20650\hline
20651
20652\sphinxcode{KRB5\_LRQ\_ALL\_ACCT\_EXPTIME}
20653&
20654\sphinxcode{7}
20655\\
20656\hline
20657\end{tabulary}
20658\par
20659\sphinxattableend\end{savenotes}
20660
20661
20662\subsubsection{KRB5\_LRQ\_ALL\_LAST\_INITIAL}
20663\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_INITIAL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_INITIAL:krb5-lrq-all-last-initial}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_INITIAL:krb5-lrq-all-last-initial-data}}\index{KRB5\_LRQ\_ALL\_LAST\_INITIAL (built-in variable)}
20664
20665\begin{fulllineitems}
20666\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_INITIAL:KRB5_LRQ_ALL_LAST_INITIAL}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_LAST\_INITIAL}}
20667\end{fulllineitems}
20668
20669
20670
20671\begin{savenotes}\sphinxattablestart
20672\centering
20673\begin{tabulary}{\linewidth}[t]{|T|T|}
20674\hline
20675
20676\sphinxcode{KRB5\_LRQ\_ALL\_LAST\_INITIAL}
20677&
20678\sphinxcode{2}
20679\\
20680\hline
20681\end{tabulary}
20682\par
20683\sphinxattableend\end{savenotes}
20684
20685
20686\subsubsection{KRB5\_LRQ\_ALL\_LAST\_RENEWAL}
20687\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_RENEWAL:krb5-lrq-all-last-renewal}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_RENEWAL:krb5-lrq-all-last-renewal-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_RENEWAL::doc}}\index{KRB5\_LRQ\_ALL\_LAST\_RENEWAL (built-in variable)}
20688
20689\begin{fulllineitems}
20690\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_RENEWAL:KRB5_LRQ_ALL_LAST_RENEWAL}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_LAST\_RENEWAL}}
20691\end{fulllineitems}
20692
20693
20694
20695\begin{savenotes}\sphinxattablestart
20696\centering
20697\begin{tabulary}{\linewidth}[t]{|T|T|}
20698\hline
20699
20700\sphinxcode{KRB5\_LRQ\_ALL\_LAST\_RENEWAL}
20701&
20702\sphinxcode{4}
20703\\
20704\hline
20705\end{tabulary}
20706\par
20707\sphinxattableend\end{savenotes}
20708
20709
20710\subsubsection{KRB5\_LRQ\_ALL\_LAST\_REQ}
20711\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_REQ::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_REQ:krb5-lrq-all-last-req}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_REQ:krb5-lrq-all-last-req-data}}\index{KRB5\_LRQ\_ALL\_LAST\_REQ (built-in variable)}
20712
20713\begin{fulllineitems}
20714\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_REQ:KRB5_LRQ_ALL_LAST_REQ}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_LAST\_REQ}}
20715\end{fulllineitems}
20716
20717
20718
20719\begin{savenotes}\sphinxattablestart
20720\centering
20721\begin{tabulary}{\linewidth}[t]{|T|T|}
20722\hline
20723
20724\sphinxcode{KRB5\_LRQ\_ALL\_LAST\_REQ}
20725&
20726\sphinxcode{5}
20727\\
20728\hline
20729\end{tabulary}
20730\par
20731\sphinxattableend\end{savenotes}
20732
20733
20734\subsubsection{KRB5\_LRQ\_ALL\_LAST\_TGT}
20735\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT:krb5-lrq-all-last-tgt-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT:krb5-lrq-all-last-tgt}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT::doc}}\index{KRB5\_LRQ\_ALL\_LAST\_TGT (built-in variable)}
20736
20737\begin{fulllineitems}
20738\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT:KRB5_LRQ_ALL_LAST_TGT}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_LAST\_TGT}}
20739\end{fulllineitems}
20740
20741
20742
20743\begin{savenotes}\sphinxattablestart
20744\centering
20745\begin{tabulary}{\linewidth}[t]{|T|T|}
20746\hline
20747
20748\sphinxcode{KRB5\_LRQ\_ALL\_LAST\_TGT}
20749&
20750\sphinxcode{1}
20751\\
20752\hline
20753\end{tabulary}
20754\par
20755\sphinxattableend\end{savenotes}
20756
20757
20758\subsubsection{KRB5\_LRQ\_ALL\_LAST\_TGT\_ISSUED}
20759\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT_ISSUED::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT_ISSUED:krb5-lrq-all-last-tgt-issued}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT_ISSUED:krb5-lrq-all-last-tgt-issued-data}}\index{KRB5\_LRQ\_ALL\_LAST\_TGT\_ISSUED (built-in variable)}
20760
20761\begin{fulllineitems}
20762\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT_ISSUED:KRB5_LRQ_ALL_LAST_TGT_ISSUED}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_LAST\_TGT\_ISSUED}}
20763\end{fulllineitems}
20764
20765
20766
20767\begin{savenotes}\sphinxattablestart
20768\centering
20769\begin{tabulary}{\linewidth}[t]{|T|T|}
20770\hline
20771
20772\sphinxcode{KRB5\_LRQ\_ALL\_LAST\_TGT\_ISSUED}
20773&
20774\sphinxcode{3}
20775\\
20776\hline
20777\end{tabulary}
20778\par
20779\sphinxattableend\end{savenotes}
20780
20781
20782\subsubsection{KRB5\_LRQ\_ALL\_PW\_EXPTIME}
20783\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_PW_EXPTIME:krb5-lrq-all-pw-exptime-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_PW_EXPTIME::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_PW_EXPTIME:krb5-lrq-all-pw-exptime}}\index{KRB5\_LRQ\_ALL\_PW\_EXPTIME (built-in variable)}
20784
20785\begin{fulllineitems}
20786\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_PW_EXPTIME:KRB5_LRQ_ALL_PW_EXPTIME}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_PW\_EXPTIME}}
20787\end{fulllineitems}
20788
20789
20790
20791\begin{savenotes}\sphinxattablestart
20792\centering
20793\begin{tabulary}{\linewidth}[t]{|T|T|}
20794\hline
20795
20796\sphinxcode{KRB5\_LRQ\_ALL\_PW\_EXPTIME}
20797&
20798\sphinxcode{6}
20799\\
20800\hline
20801\end{tabulary}
20802\par
20803\sphinxattableend\end{savenotes}
20804
20805
20806\subsubsection{KRB5\_LRQ\_NONE}
20807\label{\detokenize{appdev/refs/macros/KRB5_LRQ_NONE:krb5-lrq-none-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_NONE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_NONE:krb5-lrq-none}}\index{KRB5\_LRQ\_NONE (built-in variable)}
20808
20809\begin{fulllineitems}
20810\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_NONE:KRB5_LRQ_NONE}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_NONE}}
20811\end{fulllineitems}
20812
20813
20814
20815\begin{savenotes}\sphinxattablestart
20816\centering
20817\begin{tabulary}{\linewidth}[t]{|T|T|}
20818\hline
20819
20820\sphinxcode{KRB5\_LRQ\_NONE}
20821&
20822\sphinxcode{0}
20823\\
20824\hline
20825\end{tabulary}
20826\par
20827\sphinxattableend\end{savenotes}
20828
20829
20830\subsubsection{KRB5\_LRQ\_ONE\_ACCT\_EXPTIME}
20831\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_ACCT_EXPTIME::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_ACCT_EXPTIME:krb5-lrq-one-acct-exptime}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_ACCT_EXPTIME:krb5-lrq-one-acct-exptime-data}}\index{KRB5\_LRQ\_ONE\_ACCT\_EXPTIME (built-in variable)}
20832
20833\begin{fulllineitems}
20834\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_ACCT_EXPTIME:KRB5_LRQ_ONE_ACCT_EXPTIME}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_ACCT\_EXPTIME}}
20835\end{fulllineitems}
20836
20837
20838
20839\begin{savenotes}\sphinxattablestart
20840\centering
20841\begin{tabulary}{\linewidth}[t]{|T|T|}
20842\hline
20843
20844\sphinxcode{KRB5\_LRQ\_ONE\_ACCT\_EXPTIME}
20845&
20846\sphinxcode{(-7)}
20847\\
20848\hline
20849\end{tabulary}
20850\par
20851\sphinxattableend\end{savenotes}
20852
20853
20854\subsubsection{KRB5\_LRQ\_ONE\_LAST\_INITIAL}
20855\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_INITIAL:krb5-lrq-one-last-initial-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_INITIAL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_INITIAL:krb5-lrq-one-last-initial}}\index{KRB5\_LRQ\_ONE\_LAST\_INITIAL (built-in variable)}
20856
20857\begin{fulllineitems}
20858\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_INITIAL:KRB5_LRQ_ONE_LAST_INITIAL}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_LAST\_INITIAL}}
20859\end{fulllineitems}
20860
20861
20862
20863\begin{savenotes}\sphinxattablestart
20864\centering
20865\begin{tabulary}{\linewidth}[t]{|T|T|}
20866\hline
20867
20868\sphinxcode{KRB5\_LRQ\_ONE\_LAST\_INITIAL}
20869&
20870\sphinxcode{(-2)}
20871\\
20872\hline
20873\end{tabulary}
20874\par
20875\sphinxattableend\end{savenotes}
20876
20877
20878\subsubsection{KRB5\_LRQ\_ONE\_LAST\_RENEWAL}
20879\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_RENEWAL:krb5-lrq-one-last-renewal-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_RENEWAL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_RENEWAL:krb5-lrq-one-last-renewal}}\index{KRB5\_LRQ\_ONE\_LAST\_RENEWAL (built-in variable)}
20880
20881\begin{fulllineitems}
20882\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_RENEWAL:KRB5_LRQ_ONE_LAST_RENEWAL}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_LAST\_RENEWAL}}
20883\end{fulllineitems}
20884
20885
20886
20887\begin{savenotes}\sphinxattablestart
20888\centering
20889\begin{tabulary}{\linewidth}[t]{|T|T|}
20890\hline
20891
20892\sphinxcode{KRB5\_LRQ\_ONE\_LAST\_RENEWAL}
20893&
20894\sphinxcode{(-4)}
20895\\
20896\hline
20897\end{tabulary}
20898\par
20899\sphinxattableend\end{savenotes}
20900
20901
20902\subsubsection{KRB5\_LRQ\_ONE\_LAST\_REQ}
20903\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_REQ::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_REQ:krb5-lrq-one-last-req}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_REQ:krb5-lrq-one-last-req-data}}\index{KRB5\_LRQ\_ONE\_LAST\_REQ (built-in variable)}
20904
20905\begin{fulllineitems}
20906\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_REQ:KRB5_LRQ_ONE_LAST_REQ}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_LAST\_REQ}}
20907\end{fulllineitems}
20908
20909
20910
20911\begin{savenotes}\sphinxattablestart
20912\centering
20913\begin{tabulary}{\linewidth}[t]{|T|T|}
20914\hline
20915
20916\sphinxcode{KRB5\_LRQ\_ONE\_LAST\_REQ}
20917&
20918\sphinxcode{(-5)}
20919\\
20920\hline
20921\end{tabulary}
20922\par
20923\sphinxattableend\end{savenotes}
20924
20925
20926\subsubsection{KRB5\_LRQ\_ONE\_LAST\_TGT}
20927\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT:krb5-lrq-one-last-tgt-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT::doc}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT:krb5-lrq-one-last-tgt}}\index{KRB5\_LRQ\_ONE\_LAST\_TGT (built-in variable)}
20928
20929\begin{fulllineitems}
20930\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT:KRB5_LRQ_ONE_LAST_TGT}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_LAST\_TGT}}
20931\end{fulllineitems}
20932
20933
20934
20935\begin{savenotes}\sphinxattablestart
20936\centering
20937\begin{tabulary}{\linewidth}[t]{|T|T|}
20938\hline
20939
20940\sphinxcode{KRB5\_LRQ\_ONE\_LAST\_TGT}
20941&
20942\sphinxcode{(-1)}
20943\\
20944\hline
20945\end{tabulary}
20946\par
20947\sphinxattableend\end{savenotes}
20948
20949
20950\subsubsection{KRB5\_LRQ\_ONE\_LAST\_TGT\_ISSUED}
20951\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT_ISSUED:krb5-lrq-one-last-tgt-issued}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT_ISSUED:krb5-lrq-one-last-tgt-issued-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT_ISSUED::doc}}\index{KRB5\_LRQ\_ONE\_LAST\_TGT\_ISSUED (built-in variable)}
20952
20953\begin{fulllineitems}
20954\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT_ISSUED:KRB5_LRQ_ONE_LAST_TGT_ISSUED}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_LAST\_TGT\_ISSUED}}
20955\end{fulllineitems}
20956
20957
20958
20959\begin{savenotes}\sphinxattablestart
20960\centering
20961\begin{tabulary}{\linewidth}[t]{|T|T|}
20962\hline
20963
20964\sphinxcode{KRB5\_LRQ\_ONE\_LAST\_TGT\_ISSUED}
20965&
20966\sphinxcode{(-3)}
20967\\
20968\hline
20969\end{tabulary}
20970\par
20971\sphinxattableend\end{savenotes}
20972
20973
20974\subsubsection{KRB5\_LRQ\_ONE\_PW\_EXPTIME}
20975\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_PW_EXPTIME:krb5-lrq-one-pw-exptime}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_PW_EXPTIME:krb5-lrq-one-pw-exptime-data}}\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_PW_EXPTIME::doc}}\index{KRB5\_LRQ\_ONE\_PW\_EXPTIME (built-in variable)}
20976
20977\begin{fulllineitems}
20978\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_PW_EXPTIME:KRB5_LRQ_ONE_PW_EXPTIME}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_PW\_EXPTIME}}
20979\end{fulllineitems}
20980
20981
20982
20983\begin{savenotes}\sphinxattablestart
20984\centering
20985\begin{tabulary}{\linewidth}[t]{|T|T|}
20986\hline
20987
20988\sphinxcode{KRB5\_LRQ\_ONE\_PW\_EXPTIME}
20989&
20990\sphinxcode{(-6)}
20991\\
20992\hline
20993\end{tabulary}
20994\par
20995\sphinxattableend\end{savenotes}
20996
20997
20998\subsubsection{KRB5\_NT\_ENTERPRISE\_PRINCIPAL}
20999\label{\detokenize{appdev/refs/macros/KRB5_NT_ENTERPRISE_PRINCIPAL:krb5-nt-enterprise-principal-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_ENTERPRISE_PRINCIPAL:krb5-nt-enterprise-principal}}\label{\detokenize{appdev/refs/macros/KRB5_NT_ENTERPRISE_PRINCIPAL::doc}}\index{KRB5\_NT\_ENTERPRISE\_PRINCIPAL (built-in variable)}
21000
21001\begin{fulllineitems}
21002\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_ENTERPRISE_PRINCIPAL:KRB5_NT_ENTERPRISE_PRINCIPAL}}\pysigline{\sphinxbfcode{KRB5\_NT\_ENTERPRISE\_PRINCIPAL}}
21003\end{fulllineitems}
21004
21005
21006Windows 2000 UPN.
21007
21008
21009\begin{savenotes}\sphinxattablestart
21010\centering
21011\begin{tabulary}{\linewidth}[t]{|T|T|}
21012\hline
21013
21014\sphinxcode{KRB5\_NT\_ENTERPRISE\_PRINCIPAL}
21015&
21016\sphinxcode{10}
21017\\
21018\hline
21019\end{tabulary}
21020\par
21021\sphinxattableend\end{savenotes}
21022
21023
21024\subsubsection{KRB5\_NT\_ENT\_PRINCIPAL\_AND\_ID}
21025\label{\detokenize{appdev/refs/macros/KRB5_NT_ENT_PRINCIPAL_AND_ID:krb5-nt-ent-principal-and-id-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_ENT_PRINCIPAL_AND_ID::doc}}\label{\detokenize{appdev/refs/macros/KRB5_NT_ENT_PRINCIPAL_AND_ID:krb5-nt-ent-principal-and-id}}\index{KRB5\_NT\_ENT\_PRINCIPAL\_AND\_ID (built-in variable)}
21026
21027\begin{fulllineitems}
21028\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_ENT_PRINCIPAL_AND_ID:KRB5_NT_ENT_PRINCIPAL_AND_ID}}\pysigline{\sphinxbfcode{KRB5\_NT\_ENT\_PRINCIPAL\_AND\_ID}}
21029\end{fulllineitems}
21030
21031
21032NT 4 style name and SID.
21033
21034
21035\begin{savenotes}\sphinxattablestart
21036\centering
21037\begin{tabulary}{\linewidth}[t]{|T|T|}
21038\hline
21039
21040\sphinxcode{KRB5\_NT\_ENT\_PRINCIPAL\_AND\_ID}
21041&
21042\sphinxcode{-130}
21043\\
21044\hline
21045\end{tabulary}
21046\par
21047\sphinxattableend\end{savenotes}
21048
21049
21050\subsubsection{KRB5\_NT\_MS\_PRINCIPAL}
21051\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL:krb5-nt-ms-principal}}\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL:krb5-nt-ms-principal-data}}\index{KRB5\_NT\_MS\_PRINCIPAL (built-in variable)}
21052
21053\begin{fulllineitems}
21054\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL:KRB5_NT_MS_PRINCIPAL}}\pysigline{\sphinxbfcode{KRB5\_NT\_MS\_PRINCIPAL}}
21055\end{fulllineitems}
21056
21057
21058Windows 2000 UPN and SID.
21059
21060
21061\begin{savenotes}\sphinxattablestart
21062\centering
21063\begin{tabulary}{\linewidth}[t]{|T|T|}
21064\hline
21065
21066\sphinxcode{KRB5\_NT\_MS\_PRINCIPAL}
21067&
21068\sphinxcode{-128}
21069\\
21070\hline
21071\end{tabulary}
21072\par
21073\sphinxattableend\end{savenotes}
21074
21075
21076\subsubsection{KRB5\_NT\_MS\_PRINCIPAL\_AND\_ID}
21077\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL_AND_ID:krb5-nt-ms-principal-and-id-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL_AND_ID::doc}}\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL_AND_ID:krb5-nt-ms-principal-and-id}}\index{KRB5\_NT\_MS\_PRINCIPAL\_AND\_ID (built-in variable)}
21078
21079\begin{fulllineitems}
21080\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL_AND_ID:KRB5_NT_MS_PRINCIPAL_AND_ID}}\pysigline{\sphinxbfcode{KRB5\_NT\_MS\_PRINCIPAL\_AND\_ID}}
21081\end{fulllineitems}
21082
21083
21084NT 4 style name.
21085
21086
21087\begin{savenotes}\sphinxattablestart
21088\centering
21089\begin{tabulary}{\linewidth}[t]{|T|T|}
21090\hline
21091
21092\sphinxcode{KRB5\_NT\_MS\_PRINCIPAL\_AND\_ID}
21093&
21094\sphinxcode{-129}
21095\\
21096\hline
21097\end{tabulary}
21098\par
21099\sphinxattableend\end{savenotes}
21100
21101
21102\subsubsection{KRB5\_NT\_PRINCIPAL}
21103\label{\detokenize{appdev/refs/macros/KRB5_NT_PRINCIPAL:krb5-nt-principal}}\label{\detokenize{appdev/refs/macros/KRB5_NT_PRINCIPAL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_NT_PRINCIPAL:krb5-nt-principal-data}}\index{KRB5\_NT\_PRINCIPAL (built-in variable)}
21104
21105\begin{fulllineitems}
21106\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_PRINCIPAL:KRB5_NT_PRINCIPAL}}\pysigline{\sphinxbfcode{KRB5\_NT\_PRINCIPAL}}
21107\end{fulllineitems}
21108
21109
21110Just the name of the principal as in DCE, or for users.
21111
21112
21113\begin{savenotes}\sphinxattablestart
21114\centering
21115\begin{tabulary}{\linewidth}[t]{|T|T|}
21116\hline
21117
21118\sphinxcode{KRB5\_NT\_PRINCIPAL}
21119&
21120\sphinxcode{1}
21121\\
21122\hline
21123\end{tabulary}
21124\par
21125\sphinxattableend\end{savenotes}
21126
21127
21128\subsubsection{KRB5\_NT\_SMTP\_NAME}
21129\label{\detokenize{appdev/refs/macros/KRB5_NT_SMTP_NAME:krb5-nt-smtp-name}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SMTP_NAME:krb5-nt-smtp-name-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SMTP_NAME::doc}}\index{KRB5\_NT\_SMTP\_NAME (built-in variable)}
21130
21131\begin{fulllineitems}
21132\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_SMTP_NAME:KRB5_NT_SMTP_NAME}}\pysigline{\sphinxbfcode{KRB5\_NT\_SMTP\_NAME}}
21133\end{fulllineitems}
21134
21135
21136Name in form of SMTP email name.
21137
21138
21139\begin{savenotes}\sphinxattablestart
21140\centering
21141\begin{tabulary}{\linewidth}[t]{|T|T|}
21142\hline
21143
21144\sphinxcode{KRB5\_NT\_SMTP\_NAME}
21145&
21146\sphinxcode{7}
21147\\
21148\hline
21149\end{tabulary}
21150\par
21151\sphinxattableend\end{savenotes}
21152
21153
21154\subsubsection{KRB5\_NT\_SRV\_HST}
21155\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_HST:krb5-nt-srv-hst-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_HST::doc}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_HST:krb5-nt-srv-hst}}\index{KRB5\_NT\_SRV\_HST (built-in variable)}
21156
21157\begin{fulllineitems}
21158\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_HST:KRB5_NT_SRV_HST}}\pysigline{\sphinxbfcode{KRB5\_NT\_SRV\_HST}}
21159\end{fulllineitems}
21160
21161
21162Service with host name as instance (telnet, rcommands)
21163
21164
21165\begin{savenotes}\sphinxattablestart
21166\centering
21167\begin{tabulary}{\linewidth}[t]{|T|T|}
21168\hline
21169
21170\sphinxcode{KRB5\_NT\_SRV\_HST}
21171&
21172\sphinxcode{3}
21173\\
21174\hline
21175\end{tabulary}
21176\par
21177\sphinxattableend\end{savenotes}
21178
21179
21180\subsubsection{KRB5\_NT\_SRV\_INST}
21181\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_INST:krb5-nt-srv-inst-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_INST::doc}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_INST:krb5-nt-srv-inst}}\index{KRB5\_NT\_SRV\_INST (built-in variable)}
21182
21183\begin{fulllineitems}
21184\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_INST:KRB5_NT_SRV_INST}}\pysigline{\sphinxbfcode{KRB5\_NT\_SRV\_INST}}
21185\end{fulllineitems}
21186
21187
21188Service and other unique instance (krbtgt)
21189
21190
21191\begin{savenotes}\sphinxattablestart
21192\centering
21193\begin{tabulary}{\linewidth}[t]{|T|T|}
21194\hline
21195
21196\sphinxcode{KRB5\_NT\_SRV\_INST}
21197&
21198\sphinxcode{2}
21199\\
21200\hline
21201\end{tabulary}
21202\par
21203\sphinxattableend\end{savenotes}
21204
21205
21206\subsubsection{KRB5\_NT\_SRV\_XHST}
21207\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_XHST:krb5-nt-srv-xhst}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_XHST:krb5-nt-srv-xhst-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_XHST::doc}}\index{KRB5\_NT\_SRV\_XHST (built-in variable)}
21208
21209\begin{fulllineitems}
21210\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_XHST:KRB5_NT_SRV_XHST}}\pysigline{\sphinxbfcode{KRB5\_NT\_SRV\_XHST}}
21211\end{fulllineitems}
21212
21213
21214Service with host as remaining components.
21215
21216
21217\begin{savenotes}\sphinxattablestart
21218\centering
21219\begin{tabulary}{\linewidth}[t]{|T|T|}
21220\hline
21221
21222\sphinxcode{KRB5\_NT\_SRV\_XHST}
21223&
21224\sphinxcode{4}
21225\\
21226\hline
21227\end{tabulary}
21228\par
21229\sphinxattableend\end{savenotes}
21230
21231
21232\subsubsection{KRB5\_NT\_UID}
21233\label{\detokenize{appdev/refs/macros/KRB5_NT_UID:krb5-nt-uid}}\label{\detokenize{appdev/refs/macros/KRB5_NT_UID:krb5-nt-uid-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_UID::doc}}\index{KRB5\_NT\_UID (built-in variable)}
21234
21235\begin{fulllineitems}
21236\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_UID:KRB5_NT_UID}}\pysigline{\sphinxbfcode{KRB5\_NT\_UID}}
21237\end{fulllineitems}
21238
21239
21240Unique ID.
21241
21242
21243\begin{savenotes}\sphinxattablestart
21244\centering
21245\begin{tabulary}{\linewidth}[t]{|T|T|}
21246\hline
21247
21248\sphinxcode{KRB5\_NT\_UID}
21249&
21250\sphinxcode{5}
21251\\
21252\hline
21253\end{tabulary}
21254\par
21255\sphinxattableend\end{savenotes}
21256
21257
21258\subsubsection{KRB5\_NT\_UNKNOWN}
21259\label{\detokenize{appdev/refs/macros/KRB5_NT_UNKNOWN::doc}}\label{\detokenize{appdev/refs/macros/KRB5_NT_UNKNOWN:krb5-nt-unknown}}\label{\detokenize{appdev/refs/macros/KRB5_NT_UNKNOWN:krb5-nt-unknown-data}}\index{KRB5\_NT\_UNKNOWN (built-in variable)}
21260
21261\begin{fulllineitems}
21262\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_UNKNOWN:KRB5_NT_UNKNOWN}}\pysigline{\sphinxbfcode{KRB5\_NT\_UNKNOWN}}
21263\end{fulllineitems}
21264
21265
21266Name type not known.
21267
21268
21269\begin{savenotes}\sphinxattablestart
21270\centering
21271\begin{tabulary}{\linewidth}[t]{|T|T|}
21272\hline
21273
21274\sphinxcode{KRB5\_NT\_UNKNOWN}
21275&
21276\sphinxcode{0}
21277\\
21278\hline
21279\end{tabulary}
21280\par
21281\sphinxattableend\end{savenotes}
21282
21283
21284\subsubsection{KRB5\_NT\_WELLKNOWN}
21285\label{\detokenize{appdev/refs/macros/KRB5_NT_WELLKNOWN:krb5-nt-wellknown-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_WELLKNOWN:krb5-nt-wellknown}}\label{\detokenize{appdev/refs/macros/KRB5_NT_WELLKNOWN::doc}}\index{KRB5\_NT\_WELLKNOWN (built-in variable)}
21286
21287\begin{fulllineitems}
21288\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_WELLKNOWN:KRB5_NT_WELLKNOWN}}\pysigline{\sphinxbfcode{KRB5\_NT\_WELLKNOWN}}
21289\end{fulllineitems}
21290
21291
21292Well-known (special) principal.
21293
21294
21295\begin{savenotes}\sphinxattablestart
21296\centering
21297\begin{tabulary}{\linewidth}[t]{|T|T|}
21298\hline
21299
21300\sphinxcode{KRB5\_NT\_WELLKNOWN}
21301&
21302\sphinxcode{11}
21303\\
21304\hline
21305\end{tabulary}
21306\par
21307\sphinxattableend\end{savenotes}
21308
21309
21310\subsubsection{KRB5\_NT\_X500\_PRINCIPAL}
21311\label{\detokenize{appdev/refs/macros/KRB5_NT_X500_PRINCIPAL:krb5-nt-x500-principal-data}}\label{\detokenize{appdev/refs/macros/KRB5_NT_X500_PRINCIPAL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_NT_X500_PRINCIPAL:krb5-nt-x500-principal}}\index{KRB5\_NT\_X500\_PRINCIPAL (built-in variable)}
21312
21313\begin{fulllineitems}
21314\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_X500_PRINCIPAL:KRB5_NT_X500_PRINCIPAL}}\pysigline{\sphinxbfcode{KRB5\_NT\_X500\_PRINCIPAL}}
21315\end{fulllineitems}
21316
21317
21318PKINIT.
21319
21320
21321\begin{savenotes}\sphinxattablestart
21322\centering
21323\begin{tabulary}{\linewidth}[t]{|T|T|}
21324\hline
21325
21326\sphinxcode{KRB5\_NT\_X500\_PRINCIPAL}
21327&
21328\sphinxcode{6}
21329\\
21330\hline
21331\end{tabulary}
21332\par
21333\sphinxattableend\end{savenotes}
21334
21335
21336\subsubsection{KRB5\_PAC\_CLIENT\_INFO}
21337\label{\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_INFO:krb5-pac-client-info}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_INFO::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_INFO:krb5-pac-client-info-data}}\index{KRB5\_PAC\_CLIENT\_INFO (built-in variable)}
21338
21339\begin{fulllineitems}
21340\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_INFO:KRB5_PAC_CLIENT_INFO}}\pysigline{\sphinxbfcode{KRB5\_PAC\_CLIENT\_INFO}}
21341\end{fulllineitems}
21342
21343
21344Client name and ticket info.
21345
21346
21347\begin{savenotes}\sphinxattablestart
21348\centering
21349\begin{tabulary}{\linewidth}[t]{|T|T|}
21350\hline
21351
21352\sphinxcode{KRB5\_PAC\_CLIENT\_INFO}
21353&
21354\sphinxcode{10}
21355\\
21356\hline
21357\end{tabulary}
21358\par
21359\sphinxattableend\end{savenotes}
21360
21361
21362\subsubsection{KRB5\_PAC\_CREDENTIALS\_INFO}
21363\label{\detokenize{appdev/refs/macros/KRB5_PAC_CREDENTIALS_INFO::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_CREDENTIALS_INFO:krb5-pac-credentials-info}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_CREDENTIALS_INFO:krb5-pac-credentials-info-data}}\index{KRB5\_PAC\_CREDENTIALS\_INFO (built-in variable)}
21364
21365\begin{fulllineitems}
21366\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_CREDENTIALS_INFO:KRB5_PAC_CREDENTIALS_INFO}}\pysigline{\sphinxbfcode{KRB5\_PAC\_CREDENTIALS\_INFO}}
21367\end{fulllineitems}
21368
21369
21370Credentials information.
21371
21372
21373\begin{savenotes}\sphinxattablestart
21374\centering
21375\begin{tabulary}{\linewidth}[t]{|T|T|}
21376\hline
21377
21378\sphinxcode{KRB5\_PAC\_CREDENTIALS\_INFO}
21379&
21380\sphinxcode{2}
21381\\
21382\hline
21383\end{tabulary}
21384\par
21385\sphinxattableend\end{savenotes}
21386
21387
21388\subsubsection{KRB5\_PAC\_DELEGATION\_INFO}
21389\label{\detokenize{appdev/refs/macros/KRB5_PAC_DELEGATION_INFO::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_DELEGATION_INFO:krb5-pac-delegation-info-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_DELEGATION_INFO:krb5-pac-delegation-info}}\index{KRB5\_PAC\_DELEGATION\_INFO (built-in variable)}
21390
21391\begin{fulllineitems}
21392\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_DELEGATION_INFO:KRB5_PAC_DELEGATION_INFO}}\pysigline{\sphinxbfcode{KRB5\_PAC\_DELEGATION\_INFO}}
21393\end{fulllineitems}
21394
21395
21396Constrained delegation info.
21397
21398
21399\begin{savenotes}\sphinxattablestart
21400\centering
21401\begin{tabulary}{\linewidth}[t]{|T|T|}
21402\hline
21403
21404\sphinxcode{KRB5\_PAC\_DELEGATION\_INFO}
21405&
21406\sphinxcode{11}
21407\\
21408\hline
21409\end{tabulary}
21410\par
21411\sphinxattableend\end{savenotes}
21412
21413
21414\subsubsection{KRB5\_PAC\_LOGON\_INFO}
21415\label{\detokenize{appdev/refs/macros/KRB5_PAC_LOGON_INFO:krb5-pac-logon-info}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_LOGON_INFO:krb5-pac-logon-info-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_LOGON_INFO::doc}}\index{KRB5\_PAC\_LOGON\_INFO (built-in variable)}
21416
21417\begin{fulllineitems}
21418\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_LOGON_INFO:KRB5_PAC_LOGON_INFO}}\pysigline{\sphinxbfcode{KRB5\_PAC\_LOGON\_INFO}}
21419\end{fulllineitems}
21420
21421
21422Logon information.
21423
21424
21425\begin{savenotes}\sphinxattablestart
21426\centering
21427\begin{tabulary}{\linewidth}[t]{|T|T|}
21428\hline
21429
21430\sphinxcode{KRB5\_PAC\_LOGON\_INFO}
21431&
21432\sphinxcode{1}
21433\\
21434\hline
21435\end{tabulary}
21436\par
21437\sphinxattableend\end{savenotes}
21438
21439
21440\subsubsection{KRB5\_PAC\_PRIVSVR\_CHECKSUM}
21441\label{\detokenize{appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM:krb5-pac-privsvr-checksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM:krb5-pac-privsvr-checksum}}\index{KRB5\_PAC\_PRIVSVR\_CHECKSUM (built-in variable)}
21442
21443\begin{fulllineitems}
21444\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM:KRB5_PAC_PRIVSVR_CHECKSUM}}\pysigline{\sphinxbfcode{KRB5\_PAC\_PRIVSVR\_CHECKSUM}}
21445\end{fulllineitems}
21446
21447
21448KDC checksum.
21449
21450
21451\begin{savenotes}\sphinxattablestart
21452\centering
21453\begin{tabulary}{\linewidth}[t]{|T|T|}
21454\hline
21455
21456\sphinxcode{KRB5\_PAC\_PRIVSVR\_CHECKSUM}
21457&
21458\sphinxcode{7}
21459\\
21460\hline
21461\end{tabulary}
21462\par
21463\sphinxattableend\end{savenotes}
21464
21465
21466\subsubsection{KRB5\_PAC\_SERVER\_CHECKSUM}
21467\label{\detokenize{appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM:krb5-pac-server-checksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM:krb5-pac-server-checksum}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM::doc}}\index{KRB5\_PAC\_SERVER\_CHECKSUM (built-in variable)}
21468
21469\begin{fulllineitems}
21470\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM:KRB5_PAC_SERVER_CHECKSUM}}\pysigline{\sphinxbfcode{KRB5\_PAC\_SERVER\_CHECKSUM}}
21471\end{fulllineitems}
21472
21473
21474Server checksum.
21475
21476
21477\begin{savenotes}\sphinxattablestart
21478\centering
21479\begin{tabulary}{\linewidth}[t]{|T|T|}
21480\hline
21481
21482\sphinxcode{KRB5\_PAC\_SERVER\_CHECKSUM}
21483&
21484\sphinxcode{6}
21485\\
21486\hline
21487\end{tabulary}
21488\par
21489\sphinxattableend\end{savenotes}
21490
21491
21492\subsubsection{KRB5\_PAC\_UPN\_DNS\_INFO}
21493\label{\detokenize{appdev/refs/macros/KRB5_PAC_UPN_DNS_INFO:krb5-pac-upn-dns-info-data}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_UPN_DNS_INFO::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PAC_UPN_DNS_INFO:krb5-pac-upn-dns-info}}\index{KRB5\_PAC\_UPN\_DNS\_INFO (built-in variable)}
21494
21495\begin{fulllineitems}
21496\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_UPN_DNS_INFO:KRB5_PAC_UPN_DNS_INFO}}\pysigline{\sphinxbfcode{KRB5\_PAC\_UPN\_DNS\_INFO}}
21497\end{fulllineitems}
21498
21499
21500User principal name and DNS info.
21501
21502
21503\begin{savenotes}\sphinxattablestart
21504\centering
21505\begin{tabulary}{\linewidth}[t]{|T|T|}
21506\hline
21507
21508\sphinxcode{KRB5\_PAC\_UPN\_DNS\_INFO}
21509&
21510\sphinxcode{12}
21511\\
21512\hline
21513\end{tabulary}
21514\par
21515\sphinxattableend\end{savenotes}
21516
21517
21518\subsubsection{KRB5\_PADATA\_AFS3\_SALT}
21519\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AFS3_SALT::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AFS3_SALT:krb5-padata-afs3-salt}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AFS3_SALT:krb5-padata-afs3-salt-data}}\index{KRB5\_PADATA\_AFS3\_SALT (built-in variable)}
21520
21521\begin{fulllineitems}
21522\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AFS3_SALT:KRB5_PADATA_AFS3_SALT}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_AFS3\_SALT}}
21523\end{fulllineitems}
21524
21525
21526Cygnus.
21527
21528RFC 4120, 3961
21529
21530
21531\begin{savenotes}\sphinxattablestart
21532\centering
21533\begin{tabulary}{\linewidth}[t]{|T|T|}
21534\hline
21535
21536\sphinxcode{KRB5\_PADATA\_AFS3\_SALT}
21537&
21538\sphinxcode{10}
21539\\
21540\hline
21541\end{tabulary}
21542\par
21543\sphinxattableend\end{savenotes}
21544
21545
21546\subsubsection{KRB5\_PADATA\_AP\_REQ}
21547\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AP_REQ::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AP_REQ:krb5-padata-ap-req-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AP_REQ:krb5-padata-ap-req}}\index{KRB5\_PADATA\_AP\_REQ (built-in variable)}
21548
21549\begin{fulllineitems}
21550\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AP_REQ:KRB5_PADATA_AP_REQ}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_AP\_REQ}}
21551\end{fulllineitems}
21552
21553
21554
21555\begin{savenotes}\sphinxattablestart
21556\centering
21557\begin{tabulary}{\linewidth}[t]{|T|T|}
21558\hline
21559
21560\sphinxcode{KRB5\_PADATA\_AP\_REQ}
21561&
21562\sphinxcode{1}
21563\\
21564\hline
21565\end{tabulary}
21566\par
21567\sphinxattableend\end{savenotes}
21568
21569
21570\subsubsection{KRB5\_PADATA\_AS\_CHECKSUM}
21571\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_CHECKSUM:krb5-padata-as-checksum}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_CHECKSUM:krb5-padata-as-checksum-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_CHECKSUM::doc}}\index{KRB5\_PADATA\_AS\_CHECKSUM (built-in variable)}
21572
21573\begin{fulllineitems}
21574\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_CHECKSUM:KRB5_PADATA_AS_CHECKSUM}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_AS\_CHECKSUM}}
21575\end{fulllineitems}
21576
21577
21578AS checksum.
21579
21580
21581\begin{savenotes}\sphinxattablestart
21582\centering
21583\begin{tabulary}{\linewidth}[t]{|T|T|}
21584\hline
21585
21586\sphinxcode{KRB5\_PADATA\_AS\_CHECKSUM}
21587&
21588\sphinxcode{132}
21589\\
21590\hline
21591\end{tabulary}
21592\par
21593\sphinxattableend\end{savenotes}
21594
21595
21596\subsubsection{KRB5\_PADATA\_AS\_FRESHNESS}
21597\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_FRESHNESS::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_FRESHNESS:krb5-padata-as-freshness-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_FRESHNESS:krb5-padata-as-freshness}}\index{KRB5\_PADATA\_AS\_FRESHNESS (built-in variable)}
21598
21599\begin{fulllineitems}
21600\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_FRESHNESS:KRB5_PADATA_AS_FRESHNESS}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_AS\_FRESHNESS}}
21601\end{fulllineitems}
21602
21603
21604RFC 8070.
21605
21606
21607\begin{savenotes}\sphinxattablestart
21608\centering
21609\begin{tabulary}{\linewidth}[t]{|T|T|}
21610\hline
21611
21612\sphinxcode{KRB5\_PADATA\_AS\_FRESHNESS}
21613&
21614\sphinxcode{150}
21615\\
21616\hline
21617\end{tabulary}
21618\par
21619\sphinxattableend\end{savenotes}
21620
21621
21622\subsubsection{KRB5\_PADATA\_ENCRYPTED\_CHALLENGE}
21623\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENCRYPTED_CHALLENGE:krb5-padata-encrypted-challenge-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENCRYPTED_CHALLENGE:krb5-padata-encrypted-challenge}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENCRYPTED_CHALLENGE::doc}}\index{KRB5\_PADATA\_ENCRYPTED\_CHALLENGE (built-in variable)}
21624
21625\begin{fulllineitems}
21626\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENCRYPTED_CHALLENGE:KRB5_PADATA_ENCRYPTED_CHALLENGE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_ENCRYPTED\_CHALLENGE}}
21627\end{fulllineitems}
21628
21629
21630RFC 6113.
21631
21632
21633\begin{savenotes}\sphinxattablestart
21634\centering
21635\begin{tabulary}{\linewidth}[t]{|T|T|}
21636\hline
21637
21638\sphinxcode{KRB5\_PADATA\_ENCRYPTED\_CHALLENGE}
21639&
21640\sphinxcode{138}
21641\\
21642\hline
21643\end{tabulary}
21644\par
21645\sphinxattableend\end{savenotes}
21646
21647
21648\subsubsection{KRB5\_PADATA\_ENC\_SANDIA\_SECURID}
21649\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_SANDIA_SECURID:krb5-padata-enc-sandia-securid-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_SANDIA_SECURID:krb5-padata-enc-sandia-securid}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_SANDIA_SECURID::doc}}\index{KRB5\_PADATA\_ENC\_SANDIA\_SECURID (built-in variable)}
21650
21651\begin{fulllineitems}
21652\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_SANDIA_SECURID:KRB5_PADATA_ENC_SANDIA_SECURID}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_ENC\_SANDIA\_SECURID}}
21653\end{fulllineitems}
21654
21655
21656SecurId passcode.
21657
21658RFC 4120
21659
21660
21661\begin{savenotes}\sphinxattablestart
21662\centering
21663\begin{tabulary}{\linewidth}[t]{|T|T|}
21664\hline
21665
21666\sphinxcode{KRB5\_PADATA\_ENC\_SANDIA\_SECURID}
21667&
21668\sphinxcode{6}
21669\\
21670\hline
21671\end{tabulary}
21672\par
21673\sphinxattableend\end{savenotes}
21674
21675
21676\subsubsection{KRB5\_PADATA\_ENC\_TIMESTAMP}
21677\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_TIMESTAMP::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_TIMESTAMP:krb5-padata-enc-timestamp}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_TIMESTAMP:krb5-padata-enc-timestamp-data}}\index{KRB5\_PADATA\_ENC\_TIMESTAMP (built-in variable)}
21678
21679\begin{fulllineitems}
21680\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_TIMESTAMP:KRB5_PADATA_ENC_TIMESTAMP}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_ENC\_TIMESTAMP}}
21681\end{fulllineitems}
21682
21683
21684RFC 4120.
21685
21686
21687\begin{savenotes}\sphinxattablestart
21688\centering
21689\begin{tabulary}{\linewidth}[t]{|T|T|}
21690\hline
21691
21692\sphinxcode{KRB5\_PADATA\_ENC\_TIMESTAMP}
21693&
21694\sphinxcode{2}
21695\\
21696\hline
21697\end{tabulary}
21698\par
21699\sphinxattableend\end{savenotes}
21700
21701
21702\subsubsection{KRB5\_PADATA\_ENC\_UNIX\_TIME}
21703\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_UNIX_TIME:krb5-padata-enc-unix-time}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_UNIX_TIME:krb5-padata-enc-unix-time-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_UNIX_TIME::doc}}\index{KRB5\_PADATA\_ENC\_UNIX\_TIME (built-in variable)}
21704
21705\begin{fulllineitems}
21706\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_UNIX_TIME:KRB5_PADATA_ENC_UNIX_TIME}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_ENC\_UNIX\_TIME}}
21707\end{fulllineitems}
21708
21709
21710timestamp encrypted in key.
21711
21712RFC 4120
21713
21714
21715\begin{savenotes}\sphinxattablestart
21716\centering
21717\begin{tabulary}{\linewidth}[t]{|T|T|}
21718\hline
21719
21720\sphinxcode{KRB5\_PADATA\_ENC\_UNIX\_TIME}
21721&
21722\sphinxcode{5}
21723\\
21724\hline
21725\end{tabulary}
21726\par
21727\sphinxattableend\end{savenotes}
21728
21729
21730\subsubsection{KRB5\_PADATA\_ETYPE\_INFO}
21731\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO:krb5-padata-etype-info}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO:krb5-padata-etype-info-data}}\index{KRB5\_PADATA\_ETYPE\_INFO (built-in variable)}
21732
21733\begin{fulllineitems}
21734\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO:KRB5_PADATA_ETYPE_INFO}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_ETYPE\_INFO}}
21735\end{fulllineitems}
21736
21737
21738Etype info for preauth.
21739
21740RFC 4120
21741
21742
21743\begin{savenotes}\sphinxattablestart
21744\centering
21745\begin{tabulary}{\linewidth}[t]{|T|T|}
21746\hline
21747
21748\sphinxcode{KRB5\_PADATA\_ETYPE\_INFO}
21749&
21750\sphinxcode{11}
21751\\
21752\hline
21753\end{tabulary}
21754\par
21755\sphinxattableend\end{savenotes}
21756
21757
21758\subsubsection{KRB5\_PADATA\_ETYPE\_INFO2}
21759\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO2:krb5-padata-etype-info2-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO2:krb5-padata-etype-info2}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO2::doc}}\index{KRB5\_PADATA\_ETYPE\_INFO2 (built-in variable)}
21760
21761\begin{fulllineitems}
21762\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO2:KRB5_PADATA_ETYPE_INFO2}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_ETYPE\_INFO2}}
21763\end{fulllineitems}
21764
21765
21766RFC 4120.
21767
21768
21769\begin{savenotes}\sphinxattablestart
21770\centering
21771\begin{tabulary}{\linewidth}[t]{|T|T|}
21772\hline
21773
21774\sphinxcode{KRB5\_PADATA\_ETYPE\_INFO2}
21775&
21776\sphinxcode{19}
21777\\
21778\hline
21779\end{tabulary}
21780\par
21781\sphinxattableend\end{savenotes}
21782
21783
21784\subsubsection{KRB5\_PADATA\_FOR\_USER}
21785\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FOR_USER:krb5-padata-for-user}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FOR_USER::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FOR_USER:krb5-padata-for-user-data}}\index{KRB5\_PADATA\_FOR\_USER (built-in variable)}
21786
21787\begin{fulllineitems}
21788\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FOR_USER:KRB5_PADATA_FOR_USER}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_FOR\_USER}}
21789\end{fulllineitems}
21790
21791
21792username protocol transition request
21793
21794
21795\begin{savenotes}\sphinxattablestart
21796\centering
21797\begin{tabulary}{\linewidth}[t]{|T|T|}
21798\hline
21799
21800\sphinxcode{KRB5\_PADATA\_FOR\_USER}
21801&
21802\sphinxcode{129}
21803\\
21804\hline
21805\end{tabulary}
21806\par
21807\sphinxattableend\end{savenotes}
21808
21809
21810\subsubsection{KRB5\_PADATA\_FX\_COOKIE}
21811\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_COOKIE:krb5-padata-fx-cookie}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_COOKIE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_COOKIE:krb5-padata-fx-cookie-data}}\index{KRB5\_PADATA\_FX\_COOKIE (built-in variable)}
21812
21813\begin{fulllineitems}
21814\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_COOKIE:KRB5_PADATA_FX_COOKIE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_FX\_COOKIE}}
21815\end{fulllineitems}
21816
21817
21818RFC 6113.
21819
21820
21821\begin{savenotes}\sphinxattablestart
21822\centering
21823\begin{tabulary}{\linewidth}[t]{|T|T|}
21824\hline
21825
21826\sphinxcode{KRB5\_PADATA\_FX\_COOKIE}
21827&
21828\sphinxcode{133}
21829\\
21830\hline
21831\end{tabulary}
21832\par
21833\sphinxattableend\end{savenotes}
21834
21835
21836\subsubsection{KRB5\_PADATA\_FX\_ERROR}
21837\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_ERROR:krb5-padata-fx-error}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_ERROR::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_ERROR:krb5-padata-fx-error-data}}\index{KRB5\_PADATA\_FX\_ERROR (built-in variable)}
21838
21839\begin{fulllineitems}
21840\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_ERROR:KRB5_PADATA_FX_ERROR}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_FX\_ERROR}}
21841\end{fulllineitems}
21842
21843
21844RFC 6113.
21845
21846
21847\begin{savenotes}\sphinxattablestart
21848\centering
21849\begin{tabulary}{\linewidth}[t]{|T|T|}
21850\hline
21851
21852\sphinxcode{KRB5\_PADATA\_FX\_ERROR}
21853&
21854\sphinxcode{137}
21855\\
21856\hline
21857\end{tabulary}
21858\par
21859\sphinxattableend\end{savenotes}
21860
21861
21862\subsubsection{KRB5\_PADATA\_FX\_FAST}
21863\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_FAST::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_FAST:krb5-padata-fx-fast}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_FAST:krb5-padata-fx-fast-data}}\index{KRB5\_PADATA\_FX\_FAST (built-in variable)}
21864
21865\begin{fulllineitems}
21866\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_FAST:KRB5_PADATA_FX_FAST}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_FX\_FAST}}
21867\end{fulllineitems}
21868
21869
21870RFC 6113.
21871
21872
21873\begin{savenotes}\sphinxattablestart
21874\centering
21875\begin{tabulary}{\linewidth}[t]{|T|T|}
21876\hline
21877
21878\sphinxcode{KRB5\_PADATA\_FX\_FAST}
21879&
21880\sphinxcode{136}
21881\\
21882\hline
21883\end{tabulary}
21884\par
21885\sphinxattableend\end{savenotes}
21886
21887
21888\subsubsection{KRB5\_PADATA\_GET\_FROM\_TYPED\_DATA}
21889\label{\detokenize{appdev/refs/macros/KRB5_PADATA_GET_FROM_TYPED_DATA:krb5-padata-get-from-typed-data-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_GET_FROM_TYPED_DATA::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_GET_FROM_TYPED_DATA:krb5-padata-get-from-typed-data}}\index{KRB5\_PADATA\_GET\_FROM\_TYPED\_DATA (built-in variable)}
21890
21891\begin{fulllineitems}
21892\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_GET_FROM_TYPED_DATA:KRB5_PADATA_GET_FROM_TYPED_DATA}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_GET\_FROM\_TYPED\_DATA}}
21893\end{fulllineitems}
21894
21895
21896Embedded in typed data.
21897
21898RFC 4120
21899
21900
21901\begin{savenotes}\sphinxattablestart
21902\centering
21903\begin{tabulary}{\linewidth}[t]{|T|T|}
21904\hline
21905
21906\sphinxcode{KRB5\_PADATA\_GET\_FROM\_TYPED\_DATA}
21907&
21908\sphinxcode{22}
21909\\
21910\hline
21911\end{tabulary}
21912\par
21913\sphinxattableend\end{savenotes}
21914
21915
21916\subsubsection{KRB5\_PADATA\_NONE}
21917\label{\detokenize{appdev/refs/macros/KRB5_PADATA_NONE:krb5-padata-none-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_NONE:krb5-padata-none}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_NONE::doc}}\index{KRB5\_PADATA\_NONE (built-in variable)}
21918
21919\begin{fulllineitems}
21920\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_NONE:KRB5_PADATA_NONE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_NONE}}
21921\end{fulllineitems}
21922
21923
21924
21925\begin{savenotes}\sphinxattablestart
21926\centering
21927\begin{tabulary}{\linewidth}[t]{|T|T|}
21928\hline
21929
21930\sphinxcode{KRB5\_PADATA\_NONE}
21931&
21932\sphinxcode{0}
21933\\
21934\hline
21935\end{tabulary}
21936\par
21937\sphinxattableend\end{savenotes}
21938
21939
21940\subsubsection{KRB5\_PADATA\_OSF\_DCE}
21941\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OSF_DCE:krb5-padata-osf-dce}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OSF_DCE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OSF_DCE:krb5-padata-osf-dce-data}}\index{KRB5\_PADATA\_OSF\_DCE (built-in variable)}
21942
21943\begin{fulllineitems}
21944\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OSF_DCE:KRB5_PADATA_OSF_DCE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_OSF\_DCE}}
21945\end{fulllineitems}
21946
21947
21948OSF DCE.
21949
21950RFC 4120
21951
21952
21953\begin{savenotes}\sphinxattablestart
21954\centering
21955\begin{tabulary}{\linewidth}[t]{|T|T|}
21956\hline
21957
21958\sphinxcode{KRB5\_PADATA\_OSF\_DCE}
21959&
21960\sphinxcode{8}
21961\\
21962\hline
21963\end{tabulary}
21964\par
21965\sphinxattableend\end{savenotes}
21966
21967
21968\subsubsection{KRB5\_PADATA\_OTP\_CHALLENGE}
21969\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_CHALLENGE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_CHALLENGE:krb5-padata-otp-challenge}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_CHALLENGE:krb5-padata-otp-challenge-data}}\index{KRB5\_PADATA\_OTP\_CHALLENGE (built-in variable)}
21970
21971\begin{fulllineitems}
21972\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_CHALLENGE:KRB5_PADATA_OTP_CHALLENGE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_OTP\_CHALLENGE}}
21973\end{fulllineitems}
21974
21975
21976RFC 6560 section 4.1.
21977
21978
21979\begin{savenotes}\sphinxattablestart
21980\centering
21981\begin{tabulary}{\linewidth}[t]{|T|T|}
21982\hline
21983
21984\sphinxcode{KRB5\_PADATA\_OTP\_CHALLENGE}
21985&
21986\sphinxcode{141}
21987\\
21988\hline
21989\end{tabulary}
21990\par
21991\sphinxattableend\end{savenotes}
21992
21993
21994\subsubsection{KRB5\_PADATA\_OTP\_PIN\_CHANGE}
21995\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_PIN_CHANGE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_PIN_CHANGE:krb5-padata-otp-pin-change}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_PIN_CHANGE:krb5-padata-otp-pin-change-data}}\index{KRB5\_PADATA\_OTP\_PIN\_CHANGE (built-in variable)}
21996
21997\begin{fulllineitems}
21998\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_PIN_CHANGE:KRB5_PADATA_OTP_PIN_CHANGE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_OTP\_PIN\_CHANGE}}
21999\end{fulllineitems}
22000
22001
22002RFC 6560 section 4.3.
22003
22004
22005\begin{savenotes}\sphinxattablestart
22006\centering
22007\begin{tabulary}{\linewidth}[t]{|T|T|}
22008\hline
22009
22010\sphinxcode{KRB5\_PADATA\_OTP\_PIN\_CHANGE}
22011&
22012\sphinxcode{144}
22013\\
22014\hline
22015\end{tabulary}
22016\par
22017\sphinxattableend\end{savenotes}
22018
22019
22020\subsubsection{KRB5\_PADATA\_OTP\_REQUEST}
22021\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_REQUEST:krb5-padata-otp-request}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_REQUEST::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_REQUEST:krb5-padata-otp-request-data}}\index{KRB5\_PADATA\_OTP\_REQUEST (built-in variable)}
22022
22023\begin{fulllineitems}
22024\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_REQUEST:KRB5_PADATA_OTP_REQUEST}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_OTP\_REQUEST}}
22025\end{fulllineitems}
22026
22027
22028RFC 6560 section 4.2.
22029
22030
22031\begin{savenotes}\sphinxattablestart
22032\centering
22033\begin{tabulary}{\linewidth}[t]{|T|T|}
22034\hline
22035
22036\sphinxcode{KRB5\_PADATA\_OTP\_REQUEST}
22037&
22038\sphinxcode{142}
22039\\
22040\hline
22041\end{tabulary}
22042\par
22043\sphinxattableend\end{savenotes}
22044
22045
22046\subsubsection{KRB5\_PADATA\_PAC\_OPTIONS}
22047\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_OPTIONS::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_OPTIONS:krb5-padata-pac-options}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_OPTIONS:krb5-padata-pac-options-data}}\index{KRB5\_PADATA\_PAC\_OPTIONS (built-in variable)}
22048
22049\begin{fulllineitems}
22050\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_OPTIONS:KRB5_PADATA_PAC_OPTIONS}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PAC\_OPTIONS}}
22051\end{fulllineitems}
22052
22053
22054MS-KILE and MS-SFU.
22055
22056
22057\begin{savenotes}\sphinxattablestart
22058\centering
22059\begin{tabulary}{\linewidth}[t]{|T|T|}
22060\hline
22061
22062\sphinxcode{KRB5\_PADATA\_PAC\_OPTIONS}
22063&
22064\sphinxcode{167}
22065\\
22066\hline
22067\end{tabulary}
22068\par
22069\sphinxattableend\end{savenotes}
22070
22071
22072\subsubsection{KRB5\_PADATA\_PAC\_REQUEST}
22073\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_REQUEST:krb5-padata-pac-request-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_REQUEST:krb5-padata-pac-request}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_REQUEST::doc}}\index{KRB5\_PADATA\_PAC\_REQUEST (built-in variable)}
22074
22075\begin{fulllineitems}
22076\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_REQUEST:KRB5_PADATA_PAC_REQUEST}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PAC\_REQUEST}}
22077\end{fulllineitems}
22078
22079
22080include Windows PAC
22081
22082
22083\begin{savenotes}\sphinxattablestart
22084\centering
22085\begin{tabulary}{\linewidth}[t]{|T|T|}
22086\hline
22087
22088\sphinxcode{KRB5\_PADATA\_PAC\_REQUEST}
22089&
22090\sphinxcode{128}
22091\\
22092\hline
22093\end{tabulary}
22094\par
22095\sphinxattableend\end{savenotes}
22096
22097
22098\subsubsection{KRB5\_PADATA\_PKINIT\_KX}
22099\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PKINIT_KX:krb5-padata-pkinit-kx}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PKINIT_KX:krb5-padata-pkinit-kx-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PKINIT_KX::doc}}\index{KRB5\_PADATA\_PKINIT\_KX (built-in variable)}
22100
22101\begin{fulllineitems}
22102\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PKINIT_KX:KRB5_PADATA_PKINIT_KX}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PKINIT\_KX}}
22103\end{fulllineitems}
22104
22105
22106RFC 6112.
22107
22108
22109\begin{savenotes}\sphinxattablestart
22110\centering
22111\begin{tabulary}{\linewidth}[t]{|T|T|}
22112\hline
22113
22114\sphinxcode{KRB5\_PADATA\_PKINIT\_KX}
22115&
22116\sphinxcode{147}
22117\\
22118\hline
22119\end{tabulary}
22120\par
22121\sphinxattableend\end{savenotes}
22122
22123
22124\subsubsection{KRB5\_PADATA\_PK\_AS\_REP}
22125\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP:krb5-padata-pk-as-rep-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP:krb5-padata-pk-as-rep}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP::doc}}\index{KRB5\_PADATA\_PK\_AS\_REP (built-in variable)}
22126
22127\begin{fulllineitems}
22128\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP:KRB5_PADATA_PK_AS_REP}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PK\_AS\_REP}}
22129\end{fulllineitems}
22130
22131
22132PKINIT.
22133
22134RFC 4556
22135
22136
22137\begin{savenotes}\sphinxattablestart
22138\centering
22139\begin{tabulary}{\linewidth}[t]{|T|T|}
22140\hline
22141
22142\sphinxcode{KRB5\_PADATA\_PK\_AS\_REP}
22143&
22144\sphinxcode{17}
22145\\
22146\hline
22147\end{tabulary}
22148\par
22149\sphinxattableend\end{savenotes}
22150
22151
22152\subsubsection{KRB5\_PADATA\_PK\_AS\_REP\_OLD}
22153\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP_OLD:krb5-padata-pk-as-rep-old-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP_OLD::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP_OLD:krb5-padata-pk-as-rep-old}}\index{KRB5\_PADATA\_PK\_AS\_REP\_OLD (built-in variable)}
22154
22155\begin{fulllineitems}
22156\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP_OLD:KRB5_PADATA_PK_AS_REP_OLD}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PK\_AS\_REP\_OLD}}
22157\end{fulllineitems}
22158
22159
22160PKINIT.
22161
22162
22163\begin{savenotes}\sphinxattablestart
22164\centering
22165\begin{tabulary}{\linewidth}[t]{|T|T|}
22166\hline
22167
22168\sphinxcode{KRB5\_PADATA\_PK\_AS\_REP\_OLD}
22169&
22170\sphinxcode{15}
22171\\
22172\hline
22173\end{tabulary}
22174\par
22175\sphinxattableend\end{savenotes}
22176
22177
22178\subsubsection{KRB5\_PADATA\_PK\_AS\_REQ}
22179\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ:krb5-padata-pk-as-req}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ:krb5-padata-pk-as-req-data}}\index{KRB5\_PADATA\_PK\_AS\_REQ (built-in variable)}
22180
22181\begin{fulllineitems}
22182\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ:KRB5_PADATA_PK_AS_REQ}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PK\_AS\_REQ}}
22183\end{fulllineitems}
22184
22185
22186PKINIT.
22187
22188RFC 4556
22189
22190
22191\begin{savenotes}\sphinxattablestart
22192\centering
22193\begin{tabulary}{\linewidth}[t]{|T|T|}
22194\hline
22195
22196\sphinxcode{KRB5\_PADATA\_PK\_AS\_REQ}
22197&
22198\sphinxcode{16}
22199\\
22200\hline
22201\end{tabulary}
22202\par
22203\sphinxattableend\end{savenotes}
22204
22205
22206\subsubsection{KRB5\_PADATA\_PK\_AS\_REQ\_OLD}
22207\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ_OLD:krb5-padata-pk-as-req-old}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ_OLD:krb5-padata-pk-as-req-old-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ_OLD::doc}}\index{KRB5\_PADATA\_PK\_AS\_REQ\_OLD (built-in variable)}
22208
22209\begin{fulllineitems}
22210\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ_OLD:KRB5_PADATA_PK_AS_REQ_OLD}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PK\_AS\_REQ\_OLD}}
22211\end{fulllineitems}
22212
22213
22214PKINIT.
22215
22216
22217\begin{savenotes}\sphinxattablestart
22218\centering
22219\begin{tabulary}{\linewidth}[t]{|T|T|}
22220\hline
22221
22222\sphinxcode{KRB5\_PADATA\_PK\_AS\_REQ\_OLD}
22223&
22224\sphinxcode{14}
22225\\
22226\hline
22227\end{tabulary}
22228\par
22229\sphinxattableend\end{savenotes}
22230
22231
22232\subsubsection{KRB5\_PADATA\_PW\_SALT}
22233\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PW_SALT:krb5-padata-pw-salt-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PW_SALT:krb5-padata-pw-salt}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PW_SALT::doc}}\index{KRB5\_PADATA\_PW\_SALT (built-in variable)}
22234
22235\begin{fulllineitems}
22236\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PW_SALT:KRB5_PADATA_PW_SALT}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PW\_SALT}}
22237\end{fulllineitems}
22238
22239
22240RFC 4120.
22241
22242
22243\begin{savenotes}\sphinxattablestart
22244\centering
22245\begin{tabulary}{\linewidth}[t]{|T|T|}
22246\hline
22247
22248\sphinxcode{KRB5\_PADATA\_PW\_SALT}
22249&
22250\sphinxcode{3}
22251\\
22252\hline
22253\end{tabulary}
22254\par
22255\sphinxattableend\end{savenotes}
22256
22257
22258\subsubsection{KRB5\_PADATA\_REFERRAL}
22259\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REFERRAL:krb5-padata-referral}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REFERRAL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REFERRAL:krb5-padata-referral-data}}\index{KRB5\_PADATA\_REFERRAL (built-in variable)}
22260
22261\begin{fulllineitems}
22262\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REFERRAL:KRB5_PADATA_REFERRAL}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_REFERRAL}}
22263\end{fulllineitems}
22264
22265
22266draft referral system
22267
22268
22269\begin{savenotes}\sphinxattablestart
22270\centering
22271\begin{tabulary}{\linewidth}[t]{|T|T|}
22272\hline
22273
22274\sphinxcode{KRB5\_PADATA\_REFERRAL}
22275&
22276\sphinxcode{25}
22277\\
22278\hline
22279\end{tabulary}
22280\par
22281\sphinxattableend\end{savenotes}
22282
22283
22284\subsubsection{KRB5\_PADATA\_S4U\_X509\_USER}
22285\label{\detokenize{appdev/refs/macros/KRB5_PADATA_S4U_X509_USER:krb5-padata-s4u-x509-user-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_S4U_X509_USER::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_S4U_X509_USER:krb5-padata-s4u-x509-user}}\index{KRB5\_PADATA\_S4U\_X509\_USER (built-in variable)}
22286
22287\begin{fulllineitems}
22288\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_S4U_X509_USER:KRB5_PADATA_S4U_X509_USER}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_S4U\_X509\_USER}}
22289\end{fulllineitems}
22290
22291
22292certificate protocol transition request
22293
22294
22295\begin{savenotes}\sphinxattablestart
22296\centering
22297\begin{tabulary}{\linewidth}[t]{|T|T|}
22298\hline
22299
22300\sphinxcode{KRB5\_PADATA\_S4U\_X509\_USER}
22301&
22302\sphinxcode{130}
22303\\
22304\hline
22305\end{tabulary}
22306\par
22307\sphinxattableend\end{savenotes}
22308
22309
22310\subsubsection{KRB5\_PADATA\_SAM\_CHALLENGE}
22311\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE:krb5-padata-sam-challenge-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE:krb5-padata-sam-challenge}}\index{KRB5\_PADATA\_SAM\_CHALLENGE (built-in variable)}
22312
22313\begin{fulllineitems}
22314\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE:KRB5_PADATA_SAM_CHALLENGE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SAM\_CHALLENGE}}
22315\end{fulllineitems}
22316
22317
22318SAM/OTP.
22319
22320
22321\begin{savenotes}\sphinxattablestart
22322\centering
22323\begin{tabulary}{\linewidth}[t]{|T|T|}
22324\hline
22325
22326\sphinxcode{KRB5\_PADATA\_SAM\_CHALLENGE}
22327&
22328\sphinxcode{12}
22329\\
22330\hline
22331\end{tabulary}
22332\par
22333\sphinxattableend\end{savenotes}
22334
22335
22336\subsubsection{KRB5\_PADATA\_SAM\_CHALLENGE\_2}
22337\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE_2:krb5-padata-sam-challenge-2-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE_2:krb5-padata-sam-challenge-2}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE_2::doc}}\index{KRB5\_PADATA\_SAM\_CHALLENGE\_2 (built-in variable)}
22338
22339\begin{fulllineitems}
22340\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE_2:KRB5_PADATA_SAM_CHALLENGE_2}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SAM\_CHALLENGE\_2}}
22341\end{fulllineitems}
22342
22343
22344draft challenge system, updated
22345
22346
22347\begin{savenotes}\sphinxattablestart
22348\centering
22349\begin{tabulary}{\linewidth}[t]{|T|T|}
22350\hline
22351
22352\sphinxcode{KRB5\_PADATA\_SAM\_CHALLENGE\_2}
22353&
22354\sphinxcode{30}
22355\\
22356\hline
22357\end{tabulary}
22358\par
22359\sphinxattableend\end{savenotes}
22360
22361
22362\subsubsection{KRB5\_PADATA\_SAM\_REDIRECT}
22363\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_REDIRECT::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_REDIRECT:krb5-padata-sam-redirect-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_REDIRECT:krb5-padata-sam-redirect}}\index{KRB5\_PADATA\_SAM\_REDIRECT (built-in variable)}
22364
22365\begin{fulllineitems}
22366\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_REDIRECT:KRB5_PADATA_SAM_REDIRECT}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SAM\_REDIRECT}}
22367\end{fulllineitems}
22368
22369
22370SAM/OTP.
22371
22372RFC 4120
22373
22374
22375\begin{savenotes}\sphinxattablestart
22376\centering
22377\begin{tabulary}{\linewidth}[t]{|T|T|}
22378\hline
22379
22380\sphinxcode{KRB5\_PADATA\_SAM\_REDIRECT}
22381&
22382\sphinxcode{21}
22383\\
22384\hline
22385\end{tabulary}
22386\par
22387\sphinxattableend\end{savenotes}
22388
22389
22390\subsubsection{KRB5\_PADATA\_SAM\_RESPONSE}
22391\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE:krb5-padata-sam-response-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE:krb5-padata-sam-response}}\index{KRB5\_PADATA\_SAM\_RESPONSE (built-in variable)}
22392
22393\begin{fulllineitems}
22394\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE:KRB5_PADATA_SAM_RESPONSE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SAM\_RESPONSE}}
22395\end{fulllineitems}
22396
22397
22398SAM/OTP.
22399
22400
22401\begin{savenotes}\sphinxattablestart
22402\centering
22403\begin{tabulary}{\linewidth}[t]{|T|T|}
22404\hline
22405
22406\sphinxcode{KRB5\_PADATA\_SAM\_RESPONSE}
22407&
22408\sphinxcode{13}
22409\\
22410\hline
22411\end{tabulary}
22412\par
22413\sphinxattableend\end{savenotes}
22414
22415
22416\subsubsection{KRB5\_PADATA\_SAM\_RESPONSE\_2}
22417\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE_2::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE_2:krb5-padata-sam-response-2}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE_2:krb5-padata-sam-response-2-data}}\index{KRB5\_PADATA\_SAM\_RESPONSE\_2 (built-in variable)}
22418
22419\begin{fulllineitems}
22420\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE_2:KRB5_PADATA_SAM_RESPONSE_2}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SAM\_RESPONSE\_2}}
22421\end{fulllineitems}
22422
22423
22424draft challenge system, updated
22425
22426
22427\begin{savenotes}\sphinxattablestart
22428\centering
22429\begin{tabulary}{\linewidth}[t]{|T|T|}
22430\hline
22431
22432\sphinxcode{KRB5\_PADATA\_SAM\_RESPONSE\_2}
22433&
22434\sphinxcode{31}
22435\\
22436\hline
22437\end{tabulary}
22438\par
22439\sphinxattableend\end{savenotes}
22440
22441
22442\subsubsection{KRB5\_PADATA\_SESAME}
22443\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SESAME::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SESAME:krb5-padata-sesame}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SESAME:krb5-padata-sesame-data}}\index{KRB5\_PADATA\_SESAME (built-in variable)}
22444
22445\begin{fulllineitems}
22446\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SESAME:KRB5_PADATA_SESAME}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SESAME}}
22447\end{fulllineitems}
22448
22449
22450Sesame project.
22451
22452RFC 4120
22453
22454
22455\begin{savenotes}\sphinxattablestart
22456\centering
22457\begin{tabulary}{\linewidth}[t]{|T|T|}
22458\hline
22459
22460\sphinxcode{KRB5\_PADATA\_SESAME}
22461&
22462\sphinxcode{7}
22463\\
22464\hline
22465\end{tabulary}
22466\par
22467\sphinxattableend\end{savenotes}
22468
22469
22470\subsubsection{KRB5\_PADATA\_SPAKE}
22471\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SPAKE:krb5-padata-spake-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SPAKE:krb5-padata-spake}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SPAKE::doc}}\index{KRB5\_PADATA\_SPAKE (built-in variable)}
22472
22473\begin{fulllineitems}
22474\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SPAKE:KRB5_PADATA_SPAKE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SPAKE}}
22475\end{fulllineitems}
22476
22477
22478
22479\begin{savenotes}\sphinxattablestart
22480\centering
22481\begin{tabulary}{\linewidth}[t]{|T|T|}
22482\hline
22483
22484\sphinxcode{KRB5\_PADATA\_SPAKE}
22485&
22486\sphinxcode{151}
22487\\
22488\hline
22489\end{tabulary}
22490\par
22491\sphinxattableend\end{savenotes}
22492
22493
22494\subsubsection{KRB5\_PADATA\_SVR\_REFERRAL\_INFO}
22495\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SVR_REFERRAL_INFO::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SVR_REFERRAL_INFO:krb5-padata-svr-referral-info}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SVR_REFERRAL_INFO:krb5-padata-svr-referral-info-data}}\index{KRB5\_PADATA\_SVR\_REFERRAL\_INFO (built-in variable)}
22496
22497\begin{fulllineitems}
22498\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SVR_REFERRAL_INFO:KRB5_PADATA_SVR_REFERRAL_INFO}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SVR\_REFERRAL\_INFO}}
22499\end{fulllineitems}
22500
22501
22502Windows 2000 referrals.
22503
22504RFC 6820
22505
22506
22507\begin{savenotes}\sphinxattablestart
22508\centering
22509\begin{tabulary}{\linewidth}[t]{|T|T|}
22510\hline
22511
22512\sphinxcode{KRB5\_PADATA\_SVR\_REFERRAL\_INFO}
22513&
22514\sphinxcode{20}
22515\\
22516\hline
22517\end{tabulary}
22518\par
22519\sphinxattableend\end{savenotes}
22520
22521
22522\subsubsection{KRB5\_PADATA\_TGS\_REQ}
22523\label{\detokenize{appdev/refs/macros/KRB5_PADATA_TGS_REQ::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_TGS_REQ:krb5-padata-tgs-req}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_TGS_REQ:krb5-padata-tgs-req-data}}\index{KRB5\_PADATA\_TGS\_REQ (built-in variable)}
22524
22525\begin{fulllineitems}
22526\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_TGS_REQ:KRB5_PADATA_TGS_REQ}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_TGS\_REQ}}
22527\end{fulllineitems}
22528
22529
22530
22531\begin{savenotes}\sphinxattablestart
22532\centering
22533\begin{tabulary}{\linewidth}[t]{|T|T|}
22534\hline
22535
22536\sphinxcode{KRB5\_PADATA\_TGS\_REQ}
22537&
22538\sphinxcode{KRB5\_PADATA\_AP\_REQ}
22539\\
22540\hline
22541\end{tabulary}
22542\par
22543\sphinxattableend\end{savenotes}
22544
22545
22546\subsubsection{KRB5\_PADATA\_USE\_SPECIFIED\_KVNO}
22547\label{\detokenize{appdev/refs/macros/KRB5_PADATA_USE_SPECIFIED_KVNO:krb5-padata-use-specified-kvno}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_USE_SPECIFIED_KVNO:krb5-padata-use-specified-kvno-data}}\label{\detokenize{appdev/refs/macros/KRB5_PADATA_USE_SPECIFIED_KVNO::doc}}\index{KRB5\_PADATA\_USE\_SPECIFIED\_KVNO (built-in variable)}
22548
22549\begin{fulllineitems}
22550\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_USE_SPECIFIED_KVNO:KRB5_PADATA_USE_SPECIFIED_KVNO}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_USE\_SPECIFIED\_KVNO}}
22551\end{fulllineitems}
22552
22553
22554RFC 4120.
22555
22556
22557\begin{savenotes}\sphinxattablestart
22558\centering
22559\begin{tabulary}{\linewidth}[t]{|T|T|}
22560\hline
22561
22562\sphinxcode{KRB5\_PADATA\_USE\_SPECIFIED\_KVNO}
22563&
22564\sphinxcode{20}
22565\\
22566\hline
22567\end{tabulary}
22568\par
22569\sphinxattableend\end{savenotes}
22570
22571
22572\subsubsection{KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD}
22573\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD:krb5-principal-compare-casefold-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD:krb5-principal-compare-casefold}}\index{KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD (built-in variable)}
22574
22575\begin{fulllineitems}
22576\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD:KRB5_PRINCIPAL_COMPARE_CASEFOLD}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD}}
22577\end{fulllineitems}
22578
22579
22580case-insensitive
22581
22582
22583\begin{savenotes}\sphinxattablestart
22584\centering
22585\begin{tabulary}{\linewidth}[t]{|T|T|}
22586\hline
22587
22588\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD}
22589&
22590\sphinxcode{4}
22591\\
22592\hline
22593\end{tabulary}
22594\par
22595\sphinxattableend\end{savenotes}
22596
22597
22598\subsubsection{KRB5\_PRINCIPAL\_COMPARE\_ENTERPRISE}
22599\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_ENTERPRISE:krb5-principal-compare-enterprise}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_ENTERPRISE:krb5-principal-compare-enterprise-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_ENTERPRISE::doc}}\index{KRB5\_PRINCIPAL\_COMPARE\_ENTERPRISE (built-in variable)}
22600
22601\begin{fulllineitems}
22602\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_ENTERPRISE:KRB5_PRINCIPAL_COMPARE_ENTERPRISE}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_COMPARE\_ENTERPRISE}}
22603\end{fulllineitems}
22604
22605
22606UPNs as real principals.
22607
22608
22609\begin{savenotes}\sphinxattablestart
22610\centering
22611\begin{tabulary}{\linewidth}[t]{|T|T|}
22612\hline
22613
22614\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_ENTERPRISE}
22615&
22616\sphinxcode{2}
22617\\
22618\hline
22619\end{tabulary}
22620\par
22621\sphinxattableend\end{savenotes}
22622
22623
22624\subsubsection{KRB5\_PRINCIPAL\_COMPARE\_IGNORE\_REALM}
22625\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_IGNORE_REALM:krb5-principal-compare-ignore-realm}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_IGNORE_REALM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_IGNORE_REALM:krb5-principal-compare-ignore-realm-data}}\index{KRB5\_PRINCIPAL\_COMPARE\_IGNORE\_REALM (built-in variable)}
22626
22627\begin{fulllineitems}
22628\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_IGNORE_REALM:KRB5_PRINCIPAL_COMPARE_IGNORE_REALM}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_COMPARE\_IGNORE\_REALM}}
22629\end{fulllineitems}
22630
22631
22632ignore realm component
22633
22634
22635\begin{savenotes}\sphinxattablestart
22636\centering
22637\begin{tabulary}{\linewidth}[t]{|T|T|}
22638\hline
22639
22640\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_IGNORE\_REALM}
22641&
22642\sphinxcode{1}
22643\\
22644\hline
22645\end{tabulary}
22646\par
22647\sphinxattableend\end{savenotes}
22648
22649
22650\subsubsection{KRB5\_PRINCIPAL\_COMPARE\_UTF8}
22651\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8:krb5-principal-compare-utf8-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8:krb5-principal-compare-utf8}}\index{KRB5\_PRINCIPAL\_COMPARE\_UTF8 (built-in variable)}
22652
22653\begin{fulllineitems}
22654\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8:KRB5_PRINCIPAL_COMPARE_UTF8}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_COMPARE\_UTF8}}
22655\end{fulllineitems}
22656
22657
22658treat principals as UTF-8
22659
22660
22661\begin{savenotes}\sphinxattablestart
22662\centering
22663\begin{tabulary}{\linewidth}[t]{|T|T|}
22664\hline
22665
22666\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_UTF8}
22667&
22668\sphinxcode{8}
22669\\
22670\hline
22671\end{tabulary}
22672\par
22673\sphinxattableend\end{savenotes}
22674
22675
22676\subsubsection{KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE}
22677\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE:krb5-principal-parse-enterprise-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE:krb5-principal-parse-enterprise}}\index{KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE (built-in variable)}
22678
22679\begin{fulllineitems}
22680\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE:KRB5_PRINCIPAL_PARSE_ENTERPRISE}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE}}
22681\end{fulllineitems}
22682
22683
22684Create single-component enterprise principle.
22685
22686
22687\begin{savenotes}\sphinxattablestart
22688\centering
22689\begin{tabulary}{\linewidth}[t]{|T|T|}
22690\hline
22691
22692\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE}
22693&
22694\sphinxcode{0x4}
22695\\
22696\hline
22697\end{tabulary}
22698\par
22699\sphinxattableend\end{savenotes}
22700
22701
22702\subsubsection{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM}
22703\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_IGNORE_REALM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_IGNORE_REALM:krb5-principal-parse-ignore-realm}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_IGNORE_REALM:krb5-principal-parse-ignore-realm-data}}\index{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM (built-in variable)}
22704
22705\begin{fulllineitems}
22706\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_IGNORE_REALM:KRB5_PRINCIPAL_PARSE_IGNORE_REALM}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM}}
22707\end{fulllineitems}
22708
22709
22710Ignore realm if present.
22711
22712
22713\begin{savenotes}\sphinxattablestart
22714\centering
22715\begin{tabulary}{\linewidth}[t]{|T|T|}
22716\hline
22717
22718\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM}
22719&
22720\sphinxcode{0x8}
22721\\
22722\hline
22723\end{tabulary}
22724\par
22725\sphinxattableend\end{savenotes}
22726
22727
22728\subsubsection{KRB5\_PRINCIPAL\_PARSE\_NO\_DEF\_REALM}
22729\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_DEF_REALM:krb5-principal-parse-no-def-realm-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_DEF_REALM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_DEF_REALM:krb5-principal-parse-no-def-realm}}\index{KRB5\_PRINCIPAL\_PARSE\_NO\_DEF\_REALM (built-in variable)}
22730
22731\begin{fulllineitems}
22732\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_DEF_REALM:KRB5_PRINCIPAL_PARSE_NO_DEF_REALM}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_PARSE\_NO\_DEF\_REALM}}
22733\end{fulllineitems}
22734
22735
22736Don’t add default realm.
22737
22738
22739\begin{savenotes}\sphinxattablestart
22740\centering
22741\begin{tabulary}{\linewidth}[t]{|T|T|}
22742\hline
22743
22744\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_NO\_DEF\_REALM}
22745&
22746\sphinxcode{0x10}
22747\\
22748\hline
22749\end{tabulary}
22750\par
22751\sphinxattableend\end{savenotes}
22752
22753
22754\subsubsection{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM}
22755\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_REALM:krb5-principal-parse-no-realm-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_REALM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_REALM:krb5-principal-parse-no-realm}}\index{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM (built-in variable)}
22756
22757\begin{fulllineitems}
22758\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_REALM:KRB5_PRINCIPAL_PARSE_NO_REALM}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM}}
22759\end{fulllineitems}
22760
22761
22762Error if realm is present.
22763
22764
22765\begin{savenotes}\sphinxattablestart
22766\centering
22767\begin{tabulary}{\linewidth}[t]{|T|T|}
22768\hline
22769
22770\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM}
22771&
22772\sphinxcode{0x1}
22773\\
22774\hline
22775\end{tabulary}
22776\par
22777\sphinxattableend\end{savenotes}
22778
22779
22780\subsubsection{KRB5\_PRINCIPAL\_PARSE\_REQUIRE\_REALM}
22781\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_REQUIRE_REALM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_REQUIRE_REALM:krb5-principal-parse-require-realm}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_REQUIRE_REALM:krb5-principal-parse-require-realm-data}}\index{KRB5\_PRINCIPAL\_PARSE\_REQUIRE\_REALM (built-in variable)}
22782
22783\begin{fulllineitems}
22784\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_REQUIRE_REALM:KRB5_PRINCIPAL_PARSE_REQUIRE_REALM}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_PARSE\_REQUIRE\_REALM}}
22785\end{fulllineitems}
22786
22787
22788Error if realm is not present.
22789
22790
22791\begin{savenotes}\sphinxattablestart
22792\centering
22793\begin{tabulary}{\linewidth}[t]{|T|T|}
22794\hline
22795
22796\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_REQUIRE\_REALM}
22797&
22798\sphinxcode{0x2}
22799\\
22800\hline
22801\end{tabulary}
22802\par
22803\sphinxattableend\end{savenotes}
22804
22805
22806\subsubsection{KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY}
22807\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY:krb5-principal-unparse-display-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY:krb5-principal-unparse-display}}\index{KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY (built-in variable)}
22808
22809\begin{fulllineitems}
22810\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY:KRB5_PRINCIPAL_UNPARSE_DISPLAY}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY}}
22811\end{fulllineitems}
22812
22813
22814Don’t escape special characters.
22815
22816
22817\begin{savenotes}\sphinxattablestart
22818\centering
22819\begin{tabulary}{\linewidth}[t]{|T|T|}
22820\hline
22821
22822\sphinxcode{KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY}
22823&
22824\sphinxcode{0x4}
22825\\
22826\hline
22827\end{tabulary}
22828\par
22829\sphinxattableend\end{savenotes}
22830
22831
22832\subsubsection{KRB5\_PRINCIPAL\_UNPARSE\_NO\_REALM}
22833\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_NO_REALM:krb5-principal-unparse-no-realm}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_NO_REALM:krb5-principal-unparse-no-realm-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_NO_REALM::doc}}\index{KRB5\_PRINCIPAL\_UNPARSE\_NO\_REALM (built-in variable)}
22834
22835\begin{fulllineitems}
22836\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_NO_REALM:KRB5_PRINCIPAL_UNPARSE_NO_REALM}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_UNPARSE\_NO\_REALM}}
22837\end{fulllineitems}
22838
22839
22840Omit realm always.
22841
22842
22843\begin{savenotes}\sphinxattablestart
22844\centering
22845\begin{tabulary}{\linewidth}[t]{|T|T|}
22846\hline
22847
22848\sphinxcode{KRB5\_PRINCIPAL\_UNPARSE\_NO\_REALM}
22849&
22850\sphinxcode{0x2}
22851\\
22852\hline
22853\end{tabulary}
22854\par
22855\sphinxattableend\end{savenotes}
22856
22857
22858\subsubsection{KRB5\_PRINCIPAL\_UNPARSE\_SHORT}
22859\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_SHORT::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_SHORT:krb5-principal-unparse-short}}\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_SHORT:krb5-principal-unparse-short-data}}\index{KRB5\_PRINCIPAL\_UNPARSE\_SHORT (built-in variable)}
22860
22861\begin{fulllineitems}
22862\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_SHORT:KRB5_PRINCIPAL_UNPARSE_SHORT}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_UNPARSE\_SHORT}}
22863\end{fulllineitems}
22864
22865
22866Omit realm if it is the local realm.
22867
22868
22869\begin{savenotes}\sphinxattablestart
22870\centering
22871\begin{tabulary}{\linewidth}[t]{|T|T|}
22872\hline
22873
22874\sphinxcode{KRB5\_PRINCIPAL\_UNPARSE\_SHORT}
22875&
22876\sphinxcode{0x1}
22877\\
22878\hline
22879\end{tabulary}
22880\par
22881\sphinxattableend\end{savenotes}
22882
22883
22884\subsubsection{KRB5\_PRIV}
22885\label{\detokenize{appdev/refs/macros/KRB5_PRIV:krb5-priv-data}}\label{\detokenize{appdev/refs/macros/KRB5_PRIV::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PRIV:krb5-priv}}\index{KRB5\_PRIV (built-in variable)}
22886
22887\begin{fulllineitems}
22888\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRIV:KRB5_PRIV}}\pysigline{\sphinxbfcode{KRB5\_PRIV}}
22889\end{fulllineitems}
22890
22891
22892Private application message.
22893
22894
22895\begin{savenotes}\sphinxattablestart
22896\centering
22897\begin{tabulary}{\linewidth}[t]{|T|T|}
22898\hline
22899
22900\sphinxcode{KRB5\_PRIV}
22901&
22902\sphinxcode{((krb5\_msgtype)21)}
22903\\
22904\hline
22905\end{tabulary}
22906\par
22907\sphinxattableend\end{savenotes}
22908
22909
22910\subsubsection{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD}
22911\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD:krb5-prompt-type-new-password-data}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD:krb5-prompt-type-new-password}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD::doc}}\index{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD (built-in variable)}
22912
22913\begin{fulllineitems}
22914\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD:KRB5_PROMPT_TYPE_NEW_PASSWORD}}\pysigline{\sphinxbfcode{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD}}
22915\end{fulllineitems}
22916
22917
22918Prompt for new password (during password change)
22919
22920
22921\begin{savenotes}\sphinxattablestart
22922\centering
22923\begin{tabulary}{\linewidth}[t]{|T|T|}
22924\hline
22925
22926\sphinxcode{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD}
22927&
22928\sphinxcode{0x2}
22929\\
22930\hline
22931\end{tabulary}
22932\par
22933\sphinxattableend\end{savenotes}
22934
22935
22936\subsubsection{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD\_AGAIN}
22937\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD_AGAIN:krb5-prompt-type-new-password-again}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD_AGAIN:krb5-prompt-type-new-password-again-data}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD_AGAIN::doc}}\index{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD\_AGAIN (built-in variable)}
22938
22939\begin{fulllineitems}
22940\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD_AGAIN:KRB5_PROMPT_TYPE_NEW_PASSWORD_AGAIN}}\pysigline{\sphinxbfcode{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD\_AGAIN}}
22941\end{fulllineitems}
22942
22943
22944Prompt for new password again.
22945
22946
22947\begin{savenotes}\sphinxattablestart
22948\centering
22949\begin{tabulary}{\linewidth}[t]{|T|T|}
22950\hline
22951
22952\sphinxcode{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD\_AGAIN}
22953&
22954\sphinxcode{0x3}
22955\\
22956\hline
22957\end{tabulary}
22958\par
22959\sphinxattableend\end{savenotes}
22960
22961
22962\subsubsection{KRB5\_PROMPT\_TYPE\_PASSWORD}
22963\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PASSWORD:krb5-prompt-type-password-data}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PASSWORD::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PASSWORD:krb5-prompt-type-password}}\index{KRB5\_PROMPT\_TYPE\_PASSWORD (built-in variable)}
22964
22965\begin{fulllineitems}
22966\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PASSWORD:KRB5_PROMPT_TYPE_PASSWORD}}\pysigline{\sphinxbfcode{KRB5\_PROMPT\_TYPE\_PASSWORD}}
22967\end{fulllineitems}
22968
22969
22970Prompt for password.
22971
22972
22973\begin{savenotes}\sphinxattablestart
22974\centering
22975\begin{tabulary}{\linewidth}[t]{|T|T|}
22976\hline
22977
22978\sphinxcode{KRB5\_PROMPT\_TYPE\_PASSWORD}
22979&
22980\sphinxcode{0x1}
22981\\
22982\hline
22983\end{tabulary}
22984\par
22985\sphinxattableend\end{savenotes}
22986
22987
22988\subsubsection{KRB5\_PROMPT\_TYPE\_PREAUTH}
22989\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PREAUTH:krb5-prompt-type-preauth-data}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PREAUTH::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PREAUTH:krb5-prompt-type-preauth}}\index{KRB5\_PROMPT\_TYPE\_PREAUTH (built-in variable)}
22990
22991\begin{fulllineitems}
22992\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PREAUTH:KRB5_PROMPT_TYPE_PREAUTH}}\pysigline{\sphinxbfcode{KRB5\_PROMPT\_TYPE\_PREAUTH}}
22993\end{fulllineitems}
22994
22995
22996Prompt for preauthentication data (such as an OTP value)
22997
22998
22999\begin{savenotes}\sphinxattablestart
23000\centering
23001\begin{tabulary}{\linewidth}[t]{|T|T|}
23002\hline
23003
23004\sphinxcode{KRB5\_PROMPT\_TYPE\_PREAUTH}
23005&
23006\sphinxcode{0x4}
23007\\
23008\hline
23009\end{tabulary}
23010\par
23011\sphinxattableend\end{savenotes}
23012
23013
23014\subsubsection{KRB5\_PVNO}
23015\label{\detokenize{appdev/refs/macros/KRB5_PVNO:krb5-pvno-data}}\label{\detokenize{appdev/refs/macros/KRB5_PVNO::doc}}\label{\detokenize{appdev/refs/macros/KRB5_PVNO:krb5-pvno}}\index{KRB5\_PVNO (built-in variable)}
23016
23017\begin{fulllineitems}
23018\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PVNO:KRB5_PVNO}}\pysigline{\sphinxbfcode{KRB5\_PVNO}}
23019\end{fulllineitems}
23020
23021
23022Protocol version number.
23023
23024
23025\begin{savenotes}\sphinxattablestart
23026\centering
23027\begin{tabulary}{\linewidth}[t]{|T|T|}
23028\hline
23029
23030\sphinxcode{KRB5\_PVNO}
23031&
23032\sphinxcode{5}
23033\\
23034\hline
23035\end{tabulary}
23036\par
23037\sphinxattableend\end{savenotes}
23038
23039
23040\subsubsection{KRB5\_REALM\_BRANCH\_CHAR}
23041\label{\detokenize{appdev/refs/macros/KRB5_REALM_BRANCH_CHAR::doc}}\label{\detokenize{appdev/refs/macros/KRB5_REALM_BRANCH_CHAR:krb5-realm-branch-char}}\label{\detokenize{appdev/refs/macros/KRB5_REALM_BRANCH_CHAR:krb5-realm-branch-char-data}}\index{KRB5\_REALM\_BRANCH\_CHAR (built-in variable)}
23042
23043\begin{fulllineitems}
23044\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_REALM_BRANCH_CHAR:KRB5_REALM_BRANCH_CHAR}}\pysigline{\sphinxbfcode{KRB5\_REALM\_BRANCH\_CHAR}}
23045\end{fulllineitems}
23046
23047
23048
23049\begin{savenotes}\sphinxattablestart
23050\centering
23051\begin{tabulary}{\linewidth}[t]{|T|T|}
23052\hline
23053
23054\sphinxcode{KRB5\_REALM\_BRANCH\_CHAR}
23055&
23056\sphinxcode{'.'}
23057\\
23058\hline
23059\end{tabulary}
23060\par
23061\sphinxattableend\end{savenotes}
23062
23063
23064\subsubsection{KRB5\_RECVAUTH\_BADAUTHVERS}
23065\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_BADAUTHVERS:krb5-recvauth-badauthvers-data}}\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_BADAUTHVERS:krb5-recvauth-badauthvers}}\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_BADAUTHVERS::doc}}\index{KRB5\_RECVAUTH\_BADAUTHVERS (built-in variable)}
23066
23067\begin{fulllineitems}
23068\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_BADAUTHVERS:KRB5_RECVAUTH_BADAUTHVERS}}\pysigline{\sphinxbfcode{KRB5\_RECVAUTH\_BADAUTHVERS}}
23069\end{fulllineitems}
23070
23071
23072
23073\begin{savenotes}\sphinxattablestart
23074\centering
23075\begin{tabulary}{\linewidth}[t]{|T|T|}
23076\hline
23077
23078\sphinxcode{KRB5\_RECVAUTH\_BADAUTHVERS}
23079&
23080\sphinxcode{0x0002}
23081\\
23082\hline
23083\end{tabulary}
23084\par
23085\sphinxattableend\end{savenotes}
23086
23087
23088\subsubsection{KRB5\_RECVAUTH\_SKIP\_VERSION}
23089\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_SKIP_VERSION:krb5-recvauth-skip-version}}\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_SKIP_VERSION:krb5-recvauth-skip-version-data}}\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_SKIP_VERSION::doc}}\index{KRB5\_RECVAUTH\_SKIP\_VERSION (built-in variable)}
23090
23091\begin{fulllineitems}
23092\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_SKIP_VERSION:KRB5_RECVAUTH_SKIP_VERSION}}\pysigline{\sphinxbfcode{KRB5\_RECVAUTH\_SKIP\_VERSION}}
23093\end{fulllineitems}
23094
23095
23096
23097\begin{savenotes}\sphinxattablestart
23098\centering
23099\begin{tabulary}{\linewidth}[t]{|T|T|}
23100\hline
23101
23102\sphinxcode{KRB5\_RECVAUTH\_SKIP\_VERSION}
23103&
23104\sphinxcode{0x0001}
23105\\
23106\hline
23107\end{tabulary}
23108\par
23109\sphinxattableend\end{savenotes}
23110
23111
23112\subsubsection{KRB5\_REFERRAL\_REALM}
23113\label{\detokenize{appdev/refs/macros/KRB5_REFERRAL_REALM:krb5-referral-realm-data}}\label{\detokenize{appdev/refs/macros/KRB5_REFERRAL_REALM::doc}}\label{\detokenize{appdev/refs/macros/KRB5_REFERRAL_REALM:krb5-referral-realm}}\index{KRB5\_REFERRAL\_REALM (built-in variable)}
23114
23115\begin{fulllineitems}
23116\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_REFERRAL_REALM:KRB5_REFERRAL_REALM}}\pysigline{\sphinxbfcode{KRB5\_REFERRAL\_REALM}}
23117\end{fulllineitems}
23118
23119
23120Constant for realm referrals.
23121
23122
23123\begin{savenotes}\sphinxattablestart
23124\centering
23125\begin{tabulary}{\linewidth}[t]{|T|T|}
23126\hline
23127
23128\sphinxcode{KRB5\_REFERRAL\_REALM}
23129&
23130\sphinxcode{""}
23131\\
23132\hline
23133\end{tabulary}
23134\par
23135\sphinxattableend\end{savenotes}
23136
23137
23138\subsubsection{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_COUNT\_LOW}
23139\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_COUNT_LOW:krb5-responder-pkinit-flags-token-user-pin-count-low-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_COUNT_LOW::doc}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_COUNT_LOW:krb5-responder-pkinit-flags-token-user-pin-count-low}}\index{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_COUNT\_LOW (built-in variable)}
23140
23141\begin{fulllineitems}
23142\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_COUNT_LOW:KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_COUNT_LOW}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_COUNT\_LOW}}
23143\end{fulllineitems}
23144
23145
23146This flag indicates that an incorrect PIN was supplied at least once since the last time the correct PIN was supplied.
23147
23148
23149\begin{savenotes}\sphinxattablestart
23150\centering
23151\begin{tabulary}{\linewidth}[t]{|T|T|}
23152\hline
23153
23154\sphinxcode{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_COUNT\_LOW}
23155&
23156\sphinxcode{(1 \textless{}\textless{} 0)}
23157\\
23158\hline
23159\end{tabulary}
23160\par
23161\sphinxattableend\end{savenotes}
23162
23163
23164\subsubsection{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_FINAL\_TRY}
23165\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_FINAL_TRY:krb5-responder-pkinit-flags-token-user-pin-final-try}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_FINAL_TRY::doc}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_FINAL_TRY:krb5-responder-pkinit-flags-token-user-pin-final-try-data}}\index{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_FINAL\_TRY (built-in variable)}
23166
23167\begin{fulllineitems}
23168\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_FINAL_TRY:KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_FINAL_TRY}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_FINAL\_TRY}}
23169\end{fulllineitems}
23170
23171
23172This flag indicates that supplying an incorrect PIN will cause the token to lock itself.
23173
23174
23175\begin{savenotes}\sphinxattablestart
23176\centering
23177\begin{tabulary}{\linewidth}[t]{|T|T|}
23178\hline
23179
23180\sphinxcode{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_FINAL\_TRY}
23181&
23182\sphinxcode{(1 \textless{}\textless{} 1)}
23183\\
23184\hline
23185\end{tabulary}
23186\par
23187\sphinxattableend\end{savenotes}
23188
23189
23190\subsubsection{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_LOCKED}
23191\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_LOCKED::doc}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_LOCKED:krb5-responder-pkinit-flags-token-user-pin-locked}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_LOCKED:krb5-responder-pkinit-flags-token-user-pin-locked-data}}\index{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_LOCKED (built-in variable)}
23192
23193\begin{fulllineitems}
23194\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_LOCKED:KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_LOCKED}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_LOCKED}}
23195\end{fulllineitems}
23196
23197
23198This flag indicates that the user PIN is locked, and you can’t log in to the token with it.
23199
23200
23201\begin{savenotes}\sphinxattablestart
23202\centering
23203\begin{tabulary}{\linewidth}[t]{|T|T|}
23204\hline
23205
23206\sphinxcode{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_LOCKED}
23207&
23208\sphinxcode{(1 \textless{}\textless{} 2)}
23209\\
23210\hline
23211\end{tabulary}
23212\par
23213\sphinxattableend\end{savenotes}
23214
23215
23216\subsubsection{KRB5\_RESPONDER\_QUESTION\_PKINIT}
23217\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PKINIT:krb5-responder-question-pkinit}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PKINIT:krb5-responder-question-pkinit-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PKINIT::doc}}\index{KRB5\_RESPONDER\_QUESTION\_PKINIT (built-in variable)}
23218
23219\begin{fulllineitems}
23220\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PKINIT:KRB5_RESPONDER_QUESTION_PKINIT}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_QUESTION\_PKINIT}}
23221\end{fulllineitems}
23222
23223
23224PKINIT responder question.
23225
23226The PKINIT responder question is asked when the client needs a password that’s being used to protect key information, and is formatted as a JSON object. A specific identity’s flags value, if not zero, is the bitwise-OR of one or more of the KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_* flags defined below, and possibly other flags to be added later. Any resemblance to similarly-named CKF\_* values in the PKCS\#11 API should not be depended on.
23227
23228\fvset{hllines={, ,}}%
23229\begin{sphinxVerbatim}[commandchars=\\\{\}]
23230 \PYG{p}{\PYGZob{}}
23231    \PYG{n}{identity} \PYG{o}{\PYGZlt{}}\PYG{n}{string}\PYG{o}{\PYGZgt{}} \PYG{o}{:} \PYG{n}{flags} \PYG{o}{\PYGZlt{}}\PYG{n}{number}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
23232    \PYG{p}{.}\PYG{p}{.}\PYG{p}{.}
23233\PYG{p}{\PYGZcb{}}
23234\end{sphinxVerbatim}
23235
23236The answer to the question MUST be JSON formatted:
23237
23238\fvset{hllines={, ,}}%
23239\begin{sphinxVerbatim}[commandchars=\\\{\}]
23240 \PYG{p}{\PYGZob{}}
23241    \PYG{n}{identity} \PYG{o}{\PYGZlt{}}\PYG{n}{string}\PYG{o}{\PYGZgt{}} \PYG{o}{:} \PYG{n}{password} \PYG{o}{\PYGZlt{}}\PYG{n}{string}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
23242    \PYG{p}{.}\PYG{p}{.}\PYG{p}{.}
23243\PYG{p}{\PYGZcb{}}
23244\end{sphinxVerbatim}
23245
23246
23247\begin{savenotes}\sphinxattablestart
23248\centering
23249\begin{tabulary}{\linewidth}[t]{|T|T|}
23250\hline
23251
23252\sphinxcode{KRB5\_RESPONDER\_QUESTION\_PKINIT}
23253&
23254\sphinxcode{"pkinit"}
23255\\
23256\hline
23257\end{tabulary}
23258\par
23259\sphinxattableend\end{savenotes}
23260
23261
23262\subsubsection{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_PIN}
23263\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_PIN:krb5-responder-otp-flags-collect-pin-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_PIN::doc}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_PIN:krb5-responder-otp-flags-collect-pin}}\index{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_PIN (built-in variable)}
23264
23265\begin{fulllineitems}
23266\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_PIN:KRB5_RESPONDER_OTP_FLAGS_COLLECT_PIN}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_PIN}}
23267\end{fulllineitems}
23268
23269
23270This flag indicates that the PIN value MUST be collected.
23271
23272
23273\begin{savenotes}\sphinxattablestart
23274\centering
23275\begin{tabulary}{\linewidth}[t]{|T|T|}
23276\hline
23277
23278\sphinxcode{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_PIN}
23279&
23280\sphinxcode{0x0002}
23281\\
23282\hline
23283\end{tabulary}
23284\par
23285\sphinxattableend\end{savenotes}
23286
23287
23288\subsubsection{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_TOKEN}
23289\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_TOKEN:krb5-responder-otp-flags-collect-token-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_TOKEN:krb5-responder-otp-flags-collect-token}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_TOKEN::doc}}\index{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_TOKEN (built-in variable)}
23290
23291\begin{fulllineitems}
23292\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_TOKEN:KRB5_RESPONDER_OTP_FLAGS_COLLECT_TOKEN}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_TOKEN}}
23293\end{fulllineitems}
23294
23295
23296This flag indicates that the token value MUST be collected.
23297
23298
23299\begin{savenotes}\sphinxattablestart
23300\centering
23301\begin{tabulary}{\linewidth}[t]{|T|T|}
23302\hline
23303
23304\sphinxcode{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_TOKEN}
23305&
23306\sphinxcode{0x0001}
23307\\
23308\hline
23309\end{tabulary}
23310\par
23311\sphinxattableend\end{savenotes}
23312
23313
23314\subsubsection{KRB5\_RESPONDER\_OTP\_FLAGS\_NEXTOTP}
23315\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_NEXTOTP:krb5-responder-otp-flags-nextotp-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_NEXTOTP::doc}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_NEXTOTP:krb5-responder-otp-flags-nextotp}}\index{KRB5\_RESPONDER\_OTP\_FLAGS\_NEXTOTP (built-in variable)}
23316
23317\begin{fulllineitems}
23318\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_NEXTOTP:KRB5_RESPONDER_OTP_FLAGS_NEXTOTP}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_OTP\_FLAGS\_NEXTOTP}}
23319\end{fulllineitems}
23320
23321
23322This flag indicates that the token is now in re-synchronization mode with the server.
23323
23324The user is expected to reply with the next code displayed on the token.
23325
23326
23327\begin{savenotes}\sphinxattablestart
23328\centering
23329\begin{tabulary}{\linewidth}[t]{|T|T|}
23330\hline
23331
23332\sphinxcode{KRB5\_RESPONDER\_OTP\_FLAGS\_NEXTOTP}
23333&
23334\sphinxcode{0x0004}
23335\\
23336\hline
23337\end{tabulary}
23338\par
23339\sphinxattableend\end{savenotes}
23340
23341
23342\subsubsection{KRB5\_RESPONDER\_OTP\_FLAGS\_SEPARATE\_PIN}
23343\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_SEPARATE_PIN:krb5-responder-otp-flags-separate-pin}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_SEPARATE_PIN:krb5-responder-otp-flags-separate-pin-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_SEPARATE_PIN::doc}}\index{KRB5\_RESPONDER\_OTP\_FLAGS\_SEPARATE\_PIN (built-in variable)}
23344
23345\begin{fulllineitems}
23346\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_SEPARATE_PIN:KRB5_RESPONDER_OTP_FLAGS_SEPARATE_PIN}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_OTP\_FLAGS\_SEPARATE\_PIN}}
23347\end{fulllineitems}
23348
23349
23350This flag indicates that the PIN MUST be returned as a separate item.
23351
23352This flag only takes effect if KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_PIN is set. If this flag is not set, the responder may either concatenate PIN + token value and store it as “value” in the answer or it may return them separately. If they are returned separately, they will be concatenated internally.
23353
23354
23355\begin{savenotes}\sphinxattablestart
23356\centering
23357\begin{tabulary}{\linewidth}[t]{|T|T|}
23358\hline
23359
23360\sphinxcode{KRB5\_RESPONDER\_OTP\_FLAGS\_SEPARATE\_PIN}
23361&
23362\sphinxcode{0x0008}
23363\\
23364\hline
23365\end{tabulary}
23366\par
23367\sphinxattableend\end{savenotes}
23368
23369
23370\subsubsection{KRB5\_RESPONDER\_OTP\_FORMAT\_ALPHANUMERIC}
23371\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC:krb5-responder-otp-format-alphanumeric-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC:krb5-responder-otp-format-alphanumeric}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC::doc}}\index{KRB5\_RESPONDER\_OTP\_FORMAT\_ALPHANUMERIC (built-in variable)}
23372
23373\begin{fulllineitems}
23374\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC:KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_OTP\_FORMAT\_ALPHANUMERIC}}
23375\end{fulllineitems}
23376
23377
23378
23379\begin{savenotes}\sphinxattablestart
23380\centering
23381\begin{tabulary}{\linewidth}[t]{|T|T|}
23382\hline
23383
23384\sphinxcode{KRB5\_RESPONDER\_OTP\_FORMAT\_ALPHANUMERIC}
23385&
23386\sphinxcode{2}
23387\\
23388\hline
23389\end{tabulary}
23390\par
23391\sphinxattableend\end{savenotes}
23392
23393
23394\subsubsection{KRB5\_RESPONDER\_OTP\_FORMAT\_DECIMAL}
23395\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_DECIMAL:krb5-responder-otp-format-decimal-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_DECIMAL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_DECIMAL:krb5-responder-otp-format-decimal}}\index{KRB5\_RESPONDER\_OTP\_FORMAT\_DECIMAL (built-in variable)}
23396
23397\begin{fulllineitems}
23398\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_DECIMAL:KRB5_RESPONDER_OTP_FORMAT_DECIMAL}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_OTP\_FORMAT\_DECIMAL}}
23399\end{fulllineitems}
23400
23401
23402These format constants identify the format of the token value.
23403
23404
23405\begin{savenotes}\sphinxattablestart
23406\centering
23407\begin{tabulary}{\linewidth}[t]{|T|T|}
23408\hline
23409
23410\sphinxcode{KRB5\_RESPONDER\_OTP\_FORMAT\_DECIMAL}
23411&
23412\sphinxcode{0}
23413\\
23414\hline
23415\end{tabulary}
23416\par
23417\sphinxattableend\end{savenotes}
23418
23419
23420\subsubsection{KRB5\_RESPONDER\_OTP\_FORMAT\_HEXADECIMAL}
23421\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL:krb5-responder-otp-format-hexadecimal-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL:krb5-responder-otp-format-hexadecimal}}\index{KRB5\_RESPONDER\_OTP\_FORMAT\_HEXADECIMAL (built-in variable)}
23422
23423\begin{fulllineitems}
23424\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL:KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_OTP\_FORMAT\_HEXADECIMAL}}
23425\end{fulllineitems}
23426
23427
23428
23429\begin{savenotes}\sphinxattablestart
23430\centering
23431\begin{tabulary}{\linewidth}[t]{|T|T|}
23432\hline
23433
23434\sphinxcode{KRB5\_RESPONDER\_OTP\_FORMAT\_HEXADECIMAL}
23435&
23436\sphinxcode{1}
23437\\
23438\hline
23439\end{tabulary}
23440\par
23441\sphinxattableend\end{savenotes}
23442
23443
23444\subsubsection{KRB5\_RESPONDER\_QUESTION\_OTP}
23445\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_OTP:krb5-responder-question-otp}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_OTP:krb5-responder-question-otp-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_OTP::doc}}\index{KRB5\_RESPONDER\_QUESTION\_OTP (built-in variable)}
23446
23447\begin{fulllineitems}
23448\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_OTP:KRB5_RESPONDER_QUESTION_OTP}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_QUESTION\_OTP}}
23449\end{fulllineitems}
23450
23451
23452OTP responder question.
23453
23454The OTP responder question is asked when the KDC indicates that an OTP value is required in order to complete the authentication. The JSON format of the challenge is:
23455
23456\fvset{hllines={, ,}}%
23457\begin{sphinxVerbatim}[commandchars=\\\{\}]
23458 \PYG{p}{\PYGZob{}}
23459  \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{service}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:} \PYG{o}{\PYGZlt{}}\PYG{n}{string} \PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
23460  \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{tokenInfo}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:} \PYG{p}{[}
23461    \PYG{p}{\PYGZob{}}
23462      \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{flags}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}     \PYG{o}{\PYGZlt{}}\PYG{n}{number}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
23463      \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{vendor}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}    \PYG{o}{\PYGZlt{}}\PYG{n}{string} \PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
23464      \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{challenge}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:} \PYG{o}{\PYGZlt{}}\PYG{n}{string} \PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
23465      \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{length}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}    \PYG{o}{\PYGZlt{}}\PYG{n}{number} \PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
23466      \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{format}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}    \PYG{o}{\PYGZlt{}}\PYG{n}{number} \PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
23467      \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{tokenID}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}   \PYG{o}{\PYGZlt{}}\PYG{n}{string} \PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
23468      \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{algID}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}     \PYG{o}{\PYGZlt{}}\PYG{n}{string} \PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
23469    \PYG{p}{\PYGZcb{}}\PYG{p}{,}
23470    \PYG{p}{.}\PYG{p}{.}\PYG{p}{.}
23471  \PYG{p}{]}
23472\PYG{p}{\PYGZcb{}}
23473\end{sphinxVerbatim}
23474
23475The answer to the question MUST be JSON formatted:
23476
23477\fvset{hllines={, ,}}%
23478\begin{sphinxVerbatim}[commandchars=\\\{\}]
23479 \PYG{p}{\PYGZob{}}
23480  \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{tokeninfo}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:} \PYG{o}{\PYGZlt{}}\PYG{n}{number}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
23481  \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{value}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}     \PYG{o}{\PYGZlt{}}\PYG{n}{string} \PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
23482  \PYG{l+s}{\PYGZdq{}}\PYG{l+s}{pin}\PYG{l+s}{\PYGZdq{}}\PYG{o}{:}       \PYG{o}{\PYGZlt{}}\PYG{n}{string} \PYG{p}{(}\PYG{n}{optional}\PYG{p}{)}\PYG{o}{\PYGZgt{}}\PYG{p}{,}
23483\PYG{p}{\PYGZcb{}}
23484\end{sphinxVerbatim}
23485
23486For more detail, please see RFC 6560.
23487
23488
23489\begin{savenotes}\sphinxattablestart
23490\centering
23491\begin{tabulary}{\linewidth}[t]{|T|T|}
23492\hline
23493
23494\sphinxcode{KRB5\_RESPONDER\_QUESTION\_OTP}
23495&
23496\sphinxcode{"otp"}
23497\\
23498\hline
23499\end{tabulary}
23500\par
23501\sphinxattableend\end{savenotes}
23502
23503
23504\subsubsection{KRB5\_RESPONDER\_QUESTION\_PASSWORD}
23505\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PASSWORD:krb5-responder-question-password-data}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PASSWORD:krb5-responder-question-password}}\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PASSWORD::doc}}\index{KRB5\_RESPONDER\_QUESTION\_PASSWORD (built-in variable)}
23506
23507\begin{fulllineitems}
23508\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PASSWORD:KRB5_RESPONDER_QUESTION_PASSWORD}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_QUESTION\_PASSWORD}}
23509\end{fulllineitems}
23510
23511
23512Long-term password responder question.
23513
23514This question is asked when the long-term password is needed. It has no challenge and the response is simply the password string.
23515
23516
23517\begin{savenotes}\sphinxattablestart
23518\centering
23519\begin{tabulary}{\linewidth}[t]{|T|T|}
23520\hline
23521
23522\sphinxcode{KRB5\_RESPONDER\_QUESTION\_PASSWORD}
23523&
23524\sphinxcode{"password"}
23525\\
23526\hline
23527\end{tabulary}
23528\par
23529\sphinxattableend\end{savenotes}
23530
23531
23532\subsubsection{KRB5\_SAFE}
23533\label{\detokenize{appdev/refs/macros/KRB5_SAFE:krb5-safe}}\label{\detokenize{appdev/refs/macros/KRB5_SAFE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_SAFE:krb5-safe-data}}\index{KRB5\_SAFE (built-in variable)}
23534
23535\begin{fulllineitems}
23536\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_SAFE:KRB5_SAFE}}\pysigline{\sphinxbfcode{KRB5\_SAFE}}
23537\end{fulllineitems}
23538
23539
23540Safe application message.
23541
23542
23543\begin{savenotes}\sphinxattablestart
23544\centering
23545\begin{tabulary}{\linewidth}[t]{|T|T|}
23546\hline
23547
23548\sphinxcode{KRB5\_SAFE}
23549&
23550\sphinxcode{((krb5\_msgtype)20)}
23551\\
23552\hline
23553\end{tabulary}
23554\par
23555\sphinxattableend\end{savenotes}
23556
23557
23558\subsubsection{KRB5\_SAM\_MUST\_PK\_ENCRYPT\_SAD}
23559\label{\detokenize{appdev/refs/macros/KRB5_SAM_MUST_PK_ENCRYPT_SAD:krb5-sam-must-pk-encrypt-sad}}\label{\detokenize{appdev/refs/macros/KRB5_SAM_MUST_PK_ENCRYPT_SAD:krb5-sam-must-pk-encrypt-sad-data}}\label{\detokenize{appdev/refs/macros/KRB5_SAM_MUST_PK_ENCRYPT_SAD::doc}}\index{KRB5\_SAM\_MUST\_PK\_ENCRYPT\_SAD (built-in variable)}
23560
23561\begin{fulllineitems}
23562\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_SAM_MUST_PK_ENCRYPT_SAD:KRB5_SAM_MUST_PK_ENCRYPT_SAD}}\pysigline{\sphinxbfcode{KRB5\_SAM\_MUST\_PK\_ENCRYPT\_SAD}}
23563\end{fulllineitems}
23564
23565
23566currently must be zero
23567
23568
23569\begin{savenotes}\sphinxattablestart
23570\centering
23571\begin{tabulary}{\linewidth}[t]{|T|T|}
23572\hline
23573
23574\sphinxcode{KRB5\_SAM\_MUST\_PK\_ENCRYPT\_SAD}
23575&
23576\sphinxcode{0x20000000}
23577\\
23578\hline
23579\end{tabulary}
23580\par
23581\sphinxattableend\end{savenotes}
23582
23583
23584\subsubsection{KRB5\_SAM\_SEND\_ENCRYPTED\_SAD}
23585\label{\detokenize{appdev/refs/macros/KRB5_SAM_SEND_ENCRYPTED_SAD:krb5-sam-send-encrypted-sad}}\label{\detokenize{appdev/refs/macros/KRB5_SAM_SEND_ENCRYPTED_SAD::doc}}\label{\detokenize{appdev/refs/macros/KRB5_SAM_SEND_ENCRYPTED_SAD:krb5-sam-send-encrypted-sad-data}}\index{KRB5\_SAM\_SEND\_ENCRYPTED\_SAD (built-in variable)}
23586
23587\begin{fulllineitems}
23588\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_SAM_SEND_ENCRYPTED_SAD:KRB5_SAM_SEND_ENCRYPTED_SAD}}\pysigline{\sphinxbfcode{KRB5\_SAM\_SEND\_ENCRYPTED\_SAD}}
23589\end{fulllineitems}
23590
23591
23592
23593\begin{savenotes}\sphinxattablestart
23594\centering
23595\begin{tabulary}{\linewidth}[t]{|T|T|}
23596\hline
23597
23598\sphinxcode{KRB5\_SAM\_SEND\_ENCRYPTED\_SAD}
23599&
23600\sphinxcode{0x40000000}
23601\\
23602\hline
23603\end{tabulary}
23604\par
23605\sphinxattableend\end{savenotes}
23606
23607
23608\subsubsection{KRB5\_SAM\_USE\_SAD\_AS\_KEY}
23609\label{\detokenize{appdev/refs/macros/KRB5_SAM_USE_SAD_AS_KEY::doc}}\label{\detokenize{appdev/refs/macros/KRB5_SAM_USE_SAD_AS_KEY:krb5-sam-use-sad-as-key}}\label{\detokenize{appdev/refs/macros/KRB5_SAM_USE_SAD_AS_KEY:krb5-sam-use-sad-as-key-data}}\index{KRB5\_SAM\_USE\_SAD\_AS\_KEY (built-in variable)}
23610
23611\begin{fulllineitems}
23612\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_SAM_USE_SAD_AS_KEY:KRB5_SAM_USE_SAD_AS_KEY}}\pysigline{\sphinxbfcode{KRB5\_SAM\_USE\_SAD\_AS\_KEY}}
23613\end{fulllineitems}
23614
23615
23616
23617\begin{savenotes}\sphinxattablestart
23618\centering
23619\begin{tabulary}{\linewidth}[t]{|T|T|}
23620\hline
23621
23622\sphinxcode{KRB5\_SAM\_USE\_SAD\_AS\_KEY}
23623&
23624\sphinxcode{0x80000000}
23625\\
23626\hline
23627\end{tabulary}
23628\par
23629\sphinxattableend\end{savenotes}
23630
23631
23632\subsubsection{KRB5\_TC\_MATCH\_2ND\_TKT}
23633\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_2ND_TKT:krb5-tc-match-2nd-tkt-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_2ND_TKT::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_2ND_TKT:krb5-tc-match-2nd-tkt}}\index{KRB5\_TC\_MATCH\_2ND\_TKT (built-in variable)}
23634
23635\begin{fulllineitems}
23636\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_2ND_TKT:KRB5_TC_MATCH_2ND_TKT}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_2ND\_TKT}}
23637\end{fulllineitems}
23638
23639
23640The second ticket must match.
23641
23642
23643\begin{savenotes}\sphinxattablestart
23644\centering
23645\begin{tabulary}{\linewidth}[t]{|T|T|}
23646\hline
23647
23648\sphinxcode{KRB5\_TC\_MATCH\_2ND\_TKT}
23649&
23650\sphinxcode{0x00000080}
23651\\
23652\hline
23653\end{tabulary}
23654\par
23655\sphinxattableend\end{savenotes}
23656
23657
23658\subsubsection{KRB5\_TC\_MATCH\_AUTHDATA}
23659\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA:krb5-tc-match-authdata-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA:krb5-tc-match-authdata}}\index{KRB5\_TC\_MATCH\_AUTHDATA (built-in variable)}
23660
23661\begin{fulllineitems}
23662\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA:KRB5_TC_MATCH_AUTHDATA}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_AUTHDATA}}
23663\end{fulllineitems}
23664
23665
23666The authorization data must match.
23667
23668
23669\begin{savenotes}\sphinxattablestart
23670\centering
23671\begin{tabulary}{\linewidth}[t]{|T|T|}
23672\hline
23673
23674\sphinxcode{KRB5\_TC\_MATCH\_AUTHDATA}
23675&
23676\sphinxcode{0x00000020}
23677\\
23678\hline
23679\end{tabulary}
23680\par
23681\sphinxattableend\end{savenotes}
23682
23683
23684\subsubsection{KRB5\_TC\_MATCH\_FLAGS}
23685\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS:krb5-tc-match-flags}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS:krb5-tc-match-flags-data}}\index{KRB5\_TC\_MATCH\_FLAGS (built-in variable)}
23686
23687\begin{fulllineitems}
23688\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS:KRB5_TC_MATCH_FLAGS}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_FLAGS}}
23689\end{fulllineitems}
23690
23691
23692All the flags set in the match credentials must be set.
23693
23694
23695\begin{savenotes}\sphinxattablestart
23696\centering
23697\begin{tabulary}{\linewidth}[t]{|T|T|}
23698\hline
23699
23700\sphinxcode{KRB5\_TC\_MATCH\_FLAGS}
23701&
23702\sphinxcode{0x00000004}
23703\\
23704\hline
23705\end{tabulary}
23706\par
23707\sphinxattableend\end{savenotes}
23708
23709
23710\subsubsection{KRB5\_TC\_MATCH\_FLAGS\_EXACT}
23711\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS_EXACT:krb5-tc-match-flags-exact}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS_EXACT::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS_EXACT:krb5-tc-match-flags-exact-data}}\index{KRB5\_TC\_MATCH\_FLAGS\_EXACT (built-in variable)}
23712
23713\begin{fulllineitems}
23714\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS_EXACT:KRB5_TC_MATCH_FLAGS_EXACT}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_FLAGS\_EXACT}}
23715\end{fulllineitems}
23716
23717
23718All the flags must match exactly.
23719
23720
23721\begin{savenotes}\sphinxattablestart
23722\centering
23723\begin{tabulary}{\linewidth}[t]{|T|T|}
23724\hline
23725
23726\sphinxcode{KRB5\_TC\_MATCH\_FLAGS\_EXACT}
23727&
23728\sphinxcode{0x00000010}
23729\\
23730\hline
23731\end{tabulary}
23732\par
23733\sphinxattableend\end{savenotes}
23734
23735
23736\subsubsection{KRB5\_TC\_MATCH\_IS\_SKEY}
23737\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_IS_SKEY:krb5-tc-match-is-skey}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_IS_SKEY:krb5-tc-match-is-skey-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_IS_SKEY::doc}}\index{KRB5\_TC\_MATCH\_IS\_SKEY (built-in variable)}
23738
23739\begin{fulllineitems}
23740\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_IS_SKEY:KRB5_TC_MATCH_IS_SKEY}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_IS\_SKEY}}
23741\end{fulllineitems}
23742
23743
23744The is\_skey field must match exactly.
23745
23746
23747\begin{savenotes}\sphinxattablestart
23748\centering
23749\begin{tabulary}{\linewidth}[t]{|T|T|}
23750\hline
23751
23752\sphinxcode{KRB5\_TC\_MATCH\_IS\_SKEY}
23753&
23754\sphinxcode{0x00000002}
23755\\
23756\hline
23757\end{tabulary}
23758\par
23759\sphinxattableend\end{savenotes}
23760
23761
23762\subsubsection{KRB5\_TC\_MATCH\_KTYPE}
23763\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_KTYPE:krb5-tc-match-ktype}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_KTYPE:krb5-tc-match-ktype-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_KTYPE::doc}}\index{KRB5\_TC\_MATCH\_KTYPE (built-in variable)}
23764
23765\begin{fulllineitems}
23766\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_KTYPE:KRB5_TC_MATCH_KTYPE}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_KTYPE}}
23767\end{fulllineitems}
23768
23769
23770The encryption key type must match.
23771
23772
23773\begin{savenotes}\sphinxattablestart
23774\centering
23775\begin{tabulary}{\linewidth}[t]{|T|T|}
23776\hline
23777
23778\sphinxcode{KRB5\_TC\_MATCH\_KTYPE}
23779&
23780\sphinxcode{0x00000100}
23781\\
23782\hline
23783\end{tabulary}
23784\par
23785\sphinxattableend\end{savenotes}
23786
23787
23788\subsubsection{KRB5\_TC\_MATCH\_SRV\_NAMEONLY}
23789\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_SRV_NAMEONLY::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_SRV_NAMEONLY:krb5-tc-match-srv-nameonly}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_SRV_NAMEONLY:krb5-tc-match-srv-nameonly-data}}\index{KRB5\_TC\_MATCH\_SRV\_NAMEONLY (built-in variable)}
23790
23791\begin{fulllineitems}
23792\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_SRV_NAMEONLY:KRB5_TC_MATCH_SRV_NAMEONLY}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_SRV\_NAMEONLY}}
23793\end{fulllineitems}
23794
23795
23796Only the name portion of the principal name must match.
23797
23798
23799\begin{savenotes}\sphinxattablestart
23800\centering
23801\begin{tabulary}{\linewidth}[t]{|T|T|}
23802\hline
23803
23804\sphinxcode{KRB5\_TC\_MATCH\_SRV\_NAMEONLY}
23805&
23806\sphinxcode{0x00000040}
23807\\
23808\hline
23809\end{tabulary}
23810\par
23811\sphinxattableend\end{savenotes}
23812
23813
23814\subsubsection{KRB5\_TC\_MATCH\_TIMES}
23815\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES:krb5-tc-match-times}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES:krb5-tc-match-times-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES::doc}}\index{KRB5\_TC\_MATCH\_TIMES (built-in variable)}
23816
23817\begin{fulllineitems}
23818\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES:KRB5_TC_MATCH_TIMES}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_TIMES}}
23819\end{fulllineitems}
23820
23821
23822The requested lifetime must be at least as great as the time specified.
23823
23824
23825\begin{savenotes}\sphinxattablestart
23826\centering
23827\begin{tabulary}{\linewidth}[t]{|T|T|}
23828\hline
23829
23830\sphinxcode{KRB5\_TC\_MATCH\_TIMES}
23831&
23832\sphinxcode{0x00000001}
23833\\
23834\hline
23835\end{tabulary}
23836\par
23837\sphinxattableend\end{savenotes}
23838
23839
23840\subsubsection{KRB5\_TC\_MATCH\_TIMES\_EXACT}
23841\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES_EXACT:krb5-tc-match-times-exact-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES_EXACT::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES_EXACT:krb5-tc-match-times-exact}}\index{KRB5\_TC\_MATCH\_TIMES\_EXACT (built-in variable)}
23842
23843\begin{fulllineitems}
23844\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES_EXACT:KRB5_TC_MATCH_TIMES_EXACT}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_TIMES\_EXACT}}
23845\end{fulllineitems}
23846
23847
23848All the time fields must match exactly.
23849
23850
23851\begin{savenotes}\sphinxattablestart
23852\centering
23853\begin{tabulary}{\linewidth}[t]{|T|T|}
23854\hline
23855
23856\sphinxcode{KRB5\_TC\_MATCH\_TIMES\_EXACT}
23857&
23858\sphinxcode{0x00000008}
23859\\
23860\hline
23861\end{tabulary}
23862\par
23863\sphinxattableend\end{savenotes}
23864
23865
23866\subsubsection{KRB5\_TC\_NOTICKET}
23867\label{\detokenize{appdev/refs/macros/KRB5_TC_NOTICKET:krb5-tc-noticket}}\label{\detokenize{appdev/refs/macros/KRB5_TC_NOTICKET::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TC_NOTICKET:krb5-tc-noticket-data}}\index{KRB5\_TC\_NOTICKET (built-in variable)}
23868
23869\begin{fulllineitems}
23870\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_NOTICKET:KRB5_TC_NOTICKET}}\pysigline{\sphinxbfcode{KRB5\_TC\_NOTICKET}}
23871\end{fulllineitems}
23872
23873
23874
23875\begin{savenotes}\sphinxattablestart
23876\centering
23877\begin{tabulary}{\linewidth}[t]{|T|T|}
23878\hline
23879
23880\sphinxcode{KRB5\_TC\_NOTICKET}
23881&
23882\sphinxcode{0x00000002}
23883\\
23884\hline
23885\end{tabulary}
23886\par
23887\sphinxattableend\end{savenotes}
23888
23889
23890\subsubsection{KRB5\_TC\_OPENCLOSE}
23891\label{\detokenize{appdev/refs/macros/KRB5_TC_OPENCLOSE:krb5-tc-openclose}}\label{\detokenize{appdev/refs/macros/KRB5_TC_OPENCLOSE:krb5-tc-openclose-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_OPENCLOSE::doc}}\index{KRB5\_TC\_OPENCLOSE (built-in variable)}
23892
23893\begin{fulllineitems}
23894\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_OPENCLOSE:KRB5_TC_OPENCLOSE}}\pysigline{\sphinxbfcode{KRB5\_TC\_OPENCLOSE}}
23895\end{fulllineitems}
23896
23897
23898Open and close the file for each cache operation.
23899
23900
23901\begin{savenotes}\sphinxattablestart
23902\centering
23903\begin{tabulary}{\linewidth}[t]{|T|T|}
23904\hline
23905
23906\sphinxcode{KRB5\_TC\_OPENCLOSE}
23907&
23908\sphinxcode{0x00000001}
23909\\
23910\hline
23911\end{tabulary}
23912\par
23913\sphinxattableend\end{savenotes}
23914
23915
23916\subsubsection{KRB5\_TC\_SUPPORTED\_KTYPES}
23917\label{\detokenize{appdev/refs/macros/KRB5_TC_SUPPORTED_KTYPES:krb5-tc-supported-ktypes-data}}\label{\detokenize{appdev/refs/macros/KRB5_TC_SUPPORTED_KTYPES::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TC_SUPPORTED_KTYPES:krb5-tc-supported-ktypes}}\index{KRB5\_TC\_SUPPORTED\_KTYPES (built-in variable)}
23918
23919\begin{fulllineitems}
23920\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_SUPPORTED_KTYPES:KRB5_TC_SUPPORTED_KTYPES}}\pysigline{\sphinxbfcode{KRB5\_TC\_SUPPORTED\_KTYPES}}
23921\end{fulllineitems}
23922
23923
23924The supported key types must match.
23925
23926
23927\begin{savenotes}\sphinxattablestart
23928\centering
23929\begin{tabulary}{\linewidth}[t]{|T|T|}
23930\hline
23931
23932\sphinxcode{KRB5\_TC\_SUPPORTED\_KTYPES}
23933&
23934\sphinxcode{0x00000200}
23935\\
23936\hline
23937\end{tabulary}
23938\par
23939\sphinxattableend\end{savenotes}
23940
23941
23942\subsubsection{KRB5\_TGS\_NAME}
23943\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME:krb5-tgs-name-data}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME:krb5-tgs-name}}\index{KRB5\_TGS\_NAME (built-in variable)}
23944
23945\begin{fulllineitems}
23946\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME:KRB5_TGS_NAME}}\pysigline{\sphinxbfcode{KRB5\_TGS\_NAME}}
23947\end{fulllineitems}
23948
23949
23950
23951\begin{savenotes}\sphinxattablestart
23952\centering
23953\begin{tabulary}{\linewidth}[t]{|T|T|}
23954\hline
23955
23956\sphinxcode{KRB5\_TGS\_NAME}
23957&
23958\sphinxcode{"krbtgt"}
23959\\
23960\hline
23961\end{tabulary}
23962\par
23963\sphinxattableend\end{savenotes}
23964
23965
23966\subsubsection{KRB5\_TGS\_NAME\_SIZE}
23967\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME_SIZE:krb5-tgs-name-size}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME_SIZE:krb5-tgs-name-size-data}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME_SIZE::doc}}\index{KRB5\_TGS\_NAME\_SIZE (built-in variable)}
23968
23969\begin{fulllineitems}
23970\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME_SIZE:KRB5_TGS_NAME_SIZE}}\pysigline{\sphinxbfcode{KRB5\_TGS\_NAME\_SIZE}}
23971\end{fulllineitems}
23972
23973
23974
23975\begin{savenotes}\sphinxattablestart
23976\centering
23977\begin{tabulary}{\linewidth}[t]{|T|T|}
23978\hline
23979
23980\sphinxcode{KRB5\_TGS\_NAME\_SIZE}
23981&
23982\sphinxcode{6}
23983\\
23984\hline
23985\end{tabulary}
23986\par
23987\sphinxattableend\end{savenotes}
23988
23989
23990\subsubsection{KRB5\_TGS\_REP}
23991\label{\detokenize{appdev/refs/macros/KRB5_TGS_REP::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_REP:krb5-tgs-rep-data}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_REP:krb5-tgs-rep}}\index{KRB5\_TGS\_REP (built-in variable)}
23992
23993\begin{fulllineitems}
23994\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TGS_REP:KRB5_TGS_REP}}\pysigline{\sphinxbfcode{KRB5\_TGS\_REP}}
23995\end{fulllineitems}
23996
23997
23998Response to TGS request.
23999
24000
24001\begin{savenotes}\sphinxattablestart
24002\centering
24003\begin{tabulary}{\linewidth}[t]{|T|T|}
24004\hline
24005
24006\sphinxcode{KRB5\_TGS\_REP}
24007&
24008\sphinxcode{((krb5\_msgtype)13)}
24009\\
24010\hline
24011\end{tabulary}
24012\par
24013\sphinxattableend\end{savenotes}
24014
24015
24016\subsubsection{KRB5\_TGS\_REQ}
24017\label{\detokenize{appdev/refs/macros/KRB5_TGS_REQ:krb5-tgs-req-data}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_REQ::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TGS_REQ:krb5-tgs-req}}\index{KRB5\_TGS\_REQ (built-in variable)}
24018
24019\begin{fulllineitems}
24020\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TGS_REQ:KRB5_TGS_REQ}}\pysigline{\sphinxbfcode{KRB5\_TGS\_REQ}}
24021\end{fulllineitems}
24022
24023
24024Ticket granting server request.
24025
24026
24027\begin{savenotes}\sphinxattablestart
24028\centering
24029\begin{tabulary}{\linewidth}[t]{|T|T|}
24030\hline
24031
24032\sphinxcode{KRB5\_TGS\_REQ}
24033&
24034\sphinxcode{((krb5\_msgtype)12)}
24035\\
24036\hline
24037\end{tabulary}
24038\par
24039\sphinxattableend\end{savenotes}
24040
24041
24042\subsubsection{KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE}
24043\label{\detokenize{appdev/refs/macros/KRB5_TKT_CREDS_STEP_FLAG_CONTINUE:krb5-tkt-creds-step-flag-continue-data}}\label{\detokenize{appdev/refs/macros/KRB5_TKT_CREDS_STEP_FLAG_CONTINUE::doc}}\label{\detokenize{appdev/refs/macros/KRB5_TKT_CREDS_STEP_FLAG_CONTINUE:krb5-tkt-creds-step-flag-continue}}\index{KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE (built-in variable)}
24044
24045\begin{fulllineitems}
24046\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TKT_CREDS_STEP_FLAG_CONTINUE:KRB5_TKT_CREDS_STEP_FLAG_CONTINUE}}\pysigline{\sphinxbfcode{KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE}}
24047\end{fulllineitems}
24048
24049
24050More responses needed.
24051
24052
24053\begin{savenotes}\sphinxattablestart
24054\centering
24055\begin{tabulary}{\linewidth}[t]{|T|T|}
24056\hline
24057
24058\sphinxcode{KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE}
24059&
24060\sphinxcode{0x1}
24061\\
24062\hline
24063\end{tabulary}
24064\par
24065\sphinxattableend\end{savenotes}
24066
24067
24068\subsubsection{KRB5\_VERIFY\_INIT\_CREDS\_OPT\_AP\_REQ\_NOFAIL}
24069\label{\detokenize{appdev/refs/macros/KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL:krb5-verify-init-creds-opt-ap-req-nofail}}\label{\detokenize{appdev/refs/macros/KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL::doc}}\label{\detokenize{appdev/refs/macros/KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL:krb5-verify-init-creds-opt-ap-req-nofail-data}}\index{KRB5\_VERIFY\_INIT\_CREDS\_OPT\_AP\_REQ\_NOFAIL (built-in variable)}
24070
24071\begin{fulllineitems}
24072\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL:KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL}}\pysigline{\sphinxbfcode{KRB5\_VERIFY\_INIT\_CREDS\_OPT\_AP\_REQ\_NOFAIL}}
24073\end{fulllineitems}
24074
24075
24076
24077\begin{savenotes}\sphinxattablestart
24078\centering
24079\begin{tabulary}{\linewidth}[t]{|T|T|}
24080\hline
24081
24082\sphinxcode{KRB5\_VERIFY\_INIT\_CREDS\_OPT\_AP\_REQ\_NOFAIL}
24083&
24084\sphinxcode{0x0001}
24085\\
24086\hline
24087\end{tabulary}
24088\par
24089\sphinxattableend\end{savenotes}
24090
24091
24092\subsubsection{KRB5\_WELLKNOWN\_NAMESTR}
24093\label{\detokenize{appdev/refs/macros/KRB5_WELLKNOWN_NAMESTR::doc}}\label{\detokenize{appdev/refs/macros/KRB5_WELLKNOWN_NAMESTR:krb5-wellknown-namestr}}\label{\detokenize{appdev/refs/macros/KRB5_WELLKNOWN_NAMESTR:krb5-wellknown-namestr-data}}\index{KRB5\_WELLKNOWN\_NAMESTR (built-in variable)}
24094
24095\begin{fulllineitems}
24096\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_WELLKNOWN_NAMESTR:KRB5_WELLKNOWN_NAMESTR}}\pysigline{\sphinxbfcode{KRB5\_WELLKNOWN\_NAMESTR}}
24097\end{fulllineitems}
24098
24099
24100First component of NT\_WELLKNOWN principals.
24101
24102
24103\begin{savenotes}\sphinxattablestart
24104\centering
24105\begin{tabulary}{\linewidth}[t]{|T|T|}
24106\hline
24107
24108\sphinxcode{KRB5\_WELLKNOWN\_NAMESTR}
24109&
24110\sphinxcode{"WELLKNOWN"}
24111\\
24112\hline
24113\end{tabulary}
24114\par
24115\sphinxattableend\end{savenotes}
24116
24117
24118\subsubsection{LR\_TYPE\_INTERPRETATION\_MASK}
24119\label{\detokenize{appdev/refs/macros/LR_TYPE_INTERPRETATION_MASK:lr-type-interpretation-mask-data}}\label{\detokenize{appdev/refs/macros/LR_TYPE_INTERPRETATION_MASK:lr-type-interpretation-mask}}\label{\detokenize{appdev/refs/macros/LR_TYPE_INTERPRETATION_MASK::doc}}\index{LR\_TYPE\_INTERPRETATION\_MASK (built-in variable)}
24120
24121\begin{fulllineitems}
24122\phantomsection\label{\detokenize{appdev/refs/macros/LR_TYPE_INTERPRETATION_MASK:LR_TYPE_INTERPRETATION_MASK}}\pysigline{\sphinxbfcode{LR\_TYPE\_INTERPRETATION\_MASK}}
24123\end{fulllineitems}
24124
24125
24126
24127\begin{savenotes}\sphinxattablestart
24128\centering
24129\begin{tabulary}{\linewidth}[t]{|T|T|}
24130\hline
24131
24132\sphinxcode{LR\_TYPE\_INTERPRETATION\_MASK}
24133&
24134\sphinxcode{0x7fff}
24135\\
24136\hline
24137\end{tabulary}
24138\par
24139\sphinxattableend\end{savenotes}
24140
24141
24142\subsubsection{LR\_TYPE\_THIS\_SERVER\_ONLY}
24143\label{\detokenize{appdev/refs/macros/LR_TYPE_THIS_SERVER_ONLY:lr-type-this-server-only-data}}\label{\detokenize{appdev/refs/macros/LR_TYPE_THIS_SERVER_ONLY:lr-type-this-server-only}}\label{\detokenize{appdev/refs/macros/LR_TYPE_THIS_SERVER_ONLY::doc}}\index{LR\_TYPE\_THIS\_SERVER\_ONLY (built-in variable)}
24144
24145\begin{fulllineitems}
24146\phantomsection\label{\detokenize{appdev/refs/macros/LR_TYPE_THIS_SERVER_ONLY:LR_TYPE_THIS_SERVER_ONLY}}\pysigline{\sphinxbfcode{LR\_TYPE\_THIS\_SERVER\_ONLY}}
24147\end{fulllineitems}
24148
24149
24150
24151\begin{savenotes}\sphinxattablestart
24152\centering
24153\begin{tabulary}{\linewidth}[t]{|T|T|}
24154\hline
24155
24156\sphinxcode{LR\_TYPE\_THIS\_SERVER\_ONLY}
24157&
24158\sphinxcode{0x8000}
24159\\
24160\hline
24161\end{tabulary}
24162\par
24163\sphinxattableend\end{savenotes}
24164
24165
24166\subsubsection{MAX\_KEYTAB\_NAME\_LEN}
24167\label{\detokenize{appdev/refs/macros/MAX_KEYTAB_NAME_LEN:max-keytab-name-len-data}}\label{\detokenize{appdev/refs/macros/MAX_KEYTAB_NAME_LEN::doc}}\label{\detokenize{appdev/refs/macros/MAX_KEYTAB_NAME_LEN:max-keytab-name-len}}\index{MAX\_KEYTAB\_NAME\_LEN (built-in variable)}
24168
24169\begin{fulllineitems}
24170\phantomsection\label{\detokenize{appdev/refs/macros/MAX_KEYTAB_NAME_LEN:MAX_KEYTAB_NAME_LEN}}\pysigline{\sphinxbfcode{MAX\_KEYTAB\_NAME\_LEN}}
24171\end{fulllineitems}
24172
24173
24174Long enough for MAXPATHLEN + some extra.
24175
24176
24177\begin{savenotes}\sphinxattablestart
24178\centering
24179\begin{tabulary}{\linewidth}[t]{|T|T|}
24180\hline
24181
24182\sphinxcode{MAX\_KEYTAB\_NAME\_LEN}
24183&
24184\sphinxcode{1100}
24185\\
24186\hline
24187\end{tabulary}
24188\par
24189\sphinxattableend\end{savenotes}
24190
24191
24192\subsubsection{MSEC\_DIRBIT}
24193\label{\detokenize{appdev/refs/macros/MSEC_DIRBIT:msec-dirbit}}\label{\detokenize{appdev/refs/macros/MSEC_DIRBIT:msec-dirbit-data}}\label{\detokenize{appdev/refs/macros/MSEC_DIRBIT::doc}}\index{MSEC\_DIRBIT (built-in variable)}
24194
24195\begin{fulllineitems}
24196\phantomsection\label{\detokenize{appdev/refs/macros/MSEC_DIRBIT:MSEC_DIRBIT}}\pysigline{\sphinxbfcode{MSEC\_DIRBIT}}
24197\end{fulllineitems}
24198
24199
24200
24201\begin{savenotes}\sphinxattablestart
24202\centering
24203\begin{tabulary}{\linewidth}[t]{|T|T|}
24204\hline
24205
24206\sphinxcode{MSEC\_DIRBIT}
24207&
24208\sphinxcode{0x8000}
24209\\
24210\hline
24211\end{tabulary}
24212\par
24213\sphinxattableend\end{savenotes}
24214
24215
24216\subsubsection{MSEC\_VAL\_MASK}
24217\label{\detokenize{appdev/refs/macros/MSEC_VAL_MASK:msec-val-mask-data}}\label{\detokenize{appdev/refs/macros/MSEC_VAL_MASK::doc}}\label{\detokenize{appdev/refs/macros/MSEC_VAL_MASK:msec-val-mask}}\index{MSEC\_VAL\_MASK (built-in variable)}
24218
24219\begin{fulllineitems}
24220\phantomsection\label{\detokenize{appdev/refs/macros/MSEC_VAL_MASK:MSEC_VAL_MASK}}\pysigline{\sphinxbfcode{MSEC\_VAL\_MASK}}
24221\end{fulllineitems}
24222
24223
24224
24225\begin{savenotes}\sphinxattablestart
24226\centering
24227\begin{tabulary}{\linewidth}[t]{|T|T|}
24228\hline
24229
24230\sphinxcode{MSEC\_VAL\_MASK}
24231&
24232\sphinxcode{0x7fff}
24233\\
24234\hline
24235\end{tabulary}
24236\par
24237\sphinxattableend\end{savenotes}
24238
24239
24240\subsubsection{SALT\_TYPE\_AFS\_LENGTH}
24241\label{\detokenize{appdev/refs/macros/SALT_TYPE_AFS_LENGTH::doc}}\label{\detokenize{appdev/refs/macros/SALT_TYPE_AFS_LENGTH:salt-type-afs-length-data}}\label{\detokenize{appdev/refs/macros/SALT_TYPE_AFS_LENGTH:salt-type-afs-length}}\index{SALT\_TYPE\_AFS\_LENGTH (built-in variable)}
24242
24243\begin{fulllineitems}
24244\phantomsection\label{\detokenize{appdev/refs/macros/SALT_TYPE_AFS_LENGTH:SALT_TYPE_AFS_LENGTH}}\pysigline{\sphinxbfcode{SALT\_TYPE\_AFS\_LENGTH}}
24245\end{fulllineitems}
24246
24247
24248
24249\begin{savenotes}\sphinxattablestart
24250\centering
24251\begin{tabulary}{\linewidth}[t]{|T|T|}
24252\hline
24253
24254\sphinxcode{SALT\_TYPE\_AFS\_LENGTH}
24255&
24256\sphinxcode{UINT\_MAX}
24257\\
24258\hline
24259\end{tabulary}
24260\par
24261\sphinxattableend\end{savenotes}
24262
24263
24264\subsubsection{SALT\_TYPE\_NO\_LENGTH}
24265\label{\detokenize{appdev/refs/macros/SALT_TYPE_NO_LENGTH:salt-type-no-length-data}}\label{\detokenize{appdev/refs/macros/SALT_TYPE_NO_LENGTH::doc}}\label{\detokenize{appdev/refs/macros/SALT_TYPE_NO_LENGTH:salt-type-no-length}}\index{SALT\_TYPE\_NO\_LENGTH (built-in variable)}
24266
24267\begin{fulllineitems}
24268\phantomsection\label{\detokenize{appdev/refs/macros/SALT_TYPE_NO_LENGTH:SALT_TYPE_NO_LENGTH}}\pysigline{\sphinxbfcode{SALT\_TYPE\_NO\_LENGTH}}
24269\end{fulllineitems}
24270
24271
24272
24273\begin{savenotes}\sphinxattablestart
24274\centering
24275\begin{tabulary}{\linewidth}[t]{|T|T|}
24276\hline
24277
24278\sphinxcode{SALT\_TYPE\_NO\_LENGTH}
24279&
24280\sphinxcode{UINT\_MAX}
24281\\
24282\hline
24283\end{tabulary}
24284\par
24285\sphinxattableend\end{savenotes}
24286
24287
24288\subsubsection{THREEPARAMOPEN}
24289\label{\detokenize{appdev/refs/macros/THREEPARAMOPEN:threeparamopen}}\label{\detokenize{appdev/refs/macros/THREEPARAMOPEN:threeparamopen-data}}\label{\detokenize{appdev/refs/macros/THREEPARAMOPEN::doc}}\index{THREEPARAMOPEN (built-in variable)}
24290
24291\begin{fulllineitems}
24292\phantomsection\label{\detokenize{appdev/refs/macros/THREEPARAMOPEN:THREEPARAMOPEN}}\pysigline{\sphinxbfcode{THREEPARAMOPEN}}
24293\end{fulllineitems}
24294
24295
24296
24297\begin{savenotes}\sphinxattablestart
24298\centering
24299\begin{tabulary}{\linewidth}[t]{|T|T|}
24300\hline
24301
24302\sphinxcode{THREEPARAMOPEN (x, y, z)}
24303&
24304\sphinxcode{open(x,y,z)}
24305\\
24306\hline
24307\end{tabulary}
24308\par
24309\sphinxattableend\end{savenotes}
24310
24311
24312\subsubsection{TKT\_FLG\_ANONYMOUS}
24313\label{\detokenize{appdev/refs/macros/TKT_FLG_ANONYMOUS::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_ANONYMOUS:tkt-flg-anonymous}}\label{\detokenize{appdev/refs/macros/TKT_FLG_ANONYMOUS:tkt-flg-anonymous-data}}\index{TKT\_FLG\_ANONYMOUS (built-in variable)}
24314
24315\begin{fulllineitems}
24316\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_ANONYMOUS:TKT_FLG_ANONYMOUS}}\pysigline{\sphinxbfcode{TKT\_FLG\_ANONYMOUS}}
24317\end{fulllineitems}
24318
24319
24320
24321\begin{savenotes}\sphinxattablestart
24322\centering
24323\begin{tabulary}{\linewidth}[t]{|T|T|}
24324\hline
24325
24326\sphinxcode{TKT\_FLG\_ANONYMOUS}
24327&
24328\sphinxcode{0x00008000}
24329\\
24330\hline
24331\end{tabulary}
24332\par
24333\sphinxattableend\end{savenotes}
24334
24335
24336\subsubsection{TKT\_FLG\_ENC\_PA\_REP}
24337\label{\detokenize{appdev/refs/macros/TKT_FLG_ENC_PA_REP:tkt-flg-enc-pa-rep}}\label{\detokenize{appdev/refs/macros/TKT_FLG_ENC_PA_REP:tkt-flg-enc-pa-rep-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_ENC_PA_REP::doc}}\index{TKT\_FLG\_ENC\_PA\_REP (built-in variable)}
24338
24339\begin{fulllineitems}
24340\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_ENC_PA_REP:TKT_FLG_ENC_PA_REP}}\pysigline{\sphinxbfcode{TKT\_FLG\_ENC\_PA\_REP}}
24341\end{fulllineitems}
24342
24343
24344
24345\begin{savenotes}\sphinxattablestart
24346\centering
24347\begin{tabulary}{\linewidth}[t]{|T|T|}
24348\hline
24349
24350\sphinxcode{TKT\_FLG\_ENC\_PA\_REP}
24351&
24352\sphinxcode{0x00010000}
24353\\
24354\hline
24355\end{tabulary}
24356\par
24357\sphinxattableend\end{savenotes}
24358
24359
24360\subsubsection{TKT\_FLG\_FORWARDABLE}
24361\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDABLE:tkt-flg-forwardable-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDABLE:tkt-flg-forwardable}}\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDABLE::doc}}\index{TKT\_FLG\_FORWARDABLE (built-in variable)}
24362
24363\begin{fulllineitems}
24364\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDABLE:TKT_FLG_FORWARDABLE}}\pysigline{\sphinxbfcode{TKT\_FLG\_FORWARDABLE}}
24365\end{fulllineitems}
24366
24367
24368
24369\begin{savenotes}\sphinxattablestart
24370\centering
24371\begin{tabulary}{\linewidth}[t]{|T|T|}
24372\hline
24373
24374\sphinxcode{TKT\_FLG\_FORWARDABLE}
24375&
24376\sphinxcode{0x40000000}
24377\\
24378\hline
24379\end{tabulary}
24380\par
24381\sphinxattableend\end{savenotes}
24382
24383
24384\subsubsection{TKT\_FLG\_FORWARDED}
24385\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDED::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDED:tkt-flg-forwarded}}\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDED:tkt-flg-forwarded-data}}\index{TKT\_FLG\_FORWARDED (built-in variable)}
24386
24387\begin{fulllineitems}
24388\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDED:TKT_FLG_FORWARDED}}\pysigline{\sphinxbfcode{TKT\_FLG\_FORWARDED}}
24389\end{fulllineitems}
24390
24391
24392
24393\begin{savenotes}\sphinxattablestart
24394\centering
24395\begin{tabulary}{\linewidth}[t]{|T|T|}
24396\hline
24397
24398\sphinxcode{TKT\_FLG\_FORWARDED}
24399&
24400\sphinxcode{0x20000000}
24401\\
24402\hline
24403\end{tabulary}
24404\par
24405\sphinxattableend\end{savenotes}
24406
24407
24408\subsubsection{TKT\_FLG\_HW\_AUTH}
24409\label{\detokenize{appdev/refs/macros/TKT_FLG_HW_AUTH::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_HW_AUTH:tkt-flg-hw-auth}}\label{\detokenize{appdev/refs/macros/TKT_FLG_HW_AUTH:tkt-flg-hw-auth-data}}\index{TKT\_FLG\_HW\_AUTH (built-in variable)}
24410
24411\begin{fulllineitems}
24412\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_HW_AUTH:TKT_FLG_HW_AUTH}}\pysigline{\sphinxbfcode{TKT\_FLG\_HW\_AUTH}}
24413\end{fulllineitems}
24414
24415
24416
24417\begin{savenotes}\sphinxattablestart
24418\centering
24419\begin{tabulary}{\linewidth}[t]{|T|T|}
24420\hline
24421
24422\sphinxcode{TKT\_FLG\_HW\_AUTH}
24423&
24424\sphinxcode{0x00100000}
24425\\
24426\hline
24427\end{tabulary}
24428\par
24429\sphinxattableend\end{savenotes}
24430
24431
24432\subsubsection{TKT\_FLG\_INITIAL}
24433\label{\detokenize{appdev/refs/macros/TKT_FLG_INITIAL:tkt-flg-initial}}\label{\detokenize{appdev/refs/macros/TKT_FLG_INITIAL::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_INITIAL:tkt-flg-initial-data}}\index{TKT\_FLG\_INITIAL (built-in variable)}
24434
24435\begin{fulllineitems}
24436\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_INITIAL:TKT_FLG_INITIAL}}\pysigline{\sphinxbfcode{TKT\_FLG\_INITIAL}}
24437\end{fulllineitems}
24438
24439
24440
24441\begin{savenotes}\sphinxattablestart
24442\centering
24443\begin{tabulary}{\linewidth}[t]{|T|T|}
24444\hline
24445
24446\sphinxcode{TKT\_FLG\_INITIAL}
24447&
24448\sphinxcode{0x00400000}
24449\\
24450\hline
24451\end{tabulary}
24452\par
24453\sphinxattableend\end{savenotes}
24454
24455
24456\subsubsection{TKT\_FLG\_INVALID}
24457\label{\detokenize{appdev/refs/macros/TKT_FLG_INVALID:tkt-flg-invalid-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_INVALID::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_INVALID:tkt-flg-invalid}}\index{TKT\_FLG\_INVALID (built-in variable)}
24458
24459\begin{fulllineitems}
24460\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_INVALID:TKT_FLG_INVALID}}\pysigline{\sphinxbfcode{TKT\_FLG\_INVALID}}
24461\end{fulllineitems}
24462
24463
24464
24465\begin{savenotes}\sphinxattablestart
24466\centering
24467\begin{tabulary}{\linewidth}[t]{|T|T|}
24468\hline
24469
24470\sphinxcode{TKT\_FLG\_INVALID}
24471&
24472\sphinxcode{0x01000000}
24473\\
24474\hline
24475\end{tabulary}
24476\par
24477\sphinxattableend\end{savenotes}
24478
24479
24480\subsubsection{TKT\_FLG\_MAY\_POSTDATE}
24481\label{\detokenize{appdev/refs/macros/TKT_FLG_MAY_POSTDATE:tkt-flg-may-postdate}}\label{\detokenize{appdev/refs/macros/TKT_FLG_MAY_POSTDATE::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_MAY_POSTDATE:tkt-flg-may-postdate-data}}\index{TKT\_FLG\_MAY\_POSTDATE (built-in variable)}
24482
24483\begin{fulllineitems}
24484\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_MAY_POSTDATE:TKT_FLG_MAY_POSTDATE}}\pysigline{\sphinxbfcode{TKT\_FLG\_MAY\_POSTDATE}}
24485\end{fulllineitems}
24486
24487
24488
24489\begin{savenotes}\sphinxattablestart
24490\centering
24491\begin{tabulary}{\linewidth}[t]{|T|T|}
24492\hline
24493
24494\sphinxcode{TKT\_FLG\_MAY\_POSTDATE}
24495&
24496\sphinxcode{0x04000000}
24497\\
24498\hline
24499\end{tabulary}
24500\par
24501\sphinxattableend\end{savenotes}
24502
24503
24504\subsubsection{TKT\_FLG\_OK\_AS\_DELEGATE}
24505\label{\detokenize{appdev/refs/macros/TKT_FLG_OK_AS_DELEGATE:tkt-flg-ok-as-delegate-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_OK_AS_DELEGATE:tkt-flg-ok-as-delegate}}\label{\detokenize{appdev/refs/macros/TKT_FLG_OK_AS_DELEGATE::doc}}\index{TKT\_FLG\_OK\_AS\_DELEGATE (built-in variable)}
24506
24507\begin{fulllineitems}
24508\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_OK_AS_DELEGATE:TKT_FLG_OK_AS_DELEGATE}}\pysigline{\sphinxbfcode{TKT\_FLG\_OK\_AS\_DELEGATE}}
24509\end{fulllineitems}
24510
24511
24512
24513\begin{savenotes}\sphinxattablestart
24514\centering
24515\begin{tabulary}{\linewidth}[t]{|T|T|}
24516\hline
24517
24518\sphinxcode{TKT\_FLG\_OK\_AS\_DELEGATE}
24519&
24520\sphinxcode{0x00040000}
24521\\
24522\hline
24523\end{tabulary}
24524\par
24525\sphinxattableend\end{savenotes}
24526
24527
24528\subsubsection{TKT\_FLG\_POSTDATED}
24529\label{\detokenize{appdev/refs/macros/TKT_FLG_POSTDATED:tkt-flg-postdated}}\label{\detokenize{appdev/refs/macros/TKT_FLG_POSTDATED::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_POSTDATED:tkt-flg-postdated-data}}\index{TKT\_FLG\_POSTDATED (built-in variable)}
24530
24531\begin{fulllineitems}
24532\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_POSTDATED:TKT_FLG_POSTDATED}}\pysigline{\sphinxbfcode{TKT\_FLG\_POSTDATED}}
24533\end{fulllineitems}
24534
24535
24536
24537\begin{savenotes}\sphinxattablestart
24538\centering
24539\begin{tabulary}{\linewidth}[t]{|T|T|}
24540\hline
24541
24542\sphinxcode{TKT\_FLG\_POSTDATED}
24543&
24544\sphinxcode{0x02000000}
24545\\
24546\hline
24547\end{tabulary}
24548\par
24549\sphinxattableend\end{savenotes}
24550
24551
24552\subsubsection{TKT\_FLG\_PRE\_AUTH}
24553\label{\detokenize{appdev/refs/macros/TKT_FLG_PRE_AUTH:tkt-flg-pre-auth-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_PRE_AUTH::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_PRE_AUTH:tkt-flg-pre-auth}}\index{TKT\_FLG\_PRE\_AUTH (built-in variable)}
24554
24555\begin{fulllineitems}
24556\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_PRE_AUTH:TKT_FLG_PRE_AUTH}}\pysigline{\sphinxbfcode{TKT\_FLG\_PRE\_AUTH}}
24557\end{fulllineitems}
24558
24559
24560
24561\begin{savenotes}\sphinxattablestart
24562\centering
24563\begin{tabulary}{\linewidth}[t]{|T|T|}
24564\hline
24565
24566\sphinxcode{TKT\_FLG\_PRE\_AUTH}
24567&
24568\sphinxcode{0x00200000}
24569\\
24570\hline
24571\end{tabulary}
24572\par
24573\sphinxattableend\end{savenotes}
24574
24575
24576\subsubsection{TKT\_FLG\_PROXIABLE}
24577\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXIABLE:tkt-flg-proxiable}}\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXIABLE:tkt-flg-proxiable-data}}\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXIABLE::doc}}\index{TKT\_FLG\_PROXIABLE (built-in variable)}
24578
24579\begin{fulllineitems}
24580\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXIABLE:TKT_FLG_PROXIABLE}}\pysigline{\sphinxbfcode{TKT\_FLG\_PROXIABLE}}
24581\end{fulllineitems}
24582
24583
24584
24585\begin{savenotes}\sphinxattablestart
24586\centering
24587\begin{tabulary}{\linewidth}[t]{|T|T|}
24588\hline
24589
24590\sphinxcode{TKT\_FLG\_PROXIABLE}
24591&
24592\sphinxcode{0x10000000}
24593\\
24594\hline
24595\end{tabulary}
24596\par
24597\sphinxattableend\end{savenotes}
24598
24599
24600\subsubsection{TKT\_FLG\_PROXY}
24601\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXY::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXY:tkt-flg-proxy}}\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXY:tkt-flg-proxy-data}}\index{TKT\_FLG\_PROXY (built-in variable)}
24602
24603\begin{fulllineitems}
24604\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXY:TKT_FLG_PROXY}}\pysigline{\sphinxbfcode{TKT\_FLG\_PROXY}}
24605\end{fulllineitems}
24606
24607
24608
24609\begin{savenotes}\sphinxattablestart
24610\centering
24611\begin{tabulary}{\linewidth}[t]{|T|T|}
24612\hline
24613
24614\sphinxcode{TKT\_FLG\_PROXY}
24615&
24616\sphinxcode{0x08000000}
24617\\
24618\hline
24619\end{tabulary}
24620\par
24621\sphinxattableend\end{savenotes}
24622
24623
24624\subsubsection{TKT\_FLG\_RENEWABLE}
24625\label{\detokenize{appdev/refs/macros/TKT_FLG_RENEWABLE::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_RENEWABLE:tkt-flg-renewable}}\label{\detokenize{appdev/refs/macros/TKT_FLG_RENEWABLE:tkt-flg-renewable-data}}\index{TKT\_FLG\_RENEWABLE (built-in variable)}
24626
24627\begin{fulllineitems}
24628\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_RENEWABLE:TKT_FLG_RENEWABLE}}\pysigline{\sphinxbfcode{TKT\_FLG\_RENEWABLE}}
24629\end{fulllineitems}
24630
24631
24632
24633\begin{savenotes}\sphinxattablestart
24634\centering
24635\begin{tabulary}{\linewidth}[t]{|T|T|}
24636\hline
24637
24638\sphinxcode{TKT\_FLG\_RENEWABLE}
24639&
24640\sphinxcode{0x00800000}
24641\\
24642\hline
24643\end{tabulary}
24644\par
24645\sphinxattableend\end{savenotes}
24646
24647
24648\subsubsection{TKT\_FLG\_TRANSIT\_POLICY\_CHECKED}
24649\label{\detokenize{appdev/refs/macros/TKT_FLG_TRANSIT_POLICY_CHECKED::doc}}\label{\detokenize{appdev/refs/macros/TKT_FLG_TRANSIT_POLICY_CHECKED:tkt-flg-transit-policy-checked}}\label{\detokenize{appdev/refs/macros/TKT_FLG_TRANSIT_POLICY_CHECKED:tkt-flg-transit-policy-checked-data}}\index{TKT\_FLG\_TRANSIT\_POLICY\_CHECKED (built-in variable)}
24650
24651\begin{fulllineitems}
24652\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_TRANSIT_POLICY_CHECKED:TKT_FLG_TRANSIT_POLICY_CHECKED}}\pysigline{\sphinxbfcode{TKT\_FLG\_TRANSIT\_POLICY\_CHECKED}}
24653\end{fulllineitems}
24654
24655
24656
24657\begin{savenotes}\sphinxattablestart
24658\centering
24659\begin{tabulary}{\linewidth}[t]{|T|T|}
24660\hline
24661
24662\sphinxcode{TKT\_FLG\_TRANSIT\_POLICY\_CHECKED}
24663&
24664\sphinxcode{0x00080000}
24665\\
24666\hline
24667\end{tabulary}
24668\par
24669\sphinxattableend\end{savenotes}
24670
24671
24672\subsubsection{VALID\_INT\_BITS}
24673\label{\detokenize{appdev/refs/macros/VALID_INT_BITS:valid-int-bits}}\label{\detokenize{appdev/refs/macros/VALID_INT_BITS:valid-int-bits-data}}\label{\detokenize{appdev/refs/macros/VALID_INT_BITS::doc}}\index{VALID\_INT\_BITS (built-in variable)}
24674
24675\begin{fulllineitems}
24676\phantomsection\label{\detokenize{appdev/refs/macros/VALID_INT_BITS:VALID_INT_BITS}}\pysigline{\sphinxbfcode{VALID\_INT\_BITS}}
24677\end{fulllineitems}
24678
24679
24680
24681\begin{savenotes}\sphinxattablestart
24682\centering
24683\begin{tabulary}{\linewidth}[t]{|T|T|}
24684\hline
24685
24686\sphinxcode{VALID\_INT\_BITS}
24687&
24688\sphinxcode{INT\_MAX}
24689\\
24690\hline
24691\end{tabulary}
24692\par
24693\sphinxattableend\end{savenotes}
24694
24695
24696\subsubsection{VALID\_UINT\_BITS}
24697\label{\detokenize{appdev/refs/macros/VALID_UINT_BITS:valid-uint-bits}}\label{\detokenize{appdev/refs/macros/VALID_UINT_BITS::doc}}\label{\detokenize{appdev/refs/macros/VALID_UINT_BITS:valid-uint-bits-data}}\index{VALID\_UINT\_BITS (built-in variable)}
24698
24699\begin{fulllineitems}
24700\phantomsection\label{\detokenize{appdev/refs/macros/VALID_UINT_BITS:VALID_UINT_BITS}}\pysigline{\sphinxbfcode{VALID\_UINT\_BITS}}
24701\end{fulllineitems}
24702
24703
24704
24705\begin{savenotes}\sphinxattablestart
24706\centering
24707\begin{tabulary}{\linewidth}[t]{|T|T|}
24708\hline
24709
24710\sphinxcode{VALID\_UINT\_BITS}
24711&
24712\sphinxcode{UINT\_MAX}
24713\\
24714\hline
24715\end{tabulary}
24716\par
24717\sphinxattableend\end{savenotes}
24718
24719
24720\subsubsection{krb5\_const}
24721\label{\detokenize{appdev/refs/macros/krb5_const:krb5-const}}\label{\detokenize{appdev/refs/macros/krb5_const:krb5-const-data}}\label{\detokenize{appdev/refs/macros/krb5_const::doc}}\index{krb5\_const (built-in variable)}
24722
24723\begin{fulllineitems}
24724\phantomsection\label{\detokenize{appdev/refs/macros/krb5_const:krb5_const}}\pysigline{\sphinxbfcode{krb5\_const}}
24725\end{fulllineitems}
24726
24727
24728
24729\begin{savenotes}\sphinxattablestart
24730\centering
24731\begin{tabulary}{\linewidth}[t]{|T|T|}
24732\hline
24733
24734\sphinxcode{krb5\_const}
24735&
24736\sphinxcode{const}
24737\\
24738\hline
24739\end{tabulary}
24740\par
24741\sphinxattableend\end{savenotes}
24742
24743
24744\subsubsection{krb5\_princ\_component}
24745\label{\detokenize{appdev/refs/macros/krb5_princ_component::doc}}\label{\detokenize{appdev/refs/macros/krb5_princ_component:krb5-princ-component-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_component:krb5-princ-component}}\index{krb5\_princ\_component (built-in variable)}
24746
24747\begin{fulllineitems}
24748\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_component:krb5_princ_component}}\pysigline{\sphinxbfcode{krb5\_princ\_component}}
24749\end{fulllineitems}
24750
24751
24752
24753\begin{savenotes}\sphinxattablestart
24754\centering
24755\begin{tabulary}{\linewidth}[t]{|T|T|}
24756\hline
24757
24758\sphinxcode{krb5\_princ\_component (context, princ, i)}
24759&
24760\sphinxcode{(((i) \textless{} krb5\_princ\_size(context, princ)) ? (princ)-\textgreater{}data + (i) : NULL)}
24761\\
24762\hline
24763\end{tabulary}
24764\par
24765\sphinxattableend\end{savenotes}
24766
24767
24768\subsubsection{krb5\_princ\_name}
24769\label{\detokenize{appdev/refs/macros/krb5_princ_name:krb5-princ-name-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_name:krb5-princ-name}}\label{\detokenize{appdev/refs/macros/krb5_princ_name::doc}}\index{krb5\_princ\_name (built-in variable)}
24770
24771\begin{fulllineitems}
24772\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_name:krb5_princ_name}}\pysigline{\sphinxbfcode{krb5\_princ\_name}}
24773\end{fulllineitems}
24774
24775
24776
24777\begin{savenotes}\sphinxattablestart
24778\centering
24779\begin{tabulary}{\linewidth}[t]{|T|T|}
24780\hline
24781
24782\sphinxcode{krb5\_princ\_name (context, princ)}
24783&
24784\sphinxcode{(princ)-\textgreater{}data}
24785\\
24786\hline
24787\end{tabulary}
24788\par
24789\sphinxattableend\end{savenotes}
24790
24791
24792\subsubsection{krb5\_princ\_realm}
24793\label{\detokenize{appdev/refs/macros/krb5_princ_realm::doc}}\label{\detokenize{appdev/refs/macros/krb5_princ_realm:krb5-princ-realm-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_realm:krb5-princ-realm}}\index{krb5\_princ\_realm (built-in variable)}
24794
24795\begin{fulllineitems}
24796\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_realm:krb5_princ_realm}}\pysigline{\sphinxbfcode{krb5\_princ\_realm}}
24797\end{fulllineitems}
24798
24799
24800
24801\begin{savenotes}\sphinxattablestart
24802\centering
24803\begin{tabulary}{\linewidth}[t]{|T|T|}
24804\hline
24805
24806\sphinxcode{krb5\_princ\_realm (context, princ)}
24807&
24808\sphinxcode{(\&(princ)-\textgreater{}realm)}
24809\\
24810\hline
24811\end{tabulary}
24812\par
24813\sphinxattableend\end{savenotes}
24814
24815
24816\subsubsection{krb5\_princ\_set\_realm}
24817\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm:krb5-princ-set-realm-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm::doc}}\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm:krb5-princ-set-realm}}\index{krb5\_princ\_set\_realm (built-in variable)}
24818
24819\begin{fulllineitems}
24820\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm:krb5_princ_set_realm}}\pysigline{\sphinxbfcode{krb5\_princ\_set\_realm}}
24821\end{fulllineitems}
24822
24823
24824
24825\begin{savenotes}\sphinxattablestart
24826\centering
24827\begin{tabulary}{\linewidth}[t]{|T|T|}
24828\hline
24829
24830\sphinxcode{krb5\_princ\_set\_realm (context, princ, value)}
24831&
24832\sphinxcode{((princ)-\textgreater{}realm = *(value))}
24833\\
24834\hline
24835\end{tabulary}
24836\par
24837\sphinxattableend\end{savenotes}
24838
24839
24840\subsubsection{krb5\_princ\_set\_realm\_data}
24841\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_data:krb5-princ-set-realm-data-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_data::doc}}\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_data:krb5-princ-set-realm-data}}\index{krb5\_princ\_set\_realm\_data (built-in variable)}
24842
24843\begin{fulllineitems}
24844\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_data:krb5_princ_set_realm_data}}\pysigline{\sphinxbfcode{krb5\_princ\_set\_realm\_data}}
24845\end{fulllineitems}
24846
24847
24848
24849\begin{savenotes}\sphinxattablestart
24850\centering
24851\begin{tabulary}{\linewidth}[t]{|T|T|}
24852\hline
24853
24854\sphinxcode{krb5\_princ\_set\_realm\_data (context, princ, value)}
24855&
24856\sphinxcode{(princ)-\textgreater{}realm.data = (value)}
24857\\
24858\hline
24859\end{tabulary}
24860\par
24861\sphinxattableend\end{savenotes}
24862
24863
24864\subsubsection{krb5\_princ\_set\_realm\_length}
24865\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_length:krb5-princ-set-realm-length-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_length::doc}}\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_length:krb5-princ-set-realm-length}}\index{krb5\_princ\_set\_realm\_length (built-in variable)}
24866
24867\begin{fulllineitems}
24868\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_length:krb5_princ_set_realm_length}}\pysigline{\sphinxbfcode{krb5\_princ\_set\_realm\_length}}
24869\end{fulllineitems}
24870
24871
24872
24873\begin{savenotes}\sphinxattablestart
24874\centering
24875\begin{tabulary}{\linewidth}[t]{|T|T|}
24876\hline
24877
24878\sphinxcode{krb5\_princ\_set\_realm\_length (context, princ, value)}
24879&
24880\sphinxcode{(princ)-\textgreater{}realm.length = (value)}
24881\\
24882\hline
24883\end{tabulary}
24884\par
24885\sphinxattableend\end{savenotes}
24886
24887
24888\subsubsection{krb5\_princ\_size}
24889\label{\detokenize{appdev/refs/macros/krb5_princ_size:krb5-princ-size-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_size::doc}}\label{\detokenize{appdev/refs/macros/krb5_princ_size:krb5-princ-size}}\index{krb5\_princ\_size (built-in variable)}
24890
24891\begin{fulllineitems}
24892\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_size:krb5_princ_size}}\pysigline{\sphinxbfcode{krb5\_princ\_size}}
24893\end{fulllineitems}
24894
24895
24896
24897\begin{savenotes}\sphinxattablestart
24898\centering
24899\begin{tabulary}{\linewidth}[t]{|T|T|}
24900\hline
24901
24902\sphinxcode{krb5\_princ\_size (context, princ)}
24903&
24904\sphinxcode{(princ)-\textgreater{}length}
24905\\
24906\hline
24907\end{tabulary}
24908\par
24909\sphinxattableend\end{savenotes}
24910
24911
24912\subsubsection{krb5\_princ\_type}
24913\label{\detokenize{appdev/refs/macros/krb5_princ_type:krb5-princ-type}}\label{\detokenize{appdev/refs/macros/krb5_princ_type:krb5-princ-type-data}}\label{\detokenize{appdev/refs/macros/krb5_princ_type::doc}}\index{krb5\_princ\_type (built-in variable)}
24914
24915\begin{fulllineitems}
24916\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_type:krb5_princ_type}}\pysigline{\sphinxbfcode{krb5\_princ\_type}}
24917\end{fulllineitems}
24918
24919
24920
24921\begin{savenotes}\sphinxattablestart
24922\centering
24923\begin{tabulary}{\linewidth}[t]{|T|T|}
24924\hline
24925
24926\sphinxcode{krb5\_princ\_type (context, princ)}
24927&
24928\sphinxcode{(princ)-\textgreater{}type}
24929\\
24930\hline
24931\end{tabulary}
24932\par
24933\sphinxattableend\end{savenotes}
24934
24935
24936\subsubsection{krb5\_roundup}
24937\label{\detokenize{appdev/refs/macros/krb5_roundup:krb5-roundup-data}}\label{\detokenize{appdev/refs/macros/krb5_roundup:krb5-roundup}}\label{\detokenize{appdev/refs/macros/krb5_roundup::doc}}\index{krb5\_roundup (built-in variable)}
24938
24939\begin{fulllineitems}
24940\phantomsection\label{\detokenize{appdev/refs/macros/krb5_roundup:krb5_roundup}}\pysigline{\sphinxbfcode{krb5\_roundup}}
24941\end{fulllineitems}
24942
24943
24944
24945\begin{savenotes}\sphinxattablestart
24946\centering
24947\begin{tabulary}{\linewidth}[t]{|T|T|}
24948\hline
24949
24950\sphinxcode{krb5\_roundup (x, y)}
24951&
24952\sphinxcode{((((x) + (y) - 1)/(y))*(y))}
24953\\
24954\hline
24955\end{tabulary}
24956\par
24957\sphinxattableend\end{savenotes}
24958
24959
24960\subsubsection{krb5\_x}
24961\label{\detokenize{appdev/refs/macros/krb5_x::doc}}\label{\detokenize{appdev/refs/macros/krb5_x:krb5-x}}\label{\detokenize{appdev/refs/macros/krb5_x:krb5-x-data}}\index{krb5\_x (built-in variable)}
24962
24963\begin{fulllineitems}
24964\phantomsection\label{\detokenize{appdev/refs/macros/krb5_x:krb5_x}}\pysigline{\sphinxbfcode{krb5\_x}}
24965\end{fulllineitems}
24966
24967
24968
24969\begin{savenotes}\sphinxattablestart
24970\centering
24971\begin{tabulary}{\linewidth}[t]{|T|T|}
24972\hline
24973
24974\sphinxcode{krb5\_x (ptr, args)}
24975&
24976\sphinxcode{((ptr)?((*(ptr)) args):(abort(),1))}
24977\\
24978\hline
24979\end{tabulary}
24980\par
24981\sphinxattableend\end{savenotes}
24982
24983
24984\subsubsection{krb5\_xc}
24985\label{\detokenize{appdev/refs/macros/krb5_xc::doc}}\label{\detokenize{appdev/refs/macros/krb5_xc:krb5-xc}}\label{\detokenize{appdev/refs/macros/krb5_xc:krb5-xc-data}}\index{krb5\_xc (built-in variable)}
24986
24987\begin{fulllineitems}
24988\phantomsection\label{\detokenize{appdev/refs/macros/krb5_xc:krb5_xc}}\pysigline{\sphinxbfcode{krb5\_xc}}
24989\end{fulllineitems}
24990
24991
24992
24993\begin{savenotes}\sphinxattablestart
24994\centering
24995\begin{tabulary}{\linewidth}[t]{|T|T|}
24996\hline
24997
24998\sphinxcode{krb5\_xc (ptr, args)}
24999&
25000\sphinxcode{((ptr)?((*(ptr)) args):(abort(),(char*)0))}
25001\\
25002\hline
25003\end{tabulary}
25004\par
25005\sphinxattableend\end{savenotes}
25006
25007
25008\subsection{Deprecated macros}
25009\label{\detokenize{appdev/refs/macros/index:deprecated-macros}}
25010
25011\subsubsection{krb524\_convert\_creds\_kdc}
25012\label{\detokenize{appdev/refs/macros/krb524_convert_creds_kdc:krb524-convert-creds-kdc-data}}\label{\detokenize{appdev/refs/macros/krb524_convert_creds_kdc:krb524-convert-creds-kdc}}\label{\detokenize{appdev/refs/macros/krb524_convert_creds_kdc::doc}}\index{krb524\_convert\_creds\_kdc (built-in variable)}
25013
25014\begin{fulllineitems}
25015\phantomsection\label{\detokenize{appdev/refs/macros/krb524_convert_creds_kdc:krb524_convert_creds_kdc}}\pysigline{\sphinxbfcode{krb524\_convert\_creds\_kdc}}
25016\end{fulllineitems}
25017
25018
25019
25020\begin{savenotes}\sphinxattablestart
25021\centering
25022\begin{tabulary}{\linewidth}[t]{|T|T|}
25023\hline
25024
25025\sphinxcode{krb524\_convert\_creds\_kdc}
25026&
25027\sphinxcode{krb5\_524\_convert\_creds}
25028\\
25029\hline
25030\end{tabulary}
25031\par
25032\sphinxattableend\end{savenotes}
25033
25034
25035\subsubsection{krb524\_init\_ets}
25036\label{\detokenize{appdev/refs/macros/krb524_init_ets:krb524-init-ets-data}}\label{\detokenize{appdev/refs/macros/krb524_init_ets::doc}}\label{\detokenize{appdev/refs/macros/krb524_init_ets:krb524-init-ets}}\index{krb524\_init\_ets (built-in variable)}
25037
25038\begin{fulllineitems}
25039\phantomsection\label{\detokenize{appdev/refs/macros/krb524_init_ets:krb524_init_ets}}\pysigline{\sphinxbfcode{krb524\_init\_ets}}
25040\end{fulllineitems}
25041
25042
25043
25044\begin{savenotes}\sphinxattablestart
25045\centering
25046\begin{tabulary}{\linewidth}[t]{|T|T|}
25047\hline
25048
25049\sphinxcode{krb524\_init\_ets (x)}
25050&
25051\sphinxcode{(0)}
25052\\
25053\hline
25054\end{tabulary}
25055\par
25056\sphinxattableend\end{savenotes}
25057
25058
25059
25060\renewcommand{\indexname}{Index}
25061\printindex
25062\end{document}