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.\" The following commands are required for all man pages. 30d76ba3efSGavin Atkinson.Dd January 26, 2010 31c0b9f4feSDoug Rabson.Dt GSS_ADD_CRED 3 PRM 32*aa12cea2SUlrich Spörlein.Os 33c0b9f4feSDoug Rabson.Sh NAME 34c0b9f4feSDoug Rabson.Nm gss_add_cred 35c0b9f4feSDoug Rabson.Nd Construct credentials incrementally 36c0b9f4feSDoug Rabson.\" This next command is for sections 2 and 3 only. 37c0b9f4feSDoug Rabson.\" .Sh LIBRARY 38c0b9f4feSDoug Rabson.Sh SYNOPSIS 39c0b9f4feSDoug Rabson.In "gssapi/gssapi.h" 40c0b9f4feSDoug Rabson.Ft OM_uint32 41c0b9f4feSDoug Rabson.Fo gss_add_cred 42c0b9f4feSDoug Rabson.Fa "OM_uint32 *minor_status" 43c0b9f4feSDoug Rabson.Fa "const gss_cred_id_t input_cred_handle" 44c0b9f4feSDoug Rabson.Fa "const gss_name_t desired_name" 45c0b9f4feSDoug Rabson.Fa "const gss_OID desired_mech" 46c0b9f4feSDoug Rabson.Fa "gss_cred_usage_t cred_usage" 47c0b9f4feSDoug Rabson.Fa "OM_uint32 initiator_time_req" 48c0b9f4feSDoug Rabson.Fa "OM_uint32 acceptor_time_req" 49c0b9f4feSDoug Rabson.Fa "gss_cred_id_t *output_cred_handle" 50c0b9f4feSDoug Rabson.Fa "gss_OID_set *actual_mechs" 51c0b9f4feSDoug Rabson.Fa "OM_uint32 *initiator_time_rec" 52c0b9f4feSDoug Rabson.Fa "OM_uint32 *acceptor_time_rec" 53c0b9f4feSDoug Rabson.Fc 54c0b9f4feSDoug Rabson.Sh DESCRIPTION 55c0b9f4feSDoug RabsonAdds a credential-element to a credential. 56c0b9f4feSDoug RabsonThe credential-element is identified by the name of the principal to 57c0b9f4feSDoug Rabsonwhich it refers. 58c0b9f4feSDoug RabsonGSS-API implementations must impose a local access-control policy on 59c0b9f4feSDoug Rabsoncallers of this routine to prevent unauthorized callers from acquiring 60c0b9f4feSDoug Rabsoncredential-elements to which they are not entitled. 61c0b9f4feSDoug RabsonThis routine is not intended to provide a "login to the network" 62c0b9f4feSDoug Rabsonfunction, 63c0b9f4feSDoug Rabsonas such a function would involve the creation of new 64c0b9f4feSDoug Rabsonmechanism-specific authentication data, 65c0b9f4feSDoug Rabsonrather than merely acquiring a GSS-API handle to existing data. 66c0b9f4feSDoug RabsonSuch functions, 67c0b9f4feSDoug Rabsonif required, 68c0b9f4feSDoug Rabsonshould be defined in implementation-specific extensions to the API. 69c0b9f4feSDoug Rabson.Pp 70c0b9f4feSDoug RabsonIf 71c0b9f4feSDoug Rabson.Fa desired_name 72c0b9f4feSDoug Rabsonis 73c0b9f4feSDoug Rabson.Dv GSS_C_NO_NAME , 74c0b9f4feSDoug Rabsonthe call is interpreted as a request to add a credential element that 75c0b9f4feSDoug Rabsonwill invoke default behavior when passed to 76c0b9f4feSDoug Rabson.Fn gss_init_sec_context 77c0b9f4feSDoug Rabson(if cred_usage is 78c0b9f4feSDoug Rabson.Dv GSS_C_INITIATE 79c0b9f4feSDoug Rabsonor 80c0b9f4feSDoug Rabson.Dv GSS_C_BOTH ) 81c0b9f4feSDoug Rabsonor 82c0b9f4feSDoug Rabson.Fn gss_accept_sec_context 83c0b9f4feSDoug Rabson(if 84c0b9f4feSDoug Rabson.Fa cred_usage 85c0b9f4feSDoug Rabsonis 86c0b9f4feSDoug Rabson.Dv GSS_C_ACCEPT 87c0b9f4feSDoug Rabsonor 88c0b9f4feSDoug Rabson.Dv GSS_C_BOTH ). 8981c0ade6SGiorgos Keramidas.Pp 90c0b9f4feSDoug RabsonThis routine is expected to be used primarily by context acceptors, 91c0b9f4feSDoug Rabsonsince implementations are likely to provide mechanism-specific ways of 92c0b9f4feSDoug Rabsonobtaining GSS-API initiator credentials from the system login process. 93c0b9f4feSDoug RabsonSome implementations may therefore not support the acquisition of 94c0b9f4feSDoug Rabson.Dv GSS_C_INITIATE 95c0b9f4feSDoug Rabsonor 96c0b9f4feSDoug Rabson.Dv GSS_C_BOTH 97c0b9f4feSDoug Rabsoncredentials via 98c0b9f4feSDoug Rabson.Fn gss_acquire_cred 99c0b9f4feSDoug Rabsonfor any name other than 100c0b9f4feSDoug Rabson.Dv GSS_C_NO_NAME , 101c0b9f4feSDoug Rabsonor a name produced by applying either 102c0b9f4feSDoug Rabson.Fn gss_inquire_cred 103c0b9f4feSDoug Rabsonto a valid credential, 104c0b9f4feSDoug Rabsonor 105c0b9f4feSDoug Rabson.Fn gss_inquire_context 106c0b9f4feSDoug Rabsonto an active context. 107c0b9f4feSDoug Rabson.Pp 108c0b9f4feSDoug RabsonIf credential acquisition is time-consuming for a mechanism, 109c0b9f4feSDoug Rabsonthe mechanism may choose to delay the actual acquisition until the 110c0b9f4feSDoug Rabsoncredential is required (e.g. by 111c0b9f4feSDoug Rabson.Fn gss_init_sec_context 112c0b9f4feSDoug Rabsonor 113c0b9f4feSDoug Rabson.Fn gss_accept_sec_context ). 114c0b9f4feSDoug RabsonSuch mechanism-specific implementation decisions should be invisible 115c0b9f4feSDoug Rabsonto the calling application; 116c0b9f4feSDoug Rabsonthus a call of 117c0b9f4feSDoug Rabson.Fn gss_inquire_cred 118c0b9f4feSDoug Rabsonimmediately following the call of 119c0b9f4feSDoug Rabson.Fn gss_add_cred 120c0b9f4feSDoug Rabsonmust return valid credential data, 121c0b9f4feSDoug Rabsonand may therefore incur the overhead of a deferred credential acquisition. 122c0b9f4feSDoug Rabson.Pp 123c0b9f4feSDoug RabsonThis routine can be used to either compose a new credential containing 124c0b9f4feSDoug Rabsonall credential-elements of the original in addition to the 125c0b9f4feSDoug Rabsonnewly-acquire credential-element, 126c0b9f4feSDoug Rabsonor to add the new credential-element to an existing credential. 127c0b9f4feSDoug RabsonIf 128c0b9f4feSDoug Rabson.Dv NULL 129c0b9f4feSDoug Rabsonis specified for the 130c0b9f4feSDoug Rabson.Fa output_cred_handle 131c0b9f4feSDoug Rabsonparameter argument, 132c0b9f4feSDoug Rabsonthe new credential-element will be added to the credential identified 133c0b9f4feSDoug Rabsonby 134c0b9f4feSDoug Rabson.Fa input_cred_handle ; 135c0b9f4feSDoug Rabsonif a valid pointer is specified for the 136c0b9f4feSDoug Rabson.Fa output_cred_handle 137c0b9f4feSDoug Rabsonparameter, 138c0b9f4feSDoug Rabsona new credential handle will be created. 139c0b9f4feSDoug Rabson.Pp 140c0b9f4feSDoug RabsonIf 141c0b9f4feSDoug Rabson.Dv GSS_C_NO_CREDENTIAL 142c0b9f4feSDoug Rabsonis specified as the 143c0b9f4feSDoug Rabson.Fa input_cred_handle , 144c0b9f4feSDoug Rabson.Fn gss_add_cred 145c0b9f4feSDoug Rabsonwill compose a credential (and set the 146c0b9f4feSDoug Rabson.Fa output_cred_handle 147c0b9f4feSDoug Rabsonparameter accordingly) based on default behavior. 148c0b9f4feSDoug RabsonThat is, the call will have the same effect as if the application had 149c0b9f4feSDoug Rabsonfirst made a call to 150c0b9f4feSDoug Rabson.Fn gss_acquire_cred , 151c0b9f4feSDoug Rabsonspecifying the same usage and passing 152c0b9f4feSDoug Rabson.Dv GSS_C_NO_NAME 153c0b9f4feSDoug Rabsonas the 154c0b9f4feSDoug Rabson.Fa desired_name 155c0b9f4feSDoug Rabsonparameter to obtain an explicit credential handle embodying default 156c0b9f4feSDoug Rabsonbehavior, 157c0b9f4feSDoug Rabsonpassed this credential handle to 158c0b9f4feSDoug Rabson.Fn gss_add_cred , 159c0b9f4feSDoug Rabsonand finally called 160c0b9f4feSDoug Rabson.Fn gss_release_cred 161c0b9f4feSDoug Rabsonon the first credential handle. 162c0b9f4feSDoug Rabson.Pp 163c0b9f4feSDoug RabsonIf 164c0b9f4feSDoug Rabson.Dv GSS_C_NO_CREDENTIAL 165c0b9f4feSDoug Rabsonis specified as the 166c0b9f4feSDoug Rabson.Fa input_cred_handle 167c0b9f4feSDoug Rabsonparameter, 168c0b9f4feSDoug Rabsona non- 169c0b9f4feSDoug Rabson.Dv NULL 170c0b9f4feSDoug Rabson.Fa output_cred_handle 171c0b9f4feSDoug Rabsonmust be supplied. 172c0b9f4feSDoug Rabson.Sh PARAMETERS 173c0b9f4feSDoug Rabson.Bl -tag 174c0b9f4feSDoug Rabson.It minor_status 175c0b9f4feSDoug RabsonMechanism specific status code. 176c0b9f4feSDoug Rabson.It input_cred_handle 177c0b9f4feSDoug RabsonThe credential to which a credential-element will be added. 178c0b9f4feSDoug RabsonIf 179c0b9f4feSDoug Rabson.Dv GSS_C_NO_CREDENTIAL 180c0b9f4feSDoug Rabsonis specified, the routine will compose the new credential based on 181c0b9f4feSDoug Rabsondefault behavior (see description above). 182c0b9f4feSDoug RabsonNote that, while the credential-handle is not modified by 183c0b9f4feSDoug Rabson.Fn gss_add_cred , 184c0b9f4feSDoug Rabsonthe underlying credential will be modified if 185c0b9f4feSDoug Rabson.Fa output_credential_handle 186c0b9f4feSDoug Rabsonis 187c0b9f4feSDoug Rabson.Dv NULL . 188c0b9f4feSDoug Rabson.It desired_name 189c0b9f4feSDoug RabsonName of principal whose credential should be acquired. 190c0b9f4feSDoug Rabson.It desired_mech 191c0b9f4feSDoug RabsonUnderlying security mechanism with which the credential may be used. 192c0b9f4feSDoug Rabson.It cred_usage 193c0b9f4feSDoug Rabson.Bl -tag -width "GSS_C_INITIATE" 194c0b9f4feSDoug Rabson.It GSS_C_BOTH 195c0b9f4feSDoug RabsonCredential may be used either to initiate or accept security 196c0b9f4feSDoug Rabsoncontexts. 197c0b9f4feSDoug Rabson.It GSS_C_INITIATE 198c0b9f4feSDoug RabsonCredential will only be used to initiate security contexts. 199c0b9f4feSDoug Rabson.It GSS_C_ACCEPT 200c0b9f4feSDoug RabsonCredential will only be used to accept security contexts. 201c0b9f4feSDoug Rabson.El 202c0b9f4feSDoug Rabson.It initiator_time_req 203c0b9f4feSDoug RabsonNumber of seconds that the credential should remain valid for 204c0b9f4feSDoug Rabsoninitiating security contexts. 205c0b9f4feSDoug RabsonThis argument is ignored if the composed credentials are of type 206c0b9f4feSDoug Rabson.Dv GSS_C_ACCEPT . 207c0b9f4feSDoug RabsonSpecify 208c0b9f4feSDoug Rabson.Dv GSS_C_INDEFINITE 209c0b9f4feSDoug Rabsonto request that the credentials have the maximum permitted initiator lifetime. 210c0b9f4feSDoug Rabson.It acceptor_time_req 211c0b9f4feSDoug RabsonNumber of seconds that the credential should remain valid for 212c0b9f4feSDoug Rabsonaccepting security contexts. 213c0b9f4feSDoug RabsonThis argument is ignored if the composed credentials are of type 214c0b9f4feSDoug Rabson.Dv GSS_C_INITIATE . 215c0b9f4feSDoug RabsonSpecify 216c0b9f4feSDoug Rabson.Dv GSS_C_INDEFINITE 217c0b9f4feSDoug Rabsonto request that the credentials have the maximum permitted initiator lifetime. 218c0b9f4feSDoug Rabson.It output_cred_handle 219c0b9f4feSDoug RabsonThe returned credential handle, 220c0b9f4feSDoug Rabsoncontaining 221c0b9f4feSDoug Rabsonthe new credential-element and all the credential-elements from 222c0b9f4feSDoug Rabson.Fa input_cred_handle . 223c0b9f4feSDoug RabsonIf a valid pointer to a 224c0b9f4feSDoug Rabson.Fa gss_cred_id_t 225c0b9f4feSDoug Rabsonis supplied for this parameter, 226c0b9f4feSDoug Rabson.Fn gss_add_cred 227c0b9f4feSDoug Rabsoncreates a new credential handle containing all credential-elements 228c0b9f4feSDoug Rabsonfrom the 229c0b9f4feSDoug Rabson.Fa input_cred_handle 230c0b9f4feSDoug Rabsonand the newly acquired credential-element; 231c0b9f4feSDoug Rabsonif 232c0b9f4feSDoug Rabson.Dv NULL 233c0b9f4feSDoug Rabsonis specified for this parameter, 234c0b9f4feSDoug Rabsonthe newly acquired credential-element will be added to the credential 235c0b9f4feSDoug Rabsonidentified by 236c0b9f4feSDoug Rabson.Fa input_cred_handle . 237c0b9f4feSDoug Rabson.Pp 238c0b9f4feSDoug RabsonThe resources associated with any credential handle returned via this 239c0b9f4feSDoug Rabsonparameter must be released by the application after use with a call to 240c0b9f4feSDoug Rabson.Fn gss_release_cred . 241c0b9f4feSDoug Rabson.It actual_mechs 242c0b9f4feSDoug RabsonThe complete set of mechanisms for which the new credential is valid. 243c0b9f4feSDoug RabsonStorage for the returned OID-set must be freed by the application 244c0b9f4feSDoug Rabsonafter use with a call to 245c0b9f4feSDoug Rabson.Fn gss_release_oid_set . 246c0b9f4feSDoug RabsonSpecify 247c0b9f4feSDoug Rabson.Dv NULL if not required. 248c0b9f4feSDoug Rabson.It initiator_time_rec 249c0b9f4feSDoug RabsonActual number of seconds for which the returned credentials will 250c0b9f4feSDoug Rabsonremain valid for initiating contexts using the specified mechanism. 251c0b9f4feSDoug RabsonIf the implementation or mechanism does not support expiration of 252c0b9f4feSDoug Rabsoncredentials, 253c0b9f4feSDoug Rabsonthe value 254c0b9f4feSDoug Rabson.Dv GSS_C_INDEFINITE 255c0b9f4feSDoug Rabsonwill be returned. 256c0b9f4feSDoug RabsonSpecify 257c0b9f4feSDoug Rabson.Dv NULL 258c0b9f4feSDoug Rabsonif not required. 259c0b9f4feSDoug Rabson.It acceptor_time_rec 260c0b9f4feSDoug RabsonActual number of seconds for which the returned credentials will 261c0b9f4feSDoug Rabsonremain valid for accepting security contexts using the specified 262c0b9f4feSDoug Rabsonmechanism. 263c0b9f4feSDoug RabsonIf the implementation or mechanism does not support expiration of 264c0b9f4feSDoug Rabsoncredentials, 265c0b9f4feSDoug Rabsonthe value 266c0b9f4feSDoug Rabson.Dv GSS_C_INDEFINITE 267c0b9f4feSDoug Rabsonwill be returned. 268c0b9f4feSDoug RabsonSpecify 269c0b9f4feSDoug Rabson.Dv NULL 270c0b9f4feSDoug Rabsonif not required. 271c0b9f4feSDoug Rabson.El 272c0b9f4feSDoug Rabson.Sh RETURN VALUES 273c0b9f4feSDoug Rabson.Bl -tag 274c0b9f4feSDoug Rabson.It GSS_S_COMPLETE 275c0b9f4feSDoug RabsonSuccessful completion. 276c0b9f4feSDoug Rabson.It GSS_S_BAD_MECH 277c0b9f4feSDoug RabsonUnavailable mechanism requested. 278c0b9f4feSDoug Rabson.It GSS_S_BAD_NAMETYPE 279c0b9f4feSDoug RabsonType contained within desired_name parameter is not supported 280c0b9f4feSDoug Rabson.It GSS_S_BAD_NAME 281c0b9f4feSDoug RabsonValue supplied for desired_name parameter is ill-formed. 282c0b9f4feSDoug Rabson.It GSS_S_DUPLICATE_ELEMENT 283c0b9f4feSDoug RabsonThe credential already contains an element for the requested mechanism 284c0b9f4feSDoug Rabsonwith overlapping usage and validity period. 285c0b9f4feSDoug Rabson.It GSS_S_CREDENTIALS_EXPIRED 286c0b9f4feSDoug RabsonThe required credentials could not be added because they have expired. 287c0b9f4feSDoug Rabson.It GSS_S_NO_CRED 288c0b9f4feSDoug RabsonNo credentials were found for the specified name. 289c0b9f4feSDoug Rabson.El 290c0b9f4feSDoug Rabson.Sh SEE ALSO 291c0b9f4feSDoug Rabson.Xr gss_init_sec_context 3 , 292c0b9f4feSDoug Rabson.Xr gss_accept_sec_context 3 , 293c0b9f4feSDoug Rabson.Xr gss_acquire_cred 3 , 294c0b9f4feSDoug Rabson.Xr gss_inquire_cred 3 , 295c0b9f4feSDoug Rabson.Xr gss_inquire_context 3 , 296c0b9f4feSDoug Rabson.Xr gss_release_cred 3 , 297c0b9f4feSDoug Rabson.Xr gss_release_oid_set 3 298c0b9f4feSDoug Rabson.Sh STANDARDS 299c0b9f4feSDoug Rabson.Bl -tag 300c0b9f4feSDoug Rabson.It RFC 2743 301c0b9f4feSDoug RabsonGeneric Security Service Application Program Interface Version 2, Update 1 302c0b9f4feSDoug Rabson.It RFC 2744 303c0b9f4feSDoug RabsonGeneric Security Service API Version 2 : C-bindings 304c0b9f4feSDoug Rabson.El 305c0b9f4feSDoug Rabson.Sh HISTORY 306c0b9f4feSDoug RabsonThe 307c0b9f4feSDoug Rabson.Nm 308d76ba3efSGavin Atkinsonfunction first appeared in 309c0b9f4feSDoug Rabson.Fx 7.0 . 310c0b9f4feSDoug Rabson.Sh AUTHORS 311c0b9f4feSDoug RabsonJohn Wray, Iris Associates 31260b9f20aSDoug Rabson.Sh COPYRIGHT 31360b9f20aSDoug RabsonCopyright (C) The Internet Society (2000). All Rights Reserved. 31460b9f20aSDoug Rabson.Pp 31560b9f20aSDoug RabsonThis document and translations of it may be copied and furnished to 31660b9f20aSDoug Rabsonothers, and derivative works that comment on or otherwise explain it 31760b9f20aSDoug Rabsonor assist in its implementation may be prepared, copied, published 31860b9f20aSDoug Rabsonand distributed, in whole or in part, without restriction of any 31960b9f20aSDoug Rabsonkind, provided that the above copyright notice and this paragraph are 32060b9f20aSDoug Rabsonincluded on all such copies and derivative works. However, this 32160b9f20aSDoug Rabsondocument itself may not be modified in any way, such as by removing 32260b9f20aSDoug Rabsonthe copyright notice or references to the Internet Society or other 32360b9f20aSDoug RabsonInternet organizations, except as needed for the purpose of 32460b9f20aSDoug Rabsondeveloping Internet standards in which case the procedures for 32560b9f20aSDoug Rabsoncopyrights defined in the Internet Standards process must be 32660b9f20aSDoug Rabsonfollowed, or as required to translate it into languages other than 32760b9f20aSDoug RabsonEnglish. 32860b9f20aSDoug Rabson.Pp 32960b9f20aSDoug RabsonThe limited permissions granted above are perpetual and will not be 33060b9f20aSDoug Rabsonrevoked by the Internet Society or its successors or assigns. 33160b9f20aSDoug Rabson.Pp 33260b9f20aSDoug RabsonThis document and the information contained herein is provided on an 33360b9f20aSDoug Rabson"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING 33460b9f20aSDoug RabsonTASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING 33560b9f20aSDoug RabsonBUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION 33660b9f20aSDoug RabsonHEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF 33760b9f20aSDoug RabsonMERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 338