xref: /freebsd/lib/libgssapi/gss_add_cred.3 (revision c0b9f4fe659b6839541970eb5675e57f4d814969)
1c0b9f4feSDoug Rabson.\" -*- nroff -*-
2c0b9f4feSDoug Rabson.\"
3c0b9f4feSDoug Rabson.\" Copyright (c) 2005 Doug Rabson
4c0b9f4feSDoug Rabson.\" All rights reserved.
5c0b9f4feSDoug Rabson.\"
6c0b9f4feSDoug Rabson.\" Redistribution and use in source and binary forms, with or without
7c0b9f4feSDoug Rabson.\" modification, are permitted provided that the following conditions
8c0b9f4feSDoug Rabson.\" are met:
9c0b9f4feSDoug Rabson.\" 1. Redistributions of source code must retain the above copyright
10c0b9f4feSDoug Rabson.\"    notice, this list of conditions and the following disclaimer.
11c0b9f4feSDoug Rabson.\" 2. Redistributions in binary form must reproduce the above copyright
12c0b9f4feSDoug Rabson.\"    notice, this list of conditions and the following disclaimer in the
13c0b9f4feSDoug Rabson.\"    documentation and/or other materials provided with the distribution.
14c0b9f4feSDoug Rabson.\"
15c0b9f4feSDoug Rabson.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16c0b9f4feSDoug Rabson.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17c0b9f4feSDoug Rabson.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18c0b9f4feSDoug Rabson.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19c0b9f4feSDoug Rabson.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20c0b9f4feSDoug Rabson.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21c0b9f4feSDoug Rabson.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22c0b9f4feSDoug Rabson.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23c0b9f4feSDoug Rabson.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24c0b9f4feSDoug Rabson.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25c0b9f4feSDoug Rabson.\" SUCH DAMAGE.
26c0b9f4feSDoug Rabson.\"
27c0b9f4feSDoug Rabson.\"	$FreeBSD$
28c0b9f4feSDoug Rabson.\"
29c0b9f4feSDoug Rabson.\" Copyright (C) The Internet Society (2000).  All Rights Reserved.
30c0b9f4feSDoug Rabson.\"
31c0b9f4feSDoug Rabson.\" This document and translations of it may be copied and furnished to
32c0b9f4feSDoug Rabson.\" others, and derivative works that comment on or otherwise explain it
33c0b9f4feSDoug Rabson.\" or assist in its implementation may be prepared, copied, published
34c0b9f4feSDoug Rabson.\" and distributed, in whole or in part, without restriction of any
35c0b9f4feSDoug Rabson.\" kind, provided that the above copyright notice and this paragraph are
36c0b9f4feSDoug Rabson.\" included on all such copies and derivative works.  However, this
37c0b9f4feSDoug Rabson.\" document itself may not be modified in any way, such as by removing
38c0b9f4feSDoug Rabson.\" the copyright notice or references to the Internet Society or other
39c0b9f4feSDoug Rabson.\" Internet organizations, except as needed for the purpose of
40c0b9f4feSDoug Rabson.\" developing Internet standards in which case the procedures for
41c0b9f4feSDoug Rabson.\" copyrights defined in the Internet Standards process must be
42c0b9f4feSDoug Rabson.\" followed, or as required to translate it into languages other than
43c0b9f4feSDoug Rabson.\" English.
44c0b9f4feSDoug Rabson.\"
45c0b9f4feSDoug Rabson.\" The limited permissions granted above are perpetual and will not be
46c0b9f4feSDoug Rabson.\" revoked by the Internet Society or its successors or assigns.
47c0b9f4feSDoug Rabson.\"
48c0b9f4feSDoug Rabson.\" This document and the information contained herein is provided on an
49c0b9f4feSDoug Rabson.\" "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
50c0b9f4feSDoug Rabson.\" TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
51c0b9f4feSDoug Rabson.\" BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
52c0b9f4feSDoug Rabson.\" HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
53c0b9f4feSDoug Rabson.\" MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
54c0b9f4feSDoug Rabson.\"
55c0b9f4feSDoug Rabson.\" The following commands are required for all man pages.
56c0b9f4feSDoug Rabson.Dd November 12, 2005
57c0b9f4feSDoug Rabson.Os
58c0b9f4feSDoug Rabson.Dt GSS_ADD_CRED 3 PRM
59c0b9f4feSDoug Rabson.Sh NAME
60c0b9f4feSDoug Rabson.Nm gss_add_cred
61c0b9f4feSDoug Rabson.Nd Construct credentials incrementally
62c0b9f4feSDoug Rabson.\" This next command is for sections 2 and 3 only.
63c0b9f4feSDoug Rabson.\" .Sh LIBRARY
64c0b9f4feSDoug Rabson.Sh SYNOPSIS
65c0b9f4feSDoug Rabson.In "gssapi/gssapi.h"
66c0b9f4feSDoug Rabson.Ft OM_uint32
67c0b9f4feSDoug Rabson.Fo gss_add_cred
68c0b9f4feSDoug Rabson.Fa "OM_uint32 *minor_status"
69c0b9f4feSDoug Rabson.Fa "const gss_cred_id_t input_cred_handle"
70c0b9f4feSDoug Rabson.Fa "const gss_name_t desired_name"
71c0b9f4feSDoug Rabson.Fa "const gss_OID desired_mech"
72c0b9f4feSDoug Rabson.Fa "gss_cred_usage_t cred_usage"
73c0b9f4feSDoug Rabson.Fa "OM_uint32 initiator_time_req"
74c0b9f4feSDoug Rabson.Fa "OM_uint32 acceptor_time_req"
75c0b9f4feSDoug Rabson.Fa "gss_cred_id_t *output_cred_handle"
76c0b9f4feSDoug Rabson.Fa "gss_OID_set *actual_mechs"
77c0b9f4feSDoug Rabson.Fa "OM_uint32 *initiator_time_rec"
78c0b9f4feSDoug Rabson.Fa "OM_uint32 *acceptor_time_rec"
79c0b9f4feSDoug Rabson.Fc
80c0b9f4feSDoug Rabson.Sh DESCRIPTION
81c0b9f4feSDoug RabsonAdds a credential-element to a credential.
82c0b9f4feSDoug RabsonThe credential-element is identified by the name of the principal to
83c0b9f4feSDoug Rabsonwhich it refers.
84c0b9f4feSDoug RabsonGSS-API implementations must impose a local access-control policy on
85c0b9f4feSDoug Rabsoncallers of this routine to prevent unauthorized callers from acquiring
86c0b9f4feSDoug Rabsoncredential-elements to which they are not entitled.
87c0b9f4feSDoug RabsonThis routine is not intended to provide a "login to the network"
88c0b9f4feSDoug Rabsonfunction,
89c0b9f4feSDoug Rabsonas such a function would involve the creation of new
90c0b9f4feSDoug Rabsonmechanism-specific authentication data,
91c0b9f4feSDoug Rabsonrather than merely acquiring a GSS-API handle to existing data.
92c0b9f4feSDoug RabsonSuch functions,
93c0b9f4feSDoug Rabsonif required,
94c0b9f4feSDoug Rabsonshould be defined in implementation-specific extensions to the API.
95c0b9f4feSDoug Rabson.Pp
96c0b9f4feSDoug RabsonIf
97c0b9f4feSDoug Rabson.Fa desired_name
98c0b9f4feSDoug Rabsonis
99c0b9f4feSDoug Rabson.Dv GSS_C_NO_NAME ,
100c0b9f4feSDoug Rabsonthe call is interpreted as a request to add a credential element that
101c0b9f4feSDoug Rabsonwill invoke default behavior when passed to
102c0b9f4feSDoug Rabson.Fn gss_init_sec_context
103c0b9f4feSDoug Rabson(if cred_usage is
104c0b9f4feSDoug Rabson.Dv GSS_C_INITIATE
105c0b9f4feSDoug Rabsonor
106c0b9f4feSDoug Rabson.Dv GSS_C_BOTH )
107c0b9f4feSDoug Rabsonor
108c0b9f4feSDoug Rabson.Fn gss_accept_sec_context
109c0b9f4feSDoug Rabson(if
110c0b9f4feSDoug Rabson.Fa cred_usage
111c0b9f4feSDoug Rabsonis
112c0b9f4feSDoug Rabson.Dv GSS_C_ACCEPT
113c0b9f4feSDoug Rabsonor
114c0b9f4feSDoug Rabson.Dv GSS_C_BOTH ).
115c0b9f4feSDoug Rabson.PP
116c0b9f4feSDoug RabsonThis routine is expected to be used primarily by context acceptors,
117c0b9f4feSDoug Rabsonsince implementations are likely to provide mechanism-specific ways of
118c0b9f4feSDoug Rabsonobtaining GSS-API initiator credentials from the system login process.
119c0b9f4feSDoug RabsonSome implementations may therefore not support the acquisition of
120c0b9f4feSDoug Rabson.Dv GSS_C_INITIATE
121c0b9f4feSDoug Rabsonor
122c0b9f4feSDoug Rabson.Dv GSS_C_BOTH
123c0b9f4feSDoug Rabsoncredentials via
124c0b9f4feSDoug Rabson.Fn gss_acquire_cred
125c0b9f4feSDoug Rabsonfor any name other than
126c0b9f4feSDoug Rabson.Dv GSS_C_NO_NAME ,
127c0b9f4feSDoug Rabsonor a name produced by applying either
128c0b9f4feSDoug Rabson.Fn gss_inquire_cred
129c0b9f4feSDoug Rabsonto a valid credential,
130c0b9f4feSDoug Rabsonor
131c0b9f4feSDoug Rabson.Fn gss_inquire_context
132c0b9f4feSDoug Rabsonto an active context.
133c0b9f4feSDoug Rabson.Pp
134c0b9f4feSDoug RabsonIf credential acquisition is time-consuming for a mechanism,
135c0b9f4feSDoug Rabsonthe mechanism may choose to delay the actual acquisition until the
136c0b9f4feSDoug Rabsoncredential is required (e.g. by
137c0b9f4feSDoug Rabson.Fn gss_init_sec_context
138c0b9f4feSDoug Rabsonor
139c0b9f4feSDoug Rabson.Fn gss_accept_sec_context ).
140c0b9f4feSDoug RabsonSuch mechanism-specific implementation decisions should be invisible
141c0b9f4feSDoug Rabsonto the calling application;
142c0b9f4feSDoug Rabsonthus a call of
143c0b9f4feSDoug Rabson.Fn gss_inquire_cred
144c0b9f4feSDoug Rabsonimmediately following the call of
145c0b9f4feSDoug Rabson.Fn gss_add_cred
146c0b9f4feSDoug Rabsonmust return valid credential data,
147c0b9f4feSDoug Rabsonand may therefore incur the overhead of a deferred credential acquisition.
148c0b9f4feSDoug Rabson.Pp
149c0b9f4feSDoug RabsonThis routine can be used to either compose a new credential containing
150c0b9f4feSDoug Rabsonall credential-elements of the original in addition to the
151c0b9f4feSDoug Rabsonnewly-acquire credential-element,
152c0b9f4feSDoug Rabsonor to add the new credential-element to an existing credential.
153c0b9f4feSDoug RabsonIf
154c0b9f4feSDoug Rabson.Dv NULL
155c0b9f4feSDoug Rabsonis specified for the
156c0b9f4feSDoug Rabson.Fa output_cred_handle
157c0b9f4feSDoug Rabsonparameter argument,
158c0b9f4feSDoug Rabsonthe new credential-element will be added to the credential identified
159c0b9f4feSDoug Rabsonby
160c0b9f4feSDoug Rabson.Fa input_cred_handle ;
161c0b9f4feSDoug Rabsonif a valid pointer is specified for the
162c0b9f4feSDoug Rabson.Fa output_cred_handle
163c0b9f4feSDoug Rabsonparameter,
164c0b9f4feSDoug Rabsona new credential handle will be created.
165c0b9f4feSDoug Rabson.Pp
166c0b9f4feSDoug RabsonIf
167c0b9f4feSDoug Rabson.Dv GSS_C_NO_CREDENTIAL
168c0b9f4feSDoug Rabsonis specified as the
169c0b9f4feSDoug Rabson.Fa input_cred_handle ,
170c0b9f4feSDoug Rabson.Fn gss_add_cred
171c0b9f4feSDoug Rabsonwill compose a credential (and set the
172c0b9f4feSDoug Rabson.Fa output_cred_handle
173c0b9f4feSDoug Rabsonparameter accordingly) based on default behavior.
174c0b9f4feSDoug RabsonThat is, the call will have the same effect as if the application had
175c0b9f4feSDoug Rabsonfirst made a call to
176c0b9f4feSDoug Rabson.Fn gss_acquire_cred ,
177c0b9f4feSDoug Rabsonspecifying the same usage and passing
178c0b9f4feSDoug Rabson.Dv GSS_C_NO_NAME
179c0b9f4feSDoug Rabsonas the
180c0b9f4feSDoug Rabson.Fa desired_name
181c0b9f4feSDoug Rabsonparameter to obtain an explicit credential handle embodying default
182c0b9f4feSDoug Rabsonbehavior,
183c0b9f4feSDoug Rabsonpassed this credential handle to
184c0b9f4feSDoug Rabson.Fn gss_add_cred ,
185c0b9f4feSDoug Rabsonand finally called
186c0b9f4feSDoug Rabson.Fn gss_release_cred
187c0b9f4feSDoug Rabsonon the first credential handle.
188c0b9f4feSDoug Rabson.Pp
189c0b9f4feSDoug RabsonIf
190c0b9f4feSDoug Rabson.Dv GSS_C_NO_CREDENTIAL
191c0b9f4feSDoug Rabsonis specified as the
192c0b9f4feSDoug Rabson.Fa input_cred_handle
193c0b9f4feSDoug Rabsonparameter,
194c0b9f4feSDoug Rabsona non-
195c0b9f4feSDoug Rabson.Dv NULL
196c0b9f4feSDoug Rabson.Fa output_cred_handle
197c0b9f4feSDoug Rabsonmust be supplied.
198c0b9f4feSDoug Rabson.Sh PARAMETERS
199c0b9f4feSDoug Rabson.Bl -tag
200c0b9f4feSDoug Rabson.It minor_status
201c0b9f4feSDoug RabsonMechanism specific status code.
202c0b9f4feSDoug Rabson.It input_cred_handle
203c0b9f4feSDoug RabsonThe credential to which a credential-element will be added.
204c0b9f4feSDoug RabsonIf
205c0b9f4feSDoug Rabson.Dv GSS_C_NO_CREDENTIAL
206c0b9f4feSDoug Rabsonis specified, the routine will compose the new credential based on
207c0b9f4feSDoug Rabsondefault behavior (see description above).
208c0b9f4feSDoug RabsonNote that, while the credential-handle is not modified by
209c0b9f4feSDoug Rabson.Fn gss_add_cred ,
210c0b9f4feSDoug Rabsonthe underlying credential will be modified if
211c0b9f4feSDoug Rabson.Fa output_credential_handle
212c0b9f4feSDoug Rabsonis
213c0b9f4feSDoug Rabson.Dv NULL .
214c0b9f4feSDoug Rabson.It desired_name
215c0b9f4feSDoug RabsonName of principal whose credential should be acquired.
216c0b9f4feSDoug Rabson.It desired_mech
217c0b9f4feSDoug RabsonUnderlying security mechanism with which the credential may be used.
218c0b9f4feSDoug Rabson.It cred_usage
219c0b9f4feSDoug Rabson.Bl -tag -width "GSS_C_INITIATE"
220c0b9f4feSDoug Rabson.It GSS_C_BOTH
221c0b9f4feSDoug RabsonCredential may be used either to initiate or accept security
222c0b9f4feSDoug Rabsoncontexts.
223c0b9f4feSDoug Rabson.It GSS_C_INITIATE
224c0b9f4feSDoug RabsonCredential will only be used to initiate security contexts.
225c0b9f4feSDoug Rabson.It GSS_C_ACCEPT
226c0b9f4feSDoug RabsonCredential will only be used to accept security contexts.
227c0b9f4feSDoug Rabson.El
228c0b9f4feSDoug Rabson.It initiator_time_req
229c0b9f4feSDoug RabsonNumber of seconds that the credential should remain valid for
230c0b9f4feSDoug Rabsoninitiating security contexts.
231c0b9f4feSDoug RabsonThis argument is ignored if the composed credentials are of type
232c0b9f4feSDoug Rabson.Dv GSS_C_ACCEPT .
233c0b9f4feSDoug RabsonSpecify
234c0b9f4feSDoug Rabson.Dv GSS_C_INDEFINITE
235c0b9f4feSDoug Rabsonto request that the credentials have the maximum permitted initiator lifetime.
236c0b9f4feSDoug Rabson.It acceptor_time_req
237c0b9f4feSDoug RabsonNumber of seconds that the credential should remain valid for
238c0b9f4feSDoug Rabsonaccepting security contexts.
239c0b9f4feSDoug RabsonThis argument is ignored if the composed credentials are of type
240c0b9f4feSDoug Rabson.Dv GSS_C_INITIATE .
241c0b9f4feSDoug RabsonSpecify
242c0b9f4feSDoug Rabson.Dv GSS_C_INDEFINITE
243c0b9f4feSDoug Rabsonto request that the credentials have the maximum permitted initiator lifetime.
244c0b9f4feSDoug Rabson.It output_cred_handle
245c0b9f4feSDoug RabsonThe returned credential handle,
246c0b9f4feSDoug Rabsoncontaining
247c0b9f4feSDoug Rabsonthe new credential-element and all the credential-elements from
248c0b9f4feSDoug Rabson.Fa input_cred_handle .
249c0b9f4feSDoug RabsonIf a valid pointer to a
250c0b9f4feSDoug Rabson.Fa gss_cred_id_t
251c0b9f4feSDoug Rabsonis supplied for this parameter,
252c0b9f4feSDoug Rabson.Fn gss_add_cred
253c0b9f4feSDoug Rabsoncreates a new credential handle containing all credential-elements
254c0b9f4feSDoug Rabsonfrom the
255c0b9f4feSDoug Rabson.Fa input_cred_handle
256c0b9f4feSDoug Rabsonand the newly acquired credential-element;
257c0b9f4feSDoug Rabsonif
258c0b9f4feSDoug Rabson.Dv NULL
259c0b9f4feSDoug Rabsonis specified for this parameter,
260c0b9f4feSDoug Rabsonthe newly acquired credential-element will be added to the credential
261c0b9f4feSDoug Rabsonidentified by
262c0b9f4feSDoug Rabson.Fa input_cred_handle .
263c0b9f4feSDoug Rabson.Pp
264c0b9f4feSDoug RabsonThe resources associated with any credential handle returned via this
265c0b9f4feSDoug Rabsonparameter must be released by the application after use with a call to
266c0b9f4feSDoug Rabson.Fn gss_release_cred .
267c0b9f4feSDoug Rabson.It actual_mechs
268c0b9f4feSDoug RabsonThe complete set of mechanisms for which the new credential is valid.
269c0b9f4feSDoug RabsonStorage for the returned OID-set must be freed by the application
270c0b9f4feSDoug Rabsonafter use with a call to
271c0b9f4feSDoug Rabson.Fn gss_release_oid_set .
272c0b9f4feSDoug RabsonSpecify
273c0b9f4feSDoug Rabson.Dv NULL if not required.
274c0b9f4feSDoug Rabson.It initiator_time_rec
275c0b9f4feSDoug RabsonActual number of seconds for which the returned credentials will
276c0b9f4feSDoug Rabsonremain valid for initiating contexts using the specified mechanism.
277c0b9f4feSDoug RabsonIf the implementation or mechanism does not support expiration of
278c0b9f4feSDoug Rabsoncredentials,
279c0b9f4feSDoug Rabsonthe value
280c0b9f4feSDoug Rabson.Dv GSS_C_INDEFINITE
281c0b9f4feSDoug Rabsonwill be returned.
282c0b9f4feSDoug RabsonSpecify
283c0b9f4feSDoug Rabson.Dv NULL
284c0b9f4feSDoug Rabsonif not required.
285c0b9f4feSDoug Rabson.It acceptor_time_rec
286c0b9f4feSDoug RabsonActual number of seconds for which the returned credentials will
287c0b9f4feSDoug Rabsonremain valid for accepting security contexts using the specified
288c0b9f4feSDoug Rabsonmechanism.
289c0b9f4feSDoug RabsonIf the implementation or mechanism does not support expiration of
290c0b9f4feSDoug Rabsoncredentials,
291c0b9f4feSDoug Rabsonthe value
292c0b9f4feSDoug Rabson.Dv GSS_C_INDEFINITE
293c0b9f4feSDoug Rabsonwill be returned.
294c0b9f4feSDoug RabsonSpecify
295c0b9f4feSDoug Rabson.Dv NULL
296c0b9f4feSDoug Rabsonif not required.
297c0b9f4feSDoug Rabson.El
298c0b9f4feSDoug Rabson.Sh RETURN VALUES
299c0b9f4feSDoug Rabson.Bl -tag
300c0b9f4feSDoug Rabson.It GSS_S_COMPLETE
301c0b9f4feSDoug RabsonSuccessful completion.
302c0b9f4feSDoug Rabson.It GSS_S_BAD_MECH
303c0b9f4feSDoug RabsonUnavailable mechanism requested.
304c0b9f4feSDoug Rabson.It GSS_S_BAD_NAMETYPE
305c0b9f4feSDoug RabsonType contained within desired_name parameter is not supported
306c0b9f4feSDoug Rabson.It GSS_S_BAD_NAME
307c0b9f4feSDoug RabsonValue supplied for desired_name parameter is ill-formed.
308c0b9f4feSDoug Rabson.It GSS_S_DUPLICATE_ELEMENT
309c0b9f4feSDoug RabsonThe credential already contains an element for the requested mechanism
310c0b9f4feSDoug Rabsonwith overlapping usage and validity period.
311c0b9f4feSDoug Rabson.It GSS_S_CREDENTIALS_EXPIRED
312c0b9f4feSDoug RabsonThe required credentials could not be added because they have expired.
313c0b9f4feSDoug Rabson.It GSS_S_NO_CRED
314c0b9f4feSDoug RabsonNo credentials were found for the specified name.
315c0b9f4feSDoug Rabson.El
316c0b9f4feSDoug Rabson.Sh SEE ALSO
317c0b9f4feSDoug Rabson.Xr gss_init_sec_context 3 ,
318c0b9f4feSDoug Rabson.Xr gss_accept_sec_context 3 ,
319c0b9f4feSDoug Rabson.Xr gss_acquire_cred 3 ,
320c0b9f4feSDoug Rabson.Xr gss_inquire_cred 3 ,
321c0b9f4feSDoug Rabson.Xr gss_inquire_context 3 ,
322c0b9f4feSDoug Rabson.Xr gss_release_cred 3 ,
323c0b9f4feSDoug Rabson.Xr gss_release_oid_set 3
324c0b9f4feSDoug Rabson.Sh STANDARDS
325c0b9f4feSDoug Rabson.Bl -tag
326c0b9f4feSDoug Rabson.It RFC 2743
327c0b9f4feSDoug RabsonGeneric Security Service Application Program Interface Version 2, Update 1
328c0b9f4feSDoug Rabson.It RFC 2744
329c0b9f4feSDoug RabsonGeneric Security Service API Version 2 : C-bindings
330c0b9f4feSDoug Rabson.\" .Sh HISTORY
331c0b9f4feSDoug Rabson.El
332c0b9f4feSDoug Rabson.Sh HISTORY
333c0b9f4feSDoug RabsonThe
334c0b9f4feSDoug Rabson.Nm
335c0b9f4feSDoug Rabsonmanual page example first appeared in
336c0b9f4feSDoug Rabson.Fx 7.0 .
337c0b9f4feSDoug Rabson.Sh AUTHORS
338c0b9f4feSDoug RabsonJohn Wray, Iris Associates
339