11d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce/*
21d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce * GSS Proxy upcall module
31d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce *
41d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce *  Copyright (C) 2012 Simo Sorce <simo@redhat.com>
51d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce *
61d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce * This program is free software; you can redistribute it and/or modify
71d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce * it under the terms of the GNU General Public License as published by
81d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce * the Free Software Foundation; either version 2 of the License, or
91d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce * (at your option) any later version.
101d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce *
111d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce * This program is distributed in the hope that it will be useful,
121d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce * but WITHOUT ANY WARRANTY; without even the implied warranty of
131d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
141d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce * GNU General Public License for more details.
151d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce *
161d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce * You should have received a copy of the GNU General Public License
171d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce * along with this program; if not, write to the Free Software
181d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
191d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce */
201d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
211d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#ifndef _LINUX_GSS_RPC_XDR_H
221d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define _LINUX_GSS_RPC_XDR_H
231d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
241d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#include <linux/sunrpc/xdr.h>
251d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#include <linux/sunrpc/clnt.h>
261d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#include <linux/sunrpc/xprtsock.h>
271d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
281d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#ifdef RPC_DEBUG
291d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce# define RPCDBG_FACILITY	RPCDBG_AUTH
301d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#endif
311d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
321d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define LUCID_OPTION "exported_context_type"
331d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define LUCID_VALUE  "linux_lucid_v1"
341d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define CREDS_OPTION "exported_creds_type"
351d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define CREDS_VALUE  "linux_creds_v1"
361d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
371d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcetypedef struct xdr_netobj gssx_buffer;
381d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcetypedef struct xdr_netobj utf8string;
391d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcetypedef struct xdr_netobj gssx_OID;
401d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
411d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorceenum gssx_cred_usage {
421d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	GSSX_C_INITIATE = 1,
431d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	GSSX_C_ACCEPT = 2,
441d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	GSSX_C_BOTH = 3,
451d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce};
461d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
471d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcestruct gssx_option {
481d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_buffer option;
491d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_buffer value;
501d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce};
511d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
521d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcestruct gssx_option_array {
531d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	u32 count;
541d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	struct gssx_option *data;
551d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce};
561d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
571d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcestruct gssx_status {
581d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	u64 major_status;
591d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_OID mech;
601d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	u64 minor_status;
611d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	utf8string major_status_string;
621d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	utf8string minor_status_string;
631d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_buffer server_ctx;
641d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	struct gssx_option_array options;
651d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce};
661d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
671d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcestruct gssx_call_ctx {
681d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	utf8string locale;
691d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_buffer server_ctx;
701d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	struct gssx_option_array options;
711d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce};
721d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
731d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcestruct gssx_name_attr {
741d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_buffer attr;
751d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_buffer value;
761d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	struct gssx_option_array extensions;
771d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce};
781d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
791d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcestruct gssx_name_attr_array {
801d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	u32 count;
811d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	struct gssx_name_attr *data;
821d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce};
831d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
841d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcestruct gssx_name {
851d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_buffer display_name;
861d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce};
871d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcetypedef struct gssx_name gssx_name;
881d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
891d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcestruct gssx_cred_element {
901d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_name MN;
911d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_OID mech;
921d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	u32 cred_usage;
931d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	u64 initiator_time_rec;
941d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	u64 acceptor_time_rec;
951d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	struct gssx_option_array options;
961d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce};
971d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
981d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcestruct gssx_cred_element_array {
991d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	u32 count;
1001d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	struct gssx_cred_element *data;
1011d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce};
1021d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
1031d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcestruct gssx_cred {
1041d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_name desired_name;
1051d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	struct gssx_cred_element_array elements;
1061d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_buffer cred_handle_reference;
1071d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	u32 needs_release;
1081d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce};
1091d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
1101d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcestruct gssx_ctx {
1111d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_buffer exported_context_token;
1121d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_buffer state;
1131d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	u32 need_release;
1141d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_OID mech;
1151d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_name src_name;
1161d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_name targ_name;
1171d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	u64 lifetime;
1181d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	u64 ctx_flags;
1191d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	u32 locally_initiated;
1201d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	u32 open;
1211d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	struct gssx_option_array options;
1221d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce};
1231d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
1241d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcestruct gssx_cb {
1251d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	u64 initiator_addrtype;
1261d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_buffer initiator_address;
1271d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	u64 acceptor_addrtype;
1281d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_buffer acceptor_address;
1291d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_buffer application_data;
1301d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce};
1311d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
1321d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
1331d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce/* This structure is not defined in the protocol.
1341d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce * It is used in the kernel to carry around a big buffer
1351d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce * as a set of pages */
1361d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcestruct gssp_in_token {
1371d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	struct page **pages;	/* Array of contiguous pages */
1381d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	unsigned int page_base;	/* Start of page data */
1391d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	unsigned int page_len;	/* Length of page data */
1401d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce};
1411d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
1421d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcestruct gssx_arg_accept_sec_context {
1431d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	struct gssx_call_ctx call_ctx;
1441d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	struct gssx_ctx *context_handle;
1451d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	struct gssx_cred *cred_handle;
1461d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	struct gssp_in_token input_token;
1471d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	struct gssx_cb *input_cb;
1481d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	u32 ret_deleg_cred;
1491d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	struct gssx_option_array options;
1509dfd87da1aeb0fd364167ad199f40fe96a6a87beJ. Bruce Fields	struct page **pages;
1519dfd87da1aeb0fd364167ad199f40fe96a6a87beJ. Bruce Fields	unsigned int npages;
1521d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce};
1531d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
1541d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcestruct gssx_res_accept_sec_context {
1551d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	struct gssx_status status;
1561d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	struct gssx_ctx *context_handle;
1571d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	gssx_buffer *output_token;
1581d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	/* struct gssx_cred *delegated_cred_handle; not used in kernel */
1591d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce	struct gssx_option_array options;
1601d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce};
1611d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
1621d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
1631d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
1641d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_enc_indicate_mechs NULL
1651d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_dec_indicate_mechs NULL
1661d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_enc_get_call_context NULL
1671d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_dec_get_call_context NULL
1681d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_enc_import_and_canon_name NULL
1691d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_dec_import_and_canon_name NULL
1701d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_enc_export_cred NULL
1711d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_dec_export_cred NULL
1721d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_enc_import_cred NULL
1731d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_dec_import_cred NULL
1741d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_enc_acquire_cred NULL
1751d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_dec_acquire_cred NULL
1761d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_enc_store_cred NULL
1771d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_dec_store_cred NULL
1781d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_enc_init_sec_context NULL
1791d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_dec_init_sec_context NULL
1801d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorcevoid gssx_enc_accept_sec_context(struct rpc_rqst *req,
1811d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce				 struct xdr_stream *xdr,
1821d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce				 struct gssx_arg_accept_sec_context *args);
1831d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorceint gssx_dec_accept_sec_context(struct rpc_rqst *rqstp,
1841d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce				struct xdr_stream *xdr,
1851d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce				struct gssx_res_accept_sec_context *res);
1861d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_enc_release_handle NULL
1871d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_dec_release_handle NULL
1881d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_enc_get_mic NULL
1891d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_dec_get_mic NULL
1901d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_enc_verify NULL
1911d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_dec_verify NULL
1921d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_enc_wrap NULL
1931d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_dec_wrap NULL
1941d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_enc_unwrap NULL
1951d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_dec_unwrap NULL
1961d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_enc_wrap_size_limit NULL
1971d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define gssx_dec_wrap_size_limit NULL
1981d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
1991d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce/* non implemented calls are set to 0 size */
2001d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_ARG_indicate_mechs_sz 0
2011d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_RES_indicate_mechs_sz 0
2021d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_ARG_get_call_context_sz 0
2031d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_RES_get_call_context_sz 0
2041d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_ARG_import_and_canon_name_sz 0
2051d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_RES_import_and_canon_name_sz 0
2061d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_ARG_export_cred_sz 0
2071d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_RES_export_cred_sz 0
2081d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_ARG_import_cred_sz 0
2091d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_RES_import_cred_sz 0
2101d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_ARG_acquire_cred_sz 0
2111d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_RES_acquire_cred_sz 0
2121d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_ARG_store_cred_sz 0
2131d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_RES_store_cred_sz 0
2141d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_ARG_init_sec_context_sz 0
2151d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_RES_init_sec_context_sz 0
2161d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
2171d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_default_in_call_ctx_sz (4 + 4 + 4 + \
2181d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce			8 + sizeof(LUCID_OPTION) + sizeof(LUCID_VALUE) + \
2191d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce			8 + sizeof(CREDS_OPTION) + sizeof(CREDS_VALUE))
2201d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_default_in_ctx_hndl_sz (4 + 4+8 + 4 + 4 + 6*4 + 6*4 + 8 + 8 + \
2211d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce					4 + 4 + 4)
2221d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_default_in_cred_sz 4 /* we send in no cred_handle */
2231d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_default_in_token_sz 4 /* does *not* include token data */
2241d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_default_in_cb_sz 4 /* we do not use channel bindings */
2251d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_ARG_accept_sec_context_sz (GSSX_default_in_call_ctx_sz + \
2261d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce					GSSX_default_in_ctx_hndl_sz + \
2271d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce					GSSX_default_in_cred_sz + \
2281d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce					GSSX_default_in_token_sz + \
2291d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce					GSSX_default_in_cb_sz + \
2301d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce					4 /* no deleg creds boolean */ + \
2311d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce					4) /* empty options */
2321d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
2331d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce/* somewhat arbitrary numbers but large enough (we ignore some of the data
2341d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce * sent down, but it is part of the protocol so we need enough space to take
2351d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce * it in) */
2361d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_default_status_sz 8 + 24 + 8 + 256 + 256 + 16 + 4
2371d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_max_output_handle_sz 128
2381d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_max_oid_sz 16
2391d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_max_princ_sz 256
2401d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_default_ctx_sz (GSSX_max_output_handle_sz + \
2411d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce			     16 + 4 + GSSX_max_oid_sz + \
2421d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce			     2 * GSSX_max_princ_sz + \
2431d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce			     8 + 8 + 4 + 4 + 4)
2441d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_max_output_token_sz 1024
2459dfd87da1aeb0fd364167ad199f40fe96a6a87beJ. Bruce Fields/* grouplist not included; we allocate separate pages for that: */
2469dfd87da1aeb0fd364167ad199f40fe96a6a87beJ. Bruce Fields#define GSSX_max_creds_sz (4 + 4 + 4 /* + NGROUPS_MAX*4 */)
2471d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_RES_accept_sec_context_sz (GSSX_default_status_sz + \
2481d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce					GSSX_default_ctx_sz + \
2491d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce					GSSX_max_output_token_sz + \
2501d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce					4 + GSSX_max_creds_sz)
2511d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
2521d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_ARG_release_handle_sz 0
2531d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_RES_release_handle_sz 0
2541d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_ARG_get_mic_sz 0
2551d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_RES_get_mic_sz 0
2561d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_ARG_verify_sz 0
2571d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_RES_verify_sz 0
2581d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_ARG_wrap_sz 0
2591d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_RES_wrap_sz 0
2601d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_ARG_unwrap_sz 0
2611d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_RES_unwrap_sz 0
2621d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_ARG_wrap_size_limit_sz 0
2631d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#define GSSX_RES_wrap_size_limit_sz 0
2641d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
2651d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
2661d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce
2671d658336b05f8697d6445834f8867f8ad5e4f735Simo Sorce#endif /* _LINUX_GSS_RPC_XDR_H */
268