1 /*
   2  * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 /* This is the gssapi.h prologue. */
  27 /* It contains some choice pieces of autoconf.h */
  28 #define GSS_SIZEOF_INT 4
  29 #define GSS_SIZEOF_LONG 4
  30 #define GSS_SIZEOF_SHORT 2
  31 
  32 #ifndef _GSSAPI_H_
  33 #define _GSSAPI_H_
  34 
  35 #ifdef __cplusplus
  36 extern "C" {
  37 #endif /* __cplusplus */
  38 
  39 /*
  40  * First, include stddef.h to get size_t defined.
  41  */
  42 #include <stddef.h>
  43 
  44 /*
  45  * POSIX says that sys/types.h is where size_t is defined.
  46  */
  47 #include <sys/types.h>
  48 
  49 typedef void * gss_name_t;
  50 typedef void * gss_cred_id_t;
  51 typedef void * gss_ctx_id_t;
  52 
  53 /*
  54  * The following type must be defined as the smallest natural unsigned integer
  55  * supported by the platform that has at least 32 bits of precision.
  56  */
  57 #if (GSS_SIZEOF_SHORT == 4)
  58 typedef unsigned short gss_uint32;
  59 typedef short gss_int32;
  60 #elif (GSS_SIZEOF_INT == 4)
  61 typedef unsigned int gss_uint32;
  62 typedef int gss_int32;
  63 #elif (GSS_SIZEOF_LONG == 4)
  64 typedef unsigned long gss_uint32;
  65 typedef long gss_int32;
  66 #endif
  67 
  68 typedef gss_uint32      OM_uint32;
  69 
  70 typedef struct gss_OID_desc_struct {
  71       OM_uint32 length;
  72       void *elements;
  73 } gss_OID_desc, *gss_OID;
  74 
  75 typedef struct gss_OID_set_desc_struct  {
  76       size_t  count;
  77       gss_OID elements;
  78 } gss_OID_set_desc, *gss_OID_set;
  79 
  80 typedef struct gss_buffer_desc_struct {
  81       size_t length;
  82       void *value;
  83 } gss_buffer_desc, *gss_buffer_t;
  84 
  85 typedef struct gss_channel_bindings_struct {
  86       OM_uint32 initiator_addrtype;
  87       gss_buffer_desc initiator_address;
  88       OM_uint32 acceptor_addrtype;
  89       gss_buffer_desc acceptor_address;
  90       gss_buffer_desc application_data;
  91 } *gss_channel_bindings_t;
  92 
  93 /*
  94  * For now, define a QOP-type as an OM_uint32
  95  */
  96 typedef OM_uint32       gss_qop_t;
  97 typedef int             gss_cred_usage_t;
  98 
  99 /*
 100  * Flag bits for context-level services.
 101  */
 102 #define GSS_C_DELEG_FLAG 1
 103 #define GSS_C_MUTUAL_FLAG 2
 104 #define GSS_C_REPLAY_FLAG 4
 105 #define GSS_C_SEQUENCE_FLAG 8
 106 #define GSS_C_CONF_FLAG 16
 107 #define GSS_C_INTEG_FLAG 32
 108 #define GSS_C_ANON_FLAG 64
 109 #define GSS_C_PROT_READY_FLAG 128
 110 #define GSS_C_TRANS_FLAG 256
 111 
 112 /*
 113  * Credential usage options
 114  */
 115 #define GSS_C_BOTH 0
 116 #define GSS_C_INITIATE 1
 117 #define GSS_C_ACCEPT 2
 118 
 119 /*
 120  * Status code types for gss_display_status
 121  */
 122 #define GSS_C_GSS_CODE 1
 123 #define GSS_C_MECH_CODE 2
 124 
 125 /*
 126  * The constant definitions for channel-bindings address families
 127  */
 128 #define GSS_C_AF_UNSPEC     0
 129 #define GSS_C_AF_LOCAL      1
 130 #define GSS_C_AF_INET       2
 131 #define GSS_C_AF_IMPLINK    3
 132 #define GSS_C_AF_PUP        4
 133 #define GSS_C_AF_CHAOS      5
 134 #define GSS_C_AF_NS         6
 135 #define GSS_C_AF_NBS        7
 136 #define GSS_C_AF_ECMA       8
 137 #define GSS_C_AF_DATAKIT    9
 138 #define GSS_C_AF_CCITT      10
 139 #define GSS_C_AF_SNA        11
 140 #define GSS_C_AF_DECnet     12
 141 #define GSS_C_AF_DLI        13
 142 #define GSS_C_AF_LAT        14
 143 #define GSS_C_AF_HYLINK     15
 144 #define GSS_C_AF_APPLETALK  16
 145 #define GSS_C_AF_BSC        17
 146 #define GSS_C_AF_DSS        18
 147 #define GSS_C_AF_OSI        19
 148 #define GSS_C_AF_X25        21
 149 
 150 #define GSS_C_AF_NULLADDR   255
 151 
 152 /*
 153  * Various Null values.
 154  */
 155 #define GSS_C_NO_NAME ((gss_name_t) 0)
 156 #define GSS_C_NO_BUFFER ((gss_buffer_t) 0)
 157 #define GSS_C_NO_OID ((gss_OID) 0)
 158 #define GSS_C_NO_OID_SET ((gss_OID_set) 0)
 159 #define GSS_C_NO_CONTEXT ((gss_ctx_id_t) 0)
 160 #define GSS_C_NO_CREDENTIAL ((gss_cred_id_t) 0)
 161 #define GSS_C_NO_CHANNEL_BINDINGS ((gss_channel_bindings_t) 0)
 162 #define GSS_C_EMPTY_BUFFER {0, NULL}
 163 
 164 /*
 165  * Some alternate names for a couple of the above values.  These are defined
 166  * for V1 compatibility.
 167  */
 168 #define GSS_C_NULL_OID          GSS_C_NO_OID
 169 #define GSS_C_NULL_OID_SET      GSS_C_NO_OID_SET
 170 
 171 /*
 172  * Define the default Quality of Protection for per-message services.  Note
 173  * that an implementation that offers multiple levels of QOP may either reserve
 174  * a value (for example zero, as assumed here) to mean "default protection", or
 175  * alternatively may simply equate GSS_C_QOP_DEFAULT to a specific explicit
 176  * QOP value.  However a value of 0 should always be interpreted by a GSSAPI
 177  * implementation as a request for the default protection level.
 178  */
 179 #define GSS_C_QOP_DEFAULT 0
 180 
 181 /*
 182  * Expiration time of 2^32-1 seconds means infinite lifetime for a
 183  * credential or security context
 184  */
 185 #define GSS_C_INDEFINITE ((OM_uint32) 0xfffffffful)
 186 
 187 
 188 /* Major status codes */
 189 
 190 #define GSS_S_COMPLETE 0
 191 
 192 /*
 193  * Some "helper" definitions to make the status code macros obvious.
 194  */
 195 #define GSS_C_CALLING_ERROR_OFFSET 24
 196 #define GSS_C_ROUTINE_ERROR_OFFSET 16
 197 #define GSS_C_SUPPLEMENTARY_OFFSET 0
 198 #define GSS_C_CALLING_ERROR_MASK ((OM_uint32) 0377ul)
 199 #define GSS_C_ROUTINE_ERROR_MASK ((OM_uint32) 0377ul)
 200 #define GSS_C_SUPPLEMENTARY_MASK ((OM_uint32) 0177777ul)
 201 
 202 /*
 203  * The macros that test status codes for error conditions.  Note that the
 204  * GSS_ERROR() macro has changed slightly from the V1 GSSAPI so that it now
 205  * evaluates its argument only once.
 206  */
 207 #define GSS_CALLING_ERROR(x) \
 208   ((x) & (GSS_C_CALLING_ERROR_MASK << GSS_C_CALLING_ERROR_OFFSET))
 209 #define GSS_ROUTINE_ERROR(x) \
 210   ((x) & (GSS_C_ROUTINE_ERROR_MASK << GSS_C_ROUTINE_ERROR_OFFSET))
 211 #define GSS_SUPPLEMENTARY_INFO(x) \
 212   ((x) & (GSS_C_SUPPLEMENTARY_MASK << GSS_C_SUPPLEMENTARY_OFFSET))
 213 #define GSS_ERROR(x) \
 214   ((x) & ((GSS_C_CALLING_ERROR_MASK << GSS_C_CALLING_ERROR_OFFSET) | \
 215           (GSS_C_ROUTINE_ERROR_MASK << GSS_C_ROUTINE_ERROR_OFFSET)))
 216 
 217 /*
 218  * Now the actual status code definitions
 219  */
 220 
 221 /*
 222  * Calling errors:
 223  */
 224 #define GSS_S_CALL_INACCESSIBLE_READ \
 225                              (((OM_uint32) 1ul) << GSS_C_CALLING_ERROR_OFFSET)
 226 #define GSS_S_CALL_INACCESSIBLE_WRITE \
 227                              (((OM_uint32) 2ul) << GSS_C_CALLING_ERROR_OFFSET)
 228 #define GSS_S_CALL_BAD_STRUCTURE \
 229                              (((OM_uint32) 3ul) << GSS_C_CALLING_ERROR_OFFSET)
 230 
 231 /*
 232  * Routine errors:
 233  */
 234 #define GSS_S_BAD_MECH (((OM_uint32) 1ul) << GSS_C_ROUTINE_ERROR_OFFSET)
 235 #define GSS_S_BAD_NAME (((OM_uint32) 2ul) << GSS_C_ROUTINE_ERROR_OFFSET)
 236 #define GSS_S_BAD_NAMETYPE (((OM_uint32) 3ul) << GSS_C_ROUTINE_ERROR_OFFSET)
 237 #define GSS_S_BAD_BINDINGS (((OM_uint32) 4ul) << GSS_C_ROUTINE_ERROR_OFFSET)
 238 #define GSS_S_BAD_STATUS (((OM_uint32) 5ul) << GSS_C_ROUTINE_ERROR_OFFSET)
 239 #define GSS_S_BAD_SIG (((OM_uint32) 6ul) << GSS_C_ROUTINE_ERROR_OFFSET)
 240 #define GSS_S_NO_CRED (((OM_uint32) 7ul) << GSS_C_ROUTINE_ERROR_OFFSET)
 241 #define GSS_S_NO_CONTEXT (((OM_uint32) 8ul) << GSS_C_ROUTINE_ERROR_OFFSET)
 242 #define GSS_S_DEFECTIVE_TOKEN (((OM_uint32) 9ul) << GSS_C_ROUTINE_ERROR_OFFSET)
 243 #define GSS_S_DEFECTIVE_CREDENTIAL \
 244      (((OM_uint32) 10ul) << GSS_C_ROUTINE_ERROR_OFFSET)
 245 #define GSS_S_CREDENTIALS_EXPIRED \
 246      (((OM_uint32) 11ul) << GSS_C_ROUTINE_ERROR_OFFSET)
 247 #define GSS_S_CONTEXT_EXPIRED \
 248      (((OM_uint32) 12ul) << GSS_C_ROUTINE_ERROR_OFFSET)
 249 #define GSS_S_FAILURE (((OM_uint32) 13ul) << GSS_C_ROUTINE_ERROR_OFFSET)
 250 #define GSS_S_BAD_QOP (((OM_uint32) 14ul) << GSS_C_ROUTINE_ERROR_OFFSET)
 251 #define GSS_S_UNAUTHORIZED (((OM_uint32) 15ul) << GSS_C_ROUTINE_ERROR_OFFSET)
 252 #define GSS_S_UNAVAILABLE (((OM_uint32) 16ul) << GSS_C_ROUTINE_ERROR_OFFSET)
 253 #define GSS_S_DUPLICATE_ELEMENT \
 254      (((OM_uint32) 17ul) << GSS_C_ROUTINE_ERROR_OFFSET)
 255 #define GSS_S_NAME_NOT_MN \
 256      (((OM_uint32) 18ul) << GSS_C_ROUTINE_ERROR_OFFSET)
 257 
 258 /*
 259  * Supplementary info bits:
 260  */
 261 #define GSS_S_CONTINUE_NEEDED (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 0))
 262 #define GSS_S_DUPLICATE_TOKEN (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 1))
 263 #define GSS_S_OLD_TOKEN (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 2))
 264 #define GSS_S_UNSEQ_TOKEN (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 3))
 265 #define GSS_S_GAP_TOKEN (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 4))
 266 
 267 
 268 /*
 269  * Finally, function prototypes for the GSSAPI routines.
 270  */
 271 
 272 #if defined (_WIN32) && defined (_MSC_VER)
 273 # ifdef GSS_DLL_FILE
 274 #  define GSS_DLLIMP __declspec(dllexport)
 275 # else
 276 #  define GSS_DLLIMP __declspec(dllimport)
 277 # endif
 278 #else
 279 # define GSS_DLLIMP
 280 #endif
 281 
 282 /* Reserved static storage for GSS_oids.  Comments are quotes from RFC 2744.
 283  *
 284  * The implementation must reserve static storage for a
 285  * gss_OID_desc object containing the value
 286  * {10, (void *)"\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x01"},
 287  * corresponding to an object-identifier value of
 288  * {iso(1) member-body(2) United States(840) mit(113554)
 289  * infosys(1) gssapi(2) generic(1) user_name(1)}.  The constant
 290  * GSS_C_NT_USER_NAME should be initialized to point
 291  * to that gss_OID_desc.
 292  */
 293 GSS_DLLIMP extern gss_OID GSS_C_NT_USER_NAME;
 294 
 295 /*
 296  * The implementation must reserve static storage for a
 297  * gss_OID_desc object containing the value
 298  * {10, (void *)"\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x02"},
 299  * corresponding to an object-identifier value of
 300  * {iso(1) member-body(2) United States(840) mit(113554)
 301  * infosys(1) gssapi(2) generic(1) machine_uid_name(2)}.
 302  * The constant GSS_C_NT_MACHINE_UID_NAME should be
 303  * initialized to point to that gss_OID_desc.
 304  */
 305 GSS_DLLIMP extern gss_OID GSS_C_NT_MACHINE_UID_NAME;
 306 
 307 /*
 308  * The implementation must reserve static storage for a
 309  * gss_OID_desc object containing the value
 310  * {10, (void *)"\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x03"},
 311  * corresponding to an object-identifier value of
 312  * {iso(1) member-body(2) United States(840) mit(113554)
 313  * infosys(1) gssapi(2) generic(1) string_uid_name(3)}.
 314  * The constant GSS_C_NT_STRING_UID_NAME should be
 315  * initialized to point to that gss_OID_desc.
 316  */
 317 GSS_DLLIMP extern gss_OID GSS_C_NT_STRING_UID_NAME;
 318 
 319 /*
 320  * The implementation must reserve static storage for a
 321  * gss_OID_desc object containing the value
 322  * {6, (void *)"\x2b\x06\x01\x05\x06\x02"},
 323  * corresponding to an object-identifier value of
 324  * {iso(1) org(3) dod(6) internet(1) security(5)
 325  * nametypes(6) gss-host-based-services(2)).  The constant
 326  * GSS_C_NT_HOSTBASED_SERVICE_X should be initialized to point
 327  * to that gss_OID_desc.  This is a deprecated OID value, and
 328  * implementations wishing to support hostbased-service names
 329  * should instead use the GSS_C_NT_HOSTBASED_SERVICE OID,
 330  * defined below, to identify such names;
 331  * GSS_C_NT_HOSTBASED_SERVICE_X should be accepted a synonym
 332  * for GSS_C_NT_HOSTBASED_SERVICE when presented as an input
 333  * parameter, but should not be emitted by GSS-API
 334  * implementations
 335  */
 336 GSS_DLLIMP extern gss_OID GSS_C_NT_HOSTBASED_SERVICE_X;
 337 
 338 /*
 339  * The implementation must reserve static storage for a
 340  * gss_OID_desc object containing the value
 341  * {10, (void *)"\x2a\x86\x48\x86\xf7\x12"
 342  *              "\x01\x02\x01\x04"}, corresponding to an
 343  * object-identifier value of {iso(1) member-body(2)
 344  * Unites States(840) mit(113554) infosys(1) gssapi(2)
 345  * generic(1) service_name(4)}.  The constant
 346  * GSS_C_NT_HOSTBASED_SERVICE should be initialized
 347  * to point to that gss_OID_desc.
 348  */
 349 GSS_DLLIMP extern gss_OID GSS_C_NT_HOSTBASED_SERVICE;
 350 
 351 /*
 352  * The implementation must reserve static storage for a
 353  * gss_OID_desc object containing the value
 354  * {6, (void *)"\x2b\x06\01\x05\x06\x03"},
 355  * corresponding to an object identifier value of
 356  * {1(iso), 3(org), 6(dod), 1(internet), 5(security),
 357  * 6(nametypes), 3(gss-anonymous-name)}.  The constant
 358  * and GSS_C_NT_ANONYMOUS should be initialized to point
 359  * to that gss_OID_desc.
 360  */
 361 GSS_DLLIMP extern gss_OID GSS_C_NT_ANONYMOUS;
 362 
 363 
 364 /*
 365  * The implementation must reserve static storage for a
 366  * gss_OID_desc object containing the value
 367  * {6, (void *)"\x2b\x06\x01\x05\x06\x04"},
 368  * corresponding to an object-identifier value of
 369  * {1(iso), 3(org), 6(dod), 1(internet), 5(security),
 370  * 6(nametypes), 4(gss-api-exported-name)}.  The constant
 371  * GSS_C_NT_EXPORT_NAME should be initialized to point
 372  * to that gss_OID_desc.
 373  */
 374 GSS_DLLIMP extern gss_OID GSS_C_NT_EXPORT_NAME;
 375 
 376 
 377 /* Function Prototypes */
 378 
 379 OM_uint32 gss_acquire_cred(
 380         OM_uint32 *,            /* minor_status */
 381         gss_name_t,             /* desired_name */
 382         OM_uint32,              /* time_req */
 383         gss_OID_set,            /* desired_mechs */
 384         gss_cred_usage_t,       /* cred_usage */
 385         gss_cred_id_t *,        /* output_cred_handle */
 386         gss_OID_set *,          /* actual_mechs */
 387         OM_uint32 *             /* time_rec */
 388 );
 389 
 390 OM_uint32 gss_release_cred(
 391         OM_uint32 *,            /* minor_status */
 392         gss_cred_id_t *         /* cred_handle */
 393 );
 394 
 395 OM_uint32 gss_init_sec_context(
 396         OM_uint32 *,            /* minor_status */
 397         gss_cred_id_t,          /* claimant_cred_handle */
 398         gss_ctx_id_t *,         /* context_handle */
 399         gss_name_t,             /* target_name */
 400         gss_OID,                /* mech_type (used to be const) */
 401         OM_uint32,              /* req_flags */
 402         OM_uint32,              /* time_req */
 403         gss_channel_bindings_t, /* input_chan_bindings */
 404         gss_buffer_t,           /* input_token */
 405         gss_OID *,              /* actual_mech_type */
 406         gss_buffer_t,           /* output_token */
 407         OM_uint32 *,            /* ret_flags */
 408         OM_uint32 *             /* time_rec */
 409 );
 410 
 411 OM_uint32 gss_accept_sec_context(
 412         OM_uint32 *,            /* minor_status */
 413         gss_ctx_id_t *,         /* context_handle */
 414         gss_cred_id_t,          /* acceptor_cred_handle */
 415         gss_buffer_t,           /* input_token_buffer */
 416         gss_channel_bindings_t, /* input_chan_bindings */
 417         gss_name_t *,           /* src_name */
 418         gss_OID *,              /* mech_type */
 419         gss_buffer_t,           /* output_token */
 420         OM_uint32 *,            /* ret_flags */
 421         OM_uint32 *,            /* time_rec */
 422         gss_cred_id_t *         /* delegated_cred_handle */
 423 );
 424 
 425 OM_uint32 gss_process_context_token(
 426         OM_uint32 *,            /* minor_status */
 427         gss_ctx_id_t,           /* context_handle */
 428         gss_buffer_t            /* token_buffer */
 429 );
 430 
 431 OM_uint32 gss_delete_sec_context(
 432         OM_uint32 *,            /* minor_status */
 433         gss_ctx_id_t *,         /* context_handle */
 434         gss_buffer_t            /* output_token */
 435 );
 436 
 437 OM_uint32 gss_context_time(
 438         OM_uint32 *,            /* minor_status */
 439         gss_ctx_id_t,           /* context_handle */
 440         OM_uint32 *             /* time_rec */
 441 );
 442 
 443 /* New for V2 */
 444 OM_uint32 gss_get_mic(
 445         OM_uint32 *,            /* minor_status */
 446         gss_ctx_id_t,           /* context_handle */
 447         gss_qop_t,              /* qop_req */
 448         gss_buffer_t,           /* message_buffer */
 449         gss_buffer_t            /* message_token */
 450 );
 451 
 452 /* New for V2 */
 453 OM_uint32 gss_verify_mic(
 454         OM_uint32 *,            /* minor_status */
 455         gss_ctx_id_t,           /* context_handle */
 456         gss_buffer_t,           /* message_buffer */
 457         gss_buffer_t,           /* message_token */
 458         gss_qop_t *             /* qop_state */
 459 );
 460 
 461 /* New for V2 */
 462 OM_uint32 gss_wrap(
 463         OM_uint32 *,            /* minor_status */
 464         gss_ctx_id_t,           /* context_handle */
 465         int,                    /* conf_req_flag */
 466         gss_qop_t,              /* qop_req */
 467         gss_buffer_t,           /* input_message_buffer */
 468         int *,                  /* conf_state */
 469         gss_buffer_t            /* output_message_buffer */
 470 );
 471 
 472 /* New for V2 */
 473 OM_uint32 gss_unwrap(
 474         OM_uint32 *,            /* minor_status */
 475         gss_ctx_id_t,           /* context_handle */
 476         gss_buffer_t,           /* input_message_buffer */
 477         gss_buffer_t,           /* output_message_buffer */
 478         int *,                  /* conf_state */
 479         gss_qop_t *             /* qop_state */
 480 );
 481 
 482 OM_uint32 gss_display_status(
 483         OM_uint32 *,            /* minor_status */
 484         OM_uint32,              /* status_value */
 485         int,                    /* status_type */
 486         gss_OID,                /* mech_type (used to be const) */
 487         OM_uint32 *,            /* message_context */
 488         gss_buffer_t            /* status_string */
 489 );
 490 
 491 OM_uint32 gss_indicate_mechs(
 492         OM_uint32 *,            /* minor_status */
 493         gss_OID_set *           /* mech_set */
 494 );
 495 
 496 OM_uint32 gss_compare_name(
 497         OM_uint32 *,            /* minor_status */
 498         gss_name_t,             /* name1 */
 499         gss_name_t,             /* name2 */
 500         int *                   /* name_equal */
 501 );
 502 
 503 OM_uint32 gss_display_name(
 504         OM_uint32 *,            /* minor_status */
 505         gss_name_t,             /* input_name */
 506         gss_buffer_t,           /* output_name_buffer */
 507         gss_OID *               /* output_name_type */
 508 );
 509 
 510 OM_uint32 gss_import_name(
 511         OM_uint32 *,            /* minor_status */
 512         gss_buffer_t,           /* input_name_buffer */
 513         gss_OID,                /* input_name_type(used to be const) */
 514         gss_name_t *            /* output_name */
 515 );
 516 
 517 OM_uint32 gss_release_name(
 518         OM_uint32 *,            /* minor_status */
 519         gss_name_t *            /* input_name */
 520 );
 521 
 522 OM_uint32 gss_release_buffer(
 523         OM_uint32 *,            /* minor_status */
 524         gss_buffer_t            /* buffer */
 525 );
 526 
 527 OM_uint32 gss_release_oid_set(
 528         OM_uint32 *,            /* minor_status */
 529         gss_OID_set *           /* set */
 530 );
 531 
 532 OM_uint32 gss_inquire_cred(
 533         OM_uint32 *,            /* minor_status */
 534         gss_cred_id_t,          /* cred_handle */
 535         gss_name_t *,           /* name */
 536         OM_uint32 *,            /* lifetime */
 537         gss_cred_usage_t *,     /* cred_usage */
 538         gss_OID_set *           /* mechanisms */
 539 );
 540 
 541 /* Last argument new for V2 */
 542 OM_uint32 gss_inquire_context(
 543         OM_uint32 *,            /* minor_status */
 544         gss_ctx_id_t,           /* context_handle */
 545         gss_name_t *,           /* src_name */
 546         gss_name_t *,           /* targ_name */
 547         OM_uint32 *,            /* lifetime_rec */
 548         gss_OID *,              /* mech_type */
 549         OM_uint32 *,            /* ctx_flags */
 550         int *,                  /* locally_initiated */
 551         int *                   /* open */
 552 );
 553 
 554 /* New for V2 */
 555 OM_uint32 gss_wrap_size_limit(
 556         OM_uint32 *,            /* minor_status */
 557         gss_ctx_id_t,           /* context_handle */
 558         int,                    /* conf_req_flag */
 559         gss_qop_t,              /* qop_req */
 560         OM_uint32,              /* req_output_size */
 561         OM_uint32 *             /* max_input_size */
 562 );
 563 
 564 /* New for V2 */
 565 OM_uint32 gss_add_cred(
 566         OM_uint32 *,            /* minor_status */
 567         gss_cred_id_t,          /* input_cred_handle */
 568         gss_name_t,             /* desired_name */
 569         gss_OID,                /* desired_mech */
 570         gss_cred_usage_t,       /* cred_usage */
 571         OM_uint32,              /* initiator_time_req */
 572         OM_uint32,              /* acceptor_time_req */
 573         gss_cred_id_t *,        /* output_cred_handle */
 574         gss_OID_set *,          /* actual_mechs */
 575         OM_uint32 *,            /* initiator_time_rec */
 576         OM_uint32 *             /* acceptor_time_rec */
 577 );
 578 
 579 /* New for V2 */
 580 OM_uint32 gss_inquire_cred_by_mech(
 581         OM_uint32 *,            /* minor_status */
 582         gss_cred_id_t,          /* cred_handle */
 583         gss_OID,                /* mech_type */
 584         gss_name_t *,           /* name */
 585         OM_uint32 *,            /* initiator_lifetime */
 586         OM_uint32 *,            /* acceptor_lifetime */
 587         gss_cred_usage_t *      /* cred_usage */
 588 );
 589 
 590 /* New for V2 */
 591 OM_uint32 gss_export_sec_context(
 592         OM_uint32 *,            /* minor_status */
 593         gss_ctx_id_t *,         /* context_handle */
 594         gss_buffer_t            /* interprocess_token */
 595 );
 596 
 597 /* New for V2 */
 598 OM_uint32 gss_import_sec_context(
 599         OM_uint32 *,            /* minor_status */
 600         gss_buffer_t,           /* interprocess_token */
 601         gss_ctx_id_t *          /* context_handle */
 602 );
 603 
 604 /* New for V2 */
 605 OM_uint32 gss_release_oid(
 606         OM_uint32 *,            /* minor_status */
 607         gss_OID *               /* oid */
 608 );
 609 
 610 /* New for V2 */
 611 OM_uint32 gss_create_empty_oid_set(
 612         OM_uint32 *,            /* minor_status */
 613         gss_OID_set *           /* oid_set */
 614 );
 615 
 616 /* New for V2 */
 617 OM_uint32 gss_add_oid_set_member(
 618         OM_uint32 *,            /* minor_status */
 619         gss_OID,                /* member_oid */
 620         gss_OID_set *           /* oid_set */
 621 );
 622 
 623 /* New for V2 */
 624 OM_uint32 gss_test_oid_set_member(
 625         OM_uint32 *,            /* minor_status */
 626         gss_OID,                /* member */
 627         gss_OID_set,            /* set */
 628         int *                   /* present */
 629 );
 630 
 631 /* New for V2 */
 632 OM_uint32 gss_str_to_oid(
 633         OM_uint32 *,            /* minor_status */
 634         gss_buffer_t,           /* oid_str */
 635         gss_OID *               /* oid */
 636 );
 637 
 638 /* New for V2 */
 639 OM_uint32 gss_oid_to_str(
 640         OM_uint32 *,            /* minor_status */
 641         gss_OID,                /* oid */
 642         gss_buffer_t            /* oid_str */
 643 );
 644 
 645 /* New for V2 */
 646 OM_uint32 gss_inquire_names_for_mech(
 647         OM_uint32 *,            /* minor_status */
 648         gss_OID,                /* mechanism */
 649         gss_OID_set *           /* name_types */
 650 );
 651 
 652 /* New for V2 */
 653 OM_uint32 gss_export_name(
 654         OM_uint32  *,           /* minor_status */
 655         const gss_name_t,       /* input_name */
 656         gss_buffer_t            /* exported_name */
 657 );
 658 
 659 /* New for V2 */
 660 OM_uint32 gss_duplicate_name(
 661         OM_uint32  *,           /* minor_status */
 662         const gss_name_t,       /* input_name */
 663         gss_name_t *            /* dest_name */
 664 );
 665 
 666 /* New for V2 */
 667 OM_uint32 gss_canonicalize_name(
 668         OM_uint32  *,           /* minor_status */
 669         const gss_name_t,       /* input_name */
 670         const gss_OID,          /* mech_type */
 671         gss_name_t *            /* output_name */
 672 );
 673 
 674 #ifdef __cplusplus
 675 }
 676 #endif
 677 
 678 #endif /* _GSSAPI_H_ */