1a9148abdSDoug Rabson /*- 2a9148abdSDoug Rabson * Copyright (c) 2008 Isilon Inc http://www.isilon.com/ 3a9148abdSDoug Rabson * Authors: Doug Rabson <dfr@rabson.org> 4a9148abdSDoug Rabson * Developed with Red Inc: Alfred Perlstein <alfred@freebsd.org> 5a9148abdSDoug Rabson * 6a9148abdSDoug Rabson * Redistribution and use in source and binary forms, with or without 7a9148abdSDoug Rabson * modification, are permitted provided that the following conditions 8a9148abdSDoug Rabson * are met: 9a9148abdSDoug Rabson * 1. Redistributions of source code must retain the above copyright 10a9148abdSDoug Rabson * notice, this list of conditions and the following disclaimer. 11a9148abdSDoug Rabson * 2. Redistributions in binary form must reproduce the above copyright 12a9148abdSDoug Rabson * notice, this list of conditions and the following disclaimer in the 13a9148abdSDoug Rabson * documentation and/or other materials provided with the distribution. 14a9148abdSDoug Rabson * 15a9148abdSDoug Rabson * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16a9148abdSDoug Rabson * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17a9148abdSDoug Rabson * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18a9148abdSDoug Rabson * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19a9148abdSDoug Rabson * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20a9148abdSDoug Rabson * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21a9148abdSDoug Rabson * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22a9148abdSDoug Rabson * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23a9148abdSDoug Rabson * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24a9148abdSDoug Rabson * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25a9148abdSDoug Rabson * SUCH DAMAGE. 26a9148abdSDoug Rabson */ 27a9148abdSDoug Rabson 28a9148abdSDoug Rabson 29a9148abdSDoug Rabson #ifdef RPC_HDR 30a9148abdSDoug Rabson 31a9148abdSDoug Rabson %#ifdef _KERNEL 32a9148abdSDoug Rabson %#include <kgssapi/gssapi.h> 33a9148abdSDoug Rabson %#else 34a9148abdSDoug Rabson %#include <gssapi/gssapi.h> 35*dd7d42a1SRick Macklem %#include <netdb.h> 36a9148abdSDoug Rabson %#endif 37a9148abdSDoug Rabson 38a9148abdSDoug Rabson %extern bool_t xdr_gss_buffer_desc(XDR *xdrs, gss_buffer_desc *buf); 39a9148abdSDoug Rabson %extern bool_t xdr_gss_OID_desc(XDR *xdrs, gss_OID_desc *oid); 40a9148abdSDoug Rabson %extern bool_t xdr_gss_OID(XDR *xdrs, gss_OID *oidp); 41a9148abdSDoug Rabson %extern bool_t xdr_gss_OID_set_desc(XDR *xdrs, gss_OID_set_desc *set); 42a9148abdSDoug Rabson %extern bool_t xdr_gss_OID_set(XDR *xdrs, gss_OID_set *setp); 43a9148abdSDoug Rabson %extern bool_t xdr_gss_channel_bindings_t(XDR *xdrs, gss_channel_bindings_t *chp); 44a9148abdSDoug Rabson 45a9148abdSDoug Rabson #endif 46a9148abdSDoug Rabson 47a9148abdSDoug Rabson typedef uint64_t gssd_ctx_id_t; 48a9148abdSDoug Rabson typedef uint64_t gssd_cred_id_t; 49a9148abdSDoug Rabson typedef uint64_t gssd_name_t; 50a9148abdSDoug Rabson 51a9148abdSDoug Rabson struct init_sec_context_res { 52a9148abdSDoug Rabson uint32_t major_status; 53a9148abdSDoug Rabson uint32_t minor_status; 54a9148abdSDoug Rabson gssd_ctx_id_t ctx; 55a9148abdSDoug Rabson gss_OID actual_mech_type; 56a9148abdSDoug Rabson gss_buffer_desc output_token; 57a9148abdSDoug Rabson uint32_t ret_flags; 58a9148abdSDoug Rabson uint32_t time_rec; 59a9148abdSDoug Rabson }; 60a9148abdSDoug Rabson 61a9148abdSDoug Rabson struct init_sec_context_args { 62a9148abdSDoug Rabson uint32_t uid; 63a9148abdSDoug Rabson gssd_cred_id_t cred; 64a9148abdSDoug Rabson gssd_ctx_id_t ctx; 65a9148abdSDoug Rabson gssd_name_t name; 66a9148abdSDoug Rabson gss_OID mech_type; 67a9148abdSDoug Rabson uint32_t req_flags; 68a9148abdSDoug Rabson uint32_t time_req; 69a9148abdSDoug Rabson gss_channel_bindings_t input_chan_bindings; 70a9148abdSDoug Rabson gss_buffer_desc input_token; 71a9148abdSDoug Rabson }; 72a9148abdSDoug Rabson 73a9148abdSDoug Rabson struct accept_sec_context_res { 74a9148abdSDoug Rabson uint32_t major_status; 75a9148abdSDoug Rabson uint32_t minor_status; 76a9148abdSDoug Rabson gssd_ctx_id_t ctx; 77a9148abdSDoug Rabson gssd_name_t src_name; 78a9148abdSDoug Rabson gss_OID mech_type; 79a9148abdSDoug Rabson gss_buffer_desc output_token; 80a9148abdSDoug Rabson uint32_t ret_flags; 81a9148abdSDoug Rabson uint32_t time_rec; 82a9148abdSDoug Rabson gssd_cred_id_t delegated_cred_handle; 83a9148abdSDoug Rabson }; 84a9148abdSDoug Rabson 85a9148abdSDoug Rabson struct accept_sec_context_args { 86a9148abdSDoug Rabson gssd_ctx_id_t ctx; 87a9148abdSDoug Rabson gssd_cred_id_t cred; 88a9148abdSDoug Rabson gss_buffer_desc input_token; 89a9148abdSDoug Rabson gss_channel_bindings_t input_chan_bindings; 90a9148abdSDoug Rabson }; 91a9148abdSDoug Rabson 92a9148abdSDoug Rabson struct delete_sec_context_res { 93a9148abdSDoug Rabson uint32_t major_status; 94a9148abdSDoug Rabson uint32_t minor_status; 95a9148abdSDoug Rabson gss_buffer_desc output_token; 96a9148abdSDoug Rabson }; 97a9148abdSDoug Rabson 98a9148abdSDoug Rabson struct delete_sec_context_args { 99a9148abdSDoug Rabson gssd_ctx_id_t ctx; 100a9148abdSDoug Rabson }; 101a9148abdSDoug Rabson 102a9148abdSDoug Rabson enum sec_context_format { 103a9148abdSDoug Rabson KGSS_HEIMDAL_0_6, 104a9148abdSDoug Rabson KGSS_HEIMDAL_1_1 105a9148abdSDoug Rabson }; 106a9148abdSDoug Rabson 107a9148abdSDoug Rabson struct export_sec_context_res { 108a9148abdSDoug Rabson uint32_t major_status; 109a9148abdSDoug Rabson uint32_t minor_status; 110a9148abdSDoug Rabson enum sec_context_format format; 111a9148abdSDoug Rabson gss_buffer_desc interprocess_token; 112a9148abdSDoug Rabson }; 113a9148abdSDoug Rabson 114a9148abdSDoug Rabson struct export_sec_context_args { 115a9148abdSDoug Rabson gssd_ctx_id_t ctx; 116a9148abdSDoug Rabson }; 117a9148abdSDoug Rabson 118a9148abdSDoug Rabson struct import_name_res { 119a9148abdSDoug Rabson uint32_t major_status; 120a9148abdSDoug Rabson uint32_t minor_status; 121a9148abdSDoug Rabson gssd_name_t output_name; 122a9148abdSDoug Rabson }; 123a9148abdSDoug Rabson 124a9148abdSDoug Rabson struct import_name_args { 125a9148abdSDoug Rabson gss_buffer_desc input_name_buffer; 126a9148abdSDoug Rabson gss_OID input_name_type; 127a9148abdSDoug Rabson }; 128a9148abdSDoug Rabson 129a9148abdSDoug Rabson struct canonicalize_name_res { 130a9148abdSDoug Rabson uint32_t major_status; 131a9148abdSDoug Rabson uint32_t minor_status; 132a9148abdSDoug Rabson gssd_name_t output_name; 133a9148abdSDoug Rabson }; 134a9148abdSDoug Rabson 135a9148abdSDoug Rabson struct canonicalize_name_args { 136a9148abdSDoug Rabson gssd_name_t input_name; 137a9148abdSDoug Rabson gss_OID mech_type; 138a9148abdSDoug Rabson }; 139a9148abdSDoug Rabson 140a9148abdSDoug Rabson struct export_name_res { 141a9148abdSDoug Rabson uint32_t major_status; 142a9148abdSDoug Rabson uint32_t minor_status; 143a9148abdSDoug Rabson gss_buffer_desc exported_name; 144a9148abdSDoug Rabson }; 145a9148abdSDoug Rabson 146a9148abdSDoug Rabson struct export_name_args { 147a9148abdSDoug Rabson gssd_name_t input_name; 148a9148abdSDoug Rabson }; 149a9148abdSDoug Rabson 150a9148abdSDoug Rabson struct release_name_res { 151a9148abdSDoug Rabson uint32_t major_status; 152a9148abdSDoug Rabson uint32_t minor_status; 153a9148abdSDoug Rabson }; 154a9148abdSDoug Rabson 155a9148abdSDoug Rabson struct release_name_args { 156a9148abdSDoug Rabson gssd_name_t input_name; 157a9148abdSDoug Rabson }; 158a9148abdSDoug Rabson 159a9148abdSDoug Rabson struct pname_to_uid_res { 160a9148abdSDoug Rabson uint32_t major_status; 161a9148abdSDoug Rabson uint32_t minor_status; 162a9148abdSDoug Rabson uint32_t uid; 163a9148abdSDoug Rabson uint32_t gid; 164a9148abdSDoug Rabson uint32_t gidlist<>; 165a9148abdSDoug Rabson }; 166a9148abdSDoug Rabson 167a9148abdSDoug Rabson struct pname_to_uid_args { 168a9148abdSDoug Rabson gssd_name_t pname; 169a9148abdSDoug Rabson gss_OID mech; 170a9148abdSDoug Rabson }; 171a9148abdSDoug Rabson 172a9148abdSDoug Rabson struct acquire_cred_res { 173a9148abdSDoug Rabson uint32_t major_status; 174a9148abdSDoug Rabson uint32_t minor_status; 175a9148abdSDoug Rabson gssd_cred_id_t output_cred; 176a9148abdSDoug Rabson gss_OID_set actual_mechs; 177a9148abdSDoug Rabson uint32_t time_rec; 178a9148abdSDoug Rabson }; 179a9148abdSDoug Rabson 180a9148abdSDoug Rabson struct acquire_cred_args { 181a9148abdSDoug Rabson uint32_t uid; 182a9148abdSDoug Rabson gssd_name_t desired_name; 183a9148abdSDoug Rabson uint32_t time_req; 184a9148abdSDoug Rabson gss_OID_set desired_mechs; 185a9148abdSDoug Rabson int cred_usage; 186a9148abdSDoug Rabson }; 187a9148abdSDoug Rabson 188a9148abdSDoug Rabson struct set_cred_option_res { 189a9148abdSDoug Rabson uint32_t major_status; 190a9148abdSDoug Rabson uint32_t minor_status; 191a9148abdSDoug Rabson }; 192a9148abdSDoug Rabson 193a9148abdSDoug Rabson struct set_cred_option_args { 194a9148abdSDoug Rabson gssd_cred_id_t cred; 195a9148abdSDoug Rabson gss_OID option_name; 196a9148abdSDoug Rabson gss_buffer_desc option_value; 197a9148abdSDoug Rabson }; 198a9148abdSDoug Rabson 199a9148abdSDoug Rabson struct release_cred_res { 200a9148abdSDoug Rabson uint32_t major_status; 201a9148abdSDoug Rabson uint32_t minor_status; 202a9148abdSDoug Rabson }; 203a9148abdSDoug Rabson 204a9148abdSDoug Rabson struct release_cred_args { 205a9148abdSDoug Rabson gssd_cred_id_t cred; 206a9148abdSDoug Rabson }; 207a9148abdSDoug Rabson 208a9148abdSDoug Rabson struct display_status_res { 209a9148abdSDoug Rabson uint32_t major_status; 210a9148abdSDoug Rabson uint32_t minor_status; 211a9148abdSDoug Rabson uint32_t message_context; 212a9148abdSDoug Rabson gss_buffer_desc status_string; 213a9148abdSDoug Rabson }; 214a9148abdSDoug Rabson 215a9148abdSDoug Rabson struct display_status_args { 216a9148abdSDoug Rabson uint32_t status_value; 217a9148abdSDoug Rabson int status_type; 218a9148abdSDoug Rabson gss_OID mech_type; 219a9148abdSDoug Rabson uint32_t message_context; 220a9148abdSDoug Rabson }; 221a9148abdSDoug Rabson 222*dd7d42a1SRick Macklem struct ip_to_dns_res { 223*dd7d42a1SRick Macklem uint32_t major_status; 224*dd7d42a1SRick Macklem uint32_t minor_status; 225*dd7d42a1SRick Macklem char dns_name<NI_MAXHOST>; 226*dd7d42a1SRick Macklem }; 227*dd7d42a1SRick Macklem 228*dd7d42a1SRick Macklem struct ip_to_dns_args { 229*dd7d42a1SRick Macklem char ip_addr<NI_MAXHOST>; 230*dd7d42a1SRick Macklem }; 231*dd7d42a1SRick Macklem 232a9148abdSDoug Rabson program GSSD { 233a9148abdSDoug Rabson version GSSDVERS { 234a9148abdSDoug Rabson void GSSD_NULL(void) = 0; 235a9148abdSDoug Rabson 236a9148abdSDoug Rabson init_sec_context_res 237a9148abdSDoug Rabson GSSD_INIT_SEC_CONTEXT(init_sec_context_args) = 1; 238a9148abdSDoug Rabson 239a9148abdSDoug Rabson accept_sec_context_res 240a9148abdSDoug Rabson GSSD_ACCEPT_SEC_CONTEXT(accept_sec_context_args) = 2; 241a9148abdSDoug Rabson 242a9148abdSDoug Rabson delete_sec_context_res 243a9148abdSDoug Rabson GSSD_DELETE_SEC_CONTEXT(delete_sec_context_args) = 3; 244a9148abdSDoug Rabson 245a9148abdSDoug Rabson export_sec_context_res 246a9148abdSDoug Rabson GSSD_EXPORT_SEC_CONTEXT(export_sec_context_args) = 4; 247a9148abdSDoug Rabson 248a9148abdSDoug Rabson import_name_res 249a9148abdSDoug Rabson GSSD_IMPORT_NAME(import_name_args) = 5; 250a9148abdSDoug Rabson 251a9148abdSDoug Rabson canonicalize_name_res 252a9148abdSDoug Rabson GSSD_CANONICALIZE_NAME(canonicalize_name_args) = 6; 253a9148abdSDoug Rabson 254a9148abdSDoug Rabson export_name_res 255a9148abdSDoug Rabson GSSD_EXPORT_NAME(export_name_args) = 7; 256a9148abdSDoug Rabson 257a9148abdSDoug Rabson release_name_res 258a9148abdSDoug Rabson GSSD_RELEASE_NAME(release_name_args) = 8; 259a9148abdSDoug Rabson 260a9148abdSDoug Rabson pname_to_uid_res 261a9148abdSDoug Rabson GSSD_PNAME_TO_UID(pname_to_uid_args) = 9; 262a9148abdSDoug Rabson 263a9148abdSDoug Rabson acquire_cred_res 264a9148abdSDoug Rabson GSSD_ACQUIRE_CRED(acquire_cred_args) = 10; 265a9148abdSDoug Rabson 266a9148abdSDoug Rabson set_cred_option_res 267a9148abdSDoug Rabson GSSD_SET_CRED_OPTION(set_cred_option_args) = 11; 268a9148abdSDoug Rabson 269a9148abdSDoug Rabson release_cred_res 270a9148abdSDoug Rabson GSSD_RELEASE_CRED(release_cred_args) = 12; 271a9148abdSDoug Rabson 272a9148abdSDoug Rabson display_status_res 273a9148abdSDoug Rabson GSSD_DISPLAY_STATUS(display_status_args) = 13; 274*dd7d42a1SRick Macklem 275*dd7d42a1SRick Macklem ip_to_dns_res 276*dd7d42a1SRick Macklem GSSD_IP_TO_DNS(ip_to_dns_args) = 14; 277a9148abdSDoug Rabson } = 1; 278a9148abdSDoug Rabson } = 0x40677373; 279