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.18.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\end{itemize}
142
143
144\section{Initiator credentials}
145\label{\detokenize{appdev/gssapi:initiator-credentials}}
146A GSSAPI client application uses \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.19}{gss\_init\_sec\_context} to establish a
147security context.  The \sphinxstyleemphasis{initiator\_cred\_handle} parameter determines
148what tickets are used to establish the connection.  An application can
149either pass \sphinxstylestrong{GSS\_C\_NO\_CREDENTIAL} to use the default client
150credential, or it can use \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred} beforehand to acquire an
151initiator credential.  The call to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred} may include a
152\sphinxstyleemphasis{desired\_name} parameter, or it may pass \sphinxstylestrong{GSS\_C\_NO\_NAME} if it does
153not have a specific name preference.
154
155If the desired name for a krb5 initiator credential is a host-based
156name, it is converted to a principal name of the form
157\sphinxcode{service/hostname} in the local realm, where \sphinxstyleemphasis{hostname} is the local
158hostname if not specified.  The hostname will be canonicalized using
159forward name resolution, and possibly also using reverse name
160resolution depending on the value of the \sphinxstylestrong{rdns} variable in
161\DUrole{xref,std,std-ref}{libdefaults}.
162
163If a desired name is specified in the call to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred}, the
164krb5 mechanism will attempt to find existing tickets for that client
165principal name in the default credential cache or collection.  If the
166default cache type does not support a collection, and the default
167cache contains credentials for a different principal than the desired
168name, a \sphinxstylestrong{GSS\_S\_CRED\_UNAVAIL} error will be returned with a minor
169code indicating a mismatch.
170
171If no existing tickets are available for the desired name, but the
172name has an entry in the default client \DUrole{xref,std,std-ref}{keytab\_definition}, the
173krb5 mechanism will acquire initial tickets for the name using the
174default client keytab.
175
176If no desired name is specified, credential acquisition will be
177deferred until the credential is used in a call to
178\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
179\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
180principal name using the credential cache selection facility.  (This
181facility might, for instance, try to choose existing tickets for a
182client principal in the same realm as the target service).  If there
183are no existing tickets for the chosen principal, but it is present in
184the default client keytab, the krb5 mechanism will acquire initial
185tickets using the keytab.
186
187If the target name cannot be used to select a client principal
188(because the credentials are used in a call to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.21}{gss\_inquire\_cred}), or
189if the credential cache selection facility cannot choose a principal
190for it, the default credential cache will be selected if it exists and
191contains tickets.
192
193If the default credential cache does not exist, but the default client
194keytab does, the krb5 mechanism will try to acquire initial tickets
195for the first principal in the default client keytab.
196
197If the krb5 mechanism acquires initial tickets using the default
198client keytab, the resulting tickets will be stored in the default
199cache or collection, and will be refreshed by future calls to
200\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred} as they approach their expire time.
201
202
203\section{Acceptor names}
204\label{\detokenize{appdev/gssapi:acceptor-names}}
205A GSSAPI server application uses \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.1}{gss\_accept\_sec\_context} to establish
206a security context based on tokens provided by the client.  The
207\sphinxstyleemphasis{acceptor\_cred\_handle} parameter determines what
208\DUrole{xref,std,std-ref}{keytab\_definition} entries may be authenticated to by the
209client, if the krb5 mechanism is used.
210
211The simplest choice is to pass \sphinxstylestrong{GSS\_C\_NO\_CREDENTIAL} as the acceptor
212credential.  In this case, clients may authenticate to any service
213principal in the default keytab (typically \DUrole{xref,std,std-ref}{DEFKTNAME}, or the value of
214the \sphinxstylestrong{KRB5\_KTNAME} environment variable).  This is the recommended
215approach if the server application has no specific requirements to the
216contrary.
217
218A server may acquire an acceptor credential with \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred} and
219a \sphinxstyleemphasis{cred\_usage} of \sphinxstylestrong{GSS\_C\_ACCEPT} or \sphinxstylestrong{GSS\_C\_BOTH}.  If the
220\sphinxstyleemphasis{desired\_name} parameter is \sphinxstylestrong{GSS\_C\_NO\_NAME}, then clients will be
221allowed to authenticate to any service principal in the default
222keytab, just as if no acceptor credential was supplied.
223
224If a server wishes to specify a \sphinxstyleemphasis{desired\_name} to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred},
225the most common choice is a host-based name.  If the host-based
226\sphinxstyleemphasis{desired\_name} contains just a \sphinxstyleemphasis{service}, then clients will be allowed
227to authenticate to any host-based service principal (that is, a
228principal of the form \sphinxcode{service/hostname@REALM}) for the named
229service, regardless of hostname or realm, as long as it is present in
230the default keytab.  If the input name contains both a \sphinxstyleemphasis{service} and a
231\sphinxstyleemphasis{hostname}, clients will be allowed to authenticate to any host-based
232principal for the named service and hostname, regardless of realm.
233
234\begin{sphinxadmonition}{note}{Note:}
235If a \sphinxstyleemphasis{hostname} is specified, it will be canonicalized
236using forward name resolution, and possibly also using
237reverse name resolution depending on the value of the
238\sphinxstylestrong{rdns} variable in \DUrole{xref,std,std-ref}{libdefaults}.
239\end{sphinxadmonition}
240
241\begin{sphinxadmonition}{note}{Note:}
242If the \sphinxstylestrong{ignore\_acceptor\_hostname} variable in
243\DUrole{xref,std,std-ref}{libdefaults} is enabled, then \sphinxstyleemphasis{hostname} will be
244ignored even if one is specified in the input name.
245\end{sphinxadmonition}
246
247\begin{sphinxadmonition}{note}{Note:}
248In MIT krb5 versions prior to 1.10, and in Heimdal’s
249implementation of the krb5 mechanism, an input name with
250just a \sphinxstyleemphasis{service} is treated like an input name of
251\sphinxcode{service@localhostname}, where \sphinxstyleemphasis{localhostname} is the
252string returned by gethostname().
253\end{sphinxadmonition}
254
255If the \sphinxstyleemphasis{desired\_name} is a krb5 principal name or a local system name
256type which is mapped to a krb5 principal name, clients will only be
257allowed to authenticate to that principal in the default keytab.
258
259
260\section{Name Attributes}
261\label{\detokenize{appdev/gssapi:name-attributes}}
262In release 1.8 or later, the \sphinxhref{https://tools.ietf.org/html/rfc6680.txt\#section-7.4}{gss\_inquire\_name} and
263\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
264used to retrieve name attributes from the \sphinxstyleemphasis{src\_name} returned by
265\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.1}{gss\_accept\_sec\_context}.  The following attributes are defined when
266the krb5 mechanism is used:
267
268\phantomsection\label{\detokenize{appdev/gssapi:gssapi-authind-attr}}\begin{itemize}
269\item {}
270“auth-indicators” attribute:
271
272\end{itemize}
273
274This attribute will be included in the \sphinxhref{https://tools.ietf.org/html/rfc6680.txt\#section-7.4}{gss\_inquire\_name} output if the
275ticket contains \DUrole{xref,std,std-ref}{authentication indicators}.
276One indicator is returned per invocation of \sphinxhref{https://tools.ietf.org/html/6680.html\#section-7.5}{gss\_get\_name\_attribute},
277so multiple invocations may be necessary to retrieve all of the
278indicators from the ticket.  (New in release 1.15.)
279
280
281\section{Importing and exporting credentials}
282\label{\detokenize{appdev/gssapi:importing-and-exporting-credentials}}
283The following GSSAPI extensions can be used to import and export
284credentials (declared in \sphinxcode{\textless{}gssapi/gssapi\_ext.h\textgreater{}}):
285
286\fvset{hllines={, ,}}%
287\begin{sphinxVerbatim}[commandchars=\\\{\}]
288\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}{,}
289                          \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{n}{cred\PYGZus{}handle}\PYG{p}{,}
290                          \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{token}\PYG{p}{)}\PYG{p}{;}
291
292\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}{,}
293                          \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{token}\PYG{p}{,}
294                          \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{o}{*}\PYG{n}{cred\PYGZus{}handle}\PYG{p}{)}\PYG{p}{;}
295\end{sphinxVerbatim}
296
297The first function serializes a GSSAPI credential handle into a
298buffer; the second unseralizes a buffer into a GSSAPI credential
299handle.  Serializing a credential does not destroy it.  If any of the
300mechanisms used in \sphinxstyleemphasis{cred\_handle} do not support serialization,
301gss\_export\_cred will return \sphinxstylestrong{GSS\_S\_UNAVAILABLE}.  As with other
302GSSAPI serialization functions, these extensions are only intended to
303work with a matching implementation on the other side; they do not
304serialize credentials in a standardized format.
305
306A serialized credential may contain secret information such as ticket
307session keys.  The serialization format does not protect this
308information from eavesdropping or tampering.  The calling application
309must take care to protect the serialized credential when communicating
310it over an insecure channel or to an untrusted party.
311
312A krb5 GSSAPI credential may contain references to a credential cache,
313a client keytab, an acceptor keytab, and a replay cache.  These
314resources are normally serialized as references to their external
315locations (such as the filename of the credential cache).  Because of
316this, a serialized krb5 credential can only be imported by a process
317with similar privileges to the exporter.  A serialized credential
318should not be trusted if it originates from a source with lower
319privileges than the importer, as it may contain references to external
320credential cache, keytab, or replay cache resources not accessible to
321the originator.
322
323An exception to the above rule applies when a krb5 GSSAPI credential
324refers to a memory credential cache, as is normally the case for
325delegated credentials received by \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.1}{gss\_accept\_sec\_context}.  In this
326case, the contents of the credential cache are serialized, so that the
327resulting token may be imported even if the original memory credential
328cache no longer exists.
329
330
331\section{Constrained delegation (S4U)}
332\label{\detokenize{appdev/gssapi:constrained-delegation-s4u}}
333The Microsoft S4U2Self and S4U2Proxy Kerberos protocol extensions
334allow an intermediate service to acquire credentials from a client to
335a target service without requiring the client to delegate a
336ticket-granting ticket, if the KDC is configured to allow it.
337
338To perform a constrained delegation operation, the intermediate
339service must submit to the KDC an “evidence ticket” from the client to
340the intermediate service.  An evidence ticket can be acquired when the
341client authenticates to the intermediate service with Kerberos, or
342with an S4U2Self request if the KDC allows it.  The MIT krb5 GSSAPI
343library represents an evidence ticket using a “proxy credential”,
344which is a special kind of gss\_cred\_id\_t object whose underlying
345credential cache contains the evidence ticket and a krbtgt ticket for
346the intermediate service.
347
348To acquire a proxy credential during client authentication, the
349service should first create an acceptor credential using the
350\sphinxstylestrong{GSS\_C\_BOTH} usage.  The application should then pass this
351credential as the \sphinxstyleemphasis{acceptor\_cred\_handle} to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.1}{gss\_accept\_sec\_context},
352and also pass a \sphinxstyleemphasis{delegated\_cred\_handle} output parameter to receive a
353proxy credential containing the evidence ticket.  The output value of
354\sphinxstyleemphasis{delegated\_cred\_handle} may be a delegated ticket-granting ticket if
355the client sent one, or a proxy credential if not.  If the library can
356determine that the client’s ticket is not a valid evidence ticket, it
357will place \sphinxstylestrong{GSS\_C\_NO\_CREDENTIAL} in \sphinxstyleemphasis{delegated\_cred\_handle}.
358
359To acquire a proxy credential using an S4U2Self request, the service
360can use the following GSSAPI extension:
361
362\fvset{hllines={, ,}}%
363\begin{sphinxVerbatim}[commandchars=\\\{\}]
364\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}{,}
365                                            \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{n}{icred}\PYG{p}{,}
366                                            \PYG{n}{gss\PYGZus{}name\PYGZus{}t} \PYG{n}{desired\PYGZus{}name}\PYG{p}{,}
367                                            \PYG{n}{OM\PYGZus{}uint32} \PYG{n}{time\PYGZus{}req}\PYG{p}{,}
368                                            \PYG{n}{gss\PYGZus{}OID\PYGZus{}set} \PYG{n}{desired\PYGZus{}mechs}\PYG{p}{,}
369                                            \PYG{n}{gss\PYGZus{}cred\PYGZus{}usage\PYGZus{}t} \PYG{n}{cred\PYGZus{}usage}\PYG{p}{,}
370                                            \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{o}{*}\PYG{n}{output\PYGZus{}cred}\PYG{p}{,}
371                                            \PYG{n}{gss\PYGZus{}OID\PYGZus{}set} \PYG{o}{*}\PYG{n}{actual\PYGZus{}mechs}\PYG{p}{,}
372                                            \PYG{n}{OM\PYGZus{}uint32} \PYG{o}{*}\PYG{n}{time\PYGZus{}rec}\PYG{p}{)}\PYG{p}{;}
373\end{sphinxVerbatim}
374
375The parameters to this function are similar to those of
376\sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.2}{gss\_acquire\_cred}, except that \sphinxstyleemphasis{icred} is used to make an S4U2Self
377request to the KDC for a ticket from \sphinxstyleemphasis{desired\_name} to the
378intermediate service.  Both \sphinxstyleemphasis{icred} and \sphinxstyleemphasis{desired\_name} are required
379for this function; passing \sphinxstylestrong{GSS\_C\_NO\_CREDENTIAL} or
380\sphinxstylestrong{GSS\_C\_NO\_NAME} will cause the call to fail.  \sphinxstyleemphasis{icred} must contain a
381krbtgt ticket for the intermediate service.  The result of this
382operation is a proxy credential.  (Prior to release 1.18, the result
383of this operation may be a regular credential for \sphinxstyleemphasis{desired\_name}, if
384the KDC issues a non-forwardable ticket.)
385
386Once the intermediate service has a proxy credential, it can simply
387pass it to \sphinxhref{https://tools.ietf.org/html/rfc2744.html\#section-5.19}{gss\_init\_sec\_context} as the \sphinxstyleemphasis{initiator\_cred\_handle}
388parameter, and the desired service as the \sphinxstyleemphasis{target\_name} parameter.
389The GSSAPI library will present the krbtgt ticket and evidence ticket
390in the proxy credential to the KDC in an S4U2Proxy request; if the
391intermediate service has the appropriate permissions, the KDC will
392issue a ticket from the client to the target service.  The GSSAPI
393library will then use this ticket to authenticate to the target
394service.
395
396If an application needs to find out whether a credential it holds is a
397proxy credential and the name of the intermediate service, it can
398query the credential with the \sphinxstylestrong{GSS\_KRB5\_GET\_CRED\_IMPERSONATOR} OID
399(new in release 1.16, declared in \sphinxcode{\textless{}gssapi/gssapi\_krb5.h\textgreater{}}) using
400the gss\_inquire\_cred\_by\_oid extension (declared in
401\sphinxcode{\textless{}gssapi/gssapi\_ext.h\textgreater{}}):
402
403\fvset{hllines={, ,}}%
404\begin{sphinxVerbatim}[commandchars=\\\{\}]
405\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}{,}
406                                  \PYG{n}{const} \PYG{n}{gss\PYGZus{}cred\PYGZus{}id\PYGZus{}t} \PYG{n}{cred\PYGZus{}handle}\PYG{p}{,}
407                                  \PYG{n}{gss\PYGZus{}OID} \PYG{n}{desired\PYGZus{}object}\PYG{p}{,}
408                                  \PYG{n}{gss\PYGZus{}buffer\PYGZus{}set\PYGZus{}t} \PYG{o}{*}\PYG{n}{data\PYGZus{}set}\PYG{p}{)}\PYG{p}{;}
409\end{sphinxVerbatim}
410
411If the call succeeds and \sphinxstyleemphasis{cred\_handle} is a proxy credential,
412\sphinxstyleemphasis{data\_set} will be set to a single-element buffer set containing the
413unparsed principal name of the intermediate service.  If \sphinxstyleemphasis{cred\_handle}
414is not a proxy credential, \sphinxstyleemphasis{data\_set} will be set to an empty buffer
415set.  If the library does not support the query,
416gss\_inquire\_cred\_by\_oid will return \sphinxstylestrong{GSS\_S\_UNAVAILABLE}.
417
418
419\section{AEAD message wrapping}
420\label{\detokenize{appdev/gssapi:aead-message-wrapping}}
421The following GSSAPI extensions (declared in
422\sphinxcode{\textless{}gssapi/gssapi\_ext.h\textgreater{}}) can be used to wrap and unwrap messages
423with additional “associated data” which is integrity-checked but is
424not included in the output buffer:
425
426\fvset{hllines={, ,}}%
427\begin{sphinxVerbatim}[commandchars=\\\{\}]
428\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}{,}
429                        \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
430                        \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}{,}
431                        \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{input\PYGZus{}assoc\PYGZus{}buffer}\PYG{p}{,}
432                        \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{input\PYGZus{}payload\PYGZus{}buffer}\PYG{p}{,}
433                        \PYG{n+nb}{int} \PYG{o}{*}\PYG{n}{conf\PYGZus{}state}\PYG{p}{,}
434                        \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{output\PYGZus{}message\PYGZus{}buffer}\PYG{p}{)}\PYG{p}{;}
435
436\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}{,}
437                          \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
438                          \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{input\PYGZus{}message\PYGZus{}buffer}\PYG{p}{,}
439                          \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{input\PYGZus{}assoc\PYGZus{}buffer}\PYG{p}{,}
440                          \PYG{n}{gss\PYGZus{}buffer\PYGZus{}t} \PYG{n}{output\PYGZus{}payload\PYGZus{}buffer}\PYG{p}{,}
441                          \PYG{n+nb}{int} \PYG{o}{*}\PYG{n}{conf\PYGZus{}state}\PYG{p}{,}
442                          \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{o}{*}\PYG{n}{qop\PYGZus{}state}\PYG{p}{)}\PYG{p}{;}
443\end{sphinxVerbatim}
444
445Wrap tokens created with gss\_wrap\_aead will successfully unwrap only
446if the same \sphinxstyleemphasis{input\_assoc\_buffer} contents are presented to
447gss\_unwrap\_aead.
448
449
450\section{IOV message wrapping}
451\label{\detokenize{appdev/gssapi:iov-message-wrapping}}
452The following extensions (declared in \sphinxcode{\textless{}gssapi/gssapi\_ext.h\textgreater{}}) can
453be used for in-place encryption, fine-grained control over wrap token
454layout, and for constructing wrap tokens compatible with Microsoft DCE
455RPC:
456
457\fvset{hllines={, ,}}%
458\begin{sphinxVerbatim}[commandchars=\\\{\}]
459\PYG{n}{typedef} \PYG{n}{struct} \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc\PYGZus{}struct} \PYG{p}{\PYGZob{}}
460    \PYG{n}{OM\PYGZus{}uint32} \PYG{n+nb}{type}\PYG{p}{;}
461    \PYG{n}{gss\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{buffer}\PYG{p}{;}
462\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}{;}
463
464\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}{,}
465                       \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
466                       \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}{,}
467                       \PYG{n+nb}{int} \PYG{o}{*}\PYG{n}{conf\PYGZus{}state}\PYG{p}{,}
468                       \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}{;}
469
470\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}{,}
471                         \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
472                         \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}{,}
473                         \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}{;}
474
475\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}{,}
476                              \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
477                              \PYG{n+nb}{int} \PYG{n}{conf\PYGZus{}req\PYGZus{}flag}\PYG{p}{,}
478                              \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}{,}
479                              \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,}
480                              \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;}
481
482\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}{,}
483                                 \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,}
484                                 \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;}
485\end{sphinxVerbatim}
486
487The caller of gss\_wrap\_iov provides an array of gss\_iov\_buffer\_desc
488structures, each containing a type and a gss\_buffer\_desc structure.
489Valid types include:
490\begin{itemize}
491\item {}
492\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_DATA}: A data buffer to be included in the
493token, and to be encrypted or decrypted in-place if the token is
494confidentiality-protected.
495
496\item {}
497\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_HEADER}: The GSSAPI wrap token header and
498underlying cryptographic header.
499
500\item {}
501\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_TRAILER}: The cryptographic trailer, if one is
502required.
503
504\item {}
505\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_PADDING}: Padding to be combined with the data
506during encryption and decryption.  (The implementation may choose to
507place padding in the trailer buffer, in which case it will set the
508padding buffer length to 0.)
509
510\item {}
511\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_STREAM}: For unwrapping only, a buffer
512containing a complete wrap token in standard format to be unwrapped.
513
514\item {}
515\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_SIGN\_ONLY}: A buffer to be included in the
516token’s integrity protection checksum, but not to be encrypted or
517included in the token itself.
518
519\end{itemize}
520
521For gss\_wrap\_iov, the IOV list should contain one HEADER buffer,
522followed by zero or more SIGN\_ONLY buffers, followed by one or more
523DATA buffers, followed by a TRAILER buffer.  The memory pointed to by
524the buffers is not required to be contiguous or in any particular
525order.  If \sphinxstyleemphasis{conf\_req\_flag} is true, DATA buffers will be encrypted
526in-place, while SIGN\_ONLY buffers will not be modified.
527
528The type of an output buffer may be combined with
529\sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATE} to request that gss\_wrap\_iov allocate
530the buffer contents.  If gss\_wrap\_iov allocates a buffer, it sets the
531\sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATED} flag on the buffer type.
532gss\_release\_iov\_buffer can be used to release all allocated buffers
533within an iov list and unset their allocated flags.  Here is an
534example of how gss\_wrap\_iov can be used with allocation requested
535(\sphinxstyleemphasis{ctx} is assumed to be a previously established gss\_ctx\_id\_t):
536
537\fvset{hllines={, ,}}%
538\begin{sphinxVerbatim}[commandchars=\\\{\}]
539\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;}
540\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{4}\PYG{p}{]}\PYG{p}{;}
541\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}{;}
542
543\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}{;}
544\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}{;}
545\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}{;}
546\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}{;}
547\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}{;}
548\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}{;}
549
550\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}{,}
551                     \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{4}\PYG{p}{)}\PYG{p}{;}
552\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
553    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
554
555\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}{/}
556
557\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}{;}
558\end{sphinxVerbatim}
559
560If the caller does not choose to request buffer allocation by
561gss\_wrap\_iov, it should first call gss\_wrap\_iov\_length to query the
562lengths of the HEADER, PADDING, and TRAILER buffers.  DATA buffers
563must be provided in the iov list so that padding length can be
564computed correctly, but the output buffers need not be initialized.
565Here is an example of using gss\_wrap\_iov\_length and gss\_wrap\_iov:
566
567\fvset{hllines={, ,}}%
568\begin{sphinxVerbatim}[commandchars=\\\{\}]
569\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;}
570\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{4}\PYG{p}{]}\PYG{p}{;}
571\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}{;}
572
573\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}{;}
574\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}{;}
575\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}{;}
576\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}{;}
577
578\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}{;}
579\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}{;}
580
581\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}{,}
582                            \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{4}\PYG{p}{)}\PYG{p}{;}
583\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
584    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
585\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}{+}
586    \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}{)}
587    \PYG{n}{handle\PYGZus{}out\PYGZus{}of\PYGZus{}space\PYGZus{}error}\PYG{p}{(}\PYG{p}{)}\PYG{p}{;}
588\PYG{n}{ptr} \PYG{o}{=} \PYG{n+nb}{str} \PYG{o}{+} \PYG{n}{strlen}\PYG{p}{(}\PYG{n+nb}{str}\PYG{p}{)}\PYG{p}{;}
589\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}{;}
590\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}{;}
591\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}{;}
592\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}{;}
593\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}{;}
594
595\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}{,}
596                     \PYG{n}{iov}\PYG{p}{,} \PYG{l+m+mi}{4}\PYG{p}{)}\PYG{p}{;}
597\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
598    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
599\end{sphinxVerbatim}
600
601If the context was established using the \sphinxstylestrong{GSS\_C\_DCE\_STYLE} flag
602(described in \index{RFC!RFC 4757}\sphinxhref{https://tools.ietf.org/html/rfc4757.html}{\sphinxstylestrong{RFC 4757}}), wrap tokens compatible with Microsoft DCE
603RPC can be constructed.  In this case, the IOV list must include a
604SIGN\_ONLY buffer, a DATA buffer, a second SIGN\_ONLY buffer, and a
605HEADER buffer in that order (the order of the buffer contents remains
606arbitrary).  The application must pad the DATA buffer to a multiple of
60716 bytes as no padding or trailer buffer is used.
608
609gss\_unwrap\_iov may be called with an IOV list just like one which
610would be provided to gss\_wrap\_iov.  DATA buffers will be decrypted
611in-place if they were encrypted, and SIGN\_ONLY buffers will not be
612modified.
613
614Alternatively, gss\_unwrap\_iov may be called with a single STREAM
615buffer, zero or more SIGN\_ONLY buffers, and a single DATA buffer.  The
616STREAM buffer is interpreted as a complete wrap token.  The STREAM
617buffer will be modified in-place to decrypt its contents.  The DATA
618buffer will be initialized to point to the decrypted data within the
619STREAM buffer, unless it has the \sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATE} flag
620set, in which case it will be initialized with a copy of the decrypted
621data.  Here is an example (\sphinxstyleemphasis{token} and \sphinxstyleemphasis{token\_len} are assumed to be a
622pre-existing pointer and length for a modifiable region of data):
623
624\fvset{hllines={, ,}}%
625\begin{sphinxVerbatim}[commandchars=\\\{\}]
626\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;}
627\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{p}{;}
628
629\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}{;}
630\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}{;}
631\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}{;}
632\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}{;}
633\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}{;}
634\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
635    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
636
637\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}
638 \PYG{o}{*} \PYG{n}{token}\PYG{o}{.} \PYG{o}{*}\PYG{o}{/}
639\end{sphinxVerbatim}
640
641
642\section{IOV MIC tokens}
643\label{\detokenize{appdev/gssapi:gssapi-mic-token}}\label{\detokenize{appdev/gssapi:iov-mic-tokens}}
644The following extensions (declared in \sphinxcode{\textless{}gssapi/gssapi\_ext.h\textgreater{}}) can
645be used in release 1.12 or later to construct and verify MIC tokens
646using an IOV list:
647
648\fvset{hllines={, ,}}%
649\begin{sphinxVerbatim}[commandchars=\\\{\}]
650\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}{,}
651                          \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
652                          \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{n}{qop\PYGZus{}req}\PYG{p}{,}
653                          \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,}
654                          \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;}
655
656\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}{,}
657                                 \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
658                                 \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{n}{qop\PYGZus{}req}\PYG{p}{,}
659                                 \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,}
660                                 \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;}
661
662\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}{,}
663                             \PYG{n}{gss\PYGZus{}ctx\PYGZus{}id\PYGZus{}t} \PYG{n}{context\PYGZus{}handle}\PYG{p}{,}
664                             \PYG{n}{gss\PYGZus{}qop\PYGZus{}t} \PYG{o}{*}\PYG{n}{qop\PYGZus{}state}\PYG{p}{,}
665                             \PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{o}{*}\PYG{n}{iov}\PYG{p}{,}
666                             \PYG{n+nb}{int} \PYG{n}{iov\PYGZus{}count}\PYG{p}{)}\PYG{p}{;}
667\end{sphinxVerbatim}
668
669The caller of gss\_get\_mic\_iov provides an array of gss\_iov\_buffer\_desc
670structures, each containing a type and a gss\_buffer\_desc structure.
671Valid types include:
672\begin{itemize}
673\item {}
674\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_DATA} and \sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_SIGN\_ONLY}: The
675corresponding buffer for each of these types will be signed for the
676MIC token, in the order provided.
677
678\item {}
679\sphinxstylestrong{GSS\_C\_BUFFER\_TYPE\_MIC\_TOKEN}: The GSSAPI MIC token.
680
681\end{itemize}
682
683The type of the MIC\_TOKEN buffer may be combined with
684\sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATE} to request that gss\_get\_mic\_iov
685allocate the buffer contents.  If gss\_get\_mic\_iov allocates the
686buffer, it sets the \sphinxstylestrong{GSS\_C\_BUFFER\_FLAG\_ALLOCATED} flag on the buffer
687type.  gss\_release\_iov\_buffer can be used to release all allocated
688buffers within an iov list and unset their allocated flags.  Here is
689an example of how gss\_get\_mic\_iov can be used with allocation
690requested (\sphinxstyleemphasis{ctx} is assumed to be a previously established
691gss\_ctx\_id\_t):
692
693\fvset{hllines={, ,}}%
694\begin{sphinxVerbatim}[commandchars=\\\{\}]
695\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;}
696\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{3}\PYG{p}{]}\PYG{p}{;}
697
698\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}{;}
699\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}{;}
700\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}{;}
701\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}{;}
702\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}{;}
703\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}{;}
704\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}{;}
705
706\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}{;}
707\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
708    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
709
710\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}{/}
711
712\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}{;}
713\end{sphinxVerbatim}
714
715If the caller does not choose to request buffer allocation by
716gss\_get\_mic\_iov, it should first call gss\_get\_mic\_iov\_length to query
717the length of the MIC\_TOKEN buffer.  Here is an example of using
718gss\_get\_mic\_iov\_length and gss\_get\_mic\_iov:
719
720\fvset{hllines={, ,}}%
721\begin{sphinxVerbatim}[commandchars=\\\{\}]
722\PYG{n}{OM\PYGZus{}uint32} \PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{;}
723\PYG{n}{gss\PYGZus{}iov\PYGZus{}buffer\PYGZus{}desc} \PYG{n}{iov}\PYG{p}{[}\PYG{l+m+mi}{2}\PYG{p}{]}\PYG{p}{;}
724\PYG{n}{char} \PYG{n}{data}\PYG{p}{[}\PYG{l+m+mi}{1024}\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{}MIC\PYGZus{}TOKEN}\PYG{p}{;}
727\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}{;}
728\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}{;}
729\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}{;}
730
731\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}{;}
732\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
733    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
734\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}{)}
735    \PYG{n}{handle\PYGZus{}out\PYGZus{}of\PYGZus{}space\PYGZus{}error}\PYG{p}{(}\PYG{p}{)}\PYG{p}{;}
736\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}{;}
737
738\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}{;}
739\PYG{k}{if} \PYG{p}{(}\PYG{n}{GSS\PYGZus{}ERROR}\PYG{p}{(}\PYG{n}{major}\PYG{p}{)}\PYG{p}{)}
740    \PYG{n}{handle\PYGZus{}error}\PYG{p}{(}\PYG{n}{major}\PYG{p}{,} \PYG{n}{minor}\PYG{p}{)}\PYG{p}{;}
741\end{sphinxVerbatim}
742
743
744\chapter{Year 2038 considerations for uses of krb5\_timestamp}
745\label{\detokenize{appdev/y2038::doc}}\label{\detokenize{appdev/y2038:year-2038-considerations-for-uses-of-krb5-timestamp}}
746POSIX time values, which measure the number of seconds since January 1
7471970, will exceed the maximum value representable in a signed 32-bit
748integer in January 2038.  This documentation describes considerations
749for consumers of the MIT krb5 libraries.
750
751Applications or libraries which use libkrb5 and consume the timestamps
752included in credentials or other structures make use of the
753{\hyperref[\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}]{\sphinxcrossref{\sphinxcode{krb5\_timestamp}}}} type.  For historical reasons, krb5\_timestamp
754is a signed 32-bit integer, even on platforms where a larger type is
755natively used to represent time values.  To behave properly for time
756values after January 2038, calling code should cast krb5\_timestamp
757values to uint32\_t, and then to time\_t:
758
759\fvset{hllines={, ,}}%
760\begin{sphinxVerbatim}[commandchars=\\\{\}]
761\PYG{p}{(}\PYG{n}{time\PYGZus{}t}\PYG{p}{)}\PYG{p}{(}\PYG{n}{uint32\PYGZus{}t}\PYG{p}{)}\PYG{n}{timestamp}
762\end{sphinxVerbatim}
763
764Used in this way, krb5\_timestamp values can represent time values up
765until February 2106, provided that the platform uses a 64-bit or
766larger time\_t type.  This usage will also remain safe if a later
767version of MIT krb5 changes krb5\_timestamp to an unsigned 32-bit
768integer.
769
770The GSSAPI only uses representations of time intervals, not absolute
771times.  Callers of the GSSAPI should require no changes to behave
772correctly after January 2038, provided that they use MIT krb5 release
7731.16 or later.
774
775
776\chapter{Differences between Heimdal and MIT Kerberos API}
777\label{\detokenize{appdev/h5l_mit_apidiff:differences-between-heimdal-and-mit-kerberos-api}}\label{\detokenize{appdev/h5l_mit_apidiff::doc}}
778
779\begin{savenotes}\sphinxattablestart
780\centering
781\begin{tabulary}{\linewidth}[t]{|l|l|}
782\hline
783
784{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_getaddrs:c.krb5_auth_con_getaddrs}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_getaddrs()}}}}
785&
786H5l: If either of the pointers to local\_addr
787and remote\_addr is not NULL, it is freed
788first and then reallocated before being
789populated with the content of corresponding
790address from authentication context.
791\\
792\hline
793{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setaddrs:c.krb5_auth_con_setaddrs}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_setaddrs()}}}}
794&
795H5l: If either address is NULL, the previous
796address remains in place
797\\
798\hline
799{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setports:c.krb5_auth_con_setports}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_setports()}}}}
800&
801H5l: Not implemented as of version 1.3.3
802\\
803\hline
804{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setrecvsubkey:c.krb5_auth_con_setrecvsubkey}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_setrecvsubkey()}}}}
805&
806H5l: If either port is NULL, the previous
807port remains in place
808\\
809\hline
810{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_setsendsubkey:c.krb5_auth_con_setsendsubkey}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_setsendsubkey()}}}}
811&
812H5l: Not implemented as of version 1.3.3
813\\
814\hline
815{\hyperref[\detokenize{appdev/refs/api/krb5_cc_set_config:c.krb5_cc_set_config}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_set\_config()}}}}
816&
817MIT: Before version 1.10 it was assumed that
818the last argument \sphinxstyleemphasis{data} is ALWAYS non-zero.
819\\
820\hline
821\sphinxcode{krb5\_cccol\_last\_change\_time()}
822&
823MIT: not implemented
824\\
825\hline
826{\hyperref[\detokenize{appdev/refs/api/krb5_set_default_realm:c.krb5_set_default_realm}]{\sphinxcrossref{\sphinxcode{krb5\_set\_default\_realm()}}}}
827&
828H5l: Caches the computed default realm context
829field.  If the second argument is NULL,
830it tries to retrieve it from libdefaults or DNS.
831MIT: Computes the default realm each time
832if it wasn’t explicitly set in the context
833\\
834\hline
835\end{tabulary}
836\par
837\sphinxattableend\end{savenotes}
838
839
840\chapter{Initial credentials}
841\label{\detokenize{appdev/init_creds:initial-credentials}}\label{\detokenize{appdev/init_creds::doc}}
842Software that performs tasks such as logging users into a computer
843when they type their Kerberos password needs to get initial
844credentials (usually ticket granting tickets) from Kerberos.  Such
845software shares some behavior with the \DUrole{xref,std,std-ref}{kinit(1)} program.
846
847Whenever a program grants access to a resource (such as a local login
848session on a desktop computer) based on a user successfully getting
849initial Kerberos credentials, it must verify those credentials against
850a secure shared secret (e.g., a host keytab) to ensure that the user
851credentials actually originate from a legitimate KDC.  Failure to
852perform this verification is a critical vulnerability, because a
853malicious user can execute the “Zanarotti attack”: the user constructs
854a fake response that appears to come from the legitimate KDC, but
855whose contents come from an attacker-controlled KDC.
856
857Some applications read a Kerberos password over the network (ideally
858over a secure channel), which they then verify against the KDC.  While
859this technique may be the only practical way to integrate Kerberos
860into some existing legacy systems, its use is contrary to the original
861design goals of Kerberos.
862
863The 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
864credentials for a client using a password.  An application that needs
865to 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()}}}}.
866Here is an example of code to obtain and verify TGT credentials, given
867strings \sphinxstyleemphasis{princname} and \sphinxstyleemphasis{password} for the client principal name and
868password:
869
870\fvset{hllines={, ,}}%
871\begin{sphinxVerbatim}[commandchars=\\\{\}]
872\PYG{n}{krb5\PYGZus{}error\PYGZus{}code} \PYG{n}{ret}\PYG{p}{;}
873\PYG{n}{krb5\PYGZus{}creds} \PYG{n}{creds}\PYG{p}{;}
874\PYG{n}{krb5\PYGZus{}principal} \PYG{n}{client\PYGZus{}princ} \PYG{o}{=} \PYG{n}{NULL}\PYG{p}{;}
875
876\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}{;}
877\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}{;}
878\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
879    \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
880\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}{,}
881                                   \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}{;}
882\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
883    \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
884\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}{;}
885
886\PYG{n}{cleanup}\PYG{p}{:}
887\PYG{n}{krb5\PYGZus{}free\PYGZus{}principal}\PYG{p}{(}\PYG{n}{context}\PYG{p}{,} \PYG{n}{client\PYGZus{}princ}\PYG{p}{)}\PYG{p}{;}
888\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}{;}
889\PYG{k}{return} \PYG{n}{ret}\PYG{p}{;}
890\end{sphinxVerbatim}
891
892
893\section{Options for get\_init\_creds}
894\label{\detokenize{appdev/init_creds:options-for-get-init-creds}}
895The 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
896parameter (which can be a null pointer).  Use the function
897{\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
898structure, 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
899example:
900
901\fvset{hllines={, ,}}%
902\begin{sphinxVerbatim}[commandchars=\\\{\}]
903\PYG{n}{krb5\PYGZus{}error\PYGZus{}code} \PYG{n}{ret}\PYG{p}{;}
904\PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt} \PYG{o}{*}\PYG{n}{opt} \PYG{o}{=} \PYG{n}{NULL}\PYG{p}{;}
905\PYG{n}{krb5\PYGZus{}creds} \PYG{n}{creds}\PYG{p}{;}
906
907\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}{;}
908\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}{;}
909\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
910    \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
911\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}{;}
912\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}{,}
913                                   \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}{;}
914\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
915    \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
916
917\PYG{n}{cleanup}\PYG{p}{:}
918\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}{;}
919\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}{;}
920\PYG{k}{return} \PYG{n}{ret}\PYG{p}{;}
921\end{sphinxVerbatim}
922
923
924\section{Getting anonymous credentials}
925\label{\detokenize{appdev/init_creds:getting-anonymous-credentials}}
926As of release 1.8, it is possible to obtain fully anonymous or
927partially anonymous (realm-exposed) credentials, if the KDC supports
928it.  The MIT KDC supports issuing fully anonymous credentials as of
929release 1.8 if configured appropriately (see \DUrole{xref,std,std-ref}{anonymous\_pkinit}),
930but does not support issuing realm-exposed anonymous credentials at
931this time.
932
933To obtain fully anonymous credentials, call
934{\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
935structure to set the anonymous flag, and specify a client principal
936with the KDC’s realm and a single empty data component (the principal
937obtained by parsing \sphinxcode{@}\sphinxstyleemphasis{realmname}).  Authentication will take
938place using anonymous PKINIT; if successful, the client principal of
939the resulting tickets will be
940\sphinxcode{WELLKNOWN/ANONYMOUS@WELLKNOWN:ANONYMOUS}.  Here is an example:
941
942\fvset{hllines={, ,}}%
943\begin{sphinxVerbatim}[commandchars=\\\{\}]
944\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}{;}
945\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}{,}
946                           \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}{;}
947\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
948    \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
949\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}{,}
950                                   \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}{;}
951\PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
952    \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
953\end{sphinxVerbatim}
954
955To obtain realm-exposed anonymous credentials, set the anonymous flag
956on the options structure as above, but specify a normal client
957principal in order to prove membership in the realm.  Authentication
958will take place as it normally does; if successful, the client
959principal of the resulting tickets will be \sphinxcode{WELLKNOWN/ANONYMOUS@}\sphinxstyleemphasis{realmname}.
960
961
962\section{User interaction}
963\label{\detokenize{appdev/init_creds:user-interaction}}
964Authenticating a user usually requires the entry of secret
965information, such as a password.  A password can be supplied directly
966to {\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}
967parameter, or the application can supply prompter and/or responder
968callbacks instead.  If callbacks are used, the user can also be
969queried for other secret information such as a PIN, informed of
970impending password expiration, or prompted to change a password which
971has expired.
972
973
974\subsection{Prompter callback}
975\label{\detokenize{appdev/init_creds:prompter-callback}}
976A prompter callback can be specified via the \sphinxstyleemphasis{prompter} and \sphinxstyleemphasis{data}
977parameters 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
978will be invoked each time the krb5 library has a question to ask or
979information to present.  When the prompter callback is invoked, the
980\sphinxstyleemphasis{banner} argument (if not null) is intended to be displayed to the
981user, and the questions to be answered are specified in the \sphinxstyleemphasis{prompts}
982array.  Each prompt contains a text question in the \sphinxstyleemphasis{prompt} field, a
983\sphinxstyleemphasis{hidden} bit to indicate whether the answer should be hidden from
984display, and a storage area for the answer in the \sphinxstyleemphasis{reply} field.  The
985callback should fill in each question’s \sphinxcode{reply-\textgreater{}data} with the
986answer, up to a maximum number of \sphinxcode{reply-\textgreater{}length} bytes, and then
987reset \sphinxcode{reply-\textgreater{}length} to the length of the answer.
988
989A 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
990array of type constants corresponding to the prompts, to get
991programmatic information about the semantic meaning of the questions.
992{\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
993type information is available.
994
995Text-based applications can use a built-in text prompter
996implementation by supplying {\hyperref[\detokenize{appdev/refs/api/krb5_prompter_posix:c.krb5_prompter_posix}]{\sphinxcrossref{\sphinxcode{krb5\_prompter\_posix()}}}} as the
997\sphinxstyleemphasis{prompter} parameter and a null pointer as the \sphinxstyleemphasis{data} parameter.  For
998example:
999
1000\fvset{hllines={, ,}}%
1001\begin{sphinxVerbatim}[commandchars=\\\{\}]
1002\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}{,}
1003                                   \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}{,}
1004                                   \PYG{n}{NULL}\PYG{p}{,} \PYG{n}{NULL}\PYG{p}{)}\PYG{p}{;}
1005\end{sphinxVerbatim}
1006
1007
1008\subsection{Responder callback}
1009\label{\detokenize{appdev/init_creds:responder-callback}}
1010A responder callback can be specified through the init\_creds options
1011using 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.
1012Responder callbacks can present a more sophisticated user interface
1013for authentication secrets.  The responder callback is usually invoked
1014only once per authentication, with a list of questions produced by all
1015of the allowed preauthentication mechanisms.
1016
1017When the responder callback is invoked, the \sphinxstyleemphasis{rctx} argument can be
1018accessed to obtain the list of questions and to answer them.  The
1019{\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
1020question types.  For each question type, the
1021{\hyperref[\detokenize{appdev/refs/api/krb5_responder_get_challenge:c.krb5_responder_get_challenge}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_get\_challenge()}}}} function retrieves additional
1022information about the question, if applicable, and the
1023{\hyperref[\detokenize{appdev/refs/api/krb5_responder_set_answer:c.krb5_responder_set_answer}]{\sphinxcrossref{\sphinxcode{krb5\_responder\_set\_answer()}}}} function sets the answer.
1024
1025Responder question types, challenges, and answers are UTF-8 strings.
1026The question type is a well-known string; the meaning of the challenge
1027and answer depend on the question type.  If an application does not
1028understand a question type, it cannot interpret the challenge or
1029provide an answer.  Failing to answer a question typically results in
1030the prompter callback being used as a fallback.
1031
1032
1033\subsubsection{Password question}
1034\label{\detokenize{appdev/init_creds:password-question}}
1035The \sphinxcode{KRB5\_RESPONDER\_QUESTION\_PASSWORD} (or \sphinxcode{"password"})
1036question type requests the user’s password.  This question does not
1037have a challenge, and the response is simply the password string.
1038
1039
1040\subsubsection{One-time password question}
1041\label{\detokenize{appdev/init_creds:one-time-password-question}}
1042The \sphinxcode{KRB5\_RESPONDER\_QUESTION\_OTP} (or \sphinxcode{"otp"}) question
1043type requests a choice among one-time password tokens and the PIN and
1044value for the chosen token.  The challenge and answer are JSON-encoded
1045strings, but an application can use convenience functions to avoid
1046doing any JSON processing itself.
1047
1048The {\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
1049challenge into a krb5\_responder\_otp\_challenge structure.  The
1050{\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
1051token information elements from the challenge and supplies the value
1052and pin for that token.
1053
1054
1055\subsubsection{PKINIT password or PIN question}
1056\label{\detokenize{appdev/init_creds:pkinit-password-or-pin-question}}
1057The \sphinxcode{KRB5\_RESPONDER\_QUESTION\_PKINIT} (or \sphinxcode{"pkinit"}) question
1058type requests PINs for hardware devices and/or passwords for encrypted
1059credentials which are stored on disk, potentially also supplying
1060information about the state of the hardware devices.  The challenge and
1061answer are JSON-encoded strings, but an application can use convenience
1062functions to avoid doing any JSON processing itself.
1063
1064The {\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
1065challenges into a krb5\_responder\_pkinit\_challenge structure.  The
1066{\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
1067supply the PIN or password for a particular client credential, and can
1068be called multiple times.
1069
1070
1071\subsubsection{Example}
1072\label{\detokenize{appdev/init_creds:example}}
1073Here is an example of using a responder callback:
1074
1075\fvset{hllines={, ,}}%
1076\begin{sphinxVerbatim}[commandchars=\\\{\}]
1077\PYG{n}{static} \PYG{n}{krb5\PYGZus{}error\PYGZus{}code}
1078\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}{,}
1079             \PYG{n}{krb5\PYGZus{}responder\PYGZus{}context} \PYG{n}{rctx}\PYG{p}{)}
1080\PYG{p}{\PYGZob{}}
1081    \PYG{n}{krb5\PYGZus{}error\PYGZus{}code} \PYG{n}{ret}\PYG{p}{;}
1082    \PYG{n}{krb5\PYGZus{}responder\PYGZus{}otp\PYGZus{}challenge} \PYG{o}{*}\PYG{n}{chl}\PYG{p}{;}
1083
1084    \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}{,}
1085                                     \PYG{n}{KRB5\PYGZus{}RESPONDER\PYGZus{}QUESTION\PYGZus{}PASSWORD}\PYG{p}{)}\PYG{p}{)} \PYG{p}{\PYGZob{}}
1086        \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}{,}
1087                                        \PYG{n}{KRB5\PYGZus{}RESPONDER\PYGZus{}QUESTION\PYGZus{}PASSWORD}\PYG{p}{,}
1088                                        \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{open sesame}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{)}\PYG{p}{;}
1089        \PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1090            \PYG{k}{return} \PYG{n}{ret}\PYG{p}{;}
1091    \PYG{p}{\PYGZcb{}}
1092    \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}{;}
1093    \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{}}
1094        \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}{,}
1095                                            \PYG{n}{NULL}\PYG{p}{)}\PYG{p}{;}
1096        \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}{;}
1097        \PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1098            \PYG{k}{return} \PYG{n}{ret}\PYG{p}{;}
1099    \PYG{p}{\PYGZcb{}}
1100    \PYG{k}{return} \PYG{l+m+mi}{0}\PYG{p}{;}
1101\PYG{p}{\PYGZcb{}}
1102
1103\PYG{n}{static} \PYG{n}{krb5\PYGZus{}error\PYGZus{}code}
1104\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}{)}
1105\PYG{p}{\PYGZob{}}
1106    \PYG{n}{krb5\PYGZus{}error\PYGZus{}code} \PYG{n}{ret}\PYG{p}{;}
1107    \PYG{n}{krb5\PYGZus{}get\PYGZus{}init\PYGZus{}creds\PYGZus{}opt} \PYG{o}{*}\PYG{n}{opt} \PYG{o}{=} \PYG{n}{NULL}\PYG{p}{;}
1108    \PYG{n}{krb5\PYGZus{}creds} \PYG{n}{creds}\PYG{p}{;}
1109
1110    \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}{;}
1111    \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}{;}
1112    \PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1113        \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
1114    \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}{,}
1115                                                \PYG{n}{NULL}\PYG{p}{)}\PYG{p}{;}
1116    \PYG{k}{if} \PYG{p}{(}\PYG{n}{ret}\PYG{p}{)}
1117        \PYG{n}{goto} \PYG{n}{cleanup}\PYG{p}{;}
1118    \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}{,}
1119                                       \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}{;}
1120
1121\PYG{n}{cleanup}\PYG{p}{:}
1122    \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}{;}
1123    \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}{;}
1124    \PYG{k}{return} \PYG{n}{ret}\PYG{p}{;}
1125\PYG{p}{\PYGZcb{}}
1126\end{sphinxVerbatim}
1127
1128
1129\section{Verifying initial credentials}
1130\label{\detokenize{appdev/init_creds:verifying-initial-credentials}}
1131Use 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
1132credentials.  It takes an options structure (which can be a null
1133pointer).  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
1134the caller-allocated options structure, and
1135{\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
1136“nofail” option.  For example:
1137
1138\fvset{hllines={, ,}}%
1139\begin{sphinxVerbatim}[commandchars=\\\{\}]
1140\PYG{n}{krb5\PYGZus{}verify\PYGZus{}init\PYGZus{}creds\PYGZus{}opt} \PYG{n}{vopt}\PYG{p}{;}
1141
1142\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}{;}
1143\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}{;}
1144\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}{;}
1145\end{sphinxVerbatim}
1146
1147The confusingly named “nofail” option, when set, means that the
1148verification must actually succeed in order for
1149{\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
1150state of this option (cleared) means that if there is no key material
1151available to verify the user credentials, the verification will
1152succeed anyway.  (The default can be changed by a configuration file
1153setting.)
1154
1155This accommodates a use case where a large number of unkeyed shared
1156desktop workstations need to allow users to log in using Kerberos.
1157The security risks from this practice are mitigated by the absence of
1158valuable state on the shared workstations—any valuable resources
1159that the users would access reside on networked servers.
1160
1161
1162\chapter{Principal manipulation and parsing}
1163\label{\detokenize{appdev/princ_handle:principal-manipulation-and-parsing}}\label{\detokenize{appdev/princ_handle::doc}}
1164Kerberos principal structure
1165
1166{\hyperref[\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_data}}}}
1167
1168{\hyperref[\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}]{\sphinxcrossref{\sphinxcode{krb5\_principal}}}}
1169
1170Create and free principal
1171
1172{\hyperref[\detokenize{appdev/refs/api/krb5_build_principal:c.krb5_build_principal}]{\sphinxcrossref{\sphinxcode{krb5\_build\_principal()}}}}
1173
1174{\hyperref[\detokenize{appdev/refs/api/krb5_build_principal_alloc_va:c.krb5_build_principal_alloc_va}]{\sphinxcrossref{\sphinxcode{krb5\_build\_principal\_alloc\_va()}}}}
1175
1176{\hyperref[\detokenize{appdev/refs/api/krb5_build_principal_ext:c.krb5_build_principal_ext}]{\sphinxcrossref{\sphinxcode{krb5\_build\_principal\_ext()}}}}
1177
1178{\hyperref[\detokenize{appdev/refs/api/krb5_copy_principal:c.krb5_copy_principal}]{\sphinxcrossref{\sphinxcode{krb5\_copy\_principal()}}}}
1179
1180{\hyperref[\detokenize{appdev/refs/api/krb5_free_principal:c.krb5_free_principal}]{\sphinxcrossref{\sphinxcode{krb5\_free\_principal()}}}}
1181
1182{\hyperref[\detokenize{appdev/refs/api/krb5_cc_get_principal:c.krb5_cc_get_principal}]{\sphinxcrossref{\sphinxcode{krb5\_cc\_get\_principal()}}}}
1183
1184Comparing
1185
1186{\hyperref[\detokenize{appdev/refs/api/krb5_principal_compare:c.krb5_principal_compare}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_compare()}}}}
1187
1188{\hyperref[\detokenize{appdev/refs/api/krb5_principal_compare_flags:c.krb5_principal_compare_flags}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_compare\_flags()}}}}
1189
1190{\hyperref[\detokenize{appdev/refs/api/krb5_principal_compare_any_realm:c.krb5_principal_compare_any_realm}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_compare\_any\_realm()}}}}
1191
1192{\hyperref[\detokenize{appdev/refs/api/krb5_sname_match:c.krb5_sname_match}]{\sphinxcrossref{\sphinxcode{krb5\_sname\_match()}}}}
1193
1194{\hyperref[\detokenize{appdev/refs/api/krb5_sname_to_principal:c.krb5_sname_to_principal}]{\sphinxcrossref{\sphinxcode{krb5\_sname\_to\_principal()}}}}
1195
1196Parsing:
1197
1198{\hyperref[\detokenize{appdev/refs/api/krb5_parse_name:c.krb5_parse_name}]{\sphinxcrossref{\sphinxcode{krb5\_parse\_name()}}}}
1199
1200{\hyperref[\detokenize{appdev/refs/api/krb5_parse_name_flags:c.krb5_parse_name_flags}]{\sphinxcrossref{\sphinxcode{krb5\_parse\_name\_flags()}}}}
1201
1202{\hyperref[\detokenize{appdev/refs/api/krb5_unparse_name:c.krb5_unparse_name}]{\sphinxcrossref{\sphinxcode{krb5\_unparse\_name()}}}}
1203
1204{\hyperref[\detokenize{appdev/refs/api/krb5_unparse_name_flags:c.krb5_unparse_name_flags}]{\sphinxcrossref{\sphinxcode{krb5\_unparse\_name\_flags()}}}}
1205
1206Utilities:
1207
1208{\hyperref[\detokenize{appdev/refs/api/krb5_is_config_principal:c.krb5_is_config_principal}]{\sphinxcrossref{\sphinxcode{krb5\_is\_config\_principal()}}}}
1209
1210{\hyperref[\detokenize{appdev/refs/api/krb5_kuserok:c.krb5_kuserok}]{\sphinxcrossref{\sphinxcode{krb5\_kuserok()}}}}
1211
1212{\hyperref[\detokenize{appdev/refs/api/krb5_set_password:c.krb5_set_password}]{\sphinxcrossref{\sphinxcode{krb5\_set\_password()}}}}
1213
1214{\hyperref[\detokenize{appdev/refs/api/krb5_set_password_using_ccache:c.krb5_set_password_using_ccache}]{\sphinxcrossref{\sphinxcode{krb5\_set\_password\_using\_ccache()}}}}
1215
1216{\hyperref[\detokenize{appdev/refs/api/krb5_set_principal_realm:c.krb5_set_principal_realm}]{\sphinxcrossref{\sphinxcode{krb5\_set\_principal\_realm()}}}}
1217
1218{\hyperref[\detokenize{appdev/refs/api/krb5_realm_compare:c.krb5_realm_compare}]{\sphinxcrossref{\sphinxcode{krb5\_realm\_compare()}}}}
1219
1220
1221\chapter{Complete reference - API and datatypes}
1222\label{\detokenize{appdev/refs/index:complete-reference-api-and-datatypes}}\label{\detokenize{appdev/refs/index::doc}}
1223
1224\section{krb5 API}
1225\label{\detokenize{appdev/refs/api/index:krb5-api}}\label{\detokenize{appdev/refs/api/index::doc}}
1226
1227\subsection{Frequently used public interfaces}
1228\label{\detokenize{appdev/refs/api/index:frequently-used-public-interfaces}}
1229
1230\subsubsection{krb5\_build\_principal -  Build a principal name using null-terminated strings.}
1231\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)}
1232
1233\begin{fulllineitems}
1234\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}, ...}{}
1235\end{fulllineitems}
1236
1237\begin{quote}\begin{description}
1238\item[{param}] \leavevmode
1239\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1240
1241\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ} - Principal name
1242
1243\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rlen} - Realm name length
1244
1245\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm name
1246
1247\end{description}\end{quote}
1248\begin{quote}\begin{description}
1249\item[{retval}] \leavevmode\begin{itemize}
1250\item {}
12510   Success
1252
1253\end{itemize}
1254
1255\item[{return}] \leavevmode\begin{itemize}
1256\item {}
1257Kerberos error codes
1258
1259\end{itemize}
1260
1261\end{description}\end{quote}
1262
1263Call {\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.
1264
1265\begin{sphinxadmonition}{note}{Note:}
1266{\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.
1267\end{sphinxadmonition}
1268
1269
1270\subsubsection{krb5\_build\_principal\_alloc\_va -  Build a principal name, using a precomputed variable argument list.}
1271\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)}
1272
1273\begin{fulllineitems}
1274\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}}{}
1275\end{fulllineitems}
1276
1277\begin{quote}\begin{description}
1278\item[{param}] \leavevmode
1279\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1280
1281\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ} - Principal structure
1282
1283\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rlen} - Realm name length
1284
1285\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm name
1286
1287\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap} - List of char * components, ending with NULL
1288
1289\end{description}\end{quote}
1290\begin{quote}\begin{description}
1291\item[{retval}] \leavevmode\begin{itemize}
1292\item {}
12930   Success
1294
1295\end{itemize}
1296
1297\item[{return}] \leavevmode\begin{itemize}
1298\item {}
1299Kerberos error codes
1300
1301\end{itemize}
1302
1303\end{description}\end{quote}
1304
1305Similar 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.
1306
1307Use {\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.
1308
1309
1310\subsubsection{krb5\_build\_principal\_ext -  Build a principal name using length-counted strings.}
1311\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)}
1312
1313\begin{fulllineitems}
1314\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}, ...}{}
1315\end{fulllineitems}
1316
1317\begin{quote}\begin{description}
1318\item[{param}] \leavevmode
1319\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1320
1321\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ} - Principal name
1322
1323\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rlen} - Realm name length
1324
1325\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm name
1326
1327\end{description}\end{quote}
1328\begin{quote}\begin{description}
1329\item[{retval}] \leavevmode\begin{itemize}
1330\item {}
13310   Success
1332
1333\end{itemize}
1334
1335\item[{return}] \leavevmode\begin{itemize}
1336\item {}
1337Kerberos error codes
1338
1339\end{itemize}
1340
1341\end{description}\end{quote}
1342
1343This 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.
1344
1345
1346\subsubsection{krb5\_cc\_close -  Close a credential cache handle.}
1347\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)}
1348
1349\begin{fulllineitems}
1350\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}}{}
1351\end{fulllineitems}
1352
1353\begin{quote}\begin{description}
1354\item[{param}] \leavevmode
1355\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1356
1357\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
1358
1359\end{description}\end{quote}
1360\begin{quote}\begin{description}
1361\item[{retval}] \leavevmode\begin{itemize}
1362\item {}
13630   Success
1364
1365\end{itemize}
1366
1367\item[{return}] \leavevmode\begin{itemize}
1368\item {}
1369Kerberos error codes
1370
1371\end{itemize}
1372
1373\end{description}\end{quote}
1374
1375This function closes a credential cache handle \sphinxstyleemphasis{cache} without affecting the contents of the cache.
1376
1377
1378\subsubsection{krb5\_cc\_default -  Resolve the default credential cache name.}
1379\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)}
1380
1381\begin{fulllineitems}
1382\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}}{}
1383\end{fulllineitems}
1384
1385\begin{quote}\begin{description}
1386\item[{param}] \leavevmode
1387\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1388
1389\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ccache} - Pointer to credential cache name
1390
1391\end{description}\end{quote}
1392\begin{quote}\begin{description}
1393\item[{retval}] \leavevmode\begin{itemize}
1394\item {}
13950   Success
1396
1397\item {}
1398KV5M\_CONTEXT   Bad magic number for \_krb5\_context structure
1399
1400\item {}
1401KRB5\_FCC\_INTERNAL   The name of the default credential cache cannot be obtained
1402
1403\end{itemize}
1404
1405\item[{return}] \leavevmode\begin{itemize}
1406\item {}
1407Kerberos error codes
1408
1409\end{itemize}
1410
1411\end{description}\end{quote}
1412
1413Create 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()}}}} .
1414
1415
1416\subsubsection{krb5\_cc\_default\_name -  Return the name of the default credential cache.}
1417\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)}
1418
1419\begin{fulllineitems}
1420\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}}{}
1421\end{fulllineitems}
1422
1423\begin{quote}\begin{description}
1424\item[{param}] \leavevmode
1425\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1426
1427\end{description}\end{quote}
1428\begin{quote}\begin{description}
1429\item[{return}] \leavevmode\begin{itemize}
1430\item {}
1431Name of default credential cache for the current user.
1432
1433\end{itemize}
1434
1435\end{description}\end{quote}
1436
1437Return 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} .
1438
1439The 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.
1440
1441
1442\subsubsection{krb5\_cc\_destroy -  Destroy a credential cache.}
1443\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)}
1444
1445\begin{fulllineitems}
1446\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}}{}
1447\end{fulllineitems}
1448
1449\begin{quote}\begin{description}
1450\item[{param}] \leavevmode
1451\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1452
1453\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
1454
1455\end{description}\end{quote}
1456\begin{quote}\begin{description}
1457\item[{retval}] \leavevmode\begin{itemize}
1458\item {}
14590   Success
1460
1461\end{itemize}
1462
1463\item[{return}] \leavevmode\begin{itemize}
1464\item {}
1465Permission errors
1466
1467\end{itemize}
1468
1469\end{description}\end{quote}
1470
1471This function destroys any existing contents of \sphinxstyleemphasis{cache} and closes the handle to it.
1472
1473
1474\subsubsection{krb5\_cc\_dup -  Duplicate ccache handle.}
1475\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)}
1476
1477\begin{fulllineitems}
1478\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}}{}
1479\end{fulllineitems}
1480
1481\begin{quote}\begin{description}
1482\item[{param}] \leavevmode
1483\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1484
1485\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in} - Credential cache handle to be duplicated
1486
1487\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Credential cache handle
1488
1489\end{description}\end{quote}
1490
1491Create a new handle referring to the same cache as \sphinxstyleemphasis{in} . The new handle and \sphinxstyleemphasis{in} can be closed independently.
1492
1493
1494\subsubsection{krb5\_cc\_get\_name -  Retrieve the name, but not type of a credential cache.}
1495\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)}
1496
1497\begin{fulllineitems}
1498\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}}{}
1499\end{fulllineitems}
1500
1501\begin{quote}\begin{description}
1502\item[{param}] \leavevmode
1503\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1504
1505\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
1506
1507\end{description}\end{quote}
1508\begin{quote}\begin{description}
1509\item[{return}] \leavevmode\begin{itemize}
1510\item {}
1511On success - the name of the credential cache.
1512
1513\end{itemize}
1514
1515\end{description}\end{quote}
1516
1517\begin{sphinxadmonition}{warning}{Warning:}
1518Returns 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()}}}} .
1519\end{sphinxadmonition}
1520
1521
1522\subsubsection{krb5\_cc\_get\_principal -  Get the default principal of a credential cache.}
1523\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)}
1524
1525\begin{fulllineitems}
1526\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}}{}
1527\end{fulllineitems}
1528
1529\begin{quote}\begin{description}
1530\item[{param}] \leavevmode
1531\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1532
1533\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
1534
1535\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{principal} - Primary principal
1536
1537\end{description}\end{quote}
1538\begin{quote}\begin{description}
1539\item[{retval}] \leavevmode\begin{itemize}
1540\item {}
15410   Success
1542
1543\end{itemize}
1544
1545\item[{return}] \leavevmode\begin{itemize}
1546\item {}
1547Kerberos error codes
1548
1549\end{itemize}
1550
1551\end{description}\end{quote}
1552
1553Returns 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()}}}} .
1554
1555Use {\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.
1556
1557
1558\subsubsection{krb5\_cc\_get\_type -  Retrieve the type of a credential cache.}
1559\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)}
1560
1561\begin{fulllineitems}
1562\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}}{}
1563\end{fulllineitems}
1564
1565\begin{quote}\begin{description}
1566\item[{param}] \leavevmode
1567\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1568
1569\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
1570
1571\end{description}\end{quote}
1572\begin{quote}\begin{description}
1573\item[{return}] \leavevmode\begin{itemize}
1574\item {}
1575The type of a credential cache as an alias that must not be modified or freed by the caller.
1576
1577\end{itemize}
1578
1579\end{description}\end{quote}
1580
1581
1582\subsubsection{krb5\_cc\_initialize -  Initialize a credential cache.}
1583\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)}
1584
1585\begin{fulllineitems}
1586\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}}{}
1587\end{fulllineitems}
1588
1589\begin{quote}\begin{description}
1590\item[{param}] \leavevmode
1591\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1592
1593\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
1594
1595\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Default principal name
1596
1597\end{description}\end{quote}
1598\begin{quote}\begin{description}
1599\item[{retval}] \leavevmode\begin{itemize}
1600\item {}
16010   Success
1602
1603\end{itemize}
1604
1605\item[{return}] \leavevmode\begin{itemize}
1606\item {}
1607System errors; Permission errors; Kerberos error codes
1608
1609\end{itemize}
1610
1611\end{description}\end{quote}
1612
1613Destroy any existing contents of \sphinxstyleemphasis{cache} and initialize it for the default principal \sphinxstyleemphasis{principal} .
1614
1615
1616\subsubsection{krb5\_cc\_new\_unique -  Create a new credential cache of the specified type with a unique name.}
1617\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)}
1618
1619\begin{fulllineitems}
1620\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}}{}
1621\end{fulllineitems}
1622
1623\begin{quote}\begin{description}
1624\item[{param}] \leavevmode
1625\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1626
1627\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - Credential cache type name
1628
1629\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{hint} - Unused
1630
1631\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{id} - Credential cache handle
1632
1633\end{description}\end{quote}
1634\begin{quote}\begin{description}
1635\item[{retval}] \leavevmode\begin{itemize}
1636\item {}
16370   Success
1638
1639\end{itemize}
1640
1641\item[{return}] \leavevmode\begin{itemize}
1642\item {}
1643Kerberos error codes
1644
1645\end{itemize}
1646
1647\end{description}\end{quote}
1648
1649
1650\subsubsection{krb5\_cc\_resolve -  Resolve a credential cache name.}
1651\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)}
1652
1653\begin{fulllineitems}
1654\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}}{}
1655\end{fulllineitems}
1656
1657\begin{quote}\begin{description}
1658\item[{param}] \leavevmode
1659\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1660
1661\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - Credential cache name to be resolved
1662
1663\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cache} - Credential cache handle
1664
1665\end{description}\end{quote}
1666\begin{quote}\begin{description}
1667\item[{retval}] \leavevmode\begin{itemize}
1668\item {}
16690   Success
1670
1671\end{itemize}
1672
1673\item[{return}] \leavevmode\begin{itemize}
1674\item {}
1675Kerberos error codes
1676
1677\end{itemize}
1678
1679\end{description}\end{quote}
1680
1681Fills 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.
1682
1683
1684\subsubsection{krb5\_change\_password -  Change a password for an existing Kerberos account.}
1685\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)}
1686
1687\begin{fulllineitems}
1688\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}}{}
1689\end{fulllineitems}
1690
1691\begin{quote}\begin{description}
1692\item[{param}] \leavevmode
1693\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1694
1695\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Credentials for kadmin/changepw service
1696
1697\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{newpw} - New password
1698
1699\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code} - Numeric error code from server
1700
1701\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code\_string} - String equivalent to \sphinxstyleemphasis{result\_code}
1702
1703\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_string} - Change password response from the KDC
1704
1705\end{description}\end{quote}
1706\begin{quote}\begin{description}
1707\item[{retval}] \leavevmode\begin{itemize}
1708\item {}
17090   Success; otherwise - Kerberos error codes
1710
1711\end{itemize}
1712
1713\end{description}\end{quote}
1714
1715Change the password for the existing principal identified by \sphinxstyleemphasis{creds} .
1716
1717The possible values of the output \sphinxstyleemphasis{result\_code} are:
1718\begin{itemize}
1719\item {}
1720{\hyperref[\detokenize{appdev/refs/macros/KRB5_KPASSWD_SUCCESS:KRB5_KPASSWD_SUCCESS}]{\sphinxcrossref{\sphinxcode{KRB5\_KPASSWD\_SUCCESS}}}} (0) - success
1721
1722\item {}
1723{\hyperref[\detokenize{appdev/refs/macros/KRB5_KPASSWD_MALFORMED:KRB5_KPASSWD_MALFORMED}]{\sphinxcrossref{\sphinxcode{KRB5\_KPASSWD\_MALFORMED}}}} (1) - Malformed request error
1724
1725\item {}
1726{\hyperref[\detokenize{appdev/refs/macros/KRB5_KPASSWD_HARDERROR:KRB5_KPASSWD_HARDERROR}]{\sphinxcrossref{\sphinxcode{KRB5\_KPASSWD\_HARDERROR}}}} (2) - Server error
1727
1728\item {}
1729{\hyperref[\detokenize{appdev/refs/macros/KRB5_KPASSWD_AUTHERROR:KRB5_KPASSWD_AUTHERROR}]{\sphinxcrossref{\sphinxcode{KRB5\_KPASSWD\_AUTHERROR}}}} (3) - Authentication error
1730
1731\item {}
1732{\hyperref[\detokenize{appdev/refs/macros/KRB5_KPASSWD_SOFTERROR:KRB5_KPASSWD_SOFTERROR}]{\sphinxcrossref{\sphinxcode{KRB5\_KPASSWD\_SOFTERROR}}}} (4) - Password change rejected
1733
1734\end{itemize}
1735
1736
1737\subsubsection{krb5\_chpw\_message -  Get a result message for changing or setting a password.}
1738\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)}
1739
1740\begin{fulllineitems}
1741\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}}{}
1742\end{fulllineitems}
1743
1744\begin{quote}\begin{description}
1745\item[{param}] \leavevmode
1746\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1747
1748\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server\_string} - Data returned from the remote system
1749
1750\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{message\_out} - A message displayable to the user
1751
1752\end{description}\end{quote}
1753\begin{quote}\begin{description}
1754\item[{retval}] \leavevmode\begin{itemize}
1755\item {}
17560   Success
1757
1758\end{itemize}
1759
1760\item[{return}] \leavevmode\begin{itemize}
1761\item {}
1762Kerberos error codes
1763
1764\end{itemize}
1765
1766\end{description}\end{quote}
1767
1768This 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.
1769
1770Use {\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.
1771
1772\begin{sphinxadmonition}{note}{Note:}
1773New in 1.11
1774\end{sphinxadmonition}
1775
1776
1777\subsubsection{krb5\_expand\_hostname -  Canonicalize a hostname, possibly using name service.}
1778\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)}
1779
1780\begin{fulllineitems}
1781\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}}{}
1782\end{fulllineitems}
1783
1784\begin{quote}\begin{description}
1785\item[{param}] \leavevmode
1786\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1787
1788\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{host} - Input hostname
1789
1790\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{canonhost\_out} - Canonicalized hostname
1791
1792\end{description}\end{quote}
1793
1794This 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.
1795
1796\begin{sphinxadmonition}{note}{Note:}
1797New in 1.15
1798\end{sphinxadmonition}
1799
1800
1801\subsubsection{krb5\_free\_context -  Free a krb5 library context.}
1802\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)}
1803
1804\begin{fulllineitems}
1805\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}}{}
1806\end{fulllineitems}
1807
1808\begin{quote}\begin{description}
1809\item[{param}] \leavevmode
1810\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1811
1812\end{description}\end{quote}
1813
1814This 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()}}}} .
1815
1816
1817\subsubsection{krb5\_free\_error\_message -  Free an error message generated by krb5\_get\_error\_message() .}
1818\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)}
1819
1820\begin{fulllineitems}
1821\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}}{}
1822\end{fulllineitems}
1823
1824\begin{quote}\begin{description}
1825\item[{param}] \leavevmode
1826\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
1827
1828\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{msg} - Pointer to error message
1829
1830\end{description}\end{quote}
1831
1832
1833\subsubsection{krb5\_free\_principal -  Free the storage assigned to a principal.}
1834\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)}
1835
1836\begin{fulllineitems}
1837\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}}{}
1838\end{fulllineitems}
1839
1840\begin{quote}\begin{description}
1841\item[{param}] \leavevmode
1842\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1843
1844\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Principal to be freed
1845
1846\end{description}\end{quote}
1847
1848
1849\subsubsection{krb5\_fwd\_tgt\_creds -  Get a forwarded TGT and format a KRB-CRED message.}
1850\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)}
1851
1852\begin{fulllineitems}
1853\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}}{}
1854\end{fulllineitems}
1855
1856\begin{quote}\begin{description}
1857\item[{param}] \leavevmode
1858\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1859
1860\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
1861
1862\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rhost} - Remote host
1863
1864\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal of TGT
1865
1866\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Principal of server to receive TGT
1867
1868\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cc} - Credential cache handle (NULL to use default)
1869
1870\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{forwardable} - Whether TGT should be forwardable
1871
1872\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} - KRB-CRED message
1873
1874\end{description}\end{quote}
1875\begin{quote}\begin{description}
1876\item[{retval}] \leavevmode\begin{itemize}
1877\item {}
18780   Success
1879
1880\item {}
1881ENOMEM   Insufficient memory
1882
1883\item {}
1884KRB5\_PRINC\_NOMATCH   Requested principal and ticket do not match
1885
1886\item {}
1887KRB5\_NO\_TKT\_SUPPLIED   Request did not supply a ticket
1888
1889\item {}
1890KRB5\_CC\_BADNAME   Credential cache name or principal name malformed
1891
1892\end{itemize}
1893
1894\item[{return}] \leavevmode\begin{itemize}
1895\item {}
1896Kerberos error codes
1897
1898\end{itemize}
1899
1900\end{description}\end{quote}
1901
1902Get 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.
1903
1904
1905\subsubsection{krb5\_get\_default\_realm -  Retrieve the default realm.}
1906\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)}
1907
1908\begin{fulllineitems}
1909\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}}{}
1910\end{fulllineitems}
1911
1912\begin{quote}\begin{description}
1913\item[{param}] \leavevmode
1914\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1915
1916\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{lrealm} - Default realm name
1917
1918\end{description}\end{quote}
1919\begin{quote}\begin{description}
1920\item[{retval}] \leavevmode\begin{itemize}
1921\item {}
19220   Success
1923
1924\end{itemize}
1925
1926\item[{return}] \leavevmode\begin{itemize}
1927\item {}
1928Kerberos error codes
1929
1930\end{itemize}
1931
1932\end{description}\end{quote}
1933
1934Retrieves the default realm to be used if no user-specified realm is available.
1935
1936Use {\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.
1937
1938
1939\subsubsection{krb5\_get\_error\_message -  Get the (possibly extended) error message for a code.}
1940\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)}
1941
1942\begin{fulllineitems}
1943\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}}{}
1944\end{fulllineitems}
1945
1946\begin{quote}\begin{description}
1947\item[{param}] \leavevmode
1948\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
1949
1950\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code
1951
1952\end{description}\end{quote}
1953
1954The 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.
1955
1956This function never returns NULL, so its result may be used unconditionally as a C string.
1957
1958The 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()}}}}
1959
1960\begin{sphinxadmonition}{note}{Note:}
1961Future versions may return the same string for the second and following calls.
1962\end{sphinxadmonition}
1963
1964
1965\subsubsection{krb5\_get\_host\_realm -  Get the Kerberos realm names for a host.}
1966\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)}
1967
1968\begin{fulllineitems}
1969\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}}{}
1970\end{fulllineitems}
1971
1972\begin{quote}\begin{description}
1973\item[{param}] \leavevmode
1974\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
1975
1976\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{host} - Host name (or NULL)
1977
1978\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realmsp} - Null-terminated list of realm names
1979
1980\end{description}\end{quote}
1981\begin{quote}\begin{description}
1982\item[{retval}] \leavevmode\begin{itemize}
1983\item {}
19840   Success
1985
1986\item {}
1987ENOMEM   Insufficient memory
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
1999Fill 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.
2000
2001If \sphinxstyleemphasis{host} is NULL, the local host’s realms are determined.
2002
2003Use {\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.
2004
2005
2006\subsubsection{krb5\_get\_credentials -  Get an additional ticket.}
2007\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)}
2008
2009\begin{fulllineitems}
2010\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}}{}
2011\end{fulllineitems}
2012
2013\begin{quote}\begin{description}
2014\item[{param}] \leavevmode
2015\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2016
2017\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{options} - Options
2018
2019\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache handle
2020
2021\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_creds} - Input credentials
2022
2023\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out\_creds} - Output updated credentials
2024
2025\end{description}\end{quote}
2026\begin{quote}\begin{description}
2027\item[{retval}] \leavevmode\begin{itemize}
2028\item {}
20290   Success
2030
2031\end{itemize}
2032
2033\item[{return}] \leavevmode\begin{itemize}
2034\item {}
2035Kerberos error codes
2036
2037\end{itemize}
2038
2039\end{description}\end{quote}
2040
2041Use \sphinxstyleemphasis{ccache} or a TGS exchange to get a service ticket matching \sphinxstyleemphasis{in\_creds} .
2042
2043Valid values for \sphinxstyleemphasis{options} are:
2044\begin{quote}
2045\begin{itemize}
2046\item {}
2047{\hyperref[\detokenize{appdev/refs/macros/KRB5_GC_CACHED:KRB5_GC_CACHED}]{\sphinxcrossref{\sphinxcode{KRB5\_GC\_CACHED}}}} Search only credential cache for the ticket
2048
2049\item {}
2050{\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
2051
2052\end{itemize}
2053
2054\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.
2055\end{quote}
2056
2057The 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.
2058
2059Any returned ticket and intermediate ticket-granting tickets are stored in \sphinxstyleemphasis{ccache} .
2060
2061Use {\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.
2062
2063
2064\subsubsection{krb5\_get\_fallback\_host\_realm}
2065\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)}
2066
2067\begin{fulllineitems}
2068\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}}{}
2069\end{fulllineitems}
2070
2071\begin{quote}\begin{description}
2072\item[{param}] \leavevmode
2073\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2074
2075\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{hdata} - Host name (or NULL)
2076
2077\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realmsp} - Null-terminated list of realm names
2078
2079\end{description}\end{quote}
2080
2081Fill 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.
2082
2083If \sphinxstyleemphasis{host} is NULL, the local host’s realms are determined.
2084
2085Use {\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.
2086
2087
2088\subsubsection{krb5\_get\_init\_creds\_keytab -  Get initial credentials using a key table.}
2089\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)}
2090
2091\begin{fulllineitems}
2092\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}}{}
2093\end{fulllineitems}
2094
2095\begin{quote}\begin{description}
2096\item[{param}] \leavevmode
2097\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2098
2099\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - New credentials
2100
2101\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal
2102
2103\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{arg\_keytab} - Key table handle
2104
2105\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{start\_time} - Time when ticket becomes valid (0 for now)
2106
2107\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_tkt\_service} - Service name of initial credentials (or NULL)
2108
2109\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k5\_gic\_options} - Initial credential options
2110
2111\end{description}\end{quote}
2112\begin{quote}\begin{description}
2113\item[{retval}] \leavevmode\begin{itemize}
2114\item {}
21150   Success
2116
2117\end{itemize}
2118
2119\item[{return}] \leavevmode\begin{itemize}
2120\item {}
2121Kerberos error codes
2122
2123\end{itemize}
2124
2125\end{description}\end{quote}
2126
2127This 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.
2128
2129
2130\subsubsection{krb5\_get\_init\_creds\_opt\_alloc -  Allocate a new initial credential options structure.}
2131\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)}
2132
2133\begin{fulllineitems}
2134\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}}{}
2135\end{fulllineitems}
2136
2137\begin{quote}\begin{description}
2138\item[{param}] \leavevmode
2139\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2140
2141\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{opt} - New options structure
2142
2143\end{description}\end{quote}
2144\begin{quote}\begin{description}
2145\item[{retval}] \leavevmode\begin{itemize}
2146\item {}
21470   - Success; Kerberos errors otherwise.
2148
2149\end{itemize}
2150
2151\end{description}\end{quote}
2152
2153This 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.
2154
2155
2156\subsubsection{krb5\_get\_init\_creds\_opt\_free -  Free initial credential options.}
2157\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)}
2158
2159\begin{fulllineitems}
2160\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}}{}
2161\end{fulllineitems}
2162
2163\begin{quote}\begin{description}
2164\item[{param}] \leavevmode
2165\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2166
2167\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure to free
2168
2169\end{description}\end{quote}
2170
2171
2172\sphinxstrong{See also:}
2173
2174
2175{\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()}}}}
2176
2177
2178
2179
2180\subsubsection{krb5\_get\_init\_creds\_opt\_get\_fast\_flags -  Retrieve FAST flags from initial credential options.}
2181\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)}
2182
2183\begin{fulllineitems}
2184\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}}{}
2185\end{fulllineitems}
2186
2187\begin{quote}\begin{description}
2188\item[{param}] \leavevmode
2189\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2190
2191\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options
2192
2193\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out\_flags} - FAST flags
2194
2195\end{description}\end{quote}
2196\begin{quote}\begin{description}
2197\item[{retval}] \leavevmode\begin{itemize}
2198\item {}
21990   - Success; Kerberos errors otherwise.
2200
2201\end{itemize}
2202
2203\end{description}\end{quote}
2204
2205
2206\subsubsection{krb5\_get\_init\_creds\_opt\_set\_address\_list -  Set address restrictions in initial credential options.}
2207\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)}
2208
2209\begin{fulllineitems}
2210\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}}{}
2211\end{fulllineitems}
2212
2213\begin{quote}\begin{description}
2214\item[{param}] \leavevmode
2215\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2216
2217\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addresses} - Null-terminated array of addresses
2218
2219\end{description}\end{quote}
2220
2221
2222\subsubsection{krb5\_get\_init\_creds\_opt\_set\_anonymous -  Set or unset the anonymous flag in initial credential options.}
2223\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)}
2224
2225\begin{fulllineitems}
2226\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}}{}
2227\end{fulllineitems}
2228
2229\begin{quote}\begin{description}
2230\item[{param}] \leavevmode
2231\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2232
2233\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{anonymous} - Whether to make an anonymous request
2234
2235\end{description}\end{quote}
2236
2237This 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.
2238
2239
2240\subsubsection{krb5\_get\_init\_creds\_opt\_set\_canonicalize -  Set or unset the canonicalize flag in initial credential options.}
2241\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)}
2242
2243\begin{fulllineitems}
2244\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}}{}
2245\end{fulllineitems}
2246
2247\begin{quote}\begin{description}
2248\item[{param}] \leavevmode
2249\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2250
2251\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{canonicalize} - Whether to canonicalize client principal
2252
2253\end{description}\end{quote}
2254
2255
2256\subsubsection{krb5\_get\_init\_creds\_opt\_set\_change\_password\_prompt -  Set or unset change-password-prompt flag in initial credential options.}
2257\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)}
2258
2259\begin{fulllineitems}
2260\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}}{}
2261\end{fulllineitems}
2262
2263\begin{quote}\begin{description}
2264\item[{param}] \leavevmode
2265\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2266
2267\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompt} - Whether to prompt to change password
2268
2269\end{description}\end{quote}
2270
2271This 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.
2272
2273
2274\subsubsection{krb5\_get\_init\_creds\_opt\_set\_etype\_list -  Set allowable encryption types in initial credential options.}
2275\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)}
2276
2277\begin{fulllineitems}
2278\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}}{}
2279\end{fulllineitems}
2280
2281\begin{quote}\begin{description}
2282\item[{param}] \leavevmode
2283\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2284
2285\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{etype\_list} - Array of encryption types
2286
2287\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{etype\_list\_length} - Length of \sphinxstyleemphasis{etype\_list}
2288
2289\end{description}\end{quote}
2290
2291
2292\subsubsection{krb5\_get\_init\_creds\_opt\_set\_expire\_callback -  Set an expiration callback in initial credential options.}
2293\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)}
2294
2295\begin{fulllineitems}
2296\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}}{}
2297\end{fulllineitems}
2298
2299\begin{quote}\begin{description}
2300\item[{param}] \leavevmode
2301\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2302
2303\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2304
2305\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cb} - Callback function
2306
2307\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Callback argument
2308
2309\end{description}\end{quote}
2310
2311Set a callback to receive password and account expiration times.
2312
2313This option only applies to {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_password()}}}} . \sphinxstyleemphasis{cb} will be invoked if and only if credentials are successfully acquired. The callback will receive the \sphinxstyleemphasis{context} from the {\hyperref[\detokenize{appdev/refs/api/krb5_get_init_creds_password:c.krb5_get_init_creds_password}]{\sphinxcrossref{\sphinxcode{krb5\_get\_init\_creds\_password()}}}} call and the \sphinxstyleemphasis{data} argument supplied with this API. The remaining arguments should be interpreted as follows:
2314
2315If \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.
2316
2317If \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.
2318
2319Note 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.
2320
2321\begin{sphinxadmonition}{warning}{Warning:}
2322Setting 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.
2323\end{sphinxadmonition}
2324
2325\begin{sphinxadmonition}{note}{Note:}
2326New in 1.9
2327\end{sphinxadmonition}
2328
2329
2330\subsubsection{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache -  Set FAST armor cache in initial credential options.}
2331\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)}
2332
2333\begin{fulllineitems}
2334\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}}{}
2335\end{fulllineitems}
2336
2337\begin{quote}\begin{description}
2338\item[{param}] \leavevmode
2339\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2340
2341\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options
2342
2343\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache handle
2344
2345\end{description}\end{quote}
2346
2347This 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.
2348
2349\begin{sphinxadmonition}{note}{Note:}
2350New in 1.9
2351\end{sphinxadmonition}
2352
2353
2354\subsubsection{krb5\_get\_init\_creds\_opt\_set\_fast\_ccache\_name -  Set location of FAST armor ccache in initial credential options.}
2355\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)}
2356
2357\begin{fulllineitems}
2358\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}}{}
2359\end{fulllineitems}
2360
2361\begin{quote}\begin{description}
2362\item[{param}] \leavevmode
2363\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2364
2365\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options
2366
2367\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fast\_ccache\_name} - Credential cache name
2368
2369\end{description}\end{quote}
2370
2371Sets the location of a credential cache containing an armor ticket to protect an initial credential exchange using the FAST protocol extension.
2372
2373In 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.
2374
2375
2376\subsubsection{krb5\_get\_init\_creds\_opt\_set\_fast\_flags -  Set FAST flags in initial credential options.}
2377\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)}
2378
2379\begin{fulllineitems}
2380\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}}{}
2381\end{fulllineitems}
2382
2383\begin{quote}\begin{description}
2384\item[{param}] \leavevmode
2385\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2386
2387\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options
2388
2389\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - FAST flags
2390
2391\end{description}\end{quote}
2392\begin{quote}\begin{description}
2393\item[{retval}] \leavevmode\begin{itemize}
2394\item {}
23950   - Success; Kerberos errors otherwise.
2396
2397\end{itemize}
2398
2399\end{description}\end{quote}
2400
2401The following flag values are valid:
2402\begin{itemize}
2403\item {}
2404{\hyperref[\detokenize{appdev/refs/macros/KRB5_FAST_REQUIRED:KRB5_FAST_REQUIRED}]{\sphinxcrossref{\sphinxcode{KRB5\_FAST\_REQUIRED}}}} - Require FAST to be used
2405
2406\end{itemize}
2407
2408
2409\subsubsection{krb5\_get\_init\_creds\_opt\_set\_forwardable -  Set or unset the forwardable flag in initial credential options.}
2410\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)}
2411
2412\begin{fulllineitems}
2413\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}}{}
2414\end{fulllineitems}
2415
2416\begin{quote}\begin{description}
2417\item[{param}] \leavevmode
2418\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2419
2420\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{forwardable} - Whether credentials should be forwardable
2421
2422\end{description}\end{quote}
2423
2424
2425\subsubsection{krb5\_get\_init\_creds\_opt\_set\_in\_ccache -  Set an input credential cache in initial credential options.}
2426\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)}
2427
2428\begin{fulllineitems}
2429\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}}{}
2430\end{fulllineitems}
2431
2432\begin{quote}\begin{description}
2433\item[{param}] \leavevmode
2434\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2435
2436\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options
2437
2438\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache handle
2439
2440\end{description}\end{quote}
2441
2442If 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.
2443
2444\begin{sphinxadmonition}{note}{Note:}
2445New in 1.11
2446\end{sphinxadmonition}
2447
2448
2449\subsubsection{krb5\_get\_init\_creds\_opt\_set\_out\_ccache -  Set an output credential cache in initial credential options.}
2450\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)}
2451
2452\begin{fulllineitems}
2453\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}}{}
2454\end{fulllineitems}
2455
2456\begin{quote}\begin{description}
2457\item[{param}] \leavevmode
2458\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2459
2460\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options
2461
2462\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache handle
2463
2464\end{description}\end{quote}
2465
2466If 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.
2467
2468
2469\subsubsection{krb5\_get\_init\_creds\_opt\_set\_pa -  Supply options for preauthentication in initial credential options.}
2470\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)}
2471
2472\begin{fulllineitems}
2473\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}}{}
2474\end{fulllineitems}
2475
2476\begin{quote}\begin{description}
2477\item[{param}] \leavevmode
2478\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2479
2480\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2481
2482\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{attr} - Preauthentication option name
2483
2484\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{value} - Preauthentication option value
2485
2486\end{description}\end{quote}
2487
2488This 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} .
2489
2490
2491\subsubsection{krb5\_get\_init\_creds\_opt\_set\_pac\_request -  Ask the KDC to include or not include a PAC in the ticket.}
2492\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)}
2493
2494\begin{fulllineitems}
2495\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}}{}
2496\end{fulllineitems}
2497
2498\begin{quote}\begin{description}
2499\item[{param}] \leavevmode
2500\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2501
2502\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2503
2504\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{req\_pac} - Whether to request a PAC or not
2505
2506\end{description}\end{quote}
2507
2508If 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.
2509
2510\begin{sphinxadmonition}{note}{Note:}
2511New in 1.15
2512\end{sphinxadmonition}
2513
2514
2515\subsubsection{krb5\_get\_init\_creds\_opt\_set\_preauth\_list -  Set preauthentication types in initial credential options.}
2516\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)}
2517
2518\begin{fulllineitems}
2519\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}}{}
2520\end{fulllineitems}
2521
2522\begin{quote}\begin{description}
2523\item[{param}] \leavevmode
2524\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2525
2526\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{preauth\_list} - Array of preauthentication types
2527
2528\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{preauth\_list\_length} - Length of \sphinxstyleemphasis{preauth\_list}
2529
2530\end{description}\end{quote}
2531
2532This 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()}}}} .
2533
2534
2535\subsubsection{krb5\_get\_init\_creds\_opt\_set\_proxiable -  Set or unset the proxiable flag in initial credential options.}
2536\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)}
2537
2538\begin{fulllineitems}
2539\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}}{}
2540\end{fulllineitems}
2541
2542\begin{quote}\begin{description}
2543\item[{param}] \leavevmode
2544\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2545
2546\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{proxiable} - Whether credentials should be proxiable
2547
2548\end{description}\end{quote}
2549
2550
2551\subsubsection{krb5\_get\_init\_creds\_opt\_set\_renew\_life -  Set the ticket renewal lifetime in initial credential options.}
2552\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)}
2553
2554\begin{fulllineitems}
2555\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}}{}
2556\end{fulllineitems}
2557
2558\begin{quote}\begin{description}
2559\item[{param}] \leavevmode
2560\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Pointer to \sphinxstyleemphasis{options} field
2561
2562\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{renew\_life} - Ticket renewal lifetime
2563
2564\end{description}\end{quote}
2565
2566
2567\subsubsection{krb5\_get\_init\_creds\_opt\_set\_responder -  Set the responder function in initial credential options.}
2568\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)}
2569
2570\begin{fulllineitems}
2571\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}}{}
2572\end{fulllineitems}
2573
2574\begin{quote}\begin{description}
2575\item[{param}] \leavevmode
2576\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2577
2578\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2579
2580\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{responder} - Responder function
2581
2582\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Responder data argument
2583
2584\end{description}\end{quote}
2585
2586\begin{sphinxadmonition}{note}{Note:}
2587New in 1.11
2588\end{sphinxadmonition}
2589
2590
2591\subsubsection{krb5\_get\_init\_creds\_opt\_set\_salt -  Set salt for optimistic preauthentication in initial credential options.}
2592\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)}
2593
2594\begin{fulllineitems}
2595\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}}{}
2596\end{fulllineitems}
2597
2598\begin{quote}\begin{description}
2599\item[{param}] \leavevmode
2600\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2601
2602\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{salt} - Salt data
2603
2604\end{description}\end{quote}
2605
2606When 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.
2607
2608
2609\subsubsection{krb5\_get\_init\_creds\_opt\_set\_tkt\_life -  Set the ticket lifetime in initial credential options.}
2610\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)}
2611
2612\begin{fulllineitems}
2613\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}}{}
2614\end{fulllineitems}
2615
2616\begin{quote}\begin{description}
2617\item[{param}] \leavevmode
2618\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Options structure
2619
2620\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{tkt\_life} - Ticket lifetime
2621
2622\end{description}\end{quote}
2623
2624
2625\subsubsection{krb5\_get\_init\_creds\_password -  Get initial credentials using a password.}
2626\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)}
2627
2628\begin{fulllineitems}
2629\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}}{}
2630\end{fulllineitems}
2631
2632\begin{quote}\begin{description}
2633\item[{param}] \leavevmode
2634\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2635
2636\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - New credentials
2637
2638\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal
2639
2640\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{password} - Password (or NULL)
2641
2642\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompter} - Prompter function
2643
2644\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Prompter callback data
2645
2646\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{start\_time} - Time when ticket becomes valid (0 for now)
2647
2648\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_tkt\_service} - Service name of initial credentials (or NULL)
2649
2650\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k5\_gic\_options} - Initial credential options
2651
2652\end{description}\end{quote}
2653\begin{quote}\begin{description}
2654\item[{retval}] \leavevmode\begin{itemize}
2655\item {}
26560   Success
2657
2658\item {}
2659EINVAL   Invalid argument
2660
2661\item {}
2662KRB5\_KDC\_UNREACH   Cannot contact any KDC for requested realm
2663
2664\item {}
2665KRB5\_PREAUTH\_FAILED   Generic Pre-athentication failure
2666
2667\item {}
2668KRB5\_LIBOS\_PWDINTR   Password read interrupted
2669
2670\item {}
2671KRB5\_REALM\_CANT\_RESOLVE   Cannot resolve network address for KDC in requested realm
2672
2673\item {}
2674KRB5KDC\_ERR\_KEY\_EXP   Password has expired
2675
2676\item {}
2677KRB5\_LIBOS\_BADPWDMATCH   Password mismatch
2678
2679\item {}
2680KRB5\_CHPW\_PWDNULL   New password cannot be zero length
2681
2682\item {}
2683KRB5\_CHPW\_FAIL   Password change failed
2684
2685\end{itemize}
2686
2687\item[{return}] \leavevmode\begin{itemize}
2688\item {}
2689Kerberos error codes
2690
2691\end{itemize}
2692
2693\end{description}\end{quote}
2694
2695This 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.
2696
2697
2698\subsubsection{krb5\_get\_profile -  Retrieve configuration profile from the context.}
2699\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)}
2700
2701\begin{fulllineitems}
2702\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}}{}
2703\end{fulllineitems}
2704
2705\begin{quote}\begin{description}
2706\item[{param}] \leavevmode
2707\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2708
2709\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{profile} - Pointer to data read from a configuration file
2710
2711\end{description}\end{quote}
2712\begin{quote}\begin{description}
2713\item[{retval}] \leavevmode\begin{itemize}
2714\item {}
27150   Success
2716
2717\end{itemize}
2718
2719\item[{return}] \leavevmode\begin{itemize}
2720\item {}
2721Kerberos error codes
2722
2723\end{itemize}
2724
2725\end{description}\end{quote}
2726
2727This function creates a new \sphinxstyleemphasis{profile} object that reflects profile in the supplied \sphinxstyleemphasis{context} .
2728
2729The \sphinxstyleemphasis{profile} object may be freed with profile\_release() function. See profile.h and profile API for more details.
2730
2731
2732\subsubsection{krb5\_get\_prompt\_types -  Get prompt types array from a context.}
2733\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)}
2734
2735\begin{fulllineitems}
2736\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}}{}
2737\end{fulllineitems}
2738
2739\begin{quote}\begin{description}
2740\item[{param}] \leavevmode
2741\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2742
2743\end{description}\end{quote}
2744\begin{quote}\begin{description}
2745\item[{return}] \leavevmode\begin{itemize}
2746\item {}
2747Pointer 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
2748
2749\end{itemize}
2750
2751\end{description}\end{quote}
2752
2753
2754\subsubsection{krb5\_get\_renewed\_creds -  Get renewed credential from KDC using an existing credential.}
2755\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)}
2756
2757\begin{fulllineitems}
2758\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}}{}
2759\end{fulllineitems}
2760
2761\begin{quote}\begin{description}
2762\item[{param}] \leavevmode
2763\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2764
2765\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - Renewed credentials
2766
2767\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal name
2768
2769\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache
2770
2771\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_tkt\_service} - Server principal string (or NULL)
2772
2773\end{description}\end{quote}
2774\begin{quote}\begin{description}
2775\item[{retval}] \leavevmode\begin{itemize}
2776\item {}
27770   Success
2778
2779\end{itemize}
2780
2781\item[{return}] \leavevmode\begin{itemize}
2782\item {}
2783Kerberos error codes
2784
2785\end{itemize}
2786
2787\end{description}\end{quote}
2788
2789This 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.
2790
2791If successful, the renewed credential is placed in \sphinxstyleemphasis{creds} .
2792
2793
2794\subsubsection{krb5\_get\_validated\_creds -  Get validated credentials from the KDC.}
2795\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)}
2796
2797\begin{fulllineitems}
2798\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}}{}
2799\end{fulllineitems}
2800
2801\begin{quote}\begin{description}
2802\item[{param}] \leavevmode
2803\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2804
2805\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - Validated credentials
2806
2807\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal name
2808
2809\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache
2810
2811\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_tkt\_service} - Server principal string (or NULL)
2812
2813\end{description}\end{quote}
2814\begin{quote}\begin{description}
2815\item[{retval}] \leavevmode\begin{itemize}
2816\item {}
28170   Success
2818
2819\item {}
2820KRB5\_NO\_2ND\_TKT   Request missing second ticket
2821
2822\item {}
2823KRB5\_NO\_TKT\_SUPPLIED   Request did not supply a ticket
2824
2825\item {}
2826KRB5\_PRINC\_NOMATCH   Requested principal and ticket do not match
2827
2828\item {}
2829KRB5\_KDCREP\_MODIFIED   KDC reply did not match expectations
2830
2831\item {}
2832KRB5\_KDCREP\_SKEW   Clock skew too great in KDC reply
2833
2834\end{itemize}
2835
2836\item[{return}] \leavevmode\begin{itemize}
2837\item {}
2838Kerberos error codes
2839
2840\end{itemize}
2841
2842\end{description}\end{quote}
2843
2844This 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.
2845
2846If successful, the validated credential is placed in \sphinxstyleemphasis{creds} .
2847
2848
2849\subsubsection{krb5\_init\_context -  Create a krb5 library context.}
2850\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)}
2851
2852\begin{fulllineitems}
2853\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}}{}
2854\end{fulllineitems}
2855
2856\begin{quote}\begin{description}
2857\item[{param}] \leavevmode
2858\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{context} - Library context
2859
2860\end{description}\end{quote}
2861\begin{quote}\begin{description}
2862\item[{retval}] \leavevmode\begin{itemize}
2863\item {}
28640   Success
2865
2866\end{itemize}
2867
2868\item[{return}] \leavevmode\begin{itemize}
2869\item {}
2870Kerberos error codes
2871
2872\end{itemize}
2873
2874\end{description}\end{quote}
2875
2876The \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.
2877
2878\begin{sphinxadmonition}{warning}{Warning:}
2879Any 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.
2880\end{sphinxadmonition}
2881
2882
2883\subsubsection{krb5\_init\_secure\_context -  Create a krb5 library context using only configuration files.}
2884\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)}
2885
2886\begin{fulllineitems}
2887\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}}{}
2888\end{fulllineitems}
2889
2890\begin{quote}\begin{description}
2891\item[{param}] \leavevmode
2892\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{context} - Library context
2893
2894\end{description}\end{quote}
2895\begin{quote}\begin{description}
2896\item[{retval}] \leavevmode\begin{itemize}
2897\item {}
28980   Success
2899
2900\end{itemize}
2901
2902\item[{return}] \leavevmode\begin{itemize}
2903\item {}
2904Kerberos error codes
2905
2906\end{itemize}
2907
2908\end{description}\end{quote}
2909
2910Create a context structure, using only system configuration files. All information passed through the environment variables is ignored.
2911
2912The \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.
2913
2914
2915\subsubsection{krb5\_is\_config\_principal -  Test whether a principal is a configuration principal.}
2916\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)}
2917
2918\begin{fulllineitems}
2919\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}}{}
2920\end{fulllineitems}
2921
2922\begin{quote}\begin{description}
2923\item[{param}] \leavevmode
2924\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2925
2926\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal to check
2927
2928\end{description}\end{quote}
2929\begin{quote}\begin{description}
2930\item[{return}] \leavevmode\begin{itemize}
2931\item {}
2932TRUE if the principal is a configuration principal (generated part of krb5\_cc\_set\_config() ); FALSE otherwise.
2933
2934\end{itemize}
2935
2936\end{description}\end{quote}
2937
2938
2939\subsubsection{krb5\_is\_thread\_safe -  Test whether the Kerberos library was built with multithread support.}
2940\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)}
2941
2942\begin{fulllineitems}
2943\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}}{}
2944\end{fulllineitems}
2945
2946\begin{quote}\begin{description}
2947\item[{param}] \leavevmode
2948\sphinxstylestrong{None}
2949
2950\end{description}\end{quote}
2951\begin{quote}\begin{description}
2952\item[{retval}] \leavevmode\begin{itemize}
2953\item {}
2954TRUE   if the library is threadsafe; FALSE otherwise
2955
2956\end{itemize}
2957
2958\end{description}\end{quote}
2959
2960
2961\subsubsection{krb5\_kt\_close -  Close a key table handle.}
2962\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)}
2963
2964\begin{fulllineitems}
2965\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}}{}
2966\end{fulllineitems}
2967
2968\begin{quote}\begin{description}
2969\item[{param}] \leavevmode
2970\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2971
2972\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle
2973
2974\end{description}\end{quote}
2975\begin{quote}\begin{description}
2976\item[{retval}] \leavevmode\begin{itemize}
2977\item {}
29780   None
2979
2980\end{itemize}
2981
2982\end{description}\end{quote}
2983
2984
2985\subsubsection{krb5\_kt\_client\_default -  Resolve the default client key table.}
2986\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)}
2987
2988\begin{fulllineitems}
2989\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}}{}
2990\end{fulllineitems}
2991
2992\begin{quote}\begin{description}
2993\item[{param}] \leavevmode
2994\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
2995
2996\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keytab\_out} - Key table handle
2997
2998\end{description}\end{quote}
2999\begin{quote}\begin{description}
3000\item[{retval}] \leavevmode\begin{itemize}
3001\item {}
30020   Success
3003
3004\end{itemize}
3005
3006\item[{return}] \leavevmode\begin{itemize}
3007\item {}
3008Kerberos error codes
3009
3010\end{itemize}
3011
3012\end{description}\end{quote}
3013
3014Fill \sphinxstyleemphasis{keytab\_out} with a handle to the default client key table.
3015
3016\begin{sphinxadmonition}{note}{Note:}
3017New in 1.11
3018\end{sphinxadmonition}
3019
3020
3021\subsubsection{krb5\_kt\_default -  Resolve the default key table.}
3022\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)}
3023
3024\begin{fulllineitems}
3025\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}}{}
3026\end{fulllineitems}
3027
3028\begin{quote}\begin{description}
3029\item[{param}] \leavevmode
3030\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3031
3032\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{id} - Key table handle
3033
3034\end{description}\end{quote}
3035\begin{quote}\begin{description}
3036\item[{retval}] \leavevmode\begin{itemize}
3037\item {}
30380   Success
3039
3040\end{itemize}
3041
3042\item[{return}] \leavevmode\begin{itemize}
3043\item {}
3044Kerberos error codes
3045
3046\end{itemize}
3047
3048\end{description}\end{quote}
3049
3050Set \sphinxstyleemphasis{id} to a handle to the default key table. The key table is not opened.
3051
3052
3053\subsubsection{krb5\_kt\_default\_name -  Get the default key table name.}
3054\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)}
3055
3056\begin{fulllineitems}
3057\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}}{}
3058\end{fulllineitems}
3059
3060\begin{quote}\begin{description}
3061\item[{param}] \leavevmode
3062\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3063
3064\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} - Default key table name
3065
3066\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name\_size} - Space available in \sphinxstyleemphasis{name}
3067
3068\end{description}\end{quote}
3069\begin{quote}\begin{description}
3070\item[{retval}] \leavevmode\begin{itemize}
3071\item {}
30720   Success
3073
3074\item {}
3075KRB5\_CONFIG\_NOTENUFSPACE   Buffer is too short
3076
3077\end{itemize}
3078
3079\item[{return}] \leavevmode\begin{itemize}
3080\item {}
3081Kerberos error codes
3082
3083\end{itemize}
3084
3085\end{description}\end{quote}
3086
3087Fill \sphinxstyleemphasis{name} with the name of the default key table for \sphinxstyleemphasis{context} .
3088
3089
3090\subsubsection{krb5\_kt\_dup -  Duplicate keytab handle.}
3091\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)}
3092
3093\begin{fulllineitems}
3094\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}}{}
3095\end{fulllineitems}
3096
3097\begin{quote}\begin{description}
3098\item[{param}] \leavevmode
3099\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3100
3101\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in} - Key table handle to be duplicated
3102
3103\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Key table handle
3104
3105\end{description}\end{quote}
3106
3107Create a new handle referring to the same key table as \sphinxstyleemphasis{in} . The new handle and \sphinxstyleemphasis{in} can be closed independently.
3108
3109\begin{sphinxadmonition}{note}{Note:}
3110New in 1.12
3111\end{sphinxadmonition}
3112
3113
3114\subsubsection{krb5\_kt\_get\_name -  Get a key table name.}
3115\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)}
3116
3117\begin{fulllineitems}
3118\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}}{}
3119\end{fulllineitems}
3120
3121\begin{quote}\begin{description}
3122\item[{param}] \leavevmode
3123\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3124
3125\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle
3126
3127\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} - Key table name
3128
3129\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{namelen} - Maximum length to fill in name
3130
3131\end{description}\end{quote}
3132\begin{quote}\begin{description}
3133\item[{retval}] \leavevmode\begin{itemize}
3134\item {}
31350   Success
3136
3137\item {}
3138KRB5\_KT\_NAME\_TOOLONG   Key table name does not fit in namelen bytes
3139
3140\end{itemize}
3141
3142\item[{return}] \leavevmode\begin{itemize}
3143\item {}
3144Kerberos error codes
3145
3146\end{itemize}
3147
3148\end{description}\end{quote}
3149
3150Fill \sphinxstyleemphasis{name} with the name of \sphinxstyleemphasis{keytab} including the type and delimiter.
3151
3152
3153\subsubsection{krb5\_kt\_get\_type -  Return the type of a key table.}
3154\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)}
3155
3156\begin{fulllineitems}
3157\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}}{}
3158\end{fulllineitems}
3159
3160\begin{quote}\begin{description}
3161\item[{param}] \leavevmode
3162\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3163
3164\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle
3165
3166\end{description}\end{quote}
3167\begin{quote}\begin{description}
3168\item[{return}] \leavevmode\begin{itemize}
3169\item {}
3170The type of a key table as an alias that must not be modified or freed by the caller.
3171
3172\end{itemize}
3173
3174\end{description}\end{quote}
3175
3176
3177\subsubsection{krb5\_kt\_resolve -  Get a handle for a key table.}
3178\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)}
3179
3180\begin{fulllineitems}
3181\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}}{}
3182\end{fulllineitems}
3183
3184\begin{quote}\begin{description}
3185\item[{param}] \leavevmode
3186\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3187
3188\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - Name of the key table
3189
3190\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ktid} - Key table handle
3191
3192\end{description}\end{quote}
3193\begin{quote}\begin{description}
3194\item[{retval}] \leavevmode\begin{itemize}
3195\item {}
31960   Success
3197
3198\end{itemize}
3199
3200\item[{return}] \leavevmode\begin{itemize}
3201\item {}
3202Kerberos error codes
3203
3204\end{itemize}
3205
3206\end{description}\end{quote}
3207
3208Resolve 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.
3209\begin{quote}
3210
3211\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} .
3212\end{quote}
3213
3214If \sphinxstyleemphasis{name} is of type \sphinxstylestrong{FILE} , the keytab file is not opened by this call.
3215
3216
3217\subsubsection{krb5\_kuserok -  Determine if a principal is authorized to log in as a local user.}
3218\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)}
3219
3220\begin{fulllineitems}
3221\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}}{}
3222\end{fulllineitems}
3223
3224\begin{quote}\begin{description}
3225\item[{param}] \leavevmode
3226\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3227
3228\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal name
3229
3230\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{luser} - Local username
3231
3232\end{description}\end{quote}
3233\begin{quote}\begin{description}
3234\item[{retval}] \leavevmode\begin{itemize}
3235\item {}
3236TRUE   Principal is authorized to log in as user; FALSE otherwise.
3237
3238\end{itemize}
3239
3240\end{description}\end{quote}
3241
3242Determine whether \sphinxstyleemphasis{principal} is authorized to log in as a local user \sphinxstyleemphasis{luser} .
3243
3244
3245\subsubsection{krb5\_parse\_name -  Convert a string principal name to a krb5\_principal structure.}
3246\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)}
3247
3248\begin{fulllineitems}
3249\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}}{}
3250\end{fulllineitems}
3251
3252\begin{quote}\begin{description}
3253\item[{param}] \leavevmode
3254\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3255
3256\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - String representation of a principal name
3257
3258\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{principal\_out} - New principal
3259
3260\end{description}\end{quote}
3261\begin{quote}\begin{description}
3262\item[{retval}] \leavevmode\begin{itemize}
3263\item {}
32640   Success
3265
3266\end{itemize}
3267
3268\item[{return}] \leavevmode\begin{itemize}
3269\item {}
3270Kerberos error codes
3271
3272\end{itemize}
3273
3274\end{description}\end{quote}
3275
3276Convert a string representation of a principal name to a krb5\_principal structure.
3277
3278A 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.
3279
3280To 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.
3281
3282Use {\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.
3283
3284\begin{sphinxadmonition}{note}{Note:}
3285The realm in a Kerberos \sphinxstyleemphasis{name} cannot contain slash, colon, or NULL characters.
3286\end{sphinxadmonition}
3287
3288
3289\subsubsection{krb5\_parse\_name\_flags -  Convert a string principal name to a krb5\_principal with flags.}
3290\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)}
3291
3292\begin{fulllineitems}
3293\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}}{}
3294\end{fulllineitems}
3295
3296\begin{quote}\begin{description}
3297\item[{param}] \leavevmode
3298\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3299
3300\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - String representation of a principal name
3301
3302\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flag
3303
3304\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{principal\_out} - New principal
3305
3306\end{description}\end{quote}
3307\begin{quote}\begin{description}
3308\item[{retval}] \leavevmode\begin{itemize}
3309\item {}
33100   Success
3311
3312\end{itemize}
3313
3314\item[{return}] \leavevmode\begin{itemize}
3315\item {}
3316Kerberos error codes
3317
3318\end{itemize}
3319
3320\end{description}\end{quote}
3321
3322Similar 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.
3323
3324The following flags are valid:
3325\begin{quote}
3326\begin{itemize}
3327\item {}
3328{\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}
3329
3330\item {}
3331{\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}
3332
3333\item {}
3334{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE:KRB5_PRINCIPAL_PARSE_ENTERPRISE}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE}}}} - create single-component enterprise principal
3335
3336\item {}
3337{\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}
3338
3339\end{itemize}
3340
3341If \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.
3342\end{quote}
3343
3344Use {\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.
3345
3346
3347\subsubsection{krb5\_principal\_compare -  Compare two principals.}
3348\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)}
3349
3350\begin{fulllineitems}
3351\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}}{}
3352\end{fulllineitems}
3353
3354\begin{quote}\begin{description}
3355\item[{param}] \leavevmode
3356\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3357
3358\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ1} - First principal
3359
3360\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ2} - Second principal
3361
3362\end{description}\end{quote}
3363\begin{quote}\begin{description}
3364\item[{retval}] \leavevmode\begin{itemize}
3365\item {}
3366TRUE   if the principals are the same; FALSE otherwise
3367
3368\end{itemize}
3369
3370\end{description}\end{quote}
3371
3372
3373\subsubsection{krb5\_principal\_compare\_any\_realm -  Compare two principals ignoring realm components.}
3374\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)}
3375
3376\begin{fulllineitems}
3377\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}}{}
3378\end{fulllineitems}
3379
3380\begin{quote}\begin{description}
3381\item[{param}] \leavevmode
3382\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3383
3384\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ1} - First principal
3385
3386\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ2} - Second principal
3387
3388\end{description}\end{quote}
3389\begin{quote}\begin{description}
3390\item[{retval}] \leavevmode\begin{itemize}
3391\item {}
3392TRUE   if the principals are the same; FALSE otherwise
3393
3394\end{itemize}
3395
3396\end{description}\end{quote}
3397
3398Similar 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.
3399
3400
3401\subsubsection{krb5\_principal\_compare\_flags -  Compare two principals with additional flags.}
3402\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)}
3403
3404\begin{fulllineitems}
3405\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}}{}
3406\end{fulllineitems}
3407
3408\begin{quote}\begin{description}
3409\item[{param}] \leavevmode
3410\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3411
3412\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ1} - First principal
3413
3414\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ2} - Second principal
3415
3416\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flags
3417
3418\end{description}\end{quote}
3419\begin{quote}\begin{description}
3420\item[{retval}] \leavevmode\begin{itemize}
3421\item {}
3422TRUE   if the principal names are the same; FALSE otherwise
3423
3424\end{itemize}
3425
3426\end{description}\end{quote}
3427
3428Valid flags are:
3429\begin{itemize}
3430\item {}
3431{\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
3432
3433\item {}
3434{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_ENTERPRISE:KRB5_PRINCIPAL_COMPARE_ENTERPRISE}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_ENTERPRISE}}}} - UPNs as real principals
3435
3436\item {}
3437{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD:KRB5_PRINCIPAL_COMPARE_CASEFOLD}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD}}}} case-insensitive
3438
3439\item {}
3440{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8:KRB5_PRINCIPAL_COMPARE_UTF8}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_UTF8}}}} - treat principals as UTF-8
3441
3442\end{itemize}
3443
3444
3445\sphinxstrong{See also:}
3446
3447
3448{\hyperref[\detokenize{appdev/refs/api/krb5_principal_compare:c.krb5_principal_compare}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_compare()}}}}
3449
3450
3451
3452
3453\subsubsection{krb5\_prompter\_posix -  Prompt user for password.}
3454\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)}
3455
3456\begin{fulllineitems}
3457\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}}{}
3458\end{fulllineitems}
3459
3460\begin{quote}\begin{description}
3461\item[{param}] \leavevmode
3462\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3463
3464\sphinxstylestrong{data} - Unused (callback argument)
3465
3466\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - Name to output during prompt
3467
3468\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{banner} - Banner to output during prompt
3469
3470\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_prompts} - Number of prompts in \sphinxstyleemphasis{prompts}
3471
3472\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompts} - Array of prompts and replies
3473
3474\end{description}\end{quote}
3475\begin{quote}\begin{description}
3476\item[{retval}] \leavevmode\begin{itemize}
3477\item {}
34780   Success
3479
3480\end{itemize}
3481
3482\item[{return}] \leavevmode\begin{itemize}
3483\item {}
3484Kerberos error codes
3485
3486\end{itemize}
3487
3488\end{description}\end{quote}
3489
3490This 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()}}}} .
3491
3492Writes \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.
3493
3494
3495\subsubsection{krb5\_realm\_compare -  Compare the realms of two principals.}
3496\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)}
3497
3498\begin{fulllineitems}
3499\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}}{}
3500\end{fulllineitems}
3501
3502\begin{quote}\begin{description}
3503\item[{param}] \leavevmode
3504\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3505
3506\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ1} - First principal
3507
3508\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ2} - Second principal
3509
3510\end{description}\end{quote}
3511\begin{quote}\begin{description}
3512\item[{retval}] \leavevmode\begin{itemize}
3513\item {}
3514TRUE   if the realm names are the same; FALSE otherwise
3515
3516\end{itemize}
3517
3518\end{description}\end{quote}
3519
3520
3521\subsubsection{krb5\_responder\_get\_challenge -  Retrieve the challenge data for a given question in the responder context.}
3522\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)}
3523
3524\begin{fulllineitems}
3525\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}}{}
3526\end{fulllineitems}
3527
3528\begin{quote}\begin{description}
3529\item[{param}] \leavevmode
3530\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
3531
3532\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context
3533
3534\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{question} - Question name
3535
3536\end{description}\end{quote}
3537
3538Return 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.
3539
3540\begin{sphinxadmonition}{note}{Note:}
3541New in 1.11
3542\end{sphinxadmonition}
3543
3544
3545\subsubsection{krb5\_responder\_list\_questions -  List the question names contained in the responder context.}
3546\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)}
3547
3548\begin{fulllineitems}
3549\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}}{}
3550\end{fulllineitems}
3551
3552\begin{quote}\begin{description}
3553\item[{param}] \leavevmode
3554\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
3555
3556\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context
3557
3558\end{description}\end{quote}
3559
3560Return 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()}}}} .
3561
3562\begin{sphinxadmonition}{note}{Note:}
3563New in 1.11
3564\end{sphinxadmonition}
3565
3566
3567\subsubsection{krb5\_responder\_set\_answer -  Answer a named question in the responder context.}
3568\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)}
3569
3570\begin{fulllineitems}
3571\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}}{}
3572\end{fulllineitems}
3573
3574\begin{quote}\begin{description}
3575\item[{param}] \leavevmode
3576\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
3577
3578\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context
3579
3580\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{question} - Question name
3581
3582\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{answer} - The string to set (MUST be printable UTF-8)
3583
3584\end{description}\end{quote}
3585\begin{quote}\begin{description}
3586\item[{retval}] \leavevmode\begin{itemize}
3587\item {}
3588EINVAL    question is not present within rctx
3589
3590\end{itemize}
3591
3592\end{description}\end{quote}
3593
3594This function supplies an answer to \sphinxstyleemphasis{question} within \sphinxstyleemphasis{rctx} . The appropriate form of the answer depends on the question name.
3595
3596\begin{sphinxadmonition}{note}{Note:}
3597New in 1.11
3598\end{sphinxadmonition}
3599
3600
3601\subsubsection{krb5\_responder\_otp\_get\_challenge -  Decode the KRB5\_RESPONDER\_QUESTION\_OTP to a C struct.}
3602\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)}
3603
3604\begin{fulllineitems}
3605\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}}{}
3606\end{fulllineitems}
3607
3608\begin{quote}\begin{description}
3609\item[{param}] \leavevmode
3610\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
3611
3612\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context
3613
3614\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{chl} - Challenge structure
3615
3616\end{description}\end{quote}
3617
3618A 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.
3619
3620The 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.
3621
3622\begin{sphinxadmonition}{note}{Note:}
3623New in 1.11
3624\end{sphinxadmonition}
3625
3626
3627\subsubsection{krb5\_responder\_otp\_set\_answer -  Answer the KRB5\_RESPONDER\_QUESTION\_OTP question.}
3628\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)}
3629
3630\begin{fulllineitems}
3631\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}}{}
3632\end{fulllineitems}
3633
3634\begin{quote}\begin{description}
3635\item[{param}] \leavevmode
3636\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
3637
3638\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context
3639
3640\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ti} - The index of the tokeninfo selected
3641
3642\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{value} - The value to set, or NULL for none
3643
3644\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pin} - The pin to set, or NULL for none
3645
3646\end{description}\end{quote}
3647
3648\begin{sphinxadmonition}{note}{Note:}
3649New in 1.11
3650\end{sphinxadmonition}
3651
3652
3653\subsubsection{krb5\_responder\_otp\_challenge\_free -  Free the value returned by krb5\_responder\_otp\_get\_challenge() .}
3654\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)}
3655
3656\begin{fulllineitems}
3657\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}}{}
3658\end{fulllineitems}
3659
3660\begin{quote}\begin{description}
3661\item[{param}] \leavevmode
3662\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
3663
3664\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context
3665
3666\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{chl} - The challenge to free
3667
3668\end{description}\end{quote}
3669
3670\begin{sphinxadmonition}{note}{Note:}
3671New in 1.11
3672\end{sphinxadmonition}
3673
3674
3675\subsubsection{krb5\_responder\_pkinit\_get\_challenge -  Decode the KRB5\_RESPONDER\_QUESTION\_PKINIT to a C struct.}
3676\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)}
3677
3678\begin{fulllineitems}
3679\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}}{}
3680\end{fulllineitems}
3681
3682\begin{quote}\begin{description}
3683\item[{param}] \leavevmode
3684\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
3685
3686\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context
3687
3688\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{chl\_out} - Challenge structure
3689
3690\end{description}\end{quote}
3691
3692A 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.
3693
3694The 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.
3695
3696\begin{sphinxadmonition}{note}{Note:}
3697New in 1.12
3698\end{sphinxadmonition}
3699
3700
3701\subsubsection{krb5\_responder\_pkinit\_set\_answer -  Answer the KRB5\_RESPONDER\_QUESTION\_PKINIT question for one identity.}
3702\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)}
3703
3704\begin{fulllineitems}
3705\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}}{}
3706\end{fulllineitems}
3707
3708\begin{quote}\begin{description}
3709\item[{param}] \leavevmode
3710\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
3711
3712\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context
3713
3714\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{identity} - The identity for which a PIN is being supplied
3715
3716\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pin} - The provided PIN, or NULL for none
3717
3718\end{description}\end{quote}
3719
3720\begin{sphinxadmonition}{note}{Note:}
3721New in 1.12
3722\end{sphinxadmonition}
3723
3724
3725\subsubsection{krb5\_responder\_pkinit\_challenge\_free -  Free the value returned by krb5\_responder\_pkinit\_get\_challenge() .}
3726\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)}
3727
3728\begin{fulllineitems}
3729\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}}{}
3730\end{fulllineitems}
3731
3732\begin{quote}\begin{description}
3733\item[{param}] \leavevmode
3734\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
3735
3736\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rctx} - Responder context
3737
3738\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{chl} - The challenge to free
3739
3740\end{description}\end{quote}
3741
3742\begin{sphinxadmonition}{note}{Note:}
3743New in 1.12
3744\end{sphinxadmonition}
3745
3746
3747\subsubsection{krb5\_set\_default\_realm -  Override the default realm for the specified context.}
3748\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)}
3749
3750\begin{fulllineitems}
3751\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}}{}
3752\end{fulllineitems}
3753
3754\begin{quote}\begin{description}
3755\item[{param}] \leavevmode
3756\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3757
3758\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{lrealm} - Realm name for the default realm
3759
3760\end{description}\end{quote}
3761\begin{quote}\begin{description}
3762\item[{retval}] \leavevmode\begin{itemize}
3763\item {}
37640   Success
3765
3766\end{itemize}
3767
3768\item[{return}] \leavevmode\begin{itemize}
3769\item {}
3770Kerberos error codes
3771
3772\end{itemize}
3773
3774\end{description}\end{quote}
3775
3776If \sphinxstyleemphasis{lrealm} is NULL, clear the default realm setting.
3777
3778
3779\subsubsection{krb5\_set\_password -  Set a password for a principal using specified credentials.}
3780\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)}
3781
3782\begin{fulllineitems}
3783\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}}{}
3784\end{fulllineitems}
3785
3786\begin{quote}\begin{description}
3787\item[{param}] \leavevmode
3788\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3789
3790\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Credentials for kadmin/changepw service
3791
3792\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{newpw} - New password
3793
3794\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{change\_password\_for} - Change the password for this principal
3795
3796\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code} - Numeric error code from server
3797
3798\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code\_string} - String equivalent to \sphinxstyleemphasis{result\_code}
3799
3800\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_string} - Data returned from the remote system
3801
3802\end{description}\end{quote}
3803\begin{quote}\begin{description}
3804\item[{retval}] \leavevmode\begin{itemize}
3805\item {}
38060   Success and result\_code is set to KRB5\_KPASSWD\_SUCCESS .
3807
3808\end{itemize}
3809
3810\item[{return}] \leavevmode\begin{itemize}
3811\item {}
3812Kerberos error codes.
3813
3814\end{itemize}
3815
3816\end{description}\end{quote}
3817
3818This 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.
3819
3820The error code and strings are returned in \sphinxstyleemphasis{result\_code} , \sphinxstyleemphasis{result\_code\_string} and \sphinxstyleemphasis{result\_string} .
3821
3822\begin{sphinxadmonition}{note}{Note:}
3823If \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} .
3824\end{sphinxadmonition}
3825
3826
3827\subsubsection{krb5\_set\_password\_using\_ccache -  Set a password for a principal using cached credentials.}
3828\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)}
3829
3830\begin{fulllineitems}
3831\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}}{}
3832\end{fulllineitems}
3833
3834\begin{quote}\begin{description}
3835\item[{param}] \leavevmode
3836\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3837
3838\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache
3839
3840\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{newpw} - New password
3841
3842\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{change\_password\_for} - Change the password for this principal
3843
3844\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code} - Numeric error code from server
3845
3846\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_code\_string} - String equivalent to \sphinxstyleemphasis{result\_code}
3847
3848\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{result\_string} - Data returned from the remote system
3849
3850\end{description}\end{quote}
3851\begin{quote}\begin{description}
3852\item[{retval}] \leavevmode\begin{itemize}
3853\item {}
38540   Success
3855
3856\end{itemize}
3857
3858\item[{return}] \leavevmode\begin{itemize}
3859\item {}
3860Kerberos error codes
3861
3862\end{itemize}
3863
3864\end{description}\end{quote}
3865
3866This 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.
3867
3868The error code and strings are returned in \sphinxstyleemphasis{result\_code} , \sphinxstyleemphasis{result\_code\_string} and \sphinxstyleemphasis{result\_string} .
3869
3870\begin{sphinxadmonition}{note}{Note:}
3871If \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.
3872\end{sphinxadmonition}
3873
3874
3875\subsubsection{krb5\_set\_principal\_realm -  Set the realm field of a principal.}
3876\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)}
3877
3878\begin{fulllineitems}
3879\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}}{}
3880\end{fulllineitems}
3881
3882\begin{quote}\begin{description}
3883\item[{param}] \leavevmode
3884\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3885
3886\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal name
3887
3888\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm name
3889
3890\end{description}\end{quote}
3891\begin{quote}\begin{description}
3892\item[{retval}] \leavevmode\begin{itemize}
3893\item {}
38940   Success
3895
3896\end{itemize}
3897
3898\item[{return}] \leavevmode\begin{itemize}
3899\item {}
3900Kerberos error codes
3901
3902\end{itemize}
3903
3904\end{description}\end{quote}
3905
3906Set the realm name part of \sphinxstyleemphasis{principal} to \sphinxstyleemphasis{realm} , overwriting the previous realm.
3907
3908
3909\subsubsection{krb5\_set\_trace\_callback -  Specify a callback function for trace events.}
3910\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)}
3911
3912\begin{fulllineitems}
3913\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}}{}
3914\end{fulllineitems}
3915
3916\begin{quote}\begin{description}
3917\item[{param}] \leavevmode
3918\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3919
3920\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fn} - Callback function
3921
3922\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cb\_data} - Callback data
3923
3924\end{description}\end{quote}
3925\begin{quote}\begin{description}
3926\item[{return}] \leavevmode\begin{itemize}
3927\item {}
3928Returns KRB5\_TRACE\_NOSUPP if tracing is not supported in the library (unless fn is NULL).
3929
3930\end{itemize}
3931
3932\end{description}\end{quote}
3933
3934Specify 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} .
3935
3936\begin{sphinxadmonition}{note}{Note:}
3937This function overrides the information passed through the \sphinxstyleemphasis{KRB5\_TRACE} environment variable.
3938\end{sphinxadmonition}
3939
3940\begin{sphinxadmonition}{note}{Note:}
3941New in 1.9
3942\end{sphinxadmonition}
3943
3944
3945\subsubsection{krb5\_set\_trace\_filename -  Specify a file name for directing trace events.}
3946\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)}
3947
3948\begin{fulllineitems}
3949\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}}{}
3950\end{fulllineitems}
3951
3952\begin{quote}\begin{description}
3953\item[{param}] \leavevmode
3954\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3955
3956\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{filename} - File name
3957
3958\end{description}\end{quote}
3959\begin{quote}\begin{description}
3960\item[{retval}] \leavevmode\begin{itemize}
3961\item {}
3962KRB5\_TRACE\_NOSUPP   Tracing is not supported in the library.
3963
3964\end{itemize}
3965
3966\end{description}\end{quote}
3967
3968Open \sphinxstyleemphasis{filename} for appending (creating it, if necessary) and set up a callback to write trace events to it.
3969
3970\begin{sphinxadmonition}{note}{Note:}
3971This function overrides the information passed through the \sphinxstyleemphasis{KRB5\_TRACE} environment variable.
3972\end{sphinxadmonition}
3973
3974\begin{sphinxadmonition}{note}{Note:}
3975New in 1.9
3976\end{sphinxadmonition}
3977
3978
3979\subsubsection{krb5\_sname\_match -  Test whether a principal matches a matching principal.}
3980\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)}
3981
3982\begin{fulllineitems}
3983\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}}{}
3984\end{fulllineitems}
3985
3986\begin{quote}\begin{description}
3987\item[{param}] \leavevmode
3988\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
3989
3990\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{matching} - Matching principal
3991
3992\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ} - Principal to test
3993
3994\end{description}\end{quote}
3995\begin{quote}\begin{description}
3996\item[{return}] \leavevmode\begin{itemize}
3997\item {}
3998TRUE if princ matches matching , FALSE otherwise.
3999
4000\end{itemize}
4001
4002\end{description}\end{quote}
4003
4004If \sphinxstyleemphasis{matching} is NULL, return TRUE. If \sphinxstyleemphasis{matching} is not a matching principal, return the value of krb5\_principal\_compare(context, matching, princ).
4005
4006\begin{sphinxadmonition}{note}{Note:}
4007A 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.
4008\end{sphinxadmonition}
4009
4010
4011\subsubsection{krb5\_sname\_to\_principal -  Generate a full principal name from a service name.}
4012\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)}
4013
4014\begin{fulllineitems}
4015\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}}{}
4016\end{fulllineitems}
4017
4018\begin{quote}\begin{description}
4019\item[{param}] \leavevmode
4020\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4021
4022\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{hostname} - Host name, or NULL to use local host
4023
4024\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{sname} - Service name, or NULL to use \sphinxstylestrong{“host”}
4025
4026\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - Principal type
4027
4028\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ret\_princ} - Generated principal
4029
4030\end{description}\end{quote}
4031\begin{quote}\begin{description}
4032\item[{retval}] \leavevmode\begin{itemize}
4033\item {}
40340   Success
4035
4036\end{itemize}
4037
4038\item[{return}] \leavevmode\begin{itemize}
4039\item {}
4040Kerberos error codes
4041
4042\end{itemize}
4043
4044\end{description}\end{quote}
4045
4046This 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.
4047
4048The \sphinxstyleemphasis{type} can be one of the following:
4049\begin{quote}
4050\begin{itemize}
4051\item {}
4052{\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.
4053
4054\item {}
4055{\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.
4056
4057\end{itemize}
4058
4059Use krb5\_free\_principal to free \sphinxstyleemphasis{ret\_princ} when it is no longer needed.
4060\end{quote}
4061
4062
4063\subsubsection{krb5\_unparse\_name -  Convert a krb5\_principal structure to a string representation.}
4064\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)}
4065
4066\begin{fulllineitems}
4067\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}}{}
4068\end{fulllineitems}
4069
4070\begin{quote}\begin{description}
4071\item[{param}] \leavevmode
4072\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4073
4074\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal
4075
4076\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} - String representation of principal name
4077
4078\end{description}\end{quote}
4079\begin{quote}\begin{description}
4080\item[{retval}] \leavevmode\begin{itemize}
4081\item {}
40820   Success
4083
4084\end{itemize}
4085
4086\item[{return}] \leavevmode\begin{itemize}
4087\item {}
4088Kerberos error codes
4089
4090\end{itemize}
4091
4092\end{description}\end{quote}
4093
4094The 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()}}}} .
4095
4096Use {\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.
4097
4098
4099\subsubsection{krb5\_unparse\_name\_ext -  Convert krb5\_principal structure to string and length.}
4100\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)}
4101
4102\begin{fulllineitems}
4103\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}}{}
4104\end{fulllineitems}
4105
4106\begin{quote}\begin{description}
4107\item[{param}] \leavevmode
4108\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4109
4110\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal
4111
4112\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{name} - String representation of principal name
4113
4114\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{size} - Size of unparsed name
4115
4116\end{description}\end{quote}
4117\begin{quote}\begin{description}
4118\item[{retval}] \leavevmode\begin{itemize}
4119\item {}
41200   Success
4121
4122\end{itemize}
4123
4124\item[{return}] \leavevmode\begin{itemize}
4125\item {}
4126Kerberos error codes. On failure name is set to NULL
4127
4128\end{itemize}
4129
4130\end{description}\end{quote}
4131
4132This 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} .
4133
4134If 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()}}}} .
4135
4136
4137\subsubsection{krb5\_unparse\_name\_flags -  Convert krb5\_principal structure to a string with flags.}
4138\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)}
4139
4140\begin{fulllineitems}
4141\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}}{}
4142\end{fulllineitems}
4143
4144\begin{quote}\begin{description}
4145\item[{param}] \leavevmode
4146\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4147
4148\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal
4149
4150\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flags
4151
4152\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} - String representation of principal name
4153
4154\end{description}\end{quote}
4155\begin{quote}\begin{description}
4156\item[{retval}] \leavevmode\begin{itemize}
4157\item {}
41580   Success
4159
4160\end{itemize}
4161
4162\item[{return}] \leavevmode\begin{itemize}
4163\item {}
4164Kerberos error codes. On failure name is set to NULL
4165
4166\end{itemize}
4167
4168\end{description}\end{quote}
4169
4170Similar 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.
4171
4172The following flags are valid:
4173\begin{quote}
4174\begin{itemize}
4175\item {}
4176{\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
4177
4178\item {}
4179{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_NO_REALM:KRB5_PRINCIPAL_UNPARSE_NO_REALM}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_UNPARSE\_NO\_REALM}}}} - omit realm
4180
4181\item {}
4182{\hyperref[\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY:KRB5_PRINCIPAL_UNPARSE_DISPLAY}]{\sphinxcrossref{\sphinxcode{KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY}}}} - do not quote special characters
4183
4184\end{itemize}
4185
4186Use {\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.
4187\end{quote}
4188
4189
4190\subsubsection{krb5\_unparse\_name\_flags\_ext -  Convert krb5\_principal structure to string format with flags.}
4191\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)}
4192
4193\begin{fulllineitems}
4194\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}}{}
4195\end{fulllineitems}
4196
4197\begin{quote}\begin{description}
4198\item[{param}] \leavevmode
4199\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4200
4201\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal
4202
4203\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flags
4204
4205\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} - Single string format of principal name
4206
4207\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{size} - Size of unparsed name buffer
4208
4209\end{description}\end{quote}
4210\begin{quote}\begin{description}
4211\item[{retval}] \leavevmode\begin{itemize}
4212\item {}
42130   Success
4214
4215\end{itemize}
4216
4217\item[{return}] \leavevmode\begin{itemize}
4218\item {}
4219Kerberos error codes. On failure name is set to NULL
4220
4221\end{itemize}
4222
4223\end{description}\end{quote}
4224
4225
4226\subsubsection{krb5\_us\_timeofday -  Retrieve the system time of day, in sec and ms, since the epoch.}
4227\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)}
4228
4229\begin{fulllineitems}
4230\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}}{}
4231\end{fulllineitems}
4232
4233\begin{quote}\begin{description}
4234\item[{param}] \leavevmode
4235\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4236
4237\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{seconds} - System timeofday, seconds portion
4238
4239\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{microseconds} - System timeofday, microseconds portion
4240
4241\end{description}\end{quote}
4242\begin{quote}\begin{description}
4243\item[{retval}] \leavevmode\begin{itemize}
4244\item {}
42450   Success
4246
4247\end{itemize}
4248
4249\item[{return}] \leavevmode\begin{itemize}
4250\item {}
4251Kerberos error codes
4252
4253\end{itemize}
4254
4255\end{description}\end{quote}
4256
4257This function retrieves the system time of day with the context specific time offset adjustment.
4258
4259
4260\subsubsection{krb5\_verify\_authdata\_kdc\_issued -  Unwrap and verify AD-KDCIssued authorization data.}
4261\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)}
4262
4263\begin{fulllineitems}
4264\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}}{}
4265\end{fulllineitems}
4266
4267\begin{quote}\begin{description}
4268\item[{param}] \leavevmode
4269\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4270
4271\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Session key
4272
4273\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ad\_kdcissued} - AD-KDCIssued authorization data to be unwrapped
4274
4275\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{issuer} - Name of issuing principal (or NULL)
4276
4277\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{authdata} - Unwrapped list of authorization data
4278
4279\end{description}\end{quote}
4280
4281This 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} .
4282
4283
4284\subsection{Rarely used public interfaces}
4285\label{\detokenize{appdev/refs/api/index:rarely-used-public-interfaces}}
4286
4287\subsubsection{krb5\_425\_conv\_principal -  Convert a Kerberos V4 principal to a Kerberos V5 principal.}
4288\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)}
4289
4290\begin{fulllineitems}
4291\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}}{}
4292\end{fulllineitems}
4293
4294\begin{quote}\begin{description}
4295\item[{param}] \leavevmode
4296\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4297
4298\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - V4 name
4299
4300\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{instance} - V4 instance
4301
4302\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm
4303
4304\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ} - V5 principal
4305
4306\end{description}\end{quote}
4307\begin{quote}\begin{description}
4308\item[{retval}] \leavevmode\begin{itemize}
4309\item {}
43100   Success; otherwise - Kerberos error codes
4311
4312\end{itemize}
4313
4314\end{description}\end{quote}
4315
4316This function builds a \sphinxstyleemphasis{princ} from V4 specification based on given input \sphinxstyleemphasis{name.instance@realm} .
4317
4318Use {\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.
4319
4320
4321\subsubsection{krb5\_524\_conv\_principal -  Convert a Kerberos V5 principal to a Kerberos V4 principal.}
4322\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)}
4323
4324\begin{fulllineitems}
4325\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}}{}
4326\end{fulllineitems}
4327
4328\begin{quote}\begin{description}
4329\item[{param}] \leavevmode
4330\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4331
4332\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{princ} - V5 Principal
4333
4334\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{name} - V4 principal’s name to be filled in
4335
4336\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{inst} - V4 principal’s instance name to be filled in
4337
4338\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realm} - Principal’s realm name to be filled in
4339
4340\end{description}\end{quote}
4341\begin{quote}\begin{description}
4342\item[{retval}] \leavevmode\begin{itemize}
4343\item {}
43440   Success
4345
4346\item {}
4347KRB5\_INVALID\_PRINCIPAL   Invalid principal name
4348
4349\item {}
4350KRB5\_CONFIG\_CANTOPEN   Can’t open or find Kerberos configuration file
4351
4352\end{itemize}
4353
4354\item[{return}] \leavevmode\begin{itemize}
4355\item {}
4356Kerberos error codes
4357
4358\end{itemize}
4359
4360\end{description}\end{quote}
4361
4362This function separates a V5 principal \sphinxstyleemphasis{princ} into \sphinxstyleemphasis{name} , \sphinxstyleemphasis{instance} , and \sphinxstyleemphasis{realm} .
4363
4364
4365\subsubsection{krb5\_address\_compare -  Compare two Kerberos addresses.}
4366\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)}
4367
4368\begin{fulllineitems}
4369\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}}{}
4370\end{fulllineitems}
4371
4372\begin{quote}\begin{description}
4373\item[{param}] \leavevmode
4374\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4375
4376\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr1} - First address to be compared
4377
4378\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr2} - Second address to be compared
4379
4380\end{description}\end{quote}
4381\begin{quote}\begin{description}
4382\item[{return}] \leavevmode\begin{itemize}
4383\item {}
4384TRUE if the addresses are the same, FALSE otherwise
4385
4386\end{itemize}
4387
4388\end{description}\end{quote}
4389
4390
4391\subsubsection{krb5\_address\_order -  Return an ordering of the specified addresses.}
4392\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)}
4393
4394\begin{fulllineitems}
4395\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}}{}
4396\end{fulllineitems}
4397
4398\begin{quote}\begin{description}
4399\item[{param}] \leavevmode
4400\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4401
4402\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr1} - First address
4403
4404\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr2} - Second address
4405
4406\end{description}\end{quote}
4407\begin{quote}\begin{description}
4408\item[{retval}] \leavevmode\begin{itemize}
4409\item {}
44100   The two addresses are the same
4411
4412\item {}
4413\end{itemize}
4414
4415\end{description}\end{quote}
4416
4417
4418\subsubsection{krb5\_address\_search -  Search a list of addresses for a specified address.}
4419\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)}
4420
4421\begin{fulllineitems}
4422\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}}{}
4423\end{fulllineitems}
4424
4425\begin{quote}\begin{description}
4426\item[{param}] \leavevmode
4427\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4428
4429\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addr} - Address to search for
4430
4431\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{addrlist} - Address list to be searched (or NULL)
4432
4433\end{description}\end{quote}
4434\begin{quote}\begin{description}
4435\item[{return}] \leavevmode\begin{itemize}
4436\item {}
4437TRUE if addr is listed in addrlist , or addrlist is NULL; FALSE otherwise
4438
4439\end{itemize}
4440
4441\end{description}\end{quote}
4442
4443\begin{sphinxadmonition}{note}{Note:}
4444If \sphinxstyleemphasis{addrlist} contains only a NetBIOS addresses, it will be treated as a null list.
4445\end{sphinxadmonition}
4446
4447
4448\subsubsection{krb5\_allow\_weak\_crypto -  Allow the application to override the profile’s allow\_weak\_crypto setting.}
4449\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)}
4450
4451\begin{fulllineitems}
4452\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}}{}
4453\end{fulllineitems}
4454
4455\begin{quote}\begin{description}
4456\item[{param}] \leavevmode
4457\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4458
4459\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enable} - Boolean flag
4460
4461\end{description}\end{quote}
4462\begin{quote}\begin{description}
4463\item[{retval}] \leavevmode\begin{itemize}
4464\item {}
44650   (always)
4466
4467\end{itemize}
4468
4469\end{description}\end{quote}
4470
4471This function allows an application to override the allow\_weak\_crypto setting. It is primarily for use by aklog.
4472
4473
4474\subsubsection{krb5\_aname\_to\_localname -  Convert a principal name to a local name.}
4475\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)}
4476
4477\begin{fulllineitems}
4478\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}}{}
4479\end{fulllineitems}
4480
4481\begin{quote}\begin{description}
4482\item[{param}] \leavevmode
4483\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4484
4485\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{aname} - Principal name
4486
4487\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{lnsize\_in} - Space available in \sphinxstyleemphasis{lname}
4488
4489\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{lname} - Local name buffer to be filled in
4490
4491\end{description}\end{quote}
4492\begin{quote}\begin{description}
4493\item[{retval}] \leavevmode\begin{itemize}
4494\item {}
44950   Success
4496
4497\item {}
4498System   errors
4499
4500\end{itemize}
4501
4502\item[{return}] \leavevmode\begin{itemize}
4503\item {}
4504Kerberos error codes
4505
4506\end{itemize}
4507
4508\end{description}\end{quote}
4509
4510If \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.
4511
4512Local names, rather than principal names, can be used by programs that translate to an environment-specific name (for example, a user account name).
4513
4514
4515\subsubsection{krb5\_anonymous\_principal -  Build an anonymous principal.}
4516\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)}
4517
4518\begin{fulllineitems}
4519\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}}{}
4520\end{fulllineitems}
4521
4522\begin{quote}\begin{description}
4523\item[{param}] \leavevmode
4524\sphinxstylestrong{None}
4525
4526\end{description}\end{quote}
4527
4528This function returns constant storage that must not be freed.
4529
4530
4531\sphinxstrong{See also:}
4532
4533
4534{\hyperref[\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_PRINCSTR:KRB5_ANONYMOUS_PRINCSTR}]{\sphinxcrossref{\sphinxcode{KRB5\_ANONYMOUS\_PRINCSTR}}}}
4535
4536
4537
4538
4539\subsubsection{krb5\_anonymous\_realm -  Return an anonymous realm data.}
4540\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)}
4541
4542\begin{fulllineitems}
4543\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}}{}
4544\end{fulllineitems}
4545
4546\begin{quote}\begin{description}
4547\item[{param}] \leavevmode
4548\sphinxstylestrong{None}
4549
4550\end{description}\end{quote}
4551
4552This function returns constant storage that must not be freed.
4553
4554
4555\sphinxstrong{See also:}
4556
4557
4558{\hyperref[\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR:KRB5_ANONYMOUS_REALMSTR}]{\sphinxcrossref{\sphinxcode{KRB5\_ANONYMOUS\_REALMSTR}}}}
4559
4560
4561
4562
4563\subsubsection{krb5\_appdefault\_boolean -  Retrieve a boolean value from the appdefaults section of krb5.conf.}
4564\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)}
4565
4566\begin{fulllineitems}
4567\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}}{}
4568\end{fulllineitems}
4569
4570\begin{quote}\begin{description}
4571\item[{param}] \leavevmode
4572\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4573
4574\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{appname} - Application name
4575
4576\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm name
4577
4578\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{option} - Option to be checked
4579
4580\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{default\_value} - Default value to return if no match is found
4581
4582\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ret\_value} - Boolean value of \sphinxstyleemphasis{option}
4583
4584\end{description}\end{quote}
4585
4586This function gets the application defaults for \sphinxstyleemphasis{option} based on the given \sphinxstyleemphasis{appname} and/or \sphinxstyleemphasis{realm} .
4587
4588
4589\sphinxstrong{See also:}
4590
4591
4592{\hyperref[\detokenize{appdev/refs/api/krb5_appdefault_string:c.krb5_appdefault_string}]{\sphinxcrossref{\sphinxcode{krb5\_appdefault\_string()}}}}
4593
4594
4595
4596
4597\subsubsection{krb5\_appdefault\_string -  Retrieve a string value from the appdefaults section of krb5.conf.}
4598\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)}
4599
4600\begin{fulllineitems}
4601\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}}{}
4602\end{fulllineitems}
4603
4604\begin{quote}\begin{description}
4605\item[{param}] \leavevmode
4606\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4607
4608\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{appname} - Application name
4609
4610\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realm} - Realm name
4611
4612\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{option} - Option to be checked
4613
4614\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{default\_value} - Default value to return if no match is found
4615
4616\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ret\_value} - String value of \sphinxstyleemphasis{option}
4617
4618\end{description}\end{quote}
4619
4620This function gets the application defaults for \sphinxstyleemphasis{option} based on the given \sphinxstyleemphasis{appname} and/or \sphinxstyleemphasis{realm} .
4621
4622
4623\sphinxstrong{See also:}
4624
4625
4626{\hyperref[\detokenize{appdev/refs/api/krb5_appdefault_boolean:c.krb5_appdefault_boolean}]{\sphinxcrossref{\sphinxcode{krb5\_appdefault\_boolean()}}}}
4627
4628
4629
4630
4631\subsubsection{krb5\_auth\_con\_free -  Free a krb5\_auth\_context structure.}
4632\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)}
4633
4634\begin{fulllineitems}
4635\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}}{}
4636\end{fulllineitems}
4637
4638\begin{quote}\begin{description}
4639\item[{param}] \leavevmode
4640\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4641
4642\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context to be freed
4643
4644\end{description}\end{quote}
4645\begin{quote}\begin{description}
4646\item[{retval}] \leavevmode\begin{itemize}
4647\item {}
46480   (always)
4649
4650\end{itemize}
4651
4652\end{description}\end{quote}
4653
4654This 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()}}}} .
4655
4656
4657\subsubsection{krb5\_auth\_con\_genaddrs -  Generate auth context addresses from a connected socket.}
4658\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)}
4659
4660\begin{fulllineitems}
4661\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}}{}
4662\end{fulllineitems}
4663
4664\begin{quote}\begin{description}
4665\item[{param}] \leavevmode
4666\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4667
4668\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
4669
4670\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{infd} - Connected socket descriptor
4671
4672\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flags
4673
4674\end{description}\end{quote}
4675\begin{quote}\begin{description}
4676\item[{retval}] \leavevmode\begin{itemize}
4677\item {}
46780   Success; otherwise - Kerberos error codes
4679
4680\end{itemize}
4681
4682\end{description}\end{quote}
4683
4684This 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:
4685\begin{itemize}
4686\item {}
4687{\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.
4688
4689\item {}
4690{\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.
4691
4692\item {}
4693{\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.
4694
4695\item {}
4696{\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.
4697
4698\end{itemize}
4699
4700
4701\subsubsection{krb5\_auth\_con\_get\_checksum\_func -  Get the checksum callback from an auth context.}
4702\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)}
4703
4704\begin{fulllineitems}
4705\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}}{}
4706\end{fulllineitems}
4707
4708\begin{quote}\begin{description}
4709\item[{param}] \leavevmode
4710\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4711
4712\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
4713
4714\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{func} - Checksum callback
4715
4716\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} - Callback argument
4717
4718\end{description}\end{quote}
4719\begin{quote}\begin{description}
4720\item[{retval}] \leavevmode\begin{itemize}
4721\item {}
47220   (always)
4723
4724\end{itemize}
4725
4726\end{description}\end{quote}
4727
4728
4729\subsubsection{krb5\_auth\_con\_getaddrs -  Retrieve address fields from an auth context.}
4730\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)}
4731
4732\begin{fulllineitems}
4733\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}}{}
4734\end{fulllineitems}
4735
4736\begin{quote}\begin{description}
4737\item[{param}] \leavevmode
4738\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4739
4740\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
4741
4742\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{local\_addr} - Local address (NULL if not needed)
4743
4744\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{remote\_addr} - Remote address (NULL if not needed)
4745
4746\end{description}\end{quote}
4747\begin{quote}\begin{description}
4748\item[{retval}] \leavevmode\begin{itemize}
4749\item {}
47500   Success; otherwise - Kerberos error codes
4751
4752\end{itemize}
4753
4754\end{description}\end{quote}
4755
4756
4757\subsubsection{krb5\_auth\_con\_getauthenticator -  Retrieve the authenticator from an auth context.}
4758\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)}
4759
4760\begin{fulllineitems}
4761\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}}{}
4762\end{fulllineitems}
4763
4764\begin{quote}\begin{description}
4765\item[{param}] \leavevmode
4766\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4767
4768\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
4769
4770\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{authenticator} - Authenticator
4771
4772\end{description}\end{quote}
4773\begin{quote}\begin{description}
4774\item[{retval}] \leavevmode\begin{itemize}
4775\item {}
47760   Success. Otherwise - Kerberos error codes
4777
4778\end{itemize}
4779
4780\end{description}\end{quote}
4781
4782Use {\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.
4783
4784
4785\subsubsection{krb5\_auth\_con\_getflags -  Retrieve flags from a krb5\_auth\_context structure.}
4786\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)}
4787
4788\begin{fulllineitems}
4789\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}}{}
4790\end{fulllineitems}
4791
4792\begin{quote}\begin{description}
4793\item[{param}] \leavevmode
4794\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4795
4796\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
4797
4798\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{flags} - Flags bit mask
4799
4800\end{description}\end{quote}
4801\begin{quote}\begin{description}
4802\item[{retval}] \leavevmode\begin{itemize}
4803\item {}
48040   (always)
4805
4806\end{itemize}
4807
4808\end{description}\end{quote}
4809
4810Valid values for \sphinxstyleemphasis{flags} are:
4811\begin{itemize}
4812\item {}
4813{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} Use timestamps
4814
4815\item {}
4816{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} Save timestamps
4817
4818\item {}
4819{\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
4820
4821\item {}
4822{\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
4823
4824\end{itemize}
4825
4826
4827\subsubsection{krb5\_auth\_con\_getkey -  Retrieve the session key from an auth context as a keyblock.}
4828\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)}
4829
4830\begin{fulllineitems}
4831\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}}{}
4832\end{fulllineitems}
4833
4834\begin{quote}\begin{description}
4835\item[{param}] \leavevmode
4836\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4837
4838\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
4839
4840\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keyblock} - Session key
4841
4842\end{description}\end{quote}
4843\begin{quote}\begin{description}
4844\item[{retval}] \leavevmode\begin{itemize}
4845\item {}
48460   Success. Otherwise - Kerberos error codes
4847
4848\end{itemize}
4849
4850\end{description}\end{quote}
4851
4852This 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
4853
4854
4855\subsubsection{krb5\_auth\_con\_getkey\_k -  Retrieve the session key from an auth context.}
4856\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)}
4857
4858\begin{fulllineitems}
4859\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}}{}
4860\end{fulllineitems}
4861
4862\begin{quote}\begin{description}
4863\item[{param}] \leavevmode
4864\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4865
4866\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
4867
4868\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Session key
4869
4870\end{description}\end{quote}
4871\begin{quote}\begin{description}
4872\item[{retval}] \leavevmode\begin{itemize}
4873\item {}
48740   (always)
4875
4876\end{itemize}
4877
4878\end{description}\end{quote}
4879
4880This 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.
4881
4882
4883\subsubsection{krb5\_auth\_con\_getlocalseqnumber -  Retrieve the local sequence number from an auth context.}
4884\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)}
4885
4886\begin{fulllineitems}
4887\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}}{}
4888\end{fulllineitems}
4889
4890\begin{quote}\begin{description}
4891\item[{param}] \leavevmode
4892\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4893
4894\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
4895
4896\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{seqnumber} - Local sequence number
4897
4898\end{description}\end{quote}
4899\begin{quote}\begin{description}
4900\item[{retval}] \leavevmode\begin{itemize}
4901\item {}
49020   Success; otherwise - Kerberos error codes
4903
4904\end{itemize}
4905
4906\end{description}\end{quote}
4907
4908Retrieve 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.
4909
4910
4911\subsubsection{krb5\_auth\_con\_getrcache -  Retrieve the replay cache from an auth context.}
4912\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)}
4913
4914\begin{fulllineitems}
4915\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}}{}
4916\end{fulllineitems}
4917
4918\begin{quote}\begin{description}
4919\item[{param}] \leavevmode
4920\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
4921
4922\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
4923
4924\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rcache} - Replay cache handle
4925
4926\end{description}\end{quote}
4927\begin{quote}\begin{description}
4928\item[{retval}] \leavevmode\begin{itemize}
4929\item {}
49300   (always)
4931
4932\end{itemize}
4933
4934\end{description}\end{quote}
4935
4936This function fetches the replay cache from \sphinxstyleemphasis{auth\_context} . The caller should not close \sphinxstyleemphasis{rcache} .
4937
4938
4939\subsubsection{krb5\_auth\_con\_getrecvsubkey -  Retrieve the receiving subkey from an auth context as a keyblock.}
4940\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)}
4941
4942\begin{fulllineitems}
4943\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}}{}
4944\end{fulllineitems}
4945
4946\begin{quote}\begin{description}
4947\item[{param}] \leavevmode
4948\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
4949
4950\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context
4951
4952\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keyblock} - Receiving subkey
4953
4954\end{description}\end{quote}
4955\begin{quote}\begin{description}
4956\item[{retval}] \leavevmode\begin{itemize}
4957\item {}
49580   Success; otherwise - Kerberos error codes
4959
4960\end{itemize}
4961
4962\end{description}\end{quote}
4963
4964This 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.
4965
4966
4967\subsubsection{krb5\_auth\_con\_getrecvsubkey\_k -  Retrieve the receiving subkey from an auth context as a keyblock.}
4968\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)}
4969
4970\begin{fulllineitems}
4971\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}}{}
4972\end{fulllineitems}
4973
4974\begin{quote}\begin{description}
4975\item[{param}] \leavevmode
4976\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
4977
4978\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context
4979
4980\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Receiving subkey
4981
4982\end{description}\end{quote}
4983\begin{quote}\begin{description}
4984\item[{retval}] \leavevmode\begin{itemize}
4985\item {}
49860   Success; otherwise - Kerberos error codes
4987
4988\end{itemize}
4989
4990\end{description}\end{quote}
4991
4992This 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.
4993
4994
4995\subsubsection{krb5\_auth\_con\_getremoteseqnumber -  Retrieve the remote sequence number from an auth context.}
4996\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)}
4997
4998\begin{fulllineitems}
4999\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}}{}
5000\end{fulllineitems}
5001
5002\begin{quote}\begin{description}
5003\item[{param}] \leavevmode
5004\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5005
5006\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
5007
5008\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{seqnumber} - Remote sequence number
5009
5010\end{description}\end{quote}
5011\begin{quote}\begin{description}
5012\item[{retval}] \leavevmode\begin{itemize}
5013\item {}
50140   Success; otherwise - Kerberos error codes
5015
5016\end{itemize}
5017
5018\end{description}\end{quote}
5019
5020Retrieve 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.
5021
5022
5023\subsubsection{krb5\_auth\_con\_getsendsubkey -  Retrieve the send subkey from an auth context as a keyblock.}
5024\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)}
5025
5026\begin{fulllineitems}
5027\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}}{}
5028\end{fulllineitems}
5029
5030\begin{quote}\begin{description}
5031\item[{param}] \leavevmode
5032\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
5033
5034\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context
5035
5036\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keyblock} - Send subkey
5037
5038\end{description}\end{quote}
5039\begin{quote}\begin{description}
5040\item[{retval}] \leavevmode\begin{itemize}
5041\item {}
50420   Success; otherwise - Kerberos error codes
5043
5044\end{itemize}
5045
5046\end{description}\end{quote}
5047
5048This 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.
5049
5050
5051\subsubsection{krb5\_auth\_con\_getsendsubkey\_k -  Retrieve the send subkey from an auth context.}
5052\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)}
5053
5054\begin{fulllineitems}
5055\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}}{}
5056\end{fulllineitems}
5057
5058\begin{quote}\begin{description}
5059\item[{param}] \leavevmode
5060\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
5061
5062\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context
5063
5064\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Send subkey
5065
5066\end{description}\end{quote}
5067\begin{quote}\begin{description}
5068\item[{retval}] \leavevmode\begin{itemize}
5069\item {}
50700   Success; otherwise - Kerberos error codes
5071
5072\end{itemize}
5073
5074\end{description}\end{quote}
5075
5076This 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.
5077
5078
5079\subsubsection{krb5\_auth\_con\_init -  Create and initialize an authentication context.}
5080\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)}
5081
5082\begin{fulllineitems}
5083\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}}{}
5084\end{fulllineitems}
5085
5086\begin{quote}\begin{description}
5087\item[{param}] \leavevmode
5088\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5089
5090\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{auth\_context} - Authentication context
5091
5092\end{description}\end{quote}
5093\begin{quote}\begin{description}
5094\item[{retval}] \leavevmode\begin{itemize}
5095\item {}
50960   Success; otherwise - Kerberos error codes
5097
5098\end{itemize}
5099
5100\end{description}\end{quote}
5101
5102This function creates an authentication context to hold configuration and state relevant to krb5 functions for authenticating principals and protecting messages once authentication has occurred.
5103
5104By 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.
5105
5106The 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.
5107
5108
5109\subsubsection{krb5\_auth\_con\_set\_checksum\_func -  Set a checksum callback in an auth context.}
5110\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)}
5111
5112\begin{fulllineitems}
5113\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}}{}
5114\end{fulllineitems}
5115
5116\begin{quote}\begin{description}
5117\item[{param}] \leavevmode
5118\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5119
5120\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
5121
5122\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{func} - Checksum callback
5123
5124\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Callback argument
5125
5126\end{description}\end{quote}
5127\begin{quote}\begin{description}
5128\item[{retval}] \leavevmode\begin{itemize}
5129\item {}
51300   (always)
5131
5132\end{itemize}
5133
5134\end{description}\end{quote}
5135
5136Set 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} .
5137
5138
5139\subsubsection{krb5\_auth\_con\_set\_req\_cksumtype -  Set checksum type in an an auth context.}
5140\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)}
5141
5142\begin{fulllineitems}
5143\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}}{}
5144\end{fulllineitems}
5145
5146\begin{quote}\begin{description}
5147\item[{param}] \leavevmode
5148\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5149
5150\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
5151
5152\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type
5153
5154\end{description}\end{quote}
5155\begin{quote}\begin{description}
5156\item[{retval}] \leavevmode\begin{itemize}
5157\item {}
51580   Success. Otherwise - Kerberos error codes
5159
5160\end{itemize}
5161
5162\end{description}\end{quote}
5163
5164This 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.
5165
5166
5167\subsubsection{krb5\_auth\_con\_setaddrs -  Set the local and remote addresses in an auth context.}
5168\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)}
5169
5170\begin{fulllineitems}
5171\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}}{}
5172\end{fulllineitems}
5173
5174\begin{quote}\begin{description}
5175\item[{param}] \leavevmode
5176\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5177
5178\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
5179
5180\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{local\_addr} - Local address
5181
5182\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{remote\_addr} - Remote address
5183
5184\end{description}\end{quote}
5185\begin{quote}\begin{description}
5186\item[{retval}] \leavevmode\begin{itemize}
5187\item {}
51880   Success; otherwise - Kerberos error codes
5189
5190\end{itemize}
5191
5192\end{description}\end{quote}
5193
5194This 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.
5195
5196
5197\sphinxstrong{See also:}
5198
5199
5200{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_genaddrs:c.krb5_auth_con_genaddrs}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_genaddrs()}}}}
5201
5202
5203
5204
5205\subsubsection{krb5\_auth\_con\_setflags -  Set a flags field in a krb5\_auth\_context structure.}
5206\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)}
5207
5208\begin{fulllineitems}
5209\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}}{}
5210\end{fulllineitems}
5211
5212\begin{quote}\begin{description}
5213\item[{param}] \leavevmode
5214\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5215
5216\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
5217
5218\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flags bit mask
5219
5220\end{description}\end{quote}
5221\begin{quote}\begin{description}
5222\item[{retval}] \leavevmode\begin{itemize}
5223\item {}
52240   (always)
5225
5226\end{itemize}
5227
5228\end{description}\end{quote}
5229
5230Valid values for \sphinxstyleemphasis{flags} are:
5231\begin{itemize}
5232\item {}
5233{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}}} Use timestamps
5234
5235\item {}
5236{\hyperref[\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}]{\sphinxcrossref{\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}}} Save timestamps
5237
5238\item {}
5239{\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
5240
5241\item {}
5242{\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
5243
5244\end{itemize}
5245
5246
5247\subsubsection{krb5\_auth\_con\_setports -  Set local and remote port fields in an auth context.}
5248\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)}
5249
5250\begin{fulllineitems}
5251\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}}{}
5252\end{fulllineitems}
5253
5254\begin{quote}\begin{description}
5255\item[{param}] \leavevmode
5256\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5257
5258\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
5259
5260\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{local\_port} - Local port
5261
5262\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{remote\_port} - Remote port
5263
5264\end{description}\end{quote}
5265\begin{quote}\begin{description}
5266\item[{retval}] \leavevmode\begin{itemize}
5267\item {}
52680   Success; otherwise - Kerberos error codes
5269
5270\end{itemize}
5271
5272\end{description}\end{quote}
5273
5274This 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.
5275
5276
5277\sphinxstrong{See also:}
5278
5279
5280{\hyperref[\detokenize{appdev/refs/api/krb5_auth_con_genaddrs:c.krb5_auth_con_genaddrs}]{\sphinxcrossref{\sphinxcode{krb5\_auth\_con\_genaddrs()}}}}
5281
5282
5283
5284
5285\subsubsection{krb5\_auth\_con\_setrcache -  Set the replay cache in an auth context.}
5286\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)}
5287
5288\begin{fulllineitems}
5289\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}}{}
5290\end{fulllineitems}
5291
5292\begin{quote}\begin{description}
5293\item[{param}] \leavevmode
5294\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5295
5296\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
5297
5298\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{rcache} - Replay cache haddle
5299
5300\end{description}\end{quote}
5301\begin{quote}\begin{description}
5302\item[{retval}] \leavevmode\begin{itemize}
5303\item {}
53040   Success; otherwise - Kerberos error codes
5305
5306\end{itemize}
5307
5308\end{description}\end{quote}
5309
5310This 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.
5311
5312
5313\subsubsection{krb5\_auth\_con\_setrecvsubkey -  Set the receiving subkey in an auth context with a keyblock.}
5314\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)}
5315
5316\begin{fulllineitems}
5317\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}}{}
5318\end{fulllineitems}
5319
5320\begin{quote}\begin{description}
5321\item[{param}] \leavevmode
5322\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
5323
5324\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context
5325
5326\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} - Receiving subkey
5327
5328\end{description}\end{quote}
5329\begin{quote}\begin{description}
5330\item[{retval}] \leavevmode\begin{itemize}
5331\item {}
53320   Success; otherwise - Kerberos error codes
5333
5334\end{itemize}
5335
5336\end{description}\end{quote}
5337
5338This function sets the receiving subkey in \sphinxstyleemphasis{ac} to a copy of \sphinxstyleemphasis{keyblock} .
5339
5340
5341\subsubsection{krb5\_auth\_con\_setrecvsubkey\_k -  Set the receiving subkey in an auth context.}
5342\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)}
5343
5344\begin{fulllineitems}
5345\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}}{}
5346\end{fulllineitems}
5347
5348\begin{quote}\begin{description}
5349\item[{param}] \leavevmode
5350\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
5351
5352\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context
5353
5354\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Receiving subkey
5355
5356\end{description}\end{quote}
5357\begin{quote}\begin{description}
5358\item[{retval}] \leavevmode\begin{itemize}
5359\item {}
53600   Success; otherwise - Kerberos error codes
5361
5362\end{itemize}
5363
5364\end{description}\end{quote}
5365
5366This function sets the receiving subkey in \sphinxstyleemphasis{ac} to \sphinxstyleemphasis{key} , incrementing its reference count.
5367
5368\begin{sphinxadmonition}{note}{Note:}
5369New in 1.9
5370\end{sphinxadmonition}
5371
5372
5373\subsubsection{krb5\_auth\_con\_setsendsubkey -  Set the send subkey in an auth context with a keyblock.}
5374\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)}
5375
5376\begin{fulllineitems}
5377\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}}{}
5378\end{fulllineitems}
5379
5380\begin{quote}\begin{description}
5381\item[{param}] \leavevmode
5382\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
5383
5384\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context
5385
5386\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} - Send subkey
5387
5388\end{description}\end{quote}
5389\begin{quote}\begin{description}
5390\item[{retval}] \leavevmode\begin{itemize}
5391\item {}
53920   Success. Otherwise - Kerberos error codes
5393
5394\end{itemize}
5395
5396\end{description}\end{quote}
5397
5398This function sets the send subkey in \sphinxstyleemphasis{ac} to a copy of \sphinxstyleemphasis{keyblock} .
5399
5400
5401\subsubsection{krb5\_auth\_con\_setsendsubkey\_k -  Set the send subkey in an auth context.}
5402\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)}
5403
5404\begin{fulllineitems}
5405\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}}{}
5406\end{fulllineitems}
5407
5408\begin{quote}\begin{description}
5409\item[{param}] \leavevmode
5410\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
5411
5412\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ac} - Authentication context
5413
5414\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Send subkey
5415
5416\end{description}\end{quote}
5417\begin{quote}\begin{description}
5418\item[{retval}] \leavevmode\begin{itemize}
5419\item {}
54200   Success; otherwise - Kerberos error codes
5421
5422\end{itemize}
5423
5424\end{description}\end{quote}
5425
5426This function sets the send subkey in \sphinxstyleemphasis{ac} to \sphinxstyleemphasis{key} , incrementing its reference count.
5427
5428\begin{sphinxadmonition}{note}{Note:}
5429New in 1.9
5430\end{sphinxadmonition}
5431
5432
5433\subsubsection{krb5\_auth\_con\_setuseruserkey -  Set the session key in an auth context.}
5434\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)}
5435
5436\begin{fulllineitems}
5437\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}}{}
5438\end{fulllineitems}
5439
5440\begin{quote}\begin{description}
5441\item[{param}] \leavevmode
5442\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5443
5444\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
5445
5446\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} - User key
5447
5448\end{description}\end{quote}
5449\begin{quote}\begin{description}
5450\item[{retval}] \leavevmode\begin{itemize}
5451\item {}
54520   Success; otherwise - Kerberos error codes
5453
5454\end{itemize}
5455
5456\end{description}\end{quote}
5457
5458
5459\subsubsection{krb5\_cc\_cache\_match -  Find a credential cache with a specified client principal.}
5460\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)}
5461
5462\begin{fulllineitems}
5463\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}}{}
5464\end{fulllineitems}
5465
5466\begin{quote}\begin{description}
5467\item[{param}] \leavevmode
5468\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5469
5470\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal
5471
5472\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cache\_out} - Credential cache handle
5473
5474\end{description}\end{quote}
5475\begin{quote}\begin{description}
5476\item[{retval}] \leavevmode\begin{itemize}
5477\item {}
54780   Success
5479
5480\item {}
5481KRB5\_CC\_NOTFOUND   None
5482
5483\end{itemize}
5484
5485\end{description}\end{quote}
5486
5487Find 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.
5488
5489\begin{sphinxadmonition}{note}{Note:}
5490New in 1.10
5491\end{sphinxadmonition}
5492
5493
5494\subsubsection{krb5\_cc\_copy\_creds -  Copy a credential cache.}
5495\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)}
5496
5497\begin{fulllineitems}
5498\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}}{}
5499\end{fulllineitems}
5500
5501\begin{quote}\begin{description}
5502\item[{param}] \leavevmode
5503\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5504
5505\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{incc} - Credential cache to be copied
5506
5507\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outcc} - Copy of credential cache to be filled in
5508
5509\end{description}\end{quote}
5510\begin{quote}\begin{description}
5511\item[{retval}] \leavevmode\begin{itemize}
5512\item {}
55130   Success; otherwise - Kerberos error codes
5514
5515\end{itemize}
5516
5517\end{description}\end{quote}
5518
5519
5520\subsubsection{krb5\_cc\_end\_seq\_get -  Finish a series of sequential processing credential cache entries.}
5521\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)}
5522
5523\begin{fulllineitems}
5524\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}}{}
5525\end{fulllineitems}
5526
5527\begin{quote}\begin{description}
5528\item[{param}] \leavevmode
5529\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5530
5531\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
5532
5533\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} - Cursor
5534
5535\end{description}\end{quote}
5536\begin{quote}\begin{description}
5537\item[{retval}] \leavevmode\begin{itemize}
5538\item {}
55390   (always)
5540
5541\end{itemize}
5542
5543\end{description}\end{quote}
5544
5545This function finishes processing credential cache entries and invalidates \sphinxstyleemphasis{cursor} .
5546
5547
5548\sphinxstrong{See also:}
5549
5550
5551{\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()}}}}
5552
5553
5554
5555
5556\subsubsection{krb5\_cc\_get\_config -  Get a configuration value from a credential cache.}
5557\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)}
5558
5559\begin{fulllineitems}
5560\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}}{}
5561\end{fulllineitems}
5562
5563\begin{quote}\begin{description}
5564\item[{param}] \leavevmode
5565\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5566
5567\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{id} - Credential cache handle
5568
5569\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Configuration for this principal; if NULL, global for the whole cache
5570
5571\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Name of config variable
5572
5573\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} - Data to be fetched
5574
5575\end{description}\end{quote}
5576\begin{quote}\begin{description}
5577\item[{retval}] \leavevmode\begin{itemize}
5578\item {}
55790   Success
5580
5581\end{itemize}
5582
5583\item[{return}] \leavevmode\begin{itemize}
5584\item {}
5585Kerberos error codes
5586
5587\end{itemize}
5588
5589\end{description}\end{quote}
5590
5591Use {\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.
5592
5593
5594\subsubsection{krb5\_cc\_get\_flags -  Retrieve flags from a credential cache structure.}
5595\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)}
5596
5597\begin{fulllineitems}
5598\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}}{}
5599\end{fulllineitems}
5600
5601\begin{quote}\begin{description}
5602\item[{param}] \leavevmode
5603\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5604
5605\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
5606
5607\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{flags} - Flag bit mask
5608
5609\end{description}\end{quote}
5610\begin{quote}\begin{description}
5611\item[{retval}] \leavevmode\begin{itemize}
5612\item {}
56130   Success; otherwise - Kerberos error codes
5614
5615\end{itemize}
5616
5617\end{description}\end{quote}
5618
5619\begin{sphinxadmonition}{warning}{Warning:}
5620For memory credential cache always returns a flag mask of 0.
5621\end{sphinxadmonition}
5622
5623
5624\subsubsection{krb5\_cc\_get\_full\_name -  Retrieve the full name of a credential cache.}
5625\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)}
5626
5627\begin{fulllineitems}
5628\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}}{}
5629\end{fulllineitems}
5630
5631\begin{quote}\begin{description}
5632\item[{param}] \leavevmode
5633\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5634
5635\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
5636
5637\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{fullname\_out} - Full name of cache
5638
5639\end{description}\end{quote}
5640
5641Use {\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.
5642
5643\begin{sphinxadmonition}{note}{Note:}
5644New in 1.10
5645\end{sphinxadmonition}
5646
5647
5648\subsubsection{krb5\_cc\_move -  Move a credential cache.}
5649\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)}
5650
5651\begin{fulllineitems}
5652\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}}{}
5653\end{fulllineitems}
5654
5655\begin{quote}\begin{description}
5656\item[{param}] \leavevmode
5657\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5658
5659\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{src} - The credential cache to move the content from
5660
5661\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{dst} - The credential cache to move the content to
5662
5663\end{description}\end{quote}
5664\begin{quote}\begin{description}
5665\item[{retval}] \leavevmode\begin{itemize}
5666\item {}
56670   Success; src is closed.
5668
5669\end{itemize}
5670
5671\item[{return}] \leavevmode\begin{itemize}
5672\item {}
5673Kerberos error codes; src is still allocated.
5674
5675\end{itemize}
5676
5677\end{description}\end{quote}
5678
5679This function reinitializes \sphinxstyleemphasis{dst} and populates it with the credentials and default principal of \sphinxstyleemphasis{src} ; then, if successful, destroys \sphinxstyleemphasis{src} .
5680
5681
5682\subsubsection{krb5\_cc\_next\_cred -  Retrieve the next entry from the credential cache.}
5683\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)}
5684
5685\begin{fulllineitems}
5686\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}}{}
5687\end{fulllineitems}
5688
5689\begin{quote}\begin{description}
5690\item[{param}] \leavevmode
5691\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5692
5693\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
5694
5695\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} - Cursor
5696
5697\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - Next credential cache entry
5698
5699\end{description}\end{quote}
5700\begin{quote}\begin{description}
5701\item[{retval}] \leavevmode\begin{itemize}
5702\item {}
57030   Success; otherwise - Kerberos error codes
5704
5705\end{itemize}
5706
5707\end{description}\end{quote}
5708
5709This function fills in \sphinxstyleemphasis{creds} with the next entry in \sphinxstyleemphasis{cache} and advances \sphinxstyleemphasis{cursor} .
5710
5711Use {\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.
5712
5713
5714\sphinxstrong{See also:}
5715
5716
5717{\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()
5718
5719
5720
5721
5722\subsubsection{krb5\_cc\_remove\_cred -  Remove credentials from a credential cache.}
5723\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)}
5724
5725\begin{fulllineitems}
5726\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}}{}
5727\end{fulllineitems}
5728
5729\begin{quote}\begin{description}
5730\item[{param}] \leavevmode
5731\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5732
5733\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
5734
5735\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Bitwise-ORed search flags
5736
5737\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Credentials to be matched
5738
5739\end{description}\end{quote}
5740\begin{quote}\begin{description}
5741\item[{retval}] \leavevmode\begin{itemize}
5742\item {}
5743KRB5\_CC\_NOSUPP   Not implemented for this cache type
5744
5745\end{itemize}
5746
5747\item[{return}] \leavevmode\begin{itemize}
5748\item {}
5749No matches found; Data cannot be deleted; Kerberos error codes
5750
5751\end{itemize}
5752
5753\end{description}\end{quote}
5754
5755This 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()}}}} .
5756
5757\begin{sphinxadmonition}{warning}{Warning:}
5758This function is not implemented for some cache types.
5759\end{sphinxadmonition}
5760
5761
5762\subsubsection{krb5\_cc\_retrieve\_cred -  Retrieve a specified credentials from a credential cache.}
5763\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)}
5764
5765\begin{fulllineitems}
5766\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}}{}
5767\end{fulllineitems}
5768
5769\begin{quote}\begin{description}
5770\item[{param}] \leavevmode
5771\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5772
5773\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
5774
5775\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flags bit mask
5776
5777\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{mcreds} - Credentials to match
5778
5779\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - Credentials matching the requested value
5780
5781\end{description}\end{quote}
5782\begin{quote}\begin{description}
5783\item[{retval}] \leavevmode\begin{itemize}
5784\item {}
57850   Success; otherwise - Kerberos error codes
5786
5787\end{itemize}
5788
5789\end{description}\end{quote}
5790
5791This function searches a credential cache for credentials matching \sphinxstyleemphasis{mcreds} and returns it if found.
5792
5793Valid values for \sphinxstyleemphasis{flags} are:
5794\begin{quote}
5795\begin{itemize}
5796\item {}
5797{\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} .
5798
5799\item {}
5800{\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.
5801
5802\item {}
5803{\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.
5804
5805\item {}
5806{\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.
5807
5808\item {}
5809{\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.
5810
5811\item {}
5812{\hyperref[\detokenize{appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA:KRB5_TC_MATCH_AUTHDATA}]{\sphinxcrossref{\sphinxcode{KRB5\_TC\_MATCH\_AUTHDATA}}}} The authorization data must match.
5813
5814\item {}
5815{\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.
5816
5817\item {}
5818{\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.
5819
5820\item {}
5821{\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.
5822
5823\item {}
5824{\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.
5825
5826\end{itemize}
5827
5828Use {\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.
5829\end{quote}
5830
5831
5832\subsubsection{krb5\_cc\_select -  Select a credential cache to use with a server principal.}
5833\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)}
5834
5835\begin{fulllineitems}
5836\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}}{}
5837\end{fulllineitems}
5838
5839\begin{quote}\begin{description}
5840\item[{param}] \leavevmode
5841\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5842
5843\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Server principal
5844
5845\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cache\_out} - Credential cache handle
5846
5847\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{princ\_out} - Client principal
5848
5849\end{description}\end{quote}
5850\begin{quote}\begin{description}
5851\item[{return}] \leavevmode\begin{itemize}
5852\item {}
5853If 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.
5854
5855\end{itemize}
5856
5857\end{description}\end{quote}
5858
5859Select a cache within the collection containing credentials most appropriate for use with \sphinxstyleemphasis{server} , according to configured rules and heuristics.
5860
5861Use {\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.
5862
5863If 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.
5864
5865If 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.
5866
5867Any other error code indicates a fatal error in the processing of a cache selection mechanism.
5868
5869\begin{sphinxadmonition}{note}{Note:}
5870New in 1.10
5871\end{sphinxadmonition}
5872
5873
5874\subsubsection{krb5\_cc\_set\_config -  Store a configuration value in a credential cache.}
5875\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)}
5876
5877\begin{fulllineitems}
5878\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}}{}
5879\end{fulllineitems}
5880
5881\begin{quote}\begin{description}
5882\item[{param}] \leavevmode
5883\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5884
5885\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{id} - Credential cache handle
5886
5887\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Configuration for a specific principal; if NULL, global for the whole cache
5888
5889\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Name of config variable
5890
5891\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Data to store, or NULL to remove
5892
5893\end{description}\end{quote}
5894\begin{quote}\begin{description}
5895\item[{retval}] \leavevmode\begin{itemize}
5896\item {}
58970   Success
5898
5899\end{itemize}
5900
5901\item[{return}] \leavevmode\begin{itemize}
5902\item {}
5903Kerberos error codes
5904
5905\end{itemize}
5906
5907\end{description}\end{quote}
5908
5909\begin{sphinxadmonition}{warning}{Warning:}
5910Before version 1.10 \sphinxstyleemphasis{data} was assumed to be always non-null.
5911\end{sphinxadmonition}
5912
5913\begin{sphinxadmonition}{note}{Note:}
5914Existing configuration under the same key is over-written.
5915\end{sphinxadmonition}
5916
5917
5918\subsubsection{krb5\_cc\_set\_default\_name -  Set the default credential cache name.}
5919\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)}
5920
5921\begin{fulllineitems}
5922\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}}{}
5923\end{fulllineitems}
5924
5925\begin{quote}\begin{description}
5926\item[{param}] \leavevmode
5927\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5928
5929\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{name} - Default credential cache name or NULL
5930
5931\end{description}\end{quote}
5932\begin{quote}\begin{description}
5933\item[{retval}] \leavevmode\begin{itemize}
5934\item {}
59350   Success
5936
5937\item {}
5938KV5M\_CONTEXT   Bad magic number for \_krb5\_context structure
5939
5940\end{itemize}
5941
5942\item[{return}] \leavevmode\begin{itemize}
5943\item {}
5944Kerberos error codes
5945
5946\end{itemize}
5947
5948\end{description}\end{quote}
5949
5950Set 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} .
5951
5952Calls 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} .
5953
5954
5955\subsubsection{krb5\_cc\_set\_flags -  Set options flags on a credential cache.}
5956\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)}
5957
5958\begin{fulllineitems}
5959\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}}{}
5960\end{fulllineitems}
5961
5962\begin{quote}\begin{description}
5963\item[{param}] \leavevmode
5964\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5965
5966\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
5967
5968\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Flag bit mask
5969
5970\end{description}\end{quote}
5971\begin{quote}\begin{description}
5972\item[{retval}] \leavevmode\begin{itemize}
5973\item {}
59740   Success; otherwise - Kerberos error codes
5975
5976\end{itemize}
5977
5978\end{description}\end{quote}
5979
5980This function resets \sphinxstyleemphasis{cache} flags to \sphinxstyleemphasis{flags} .
5981
5982
5983\subsubsection{krb5\_cc\_start\_seq\_get -  Prepare to sequentially read every credential in a credential cache.}
5984\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)}
5985
5986\begin{fulllineitems}
5987\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}}{}
5988\end{fulllineitems}
5989
5990\begin{quote}\begin{description}
5991\item[{param}] \leavevmode
5992\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
5993
5994\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cache} - Credential cache handle
5995
5996\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cursor} - Cursor
5997
5998\end{description}\end{quote}
5999\begin{quote}\begin{description}
6000\item[{retval}] \leavevmode\begin{itemize}
6001\item {}
60020   Success; otherwise - Kerberos error codes
6003
6004\end{itemize}
6005
6006\end{description}\end{quote}
6007\begin{quote}
6008
6009{\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.
6010\end{quote}
6011
6012\begin{sphinxadmonition}{note}{Note:}
6013If 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.
6014\end{sphinxadmonition}
6015
6016
6017\subsubsection{krb5\_cc\_store\_cred -  Store credentials in a credential cache.}
6018\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)}
6019
6020\begin{fulllineitems}
6021\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}}{}
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{cache} - Credential cache handle
6029
6030\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Credentials to be stored in cache
6031
6032\end{description}\end{quote}
6033\begin{quote}\begin{description}
6034\item[{retval}] \leavevmode\begin{itemize}
6035\item {}
60360   Success
6037
6038\end{itemize}
6039
6040\item[{return}] \leavevmode\begin{itemize}
6041\item {}
6042Permission errors; storage failure errors; Kerberos error codes
6043
6044\end{itemize}
6045
6046\end{description}\end{quote}
6047
6048This 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.
6049
6050
6051\subsubsection{krb5\_cc\_support\_switch -  Determine whether a credential cache type supports switching.}
6052\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)}
6053
6054\begin{fulllineitems}
6055\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}}{}
6056\end{fulllineitems}
6057
6058\begin{quote}\begin{description}
6059\item[{param}] \leavevmode
6060\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6061
6062\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - Credential cache type
6063
6064\end{description}\end{quote}
6065\begin{quote}\begin{description}
6066\item[{retval}] \leavevmode\begin{itemize}
6067\item {}
6068TRUE   if type supports switching
6069
6070\item {}
6071FALSE   if it does not or is not a valid credential cache type.
6072
6073\end{itemize}
6074
6075\end{description}\end{quote}
6076
6077\begin{sphinxadmonition}{note}{Note:}
6078New in 1.10
6079\end{sphinxadmonition}
6080
6081
6082\subsubsection{krb5\_cc\_switch -  Make a credential cache the primary cache for its collection.}
6083\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)}
6084
6085\begin{fulllineitems}
6086\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}}{}
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\end{description}\end{quote}
6096\begin{quote}\begin{description}
6097\item[{retval}] \leavevmode\begin{itemize}
6098\item {}
60990   Success, or the type of cache doesn’t support switching
6100
6101\end{itemize}
6102
6103\item[{return}] \leavevmode\begin{itemize}
6104\item {}
6105Kerberos error codes
6106
6107\end{itemize}
6108
6109\end{description}\end{quote}
6110
6111If the type of \sphinxstyleemphasis{cache} supports it, set \sphinxstyleemphasis{cache} to be the primary credential cache for the collection it belongs to.
6112
6113
6114\subsubsection{krb5\_cccol\_cursor\_free -  Free a credential cache collection cursor.}
6115\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)}
6116
6117\begin{fulllineitems}
6118\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}}{}
6119\end{fulllineitems}
6120
6121\begin{quote}\begin{description}
6122\item[{param}] \leavevmode
6123\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6124
6125\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} - Cursor
6126
6127\end{description}\end{quote}
6128\begin{quote}\begin{description}
6129\item[{retval}] \leavevmode\begin{itemize}
6130\item {}
61310   Success; otherwise - Kerberos error codes
6132
6133\end{itemize}
6134
6135\end{description}\end{quote}
6136
6137
6138\sphinxstrong{See also:}
6139
6140
6141{\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()}}}}
6142
6143
6144
6145
6146\subsubsection{krb5\_cccol\_cursor\_new -  Prepare to iterate over the collection of known credential caches.}
6147\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)}
6148
6149\begin{fulllineitems}
6150\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}}{}
6151\end{fulllineitems}
6152
6153\begin{quote}\begin{description}
6154\item[{param}] \leavevmode
6155\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6156
6157\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cursor} - Cursor
6158
6159\end{description}\end{quote}
6160\begin{quote}\begin{description}
6161\item[{retval}] \leavevmode\begin{itemize}
6162\item {}
61630   Success; otherwise - Kerberos error codes
6164
6165\end{itemize}
6166
6167\end{description}\end{quote}
6168
6169Get a new cache iteration \sphinxstyleemphasis{cursor} that will iterate over all known credential caches independent of type.
6170
6171Use {\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.
6172
6173
6174\sphinxstrong{See also:}
6175
6176
6177{\hyperref[\detokenize{appdev/refs/api/krb5_cccol_cursor_next:c.krb5_cccol_cursor_next}]{\sphinxcrossref{\sphinxcode{krb5\_cccol\_cursor\_next()}}}}
6178
6179
6180
6181
6182\subsubsection{krb5\_cccol\_cursor\_next -  Get the next credential cache in the collection.}
6183\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)}
6184
6185\begin{fulllineitems}
6186\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}}{}
6187\end{fulllineitems}
6188
6189\begin{quote}\begin{description}
6190\item[{param}] \leavevmode
6191\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6192
6193\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} - Cursor
6194
6195\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ccache} - Credential cache handle
6196
6197\end{description}\end{quote}
6198\begin{quote}\begin{description}
6199\item[{retval}] \leavevmode\begin{itemize}
6200\item {}
62010   Success; otherwise - Kerberos error codes
6202
6203\end{itemize}
6204
6205\end{description}\end{quote}
6206
6207Use {\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.
6208
6209
6210\sphinxstrong{See also:}
6211
6212
6213{\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()}}}}
6214
6215
6216
6217\begin{sphinxadmonition}{note}{Note:}
6218When all caches are iterated over and the end of the list is reached, \sphinxstyleemphasis{ccache} is set to NULL.
6219\end{sphinxadmonition}
6220
6221
6222\subsubsection{krb5\_cccol\_have\_content -  Check if the credential cache collection contains any credentials.}
6223\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)}
6224
6225\begin{fulllineitems}
6226\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}}{}
6227\end{fulllineitems}
6228
6229\begin{quote}\begin{description}
6230\item[{param}] \leavevmode
6231\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6232
6233\end{description}\end{quote}
6234\begin{quote}\begin{description}
6235\item[{retval}] \leavevmode\begin{itemize}
6236\item {}
62370   Credentials are available in the collection
6238
6239\item {}
6240KRB5\_CC\_NOTFOUND   The collection contains no credentials
6241
6242\end{itemize}
6243
6244\end{description}\end{quote}
6245
6246\begin{sphinxadmonition}{note}{Note:}
6247New in 1.11
6248\end{sphinxadmonition}
6249
6250
6251\subsubsection{krb5\_clear\_error\_message -  Clear the extended error message in a context.}
6252\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)}
6253
6254\begin{fulllineitems}
6255\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}}{}
6256\end{fulllineitems}
6257
6258\begin{quote}\begin{description}
6259\item[{param}] \leavevmode
6260\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
6261
6262\end{description}\end{quote}
6263
6264This 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.
6265
6266
6267\subsubsection{krb5\_check\_clockskew -  Check if a timestamp is within the allowed clock skew of the current time.}
6268\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)}
6269
6270\begin{fulllineitems}
6271\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}}{}
6272\end{fulllineitems}
6273
6274\begin{quote}\begin{description}
6275\item[{param}] \leavevmode
6276\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6277
6278\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{date} - Timestamp to check
6279
6280\end{description}\end{quote}
6281\begin{quote}\begin{description}
6282\item[{retval}] \leavevmode\begin{itemize}
6283\item {}
62840   Success
6285
6286\item {}
6287KRB5KRB\_AP\_ERR\_SKEW    date is not within allowable clock skew
6288
6289\end{itemize}
6290
6291\end{description}\end{quote}
6292
6293This function checks if \sphinxstyleemphasis{date} is close enough to the current time according to the configured allowable clock skew.
6294
6295\begin{sphinxadmonition}{note}{Note:}
6296New in 1.10
6297\end{sphinxadmonition}
6298
6299
6300\subsubsection{krb5\_copy\_addresses -  Copy an array of addresses.}
6301\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)}
6302
6303\begin{fulllineitems}
6304\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}}{}
6305\end{fulllineitems}
6306
6307\begin{quote}\begin{description}
6308\item[{param}] \leavevmode
6309\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6310
6311\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inaddr} - Array of addresses to be copied
6312
6313\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outaddr} - Copy of array of addresses
6314
6315\end{description}\end{quote}
6316\begin{quote}\begin{description}
6317\item[{retval}] \leavevmode\begin{itemize}
6318\item {}
63190   Success; otherwise - Kerberos error codes
6320
6321\end{itemize}
6322
6323\end{description}\end{quote}
6324
6325This 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.
6326
6327
6328\subsubsection{krb5\_copy\_authdata -  Copy an authorization data list.}
6329\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)}
6330
6331\begin{fulllineitems}
6332\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}}{}
6333\end{fulllineitems}
6334
6335\begin{quote}\begin{description}
6336\item[{param}] \leavevmode
6337\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6338
6339\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_authdat} - List of \sphinxstyleemphasis{krb5\_authdata} structures
6340
6341\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - New array of \sphinxstyleemphasis{krb5\_authdata} structures
6342
6343\end{description}\end{quote}
6344\begin{quote}\begin{description}
6345\item[{retval}] \leavevmode\begin{itemize}
6346\item {}
63470   Success; otherwise - Kerberos error codes
6348
6349\end{itemize}
6350
6351\end{description}\end{quote}
6352
6353This 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.
6354
6355\begin{sphinxadmonition}{note}{Note:}
6356The last array entry in \sphinxstyleemphasis{in\_authdat} must be a NULL pointer.
6357\end{sphinxadmonition}
6358
6359
6360\subsubsection{krb5\_copy\_authenticator -  Copy a krb5\_authenticator structure.}
6361\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)}
6362
6363\begin{fulllineitems}
6364\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}}{}
6365\end{fulllineitems}
6366
6367\begin{quote}\begin{description}
6368\item[{param}] \leavevmode
6369\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6370
6371\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authfrom} - krb5\_authenticator structure to be copied
6372
6373\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{authto} - Copy of krb5\_authenticator structure
6374
6375\end{description}\end{quote}
6376\begin{quote}\begin{description}
6377\item[{retval}] \leavevmode\begin{itemize}
6378\item {}
63790   Success; otherwise - Kerberos error codes
6380
6381\end{itemize}
6382
6383\end{description}\end{quote}
6384
6385This 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.
6386
6387
6388\subsubsection{krb5\_copy\_checksum -  Copy a krb5\_checksum structure.}
6389\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)}
6390
6391\begin{fulllineitems}
6392\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}}{}
6393\end{fulllineitems}
6394
6395\begin{quote}\begin{description}
6396\item[{param}] \leavevmode
6397\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6398
6399\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ckfrom} - Checksum to be copied
6400
6401\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ckto} - Copy of krb5\_checksum structure
6402
6403\end{description}\end{quote}
6404\begin{quote}\begin{description}
6405\item[{retval}] \leavevmode\begin{itemize}
6406\item {}
64070   Success; otherwise - Kerberos error codes
6408
6409\end{itemize}
6410
6411\end{description}\end{quote}
6412
6413This 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.
6414
6415
6416\subsubsection{krb5\_copy\_context -  Copy a krb5\_context structure.}
6417\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)}
6418
6419\begin{fulllineitems}
6420\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}}{}
6421\end{fulllineitems}
6422
6423\begin{quote}\begin{description}
6424\item[{param}] \leavevmode
6425\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
6426
6427\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{nctx\_out} - New context structure
6428
6429\end{description}\end{quote}
6430\begin{quote}\begin{description}
6431\item[{retval}] \leavevmode\begin{itemize}
6432\item {}
64330   Success
6434
6435\end{itemize}
6436
6437\item[{return}] \leavevmode\begin{itemize}
6438\item {}
6439Kerberos error codes
6440
6441\end{itemize}
6442
6443\end{description}\end{quote}
6444
6445The 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.
6446
6447
6448\subsubsection{krb5\_copy\_creds -  Copy a krb5\_creds structure.}
6449\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)}
6450
6451\begin{fulllineitems}
6452\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}}{}
6453\end{fulllineitems}
6454
6455\begin{quote}\begin{description}
6456\item[{param}] \leavevmode
6457\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6458
6459\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{incred} - Credentials structure to be copied
6460
6461\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outcred} - Copy of \sphinxstyleemphasis{incred}
6462
6463\end{description}\end{quote}
6464\begin{quote}\begin{description}
6465\item[{retval}] \leavevmode\begin{itemize}
6466\item {}
64670   Success; otherwise - Kerberos error codes
6468
6469\end{itemize}
6470
6471\end{description}\end{quote}
6472
6473This 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.
6474
6475
6476\subsubsection{krb5\_copy\_data -  Copy a krb5\_data object.}
6477\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)}
6478
6479\begin{fulllineitems}
6480\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}}{}
6481\end{fulllineitems}
6482
6483\begin{quote}\begin{description}
6484\item[{param}] \leavevmode
6485\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6486
6487\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{indata} - Data object to be copied
6488
6489\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outdata} - Copy of \sphinxstyleemphasis{indata}
6490
6491\end{description}\end{quote}
6492\begin{quote}\begin{description}
6493\item[{retval}] \leavevmode\begin{itemize}
6494\item {}
64950   Success; otherwise - Kerberos error codes
6496
6497\end{itemize}
6498
6499\end{description}\end{quote}
6500
6501This 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.
6502
6503
6504\subsubsection{krb5\_copy\_error\_message -  Copy the most recent extended error message from one context to another.}
6505\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)}
6506
6507\begin{fulllineitems}
6508\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}}{}
6509\end{fulllineitems}
6510
6511\begin{quote}\begin{description}
6512\item[{param}] \leavevmode
6513\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{dest\_ctx} - Library context to copy message to
6514
6515\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{src\_ctx} - Library context with current message
6516
6517\end{description}\end{quote}
6518
6519
6520\subsubsection{krb5\_copy\_keyblock -  Copy a keyblock.}
6521\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)}
6522
6523\begin{fulllineitems}
6524\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}}{}
6525\end{fulllineitems}
6526
6527\begin{quote}\begin{description}
6528\item[{param}] \leavevmode
6529\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6530
6531\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{from} - Keyblock to be copied
6532
6533\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{to} - Copy of keyblock \sphinxstyleemphasis{from}
6534
6535\end{description}\end{quote}
6536\begin{quote}\begin{description}
6537\item[{retval}] \leavevmode\begin{itemize}
6538\item {}
65390   Success; otherwise - Kerberos error codes
6540
6541\end{itemize}
6542
6543\end{description}\end{quote}
6544
6545This 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.
6546
6547
6548\subsubsection{krb5\_copy\_keyblock\_contents -  Copy the contents of a keyblock.}
6549\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)}
6550
6551\begin{fulllineitems}
6552\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}}{}
6553\end{fulllineitems}
6554
6555\begin{quote}\begin{description}
6556\item[{param}] \leavevmode
6557\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6558
6559\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{from} - Key to be copied
6560
6561\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{to} - Output key
6562
6563\end{description}\end{quote}
6564\begin{quote}\begin{description}
6565\item[{retval}] \leavevmode\begin{itemize}
6566\item {}
65670   Success; otherwise - Kerberos error codes
6568
6569\end{itemize}
6570
6571\end{description}\end{quote}
6572
6573This 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.
6574
6575
6576\subsubsection{krb5\_copy\_principal -  Copy a principal.}
6577\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)}
6578
6579\begin{fulllineitems}
6580\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}}{}
6581\end{fulllineitems}
6582
6583\begin{quote}\begin{description}
6584\item[{param}] \leavevmode
6585\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6586
6587\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inprinc} - Principal to be copied
6588
6589\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outprinc} - Copy of \sphinxstyleemphasis{inprinc}
6590
6591\end{description}\end{quote}
6592\begin{quote}\begin{description}
6593\item[{retval}] \leavevmode\begin{itemize}
6594\item {}
65950   Success; otherwise - Kerberos error codes
6596
6597\end{itemize}
6598
6599\end{description}\end{quote}
6600
6601This 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.
6602
6603
6604\subsubsection{krb5\_copy\_ticket -  Copy a krb5\_ticket structure.}
6605\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)}
6606
6607\begin{fulllineitems}
6608\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}}{}
6609\end{fulllineitems}
6610
6611\begin{quote}\begin{description}
6612\item[{param}] \leavevmode
6613\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6614
6615\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{from} - Ticket to be copied
6616
6617\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{pto} - Copy of ticket
6618
6619\end{description}\end{quote}
6620\begin{quote}\begin{description}
6621\item[{retval}] \leavevmode\begin{itemize}
6622\item {}
66230   Success; otherwise - Kerberos error codes
6624
6625\end{itemize}
6626
6627\end{description}\end{quote}
6628
6629This 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.
6630
6631
6632\subsubsection{krb5\_find\_authdata -  Find authorization data elements.}
6633\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)}
6634
6635\begin{fulllineitems}
6636\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}}{}
6637\end{fulllineitems}
6638
6639\begin{quote}\begin{description}
6640\item[{param}] \leavevmode
6641\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6642
6643\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ticket\_authdata} - Authorization data list from ticket
6644
6645\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_authdata} - Authorization data list from AP request
6646
6647\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ad\_type} - Authorization data type to find
6648
6649\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{results} - List of matching entries
6650
6651\end{description}\end{quote}
6652
6653This 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.
6654
6655\begin{sphinxadmonition}{note}{Note:}
6656New in 1.10
6657\end{sphinxadmonition}
6658
6659
6660\subsubsection{krb5\_free\_addresses -  Free the data stored in array of addresses.}
6661\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)}
6662
6663\begin{fulllineitems}
6664\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}}{}
6665\end{fulllineitems}
6666
6667\begin{quote}\begin{description}
6668\item[{param}] \leavevmode
6669\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6670
6671\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Array of addresses to be freed
6672
6673\end{description}\end{quote}
6674
6675This function frees the contents of \sphinxstyleemphasis{val} and the array itself.
6676
6677\begin{sphinxadmonition}{note}{Note:}
6678The last entry in the array must be a NULL pointer.
6679\end{sphinxadmonition}
6680
6681
6682\subsubsection{krb5\_free\_ap\_rep\_enc\_part -  Free a krb5\_ap\_rep\_enc\_part structure.}
6683\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)}
6684
6685\begin{fulllineitems}
6686\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}}{}
6687\end{fulllineitems}
6688
6689\begin{quote}\begin{description}
6690\item[{param}] \leavevmode
6691\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6692
6693\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - AP-REP enc part to be freed
6694
6695\end{description}\end{quote}
6696
6697This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
6698
6699
6700\subsubsection{krb5\_free\_authdata -  Free the storage assigned to array of authentication data.}
6701\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)}
6702
6703\begin{fulllineitems}
6704\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}}{}
6705\end{fulllineitems}
6706
6707\begin{quote}\begin{description}
6708\item[{param}] \leavevmode
6709\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6710
6711\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Array of authentication data to be freed
6712
6713\end{description}\end{quote}
6714
6715This function frees the contents of \sphinxstyleemphasis{val} and the array itself.
6716
6717\begin{sphinxadmonition}{note}{Note:}
6718The last entry in the array must be a NULL pointer.
6719\end{sphinxadmonition}
6720
6721
6722\subsubsection{krb5\_free\_authenticator -  Free a krb5\_authenticator structure.}
6723\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)}
6724
6725\begin{fulllineitems}
6726\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}}{}
6727\end{fulllineitems}
6728
6729\begin{quote}\begin{description}
6730\item[{param}] \leavevmode
6731\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6732
6733\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Authenticator structure to be freed
6734
6735\end{description}\end{quote}
6736
6737This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
6738
6739
6740\subsubsection{krb5\_free\_cred\_contents -  Free the contents of a krb5\_creds structure.}
6741\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)}
6742
6743\begin{fulllineitems}
6744\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}}{}
6745\end{fulllineitems}
6746
6747\begin{quote}\begin{description}
6748\item[{param}] \leavevmode
6749\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6750
6751\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Credential structure to free contents of
6752
6753\end{description}\end{quote}
6754
6755This function frees the contents of \sphinxstyleemphasis{val} , but not the structure itself.
6756
6757
6758\subsubsection{krb5\_free\_creds -  Free a krb5\_creds structure.}
6759\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)}
6760
6761\begin{fulllineitems}
6762\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}}{}
6763\end{fulllineitems}
6764
6765\begin{quote}\begin{description}
6766\item[{param}] \leavevmode
6767\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6768
6769\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Credential structure to be freed.
6770
6771\end{description}\end{quote}
6772
6773This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
6774
6775
6776\subsubsection{krb5\_free\_data -  Free a krb5\_data structure.}
6777\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)}
6778
6779\begin{fulllineitems}
6780\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}}{}
6781\end{fulllineitems}
6782
6783\begin{quote}\begin{description}
6784\item[{param}] \leavevmode
6785\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6786
6787\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Data structure to be freed
6788
6789\end{description}\end{quote}
6790
6791This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
6792
6793
6794\subsubsection{krb5\_free\_data\_contents -  Free the contents of a krb5\_data structure and zero the data field.}
6795\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)}
6796
6797\begin{fulllineitems}
6798\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}}{}
6799\end{fulllineitems}
6800
6801\begin{quote}\begin{description}
6802\item[{param}] \leavevmode
6803\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6804
6805\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Data structure to free contents of
6806
6807\end{description}\end{quote}
6808
6809This function frees the contents of \sphinxstyleemphasis{val} , but not the structure itself.
6810
6811
6812\subsubsection{krb5\_free\_default\_realm -  Free a default realm string returned by krb5\_get\_default\_realm() .}
6813\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)}
6814
6815\begin{fulllineitems}
6816\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}}{}
6817\end{fulllineitems}
6818
6819\begin{quote}\begin{description}
6820\item[{param}] \leavevmode
6821\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6822
6823\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{lrealm} - Realm to be freed
6824
6825\end{description}\end{quote}
6826
6827
6828\subsubsection{krb5\_free\_enctypes -  Free an array of encryption types.}
6829\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)}
6830
6831\begin{fulllineitems}
6832\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}}{}
6833\end{fulllineitems}
6834
6835\begin{quote}\begin{description}
6836\item[{param}] \leavevmode
6837\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6838
6839\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Array of enctypes to be freed
6840
6841\end{description}\end{quote}
6842
6843\begin{sphinxadmonition}{note}{Note:}
6844New in 1.12
6845\end{sphinxadmonition}
6846
6847
6848\subsubsection{krb5\_free\_error -  Free an error allocated by krb5\_read\_error() or krb5\_sendauth() .}
6849\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)}
6850
6851\begin{fulllineitems}
6852\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}}{}
6853\end{fulllineitems}
6854
6855\begin{quote}\begin{description}
6856\item[{param}] \leavevmode
6857\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6858
6859\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Error data structure to be freed
6860
6861\end{description}\end{quote}
6862
6863This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
6864
6865
6866\subsubsection{krb5\_free\_host\_realm -  Free the memory allocated by krb5\_get\_host\_realm() .}
6867\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)}
6868
6869\begin{fulllineitems}
6870\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}}{}
6871\end{fulllineitems}
6872
6873\begin{quote}\begin{description}
6874\item[{param}] \leavevmode
6875\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6876
6877\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{realmlist} - List of realm names to be released
6878
6879\end{description}\end{quote}
6880\begin{quote}\begin{description}
6881\item[{retval}] \leavevmode\begin{itemize}
6882\item {}
68830   Success
6884
6885\end{itemize}
6886
6887\item[{return}] \leavevmode\begin{itemize}
6888\item {}
6889Kerberos error codes
6890
6891\end{itemize}
6892
6893\end{description}\end{quote}
6894
6895
6896\subsubsection{krb5\_free\_keyblock -  Free a krb5\_keyblock structure.}
6897\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)}
6898
6899\begin{fulllineitems}
6900\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}}{}
6901\end{fulllineitems}
6902
6903\begin{quote}\begin{description}
6904\item[{param}] \leavevmode
6905\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6906
6907\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Keyblock to be freed
6908
6909\end{description}\end{quote}
6910
6911This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
6912
6913
6914\subsubsection{krb5\_free\_keyblock\_contents -  Free the contents of a krb5\_keyblock structure.}
6915\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)}
6916
6917\begin{fulllineitems}
6918\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}}{}
6919\end{fulllineitems}
6920
6921\begin{quote}\begin{description}
6922\item[{param}] \leavevmode
6923\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6924
6925\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Keyblock to be freed
6926
6927\end{description}\end{quote}
6928
6929This function frees the contents of \sphinxstyleemphasis{key} , but not the structure itself.
6930
6931
6932\subsubsection{krb5\_free\_keytab\_entry\_contents -  Free the contents of a key table entry.}
6933\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)}
6934
6935\begin{fulllineitems}
6936\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}}{}
6937\end{fulllineitems}
6938
6939\begin{quote}\begin{description}
6940\item[{param}] \leavevmode
6941\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6942
6943\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{entry} - Key table entry whose contents are to be freed
6944
6945\end{description}\end{quote}
6946\begin{quote}\begin{description}
6947\item[{retval}] \leavevmode\begin{itemize}
6948\item {}
69490   Success; otherwise - Kerberos error codes
6950
6951\end{itemize}
6952
6953\end{description}\end{quote}
6954
6955\begin{sphinxadmonition}{note}{Note:}
6956The pointer is not freed.
6957\end{sphinxadmonition}
6958
6959
6960\subsubsection{krb5\_free\_string -  Free a string allocated by a krb5 function.}
6961\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)}
6962
6963\begin{fulllineitems}
6964\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}}{}
6965\end{fulllineitems}
6966
6967\begin{quote}\begin{description}
6968\item[{param}] \leavevmode
6969\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6970
6971\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - String to be freed
6972
6973\end{description}\end{quote}
6974
6975\begin{sphinxadmonition}{note}{Note:}
6976New in 1.10
6977\end{sphinxadmonition}
6978
6979
6980\subsubsection{krb5\_free\_ticket -  Free a ticket.}
6981\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)}
6982
6983\begin{fulllineitems}
6984\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}}{}
6985\end{fulllineitems}
6986
6987\begin{quote}\begin{description}
6988\item[{param}] \leavevmode
6989\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
6990
6991\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Ticket to be freed
6992
6993\end{description}\end{quote}
6994
6995This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
6996
6997
6998\subsubsection{krb5\_free\_unparsed\_name -  Free a string representation of a principal.}
6999\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)}
7000
7001\begin{fulllineitems}
7002\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}}{}
7003\end{fulllineitems}
7004
7005\begin{quote}\begin{description}
7006\item[{param}] \leavevmode
7007\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7008
7009\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Name string to be freed
7010
7011\end{description}\end{quote}
7012
7013
7014\subsubsection{krb5\_get\_etype\_info -  Retrieve enctype, salt and s2kparams from KDC.}
7015\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)}
7016
7017\begin{fulllineitems}
7018\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}}{}
7019\end{fulllineitems}
7020
7021\begin{quote}\begin{description}
7022\item[{param}] \leavevmode
7023\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7024
7025\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal whose information is requested
7026
7027\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{opt} - Initial credential options
7028
7029\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{enctype\_out} - The enctype chosen by KDC
7030
7031\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{salt\_out} - Salt returned from KDC
7032
7033\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{s2kparams\_out} - String-to-key parameters returned from KDC
7034
7035\end{description}\end{quote}
7036\begin{quote}\begin{description}
7037\item[{retval}] \leavevmode\begin{itemize}
7038\item {}
70390   Success
7040
7041\end{itemize}
7042
7043\item[{return}] \leavevmode\begin{itemize}
7044\item {}
7045A Kerberos error code
7046
7047\end{itemize}
7048
7049\end{description}\end{quote}
7050
7051Send 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.
7052\begin{quote}
7053
7054\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()}}}} ).
7055\end{quote}
7056
7057Use {\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.
7058
7059\begin{sphinxadmonition}{note}{Note:}
7060New in 1.17
7061\end{sphinxadmonition}
7062
7063
7064\subsubsection{krb5\_get\_permitted\_enctypes -  Return a list of encryption types permitted for session keys.}
7065\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)}
7066
7067\begin{fulllineitems}
7068\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}}{}
7069\end{fulllineitems}
7070
7071\begin{quote}\begin{description}
7072\item[{param}] \leavevmode
7073\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7074
7075\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ktypes} - Zero-terminated list of encryption types
7076
7077\end{description}\end{quote}
7078\begin{quote}\begin{description}
7079\item[{retval}] \leavevmode\begin{itemize}
7080\item {}
70810   Success; otherwise - Kerberos error codes
7082
7083\end{itemize}
7084
7085\end{description}\end{quote}
7086
7087This 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()}}}} .
7088
7089Use {\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.
7090
7091
7092\subsubsection{krb5\_get\_server\_rcache -  Generate a replay cache object for server use and open it.}
7093\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)}
7094
7095\begin{fulllineitems}
7096\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}}{}
7097\end{fulllineitems}
7098
7099\begin{quote}\begin{description}
7100\item[{param}] \leavevmode
7101\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7102
7103\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{piece} - Unused (replay cache identifier)
7104
7105\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rcptr} - Handle to an open rcache
7106
7107\end{description}\end{quote}
7108\begin{quote}\begin{description}
7109\item[{retval}] \leavevmode\begin{itemize}
7110\item {}
71110   Success; otherwise - Kerberos error codes
7112
7113\end{itemize}
7114
7115\end{description}\end{quote}
7116
7117This function creates a handle to the default replay cache. Use krb5\_rc\_close() to close \sphinxstyleemphasis{rcptr} when it is no longer needed.
7118
7119\begin{sphinxadmonition}{note}{Note:}
7120Prior to release 1.18, this function creates a handle to a different replay cache for each unique value of \sphinxstyleemphasis{piece} .
7121\end{sphinxadmonition}
7122
7123
7124\subsubsection{krb5\_get\_time\_offsets -  Return the time offsets from the os context.}
7125\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)}
7126
7127\begin{fulllineitems}
7128\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}}{}
7129\end{fulllineitems}
7130
7131\begin{quote}\begin{description}
7132\item[{param}] \leavevmode
7133\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7134
7135\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{seconds} - Time offset, seconds portion
7136
7137\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{microseconds} - Time offset, microseconds portion
7138
7139\end{description}\end{quote}
7140\begin{quote}\begin{description}
7141\item[{retval}] \leavevmode\begin{itemize}
7142\item {}
71430   Success; otherwise - Kerberos error codes
7144
7145\end{itemize}
7146
7147\end{description}\end{quote}
7148
7149This function returns the time offsets in \sphinxstyleemphasis{context} .
7150
7151
7152\subsubsection{krb5\_init\_context\_profile -  Create a krb5 library context using a specified profile.}
7153\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)}
7154
7155\begin{fulllineitems}
7156\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}}{}
7157\end{fulllineitems}
7158
7159\begin{quote}\begin{description}
7160\item[{param}] \leavevmode
7161\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{profile} - Profile object (NULL to create default profile)
7162
7163\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Context initialization flags
7164
7165\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{context} - Library context
7166
7167\end{description}\end{quote}
7168
7169Create 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:
7170\begin{itemize}
7171\item {}
7172{\hyperref[\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_SECURE:KRB5_INIT_CONTEXT_SECURE}]{\sphinxcrossref{\sphinxcode{KRB5\_INIT\_CONTEXT\_SECURE}}}} Ignore environment variables
7173
7174\item {}
7175{\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
7176
7177\end{itemize}
7178
7179
7180\subsubsection{krb5\_init\_creds\_free -  Free an initial credentials context.}
7181\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)}
7182
7183\begin{fulllineitems}
7184\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}}{}
7185\end{fulllineitems}
7186
7187\begin{quote}\begin{description}
7188\item[{param}] \leavevmode
7189\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7190
7191\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context
7192
7193\end{description}\end{quote}
7194\begin{quote}
7195
7196\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.
7197\end{quote}
7198
7199
7200\subsubsection{krb5\_init\_creds\_get -  Acquire credentials using an initial credentials context.}
7201\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)}
7202
7203\begin{fulllineitems}
7204\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}}{}
7205\end{fulllineitems}
7206
7207\begin{quote}\begin{description}
7208\item[{param}] \leavevmode
7209\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7210
7211\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context
7212
7213\end{description}\end{quote}
7214\begin{quote}\begin{description}
7215\item[{retval}] \leavevmode\begin{itemize}
7216\item {}
72170   Success; otherwise - Kerberos error codes
7218
7219\end{itemize}
7220
7221\end{description}\end{quote}
7222
7223This 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()}}}} .
7224\begin{quote}
7225
7226\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.
7227\end{quote}
7228
7229
7230\subsubsection{krb5\_init\_creds\_get\_creds -  Retrieve acquired credentials from an initial credentials context.}
7231\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)}
7232
7233\begin{fulllineitems}
7234\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}}{}
7235\end{fulllineitems}
7236
7237\begin{quote}\begin{description}
7238\item[{param}] \leavevmode
7239\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7240
7241\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context
7242
7243\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - Acquired credentials
7244
7245\end{description}\end{quote}
7246\begin{quote}\begin{description}
7247\item[{retval}] \leavevmode\begin{itemize}
7248\item {}
72490   Success; otherwise - Kerberos error codes
7250
7251\end{itemize}
7252
7253\end{description}\end{quote}
7254
7255This 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.
7256
7257
7258\subsubsection{krb5\_init\_creds\_get\_error -  Get the last error from KDC from an initial credentials context.}
7259\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)}
7260
7261\begin{fulllineitems}
7262\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}}{}
7263\end{fulllineitems}
7264
7265\begin{quote}\begin{description}
7266\item[{param}] \leavevmode
7267\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7268
7269\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context
7270
7271\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{error} - Error from KDC, or NULL if none was received
7272
7273\end{description}\end{quote}
7274\begin{quote}\begin{description}
7275\item[{retval}] \leavevmode\begin{itemize}
7276\item {}
72770   Success; otherwise - Kerberos error codes
7278
7279\end{itemize}
7280
7281\end{description}\end{quote}
7282
7283
7284\subsubsection{krb5\_init\_creds\_get\_times -  Retrieve ticket times from an initial credentials context.}
7285\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)}
7286
7287\begin{fulllineitems}
7288\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}}{}
7289\end{fulllineitems}
7290
7291\begin{quote}\begin{description}
7292\item[{param}] \leavevmode
7293\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7294
7295\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context
7296
7297\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{times} - Ticket times for acquired credentials
7298
7299\end{description}\end{quote}
7300\begin{quote}\begin{description}
7301\item[{retval}] \leavevmode\begin{itemize}
7302\item {}
73030   Success; otherwise - Kerberos error codes
7304
7305\end{itemize}
7306
7307\end{description}\end{quote}
7308
7309The 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()}}}} .
7310
7311
7312\subsubsection{krb5\_init\_creds\_init -  Create a context for acquiring initial credentials.}
7313\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)}
7314
7315\begin{fulllineitems}
7316\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}}{}
7317\end{fulllineitems}
7318
7319\begin{quote}\begin{description}
7320\item[{param}] \leavevmode
7321\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7322
7323\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal to get initial creds for
7324
7325\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompter} - Prompter callback
7326
7327\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Prompter callback argument
7328
7329\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{start\_time} - Time when credentials become valid (0 for now)
7330
7331\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{options} - Options structure (NULL for default)
7332
7333\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ctx} - New initial credentials context
7334
7335\end{description}\end{quote}
7336\begin{quote}\begin{description}
7337\item[{retval}] \leavevmode\begin{itemize}
7338\item {}
73390   Success; otherwise - Kerberos error codes
7340
7341\end{itemize}
7342
7343\end{description}\end{quote}
7344
7345This 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.
7346
7347Any 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.
7348
7349
7350\subsubsection{krb5\_init\_creds\_set\_keytab -  Specify a keytab to use for acquiring initial credentials.}
7351\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)}
7352
7353\begin{fulllineitems}
7354\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}}{}
7355\end{fulllineitems}
7356
7357\begin{quote}\begin{description}
7358\item[{param}] \leavevmode
7359\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7360
7361\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context
7362
7363\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle
7364
7365\end{description}\end{quote}
7366\begin{quote}\begin{description}
7367\item[{retval}] \leavevmode\begin{itemize}
7368\item {}
73690   Success; otherwise - Kerberos error codes
7370
7371\end{itemize}
7372
7373\end{description}\end{quote}
7374
7375This function supplies a keytab containing the client key for an initial credentials request.
7376
7377
7378\subsubsection{krb5\_init\_creds\_set\_password -  Set a password for acquiring initial credentials.}
7379\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)}
7380
7381\begin{fulllineitems}
7382\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}}{}
7383\end{fulllineitems}
7384
7385\begin{quote}\begin{description}
7386\item[{param}] \leavevmode
7387\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7388
7389\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context
7390
7391\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{password} - Password
7392
7393\end{description}\end{quote}
7394\begin{quote}\begin{description}
7395\item[{retval}] \leavevmode\begin{itemize}
7396\item {}
73970   Success; otherwise - Kerberos error codes
7398
7399\end{itemize}
7400
7401\end{description}\end{quote}
7402
7403This function supplies a password to be used to construct the client key for an initial credentials request.
7404
7405
7406\subsubsection{krb5\_init\_creds\_set\_service -  Specify a service principal for acquiring initial credentials.}
7407\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)}
7408
7409\begin{fulllineitems}
7410\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}}{}
7411\end{fulllineitems}
7412
7413\begin{quote}\begin{description}
7414\item[{param}] \leavevmode
7415\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7416
7417\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context
7418
7419\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{service} - Service principal string
7420
7421\end{description}\end{quote}
7422\begin{quote}\begin{description}
7423\item[{retval}] \leavevmode\begin{itemize}
7424\item {}
74250   Success; otherwise - Kerberos error codes
7426
7427\end{itemize}
7428
7429\end{description}\end{quote}
7430
7431This 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.
7432
7433
7434\subsubsection{krb5\_init\_creds\_step -  Get the next KDC request for acquiring initial credentials.}
7435\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)}
7436
7437\begin{fulllineitems}
7438\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}}{}
7439\end{fulllineitems}
7440
7441\begin{quote}\begin{description}
7442\item[{param}] \leavevmode
7443\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7444
7445\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Initial credentials context
7446
7447\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in} - KDC response (empty on the first call)
7448
7449\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Next KDC request
7450
7451\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realm} - Realm for next KDC request
7452
7453\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{flags} - Output flags
7454
7455\end{description}\end{quote}
7456\begin{quote}\begin{description}
7457\item[{retval}] \leavevmode\begin{itemize}
7458\item {}
74590   Success; otherwise - Kerberos error codes
7460
7461\end{itemize}
7462
7463\end{description}\end{quote}
7464
7465This 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.
7466
7467If 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.
7468
7469If 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.
7470\begin{quote}
7471
7472\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.
7473\end{quote}
7474
7475
7476\subsubsection{krb5\_init\_keyblock -  Initialize an empty krb5\_keyblock .}
7477\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)}
7478
7479\begin{fulllineitems}
7480\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}}{}
7481\end{fulllineitems}
7482
7483\begin{quote}\begin{description}
7484\item[{param}] \leavevmode
7485\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7486
7487\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
7488
7489\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{length} - Length of keyblock (or 0)
7490
7491\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - New keyblock structure
7492
7493\end{description}\end{quote}
7494\begin{quote}\begin{description}
7495\item[{retval}] \leavevmode\begin{itemize}
7496\item {}
74970   Success; otherwise - Kerberos error codes
7498
7499\end{itemize}
7500
7501\end{description}\end{quote}
7502
7503Initialize 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.
7504
7505\begin{sphinxadmonition}{note}{Note:}
7506If \sphinxstyleemphasis{length} is set to 0, contents are left unallocated.
7507\end{sphinxadmonition}
7508
7509
7510\subsubsection{krb5\_is\_referral\_realm -  Check for a match with KRB5\_REFERRAL\_REALM.}
7511\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)}
7512
7513\begin{fulllineitems}
7514\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}}{}
7515\end{fulllineitems}
7516
7517\begin{quote}\begin{description}
7518\item[{param}] \leavevmode
7519\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{r} - Realm to check
7520
7521\end{description}\end{quote}
7522\begin{quote}\begin{description}
7523\item[{return}] \leavevmode\begin{itemize}
7524\item {}
7525TRUE if r is zero-length, FALSE otherwise
7526
7527\end{itemize}
7528
7529\end{description}\end{quote}
7530
7531
7532\subsubsection{krb5\_kt\_add\_entry -  Add a new entry to a key table.}
7533\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)}
7534
7535\begin{fulllineitems}
7536\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}}{}
7537\end{fulllineitems}
7538
7539\begin{quote}\begin{description}
7540\item[{param}] \leavevmode
7541\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7542
7543\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{id} - Key table handle
7544
7545\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{entry} - Entry to be added
7546
7547\end{description}\end{quote}
7548\begin{quote}\begin{description}
7549\item[{retval}] \leavevmode\begin{itemize}
7550\item {}
75510   Success
7552
7553\item {}
7554ENOMEM   Insufficient memory
7555
7556\item {}
7557KRB5\_KT\_NOWRITE   Key table is not writeable
7558
7559\end{itemize}
7560
7561\item[{return}] \leavevmode\begin{itemize}
7562\item {}
7563Kerberos error codes
7564
7565\end{itemize}
7566
7567\end{description}\end{quote}
7568
7569
7570\subsubsection{krb5\_kt\_end\_seq\_get -  Release a keytab cursor.}
7571\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)}
7572
7573\begin{fulllineitems}
7574\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}}{}
7575\end{fulllineitems}
7576
7577\begin{quote}\begin{description}
7578\item[{param}] \leavevmode
7579\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7580
7581\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle
7582
7583\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cursor} - Cursor
7584
7585\end{description}\end{quote}
7586\begin{quote}\begin{description}
7587\item[{retval}] \leavevmode\begin{itemize}
7588\item {}
75890   Success
7590
7591\end{itemize}
7592
7593\item[{return}] \leavevmode\begin{itemize}
7594\item {}
7595Kerberos error codes
7596
7597\end{itemize}
7598
7599\end{description}\end{quote}
7600
7601This 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()}}}} .
7602
7603
7604\subsubsection{krb5\_kt\_get\_entry -  Get an entry from a key table.}
7605\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)}
7606
7607\begin{fulllineitems}
7608\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}}{}
7609\end{fulllineitems}
7610
7611\begin{quote}\begin{description}
7612\item[{param}] \leavevmode
7613\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7614
7615\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle
7616
7617\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal name
7618
7619\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{vno} - Key version number (0 for highest available)
7620
7621\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type (0 zero for any enctype)
7622
7623\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{entry} - Returned entry from key table
7624
7625\end{description}\end{quote}
7626\begin{quote}\begin{description}
7627\item[{retval}] \leavevmode\begin{itemize}
7628\item {}
76290   Success
7630
7631\item {}
7632Kerberos   error codes on failure
7633
7634\end{itemize}
7635
7636\end{description}\end{quote}
7637
7638Retrieve 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.
7639
7640Use {\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.
7641
7642\begin{sphinxadmonition}{note}{Note:}
7643If \sphinxstyleemphasis{vno} is zero, the function retrieves the highest-numbered-kvno entry that matches the specified principal.
7644\end{sphinxadmonition}
7645
7646
7647\subsubsection{krb5\_kt\_have\_content -  Check if a keytab exists and contains entries.}
7648\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)}
7649
7650\begin{fulllineitems}
7651\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}}{}
7652\end{fulllineitems}
7653
7654\begin{quote}\begin{description}
7655\item[{param}] \leavevmode
7656\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7657
7658\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle
7659
7660\end{description}\end{quote}
7661\begin{quote}\begin{description}
7662\item[{retval}] \leavevmode\begin{itemize}
7663\item {}
76640   Keytab exists and contains entries
7665
7666\item {}
7667KRB5\_KT\_NOTFOUND   Keytab does not contain entries
7668
7669\end{itemize}
7670
7671\end{description}\end{quote}
7672
7673\begin{sphinxadmonition}{note}{Note:}
7674New in 1.11
7675\end{sphinxadmonition}
7676
7677
7678\subsubsection{krb5\_kt\_next\_entry -  Retrieve the next entry from the key table.}
7679\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)}
7680
7681\begin{fulllineitems}
7682\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}}{}
7683\end{fulllineitems}
7684
7685\begin{quote}\begin{description}
7686\item[{param}] \leavevmode
7687\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7688
7689\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle
7690
7691\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{entry} - Returned key table entry
7692
7693\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cursor} - Key table cursor
7694
7695\end{description}\end{quote}
7696\begin{quote}\begin{description}
7697\item[{retval}] \leavevmode\begin{itemize}
7698\item {}
76990   Success
7700
7701\item {}
7702KRB5\_KT\_END   - if the last entry was reached
7703
7704\end{itemize}
7705
7706\item[{return}] \leavevmode\begin{itemize}
7707\item {}
7708Kerberos error codes
7709
7710\end{itemize}
7711
7712\end{description}\end{quote}
7713
7714Return 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()}}}} .
7715
7716
7717\subsubsection{krb5\_kt\_read\_service\_key -  Retrieve a service key from a key table.}
7718\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)}
7719
7720\begin{fulllineitems}
7721\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}}{}
7722\end{fulllineitems}
7723
7724\begin{quote}\begin{description}
7725\item[{param}] \leavevmode
7726\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7727
7728\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyprocarg} - Name of a key table (NULL to use default name)
7729
7730\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Service principal
7731
7732\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{vno} - Key version number (0 for highest available)
7733
7734\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type (0 for any type)
7735
7736\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Service key from key table
7737
7738\end{description}\end{quote}
7739\begin{quote}\begin{description}
7740\item[{retval}] \leavevmode\begin{itemize}
7741\item {}
77420   Success
7743
7744\end{itemize}
7745
7746\item[{return}] \leavevmode\begin{itemize}
7747\item {}
7748Kerberos error code if not found or keyprocarg is invalid.
7749
7750\end{itemize}
7751
7752\end{description}\end{quote}
7753
7754Open 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.
7755
7756The default key table is used, unless \sphinxstyleemphasis{keyprocarg} is non-null. \sphinxstyleemphasis{keyprocarg} designates a specific key table.
7757
7758Use {\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.
7759
7760
7761\subsubsection{krb5\_kt\_remove\_entry -  Remove an entry from a key table.}
7762\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)}
7763
7764\begin{fulllineitems}
7765\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}}{}
7766\end{fulllineitems}
7767
7768\begin{quote}\begin{description}
7769\item[{param}] \leavevmode
7770\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7771
7772\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{id} - Key table handle
7773
7774\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{entry} - Entry to remove from key table
7775
7776\end{description}\end{quote}
7777\begin{quote}\begin{description}
7778\item[{retval}] \leavevmode\begin{itemize}
7779\item {}
77800   Success
7781
7782\item {}
7783KRB5\_KT\_NOWRITE   Key table is not writable
7784
7785\end{itemize}
7786
7787\item[{return}] \leavevmode\begin{itemize}
7788\item {}
7789Kerberos error codes
7790
7791\end{itemize}
7792
7793\end{description}\end{quote}
7794
7795
7796\subsubsection{krb5\_kt\_start\_seq\_get -  Start a sequential retrieval of key table entries.}
7797\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)}
7798
7799\begin{fulllineitems}
7800\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}}{}
7801\end{fulllineitems}
7802
7803\begin{quote}\begin{description}
7804\item[{param}] \leavevmode
7805\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7806
7807\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table handle
7808
7809\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cursor} - Cursor
7810
7811\end{description}\end{quote}
7812\begin{quote}\begin{description}
7813\item[{retval}] \leavevmode\begin{itemize}
7814\item {}
78150   Success
7816
7817\end{itemize}
7818
7819\item[{return}] \leavevmode\begin{itemize}
7820\item {}
7821Kerberos error codes
7822
7823\end{itemize}
7824
7825\end{description}\end{quote}
7826
7827Prepare 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.
7828
7829
7830\subsubsection{krb5\_make\_authdata\_kdc\_issued -  Encode and sign AD-KDCIssued authorization data.}
7831\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)}
7832
7833\begin{fulllineitems}
7834\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}}{}
7835\end{fulllineitems}
7836
7837\begin{quote}\begin{description}
7838\item[{param}] \leavevmode
7839\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7840
7841\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Session key
7842
7843\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{issuer} - The name of the issuing principal
7844
7845\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authdata} - List of authorization data to be signed
7846
7847\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ad\_kdcissued} - List containing AD-KDCIssued authdata
7848
7849\end{description}\end{quote}
7850
7851This 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.
7852
7853
7854\subsubsection{krb5\_merge\_authdata -  Merge two authorization data lists into a new list.}
7855\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)}
7856
7857\begin{fulllineitems}
7858\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}}{}
7859\end{fulllineitems}
7860
7861\begin{quote}\begin{description}
7862\item[{param}] \leavevmode
7863\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7864
7865\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inauthdat1} - First list of \sphinxstyleemphasis{krb5\_authdata} structures
7866
7867\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inauthdat2} - Second list of \sphinxstyleemphasis{krb5\_authdata} structures
7868
7869\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outauthdat} - Merged list of \sphinxstyleemphasis{krb5\_authdata} structures
7870
7871\end{description}\end{quote}
7872\begin{quote}\begin{description}
7873\item[{retval}] \leavevmode\begin{itemize}
7874\item {}
78750   Success; otherwise - Kerberos error codes
7876
7877\end{itemize}
7878
7879\end{description}\end{quote}
7880
7881Merge 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.
7882
7883\begin{sphinxadmonition}{note}{Note:}
7884The last array entry in \sphinxstyleemphasis{inauthdat1} and \sphinxstyleemphasis{inauthdat2} must be a NULL pointer.
7885\end{sphinxadmonition}
7886
7887
7888\subsubsection{krb5\_mk\_1cred -  Format a KRB-CRED message for a single set of credentials.}
7889\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)}
7890
7891\begin{fulllineitems}
7892\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}}{}
7893\end{fulllineitems}
7894
7895\begin{quote}\begin{description}
7896\item[{param}] \leavevmode
7897\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7898
7899\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
7900
7901\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Pointer to credentials
7902
7903\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{der\_out} - Encoded credentials
7904
7905\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay cache data (NULL if not needed)
7906
7907\end{description}\end{quote}
7908\begin{quote}\begin{description}
7909\item[{retval}] \leavevmode\begin{itemize}
7910\item {}
79110   Success
7912
7913\item {}
7914ENOMEM   Insufficient memory
7915
7916\item {}
7917KRB5\_RC\_REQUIRED   Message replay detection requires rcache parameter
7918
7919\end{itemize}
7920
7921\item[{return}] \leavevmode\begin{itemize}
7922\item {}
7923Kerberos error codes
7924
7925\end{itemize}
7926
7927\end{description}\end{quote}
7928
7929This 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.
7930
7931
7932\subsubsection{krb5\_mk\_error -  Format and encode a KRB\_ERROR message.}
7933\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)}
7934
7935\begin{fulllineitems}
7936\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}}{}
7937\end{fulllineitems}
7938
7939\begin{quote}\begin{description}
7940\item[{param}] \leavevmode
7941\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7942
7943\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{dec\_err} - Error structure to be encoded
7944
7945\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{enc\_err} - Encoded error structure
7946
7947\end{description}\end{quote}
7948\begin{quote}\begin{description}
7949\item[{retval}] \leavevmode\begin{itemize}
7950\item {}
79510   Success; otherwise - Kerberos error codes
7952
7953\end{itemize}
7954
7955\end{description}\end{quote}
7956
7957This 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.
7958
7959
7960\subsubsection{krb5\_mk\_ncred -  Format a KRB-CRED message for an array of credentials.}
7961\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)}
7962
7963\begin{fulllineitems}
7964\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}}{}
7965\end{fulllineitems}
7966
7967\begin{quote}\begin{description}
7968\item[{param}] \leavevmode
7969\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
7970
7971\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
7972
7973\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Null-terminated array of credentials
7974
7975\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{der\_out} - Encoded credentials
7976
7977\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay cache information (NULL if not needed)
7978
7979\end{description}\end{quote}
7980\begin{quote}\begin{description}
7981\item[{retval}] \leavevmode\begin{itemize}
7982\item {}
79830   Success
7984
7985\item {}
7986ENOMEM   Insufficient memory
7987
7988\item {}
7989KRB5\_RC\_REQUIRED   Message replay detection requires rcache parameter
7990
7991\end{itemize}
7992
7993\item[{return}] \leavevmode\begin{itemize}
7994\item {}
7995Kerberos error codes
7996
7997\end{itemize}
7998
7999\end{description}\end{quote}
8000
8001This 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()}}}} .
8002
8003The 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.
8004
8005If 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} .
8006
8007If 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} .
8008
8009Use {\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.
8010
8011The 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.
8012
8013\begin{sphinxadmonition}{note}{Note:}
8014The \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} .
8015\end{sphinxadmonition}
8016
8017
8018\subsubsection{krb5\_mk\_priv -  Format a KRB-PRIV message.}
8019\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)}
8020
8021\begin{fulllineitems}
8022\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}}{}
8023\end{fulllineitems}
8024
8025\begin{quote}\begin{description}
8026\item[{param}] \leavevmode
8027\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8028
8029\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
8030
8031\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{userdata} - User data for \sphinxstylestrong{KRB-PRIV} message
8032
8033\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{der\_out} - Formatted \sphinxstylestrong{KRB-PRIV} message
8034
8035\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay data (NULL if not needed)
8036
8037\end{description}\end{quote}
8038\begin{quote}\begin{description}
8039\item[{retval}] \leavevmode\begin{itemize}
8040\item {}
80410   Success; otherwise - Kerberos error codes
8042
8043\end{itemize}
8044
8045\end{description}\end{quote}
8046
8047This 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.
8048
8049The 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.
8050
8051If 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} .
8052
8053If 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} .
8054
8055Use {\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.
8056
8057\begin{sphinxadmonition}{note}{Note:}
8058The \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} .
8059\end{sphinxadmonition}
8060
8061
8062\subsubsection{krb5\_mk\_rep -  Format and encrypt a KRB\_AP\_REP message.}
8063\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)}
8064
8065\begin{fulllineitems}
8066\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}}{}
8067\end{fulllineitems}
8068
8069\begin{quote}\begin{description}
8070\item[{param}] \leavevmode
8071\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8072
8073\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
8074
8075\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} - \sphinxstylestrong{AP-REP} message
8076
8077\end{description}\end{quote}
8078\begin{quote}\begin{description}
8079\item[{retval}] \leavevmode\begin{itemize}
8080\item {}
80810   Success; otherwise - Kerberos error codes
8082
8083\end{itemize}
8084
8085\end{description}\end{quote}
8086
8087This function fills in \sphinxstyleemphasis{outbuf} with an AP-REP message using information from \sphinxstyleemphasis{auth\_context} .
8088
8089If 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().
8090
8091Use {\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.
8092
8093
8094\subsubsection{krb5\_mk\_rep\_dce -  Format and encrypt a KRB\_AP\_REP message for DCE RPC.}
8095\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)}
8096
8097\begin{fulllineitems}
8098\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}}{}
8099\end{fulllineitems}
8100
8101\begin{quote}\begin{description}
8102\item[{param}] \leavevmode
8103\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8104
8105\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
8106
8107\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} - \sphinxstylestrong{AP-REP} message
8108
8109\end{description}\end{quote}
8110\begin{quote}\begin{description}
8111\item[{retval}] \leavevmode\begin{itemize}
8112\item {}
81130   Success; otherwise - Kerberos error codes
8114
8115\end{itemize}
8116
8117\end{description}\end{quote}
8118
8119Use {\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.
8120
8121
8122\subsubsection{krb5\_mk\_req -  Create a KRB\_AP\_REQ message.}
8123\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)}
8124
8125\begin{fulllineitems}
8126\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}}{}
8127\end{fulllineitems}
8128
8129\begin{quote}\begin{description}
8130\item[{param}] \leavevmode
8131\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8132
8133\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} - Pre-existing or newly created auth context
8134
8135\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_options} - \sphinxcode{AP\_OPTS} options
8136
8137\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{service} - Service name, or NULL to use \sphinxstylestrong{“host”}
8138
8139\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{hostname} - Host name, or NULL to use local hostname
8140
8141\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_data} - Application data to be checksummed in the authenticator, or NULL
8142
8143\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache used to obtain credentials for the desired service.
8144
8145\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} - \sphinxstylestrong{AP-REQ} message
8146
8147\end{description}\end{quote}
8148\begin{quote}\begin{description}
8149\item[{retval}] \leavevmode\begin{itemize}
8150\item {}
81510   Success; otherwise - Kerberos error codes
8152
8153\end{itemize}
8154
8155\end{description}\end{quote}
8156
8157This 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.
8158
8159Use {\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.
8160
8161
8162\subsubsection{krb5\_mk\_req\_extended -  Create a KRB\_AP\_REQ message using supplied credentials.}
8163\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)}
8164
8165\begin{fulllineitems}
8166\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}}{}
8167\end{fulllineitems}
8168
8169\begin{quote}\begin{description}
8170\item[{param}] \leavevmode
8171\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8172
8173\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} - Pre-existing or newly created auth context
8174
8175\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_options} - \sphinxcode{AP\_OPTS} options
8176
8177\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_data} - Application data to be checksummed in the authenticator, or NULL
8178
8179\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_creds} - Credentials for the service with valid ticket and key
8180
8181\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{outbuf} - \sphinxstylestrong{AP-REQ} message
8182
8183\end{description}\end{quote}
8184\begin{quote}\begin{description}
8185\item[{retval}] \leavevmode\begin{itemize}
8186\item {}
81870   Success; otherwise - Kerberos error codes
8188
8189\end{itemize}
8190
8191\end{description}\end{quote}
8192
8193Valid \sphinxstyleemphasis{ap\_req\_options} are:
8194\begin{quote}
8195\begin{itemize}
8196\item {}
8197{\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.
8198
8199\item {}
8200{\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.
8201
8202\item {}
8203{\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.
8204
8205\end{itemize}
8206
8207This 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.
8208\end{quote}
8209
8210On 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.)
8211
8212
8213\sphinxstrong{See also:}
8214
8215
8216{\hyperref[\detokenize{appdev/refs/api/krb5_mk_req:c.krb5_mk_req}]{\sphinxcrossref{\sphinxcode{krb5\_mk\_req()}}}}
8217
8218
8219
8220
8221\subsubsection{krb5\_mk\_safe -  Format a KRB-SAFE message.}
8222\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)}
8223
8224\begin{fulllineitems}
8225\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}}{}
8226\end{fulllineitems}
8227
8228\begin{quote}\begin{description}
8229\item[{param}] \leavevmode
8230\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8231
8232\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
8233
8234\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{userdata} - User data in the message
8235
8236\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{der\_out} - Formatted \sphinxstylestrong{KRB-SAFE} buffer
8237
8238\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay data. Specify NULL if not needed
8239
8240\end{description}\end{quote}
8241\begin{quote}\begin{description}
8242\item[{retval}] \leavevmode\begin{itemize}
8243\item {}
82440   Success; otherwise - Kerberos error codes
8245
8246\end{itemize}
8247
8248\end{description}\end{quote}
8249
8250This function creates an integrity protected \sphinxstylestrong{KRB-SAFE} message using data supplied by the application.
8251
8252Fields 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.
8253
8254The 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.
8255
8256If 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} .
8257
8258If 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} .
8259
8260Use {\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.
8261
8262\begin{sphinxadmonition}{note}{Note:}
8263The \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} .
8264\end{sphinxadmonition}
8265
8266
8267\subsubsection{krb5\_os\_localaddr -  Return all interface addresses for this host.}
8268\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)}
8269
8270\begin{fulllineitems}
8271\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}}{}
8272\end{fulllineitems}
8273
8274\begin{quote}\begin{description}
8275\item[{param}] \leavevmode
8276\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8277
8278\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{addr} - Array of krb5\_address pointers, ending with NULL
8279
8280\end{description}\end{quote}
8281\begin{quote}\begin{description}
8282\item[{retval}] \leavevmode\begin{itemize}
8283\item {}
82840   Success; otherwise - Kerberos error codes
8285
8286\end{itemize}
8287
8288\end{description}\end{quote}
8289
8290Use {\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.
8291
8292
8293\subsubsection{krb5\_pac\_add\_buffer -  Add a buffer to a PAC handle.}
8294\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)}
8295
8296\begin{fulllineitems}
8297\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}}{}
8298\end{fulllineitems}
8299
8300\begin{quote}\begin{description}
8301\item[{param}] \leavevmode
8302\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8303
8304\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle
8305
8306\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - Buffer type
8307
8308\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - contents
8309
8310\end{description}\end{quote}
8311\begin{quote}\begin{description}
8312\item[{retval}] \leavevmode\begin{itemize}
8313\item {}
83140   Success; otherwise - Kerberos error codes
8315
8316\end{itemize}
8317
8318\end{description}\end{quote}
8319
8320This 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.
8321
8322The valid values of \sphinxstyleemphasis{type} is one of the following:
8323\begin{itemize}
8324\item {}
8325{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_LOGON_INFO:KRB5_PAC_LOGON_INFO}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_LOGON\_INFO}}}} - Logon information
8326
8327\item {}
8328{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_CREDENTIALS_INFO:KRB5_PAC_CREDENTIALS_INFO}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_CREDENTIALS\_INFO}}}} - Credentials information
8329
8330\item {}
8331{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM:KRB5_PAC_SERVER_CHECKSUM}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_SERVER\_CHECKSUM}}}} - Server checksum
8332
8333\item {}
8334{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM:KRB5_PAC_PRIVSVR_CHECKSUM}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_PRIVSVR\_CHECKSUM}}}} - KDC checksum
8335
8336\item {}
8337{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_INFO:KRB5_PAC_CLIENT_INFO}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_CLIENT\_INFO}}}} - Client name and ticket information
8338
8339\item {}
8340{\hyperref[\detokenize{appdev/refs/macros/KRB5_PAC_DELEGATION_INFO:KRB5_PAC_DELEGATION_INFO}]{\sphinxcrossref{\sphinxcode{KRB5\_PAC\_DELEGATION\_INFO}}}} - Constrained delegation information
8341
8342\item {}
8343{\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
8344
8345\end{itemize}
8346
8347
8348\subsubsection{krb5\_pac\_free -  Free a PAC handle.}
8349\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)}
8350
8351\begin{fulllineitems}
8352\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}}{}
8353\end{fulllineitems}
8354
8355\begin{quote}\begin{description}
8356\item[{param}] \leavevmode
8357\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8358
8359\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC to be freed
8360
8361\end{description}\end{quote}
8362
8363This function frees the contents of \sphinxstyleemphasis{pac} and the structure itself.
8364
8365
8366\subsubsection{krb5\_pac\_get\_buffer -  Retrieve a buffer value from a PAC.}
8367\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)}
8368
8369\begin{fulllineitems}
8370\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}}{}
8371\end{fulllineitems}
8372
8373\begin{quote}\begin{description}
8374\item[{param}] \leavevmode
8375\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8376
8377\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle
8378
8379\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - Type of buffer to retrieve
8380
8381\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} - Buffer value
8382
8383\end{description}\end{quote}
8384\begin{quote}\begin{description}
8385\item[{retval}] \leavevmode\begin{itemize}
8386\item {}
83870   Success; otherwise - Kerberos error codes
8388
8389\end{itemize}
8390
8391\end{description}\end{quote}
8392
8393Use {\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.
8394
8395
8396\subsubsection{krb5\_pac\_get\_types -  Return an array of buffer types in a PAC handle.}
8397\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)}
8398
8399\begin{fulllineitems}
8400\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}}{}
8401\end{fulllineitems}
8402
8403\begin{quote}\begin{description}
8404\item[{param}] \leavevmode
8405\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8406
8407\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle
8408
8409\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{len} - Number of entries in \sphinxstyleemphasis{types}
8410
8411\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{types} - Array of buffer types
8412
8413\end{description}\end{quote}
8414\begin{quote}\begin{description}
8415\item[{retval}] \leavevmode\begin{itemize}
8416\item {}
84170   Success; otherwise - Kerberos error codes
8418
8419\end{itemize}
8420
8421\end{description}\end{quote}
8422
8423
8424\subsubsection{krb5\_pac\_init -  Create an empty Privilege Attribute Certificate (PAC) handle.}
8425\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)}
8426
8427\begin{fulllineitems}
8428\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}}{}
8429\end{fulllineitems}
8430
8431\begin{quote}\begin{description}
8432\item[{param}] \leavevmode
8433\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8434
8435\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{pac} - New PAC handle
8436
8437\end{description}\end{quote}
8438\begin{quote}\begin{description}
8439\item[{retval}] \leavevmode\begin{itemize}
8440\item {}
84410   Success; otherwise - Kerberos error codes
8442
8443\end{itemize}
8444
8445\end{description}\end{quote}
8446
8447Use {\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.
8448
8449
8450\subsubsection{krb5\_pac\_parse -  Unparse an encoded PAC into a new handle.}
8451\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)}
8452
8453\begin{fulllineitems}
8454\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}}{}
8455\end{fulllineitems}
8456
8457\begin{quote}\begin{description}
8458\item[{param}] \leavevmode
8459\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8460
8461\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ptr} - PAC buffer
8462
8463\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{len} - Length of \sphinxstyleemphasis{ptr}
8464
8465\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{pac} - PAC handle
8466
8467\end{description}\end{quote}
8468\begin{quote}\begin{description}
8469\item[{retval}] \leavevmode\begin{itemize}
8470\item {}
84710   Success; otherwise - Kerberos error codes
8472
8473\end{itemize}
8474
8475\end{description}\end{quote}
8476
8477Use {\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.
8478
8479
8480\subsubsection{krb5\_pac\_sign -  Sign a PAC.}
8481\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)}
8482
8483\begin{fulllineitems}
8484\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}}{}
8485\end{fulllineitems}
8486
8487\begin{quote}\begin{description}
8488\item[{param}] \leavevmode
8489\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8490
8491\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle
8492
8493\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authtime} - Expected timestamp
8494
8495\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Expected principal name (or NULL)
8496
8497\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server\_key} - Key for server checksum
8498
8499\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{privsvr\_key} - Key for KDC checksum
8500
8501\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} - Signed PAC encoding
8502
8503\end{description}\end{quote}
8504
8505This 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.
8506
8507\begin{sphinxadmonition}{note}{Note:}
8508New in 1.10
8509\end{sphinxadmonition}
8510
8511
8512\subsubsection{krb5\_pac\_sign\_ext -  Sign a PAC, possibly with a specified realm.}
8513\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)}
8514
8515\begin{fulllineitems}
8516\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}}{}
8517\end{fulllineitems}
8518
8519\begin{quote}\begin{description}
8520\item[{param}] \leavevmode
8521\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8522
8523\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle
8524
8525\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authtime} - Expected timestamp
8526
8527\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Principal name (or NULL)
8528
8529\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server\_key} - Key for server checksum
8530
8531\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{privsvr\_key} - Key for KDC checksum
8532
8533\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{with\_realm} - If true, include the realm of \sphinxstyleemphasis{principal}
8534
8535\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} - Signed PAC encoding
8536
8537\end{description}\end{quote}
8538
8539This 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.
8540
8541\begin{sphinxadmonition}{note}{Note:}
8542New in 1.17
8543\end{sphinxadmonition}
8544
8545
8546\subsubsection{krb5\_pac\_verify -  Verify a PAC.}
8547\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)}
8548
8549\begin{fulllineitems}
8550\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}}{}
8551\end{fulllineitems}
8552
8553\begin{quote}\begin{description}
8554\item[{param}] \leavevmode
8555\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8556
8557\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle
8558
8559\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authtime} - Expected timestamp
8560
8561\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Expected principal name (or NULL)
8562
8563\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Key to validate server checksum (or NULL)
8564
8565\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{privsvr} - Key to validate KDC checksum (or NULL)
8566
8567\end{description}\end{quote}
8568\begin{quote}\begin{description}
8569\item[{retval}] \leavevmode\begin{itemize}
8570\item {}
85710   Success; otherwise - Kerberos error codes
8572
8573\end{itemize}
8574
8575\end{description}\end{quote}
8576
8577This 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.
8578
8579If successful, \sphinxstyleemphasis{pac} is marked as verified.
8580
8581\begin{sphinxadmonition}{note}{Note:}
8582A 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.
8583\end{sphinxadmonition}
8584
8585
8586\subsubsection{krb5\_pac\_verify\_ext -  Verify a PAC, possibly from a specified realm.}
8587\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)}
8588
8589\begin{fulllineitems}
8590\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}}{}
8591\end{fulllineitems}
8592
8593\begin{quote}\begin{description}
8594\item[{param}] \leavevmode
8595\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8596
8597\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pac} - PAC handle
8598
8599\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authtime} - Expected timestamp
8600
8601\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{principal} - Expected principal name (or NULL)
8602
8603\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Key to validate server checksum (or NULL)
8604
8605\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{privsvr} - Key to validate KDC checksum (or NULL)
8606
8607\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{with\_realm} - If true, expect the realm of \sphinxstyleemphasis{principal}
8608
8609\end{description}\end{quote}
8610
8611This 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.
8612
8613\begin{sphinxadmonition}{note}{Note:}
8614New in 1.17
8615\end{sphinxadmonition}
8616
8617
8618\subsubsection{krb5\_pac\_get\_client\_info}
8619\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)}
8620
8621\begin{fulllineitems}
8622\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}}{}
8623\end{fulllineitems}
8624
8625\begin{quote}\begin{description}
8626\item[{param}] \leavevmode
8627\sphinxstylestrong{context}
8628
8629\sphinxstylestrong{pac}
8630
8631\sphinxstylestrong{authtime\_out}
8632
8633\sphinxstylestrong{princname\_out}
8634
8635\end{description}\end{quote}
8636
8637
8638\subsubsection{krb5\_prepend\_error\_message -  Add a prefix to the message for an error code.}
8639\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)}
8640
8641\begin{fulllineitems}
8642\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}, ...}{}
8643\end{fulllineitems}
8644
8645\begin{quote}\begin{description}
8646\item[{param}] \leavevmode
8647\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
8648
8649\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code
8650
8651\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} - Format string for error message prefix
8652
8653\end{description}\end{quote}
8654
8655Format 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.
8656
8657
8658\subsubsection{krb5\_principal2salt -  Convert a principal name into the default salt for that principal.}
8659\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)}
8660
8661\begin{fulllineitems}
8662\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}}{}
8663\end{fulllineitems}
8664
8665\begin{quote}\begin{description}
8666\item[{param}] \leavevmode
8667\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8668
8669\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pr} - Principal name
8670
8671\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ret} - Default salt for \sphinxstyleemphasis{pr} to be filled in
8672
8673\end{description}\end{quote}
8674\begin{quote}\begin{description}
8675\item[{retval}] \leavevmode\begin{itemize}
8676\item {}
86770   Success; otherwise - Kerberos error codes
8678
8679\end{itemize}
8680
8681\end{description}\end{quote}
8682
8683
8684\subsubsection{krb5\_rd\_cred -  Read and validate a KRB-CRED message.}
8685\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)}
8686
8687\begin{fulllineitems}
8688\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}}{}
8689\end{fulllineitems}
8690
8691\begin{quote}\begin{description}
8692\item[{param}] \leavevmode
8693\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8694
8695\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
8696
8697\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creddata} - \sphinxstylestrong{KRB-CRED} message
8698
8699\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds\_out} - Null-terminated array of forwarded credentials
8700
8701\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay data (NULL if not needed)
8702
8703\end{description}\end{quote}
8704\begin{quote}\begin{description}
8705\item[{retval}] \leavevmode\begin{itemize}
8706\item {}
87070   Success; otherwise - Kerberos error codes
8708
8709\end{itemize}
8710
8711\end{description}\end{quote}
8712\begin{quote}
8713
8714\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.
8715\end{quote}
8716
8717Use {\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.
8718
8719\begin{sphinxadmonition}{note}{Note:}
8720The \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} .{}`
8721\end{sphinxadmonition}
8722
8723
8724\subsubsection{krb5\_rd\_error -  Decode a KRB-ERROR message.}
8725\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)}
8726
8727\begin{fulllineitems}
8728\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}}{}
8729\end{fulllineitems}
8730
8731\begin{quote}\begin{description}
8732\item[{param}] \leavevmode
8733\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8734
8735\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enc\_errbuf} - Encoded error message
8736
8737\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{dec\_error} - Decoded error message
8738
8739\end{description}\end{quote}
8740\begin{quote}\begin{description}
8741\item[{retval}] \leavevmode\begin{itemize}
8742\item {}
87430   Success; otherwise - Kerberos error codes
8744
8745\end{itemize}
8746
8747\end{description}\end{quote}
8748
8749This 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.
8750
8751
8752\subsubsection{krb5\_rd\_priv -  Process a KRB-PRIV message.}
8753\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)}
8754
8755\begin{fulllineitems}
8756\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}}{}
8757\end{fulllineitems}
8758
8759\begin{quote}\begin{description}
8760\item[{param}] \leavevmode
8761\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8762
8763\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication structure
8764
8765\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} - \sphinxstylestrong{KRB-PRIV} message to be parsed
8766
8767\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{userdata\_out} - Data parsed from \sphinxstylestrong{KRB-PRIV} message
8768
8769\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay data. Specify NULL if not needed
8770
8771\end{description}\end{quote}
8772\begin{quote}\begin{description}
8773\item[{retval}] \leavevmode\begin{itemize}
8774\item {}
87750   Success; otherwise - Kerberos error codes
8776
8777\end{itemize}
8778
8779\end{description}\end{quote}
8780
8781This function parses a \sphinxstylestrong{KRB-PRIV} message, verifies its integrity, and stores its unencrypted data into \sphinxstyleemphasis{userdata\_out} .
8782
8783If \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.
8784
8785If 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.
8786
8787If 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.
8788
8789Use {\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.
8790
8791\begin{sphinxadmonition}{note}{Note:}
8792The \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} .
8793\end{sphinxadmonition}
8794
8795
8796\subsubsection{krb5\_rd\_rep -  Parse and decrypt a KRB\_AP\_REP message.}
8797\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)}
8798
8799\begin{fulllineitems}
8800\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}}{}
8801\end{fulllineitems}
8802
8803\begin{quote}\begin{description}
8804\item[{param}] \leavevmode
8805\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8806
8807\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
8808
8809\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} - AP-REP message
8810
8811\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{repl} - Decrypted reply message
8812
8813\end{description}\end{quote}
8814\begin{quote}\begin{description}
8815\item[{retval}] \leavevmode\begin{itemize}
8816\item {}
88170   Success; otherwise - Kerberos error codes
8818
8819\end{itemize}
8820
8821\end{description}\end{quote}
8822
8823This 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.
8824
8825Use {\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.
8826
8827
8828\subsubsection{krb5\_rd\_rep\_dce -  Parse and decrypt a KRB\_AP\_REP message for DCE RPC.}
8829\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)}
8830
8831\begin{fulllineitems}
8832\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}}{}
8833\end{fulllineitems}
8834
8835\begin{quote}\begin{description}
8836\item[{param}] \leavevmode
8837\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8838
8839\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
8840
8841\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} - AP-REP message
8842
8843\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{nonce} - Sequence number from the decrypted reply
8844
8845\end{description}\end{quote}
8846\begin{quote}\begin{description}
8847\item[{retval}] \leavevmode\begin{itemize}
8848\item {}
88490   Success; otherwise - Kerberos error codes
8850
8851\end{itemize}
8852
8853\end{description}\end{quote}
8854
8855This function parses, decrypts and verifies a message from \sphinxstyleemphasis{inbuf} and fills in \sphinxstyleemphasis{nonce} with a decrypted reply sequence number.
8856
8857
8858\subsubsection{krb5\_rd\_req -  Parse and decrypt a KRB\_AP\_REQ message.}
8859\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)}
8860
8861\begin{fulllineitems}
8862\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}}{}
8863\end{fulllineitems}
8864
8865\begin{quote}\begin{description}
8866\item[{param}] \leavevmode
8867\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8868
8869\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} - Pre-existing or newly created auth context
8870
8871\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} - AP-REQ message to be parsed
8872
8873\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Matching principal for server, or NULL to allow any principal in keytab
8874
8875\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table, or NULL to use the default
8876
8877\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ap\_req\_options} - If non-null, the AP-REQ flags on output
8878
8879\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ticket} - If non-null, ticket from the AP-REQ message
8880
8881\end{description}\end{quote}
8882\begin{quote}\begin{description}
8883\item[{retval}] \leavevmode\begin{itemize}
8884\item {}
88850   Success; otherwise - Kerberos error codes
8886
8887\end{itemize}
8888
8889\end{description}\end{quote}
8890
8891This function parses, decrypts and verifies a AP-REQ message from \sphinxstyleemphasis{inbuf} and stores the authenticator in \sphinxstyleemphasis{auth\_context} .
8892
8893If 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.
8894
8895Otherwise, 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:
8896\begin{itemize}
8897\item {}
8898If \sphinxstyleemphasis{server} is a complete principal name, then its entry in \sphinxstyleemphasis{keytab} is tried.
8899
8900\item {}
8901Otherwise, if \sphinxstyleemphasis{keytab} is iterable, then all entries in \sphinxstyleemphasis{keytab} which match \sphinxstyleemphasis{server} are tried.
8902
8903\item {}
8904Otherwise, the server principal in the ticket must match \sphinxstyleemphasis{server} , and its entry in \sphinxstyleemphasis{keytab} is tried.
8905
8906\end{itemize}
8907
8908The client specified in the decrypted authenticator must match the client specified in the decrypted ticket.
8909
8910If the \sphinxstyleemphasis{remote\_addr} field of \sphinxstyleemphasis{auth\_context} is set, the request must come from that address.
8911
8912If 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} .
8913
8914Various other checks are performed on the decoded data, including cross-realm policy, clockskew, and ticket validation times.
8915
8916On 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.
8917
8918Use {\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.
8919
8920
8921\subsubsection{krb5\_rd\_safe -  Process KRB-SAFE message.}
8922\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)}
8923
8924\begin{fulllineitems}
8925\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}}{}
8926\end{fulllineitems}
8927
8928\begin{quote}\begin{description}
8929\item[{param}] \leavevmode
8930\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8931
8932\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
8933
8934\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inbuf} - \sphinxstylestrong{KRB-SAFE} message to be parsed
8935
8936\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{userdata\_out} - Data parsed from \sphinxstylestrong{KRB-SAFE} message
8937
8938\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rdata\_out} - Replay data. Specify NULL if not needed
8939
8940\end{description}\end{quote}
8941\begin{quote}\begin{description}
8942\item[{retval}] \leavevmode\begin{itemize}
8943\item {}
89440   Success; otherwise - Kerberos error codes
8945
8946\end{itemize}
8947
8948\end{description}\end{quote}
8949
8950This function parses a \sphinxstylestrong{KRB-SAFE} message, verifies its integrity, and stores its data into \sphinxstyleemphasis{userdata\_out} .
8951
8952If \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.
8953
8954If 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.
8955
8956If 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.
8957
8958Use {\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.
8959
8960\begin{sphinxadmonition}{note}{Note:}
8961The \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} .
8962\end{sphinxadmonition}
8963
8964
8965\subsubsection{krb5\_read\_password -  Read a password from keyboard input.}
8966\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)}
8967
8968\begin{fulllineitems}
8969\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}}{}
8970\end{fulllineitems}
8971
8972\begin{quote}\begin{description}
8973\item[{param}] \leavevmode
8974\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
8975
8976\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompt} - First user prompt when reading password
8977
8978\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{prompt2} - Second user prompt (NULL to prompt only once)
8979
8980\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{return\_pwd} - Returned password
8981
8982\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{size\_return} - On input, maximum size of password; on output, size of password read
8983
8984\end{description}\end{quote}
8985\begin{quote}\begin{description}
8986\item[{retval}] \leavevmode\begin{itemize}
8987\item {}
89880   Success
8989
8990\end{itemize}
8991
8992\item[{return}] \leavevmode\begin{itemize}
8993\item {}
8994Error in reading or verifying the password
8995
8996\item {}
8997Kerberos error codes
8998
8999\end{itemize}
9000
9001\end{description}\end{quote}
9002
9003This 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.
9004\begin{quote}
9005
9006\sphinxstyleemphasis{prompt} is printed to the terminal, followed by”:”, and then a password is read from the keyboard.
9007\end{quote}
9008
9009If \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.
9010
9011Echoing is turned off when the password is read.
9012
9013
9014\subsubsection{krb5\_salttype\_to\_string -  Convert a salt type to a string.}
9015\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)}
9016
9017\begin{fulllineitems}
9018\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}}{}
9019\end{fulllineitems}
9020
9021\begin{quote}\begin{description}
9022\item[{param}] \leavevmode
9023\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{salttype} - Salttype to convert
9024
9025\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to receive the converted string
9026
9027\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Storage available in \sphinxstyleemphasis{buffer}
9028
9029\end{description}\end{quote}
9030\begin{quote}\begin{description}
9031\item[{retval}] \leavevmode\begin{itemize}
9032\item {}
90330   Success; otherwise - Kerberos error codes
9034
9035\end{itemize}
9036
9037\end{description}\end{quote}
9038
9039
9040\subsubsection{krb5\_server\_decrypt\_ticket\_keytab -  Decrypt a ticket using the specified key table.}
9041\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)}
9042
9043\begin{fulllineitems}
9044\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}}{}
9045\end{fulllineitems}
9046
9047\begin{quote}\begin{description}
9048\item[{param}] \leavevmode
9049\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9050
9051\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{kt} - Key table
9052
9053\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ticket} - Ticket to be decrypted
9054
9055\end{description}\end{quote}
9056\begin{quote}\begin{description}
9057\item[{retval}] \leavevmode\begin{itemize}
9058\item {}
90590   Success; otherwise - Kerberos error codes
9060
9061\end{itemize}
9062
9063\end{description}\end{quote}
9064
9065This 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} .
9066
9067
9068\subsubsection{krb5\_set\_default\_tgs\_enctypes -  Set default TGS encryption types in a krb5\_context structure.}
9069\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)}
9070
9071\begin{fulllineitems}
9072\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}}{}
9073\end{fulllineitems}
9074
9075\begin{quote}\begin{description}
9076\item[{param}] \leavevmode
9077\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9078
9079\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{etypes} - Encryption type(s) to set
9080
9081\end{description}\end{quote}
9082\begin{quote}\begin{description}
9083\item[{retval}] \leavevmode\begin{itemize}
9084\item {}
90850   Success
9086
9087\item {}
9088KRB5\_PROG\_ETYPE\_NOSUPP   Program lacks support for encryption type
9089
9090\end{itemize}
9091
9092\item[{return}] \leavevmode\begin{itemize}
9093\item {}
9094Kerberos error codes
9095
9096\end{itemize}
9097
9098\end{description}\end{quote}
9099
9100This function sets the default enctype list for TGS requests made using \sphinxstyleemphasis{context} to \sphinxstyleemphasis{etypes} .
9101
9102\begin{sphinxadmonition}{note}{Note:}
9103This overrides the default list (from config file or built-in).
9104\end{sphinxadmonition}
9105
9106
9107\subsubsection{krb5\_set\_error\_message -  Set an extended error message for an error code.}
9108\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)}
9109
9110\begin{fulllineitems}
9111\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}, ...}{}
9112\end{fulllineitems}
9113
9114\begin{quote}\begin{description}
9115\item[{param}] \leavevmode
9116\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
9117
9118\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code
9119
9120\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} - Error string for the error code
9121
9122\end{description}\end{quote}
9123
9124
9125\subsubsection{krb5\_set\_kdc\_recv\_hook -  Set a KDC post-receive hook function.}
9126\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)}
9127
9128\begin{fulllineitems}
9129\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}}{}
9130\end{fulllineitems}
9131
9132\begin{quote}\begin{description}
9133\item[{param}] \leavevmode
9134\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - The library context.
9135
9136\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{recv\_hook} - Hook function (or NULL to disable the hook)
9137
9138\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Callback data to be passed to \sphinxstyleemphasis{recv\_hook}
9139
9140\end{description}\end{quote}
9141\begin{quote}
9142
9143\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.
9144\end{quote}
9145
9146\begin{sphinxadmonition}{note}{Note:}
9147New in 1.15
9148\end{sphinxadmonition}
9149
9150
9151\subsubsection{krb5\_set\_kdc\_send\_hook -  Set a KDC pre-send hook function.}
9152\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)}
9153
9154\begin{fulllineitems}
9155\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}}{}
9156\end{fulllineitems}
9157
9158\begin{quote}\begin{description}
9159\item[{param}] \leavevmode
9160\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9161
9162\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{send\_hook} - Hook function (or NULL to disable the hook)
9163
9164\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Callback data to be passed to \sphinxstyleemphasis{send\_hook}
9165
9166\end{description}\end{quote}
9167\begin{quote}
9168
9169\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.
9170\end{quote}
9171
9172\begin{sphinxadmonition}{note}{Note:}
9173New in 1.15
9174\end{sphinxadmonition}
9175
9176
9177\subsubsection{krb5\_set\_real\_time -  Set time offset field in a krb5\_context structure.}
9178\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)}
9179
9180\begin{fulllineitems}
9181\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}}{}
9182\end{fulllineitems}
9183
9184\begin{quote}\begin{description}
9185\item[{param}] \leavevmode
9186\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9187
9188\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{seconds} - Real time, seconds portion
9189
9190\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{microseconds} - Real time, microseconds portion
9191
9192\end{description}\end{quote}
9193\begin{quote}\begin{description}
9194\item[{retval}] \leavevmode\begin{itemize}
9195\item {}
91960   Success; otherwise - Kerberos error codes
9197
9198\end{itemize}
9199
9200\end{description}\end{quote}
9201
9202This 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} .
9203
9204
9205\subsubsection{krb5\_string\_to\_cksumtype -  Convert a string to a checksum type.}
9206\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)}
9207
9208\begin{fulllineitems}
9209\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}}{}
9210\end{fulllineitems}
9211
9212\begin{quote}\begin{description}
9213\item[{param}] \leavevmode
9214\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to be converted
9215
9216\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cksumtypep} - Checksum type to be filled in
9217
9218\end{description}\end{quote}
9219\begin{quote}\begin{description}
9220\item[{retval}] \leavevmode\begin{itemize}
9221\item {}
92220   Success; otherwise - EINVAL
9223
9224\end{itemize}
9225
9226\end{description}\end{quote}
9227
9228
9229\subsubsection{krb5\_string\_to\_deltat -  Convert a string to a delta time value.}
9230\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)}
9231
9232\begin{fulllineitems}
9233\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}}{}
9234\end{fulllineitems}
9235
9236\begin{quote}\begin{description}
9237\item[{param}] \leavevmode
9238\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to be converted
9239
9240\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{deltatp} - Delta time to be filled in
9241
9242\end{description}\end{quote}
9243\begin{quote}\begin{description}
9244\item[{retval}] \leavevmode\begin{itemize}
9245\item {}
92460   Success; otherwise - KRB5\_DELTAT\_BADFORMAT
9247
9248\end{itemize}
9249
9250\end{description}\end{quote}
9251
9252
9253\subsubsection{krb5\_string\_to\_enctype -  Convert a string to an encryption type.}
9254\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)}
9255
9256\begin{fulllineitems}
9257\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}}{}
9258\end{fulllineitems}
9259
9260\begin{quote}\begin{description}
9261\item[{param}] \leavevmode
9262\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to convert to an encryption type
9263
9264\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{enctypep} - Encryption type
9265
9266\end{description}\end{quote}
9267\begin{quote}\begin{description}
9268\item[{retval}] \leavevmode\begin{itemize}
9269\item {}
92700   Success; otherwise - EINVAL
9271
9272\end{itemize}
9273
9274\end{description}\end{quote}
9275
9276
9277\subsubsection{krb5\_string\_to\_salttype -  Convert a string to a salt type.}
9278\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)}
9279
9280\begin{fulllineitems}
9281\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}}{}
9282\end{fulllineitems}
9283
9284\begin{quote}\begin{description}
9285\item[{param}] \leavevmode
9286\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to convert to an encryption type
9287
9288\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{salttypep} - Salt type to be filled in
9289
9290\end{description}\end{quote}
9291\begin{quote}\begin{description}
9292\item[{retval}] \leavevmode\begin{itemize}
9293\item {}
92940   Success; otherwise - EINVAL
9295
9296\end{itemize}
9297
9298\end{description}\end{quote}
9299
9300
9301\subsubsection{krb5\_string\_to\_timestamp -  Convert a string to a timestamp.}
9302\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)}
9303
9304\begin{fulllineitems}
9305\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}}{}
9306\end{fulllineitems}
9307
9308\begin{quote}\begin{description}
9309\item[{param}] \leavevmode
9310\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to be converted
9311
9312\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{timestampp} - Pointer to timestamp
9313
9314\end{description}\end{quote}
9315\begin{quote}\begin{description}
9316\item[{retval}] \leavevmode\begin{itemize}
9317\item {}
93180   Success; otherwise - EINVAL
9319
9320\end{itemize}
9321
9322\end{description}\end{quote}
9323
9324
9325\subsubsection{krb5\_timeofday -  Retrieve the current time with context specific time offset adjustment.}
9326\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)}
9327
9328\begin{fulllineitems}
9329\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}}{}
9330\end{fulllineitems}
9331
9332\begin{quote}\begin{description}
9333\item[{param}] \leavevmode
9334\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9335
9336\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{timeret} - Timestamp to fill in
9337
9338\end{description}\end{quote}
9339\begin{quote}\begin{description}
9340\item[{retval}] \leavevmode\begin{itemize}
9341\item {}
93420   Success
9343
9344\end{itemize}
9345
9346\item[{return}] \leavevmode\begin{itemize}
9347\item {}
9348Kerberos error codes
9349
9350\end{itemize}
9351
9352\end{description}\end{quote}
9353
9354This function retrieves the system time of day with the context specific time offset adjustment.
9355
9356
9357\subsubsection{krb5\_timestamp\_to\_sfstring -  Convert a timestamp to a string, with optional output padding.}
9358\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)}
9359
9360\begin{fulllineitems}
9361\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}}{}
9362\end{fulllineitems}
9363
9364\begin{quote}\begin{description}
9365\item[{param}] \leavevmode
9366\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{timestamp} - Timestamp to convert
9367
9368\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to hold the converted timestamp
9369
9370\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Length of buffer
9371
9372\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pad} - Optional value to pad \sphinxstyleemphasis{buffer} if converted timestamp does not fill it
9373
9374\end{description}\end{quote}
9375\begin{quote}\begin{description}
9376\item[{retval}] \leavevmode\begin{itemize}
9377\item {}
93780   Success; otherwise - Kerberos error codes
9379
9380\end{itemize}
9381
9382\end{description}\end{quote}
9383
9384If \sphinxstyleemphasis{pad} is not NULL, \sphinxstyleemphasis{buffer} is padded out to \sphinxstyleemphasis{buflen} - 1 characters with the value of * \sphinxstyleemphasis{pad} .
9385
9386
9387\subsubsection{krb5\_timestamp\_to\_string -  Convert a timestamp to a string.}
9388\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)}
9389
9390\begin{fulllineitems}
9391\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}}{}
9392\end{fulllineitems}
9393
9394\begin{quote}\begin{description}
9395\item[{param}] \leavevmode
9396\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{timestamp} - Timestamp to convert
9397
9398\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to hold converted timestamp
9399
9400\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Storage available in \sphinxstyleemphasis{buffer}
9401
9402\end{description}\end{quote}
9403\begin{quote}\begin{description}
9404\item[{retval}] \leavevmode\begin{itemize}
9405\item {}
94060   Success; otherwise - Kerberos error codes
9407
9408\end{itemize}
9409
9410\end{description}\end{quote}
9411
9412The string is returned in the locale’s appropriate date and time representation.
9413
9414
9415\subsubsection{krb5\_tkt\_creds\_free -  Free a TGS request context.}
9416\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)}
9417
9418\begin{fulllineitems}
9419\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}}{}
9420\end{fulllineitems}
9421
9422\begin{quote}\begin{description}
9423\item[{param}] \leavevmode
9424\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9425
9426\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - TGS request context
9427
9428\end{description}\end{quote}
9429
9430\begin{sphinxadmonition}{note}{Note:}
9431New in 1.9
9432\end{sphinxadmonition}
9433
9434
9435\subsubsection{krb5\_tkt\_creds\_get -  Synchronously obtain credentials using a TGS request context.}
9436\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)}
9437
9438\begin{fulllineitems}
9439\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}}{}
9440\end{fulllineitems}
9441
9442\begin{quote}\begin{description}
9443\item[{param}] \leavevmode
9444\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9445
9446\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - TGS request context
9447
9448\end{description}\end{quote}
9449\begin{quote}\begin{description}
9450\item[{retval}] \leavevmode\begin{itemize}
9451\item {}
94520   Success; otherwise - Kerberos error codes
9453
9454\end{itemize}
9455
9456\end{description}\end{quote}
9457
9458This 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()}}}} .
9459
9460\begin{sphinxadmonition}{note}{Note:}
9461New in 1.9
9462\end{sphinxadmonition}
9463
9464
9465\subsubsection{krb5\_tkt\_creds\_get\_creds -  Retrieve acquired credentials from a TGS request context.}
9466\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)}
9467
9468\begin{fulllineitems}
9469\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}}{}
9470\end{fulllineitems}
9471
9472\begin{quote}\begin{description}
9473\item[{param}] \leavevmode
9474\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9475
9476\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - TGS request context
9477
9478\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{creds} - Acquired credentials
9479
9480\end{description}\end{quote}
9481\begin{quote}\begin{description}
9482\item[{retval}] \leavevmode\begin{itemize}
9483\item {}
94840   Success; otherwise - Kerberos error codes
9485
9486\end{itemize}
9487
9488\end{description}\end{quote}
9489
9490This 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.
9491
9492\begin{sphinxadmonition}{note}{Note:}
9493New in 1.9
9494\end{sphinxadmonition}
9495
9496
9497\subsubsection{krb5\_tkt\_creds\_get\_times -  Retrieve ticket times from a TGS request context.}
9498\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)}
9499
9500\begin{fulllineitems}
9501\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}}{}
9502\end{fulllineitems}
9503
9504\begin{quote}\begin{description}
9505\item[{param}] \leavevmode
9506\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9507
9508\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - TGS request context
9509
9510\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{times} - Ticket times for acquired credentials
9511
9512\end{description}\end{quote}
9513\begin{quote}\begin{description}
9514\item[{retval}] \leavevmode\begin{itemize}
9515\item {}
95160   Success; otherwise - Kerberos error codes
9517
9518\end{itemize}
9519
9520\end{description}\end{quote}
9521
9522The 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()}}}} .
9523
9524\begin{sphinxadmonition}{note}{Note:}
9525New in 1.9
9526\end{sphinxadmonition}
9527
9528
9529\subsubsection{krb5\_tkt\_creds\_init -  Create a context to get credentials from a KDC’s Ticket Granting Service.}
9530\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)}
9531
9532\begin{fulllineitems}
9533\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}}{}
9534\end{fulllineitems}
9535
9536\begin{quote}\begin{description}
9537\item[{param}] \leavevmode
9538\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9539
9540\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache handle
9541
9542\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Input credentials
9543
9544\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{options} - \sphinxcode{KRB5\_GC} options for this request.
9545
9546\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ctx} - New TGS request context
9547
9548\end{description}\end{quote}
9549\begin{quote}\begin{description}
9550\item[{retval}] \leavevmode\begin{itemize}
9551\item {}
95520   Success; otherwise - Kerberos error codes
9553
9554\end{itemize}
9555
9556\end{description}\end{quote}
9557
9558This 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.
9559
9560The 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.
9561
9562Use {\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.
9563
9564\begin{sphinxadmonition}{note}{Note:}
9565New in 1.9
9566\end{sphinxadmonition}
9567
9568
9569\subsubsection{krb5\_tkt\_creds\_step -  Get the next KDC request in a TGS exchange.}
9570\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)}
9571
9572\begin{fulllineitems}
9573\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}}{}
9574\end{fulllineitems}
9575
9576\begin{quote}\begin{description}
9577\item[{param}] \leavevmode
9578\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9579
9580\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - TGS request context
9581
9582\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in} - KDC response (empty on the first call)
9583
9584\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Next KDC request
9585
9586\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{realm} - Realm for next KDC request
9587
9588\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{flags} - Output flags
9589
9590\end{description}\end{quote}
9591\begin{quote}\begin{description}
9592\item[{retval}] \leavevmode\begin{itemize}
9593\item {}
95940   Success; otherwise - Kerberos error codes
9595
9596\end{itemize}
9597
9598\end{description}\end{quote}
9599
9600This 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.
9601
9602If 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.
9603
9604If 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.
9605
9606\begin{sphinxadmonition}{note}{Note:}
9607New in 1.9
9608\end{sphinxadmonition}
9609
9610
9611\subsubsection{krb5\_verify\_init\_creds -  Verify initial credentials against a keytab.}
9612\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)}
9613
9614\begin{fulllineitems}
9615\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}}{}
9616\end{fulllineitems}
9617
9618\begin{quote}\begin{description}
9619\item[{param}] \leavevmode
9620\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9621
9622\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{creds} - Initial credentials to be verified
9623
9624\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Server principal (or NULL)
9625
9626\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table (NULL to use default keytab)
9627
9628\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache for fetched creds (or NULL)
9629
9630\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{options} - Verification options (NULL for default options)
9631
9632\end{description}\end{quote}
9633\begin{quote}\begin{description}
9634\item[{retval}] \leavevmode\begin{itemize}
9635\item {}
96360   Success; otherwise - Kerberos error codes
9637
9638\end{itemize}
9639
9640\end{description}\end{quote}
9641
9642This 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.
9643
9644If 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()}}}} .
9645
9646If \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.
9647
9648
9649\subsubsection{krb5\_verify\_init\_creds\_opt\_init -  Initialize a credential verification options structure.}
9650\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)}
9651
9652\begin{fulllineitems}
9653\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}}{}
9654\end{fulllineitems}
9655
9656\begin{quote}\begin{description}
9657\item[{param}] \leavevmode
9658\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k5\_vic\_options} - Verification options structure
9659
9660\end{description}\end{quote}
9661
9662
9663\subsubsection{krb5\_verify\_init\_creds\_opt\_set\_ap\_req\_nofail -  Set whether credential verification is required.}
9664\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)}
9665
9666\begin{fulllineitems}
9667\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}}{}
9668\end{fulllineitems}
9669
9670\begin{quote}\begin{description}
9671\item[{param}] \leavevmode
9672\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k5\_vic\_options} - Verification options structure
9673
9674\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_nofail} - Whether to require successful verification
9675
9676\end{description}\end{quote}
9677
9678This 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.
9679
9680If 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.
9681
9682
9683\subsubsection{krb5\_vprepend\_error\_message -  Add a prefix to the message for an error code using a va\_list.}
9684\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)}
9685
9686\begin{fulllineitems}
9687\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}}{}
9688\end{fulllineitems}
9689
9690\begin{quote}\begin{description}
9691\item[{param}] \leavevmode
9692\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
9693
9694\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code
9695
9696\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} - Format string for error message prefix
9697
9698\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{args} - List of vprintf(3) style arguments
9699
9700\end{description}\end{quote}
9701
9702This 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.
9703
9704
9705\subsubsection{krb5\_vset\_error\_message -  Set an extended error message for an error code using a va\_list.}
9706\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)}
9707
9708\begin{fulllineitems}
9709\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}}{}
9710\end{fulllineitems}
9711
9712\begin{quote}\begin{description}
9713\item[{param}] \leavevmode
9714\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
9715
9716\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code
9717
9718\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} - Error string for the error code
9719
9720\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{args} - List of vprintf(3) style arguments
9721
9722\end{description}\end{quote}
9723
9724
9725\subsubsection{krb5\_vwrap\_error\_message -  Add a prefix to a different error code’s message using a va\_list.}
9726\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)}
9727
9728\begin{fulllineitems}
9729\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}}{}
9730\end{fulllineitems}
9731
9732\begin{quote}\begin{description}
9733\item[{param}] \leavevmode
9734\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
9735
9736\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{old\_code} - Previous error code
9737
9738\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code
9739
9740\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} - Format string for error message prefix
9741
9742\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{args} - List of vprintf(3) style arguments
9743
9744\end{description}\end{quote}
9745
9746This 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.
9747
9748
9749\subsubsection{krb5\_wrap\_error\_message -  Add a prefix to a different error code’s message.}
9750\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)}
9751
9752\begin{fulllineitems}
9753\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}, ...}{}
9754\end{fulllineitems}
9755
9756\begin{quote}\begin{description}
9757\item[{param}] \leavevmode
9758\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctx} - Library context
9759
9760\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{old\_code} - Previous error code
9761
9762\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - Error code
9763
9764\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fmt} - Format string for error message prefix
9765
9766\end{description}\end{quote}
9767
9768Format 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} .
9769
9770
9771\subsection{Public interfaces that should not be called directly}
9772\label{\detokenize{appdev/refs/api/index:public-interfaces-that-should-not-be-called-directly}}
9773
9774\subsubsection{krb5\_c\_block\_size -  Return cipher block size.}
9775\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)}
9776
9777\begin{fulllineitems}
9778\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}}{}
9779\end{fulllineitems}
9780
9781\begin{quote}\begin{description}
9782\item[{param}] \leavevmode
9783\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9784
9785\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
9786
9787\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{blocksize} - Block size for \sphinxstyleemphasis{enctype}
9788
9789\end{description}\end{quote}
9790\begin{quote}\begin{description}
9791\item[{retval}] \leavevmode\begin{itemize}
9792\item {}
97930   Success; otherwise - Kerberos error codes
9794
9795\end{itemize}
9796
9797\end{description}\end{quote}
9798
9799
9800\subsubsection{krb5\_c\_checksum\_length -  Return the length of checksums for a checksum type.}
9801\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)}
9802
9803\begin{fulllineitems}
9804\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}}{}
9805\end{fulllineitems}
9806
9807\begin{quote}\begin{description}
9808\item[{param}] \leavevmode
9809\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9810
9811\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type
9812
9813\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{length} - Checksum length
9814
9815\end{description}\end{quote}
9816\begin{quote}\begin{description}
9817\item[{retval}] \leavevmode\begin{itemize}
9818\item {}
98190   Success; otherwise - Kerberos error codes
9820
9821\end{itemize}
9822
9823\end{description}\end{quote}
9824
9825
9826\subsubsection{krb5\_c\_crypto\_length -  Return a length of a message field specific to the encryption type.}
9827\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)}
9828
9829\begin{fulllineitems}
9830\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}}{}
9831\end{fulllineitems}
9832
9833\begin{quote}\begin{description}
9834\item[{param}] \leavevmode
9835\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9836
9837\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
9838
9839\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - Type field (See \sphinxcode{KRB5\_CRYPTO\_TYPE} types)
9840
9841\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{size} - Length of the \sphinxstyleemphasis{type} specific to \sphinxstyleemphasis{enctype}
9842
9843\end{description}\end{quote}
9844\begin{quote}\begin{description}
9845\item[{retval}] \leavevmode\begin{itemize}
9846\item {}
98470   Success; otherwise - Kerberos error codes
9848
9849\end{itemize}
9850
9851\end{description}\end{quote}
9852
9853
9854\subsubsection{krb5\_c\_crypto\_length\_iov -  Fill in lengths for header, trailer and padding in a IOV array.}
9855\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)}
9856
9857\begin{fulllineitems}
9858\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}}{}
9859\end{fulllineitems}
9860
9861\begin{quote}\begin{description}
9862\item[{param}] \leavevmode
9863\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9864
9865\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
9866
9867\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array
9868
9869\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data}
9870
9871\end{description}\end{quote}
9872\begin{quote}\begin{description}
9873\item[{retval}] \leavevmode\begin{itemize}
9874\item {}
98750   Success; otherwise - Kerberos error codes
9876
9877\end{itemize}
9878
9879\end{description}\end{quote}
9880
9881Padding 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.
9882
9883
9884\subsubsection{krb5\_c\_decrypt -  Decrypt data using a key (operates on keyblock).}
9885\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)}
9886
9887\begin{fulllineitems}
9888\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}}{}
9889\end{fulllineitems}
9890
9891\begin{quote}\begin{description}
9892\item[{param}] \leavevmode
9893\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9894
9895\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key
9896
9897\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
9898
9899\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed
9900
9901\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Encrypted data
9902
9903\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Decrypted data
9904
9905\end{description}\end{quote}
9906\begin{quote}\begin{description}
9907\item[{retval}] \leavevmode\begin{itemize}
9908\item {}
99090   Success; otherwise - Kerberos error codes
9910
9911\end{itemize}
9912
9913\end{description}\end{quote}
9914
9915This 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.
9916
9917\begin{sphinxadmonition}{note}{Note:}
9918The 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.
9919\end{sphinxadmonition}
9920
9921
9922\subsubsection{krb5\_c\_decrypt\_iov -  Decrypt data in place supporting AEAD (operates on keyblock).}
9923\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)}
9924
9925\begin{fulllineitems}
9926\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}}{}
9927\end{fulllineitems}
9928
9929\begin{quote}\begin{description}
9930\item[{param}] \leavevmode
9931\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9932
9933\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} - Encryption key
9934
9935\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
9936
9937\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed
9938
9939\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array. Modified in-place.
9940
9941\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data}
9942
9943\end{description}\end{quote}
9944\begin{quote}\begin{description}
9945\item[{retval}] \leavevmode\begin{itemize}
9946\item {}
99470   Success; otherwise - Kerberos error codes
9948
9949\end{itemize}
9950
9951\end{description}\end{quote}
9952
9953This 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.
9954
9955
9956\sphinxstrong{See also:}
9957
9958
9959{\hyperref[\detokenize{appdev/refs/api/krb5_c_decrypt_iov:c.krb5_c_decrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_decrypt\_iov()}}}}
9960
9961
9962
9963\begin{sphinxadmonition}{note}{Note:}
9964On 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.
9965\end{sphinxadmonition}
9966
9967
9968\subsubsection{krb5\_c\_derive\_prfplus -  Derive a key using some input data (via RFC 6113 PRF+).}
9969\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)}
9970
9971\begin{fulllineitems}
9972\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}}{}
9973\end{fulllineitems}
9974
9975\begin{quote}\begin{description}
9976\item[{param}] \leavevmode
9977\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
9978
9979\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k} - KDC contribution key
9980
9981\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Input string
9982
9983\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Output key enctype (or \sphinxstylestrong{ENCTYPE\_NULL} )
9984
9985\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Derived keyblock
9986
9987\end{description}\end{quote}
9988
9989This 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.
9990
9991
9992\subsubsection{krb5\_c\_encrypt -  Encrypt data using a key (operates on keyblock).}
9993\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)}
9994
9995\begin{fulllineitems}
9996\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}}{}
9997\end{fulllineitems}
9998
9999\begin{quote}\begin{description}
10000\item[{param}] \leavevmode
10001\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10002
10003\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key
10004
10005\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
10006
10007\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed
10008
10009\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Data to be encrypted
10010
10011\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Encrypted data
10012
10013\end{description}\end{quote}
10014\begin{quote}\begin{description}
10015\item[{retval}] \leavevmode\begin{itemize}
10016\item {}
100170   Success; otherwise - Kerberos error codes
10018
10019\end{itemize}
10020
10021\end{description}\end{quote}
10022
10023This 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.
10024
10025\begin{sphinxadmonition}{note}{Note:}
10026The 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.
10027\end{sphinxadmonition}
10028
10029
10030\subsubsection{krb5\_c\_encrypt\_iov -  Encrypt data in place supporting AEAD (operates on keyblock).}
10031\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)}
10032
10033\begin{fulllineitems}
10034\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}}{}
10035\end{fulllineitems}
10036
10037\begin{quote}\begin{description}
10038\item[{param}] \leavevmode
10039\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10040
10041\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} - Encryption key
10042
10043\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
10044
10045\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed
10046
10047\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array. Modified in-place.
10048
10049\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data}
10050
10051\end{description}\end{quote}
10052\begin{quote}\begin{description}
10053\item[{retval}] \leavevmode\begin{itemize}
10054\item {}
100550   Success; otherwise - Kerberos error codes
10056
10057\end{itemize}
10058
10059\end{description}\end{quote}
10060
10061This 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.
10062
10063
10064\sphinxstrong{See also:}
10065
10066
10067{\hyperref[\detokenize{appdev/refs/api/krb5_c_decrypt_iov:c.krb5_c_decrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_decrypt\_iov()}}}}
10068
10069
10070
10071\begin{sphinxadmonition}{note}{Note:}
10072On 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.
10073\end{sphinxadmonition}
10074
10075
10076\subsubsection{krb5\_c\_encrypt\_length -  Compute encrypted data length.}
10077\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)}
10078
10079\begin{fulllineitems}
10080\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}}{}
10081\end{fulllineitems}
10082
10083\begin{quote}\begin{description}
10084\item[{param}] \leavevmode
10085\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10086
10087\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
10088
10089\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{inputlen} - Length of the data to be encrypted
10090
10091\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{length} - Length of the encrypted data
10092
10093\end{description}\end{quote}
10094\begin{quote}\begin{description}
10095\item[{retval}] \leavevmode\begin{itemize}
10096\item {}
100970   Success; otherwise - Kerberos error codes
10098
10099\end{itemize}
10100
10101\end{description}\end{quote}
10102
10103This function computes the length of the ciphertext produced by encrypting \sphinxstyleemphasis{inputlen} bytes including padding, confounder, and checksum.
10104
10105
10106\subsubsection{krb5\_c\_enctype\_compare -  Compare two encryption types.}
10107\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)}
10108
10109\begin{fulllineitems}
10110\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}}{}
10111\end{fulllineitems}
10112
10113\begin{quote}\begin{description}
10114\item[{param}] \leavevmode
10115\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10116
10117\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{e1} - First encryption type
10118
10119\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{e2} - Second encryption type
10120
10121\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{similar} - \sphinxstylestrong{TRUE} if types are similar, \sphinxstylestrong{FALSE} if not
10122
10123\end{description}\end{quote}
10124\begin{quote}\begin{description}
10125\item[{retval}] \leavevmode\begin{itemize}
10126\item {}
101270   Success; otherwise - Kerberos error codes
10128
10129\end{itemize}
10130
10131\end{description}\end{quote}
10132
10133This function determines whether two encryption types use the same kind of keys.
10134
10135
10136\subsubsection{krb5\_c\_free\_state -  Free a cipher state previously allocated by krb5\_c\_init\_state() .}
10137\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)}
10138
10139\begin{fulllineitems}
10140\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}}{}
10141\end{fulllineitems}
10142
10143\begin{quote}\begin{description}
10144\item[{param}] \leavevmode
10145\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10146
10147\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Key
10148
10149\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{state} - Cipher state to be freed
10150
10151\end{description}\end{quote}
10152\begin{quote}\begin{description}
10153\item[{retval}] \leavevmode\begin{itemize}
10154\item {}
101550   Success; otherwise - Kerberos error codes
10156
10157\end{itemize}
10158
10159\end{description}\end{quote}
10160
10161
10162\subsubsection{krb5\_c\_fx\_cf2\_simple -  Compute the KRB-FX-CF2 combination of two keys and pepper strings.}
10163\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)}
10164
10165\begin{fulllineitems}
10166\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}}{}
10167\end{fulllineitems}
10168
10169\begin{quote}\begin{description}
10170\item[{param}] \leavevmode
10171\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10172
10173\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k1} - KDC contribution key
10174
10175\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pepper1} - String”PKINIT”
10176
10177\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k2} - Reply key
10178
10179\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{pepper2} - String”KeyExchange”
10180
10181\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Output key
10182
10183\end{description}\end{quote}
10184\begin{quote}\begin{description}
10185\item[{retval}] \leavevmode\begin{itemize}
10186\item {}
101870   Success; otherwise - Kerberos error codes
10188
10189\end{itemize}
10190
10191\end{description}\end{quote}
10192
10193This 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.
10194
10195
10196\subsubsection{krb5\_c\_init\_state -  Initialize a new cipher state.}
10197\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)}
10198
10199\begin{fulllineitems}
10200\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}}{}
10201\end{fulllineitems}
10202
10203\begin{quote}\begin{description}
10204\item[{param}] \leavevmode
10205\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10206
10207\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Key
10208
10209\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
10210
10211\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{new\_state} - New cipher state
10212
10213\end{description}\end{quote}
10214\begin{quote}\begin{description}
10215\item[{retval}] \leavevmode\begin{itemize}
10216\item {}
102170   Success; otherwise - Kerberos error codes
10218
10219\end{itemize}
10220
10221\end{description}\end{quote}
10222
10223
10224\subsubsection{krb5\_c\_is\_coll\_proof\_cksum -  Test whether a checksum type is collision-proof.}
10225\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)}
10226
10227\begin{fulllineitems}
10228\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}}{}
10229\end{fulllineitems}
10230
10231\begin{quote}\begin{description}
10232\item[{param}] \leavevmode
10233\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctype} - Checksum type
10234
10235\end{description}\end{quote}
10236\begin{quote}\begin{description}
10237\item[{return}] \leavevmode\begin{itemize}
10238\item {}
10239TRUE if ctype is collision-proof, FALSE if it is not collision-proof or not a valid checksum type.
10240
10241\end{itemize}
10242
10243\end{description}\end{quote}
10244
10245
10246\subsubsection{krb5\_c\_is\_keyed\_cksum -  Test whether a checksum type is keyed.}
10247\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)}
10248
10249\begin{fulllineitems}
10250\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}}{}
10251\end{fulllineitems}
10252
10253\begin{quote}\begin{description}
10254\item[{param}] \leavevmode
10255\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctype} - Checksum type
10256
10257\end{description}\end{quote}
10258\begin{quote}\begin{description}
10259\item[{return}] \leavevmode\begin{itemize}
10260\item {}
10261TRUE if ctype is a keyed checksum type, FALSE otherwise.
10262
10263\end{itemize}
10264
10265\end{description}\end{quote}
10266
10267
10268\subsubsection{krb5\_c\_keyed\_checksum\_types -  Return a list of keyed checksum types usable with an encryption type.}
10269\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)}
10270
10271\begin{fulllineitems}
10272\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}}{}
10273\end{fulllineitems}
10274
10275\begin{quote}\begin{description}
10276\item[{param}] \leavevmode
10277\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10278
10279\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
10280
10281\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{count} - Count of allowable checksum types
10282
10283\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cksumtypes} - Array of allowable checksum types
10284
10285\end{description}\end{quote}
10286\begin{quote}\begin{description}
10287\item[{retval}] \leavevmode\begin{itemize}
10288\item {}
102890   Success; otherwise - Kerberos error codes
10290
10291\end{itemize}
10292
10293\end{description}\end{quote}
10294
10295Use {\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.
10296
10297
10298\subsubsection{krb5\_c\_keylengths -  Return length of the specified key in bytes.}
10299\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)}
10300
10301\begin{fulllineitems}
10302\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}}{}
10303\end{fulllineitems}
10304
10305\begin{quote}\begin{description}
10306\item[{param}] \leavevmode
10307\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10308
10309\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
10310
10311\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keybytes} - Number of bytes required to make a key
10312
10313\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{keylength} - Length of final key
10314
10315\end{description}\end{quote}
10316\begin{quote}\begin{description}
10317\item[{retval}] \leavevmode\begin{itemize}
10318\item {}
103190   Success; otherwise - Kerberos error codes
10320
10321\end{itemize}
10322
10323\end{description}\end{quote}
10324
10325
10326\subsubsection{krb5\_c\_make\_checksum -  Compute a checksum (operates on keyblock).}
10327\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)}
10328
10329\begin{fulllineitems}
10330\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}}{}
10331\end{fulllineitems}
10332
10333\begin{quote}\begin{description}
10334\item[{param}] \leavevmode
10335\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10336
10337\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type (0 for mandatory type)
10338
10339\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum
10340
10341\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
10342
10343\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Input data
10344
10345\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cksum} - Generated checksum
10346
10347\end{description}\end{quote}
10348\begin{quote}\begin{description}
10349\item[{retval}] \leavevmode\begin{itemize}
10350\item {}
103510   Success; otherwise - Kerberos error codes
10352
10353\end{itemize}
10354
10355\end{description}\end{quote}
10356
10357This 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.
10358
10359
10360\sphinxstrong{See also:}
10361
10362
10363{\hyperref[\detokenize{appdev/refs/api/krb5_c_verify_checksum:c.krb5_c_verify_checksum}]{\sphinxcrossref{\sphinxcode{krb5\_c\_verify\_checksum()}}}}
10364
10365
10366
10367\begin{sphinxadmonition}{note}{Note:}
10368This 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} .
10369\end{sphinxadmonition}
10370
10371
10372\subsubsection{krb5\_c\_make\_checksum\_iov -  Fill in a checksum element in IOV array (operates on keyblock)}
10373\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)}
10374
10375\begin{fulllineitems}
10376\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}}{}
10377\end{fulllineitems}
10378
10379\begin{quote}\begin{description}
10380\item[{param}] \leavevmode
10381\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10382
10383\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type (0 for mandatory type)
10384
10385\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum
10386
10387\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
10388
10389\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array
10390
10391\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data}
10392
10393\end{description}\end{quote}
10394\begin{quote}\begin{description}
10395\item[{retval}] \leavevmode\begin{itemize}
10396\item {}
103970   Success; otherwise - Kerberos error codes
10398
10399\end{itemize}
10400
10401\end{description}\end{quote}
10402
10403Create 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.
10404
10405
10406\sphinxstrong{See also:}
10407
10408
10409{\hyperref[\detokenize{appdev/refs/api/krb5_c_verify_checksum_iov:c.krb5_c_verify_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_verify\_checksum\_iov()}}}}
10410
10411
10412
10413\begin{sphinxadmonition}{note}{Note:}
10414This 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} .
10415\end{sphinxadmonition}
10416
10417
10418\subsubsection{krb5\_c\_make\_random\_key -  Generate an enctype-specific random encryption key.}
10419\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)}
10420
10421\begin{fulllineitems}
10422\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}}{}
10423\end{fulllineitems}
10424
10425\begin{quote}\begin{description}
10426\item[{param}] \leavevmode
10427\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10428
10429\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type of the generated key
10430
10431\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{k5\_random\_key} - An allocated and initialized keyblock
10432
10433\end{description}\end{quote}
10434\begin{quote}\begin{description}
10435\item[{retval}] \leavevmode\begin{itemize}
10436\item {}
104370   Success; otherwise - Kerberos error codes
10438
10439\end{itemize}
10440
10441\end{description}\end{quote}
10442
10443Use {\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.
10444
10445
10446\subsubsection{krb5\_c\_padding\_length -  Return a number of padding octets.}
10447\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)}
10448
10449\begin{fulllineitems}
10450\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}}{}
10451\end{fulllineitems}
10452
10453\begin{quote}\begin{description}
10454\item[{param}] \leavevmode
10455\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10456
10457\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
10458
10459\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data\_length} - Length of the plaintext to pad
10460
10461\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{size} - Number of padding octets
10462
10463\end{description}\end{quote}
10464\begin{quote}\begin{description}
10465\item[{retval}] \leavevmode\begin{itemize}
10466\item {}
104670   Success; otherwise - KRB5\_BAD\_ENCTYPE
10468
10469\end{itemize}
10470
10471\end{description}\end{quote}
10472
10473This function returns the number of the padding octets required to pad \sphinxstyleemphasis{data\_length} octets of plaintext.
10474
10475
10476\subsubsection{krb5\_c\_prf -  Generate enctype-specific pseudo-random bytes.}
10477\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)}
10478
10479\begin{fulllineitems}
10480\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}}{}
10481\end{fulllineitems}
10482
10483\begin{quote}\begin{description}
10484\item[{param}] \leavevmode
10485\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10486
10487\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keyblock} - Key
10488
10489\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Input data
10490
10491\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Output data
10492
10493\end{description}\end{quote}
10494\begin{quote}\begin{description}
10495\item[{retval}] \leavevmode\begin{itemize}
10496\item {}
104970   Success; otherwise - Kerberos error codes
10498
10499\end{itemize}
10500
10501\end{description}\end{quote}
10502
10503This 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.
10504
10505
10506\subsubsection{krb5\_c\_prfplus -  Generate pseudo-random bytes using RFC 6113 PRF+.}
10507\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)}
10508
10509\begin{fulllineitems}
10510\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}}{}
10511\end{fulllineitems}
10512
10513\begin{quote}\begin{description}
10514\item[{param}] \leavevmode
10515\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10516
10517\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{k} - KDC contribution key
10518
10519\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Input data
10520
10521\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Pseudo-random output buffer
10522
10523\end{description}\end{quote}
10524\begin{quote}\begin{description}
10525\item[{return}] \leavevmode\begin{itemize}
10526\item {}
105270 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()
10528
10529\end{itemize}
10530
10531\end{description}\end{quote}
10532
10533This 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} .
10534
10535\begin{sphinxadmonition}{note}{Note:}
10536RFC 4402 defines a different PRF+ operation. This function does not implement that operation.
10537\end{sphinxadmonition}
10538
10539
10540\subsubsection{krb5\_c\_prf\_length -  Get the output length of pseudo-random functions for an encryption type.}
10541\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)}
10542
10543\begin{fulllineitems}
10544\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}}{}
10545\end{fulllineitems}
10546
10547\begin{quote}\begin{description}
10548\item[{param}] \leavevmode
10549\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10550
10551\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
10552
10553\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{len} - Length of PRF output
10554
10555\end{description}\end{quote}
10556\begin{quote}\begin{description}
10557\item[{retval}] \leavevmode\begin{itemize}
10558\item {}
105590   Success; otherwise - Kerberos error codes
10560
10561\end{itemize}
10562
10563\end{description}\end{quote}
10564
10565
10566\subsubsection{krb5\_c\_random\_add\_entropy -  Add entropy to the pseudo-random number generator.}
10567\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)}
10568
10569\begin{fulllineitems}
10570\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}}{}
10571\end{fulllineitems}
10572
10573\begin{quote}\begin{description}
10574\item[{param}] \leavevmode
10575\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10576
10577\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{randsource} - Entropy source (see KRB5\_RANDSOURCE types)
10578
10579\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Data
10580
10581\end{description}\end{quote}
10582\begin{quote}\begin{description}
10583\item[{retval}] \leavevmode\begin{itemize}
10584\item {}
105850   Success; otherwise - Kerberos error codes
10586
10587\end{itemize}
10588
10589\end{description}\end{quote}
10590
10591Contribute 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.
10592
10593
10594\subsubsection{krb5\_c\_random\_make\_octets -  Generate pseudo-random bytes.}
10595\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)}
10596
10597\begin{fulllineitems}
10598\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}}{}
10599\end{fulllineitems}
10600
10601\begin{quote}\begin{description}
10602\item[{param}] \leavevmode
10603\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10604
10605\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{data} - Random data
10606
10607\end{description}\end{quote}
10608\begin{quote}\begin{description}
10609\item[{retval}] \leavevmode\begin{itemize}
10610\item {}
106110   Success; otherwise - Kerberos error codes
10612
10613\end{itemize}
10614
10615\end{description}\end{quote}
10616
10617Fills 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.
10618
10619
10620\subsubsection{krb5\_c\_random\_os\_entropy -  Collect entropy from the OS if possible.}
10621\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)}
10622
10623\begin{fulllineitems}
10624\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}}{}
10625\end{fulllineitems}
10626
10627\begin{quote}\begin{description}
10628\item[{param}] \leavevmode
10629\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10630
10631\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{strong} - Strongest available source of entropy
10632
10633\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{success} - 1 if OS provides entropy, 0 otherwise
10634
10635\end{description}\end{quote}
10636\begin{quote}\begin{description}
10637\item[{retval}] \leavevmode\begin{itemize}
10638\item {}
106390   Success; otherwise - Kerberos error codes
10640
10641\end{itemize}
10642
10643\end{description}\end{quote}
10644
10645If \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.
10646
10647
10648\subsubsection{krb5\_c\_random\_to\_key -  Generate an enctype-specific key from random data.}
10649\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)}
10650
10651\begin{fulllineitems}
10652\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}}{}
10653\end{fulllineitems}
10654
10655\begin{quote}\begin{description}
10656\item[{param}] \leavevmode
10657\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10658
10659\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
10660
10661\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{random\_data} - Random input data
10662
10663\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{k5\_random\_key} - Resulting key
10664
10665\end{description}\end{quote}
10666\begin{quote}\begin{description}
10667\item[{retval}] \leavevmode\begin{itemize}
10668\item {}
106690   Success; otherwise - Kerberos error codes
10670
10671\end{itemize}
10672
10673\end{description}\end{quote}
10674
10675This function takes random input data \sphinxstyleemphasis{random\_data} and produces a valid key \sphinxstyleemphasis{k5\_random\_key} for a given \sphinxstyleemphasis{enctype} .
10676
10677
10678\sphinxstrong{See also:}
10679
10680
10681{\hyperref[\detokenize{appdev/refs/api/krb5_c_keylengths:c.krb5_c_keylengths}]{\sphinxcrossref{\sphinxcode{krb5\_c\_keylengths()}}}}
10682
10683
10684
10685\begin{sphinxadmonition}{note}{Note:}
10686It 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.
10687\end{sphinxadmonition}
10688
10689
10690\subsubsection{krb5\_c\_string\_to\_key -  Convert a string (such a password) to a key.}
10691\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)}
10692
10693\begin{fulllineitems}
10694\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}}{}
10695\end{fulllineitems}
10696
10697\begin{quote}\begin{description}
10698\item[{param}] \leavevmode
10699\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10700
10701\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
10702
10703\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to be converted
10704
10705\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{salt} - Salt value
10706
10707\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Generated key
10708
10709\end{description}\end{quote}
10710\begin{quote}\begin{description}
10711\item[{retval}] \leavevmode\begin{itemize}
10712\item {}
107130   Success; otherwise - Kerberos error codes
10714
10715\end{itemize}
10716
10717\end{description}\end{quote}
10718
10719This 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.
10720
10721
10722\subsubsection{krb5\_c\_string\_to\_key\_with\_params -  Convert a string (such as a password) to a key with additional parameters.}
10723\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)}
10724
10725\begin{fulllineitems}
10726\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}}{}
10727\end{fulllineitems}
10728
10729\begin{quote}\begin{description}
10730\item[{param}] \leavevmode
10731\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10732
10733\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
10734
10735\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{string} - String to be converted
10736
10737\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{salt} - Salt value
10738
10739\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{params} - Parameters
10740
10741\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{key} - Generated key
10742
10743\end{description}\end{quote}
10744\begin{quote}\begin{description}
10745\item[{retval}] \leavevmode\begin{itemize}
10746\item {}
107470   Success; otherwise - Kerberos error codes
10748
10749\end{itemize}
10750
10751\end{description}\end{quote}
10752
10753This 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.
10754
10755
10756\subsubsection{krb5\_c\_valid\_cksumtype -  Verify that specified checksum type is a valid Kerberos checksum type.}
10757\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)}
10758
10759\begin{fulllineitems}
10760\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}}{}
10761\end{fulllineitems}
10762
10763\begin{quote}\begin{description}
10764\item[{param}] \leavevmode
10765\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ctype} - Checksum type
10766
10767\end{description}\end{quote}
10768\begin{quote}\begin{description}
10769\item[{return}] \leavevmode\begin{itemize}
10770\item {}
10771TRUE if ctype is valid, FALSE if not
10772
10773\end{itemize}
10774
10775\end{description}\end{quote}
10776
10777
10778\subsubsection{krb5\_c\_valid\_enctype -  Verify that a specified encryption type is a valid Kerberos encryption type.}
10779\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)}
10780
10781\begin{fulllineitems}
10782\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}}{}
10783\end{fulllineitems}
10784
10785\begin{quote}\begin{description}
10786\item[{param}] \leavevmode
10787\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ktype} - Encryption type
10788
10789\end{description}\end{quote}
10790\begin{quote}\begin{description}
10791\item[{return}] \leavevmode\begin{itemize}
10792\item {}
10793TRUE if ktype is valid, FALSE if not
10794
10795\end{itemize}
10796
10797\end{description}\end{quote}
10798
10799
10800\subsubsection{krb5\_c\_verify\_checksum -  Verify a checksum (operates on keyblock).}
10801\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)}
10802
10803\begin{fulllineitems}
10804\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}}{}
10805\end{fulllineitems}
10806
10807\begin{quote}\begin{description}
10808\item[{param}] \leavevmode
10809\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10810
10811\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum
10812
10813\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - \sphinxstyleemphasis{key} usage
10814
10815\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Data to be used to compute a new checksum using \sphinxstyleemphasis{key} to compare \sphinxstyleemphasis{cksum} against
10816
10817\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksum} - Checksum to be verified
10818
10819\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{valid} - Non-zero for success, zero for failure
10820
10821\end{description}\end{quote}
10822\begin{quote}\begin{description}
10823\item[{retval}] \leavevmode\begin{itemize}
10824\item {}
108250   Success; otherwise - Kerberos error codes
10826
10827\end{itemize}
10828
10829\end{description}\end{quote}
10830
10831This 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.
10832
10833\begin{sphinxadmonition}{note}{Note:}
10834This 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} .
10835\end{sphinxadmonition}
10836
10837
10838\subsubsection{krb5\_c\_verify\_checksum\_iov -  Validate a checksum element in IOV array (operates on keyblock).}
10839\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)}
10840
10841\begin{fulllineitems}
10842\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}}{}
10843\end{fulllineitems}
10844
10845\begin{quote}\begin{description}
10846\item[{param}] \leavevmode
10847\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10848
10849\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type (0 for mandatory type)
10850
10851\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum
10852
10853\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
10854
10855\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - IOV array
10856
10857\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data}
10858
10859\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{valid} - Non-zero for success, zero for failure
10860
10861\end{description}\end{quote}
10862\begin{quote}\begin{description}
10863\item[{retval}] \leavevmode\begin{itemize}
10864\item {}
108650   Success; otherwise - Kerberos error codes
10866
10867\end{itemize}
10868
10869\end{description}\end{quote}
10870
10871Confirm 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.
10872
10873
10874\sphinxstrong{See also:}
10875
10876
10877{\hyperref[\detokenize{appdev/refs/api/krb5_c_make_checksum_iov:c.krb5_c_make_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_c\_make\_checksum\_iov()}}}}
10878
10879
10880
10881\begin{sphinxadmonition}{note}{Note:}
10882This 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} .
10883\end{sphinxadmonition}
10884
10885
10886\subsubsection{krb5\_cksumtype\_to\_string -  Convert a checksum type to a string.}
10887\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)}
10888
10889\begin{fulllineitems}
10890\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}}{}
10891\end{fulllineitems}
10892
10893\begin{quote}\begin{description}
10894\item[{param}] \leavevmode
10895\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type
10896
10897\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to hold converted checksum type
10898
10899\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Storage available in \sphinxstyleemphasis{buffer}
10900
10901\end{description}\end{quote}
10902\begin{quote}\begin{description}
10903\item[{retval}] \leavevmode\begin{itemize}
10904\item {}
109050   Success; otherwise - Kerberos error codes
10906
10907\end{itemize}
10908
10909\end{description}\end{quote}
10910
10911
10912\subsubsection{krb5\_decode\_authdata\_container -  Unwrap authorization data.}
10913\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)}
10914
10915\begin{fulllineitems}
10916\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}}{}
10917\end{fulllineitems}
10918
10919\begin{quote}\begin{description}
10920\item[{param}] \leavevmode
10921\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
10922
10923\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - \sphinxcode{KRB5\_AUTHDATA} type of \sphinxstyleemphasis{container}
10924
10925\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{container} - Authorization data to be decoded
10926
10927\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{authdata} - List of decoded authorization data
10928
10929\end{description}\end{quote}
10930\begin{quote}\begin{description}
10931\item[{retval}] \leavevmode\begin{itemize}
10932\item {}
109330   Success; otherwise - Kerberos error codes
10934
10935\end{itemize}
10936
10937\end{description}\end{quote}
10938
10939
10940\sphinxstrong{See also:}
10941
10942
10943{\hyperref[\detokenize{appdev/refs/api/krb5_encode_authdata_container:c.krb5_encode_authdata_container}]{\sphinxcrossref{\sphinxcode{krb5\_encode\_authdata\_container()}}}}
10944
10945
10946
10947
10948\subsubsection{krb5\_decode\_ticket -  Decode an ASN.1-formatted ticket.}
10949\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)}
10950
10951\begin{fulllineitems}
10952\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}}{}
10953\end{fulllineitems}
10954
10955\begin{quote}\begin{description}
10956\item[{param}] \leavevmode
10957\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{code} - ASN.1-formatted ticket
10958
10959\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{rep} - Decoded ticket information
10960
10961\end{description}\end{quote}
10962\begin{quote}\begin{description}
10963\item[{retval}] \leavevmode\begin{itemize}
10964\item {}
109650   Success; otherwise - Kerberos error codes
10966
10967\end{itemize}
10968
10969\end{description}\end{quote}
10970
10971
10972\subsubsection{krb5\_deltat\_to\_string -  Convert a relative time value to a string.}
10973\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)}
10974
10975\begin{fulllineitems}
10976\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}}{}
10977\end{fulllineitems}
10978
10979\begin{quote}\begin{description}
10980\item[{param}] \leavevmode
10981\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{deltat} - Relative time value to convert
10982
10983\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to hold time string
10984
10985\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Storage available in \sphinxstyleemphasis{buffer}
10986
10987\end{description}\end{quote}
10988\begin{quote}\begin{description}
10989\item[{retval}] \leavevmode\begin{itemize}
10990\item {}
109910   Success; otherwise - Kerberos error codes
10992
10993\end{itemize}
10994
10995\end{description}\end{quote}
10996
10997
10998\subsubsection{krb5\_encode\_authdata\_container -  Wrap authorization data in a container.}
10999\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)}
11000
11001\begin{fulllineitems}
11002\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}}{}
11003\end{fulllineitems}
11004
11005\begin{quote}\begin{description}
11006\item[{param}] \leavevmode
11007\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11008
11009\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{type} - \sphinxcode{KRB5\_AUTHDATA} type of \sphinxstyleemphasis{container}
11010
11011\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{authdata} - List of authorization data to be encoded
11012
11013\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{container} - List of encoded authorization data
11014
11015\end{description}\end{quote}
11016\begin{quote}\begin{description}
11017\item[{retval}] \leavevmode\begin{itemize}
11018\item {}
110190   Success; otherwise - Kerberos error codes
11020
11021\end{itemize}
11022
11023\end{description}\end{quote}
11024
11025The result is returned in \sphinxstyleemphasis{container} as a single-element list.
11026
11027
11028\sphinxstrong{See also:}
11029
11030
11031{\hyperref[\detokenize{appdev/refs/api/krb5_decode_authdata_container:c.krb5_decode_authdata_container}]{\sphinxcrossref{\sphinxcode{krb5\_decode\_authdata\_container()}}}}
11032
11033
11034
11035
11036\subsubsection{krb5\_enctype\_to\_name -  Convert an encryption type to a name or alias.}
11037\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)}
11038
11039\begin{fulllineitems}
11040\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}}{}
11041\end{fulllineitems}
11042
11043\begin{quote}\begin{description}
11044\item[{param}] \leavevmode
11045\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
11046
11047\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{shortest} - Flag
11048
11049\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to hold encryption type string
11050
11051\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Storage available in \sphinxstyleemphasis{buffer}
11052
11053\end{description}\end{quote}
11054\begin{quote}\begin{description}
11055\item[{retval}] \leavevmode\begin{itemize}
11056\item {}
110570   Success; otherwise - Kerberos error codes
11058
11059\end{itemize}
11060
11061\end{description}\end{quote}
11062
11063If \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”).
11064
11065\begin{sphinxadmonition}{note}{Note:}
11066New in 1.9
11067\end{sphinxadmonition}
11068
11069
11070\subsubsection{krb5\_enctype\_to\_string -  Convert an encryption type to a string.}
11071\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)}
11072
11073\begin{fulllineitems}
11074\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}}{}
11075\end{fulllineitems}
11076
11077\begin{quote}\begin{description}
11078\item[{param}] \leavevmode
11079\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{enctype} - Encryption type
11080
11081\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{buffer} - Buffer to hold encryption type string
11082
11083\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{buflen} - Storage available in \sphinxstyleemphasis{buffer}
11084
11085\end{description}\end{quote}
11086\begin{quote}\begin{description}
11087\item[{retval}] \leavevmode\begin{itemize}
11088\item {}
110890   Success; otherwise - Kerberos error codes
11090
11091\end{itemize}
11092
11093\end{description}\end{quote}
11094
11095
11096\subsubsection{krb5\_free\_checksum -  Free a krb5\_checksum structure.}
11097\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)}
11098
11099\begin{fulllineitems}
11100\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}}{}
11101\end{fulllineitems}
11102
11103\begin{quote}\begin{description}
11104\item[{param}] \leavevmode
11105\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11106
11107\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Checksum structure to be freed
11108
11109\end{description}\end{quote}
11110
11111This function frees the contents of \sphinxstyleemphasis{val} and the structure itself.
11112
11113
11114\subsubsection{krb5\_free\_checksum\_contents -  Free the contents of a krb5\_checksum structure.}
11115\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)}
11116
11117\begin{fulllineitems}
11118\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}}{}
11119\end{fulllineitems}
11120
11121\begin{quote}\begin{description}
11122\item[{param}] \leavevmode
11123\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11124
11125\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Checksum structure to free contents of
11126
11127\end{description}\end{quote}
11128
11129This function frees the contents of \sphinxstyleemphasis{val} , but not the structure itself.
11130
11131
11132\subsubsection{krb5\_free\_cksumtypes -  Free an array of checksum types.}
11133\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)}
11134
11135\begin{fulllineitems}
11136\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}}{}
11137\end{fulllineitems}
11138
11139\begin{quote}\begin{description}
11140\item[{param}] \leavevmode
11141\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11142
11143\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{val} - Array of checksum types to be freed
11144
11145\end{description}\end{quote}
11146
11147
11148\subsubsection{krb5\_free\_tgt\_creds -  Free an array of credential structures.}
11149\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)}
11150
11151\begin{fulllineitems}
11152\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}}{}
11153\end{fulllineitems}
11154
11155\begin{quote}\begin{description}
11156\item[{param}] \leavevmode
11157\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11158
11159\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{tgts} - Null-terminated array of credentials to free
11160
11161\end{description}\end{quote}
11162
11163\begin{sphinxadmonition}{note}{Note:}
11164The last entry in the array \sphinxstyleemphasis{tgts} must be a NULL pointer.
11165\end{sphinxadmonition}
11166
11167
11168\subsubsection{krb5\_k\_create\_key -  Create a krb5\_key from the enctype and key data in a keyblock.}
11169\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)}
11170
11171\begin{fulllineitems}
11172\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}}{}
11173\end{fulllineitems}
11174
11175\begin{quote}\begin{description}
11176\item[{param}] \leavevmode
11177\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11178
11179\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key\_data} - Keyblock
11180
11181\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out} - Opaque key
11182
11183\end{description}\end{quote}
11184\begin{quote}\begin{description}
11185\item[{retval}] \leavevmode\begin{itemize}
11186\item {}
111870   Success; otherwise - KRB5\_BAD\_ENCTYPE
11188
11189\end{itemize}
11190
11191\end{description}\end{quote}
11192
11193The 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.
11194
11195
11196\subsubsection{krb5\_k\_decrypt -  Decrypt data using a key (operates on opaque key).}
11197\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)}
11198
11199\begin{fulllineitems}
11200\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}}{}
11201\end{fulllineitems}
11202
11203\begin{quote}\begin{description}
11204\item[{param}] \leavevmode
11205\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11206
11207\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key
11208
11209\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
11210
11211\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed
11212
11213\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Encrypted data
11214
11215\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Decrypted data
11216
11217\end{description}\end{quote}
11218\begin{quote}\begin{description}
11219\item[{retval}] \leavevmode\begin{itemize}
11220\item {}
112210   Success; otherwise - Kerberos error codes
11222
11223\end{itemize}
11224
11225\end{description}\end{quote}
11226
11227This 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.
11228
11229\begin{sphinxadmonition}{note}{Note:}
11230The 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.
11231\end{sphinxadmonition}
11232
11233
11234\subsubsection{krb5\_k\_decrypt\_iov -  Decrypt data in place supporting AEAD (operates on opaque key).}
11235\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)}
11236
11237\begin{fulllineitems}
11238\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}}{}
11239\end{fulllineitems}
11240
11241\begin{quote}\begin{description}
11242\item[{param}] \leavevmode
11243\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11244
11245\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key
11246
11247\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
11248
11249\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed
11250
11251\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array. Modified in-place.
11252
11253\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data}
11254
11255\end{description}\end{quote}
11256\begin{quote}\begin{description}
11257\item[{retval}] \leavevmode\begin{itemize}
11258\item {}
112590   Success; otherwise - Kerberos error codes
11260
11261\end{itemize}
11262
11263\end{description}\end{quote}
11264
11265This 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.
11266
11267
11268\sphinxstrong{See also:}
11269
11270
11271{\hyperref[\detokenize{appdev/refs/api/krb5_k_encrypt_iov:c.krb5_k_encrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_k\_encrypt\_iov()}}}}
11272
11273
11274
11275\begin{sphinxadmonition}{note}{Note:}
11276On 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.
11277\end{sphinxadmonition}
11278
11279
11280\subsubsection{krb5\_k\_encrypt -  Encrypt data using a key (operates on opaque key).}
11281\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)}
11282
11283\begin{fulllineitems}
11284\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}}{}
11285\end{fulllineitems}
11286
11287\begin{quote}\begin{description}
11288\item[{param}] \leavevmode
11289\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11290
11291\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key
11292
11293\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
11294
11295\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed
11296
11297\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Data to be encrypted
11298
11299\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Encrypted data
11300
11301\end{description}\end{quote}
11302\begin{quote}\begin{description}
11303\item[{retval}] \leavevmode\begin{itemize}
11304\item {}
113050   Success; otherwise - Kerberos error codes
11306
11307\end{itemize}
11308
11309\end{description}\end{quote}
11310
11311This 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.
11312
11313\begin{sphinxadmonition}{note}{Note:}
11314The 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.
11315\end{sphinxadmonition}
11316
11317
11318\subsubsection{krb5\_k\_encrypt\_iov -  Encrypt data in place supporting AEAD (operates on opaque key).}
11319\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)}
11320
11321\begin{fulllineitems}
11322\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}}{}
11323\end{fulllineitems}
11324
11325\begin{quote}\begin{description}
11326\item[{param}] \leavevmode
11327\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11328
11329\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key
11330
11331\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
11332
11333\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cipher\_state} - Cipher state; specify NULL if not needed
11334
11335\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array. Modified in-place.
11336
11337\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data}
11338
11339\end{description}\end{quote}
11340\begin{quote}\begin{description}
11341\item[{retval}] \leavevmode\begin{itemize}
11342\item {}
113430   Success; otherwise - Kerberos error codes
11344
11345\end{itemize}
11346
11347\end{description}\end{quote}
11348
11349This 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.
11350
11351
11352\sphinxstrong{See also:}
11353
11354
11355{\hyperref[\detokenize{appdev/refs/api/krb5_k_decrypt_iov:c.krb5_k_decrypt_iov}]{\sphinxcrossref{\sphinxcode{krb5\_k\_decrypt\_iov()}}}}
11356
11357
11358
11359\begin{sphinxadmonition}{note}{Note:}
11360On 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.
11361\end{sphinxadmonition}
11362
11363
11364\subsubsection{krb5\_k\_free\_key -  Decrement the reference count on a key and free it if it hits zero.}
11365\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)}
11366
11367\begin{fulllineitems}
11368\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}}{}
11369\end{fulllineitems}
11370
11371\begin{quote}\begin{description}
11372\item[{param}] \leavevmode
11373\sphinxstylestrong{context}
11374
11375\sphinxstylestrong{key}
11376
11377\end{description}\end{quote}
11378
11379
11380\subsubsection{krb5\_k\_key\_enctype -  Retrieve the enctype of a krb5\_key structure.}
11381\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)}
11382
11383\begin{fulllineitems}
11384\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}}{}
11385\end{fulllineitems}
11386
11387\begin{quote}\begin{description}
11388\item[{param}] \leavevmode
11389\sphinxstylestrong{context}
11390
11391\sphinxstylestrong{key}
11392
11393\end{description}\end{quote}
11394
11395
11396\subsubsection{krb5\_k\_key\_keyblock -  Retrieve a copy of the keyblock from a krb5\_key structure.}
11397\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)}
11398
11399\begin{fulllineitems}
11400\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}}{}
11401\end{fulllineitems}
11402
11403\begin{quote}\begin{description}
11404\item[{param}] \leavevmode
11405\sphinxstylestrong{context}
11406
11407\sphinxstylestrong{key}
11408
11409\sphinxstylestrong{key\_data}
11410
11411\end{description}\end{quote}
11412
11413
11414\subsubsection{krb5\_k\_make\_checksum -  Compute a checksum (operates on opaque key).}
11415\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)}
11416
11417\begin{fulllineitems}
11418\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}}{}
11419\end{fulllineitems}
11420
11421\begin{quote}\begin{description}
11422\item[{param}] \leavevmode
11423\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11424
11425\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type (0 for mandatory type)
11426
11427\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum
11428
11429\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
11430
11431\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Input data
11432
11433\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{cksum} - Generated checksum
11434
11435\end{description}\end{quote}
11436\begin{quote}\begin{description}
11437\item[{retval}] \leavevmode\begin{itemize}
11438\item {}
114390   Success; otherwise - Kerberos error codes
11440
11441\end{itemize}
11442
11443\end{description}\end{quote}
11444
11445This 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.
11446
11447
11448\sphinxstrong{See also:}
11449
11450
11451{\hyperref[\detokenize{appdev/refs/api/krb5_c_verify_checksum:c.krb5_c_verify_checksum}]{\sphinxcrossref{\sphinxcode{krb5\_c\_verify\_checksum()}}}}
11452
11453
11454
11455\begin{sphinxadmonition}{note}{Note:}
11456This 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} .
11457\end{sphinxadmonition}
11458
11459
11460\subsubsection{krb5\_k\_make\_checksum\_iov -  Fill in a checksum element in IOV array (operates on opaque key)}
11461\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)}
11462
11463\begin{fulllineitems}
11464\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}}{}
11465\end{fulllineitems}
11466
11467\begin{quote}\begin{description}
11468\item[{param}] \leavevmode
11469\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11470
11471\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type (0 for mandatory type)
11472
11473\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum
11474
11475\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
11476
11477\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{data} - IOV array
11478
11479\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data}
11480
11481\end{description}\end{quote}
11482\begin{quote}\begin{description}
11483\item[{retval}] \leavevmode\begin{itemize}
11484\item {}
114850   Success; otherwise - Kerberos error codes
11486
11487\end{itemize}
11488
11489\end{description}\end{quote}
11490
11491Create 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.
11492
11493
11494\sphinxstrong{See also:}
11495
11496
11497{\hyperref[\detokenize{appdev/refs/api/krb5_k_verify_checksum_iov:c.krb5_k_verify_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_k\_verify\_checksum\_iov()}}}}
11498
11499
11500
11501\begin{sphinxadmonition}{note}{Note:}
11502This 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} .
11503\end{sphinxadmonition}
11504
11505
11506\subsubsection{krb5\_k\_prf -  Generate enctype-specific pseudo-random bytes (operates on opaque key).}
11507\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)}
11508
11509\begin{fulllineitems}
11510\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}}{}
11511\end{fulllineitems}
11512
11513\begin{quote}\begin{description}
11514\item[{param}] \leavevmode
11515\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11516
11517\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Key
11518
11519\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{input} - Input data
11520
11521\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{output} - Output data
11522
11523\end{description}\end{quote}
11524\begin{quote}\begin{description}
11525\item[{retval}] \leavevmode\begin{itemize}
11526\item {}
115270   Success; otherwise - Kerberos error codes
11528
11529\end{itemize}
11530
11531\end{description}\end{quote}
11532
11533This 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.
11534
11535\begin{sphinxadmonition}{note}{Note:}
11536This 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} .
11537\end{sphinxadmonition}
11538
11539
11540\subsubsection{krb5\_k\_reference\_key -  Increment the reference count on a key.}
11541\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)}
11542
11543\begin{fulllineitems}
11544\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}}{}
11545\end{fulllineitems}
11546
11547\begin{quote}\begin{description}
11548\item[{param}] \leavevmode
11549\sphinxstylestrong{context}
11550
11551\sphinxstylestrong{key}
11552
11553\end{description}\end{quote}
11554
11555
11556\subsubsection{krb5\_k\_verify\_checksum -  Verify a checksum (operates on opaque key).}
11557\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)}
11558
11559\begin{fulllineitems}
11560\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}}{}
11561\end{fulllineitems}
11562
11563\begin{quote}\begin{description}
11564\item[{param}] \leavevmode
11565\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11566
11567\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum
11568
11569\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - \sphinxstyleemphasis{key} usage
11570
11571\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - Data to be used to compute a new checksum using \sphinxstyleemphasis{key} to compare \sphinxstyleemphasis{cksum} against
11572
11573\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksum} - Checksum to be verified
11574
11575\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{valid} - Non-zero for success, zero for failure
11576
11577\end{description}\end{quote}
11578\begin{quote}\begin{description}
11579\item[{retval}] \leavevmode\begin{itemize}
11580\item {}
115810   Success; otherwise - Kerberos error codes
11582
11583\end{itemize}
11584
11585\end{description}\end{quote}
11586
11587This 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.
11588
11589\begin{sphinxadmonition}{note}{Note:}
11590This 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} .
11591\end{sphinxadmonition}
11592
11593
11594\subsubsection{krb5\_k\_verify\_checksum\_iov -  Validate a checksum element in IOV array (operates on opaque key).}
11595\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)}
11596
11597\begin{fulllineitems}
11598\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}}{}
11599\end{fulllineitems}
11600
11601\begin{quote}\begin{description}
11602\item[{param}] \leavevmode
11603\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11604
11605\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{cksumtype} - Checksum type (0 for mandatory type)
11606
11607\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{key} - Encryption key for a keyed checksum
11608
11609\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{usage} - Key usage (see \sphinxcode{KRB5\_KEYUSAGE} types)
11610
11611\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{data} - IOV array
11612
11613\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{num\_data} - Size of \sphinxstyleemphasis{data}
11614
11615\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{valid} - Non-zero for success, zero for failure
11616
11617\end{description}\end{quote}
11618\begin{quote}\begin{description}
11619\item[{retval}] \leavevmode\begin{itemize}
11620\item {}
116210   Success; otherwise - Kerberos error codes
11622
11623\end{itemize}
11624
11625\end{description}\end{quote}
11626
11627Confirm 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.
11628
11629
11630\sphinxstrong{See also:}
11631
11632
11633{\hyperref[\detokenize{appdev/refs/api/krb5_k_make_checksum_iov:c.krb5_k_make_checksum_iov}]{\sphinxcrossref{\sphinxcode{krb5\_k\_make\_checksum\_iov()}}}}
11634
11635
11636
11637\begin{sphinxadmonition}{note}{Note:}
11638This 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} .
11639\end{sphinxadmonition}
11640
11641
11642\subsection{Legacy convenience interfaces}
11643\label{\detokenize{appdev/refs/api/index:legacy-convenience-interfaces}}
11644
11645\subsubsection{krb5\_recvauth -  Server function for sendauth protocol.}
11646\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)}
11647
11648\begin{fulllineitems}
11649\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}}{}
11650\end{fulllineitems}
11651
11652\begin{quote}\begin{description}
11653\item[{param}] \leavevmode
11654\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11655
11656\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} - Pre-existing or newly created auth context
11657
11658\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fd} - File descriptor
11659
11660\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{appl\_version} - Application protocol version to be matched against the client’s application version
11661
11662\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Server principal (NULL for any in \sphinxstyleemphasis{keytab} )
11663
11664\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Additional specifications
11665
11666\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Key table containing service keys
11667
11668\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ticket} - Ticket (NULL if not needed)
11669
11670\end{description}\end{quote}
11671\begin{quote}\begin{description}
11672\item[{retval}] \leavevmode\begin{itemize}
11673\item {}
116740   Success; otherwise - Kerberos error codes
11675
11676\end{itemize}
11677
11678\end{description}\end{quote}
11679
11680This function performs the server side of a sendauth/recvauth exchange by sending and receiving messages over \sphinxstyleemphasis{fd} .
11681
11682Use {\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.
11683
11684
11685\sphinxstrong{See also:}
11686
11687
11688{\hyperref[\detokenize{appdev/refs/api/krb5_sendauth:c.krb5_sendauth}]{\sphinxcrossref{\sphinxcode{krb5\_sendauth()}}}}
11689
11690
11691
11692
11693\subsubsection{krb5\_recvauth\_version -  Server function for sendauth protocol with version parameter.}
11694\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)}
11695
11696\begin{fulllineitems}
11697\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}}{}
11698\end{fulllineitems}
11699
11700\begin{quote}\begin{description}
11701\item[{param}] \leavevmode
11702\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11703
11704\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} - Pre-existing or newly created auth context
11705
11706\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fd} - File descriptor
11707
11708\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Server principal (NULL for any in \sphinxstyleemphasis{keytab} )
11709
11710\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{flags} - Additional specifications
11711
11712\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{keytab} - Decryption key
11713
11714\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{ticket} - Ticket (NULL if not needed)
11715
11716\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{version} - sendauth protocol version (NULL if not needed)
11717
11718\end{description}\end{quote}
11719\begin{quote}\begin{description}
11720\item[{retval}] \leavevmode\begin{itemize}
11721\item {}
117220   Success; otherwise - Kerberos error codes
11723
11724\end{itemize}
11725
11726\end{description}\end{quote}
11727
11728This 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} .
11729
11730
11731\subsubsection{krb5\_sendauth -  Client function for sendauth protocol.}
11732\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)}
11733
11734\begin{fulllineitems}
11735\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}}{}
11736\end{fulllineitems}
11737
11738\begin{quote}\begin{description}
11739\item[{param}] \leavevmode
11740\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11741
11742\sphinxstylestrong{{[}inout{]}} \sphinxstylestrong{auth\_context} - Pre-existing or newly created auth context
11743
11744\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{fd} - File descriptor that describes network socket
11745
11746\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{appl\_version} - Application protocol version to be matched with the receiver’s application version
11747
11748\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{client} - Client principal
11749
11750\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{server} - Server principal
11751
11752\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ap\_req\_options} - \sphinxcode{AP\_OPTS} options
11753
11754\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_data} - Data to be sent to the server
11755
11756\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{in\_creds} - Input credentials, or NULL to use \sphinxstyleemphasis{ccache}
11757
11758\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{ccache} - Credential cache
11759
11760\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{error} - If non-null, contains KRB\_ERROR message returned from server
11761
11762\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
11763
11764\sphinxstylestrong{{[}out{]}} \sphinxstylestrong{out\_creds} - If non-null, the retrieved credentials
11765
11766\end{description}\end{quote}
11767\begin{quote}\begin{description}
11768\item[{retval}] \leavevmode\begin{itemize}
11769\item {}
117700   Success; otherwise - Kerberos error codes
11771
11772\end{itemize}
11773
11774\end{description}\end{quote}
11775
11776This function performs the client side of a sendauth/recvauth exchange by sending and receiving messages over \sphinxstyleemphasis{fd} .
11777
11778Credentials may be specified in three ways:
11779\begin{quote}
11780\begin{itemize}
11781\item {}
11782If \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} .
11783
11784\item {}
11785If \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.
11786
11787\item {}
11788If \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.
11789
11790\end{itemize}
11791
11792If the server is using a different application protocol than that specified in \sphinxstyleemphasis{appl\_version} , an error will be returned.
11793\end{quote}
11794
11795Use {\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.
11796
11797
11798\sphinxstrong{See also:}
11799
11800
11801{\hyperref[\detokenize{appdev/refs/api/krb5_recvauth:c.krb5_recvauth}]{\sphinxcrossref{\sphinxcode{krb5\_recvauth()}}}}
11802
11803
11804
11805
11806\subsection{Deprecated public interfaces}
11807\label{\detokenize{appdev/refs/api/index:deprecated-public-interfaces}}
11808
11809\subsubsection{krb5\_524\_convert\_creds -  Convert a Kerberos V5 credentials to a Kerberos V4 credentials.}
11810\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)}
11811
11812\begin{fulllineitems}
11813\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}}{}
11814\end{fulllineitems}
11815
11816\begin{quote}\begin{description}
11817\item[{param}] \leavevmode
11818\sphinxstylestrong{context}
11819
11820\sphinxstylestrong{v5creds}
11821
11822\sphinxstylestrong{v4creds}
11823
11824\end{description}\end{quote}
11825\begin{quote}\begin{description}
11826\item[{retval}] \leavevmode\begin{itemize}
11827\item {}
11828KRB524\_KRB4\_DISABLED   (always)
11829
11830\end{itemize}
11831
11832\end{description}\end{quote}
11833
11834\begin{sphinxadmonition}{note}{Note:}
11835Not implemented
11836\end{sphinxadmonition}
11837
11838
11839\subsubsection{krb5\_auth\_con\_getlocalsubkey}
11840\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)}
11841
11842\begin{fulllineitems}
11843\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}}{}
11844\end{fulllineitems}
11845
11846\begin{quote}\begin{description}
11847\item[{param}] \leavevmode
11848\sphinxstylestrong{context}
11849
11850\sphinxstylestrong{auth\_context}
11851
11852\sphinxstylestrong{keyblock}
11853
11854\end{description}\end{quote}
11855
11856DEPRECATED Replaced by krb5\_auth\_con\_getsendsubkey() .
11857
11858
11859\subsubsection{krb5\_auth\_con\_getremotesubkey}
11860\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)}
11861
11862\begin{fulllineitems}
11863\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}}{}
11864\end{fulllineitems}
11865
11866\begin{quote}\begin{description}
11867\item[{param}] \leavevmode
11868\sphinxstylestrong{context}
11869
11870\sphinxstylestrong{auth\_context}
11871
11872\sphinxstylestrong{keyblock}
11873
11874\end{description}\end{quote}
11875
11876DEPRECATED Replaced by krb5\_auth\_con\_getrecvsubkey() .
11877
11878
11879\subsubsection{krb5\_auth\_con\_initivector -  Cause an auth context to use cipher state.}
11880\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)}
11881
11882\begin{fulllineitems}
11883\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}}{}
11884\end{fulllineitems}
11885
11886\begin{quote}\begin{description}
11887\item[{param}] \leavevmode
11888\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{context} - Library context
11889
11890\sphinxstylestrong{{[}in{]}} \sphinxstylestrong{auth\_context} - Authentication context
11891
11892\end{description}\end{quote}
11893\begin{quote}\begin{description}
11894\item[{retval}] \leavevmode\begin{itemize}
11895\item {}
118960   Success; otherwise - Kerberos error codes
11897
11898\end{itemize}
11899
11900\end{description}\end{quote}
11901
11902Prepare \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.
11903
11904
11905\subsubsection{krb5\_build\_principal\_va}
11906\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)}
11907
11908\begin{fulllineitems}
11909\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}}{}
11910\end{fulllineitems}
11911
11912\begin{quote}\begin{description}
11913\item[{param}] \leavevmode
11914\sphinxstylestrong{context}
11915
11916\sphinxstylestrong{princ}
11917
11918\sphinxstylestrong{rlen}
11919
11920\sphinxstylestrong{realm}
11921
11922\sphinxstylestrong{ap}
11923
11924\end{description}\end{quote}
11925
11926DEPRECATED Replaced by krb5\_build\_principal\_alloc\_va() .
11927
11928
11929\subsubsection{krb5\_c\_random\_seed}
11930\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)}
11931
11932\begin{fulllineitems}
11933\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}}{}
11934\end{fulllineitems}
11935
11936\begin{quote}\begin{description}
11937\item[{param}] \leavevmode
11938\sphinxstylestrong{context}
11939
11940\sphinxstylestrong{data}
11941
11942\end{description}\end{quote}
11943
11944DEPRECATED Replaced by krb5\_c\_* API family.
11945
11946
11947\subsubsection{krb5\_calculate\_checksum}
11948\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)}
11949
11950\begin{fulllineitems}
11951\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}}{}
11952\end{fulllineitems}
11953
11954\begin{quote}\begin{description}
11955\item[{param}] \leavevmode
11956\sphinxstylestrong{context}
11957
11958\sphinxstylestrong{ctype}
11959
11960\sphinxstylestrong{in}
11961
11962\sphinxstylestrong{in\_length}
11963
11964\sphinxstylestrong{seed}
11965
11966\sphinxstylestrong{seed\_length}
11967
11968\sphinxstylestrong{outcksum}
11969
11970\end{description}\end{quote}
11971
11972DEPRECATED See krb5\_c\_make\_checksum()
11973
11974
11975\subsubsection{krb5\_checksum\_size}
11976\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)}
11977
11978\begin{fulllineitems}
11979\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}}{}
11980\end{fulllineitems}
11981
11982\begin{quote}\begin{description}
11983\item[{param}] \leavevmode
11984\sphinxstylestrong{context}
11985
11986\sphinxstylestrong{ctype}
11987
11988\end{description}\end{quote}
11989
11990DEPRECATED See krb5\_c\_checksum\_length()
11991
11992
11993\subsubsection{krb5\_encrypt}
11994\label{\detokenize{appdev/refs/api/krb5_encrypt:krb5-encrypt}}\label{\detokenize{appdev/refs/api/krb5_encrypt::doc}}\index{krb5\_encrypt (C function)}
11995
11996\begin{fulllineitems}
11997\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}}{}
11998\end{fulllineitems}
11999
12000\begin{quote}\begin{description}
12001\item[{param}] \leavevmode
12002\sphinxstylestrong{context}
12003
12004\sphinxstylestrong{inptr}
12005
12006\sphinxstylestrong{outptr}
12007
12008\sphinxstylestrong{size}
12009
12010\sphinxstylestrong{eblock}
12011
12012\sphinxstylestrong{ivec}
12013
12014\end{description}\end{quote}
12015
12016DEPRECATED Replaced by krb5\_c\_* API family.
12017
12018
12019\subsubsection{krb5\_decrypt}
12020\label{\detokenize{appdev/refs/api/krb5_decrypt:krb5-decrypt}}\label{\detokenize{appdev/refs/api/krb5_decrypt::doc}}\index{krb5\_decrypt (C function)}
12021
12022\begin{fulllineitems}
12023\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}}{}
12024\end{fulllineitems}
12025
12026\begin{quote}\begin{description}
12027\item[{param}] \leavevmode
12028\sphinxstylestrong{context}
12029
12030\sphinxstylestrong{inptr}
12031
12032\sphinxstylestrong{outptr}
12033
12034\sphinxstylestrong{size}
12035
12036\sphinxstylestrong{eblock}
12037
12038\sphinxstylestrong{ivec}
12039
12040\end{description}\end{quote}
12041
12042DEPRECATED Replaced by krb5\_c\_* API family.
12043
12044
12045\subsubsection{krb5\_eblock\_enctype}
12046\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)}
12047
12048\begin{fulllineitems}
12049\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}}{}
12050\end{fulllineitems}
12051
12052\begin{quote}\begin{description}
12053\item[{param}] \leavevmode
12054\sphinxstylestrong{context}
12055
12056\sphinxstylestrong{eblock}
12057
12058\end{description}\end{quote}
12059
12060DEPRECATED Replaced by krb5\_c\_* API family.
12061
12062
12063\subsubsection{krb5\_encrypt\_size}
12064\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)}
12065
12066\begin{fulllineitems}
12067\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}}{}
12068\end{fulllineitems}
12069
12070\begin{quote}\begin{description}
12071\item[{param}] \leavevmode
12072\sphinxstylestrong{length}
12073
12074\sphinxstylestrong{crypto}
12075
12076\end{description}\end{quote}
12077
12078DEPRECATED Replaced by krb5\_c\_* API family.
12079
12080
12081\subsubsection{krb5\_finish\_key}
12082\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)}
12083
12084\begin{fulllineitems}
12085\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}}{}
12086\end{fulllineitems}
12087
12088\begin{quote}\begin{description}
12089\item[{param}] \leavevmode
12090\sphinxstylestrong{context}
12091
12092\sphinxstylestrong{eblock}
12093
12094\end{description}\end{quote}
12095
12096DEPRECATED Replaced by krb5\_c\_* API family.
12097
12098
12099\subsubsection{krb5\_finish\_random\_key}
12100\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)}
12101
12102\begin{fulllineitems}
12103\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}}{}
12104\end{fulllineitems}
12105
12106\begin{quote}\begin{description}
12107\item[{param}] \leavevmode
12108\sphinxstylestrong{context}
12109
12110\sphinxstylestrong{eblock}
12111
12112\sphinxstylestrong{ptr}
12113
12114\end{description}\end{quote}
12115
12116DEPRECATED Replaced by krb5\_c\_* API family.
12117
12118
12119\subsubsection{krb5\_cc\_gen\_new}
12120\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)}
12121
12122\begin{fulllineitems}
12123\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}}{}
12124\end{fulllineitems}
12125
12126\begin{quote}\begin{description}
12127\item[{param}] \leavevmode
12128\sphinxstylestrong{context}
12129
12130\sphinxstylestrong{cache}
12131
12132\end{description}\end{quote}
12133
12134
12135\subsubsection{krb5\_get\_credentials\_renew}
12136\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)}
12137
12138\begin{fulllineitems}
12139\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}}{}
12140\end{fulllineitems}
12141
12142\begin{quote}\begin{description}
12143\item[{param}] \leavevmode
12144\sphinxstylestrong{context}
12145
12146\sphinxstylestrong{options}
12147
12148\sphinxstylestrong{ccache}
12149
12150\sphinxstylestrong{in\_creds}
12151
12152\sphinxstylestrong{out\_creds}
12153
12154\end{description}\end{quote}
12155
12156DEPRECATED Replaced by krb5\_get\_renewed\_creds.
12157
12158
12159\subsubsection{krb5\_get\_credentials\_validate}
12160\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)}
12161
12162\begin{fulllineitems}
12163\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}}{}
12164\end{fulllineitems}
12165
12166\begin{quote}\begin{description}
12167\item[{param}] \leavevmode
12168\sphinxstylestrong{context}
12169
12170\sphinxstylestrong{options}
12171
12172\sphinxstylestrong{ccache}
12173
12174\sphinxstylestrong{in\_creds}
12175
12176\sphinxstylestrong{out\_creds}
12177
12178\end{description}\end{quote}
12179
12180DEPRECATED Replaced by krb5\_get\_validated\_creds.
12181
12182
12183\subsubsection{krb5\_get\_in\_tkt\_with\_password}
12184\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)}
12185
12186\begin{fulllineitems}
12187\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}}{}
12188\end{fulllineitems}
12189
12190\begin{quote}\begin{description}
12191\item[{param}] \leavevmode
12192\sphinxstylestrong{context}
12193
12194\sphinxstylestrong{options}
12195
12196\sphinxstylestrong{addrs}
12197
12198\sphinxstylestrong{ktypes}
12199
12200\sphinxstylestrong{pre\_auth\_types}
12201
12202\sphinxstylestrong{password}
12203
12204\sphinxstylestrong{ccache}
12205
12206\sphinxstylestrong{creds}
12207
12208\sphinxstylestrong{ret\_as\_reply}
12209
12210\end{description}\end{quote}
12211
12212DEPRECATED Replaced by krb5\_get\_init\_creds\_password() .
12213
12214
12215\subsubsection{krb5\_get\_in\_tkt\_with\_skey}
12216\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)}
12217
12218\begin{fulllineitems}
12219\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}}{}
12220\end{fulllineitems}
12221
12222\begin{quote}\begin{description}
12223\item[{param}] \leavevmode
12224\sphinxstylestrong{context}
12225
12226\sphinxstylestrong{options}
12227
12228\sphinxstylestrong{addrs}
12229
12230\sphinxstylestrong{ktypes}
12231
12232\sphinxstylestrong{pre\_auth\_types}
12233
12234\sphinxstylestrong{key}
12235
12236\sphinxstylestrong{ccache}
12237
12238\sphinxstylestrong{creds}
12239
12240\sphinxstylestrong{ret\_as\_reply}
12241
12242\end{description}\end{quote}
12243
12244DEPRECATED Replaced by krb5\_get\_init\_creds().
12245
12246
12247\subsubsection{krb5\_get\_in\_tkt\_with\_keytab}
12248\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)}
12249
12250\begin{fulllineitems}
12251\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}}{}
12252\end{fulllineitems}
12253
12254\begin{quote}\begin{description}
12255\item[{param}] \leavevmode
12256\sphinxstylestrong{context}
12257
12258\sphinxstylestrong{options}
12259
12260\sphinxstylestrong{addrs}
12261
12262\sphinxstylestrong{ktypes}
12263
12264\sphinxstylestrong{pre\_auth\_types}
12265
12266\sphinxstylestrong{arg\_keytab}
12267
12268\sphinxstylestrong{ccache}
12269
12270\sphinxstylestrong{creds}
12271
12272\sphinxstylestrong{ret\_as\_reply}
12273
12274\end{description}\end{quote}
12275
12276DEPRECATED Replaced by krb5\_get\_init\_creds\_keytab() .
12277
12278
12279\subsubsection{krb5\_get\_init\_creds\_opt\_init}
12280\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)}
12281
12282\begin{fulllineitems}
12283\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}}{}
12284\end{fulllineitems}
12285
12286\begin{quote}\begin{description}
12287\item[{param}] \leavevmode
12288\sphinxstylestrong{opt}
12289
12290\end{description}\end{quote}
12291
12292DEPRECATED Use krb5\_get\_init\_creds\_opt\_alloc() instead.
12293
12294
12295\subsubsection{krb5\_init\_random\_key}
12296\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)}
12297
12298\begin{fulllineitems}
12299\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}}{}
12300\end{fulllineitems}
12301
12302\begin{quote}\begin{description}
12303\item[{param}] \leavevmode
12304\sphinxstylestrong{context}
12305
12306\sphinxstylestrong{eblock}
12307
12308\sphinxstylestrong{keyblock}
12309
12310\sphinxstylestrong{ptr}
12311
12312\end{description}\end{quote}
12313
12314DEPRECATED Replaced by krb5\_c\_* API family.
12315
12316
12317\subsubsection{krb5\_kt\_free\_entry}
12318\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)}
12319
12320\begin{fulllineitems}
12321\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}}{}
12322\end{fulllineitems}
12323
12324\begin{quote}\begin{description}
12325\item[{param}] \leavevmode
12326\sphinxstylestrong{context}
12327
12328\sphinxstylestrong{entry}
12329
12330\end{description}\end{quote}
12331
12332DEPRECATED Use krb5\_free\_keytab\_entry\_contents instead.
12333
12334
12335\subsubsection{krb5\_random\_key}
12336\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)}
12337
12338\begin{fulllineitems}
12339\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}}{}
12340\end{fulllineitems}
12341
12342\begin{quote}\begin{description}
12343\item[{param}] \leavevmode
12344\sphinxstylestrong{context}
12345
12346\sphinxstylestrong{eblock}
12347
12348\sphinxstylestrong{ptr}
12349
12350\sphinxstylestrong{keyblock}
12351
12352\end{description}\end{quote}
12353
12354DEPRECATED Replaced by krb5\_c\_* API family.
12355
12356
12357\subsubsection{krb5\_process\_key}
12358\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)}
12359
12360\begin{fulllineitems}
12361\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}}{}
12362\end{fulllineitems}
12363
12364\begin{quote}\begin{description}
12365\item[{param}] \leavevmode
12366\sphinxstylestrong{context}
12367
12368\sphinxstylestrong{eblock}
12369
12370\sphinxstylestrong{key}
12371
12372\end{description}\end{quote}
12373
12374DEPRECATED Replaced by krb5\_c\_* API family.
12375
12376
12377\subsubsection{krb5\_string\_to\_key}
12378\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)}
12379
12380\begin{fulllineitems}
12381\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}}{}
12382\end{fulllineitems}
12383
12384\begin{quote}\begin{description}
12385\item[{param}] \leavevmode
12386\sphinxstylestrong{context}
12387
12388\sphinxstylestrong{eblock}
12389
12390\sphinxstylestrong{keyblock}
12391
12392\sphinxstylestrong{data}
12393
12394\sphinxstylestrong{salt}
12395
12396\end{description}\end{quote}
12397
12398DEPRECATED See krb5\_c\_string\_to\_key()
12399
12400
12401\subsubsection{krb5\_use\_enctype}
12402\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)}
12403
12404\begin{fulllineitems}
12405\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}}{}
12406\end{fulllineitems}
12407
12408\begin{quote}\begin{description}
12409\item[{param}] \leavevmode
12410\sphinxstylestrong{context}
12411
12412\sphinxstylestrong{eblock}
12413
12414\sphinxstylestrong{enctype}
12415
12416\end{description}\end{quote}
12417
12418DEPRECATED Replaced by krb5\_c\_* API family.
12419
12420
12421\subsubsection{krb5\_verify\_checksum}
12422\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)}
12423
12424\begin{fulllineitems}
12425\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}}{}
12426\end{fulllineitems}
12427
12428\begin{quote}\begin{description}
12429\item[{param}] \leavevmode
12430\sphinxstylestrong{context}
12431
12432\sphinxstylestrong{ctype}
12433
12434\sphinxstylestrong{cksum}
12435
12436\sphinxstylestrong{in}
12437
12438\sphinxstylestrong{in\_length}
12439
12440\sphinxstylestrong{seed}
12441
12442\sphinxstylestrong{seed\_length}
12443
12444\end{description}\end{quote}
12445
12446DEPRECATED See krb5\_c\_verify\_checksum()
12447
12448
12449\section{krb5 types and structures}
12450\label{\detokenize{appdev/refs/types/index::doc}}\label{\detokenize{appdev/refs/types/index:krb5-types-and-structures}}
12451
12452\subsection{Public}
12453\label{\detokenize{appdev/refs/types/index:public}}
12454
12455\subsubsection{krb5\_address}
12456\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)}
12457
12458\begin{fulllineitems}
12459\phantomsection\label{\detokenize{appdev/refs/types/krb5_address:c.krb5_address}}\pysigline{\sphinxbfcode{krb5\_address}}
12460\end{fulllineitems}
12461
12462
12463Structure for address.
12464
12465
12466\paragraph{Declaration}
12467\label{\detokenize{appdev/refs/types/krb5_address:declaration}}
12468typedef struct \_krb5\_address  krb5\_address
12469
12470
12471\paragraph{Members}
12472\label{\detokenize{appdev/refs/types/krb5_address:members}}\index{krb5\_address.magic (C member)}
12473
12474\begin{fulllineitems}
12475\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}}
12476\end{fulllineitems}
12477
12478\index{krb5\_address.addrtype (C member)}
12479
12480\begin{fulllineitems}
12481\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}}
12482\end{fulllineitems}
12483
12484\index{krb5\_address.length (C member)}
12485
12486\begin{fulllineitems}
12487\phantomsection\label{\detokenize{appdev/refs/types/krb5_address:c.krb5_address.length}}\pysigline{unsigned int      \sphinxbfcode{krb5\_address.length}}
12488\end{fulllineitems}
12489
12490\index{krb5\_address.contents (C member)}
12491
12492\begin{fulllineitems}
12493\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}}
12494\end{fulllineitems}
12495
12496
12497
12498\subsubsection{krb5\_addrtype}
12499\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)}
12500
12501\begin{fulllineitems}
12502\phantomsection\label{\detokenize{appdev/refs/types/krb5_addrtype:c.krb5_addrtype}}\pysigline{\sphinxbfcode{krb5\_addrtype}}
12503\end{fulllineitems}
12504
12505
12506
12507\paragraph{Declaration}
12508\label{\detokenize{appdev/refs/types/krb5_addrtype:declaration}}
12509typedef krb5\_int32 krb5\_addrtype
12510
12511
12512\subsubsection{krb5\_ap\_req}
12513\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)}
12514
12515\begin{fulllineitems}
12516\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_req:c.krb5_ap_req}}\pysigline{\sphinxbfcode{krb5\_ap\_req}}
12517\end{fulllineitems}
12518
12519
12520Authentication header.
12521
12522
12523\paragraph{Declaration}
12524\label{\detokenize{appdev/refs/types/krb5_ap_req:declaration}}
12525typedef struct \_krb5\_ap\_req  krb5\_ap\_req
12526
12527
12528\paragraph{Members}
12529\label{\detokenize{appdev/refs/types/krb5_ap_req:members}}\index{krb5\_ap\_req.magic (C member)}
12530
12531\begin{fulllineitems}
12532\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}}
12533\end{fulllineitems}
12534
12535\index{krb5\_ap\_req.ap\_options (C member)}
12536
12537\begin{fulllineitems}
12538\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}}
12539Requested options.
12540
12541\end{fulllineitems}
12542
12543\index{krb5\_ap\_req.ticket (C member)}
12544
12545\begin{fulllineitems}
12546\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}}
12547Ticket.
12548
12549\end{fulllineitems}
12550
12551\index{krb5\_ap\_req.authenticator (C member)}
12552
12553\begin{fulllineitems}
12554\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}}
12555Encrypted authenticator.
12556
12557\end{fulllineitems}
12558
12559
12560
12561\subsubsection{krb5\_ap\_rep}
12562\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)}
12563
12564\begin{fulllineitems}
12565\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep:c.krb5_ap_rep}}\pysigline{\sphinxbfcode{krb5\_ap\_rep}}
12566\end{fulllineitems}
12567
12568
12569C representaton of AP-REP message.
12570
12571The server’s response to a client’s request for mutual authentication.
12572
12573
12574\paragraph{Declaration}
12575\label{\detokenize{appdev/refs/types/krb5_ap_rep:declaration}}
12576typedef struct \_krb5\_ap\_rep  krb5\_ap\_rep
12577
12578
12579\paragraph{Members}
12580\label{\detokenize{appdev/refs/types/krb5_ap_rep:members}}\index{krb5\_ap\_rep.magic (C member)}
12581
12582\begin{fulllineitems}
12583\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}}
12584\end{fulllineitems}
12585
12586\index{krb5\_ap\_rep.enc\_part (C member)}
12587
12588\begin{fulllineitems}
12589\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}}
12590Ciphertext of ApRepEncPart.
12591
12592\end{fulllineitems}
12593
12594
12595
12596\subsubsection{krb5\_ap\_rep\_enc\_part}
12597\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)}
12598
12599\begin{fulllineitems}
12600\phantomsection\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:c.krb5_ap_rep_enc_part}}\pysigline{\sphinxbfcode{krb5\_ap\_rep\_enc\_part}}
12601\end{fulllineitems}
12602
12603
12604Cleartext that is encrypted and put into \sphinxcode{\_krb5\_ap\_rep} .
12605
12606
12607\paragraph{Declaration}
12608\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:declaration}}
12609typedef struct \_krb5\_ap\_rep\_enc\_part  krb5\_ap\_rep\_enc\_part
12610
12611
12612\paragraph{Members}
12613\label{\detokenize{appdev/refs/types/krb5_ap_rep_enc_part:members}}\index{krb5\_ap\_rep\_enc\_part.magic (C member)}
12614
12615\begin{fulllineitems}
12616\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}}
12617\end{fulllineitems}
12618
12619\index{krb5\_ap\_rep\_enc\_part.ctime (C member)}
12620
12621\begin{fulllineitems}
12622\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}}
12623Client time, seconds portion.
12624
12625\end{fulllineitems}
12626
12627\index{krb5\_ap\_rep\_enc\_part.cusec (C member)}
12628
12629\begin{fulllineitems}
12630\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}}
12631Client time, microseconds portion.
12632
12633\end{fulllineitems}
12634
12635\index{krb5\_ap\_rep\_enc\_part.subkey (C member)}
12636
12637\begin{fulllineitems}
12638\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}}
12639Subkey (optional)
12640
12641\end{fulllineitems}
12642
12643\index{krb5\_ap\_rep\_enc\_part.seq\_number (C member)}
12644
12645\begin{fulllineitems}
12646\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}}
12647Sequence number.
12648
12649\end{fulllineitems}
12650
12651
12652
12653\subsubsection{krb5\_authdata}
12654\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)}
12655
12656\begin{fulllineitems}
12657\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata}}\pysigline{\sphinxbfcode{krb5\_authdata}}
12658\end{fulllineitems}
12659
12660
12661Structure for auth data.
12662
12663
12664\paragraph{Declaration}
12665\label{\detokenize{appdev/refs/types/krb5_authdata:declaration}}
12666typedef struct \_krb5\_authdata  krb5\_authdata
12667
12668
12669\paragraph{Members}
12670\label{\detokenize{appdev/refs/types/krb5_authdata:members}}\index{krb5\_authdata.magic (C member)}
12671
12672\begin{fulllineitems}
12673\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}}
12674\end{fulllineitems}
12675
12676\index{krb5\_authdata.ad\_type (C member)}
12677
12678\begin{fulllineitems}
12679\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}}
12680ADTYPE.
12681
12682\end{fulllineitems}
12683
12684\index{krb5\_authdata.length (C member)}
12685
12686\begin{fulllineitems}
12687\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdata:c.krb5_authdata.length}}\pysigline{unsigned int      \sphinxbfcode{krb5\_authdata.length}}
12688Length of data.
12689
12690\end{fulllineitems}
12691
12692\index{krb5\_authdata.contents (C member)}
12693
12694\begin{fulllineitems}
12695\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}}
12696Data.
12697
12698\end{fulllineitems}
12699
12700
12701
12702\subsubsection{krb5\_authdatatype}
12703\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)}
12704
12705\begin{fulllineitems}
12706\phantomsection\label{\detokenize{appdev/refs/types/krb5_authdatatype:c.krb5_authdatatype}}\pysigline{\sphinxbfcode{krb5\_authdatatype}}
12707\end{fulllineitems}
12708
12709
12710
12711\paragraph{Declaration}
12712\label{\detokenize{appdev/refs/types/krb5_authdatatype:declaration}}
12713typedef krb5\_int32 krb5\_authdatatype
12714
12715
12716\subsubsection{krb5\_authenticator}
12717\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)}
12718
12719\begin{fulllineitems}
12720\phantomsection\label{\detokenize{appdev/refs/types/krb5_authenticator:c.krb5_authenticator}}\pysigline{\sphinxbfcode{krb5\_authenticator}}
12721\end{fulllineitems}
12722
12723
12724Ticket authenticator.
12725
12726The C representation of an unencrypted authenticator.
12727
12728
12729\paragraph{Declaration}
12730\label{\detokenize{appdev/refs/types/krb5_authenticator:declaration}}
12731typedef struct \_krb5\_authenticator  krb5\_authenticator
12732
12733
12734\paragraph{Members}
12735\label{\detokenize{appdev/refs/types/krb5_authenticator:members}}\index{krb5\_authenticator.magic (C member)}
12736
12737\begin{fulllineitems}
12738\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}}
12739\end{fulllineitems}
12740
12741\index{krb5\_authenticator.client (C member)}
12742
12743\begin{fulllineitems}
12744\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}}
12745client name/realm
12746
12747\end{fulllineitems}
12748
12749\index{krb5\_authenticator.checksum (C member)}
12750
12751\begin{fulllineitems}
12752\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}}
12753checksum, includes type, optional
12754
12755\end{fulllineitems}
12756
12757\index{krb5\_authenticator.cusec (C member)}
12758
12759\begin{fulllineitems}
12760\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}}
12761client usec portion
12762
12763\end{fulllineitems}
12764
12765\index{krb5\_authenticator.ctime (C member)}
12766
12767\begin{fulllineitems}
12768\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}}
12769client sec portion
12770
12771\end{fulllineitems}
12772
12773\index{krb5\_authenticator.subkey (C member)}
12774
12775\begin{fulllineitems}
12776\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}}
12777true session key, optional
12778
12779\end{fulllineitems}
12780
12781\index{krb5\_authenticator.seq\_number (C member)}
12782
12783\begin{fulllineitems}
12784\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}}
12785sequence \#, optional
12786
12787\end{fulllineitems}
12788
12789\index{krb5\_authenticator.authorization\_data (C member)}
12790
12791\begin{fulllineitems}
12792\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}}
12793authoriazation data
12794
12795\end{fulllineitems}
12796
12797
12798
12799\subsubsection{krb5\_boolean}
12800\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)}
12801
12802\begin{fulllineitems}
12803\phantomsection\label{\detokenize{appdev/refs/types/krb5_boolean:c.krb5_boolean}}\pysigline{\sphinxbfcode{krb5\_boolean}}
12804\end{fulllineitems}
12805
12806
12807
12808\paragraph{Declaration}
12809\label{\detokenize{appdev/refs/types/krb5_boolean:declaration}}
12810typedef unsigned int krb5\_boolean
12811
12812
12813\subsubsection{krb5\_checksum}
12814\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)}
12815
12816\begin{fulllineitems}
12817\phantomsection\label{\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum}}\pysigline{\sphinxbfcode{krb5\_checksum}}
12818\end{fulllineitems}
12819
12820
12821
12822\paragraph{Declaration}
12823\label{\detokenize{appdev/refs/types/krb5_checksum:declaration}}
12824typedef struct \_krb5\_checksum  krb5\_checksum
12825
12826
12827\paragraph{Members}
12828\label{\detokenize{appdev/refs/types/krb5_checksum:members}}\index{krb5\_checksum.magic (C member)}
12829
12830\begin{fulllineitems}
12831\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}}
12832\end{fulllineitems}
12833
12834\index{krb5\_checksum.checksum\_type (C member)}
12835
12836\begin{fulllineitems}
12837\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}}
12838\end{fulllineitems}
12839
12840\index{krb5\_checksum.length (C member)}
12841
12842\begin{fulllineitems}
12843\phantomsection\label{\detokenize{appdev/refs/types/krb5_checksum:c.krb5_checksum.length}}\pysigline{unsigned int      \sphinxbfcode{krb5\_checksum.length}}
12844\end{fulllineitems}
12845
12846\index{krb5\_checksum.contents (C member)}
12847
12848\begin{fulllineitems}
12849\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}}
12850\end{fulllineitems}
12851
12852
12853
12854\subsubsection{krb5\_const\_pointer}
12855\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)}
12856
12857\begin{fulllineitems}
12858\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_pointer:c.krb5_const_pointer}}\pysigline{\sphinxbfcode{krb5\_const\_pointer}}
12859\end{fulllineitems}
12860
12861
12862
12863\paragraph{Declaration}
12864\label{\detokenize{appdev/refs/types/krb5_const_pointer:declaration}}
12865typedef void const* krb5\_const\_pointer
12866
12867
12868\subsubsection{krb5\_const\_principal}
12869\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)}
12870
12871\begin{fulllineitems}
12872\phantomsection\label{\detokenize{appdev/refs/types/krb5_const_principal:c.krb5_const_principal}}\pysigline{\sphinxbfcode{krb5\_const\_principal}}
12873\end{fulllineitems}
12874
12875
12876Constant version of {\hyperref[\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data}]{\sphinxcrossref{\sphinxcode{krb5\_principal\_data}}}} .
12877
12878
12879\paragraph{Declaration}
12880\label{\detokenize{appdev/refs/types/krb5_const_principal:declaration}}
12881typedef const krb5\_principal\_data* krb5\_const\_principal
12882
12883
12884\paragraph{Members}
12885\label{\detokenize{appdev/refs/types/krb5_const_principal:members}}\index{krb5\_const\_principal.magic (C member)}
12886
12887\begin{fulllineitems}
12888\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}}
12889\end{fulllineitems}
12890
12891\index{krb5\_const\_principal.realm (C member)}
12892
12893\begin{fulllineitems}
12894\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}}
12895\end{fulllineitems}
12896
12897\index{krb5\_const\_principal.data (C member)}
12898
12899\begin{fulllineitems}
12900\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}}
12901An array of strings.
12902
12903\end{fulllineitems}
12904
12905\index{krb5\_const\_principal.length (C member)}
12906
12907\begin{fulllineitems}
12908\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}}
12909\end{fulllineitems}
12910
12911\index{krb5\_const\_principal.type (C member)}
12912
12913\begin{fulllineitems}
12914\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}}
12915\end{fulllineitems}
12916
12917
12918
12919\subsubsection{krb5\_cred}
12920\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)}
12921
12922\begin{fulllineitems}
12923\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred:c.krb5_cred}}\pysigline{\sphinxbfcode{krb5\_cred}}
12924\end{fulllineitems}
12925
12926
12927Credentials data structure.
12928
12929
12930\paragraph{Declaration}
12931\label{\detokenize{appdev/refs/types/krb5_cred:declaration}}
12932typedef struct \_krb5\_cred  krb5\_cred
12933
12934
12935\paragraph{Members}
12936\label{\detokenize{appdev/refs/types/krb5_cred:members}}\index{krb5\_cred.magic (C member)}
12937
12938\begin{fulllineitems}
12939\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}}
12940\end{fulllineitems}
12941
12942\index{krb5\_cred.tickets (C member)}
12943
12944\begin{fulllineitems}
12945\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}}
12946Tickets.
12947
12948\end{fulllineitems}
12949
12950\index{krb5\_cred.enc\_part (C member)}
12951
12952\begin{fulllineitems}
12953\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}}
12954Encrypted part.
12955
12956\end{fulllineitems}
12957
12958\index{krb5\_cred.enc\_part2 (C member)}
12959
12960\begin{fulllineitems}
12961\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}}
12962Unencrypted version, if available.
12963
12964\end{fulllineitems}
12965
12966
12967
12968\subsubsection{krb5\_cred\_enc\_part}
12969\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)}
12970
12971\begin{fulllineitems}
12972\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:c.krb5_cred_enc_part}}\pysigline{\sphinxbfcode{krb5\_cred\_enc\_part}}
12973\end{fulllineitems}
12974
12975
12976Cleartext credentials information.
12977
12978
12979\paragraph{Declaration}
12980\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:declaration}}
12981typedef struct \_krb5\_cred\_enc\_part  krb5\_cred\_enc\_part
12982
12983
12984\paragraph{Members}
12985\label{\detokenize{appdev/refs/types/krb5_cred_enc_part:members}}\index{krb5\_cred\_enc\_part.magic (C member)}
12986
12987\begin{fulllineitems}
12988\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}}
12989\end{fulllineitems}
12990
12991\index{krb5\_cred\_enc\_part.nonce (C member)}
12992
12993\begin{fulllineitems}
12994\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}}
12995Nonce (optional)
12996
12997\end{fulllineitems}
12998
12999\index{krb5\_cred\_enc\_part.timestamp (C member)}
13000
13001\begin{fulllineitems}
13002\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}}
13003Generation time, seconds portion.
13004
13005\end{fulllineitems}
13006
13007\index{krb5\_cred\_enc\_part.usec (C member)}
13008
13009\begin{fulllineitems}
13010\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}}
13011Generation time, microseconds portion.
13012
13013\end{fulllineitems}
13014
13015\index{krb5\_cred\_enc\_part.s\_address (C member)}
13016
13017\begin{fulllineitems}
13018\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}}
13019Sender address (optional)
13020
13021\end{fulllineitems}
13022
13023\index{krb5\_cred\_enc\_part.r\_address (C member)}
13024
13025\begin{fulllineitems}
13026\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}}
13027Recipient address (optional)
13028
13029\end{fulllineitems}
13030
13031\index{krb5\_cred\_enc\_part.ticket\_info (C member)}
13032
13033\begin{fulllineitems}
13034\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}}
13035\end{fulllineitems}
13036
13037
13038
13039\subsubsection{krb5\_cred\_info}
13040\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)}
13041
13042\begin{fulllineitems}
13043\phantomsection\label{\detokenize{appdev/refs/types/krb5_cred_info:c.krb5_cred_info}}\pysigline{\sphinxbfcode{krb5\_cred\_info}}
13044\end{fulllineitems}
13045
13046
13047Credentials information inserted into \sphinxstyleemphasis{EncKrbCredPart} .
13048
13049
13050\paragraph{Declaration}
13051\label{\detokenize{appdev/refs/types/krb5_cred_info:declaration}}
13052typedef struct \_krb5\_cred\_info  krb5\_cred\_info
13053
13054
13055\paragraph{Members}
13056\label{\detokenize{appdev/refs/types/krb5_cred_info:members}}\index{krb5\_cred\_info.magic (C member)}
13057
13058\begin{fulllineitems}
13059\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}}
13060\end{fulllineitems}
13061
13062\index{krb5\_cred\_info.session (C member)}
13063
13064\begin{fulllineitems}
13065\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}}
13066Session key used to encrypt ticket.
13067
13068\end{fulllineitems}
13069
13070\index{krb5\_cred\_info.client (C member)}
13071
13072\begin{fulllineitems}
13073\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}}
13074Client principal and realm.
13075
13076\end{fulllineitems}
13077
13078\index{krb5\_cred\_info.server (C member)}
13079
13080\begin{fulllineitems}
13081\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}}
13082Server principal and realm.
13083
13084\end{fulllineitems}
13085
13086\index{krb5\_cred\_info.flags (C member)}
13087
13088\begin{fulllineitems}
13089\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}}
13090Ticket flags.
13091
13092\end{fulllineitems}
13093
13094\index{krb5\_cred\_info.times (C member)}
13095
13096\begin{fulllineitems}
13097\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}}
13098Auth, start, end, renew\_till.
13099
13100\end{fulllineitems}
13101
13102\index{krb5\_cred\_info.caddrs (C member)}
13103
13104\begin{fulllineitems}
13105\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}}
13106Array of pointers to addrs (optional)
13107
13108\end{fulllineitems}
13109
13110
13111
13112\subsubsection{krb5\_creds}
13113\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)}
13114
13115\begin{fulllineitems}
13116\phantomsection\label{\detokenize{appdev/refs/types/krb5_creds:c.krb5_creds}}\pysigline{\sphinxbfcode{krb5\_creds}}
13117\end{fulllineitems}
13118
13119
13120Credentials structure including ticket, session key, and lifetime info.
13121
13122
13123\paragraph{Declaration}
13124\label{\detokenize{appdev/refs/types/krb5_creds:declaration}}
13125typedef struct \_krb5\_creds  krb5\_creds
13126
13127
13128\paragraph{Members}
13129\label{\detokenize{appdev/refs/types/krb5_creds:members}}\index{krb5\_creds.magic (C member)}
13130
13131\begin{fulllineitems}
13132\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}}
13133\end{fulllineitems}
13134
13135\index{krb5\_creds.client (C member)}
13136
13137\begin{fulllineitems}
13138\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}}
13139client’s principal identifier
13140
13141\end{fulllineitems}
13142
13143\index{krb5\_creds.server (C member)}
13144
13145\begin{fulllineitems}
13146\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}}
13147server’s principal identifier
13148
13149\end{fulllineitems}
13150
13151\index{krb5\_creds.keyblock (C member)}
13152
13153\begin{fulllineitems}
13154\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}}
13155session encryption key info
13156
13157\end{fulllineitems}
13158
13159\index{krb5\_creds.times (C member)}
13160
13161\begin{fulllineitems}
13162\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}}
13163lifetime info
13164
13165\end{fulllineitems}
13166
13167\index{krb5\_creds.is\_skey (C member)}
13168
13169\begin{fulllineitems}
13170\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}}
13171true if ticket is encrypted in another ticket’s skey
13172
13173\end{fulllineitems}
13174
13175\index{krb5\_creds.ticket\_flags (C member)}
13176
13177\begin{fulllineitems}
13178\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}}
13179flags in ticket
13180
13181\end{fulllineitems}
13182
13183\index{krb5\_creds.addresses (C member)}
13184
13185\begin{fulllineitems}
13186\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}}
13187addrs in ticket
13188
13189\end{fulllineitems}
13190
13191\index{krb5\_creds.ticket (C member)}
13192
13193\begin{fulllineitems}
13194\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}}
13195ticket string itself
13196
13197\end{fulllineitems}
13198
13199\index{krb5\_creds.second\_ticket (C member)}
13200
13201\begin{fulllineitems}
13202\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}}
13203second ticket, if related to ticket (via DUPLICATE-SKEY or ENC-TKT-IN-SKEY)
13204
13205\end{fulllineitems}
13206
13207\index{krb5\_creds.authdata (C member)}
13208
13209\begin{fulllineitems}
13210\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}}
13211authorization data
13212
13213\end{fulllineitems}
13214
13215
13216
13217\subsubsection{krb5\_crypto\_iov}
13218\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)}
13219
13220\begin{fulllineitems}
13221\phantomsection\label{\detokenize{appdev/refs/types/krb5_crypto_iov:c.krb5_crypto_iov}}\pysigline{\sphinxbfcode{krb5\_crypto\_iov}}
13222\end{fulllineitems}
13223
13224
13225Structure to describe a region of text to be encrypted or decrypted.
13226
13227The \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.
13228
13229
13230\paragraph{Declaration}
13231\label{\detokenize{appdev/refs/types/krb5_crypto_iov:declaration}}
13232typedef struct \_krb5\_crypto\_iov  krb5\_crypto\_iov
13233
13234
13235\paragraph{Members}
13236\label{\detokenize{appdev/refs/types/krb5_crypto_iov:members}}\index{krb5\_crypto\_iov.flags (C member)}
13237
13238\begin{fulllineitems}
13239\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}}
13240\sphinxcode{KRB5\_CRYPTO\_TYPE} type of the iov
13241
13242\end{fulllineitems}
13243
13244\index{krb5\_crypto\_iov.data (C member)}
13245
13246\begin{fulllineitems}
13247\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}}
13248\end{fulllineitems}
13249
13250
13251
13252\subsubsection{krb5\_cryptotype}
13253\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)}
13254
13255\begin{fulllineitems}
13256\phantomsection\label{\detokenize{appdev/refs/types/krb5_cryptotype:c.krb5_cryptotype}}\pysigline{\sphinxbfcode{krb5\_cryptotype}}
13257\end{fulllineitems}
13258
13259
13260
13261\paragraph{Declaration}
13262\label{\detokenize{appdev/refs/types/krb5_cryptotype:declaration}}
13263typedef krb5\_int32 krb5\_cryptotype
13264
13265
13266\subsubsection{krb5\_data}
13267\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)}
13268
13269\begin{fulllineitems}
13270\phantomsection\label{\detokenize{appdev/refs/types/krb5_data:c.krb5_data}}\pysigline{\sphinxbfcode{krb5\_data}}
13271\end{fulllineitems}
13272
13273
13274
13275\paragraph{Declaration}
13276\label{\detokenize{appdev/refs/types/krb5_data:declaration}}
13277typedef struct \_krb5\_data  krb5\_data
13278
13279
13280\paragraph{Members}
13281\label{\detokenize{appdev/refs/types/krb5_data:members}}\index{krb5\_data.magic (C member)}
13282
13283\begin{fulllineitems}
13284\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}}
13285\end{fulllineitems}
13286
13287\index{krb5\_data.length (C member)}
13288
13289\begin{fulllineitems}
13290\phantomsection\label{\detokenize{appdev/refs/types/krb5_data:c.krb5_data.length}}\pysigline{unsigned int      \sphinxbfcode{krb5\_data.length}}
13291\end{fulllineitems}
13292
13293\index{krb5\_data.data (C member)}
13294
13295\begin{fulllineitems}
13296\phantomsection\label{\detokenize{appdev/refs/types/krb5_data:c.krb5_data.data}}\pysigline{char *    \sphinxbfcode{krb5\_data.data}}
13297\end{fulllineitems}
13298
13299
13300
13301\subsubsection{krb5\_deltat}
13302\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)}
13303
13304\begin{fulllineitems}
13305\phantomsection\label{\detokenize{appdev/refs/types/krb5_deltat:c.krb5_deltat}}\pysigline{\sphinxbfcode{krb5\_deltat}}
13306\end{fulllineitems}
13307
13308
13309
13310\paragraph{Declaration}
13311\label{\detokenize{appdev/refs/types/krb5_deltat:declaration}}
13312typedef krb5\_int32 krb5\_deltat
13313
13314
13315\subsubsection{krb5\_enc\_data}
13316\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)}
13317
13318\begin{fulllineitems}
13319\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_data:c.krb5_enc_data}}\pysigline{\sphinxbfcode{krb5\_enc\_data}}
13320\end{fulllineitems}
13321
13322
13323
13324\paragraph{Declaration}
13325\label{\detokenize{appdev/refs/types/krb5_enc_data:declaration}}
13326typedef struct \_krb5\_enc\_data  krb5\_enc\_data
13327
13328
13329\paragraph{Members}
13330\label{\detokenize{appdev/refs/types/krb5_enc_data:members}}\index{krb5\_enc\_data.magic (C member)}
13331
13332\begin{fulllineitems}
13333\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}}
13334\end{fulllineitems}
13335
13336\index{krb5\_enc\_data.enctype (C member)}
13337
13338\begin{fulllineitems}
13339\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}}
13340\end{fulllineitems}
13341
13342\index{krb5\_enc\_data.kvno (C member)}
13343
13344\begin{fulllineitems}
13345\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}}
13346\end{fulllineitems}
13347
13348\index{krb5\_enc\_data.ciphertext (C member)}
13349
13350\begin{fulllineitems}
13351\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}}
13352\end{fulllineitems}
13353
13354
13355
13356\subsubsection{krb5\_enc\_kdc\_rep\_part}
13357\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)}
13358
13359\begin{fulllineitems}
13360\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:c.krb5_enc_kdc_rep_part}}\pysigline{\sphinxbfcode{krb5\_enc\_kdc\_rep\_part}}
13361\end{fulllineitems}
13362
13363
13364C representation of \sphinxstyleemphasis{EncKDCRepPart} protocol message.
13365
13366This is the cleartext message that is encrypted and inserted in \sphinxstyleemphasis{KDC-REP} .
13367
13368
13369\paragraph{Declaration}
13370\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:declaration}}
13371typedef struct \_krb5\_enc\_kdc\_rep\_part  krb5\_enc\_kdc\_rep\_part
13372
13373
13374\paragraph{Members}
13375\label{\detokenize{appdev/refs/types/krb5_enc_kdc_rep_part:members}}\index{krb5\_enc\_kdc\_rep\_part.magic (C member)}
13376
13377\begin{fulllineitems}
13378\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}}
13379\end{fulllineitems}
13380
13381\index{krb5\_enc\_kdc\_rep\_part.msg\_type (C member)}
13382
13383\begin{fulllineitems}
13384\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}}
13385krb5 message type
13386
13387\end{fulllineitems}
13388
13389\index{krb5\_enc\_kdc\_rep\_part.session (C member)}
13390
13391\begin{fulllineitems}
13392\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}}
13393Session key.
13394
13395\end{fulllineitems}
13396
13397\index{krb5\_enc\_kdc\_rep\_part.last\_req (C member)}
13398
13399\begin{fulllineitems}
13400\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}}
13401Array of pointers to entries.
13402
13403\end{fulllineitems}
13404
13405\index{krb5\_enc\_kdc\_rep\_part.nonce (C member)}
13406
13407\begin{fulllineitems}
13408\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}}
13409Nonce from request.
13410
13411\end{fulllineitems}
13412
13413\index{krb5\_enc\_kdc\_rep\_part.key\_exp (C member)}
13414
13415\begin{fulllineitems}
13416\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}}
13417Expiration date.
13418
13419\end{fulllineitems}
13420
13421\index{krb5\_enc\_kdc\_rep\_part.flags (C member)}
13422
13423\begin{fulllineitems}
13424\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}}
13425Ticket flags.
13426
13427\end{fulllineitems}
13428
13429\index{krb5\_enc\_kdc\_rep\_part.times (C member)}
13430
13431\begin{fulllineitems}
13432\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}}
13433Lifetime info.
13434
13435\end{fulllineitems}
13436
13437\index{krb5\_enc\_kdc\_rep\_part.server (C member)}
13438
13439\begin{fulllineitems}
13440\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}}
13441Server’s principal identifier.
13442
13443\end{fulllineitems}
13444
13445\index{krb5\_enc\_kdc\_rep\_part.caddrs (C member)}
13446
13447\begin{fulllineitems}
13448\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}}
13449Array of ptrs to addrs, optional.
13450
13451\end{fulllineitems}
13452
13453\index{krb5\_enc\_kdc\_rep\_part.enc\_padata (C member)}
13454
13455\begin{fulllineitems}
13456\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}}
13457Encrypted preauthentication data.
13458
13459\end{fulllineitems}
13460
13461
13462
13463\subsubsection{krb5\_enc\_tkt\_part}
13464\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)}
13465
13466\begin{fulllineitems}
13467\phantomsection\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:c.krb5_enc_tkt_part}}\pysigline{\sphinxbfcode{krb5\_enc\_tkt\_part}}
13468\end{fulllineitems}
13469
13470
13471Encrypted part of ticket.
13472
13473
13474\paragraph{Declaration}
13475\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:declaration}}
13476typedef struct \_krb5\_enc\_tkt\_part  krb5\_enc\_tkt\_part
13477
13478
13479\paragraph{Members}
13480\label{\detokenize{appdev/refs/types/krb5_enc_tkt_part:members}}\index{krb5\_enc\_tkt\_part.magic (C member)}
13481
13482\begin{fulllineitems}
13483\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}}
13484\end{fulllineitems}
13485
13486\index{krb5\_enc\_tkt\_part.flags (C member)}
13487
13488\begin{fulllineitems}
13489\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}}
13490flags
13491
13492\end{fulllineitems}
13493
13494\index{krb5\_enc\_tkt\_part.session (C member)}
13495
13496\begin{fulllineitems}
13497\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}}
13498session key: includes enctype
13499
13500\end{fulllineitems}
13501
13502\index{krb5\_enc\_tkt\_part.client (C member)}
13503
13504\begin{fulllineitems}
13505\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}}
13506client name/realm
13507
13508\end{fulllineitems}
13509
13510\index{krb5\_enc\_tkt\_part.transited (C member)}
13511
13512\begin{fulllineitems}
13513\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}}
13514list of transited realms
13515
13516\end{fulllineitems}
13517
13518\index{krb5\_enc\_tkt\_part.times (C member)}
13519
13520\begin{fulllineitems}
13521\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}}
13522auth, start, end, renew\_till
13523
13524\end{fulllineitems}
13525
13526\index{krb5\_enc\_tkt\_part.caddrs (C member)}
13527
13528\begin{fulllineitems}
13529\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}}
13530array of ptrs to addresses
13531
13532\end{fulllineitems}
13533
13534\index{krb5\_enc\_tkt\_part.authorization\_data (C member)}
13535
13536\begin{fulllineitems}
13537\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}}
13538auth data
13539
13540\end{fulllineitems}
13541
13542
13543
13544\subsubsection{krb5\_encrypt\_block}
13545\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)}
13546
13547\begin{fulllineitems}
13548\phantomsection\label{\detokenize{appdev/refs/types/krb5_encrypt_block:c.krb5_encrypt_block}}\pysigline{\sphinxbfcode{krb5\_encrypt\_block}}
13549\end{fulllineitems}
13550
13551
13552
13553\paragraph{Declaration}
13554\label{\detokenize{appdev/refs/types/krb5_encrypt_block:declaration}}
13555typedef struct \_krb5\_encrypt\_block  krb5\_encrypt\_block
13556
13557
13558\paragraph{Members}
13559\label{\detokenize{appdev/refs/types/krb5_encrypt_block:members}}\index{krb5\_encrypt\_block.magic (C member)}
13560
13561\begin{fulllineitems}
13562\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}}
13563\end{fulllineitems}
13564
13565\index{krb5\_encrypt\_block.crypto\_entry (C member)}
13566
13567\begin{fulllineitems}
13568\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}}
13569\end{fulllineitems}
13570
13571\index{krb5\_encrypt\_block.key (C member)}
13572
13573\begin{fulllineitems}
13574\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}}
13575\end{fulllineitems}
13576
13577
13578
13579\subsubsection{krb5\_enctype}
13580\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)}
13581
13582\begin{fulllineitems}
13583\phantomsection\label{\detokenize{appdev/refs/types/krb5_enctype:c.krb5_enctype}}\pysigline{\sphinxbfcode{krb5\_enctype}}
13584\end{fulllineitems}
13585
13586
13587
13588\paragraph{Declaration}
13589\label{\detokenize{appdev/refs/types/krb5_enctype:declaration}}
13590typedef krb5\_int32 krb5\_enctype
13591
13592
13593\subsubsection{krb5\_error}
13594\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)}
13595
13596\begin{fulllineitems}
13597\phantomsection\label{\detokenize{appdev/refs/types/krb5_error:c.krb5_error}}\pysigline{\sphinxbfcode{krb5\_error}}
13598\end{fulllineitems}
13599
13600
13601Error message structure.
13602
13603
13604\paragraph{Declaration}
13605\label{\detokenize{appdev/refs/types/krb5_error:declaration}}
13606typedef struct \_krb5\_error  krb5\_error
13607
13608
13609\paragraph{Members}
13610\label{\detokenize{appdev/refs/types/krb5_error:members}}\index{krb5\_error.magic (C member)}
13611
13612\begin{fulllineitems}
13613\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}}
13614\end{fulllineitems}
13615
13616\index{krb5\_error.ctime (C member)}
13617
13618\begin{fulllineitems}
13619\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}}
13620Client sec portion; optional.
13621
13622\end{fulllineitems}
13623
13624\index{krb5\_error.cusec (C member)}
13625
13626\begin{fulllineitems}
13627\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}}
13628Client usec portion; optional.
13629
13630\end{fulllineitems}
13631
13632\index{krb5\_error.susec (C member)}
13633
13634\begin{fulllineitems}
13635\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}}
13636Server usec portion.
13637
13638\end{fulllineitems}
13639
13640\index{krb5\_error.stime (C member)}
13641
13642\begin{fulllineitems}
13643\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}}
13644Server sec portion.
13645
13646\end{fulllineitems}
13647
13648\index{krb5\_error.error (C member)}
13649
13650\begin{fulllineitems}
13651\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}}
13652Error code (protocol error \#’s)
13653
13654\end{fulllineitems}
13655
13656\index{krb5\_error.client (C member)}
13657
13658\begin{fulllineitems}
13659\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}}
13660Client principal and realm.
13661
13662\end{fulllineitems}
13663
13664\index{krb5\_error.server (C member)}
13665
13666\begin{fulllineitems}
13667\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}}
13668Server principal and realm.
13669
13670\end{fulllineitems}
13671
13672\index{krb5\_error.text (C member)}
13673
13674\begin{fulllineitems}
13675\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}}
13676Descriptive text.
13677
13678\end{fulllineitems}
13679
13680\index{krb5\_error.e\_data (C member)}
13681
13682\begin{fulllineitems}
13683\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}}
13684Additional error-describing data.
13685
13686\end{fulllineitems}
13687
13688
13689
13690\subsubsection{krb5\_error\_code}
13691\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)}
13692
13693\begin{fulllineitems}
13694\phantomsection\label{\detokenize{appdev/refs/types/krb5_error_code:c.krb5_error_code}}\pysigline{\sphinxbfcode{krb5\_error\_code}}
13695\end{fulllineitems}
13696
13697
13698Used to convey an operation status.
13699
13700The 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.
13701
13702
13703\paragraph{Declaration}
13704\label{\detokenize{appdev/refs/types/krb5_error_code:declaration}}
13705typedef krb5\_int32 krb5\_error\_code
13706
13707
13708\subsubsection{krb5\_expire\_callback\_func}
13709\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)}
13710
13711\begin{fulllineitems}
13712\phantomsection\label{\detokenize{appdev/refs/types/krb5_expire_callback_func:c.krb5_expire_callback_func}}\pysigline{\sphinxbfcode{krb5\_expire\_callback\_func}}
13713\end{fulllineitems}
13714
13715
13716
13717\paragraph{Declaration}
13718\label{\detokenize{appdev/refs/types/krb5_expire_callback_func:declaration}}
13719typedef void( * krb5\_expire\_callback\_func) (krb5\_context context, void *data, krb5\_timestamp password\_expiration, krb5\_timestamp account\_expiration, krb5\_boolean is\_last\_req)
13720
13721
13722\subsubsection{krb5\_flags}
13723\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)}
13724
13725\begin{fulllineitems}
13726\phantomsection\label{\detokenize{appdev/refs/types/krb5_flags:c.krb5_flags}}\pysigline{\sphinxbfcode{krb5\_flags}}
13727\end{fulllineitems}
13728
13729
13730
13731\paragraph{Declaration}
13732\label{\detokenize{appdev/refs/types/krb5_flags:declaration}}
13733typedef krb5\_int32 krb5\_flags
13734
13735
13736\subsubsection{krb5\_get\_init\_creds\_opt}
13737\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)}
13738
13739\begin{fulllineitems}
13740\phantomsection\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:c.krb5_get_init_creds_opt}}\pysigline{\sphinxbfcode{krb5\_get\_init\_creds\_opt}}
13741\end{fulllineitems}
13742
13743
13744Store options for \sphinxstyleemphasis{\_krb5\_get\_init\_creds} .
13745
13746
13747\paragraph{Declaration}
13748\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:declaration}}
13749typedef struct \_krb5\_get\_init\_creds\_opt  krb5\_get\_init\_creds\_opt
13750
13751
13752\paragraph{Members}
13753\label{\detokenize{appdev/refs/types/krb5_get_init_creds_opt:members}}\index{krb5\_get\_init\_creds\_opt.flags (C member)}
13754
13755\begin{fulllineitems}
13756\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}}
13757\end{fulllineitems}
13758
13759\index{krb5\_get\_init\_creds\_opt.tkt\_life (C member)}
13760
13761\begin{fulllineitems}
13762\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}}
13763\end{fulllineitems}
13764
13765\index{krb5\_get\_init\_creds\_opt.renew\_life (C member)}
13766
13767\begin{fulllineitems}
13768\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}}
13769\end{fulllineitems}
13770
13771\index{krb5\_get\_init\_creds\_opt.forwardable (C member)}
13772
13773\begin{fulllineitems}
13774\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}}
13775\end{fulllineitems}
13776
13777\index{krb5\_get\_init\_creds\_opt.proxiable (C member)}
13778
13779\begin{fulllineitems}
13780\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}}
13781\end{fulllineitems}
13782
13783\index{krb5\_get\_init\_creds\_opt.etype\_list (C member)}
13784
13785\begin{fulllineitems}
13786\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}}
13787\end{fulllineitems}
13788
13789\index{krb5\_get\_init\_creds\_opt.etype\_list\_length (C member)}
13790
13791\begin{fulllineitems}
13792\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}}
13793\end{fulllineitems}
13794
13795\index{krb5\_get\_init\_creds\_opt.address\_list (C member)}
13796
13797\begin{fulllineitems}
13798\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}}
13799\end{fulllineitems}
13800
13801\index{krb5\_get\_init\_creds\_opt.preauth\_list (C member)}
13802
13803\begin{fulllineitems}
13804\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}}
13805\end{fulllineitems}
13806
13807\index{krb5\_get\_init\_creds\_opt.preauth\_list\_length (C member)}
13808
13809\begin{fulllineitems}
13810\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}}
13811\end{fulllineitems}
13812
13813\index{krb5\_get\_init\_creds\_opt.salt (C member)}
13814
13815\begin{fulllineitems}
13816\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}}
13817\end{fulllineitems}
13818
13819
13820
13821\subsubsection{krb5\_gic\_opt\_pa\_data}
13822\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)}
13823
13824\begin{fulllineitems}
13825\phantomsection\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:c.krb5_gic_opt_pa_data}}\pysigline{\sphinxbfcode{krb5\_gic\_opt\_pa\_data}}
13826\end{fulllineitems}
13827
13828
13829Generic preauth option attribute/value pairs.
13830
13831
13832\paragraph{Declaration}
13833\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:declaration}}
13834typedef struct \_krb5\_gic\_opt\_pa\_data  krb5\_gic\_opt\_pa\_data
13835
13836
13837\paragraph{Members}
13838\label{\detokenize{appdev/refs/types/krb5_gic_opt_pa_data:members}}\index{krb5\_gic\_opt\_pa\_data.attr (C member)}
13839
13840\begin{fulllineitems}
13841\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}}
13842\end{fulllineitems}
13843
13844\index{krb5\_gic\_opt\_pa\_data.value (C member)}
13845
13846\begin{fulllineitems}
13847\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}}
13848\end{fulllineitems}
13849
13850
13851
13852\subsubsection{krb5\_int16}
13853\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)}
13854
13855\begin{fulllineitems}
13856\phantomsection\label{\detokenize{appdev/refs/types/krb5_int16:c.krb5_int16}}\pysigline{\sphinxbfcode{krb5\_int16}}
13857\end{fulllineitems}
13858
13859
13860
13861\paragraph{Declaration}
13862\label{\detokenize{appdev/refs/types/krb5_int16:declaration}}
13863typedef int16\_t krb5\_int16
13864
13865
13866\subsubsection{krb5\_int32}
13867\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)}
13868
13869\begin{fulllineitems}
13870\phantomsection\label{\detokenize{appdev/refs/types/krb5_int32:c.krb5_int32}}\pysigline{\sphinxbfcode{krb5\_int32}}
13871\end{fulllineitems}
13872
13873
13874
13875\paragraph{Declaration}
13876\label{\detokenize{appdev/refs/types/krb5_int32:declaration}}
13877typedef int32\_t krb5\_int32
13878
13879
13880\subsubsection{krb5\_kdc\_rep}
13881\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)}
13882
13883\begin{fulllineitems}
13884\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_rep:c.krb5_kdc_rep}}\pysigline{\sphinxbfcode{krb5\_kdc\_rep}}
13885\end{fulllineitems}
13886
13887
13888Representation of the \sphinxstyleemphasis{KDC-REP} protocol message.
13889
13890
13891\paragraph{Declaration}
13892\label{\detokenize{appdev/refs/types/krb5_kdc_rep:declaration}}
13893typedef struct \_krb5\_kdc\_rep  krb5\_kdc\_rep
13894
13895
13896\paragraph{Members}
13897\label{\detokenize{appdev/refs/types/krb5_kdc_rep:members}}\index{krb5\_kdc\_rep.magic (C member)}
13898
13899\begin{fulllineitems}
13900\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}}
13901\end{fulllineitems}
13902
13903\index{krb5\_kdc\_rep.msg\_type (C member)}
13904
13905\begin{fulllineitems}
13906\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}}
13907KRB5\_AS\_REP or KRB5\_KDC\_REP.
13908
13909\end{fulllineitems}
13910
13911\index{krb5\_kdc\_rep.padata (C member)}
13912
13913\begin{fulllineitems}
13914\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}}
13915Preauthentication data from KDC.
13916
13917\end{fulllineitems}
13918
13919\index{krb5\_kdc\_rep.client (C member)}
13920
13921\begin{fulllineitems}
13922\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}}
13923Client principal and realm.
13924
13925\end{fulllineitems}
13926
13927\index{krb5\_kdc\_rep.ticket (C member)}
13928
13929\begin{fulllineitems}
13930\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}}
13931Ticket.
13932
13933\end{fulllineitems}
13934
13935\index{krb5\_kdc\_rep.enc\_part (C member)}
13936
13937\begin{fulllineitems}
13938\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}}
13939Encrypted part of reply.
13940
13941\end{fulllineitems}
13942
13943\index{krb5\_kdc\_rep.enc\_part2 (C member)}
13944
13945\begin{fulllineitems}
13946\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}}
13947Unencrypted version, if available.
13948
13949\end{fulllineitems}
13950
13951
13952
13953\subsubsection{krb5\_kdc\_req}
13954\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)}
13955
13956\begin{fulllineitems}
13957\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req}}\pysigline{\sphinxbfcode{krb5\_kdc\_req}}
13958\end{fulllineitems}
13959
13960
13961C representation of KDC-REQ protocol message, including KDC-REQ-BODY.
13962
13963
13964\paragraph{Declaration}
13965\label{\detokenize{appdev/refs/types/krb5_kdc_req:declaration}}
13966typedef struct \_krb5\_kdc\_req  krb5\_kdc\_req
13967
13968
13969\paragraph{Members}
13970\label{\detokenize{appdev/refs/types/krb5_kdc_req:members}}\index{krb5\_kdc\_req.magic (C member)}
13971
13972\begin{fulllineitems}
13973\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}}
13974\end{fulllineitems}
13975
13976\index{krb5\_kdc\_req.msg\_type (C member)}
13977
13978\begin{fulllineitems}
13979\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}}
13980KRB5\_AS\_REQ or KRB5\_TGS\_REQ.
13981
13982\end{fulllineitems}
13983
13984\index{krb5\_kdc\_req.padata (C member)}
13985
13986\begin{fulllineitems}
13987\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}}
13988Preauthentication data.
13989
13990\end{fulllineitems}
13991
13992\index{krb5\_kdc\_req.kdc\_options (C member)}
13993
13994\begin{fulllineitems}
13995\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}}
13996Requested options.
13997
13998\end{fulllineitems}
13999
14000\index{krb5\_kdc\_req.client (C member)}
14001
14002\begin{fulllineitems}
14003\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}}
14004Client principal and realm.
14005
14006\end{fulllineitems}
14007
14008\index{krb5\_kdc\_req.server (C member)}
14009
14010\begin{fulllineitems}
14011\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}}
14012Server principal and realm.
14013
14014\end{fulllineitems}
14015
14016\index{krb5\_kdc\_req.from (C member)}
14017
14018\begin{fulllineitems}
14019\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}}
14020Requested start time.
14021
14022\end{fulllineitems}
14023
14024\index{krb5\_kdc\_req.till (C member)}
14025
14026\begin{fulllineitems}
14027\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}}
14028Requested end time.
14029
14030\end{fulllineitems}
14031
14032\index{krb5\_kdc\_req.rtime (C member)}
14033
14034\begin{fulllineitems}
14035\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}}
14036Requested renewable end time.
14037
14038\end{fulllineitems}
14039
14040\index{krb5\_kdc\_req.nonce (C member)}
14041
14042\begin{fulllineitems}
14043\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}}
14044Nonce to match request and response.
14045
14046\end{fulllineitems}
14047
14048\index{krb5\_kdc\_req.nktypes (C member)}
14049
14050\begin{fulllineitems}
14051\phantomsection\label{\detokenize{appdev/refs/types/krb5_kdc_req:c.krb5_kdc_req.nktypes}}\pysigline{int       \sphinxbfcode{krb5\_kdc\_req.nktypes}}
14052Number of enctypes.
14053
14054\end{fulllineitems}
14055
14056\index{krb5\_kdc\_req.ktype (C member)}
14057
14058\begin{fulllineitems}
14059\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}}
14060Requested enctypes.
14061
14062\end{fulllineitems}
14063
14064\index{krb5\_kdc\_req.addresses (C member)}
14065
14066\begin{fulllineitems}
14067\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}}
14068Requested addresses (optional)
14069
14070\end{fulllineitems}
14071
14072\index{krb5\_kdc\_req.authorization\_data (C member)}
14073
14074\begin{fulllineitems}
14075\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}}
14076Encrypted authz data (optional)
14077
14078\end{fulllineitems}
14079
14080\index{krb5\_kdc\_req.unenc\_authdata (C member)}
14081
14082\begin{fulllineitems}
14083\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}}
14084Unencrypted authz data.
14085
14086\end{fulllineitems}
14087
14088\index{krb5\_kdc\_req.second\_ticket (C member)}
14089
14090\begin{fulllineitems}
14091\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}}
14092Second ticket array (optional)
14093
14094\end{fulllineitems}
14095
14096
14097
14098\subsubsection{krb5\_keyblock}
14099\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)}
14100
14101\begin{fulllineitems}
14102\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock}}\pysigline{\sphinxbfcode{krb5\_keyblock}}
14103\end{fulllineitems}
14104
14105
14106Exposed contents of a key.
14107
14108
14109\paragraph{Declaration}
14110\label{\detokenize{appdev/refs/types/krb5_keyblock:declaration}}
14111typedef struct \_krb5\_keyblock  krb5\_keyblock
14112
14113
14114\paragraph{Members}
14115\label{\detokenize{appdev/refs/types/krb5_keyblock:members}}\index{krb5\_keyblock.magic (C member)}
14116
14117\begin{fulllineitems}
14118\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}}
14119\end{fulllineitems}
14120
14121\index{krb5\_keyblock.enctype (C member)}
14122
14123\begin{fulllineitems}
14124\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}}
14125\end{fulllineitems}
14126
14127\index{krb5\_keyblock.length (C member)}
14128
14129\begin{fulllineitems}
14130\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyblock:c.krb5_keyblock.length}}\pysigline{unsigned int      \sphinxbfcode{krb5\_keyblock.length}}
14131\end{fulllineitems}
14132
14133\index{krb5\_keyblock.contents (C member)}
14134
14135\begin{fulllineitems}
14136\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}}
14137\end{fulllineitems}
14138
14139
14140
14141\subsubsection{krb5\_keytab\_entry}
14142\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)}
14143
14144\begin{fulllineitems}
14145\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab_entry:c.krb5_keytab_entry}}\pysigline{\sphinxbfcode{krb5\_keytab\_entry}}
14146\end{fulllineitems}
14147
14148
14149A key table entry.
14150
14151
14152\paragraph{Declaration}
14153\label{\detokenize{appdev/refs/types/krb5_keytab_entry:declaration}}
14154typedef struct krb5\_keytab\_entry\_st  krb5\_keytab\_entry
14155
14156
14157\paragraph{Members}
14158\label{\detokenize{appdev/refs/types/krb5_keytab_entry:members}}\index{krb5\_keytab\_entry.magic (C member)}
14159
14160\begin{fulllineitems}
14161\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}}
14162\end{fulllineitems}
14163
14164\index{krb5\_keytab\_entry.principal (C member)}
14165
14166\begin{fulllineitems}
14167\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}}
14168Principal of this key.
14169
14170\end{fulllineitems}
14171
14172\index{krb5\_keytab\_entry.timestamp (C member)}
14173
14174\begin{fulllineitems}
14175\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}}
14176Time entry written to keytable.
14177
14178\end{fulllineitems}
14179
14180\index{krb5\_keytab\_entry.vno (C member)}
14181
14182\begin{fulllineitems}
14183\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}}
14184Key version number.
14185
14186\end{fulllineitems}
14187
14188\index{krb5\_keytab\_entry.key (C member)}
14189
14190\begin{fulllineitems}
14191\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}}
14192The secret key.
14193
14194\end{fulllineitems}
14195
14196
14197
14198\subsubsection{krb5\_keyusage}
14199\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)}
14200
14201\begin{fulllineitems}
14202\phantomsection\label{\detokenize{appdev/refs/types/krb5_keyusage:c.krb5_keyusage}}\pysigline{\sphinxbfcode{krb5\_keyusage}}
14203\end{fulllineitems}
14204
14205
14206
14207\paragraph{Declaration}
14208\label{\detokenize{appdev/refs/types/krb5_keyusage:declaration}}
14209typedef krb5\_int32 krb5\_keyusage
14210
14211
14212\subsubsection{krb5\_kt\_cursor}
14213\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)}
14214
14215\begin{fulllineitems}
14216\phantomsection\label{\detokenize{appdev/refs/types/krb5_kt_cursor:c.krb5_kt_cursor}}\pysigline{\sphinxbfcode{krb5\_kt\_cursor}}
14217\end{fulllineitems}
14218
14219
14220
14221\paragraph{Declaration}
14222\label{\detokenize{appdev/refs/types/krb5_kt_cursor:declaration}}
14223typedef krb5\_pointer krb5\_kt\_cursor
14224
14225
14226\subsubsection{krb5\_kvno}
14227\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)}
14228
14229\begin{fulllineitems}
14230\phantomsection\label{\detokenize{appdev/refs/types/krb5_kvno:c.krb5_kvno}}\pysigline{\sphinxbfcode{krb5\_kvno}}
14231\end{fulllineitems}
14232
14233
14234
14235\paragraph{Declaration}
14236\label{\detokenize{appdev/refs/types/krb5_kvno:declaration}}
14237typedef unsigned int krb5\_kvno
14238
14239
14240\subsubsection{krb5\_last\_req\_entry}
14241\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)}
14242
14243\begin{fulllineitems}
14244\phantomsection\label{\detokenize{appdev/refs/types/krb5_last_req_entry:c.krb5_last_req_entry}}\pysigline{\sphinxbfcode{krb5\_last\_req\_entry}}
14245\end{fulllineitems}
14246
14247
14248Last request entry.
14249
14250
14251\paragraph{Declaration}
14252\label{\detokenize{appdev/refs/types/krb5_last_req_entry:declaration}}
14253typedef struct \_krb5\_last\_req\_entry  krb5\_last\_req\_entry
14254
14255
14256\paragraph{Members}
14257\label{\detokenize{appdev/refs/types/krb5_last_req_entry:members}}\index{krb5\_last\_req\_entry.magic (C member)}
14258
14259\begin{fulllineitems}
14260\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}}
14261\end{fulllineitems}
14262
14263\index{krb5\_last\_req\_entry.lr\_type (C member)}
14264
14265\begin{fulllineitems}
14266\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}}
14267LR type.
14268
14269\end{fulllineitems}
14270
14271\index{krb5\_last\_req\_entry.value (C member)}
14272
14273\begin{fulllineitems}
14274\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}}
14275Timestamp.
14276
14277\end{fulllineitems}
14278
14279
14280
14281\subsubsection{krb5\_magic}
14282\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)}
14283
14284\begin{fulllineitems}
14285\phantomsection\label{\detokenize{appdev/refs/types/krb5_magic:c.krb5_magic}}\pysigline{\sphinxbfcode{krb5\_magic}}
14286\end{fulllineitems}
14287
14288
14289
14290\paragraph{Declaration}
14291\label{\detokenize{appdev/refs/types/krb5_magic:declaration}}
14292typedef krb5\_error\_code krb5\_magic
14293
14294
14295\subsubsection{krb5\_mk\_req\_checksum\_func}
14296\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)}
14297
14298\begin{fulllineitems}
14299\phantomsection\label{\detokenize{appdev/refs/types/krb5_mk_req_checksum_func:c.krb5_mk_req_checksum_func}}\pysigline{\sphinxbfcode{krb5\_mk\_req\_checksum\_func}}
14300\end{fulllineitems}
14301
14302
14303Type of function used as a callback to generate checksum data for mk\_req.
14304
14305
14306\paragraph{Declaration}
14307\label{\detokenize{appdev/refs/types/krb5_mk_req_checksum_func:declaration}}
14308typedef krb5\_error\_code( * krb5\_mk\_req\_checksum\_func) (krb5\_context, krb5\_auth\_context, void *, krb5\_data **)
14309
14310
14311\subsubsection{krb5\_msgtype}
14312\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)}
14313
14314\begin{fulllineitems}
14315\phantomsection\label{\detokenize{appdev/refs/types/krb5_msgtype:c.krb5_msgtype}}\pysigline{\sphinxbfcode{krb5\_msgtype}}
14316\end{fulllineitems}
14317
14318
14319
14320\paragraph{Declaration}
14321\label{\detokenize{appdev/refs/types/krb5_msgtype:declaration}}
14322typedef unsigned int krb5\_msgtype
14323
14324
14325\subsubsection{krb5\_octet}
14326\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)}
14327
14328\begin{fulllineitems}
14329\phantomsection\label{\detokenize{appdev/refs/types/krb5_octet:c.krb5_octet}}\pysigline{\sphinxbfcode{krb5\_octet}}
14330\end{fulllineitems}
14331
14332
14333
14334\paragraph{Declaration}
14335\label{\detokenize{appdev/refs/types/krb5_octet:declaration}}
14336typedef uint8\_t krb5\_octet
14337
14338
14339\subsubsection{krb5\_pa\_pac\_req}
14340\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)}
14341
14342\begin{fulllineitems}
14343\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:c.krb5_pa_pac_req}}\pysigline{\sphinxbfcode{krb5\_pa\_pac\_req}}
14344\end{fulllineitems}
14345
14346
14347
14348\paragraph{Declaration}
14349\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:declaration}}
14350typedef struct \_krb5\_pa\_pac\_req  krb5\_pa\_pac\_req
14351
14352
14353\paragraph{Members}
14354\label{\detokenize{appdev/refs/types/krb5_pa_pac_req:members}}\index{krb5\_pa\_pac\_req.include\_pac (C member)}
14355
14356\begin{fulllineitems}
14357\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}}
14358TRUE if a PAC should be included in TGS-REP.
14359
14360\end{fulllineitems}
14361
14362
14363
14364\subsubsection{krb5\_pa\_server\_referral\_data}
14365\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)}
14366
14367\begin{fulllineitems}
14368\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:c.krb5_pa_server_referral_data}}\pysigline{\sphinxbfcode{krb5\_pa\_server\_referral\_data}}
14369\end{fulllineitems}
14370
14371
14372
14373\paragraph{Declaration}
14374\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:declaration}}
14375typedef struct \_krb5\_pa\_server\_referral\_data  krb5\_pa\_server\_referral\_data
14376
14377
14378\paragraph{Members}
14379\label{\detokenize{appdev/refs/types/krb5_pa_server_referral_data:members}}\index{krb5\_pa\_server\_referral\_data.referred\_realm (C member)}
14380
14381\begin{fulllineitems}
14382\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}}
14383\end{fulllineitems}
14384
14385\index{krb5\_pa\_server\_referral\_data.true\_principal\_name (C member)}
14386
14387\begin{fulllineitems}
14388\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}}
14389\end{fulllineitems}
14390
14391\index{krb5\_pa\_server\_referral\_data.requested\_principal\_name (C member)}
14392
14393\begin{fulllineitems}
14394\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}}
14395\end{fulllineitems}
14396
14397\index{krb5\_pa\_server\_referral\_data.referral\_valid\_until (C member)}
14398
14399\begin{fulllineitems}
14400\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}}
14401\end{fulllineitems}
14402
14403\index{krb5\_pa\_server\_referral\_data.rep\_cksum (C member)}
14404
14405\begin{fulllineitems}
14406\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}}
14407\end{fulllineitems}
14408
14409
14410
14411\subsubsection{krb5\_pa\_svr\_referral\_data}
14412\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)}
14413
14414\begin{fulllineitems}
14415\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:c.krb5_pa_svr_referral_data}}\pysigline{\sphinxbfcode{krb5\_pa\_svr\_referral\_data}}
14416\end{fulllineitems}
14417
14418
14419
14420\paragraph{Declaration}
14421\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:declaration}}
14422typedef struct \_krb5\_pa\_svr\_referral\_data  krb5\_pa\_svr\_referral\_data
14423
14424
14425\paragraph{Members}
14426\label{\detokenize{appdev/refs/types/krb5_pa_svr_referral_data:members}}\index{krb5\_pa\_svr\_referral\_data.principal (C member)}
14427
14428\begin{fulllineitems}
14429\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}}
14430Referred name, only realm is required.
14431
14432\end{fulllineitems}
14433
14434
14435
14436\subsubsection{krb5\_pa\_data}
14437\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)}
14438
14439\begin{fulllineitems}
14440\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data}}\pysigline{\sphinxbfcode{krb5\_pa\_data}}
14441\end{fulllineitems}
14442
14443
14444Pre-authentication data.
14445
14446
14447\paragraph{Declaration}
14448\label{\detokenize{appdev/refs/types/krb5_pa_data:declaration}}
14449typedef struct \_krb5\_pa\_data  krb5\_pa\_data
14450
14451
14452\paragraph{Members}
14453\label{\detokenize{appdev/refs/types/krb5_pa_data:members}}\index{krb5\_pa\_data.magic (C member)}
14454
14455\begin{fulllineitems}
14456\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}}
14457\end{fulllineitems}
14458
14459\index{krb5\_pa\_data.pa\_type (C member)}
14460
14461\begin{fulllineitems}
14462\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}}
14463Preauthentication data type.
14464
14465\end{fulllineitems}
14466
14467\index{krb5\_pa\_data.length (C member)}
14468
14469\begin{fulllineitems}
14470\phantomsection\label{\detokenize{appdev/refs/types/krb5_pa_data:c.krb5_pa_data.length}}\pysigline{unsigned int      \sphinxbfcode{krb5\_pa\_data.length}}
14471Length of data.
14472
14473\end{fulllineitems}
14474
14475\index{krb5\_pa\_data.contents (C member)}
14476
14477\begin{fulllineitems}
14478\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}}
14479Data.
14480
14481\end{fulllineitems}
14482
14483
14484
14485\subsubsection{krb5\_pointer}
14486\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)}
14487
14488\begin{fulllineitems}
14489\phantomsection\label{\detokenize{appdev/refs/types/krb5_pointer:c.krb5_pointer}}\pysigline{\sphinxbfcode{krb5\_pointer}}
14490\end{fulllineitems}
14491
14492
14493
14494\paragraph{Declaration}
14495\label{\detokenize{appdev/refs/types/krb5_pointer:declaration}}
14496typedef void* krb5\_pointer
14497
14498
14499\subsubsection{krb5\_post\_recv\_fn}
14500\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)}
14501
14502\begin{fulllineitems}
14503\phantomsection\label{\detokenize{appdev/refs/types/krb5_post_recv_fn:c.krb5_post_recv_fn}}\pysigline{\sphinxbfcode{krb5\_post\_recv\_fn}}
14504\end{fulllineitems}
14505
14506
14507Hook function for inspecting or overriding KDC replies.
14508
14509If \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.
14510The 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.
14511
14512
14513\paragraph{Declaration}
14514\label{\detokenize{appdev/refs/types/krb5_post_recv_fn:declaration}}
14515typedef 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)
14516
14517
14518\subsubsection{krb5\_pre\_send\_fn}
14519\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)}
14520
14521\begin{fulllineitems}
14522\phantomsection\label{\detokenize{appdev/refs/types/krb5_pre_send_fn:c.krb5_pre_send_fn}}\pysigline{\sphinxbfcode{krb5\_pre\_send\_fn}}
14523\end{fulllineitems}
14524
14525
14526Hook function for inspecting or modifying messages sent to KDCs.
14527
14528If the hook function sets \sphinxstyleemphasis{reply\_out} , \sphinxstyleemphasis{message} will not be sent to the KDC, and the given reply will used instead.
14529If the hook function sets \sphinxstyleemphasis{new\_message\_out} , the given message will be sent to the KDC in place of \sphinxstyleemphasis{message} .
14530If the hook function returns successfully without setting either output, \sphinxstyleemphasis{message} will be sent to the KDC normally.
14531The 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.
14532
14533
14534\paragraph{Declaration}
14535\label{\detokenize{appdev/refs/types/krb5_pre_send_fn:declaration}}
14536typedef 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)
14537
14538
14539\subsubsection{krb5\_preauthtype}
14540\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)}
14541
14542\begin{fulllineitems}
14543\phantomsection\label{\detokenize{appdev/refs/types/krb5_preauthtype:c.krb5_preauthtype}}\pysigline{\sphinxbfcode{krb5\_preauthtype}}
14544\end{fulllineitems}
14545
14546
14547
14548\paragraph{Declaration}
14549\label{\detokenize{appdev/refs/types/krb5_preauthtype:declaration}}
14550typedef krb5\_int32 krb5\_preauthtype
14551
14552
14553\subsubsection{krb5\_principal}
14554\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)}
14555
14556\begin{fulllineitems}
14557\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal:c.krb5_principal}}\pysigline{\sphinxbfcode{krb5\_principal}}
14558\end{fulllineitems}
14559
14560
14561
14562\paragraph{Declaration}
14563\label{\detokenize{appdev/refs/types/krb5_principal:declaration}}
14564typedef krb5\_principal\_data* krb5\_principal
14565
14566
14567\paragraph{Members}
14568\label{\detokenize{appdev/refs/types/krb5_principal:members}}\index{krb5\_principal.magic (C member)}
14569
14570\begin{fulllineitems}
14571\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}}
14572\end{fulllineitems}
14573
14574\index{krb5\_principal.realm (C member)}
14575
14576\begin{fulllineitems}
14577\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}}
14578\end{fulllineitems}
14579
14580\index{krb5\_principal.data (C member)}
14581
14582\begin{fulllineitems}
14583\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}}
14584An array of strings.
14585
14586\end{fulllineitems}
14587
14588\index{krb5\_principal.length (C member)}
14589
14590\begin{fulllineitems}
14591\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}}
14592\end{fulllineitems}
14593
14594\index{krb5\_principal.type (C member)}
14595
14596\begin{fulllineitems}
14597\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}}
14598\end{fulllineitems}
14599
14600
14601
14602\subsubsection{krb5\_principal\_data}
14603\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)}
14604
14605\begin{fulllineitems}
14606\phantomsection\label{\detokenize{appdev/refs/types/krb5_principal_data:c.krb5_principal_data}}\pysigline{\sphinxbfcode{krb5\_principal\_data}}
14607\end{fulllineitems}
14608
14609
14610
14611\paragraph{Declaration}
14612\label{\detokenize{appdev/refs/types/krb5_principal_data:declaration}}
14613typedef struct krb5\_principal\_data  krb5\_principal\_data
14614
14615
14616\paragraph{Members}
14617\label{\detokenize{appdev/refs/types/krb5_principal_data:members}}\index{krb5\_principal\_data.magic (C member)}
14618
14619\begin{fulllineitems}
14620\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}}
14621\end{fulllineitems}
14622
14623\index{krb5\_principal\_data.realm (C member)}
14624
14625\begin{fulllineitems}
14626\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}}
14627\end{fulllineitems}
14628
14629\index{krb5\_principal\_data.data (C member)}
14630
14631\begin{fulllineitems}
14632\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}}
14633An array of strings.
14634
14635\end{fulllineitems}
14636
14637\index{krb5\_principal\_data.length (C member)}
14638
14639\begin{fulllineitems}
14640\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}}
14641\end{fulllineitems}
14642
14643\index{krb5\_principal\_data.type (C member)}
14644
14645\begin{fulllineitems}
14646\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}}
14647\end{fulllineitems}
14648
14649
14650
14651\subsubsection{krb5\_prompt}
14652\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)}
14653
14654\begin{fulllineitems}
14655\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt}}\pysigline{\sphinxbfcode{krb5\_prompt}}
14656\end{fulllineitems}
14657
14658
14659Text for prompt used in prompter callback function.
14660
14661
14662\paragraph{Declaration}
14663\label{\detokenize{appdev/refs/types/krb5_prompt:declaration}}
14664typedef struct \_krb5\_prompt  krb5\_prompt
14665
14666
14667\paragraph{Members}
14668\label{\detokenize{appdev/refs/types/krb5_prompt:members}}\index{krb5\_prompt.prompt (C member)}
14669
14670\begin{fulllineitems}
14671\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt.prompt}}\pysigline{char *    \sphinxbfcode{krb5\_prompt.prompt}}
14672The prompt to show to the user.
14673
14674\end{fulllineitems}
14675
14676\index{krb5\_prompt.hidden (C member)}
14677
14678\begin{fulllineitems}
14679\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompt:c.krb5_prompt.hidden}}\pysigline{int       \sphinxbfcode{krb5\_prompt.hidden}}
14680Boolean; informative prompt or hidden (e.g.
14681PIN)
14682
14683\end{fulllineitems}
14684
14685\index{krb5\_prompt.reply (C member)}
14686
14687\begin{fulllineitems}
14688\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}}
14689Must be allocated before call to prompt routine.
14690
14691\end{fulllineitems}
14692
14693
14694
14695\subsubsection{krb5\_prompt\_type}
14696\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)}
14697
14698\begin{fulllineitems}
14699\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompt_type:c.krb5_prompt_type}}\pysigline{\sphinxbfcode{krb5\_prompt\_type}}
14700\end{fulllineitems}
14701
14702
14703
14704\paragraph{Declaration}
14705\label{\detokenize{appdev/refs/types/krb5_prompt_type:declaration}}
14706typedef krb5\_int32 krb5\_prompt\_type
14707
14708
14709\subsubsection{krb5\_prompter\_fct}
14710\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)}
14711
14712\begin{fulllineitems}
14713\phantomsection\label{\detokenize{appdev/refs/types/krb5_prompter_fct:c.krb5_prompter_fct}}\pysigline{\sphinxbfcode{krb5\_prompter\_fct}}
14714\end{fulllineitems}
14715
14716
14717Pointer to a prompter callback function.
14718
14719
14720\paragraph{Declaration}
14721\label{\detokenize{appdev/refs/types/krb5_prompter_fct:declaration}}
14722typedef krb5\_error\_code( * krb5\_prompter\_fct) (krb5\_context context, void *data, const char *name, const char *banner, int num\_prompts, krb5\_prompt prompts{[}{]})
14723
14724
14725\subsubsection{krb5\_pwd\_data}
14726\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)}
14727
14728\begin{fulllineitems}
14729\phantomsection\label{\detokenize{appdev/refs/types/krb5_pwd_data:c.krb5_pwd_data}}\pysigline{\sphinxbfcode{krb5\_pwd\_data}}
14730\end{fulllineitems}
14731
14732
14733
14734\paragraph{Declaration}
14735\label{\detokenize{appdev/refs/types/krb5_pwd_data:declaration}}
14736typedef struct \_krb5\_pwd\_data  krb5\_pwd\_data
14737
14738
14739\paragraph{Members}
14740\label{\detokenize{appdev/refs/types/krb5_pwd_data:members}}\index{krb5\_pwd\_data.magic (C member)}
14741
14742\begin{fulllineitems}
14743\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}}
14744\end{fulllineitems}
14745
14746\index{krb5\_pwd\_data.sequence\_count (C member)}
14747
14748\begin{fulllineitems}
14749\phantomsection\label{\detokenize{appdev/refs/types/krb5_pwd_data:c.krb5_pwd_data.sequence_count}}\pysigline{int       \sphinxbfcode{krb5\_pwd\_data.sequence\_count}}
14750\end{fulllineitems}
14751
14752\index{krb5\_pwd\_data.element (C member)}
14753
14754\begin{fulllineitems}
14755\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}}
14756\end{fulllineitems}
14757
14758
14759
14760\subsubsection{krb5\_responder\_context}
14761\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)}
14762
14763\begin{fulllineitems}
14764\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_context:c.krb5_responder_context}}\pysigline{\sphinxbfcode{krb5\_responder\_context}}
14765\end{fulllineitems}
14766
14767
14768A container for a set of preauthentication questions and answers.
14769
14770A 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.
14771
14772
14773\paragraph{Declaration}
14774\label{\detokenize{appdev/refs/types/krb5_responder_context:declaration}}
14775typedef struct krb5\_responder\_context\_st* krb5\_responder\_context
14776
14777
14778\subsubsection{krb5\_responder\_fn}
14779\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)}
14780
14781\begin{fulllineitems}
14782\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_fn:c.krb5_responder_fn}}\pysigline{\sphinxbfcode{krb5\_responder\_fn}}
14783\end{fulllineitems}
14784
14785
14786Responder function for an initial credential exchange.
14787
14788If a required question is unanswered, the prompter may be called.
14789
14790
14791\paragraph{Declaration}
14792\label{\detokenize{appdev/refs/types/krb5_responder_fn:declaration}}
14793typedef krb5\_error\_code( * krb5\_responder\_fn) (krb5\_context ctx, void *data, krb5\_responder\_context rctx)
14794
14795
14796\subsubsection{krb5\_responder\_otp\_challenge}
14797\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)}
14798
14799\begin{fulllineitems}
14800\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:c.krb5_responder_otp_challenge}}\pysigline{\sphinxbfcode{krb5\_responder\_otp\_challenge}}
14801\end{fulllineitems}
14802
14803
14804
14805\paragraph{Declaration}
14806\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:declaration}}
14807typedef struct \_krb5\_responder\_otp\_challenge  krb5\_responder\_otp\_challenge
14808
14809
14810\paragraph{Members}
14811\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:members}}\index{krb5\_responder\_otp\_challenge.service (C member)}
14812
14813\begin{fulllineitems}
14814\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_challenge:c.krb5_responder_otp_challenge.service}}\pysigline{char *    \sphinxbfcode{krb5\_responder\_otp\_challenge.service}}
14815\end{fulllineitems}
14816
14817\index{krb5\_responder\_otp\_challenge.tokeninfo (C member)}
14818
14819\begin{fulllineitems}
14820\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}}
14821\end{fulllineitems}
14822
14823
14824
14825\subsubsection{krb5\_responder\_otp\_tokeninfo}
14826\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)}
14827
14828\begin{fulllineitems}
14829\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo}}\pysigline{\sphinxbfcode{krb5\_responder\_otp\_tokeninfo}}
14830\end{fulllineitems}
14831
14832
14833
14834\paragraph{Declaration}
14835\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:declaration}}
14836typedef struct \_krb5\_responder\_otp\_tokeninfo  krb5\_responder\_otp\_tokeninfo
14837
14838
14839\paragraph{Members}
14840\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:members}}\index{krb5\_responder\_otp\_tokeninfo.flags (C member)}
14841
14842\begin{fulllineitems}
14843\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}}
14844\end{fulllineitems}
14845
14846\index{krb5\_responder\_otp\_tokeninfo.format (C member)}
14847
14848\begin{fulllineitems}
14849\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}}
14850\end{fulllineitems}
14851
14852\index{krb5\_responder\_otp\_tokeninfo.length (C member)}
14853
14854\begin{fulllineitems}
14855\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}}
14856\end{fulllineitems}
14857
14858\index{krb5\_responder\_otp\_tokeninfo.vendor (C member)}
14859
14860\begin{fulllineitems}
14861\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.vendor}}\pysigline{char *    \sphinxbfcode{krb5\_responder\_otp\_tokeninfo.vendor}}
14862\end{fulllineitems}
14863
14864\index{krb5\_responder\_otp\_tokeninfo.challenge (C member)}
14865
14866\begin{fulllineitems}
14867\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_otp_tokeninfo:c.krb5_responder_otp_tokeninfo.challenge}}\pysigline{char *    \sphinxbfcode{krb5\_responder\_otp\_tokeninfo.challenge}}
14868\end{fulllineitems}
14869
14870\index{krb5\_responder\_otp\_tokeninfo.token\_id (C member)}
14871
14872\begin{fulllineitems}
14873\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}}
14874\end{fulllineitems}
14875
14876\index{krb5\_responder\_otp\_tokeninfo.alg\_id (C member)}
14877
14878\begin{fulllineitems}
14879\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}}
14880\end{fulllineitems}
14881
14882
14883
14884\subsubsection{krb5\_responder\_pkinit\_challenge}
14885\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)}
14886
14887\begin{fulllineitems}
14888\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:c.krb5_responder_pkinit_challenge}}\pysigline{\sphinxbfcode{krb5\_responder\_pkinit\_challenge}}
14889\end{fulllineitems}
14890
14891
14892
14893\paragraph{Declaration}
14894\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:declaration}}
14895typedef struct \_krb5\_responder\_pkinit\_challenge  krb5\_responder\_pkinit\_challenge
14896
14897
14898\paragraph{Members}
14899\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_challenge:members}}\index{krb5\_responder\_pkinit\_challenge.identities (C member)}
14900
14901\begin{fulllineitems}
14902\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}}
14903\end{fulllineitems}
14904
14905
14906
14907\subsubsection{krb5\_responder\_pkinit\_identity}
14908\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)}
14909
14910\begin{fulllineitems}
14911\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:c.krb5_responder_pkinit_identity}}\pysigline{\sphinxbfcode{krb5\_responder\_pkinit\_identity}}
14912\end{fulllineitems}
14913
14914
14915
14916\paragraph{Declaration}
14917\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:declaration}}
14918typedef struct \_krb5\_responder\_pkinit\_identity  krb5\_responder\_pkinit\_identity
14919
14920
14921\paragraph{Members}
14922\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:members}}\index{krb5\_responder\_pkinit\_identity.identity (C member)}
14923
14924\begin{fulllineitems}
14925\phantomsection\label{\detokenize{appdev/refs/types/krb5_responder_pkinit_identity:c.krb5_responder_pkinit_identity.identity}}\pysigline{char *    \sphinxbfcode{krb5\_responder\_pkinit\_identity.identity}}
14926\end{fulllineitems}
14927
14928\index{krb5\_responder\_pkinit\_identity.token\_flags (C member)}
14929
14930\begin{fulllineitems}
14931\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}}
14932\end{fulllineitems}
14933
14934
14935
14936\subsubsection{krb5\_response}
14937\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)}
14938
14939\begin{fulllineitems}
14940\phantomsection\label{\detokenize{appdev/refs/types/krb5_response:c.krb5_response}}\pysigline{\sphinxbfcode{krb5\_response}}
14941\end{fulllineitems}
14942
14943
14944
14945\paragraph{Declaration}
14946\label{\detokenize{appdev/refs/types/krb5_response:declaration}}
14947typedef struct \_krb5\_response  krb5\_response
14948
14949
14950\paragraph{Members}
14951\label{\detokenize{appdev/refs/types/krb5_response:members}}\index{krb5\_response.magic (C member)}
14952
14953\begin{fulllineitems}
14954\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}}
14955\end{fulllineitems}
14956
14957\index{krb5\_response.message\_type (C member)}
14958
14959\begin{fulllineitems}
14960\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}}
14961\end{fulllineitems}
14962
14963\index{krb5\_response.response (C member)}
14964
14965\begin{fulllineitems}
14966\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}}
14967\end{fulllineitems}
14968
14969\index{krb5\_response.expected\_nonce (C member)}
14970
14971\begin{fulllineitems}
14972\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}}
14973\end{fulllineitems}
14974
14975\index{krb5\_response.request\_time (C member)}
14976
14977\begin{fulllineitems}
14978\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}}
14979\end{fulllineitems}
14980
14981
14982
14983\subsubsection{krb5\_replay\_data}
14984\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)}
14985
14986\begin{fulllineitems}
14987\phantomsection\label{\detokenize{appdev/refs/types/krb5_replay_data:c.krb5_replay_data}}\pysigline{\sphinxbfcode{krb5\_replay\_data}}
14988\end{fulllineitems}
14989
14990
14991Replay data.
14992
14993Sequence 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()}}}} .
14994
14995
14996\paragraph{Declaration}
14997\label{\detokenize{appdev/refs/types/krb5_replay_data:declaration}}
14998typedef struct krb5\_replay\_data  krb5\_replay\_data
14999
15000
15001\paragraph{Members}
15002\label{\detokenize{appdev/refs/types/krb5_replay_data:members}}\index{krb5\_replay\_data.timestamp (C member)}
15003
15004\begin{fulllineitems}
15005\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}}
15006Timestamp, seconds portion.
15007
15008\end{fulllineitems}
15009
15010\index{krb5\_replay\_data.usec (C member)}
15011
15012\begin{fulllineitems}
15013\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}}
15014Timestamp, microseconds portion.
15015
15016\end{fulllineitems}
15017
15018\index{krb5\_replay\_data.seq (C member)}
15019
15020\begin{fulllineitems}
15021\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}}
15022Sequence number.
15023
15024\end{fulllineitems}
15025
15026
15027
15028\subsubsection{krb5\_ticket}
15029\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)}
15030
15031\begin{fulllineitems}
15032\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket:c.krb5_ticket}}\pysigline{\sphinxbfcode{krb5\_ticket}}
15033\end{fulllineitems}
15034
15035
15036Ticket structure.
15037
15038The C representation of the ticket message, with a pointer to the C representation of the encrypted part.
15039
15040
15041\paragraph{Declaration}
15042\label{\detokenize{appdev/refs/types/krb5_ticket:declaration}}
15043typedef struct \_krb5\_ticket  krb5\_ticket
15044
15045
15046\paragraph{Members}
15047\label{\detokenize{appdev/refs/types/krb5_ticket:members}}\index{krb5\_ticket.magic (C member)}
15048
15049\begin{fulllineitems}
15050\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}}
15051\end{fulllineitems}
15052
15053\index{krb5\_ticket.server (C member)}
15054
15055\begin{fulllineitems}
15056\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}}
15057server name/realm
15058
15059\end{fulllineitems}
15060
15061\index{krb5\_ticket.enc\_part (C member)}
15062
15063\begin{fulllineitems}
15064\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}}
15065encryption type, kvno, encrypted encoding
15066
15067\end{fulllineitems}
15068
15069\index{krb5\_ticket.enc\_part2 (C member)}
15070
15071\begin{fulllineitems}
15072\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}}
15073ptr to decrypted version, if available
15074
15075\end{fulllineitems}
15076
15077
15078
15079\subsubsection{krb5\_ticket\_times}
15080\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)}
15081
15082\begin{fulllineitems}
15083\phantomsection\label{\detokenize{appdev/refs/types/krb5_ticket_times:c.krb5_ticket_times}}\pysigline{\sphinxbfcode{krb5\_ticket\_times}}
15084\end{fulllineitems}
15085
15086
15087Ticket start time, end time, and renewal duration.
15088
15089
15090\paragraph{Declaration}
15091\label{\detokenize{appdev/refs/types/krb5_ticket_times:declaration}}
15092typedef struct \_krb5\_ticket\_times  krb5\_ticket\_times
15093
15094
15095\paragraph{Members}
15096\label{\detokenize{appdev/refs/types/krb5_ticket_times:members}}\index{krb5\_ticket\_times.authtime (C member)}
15097
15098\begin{fulllineitems}
15099\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}}
15100Time at which KDC issued the initial ticket that corresponds to this ticket.
15101
15102\end{fulllineitems}
15103
15104\index{krb5\_ticket\_times.starttime (C member)}
15105
15106\begin{fulllineitems}
15107\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}}
15108optional in ticket, if not present, use \sphinxstyleemphasis{authtime}
15109
15110\end{fulllineitems}
15111
15112\index{krb5\_ticket\_times.endtime (C member)}
15113
15114\begin{fulllineitems}
15115\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}}
15116Ticket expiration time.
15117
15118\end{fulllineitems}
15119
15120\index{krb5\_ticket\_times.renew\_till (C member)}
15121
15122\begin{fulllineitems}
15123\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}}
15124Latest time at which renewal of ticket can be valid.
15125
15126\end{fulllineitems}
15127
15128
15129
15130\subsubsection{krb5\_timestamp}
15131\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)}
15132
15133\begin{fulllineitems}
15134\phantomsection\label{\detokenize{appdev/refs/types/krb5_timestamp:c.krb5_timestamp}}\pysigline{\sphinxbfcode{krb5\_timestamp}}
15135\end{fulllineitems}
15136
15137
15138Represents a timestamp in seconds since the POSIX epoch.
15139
15140This 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.
15141
15142
15143\paragraph{Declaration}
15144\label{\detokenize{appdev/refs/types/krb5_timestamp:declaration}}
15145typedef krb5\_int32 krb5\_timestamp
15146
15147
15148\subsubsection{krb5\_tkt\_authent}
15149\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)}
15150
15151\begin{fulllineitems}
15152\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_authent:c.krb5_tkt_authent}}\pysigline{\sphinxbfcode{krb5\_tkt\_authent}}
15153\end{fulllineitems}
15154
15155
15156Ticket authentication data.
15157
15158
15159\paragraph{Declaration}
15160\label{\detokenize{appdev/refs/types/krb5_tkt_authent:declaration}}
15161typedef struct \_krb5\_tkt\_authent  krb5\_tkt\_authent
15162
15163
15164\paragraph{Members}
15165\label{\detokenize{appdev/refs/types/krb5_tkt_authent:members}}\index{krb5\_tkt\_authent.magic (C member)}
15166
15167\begin{fulllineitems}
15168\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}}
15169\end{fulllineitems}
15170
15171\index{krb5\_tkt\_authent.ticket (C member)}
15172
15173\begin{fulllineitems}
15174\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}}
15175\end{fulllineitems}
15176
15177\index{krb5\_tkt\_authent.authenticator (C member)}
15178
15179\begin{fulllineitems}
15180\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}}
15181\end{fulllineitems}
15182
15183\index{krb5\_tkt\_authent.ap\_options (C member)}
15184
15185\begin{fulllineitems}
15186\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}}
15187\end{fulllineitems}
15188
15189
15190
15191\subsubsection{krb5\_trace\_callback}
15192\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)}
15193
15194\begin{fulllineitems}
15195\phantomsection\label{\detokenize{appdev/refs/types/krb5_trace_callback:c.krb5_trace_callback}}\pysigline{\sphinxbfcode{krb5\_trace\_callback}}
15196\end{fulllineitems}
15197
15198
15199
15200\paragraph{Declaration}
15201\label{\detokenize{appdev/refs/types/krb5_trace_callback:declaration}}
15202typedef void( * krb5\_trace\_callback) (krb5\_context context, const krb5\_trace\_info *info, void *cb\_data)
15203
15204
15205\subsubsection{krb5\_trace\_info}
15206\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)}
15207
15208\begin{fulllineitems}
15209\phantomsection\label{\detokenize{appdev/refs/types/krb5_trace_info:c.krb5_trace_info}}\pysigline{\sphinxbfcode{krb5\_trace\_info}}
15210\end{fulllineitems}
15211
15212
15213A wrapper for passing information to a \sphinxstyleemphasis{krb5\_trace\_callback} .
15214
15215Currently, 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.
15216
15217
15218\paragraph{Declaration}
15219\label{\detokenize{appdev/refs/types/krb5_trace_info:declaration}}
15220typedef struct \_krb5\_trace\_info  krb5\_trace\_info
15221
15222
15223\paragraph{Members}
15224\label{\detokenize{appdev/refs/types/krb5_trace_info:members}}\index{krb5\_trace\_info.message (C member)}
15225
15226\begin{fulllineitems}
15227\phantomsection\label{\detokenize{appdev/refs/types/krb5_trace_info:c.krb5_trace_info.message}}\pysigline{const char *      \sphinxbfcode{krb5\_trace\_info.message}}
15228\end{fulllineitems}
15229
15230
15231
15232\subsubsection{krb5\_transited}
15233\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)}
15234
15235\begin{fulllineitems}
15236\phantomsection\label{\detokenize{appdev/refs/types/krb5_transited:c.krb5_transited}}\pysigline{\sphinxbfcode{krb5\_transited}}
15237\end{fulllineitems}
15238
15239
15240Structure for transited encoding.
15241
15242
15243\paragraph{Declaration}
15244\label{\detokenize{appdev/refs/types/krb5_transited:declaration}}
15245typedef struct \_krb5\_transited  krb5\_transited
15246
15247
15248\paragraph{Members}
15249\label{\detokenize{appdev/refs/types/krb5_transited:members}}\index{krb5\_transited.magic (C member)}
15250
15251\begin{fulllineitems}
15252\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}}
15253\end{fulllineitems}
15254
15255\index{krb5\_transited.tr\_type (C member)}
15256
15257\begin{fulllineitems}
15258\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}}
15259Transited encoding type.
15260
15261\end{fulllineitems}
15262
15263\index{krb5\_transited.tr\_contents (C member)}
15264
15265\begin{fulllineitems}
15266\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}}
15267Contents.
15268
15269\end{fulllineitems}
15270
15271
15272
15273\subsubsection{krb5\_typed\_data}
15274\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)}
15275
15276\begin{fulllineitems}
15277\phantomsection\label{\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data}}\pysigline{\sphinxbfcode{krb5\_typed\_data}}
15278\end{fulllineitems}
15279
15280
15281
15282\paragraph{Declaration}
15283\label{\detokenize{appdev/refs/types/krb5_typed_data:declaration}}
15284typedef struct \_krb5\_typed\_data  krb5\_typed\_data
15285
15286
15287\paragraph{Members}
15288\label{\detokenize{appdev/refs/types/krb5_typed_data:members}}\index{krb5\_typed\_data.magic (C member)}
15289
15290\begin{fulllineitems}
15291\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}}
15292\end{fulllineitems}
15293
15294\index{krb5\_typed\_data.type (C member)}
15295
15296\begin{fulllineitems}
15297\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}}
15298\end{fulllineitems}
15299
15300\index{krb5\_typed\_data.length (C member)}
15301
15302\begin{fulllineitems}
15303\phantomsection\label{\detokenize{appdev/refs/types/krb5_typed_data:c.krb5_typed_data.length}}\pysigline{unsigned int      \sphinxbfcode{krb5\_typed\_data.length}}
15304\end{fulllineitems}
15305
15306\index{krb5\_typed\_data.data (C member)}
15307
15308\begin{fulllineitems}
15309\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}}
15310\end{fulllineitems}
15311
15312
15313
15314\subsubsection{krb5\_ui\_2}
15315\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)}
15316
15317\begin{fulllineitems}
15318\phantomsection\label{\detokenize{appdev/refs/types/krb5_ui_2:c.krb5_ui_2}}\pysigline{\sphinxbfcode{krb5\_ui\_2}}
15319\end{fulllineitems}
15320
15321
15322
15323\paragraph{Declaration}
15324\label{\detokenize{appdev/refs/types/krb5_ui_2:declaration}}
15325typedef uint16\_t krb5\_ui\_2
15326
15327
15328\subsubsection{krb5\_ui\_4}
15329\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)}
15330
15331\begin{fulllineitems}
15332\phantomsection\label{\detokenize{appdev/refs/types/krb5_ui_4:c.krb5_ui_4}}\pysigline{\sphinxbfcode{krb5\_ui\_4}}
15333\end{fulllineitems}
15334
15335
15336
15337\paragraph{Declaration}
15338\label{\detokenize{appdev/refs/types/krb5_ui_4:declaration}}
15339typedef uint32\_t krb5\_ui\_4
15340
15341
15342\subsubsection{krb5\_verify\_init\_creds\_opt}
15343\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)}
15344
15345\begin{fulllineitems}
15346\phantomsection\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:c.krb5_verify_init_creds_opt}}\pysigline{\sphinxbfcode{krb5\_verify\_init\_creds\_opt}}
15347\end{fulllineitems}
15348
15349
15350
15351\paragraph{Declaration}
15352\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:declaration}}
15353typedef struct \_krb5\_verify\_init\_creds\_opt  krb5\_verify\_init\_creds\_opt
15354
15355
15356\paragraph{Members}
15357\label{\detokenize{appdev/refs/types/krb5_verify_init_creds_opt:members}}\index{krb5\_verify\_init\_creds\_opt.flags (C member)}
15358
15359\begin{fulllineitems}
15360\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}}
15361\end{fulllineitems}
15362
15363\index{krb5\_verify\_init\_creds\_opt.ap\_req\_nofail (C member)}
15364
15365\begin{fulllineitems}
15366\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}}
15367boolean
15368
15369\end{fulllineitems}
15370
15371
15372
15373\subsubsection{passwd\_phrase\_element}
15374\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)}
15375
15376\begin{fulllineitems}
15377\phantomsection\label{\detokenize{appdev/refs/types/passwd_phrase_element:c.passwd_phrase_element}}\pysigline{\sphinxbfcode{passwd\_phrase\_element}}
15378\end{fulllineitems}
15379
15380
15381
15382\paragraph{Declaration}
15383\label{\detokenize{appdev/refs/types/passwd_phrase_element:declaration}}
15384typedef struct \_passwd\_phrase\_element  passwd\_phrase\_element
15385
15386
15387\paragraph{Members}
15388\label{\detokenize{appdev/refs/types/passwd_phrase_element:members}}\index{passwd\_phrase\_element.magic (C member)}
15389
15390\begin{fulllineitems}
15391\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}}
15392\end{fulllineitems}
15393
15394\index{passwd\_phrase\_element.passwd (C member)}
15395
15396\begin{fulllineitems}
15397\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}}
15398\end{fulllineitems}
15399
15400\index{passwd\_phrase\_element.phrase (C member)}
15401
15402\begin{fulllineitems}
15403\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}}
15404\end{fulllineitems}
15405
15406
15407
15408\subsection{Internal}
15409\label{\detokenize{appdev/refs/types/index:internal}}
15410
15411\subsubsection{krb5\_auth\_context}
15412\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)}
15413
15414\begin{fulllineitems}
15415\phantomsection\label{\detokenize{appdev/refs/types/krb5_auth_context:c.krb5_auth_context}}\pysigline{\sphinxbfcode{krb5\_auth\_context}}
15416\end{fulllineitems}
15417
15418
15419
15420\paragraph{Declaration}
15421\label{\detokenize{appdev/refs/types/krb5_auth_context:declaration}}
15422typedef struct \_krb5\_auth\_context* krb5\_auth\_context
15423
15424
15425\subsubsection{krb5\_cksumtype}
15426\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)}
15427
15428\begin{fulllineitems}
15429\phantomsection\label{\detokenize{appdev/refs/types/krb5_cksumtype:c.krb5_cksumtype}}\pysigline{\sphinxbfcode{krb5\_cksumtype}}
15430\end{fulllineitems}
15431
15432
15433
15434\paragraph{Declaration}
15435\label{\detokenize{appdev/refs/types/krb5_cksumtype:declaration}}
15436typedef krb5\_int32 krb5\_cksumtype
15437
15438
15439\subsubsection{krb5\_context}
15440\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)}
15441
15442\begin{fulllineitems}
15443\phantomsection\label{\detokenize{appdev/refs/types/krb5_context:c.krb5_context}}\pysigline{\sphinxbfcode{krb5\_context}}
15444\end{fulllineitems}
15445
15446
15447
15448\paragraph{Declaration}
15449\label{\detokenize{appdev/refs/types/krb5_context:declaration}}
15450typedef struct \_krb5\_context* krb5\_context
15451
15452
15453\subsubsection{krb5\_cc\_cursor}
15454\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)}
15455
15456\begin{fulllineitems}
15457\phantomsection\label{\detokenize{appdev/refs/types/krb5_cc_cursor:c.krb5_cc_cursor}}\pysigline{\sphinxbfcode{krb5\_cc\_cursor}}
15458\end{fulllineitems}
15459
15460
15461Cursor for sequential lookup.
15462
15463
15464\paragraph{Declaration}
15465\label{\detokenize{appdev/refs/types/krb5_cc_cursor:declaration}}
15466typedef krb5\_pointer krb5\_cc\_cursor
15467
15468
15469\subsubsection{krb5\_ccache}
15470\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)}
15471
15472\begin{fulllineitems}
15473\phantomsection\label{\detokenize{appdev/refs/types/krb5_ccache:c.krb5_ccache}}\pysigline{\sphinxbfcode{krb5\_ccache}}
15474\end{fulllineitems}
15475
15476
15477
15478\paragraph{Declaration}
15479\label{\detokenize{appdev/refs/types/krb5_ccache:declaration}}
15480typedef struct \_krb5\_ccache* krb5\_ccache
15481
15482
15483\subsubsection{krb5\_cccol\_cursor}
15484\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)}
15485
15486\begin{fulllineitems}
15487\phantomsection\label{\detokenize{appdev/refs/types/krb5_cccol_cursor:c.krb5_cccol_cursor}}\pysigline{\sphinxbfcode{krb5\_cccol\_cursor}}
15488\end{fulllineitems}
15489
15490
15491Cursor for iterating over all ccaches.
15492
15493
15494\paragraph{Declaration}
15495\label{\detokenize{appdev/refs/types/krb5_cccol_cursor:declaration}}
15496typedef struct \_krb5\_cccol\_cursor* krb5\_cccol\_cursor
15497
15498
15499\subsubsection{krb5\_init\_creds\_context}
15500\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)}
15501
15502\begin{fulllineitems}
15503\phantomsection\label{\detokenize{appdev/refs/types/krb5_init_creds_context:c.krb5_init_creds_context}}\pysigline{\sphinxbfcode{krb5\_init\_creds\_context}}
15504\end{fulllineitems}
15505
15506
15507
15508\paragraph{Declaration}
15509\label{\detokenize{appdev/refs/types/krb5_init_creds_context:declaration}}
15510typedef struct \_krb5\_init\_creds\_context* krb5\_init\_creds\_context
15511
15512
15513\subsubsection{krb5\_key}
15514\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)}
15515
15516\begin{fulllineitems}
15517\phantomsection\label{\detokenize{appdev/refs/types/krb5_key:c.krb5_key}}\pysigline{\sphinxbfcode{krb5\_key}}
15518\end{fulllineitems}
15519
15520
15521Opaque identifier for a key.
15522
15523Use 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.
15524
15525
15526\paragraph{Declaration}
15527\label{\detokenize{appdev/refs/types/krb5_key:declaration}}
15528typedef struct krb5\_key\_st* krb5\_key
15529
15530
15531\subsubsection{krb5\_keytab}
15532\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)}
15533
15534\begin{fulllineitems}
15535\phantomsection\label{\detokenize{appdev/refs/types/krb5_keytab:c.krb5_keytab}}\pysigline{\sphinxbfcode{krb5\_keytab}}
15536\end{fulllineitems}
15537
15538
15539
15540\paragraph{Declaration}
15541\label{\detokenize{appdev/refs/types/krb5_keytab:declaration}}
15542typedef struct \_krb5\_kt* krb5\_keytab
15543
15544
15545\subsubsection{krb5\_pac}
15546\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)}
15547
15548\begin{fulllineitems}
15549\phantomsection\label{\detokenize{appdev/refs/types/krb5_pac:c.krb5_pac}}\pysigline{\sphinxbfcode{krb5\_pac}}
15550\end{fulllineitems}
15551
15552
15553PAC data structure to convey authorization information.
15554
15555
15556\paragraph{Declaration}
15557\label{\detokenize{appdev/refs/types/krb5_pac:declaration}}
15558typedef struct krb5\_pac\_data* krb5\_pac
15559
15560
15561\subsubsection{krb5\_rcache}
15562\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)}
15563
15564\begin{fulllineitems}
15565\phantomsection\label{\detokenize{appdev/refs/types/krb5_rcache:c.krb5_rcache}}\pysigline{\sphinxbfcode{krb5\_rcache}}
15566\end{fulllineitems}
15567
15568
15569
15570\paragraph{Declaration}
15571\label{\detokenize{appdev/refs/types/krb5_rcache:declaration}}
15572typedef struct krb5\_rc\_st* krb5\_rcache
15573
15574
15575\subsubsection{krb5\_tkt\_creds\_context}
15576\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)}
15577
15578\begin{fulllineitems}
15579\phantomsection\label{\detokenize{appdev/refs/types/krb5_tkt_creds_context:c.krb5_tkt_creds_context}}\pysigline{\sphinxbfcode{krb5\_tkt\_creds\_context}}
15580\end{fulllineitems}
15581
15582
15583
15584\paragraph{Declaration}
15585\label{\detokenize{appdev/refs/types/krb5_tkt_creds_context:declaration}}
15586typedef struct \_krb5\_tkt\_creds\_context* krb5\_tkt\_creds\_context
15587
15588
15589\section{krb5 simple macros}
15590\label{\detokenize{appdev/refs/macros/index:krb5-simple-macros}}\label{\detokenize{appdev/refs/macros/index::doc}}
15591
15592\subsection{Public}
15593\label{\detokenize{appdev/refs/macros/index:public}}
15594
15595\subsubsection{ADDRTYPE\_ADDRPORT}
15596\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)}
15597
15598\begin{fulllineitems}
15599\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_ADDRPORT:ADDRTYPE_ADDRPORT}}\pysigline{\sphinxbfcode{ADDRTYPE\_ADDRPORT}}
15600\end{fulllineitems}
15601
15602
15603
15604\begin{savenotes}\sphinxattablestart
15605\centering
15606\begin{tabulary}{\linewidth}[t]{|T|T|}
15607\hline
15608
15609\sphinxcode{ADDRTYPE\_ADDRPORT}
15610&
15611\sphinxcode{0x0100}
15612\\
15613\hline
15614\end{tabulary}
15615\par
15616\sphinxattableend\end{savenotes}
15617
15618
15619\subsubsection{ADDRTYPE\_CHAOS}
15620\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)}
15621
15622\begin{fulllineitems}
15623\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_CHAOS:ADDRTYPE_CHAOS}}\pysigline{\sphinxbfcode{ADDRTYPE\_CHAOS}}
15624\end{fulllineitems}
15625
15626
15627
15628\begin{savenotes}\sphinxattablestart
15629\centering
15630\begin{tabulary}{\linewidth}[t]{|T|T|}
15631\hline
15632
15633\sphinxcode{ADDRTYPE\_CHAOS}
15634&
15635\sphinxcode{0x0005}
15636\\
15637\hline
15638\end{tabulary}
15639\par
15640\sphinxattableend\end{savenotes}
15641
15642
15643\subsubsection{ADDRTYPE\_DDP}
15644\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)}
15645
15646\begin{fulllineitems}
15647\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_DDP:ADDRTYPE_DDP}}\pysigline{\sphinxbfcode{ADDRTYPE\_DDP}}
15648\end{fulllineitems}
15649
15650
15651
15652\begin{savenotes}\sphinxattablestart
15653\centering
15654\begin{tabulary}{\linewidth}[t]{|T|T|}
15655\hline
15656
15657\sphinxcode{ADDRTYPE\_DDP}
15658&
15659\sphinxcode{0x0010}
15660\\
15661\hline
15662\end{tabulary}
15663\par
15664\sphinxattableend\end{savenotes}
15665
15666
15667\subsubsection{ADDRTYPE\_INET}
15668\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)}
15669
15670\begin{fulllineitems}
15671\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET:ADDRTYPE_INET}}\pysigline{\sphinxbfcode{ADDRTYPE\_INET}}
15672\end{fulllineitems}
15673
15674
15675
15676\begin{savenotes}\sphinxattablestart
15677\centering
15678\begin{tabulary}{\linewidth}[t]{|T|T|}
15679\hline
15680
15681\sphinxcode{ADDRTYPE\_INET}
15682&
15683\sphinxcode{0x0002}
15684\\
15685\hline
15686\end{tabulary}
15687\par
15688\sphinxattableend\end{savenotes}
15689
15690
15691\subsubsection{ADDRTYPE\_INET6}
15692\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)}
15693
15694\begin{fulllineitems}
15695\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_INET6:ADDRTYPE_INET6}}\pysigline{\sphinxbfcode{ADDRTYPE\_INET6}}
15696\end{fulllineitems}
15697
15698
15699
15700\begin{savenotes}\sphinxattablestart
15701\centering
15702\begin{tabulary}{\linewidth}[t]{|T|T|}
15703\hline
15704
15705\sphinxcode{ADDRTYPE\_INET6}
15706&
15707\sphinxcode{0x0018}
15708\\
15709\hline
15710\end{tabulary}
15711\par
15712\sphinxattableend\end{savenotes}
15713
15714
15715\subsubsection{ADDRTYPE\_IPPORT}
15716\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)}
15717
15718\begin{fulllineitems}
15719\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_IPPORT:ADDRTYPE_IPPORT}}\pysigline{\sphinxbfcode{ADDRTYPE\_IPPORT}}
15720\end{fulllineitems}
15721
15722
15723
15724\begin{savenotes}\sphinxattablestart
15725\centering
15726\begin{tabulary}{\linewidth}[t]{|T|T|}
15727\hline
15728
15729\sphinxcode{ADDRTYPE\_IPPORT}
15730&
15731\sphinxcode{0x0101}
15732\\
15733\hline
15734\end{tabulary}
15735\par
15736\sphinxattableend\end{savenotes}
15737
15738
15739\subsubsection{ADDRTYPE\_ISO}
15740\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)}
15741
15742\begin{fulllineitems}
15743\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_ISO:ADDRTYPE_ISO}}\pysigline{\sphinxbfcode{ADDRTYPE\_ISO}}
15744\end{fulllineitems}
15745
15746
15747
15748\begin{savenotes}\sphinxattablestart
15749\centering
15750\begin{tabulary}{\linewidth}[t]{|T|T|}
15751\hline
15752
15753\sphinxcode{ADDRTYPE\_ISO}
15754&
15755\sphinxcode{0x0007}
15756\\
15757\hline
15758\end{tabulary}
15759\par
15760\sphinxattableend\end{savenotes}
15761
15762
15763\subsubsection{ADDRTYPE\_IS\_LOCAL}
15764\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)}
15765
15766\begin{fulllineitems}
15767\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_IS_LOCAL:ADDRTYPE_IS_LOCAL}}\pysigline{\sphinxbfcode{ADDRTYPE\_IS\_LOCAL}}
15768\end{fulllineitems}
15769
15770
15771
15772\begin{savenotes}\sphinxattablestart
15773\centering
15774\begin{tabulary}{\linewidth}[t]{|T|T|}
15775\hline
15776
15777\sphinxcode{ADDRTYPE\_IS\_LOCAL (addrtype)}
15778&
15779\sphinxcode{(addrtype \& 0x8000)}
15780\\
15781\hline
15782\end{tabulary}
15783\par
15784\sphinxattableend\end{savenotes}
15785
15786
15787\subsubsection{ADDRTYPE\_NETBIOS}
15788\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)}
15789
15790\begin{fulllineitems}
15791\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_NETBIOS:ADDRTYPE_NETBIOS}}\pysigline{\sphinxbfcode{ADDRTYPE\_NETBIOS}}
15792\end{fulllineitems}
15793
15794
15795
15796\begin{savenotes}\sphinxattablestart
15797\centering
15798\begin{tabulary}{\linewidth}[t]{|T|T|}
15799\hline
15800
15801\sphinxcode{ADDRTYPE\_NETBIOS}
15802&
15803\sphinxcode{0x0014}
15804\\
15805\hline
15806\end{tabulary}
15807\par
15808\sphinxattableend\end{savenotes}
15809
15810
15811\subsubsection{ADDRTYPE\_XNS}
15812\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)}
15813
15814\begin{fulllineitems}
15815\phantomsection\label{\detokenize{appdev/refs/macros/ADDRTYPE_XNS:ADDRTYPE_XNS}}\pysigline{\sphinxbfcode{ADDRTYPE\_XNS}}
15816\end{fulllineitems}
15817
15818
15819
15820\begin{savenotes}\sphinxattablestart
15821\centering
15822\begin{tabulary}{\linewidth}[t]{|T|T|}
15823\hline
15824
15825\sphinxcode{ADDRTYPE\_XNS}
15826&
15827\sphinxcode{0x0006}
15828\\
15829\hline
15830\end{tabulary}
15831\par
15832\sphinxattableend\end{savenotes}
15833
15834
15835\subsubsection{AD\_TYPE\_EXTERNAL}
15836\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)}
15837
15838\begin{fulllineitems}
15839\phantomsection\label{\detokenize{appdev/refs/macros/AD_TYPE_EXTERNAL:AD_TYPE_EXTERNAL}}\pysigline{\sphinxbfcode{AD\_TYPE\_EXTERNAL}}
15840\end{fulllineitems}
15841
15842
15843
15844\begin{savenotes}\sphinxattablestart
15845\centering
15846\begin{tabulary}{\linewidth}[t]{|T|T|}
15847\hline
15848
15849\sphinxcode{AD\_TYPE\_EXTERNAL}
15850&
15851\sphinxcode{0x4000}
15852\\
15853\hline
15854\end{tabulary}
15855\par
15856\sphinxattableend\end{savenotes}
15857
15858
15859\subsubsection{AD\_TYPE\_FIELD\_TYPE\_MASK}
15860\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)}
15861
15862\begin{fulllineitems}
15863\phantomsection\label{\detokenize{appdev/refs/macros/AD_TYPE_FIELD_TYPE_MASK:AD_TYPE_FIELD_TYPE_MASK}}\pysigline{\sphinxbfcode{AD\_TYPE\_FIELD\_TYPE\_MASK}}
15864\end{fulllineitems}
15865
15866
15867
15868\begin{savenotes}\sphinxattablestart
15869\centering
15870\begin{tabulary}{\linewidth}[t]{|T|T|}
15871\hline
15872
15873\sphinxcode{AD\_TYPE\_FIELD\_TYPE\_MASK}
15874&
15875\sphinxcode{0x1fff}
15876\\
15877\hline
15878\end{tabulary}
15879\par
15880\sphinxattableend\end{savenotes}
15881
15882
15883\subsubsection{AD\_TYPE\_REGISTERED}
15884\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)}
15885
15886\begin{fulllineitems}
15887\phantomsection\label{\detokenize{appdev/refs/macros/AD_TYPE_REGISTERED:AD_TYPE_REGISTERED}}\pysigline{\sphinxbfcode{AD\_TYPE\_REGISTERED}}
15888\end{fulllineitems}
15889
15890
15891
15892\begin{savenotes}\sphinxattablestart
15893\centering
15894\begin{tabulary}{\linewidth}[t]{|T|T|}
15895\hline
15896
15897\sphinxcode{AD\_TYPE\_REGISTERED}
15898&
15899\sphinxcode{0x2000}
15900\\
15901\hline
15902\end{tabulary}
15903\par
15904\sphinxattableend\end{savenotes}
15905
15906
15907\subsubsection{AD\_TYPE\_RESERVED}
15908\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)}
15909
15910\begin{fulllineitems}
15911\phantomsection\label{\detokenize{appdev/refs/macros/AD_TYPE_RESERVED:AD_TYPE_RESERVED}}\pysigline{\sphinxbfcode{AD\_TYPE\_RESERVED}}
15912\end{fulllineitems}
15913
15914
15915
15916\begin{savenotes}\sphinxattablestart
15917\centering
15918\begin{tabulary}{\linewidth}[t]{|T|T|}
15919\hline
15920
15921\sphinxcode{AD\_TYPE\_RESERVED}
15922&
15923\sphinxcode{0x8000}
15924\\
15925\hline
15926\end{tabulary}
15927\par
15928\sphinxattableend\end{savenotes}
15929
15930
15931\subsubsection{AP\_OPTS\_ETYPE\_NEGOTIATION}
15932\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)}
15933
15934\begin{fulllineitems}
15935\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_ETYPE_NEGOTIATION:AP_OPTS_ETYPE_NEGOTIATION}}\pysigline{\sphinxbfcode{AP\_OPTS\_ETYPE\_NEGOTIATION}}
15936\end{fulllineitems}
15937
15938
15939
15940\begin{savenotes}\sphinxattablestart
15941\centering
15942\begin{tabulary}{\linewidth}[t]{|T|T|}
15943\hline
15944
15945\sphinxcode{AP\_OPTS\_ETYPE\_NEGOTIATION}
15946&
15947\sphinxcode{0x00000002}
15948\\
15949\hline
15950\end{tabulary}
15951\par
15952\sphinxattableend\end{savenotes}
15953
15954
15955\subsubsection{AP\_OPTS\_MUTUAL\_REQUIRED}
15956\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)}
15957
15958\begin{fulllineitems}
15959\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED:AP_OPTS_MUTUAL_REQUIRED}}\pysigline{\sphinxbfcode{AP\_OPTS\_MUTUAL\_REQUIRED}}
15960\end{fulllineitems}
15961
15962
15963Perform a mutual authentication exchange.
15964
15965
15966\begin{savenotes}\sphinxattablestart
15967\centering
15968\begin{tabulary}{\linewidth}[t]{|T|T|}
15969\hline
15970
15971\sphinxcode{AP\_OPTS\_MUTUAL\_REQUIRED}
15972&
15973\sphinxcode{0x20000000}
15974\\
15975\hline
15976\end{tabulary}
15977\par
15978\sphinxattableend\end{savenotes}
15979
15980
15981\subsubsection{AP\_OPTS\_RESERVED}
15982\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)}
15983
15984\begin{fulllineitems}
15985\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_RESERVED:AP_OPTS_RESERVED}}\pysigline{\sphinxbfcode{AP\_OPTS\_RESERVED}}
15986\end{fulllineitems}
15987
15988
15989
15990\begin{savenotes}\sphinxattablestart
15991\centering
15992\begin{tabulary}{\linewidth}[t]{|T|T|}
15993\hline
15994
15995\sphinxcode{AP\_OPTS\_RESERVED}
15996&
15997\sphinxcode{0x80000000}
15998\\
15999\hline
16000\end{tabulary}
16001\par
16002\sphinxattableend\end{savenotes}
16003
16004
16005\subsubsection{AP\_OPTS\_USE\_SESSION\_KEY}
16006\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)}
16007
16008\begin{fulllineitems}
16009\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SESSION_KEY:AP_OPTS_USE_SESSION_KEY}}\pysigline{\sphinxbfcode{AP\_OPTS\_USE\_SESSION\_KEY}}
16010\end{fulllineitems}
16011
16012
16013Use session key.
16014
16015
16016\begin{savenotes}\sphinxattablestart
16017\centering
16018\begin{tabulary}{\linewidth}[t]{|T|T|}
16019\hline
16020
16021\sphinxcode{AP\_OPTS\_USE\_SESSION\_KEY}
16022&
16023\sphinxcode{0x40000000}
16024\\
16025\hline
16026\end{tabulary}
16027\par
16028\sphinxattableend\end{savenotes}
16029
16030
16031\subsubsection{AP\_OPTS\_USE\_SUBKEY}
16032\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)}
16033
16034\begin{fulllineitems}
16035\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_USE_SUBKEY:AP_OPTS_USE_SUBKEY}}\pysigline{\sphinxbfcode{AP\_OPTS\_USE\_SUBKEY}}
16036\end{fulllineitems}
16037
16038
16039Generate a subsession key from the current session key obtained from the credentials.
16040
16041
16042\begin{savenotes}\sphinxattablestart
16043\centering
16044\begin{tabulary}{\linewidth}[t]{|T|T|}
16045\hline
16046
16047\sphinxcode{AP\_OPTS\_USE\_SUBKEY}
16048&
16049\sphinxcode{0x00000001}
16050\\
16051\hline
16052\end{tabulary}
16053\par
16054\sphinxattableend\end{savenotes}
16055
16056
16057\subsubsection{AP\_OPTS\_WIRE\_MASK}
16058\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)}
16059
16060\begin{fulllineitems}
16061\phantomsection\label{\detokenize{appdev/refs/macros/AP_OPTS_WIRE_MASK:AP_OPTS_WIRE_MASK}}\pysigline{\sphinxbfcode{AP\_OPTS\_WIRE\_MASK}}
16062\end{fulllineitems}
16063
16064
16065
16066\begin{savenotes}\sphinxattablestart
16067\centering
16068\begin{tabulary}{\linewidth}[t]{|T|T|}
16069\hline
16070
16071\sphinxcode{AP\_OPTS\_WIRE\_MASK}
16072&
16073\sphinxcode{0xfffffff0}
16074\\
16075\hline
16076\end{tabulary}
16077\par
16078\sphinxattableend\end{savenotes}
16079
16080
16081\subsubsection{CKSUMTYPE\_CMAC\_CAMELLIA128}
16082\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)}
16083
16084\begin{fulllineitems}
16085\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA128:CKSUMTYPE_CMAC_CAMELLIA128}}\pysigline{\sphinxbfcode{CKSUMTYPE\_CMAC\_CAMELLIA128}}
16086\end{fulllineitems}
16087
16088
16089RFC 6803.
16090
16091
16092\begin{savenotes}\sphinxattablestart
16093\centering
16094\begin{tabulary}{\linewidth}[t]{|T|T|}
16095\hline
16096
16097\sphinxcode{CKSUMTYPE\_CMAC\_CAMELLIA128}
16098&
16099\sphinxcode{0x0011}
16100\\
16101\hline
16102\end{tabulary}
16103\par
16104\sphinxattableend\end{savenotes}
16105
16106
16107\subsubsection{CKSUMTYPE\_CMAC\_CAMELLIA256}
16108\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)}
16109
16110\begin{fulllineitems}
16111\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA256:CKSUMTYPE_CMAC_CAMELLIA256}}\pysigline{\sphinxbfcode{CKSUMTYPE\_CMAC\_CAMELLIA256}}
16112\end{fulllineitems}
16113
16114
16115RFC 6803.
16116
16117
16118\begin{savenotes}\sphinxattablestart
16119\centering
16120\begin{tabulary}{\linewidth}[t]{|T|T|}
16121\hline
16122
16123\sphinxcode{CKSUMTYPE\_CMAC\_CAMELLIA256}
16124&
16125\sphinxcode{0x0012}
16126\\
16127\hline
16128\end{tabulary}
16129\par
16130\sphinxattableend\end{savenotes}
16131
16132
16133\subsubsection{CKSUMTYPE\_CRC32}
16134\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)}
16135
16136\begin{fulllineitems}
16137\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_CRC32:CKSUMTYPE_CRC32}}\pysigline{\sphinxbfcode{CKSUMTYPE\_CRC32}}
16138\end{fulllineitems}
16139
16140
16141
16142\begin{savenotes}\sphinxattablestart
16143\centering
16144\begin{tabulary}{\linewidth}[t]{|T|T|}
16145\hline
16146
16147\sphinxcode{CKSUMTYPE\_CRC32}
16148&
16149\sphinxcode{0x0001}
16150\\
16151\hline
16152\end{tabulary}
16153\par
16154\sphinxattableend\end{savenotes}
16155
16156
16157\subsubsection{CKSUMTYPE\_DESCBC}
16158\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)}
16159
16160\begin{fulllineitems}
16161\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_DESCBC:CKSUMTYPE_DESCBC}}\pysigline{\sphinxbfcode{CKSUMTYPE\_DESCBC}}
16162\end{fulllineitems}
16163
16164
16165
16166\begin{savenotes}\sphinxattablestart
16167\centering
16168\begin{tabulary}{\linewidth}[t]{|T|T|}
16169\hline
16170
16171\sphinxcode{CKSUMTYPE\_DESCBC}
16172&
16173\sphinxcode{0x0004}
16174\\
16175\hline
16176\end{tabulary}
16177\par
16178\sphinxattableend\end{savenotes}
16179
16180
16181\subsubsection{CKSUMTYPE\_HMAC\_MD5\_ARCFOUR}
16182\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)}
16183
16184\begin{fulllineitems}
16185\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_MD5_ARCFOUR:CKSUMTYPE_HMAC_MD5_ARCFOUR}}\pysigline{\sphinxbfcode{CKSUMTYPE\_HMAC\_MD5\_ARCFOUR}}
16186\end{fulllineitems}
16187
16188
16189RFC 4757.
16190
16191
16192\begin{savenotes}\sphinxattablestart
16193\centering
16194\begin{tabulary}{\linewidth}[t]{|T|T|}
16195\hline
16196
16197\sphinxcode{CKSUMTYPE\_HMAC\_MD5\_ARCFOUR}
16198&
16199\sphinxcode{-138}
16200\\
16201\hline
16202\end{tabulary}
16203\par
16204\sphinxattableend\end{savenotes}
16205
16206
16207\subsubsection{CKSUMTYPE\_HMAC\_SHA1\_96\_AES128}
16208\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)}
16209
16210\begin{fulllineitems}
16211\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES128:CKSUMTYPE_HMAC_SHA1_96_AES128}}\pysigline{\sphinxbfcode{CKSUMTYPE\_HMAC\_SHA1\_96\_AES128}}
16212\end{fulllineitems}
16213
16214
16215RFC 3962.
16216
16217Used with ENCTYPE\_AES128\_CTS\_HMAC\_SHA1\_96
16218
16219
16220\begin{savenotes}\sphinxattablestart
16221\centering
16222\begin{tabulary}{\linewidth}[t]{|T|T|}
16223\hline
16224
16225\sphinxcode{CKSUMTYPE\_HMAC\_SHA1\_96\_AES128}
16226&
16227\sphinxcode{0x000f}
16228\\
16229\hline
16230\end{tabulary}
16231\par
16232\sphinxattableend\end{savenotes}
16233
16234
16235\subsubsection{CKSUMTYPE\_HMAC\_SHA1\_96\_AES256}
16236\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)}
16237
16238\begin{fulllineitems}
16239\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES256:CKSUMTYPE_HMAC_SHA1_96_AES256}}\pysigline{\sphinxbfcode{CKSUMTYPE\_HMAC\_SHA1\_96\_AES256}}
16240\end{fulllineitems}
16241
16242
16243RFC 3962.
16244
16245Used with ENCTYPE\_AES256\_CTS\_HMAC\_SHA1\_96
16246
16247
16248\begin{savenotes}\sphinxattablestart
16249\centering
16250\begin{tabulary}{\linewidth}[t]{|T|T|}
16251\hline
16252
16253\sphinxcode{CKSUMTYPE\_HMAC\_SHA1\_96\_AES256}
16254&
16255\sphinxcode{0x0010}
16256\\
16257\hline
16258\end{tabulary}
16259\par
16260\sphinxattableend\end{savenotes}
16261
16262
16263\subsubsection{CKSUMTYPE\_HMAC\_SHA256\_128\_AES128}
16264\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)}
16265
16266\begin{fulllineitems}
16267\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA256_128_AES128:CKSUMTYPE_HMAC_SHA256_128_AES128}}\pysigline{\sphinxbfcode{CKSUMTYPE\_HMAC\_SHA256\_128\_AES128}}
16268\end{fulllineitems}
16269
16270
16271RFC 8009.
16272
16273
16274\begin{savenotes}\sphinxattablestart
16275\centering
16276\begin{tabulary}{\linewidth}[t]{|T|T|}
16277\hline
16278
16279\sphinxcode{CKSUMTYPE\_HMAC\_SHA256\_128\_AES128}
16280&
16281\sphinxcode{0x0013}
16282\\
16283\hline
16284\end{tabulary}
16285\par
16286\sphinxattableend\end{savenotes}
16287
16288
16289\subsubsection{CKSUMTYPE\_HMAC\_SHA384\_192\_AES256}
16290\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)}
16291
16292\begin{fulllineitems}
16293\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA384_192_AES256:CKSUMTYPE_HMAC_SHA384_192_AES256}}\pysigline{\sphinxbfcode{CKSUMTYPE\_HMAC\_SHA384\_192\_AES256}}
16294\end{fulllineitems}
16295
16296
16297RFC 8009.
16298
16299
16300\begin{savenotes}\sphinxattablestart
16301\centering
16302\begin{tabulary}{\linewidth}[t]{|T|T|}
16303\hline
16304
16305\sphinxcode{CKSUMTYPE\_HMAC\_SHA384\_192\_AES256}
16306&
16307\sphinxcode{0x0014}
16308\\
16309\hline
16310\end{tabulary}
16311\par
16312\sphinxattableend\end{savenotes}
16313
16314
16315\subsubsection{CKSUMTYPE\_HMAC\_SHA1\_DES3}
16316\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)}
16317
16318\begin{fulllineitems}
16319\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_DES3:CKSUMTYPE_HMAC_SHA1_DES3}}\pysigline{\sphinxbfcode{CKSUMTYPE\_HMAC\_SHA1\_DES3}}
16320\end{fulllineitems}
16321
16322
16323
16324\begin{savenotes}\sphinxattablestart
16325\centering
16326\begin{tabulary}{\linewidth}[t]{|T|T|}
16327\hline
16328
16329\sphinxcode{CKSUMTYPE\_HMAC\_SHA1\_DES3}
16330&
16331\sphinxcode{0x000c}
16332\\
16333\hline
16334\end{tabulary}
16335\par
16336\sphinxattableend\end{savenotes}
16337
16338
16339\subsubsection{CKSUMTYPE\_MD5\_HMAC\_ARCFOUR}
16340\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)}
16341
16342\begin{fulllineitems}
16343\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_MD5_HMAC_ARCFOUR:CKSUMTYPE_MD5_HMAC_ARCFOUR}}\pysigline{\sphinxbfcode{CKSUMTYPE\_MD5\_HMAC\_ARCFOUR}}
16344\end{fulllineitems}
16345
16346
16347
16348\begin{savenotes}\sphinxattablestart
16349\centering
16350\begin{tabulary}{\linewidth}[t]{|T|T|}
16351\hline
16352
16353\sphinxcode{CKSUMTYPE\_MD5\_HMAC\_ARCFOUR}
16354&
16355\sphinxcode{-137 /* Microsoft netlogon */}
16356\\
16357\hline
16358\end{tabulary}
16359\par
16360\sphinxattableend\end{savenotes}
16361
16362
16363\subsubsection{CKSUMTYPE\_NIST\_SHA}
16364\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)}
16365
16366\begin{fulllineitems}
16367\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_NIST_SHA:CKSUMTYPE_NIST_SHA}}\pysigline{\sphinxbfcode{CKSUMTYPE\_NIST\_SHA}}
16368\end{fulllineitems}
16369
16370
16371
16372\begin{savenotes}\sphinxattablestart
16373\centering
16374\begin{tabulary}{\linewidth}[t]{|T|T|}
16375\hline
16376
16377\sphinxcode{CKSUMTYPE\_NIST\_SHA}
16378&
16379\sphinxcode{0x0009}
16380\\
16381\hline
16382\end{tabulary}
16383\par
16384\sphinxattableend\end{savenotes}
16385
16386
16387\subsubsection{CKSUMTYPE\_RSA\_MD4}
16388\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)}
16389
16390\begin{fulllineitems}
16391\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4:CKSUMTYPE_RSA_MD4}}\pysigline{\sphinxbfcode{CKSUMTYPE\_RSA\_MD4}}
16392\end{fulllineitems}
16393
16394
16395
16396\begin{savenotes}\sphinxattablestart
16397\centering
16398\begin{tabulary}{\linewidth}[t]{|T|T|}
16399\hline
16400
16401\sphinxcode{CKSUMTYPE\_RSA\_MD4}
16402&
16403\sphinxcode{0x0002}
16404\\
16405\hline
16406\end{tabulary}
16407\par
16408\sphinxattableend\end{savenotes}
16409
16410
16411\subsubsection{CKSUMTYPE\_RSA\_MD4\_DES}
16412\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)}
16413
16414\begin{fulllineitems}
16415\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD4_DES:CKSUMTYPE_RSA_MD4_DES}}\pysigline{\sphinxbfcode{CKSUMTYPE\_RSA\_MD4\_DES}}
16416\end{fulllineitems}
16417
16418
16419
16420\begin{savenotes}\sphinxattablestart
16421\centering
16422\begin{tabulary}{\linewidth}[t]{|T|T|}
16423\hline
16424
16425\sphinxcode{CKSUMTYPE\_RSA\_MD4\_DES}
16426&
16427\sphinxcode{0x0003}
16428\\
16429\hline
16430\end{tabulary}
16431\par
16432\sphinxattableend\end{savenotes}
16433
16434
16435\subsubsection{CKSUMTYPE\_RSA\_MD5}
16436\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)}
16437
16438\begin{fulllineitems}
16439\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5:CKSUMTYPE_RSA_MD5}}\pysigline{\sphinxbfcode{CKSUMTYPE\_RSA\_MD5}}
16440\end{fulllineitems}
16441
16442
16443
16444\begin{savenotes}\sphinxattablestart
16445\centering
16446\begin{tabulary}{\linewidth}[t]{|T|T|}
16447\hline
16448
16449\sphinxcode{CKSUMTYPE\_RSA\_MD5}
16450&
16451\sphinxcode{0x0007}
16452\\
16453\hline
16454\end{tabulary}
16455\par
16456\sphinxattableend\end{savenotes}
16457
16458
16459\subsubsection{CKSUMTYPE\_RSA\_MD5\_DES}
16460\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)}
16461
16462\begin{fulllineitems}
16463\phantomsection\label{\detokenize{appdev/refs/macros/CKSUMTYPE_RSA_MD5_DES:CKSUMTYPE_RSA_MD5_DES}}\pysigline{\sphinxbfcode{CKSUMTYPE\_RSA\_MD5\_DES}}
16464\end{fulllineitems}
16465
16466
16467
16468\begin{savenotes}\sphinxattablestart
16469\centering
16470\begin{tabulary}{\linewidth}[t]{|T|T|}
16471\hline
16472
16473\sphinxcode{CKSUMTYPE\_RSA\_MD5\_DES}
16474&
16475\sphinxcode{0x0008}
16476\\
16477\hline
16478\end{tabulary}
16479\par
16480\sphinxattableend\end{savenotes}
16481
16482
16483\subsubsection{ENCTYPE\_AES128\_CTS\_HMAC\_SHA1\_96}
16484\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)}
16485
16486\begin{fulllineitems}
16487\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}}
16488\end{fulllineitems}
16489
16490
16491RFC 3962.
16492
16493
16494\begin{savenotes}\sphinxattablestart
16495\centering
16496\begin{tabulary}{\linewidth}[t]{|T|T|}
16497\hline
16498
16499\sphinxcode{ENCTYPE\_AES128\_CTS\_HMAC\_SHA1\_96}
16500&
16501\sphinxcode{0x0011}
16502\\
16503\hline
16504\end{tabulary}
16505\par
16506\sphinxattableend\end{savenotes}
16507
16508
16509\subsubsection{ENCTYPE\_AES128\_CTS\_HMAC\_SHA256\_128}
16510\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)}
16511
16512\begin{fulllineitems}
16513\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}}
16514\end{fulllineitems}
16515
16516
16517RFC 8009.
16518
16519
16520\begin{savenotes}\sphinxattablestart
16521\centering
16522\begin{tabulary}{\linewidth}[t]{|T|T|}
16523\hline
16524
16525\sphinxcode{ENCTYPE\_AES128\_CTS\_HMAC\_SHA256\_128}
16526&
16527\sphinxcode{0x0013}
16528\\
16529\hline
16530\end{tabulary}
16531\par
16532\sphinxattableend\end{savenotes}
16533
16534
16535\subsubsection{ENCTYPE\_AES256\_CTS\_HMAC\_SHA1\_96}
16536\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)}
16537
16538\begin{fulllineitems}
16539\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}}
16540\end{fulllineitems}
16541
16542
16543RFC 3962.
16544
16545
16546\begin{savenotes}\sphinxattablestart
16547\centering
16548\begin{tabulary}{\linewidth}[t]{|T|T|}
16549\hline
16550
16551\sphinxcode{ENCTYPE\_AES256\_CTS\_HMAC\_SHA1\_96}
16552&
16553\sphinxcode{0x0012}
16554\\
16555\hline
16556\end{tabulary}
16557\par
16558\sphinxattableend\end{savenotes}
16559
16560
16561\subsubsection{ENCTYPE\_AES256\_CTS\_HMAC\_SHA384\_192}
16562\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)}
16563
16564\begin{fulllineitems}
16565\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}}
16566\end{fulllineitems}
16567
16568
16569RFC 8009.
16570
16571
16572\begin{savenotes}\sphinxattablestart
16573\centering
16574\begin{tabulary}{\linewidth}[t]{|T|T|}
16575\hline
16576
16577\sphinxcode{ENCTYPE\_AES256\_CTS\_HMAC\_SHA384\_192}
16578&
16579\sphinxcode{0x0014}
16580\\
16581\hline
16582\end{tabulary}
16583\par
16584\sphinxattableend\end{savenotes}
16585
16586
16587\subsubsection{ENCTYPE\_ARCFOUR\_HMAC}
16588\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)}
16589
16590\begin{fulllineitems}
16591\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC:ENCTYPE_ARCFOUR_HMAC}}\pysigline{\sphinxbfcode{ENCTYPE\_ARCFOUR\_HMAC}}
16592\end{fulllineitems}
16593
16594
16595RFC 4757.
16596
16597
16598\begin{savenotes}\sphinxattablestart
16599\centering
16600\begin{tabulary}{\linewidth}[t]{|T|T|}
16601\hline
16602
16603\sphinxcode{ENCTYPE\_ARCFOUR\_HMAC}
16604&
16605\sphinxcode{0x0017}
16606\\
16607\hline
16608\end{tabulary}
16609\par
16610\sphinxattableend\end{savenotes}
16611
16612
16613\subsubsection{ENCTYPE\_ARCFOUR\_HMAC\_EXP}
16614\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)}
16615
16616\begin{fulllineitems}
16617\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC_EXP:ENCTYPE_ARCFOUR_HMAC_EXP}}\pysigline{\sphinxbfcode{ENCTYPE\_ARCFOUR\_HMAC\_EXP}}
16618\end{fulllineitems}
16619
16620
16621RFC 4757.
16622
16623
16624\begin{savenotes}\sphinxattablestart
16625\centering
16626\begin{tabulary}{\linewidth}[t]{|T|T|}
16627\hline
16628
16629\sphinxcode{ENCTYPE\_ARCFOUR\_HMAC\_EXP}
16630&
16631\sphinxcode{0x0018}
16632\\
16633\hline
16634\end{tabulary}
16635\par
16636\sphinxattableend\end{savenotes}
16637
16638
16639\subsubsection{ENCTYPE\_CAMELLIA128\_CTS\_CMAC}
16640\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)}
16641
16642\begin{fulllineitems}
16643\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA128_CTS_CMAC:ENCTYPE_CAMELLIA128_CTS_CMAC}}\pysigline{\sphinxbfcode{ENCTYPE\_CAMELLIA128\_CTS\_CMAC}}
16644\end{fulllineitems}
16645
16646
16647RFC 6803.
16648
16649
16650\begin{savenotes}\sphinxattablestart
16651\centering
16652\begin{tabulary}{\linewidth}[t]{|T|T|}
16653\hline
16654
16655\sphinxcode{ENCTYPE\_CAMELLIA128\_CTS\_CMAC}
16656&
16657\sphinxcode{0x0019}
16658\\
16659\hline
16660\end{tabulary}
16661\par
16662\sphinxattableend\end{savenotes}
16663
16664
16665\subsubsection{ENCTYPE\_CAMELLIA256\_CTS\_CMAC}
16666\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)}
16667
16668\begin{fulllineitems}
16669\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_CAMELLIA256_CTS_CMAC:ENCTYPE_CAMELLIA256_CTS_CMAC}}\pysigline{\sphinxbfcode{ENCTYPE\_CAMELLIA256\_CTS\_CMAC}}
16670\end{fulllineitems}
16671
16672
16673RFC 6803.
16674
16675
16676\begin{savenotes}\sphinxattablestart
16677\centering
16678\begin{tabulary}{\linewidth}[t]{|T|T|}
16679\hline
16680
16681\sphinxcode{ENCTYPE\_CAMELLIA256\_CTS\_CMAC}
16682&
16683\sphinxcode{0x001a}
16684\\
16685\hline
16686\end{tabulary}
16687\par
16688\sphinxattableend\end{savenotes}
16689
16690
16691\subsubsection{ENCTYPE\_DES3\_CBC\_ENV}
16692\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)}
16693
16694\begin{fulllineitems}
16695\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_ENV:ENCTYPE_DES3_CBC_ENV}}\pysigline{\sphinxbfcode{ENCTYPE\_DES3\_CBC\_ENV}}
16696\end{fulllineitems}
16697
16698
16699DES-3 cbc mode, CMS enveloped data.
16700
16701
16702\begin{savenotes}\sphinxattablestart
16703\centering
16704\begin{tabulary}{\linewidth}[t]{|T|T|}
16705\hline
16706
16707\sphinxcode{ENCTYPE\_DES3\_CBC\_ENV}
16708&
16709\sphinxcode{0x000f}
16710\\
16711\hline
16712\end{tabulary}
16713\par
16714\sphinxattableend\end{savenotes}
16715
16716
16717\subsubsection{ENCTYPE\_DES3\_CBC\_RAW}
16718\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)}
16719
16720\begin{fulllineitems}
16721\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_RAW:ENCTYPE_DES3_CBC_RAW}}\pysigline{\sphinxbfcode{ENCTYPE\_DES3\_CBC\_RAW}}
16722\end{fulllineitems}
16723
16724
16725
16726\begin{savenotes}\sphinxattablestart
16727\centering
16728\begin{tabulary}{\linewidth}[t]{|T|T|}
16729\hline
16730
16731\sphinxcode{ENCTYPE\_DES3\_CBC\_RAW}
16732&
16733\sphinxcode{0x0006}
16734\\
16735\hline
16736\end{tabulary}
16737\par
16738\sphinxattableend\end{savenotes}
16739
16740
16741\subsubsection{ENCTYPE\_DES3\_CBC\_SHA}
16742\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)}
16743
16744\begin{fulllineitems}
16745\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA:ENCTYPE_DES3_CBC_SHA}}\pysigline{\sphinxbfcode{ENCTYPE\_DES3\_CBC\_SHA}}
16746\end{fulllineitems}
16747
16748
16749
16750\begin{savenotes}\sphinxattablestart
16751\centering
16752\begin{tabulary}{\linewidth}[t]{|T|T|}
16753\hline
16754
16755\sphinxcode{ENCTYPE\_DES3\_CBC\_SHA}
16756&
16757\sphinxcode{0x0005}
16758\\
16759\hline
16760\end{tabulary}
16761\par
16762\sphinxattableend\end{savenotes}
16763
16764
16765\subsubsection{ENCTYPE\_DES3\_CBC\_SHA1}
16766\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)}
16767
16768\begin{fulllineitems}
16769\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES3_CBC_SHA1:ENCTYPE_DES3_CBC_SHA1}}\pysigline{\sphinxbfcode{ENCTYPE\_DES3\_CBC\_SHA1}}
16770\end{fulllineitems}
16771
16772
16773
16774\begin{savenotes}\sphinxattablestart
16775\centering
16776\begin{tabulary}{\linewidth}[t]{|T|T|}
16777\hline
16778
16779\sphinxcode{ENCTYPE\_DES3\_CBC\_SHA1}
16780&
16781\sphinxcode{0x0010}
16782\\
16783\hline
16784\end{tabulary}
16785\par
16786\sphinxattableend\end{savenotes}
16787
16788
16789\subsubsection{ENCTYPE\_DES\_CBC\_CRC}
16790\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)}
16791
16792\begin{fulllineitems}
16793\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_CRC:ENCTYPE_DES_CBC_CRC}}\pysigline{\sphinxbfcode{ENCTYPE\_DES\_CBC\_CRC}}
16794\end{fulllineitems}
16795
16796
16797
16798\begin{savenotes}\sphinxattablestart
16799\centering
16800\begin{tabulary}{\linewidth}[t]{|T|T|}
16801\hline
16802
16803\sphinxcode{ENCTYPE\_DES\_CBC\_CRC}
16804&
16805\sphinxcode{0x0001}
16806\\
16807\hline
16808\end{tabulary}
16809\par
16810\sphinxattableend\end{savenotes}
16811
16812
16813\subsubsection{ENCTYPE\_DES\_CBC\_MD4}
16814\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)}
16815
16816\begin{fulllineitems}
16817\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD4:ENCTYPE_DES_CBC_MD4}}\pysigline{\sphinxbfcode{ENCTYPE\_DES\_CBC\_MD4}}
16818\end{fulllineitems}
16819
16820
16821
16822\begin{savenotes}\sphinxattablestart
16823\centering
16824\begin{tabulary}{\linewidth}[t]{|T|T|}
16825\hline
16826
16827\sphinxcode{ENCTYPE\_DES\_CBC\_MD4}
16828&
16829\sphinxcode{0x0002}
16830\\
16831\hline
16832\end{tabulary}
16833\par
16834\sphinxattableend\end{savenotes}
16835
16836
16837\subsubsection{ENCTYPE\_DES\_CBC\_MD5}
16838\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)}
16839
16840\begin{fulllineitems}
16841\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_MD5:ENCTYPE_DES_CBC_MD5}}\pysigline{\sphinxbfcode{ENCTYPE\_DES\_CBC\_MD5}}
16842\end{fulllineitems}
16843
16844
16845
16846\begin{savenotes}\sphinxattablestart
16847\centering
16848\begin{tabulary}{\linewidth}[t]{|T|T|}
16849\hline
16850
16851\sphinxcode{ENCTYPE\_DES\_CBC\_MD5}
16852&
16853\sphinxcode{0x0003}
16854\\
16855\hline
16856\end{tabulary}
16857\par
16858\sphinxattableend\end{savenotes}
16859
16860
16861\subsubsection{ENCTYPE\_DES\_CBC\_RAW}
16862\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)}
16863
16864\begin{fulllineitems}
16865\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_CBC_RAW:ENCTYPE_DES_CBC_RAW}}\pysigline{\sphinxbfcode{ENCTYPE\_DES\_CBC\_RAW}}
16866\end{fulllineitems}
16867
16868
16869
16870\begin{savenotes}\sphinxattablestart
16871\centering
16872\begin{tabulary}{\linewidth}[t]{|T|T|}
16873\hline
16874
16875\sphinxcode{ENCTYPE\_DES\_CBC\_RAW}
16876&
16877\sphinxcode{0x0004}
16878\\
16879\hline
16880\end{tabulary}
16881\par
16882\sphinxattableend\end{savenotes}
16883
16884
16885\subsubsection{ENCTYPE\_DES\_HMAC\_SHA1}
16886\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)}
16887
16888\begin{fulllineitems}
16889\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DES_HMAC_SHA1:ENCTYPE_DES_HMAC_SHA1}}\pysigline{\sphinxbfcode{ENCTYPE\_DES\_HMAC\_SHA1}}
16890\end{fulllineitems}
16891
16892
16893
16894\begin{savenotes}\sphinxattablestart
16895\centering
16896\begin{tabulary}{\linewidth}[t]{|T|T|}
16897\hline
16898
16899\sphinxcode{ENCTYPE\_DES\_HMAC\_SHA1}
16900&
16901\sphinxcode{0x0008}
16902\\
16903\hline
16904\end{tabulary}
16905\par
16906\sphinxattableend\end{savenotes}
16907
16908
16909\subsubsection{ENCTYPE\_DSA\_SHA1\_CMS}
16910\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)}
16911
16912\begin{fulllineitems}
16913\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_DSA_SHA1_CMS:ENCTYPE_DSA_SHA1_CMS}}\pysigline{\sphinxbfcode{ENCTYPE\_DSA\_SHA1\_CMS}}
16914\end{fulllineitems}
16915
16916
16917DSA with SHA1, CMS signature.
16918
16919
16920\begin{savenotes}\sphinxattablestart
16921\centering
16922\begin{tabulary}{\linewidth}[t]{|T|T|}
16923\hline
16924
16925\sphinxcode{ENCTYPE\_DSA\_SHA1\_CMS}
16926&
16927\sphinxcode{0x0009}
16928\\
16929\hline
16930\end{tabulary}
16931\par
16932\sphinxattableend\end{savenotes}
16933
16934
16935\subsubsection{ENCTYPE\_MD5\_RSA\_CMS}
16936\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)}
16937
16938\begin{fulllineitems}
16939\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_MD5_RSA_CMS:ENCTYPE_MD5_RSA_CMS}}\pysigline{\sphinxbfcode{ENCTYPE\_MD5\_RSA\_CMS}}
16940\end{fulllineitems}
16941
16942
16943MD5 with RSA, CMS signature.
16944
16945
16946\begin{savenotes}\sphinxattablestart
16947\centering
16948\begin{tabulary}{\linewidth}[t]{|T|T|}
16949\hline
16950
16951\sphinxcode{ENCTYPE\_MD5\_RSA\_CMS}
16952&
16953\sphinxcode{0x000a}
16954\\
16955\hline
16956\end{tabulary}
16957\par
16958\sphinxattableend\end{savenotes}
16959
16960
16961\subsubsection{ENCTYPE\_NULL}
16962\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)}
16963
16964\begin{fulllineitems}
16965\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_NULL:ENCTYPE_NULL}}\pysigline{\sphinxbfcode{ENCTYPE\_NULL}}
16966\end{fulllineitems}
16967
16968
16969
16970\begin{savenotes}\sphinxattablestart
16971\centering
16972\begin{tabulary}{\linewidth}[t]{|T|T|}
16973\hline
16974
16975\sphinxcode{ENCTYPE\_NULL}
16976&
16977\sphinxcode{0x0000}
16978\\
16979\hline
16980\end{tabulary}
16981\par
16982\sphinxattableend\end{savenotes}
16983
16984
16985\subsubsection{ENCTYPE\_RC2\_CBC\_ENV}
16986\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)}
16987
16988\begin{fulllineitems}
16989\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_RC2_CBC_ENV:ENCTYPE_RC2_CBC_ENV}}\pysigline{\sphinxbfcode{ENCTYPE\_RC2\_CBC\_ENV}}
16990\end{fulllineitems}
16991
16992
16993RC2 cbc mode, CMS enveloped data.
16994
16995
16996\begin{savenotes}\sphinxattablestart
16997\centering
16998\begin{tabulary}{\linewidth}[t]{|T|T|}
16999\hline
17000
17001\sphinxcode{ENCTYPE\_RC2\_CBC\_ENV}
17002&
17003\sphinxcode{0x000c}
17004\\
17005\hline
17006\end{tabulary}
17007\par
17008\sphinxattableend\end{savenotes}
17009
17010
17011\subsubsection{ENCTYPE\_RSA\_ENV}
17012\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)}
17013
17014\begin{fulllineitems}
17015\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ENV:ENCTYPE_RSA_ENV}}\pysigline{\sphinxbfcode{ENCTYPE\_RSA\_ENV}}
17016\end{fulllineitems}
17017
17018
17019RSA encryption, CMS enveloped data.
17020
17021
17022\begin{savenotes}\sphinxattablestart
17023\centering
17024\begin{tabulary}{\linewidth}[t]{|T|T|}
17025\hline
17026
17027\sphinxcode{ENCTYPE\_RSA\_ENV}
17028&
17029\sphinxcode{0x000d}
17030\\
17031\hline
17032\end{tabulary}
17033\par
17034\sphinxattableend\end{savenotes}
17035
17036
17037\subsubsection{ENCTYPE\_RSA\_ES\_OAEP\_ENV}
17038\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)}
17039
17040\begin{fulllineitems}
17041\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_RSA_ES_OAEP_ENV:ENCTYPE_RSA_ES_OAEP_ENV}}\pysigline{\sphinxbfcode{ENCTYPE\_RSA\_ES\_OAEP\_ENV}}
17042\end{fulllineitems}
17043
17044
17045RSA w/OEAP encryption, CMS enveloped data.
17046
17047
17048\begin{savenotes}\sphinxattablestart
17049\centering
17050\begin{tabulary}{\linewidth}[t]{|T|T|}
17051\hline
17052
17053\sphinxcode{ENCTYPE\_RSA\_ES\_OAEP\_ENV}
17054&
17055\sphinxcode{0x000e}
17056\\
17057\hline
17058\end{tabulary}
17059\par
17060\sphinxattableend\end{savenotes}
17061
17062
17063\subsubsection{ENCTYPE\_SHA1\_RSA\_CMS}
17064\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)}
17065
17066\begin{fulllineitems}
17067\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_SHA1_RSA_CMS:ENCTYPE_SHA1_RSA_CMS}}\pysigline{\sphinxbfcode{ENCTYPE\_SHA1\_RSA\_CMS}}
17068\end{fulllineitems}
17069
17070
17071SHA1 with RSA, CMS signature.
17072
17073
17074\begin{savenotes}\sphinxattablestart
17075\centering
17076\begin{tabulary}{\linewidth}[t]{|T|T|}
17077\hline
17078
17079\sphinxcode{ENCTYPE\_SHA1\_RSA\_CMS}
17080&
17081\sphinxcode{0x000b}
17082\\
17083\hline
17084\end{tabulary}
17085\par
17086\sphinxattableend\end{savenotes}
17087
17088
17089\subsubsection{ENCTYPE\_UNKNOWN}
17090\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)}
17091
17092\begin{fulllineitems}
17093\phantomsection\label{\detokenize{appdev/refs/macros/ENCTYPE_UNKNOWN:ENCTYPE_UNKNOWN}}\pysigline{\sphinxbfcode{ENCTYPE\_UNKNOWN}}
17094\end{fulllineitems}
17095
17096
17097
17098\begin{savenotes}\sphinxattablestart
17099\centering
17100\begin{tabulary}{\linewidth}[t]{|T|T|}
17101\hline
17102
17103\sphinxcode{ENCTYPE\_UNKNOWN}
17104&
17105\sphinxcode{0x01ff}
17106\\
17107\hline
17108\end{tabulary}
17109\par
17110\sphinxattableend\end{savenotes}
17111
17112
17113\subsubsection{KDC\_OPT\_ALLOW\_POSTDATE}
17114\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)}
17115
17116\begin{fulllineitems}
17117\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_ALLOW_POSTDATE:KDC_OPT_ALLOW_POSTDATE}}\pysigline{\sphinxbfcode{KDC\_OPT\_ALLOW\_POSTDATE}}
17118\end{fulllineitems}
17119
17120
17121
17122\begin{savenotes}\sphinxattablestart
17123\centering
17124\begin{tabulary}{\linewidth}[t]{|T|T|}
17125\hline
17126
17127\sphinxcode{KDC\_OPT\_ALLOW\_POSTDATE}
17128&
17129\sphinxcode{0x04000000}
17130\\
17131\hline
17132\end{tabulary}
17133\par
17134\sphinxattableend\end{savenotes}
17135
17136
17137\subsubsection{KDC\_OPT\_CANONICALIZE}
17138\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)}
17139
17140\begin{fulllineitems}
17141\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_CANONICALIZE:KDC_OPT_CANONICALIZE}}\pysigline{\sphinxbfcode{KDC\_OPT\_CANONICALIZE}}
17142\end{fulllineitems}
17143
17144
17145
17146\begin{savenotes}\sphinxattablestart
17147\centering
17148\begin{tabulary}{\linewidth}[t]{|T|T|}
17149\hline
17150
17151\sphinxcode{KDC\_OPT\_CANONICALIZE}
17152&
17153\sphinxcode{0x00010000}
17154\\
17155\hline
17156\end{tabulary}
17157\par
17158\sphinxattableend\end{savenotes}
17159
17160
17161\subsubsection{KDC\_OPT\_CNAME\_IN\_ADDL\_TKT}
17162\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)}
17163
17164\begin{fulllineitems}
17165\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}}
17166\end{fulllineitems}
17167
17168
17169
17170\begin{savenotes}\sphinxattablestart
17171\centering
17172\begin{tabulary}{\linewidth}[t]{|T|T|}
17173\hline
17174
17175\sphinxcode{KDC\_OPT\_CNAME\_IN\_ADDL\_TKT}
17176&
17177\sphinxcode{0x00020000}
17178\\
17179\hline
17180\end{tabulary}
17181\par
17182\sphinxattableend\end{savenotes}
17183
17184
17185\subsubsection{KDC\_OPT\_DISABLE\_TRANSITED\_CHECK}
17186\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)}
17187
17188\begin{fulllineitems}
17189\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_DISABLE_TRANSITED_CHECK:KDC_OPT_DISABLE_TRANSITED_CHECK}}\pysigline{\sphinxbfcode{KDC\_OPT\_DISABLE\_TRANSITED\_CHECK}}
17190\end{fulllineitems}
17191
17192
17193
17194\begin{savenotes}\sphinxattablestart
17195\centering
17196\begin{tabulary}{\linewidth}[t]{|T|T|}
17197\hline
17198
17199\sphinxcode{KDC\_OPT\_DISABLE\_TRANSITED\_CHECK}
17200&
17201\sphinxcode{0x00000020}
17202\\
17203\hline
17204\end{tabulary}
17205\par
17206\sphinxattableend\end{savenotes}
17207
17208
17209\subsubsection{KDC\_OPT\_ENC\_TKT\_IN\_SKEY}
17210\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)}
17211
17212\begin{fulllineitems}
17213\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}}
17214\end{fulllineitems}
17215
17216
17217
17218\begin{savenotes}\sphinxattablestart
17219\centering
17220\begin{tabulary}{\linewidth}[t]{|T|T|}
17221\hline
17222
17223\sphinxcode{KDC\_OPT\_ENC\_TKT\_IN\_SKEY}
17224&
17225\sphinxcode{0x00000008}
17226\\
17227\hline
17228\end{tabulary}
17229\par
17230\sphinxattableend\end{savenotes}
17231
17232
17233\subsubsection{KDC\_OPT\_FORWARDABLE}
17234\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)}
17235
17236\begin{fulllineitems}
17237\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDABLE:KDC_OPT_FORWARDABLE}}\pysigline{\sphinxbfcode{KDC\_OPT\_FORWARDABLE}}
17238\end{fulllineitems}
17239
17240
17241
17242\begin{savenotes}\sphinxattablestart
17243\centering
17244\begin{tabulary}{\linewidth}[t]{|T|T|}
17245\hline
17246
17247\sphinxcode{KDC\_OPT\_FORWARDABLE}
17248&
17249\sphinxcode{0x40000000}
17250\\
17251\hline
17252\end{tabulary}
17253\par
17254\sphinxattableend\end{savenotes}
17255
17256
17257\subsubsection{KDC\_OPT\_FORWARDED}
17258\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)}
17259
17260\begin{fulllineitems}
17261\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_FORWARDED:KDC_OPT_FORWARDED}}\pysigline{\sphinxbfcode{KDC\_OPT\_FORWARDED}}
17262\end{fulllineitems}
17263
17264
17265
17266\begin{savenotes}\sphinxattablestart
17267\centering
17268\begin{tabulary}{\linewidth}[t]{|T|T|}
17269\hline
17270
17271\sphinxcode{KDC\_OPT\_FORWARDED}
17272&
17273\sphinxcode{0x20000000}
17274\\
17275\hline
17276\end{tabulary}
17277\par
17278\sphinxattableend\end{savenotes}
17279
17280
17281\subsubsection{KDC\_OPT\_POSTDATED}
17282\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)}
17283
17284\begin{fulllineitems}
17285\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_POSTDATED:KDC_OPT_POSTDATED}}\pysigline{\sphinxbfcode{KDC\_OPT\_POSTDATED}}
17286\end{fulllineitems}
17287
17288
17289
17290\begin{savenotes}\sphinxattablestart
17291\centering
17292\begin{tabulary}{\linewidth}[t]{|T|T|}
17293\hline
17294
17295\sphinxcode{KDC\_OPT\_POSTDATED}
17296&
17297\sphinxcode{0x02000000}
17298\\
17299\hline
17300\end{tabulary}
17301\par
17302\sphinxattableend\end{savenotes}
17303
17304
17305\subsubsection{KDC\_OPT\_PROXIABLE}
17306\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)}
17307
17308\begin{fulllineitems}
17309\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXIABLE:KDC_OPT_PROXIABLE}}\pysigline{\sphinxbfcode{KDC\_OPT\_PROXIABLE}}
17310\end{fulllineitems}
17311
17312
17313
17314\begin{savenotes}\sphinxattablestart
17315\centering
17316\begin{tabulary}{\linewidth}[t]{|T|T|}
17317\hline
17318
17319\sphinxcode{KDC\_OPT\_PROXIABLE}
17320&
17321\sphinxcode{0x10000000}
17322\\
17323\hline
17324\end{tabulary}
17325\par
17326\sphinxattableend\end{savenotes}
17327
17328
17329\subsubsection{KDC\_OPT\_PROXY}
17330\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)}
17331
17332\begin{fulllineitems}
17333\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_PROXY:KDC_OPT_PROXY}}\pysigline{\sphinxbfcode{KDC\_OPT\_PROXY}}
17334\end{fulllineitems}
17335
17336
17337
17338\begin{savenotes}\sphinxattablestart
17339\centering
17340\begin{tabulary}{\linewidth}[t]{|T|T|}
17341\hline
17342
17343\sphinxcode{KDC\_OPT\_PROXY}
17344&
17345\sphinxcode{0x08000000}
17346\\
17347\hline
17348\end{tabulary}
17349\par
17350\sphinxattableend\end{savenotes}
17351
17352
17353\subsubsection{KDC\_OPT\_RENEW}
17354\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)}
17355
17356\begin{fulllineitems}
17357\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEW:KDC_OPT_RENEW}}\pysigline{\sphinxbfcode{KDC\_OPT\_RENEW}}
17358\end{fulllineitems}
17359
17360
17361
17362\begin{savenotes}\sphinxattablestart
17363\centering
17364\begin{tabulary}{\linewidth}[t]{|T|T|}
17365\hline
17366
17367\sphinxcode{KDC\_OPT\_RENEW}
17368&
17369\sphinxcode{0x00000002}
17370\\
17371\hline
17372\end{tabulary}
17373\par
17374\sphinxattableend\end{savenotes}
17375
17376
17377\subsubsection{KDC\_OPT\_RENEWABLE}
17378\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)}
17379
17380\begin{fulllineitems}
17381\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE:KDC_OPT_RENEWABLE}}\pysigline{\sphinxbfcode{KDC\_OPT\_RENEWABLE}}
17382\end{fulllineitems}
17383
17384
17385
17386\begin{savenotes}\sphinxattablestart
17387\centering
17388\begin{tabulary}{\linewidth}[t]{|T|T|}
17389\hline
17390
17391\sphinxcode{KDC\_OPT\_RENEWABLE}
17392&
17393\sphinxcode{0x00800000}
17394\\
17395\hline
17396\end{tabulary}
17397\par
17398\sphinxattableend\end{savenotes}
17399
17400
17401\subsubsection{KDC\_OPT\_RENEWABLE\_OK}
17402\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)}
17403
17404\begin{fulllineitems}
17405\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_RENEWABLE_OK:KDC_OPT_RENEWABLE_OK}}\pysigline{\sphinxbfcode{KDC\_OPT\_RENEWABLE\_OK}}
17406\end{fulllineitems}
17407
17408
17409
17410\begin{savenotes}\sphinxattablestart
17411\centering
17412\begin{tabulary}{\linewidth}[t]{|T|T|}
17413\hline
17414
17415\sphinxcode{KDC\_OPT\_RENEWABLE\_OK}
17416&
17417\sphinxcode{0x00000010}
17418\\
17419\hline
17420\end{tabulary}
17421\par
17422\sphinxattableend\end{savenotes}
17423
17424
17425\subsubsection{KDC\_OPT\_REQUEST\_ANONYMOUS}
17426\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)}
17427
17428\begin{fulllineitems}
17429\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_REQUEST_ANONYMOUS:KDC_OPT_REQUEST_ANONYMOUS}}\pysigline{\sphinxbfcode{KDC\_OPT\_REQUEST\_ANONYMOUS}}
17430\end{fulllineitems}
17431
17432
17433
17434\begin{savenotes}\sphinxattablestart
17435\centering
17436\begin{tabulary}{\linewidth}[t]{|T|T|}
17437\hline
17438
17439\sphinxcode{KDC\_OPT\_REQUEST\_ANONYMOUS}
17440&
17441\sphinxcode{0x00008000}
17442\\
17443\hline
17444\end{tabulary}
17445\par
17446\sphinxattableend\end{savenotes}
17447
17448
17449\subsubsection{KDC\_OPT\_VALIDATE}
17450\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)}
17451
17452\begin{fulllineitems}
17453\phantomsection\label{\detokenize{appdev/refs/macros/KDC_OPT_VALIDATE:KDC_OPT_VALIDATE}}\pysigline{\sphinxbfcode{KDC\_OPT\_VALIDATE}}
17454\end{fulllineitems}
17455
17456
17457
17458\begin{savenotes}\sphinxattablestart
17459\centering
17460\begin{tabulary}{\linewidth}[t]{|T|T|}
17461\hline
17462
17463\sphinxcode{KDC\_OPT\_VALIDATE}
17464&
17465\sphinxcode{0x00000001}
17466\\
17467\hline
17468\end{tabulary}
17469\par
17470\sphinxattableend\end{savenotes}
17471
17472
17473\subsubsection{KDC\_TKT\_COMMON\_MASK}
17474\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)}
17475
17476\begin{fulllineitems}
17477\phantomsection\label{\detokenize{appdev/refs/macros/KDC_TKT_COMMON_MASK:KDC_TKT_COMMON_MASK}}\pysigline{\sphinxbfcode{KDC\_TKT\_COMMON\_MASK}}
17478\end{fulllineitems}
17479
17480
17481
17482\begin{savenotes}\sphinxattablestart
17483\centering
17484\begin{tabulary}{\linewidth}[t]{|T|T|}
17485\hline
17486
17487\sphinxcode{KDC\_TKT\_COMMON\_MASK}
17488&
17489\sphinxcode{0x54800000}
17490\\
17491\hline
17492\end{tabulary}
17493\par
17494\sphinxattableend\end{savenotes}
17495
17496
17497\subsubsection{KRB5\_ALTAUTH\_ATT\_CHALLENGE\_RESPONSE}
17498\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)}
17499
17500\begin{fulllineitems}
17501\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_ALTAUTH_ATT_CHALLENGE_RESPONSE:KRB5_ALTAUTH_ATT_CHALLENGE_RESPONSE}}\pysigline{\sphinxbfcode{KRB5\_ALTAUTH\_ATT\_CHALLENGE\_RESPONSE}}
17502\end{fulllineitems}
17503
17504
17505alternate authentication types
17506
17507
17508\begin{savenotes}\sphinxattablestart
17509\centering
17510\begin{tabulary}{\linewidth}[t]{|T|T|}
17511\hline
17512
17513\sphinxcode{KRB5\_ALTAUTH\_ATT\_CHALLENGE\_RESPONSE}
17514&
17515\sphinxcode{64}
17516\\
17517\hline
17518\end{tabulary}
17519\par
17520\sphinxattableend\end{savenotes}
17521
17522
17523\subsubsection{KRB5\_ANONYMOUS\_PRINCSTR}
17524\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)}
17525
17526\begin{fulllineitems}
17527\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_PRINCSTR:KRB5_ANONYMOUS_PRINCSTR}}\pysigline{\sphinxbfcode{KRB5\_ANONYMOUS\_PRINCSTR}}
17528\end{fulllineitems}
17529
17530
17531Anonymous principal name.
17532
17533
17534\begin{savenotes}\sphinxattablestart
17535\centering
17536\begin{tabulary}{\linewidth}[t]{|T|T|}
17537\hline
17538
17539\sphinxcode{KRB5\_ANONYMOUS\_PRINCSTR}
17540&
17541\sphinxcode{"ANONYMOUS"}
17542\\
17543\hline
17544\end{tabulary}
17545\par
17546\sphinxattableend\end{savenotes}
17547
17548
17549\subsubsection{KRB5\_ANONYMOUS\_REALMSTR}
17550\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)}
17551
17552\begin{fulllineitems}
17553\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR:KRB5_ANONYMOUS_REALMSTR}}\pysigline{\sphinxbfcode{KRB5\_ANONYMOUS\_REALMSTR}}
17554\end{fulllineitems}
17555
17556
17557Anonymous realm.
17558
17559
17560\begin{savenotes}\sphinxattablestart
17561\centering
17562\begin{tabulary}{\linewidth}[t]{|T|T|}
17563\hline
17564
17565\sphinxcode{KRB5\_ANONYMOUS\_REALMSTR}
17566&
17567\sphinxcode{"WELLKNOWN:ANONYMOUS"}
17568\\
17569\hline
17570\end{tabulary}
17571\par
17572\sphinxattableend\end{savenotes}
17573
17574
17575\subsubsection{KRB5\_AP\_REP}
17576\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)}
17577
17578\begin{fulllineitems}
17579\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AP_REP:KRB5_AP_REP}}\pysigline{\sphinxbfcode{KRB5\_AP\_REP}}
17580\end{fulllineitems}
17581
17582
17583Response to mutual AP request.
17584
17585
17586\begin{savenotes}\sphinxattablestart
17587\centering
17588\begin{tabulary}{\linewidth}[t]{|T|T|}
17589\hline
17590
17591\sphinxcode{KRB5\_AP\_REP}
17592&
17593\sphinxcode{((krb5\_msgtype)15)}
17594\\
17595\hline
17596\end{tabulary}
17597\par
17598\sphinxattableend\end{savenotes}
17599
17600
17601\subsubsection{KRB5\_AP\_REQ}
17602\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)}
17603
17604\begin{fulllineitems}
17605\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AP_REQ:KRB5_AP_REQ}}\pysigline{\sphinxbfcode{KRB5\_AP\_REQ}}
17606\end{fulllineitems}
17607
17608
17609Auth req to application server.
17610
17611
17612\begin{savenotes}\sphinxattablestart
17613\centering
17614\begin{tabulary}{\linewidth}[t]{|T|T|}
17615\hline
17616
17617\sphinxcode{KRB5\_AP\_REQ}
17618&
17619\sphinxcode{((krb5\_msgtype)14)}
17620\\
17621\hline
17622\end{tabulary}
17623\par
17624\sphinxattableend\end{savenotes}
17625
17626
17627\subsubsection{KRB5\_AS\_REP}
17628\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)}
17629
17630\begin{fulllineitems}
17631\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AS_REP:KRB5_AS_REP}}\pysigline{\sphinxbfcode{KRB5\_AS\_REP}}
17632\end{fulllineitems}
17633
17634
17635Response to AS request.
17636
17637
17638\begin{savenotes}\sphinxattablestart
17639\centering
17640\begin{tabulary}{\linewidth}[t]{|T|T|}
17641\hline
17642
17643\sphinxcode{KRB5\_AS\_REP}
17644&
17645\sphinxcode{((krb5\_msgtype)11)}
17646\\
17647\hline
17648\end{tabulary}
17649\par
17650\sphinxattableend\end{savenotes}
17651
17652
17653\subsubsection{KRB5\_AS\_REQ}
17654\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)}
17655
17656\begin{fulllineitems}
17657\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AS_REQ:KRB5_AS_REQ}}\pysigline{\sphinxbfcode{KRB5\_AS\_REQ}}
17658\end{fulllineitems}
17659
17660
17661Initial authentication request.
17662
17663
17664\begin{savenotes}\sphinxattablestart
17665\centering
17666\begin{tabulary}{\linewidth}[t]{|T|T|}
17667\hline
17668
17669\sphinxcode{KRB5\_AS\_REQ}
17670&
17671\sphinxcode{((krb5\_msgtype)10)}
17672\\
17673\hline
17674\end{tabulary}
17675\par
17676\sphinxattableend\end{savenotes}
17677
17678
17679\subsubsection{KRB5\_AUTHDATA\_AND\_OR}
17680\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)}
17681
17682\begin{fulllineitems}
17683\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AND_OR:KRB5_AUTHDATA_AND_OR}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_AND\_OR}}
17684\end{fulllineitems}
17685
17686
17687
17688\begin{savenotes}\sphinxattablestart
17689\centering
17690\begin{tabulary}{\linewidth}[t]{|T|T|}
17691\hline
17692
17693\sphinxcode{KRB5\_AUTHDATA\_AND\_OR}
17694&
17695\sphinxcode{5}
17696\\
17697\hline
17698\end{tabulary}
17699\par
17700\sphinxattableend\end{savenotes}
17701
17702
17703\subsubsection{KRB5\_AUTHDATA\_AUTH\_INDICATOR}
17704\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)}
17705
17706\begin{fulllineitems}
17707\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_AUTH_INDICATOR:KRB5_AUTHDATA_AUTH_INDICATOR}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_AUTH\_INDICATOR}}
17708\end{fulllineitems}
17709
17710
17711
17712\begin{savenotes}\sphinxattablestart
17713\centering
17714\begin{tabulary}{\linewidth}[t]{|T|T|}
17715\hline
17716
17717\sphinxcode{KRB5\_AUTHDATA\_AUTH\_INDICATOR}
17718&
17719\sphinxcode{97}
17720\\
17721\hline
17722\end{tabulary}
17723\par
17724\sphinxattableend\end{savenotes}
17725
17726
17727\subsubsection{KRB5\_AUTHDATA\_CAMMAC}
17728\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)}
17729
17730\begin{fulllineitems}
17731\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_CAMMAC:KRB5_AUTHDATA_CAMMAC}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_CAMMAC}}
17732\end{fulllineitems}
17733
17734
17735
17736\begin{savenotes}\sphinxattablestart
17737\centering
17738\begin{tabulary}{\linewidth}[t]{|T|T|}
17739\hline
17740
17741\sphinxcode{KRB5\_AUTHDATA\_CAMMAC}
17742&
17743\sphinxcode{96}
17744\\
17745\hline
17746\end{tabulary}
17747\par
17748\sphinxattableend\end{savenotes}
17749
17750
17751\subsubsection{KRB5\_AUTHDATA\_ETYPE\_NEGOTIATION}
17752\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)}
17753
17754\begin{fulllineitems}
17755\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_ETYPE_NEGOTIATION:KRB5_AUTHDATA_ETYPE_NEGOTIATION}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_ETYPE\_NEGOTIATION}}
17756\end{fulllineitems}
17757
17758
17759RFC 4537.
17760
17761
17762\begin{savenotes}\sphinxattablestart
17763\centering
17764\begin{tabulary}{\linewidth}[t]{|T|T|}
17765\hline
17766
17767\sphinxcode{KRB5\_AUTHDATA\_ETYPE\_NEGOTIATION}
17768&
17769\sphinxcode{129}
17770\\
17771\hline
17772\end{tabulary}
17773\par
17774\sphinxattableend\end{savenotes}
17775
17776
17777\subsubsection{KRB5\_AUTHDATA\_FX\_ARMOR}
17778\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)}
17779
17780\begin{fulllineitems}
17781\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_FX_ARMOR:KRB5_AUTHDATA_FX_ARMOR}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_FX\_ARMOR}}
17782\end{fulllineitems}
17783
17784
17785
17786\begin{savenotes}\sphinxattablestart
17787\centering
17788\begin{tabulary}{\linewidth}[t]{|T|T|}
17789\hline
17790
17791\sphinxcode{KRB5\_AUTHDATA\_FX\_ARMOR}
17792&
17793\sphinxcode{71}
17794\\
17795\hline
17796\end{tabulary}
17797\par
17798\sphinxattableend\end{savenotes}
17799
17800
17801\subsubsection{KRB5\_AUTHDATA\_IF\_RELEVANT}
17802\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)}
17803
17804\begin{fulllineitems}
17805\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_IF_RELEVANT:KRB5_AUTHDATA_IF_RELEVANT}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_IF\_RELEVANT}}
17806\end{fulllineitems}
17807
17808
17809
17810\begin{savenotes}\sphinxattablestart
17811\centering
17812\begin{tabulary}{\linewidth}[t]{|T|T|}
17813\hline
17814
17815\sphinxcode{KRB5\_AUTHDATA\_IF\_RELEVANT}
17816&
17817\sphinxcode{1}
17818\\
17819\hline
17820\end{tabulary}
17821\par
17822\sphinxattableend\end{savenotes}
17823
17824
17825\subsubsection{KRB5\_AUTHDATA\_INITIAL\_VERIFIED\_CAS}
17826\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)}
17827
17828\begin{fulllineitems}
17829\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_INITIAL_VERIFIED_CAS:KRB5_AUTHDATA_INITIAL_VERIFIED_CAS}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_INITIAL\_VERIFIED\_CAS}}
17830\end{fulllineitems}
17831
17832
17833
17834\begin{savenotes}\sphinxattablestart
17835\centering
17836\begin{tabulary}{\linewidth}[t]{|T|T|}
17837\hline
17838
17839\sphinxcode{KRB5\_AUTHDATA\_INITIAL\_VERIFIED\_CAS}
17840&
17841\sphinxcode{9}
17842\\
17843\hline
17844\end{tabulary}
17845\par
17846\sphinxattableend\end{savenotes}
17847
17848
17849\subsubsection{KRB5\_AUTHDATA\_KDC\_ISSUED}
17850\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)}
17851
17852\begin{fulllineitems}
17853\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_KDC_ISSUED:KRB5_AUTHDATA_KDC_ISSUED}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_KDC\_ISSUED}}
17854\end{fulllineitems}
17855
17856
17857
17858\begin{savenotes}\sphinxattablestart
17859\centering
17860\begin{tabulary}{\linewidth}[t]{|T|T|}
17861\hline
17862
17863\sphinxcode{KRB5\_AUTHDATA\_KDC\_ISSUED}
17864&
17865\sphinxcode{4}
17866\\
17867\hline
17868\end{tabulary}
17869\par
17870\sphinxattableend\end{savenotes}
17871
17872
17873\subsubsection{KRB5\_AUTHDATA\_MANDATORY\_FOR\_KDC}
17874\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)}
17875
17876\begin{fulllineitems}
17877\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_MANDATORY_FOR_KDC:KRB5_AUTHDATA_MANDATORY_FOR_KDC}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_MANDATORY\_FOR\_KDC}}
17878\end{fulllineitems}
17879
17880
17881
17882\begin{savenotes}\sphinxattablestart
17883\centering
17884\begin{tabulary}{\linewidth}[t]{|T|T|}
17885\hline
17886
17887\sphinxcode{KRB5\_AUTHDATA\_MANDATORY\_FOR\_KDC}
17888&
17889\sphinxcode{8}
17890\\
17891\hline
17892\end{tabulary}
17893\par
17894\sphinxattableend\end{savenotes}
17895
17896
17897\subsubsection{KRB5\_AUTHDATA\_OSF\_DCE}
17898\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)}
17899
17900\begin{fulllineitems}
17901\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_OSF_DCE:KRB5_AUTHDATA_OSF_DCE}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_OSF\_DCE}}
17902\end{fulllineitems}
17903
17904
17905
17906\begin{savenotes}\sphinxattablestart
17907\centering
17908\begin{tabulary}{\linewidth}[t]{|T|T|}
17909\hline
17910
17911\sphinxcode{KRB5\_AUTHDATA\_OSF\_DCE}
17912&
17913\sphinxcode{64}
17914\\
17915\hline
17916\end{tabulary}
17917\par
17918\sphinxattableend\end{savenotes}
17919
17920
17921\subsubsection{KRB5\_AUTHDATA\_SESAME}
17922\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)}
17923
17924\begin{fulllineitems}
17925\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SESAME:KRB5_AUTHDATA_SESAME}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_SESAME}}
17926\end{fulllineitems}
17927
17928
17929
17930\begin{savenotes}\sphinxattablestart
17931\centering
17932\begin{tabulary}{\linewidth}[t]{|T|T|}
17933\hline
17934
17935\sphinxcode{KRB5\_AUTHDATA\_SESAME}
17936&
17937\sphinxcode{65}
17938\\
17939\hline
17940\end{tabulary}
17941\par
17942\sphinxattableend\end{savenotes}
17943
17944
17945\subsubsection{KRB5\_AUTHDATA\_SIGNTICKET}
17946\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)}
17947
17948\begin{fulllineitems}
17949\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_SIGNTICKET:KRB5_AUTHDATA_SIGNTICKET}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_SIGNTICKET}}
17950\end{fulllineitems}
17951
17952
17953formerly 142 in krb5 1.8
17954
17955
17956\begin{savenotes}\sphinxattablestart
17957\centering
17958\begin{tabulary}{\linewidth}[t]{|T|T|}
17959\hline
17960
17961\sphinxcode{KRB5\_AUTHDATA\_SIGNTICKET}
17962&
17963\sphinxcode{512}
17964\\
17965\hline
17966\end{tabulary}
17967\par
17968\sphinxattableend\end{savenotes}
17969
17970
17971\subsubsection{KRB5\_AUTHDATA\_WIN2K\_PAC}
17972\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)}
17973
17974\begin{fulllineitems}
17975\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTHDATA_WIN2K_PAC:KRB5_AUTHDATA_WIN2K_PAC}}\pysigline{\sphinxbfcode{KRB5\_AUTHDATA\_WIN2K\_PAC}}
17976\end{fulllineitems}
17977
17978
17979
17980\begin{savenotes}\sphinxattablestart
17981\centering
17982\begin{tabulary}{\linewidth}[t]{|T|T|}
17983\hline
17984
17985\sphinxcode{KRB5\_AUTHDATA\_WIN2K\_PAC}
17986&
17987\sphinxcode{128}
17988\\
17989\hline
17990\end{tabulary}
17991\par
17992\sphinxattableend\end{savenotes}
17993
17994
17995\subsubsection{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}
17996\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)}
17997
17998\begin{fulllineitems}
17999\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE:KRB5_AUTH_CONTEXT_DO_SEQUENCE}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}}
18000\end{fulllineitems}
18001
18002
18003Prevent replays with sequence numbers.
18004
18005
18006\begin{savenotes}\sphinxattablestart
18007\centering
18008\begin{tabulary}{\linewidth}[t]{|T|T|}
18009\hline
18010
18011\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_SEQUENCE}
18012&
18013\sphinxcode{0x00000004}
18014\\
18015\hline
18016\end{tabulary}
18017\par
18018\sphinxattableend\end{savenotes}
18019
18020
18021\subsubsection{KRB5\_AUTH\_CONTEXT\_DO\_TIME}
18022\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)}
18023
18024\begin{fulllineitems}
18025\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME:KRB5_AUTH_CONTEXT_DO_TIME}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}}
18026\end{fulllineitems}
18027
18028
18029Prevent replays with timestamps and replay cache.
18030
18031
18032\begin{savenotes}\sphinxattablestart
18033\centering
18034\begin{tabulary}{\linewidth}[t]{|T|T|}
18035\hline
18036
18037\sphinxcode{KRB5\_AUTH\_CONTEXT\_DO\_TIME}
18038&
18039\sphinxcode{0x00000001}
18040\\
18041\hline
18042\end{tabulary}
18043\par
18044\sphinxattableend\end{savenotes}
18045
18046
18047\subsubsection{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_ADDR}
18048\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)}
18049
18050\begin{fulllineitems}
18051\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}}
18052\end{fulllineitems}
18053
18054
18055Generate the local network address.
18056
18057
18058\begin{savenotes}\sphinxattablestart
18059\centering
18060\begin{tabulary}{\linewidth}[t]{|T|T|}
18061\hline
18062
18063\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_ADDR}
18064&
18065\sphinxcode{0x00000001}
18066\\
18067\hline
18068\end{tabulary}
18069\par
18070\sphinxattableend\end{savenotes}
18071
18072
18073\subsubsection{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_FULL\_ADDR}
18074\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)}
18075
18076\begin{fulllineitems}
18077\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}}
18078\end{fulllineitems}
18079
18080
18081Generate the local network address and the local port.
18082
18083
18084\begin{savenotes}\sphinxattablestart
18085\centering
18086\begin{tabulary}{\linewidth}[t]{|T|T|}
18087\hline
18088
18089\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_LOCAL\_FULL\_ADDR}
18090&
18091\sphinxcode{0x00000004}
18092\\
18093\hline
18094\end{tabulary}
18095\par
18096\sphinxattableend\end{savenotes}
18097
18098
18099\subsubsection{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_ADDR}
18100\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)}
18101
18102\begin{fulllineitems}
18103\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}}
18104\end{fulllineitems}
18105
18106
18107Generate the remote network address.
18108
18109
18110\begin{savenotes}\sphinxattablestart
18111\centering
18112\begin{tabulary}{\linewidth}[t]{|T|T|}
18113\hline
18114
18115\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_ADDR}
18116&
18117\sphinxcode{0x00000002}
18118\\
18119\hline
18120\end{tabulary}
18121\par
18122\sphinxattableend\end{savenotes}
18123
18124
18125\subsubsection{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_FULL\_ADDR}
18126\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)}
18127
18128\begin{fulllineitems}
18129\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}}
18130\end{fulllineitems}
18131
18132
18133Generate the remote network address and the remote port.
18134
18135
18136\begin{savenotes}\sphinxattablestart
18137\centering
18138\begin{tabulary}{\linewidth}[t]{|T|T|}
18139\hline
18140
18141\sphinxcode{KRB5\_AUTH\_CONTEXT\_GENERATE\_REMOTE\_FULL\_ADDR}
18142&
18143\sphinxcode{0x00000008}
18144\\
18145\hline
18146\end{tabulary}
18147\par
18148\sphinxattableend\end{savenotes}
18149
18150
18151\subsubsection{KRB5\_AUTH\_CONTEXT\_PERMIT\_ALL}
18152\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)}
18153
18154\begin{fulllineitems}
18155\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_PERMIT_ALL:KRB5_AUTH_CONTEXT_PERMIT_ALL}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_PERMIT\_ALL}}
18156\end{fulllineitems}
18157
18158
18159
18160\begin{savenotes}\sphinxattablestart
18161\centering
18162\begin{tabulary}{\linewidth}[t]{|T|T|}
18163\hline
18164
18165\sphinxcode{KRB5\_AUTH\_CONTEXT\_PERMIT\_ALL}
18166&
18167\sphinxcode{0x00000010}
18168\\
18169\hline
18170\end{tabulary}
18171\par
18172\sphinxattableend\end{savenotes}
18173
18174
18175\subsubsection{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}
18176\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)}
18177
18178\begin{fulllineitems}
18179\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE:KRB5_AUTH_CONTEXT_RET_SEQUENCE}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}}
18180\end{fulllineitems}
18181
18182
18183Save sequence numbers for application.
18184
18185
18186\begin{savenotes}\sphinxattablestart
18187\centering
18188\begin{tabulary}{\linewidth}[t]{|T|T|}
18189\hline
18190
18191\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_SEQUENCE}
18192&
18193\sphinxcode{0x00000008}
18194\\
18195\hline
18196\end{tabulary}
18197\par
18198\sphinxattableend\end{savenotes}
18199
18200
18201\subsubsection{KRB5\_AUTH\_CONTEXT\_RET\_TIME}
18202\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)}
18203
18204\begin{fulllineitems}
18205\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME:KRB5_AUTH_CONTEXT_RET_TIME}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}}
18206\end{fulllineitems}
18207
18208
18209Save timestamps for application.
18210
18211
18212\begin{savenotes}\sphinxattablestart
18213\centering
18214\begin{tabulary}{\linewidth}[t]{|T|T|}
18215\hline
18216
18217\sphinxcode{KRB5\_AUTH\_CONTEXT\_RET\_TIME}
18218&
18219\sphinxcode{0x00000002}
18220\\
18221\hline
18222\end{tabulary}
18223\par
18224\sphinxattableend\end{savenotes}
18225
18226
18227\subsubsection{KRB5\_AUTH\_CONTEXT\_USE\_SUBKEY}
18228\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)}
18229
18230\begin{fulllineitems}
18231\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_AUTH_CONTEXT_USE_SUBKEY:KRB5_AUTH_CONTEXT_USE_SUBKEY}}\pysigline{\sphinxbfcode{KRB5\_AUTH\_CONTEXT\_USE\_SUBKEY}}
18232\end{fulllineitems}
18233
18234
18235
18236\begin{savenotes}\sphinxattablestart
18237\centering
18238\begin{tabulary}{\linewidth}[t]{|T|T|}
18239\hline
18240
18241\sphinxcode{KRB5\_AUTH\_CONTEXT\_USE\_SUBKEY}
18242&
18243\sphinxcode{0x00000020}
18244\\
18245\hline
18246\end{tabulary}
18247\par
18248\sphinxattableend\end{savenotes}
18249
18250
18251\subsubsection{KRB5\_CRED}
18252\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)}
18253
18254\begin{fulllineitems}
18255\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRED:KRB5_CRED}}\pysigline{\sphinxbfcode{KRB5\_CRED}}
18256\end{fulllineitems}
18257
18258
18259Cred forwarding message.
18260
18261
18262\begin{savenotes}\sphinxattablestart
18263\centering
18264\begin{tabulary}{\linewidth}[t]{|T|T|}
18265\hline
18266
18267\sphinxcode{KRB5\_CRED}
18268&
18269\sphinxcode{((krb5\_msgtype)22)}
18270\\
18271\hline
18272\end{tabulary}
18273\par
18274\sphinxattableend\end{savenotes}
18275
18276
18277\subsubsection{KRB5\_CRYPTO\_TYPE\_CHECKSUM}
18278\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)}
18279
18280\begin{fulllineitems}
18281\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM:KRB5_CRYPTO_TYPE_CHECKSUM}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_CHECKSUM}}
18282\end{fulllineitems}
18283
18284
18285{[}out{]} checksum for MIC
18286
18287
18288\begin{savenotes}\sphinxattablestart
18289\centering
18290\begin{tabulary}{\linewidth}[t]{|T|T|}
18291\hline
18292
18293\sphinxcode{KRB5\_CRYPTO\_TYPE\_CHECKSUM}
18294&
18295\sphinxcode{6}
18296\\
18297\hline
18298\end{tabulary}
18299\par
18300\sphinxattableend\end{savenotes}
18301
18302
18303\subsubsection{KRB5\_CRYPTO\_TYPE\_DATA}
18304\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)}
18305
18306\begin{fulllineitems}
18307\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA:KRB5_CRYPTO_TYPE_DATA}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_DATA}}
18308\end{fulllineitems}
18309
18310
18311{[}in, out{]} plaintext
18312
18313
18314\begin{savenotes}\sphinxattablestart
18315\centering
18316\begin{tabulary}{\linewidth}[t]{|T|T|}
18317\hline
18318
18319\sphinxcode{KRB5\_CRYPTO\_TYPE\_DATA}
18320&
18321\sphinxcode{2}
18322\\
18323\hline
18324\end{tabulary}
18325\par
18326\sphinxattableend\end{savenotes}
18327
18328
18329\subsubsection{KRB5\_CRYPTO\_TYPE\_EMPTY}
18330\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)}
18331
18332\begin{fulllineitems}
18333\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_EMPTY:KRB5_CRYPTO_TYPE_EMPTY}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_EMPTY}}
18334\end{fulllineitems}
18335
18336
18337{[}in{]} ignored
18338
18339
18340\begin{savenotes}\sphinxattablestart
18341\centering
18342\begin{tabulary}{\linewidth}[t]{|T|T|}
18343\hline
18344
18345\sphinxcode{KRB5\_CRYPTO\_TYPE\_EMPTY}
18346&
18347\sphinxcode{0}
18348\\
18349\hline
18350\end{tabulary}
18351\par
18352\sphinxattableend\end{savenotes}
18353
18354
18355\subsubsection{KRB5\_CRYPTO\_TYPE\_HEADER}
18356\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)}
18357
18358\begin{fulllineitems}
18359\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_HEADER:KRB5_CRYPTO_TYPE_HEADER}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_HEADER}}
18360\end{fulllineitems}
18361
18362
18363{[}out{]} header
18364
18365
18366\begin{savenotes}\sphinxattablestart
18367\centering
18368\begin{tabulary}{\linewidth}[t]{|T|T|}
18369\hline
18370
18371\sphinxcode{KRB5\_CRYPTO\_TYPE\_HEADER}
18372&
18373\sphinxcode{1}
18374\\
18375\hline
18376\end{tabulary}
18377\par
18378\sphinxattableend\end{savenotes}
18379
18380
18381\subsubsection{KRB5\_CRYPTO\_TYPE\_PADDING}
18382\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)}
18383
18384\begin{fulllineitems}
18385\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_PADDING:KRB5_CRYPTO_TYPE_PADDING}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_PADDING}}
18386\end{fulllineitems}
18387
18388
18389{[}out{]} padding
18390
18391
18392\begin{savenotes}\sphinxattablestart
18393\centering
18394\begin{tabulary}{\linewidth}[t]{|T|T|}
18395\hline
18396
18397\sphinxcode{KRB5\_CRYPTO\_TYPE\_PADDING}
18398&
18399\sphinxcode{4}
18400\\
18401\hline
18402\end{tabulary}
18403\par
18404\sphinxattableend\end{savenotes}
18405
18406
18407\subsubsection{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}
18408\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)}
18409
18410\begin{fulllineitems}
18411\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY:KRB5_CRYPTO_TYPE_SIGN_ONLY}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}}
18412\end{fulllineitems}
18413
18414
18415{[}in{]} associated data
18416
18417
18418\begin{savenotes}\sphinxattablestart
18419\centering
18420\begin{tabulary}{\linewidth}[t]{|T|T|}
18421\hline
18422
18423\sphinxcode{KRB5\_CRYPTO\_TYPE\_SIGN\_ONLY}
18424&
18425\sphinxcode{3}
18426\\
18427\hline
18428\end{tabulary}
18429\par
18430\sphinxattableend\end{savenotes}
18431
18432
18433\subsubsection{KRB5\_CRYPTO\_TYPE\_STREAM}
18434\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)}
18435
18436\begin{fulllineitems}
18437\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_STREAM:KRB5_CRYPTO_TYPE_STREAM}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_STREAM}}
18438\end{fulllineitems}
18439
18440
18441{[}in{]} entire message without decomposing the structure into header, data and trailer buffers
18442
18443
18444\begin{savenotes}\sphinxattablestart
18445\centering
18446\begin{tabulary}{\linewidth}[t]{|T|T|}
18447\hline
18448
18449\sphinxcode{KRB5\_CRYPTO\_TYPE\_STREAM}
18450&
18451\sphinxcode{7}
18452\\
18453\hline
18454\end{tabulary}
18455\par
18456\sphinxattableend\end{savenotes}
18457
18458
18459\subsubsection{KRB5\_CRYPTO\_TYPE\_TRAILER}
18460\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)}
18461
18462\begin{fulllineitems}
18463\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CRYPTO_TYPE_TRAILER:KRB5_CRYPTO_TYPE_TRAILER}}\pysigline{\sphinxbfcode{KRB5\_CRYPTO\_TYPE\_TRAILER}}
18464\end{fulllineitems}
18465
18466
18467{[}out{]} checksum for encrypt
18468
18469
18470\begin{savenotes}\sphinxattablestart
18471\centering
18472\begin{tabulary}{\linewidth}[t]{|T|T|}
18473\hline
18474
18475\sphinxcode{KRB5\_CRYPTO\_TYPE\_TRAILER}
18476&
18477\sphinxcode{5}
18478\\
18479\hline
18480\end{tabulary}
18481\par
18482\sphinxattableend\end{savenotes}
18483
18484
18485\subsubsection{KRB5\_CYBERSAFE\_SECUREID}
18486\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)}
18487
18488\begin{fulllineitems}
18489\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_CYBERSAFE_SECUREID:KRB5_CYBERSAFE_SECUREID}}\pysigline{\sphinxbfcode{KRB5\_CYBERSAFE\_SECUREID}}
18490\end{fulllineitems}
18491
18492
18493Cybersafe.
18494
18495RFC 4120
18496
18497
18498\begin{savenotes}\sphinxattablestart
18499\centering
18500\begin{tabulary}{\linewidth}[t]{|T|T|}
18501\hline
18502
18503\sphinxcode{KRB5\_CYBERSAFE\_SECUREID}
18504&
18505\sphinxcode{9}
18506\\
18507\hline
18508\end{tabulary}
18509\par
18510\sphinxattableend\end{savenotes}
18511
18512
18513\subsubsection{KRB5\_DOMAIN\_X500\_COMPRESS}
18514\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)}
18515
18516\begin{fulllineitems}
18517\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_DOMAIN_X500_COMPRESS:KRB5_DOMAIN_X500_COMPRESS}}\pysigline{\sphinxbfcode{KRB5\_DOMAIN\_X500\_COMPRESS}}
18518\end{fulllineitems}
18519
18520
18521Transited encoding types.
18522
18523
18524\begin{savenotes}\sphinxattablestart
18525\centering
18526\begin{tabulary}{\linewidth}[t]{|T|T|}
18527\hline
18528
18529\sphinxcode{KRB5\_DOMAIN\_X500\_COMPRESS}
18530&
18531\sphinxcode{1}
18532\\
18533\hline
18534\end{tabulary}
18535\par
18536\sphinxattableend\end{savenotes}
18537
18538
18539\subsubsection{KRB5\_ENCPADATA\_REQ\_ENC\_PA\_REP}
18540\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)}
18541
18542\begin{fulllineitems}
18543\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}}
18544\end{fulllineitems}
18545
18546
18547RFC 6806.
18548
18549
18550\begin{savenotes}\sphinxattablestart
18551\centering
18552\begin{tabulary}{\linewidth}[t]{|T|T|}
18553\hline
18554
18555\sphinxcode{KRB5\_ENCPADATA\_REQ\_ENC\_PA\_REP}
18556&
18557\sphinxcode{149}
18558\\
18559\hline
18560\end{tabulary}
18561\par
18562\sphinxattableend\end{savenotes}
18563
18564
18565\subsubsection{KRB5\_ERROR}
18566\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)}
18567
18568\begin{fulllineitems}
18569\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_ERROR:KRB5_ERROR}}\pysigline{\sphinxbfcode{KRB5\_ERROR}}
18570\end{fulllineitems}
18571
18572
18573Error response.
18574
18575
18576\begin{savenotes}\sphinxattablestart
18577\centering
18578\begin{tabulary}{\linewidth}[t]{|T|T|}
18579\hline
18580
18581\sphinxcode{KRB5\_ERROR}
18582&
18583\sphinxcode{((krb5\_msgtype)30)}
18584\\
18585\hline
18586\end{tabulary}
18587\par
18588\sphinxattableend\end{savenotes}
18589
18590
18591\subsubsection{KRB5\_FAST\_REQUIRED}
18592\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)}
18593
18594\begin{fulllineitems}
18595\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_FAST_REQUIRED:KRB5_FAST_REQUIRED}}\pysigline{\sphinxbfcode{KRB5\_FAST\_REQUIRED}}
18596\end{fulllineitems}
18597
18598
18599Require KDC to support FAST.
18600
18601
18602\begin{savenotes}\sphinxattablestart
18603\centering
18604\begin{tabulary}{\linewidth}[t]{|T|T|}
18605\hline
18606
18607\sphinxcode{KRB5\_FAST\_REQUIRED}
18608&
18609\sphinxcode{0x0001}
18610\\
18611\hline
18612\end{tabulary}
18613\par
18614\sphinxattableend\end{savenotes}
18615
18616
18617\subsubsection{KRB5\_GC\_CACHED}
18618\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)}
18619
18620\begin{fulllineitems}
18621\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_CACHED:KRB5_GC_CACHED}}\pysigline{\sphinxbfcode{KRB5\_GC\_CACHED}}
18622\end{fulllineitems}
18623
18624
18625Want cached ticket only.
18626
18627
18628\begin{savenotes}\sphinxattablestart
18629\centering
18630\begin{tabulary}{\linewidth}[t]{|T|T|}
18631\hline
18632
18633\sphinxcode{KRB5\_GC\_CACHED}
18634&
18635\sphinxcode{2}
18636\\
18637\hline
18638\end{tabulary}
18639\par
18640\sphinxattableend\end{savenotes}
18641
18642
18643\subsubsection{KRB5\_GC\_CANONICALIZE}
18644\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)}
18645
18646\begin{fulllineitems}
18647\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_CANONICALIZE:KRB5_GC_CANONICALIZE}}\pysigline{\sphinxbfcode{KRB5\_GC\_CANONICALIZE}}
18648\end{fulllineitems}
18649
18650
18651Set canonicalize KDC option.
18652
18653
18654\begin{savenotes}\sphinxattablestart
18655\centering
18656\begin{tabulary}{\linewidth}[t]{|T|T|}
18657\hline
18658
18659\sphinxcode{KRB5\_GC\_CANONICALIZE}
18660&
18661\sphinxcode{4}
18662\\
18663\hline
18664\end{tabulary}
18665\par
18666\sphinxattableend\end{savenotes}
18667
18668
18669\subsubsection{KRB5\_GC\_CONSTRAINED\_DELEGATION}
18670\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)}
18671
18672\begin{fulllineitems}
18673\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_CONSTRAINED_DELEGATION:KRB5_GC_CONSTRAINED_DELEGATION}}\pysigline{\sphinxbfcode{KRB5\_GC\_CONSTRAINED\_DELEGATION}}
18674\end{fulllineitems}
18675
18676
18677Constrained delegation.
18678
18679
18680\begin{savenotes}\sphinxattablestart
18681\centering
18682\begin{tabulary}{\linewidth}[t]{|T|T|}
18683\hline
18684
18685\sphinxcode{KRB5\_GC\_CONSTRAINED\_DELEGATION}
18686&
18687\sphinxcode{64}
18688\\
18689\hline
18690\end{tabulary}
18691\par
18692\sphinxattableend\end{savenotes}
18693
18694
18695\subsubsection{KRB5\_GC\_FORWARDABLE}
18696\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)}
18697
18698\begin{fulllineitems}
18699\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_FORWARDABLE:KRB5_GC_FORWARDABLE}}\pysigline{\sphinxbfcode{KRB5\_GC\_FORWARDABLE}}
18700\end{fulllineitems}
18701
18702
18703Acquire forwardable tickets.
18704
18705
18706\begin{savenotes}\sphinxattablestart
18707\centering
18708\begin{tabulary}{\linewidth}[t]{|T|T|}
18709\hline
18710
18711\sphinxcode{KRB5\_GC\_FORWARDABLE}
18712&
18713\sphinxcode{16}
18714\\
18715\hline
18716\end{tabulary}
18717\par
18718\sphinxattableend\end{savenotes}
18719
18720
18721\subsubsection{KRB5\_GC\_NO\_STORE}
18722\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)}
18723
18724\begin{fulllineitems}
18725\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_STORE:KRB5_GC_NO_STORE}}\pysigline{\sphinxbfcode{KRB5\_GC\_NO\_STORE}}
18726\end{fulllineitems}
18727
18728
18729Do not store in credential cache.
18730
18731
18732\begin{savenotes}\sphinxattablestart
18733\centering
18734\begin{tabulary}{\linewidth}[t]{|T|T|}
18735\hline
18736
18737\sphinxcode{KRB5\_GC\_NO\_STORE}
18738&
18739\sphinxcode{8}
18740\\
18741\hline
18742\end{tabulary}
18743\par
18744\sphinxattableend\end{savenotes}
18745
18746
18747\subsubsection{KRB5\_GC\_NO\_TRANSIT\_CHECK}
18748\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)}
18749
18750\begin{fulllineitems}
18751\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_NO_TRANSIT_CHECK:KRB5_GC_NO_TRANSIT_CHECK}}\pysigline{\sphinxbfcode{KRB5\_GC\_NO\_TRANSIT\_CHECK}}
18752\end{fulllineitems}
18753
18754
18755Disable transited check.
18756
18757
18758\begin{savenotes}\sphinxattablestart
18759\centering
18760\begin{tabulary}{\linewidth}[t]{|T|T|}
18761\hline
18762
18763\sphinxcode{KRB5\_GC\_NO\_TRANSIT\_CHECK}
18764&
18765\sphinxcode{32}
18766\\
18767\hline
18768\end{tabulary}
18769\par
18770\sphinxattableend\end{savenotes}
18771
18772
18773\subsubsection{KRB5\_GC\_USER\_USER}
18774\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)}
18775
18776\begin{fulllineitems}
18777\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_GC_USER_USER:KRB5_GC_USER_USER}}\pysigline{\sphinxbfcode{KRB5\_GC\_USER\_USER}}
18778\end{fulllineitems}
18779
18780
18781Want user-user ticket.
18782
18783
18784\begin{savenotes}\sphinxattablestart
18785\centering
18786\begin{tabulary}{\linewidth}[t]{|T|T|}
18787\hline
18788
18789\sphinxcode{KRB5\_GC\_USER\_USER}
18790&
18791\sphinxcode{1}
18792\\
18793\hline
18794\end{tabulary}
18795\par
18796\sphinxattableend\end{savenotes}
18797
18798
18799\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_ADDRESS\_LIST}
18800\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)}
18801
18802\begin{fulllineitems}
18803\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}}
18804\end{fulllineitems}
18805
18806
18807
18808\begin{savenotes}\sphinxattablestart
18809\centering
18810\begin{tabulary}{\linewidth}[t]{|T|T|}
18811\hline
18812
18813\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_ADDRESS\_LIST}
18814&
18815\sphinxcode{0x0020}
18816\\
18817\hline
18818\end{tabulary}
18819\par
18820\sphinxattableend\end{savenotes}
18821
18822
18823\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_ANONYMOUS}
18824\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)}
18825
18826\begin{fulllineitems}
18827\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}}
18828\end{fulllineitems}
18829
18830
18831
18832\begin{savenotes}\sphinxattablestart
18833\centering
18834\begin{tabulary}{\linewidth}[t]{|T|T|}
18835\hline
18836
18837\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_ANONYMOUS}
18838&
18839\sphinxcode{0x0400}
18840\\
18841\hline
18842\end{tabulary}
18843\par
18844\sphinxattableend\end{savenotes}
18845
18846
18847\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_CANONICALIZE}
18848\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)}
18849
18850\begin{fulllineitems}
18851\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}}
18852\end{fulllineitems}
18853
18854
18855
18856\begin{savenotes}\sphinxattablestart
18857\centering
18858\begin{tabulary}{\linewidth}[t]{|T|T|}
18859\hline
18860
18861\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_CANONICALIZE}
18862&
18863\sphinxcode{0x0200}
18864\\
18865\hline
18866\end{tabulary}
18867\par
18868\sphinxattableend\end{savenotes}
18869
18870
18871\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_CHG\_PWD\_PRMPT}
18872\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)}
18873
18874\begin{fulllineitems}
18875\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}}
18876\end{fulllineitems}
18877
18878
18879
18880\begin{savenotes}\sphinxattablestart
18881\centering
18882\begin{tabulary}{\linewidth}[t]{|T|T|}
18883\hline
18884
18885\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_CHG\_PWD\_PRMPT}
18886&
18887\sphinxcode{0x0100}
18888\\
18889\hline
18890\end{tabulary}
18891\par
18892\sphinxattableend\end{savenotes}
18893
18894
18895\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_ETYPE\_LIST}
18896\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)}
18897
18898\begin{fulllineitems}
18899\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}}
18900\end{fulllineitems}
18901
18902
18903
18904\begin{savenotes}\sphinxattablestart
18905\centering
18906\begin{tabulary}{\linewidth}[t]{|T|T|}
18907\hline
18908
18909\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_ETYPE\_LIST}
18910&
18911\sphinxcode{0x0010}
18912\\
18913\hline
18914\end{tabulary}
18915\par
18916\sphinxattableend\end{savenotes}
18917
18918
18919\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_FORWARDABLE}
18920\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)}
18921
18922\begin{fulllineitems}
18923\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}}
18924\end{fulllineitems}
18925
18926
18927
18928\begin{savenotes}\sphinxattablestart
18929\centering
18930\begin{tabulary}{\linewidth}[t]{|T|T|}
18931\hline
18932
18933\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_FORWARDABLE}
18934&
18935\sphinxcode{0x0004}
18936\\
18937\hline
18938\end{tabulary}
18939\par
18940\sphinxattableend\end{savenotes}
18941
18942
18943\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_PREAUTH\_LIST}
18944\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)}
18945
18946\begin{fulllineitems}
18947\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}}
18948\end{fulllineitems}
18949
18950
18951
18952\begin{savenotes}\sphinxattablestart
18953\centering
18954\begin{tabulary}{\linewidth}[t]{|T|T|}
18955\hline
18956
18957\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_PREAUTH\_LIST}
18958&
18959\sphinxcode{0x0040}
18960\\
18961\hline
18962\end{tabulary}
18963\par
18964\sphinxattableend\end{savenotes}
18965
18966
18967\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_PROXIABLE}
18968\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)}
18969
18970\begin{fulllineitems}
18971\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}}
18972\end{fulllineitems}
18973
18974
18975
18976\begin{savenotes}\sphinxattablestart
18977\centering
18978\begin{tabulary}{\linewidth}[t]{|T|T|}
18979\hline
18980
18981\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_PROXIABLE}
18982&
18983\sphinxcode{0x0008}
18984\\
18985\hline
18986\end{tabulary}
18987\par
18988\sphinxattableend\end{savenotes}
18989
18990
18991\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_RENEW\_LIFE}
18992\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)}
18993
18994\begin{fulllineitems}
18995\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}}
18996\end{fulllineitems}
18997
18998
18999
19000\begin{savenotes}\sphinxattablestart
19001\centering
19002\begin{tabulary}{\linewidth}[t]{|T|T|}
19003\hline
19004
19005\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_RENEW\_LIFE}
19006&
19007\sphinxcode{0x0002}
19008\\
19009\hline
19010\end{tabulary}
19011\par
19012\sphinxattableend\end{savenotes}
19013
19014
19015\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_SALT}
19016\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)}
19017
19018\begin{fulllineitems}
19019\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}}
19020\end{fulllineitems}
19021
19022
19023
19024\begin{savenotes}\sphinxattablestart
19025\centering
19026\begin{tabulary}{\linewidth}[t]{|T|T|}
19027\hline
19028
19029\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_SALT}
19030&
19031\sphinxcode{0x0080}
19032\\
19033\hline
19034\end{tabulary}
19035\par
19036\sphinxattableend\end{savenotes}
19037
19038
19039\subsubsection{KRB5\_GET\_INIT\_CREDS\_OPT\_TKT\_LIFE}
19040\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)}
19041
19042\begin{fulllineitems}
19043\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}}
19044\end{fulllineitems}
19045
19046
19047
19048\begin{savenotes}\sphinxattablestart
19049\centering
19050\begin{tabulary}{\linewidth}[t]{|T|T|}
19051\hline
19052
19053\sphinxcode{KRB5\_GET\_INIT\_CREDS\_OPT\_TKT\_LIFE}
19054&
19055\sphinxcode{0x0001}
19056\\
19057\hline
19058\end{tabulary}
19059\par
19060\sphinxattableend\end{savenotes}
19061
19062
19063\subsubsection{KRB5\_INIT\_CONTEXT\_SECURE}
19064\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)}
19065
19066\begin{fulllineitems}
19067\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_SECURE:KRB5_INIT_CONTEXT_SECURE}}\pysigline{\sphinxbfcode{KRB5\_INIT\_CONTEXT\_SECURE}}
19068\end{fulllineitems}
19069
19070
19071Use secure context configuration.
19072
19073
19074\begin{savenotes}\sphinxattablestart
19075\centering
19076\begin{tabulary}{\linewidth}[t]{|T|T|}
19077\hline
19078
19079\sphinxcode{KRB5\_INIT\_CONTEXT\_SECURE}
19080&
19081\sphinxcode{0x1}
19082\\
19083\hline
19084\end{tabulary}
19085\par
19086\sphinxattableend\end{savenotes}
19087
19088
19089\subsubsection{KRB5\_INIT\_CONTEXT\_KDC}
19090\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)}
19091
19092\begin{fulllineitems}
19093\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INIT_CONTEXT_KDC:KRB5_INIT_CONTEXT_KDC}}\pysigline{\sphinxbfcode{KRB5\_INIT\_CONTEXT\_KDC}}
19094\end{fulllineitems}
19095
19096
19097Use KDC configuration if available.
19098
19099
19100\begin{savenotes}\sphinxattablestart
19101\centering
19102\begin{tabulary}{\linewidth}[t]{|T|T|}
19103\hline
19104
19105\sphinxcode{KRB5\_INIT\_CONTEXT\_KDC}
19106&
19107\sphinxcode{0x2}
19108\\
19109\hline
19110\end{tabulary}
19111\par
19112\sphinxattableend\end{savenotes}
19113
19114
19115\subsubsection{KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE}
19116\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)}
19117
19118\begin{fulllineitems}
19119\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}}
19120\end{fulllineitems}
19121
19122
19123More responses needed.
19124
19125
19126\begin{savenotes}\sphinxattablestart
19127\centering
19128\begin{tabulary}{\linewidth}[t]{|T|T|}
19129\hline
19130
19131\sphinxcode{KRB5\_INIT\_CREDS\_STEP\_FLAG\_CONTINUE}
19132&
19133\sphinxcode{0x1}
19134\\
19135\hline
19136\end{tabulary}
19137\par
19138\sphinxattableend\end{savenotes}
19139
19140
19141\subsubsection{KRB5\_INT16\_MAX}
19142\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)}
19143
19144\begin{fulllineitems}
19145\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INT16_MAX:KRB5_INT16_MAX}}\pysigline{\sphinxbfcode{KRB5\_INT16\_MAX}}
19146\end{fulllineitems}
19147
19148
19149
19150\begin{savenotes}\sphinxattablestart
19151\centering
19152\begin{tabulary}{\linewidth}[t]{|T|T|}
19153\hline
19154
19155\sphinxcode{KRB5\_INT16\_MAX}
19156&
19157\sphinxcode{65535}
19158\\
19159\hline
19160\end{tabulary}
19161\par
19162\sphinxattableend\end{savenotes}
19163
19164
19165\subsubsection{KRB5\_INT16\_MIN}
19166\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)}
19167
19168\begin{fulllineitems}
19169\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INT16_MIN:KRB5_INT16_MIN}}\pysigline{\sphinxbfcode{KRB5\_INT16\_MIN}}
19170\end{fulllineitems}
19171
19172
19173
19174\begin{savenotes}\sphinxattablestart
19175\centering
19176\begin{tabulary}{\linewidth}[t]{|T|T|}
19177\hline
19178
19179\sphinxcode{KRB5\_INT16\_MIN}
19180&
19181\sphinxcode{(-KRB5\_INT16\_MAX-1)}
19182\\
19183\hline
19184\end{tabulary}
19185\par
19186\sphinxattableend\end{savenotes}
19187
19188
19189\subsubsection{KRB5\_INT32\_MAX}
19190\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)}
19191
19192\begin{fulllineitems}
19193\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INT32_MAX:KRB5_INT32_MAX}}\pysigline{\sphinxbfcode{KRB5\_INT32\_MAX}}
19194\end{fulllineitems}
19195
19196
19197
19198\begin{savenotes}\sphinxattablestart
19199\centering
19200\begin{tabulary}{\linewidth}[t]{|T|T|}
19201\hline
19202
19203\sphinxcode{KRB5\_INT32\_MAX}
19204&
19205\sphinxcode{2147483647}
19206\\
19207\hline
19208\end{tabulary}
19209\par
19210\sphinxattableend\end{savenotes}
19211
19212
19213\subsubsection{KRB5\_INT32\_MIN}
19214\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)}
19215
19216\begin{fulllineitems}
19217\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_INT32_MIN:KRB5_INT32_MIN}}\pysigline{\sphinxbfcode{KRB5\_INT32\_MIN}}
19218\end{fulllineitems}
19219
19220
19221
19222\begin{savenotes}\sphinxattablestart
19223\centering
19224\begin{tabulary}{\linewidth}[t]{|T|T|}
19225\hline
19226
19227\sphinxcode{KRB5\_INT32\_MIN}
19228&
19229\sphinxcode{(-KRB5\_INT32\_MAX-1)}
19230\\
19231\hline
19232\end{tabulary}
19233\par
19234\sphinxattableend\end{savenotes}
19235
19236
19237\subsubsection{KRB5\_KEYUSAGE\_AD\_ITE}
19238\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)}
19239
19240\begin{fulllineitems}
19241\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_ITE:KRB5_KEYUSAGE_AD_ITE}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AD\_ITE}}
19242\end{fulllineitems}
19243
19244
19245
19246\begin{savenotes}\sphinxattablestart
19247\centering
19248\begin{tabulary}{\linewidth}[t]{|T|T|}
19249\hline
19250
19251\sphinxcode{KRB5\_KEYUSAGE\_AD\_ITE}
19252&
19253\sphinxcode{21}
19254\\
19255\hline
19256\end{tabulary}
19257\par
19258\sphinxattableend\end{savenotes}
19259
19260
19261\subsubsection{KRB5\_KEYUSAGE\_AD\_KDCISSUED\_CKSUM}
19262\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)}
19263
19264\begin{fulllineitems}
19265\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM:KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AD\_KDCISSUED\_CKSUM}}
19266\end{fulllineitems}
19267
19268
19269
19270\begin{savenotes}\sphinxattablestart
19271\centering
19272\begin{tabulary}{\linewidth}[t]{|T|T|}
19273\hline
19274
19275\sphinxcode{KRB5\_KEYUSAGE\_AD\_KDCISSUED\_CKSUM}
19276&
19277\sphinxcode{19}
19278\\
19279\hline
19280\end{tabulary}
19281\par
19282\sphinxattableend\end{savenotes}
19283
19284
19285\subsubsection{KRB5\_KEYUSAGE\_AD\_MTE}
19286\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)}
19287
19288\begin{fulllineitems}
19289\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_MTE:KRB5_KEYUSAGE_AD_MTE}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AD\_MTE}}
19290\end{fulllineitems}
19291
19292
19293
19294\begin{savenotes}\sphinxattablestart
19295\centering
19296\begin{tabulary}{\linewidth}[t]{|T|T|}
19297\hline
19298
19299\sphinxcode{KRB5\_KEYUSAGE\_AD\_MTE}
19300&
19301\sphinxcode{20}
19302\\
19303\hline
19304\end{tabulary}
19305\par
19306\sphinxattableend\end{savenotes}
19307
19308
19309\subsubsection{KRB5\_KEYUSAGE\_AD\_SIGNEDPATH}
19310\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)}
19311
19312\begin{fulllineitems}
19313\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AD_SIGNEDPATH:KRB5_KEYUSAGE_AD_SIGNEDPATH}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AD\_SIGNEDPATH}}
19314\end{fulllineitems}
19315
19316
19317
19318\begin{savenotes}\sphinxattablestart
19319\centering
19320\begin{tabulary}{\linewidth}[t]{|T|T|}
19321\hline
19322
19323\sphinxcode{KRB5\_KEYUSAGE\_AD\_SIGNEDPATH}
19324&
19325\sphinxcode{-21}
19326\\
19327\hline
19328\end{tabulary}
19329\par
19330\sphinxattableend\end{savenotes}
19331
19332
19333\subsubsection{KRB5\_KEYUSAGE\_APP\_DATA\_CKSUM}
19334\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)}
19335
19336\begin{fulllineitems}
19337\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_CKSUM:KRB5_KEYUSAGE_APP_DATA_CKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_APP\_DATA\_CKSUM}}
19338\end{fulllineitems}
19339
19340
19341
19342\begin{savenotes}\sphinxattablestart
19343\centering
19344\begin{tabulary}{\linewidth}[t]{|T|T|}
19345\hline
19346
19347\sphinxcode{KRB5\_KEYUSAGE\_APP\_DATA\_CKSUM}
19348&
19349\sphinxcode{17}
19350\\
19351\hline
19352\end{tabulary}
19353\par
19354\sphinxattableend\end{savenotes}
19355
19356
19357\subsubsection{KRB5\_KEYUSAGE\_APP\_DATA\_ENCRYPT}
19358\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)}
19359
19360\begin{fulllineitems}
19361\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_ENCRYPT:KRB5_KEYUSAGE_APP_DATA_ENCRYPT}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_APP\_DATA\_ENCRYPT}}
19362\end{fulllineitems}
19363
19364
19365
19366\begin{savenotes}\sphinxattablestart
19367\centering
19368\begin{tabulary}{\linewidth}[t]{|T|T|}
19369\hline
19370
19371\sphinxcode{KRB5\_KEYUSAGE\_APP\_DATA\_ENCRYPT}
19372&
19373\sphinxcode{16}
19374\\
19375\hline
19376\end{tabulary}
19377\par
19378\sphinxattableend\end{savenotes}
19379
19380
19381\subsubsection{KRB5\_KEYUSAGE\_AP\_REP\_ENCPART}
19382\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)}
19383
19384\begin{fulllineitems}
19385\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REP_ENCPART:KRB5_KEYUSAGE_AP_REP_ENCPART}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AP\_REP\_ENCPART}}
19386\end{fulllineitems}
19387
19388
19389
19390\begin{savenotes}\sphinxattablestart
19391\centering
19392\begin{tabulary}{\linewidth}[t]{|T|T|}
19393\hline
19394
19395\sphinxcode{KRB5\_KEYUSAGE\_AP\_REP\_ENCPART}
19396&
19397\sphinxcode{12}
19398\\
19399\hline
19400\end{tabulary}
19401\par
19402\sphinxattableend\end{savenotes}
19403
19404
19405\subsubsection{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH}
19406\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)}
19407
19408\begin{fulllineitems}
19409\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH:KRB5_KEYUSAGE_AP_REQ_AUTH}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH}}
19410\end{fulllineitems}
19411
19412
19413
19414\begin{savenotes}\sphinxattablestart
19415\centering
19416\begin{tabulary}{\linewidth}[t]{|T|T|}
19417\hline
19418
19419\sphinxcode{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH}
19420&
19421\sphinxcode{11}
19422\\
19423\hline
19424\end{tabulary}
19425\par
19426\sphinxattableend\end{savenotes}
19427
19428
19429\subsubsection{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH\_CKSUM}
19430\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)}
19431
19432\begin{fulllineitems}
19433\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}}
19434\end{fulllineitems}
19435
19436
19437
19438\begin{savenotes}\sphinxattablestart
19439\centering
19440\begin{tabulary}{\linewidth}[t]{|T|T|}
19441\hline
19442
19443\sphinxcode{KRB5\_KEYUSAGE\_AP\_REQ\_AUTH\_CKSUM}
19444&
19445\sphinxcode{10}
19446\\
19447\hline
19448\end{tabulary}
19449\par
19450\sphinxattableend\end{savenotes}
19451
19452
19453\subsubsection{KRB5\_KEYUSAGE\_AS\_REP\_ENCPART}
19454\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)}
19455
19456\begin{fulllineitems}
19457\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REP_ENCPART:KRB5_KEYUSAGE_AS_REP_ENCPART}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AS\_REP\_ENCPART}}
19458\end{fulllineitems}
19459
19460
19461
19462\begin{savenotes}\sphinxattablestart
19463\centering
19464\begin{tabulary}{\linewidth}[t]{|T|T|}
19465\hline
19466
19467\sphinxcode{KRB5\_KEYUSAGE\_AS\_REP\_ENCPART}
19468&
19469\sphinxcode{3}
19470\\
19471\hline
19472\end{tabulary}
19473\par
19474\sphinxattableend\end{savenotes}
19475
19476
19477\subsubsection{KRB5\_KEYUSAGE\_AS\_REQ}
19478\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)}
19479
19480\begin{fulllineitems}
19481\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ:KRB5_KEYUSAGE_AS_REQ}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_AS\_REQ}}
19482\end{fulllineitems}
19483
19484
19485
19486\begin{savenotes}\sphinxattablestart
19487\centering
19488\begin{tabulary}{\linewidth}[t]{|T|T|}
19489\hline
19490
19491\sphinxcode{KRB5\_KEYUSAGE\_AS\_REQ}
19492&
19493\sphinxcode{56}
19494\\
19495\hline
19496\end{tabulary}
19497\par
19498\sphinxattableend\end{savenotes}
19499
19500
19501\subsubsection{KRB5\_KEYUSAGE\_AS\_REQ\_PA\_ENC\_TS}
19502\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)}
19503
19504\begin{fulllineitems}
19505\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}}
19506\end{fulllineitems}
19507
19508
19509
19510\begin{savenotes}\sphinxattablestart
19511\centering
19512\begin{tabulary}{\linewidth}[t]{|T|T|}
19513\hline
19514
19515\sphinxcode{KRB5\_KEYUSAGE\_AS\_REQ\_PA\_ENC\_TS}
19516&
19517\sphinxcode{1}
19518\\
19519\hline
19520\end{tabulary}
19521\par
19522\sphinxattableend\end{savenotes}
19523
19524
19525\subsubsection{KRB5\_KEYUSAGE\_CAMMAC}
19526\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)}
19527
19528\begin{fulllineitems}
19529\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_CAMMAC:KRB5_KEYUSAGE_CAMMAC}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_CAMMAC}}
19530\end{fulllineitems}
19531
19532
19533
19534\begin{savenotes}\sphinxattablestart
19535\centering
19536\begin{tabulary}{\linewidth}[t]{|T|T|}
19537\hline
19538
19539\sphinxcode{KRB5\_KEYUSAGE\_CAMMAC}
19540&
19541\sphinxcode{64}
19542\\
19543\hline
19544\end{tabulary}
19545\par
19546\sphinxattableend\end{savenotes}
19547
19548
19549\subsubsection{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_CLIENT}
19550\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)}
19551
19552\begin{fulllineitems}
19553\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT:KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_CLIENT}}
19554\end{fulllineitems}
19555
19556
19557
19558\begin{savenotes}\sphinxattablestart
19559\centering
19560\begin{tabulary}{\linewidth}[t]{|T|T|}
19561\hline
19562
19563\sphinxcode{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_CLIENT}
19564&
19565\sphinxcode{54}
19566\\
19567\hline
19568\end{tabulary}
19569\par
19570\sphinxattableend\end{savenotes}
19571
19572
19573\subsubsection{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_KDC}
19574\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)}
19575
19576\begin{fulllineitems}
19577\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_KDC:KRB5_KEYUSAGE_ENC_CHALLENGE_KDC}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_KDC}}
19578\end{fulllineitems}
19579
19580
19581
19582\begin{savenotes}\sphinxattablestart
19583\centering
19584\begin{tabulary}{\linewidth}[t]{|T|T|}
19585\hline
19586
19587\sphinxcode{KRB5\_KEYUSAGE\_ENC\_CHALLENGE\_KDC}
19588&
19589\sphinxcode{55}
19590\\
19591\hline
19592\end{tabulary}
19593\par
19594\sphinxattableend\end{savenotes}
19595
19596
19597\subsubsection{KRB5\_KEYUSAGE\_FAST\_ENC}
19598\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)}
19599
19600\begin{fulllineitems}
19601\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_ENC:KRB5_KEYUSAGE_FAST_ENC}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_FAST\_ENC}}
19602\end{fulllineitems}
19603
19604
19605
19606\begin{savenotes}\sphinxattablestart
19607\centering
19608\begin{tabulary}{\linewidth}[t]{|T|T|}
19609\hline
19610
19611\sphinxcode{KRB5\_KEYUSAGE\_FAST\_ENC}
19612&
19613\sphinxcode{51}
19614\\
19615\hline
19616\end{tabulary}
19617\par
19618\sphinxattableend\end{savenotes}
19619
19620
19621\subsubsection{KRB5\_KEYUSAGE\_FAST\_FINISHED}
19622\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)}
19623
19624\begin{fulllineitems}
19625\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_FINISHED:KRB5_KEYUSAGE_FAST_FINISHED}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_FAST\_FINISHED}}
19626\end{fulllineitems}
19627
19628
19629
19630\begin{savenotes}\sphinxattablestart
19631\centering
19632\begin{tabulary}{\linewidth}[t]{|T|T|}
19633\hline
19634
19635\sphinxcode{KRB5\_KEYUSAGE\_FAST\_FINISHED}
19636&
19637\sphinxcode{53}
19638\\
19639\hline
19640\end{tabulary}
19641\par
19642\sphinxattableend\end{savenotes}
19643
19644
19645\subsubsection{KRB5\_KEYUSAGE\_FAST\_REP}
19646\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)}
19647
19648\begin{fulllineitems}
19649\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REP:KRB5_KEYUSAGE_FAST_REP}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_FAST\_REP}}
19650\end{fulllineitems}
19651
19652
19653
19654\begin{savenotes}\sphinxattablestart
19655\centering
19656\begin{tabulary}{\linewidth}[t]{|T|T|}
19657\hline
19658
19659\sphinxcode{KRB5\_KEYUSAGE\_FAST\_REP}
19660&
19661\sphinxcode{52}
19662\\
19663\hline
19664\end{tabulary}
19665\par
19666\sphinxattableend\end{savenotes}
19667
19668
19669\subsubsection{KRB5\_KEYUSAGE\_FAST\_REQ\_CHKSUM}
19670\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)}
19671
19672\begin{fulllineitems}
19673\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_FAST_REQ_CHKSUM:KRB5_KEYUSAGE_FAST_REQ_CHKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_FAST\_REQ\_CHKSUM}}
19674\end{fulllineitems}
19675
19676
19677
19678\begin{savenotes}\sphinxattablestart
19679\centering
19680\begin{tabulary}{\linewidth}[t]{|T|T|}
19681\hline
19682
19683\sphinxcode{KRB5\_KEYUSAGE\_FAST\_REQ\_CHKSUM}
19684&
19685\sphinxcode{50}
19686\\
19687\hline
19688\end{tabulary}
19689\par
19690\sphinxattableend\end{savenotes}
19691
19692
19693\subsubsection{KRB5\_KEYUSAGE\_GSS\_TOK\_MIC}
19694\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)}
19695
19696\begin{fulllineitems}
19697\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_MIC:KRB5_KEYUSAGE_GSS_TOK_MIC}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_GSS\_TOK\_MIC}}
19698\end{fulllineitems}
19699
19700
19701
19702\begin{savenotes}\sphinxattablestart
19703\centering
19704\begin{tabulary}{\linewidth}[t]{|T|T|}
19705\hline
19706
19707\sphinxcode{KRB5\_KEYUSAGE\_GSS\_TOK\_MIC}
19708&
19709\sphinxcode{22}
19710\\
19711\hline
19712\end{tabulary}
19713\par
19714\sphinxattableend\end{savenotes}
19715
19716
19717\subsubsection{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_INTEG}
19718\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)}
19719
19720\begin{fulllineitems}
19721\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}}
19722\end{fulllineitems}
19723
19724
19725
19726\begin{savenotes}\sphinxattablestart
19727\centering
19728\begin{tabulary}{\linewidth}[t]{|T|T|}
19729\hline
19730
19731\sphinxcode{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_INTEG}
19732&
19733\sphinxcode{23}
19734\\
19735\hline
19736\end{tabulary}
19737\par
19738\sphinxattableend\end{savenotes}
19739
19740
19741\subsubsection{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_PRIV}
19742\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)}
19743
19744\begin{fulllineitems}
19745\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}}
19746\end{fulllineitems}
19747
19748
19749
19750\begin{savenotes}\sphinxattablestart
19751\centering
19752\begin{tabulary}{\linewidth}[t]{|T|T|}
19753\hline
19754
19755\sphinxcode{KRB5\_KEYUSAGE\_GSS\_TOK\_WRAP\_PRIV}
19756&
19757\sphinxcode{24}
19758\\
19759\hline
19760\end{tabulary}
19761\par
19762\sphinxattableend\end{savenotes}
19763
19764
19765\subsubsection{KRB5\_KEYUSAGE\_IAKERB\_FINISHED}
19766\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)}
19767
19768\begin{fulllineitems}
19769\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_IAKERB_FINISHED:KRB5_KEYUSAGE_IAKERB_FINISHED}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_IAKERB\_FINISHED}}
19770\end{fulllineitems}
19771
19772
19773
19774\begin{savenotes}\sphinxattablestart
19775\centering
19776\begin{tabulary}{\linewidth}[t]{|T|T|}
19777\hline
19778
19779\sphinxcode{KRB5\_KEYUSAGE\_IAKERB\_FINISHED}
19780&
19781\sphinxcode{42}
19782\\
19783\hline
19784\end{tabulary}
19785\par
19786\sphinxattableend\end{savenotes}
19787
19788
19789\subsubsection{KRB5\_KEYUSAGE\_KDC\_REP\_TICKET}
19790\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)}
19791
19792\begin{fulllineitems}
19793\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KDC_REP_TICKET:KRB5_KEYUSAGE_KDC_REP_TICKET}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_KDC\_REP\_TICKET}}
19794\end{fulllineitems}
19795
19796
19797
19798\begin{savenotes}\sphinxattablestart
19799\centering
19800\begin{tabulary}{\linewidth}[t]{|T|T|}
19801\hline
19802
19803\sphinxcode{KRB5\_KEYUSAGE\_KDC\_REP\_TICKET}
19804&
19805\sphinxcode{2}
19806\\
19807\hline
19808\end{tabulary}
19809\par
19810\sphinxattableend\end{savenotes}
19811
19812
19813\subsubsection{KRB5\_KEYUSAGE\_KRB\_CRED\_ENCPART}
19814\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)}
19815
19816\begin{fulllineitems}
19817\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_CRED_ENCPART:KRB5_KEYUSAGE_KRB_CRED_ENCPART}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_KRB\_CRED\_ENCPART}}
19818\end{fulllineitems}
19819
19820
19821
19822\begin{savenotes}\sphinxattablestart
19823\centering
19824\begin{tabulary}{\linewidth}[t]{|T|T|}
19825\hline
19826
19827\sphinxcode{KRB5\_KEYUSAGE\_KRB\_CRED\_ENCPART}
19828&
19829\sphinxcode{14}
19830\\
19831\hline
19832\end{tabulary}
19833\par
19834\sphinxattableend\end{savenotes}
19835
19836
19837\subsubsection{KRB5\_KEYUSAGE\_KRB\_ERROR\_CKSUM}
19838\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)}
19839
19840\begin{fulllineitems}
19841\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_ERROR_CKSUM:KRB5_KEYUSAGE_KRB_ERROR_CKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_KRB\_ERROR\_CKSUM}}
19842\end{fulllineitems}
19843
19844
19845
19846\begin{savenotes}\sphinxattablestart
19847\centering
19848\begin{tabulary}{\linewidth}[t]{|T|T|}
19849\hline
19850
19851\sphinxcode{KRB5\_KEYUSAGE\_KRB\_ERROR\_CKSUM}
19852&
19853\sphinxcode{18}
19854\\
19855\hline
19856\end{tabulary}
19857\par
19858\sphinxattableend\end{savenotes}
19859
19860
19861\subsubsection{KRB5\_KEYUSAGE\_KRB\_PRIV\_ENCPART}
19862\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)}
19863
19864\begin{fulllineitems}
19865\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_PRIV_ENCPART:KRB5_KEYUSAGE_KRB_PRIV_ENCPART}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_KRB\_PRIV\_ENCPART}}
19866\end{fulllineitems}
19867
19868
19869
19870\begin{savenotes}\sphinxattablestart
19871\centering
19872\begin{tabulary}{\linewidth}[t]{|T|T|}
19873\hline
19874
19875\sphinxcode{KRB5\_KEYUSAGE\_KRB\_PRIV\_ENCPART}
19876&
19877\sphinxcode{13}
19878\\
19879\hline
19880\end{tabulary}
19881\par
19882\sphinxattableend\end{savenotes}
19883
19884
19885\subsubsection{KRB5\_KEYUSAGE\_KRB\_SAFE\_CKSUM}
19886\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)}
19887
19888\begin{fulllineitems}
19889\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_KRB_SAFE_CKSUM:KRB5_KEYUSAGE_KRB_SAFE_CKSUM}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_KRB\_SAFE\_CKSUM}}
19890\end{fulllineitems}
19891
19892
19893
19894\begin{savenotes}\sphinxattablestart
19895\centering
19896\begin{tabulary}{\linewidth}[t]{|T|T|}
19897\hline
19898
19899\sphinxcode{KRB5\_KEYUSAGE\_KRB\_SAFE\_CKSUM}
19900&
19901\sphinxcode{15}
19902\\
19903\hline
19904\end{tabulary}
19905\par
19906\sphinxattableend\end{savenotes}
19907
19908
19909\subsubsection{KRB5\_KEYUSAGE\_PA\_AS\_FRESHNESS}
19910\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)}
19911
19912\begin{fulllineitems}
19913\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_AS_FRESHNESS:KRB5_KEYUSAGE_PA_AS_FRESHNESS}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_AS\_FRESHNESS}}
19914\end{fulllineitems}
19915
19916
19917Used for freshness tokens.
19918
19919
19920\begin{savenotes}\sphinxattablestart
19921\centering
19922\begin{tabulary}{\linewidth}[t]{|T|T|}
19923\hline
19924
19925\sphinxcode{KRB5\_KEYUSAGE\_PA\_AS\_FRESHNESS}
19926&
19927\sphinxcode{514}
19928\\
19929\hline
19930\end{tabulary}
19931\par
19932\sphinxattableend\end{savenotes}
19933
19934
19935\subsubsection{KRB5\_KEYUSAGE\_PA\_FX\_COOKIE}
19936\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)}
19937
19938\begin{fulllineitems}
19939\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_FX_COOKIE:KRB5_KEYUSAGE_PA_FX_COOKIE}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_FX\_COOKIE}}
19940\end{fulllineitems}
19941
19942
19943Used for encrypted FAST cookies.
19944
19945
19946\begin{savenotes}\sphinxattablestart
19947\centering
19948\begin{tabulary}{\linewidth}[t]{|T|T|}
19949\hline
19950
19951\sphinxcode{KRB5\_KEYUSAGE\_PA\_FX\_COOKIE}
19952&
19953\sphinxcode{513}
19954\\
19955\hline
19956\end{tabulary}
19957\par
19958\sphinxattableend\end{savenotes}
19959
19960
19961\subsubsection{KRB5\_KEYUSAGE\_PA\_OTP\_REQUEST}
19962\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)}
19963
19964\begin{fulllineitems}
19965\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_OTP_REQUEST:KRB5_KEYUSAGE_PA_OTP_REQUEST}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_OTP\_REQUEST}}
19966\end{fulllineitems}
19967
19968
19969See RFC 6560 section 4.2.
19970
19971
19972\begin{savenotes}\sphinxattablestart
19973\centering
19974\begin{tabulary}{\linewidth}[t]{|T|T|}
19975\hline
19976
19977\sphinxcode{KRB5\_KEYUSAGE\_PA\_OTP\_REQUEST}
19978&
19979\sphinxcode{45}
19980\\
19981\hline
19982\end{tabulary}
19983\par
19984\sphinxattableend\end{savenotes}
19985
19986
19987\subsubsection{KRB5\_KEYUSAGE\_PA\_PKINIT\_KX}
19988\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)}
19989
19990\begin{fulllineitems}
19991\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_PKINIT_KX:KRB5_KEYUSAGE_PA_PKINIT_KX}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_PKINIT\_KX}}
19992\end{fulllineitems}
19993
19994
19995
19996\begin{savenotes}\sphinxattablestart
19997\centering
19998\begin{tabulary}{\linewidth}[t]{|T|T|}
19999\hline
20000
20001\sphinxcode{KRB5\_KEYUSAGE\_PA\_PKINIT\_KX}
20002&
20003\sphinxcode{44}
20004\\
20005\hline
20006\end{tabulary}
20007\par
20008\sphinxattableend\end{savenotes}
20009
20010
20011\subsubsection{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REPLY}
20012\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)}
20013
20014\begin{fulllineitems}
20015\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}}
20016\end{fulllineitems}
20017
20018
20019Note conflict with \sphinxcode{KRB5\_KEYUSAGE\_PA\_SAM\_RESPONSE} .
20020
20021
20022\begin{savenotes}\sphinxattablestart
20023\centering
20024\begin{tabulary}{\linewidth}[t]{|T|T|}
20025\hline
20026
20027\sphinxcode{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REPLY}
20028&
20029\sphinxcode{27}
20030\\
20031\hline
20032\end{tabulary}
20033\par
20034\sphinxattableend\end{savenotes}
20035
20036
20037\subsubsection{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REQUEST}
20038\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)}
20039
20040\begin{fulllineitems}
20041\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}}
20042\end{fulllineitems}
20043
20044
20045Note conflict with \sphinxcode{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_TRACKID} .
20046
20047
20048\begin{savenotes}\sphinxattablestart
20049\centering
20050\begin{tabulary}{\linewidth}[t]{|T|T|}
20051\hline
20052
20053\sphinxcode{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REQUEST}
20054&
20055\sphinxcode{26}
20056\\
20057\hline
20058\end{tabulary}
20059\par
20060\sphinxattableend\end{savenotes}
20061
20062
20063\subsubsection{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_CKSUM}
20064\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)}
20065
20066\begin{fulllineitems}
20067\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}}
20068\end{fulllineitems}
20069
20070
20071
20072\begin{savenotes}\sphinxattablestart
20073\centering
20074\begin{tabulary}{\linewidth}[t]{|T|T|}
20075\hline
20076
20077\sphinxcode{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_CKSUM}
20078&
20079\sphinxcode{25}
20080\\
20081\hline
20082\end{tabulary}
20083\par
20084\sphinxattableend\end{savenotes}
20085
20086
20087\subsubsection{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_TRACKID}
20088\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)}
20089
20090\begin{fulllineitems}
20091\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}}
20092\end{fulllineitems}
20093
20094
20095Note conflict with \sphinxcode{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REQUEST} .
20096
20097
20098\begin{savenotes}\sphinxattablestart
20099\centering
20100\begin{tabulary}{\linewidth}[t]{|T|T|}
20101\hline
20102
20103\sphinxcode{KRB5\_KEYUSAGE\_PA\_SAM\_CHALLENGE\_TRACKID}
20104&
20105\sphinxcode{26}
20106\\
20107\hline
20108\end{tabulary}
20109\par
20110\sphinxattableend\end{savenotes}
20111
20112
20113\subsubsection{KRB5\_KEYUSAGE\_PA\_SAM\_RESPONSE}
20114\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)}
20115
20116\begin{fulllineitems}
20117\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_RESPONSE:KRB5_KEYUSAGE_PA_SAM_RESPONSE}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_PA\_SAM\_RESPONSE}}
20118\end{fulllineitems}
20119
20120
20121Note conflict with \sphinxcode{KRB5\_KEYUSAGE\_PA\_S4U\_X509\_USER\_REPLY} .
20122
20123
20124\begin{savenotes}\sphinxattablestart
20125\centering
20126\begin{tabulary}{\linewidth}[t]{|T|T|}
20127\hline
20128
20129\sphinxcode{KRB5\_KEYUSAGE\_PA\_SAM\_RESPONSE}
20130&
20131\sphinxcode{27}
20132\\
20133\hline
20134\end{tabulary}
20135\par
20136\sphinxattableend\end{savenotes}
20137
20138
20139\subsubsection{KRB5\_KEYUSAGE\_SPAKE}
20140\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)}
20141
20142\begin{fulllineitems}
20143\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_SPAKE:KRB5_KEYUSAGE_SPAKE}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_SPAKE}}
20144\end{fulllineitems}
20145
20146
20147
20148\begin{savenotes}\sphinxattablestart
20149\centering
20150\begin{tabulary}{\linewidth}[t]{|T|T|}
20151\hline
20152
20153\sphinxcode{KRB5\_KEYUSAGE\_SPAKE}
20154&
20155\sphinxcode{65}
20156\\
20157\hline
20158\end{tabulary}
20159\par
20160\sphinxattableend\end{savenotes}
20161
20162
20163\subsubsection{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SESSKEY}
20164\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)}
20165
20166\begin{fulllineitems}
20167\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}}
20168\end{fulllineitems}
20169
20170
20171
20172\begin{savenotes}\sphinxattablestart
20173\centering
20174\begin{tabulary}{\linewidth}[t]{|T|T|}
20175\hline
20176
20177\sphinxcode{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SESSKEY}
20178&
20179\sphinxcode{8}
20180\\
20181\hline
20182\end{tabulary}
20183\par
20184\sphinxattableend\end{savenotes}
20185
20186
20187\subsubsection{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SUBKEY}
20188\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)}
20189
20190\begin{fulllineitems}
20191\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}}
20192\end{fulllineitems}
20193
20194
20195
20196\begin{savenotes}\sphinxattablestart
20197\centering
20198\begin{tabulary}{\linewidth}[t]{|T|T|}
20199\hline
20200
20201\sphinxcode{KRB5\_KEYUSAGE\_TGS\_REP\_ENCPART\_SUBKEY}
20202&
20203\sphinxcode{9}
20204\\
20205\hline
20206\end{tabulary}
20207\par
20208\sphinxattableend\end{savenotes}
20209
20210
20211\subsubsection{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SESSKEY}
20212\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)}
20213
20214\begin{fulllineitems}
20215\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}}
20216\end{fulllineitems}
20217
20218
20219
20220\begin{savenotes}\sphinxattablestart
20221\centering
20222\begin{tabulary}{\linewidth}[t]{|T|T|}
20223\hline
20224
20225\sphinxcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SESSKEY}
20226&
20227\sphinxcode{4}
20228\\
20229\hline
20230\end{tabulary}
20231\par
20232\sphinxattableend\end{savenotes}
20233
20234
20235\subsubsection{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SUBKEY}
20236\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)}
20237
20238\begin{fulllineitems}
20239\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}}
20240\end{fulllineitems}
20241
20242
20243
20244\begin{savenotes}\sphinxattablestart
20245\centering
20246\begin{tabulary}{\linewidth}[t]{|T|T|}
20247\hline
20248
20249\sphinxcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AD\_SUBKEY}
20250&
20251\sphinxcode{5}
20252\\
20253\hline
20254\end{tabulary}
20255\par
20256\sphinxattableend\end{savenotes}
20257
20258
20259\subsubsection{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH}
20260\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)}
20261
20262\begin{fulllineitems}
20263\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH:KRB5_KEYUSAGE_TGS_REQ_AUTH}}\pysigline{\sphinxbfcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH}}
20264\end{fulllineitems}
20265
20266
20267
20268\begin{savenotes}\sphinxattablestart
20269\centering
20270\begin{tabulary}{\linewidth}[t]{|T|T|}
20271\hline
20272
20273\sphinxcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH}
20274&
20275\sphinxcode{7}
20276\\
20277\hline
20278\end{tabulary}
20279\par
20280\sphinxattableend\end{savenotes}
20281
20282
20283\subsubsection{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH\_CKSUM}
20284\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)}
20285
20286\begin{fulllineitems}
20287\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}}
20288\end{fulllineitems}
20289
20290
20291
20292\begin{savenotes}\sphinxattablestart
20293\centering
20294\begin{tabulary}{\linewidth}[t]{|T|T|}
20295\hline
20296
20297\sphinxcode{KRB5\_KEYUSAGE\_TGS\_REQ\_AUTH\_CKSUM}
20298&
20299\sphinxcode{6}
20300\\
20301\hline
20302\end{tabulary}
20303\par
20304\sphinxattableend\end{savenotes}
20305
20306
20307\subsubsection{KRB5\_KPASSWD\_ACCESSDENIED}
20308\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)}
20309
20310\begin{fulllineitems}
20311\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_ACCESSDENIED:KRB5_KPASSWD_ACCESSDENIED}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_ACCESSDENIED}}
20312\end{fulllineitems}
20313
20314
20315Not authorized.
20316
20317
20318\begin{savenotes}\sphinxattablestart
20319\centering
20320\begin{tabulary}{\linewidth}[t]{|T|T|}
20321\hline
20322
20323\sphinxcode{KRB5\_KPASSWD\_ACCESSDENIED}
20324&
20325\sphinxcode{5}
20326\\
20327\hline
20328\end{tabulary}
20329\par
20330\sphinxattableend\end{savenotes}
20331
20332
20333\subsubsection{KRB5\_KPASSWD\_AUTHERROR}
20334\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)}
20335
20336\begin{fulllineitems}
20337\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_AUTHERROR:KRB5_KPASSWD_AUTHERROR}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_AUTHERROR}}
20338\end{fulllineitems}
20339
20340
20341Authentication error.
20342
20343
20344\begin{savenotes}\sphinxattablestart
20345\centering
20346\begin{tabulary}{\linewidth}[t]{|T|T|}
20347\hline
20348
20349\sphinxcode{KRB5\_KPASSWD\_AUTHERROR}
20350&
20351\sphinxcode{3}
20352\\
20353\hline
20354\end{tabulary}
20355\par
20356\sphinxattableend\end{savenotes}
20357
20358
20359\subsubsection{KRB5\_KPASSWD\_BAD\_VERSION}
20360\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)}
20361
20362\begin{fulllineitems}
20363\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_BAD_VERSION:KRB5_KPASSWD_BAD_VERSION}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_BAD\_VERSION}}
20364\end{fulllineitems}
20365
20366
20367Unknown RPC version.
20368
20369
20370\begin{savenotes}\sphinxattablestart
20371\centering
20372\begin{tabulary}{\linewidth}[t]{|T|T|}
20373\hline
20374
20375\sphinxcode{KRB5\_KPASSWD\_BAD\_VERSION}
20376&
20377\sphinxcode{6}
20378\\
20379\hline
20380\end{tabulary}
20381\par
20382\sphinxattableend\end{savenotes}
20383
20384
20385\subsubsection{KRB5\_KPASSWD\_HARDERROR}
20386\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)}
20387
20388\begin{fulllineitems}
20389\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_HARDERROR:KRB5_KPASSWD_HARDERROR}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_HARDERROR}}
20390\end{fulllineitems}
20391
20392
20393Server error.
20394
20395
20396\begin{savenotes}\sphinxattablestart
20397\centering
20398\begin{tabulary}{\linewidth}[t]{|T|T|}
20399\hline
20400
20401\sphinxcode{KRB5\_KPASSWD\_HARDERROR}
20402&
20403\sphinxcode{2}
20404\\
20405\hline
20406\end{tabulary}
20407\par
20408\sphinxattableend\end{savenotes}
20409
20410
20411\subsubsection{KRB5\_KPASSWD\_INITIAL\_FLAG\_NEEDED}
20412\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)}
20413
20414\begin{fulllineitems}
20415\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_INITIAL_FLAG_NEEDED:KRB5_KPASSWD_INITIAL_FLAG_NEEDED}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_INITIAL\_FLAG\_NEEDED}}
20416\end{fulllineitems}
20417
20418
20419The presented credentials were not obtained using a password directly.
20420
20421
20422\begin{savenotes}\sphinxattablestart
20423\centering
20424\begin{tabulary}{\linewidth}[t]{|T|T|}
20425\hline
20426
20427\sphinxcode{KRB5\_KPASSWD\_INITIAL\_FLAG\_NEEDED}
20428&
20429\sphinxcode{7}
20430\\
20431\hline
20432\end{tabulary}
20433\par
20434\sphinxattableend\end{savenotes}
20435
20436
20437\subsubsection{KRB5\_KPASSWD\_MALFORMED}
20438\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)}
20439
20440\begin{fulllineitems}
20441\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_MALFORMED:KRB5_KPASSWD_MALFORMED}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_MALFORMED}}
20442\end{fulllineitems}
20443
20444
20445Malformed request.
20446
20447
20448\begin{savenotes}\sphinxattablestart
20449\centering
20450\begin{tabulary}{\linewidth}[t]{|T|T|}
20451\hline
20452
20453\sphinxcode{KRB5\_KPASSWD\_MALFORMED}
20454&
20455\sphinxcode{1}
20456\\
20457\hline
20458\end{tabulary}
20459\par
20460\sphinxattableend\end{savenotes}
20461
20462
20463\subsubsection{KRB5\_KPASSWD\_SOFTERROR}
20464\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)}
20465
20466\begin{fulllineitems}
20467\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SOFTERROR:KRB5_KPASSWD_SOFTERROR}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_SOFTERROR}}
20468\end{fulllineitems}
20469
20470
20471Password change rejected.
20472
20473
20474\begin{savenotes}\sphinxattablestart
20475\centering
20476\begin{tabulary}{\linewidth}[t]{|T|T|}
20477\hline
20478
20479\sphinxcode{KRB5\_KPASSWD\_SOFTERROR}
20480&
20481\sphinxcode{4}
20482\\
20483\hline
20484\end{tabulary}
20485\par
20486\sphinxattableend\end{savenotes}
20487
20488
20489\subsubsection{KRB5\_KPASSWD\_SUCCESS}
20490\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)}
20491
20492\begin{fulllineitems}
20493\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_KPASSWD_SUCCESS:KRB5_KPASSWD_SUCCESS}}\pysigline{\sphinxbfcode{KRB5\_KPASSWD\_SUCCESS}}
20494\end{fulllineitems}
20495
20496
20497Success.
20498
20499
20500\begin{savenotes}\sphinxattablestart
20501\centering
20502\begin{tabulary}{\linewidth}[t]{|T|T|}
20503\hline
20504
20505\sphinxcode{KRB5\_KPASSWD\_SUCCESS}
20506&
20507\sphinxcode{0}
20508\\
20509\hline
20510\end{tabulary}
20511\par
20512\sphinxattableend\end{savenotes}
20513
20514
20515\subsubsection{KRB5\_LRQ\_ALL\_ACCT\_EXPTIME}
20516\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)}
20517
20518\begin{fulllineitems}
20519\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_ACCT_EXPTIME:KRB5_LRQ_ALL_ACCT_EXPTIME}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_ACCT\_EXPTIME}}
20520\end{fulllineitems}
20521
20522
20523
20524\begin{savenotes}\sphinxattablestart
20525\centering
20526\begin{tabulary}{\linewidth}[t]{|T|T|}
20527\hline
20528
20529\sphinxcode{KRB5\_LRQ\_ALL\_ACCT\_EXPTIME}
20530&
20531\sphinxcode{7}
20532\\
20533\hline
20534\end{tabulary}
20535\par
20536\sphinxattableend\end{savenotes}
20537
20538
20539\subsubsection{KRB5\_LRQ\_ALL\_LAST\_INITIAL}
20540\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)}
20541
20542\begin{fulllineitems}
20543\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_INITIAL:KRB5_LRQ_ALL_LAST_INITIAL}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_LAST\_INITIAL}}
20544\end{fulllineitems}
20545
20546
20547
20548\begin{savenotes}\sphinxattablestart
20549\centering
20550\begin{tabulary}{\linewidth}[t]{|T|T|}
20551\hline
20552
20553\sphinxcode{KRB5\_LRQ\_ALL\_LAST\_INITIAL}
20554&
20555\sphinxcode{2}
20556\\
20557\hline
20558\end{tabulary}
20559\par
20560\sphinxattableend\end{savenotes}
20561
20562
20563\subsubsection{KRB5\_LRQ\_ALL\_LAST\_RENEWAL}
20564\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)}
20565
20566\begin{fulllineitems}
20567\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_RENEWAL:KRB5_LRQ_ALL_LAST_RENEWAL}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_LAST\_RENEWAL}}
20568\end{fulllineitems}
20569
20570
20571
20572\begin{savenotes}\sphinxattablestart
20573\centering
20574\begin{tabulary}{\linewidth}[t]{|T|T|}
20575\hline
20576
20577\sphinxcode{KRB5\_LRQ\_ALL\_LAST\_RENEWAL}
20578&
20579\sphinxcode{4}
20580\\
20581\hline
20582\end{tabulary}
20583\par
20584\sphinxattableend\end{savenotes}
20585
20586
20587\subsubsection{KRB5\_LRQ\_ALL\_LAST\_REQ}
20588\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)}
20589
20590\begin{fulllineitems}
20591\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_REQ:KRB5_LRQ_ALL_LAST_REQ}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_LAST\_REQ}}
20592\end{fulllineitems}
20593
20594
20595
20596\begin{savenotes}\sphinxattablestart
20597\centering
20598\begin{tabulary}{\linewidth}[t]{|T|T|}
20599\hline
20600
20601\sphinxcode{KRB5\_LRQ\_ALL\_LAST\_REQ}
20602&
20603\sphinxcode{5}
20604\\
20605\hline
20606\end{tabulary}
20607\par
20608\sphinxattableend\end{savenotes}
20609
20610
20611\subsubsection{KRB5\_LRQ\_ALL\_LAST\_TGT}
20612\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)}
20613
20614\begin{fulllineitems}
20615\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT:KRB5_LRQ_ALL_LAST_TGT}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_LAST\_TGT}}
20616\end{fulllineitems}
20617
20618
20619
20620\begin{savenotes}\sphinxattablestart
20621\centering
20622\begin{tabulary}{\linewidth}[t]{|T|T|}
20623\hline
20624
20625\sphinxcode{KRB5\_LRQ\_ALL\_LAST\_TGT}
20626&
20627\sphinxcode{1}
20628\\
20629\hline
20630\end{tabulary}
20631\par
20632\sphinxattableend\end{savenotes}
20633
20634
20635\subsubsection{KRB5\_LRQ\_ALL\_LAST\_TGT\_ISSUED}
20636\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)}
20637
20638\begin{fulllineitems}
20639\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}}
20640\end{fulllineitems}
20641
20642
20643
20644\begin{savenotes}\sphinxattablestart
20645\centering
20646\begin{tabulary}{\linewidth}[t]{|T|T|}
20647\hline
20648
20649\sphinxcode{KRB5\_LRQ\_ALL\_LAST\_TGT\_ISSUED}
20650&
20651\sphinxcode{3}
20652\\
20653\hline
20654\end{tabulary}
20655\par
20656\sphinxattableend\end{savenotes}
20657
20658
20659\subsubsection{KRB5\_LRQ\_ALL\_PW\_EXPTIME}
20660\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)}
20661
20662\begin{fulllineitems}
20663\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ALL_PW_EXPTIME:KRB5_LRQ_ALL_PW_EXPTIME}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ALL\_PW\_EXPTIME}}
20664\end{fulllineitems}
20665
20666
20667
20668\begin{savenotes}\sphinxattablestart
20669\centering
20670\begin{tabulary}{\linewidth}[t]{|T|T|}
20671\hline
20672
20673\sphinxcode{KRB5\_LRQ\_ALL\_PW\_EXPTIME}
20674&
20675\sphinxcode{6}
20676\\
20677\hline
20678\end{tabulary}
20679\par
20680\sphinxattableend\end{savenotes}
20681
20682
20683\subsubsection{KRB5\_LRQ\_NONE}
20684\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)}
20685
20686\begin{fulllineitems}
20687\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_NONE:KRB5_LRQ_NONE}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_NONE}}
20688\end{fulllineitems}
20689
20690
20691
20692\begin{savenotes}\sphinxattablestart
20693\centering
20694\begin{tabulary}{\linewidth}[t]{|T|T|}
20695\hline
20696
20697\sphinxcode{KRB5\_LRQ\_NONE}
20698&
20699\sphinxcode{0}
20700\\
20701\hline
20702\end{tabulary}
20703\par
20704\sphinxattableend\end{savenotes}
20705
20706
20707\subsubsection{KRB5\_LRQ\_ONE\_ACCT\_EXPTIME}
20708\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)}
20709
20710\begin{fulllineitems}
20711\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_ACCT_EXPTIME:KRB5_LRQ_ONE_ACCT_EXPTIME}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_ACCT\_EXPTIME}}
20712\end{fulllineitems}
20713
20714
20715
20716\begin{savenotes}\sphinxattablestart
20717\centering
20718\begin{tabulary}{\linewidth}[t]{|T|T|}
20719\hline
20720
20721\sphinxcode{KRB5\_LRQ\_ONE\_ACCT\_EXPTIME}
20722&
20723\sphinxcode{(-7)}
20724\\
20725\hline
20726\end{tabulary}
20727\par
20728\sphinxattableend\end{savenotes}
20729
20730
20731\subsubsection{KRB5\_LRQ\_ONE\_LAST\_INITIAL}
20732\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)}
20733
20734\begin{fulllineitems}
20735\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_INITIAL:KRB5_LRQ_ONE_LAST_INITIAL}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_LAST\_INITIAL}}
20736\end{fulllineitems}
20737
20738
20739
20740\begin{savenotes}\sphinxattablestart
20741\centering
20742\begin{tabulary}{\linewidth}[t]{|T|T|}
20743\hline
20744
20745\sphinxcode{KRB5\_LRQ\_ONE\_LAST\_INITIAL}
20746&
20747\sphinxcode{(-2)}
20748\\
20749\hline
20750\end{tabulary}
20751\par
20752\sphinxattableend\end{savenotes}
20753
20754
20755\subsubsection{KRB5\_LRQ\_ONE\_LAST\_RENEWAL}
20756\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)}
20757
20758\begin{fulllineitems}
20759\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_RENEWAL:KRB5_LRQ_ONE_LAST_RENEWAL}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_LAST\_RENEWAL}}
20760\end{fulllineitems}
20761
20762
20763
20764\begin{savenotes}\sphinxattablestart
20765\centering
20766\begin{tabulary}{\linewidth}[t]{|T|T|}
20767\hline
20768
20769\sphinxcode{KRB5\_LRQ\_ONE\_LAST\_RENEWAL}
20770&
20771\sphinxcode{(-4)}
20772\\
20773\hline
20774\end{tabulary}
20775\par
20776\sphinxattableend\end{savenotes}
20777
20778
20779\subsubsection{KRB5\_LRQ\_ONE\_LAST\_REQ}
20780\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)}
20781
20782\begin{fulllineitems}
20783\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_REQ:KRB5_LRQ_ONE_LAST_REQ}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_LAST\_REQ}}
20784\end{fulllineitems}
20785
20786
20787
20788\begin{savenotes}\sphinxattablestart
20789\centering
20790\begin{tabulary}{\linewidth}[t]{|T|T|}
20791\hline
20792
20793\sphinxcode{KRB5\_LRQ\_ONE\_LAST\_REQ}
20794&
20795\sphinxcode{(-5)}
20796\\
20797\hline
20798\end{tabulary}
20799\par
20800\sphinxattableend\end{savenotes}
20801
20802
20803\subsubsection{KRB5\_LRQ\_ONE\_LAST\_TGT}
20804\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)}
20805
20806\begin{fulllineitems}
20807\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT:KRB5_LRQ_ONE_LAST_TGT}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_LAST\_TGT}}
20808\end{fulllineitems}
20809
20810
20811
20812\begin{savenotes}\sphinxattablestart
20813\centering
20814\begin{tabulary}{\linewidth}[t]{|T|T|}
20815\hline
20816
20817\sphinxcode{KRB5\_LRQ\_ONE\_LAST\_TGT}
20818&
20819\sphinxcode{(-1)}
20820\\
20821\hline
20822\end{tabulary}
20823\par
20824\sphinxattableend\end{savenotes}
20825
20826
20827\subsubsection{KRB5\_LRQ\_ONE\_LAST\_TGT\_ISSUED}
20828\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)}
20829
20830\begin{fulllineitems}
20831\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}}
20832\end{fulllineitems}
20833
20834
20835
20836\begin{savenotes}\sphinxattablestart
20837\centering
20838\begin{tabulary}{\linewidth}[t]{|T|T|}
20839\hline
20840
20841\sphinxcode{KRB5\_LRQ\_ONE\_LAST\_TGT\_ISSUED}
20842&
20843\sphinxcode{(-3)}
20844\\
20845\hline
20846\end{tabulary}
20847\par
20848\sphinxattableend\end{savenotes}
20849
20850
20851\subsubsection{KRB5\_LRQ\_ONE\_PW\_EXPTIME}
20852\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)}
20853
20854\begin{fulllineitems}
20855\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_LRQ_ONE_PW_EXPTIME:KRB5_LRQ_ONE_PW_EXPTIME}}\pysigline{\sphinxbfcode{KRB5\_LRQ\_ONE\_PW\_EXPTIME}}
20856\end{fulllineitems}
20857
20858
20859
20860\begin{savenotes}\sphinxattablestart
20861\centering
20862\begin{tabulary}{\linewidth}[t]{|T|T|}
20863\hline
20864
20865\sphinxcode{KRB5\_LRQ\_ONE\_PW\_EXPTIME}
20866&
20867\sphinxcode{(-6)}
20868\\
20869\hline
20870\end{tabulary}
20871\par
20872\sphinxattableend\end{savenotes}
20873
20874
20875\subsubsection{KRB5\_NT\_ENTERPRISE\_PRINCIPAL}
20876\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)}
20877
20878\begin{fulllineitems}
20879\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_ENTERPRISE_PRINCIPAL:KRB5_NT_ENTERPRISE_PRINCIPAL}}\pysigline{\sphinxbfcode{KRB5\_NT\_ENTERPRISE\_PRINCIPAL}}
20880\end{fulllineitems}
20881
20882
20883Windows 2000 UPN.
20884
20885
20886\begin{savenotes}\sphinxattablestart
20887\centering
20888\begin{tabulary}{\linewidth}[t]{|T|T|}
20889\hline
20890
20891\sphinxcode{KRB5\_NT\_ENTERPRISE\_PRINCIPAL}
20892&
20893\sphinxcode{10}
20894\\
20895\hline
20896\end{tabulary}
20897\par
20898\sphinxattableend\end{savenotes}
20899
20900
20901\subsubsection{KRB5\_NT\_ENT\_PRINCIPAL\_AND\_ID}
20902\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)}
20903
20904\begin{fulllineitems}
20905\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}}
20906\end{fulllineitems}
20907
20908
20909NT 4 style name and SID.
20910
20911
20912\begin{savenotes}\sphinxattablestart
20913\centering
20914\begin{tabulary}{\linewidth}[t]{|T|T|}
20915\hline
20916
20917\sphinxcode{KRB5\_NT\_ENT\_PRINCIPAL\_AND\_ID}
20918&
20919\sphinxcode{-130}
20920\\
20921\hline
20922\end{tabulary}
20923\par
20924\sphinxattableend\end{savenotes}
20925
20926
20927\subsubsection{KRB5\_NT\_MS\_PRINCIPAL}
20928\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)}
20929
20930\begin{fulllineitems}
20931\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_MS_PRINCIPAL:KRB5_NT_MS_PRINCIPAL}}\pysigline{\sphinxbfcode{KRB5\_NT\_MS\_PRINCIPAL}}
20932\end{fulllineitems}
20933
20934
20935Windows 2000 UPN and SID.
20936
20937
20938\begin{savenotes}\sphinxattablestart
20939\centering
20940\begin{tabulary}{\linewidth}[t]{|T|T|}
20941\hline
20942
20943\sphinxcode{KRB5\_NT\_MS\_PRINCIPAL}
20944&
20945\sphinxcode{-128}
20946\\
20947\hline
20948\end{tabulary}
20949\par
20950\sphinxattableend\end{savenotes}
20951
20952
20953\subsubsection{KRB5\_NT\_MS\_PRINCIPAL\_AND\_ID}
20954\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)}
20955
20956\begin{fulllineitems}
20957\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}}
20958\end{fulllineitems}
20959
20960
20961NT 4 style name.
20962
20963
20964\begin{savenotes}\sphinxattablestart
20965\centering
20966\begin{tabulary}{\linewidth}[t]{|T|T|}
20967\hline
20968
20969\sphinxcode{KRB5\_NT\_MS\_PRINCIPAL\_AND\_ID}
20970&
20971\sphinxcode{-129}
20972\\
20973\hline
20974\end{tabulary}
20975\par
20976\sphinxattableend\end{savenotes}
20977
20978
20979\subsubsection{KRB5\_NT\_PRINCIPAL}
20980\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)}
20981
20982\begin{fulllineitems}
20983\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_PRINCIPAL:KRB5_NT_PRINCIPAL}}\pysigline{\sphinxbfcode{KRB5\_NT\_PRINCIPAL}}
20984\end{fulllineitems}
20985
20986
20987Just the name of the principal as in DCE, or for users.
20988
20989
20990\begin{savenotes}\sphinxattablestart
20991\centering
20992\begin{tabulary}{\linewidth}[t]{|T|T|}
20993\hline
20994
20995\sphinxcode{KRB5\_NT\_PRINCIPAL}
20996&
20997\sphinxcode{1}
20998\\
20999\hline
21000\end{tabulary}
21001\par
21002\sphinxattableend\end{savenotes}
21003
21004
21005\subsubsection{KRB5\_NT\_SMTP\_NAME}
21006\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)}
21007
21008\begin{fulllineitems}
21009\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_SMTP_NAME:KRB5_NT_SMTP_NAME}}\pysigline{\sphinxbfcode{KRB5\_NT\_SMTP\_NAME}}
21010\end{fulllineitems}
21011
21012
21013Name in form of SMTP email name.
21014
21015
21016\begin{savenotes}\sphinxattablestart
21017\centering
21018\begin{tabulary}{\linewidth}[t]{|T|T|}
21019\hline
21020
21021\sphinxcode{KRB5\_NT\_SMTP\_NAME}
21022&
21023\sphinxcode{7}
21024\\
21025\hline
21026\end{tabulary}
21027\par
21028\sphinxattableend\end{savenotes}
21029
21030
21031\subsubsection{KRB5\_NT\_SRV\_HST}
21032\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)}
21033
21034\begin{fulllineitems}
21035\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_HST:KRB5_NT_SRV_HST}}\pysigline{\sphinxbfcode{KRB5\_NT\_SRV\_HST}}
21036\end{fulllineitems}
21037
21038
21039Service with host name as instance (telnet, rcommands)
21040
21041
21042\begin{savenotes}\sphinxattablestart
21043\centering
21044\begin{tabulary}{\linewidth}[t]{|T|T|}
21045\hline
21046
21047\sphinxcode{KRB5\_NT\_SRV\_HST}
21048&
21049\sphinxcode{3}
21050\\
21051\hline
21052\end{tabulary}
21053\par
21054\sphinxattableend\end{savenotes}
21055
21056
21057\subsubsection{KRB5\_NT\_SRV\_INST}
21058\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)}
21059
21060\begin{fulllineitems}
21061\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_INST:KRB5_NT_SRV_INST}}\pysigline{\sphinxbfcode{KRB5\_NT\_SRV\_INST}}
21062\end{fulllineitems}
21063
21064
21065Service and other unique instance (krbtgt)
21066
21067
21068\begin{savenotes}\sphinxattablestart
21069\centering
21070\begin{tabulary}{\linewidth}[t]{|T|T|}
21071\hline
21072
21073\sphinxcode{KRB5\_NT\_SRV\_INST}
21074&
21075\sphinxcode{2}
21076\\
21077\hline
21078\end{tabulary}
21079\par
21080\sphinxattableend\end{savenotes}
21081
21082
21083\subsubsection{KRB5\_NT\_SRV\_XHST}
21084\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)}
21085
21086\begin{fulllineitems}
21087\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_SRV_XHST:KRB5_NT_SRV_XHST}}\pysigline{\sphinxbfcode{KRB5\_NT\_SRV\_XHST}}
21088\end{fulllineitems}
21089
21090
21091Service with host as remaining components.
21092
21093
21094\begin{savenotes}\sphinxattablestart
21095\centering
21096\begin{tabulary}{\linewidth}[t]{|T|T|}
21097\hline
21098
21099\sphinxcode{KRB5\_NT\_SRV\_XHST}
21100&
21101\sphinxcode{4}
21102\\
21103\hline
21104\end{tabulary}
21105\par
21106\sphinxattableend\end{savenotes}
21107
21108
21109\subsubsection{KRB5\_NT\_UID}
21110\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)}
21111
21112\begin{fulllineitems}
21113\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_UID:KRB5_NT_UID}}\pysigline{\sphinxbfcode{KRB5\_NT\_UID}}
21114\end{fulllineitems}
21115
21116
21117Unique ID.
21118
21119
21120\begin{savenotes}\sphinxattablestart
21121\centering
21122\begin{tabulary}{\linewidth}[t]{|T|T|}
21123\hline
21124
21125\sphinxcode{KRB5\_NT\_UID}
21126&
21127\sphinxcode{5}
21128\\
21129\hline
21130\end{tabulary}
21131\par
21132\sphinxattableend\end{savenotes}
21133
21134
21135\subsubsection{KRB5\_NT\_UNKNOWN}
21136\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)}
21137
21138\begin{fulllineitems}
21139\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_UNKNOWN:KRB5_NT_UNKNOWN}}\pysigline{\sphinxbfcode{KRB5\_NT\_UNKNOWN}}
21140\end{fulllineitems}
21141
21142
21143Name type not known.
21144
21145
21146\begin{savenotes}\sphinxattablestart
21147\centering
21148\begin{tabulary}{\linewidth}[t]{|T|T|}
21149\hline
21150
21151\sphinxcode{KRB5\_NT\_UNKNOWN}
21152&
21153\sphinxcode{0}
21154\\
21155\hline
21156\end{tabulary}
21157\par
21158\sphinxattableend\end{savenotes}
21159
21160
21161\subsubsection{KRB5\_NT\_WELLKNOWN}
21162\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)}
21163
21164\begin{fulllineitems}
21165\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_WELLKNOWN:KRB5_NT_WELLKNOWN}}\pysigline{\sphinxbfcode{KRB5\_NT\_WELLKNOWN}}
21166\end{fulllineitems}
21167
21168
21169Well-known (special) principal.
21170
21171
21172\begin{savenotes}\sphinxattablestart
21173\centering
21174\begin{tabulary}{\linewidth}[t]{|T|T|}
21175\hline
21176
21177\sphinxcode{KRB5\_NT\_WELLKNOWN}
21178&
21179\sphinxcode{11}
21180\\
21181\hline
21182\end{tabulary}
21183\par
21184\sphinxattableend\end{savenotes}
21185
21186
21187\subsubsection{KRB5\_NT\_X500\_PRINCIPAL}
21188\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)}
21189
21190\begin{fulllineitems}
21191\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_NT_X500_PRINCIPAL:KRB5_NT_X500_PRINCIPAL}}\pysigline{\sphinxbfcode{KRB5\_NT\_X500\_PRINCIPAL}}
21192\end{fulllineitems}
21193
21194
21195PKINIT.
21196
21197
21198\begin{savenotes}\sphinxattablestart
21199\centering
21200\begin{tabulary}{\linewidth}[t]{|T|T|}
21201\hline
21202
21203\sphinxcode{KRB5\_NT\_X500\_PRINCIPAL}
21204&
21205\sphinxcode{6}
21206\\
21207\hline
21208\end{tabulary}
21209\par
21210\sphinxattableend\end{savenotes}
21211
21212
21213\subsubsection{KRB5\_PAC\_CLIENT\_INFO}
21214\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)}
21215
21216\begin{fulllineitems}
21217\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_CLIENT_INFO:KRB5_PAC_CLIENT_INFO}}\pysigline{\sphinxbfcode{KRB5\_PAC\_CLIENT\_INFO}}
21218\end{fulllineitems}
21219
21220
21221Client name and ticket info.
21222
21223
21224\begin{savenotes}\sphinxattablestart
21225\centering
21226\begin{tabulary}{\linewidth}[t]{|T|T|}
21227\hline
21228
21229\sphinxcode{KRB5\_PAC\_CLIENT\_INFO}
21230&
21231\sphinxcode{10}
21232\\
21233\hline
21234\end{tabulary}
21235\par
21236\sphinxattableend\end{savenotes}
21237
21238
21239\subsubsection{KRB5\_PAC\_CREDENTIALS\_INFO}
21240\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)}
21241
21242\begin{fulllineitems}
21243\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_CREDENTIALS_INFO:KRB5_PAC_CREDENTIALS_INFO}}\pysigline{\sphinxbfcode{KRB5\_PAC\_CREDENTIALS\_INFO}}
21244\end{fulllineitems}
21245
21246
21247Credentials information.
21248
21249
21250\begin{savenotes}\sphinxattablestart
21251\centering
21252\begin{tabulary}{\linewidth}[t]{|T|T|}
21253\hline
21254
21255\sphinxcode{KRB5\_PAC\_CREDENTIALS\_INFO}
21256&
21257\sphinxcode{2}
21258\\
21259\hline
21260\end{tabulary}
21261\par
21262\sphinxattableend\end{savenotes}
21263
21264
21265\subsubsection{KRB5\_PAC\_DELEGATION\_INFO}
21266\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)}
21267
21268\begin{fulllineitems}
21269\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_DELEGATION_INFO:KRB5_PAC_DELEGATION_INFO}}\pysigline{\sphinxbfcode{KRB5\_PAC\_DELEGATION\_INFO}}
21270\end{fulllineitems}
21271
21272
21273Constrained delegation info.
21274
21275
21276\begin{savenotes}\sphinxattablestart
21277\centering
21278\begin{tabulary}{\linewidth}[t]{|T|T|}
21279\hline
21280
21281\sphinxcode{KRB5\_PAC\_DELEGATION\_INFO}
21282&
21283\sphinxcode{11}
21284\\
21285\hline
21286\end{tabulary}
21287\par
21288\sphinxattableend\end{savenotes}
21289
21290
21291\subsubsection{KRB5\_PAC\_LOGON\_INFO}
21292\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)}
21293
21294\begin{fulllineitems}
21295\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_LOGON_INFO:KRB5_PAC_LOGON_INFO}}\pysigline{\sphinxbfcode{KRB5\_PAC\_LOGON\_INFO}}
21296\end{fulllineitems}
21297
21298
21299Logon information.
21300
21301
21302\begin{savenotes}\sphinxattablestart
21303\centering
21304\begin{tabulary}{\linewidth}[t]{|T|T|}
21305\hline
21306
21307\sphinxcode{KRB5\_PAC\_LOGON\_INFO}
21308&
21309\sphinxcode{1}
21310\\
21311\hline
21312\end{tabulary}
21313\par
21314\sphinxattableend\end{savenotes}
21315
21316
21317\subsubsection{KRB5\_PAC\_PRIVSVR\_CHECKSUM}
21318\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)}
21319
21320\begin{fulllineitems}
21321\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM:KRB5_PAC_PRIVSVR_CHECKSUM}}\pysigline{\sphinxbfcode{KRB5\_PAC\_PRIVSVR\_CHECKSUM}}
21322\end{fulllineitems}
21323
21324
21325KDC checksum.
21326
21327
21328\begin{savenotes}\sphinxattablestart
21329\centering
21330\begin{tabulary}{\linewidth}[t]{|T|T|}
21331\hline
21332
21333\sphinxcode{KRB5\_PAC\_PRIVSVR\_CHECKSUM}
21334&
21335\sphinxcode{7}
21336\\
21337\hline
21338\end{tabulary}
21339\par
21340\sphinxattableend\end{savenotes}
21341
21342
21343\subsubsection{KRB5\_PAC\_SERVER\_CHECKSUM}
21344\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)}
21345
21346\begin{fulllineitems}
21347\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM:KRB5_PAC_SERVER_CHECKSUM}}\pysigline{\sphinxbfcode{KRB5\_PAC\_SERVER\_CHECKSUM}}
21348\end{fulllineitems}
21349
21350
21351Server checksum.
21352
21353
21354\begin{savenotes}\sphinxattablestart
21355\centering
21356\begin{tabulary}{\linewidth}[t]{|T|T|}
21357\hline
21358
21359\sphinxcode{KRB5\_PAC\_SERVER\_CHECKSUM}
21360&
21361\sphinxcode{6}
21362\\
21363\hline
21364\end{tabulary}
21365\par
21366\sphinxattableend\end{savenotes}
21367
21368
21369\subsubsection{KRB5\_PAC\_UPN\_DNS\_INFO}
21370\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)}
21371
21372\begin{fulllineitems}
21373\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PAC_UPN_DNS_INFO:KRB5_PAC_UPN_DNS_INFO}}\pysigline{\sphinxbfcode{KRB5\_PAC\_UPN\_DNS\_INFO}}
21374\end{fulllineitems}
21375
21376
21377User principal name and DNS info.
21378
21379
21380\begin{savenotes}\sphinxattablestart
21381\centering
21382\begin{tabulary}{\linewidth}[t]{|T|T|}
21383\hline
21384
21385\sphinxcode{KRB5\_PAC\_UPN\_DNS\_INFO}
21386&
21387\sphinxcode{12}
21388\\
21389\hline
21390\end{tabulary}
21391\par
21392\sphinxattableend\end{savenotes}
21393
21394
21395\subsubsection{KRB5\_PADATA\_AFS3\_SALT}
21396\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)}
21397
21398\begin{fulllineitems}
21399\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AFS3_SALT:KRB5_PADATA_AFS3_SALT}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_AFS3\_SALT}}
21400\end{fulllineitems}
21401
21402
21403Cygnus.
21404
21405RFC 4120, 3961
21406
21407
21408\begin{savenotes}\sphinxattablestart
21409\centering
21410\begin{tabulary}{\linewidth}[t]{|T|T|}
21411\hline
21412
21413\sphinxcode{KRB5\_PADATA\_AFS3\_SALT}
21414&
21415\sphinxcode{10}
21416\\
21417\hline
21418\end{tabulary}
21419\par
21420\sphinxattableend\end{savenotes}
21421
21422
21423\subsubsection{KRB5\_PADATA\_AP\_REQ}
21424\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)}
21425
21426\begin{fulllineitems}
21427\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AP_REQ:KRB5_PADATA_AP_REQ}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_AP\_REQ}}
21428\end{fulllineitems}
21429
21430
21431
21432\begin{savenotes}\sphinxattablestart
21433\centering
21434\begin{tabulary}{\linewidth}[t]{|T|T|}
21435\hline
21436
21437\sphinxcode{KRB5\_PADATA\_AP\_REQ}
21438&
21439\sphinxcode{1}
21440\\
21441\hline
21442\end{tabulary}
21443\par
21444\sphinxattableend\end{savenotes}
21445
21446
21447\subsubsection{KRB5\_PADATA\_AS\_CHECKSUM}
21448\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)}
21449
21450\begin{fulllineitems}
21451\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_CHECKSUM:KRB5_PADATA_AS_CHECKSUM}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_AS\_CHECKSUM}}
21452\end{fulllineitems}
21453
21454
21455AS checksum.
21456
21457
21458\begin{savenotes}\sphinxattablestart
21459\centering
21460\begin{tabulary}{\linewidth}[t]{|T|T|}
21461\hline
21462
21463\sphinxcode{KRB5\_PADATA\_AS\_CHECKSUM}
21464&
21465\sphinxcode{132}
21466\\
21467\hline
21468\end{tabulary}
21469\par
21470\sphinxattableend\end{savenotes}
21471
21472
21473\subsubsection{KRB5\_PADATA\_AS\_FRESHNESS}
21474\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)}
21475
21476\begin{fulllineitems}
21477\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_AS_FRESHNESS:KRB5_PADATA_AS_FRESHNESS}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_AS\_FRESHNESS}}
21478\end{fulllineitems}
21479
21480
21481RFC 8070.
21482
21483
21484\begin{savenotes}\sphinxattablestart
21485\centering
21486\begin{tabulary}{\linewidth}[t]{|T|T|}
21487\hline
21488
21489\sphinxcode{KRB5\_PADATA\_AS\_FRESHNESS}
21490&
21491\sphinxcode{150}
21492\\
21493\hline
21494\end{tabulary}
21495\par
21496\sphinxattableend\end{savenotes}
21497
21498
21499\subsubsection{KRB5\_PADATA\_ENCRYPTED\_CHALLENGE}
21500\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)}
21501
21502\begin{fulllineitems}
21503\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENCRYPTED_CHALLENGE:KRB5_PADATA_ENCRYPTED_CHALLENGE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_ENCRYPTED\_CHALLENGE}}
21504\end{fulllineitems}
21505
21506
21507RFC 6113.
21508
21509
21510\begin{savenotes}\sphinxattablestart
21511\centering
21512\begin{tabulary}{\linewidth}[t]{|T|T|}
21513\hline
21514
21515\sphinxcode{KRB5\_PADATA\_ENCRYPTED\_CHALLENGE}
21516&
21517\sphinxcode{138}
21518\\
21519\hline
21520\end{tabulary}
21521\par
21522\sphinxattableend\end{savenotes}
21523
21524
21525\subsubsection{KRB5\_PADATA\_ENC\_SANDIA\_SECURID}
21526\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)}
21527
21528\begin{fulllineitems}
21529\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_SANDIA_SECURID:KRB5_PADATA_ENC_SANDIA_SECURID}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_ENC\_SANDIA\_SECURID}}
21530\end{fulllineitems}
21531
21532
21533SecurId passcode.
21534
21535RFC 4120
21536
21537
21538\begin{savenotes}\sphinxattablestart
21539\centering
21540\begin{tabulary}{\linewidth}[t]{|T|T|}
21541\hline
21542
21543\sphinxcode{KRB5\_PADATA\_ENC\_SANDIA\_SECURID}
21544&
21545\sphinxcode{6}
21546\\
21547\hline
21548\end{tabulary}
21549\par
21550\sphinxattableend\end{savenotes}
21551
21552
21553\subsubsection{KRB5\_PADATA\_ENC\_TIMESTAMP}
21554\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)}
21555
21556\begin{fulllineitems}
21557\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_TIMESTAMP:KRB5_PADATA_ENC_TIMESTAMP}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_ENC\_TIMESTAMP}}
21558\end{fulllineitems}
21559
21560
21561RFC 4120.
21562
21563
21564\begin{savenotes}\sphinxattablestart
21565\centering
21566\begin{tabulary}{\linewidth}[t]{|T|T|}
21567\hline
21568
21569\sphinxcode{KRB5\_PADATA\_ENC\_TIMESTAMP}
21570&
21571\sphinxcode{2}
21572\\
21573\hline
21574\end{tabulary}
21575\par
21576\sphinxattableend\end{savenotes}
21577
21578
21579\subsubsection{KRB5\_PADATA\_ENC\_UNIX\_TIME}
21580\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)}
21581
21582\begin{fulllineitems}
21583\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ENC_UNIX_TIME:KRB5_PADATA_ENC_UNIX_TIME}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_ENC\_UNIX\_TIME}}
21584\end{fulllineitems}
21585
21586
21587timestamp encrypted in key.
21588
21589RFC 4120
21590
21591
21592\begin{savenotes}\sphinxattablestart
21593\centering
21594\begin{tabulary}{\linewidth}[t]{|T|T|}
21595\hline
21596
21597\sphinxcode{KRB5\_PADATA\_ENC\_UNIX\_TIME}
21598&
21599\sphinxcode{5}
21600\\
21601\hline
21602\end{tabulary}
21603\par
21604\sphinxattableend\end{savenotes}
21605
21606
21607\subsubsection{KRB5\_PADATA\_ETYPE\_INFO}
21608\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)}
21609
21610\begin{fulllineitems}
21611\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO:KRB5_PADATA_ETYPE_INFO}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_ETYPE\_INFO}}
21612\end{fulllineitems}
21613
21614
21615Etype info for preauth.
21616
21617RFC 4120
21618
21619
21620\begin{savenotes}\sphinxattablestart
21621\centering
21622\begin{tabulary}{\linewidth}[t]{|T|T|}
21623\hline
21624
21625\sphinxcode{KRB5\_PADATA\_ETYPE\_INFO}
21626&
21627\sphinxcode{11}
21628\\
21629\hline
21630\end{tabulary}
21631\par
21632\sphinxattableend\end{savenotes}
21633
21634
21635\subsubsection{KRB5\_PADATA\_ETYPE\_INFO2}
21636\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)}
21637
21638\begin{fulllineitems}
21639\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_ETYPE_INFO2:KRB5_PADATA_ETYPE_INFO2}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_ETYPE\_INFO2}}
21640\end{fulllineitems}
21641
21642
21643RFC 4120.
21644
21645
21646\begin{savenotes}\sphinxattablestart
21647\centering
21648\begin{tabulary}{\linewidth}[t]{|T|T|}
21649\hline
21650
21651\sphinxcode{KRB5\_PADATA\_ETYPE\_INFO2}
21652&
21653\sphinxcode{19}
21654\\
21655\hline
21656\end{tabulary}
21657\par
21658\sphinxattableend\end{savenotes}
21659
21660
21661\subsubsection{KRB5\_PADATA\_FOR\_USER}
21662\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)}
21663
21664\begin{fulllineitems}
21665\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FOR_USER:KRB5_PADATA_FOR_USER}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_FOR\_USER}}
21666\end{fulllineitems}
21667
21668
21669username protocol transition request
21670
21671
21672\begin{savenotes}\sphinxattablestart
21673\centering
21674\begin{tabulary}{\linewidth}[t]{|T|T|}
21675\hline
21676
21677\sphinxcode{KRB5\_PADATA\_FOR\_USER}
21678&
21679\sphinxcode{129}
21680\\
21681\hline
21682\end{tabulary}
21683\par
21684\sphinxattableend\end{savenotes}
21685
21686
21687\subsubsection{KRB5\_PADATA\_FX\_COOKIE}
21688\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)}
21689
21690\begin{fulllineitems}
21691\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_COOKIE:KRB5_PADATA_FX_COOKIE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_FX\_COOKIE}}
21692\end{fulllineitems}
21693
21694
21695RFC 6113.
21696
21697
21698\begin{savenotes}\sphinxattablestart
21699\centering
21700\begin{tabulary}{\linewidth}[t]{|T|T|}
21701\hline
21702
21703\sphinxcode{KRB5\_PADATA\_FX\_COOKIE}
21704&
21705\sphinxcode{133}
21706\\
21707\hline
21708\end{tabulary}
21709\par
21710\sphinxattableend\end{savenotes}
21711
21712
21713\subsubsection{KRB5\_PADATA\_FX\_ERROR}
21714\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)}
21715
21716\begin{fulllineitems}
21717\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_ERROR:KRB5_PADATA_FX_ERROR}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_FX\_ERROR}}
21718\end{fulllineitems}
21719
21720
21721RFC 6113.
21722
21723
21724\begin{savenotes}\sphinxattablestart
21725\centering
21726\begin{tabulary}{\linewidth}[t]{|T|T|}
21727\hline
21728
21729\sphinxcode{KRB5\_PADATA\_FX\_ERROR}
21730&
21731\sphinxcode{137}
21732\\
21733\hline
21734\end{tabulary}
21735\par
21736\sphinxattableend\end{savenotes}
21737
21738
21739\subsubsection{KRB5\_PADATA\_FX\_FAST}
21740\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)}
21741
21742\begin{fulllineitems}
21743\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_FX_FAST:KRB5_PADATA_FX_FAST}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_FX\_FAST}}
21744\end{fulllineitems}
21745
21746
21747RFC 6113.
21748
21749
21750\begin{savenotes}\sphinxattablestart
21751\centering
21752\begin{tabulary}{\linewidth}[t]{|T|T|}
21753\hline
21754
21755\sphinxcode{KRB5\_PADATA\_FX\_FAST}
21756&
21757\sphinxcode{136}
21758\\
21759\hline
21760\end{tabulary}
21761\par
21762\sphinxattableend\end{savenotes}
21763
21764
21765\subsubsection{KRB5\_PADATA\_GET\_FROM\_TYPED\_DATA}
21766\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)}
21767
21768\begin{fulllineitems}
21769\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}}
21770\end{fulllineitems}
21771
21772
21773Embedded in typed data.
21774
21775RFC 4120
21776
21777
21778\begin{savenotes}\sphinxattablestart
21779\centering
21780\begin{tabulary}{\linewidth}[t]{|T|T|}
21781\hline
21782
21783\sphinxcode{KRB5\_PADATA\_GET\_FROM\_TYPED\_DATA}
21784&
21785\sphinxcode{22}
21786\\
21787\hline
21788\end{tabulary}
21789\par
21790\sphinxattableend\end{savenotes}
21791
21792
21793\subsubsection{KRB5\_PADATA\_NONE}
21794\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)}
21795
21796\begin{fulllineitems}
21797\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_NONE:KRB5_PADATA_NONE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_NONE}}
21798\end{fulllineitems}
21799
21800
21801
21802\begin{savenotes}\sphinxattablestart
21803\centering
21804\begin{tabulary}{\linewidth}[t]{|T|T|}
21805\hline
21806
21807\sphinxcode{KRB5\_PADATA\_NONE}
21808&
21809\sphinxcode{0}
21810\\
21811\hline
21812\end{tabulary}
21813\par
21814\sphinxattableend\end{savenotes}
21815
21816
21817\subsubsection{KRB5\_PADATA\_OSF\_DCE}
21818\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)}
21819
21820\begin{fulllineitems}
21821\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OSF_DCE:KRB5_PADATA_OSF_DCE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_OSF\_DCE}}
21822\end{fulllineitems}
21823
21824
21825OSF DCE.
21826
21827RFC 4120
21828
21829
21830\begin{savenotes}\sphinxattablestart
21831\centering
21832\begin{tabulary}{\linewidth}[t]{|T|T|}
21833\hline
21834
21835\sphinxcode{KRB5\_PADATA\_OSF\_DCE}
21836&
21837\sphinxcode{8}
21838\\
21839\hline
21840\end{tabulary}
21841\par
21842\sphinxattableend\end{savenotes}
21843
21844
21845\subsubsection{KRB5\_PADATA\_OTP\_CHALLENGE}
21846\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)}
21847
21848\begin{fulllineitems}
21849\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_CHALLENGE:KRB5_PADATA_OTP_CHALLENGE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_OTP\_CHALLENGE}}
21850\end{fulllineitems}
21851
21852
21853RFC 6560 section 4.1.
21854
21855
21856\begin{savenotes}\sphinxattablestart
21857\centering
21858\begin{tabulary}{\linewidth}[t]{|T|T|}
21859\hline
21860
21861\sphinxcode{KRB5\_PADATA\_OTP\_CHALLENGE}
21862&
21863\sphinxcode{141}
21864\\
21865\hline
21866\end{tabulary}
21867\par
21868\sphinxattableend\end{savenotes}
21869
21870
21871\subsubsection{KRB5\_PADATA\_OTP\_PIN\_CHANGE}
21872\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)}
21873
21874\begin{fulllineitems}
21875\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_PIN_CHANGE:KRB5_PADATA_OTP_PIN_CHANGE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_OTP\_PIN\_CHANGE}}
21876\end{fulllineitems}
21877
21878
21879RFC 6560 section 4.3.
21880
21881
21882\begin{savenotes}\sphinxattablestart
21883\centering
21884\begin{tabulary}{\linewidth}[t]{|T|T|}
21885\hline
21886
21887\sphinxcode{KRB5\_PADATA\_OTP\_PIN\_CHANGE}
21888&
21889\sphinxcode{144}
21890\\
21891\hline
21892\end{tabulary}
21893\par
21894\sphinxattableend\end{savenotes}
21895
21896
21897\subsubsection{KRB5\_PADATA\_OTP\_REQUEST}
21898\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)}
21899
21900\begin{fulllineitems}
21901\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_OTP_REQUEST:KRB5_PADATA_OTP_REQUEST}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_OTP\_REQUEST}}
21902\end{fulllineitems}
21903
21904
21905RFC 6560 section 4.2.
21906
21907
21908\begin{savenotes}\sphinxattablestart
21909\centering
21910\begin{tabulary}{\linewidth}[t]{|T|T|}
21911\hline
21912
21913\sphinxcode{KRB5\_PADATA\_OTP\_REQUEST}
21914&
21915\sphinxcode{142}
21916\\
21917\hline
21918\end{tabulary}
21919\par
21920\sphinxattableend\end{savenotes}
21921
21922
21923\subsubsection{KRB5\_PADATA\_PAC\_OPTIONS}
21924\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)}
21925
21926\begin{fulllineitems}
21927\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_OPTIONS:KRB5_PADATA_PAC_OPTIONS}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PAC\_OPTIONS}}
21928\end{fulllineitems}
21929
21930
21931MS-KILE and MS-SFU.
21932
21933
21934\begin{savenotes}\sphinxattablestart
21935\centering
21936\begin{tabulary}{\linewidth}[t]{|T|T|}
21937\hline
21938
21939\sphinxcode{KRB5\_PADATA\_PAC\_OPTIONS}
21940&
21941\sphinxcode{167}
21942\\
21943\hline
21944\end{tabulary}
21945\par
21946\sphinxattableend\end{savenotes}
21947
21948
21949\subsubsection{KRB5\_PADATA\_PAC\_REQUEST}
21950\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)}
21951
21952\begin{fulllineitems}
21953\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PAC_REQUEST:KRB5_PADATA_PAC_REQUEST}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PAC\_REQUEST}}
21954\end{fulllineitems}
21955
21956
21957include Windows PAC
21958
21959
21960\begin{savenotes}\sphinxattablestart
21961\centering
21962\begin{tabulary}{\linewidth}[t]{|T|T|}
21963\hline
21964
21965\sphinxcode{KRB5\_PADATA\_PAC\_REQUEST}
21966&
21967\sphinxcode{128}
21968\\
21969\hline
21970\end{tabulary}
21971\par
21972\sphinxattableend\end{savenotes}
21973
21974
21975\subsubsection{KRB5\_PADATA\_PKINIT\_KX}
21976\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)}
21977
21978\begin{fulllineitems}
21979\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PKINIT_KX:KRB5_PADATA_PKINIT_KX}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PKINIT\_KX}}
21980\end{fulllineitems}
21981
21982
21983RFC 6112.
21984
21985
21986\begin{savenotes}\sphinxattablestart
21987\centering
21988\begin{tabulary}{\linewidth}[t]{|T|T|}
21989\hline
21990
21991\sphinxcode{KRB5\_PADATA\_PKINIT\_KX}
21992&
21993\sphinxcode{147}
21994\\
21995\hline
21996\end{tabulary}
21997\par
21998\sphinxattableend\end{savenotes}
21999
22000
22001\subsubsection{KRB5\_PADATA\_PK\_AS\_REP}
22002\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)}
22003
22004\begin{fulllineitems}
22005\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REP:KRB5_PADATA_PK_AS_REP}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PK\_AS\_REP}}
22006\end{fulllineitems}
22007
22008
22009PKINIT.
22010
22011RFC 4556
22012
22013
22014\begin{savenotes}\sphinxattablestart
22015\centering
22016\begin{tabulary}{\linewidth}[t]{|T|T|}
22017\hline
22018
22019\sphinxcode{KRB5\_PADATA\_PK\_AS\_REP}
22020&
22021\sphinxcode{17}
22022\\
22023\hline
22024\end{tabulary}
22025\par
22026\sphinxattableend\end{savenotes}
22027
22028
22029\subsubsection{KRB5\_PADATA\_PK\_AS\_REP\_OLD}
22030\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)}
22031
22032\begin{fulllineitems}
22033\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}}
22034\end{fulllineitems}
22035
22036
22037PKINIT.
22038
22039
22040\begin{savenotes}\sphinxattablestart
22041\centering
22042\begin{tabulary}{\linewidth}[t]{|T|T|}
22043\hline
22044
22045\sphinxcode{KRB5\_PADATA\_PK\_AS\_REP\_OLD}
22046&
22047\sphinxcode{15}
22048\\
22049\hline
22050\end{tabulary}
22051\par
22052\sphinxattableend\end{savenotes}
22053
22054
22055\subsubsection{KRB5\_PADATA\_PK\_AS\_REQ}
22056\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)}
22057
22058\begin{fulllineitems}
22059\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PK_AS_REQ:KRB5_PADATA_PK_AS_REQ}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PK\_AS\_REQ}}
22060\end{fulllineitems}
22061
22062
22063PKINIT.
22064
22065RFC 4556
22066
22067
22068\begin{savenotes}\sphinxattablestart
22069\centering
22070\begin{tabulary}{\linewidth}[t]{|T|T|}
22071\hline
22072
22073\sphinxcode{KRB5\_PADATA\_PK\_AS\_REQ}
22074&
22075\sphinxcode{16}
22076\\
22077\hline
22078\end{tabulary}
22079\par
22080\sphinxattableend\end{savenotes}
22081
22082
22083\subsubsection{KRB5\_PADATA\_PK\_AS\_REQ\_OLD}
22084\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)}
22085
22086\begin{fulllineitems}
22087\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}}
22088\end{fulllineitems}
22089
22090
22091PKINIT.
22092
22093
22094\begin{savenotes}\sphinxattablestart
22095\centering
22096\begin{tabulary}{\linewidth}[t]{|T|T|}
22097\hline
22098
22099\sphinxcode{KRB5\_PADATA\_PK\_AS\_REQ\_OLD}
22100&
22101\sphinxcode{14}
22102\\
22103\hline
22104\end{tabulary}
22105\par
22106\sphinxattableend\end{savenotes}
22107
22108
22109\subsubsection{KRB5\_PADATA\_PW\_SALT}
22110\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)}
22111
22112\begin{fulllineitems}
22113\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_PW_SALT:KRB5_PADATA_PW_SALT}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_PW\_SALT}}
22114\end{fulllineitems}
22115
22116
22117RFC 4120.
22118
22119
22120\begin{savenotes}\sphinxattablestart
22121\centering
22122\begin{tabulary}{\linewidth}[t]{|T|T|}
22123\hline
22124
22125\sphinxcode{KRB5\_PADATA\_PW\_SALT}
22126&
22127\sphinxcode{3}
22128\\
22129\hline
22130\end{tabulary}
22131\par
22132\sphinxattableend\end{savenotes}
22133
22134
22135\subsubsection{KRB5\_PADATA\_REFERRAL}
22136\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)}
22137
22138\begin{fulllineitems}
22139\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_REFERRAL:KRB5_PADATA_REFERRAL}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_REFERRAL}}
22140\end{fulllineitems}
22141
22142
22143draft referral system
22144
22145
22146\begin{savenotes}\sphinxattablestart
22147\centering
22148\begin{tabulary}{\linewidth}[t]{|T|T|}
22149\hline
22150
22151\sphinxcode{KRB5\_PADATA\_REFERRAL}
22152&
22153\sphinxcode{25}
22154\\
22155\hline
22156\end{tabulary}
22157\par
22158\sphinxattableend\end{savenotes}
22159
22160
22161\subsubsection{KRB5\_PADATA\_S4U\_X509\_USER}
22162\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)}
22163
22164\begin{fulllineitems}
22165\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_S4U_X509_USER:KRB5_PADATA_S4U_X509_USER}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_S4U\_X509\_USER}}
22166\end{fulllineitems}
22167
22168
22169certificate protocol transition request
22170
22171
22172\begin{savenotes}\sphinxattablestart
22173\centering
22174\begin{tabulary}{\linewidth}[t]{|T|T|}
22175\hline
22176
22177\sphinxcode{KRB5\_PADATA\_S4U\_X509\_USER}
22178&
22179\sphinxcode{130}
22180\\
22181\hline
22182\end{tabulary}
22183\par
22184\sphinxattableend\end{savenotes}
22185
22186
22187\subsubsection{KRB5\_PADATA\_SAM\_CHALLENGE}
22188\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)}
22189
22190\begin{fulllineitems}
22191\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE:KRB5_PADATA_SAM_CHALLENGE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SAM\_CHALLENGE}}
22192\end{fulllineitems}
22193
22194
22195SAM/OTP.
22196
22197
22198\begin{savenotes}\sphinxattablestart
22199\centering
22200\begin{tabulary}{\linewidth}[t]{|T|T|}
22201\hline
22202
22203\sphinxcode{KRB5\_PADATA\_SAM\_CHALLENGE}
22204&
22205\sphinxcode{12}
22206\\
22207\hline
22208\end{tabulary}
22209\par
22210\sphinxattableend\end{savenotes}
22211
22212
22213\subsubsection{KRB5\_PADATA\_SAM\_CHALLENGE\_2}
22214\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)}
22215
22216\begin{fulllineitems}
22217\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE_2:KRB5_PADATA_SAM_CHALLENGE_2}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SAM\_CHALLENGE\_2}}
22218\end{fulllineitems}
22219
22220
22221draft challenge system, updated
22222
22223
22224\begin{savenotes}\sphinxattablestart
22225\centering
22226\begin{tabulary}{\linewidth}[t]{|T|T|}
22227\hline
22228
22229\sphinxcode{KRB5\_PADATA\_SAM\_CHALLENGE\_2}
22230&
22231\sphinxcode{30}
22232\\
22233\hline
22234\end{tabulary}
22235\par
22236\sphinxattableend\end{savenotes}
22237
22238
22239\subsubsection{KRB5\_PADATA\_SAM\_REDIRECT}
22240\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)}
22241
22242\begin{fulllineitems}
22243\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_REDIRECT:KRB5_PADATA_SAM_REDIRECT}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SAM\_REDIRECT}}
22244\end{fulllineitems}
22245
22246
22247SAM/OTP.
22248
22249RFC 4120
22250
22251
22252\begin{savenotes}\sphinxattablestart
22253\centering
22254\begin{tabulary}{\linewidth}[t]{|T|T|}
22255\hline
22256
22257\sphinxcode{KRB5\_PADATA\_SAM\_REDIRECT}
22258&
22259\sphinxcode{21}
22260\\
22261\hline
22262\end{tabulary}
22263\par
22264\sphinxattableend\end{savenotes}
22265
22266
22267\subsubsection{KRB5\_PADATA\_SAM\_RESPONSE}
22268\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)}
22269
22270\begin{fulllineitems}
22271\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE:KRB5_PADATA_SAM_RESPONSE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SAM\_RESPONSE}}
22272\end{fulllineitems}
22273
22274
22275SAM/OTP.
22276
22277
22278\begin{savenotes}\sphinxattablestart
22279\centering
22280\begin{tabulary}{\linewidth}[t]{|T|T|}
22281\hline
22282
22283\sphinxcode{KRB5\_PADATA\_SAM\_RESPONSE}
22284&
22285\sphinxcode{13}
22286\\
22287\hline
22288\end{tabulary}
22289\par
22290\sphinxattableend\end{savenotes}
22291
22292
22293\subsubsection{KRB5\_PADATA\_SAM\_RESPONSE\_2}
22294\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)}
22295
22296\begin{fulllineitems}
22297\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE_2:KRB5_PADATA_SAM_RESPONSE_2}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SAM\_RESPONSE\_2}}
22298\end{fulllineitems}
22299
22300
22301draft challenge system, updated
22302
22303
22304\begin{savenotes}\sphinxattablestart
22305\centering
22306\begin{tabulary}{\linewidth}[t]{|T|T|}
22307\hline
22308
22309\sphinxcode{KRB5\_PADATA\_SAM\_RESPONSE\_2}
22310&
22311\sphinxcode{31}
22312\\
22313\hline
22314\end{tabulary}
22315\par
22316\sphinxattableend\end{savenotes}
22317
22318
22319\subsubsection{KRB5\_PADATA\_SESAME}
22320\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)}
22321
22322\begin{fulllineitems}
22323\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SESAME:KRB5_PADATA_SESAME}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SESAME}}
22324\end{fulllineitems}
22325
22326
22327Sesame project.
22328
22329RFC 4120
22330
22331
22332\begin{savenotes}\sphinxattablestart
22333\centering
22334\begin{tabulary}{\linewidth}[t]{|T|T|}
22335\hline
22336
22337\sphinxcode{KRB5\_PADATA\_SESAME}
22338&
22339\sphinxcode{7}
22340\\
22341\hline
22342\end{tabulary}
22343\par
22344\sphinxattableend\end{savenotes}
22345
22346
22347\subsubsection{KRB5\_PADATA\_SPAKE}
22348\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)}
22349
22350\begin{fulllineitems}
22351\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SPAKE:KRB5_PADATA_SPAKE}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SPAKE}}
22352\end{fulllineitems}
22353
22354
22355
22356\begin{savenotes}\sphinxattablestart
22357\centering
22358\begin{tabulary}{\linewidth}[t]{|T|T|}
22359\hline
22360
22361\sphinxcode{KRB5\_PADATA\_SPAKE}
22362&
22363\sphinxcode{151}
22364\\
22365\hline
22366\end{tabulary}
22367\par
22368\sphinxattableend\end{savenotes}
22369
22370
22371\subsubsection{KRB5\_PADATA\_SVR\_REFERRAL\_INFO}
22372\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)}
22373
22374\begin{fulllineitems}
22375\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_SVR_REFERRAL_INFO:KRB5_PADATA_SVR_REFERRAL_INFO}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_SVR\_REFERRAL\_INFO}}
22376\end{fulllineitems}
22377
22378
22379Windows 2000 referrals.
22380
22381RFC 6820
22382
22383
22384\begin{savenotes}\sphinxattablestart
22385\centering
22386\begin{tabulary}{\linewidth}[t]{|T|T|}
22387\hline
22388
22389\sphinxcode{KRB5\_PADATA\_SVR\_REFERRAL\_INFO}
22390&
22391\sphinxcode{20}
22392\\
22393\hline
22394\end{tabulary}
22395\par
22396\sphinxattableend\end{savenotes}
22397
22398
22399\subsubsection{KRB5\_PADATA\_TGS\_REQ}
22400\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)}
22401
22402\begin{fulllineitems}
22403\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_TGS_REQ:KRB5_PADATA_TGS_REQ}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_TGS\_REQ}}
22404\end{fulllineitems}
22405
22406
22407
22408\begin{savenotes}\sphinxattablestart
22409\centering
22410\begin{tabulary}{\linewidth}[t]{|T|T|}
22411\hline
22412
22413\sphinxcode{KRB5\_PADATA\_TGS\_REQ}
22414&
22415\sphinxcode{KRB5\_PADATA\_AP\_REQ}
22416\\
22417\hline
22418\end{tabulary}
22419\par
22420\sphinxattableend\end{savenotes}
22421
22422
22423\subsubsection{KRB5\_PADATA\_USE\_SPECIFIED\_KVNO}
22424\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)}
22425
22426\begin{fulllineitems}
22427\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PADATA_USE_SPECIFIED_KVNO:KRB5_PADATA_USE_SPECIFIED_KVNO}}\pysigline{\sphinxbfcode{KRB5\_PADATA\_USE\_SPECIFIED\_KVNO}}
22428\end{fulllineitems}
22429
22430
22431RFC 4120.
22432
22433
22434\begin{savenotes}\sphinxattablestart
22435\centering
22436\begin{tabulary}{\linewidth}[t]{|T|T|}
22437\hline
22438
22439\sphinxcode{KRB5\_PADATA\_USE\_SPECIFIED\_KVNO}
22440&
22441\sphinxcode{20}
22442\\
22443\hline
22444\end{tabulary}
22445\par
22446\sphinxattableend\end{savenotes}
22447
22448
22449\subsubsection{KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD}
22450\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)}
22451
22452\begin{fulllineitems}
22453\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD:KRB5_PRINCIPAL_COMPARE_CASEFOLD}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD}}
22454\end{fulllineitems}
22455
22456
22457case-insensitive
22458
22459
22460\begin{savenotes}\sphinxattablestart
22461\centering
22462\begin{tabulary}{\linewidth}[t]{|T|T|}
22463\hline
22464
22465\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_CASEFOLD}
22466&
22467\sphinxcode{4}
22468\\
22469\hline
22470\end{tabulary}
22471\par
22472\sphinxattableend\end{savenotes}
22473
22474
22475\subsubsection{KRB5\_PRINCIPAL\_COMPARE\_ENTERPRISE}
22476\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)}
22477
22478\begin{fulllineitems}
22479\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_ENTERPRISE:KRB5_PRINCIPAL_COMPARE_ENTERPRISE}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_COMPARE\_ENTERPRISE}}
22480\end{fulllineitems}
22481
22482
22483UPNs as real principals.
22484
22485
22486\begin{savenotes}\sphinxattablestart
22487\centering
22488\begin{tabulary}{\linewidth}[t]{|T|T|}
22489\hline
22490
22491\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_ENTERPRISE}
22492&
22493\sphinxcode{2}
22494\\
22495\hline
22496\end{tabulary}
22497\par
22498\sphinxattableend\end{savenotes}
22499
22500
22501\subsubsection{KRB5\_PRINCIPAL\_COMPARE\_IGNORE\_REALM}
22502\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)}
22503
22504\begin{fulllineitems}
22505\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_IGNORE_REALM:KRB5_PRINCIPAL_COMPARE_IGNORE_REALM}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_COMPARE\_IGNORE\_REALM}}
22506\end{fulllineitems}
22507
22508
22509ignore realm component
22510
22511
22512\begin{savenotes}\sphinxattablestart
22513\centering
22514\begin{tabulary}{\linewidth}[t]{|T|T|}
22515\hline
22516
22517\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_IGNORE\_REALM}
22518&
22519\sphinxcode{1}
22520\\
22521\hline
22522\end{tabulary}
22523\par
22524\sphinxattableend\end{savenotes}
22525
22526
22527\subsubsection{KRB5\_PRINCIPAL\_COMPARE\_UTF8}
22528\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)}
22529
22530\begin{fulllineitems}
22531\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8:KRB5_PRINCIPAL_COMPARE_UTF8}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_COMPARE\_UTF8}}
22532\end{fulllineitems}
22533
22534
22535treat principals as UTF-8
22536
22537
22538\begin{savenotes}\sphinxattablestart
22539\centering
22540\begin{tabulary}{\linewidth}[t]{|T|T|}
22541\hline
22542
22543\sphinxcode{KRB5\_PRINCIPAL\_COMPARE\_UTF8}
22544&
22545\sphinxcode{8}
22546\\
22547\hline
22548\end{tabulary}
22549\par
22550\sphinxattableend\end{savenotes}
22551
22552
22553\subsubsection{KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE}
22554\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)}
22555
22556\begin{fulllineitems}
22557\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE:KRB5_PRINCIPAL_PARSE_ENTERPRISE}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE}}
22558\end{fulllineitems}
22559
22560
22561Create single-component enterprise principle.
22562
22563
22564\begin{savenotes}\sphinxattablestart
22565\centering
22566\begin{tabulary}{\linewidth}[t]{|T|T|}
22567\hline
22568
22569\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_ENTERPRISE}
22570&
22571\sphinxcode{0x4}
22572\\
22573\hline
22574\end{tabulary}
22575\par
22576\sphinxattableend\end{savenotes}
22577
22578
22579\subsubsection{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM}
22580\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)}
22581
22582\begin{fulllineitems}
22583\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_IGNORE_REALM:KRB5_PRINCIPAL_PARSE_IGNORE_REALM}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM}}
22584\end{fulllineitems}
22585
22586
22587Ignore realm if present.
22588
22589
22590\begin{savenotes}\sphinxattablestart
22591\centering
22592\begin{tabulary}{\linewidth}[t]{|T|T|}
22593\hline
22594
22595\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_IGNORE\_REALM}
22596&
22597\sphinxcode{0x8}
22598\\
22599\hline
22600\end{tabulary}
22601\par
22602\sphinxattableend\end{savenotes}
22603
22604
22605\subsubsection{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM}
22606\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)}
22607
22608\begin{fulllineitems}
22609\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_REALM:KRB5_PRINCIPAL_PARSE_NO_REALM}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM}}
22610\end{fulllineitems}
22611
22612
22613Error if realm is present.
22614
22615
22616\begin{savenotes}\sphinxattablestart
22617\centering
22618\begin{tabulary}{\linewidth}[t]{|T|T|}
22619\hline
22620
22621\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_NO\_REALM}
22622&
22623\sphinxcode{0x1}
22624\\
22625\hline
22626\end{tabulary}
22627\par
22628\sphinxattableend\end{savenotes}
22629
22630
22631\subsubsection{KRB5\_PRINCIPAL\_PARSE\_REQUIRE\_REALM}
22632\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)}
22633
22634\begin{fulllineitems}
22635\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_PARSE_REQUIRE_REALM:KRB5_PRINCIPAL_PARSE_REQUIRE_REALM}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_PARSE\_REQUIRE\_REALM}}
22636\end{fulllineitems}
22637
22638
22639Error if realm is not present.
22640
22641
22642\begin{savenotes}\sphinxattablestart
22643\centering
22644\begin{tabulary}{\linewidth}[t]{|T|T|}
22645\hline
22646
22647\sphinxcode{KRB5\_PRINCIPAL\_PARSE\_REQUIRE\_REALM}
22648&
22649\sphinxcode{0x2}
22650\\
22651\hline
22652\end{tabulary}
22653\par
22654\sphinxattableend\end{savenotes}
22655
22656
22657\subsubsection{KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY}
22658\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)}
22659
22660\begin{fulllineitems}
22661\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY:KRB5_PRINCIPAL_UNPARSE_DISPLAY}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY}}
22662\end{fulllineitems}
22663
22664
22665Don’t escape special characters.
22666
22667
22668\begin{savenotes}\sphinxattablestart
22669\centering
22670\begin{tabulary}{\linewidth}[t]{|T|T|}
22671\hline
22672
22673\sphinxcode{KRB5\_PRINCIPAL\_UNPARSE\_DISPLAY}
22674&
22675\sphinxcode{0x4}
22676\\
22677\hline
22678\end{tabulary}
22679\par
22680\sphinxattableend\end{savenotes}
22681
22682
22683\subsubsection{KRB5\_PRINCIPAL\_UNPARSE\_NO\_REALM}
22684\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)}
22685
22686\begin{fulllineitems}
22687\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_NO_REALM:KRB5_PRINCIPAL_UNPARSE_NO_REALM}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_UNPARSE\_NO\_REALM}}
22688\end{fulllineitems}
22689
22690
22691Omit realm always.
22692
22693
22694\begin{savenotes}\sphinxattablestart
22695\centering
22696\begin{tabulary}{\linewidth}[t]{|T|T|}
22697\hline
22698
22699\sphinxcode{KRB5\_PRINCIPAL\_UNPARSE\_NO\_REALM}
22700&
22701\sphinxcode{0x2}
22702\\
22703\hline
22704\end{tabulary}
22705\par
22706\sphinxattableend\end{savenotes}
22707
22708
22709\subsubsection{KRB5\_PRINCIPAL\_UNPARSE\_SHORT}
22710\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)}
22711
22712\begin{fulllineitems}
22713\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_SHORT:KRB5_PRINCIPAL_UNPARSE_SHORT}}\pysigline{\sphinxbfcode{KRB5\_PRINCIPAL\_UNPARSE\_SHORT}}
22714\end{fulllineitems}
22715
22716
22717Omit realm if it is the local realm.
22718
22719
22720\begin{savenotes}\sphinxattablestart
22721\centering
22722\begin{tabulary}{\linewidth}[t]{|T|T|}
22723\hline
22724
22725\sphinxcode{KRB5\_PRINCIPAL\_UNPARSE\_SHORT}
22726&
22727\sphinxcode{0x1}
22728\\
22729\hline
22730\end{tabulary}
22731\par
22732\sphinxattableend\end{savenotes}
22733
22734
22735\subsubsection{KRB5\_PRIV}
22736\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)}
22737
22738\begin{fulllineitems}
22739\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PRIV:KRB5_PRIV}}\pysigline{\sphinxbfcode{KRB5\_PRIV}}
22740\end{fulllineitems}
22741
22742
22743Private application message.
22744
22745
22746\begin{savenotes}\sphinxattablestart
22747\centering
22748\begin{tabulary}{\linewidth}[t]{|T|T|}
22749\hline
22750
22751\sphinxcode{KRB5\_PRIV}
22752&
22753\sphinxcode{((krb5\_msgtype)21)}
22754\\
22755\hline
22756\end{tabulary}
22757\par
22758\sphinxattableend\end{savenotes}
22759
22760
22761\subsubsection{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD}
22762\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)}
22763
22764\begin{fulllineitems}
22765\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD:KRB5_PROMPT_TYPE_NEW_PASSWORD}}\pysigline{\sphinxbfcode{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD}}
22766\end{fulllineitems}
22767
22768
22769Prompt for new password (during password change)
22770
22771
22772\begin{savenotes}\sphinxattablestart
22773\centering
22774\begin{tabulary}{\linewidth}[t]{|T|T|}
22775\hline
22776
22777\sphinxcode{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD}
22778&
22779\sphinxcode{0x2}
22780\\
22781\hline
22782\end{tabulary}
22783\par
22784\sphinxattableend\end{savenotes}
22785
22786
22787\subsubsection{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD\_AGAIN}
22788\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)}
22789
22790\begin{fulllineitems}
22791\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}}
22792\end{fulllineitems}
22793
22794
22795Prompt for new password again.
22796
22797
22798\begin{savenotes}\sphinxattablestart
22799\centering
22800\begin{tabulary}{\linewidth}[t]{|T|T|}
22801\hline
22802
22803\sphinxcode{KRB5\_PROMPT\_TYPE\_NEW\_PASSWORD\_AGAIN}
22804&
22805\sphinxcode{0x3}
22806\\
22807\hline
22808\end{tabulary}
22809\par
22810\sphinxattableend\end{savenotes}
22811
22812
22813\subsubsection{KRB5\_PROMPT\_TYPE\_PASSWORD}
22814\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)}
22815
22816\begin{fulllineitems}
22817\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PASSWORD:KRB5_PROMPT_TYPE_PASSWORD}}\pysigline{\sphinxbfcode{KRB5\_PROMPT\_TYPE\_PASSWORD}}
22818\end{fulllineitems}
22819
22820
22821Prompt for password.
22822
22823
22824\begin{savenotes}\sphinxattablestart
22825\centering
22826\begin{tabulary}{\linewidth}[t]{|T|T|}
22827\hline
22828
22829\sphinxcode{KRB5\_PROMPT\_TYPE\_PASSWORD}
22830&
22831\sphinxcode{0x1}
22832\\
22833\hline
22834\end{tabulary}
22835\par
22836\sphinxattableend\end{savenotes}
22837
22838
22839\subsubsection{KRB5\_PROMPT\_TYPE\_PREAUTH}
22840\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)}
22841
22842\begin{fulllineitems}
22843\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PROMPT_TYPE_PREAUTH:KRB5_PROMPT_TYPE_PREAUTH}}\pysigline{\sphinxbfcode{KRB5\_PROMPT\_TYPE\_PREAUTH}}
22844\end{fulllineitems}
22845
22846
22847Prompt for preauthentication data (such as an OTP value)
22848
22849
22850\begin{savenotes}\sphinxattablestart
22851\centering
22852\begin{tabulary}{\linewidth}[t]{|T|T|}
22853\hline
22854
22855\sphinxcode{KRB5\_PROMPT\_TYPE\_PREAUTH}
22856&
22857\sphinxcode{0x4}
22858\\
22859\hline
22860\end{tabulary}
22861\par
22862\sphinxattableend\end{savenotes}
22863
22864
22865\subsubsection{KRB5\_PVNO}
22866\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)}
22867
22868\begin{fulllineitems}
22869\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_PVNO:KRB5_PVNO}}\pysigline{\sphinxbfcode{KRB5\_PVNO}}
22870\end{fulllineitems}
22871
22872
22873Protocol version number.
22874
22875
22876\begin{savenotes}\sphinxattablestart
22877\centering
22878\begin{tabulary}{\linewidth}[t]{|T|T|}
22879\hline
22880
22881\sphinxcode{KRB5\_PVNO}
22882&
22883\sphinxcode{5}
22884\\
22885\hline
22886\end{tabulary}
22887\par
22888\sphinxattableend\end{savenotes}
22889
22890
22891\subsubsection{KRB5\_REALM\_BRANCH\_CHAR}
22892\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)}
22893
22894\begin{fulllineitems}
22895\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_REALM_BRANCH_CHAR:KRB5_REALM_BRANCH_CHAR}}\pysigline{\sphinxbfcode{KRB5\_REALM\_BRANCH\_CHAR}}
22896\end{fulllineitems}
22897
22898
22899
22900\begin{savenotes}\sphinxattablestart
22901\centering
22902\begin{tabulary}{\linewidth}[t]{|T|T|}
22903\hline
22904
22905\sphinxcode{KRB5\_REALM\_BRANCH\_CHAR}
22906&
22907\sphinxcode{'.'}
22908\\
22909\hline
22910\end{tabulary}
22911\par
22912\sphinxattableend\end{savenotes}
22913
22914
22915\subsubsection{KRB5\_RECVAUTH\_BADAUTHVERS}
22916\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)}
22917
22918\begin{fulllineitems}
22919\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_BADAUTHVERS:KRB5_RECVAUTH_BADAUTHVERS}}\pysigline{\sphinxbfcode{KRB5\_RECVAUTH\_BADAUTHVERS}}
22920\end{fulllineitems}
22921
22922
22923
22924\begin{savenotes}\sphinxattablestart
22925\centering
22926\begin{tabulary}{\linewidth}[t]{|T|T|}
22927\hline
22928
22929\sphinxcode{KRB5\_RECVAUTH\_BADAUTHVERS}
22930&
22931\sphinxcode{0x0002}
22932\\
22933\hline
22934\end{tabulary}
22935\par
22936\sphinxattableend\end{savenotes}
22937
22938
22939\subsubsection{KRB5\_RECVAUTH\_SKIP\_VERSION}
22940\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)}
22941
22942\begin{fulllineitems}
22943\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RECVAUTH_SKIP_VERSION:KRB5_RECVAUTH_SKIP_VERSION}}\pysigline{\sphinxbfcode{KRB5\_RECVAUTH\_SKIP\_VERSION}}
22944\end{fulllineitems}
22945
22946
22947
22948\begin{savenotes}\sphinxattablestart
22949\centering
22950\begin{tabulary}{\linewidth}[t]{|T|T|}
22951\hline
22952
22953\sphinxcode{KRB5\_RECVAUTH\_SKIP\_VERSION}
22954&
22955\sphinxcode{0x0001}
22956\\
22957\hline
22958\end{tabulary}
22959\par
22960\sphinxattableend\end{savenotes}
22961
22962
22963\subsubsection{KRB5\_REFERRAL\_REALM}
22964\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)}
22965
22966\begin{fulllineitems}
22967\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_REFERRAL_REALM:KRB5_REFERRAL_REALM}}\pysigline{\sphinxbfcode{KRB5\_REFERRAL\_REALM}}
22968\end{fulllineitems}
22969
22970
22971Constant for realm referrals.
22972
22973
22974\begin{savenotes}\sphinxattablestart
22975\centering
22976\begin{tabulary}{\linewidth}[t]{|T|T|}
22977\hline
22978
22979\sphinxcode{KRB5\_REFERRAL\_REALM}
22980&
22981\sphinxcode{""}
22982\\
22983\hline
22984\end{tabulary}
22985\par
22986\sphinxattableend\end{savenotes}
22987
22988
22989\subsubsection{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_COUNT\_LOW}
22990\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)}
22991
22992\begin{fulllineitems}
22993\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}}
22994\end{fulllineitems}
22995
22996
22997This flag indicates that an incorrect PIN was supplied at least once since the last time the correct PIN was supplied.
22998
22999
23000\begin{savenotes}\sphinxattablestart
23001\centering
23002\begin{tabulary}{\linewidth}[t]{|T|T|}
23003\hline
23004
23005\sphinxcode{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_COUNT\_LOW}
23006&
23007\sphinxcode{(1 \textless{}\textless{} 0)}
23008\\
23009\hline
23010\end{tabulary}
23011\par
23012\sphinxattableend\end{savenotes}
23013
23014
23015\subsubsection{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_FINAL\_TRY}
23016\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)}
23017
23018\begin{fulllineitems}
23019\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}}
23020\end{fulllineitems}
23021
23022
23023This flag indicates that supplying an incorrect PIN will cause the token to lock itself.
23024
23025
23026\begin{savenotes}\sphinxattablestart
23027\centering
23028\begin{tabulary}{\linewidth}[t]{|T|T|}
23029\hline
23030
23031\sphinxcode{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_FINAL\_TRY}
23032&
23033\sphinxcode{(1 \textless{}\textless{} 1)}
23034\\
23035\hline
23036\end{tabulary}
23037\par
23038\sphinxattableend\end{savenotes}
23039
23040
23041\subsubsection{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_LOCKED}
23042\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)}
23043
23044\begin{fulllineitems}
23045\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}}
23046\end{fulllineitems}
23047
23048
23049This flag indicates that the user PIN is locked, and you can’t log in to the token with it.
23050
23051
23052\begin{savenotes}\sphinxattablestart
23053\centering
23054\begin{tabulary}{\linewidth}[t]{|T|T|}
23055\hline
23056
23057\sphinxcode{KRB5\_RESPONDER\_PKINIT\_FLAGS\_TOKEN\_USER\_PIN\_LOCKED}
23058&
23059\sphinxcode{(1 \textless{}\textless{} 2)}
23060\\
23061\hline
23062\end{tabulary}
23063\par
23064\sphinxattableend\end{savenotes}
23065
23066
23067\subsubsection{KRB5\_RESPONDER\_QUESTION\_PKINIT}
23068\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)}
23069
23070\begin{fulllineitems}
23071\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PKINIT:KRB5_RESPONDER_QUESTION_PKINIT}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_QUESTION\_PKINIT}}
23072\end{fulllineitems}
23073
23074
23075PKINIT responder question.
23076
23077The 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.
23078
23079\sphinxstyleemphasis{\{}
23080
23081\sphinxstyleemphasis{identity \textless{}string\textgreater{} : flags \textless{}number\textgreater{},}
23082
23083\sphinxstyleemphasis{…}
23084
23085\sphinxstyleemphasis{\}}
23086
23087The answer to the question MUST be JSON formatted:
23088
23089\sphinxstyleemphasis{\{}
23090
23091\sphinxstyleemphasis{identity \textless{}string\textgreater{} : password \textless{}string\textgreater{},}
23092
23093\sphinxstyleemphasis{…}
23094
23095\sphinxstyleemphasis{\}}
23096
23097
23098\begin{savenotes}\sphinxattablestart
23099\centering
23100\begin{tabulary}{\linewidth}[t]{|T|T|}
23101\hline
23102
23103\sphinxcode{KRB5\_RESPONDER\_QUESTION\_PKINIT}
23104&
23105\sphinxcode{"pkinit"}
23106\\
23107\hline
23108\end{tabulary}
23109\par
23110\sphinxattableend\end{savenotes}
23111
23112
23113\subsubsection{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_PIN}
23114\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)}
23115
23116\begin{fulllineitems}
23117\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}}
23118\end{fulllineitems}
23119
23120
23121This flag indicates that the PIN value MUST be collected.
23122
23123
23124\begin{savenotes}\sphinxattablestart
23125\centering
23126\begin{tabulary}{\linewidth}[t]{|T|T|}
23127\hline
23128
23129\sphinxcode{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_PIN}
23130&
23131\sphinxcode{0x0002}
23132\\
23133\hline
23134\end{tabulary}
23135\par
23136\sphinxattableend\end{savenotes}
23137
23138
23139\subsubsection{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_TOKEN}
23140\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)}
23141
23142\begin{fulllineitems}
23143\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}}
23144\end{fulllineitems}
23145
23146
23147This flag indicates that the token value MUST be collected.
23148
23149
23150\begin{savenotes}\sphinxattablestart
23151\centering
23152\begin{tabulary}{\linewidth}[t]{|T|T|}
23153\hline
23154
23155\sphinxcode{KRB5\_RESPONDER\_OTP\_FLAGS\_COLLECT\_TOKEN}
23156&
23157\sphinxcode{0x0001}
23158\\
23159\hline
23160\end{tabulary}
23161\par
23162\sphinxattableend\end{savenotes}
23163
23164
23165\subsubsection{KRB5\_RESPONDER\_OTP\_FLAGS\_NEXTOTP}
23166\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)}
23167
23168\begin{fulllineitems}
23169\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_NEXTOTP:KRB5_RESPONDER_OTP_FLAGS_NEXTOTP}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_OTP\_FLAGS\_NEXTOTP}}
23170\end{fulllineitems}
23171
23172
23173This flag indicates that the token is now in re-synchronization mode with the server.
23174
23175The user is expected to reply with the next code displayed on the token.
23176
23177
23178\begin{savenotes}\sphinxattablestart
23179\centering
23180\begin{tabulary}{\linewidth}[t]{|T|T|}
23181\hline
23182
23183\sphinxcode{KRB5\_RESPONDER\_OTP\_FLAGS\_NEXTOTP}
23184&
23185\sphinxcode{0x0004}
23186\\
23187\hline
23188\end{tabulary}
23189\par
23190\sphinxattableend\end{savenotes}
23191
23192
23193\subsubsection{KRB5\_RESPONDER\_OTP\_FLAGS\_SEPARATE\_PIN}
23194\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)}
23195
23196\begin{fulllineitems}
23197\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}}
23198\end{fulllineitems}
23199
23200
23201This flag indicates that the PIN MUST be returned as a separate item.
23202
23203This 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.
23204
23205
23206\begin{savenotes}\sphinxattablestart
23207\centering
23208\begin{tabulary}{\linewidth}[t]{|T|T|}
23209\hline
23210
23211\sphinxcode{KRB5\_RESPONDER\_OTP\_FLAGS\_SEPARATE\_PIN}
23212&
23213\sphinxcode{0x0008}
23214\\
23215\hline
23216\end{tabulary}
23217\par
23218\sphinxattableend\end{savenotes}
23219
23220
23221\subsubsection{KRB5\_RESPONDER\_OTP\_FORMAT\_ALPHANUMERIC}
23222\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)}
23223
23224\begin{fulllineitems}
23225\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC:KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_OTP\_FORMAT\_ALPHANUMERIC}}
23226\end{fulllineitems}
23227
23228
23229
23230\begin{savenotes}\sphinxattablestart
23231\centering
23232\begin{tabulary}{\linewidth}[t]{|T|T|}
23233\hline
23234
23235\sphinxcode{KRB5\_RESPONDER\_OTP\_FORMAT\_ALPHANUMERIC}
23236&
23237\sphinxcode{2}
23238\\
23239\hline
23240\end{tabulary}
23241\par
23242\sphinxattableend\end{savenotes}
23243
23244
23245\subsubsection{KRB5\_RESPONDER\_OTP\_FORMAT\_DECIMAL}
23246\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)}
23247
23248\begin{fulllineitems}
23249\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_DECIMAL:KRB5_RESPONDER_OTP_FORMAT_DECIMAL}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_OTP\_FORMAT\_DECIMAL}}
23250\end{fulllineitems}
23251
23252
23253These format constants identify the format of the token value.
23254
23255
23256\begin{savenotes}\sphinxattablestart
23257\centering
23258\begin{tabulary}{\linewidth}[t]{|T|T|}
23259\hline
23260
23261\sphinxcode{KRB5\_RESPONDER\_OTP\_FORMAT\_DECIMAL}
23262&
23263\sphinxcode{0}
23264\\
23265\hline
23266\end{tabulary}
23267\par
23268\sphinxattableend\end{savenotes}
23269
23270
23271\subsubsection{KRB5\_RESPONDER\_OTP\_FORMAT\_HEXADECIMAL}
23272\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)}
23273
23274\begin{fulllineitems}
23275\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL:KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_OTP\_FORMAT\_HEXADECIMAL}}
23276\end{fulllineitems}
23277
23278
23279
23280\begin{savenotes}\sphinxattablestart
23281\centering
23282\begin{tabulary}{\linewidth}[t]{|T|T|}
23283\hline
23284
23285\sphinxcode{KRB5\_RESPONDER\_OTP\_FORMAT\_HEXADECIMAL}
23286&
23287\sphinxcode{1}
23288\\
23289\hline
23290\end{tabulary}
23291\par
23292\sphinxattableend\end{savenotes}
23293
23294
23295\subsubsection{KRB5\_RESPONDER\_QUESTION\_OTP}
23296\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)}
23297
23298\begin{fulllineitems}
23299\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_OTP:KRB5_RESPONDER_QUESTION_OTP}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_QUESTION\_OTP}}
23300\end{fulllineitems}
23301
23302
23303OTP responder question.
23304
23305The 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:
23306
23307\sphinxstyleemphasis{\{}
23308
23309\sphinxstyleemphasis{“service”: \textless{}string (optional)\textgreater{},}
23310
23311\sphinxstyleemphasis{“tokenInfo”: {[}}
23312
23313\sphinxstyleemphasis{\{}
23314
23315\sphinxstyleemphasis{“flags”: \textless{}number\textgreater{},}
23316
23317\sphinxstyleemphasis{“vendor”: \textless{}string (optional)\textgreater{},}
23318
23319\sphinxstyleemphasis{“challenge”: \textless{}string (optional)\textgreater{},}
23320
23321\sphinxstyleemphasis{“length”: \textless{}number (optional)\textgreater{},}
23322
23323\sphinxstyleemphasis{“format”: \textless{}number (optional)\textgreater{},}
23324
23325\sphinxstyleemphasis{“tokenID”: \textless{}string (optional)\textgreater{},}
23326
23327\sphinxstyleemphasis{“algID”: \textless{}string (optional)\textgreater{},}
23328
23329\sphinxstyleemphasis{\},}
23330
23331\sphinxstyleemphasis{…}
23332
23333\sphinxstyleemphasis{{]}}
23334
23335\sphinxstyleemphasis{\}}
23336
23337The answer to the question MUST be JSON formatted:
23338
23339\sphinxstyleemphasis{\{}
23340
23341\sphinxstyleemphasis{“tokeninfo”: \textless{}number\textgreater{},}
23342
23343\sphinxstyleemphasis{“value”: \textless{}string (optional)\textgreater{},}
23344
23345\sphinxstyleemphasis{“pin”: \textless{}string (optional)\textgreater{},}
23346
23347\sphinxstyleemphasis{\}}
23348
23349For more detail, please see RFC 6560.
23350
23351
23352\begin{savenotes}\sphinxattablestart
23353\centering
23354\begin{tabulary}{\linewidth}[t]{|T|T|}
23355\hline
23356
23357\sphinxcode{KRB5\_RESPONDER\_QUESTION\_OTP}
23358&
23359\sphinxcode{"otp"}
23360\\
23361\hline
23362\end{tabulary}
23363\par
23364\sphinxattableend\end{savenotes}
23365
23366
23367\subsubsection{KRB5\_RESPONDER\_QUESTION\_PASSWORD}
23368\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)}
23369
23370\begin{fulllineitems}
23371\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_RESPONDER_QUESTION_PASSWORD:KRB5_RESPONDER_QUESTION_PASSWORD}}\pysigline{\sphinxbfcode{KRB5\_RESPONDER\_QUESTION\_PASSWORD}}
23372\end{fulllineitems}
23373
23374
23375Long-term password responder question.
23376
23377This question is asked when the long-term password is needed. It has no challenge and the response is simply the password string.
23378
23379
23380\begin{savenotes}\sphinxattablestart
23381\centering
23382\begin{tabulary}{\linewidth}[t]{|T|T|}
23383\hline
23384
23385\sphinxcode{KRB5\_RESPONDER\_QUESTION\_PASSWORD}
23386&
23387\sphinxcode{"password"}
23388\\
23389\hline
23390\end{tabulary}
23391\par
23392\sphinxattableend\end{savenotes}
23393
23394
23395\subsubsection{KRB5\_SAFE}
23396\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)}
23397
23398\begin{fulllineitems}
23399\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_SAFE:KRB5_SAFE}}\pysigline{\sphinxbfcode{KRB5\_SAFE}}
23400\end{fulllineitems}
23401
23402
23403Safe application message.
23404
23405
23406\begin{savenotes}\sphinxattablestart
23407\centering
23408\begin{tabulary}{\linewidth}[t]{|T|T|}
23409\hline
23410
23411\sphinxcode{KRB5\_SAFE}
23412&
23413\sphinxcode{((krb5\_msgtype)20)}
23414\\
23415\hline
23416\end{tabulary}
23417\par
23418\sphinxattableend\end{savenotes}
23419
23420
23421\subsubsection{KRB5\_SAM\_MUST\_PK\_ENCRYPT\_SAD}
23422\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)}
23423
23424\begin{fulllineitems}
23425\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}}
23426\end{fulllineitems}
23427
23428
23429currently must be zero
23430
23431
23432\begin{savenotes}\sphinxattablestart
23433\centering
23434\begin{tabulary}{\linewidth}[t]{|T|T|}
23435\hline
23436
23437\sphinxcode{KRB5\_SAM\_MUST\_PK\_ENCRYPT\_SAD}
23438&
23439\sphinxcode{0x20000000}
23440\\
23441\hline
23442\end{tabulary}
23443\par
23444\sphinxattableend\end{savenotes}
23445
23446
23447\subsubsection{KRB5\_SAM\_SEND\_ENCRYPTED\_SAD}
23448\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)}
23449
23450\begin{fulllineitems}
23451\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_SAM_SEND_ENCRYPTED_SAD:KRB5_SAM_SEND_ENCRYPTED_SAD}}\pysigline{\sphinxbfcode{KRB5\_SAM\_SEND\_ENCRYPTED\_SAD}}
23452\end{fulllineitems}
23453
23454
23455
23456\begin{savenotes}\sphinxattablestart
23457\centering
23458\begin{tabulary}{\linewidth}[t]{|T|T|}
23459\hline
23460
23461\sphinxcode{KRB5\_SAM\_SEND\_ENCRYPTED\_SAD}
23462&
23463\sphinxcode{0x40000000}
23464\\
23465\hline
23466\end{tabulary}
23467\par
23468\sphinxattableend\end{savenotes}
23469
23470
23471\subsubsection{KRB5\_SAM\_USE\_SAD\_AS\_KEY}
23472\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)}
23473
23474\begin{fulllineitems}
23475\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}}
23476\end{fulllineitems}
23477
23478
23479
23480\begin{savenotes}\sphinxattablestart
23481\centering
23482\begin{tabulary}{\linewidth}[t]{|T|T|}
23483\hline
23484
23485\sphinxcode{KRB5\_SAM\_USE\_SAD\_AS\_KEY}
23486&
23487\sphinxcode{0x80000000}
23488\\
23489\hline
23490\end{tabulary}
23491\par
23492\sphinxattableend\end{savenotes}
23493
23494
23495\subsubsection{KRB5\_TC\_MATCH\_2ND\_TKT}
23496\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)}
23497
23498\begin{fulllineitems}
23499\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_2ND_TKT:KRB5_TC_MATCH_2ND_TKT}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_2ND\_TKT}}
23500\end{fulllineitems}
23501
23502
23503The second ticket must match.
23504
23505
23506\begin{savenotes}\sphinxattablestart
23507\centering
23508\begin{tabulary}{\linewidth}[t]{|T|T|}
23509\hline
23510
23511\sphinxcode{KRB5\_TC\_MATCH\_2ND\_TKT}
23512&
23513\sphinxcode{0x00000080}
23514\\
23515\hline
23516\end{tabulary}
23517\par
23518\sphinxattableend\end{savenotes}
23519
23520
23521\subsubsection{KRB5\_TC\_MATCH\_AUTHDATA}
23522\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)}
23523
23524\begin{fulllineitems}
23525\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA:KRB5_TC_MATCH_AUTHDATA}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_AUTHDATA}}
23526\end{fulllineitems}
23527
23528
23529The authorization data must match.
23530
23531
23532\begin{savenotes}\sphinxattablestart
23533\centering
23534\begin{tabulary}{\linewidth}[t]{|T|T|}
23535\hline
23536
23537\sphinxcode{KRB5\_TC\_MATCH\_AUTHDATA}
23538&
23539\sphinxcode{0x00000020}
23540\\
23541\hline
23542\end{tabulary}
23543\par
23544\sphinxattableend\end{savenotes}
23545
23546
23547\subsubsection{KRB5\_TC\_MATCH\_FLAGS}
23548\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)}
23549
23550\begin{fulllineitems}
23551\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS:KRB5_TC_MATCH_FLAGS}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_FLAGS}}
23552\end{fulllineitems}
23553
23554
23555All the flags set in the match credentials must be set.
23556
23557
23558\begin{savenotes}\sphinxattablestart
23559\centering
23560\begin{tabulary}{\linewidth}[t]{|T|T|}
23561\hline
23562
23563\sphinxcode{KRB5\_TC\_MATCH\_FLAGS}
23564&
23565\sphinxcode{0x00000004}
23566\\
23567\hline
23568\end{tabulary}
23569\par
23570\sphinxattableend\end{savenotes}
23571
23572
23573\subsubsection{KRB5\_TC\_MATCH\_FLAGS\_EXACT}
23574\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)}
23575
23576\begin{fulllineitems}
23577\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_FLAGS_EXACT:KRB5_TC_MATCH_FLAGS_EXACT}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_FLAGS\_EXACT}}
23578\end{fulllineitems}
23579
23580
23581All the flags must match exactly.
23582
23583
23584\begin{savenotes}\sphinxattablestart
23585\centering
23586\begin{tabulary}{\linewidth}[t]{|T|T|}
23587\hline
23588
23589\sphinxcode{KRB5\_TC\_MATCH\_FLAGS\_EXACT}
23590&
23591\sphinxcode{0x00000010}
23592\\
23593\hline
23594\end{tabulary}
23595\par
23596\sphinxattableend\end{savenotes}
23597
23598
23599\subsubsection{KRB5\_TC\_MATCH\_IS\_SKEY}
23600\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)}
23601
23602\begin{fulllineitems}
23603\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_IS_SKEY:KRB5_TC_MATCH_IS_SKEY}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_IS\_SKEY}}
23604\end{fulllineitems}
23605
23606
23607The is\_skey field must match exactly.
23608
23609
23610\begin{savenotes}\sphinxattablestart
23611\centering
23612\begin{tabulary}{\linewidth}[t]{|T|T|}
23613\hline
23614
23615\sphinxcode{KRB5\_TC\_MATCH\_IS\_SKEY}
23616&
23617\sphinxcode{0x00000002}
23618\\
23619\hline
23620\end{tabulary}
23621\par
23622\sphinxattableend\end{savenotes}
23623
23624
23625\subsubsection{KRB5\_TC\_MATCH\_KTYPE}
23626\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)}
23627
23628\begin{fulllineitems}
23629\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_KTYPE:KRB5_TC_MATCH_KTYPE}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_KTYPE}}
23630\end{fulllineitems}
23631
23632
23633The encryption key type must match.
23634
23635
23636\begin{savenotes}\sphinxattablestart
23637\centering
23638\begin{tabulary}{\linewidth}[t]{|T|T|}
23639\hline
23640
23641\sphinxcode{KRB5\_TC\_MATCH\_KTYPE}
23642&
23643\sphinxcode{0x00000100}
23644\\
23645\hline
23646\end{tabulary}
23647\par
23648\sphinxattableend\end{savenotes}
23649
23650
23651\subsubsection{KRB5\_TC\_MATCH\_SRV\_NAMEONLY}
23652\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)}
23653
23654\begin{fulllineitems}
23655\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_SRV_NAMEONLY:KRB5_TC_MATCH_SRV_NAMEONLY}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_SRV\_NAMEONLY}}
23656\end{fulllineitems}
23657
23658
23659Only the name portion of the principal name must match.
23660
23661
23662\begin{savenotes}\sphinxattablestart
23663\centering
23664\begin{tabulary}{\linewidth}[t]{|T|T|}
23665\hline
23666
23667\sphinxcode{KRB5\_TC\_MATCH\_SRV\_NAMEONLY}
23668&
23669\sphinxcode{0x00000040}
23670\\
23671\hline
23672\end{tabulary}
23673\par
23674\sphinxattableend\end{savenotes}
23675
23676
23677\subsubsection{KRB5\_TC\_MATCH\_TIMES}
23678\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)}
23679
23680\begin{fulllineitems}
23681\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES:KRB5_TC_MATCH_TIMES}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_TIMES}}
23682\end{fulllineitems}
23683
23684
23685The requested lifetime must be at least as great as the time specified.
23686
23687
23688\begin{savenotes}\sphinxattablestart
23689\centering
23690\begin{tabulary}{\linewidth}[t]{|T|T|}
23691\hline
23692
23693\sphinxcode{KRB5\_TC\_MATCH\_TIMES}
23694&
23695\sphinxcode{0x00000001}
23696\\
23697\hline
23698\end{tabulary}
23699\par
23700\sphinxattableend\end{savenotes}
23701
23702
23703\subsubsection{KRB5\_TC\_MATCH\_TIMES\_EXACT}
23704\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)}
23705
23706\begin{fulllineitems}
23707\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_MATCH_TIMES_EXACT:KRB5_TC_MATCH_TIMES_EXACT}}\pysigline{\sphinxbfcode{KRB5\_TC\_MATCH\_TIMES\_EXACT}}
23708\end{fulllineitems}
23709
23710
23711All the time fields must match exactly.
23712
23713
23714\begin{savenotes}\sphinxattablestart
23715\centering
23716\begin{tabulary}{\linewidth}[t]{|T|T|}
23717\hline
23718
23719\sphinxcode{KRB5\_TC\_MATCH\_TIMES\_EXACT}
23720&
23721\sphinxcode{0x00000008}
23722\\
23723\hline
23724\end{tabulary}
23725\par
23726\sphinxattableend\end{savenotes}
23727
23728
23729\subsubsection{KRB5\_TC\_NOTICKET}
23730\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)}
23731
23732\begin{fulllineitems}
23733\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_NOTICKET:KRB5_TC_NOTICKET}}\pysigline{\sphinxbfcode{KRB5\_TC\_NOTICKET}}
23734\end{fulllineitems}
23735
23736
23737
23738\begin{savenotes}\sphinxattablestart
23739\centering
23740\begin{tabulary}{\linewidth}[t]{|T|T|}
23741\hline
23742
23743\sphinxcode{KRB5\_TC\_NOTICKET}
23744&
23745\sphinxcode{0x00000002}
23746\\
23747\hline
23748\end{tabulary}
23749\par
23750\sphinxattableend\end{savenotes}
23751
23752
23753\subsubsection{KRB5\_TC\_OPENCLOSE}
23754\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)}
23755
23756\begin{fulllineitems}
23757\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_OPENCLOSE:KRB5_TC_OPENCLOSE}}\pysigline{\sphinxbfcode{KRB5\_TC\_OPENCLOSE}}
23758\end{fulllineitems}
23759
23760
23761Open and close the file for each cache operation.
23762
23763
23764\begin{savenotes}\sphinxattablestart
23765\centering
23766\begin{tabulary}{\linewidth}[t]{|T|T|}
23767\hline
23768
23769\sphinxcode{KRB5\_TC\_OPENCLOSE}
23770&
23771\sphinxcode{0x00000001}
23772\\
23773\hline
23774\end{tabulary}
23775\par
23776\sphinxattableend\end{savenotes}
23777
23778
23779\subsubsection{KRB5\_TC\_SUPPORTED\_KTYPES}
23780\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)}
23781
23782\begin{fulllineitems}
23783\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TC_SUPPORTED_KTYPES:KRB5_TC_SUPPORTED_KTYPES}}\pysigline{\sphinxbfcode{KRB5\_TC\_SUPPORTED\_KTYPES}}
23784\end{fulllineitems}
23785
23786
23787The supported key types must match.
23788
23789
23790\begin{savenotes}\sphinxattablestart
23791\centering
23792\begin{tabulary}{\linewidth}[t]{|T|T|}
23793\hline
23794
23795\sphinxcode{KRB5\_TC\_SUPPORTED\_KTYPES}
23796&
23797\sphinxcode{0x00000200}
23798\\
23799\hline
23800\end{tabulary}
23801\par
23802\sphinxattableend\end{savenotes}
23803
23804
23805\subsubsection{KRB5\_TGS\_NAME}
23806\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)}
23807
23808\begin{fulllineitems}
23809\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME:KRB5_TGS_NAME}}\pysigline{\sphinxbfcode{KRB5\_TGS\_NAME}}
23810\end{fulllineitems}
23811
23812
23813
23814\begin{savenotes}\sphinxattablestart
23815\centering
23816\begin{tabulary}{\linewidth}[t]{|T|T|}
23817\hline
23818
23819\sphinxcode{KRB5\_TGS\_NAME}
23820&
23821\sphinxcode{"krbtgt"}
23822\\
23823\hline
23824\end{tabulary}
23825\par
23826\sphinxattableend\end{savenotes}
23827
23828
23829\subsubsection{KRB5\_TGS\_NAME\_SIZE}
23830\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)}
23831
23832\begin{fulllineitems}
23833\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TGS_NAME_SIZE:KRB5_TGS_NAME_SIZE}}\pysigline{\sphinxbfcode{KRB5\_TGS\_NAME\_SIZE}}
23834\end{fulllineitems}
23835
23836
23837
23838\begin{savenotes}\sphinxattablestart
23839\centering
23840\begin{tabulary}{\linewidth}[t]{|T|T|}
23841\hline
23842
23843\sphinxcode{KRB5\_TGS\_NAME\_SIZE}
23844&
23845\sphinxcode{6}
23846\\
23847\hline
23848\end{tabulary}
23849\par
23850\sphinxattableend\end{savenotes}
23851
23852
23853\subsubsection{KRB5\_TGS\_REP}
23854\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)}
23855
23856\begin{fulllineitems}
23857\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TGS_REP:KRB5_TGS_REP}}\pysigline{\sphinxbfcode{KRB5\_TGS\_REP}}
23858\end{fulllineitems}
23859
23860
23861Response to TGS request.
23862
23863
23864\begin{savenotes}\sphinxattablestart
23865\centering
23866\begin{tabulary}{\linewidth}[t]{|T|T|}
23867\hline
23868
23869\sphinxcode{KRB5\_TGS\_REP}
23870&
23871\sphinxcode{((krb5\_msgtype)13)}
23872\\
23873\hline
23874\end{tabulary}
23875\par
23876\sphinxattableend\end{savenotes}
23877
23878
23879\subsubsection{KRB5\_TGS\_REQ}
23880\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)}
23881
23882\begin{fulllineitems}
23883\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_TGS_REQ:KRB5_TGS_REQ}}\pysigline{\sphinxbfcode{KRB5\_TGS\_REQ}}
23884\end{fulllineitems}
23885
23886
23887Ticket granting server request.
23888
23889
23890\begin{savenotes}\sphinxattablestart
23891\centering
23892\begin{tabulary}{\linewidth}[t]{|T|T|}
23893\hline
23894
23895\sphinxcode{KRB5\_TGS\_REQ}
23896&
23897\sphinxcode{((krb5\_msgtype)12)}
23898\\
23899\hline
23900\end{tabulary}
23901\par
23902\sphinxattableend\end{savenotes}
23903
23904
23905\subsubsection{KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE}
23906\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)}
23907
23908\begin{fulllineitems}
23909\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}}
23910\end{fulllineitems}
23911
23912
23913More responses needed.
23914
23915
23916\begin{savenotes}\sphinxattablestart
23917\centering
23918\begin{tabulary}{\linewidth}[t]{|T|T|}
23919\hline
23920
23921\sphinxcode{KRB5\_TKT\_CREDS\_STEP\_FLAG\_CONTINUE}
23922&
23923\sphinxcode{0x1}
23924\\
23925\hline
23926\end{tabulary}
23927\par
23928\sphinxattableend\end{savenotes}
23929
23930
23931\subsubsection{KRB5\_VERIFY\_INIT\_CREDS\_OPT\_AP\_REQ\_NOFAIL}
23932\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)}
23933
23934\begin{fulllineitems}
23935\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}}
23936\end{fulllineitems}
23937
23938
23939
23940\begin{savenotes}\sphinxattablestart
23941\centering
23942\begin{tabulary}{\linewidth}[t]{|T|T|}
23943\hline
23944
23945\sphinxcode{KRB5\_VERIFY\_INIT\_CREDS\_OPT\_AP\_REQ\_NOFAIL}
23946&
23947\sphinxcode{0x0001}
23948\\
23949\hline
23950\end{tabulary}
23951\par
23952\sphinxattableend\end{savenotes}
23953
23954
23955\subsubsection{KRB5\_WELLKNOWN\_NAMESTR}
23956\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)}
23957
23958\begin{fulllineitems}
23959\phantomsection\label{\detokenize{appdev/refs/macros/KRB5_WELLKNOWN_NAMESTR:KRB5_WELLKNOWN_NAMESTR}}\pysigline{\sphinxbfcode{KRB5\_WELLKNOWN\_NAMESTR}}
23960\end{fulllineitems}
23961
23962
23963First component of NT\_WELLKNOWN principals.
23964
23965
23966\begin{savenotes}\sphinxattablestart
23967\centering
23968\begin{tabulary}{\linewidth}[t]{|T|T|}
23969\hline
23970
23971\sphinxcode{KRB5\_WELLKNOWN\_NAMESTR}
23972&
23973\sphinxcode{"WELLKNOWN"}
23974\\
23975\hline
23976\end{tabulary}
23977\par
23978\sphinxattableend\end{savenotes}
23979
23980
23981\subsubsection{LR\_TYPE\_INTERPRETATION\_MASK}
23982\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)}
23983
23984\begin{fulllineitems}
23985\phantomsection\label{\detokenize{appdev/refs/macros/LR_TYPE_INTERPRETATION_MASK:LR_TYPE_INTERPRETATION_MASK}}\pysigline{\sphinxbfcode{LR\_TYPE\_INTERPRETATION\_MASK}}
23986\end{fulllineitems}
23987
23988
23989
23990\begin{savenotes}\sphinxattablestart
23991\centering
23992\begin{tabulary}{\linewidth}[t]{|T|T|}
23993\hline
23994
23995\sphinxcode{LR\_TYPE\_INTERPRETATION\_MASK}
23996&
23997\sphinxcode{0x7fff}
23998\\
23999\hline
24000\end{tabulary}
24001\par
24002\sphinxattableend\end{savenotes}
24003
24004
24005\subsubsection{LR\_TYPE\_THIS\_SERVER\_ONLY}
24006\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)}
24007
24008\begin{fulllineitems}
24009\phantomsection\label{\detokenize{appdev/refs/macros/LR_TYPE_THIS_SERVER_ONLY:LR_TYPE_THIS_SERVER_ONLY}}\pysigline{\sphinxbfcode{LR\_TYPE\_THIS\_SERVER\_ONLY}}
24010\end{fulllineitems}
24011
24012
24013
24014\begin{savenotes}\sphinxattablestart
24015\centering
24016\begin{tabulary}{\linewidth}[t]{|T|T|}
24017\hline
24018
24019\sphinxcode{LR\_TYPE\_THIS\_SERVER\_ONLY}
24020&
24021\sphinxcode{0x8000}
24022\\
24023\hline
24024\end{tabulary}
24025\par
24026\sphinxattableend\end{savenotes}
24027
24028
24029\subsubsection{MAX\_KEYTAB\_NAME\_LEN}
24030\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)}
24031
24032\begin{fulllineitems}
24033\phantomsection\label{\detokenize{appdev/refs/macros/MAX_KEYTAB_NAME_LEN:MAX_KEYTAB_NAME_LEN}}\pysigline{\sphinxbfcode{MAX\_KEYTAB\_NAME\_LEN}}
24034\end{fulllineitems}
24035
24036
24037Long enough for MAXPATHLEN + some extra.
24038
24039
24040\begin{savenotes}\sphinxattablestart
24041\centering
24042\begin{tabulary}{\linewidth}[t]{|T|T|}
24043\hline
24044
24045\sphinxcode{MAX\_KEYTAB\_NAME\_LEN}
24046&
24047\sphinxcode{1100}
24048\\
24049\hline
24050\end{tabulary}
24051\par
24052\sphinxattableend\end{savenotes}
24053
24054
24055\subsubsection{MSEC\_DIRBIT}
24056\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)}
24057
24058\begin{fulllineitems}
24059\phantomsection\label{\detokenize{appdev/refs/macros/MSEC_DIRBIT:MSEC_DIRBIT}}\pysigline{\sphinxbfcode{MSEC\_DIRBIT}}
24060\end{fulllineitems}
24061
24062
24063
24064\begin{savenotes}\sphinxattablestart
24065\centering
24066\begin{tabulary}{\linewidth}[t]{|T|T|}
24067\hline
24068
24069\sphinxcode{MSEC\_DIRBIT}
24070&
24071\sphinxcode{0x8000}
24072\\
24073\hline
24074\end{tabulary}
24075\par
24076\sphinxattableend\end{savenotes}
24077
24078
24079\subsubsection{MSEC\_VAL\_MASK}
24080\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)}
24081
24082\begin{fulllineitems}
24083\phantomsection\label{\detokenize{appdev/refs/macros/MSEC_VAL_MASK:MSEC_VAL_MASK}}\pysigline{\sphinxbfcode{MSEC\_VAL\_MASK}}
24084\end{fulllineitems}
24085
24086
24087
24088\begin{savenotes}\sphinxattablestart
24089\centering
24090\begin{tabulary}{\linewidth}[t]{|T|T|}
24091\hline
24092
24093\sphinxcode{MSEC\_VAL\_MASK}
24094&
24095\sphinxcode{0x7fff}
24096\\
24097\hline
24098\end{tabulary}
24099\par
24100\sphinxattableend\end{savenotes}
24101
24102
24103\subsubsection{SALT\_TYPE\_AFS\_LENGTH}
24104\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)}
24105
24106\begin{fulllineitems}
24107\phantomsection\label{\detokenize{appdev/refs/macros/SALT_TYPE_AFS_LENGTH:SALT_TYPE_AFS_LENGTH}}\pysigline{\sphinxbfcode{SALT\_TYPE\_AFS\_LENGTH}}
24108\end{fulllineitems}
24109
24110
24111
24112\begin{savenotes}\sphinxattablestart
24113\centering
24114\begin{tabulary}{\linewidth}[t]{|T|T|}
24115\hline
24116
24117\sphinxcode{SALT\_TYPE\_AFS\_LENGTH}
24118&
24119\sphinxcode{UINT\_MAX}
24120\\
24121\hline
24122\end{tabulary}
24123\par
24124\sphinxattableend\end{savenotes}
24125
24126
24127\subsubsection{SALT\_TYPE\_NO\_LENGTH}
24128\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)}
24129
24130\begin{fulllineitems}
24131\phantomsection\label{\detokenize{appdev/refs/macros/SALT_TYPE_NO_LENGTH:SALT_TYPE_NO_LENGTH}}\pysigline{\sphinxbfcode{SALT\_TYPE\_NO\_LENGTH}}
24132\end{fulllineitems}
24133
24134
24135
24136\begin{savenotes}\sphinxattablestart
24137\centering
24138\begin{tabulary}{\linewidth}[t]{|T|T|}
24139\hline
24140
24141\sphinxcode{SALT\_TYPE\_NO\_LENGTH}
24142&
24143\sphinxcode{UINT\_MAX}
24144\\
24145\hline
24146\end{tabulary}
24147\par
24148\sphinxattableend\end{savenotes}
24149
24150
24151\subsubsection{THREEPARAMOPEN}
24152\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)}
24153
24154\begin{fulllineitems}
24155\phantomsection\label{\detokenize{appdev/refs/macros/THREEPARAMOPEN:THREEPARAMOPEN}}\pysigline{\sphinxbfcode{THREEPARAMOPEN}}
24156\end{fulllineitems}
24157
24158
24159
24160\begin{savenotes}\sphinxattablestart
24161\centering
24162\begin{tabulary}{\linewidth}[t]{|T|T|}
24163\hline
24164
24165\sphinxcode{THREEPARAMOPEN (x, y, z)}
24166&
24167\sphinxcode{open(x,y,z)}
24168\\
24169\hline
24170\end{tabulary}
24171\par
24172\sphinxattableend\end{savenotes}
24173
24174
24175\subsubsection{TKT\_FLG\_ANONYMOUS}
24176\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)}
24177
24178\begin{fulllineitems}
24179\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_ANONYMOUS:TKT_FLG_ANONYMOUS}}\pysigline{\sphinxbfcode{TKT\_FLG\_ANONYMOUS}}
24180\end{fulllineitems}
24181
24182
24183
24184\begin{savenotes}\sphinxattablestart
24185\centering
24186\begin{tabulary}{\linewidth}[t]{|T|T|}
24187\hline
24188
24189\sphinxcode{TKT\_FLG\_ANONYMOUS}
24190&
24191\sphinxcode{0x00008000}
24192\\
24193\hline
24194\end{tabulary}
24195\par
24196\sphinxattableend\end{savenotes}
24197
24198
24199\subsubsection{TKT\_FLG\_ENC\_PA\_REP}
24200\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)}
24201
24202\begin{fulllineitems}
24203\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_ENC_PA_REP:TKT_FLG_ENC_PA_REP}}\pysigline{\sphinxbfcode{TKT\_FLG\_ENC\_PA\_REP}}
24204\end{fulllineitems}
24205
24206
24207
24208\begin{savenotes}\sphinxattablestart
24209\centering
24210\begin{tabulary}{\linewidth}[t]{|T|T|}
24211\hline
24212
24213\sphinxcode{TKT\_FLG\_ENC\_PA\_REP}
24214&
24215\sphinxcode{0x00010000}
24216\\
24217\hline
24218\end{tabulary}
24219\par
24220\sphinxattableend\end{savenotes}
24221
24222
24223\subsubsection{TKT\_FLG\_FORWARDABLE}
24224\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)}
24225
24226\begin{fulllineitems}
24227\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDABLE:TKT_FLG_FORWARDABLE}}\pysigline{\sphinxbfcode{TKT\_FLG\_FORWARDABLE}}
24228\end{fulllineitems}
24229
24230
24231
24232\begin{savenotes}\sphinxattablestart
24233\centering
24234\begin{tabulary}{\linewidth}[t]{|T|T|}
24235\hline
24236
24237\sphinxcode{TKT\_FLG\_FORWARDABLE}
24238&
24239\sphinxcode{0x40000000}
24240\\
24241\hline
24242\end{tabulary}
24243\par
24244\sphinxattableend\end{savenotes}
24245
24246
24247\subsubsection{TKT\_FLG\_FORWARDED}
24248\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)}
24249
24250\begin{fulllineitems}
24251\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_FORWARDED:TKT_FLG_FORWARDED}}\pysigline{\sphinxbfcode{TKT\_FLG\_FORWARDED}}
24252\end{fulllineitems}
24253
24254
24255
24256\begin{savenotes}\sphinxattablestart
24257\centering
24258\begin{tabulary}{\linewidth}[t]{|T|T|}
24259\hline
24260
24261\sphinxcode{TKT\_FLG\_FORWARDED}
24262&
24263\sphinxcode{0x20000000}
24264\\
24265\hline
24266\end{tabulary}
24267\par
24268\sphinxattableend\end{savenotes}
24269
24270
24271\subsubsection{TKT\_FLG\_HW\_AUTH}
24272\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)}
24273
24274\begin{fulllineitems}
24275\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_HW_AUTH:TKT_FLG_HW_AUTH}}\pysigline{\sphinxbfcode{TKT\_FLG\_HW\_AUTH}}
24276\end{fulllineitems}
24277
24278
24279
24280\begin{savenotes}\sphinxattablestart
24281\centering
24282\begin{tabulary}{\linewidth}[t]{|T|T|}
24283\hline
24284
24285\sphinxcode{TKT\_FLG\_HW\_AUTH}
24286&
24287\sphinxcode{0x00100000}
24288\\
24289\hline
24290\end{tabulary}
24291\par
24292\sphinxattableend\end{savenotes}
24293
24294
24295\subsubsection{TKT\_FLG\_INITIAL}
24296\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)}
24297
24298\begin{fulllineitems}
24299\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_INITIAL:TKT_FLG_INITIAL}}\pysigline{\sphinxbfcode{TKT\_FLG\_INITIAL}}
24300\end{fulllineitems}
24301
24302
24303
24304\begin{savenotes}\sphinxattablestart
24305\centering
24306\begin{tabulary}{\linewidth}[t]{|T|T|}
24307\hline
24308
24309\sphinxcode{TKT\_FLG\_INITIAL}
24310&
24311\sphinxcode{0x00400000}
24312\\
24313\hline
24314\end{tabulary}
24315\par
24316\sphinxattableend\end{savenotes}
24317
24318
24319\subsubsection{TKT\_FLG\_INVALID}
24320\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)}
24321
24322\begin{fulllineitems}
24323\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_INVALID:TKT_FLG_INVALID}}\pysigline{\sphinxbfcode{TKT\_FLG\_INVALID}}
24324\end{fulllineitems}
24325
24326
24327
24328\begin{savenotes}\sphinxattablestart
24329\centering
24330\begin{tabulary}{\linewidth}[t]{|T|T|}
24331\hline
24332
24333\sphinxcode{TKT\_FLG\_INVALID}
24334&
24335\sphinxcode{0x01000000}
24336\\
24337\hline
24338\end{tabulary}
24339\par
24340\sphinxattableend\end{savenotes}
24341
24342
24343\subsubsection{TKT\_FLG\_MAY\_POSTDATE}
24344\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)}
24345
24346\begin{fulllineitems}
24347\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_MAY_POSTDATE:TKT_FLG_MAY_POSTDATE}}\pysigline{\sphinxbfcode{TKT\_FLG\_MAY\_POSTDATE}}
24348\end{fulllineitems}
24349
24350
24351
24352\begin{savenotes}\sphinxattablestart
24353\centering
24354\begin{tabulary}{\linewidth}[t]{|T|T|}
24355\hline
24356
24357\sphinxcode{TKT\_FLG\_MAY\_POSTDATE}
24358&
24359\sphinxcode{0x04000000}
24360\\
24361\hline
24362\end{tabulary}
24363\par
24364\sphinxattableend\end{savenotes}
24365
24366
24367\subsubsection{TKT\_FLG\_OK\_AS\_DELEGATE}
24368\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)}
24369
24370\begin{fulllineitems}
24371\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_OK_AS_DELEGATE:TKT_FLG_OK_AS_DELEGATE}}\pysigline{\sphinxbfcode{TKT\_FLG\_OK\_AS\_DELEGATE}}
24372\end{fulllineitems}
24373
24374
24375
24376\begin{savenotes}\sphinxattablestart
24377\centering
24378\begin{tabulary}{\linewidth}[t]{|T|T|}
24379\hline
24380
24381\sphinxcode{TKT\_FLG\_OK\_AS\_DELEGATE}
24382&
24383\sphinxcode{0x00040000}
24384\\
24385\hline
24386\end{tabulary}
24387\par
24388\sphinxattableend\end{savenotes}
24389
24390
24391\subsubsection{TKT\_FLG\_POSTDATED}
24392\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)}
24393
24394\begin{fulllineitems}
24395\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_POSTDATED:TKT_FLG_POSTDATED}}\pysigline{\sphinxbfcode{TKT\_FLG\_POSTDATED}}
24396\end{fulllineitems}
24397
24398
24399
24400\begin{savenotes}\sphinxattablestart
24401\centering
24402\begin{tabulary}{\linewidth}[t]{|T|T|}
24403\hline
24404
24405\sphinxcode{TKT\_FLG\_POSTDATED}
24406&
24407\sphinxcode{0x02000000}
24408\\
24409\hline
24410\end{tabulary}
24411\par
24412\sphinxattableend\end{savenotes}
24413
24414
24415\subsubsection{TKT\_FLG\_PRE\_AUTH}
24416\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)}
24417
24418\begin{fulllineitems}
24419\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_PRE_AUTH:TKT_FLG_PRE_AUTH}}\pysigline{\sphinxbfcode{TKT\_FLG\_PRE\_AUTH}}
24420\end{fulllineitems}
24421
24422
24423
24424\begin{savenotes}\sphinxattablestart
24425\centering
24426\begin{tabulary}{\linewidth}[t]{|T|T|}
24427\hline
24428
24429\sphinxcode{TKT\_FLG\_PRE\_AUTH}
24430&
24431\sphinxcode{0x00200000}
24432\\
24433\hline
24434\end{tabulary}
24435\par
24436\sphinxattableend\end{savenotes}
24437
24438
24439\subsubsection{TKT\_FLG\_PROXIABLE}
24440\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)}
24441
24442\begin{fulllineitems}
24443\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXIABLE:TKT_FLG_PROXIABLE}}\pysigline{\sphinxbfcode{TKT\_FLG\_PROXIABLE}}
24444\end{fulllineitems}
24445
24446
24447
24448\begin{savenotes}\sphinxattablestart
24449\centering
24450\begin{tabulary}{\linewidth}[t]{|T|T|}
24451\hline
24452
24453\sphinxcode{TKT\_FLG\_PROXIABLE}
24454&
24455\sphinxcode{0x10000000}
24456\\
24457\hline
24458\end{tabulary}
24459\par
24460\sphinxattableend\end{savenotes}
24461
24462
24463\subsubsection{TKT\_FLG\_PROXY}
24464\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)}
24465
24466\begin{fulllineitems}
24467\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_PROXY:TKT_FLG_PROXY}}\pysigline{\sphinxbfcode{TKT\_FLG\_PROXY}}
24468\end{fulllineitems}
24469
24470
24471
24472\begin{savenotes}\sphinxattablestart
24473\centering
24474\begin{tabulary}{\linewidth}[t]{|T|T|}
24475\hline
24476
24477\sphinxcode{TKT\_FLG\_PROXY}
24478&
24479\sphinxcode{0x08000000}
24480\\
24481\hline
24482\end{tabulary}
24483\par
24484\sphinxattableend\end{savenotes}
24485
24486
24487\subsubsection{TKT\_FLG\_RENEWABLE}
24488\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)}
24489
24490\begin{fulllineitems}
24491\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_RENEWABLE:TKT_FLG_RENEWABLE}}\pysigline{\sphinxbfcode{TKT\_FLG\_RENEWABLE}}
24492\end{fulllineitems}
24493
24494
24495
24496\begin{savenotes}\sphinxattablestart
24497\centering
24498\begin{tabulary}{\linewidth}[t]{|T|T|}
24499\hline
24500
24501\sphinxcode{TKT\_FLG\_RENEWABLE}
24502&
24503\sphinxcode{0x00800000}
24504\\
24505\hline
24506\end{tabulary}
24507\par
24508\sphinxattableend\end{savenotes}
24509
24510
24511\subsubsection{TKT\_FLG\_TRANSIT\_POLICY\_CHECKED}
24512\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)}
24513
24514\begin{fulllineitems}
24515\phantomsection\label{\detokenize{appdev/refs/macros/TKT_FLG_TRANSIT_POLICY_CHECKED:TKT_FLG_TRANSIT_POLICY_CHECKED}}\pysigline{\sphinxbfcode{TKT\_FLG\_TRANSIT\_POLICY\_CHECKED}}
24516\end{fulllineitems}
24517
24518
24519
24520\begin{savenotes}\sphinxattablestart
24521\centering
24522\begin{tabulary}{\linewidth}[t]{|T|T|}
24523\hline
24524
24525\sphinxcode{TKT\_FLG\_TRANSIT\_POLICY\_CHECKED}
24526&
24527\sphinxcode{0x00080000}
24528\\
24529\hline
24530\end{tabulary}
24531\par
24532\sphinxattableend\end{savenotes}
24533
24534
24535\subsubsection{VALID\_INT\_BITS}
24536\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)}
24537
24538\begin{fulllineitems}
24539\phantomsection\label{\detokenize{appdev/refs/macros/VALID_INT_BITS:VALID_INT_BITS}}\pysigline{\sphinxbfcode{VALID\_INT\_BITS}}
24540\end{fulllineitems}
24541
24542
24543
24544\begin{savenotes}\sphinxattablestart
24545\centering
24546\begin{tabulary}{\linewidth}[t]{|T|T|}
24547\hline
24548
24549\sphinxcode{VALID\_INT\_BITS}
24550&
24551\sphinxcode{INT\_MAX}
24552\\
24553\hline
24554\end{tabulary}
24555\par
24556\sphinxattableend\end{savenotes}
24557
24558
24559\subsubsection{VALID\_UINT\_BITS}
24560\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)}
24561
24562\begin{fulllineitems}
24563\phantomsection\label{\detokenize{appdev/refs/macros/VALID_UINT_BITS:VALID_UINT_BITS}}\pysigline{\sphinxbfcode{VALID\_UINT\_BITS}}
24564\end{fulllineitems}
24565
24566
24567
24568\begin{savenotes}\sphinxattablestart
24569\centering
24570\begin{tabulary}{\linewidth}[t]{|T|T|}
24571\hline
24572
24573\sphinxcode{VALID\_UINT\_BITS}
24574&
24575\sphinxcode{UINT\_MAX}
24576\\
24577\hline
24578\end{tabulary}
24579\par
24580\sphinxattableend\end{savenotes}
24581
24582
24583\subsubsection{krb5\_const}
24584\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)}
24585
24586\begin{fulllineitems}
24587\phantomsection\label{\detokenize{appdev/refs/macros/krb5_const:krb5_const}}\pysigline{\sphinxbfcode{krb5\_const}}
24588\end{fulllineitems}
24589
24590
24591
24592\begin{savenotes}\sphinxattablestart
24593\centering
24594\begin{tabulary}{\linewidth}[t]{|T|T|}
24595\hline
24596
24597\sphinxcode{krb5\_const}
24598&
24599\sphinxcode{const}
24600\\
24601\hline
24602\end{tabulary}
24603\par
24604\sphinxattableend\end{savenotes}
24605
24606
24607\subsubsection{krb5\_princ\_component}
24608\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)}
24609
24610\begin{fulllineitems}
24611\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_component:krb5_princ_component}}\pysigline{\sphinxbfcode{krb5\_princ\_component}}
24612\end{fulllineitems}
24613
24614
24615
24616\begin{savenotes}\sphinxattablestart
24617\centering
24618\begin{tabulary}{\linewidth}[t]{|T|T|}
24619\hline
24620
24621\sphinxcode{krb5\_princ\_component (context, princ, i)}
24622&
24623\sphinxcode{(((i) \textless{} krb5\_princ\_size(context, princ)) ? (princ)-\textgreater{}data + (i) : NULL)}
24624\\
24625\hline
24626\end{tabulary}
24627\par
24628\sphinxattableend\end{savenotes}
24629
24630
24631\subsubsection{krb5\_princ\_name}
24632\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)}
24633
24634\begin{fulllineitems}
24635\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_name:krb5_princ_name}}\pysigline{\sphinxbfcode{krb5\_princ\_name}}
24636\end{fulllineitems}
24637
24638
24639
24640\begin{savenotes}\sphinxattablestart
24641\centering
24642\begin{tabulary}{\linewidth}[t]{|T|T|}
24643\hline
24644
24645\sphinxcode{krb5\_princ\_name (context, princ)}
24646&
24647\sphinxcode{(princ)-\textgreater{}data}
24648\\
24649\hline
24650\end{tabulary}
24651\par
24652\sphinxattableend\end{savenotes}
24653
24654
24655\subsubsection{krb5\_princ\_realm}
24656\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)}
24657
24658\begin{fulllineitems}
24659\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_realm:krb5_princ_realm}}\pysigline{\sphinxbfcode{krb5\_princ\_realm}}
24660\end{fulllineitems}
24661
24662
24663
24664\begin{savenotes}\sphinxattablestart
24665\centering
24666\begin{tabulary}{\linewidth}[t]{|T|T|}
24667\hline
24668
24669\sphinxcode{krb5\_princ\_realm (context, princ)}
24670&
24671\sphinxcode{(\&(princ)-\textgreater{}realm)}
24672\\
24673\hline
24674\end{tabulary}
24675\par
24676\sphinxattableend\end{savenotes}
24677
24678
24679\subsubsection{krb5\_princ\_set\_realm}
24680\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)}
24681
24682\begin{fulllineitems}
24683\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm:krb5_princ_set_realm}}\pysigline{\sphinxbfcode{krb5\_princ\_set\_realm}}
24684\end{fulllineitems}
24685
24686
24687
24688\begin{savenotes}\sphinxattablestart
24689\centering
24690\begin{tabulary}{\linewidth}[t]{|T|T|}
24691\hline
24692
24693\sphinxcode{krb5\_princ\_set\_realm (context, princ, value)}
24694&
24695\sphinxcode{((princ)-\textgreater{}realm = *(value))}
24696\\
24697\hline
24698\end{tabulary}
24699\par
24700\sphinxattableend\end{savenotes}
24701
24702
24703\subsubsection{krb5\_princ\_set\_realm\_data}
24704\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)}
24705
24706\begin{fulllineitems}
24707\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_data:krb5_princ_set_realm_data}}\pysigline{\sphinxbfcode{krb5\_princ\_set\_realm\_data}}
24708\end{fulllineitems}
24709
24710
24711
24712\begin{savenotes}\sphinxattablestart
24713\centering
24714\begin{tabulary}{\linewidth}[t]{|T|T|}
24715\hline
24716
24717\sphinxcode{krb5\_princ\_set\_realm\_data (context, princ, value)}
24718&
24719\sphinxcode{(princ)-\textgreater{}realm.data = (value)}
24720\\
24721\hline
24722\end{tabulary}
24723\par
24724\sphinxattableend\end{savenotes}
24725
24726
24727\subsubsection{krb5\_princ\_set\_realm\_length}
24728\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)}
24729
24730\begin{fulllineitems}
24731\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_set_realm_length:krb5_princ_set_realm_length}}\pysigline{\sphinxbfcode{krb5\_princ\_set\_realm\_length}}
24732\end{fulllineitems}
24733
24734
24735
24736\begin{savenotes}\sphinxattablestart
24737\centering
24738\begin{tabulary}{\linewidth}[t]{|T|T|}
24739\hline
24740
24741\sphinxcode{krb5\_princ\_set\_realm\_length (context, princ, value)}
24742&
24743\sphinxcode{(princ)-\textgreater{}realm.length = (value)}
24744\\
24745\hline
24746\end{tabulary}
24747\par
24748\sphinxattableend\end{savenotes}
24749
24750
24751\subsubsection{krb5\_princ\_size}
24752\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)}
24753
24754\begin{fulllineitems}
24755\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_size:krb5_princ_size}}\pysigline{\sphinxbfcode{krb5\_princ\_size}}
24756\end{fulllineitems}
24757
24758
24759
24760\begin{savenotes}\sphinxattablestart
24761\centering
24762\begin{tabulary}{\linewidth}[t]{|T|T|}
24763\hline
24764
24765\sphinxcode{krb5\_princ\_size (context, princ)}
24766&
24767\sphinxcode{(princ)-\textgreater{}length}
24768\\
24769\hline
24770\end{tabulary}
24771\par
24772\sphinxattableend\end{savenotes}
24773
24774
24775\subsubsection{krb5\_princ\_type}
24776\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)}
24777
24778\begin{fulllineitems}
24779\phantomsection\label{\detokenize{appdev/refs/macros/krb5_princ_type:krb5_princ_type}}\pysigline{\sphinxbfcode{krb5\_princ\_type}}
24780\end{fulllineitems}
24781
24782
24783
24784\begin{savenotes}\sphinxattablestart
24785\centering
24786\begin{tabulary}{\linewidth}[t]{|T|T|}
24787\hline
24788
24789\sphinxcode{krb5\_princ\_type (context, princ)}
24790&
24791\sphinxcode{(princ)-\textgreater{}type}
24792\\
24793\hline
24794\end{tabulary}
24795\par
24796\sphinxattableend\end{savenotes}
24797
24798
24799\subsubsection{krb5\_roundup}
24800\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)}
24801
24802\begin{fulllineitems}
24803\phantomsection\label{\detokenize{appdev/refs/macros/krb5_roundup:krb5_roundup}}\pysigline{\sphinxbfcode{krb5\_roundup}}
24804\end{fulllineitems}
24805
24806
24807
24808\begin{savenotes}\sphinxattablestart
24809\centering
24810\begin{tabulary}{\linewidth}[t]{|T|T|}
24811\hline
24812
24813\sphinxcode{krb5\_roundup (x, y)}
24814&
24815\sphinxcode{((((x) + (y) - 1)/(y))*(y))}
24816\\
24817\hline
24818\end{tabulary}
24819\par
24820\sphinxattableend\end{savenotes}
24821
24822
24823\subsubsection{krb5\_x}
24824\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)}
24825
24826\begin{fulllineitems}
24827\phantomsection\label{\detokenize{appdev/refs/macros/krb5_x:krb5_x}}\pysigline{\sphinxbfcode{krb5\_x}}
24828\end{fulllineitems}
24829
24830
24831
24832\begin{savenotes}\sphinxattablestart
24833\centering
24834\begin{tabulary}{\linewidth}[t]{|T|T|}
24835\hline
24836
24837\sphinxcode{krb5\_x (ptr, args)}
24838&
24839\sphinxcode{((ptr)?((*(ptr)) args):(abort(),1))}
24840\\
24841\hline
24842\end{tabulary}
24843\par
24844\sphinxattableend\end{savenotes}
24845
24846
24847\subsubsection{krb5\_xc}
24848\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)}
24849
24850\begin{fulllineitems}
24851\phantomsection\label{\detokenize{appdev/refs/macros/krb5_xc:krb5_xc}}\pysigline{\sphinxbfcode{krb5\_xc}}
24852\end{fulllineitems}
24853
24854
24855
24856\begin{savenotes}\sphinxattablestart
24857\centering
24858\begin{tabulary}{\linewidth}[t]{|T|T|}
24859\hline
24860
24861\sphinxcode{krb5\_xc (ptr, args)}
24862&
24863\sphinxcode{((ptr)?((*(ptr)) args):(abort(),(char*)0))}
24864\\
24865\hline
24866\end{tabulary}
24867\par
24868\sphinxattableend\end{savenotes}
24869
24870
24871\subsection{Deprecated macros}
24872\label{\detokenize{appdev/refs/macros/index:deprecated-macros}}
24873
24874\subsubsection{krb524\_convert\_creds\_kdc}
24875\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)}
24876
24877\begin{fulllineitems}
24878\phantomsection\label{\detokenize{appdev/refs/macros/krb524_convert_creds_kdc:krb524_convert_creds_kdc}}\pysigline{\sphinxbfcode{krb524\_convert\_creds\_kdc}}
24879\end{fulllineitems}
24880
24881
24882
24883\begin{savenotes}\sphinxattablestart
24884\centering
24885\begin{tabulary}{\linewidth}[t]{|T|T|}
24886\hline
24887
24888\sphinxcode{krb524\_convert\_creds\_kdc}
24889&
24890\sphinxcode{krb5\_524\_convert\_creds}
24891\\
24892\hline
24893\end{tabulary}
24894\par
24895\sphinxattableend\end{savenotes}
24896
24897
24898\subsubsection{krb524\_init\_ets}
24899\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)}
24900
24901\begin{fulllineitems}
24902\phantomsection\label{\detokenize{appdev/refs/macros/krb524_init_ets:krb524_init_ets}}\pysigline{\sphinxbfcode{krb524\_init\_ets}}
24903\end{fulllineitems}
24904
24905
24906
24907\begin{savenotes}\sphinxattablestart
24908\centering
24909\begin{tabulary}{\linewidth}[t]{|T|T|}
24910\hline
24911
24912\sphinxcode{krb524\_init\_ets (x)}
24913&
24914\sphinxcode{(0)}
24915\\
24916\hline
24917\end{tabulary}
24918\par
24919\sphinxattableend\end{savenotes}
24920
24921
24922
24923\renewcommand{\indexname}{Index}
24924\printindex
24925\end{document}