⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init_creds.c

📁 samba最新软件
💻 C
字号:
/* * Copyright (c) 1997 - 2004 Kungliga Tekniska H鰃skolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * * 3. Neither the name of the Institute nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */#include "krb5_locl.h"RCSID("$Id: init_creds.c 21711 2007-07-27 14:22:02Z lha $");void KRB5_LIB_FUNCTIONkrb5_get_init_creds_opt_init(krb5_get_init_creds_opt *opt){    memset (opt, 0, sizeof(*opt));    opt->flags = 0;    opt->opt_private = NULL;}krb5_error_code KRB5_LIB_FUNCTIONkrb5_get_init_creds_opt_alloc(krb5_context context, 			      krb5_get_init_creds_opt **opt){    krb5_get_init_creds_opt *o;        *opt = NULL;    o = calloc(1, sizeof(*o));    if (o == NULL) {	krb5_set_error_string(context, "out of memory");	return ENOMEM;    }    krb5_get_init_creds_opt_init(o);    o->opt_private = calloc(1, sizeof(*o->opt_private));    if (o->opt_private == NULL) {	krb5_set_error_string(context, "out of memory");	free(o);	return ENOMEM;    }    o->opt_private->refcount = 1;    *opt = o;    return 0;}krb5_error_code_krb5_get_init_creds_opt_copy(krb5_context context, 			      const krb5_get_init_creds_opt *in,			      krb5_get_init_creds_opt **out){    krb5_get_init_creds_opt *opt;    *out = NULL;    opt = calloc(1, sizeof(*opt));    if (opt == NULL) {	krb5_set_error_string(context, "out of memory");	return ENOMEM;    }    if (in)	*opt = *in;    if(opt->opt_private == NULL) {	opt->opt_private = calloc(1, sizeof(*opt->opt_private));	if (opt->opt_private == NULL) {	    krb5_set_error_string(context, "out of memory");	    free(opt);	    return ENOMEM;	}	opt->opt_private->refcount = 1;    } else	opt->opt_private->refcount++;    *out = opt;    return 0;}void KRB5_LIB_FUNCTION_krb5_get_init_creds_opt_free_krb5_error(krb5_get_init_creds_opt *opt){    if (opt->opt_private == NULL || opt->opt_private->error == NULL)	return;    free_KRB_ERROR(opt->opt_private->error);    free(opt->opt_private->error);    opt->opt_private->error = NULL;}void KRB5_LIB_FUNCTION_krb5_get_init_creds_opt_set_krb5_error(krb5_context context,					krb5_get_init_creds_opt *opt, 					const KRB_ERROR *error){    krb5_error_code ret;    if (opt->opt_private == NULL)	return;    _krb5_get_init_creds_opt_free_krb5_error(opt);    opt->opt_private->error = malloc(sizeof(*opt->opt_private->error));    if (opt->opt_private->error == NULL)	return;    ret = copy_KRB_ERROR(error, opt->opt_private->error);    if (ret) {	free(opt->opt_private->error);	opt->opt_private->error = NULL;    }	}void KRB5_LIB_FUNCTIONkrb5_get_init_creds_opt_free(krb5_context context,			     krb5_get_init_creds_opt *opt){    if (opt == NULL || opt->opt_private == NULL)	return;    if (opt->opt_private->refcount < 1) /* abort ? */	return;    if (--opt->opt_private->refcount == 0) {	_krb5_get_init_creds_opt_free_krb5_error(opt);	_krb5_get_init_creds_opt_free_pkinit(opt);	free(opt->opt_private);    }    memset(opt, 0, sizeof(*opt));    free(opt);}static intget_config_time (krb5_context context,		 const char *realm,		 const char *name,		 int def){    int ret;    ret = krb5_config_get_time (context, NULL,				"realms",				realm,				name,				NULL);    if (ret >= 0)	return ret;    ret = krb5_config_get_time (context, NULL,				"libdefaults",				name,				NULL);    if (ret >= 0)	return ret;    return def;}static krb5_booleanget_config_bool (krb5_context context,		 const char *realm,		 const char *name){    return krb5_config_get_bool (context,				 NULL,				 "realms",				 realm,				 name,				 NULL)	|| krb5_config_get_bool (context,				 NULL,				 "libdefaults",				 name,				 NULL);}/* * set all the values in `opt' to the appropriate values for * application `appname' (default to getprogname() if NULL), and realm * `realm'.  First looks in [appdefaults] but falls back to * [realms] or [libdefaults] for some of the values. */void KRB5_LIB_FUNCTIONkrb5_get_init_creds_opt_set_default_flags(krb5_context context,					  const char *appname,					  krb5_const_realm realm,					  krb5_get_init_creds_opt *opt){    krb5_boolean b;    time_t t;    b = get_config_bool (context, realm, "forwardable");    krb5_appdefault_boolean(context, appname, realm, "forwardable", b, &b);    krb5_get_init_creds_opt_set_forwardable(opt, b);    b = get_config_bool (context, realm, "proxiable");    krb5_appdefault_boolean(context, appname, realm, "proxiable", b, &b);    krb5_get_init_creds_opt_set_proxiable (opt, b);    krb5_appdefault_time(context, appname, realm, "ticket_lifetime", 0, &t);    if (t == 0)	t = get_config_time (context, realm, "ticket_lifetime", 0);    if(t != 0)	krb5_get_init_creds_opt_set_tkt_life(opt, t);    krb5_appdefault_time(context, appname, realm, "renew_lifetime", 0, &t);    if (t == 0)	t = get_config_time (context, realm, "renew_lifetime", 0);    if(t != 0)	krb5_get_init_creds_opt_set_renew_life(opt, t);    krb5_appdefault_boolean(context, appname, realm, "no-addresses", 			    KRB5_ADDRESSLESS_DEFAULT, &b);    krb5_get_init_creds_opt_set_addressless (context, opt, b);#if 0    krb5_appdefault_boolean(context, appname, realm, "anonymous", FALSE, &b);    krb5_get_init_creds_opt_set_anonymous (opt, b);    krb5_get_init_creds_opt_set_etype_list(opt, enctype,					   etype_str.num_strings);    krb5_get_init_creds_opt_set_salt(krb5_get_init_creds_opt *opt,				     krb5_data *salt);    krb5_get_init_creds_opt_set_preauth_list(krb5_get_init_creds_opt *opt,					     krb5_preauthtype *preauth_list,					     int preauth_list_length);#endif}void KRB5_LIB_FUNCTIONkrb5_get_init_creds_opt_set_tkt_life(krb5_get_init_creds_opt *opt,				     krb5_deltat tkt_life){    opt->flags |= KRB5_GET_INIT_CREDS_OPT_TKT_LIFE;    opt->tkt_life = tkt_life;}void KRB5_LIB_FUNCTIONkrb5_get_init_creds_opt_set_renew_life(krb5_get_init_creds_opt *opt,				       krb5_deltat renew_life){    opt->flags |= KRB5_GET_INIT_CREDS_OPT_RENEW_LIFE;    opt->renew_life = renew_life;}void KRB5_LIB_FUNCTIONkrb5_get_init_creds_opt_set_forwardable(krb5_get_init_creds_opt *opt,					int forwardable){    opt->flags |= KRB5_GET_INIT_CREDS_OPT_FORWARDABLE;    opt->forwardable = forwardable;}void KRB5_LIB_FUNCTIONkrb5_get_init_creds_opt_set_proxiable(krb5_get_init_creds_opt *opt,				      int proxiable){    opt->flags |= KRB5_GET_INIT_CREDS_OPT_PROXIABLE;    opt->proxiable = proxiable;}void KRB5_LIB_FUNCTIONkrb5_get_init_creds_opt_set_etype_list(krb5_get_init_creds_opt *opt,				       krb5_enctype *etype_list,				       int etype_list_length){    opt->flags |= KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST;    opt->etype_list = etype_list;    opt->etype_list_length = etype_list_length;}void KRB5_LIB_FUNCTIONkrb5_get_init_creds_opt_set_address_list(krb5_get_init_creds_opt *opt,					 krb5_addresses *addresses){    opt->flags |= KRB5_GET_INIT_CREDS_OPT_ADDRESS_LIST;    opt->address_list = addresses;}void KRB5_LIB_FUNCTIONkrb5_get_init_creds_opt_set_preauth_list(krb5_get_init_creds_opt *opt,					 krb5_preauthtype *preauth_list,					 int preauth_list_length){    opt->flags |= KRB5_GET_INIT_CREDS_OPT_PREAUTH_LIST;    opt->preauth_list_length = preauth_list_length;    opt->preauth_list = preauth_list;}void KRB5_LIB_FUNCTIONkrb5_get_init_creds_opt_set_salt(krb5_get_init_creds_opt *opt,				 krb5_data *salt){    opt->flags |= KRB5_GET_INIT_CREDS_OPT_SALT;    opt->salt = salt;}void KRB5_LIB_FUNCTIONkrb5_get_init_creds_opt_set_anonymous(krb5_get_init_creds_opt *opt,				      int anonymous){    opt->flags |= KRB5_GET_INIT_CREDS_OPT_ANONYMOUS;    opt->anonymous = anonymous;}static krb5_error_coderequire_ext_opt(krb5_context context,		krb5_get_init_creds_opt *opt,		const char *type){    if (opt->opt_private == NULL) {	krb5_set_error_string(context, "%s on non extendable opt", type);	return EINVAL;    }    return 0;}krb5_error_code KRB5_LIB_FUNCTIONkrb5_get_init_creds_opt_set_pa_password(krb5_context context,					krb5_get_init_creds_opt *opt,					const char *password,					krb5_s2k_proc key_proc){    krb5_error_code ret;    ret = require_ext_opt(context, opt, "init_creds_opt_set_pa_password");    if (ret)	return ret;    opt->opt_private->password = password;    opt->opt_private->key_proc = key_proc;    return 0;}krb5_error_code KRB5_LIB_FUNCTIONkrb5_get_init_creds_opt_set_pac_request(krb5_context context,					krb5_get_init_creds_opt *opt,					krb5_boolean req_pac){    krb5_error_code ret;    ret = require_ext_opt(context, opt, "init_creds_opt_set_pac_req");    if (ret)	return ret;    opt->opt_private->req_pac = req_pac ?	KRB5_INIT_CREDS_TRISTATE_TRUE :	KRB5_INIT_CREDS_TRISTATE_FALSE;    return 0;}krb5_error_code KRB5_LIB_FUNCTIONkrb5_get_init_creds_opt_get_error(krb5_context context,				  krb5_get_init_creds_opt *opt,				  KRB_ERROR **error){    krb5_error_code ret;    *error = NULL;    ret = require_ext_opt(context, opt, "init_creds_opt_get_error");    if (ret)	return ret;    if (opt->opt_private->error == NULL)	return 0;    *error = malloc(sizeof(**error));    if (*error == NULL) {	krb5_set_error_string(context, "malloc - out memory");	return ENOMEM;    }    ret = copy_KRB_ERROR(opt->opt_private->error, *error);    if (ret)	krb5_clear_error_string(context);    return 0;}krb5_error_code KRB5_LIB_FUNCTIONkrb5_get_init_creds_opt_set_addressless(krb5_context context,					krb5_get_init_creds_opt *opt,					krb5_boolean addressless){    krb5_error_code ret;    ret = require_ext_opt(context, opt, "init_creds_opt_set_pac_req");    if (ret)	return ret;    if (addressless)	opt->opt_private->addressless = KRB5_INIT_CREDS_TRISTATE_TRUE;    else	opt->opt_private->addressless = KRB5_INIT_CREDS_TRISTATE_FALSE;    return 0;}krb5_error_code KRB5_LIB_FUNCTIONkrb5_get_init_creds_opt_set_canonicalize(krb5_context context,					 krb5_get_init_creds_opt *opt,					 krb5_boolean req){    krb5_error_code ret;    ret = require_ext_opt(context, opt, "init_creds_opt_set_canonicalize");    if (ret)	return ret;    if (req)	opt->opt_private->flags |= KRB5_INIT_CREDS_CANONICALIZE;    else	opt->opt_private->flags &= ~KRB5_INIT_CREDS_CANONICALIZE;    return 0;}krb5_error_code KRB5_LIB_FUNCTIONkrb5_get_init_creds_opt_set_win2k(krb5_context context,				  krb5_get_init_creds_opt *opt,				  krb5_boolean req){    krb5_error_code ret;    ret = require_ext_opt(context, opt, "init_creds_opt_set_win2k");    if (ret)	return ret;    if (req)	opt->opt_private->flags |= KRB5_INIT_CREDS_NO_C_CANON_CHECK;    else	opt->opt_private->flags &= ~KRB5_INIT_CREDS_NO_C_CANON_CHECK;    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -