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

📄 kcm.c

📁 samba最新软件
💻 C
📖 第 1 页 / 共 2 页
字号:
    krb5_data response_data;    ret = kcm_storage_request(context, KCM_OP_GET_PRINCIPAL, &request);    if (ret)	return ret;    ret = krb5_store_stringz(request, k->name);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = kcm_call(context, k, request, &response, &response_data);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = krb5_ret_principal(response, principal);    if (ret)	ret = KRB5_CC_IO;    krb5_storage_free(request);    krb5_storage_free(response);    krb5_data_free(&response_data);    return ret;}/* * Request: *      NameZ * * Response: *      Cursor * */static krb5_error_codekcm_get_first (krb5_context context,	       krb5_ccache id,	       krb5_cc_cursor *cursor){    krb5_error_code ret;    krb5_kcmcache *k = KCMCACHE(id);    krb5_storage *request, *response;    krb5_data response_data;    int32_t tmp;    ret = kcm_storage_request(context, KCM_OP_GET_FIRST, &request);    if (ret)	return ret;    ret = krb5_store_stringz(request, k->name);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = kcm_call(context, k, request, &response, &response_data);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = krb5_ret_int32(response, &tmp);    if (ret || tmp < 0)	ret = KRB5_CC_IO;    krb5_storage_free(request);    krb5_storage_free(response);    krb5_data_free(&response_data);    if (ret)	return ret;    *cursor = malloc(sizeof(tmp));    if (*cursor == NULL)	return KRB5_CC_NOMEM;    KCMCURSOR(*cursor) = tmp;    return 0;}/* * Request: *      NameZ *      Cursor * * Response: *      Creds */static krb5_error_codekcm_get_next (krb5_context context,		krb5_ccache id,		krb5_cc_cursor *cursor,		krb5_creds *creds){    krb5_error_code ret;    krb5_kcmcache *k = KCMCACHE(id);    krb5_storage *request, *response;    krb5_data response_data;    ret = kcm_storage_request(context, KCM_OP_GET_NEXT, &request);    if (ret)	return ret;    ret = krb5_store_stringz(request, k->name);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = krb5_store_int32(request, KCMCURSOR(*cursor));    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = kcm_call(context, k, request, &response, &response_data);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = krb5_ret_creds(response, creds);    if (ret)	ret = KRB5_CC_IO;    krb5_storage_free(request);    krb5_storage_free(response);    krb5_data_free(&response_data);    return ret;}/* * Request: *      NameZ *      Cursor * * Response: * */static krb5_error_codekcm_end_get (krb5_context context,	     krb5_ccache id,	     krb5_cc_cursor *cursor){    krb5_error_code ret;    krb5_kcmcache *k = KCMCACHE(id);    krb5_storage *request;    ret = kcm_storage_request(context, KCM_OP_END_GET, &request);    if (ret)	return ret;    ret = krb5_store_stringz(request, k->name);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = krb5_store_int32(request, KCMCURSOR(*cursor));    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = kcm_call(context, k, request, NULL, NULL);    if (ret) {	krb5_storage_free(request);	return ret;    }      krb5_storage_free(request);    KCMCURSOR(*cursor) = 0;    free(*cursor);    *cursor = NULL;    return ret;}/* * Request: *      NameZ *      WhichFields *      MatchCreds * * Response: * */static krb5_error_codekcm_remove_cred(krb5_context context,		krb5_ccache id,		krb5_flags which,		krb5_creds *cred){    krb5_error_code ret;    krb5_kcmcache *k = KCMCACHE(id);    krb5_storage *request;    ret = kcm_storage_request(context, KCM_OP_REMOVE_CRED, &request);    if (ret)	return ret;    ret = krb5_store_stringz(request, k->name);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = krb5_store_int32(request, which);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = krb5_store_creds_tag(request, cred);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = kcm_call(context, k, request, NULL, NULL);    krb5_storage_free(request);    return ret;}static krb5_error_codekcm_set_flags(krb5_context context,	      krb5_ccache id,	      krb5_flags flags){    krb5_error_code ret;    krb5_kcmcache *k = KCMCACHE(id);    krb5_storage *request;    ret = kcm_storage_request(context, KCM_OP_SET_FLAGS, &request);    if (ret)	return ret;    ret = krb5_store_stringz(request, k->name);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = krb5_store_int32(request, flags);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = kcm_call(context, k, request, NULL, NULL);    krb5_storage_free(request);    return ret;}static krb5_error_codekcm_get_version(krb5_context context,		krb5_ccache id){    return 0;}static krb5_error_codekcm_move(krb5_context context, krb5_ccache from, krb5_ccache to){    krb5_set_error_string(context, "kcm_move not implemented");    return EINVAL;}static krb5_error_codekcm_default_name(krb5_context context, char **str){    return _krb5_expand_default_cc_name(context, 					KRB5_DEFAULT_CCNAME_KCM,					str);}/** * Variable containing the KCM based credential cache implemention. * * @ingroup krb5_ccache */const krb5_cc_ops krb5_kcm_ops = {    "KCM",    kcm_get_name,    kcm_resolve,    kcm_gen_new,    kcm_initialize,    kcm_destroy,    kcm_close,    kcm_store_cred,    kcm_retrieve,    kcm_get_principal,    kcm_get_first,    kcm_get_next,    kcm_end_get,    kcm_remove_cred,    kcm_set_flags,    kcm_get_version,    NULL,    NULL,    NULL,    kcm_move,    kcm_default_name};krb5_boolean_krb5_kcm_is_running(krb5_context context){    krb5_error_code ret;    krb5_ccache_data ccdata;    krb5_ccache id = &ccdata;    krb5_boolean running;    ret = kcm_alloc(context, NULL, &id);    if (ret)	return 0;    running = (_krb5_kcm_noop(context, id) == 0);    kcm_free(context, &id);    return running;}/* * Request: * * Response: * */krb5_error_code_krb5_kcm_noop(krb5_context context,	       krb5_ccache id){    krb5_error_code ret;    krb5_kcmcache *k = KCMCACHE(id);    krb5_storage *request;    ret = kcm_storage_request(context, KCM_OP_NOOP, &request);    if (ret)	return ret;    ret = kcm_call(context, k, request, NULL, NULL);    krb5_storage_free(request);    return ret;}/* * Request: *      NameZ *      Mode * * Response: * */krb5_error_code_krb5_kcm_chmod(krb5_context context,		krb5_ccache id,		uint16_t mode){    krb5_error_code ret;    krb5_kcmcache *k = KCMCACHE(id);    krb5_storage *request;    ret = kcm_storage_request(context, KCM_OP_CHMOD, &request);    if (ret)	return ret;    ret = krb5_store_stringz(request, k->name);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = krb5_store_int16(request, mode);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = kcm_call(context, k, request, NULL, NULL);    krb5_storage_free(request);    return ret;}/* * Request: *      NameZ *      UID *      GID * * Response: * */krb5_error_code_krb5_kcm_chown(krb5_context context,		krb5_ccache id,		uint32_t uid,		uint32_t gid){    krb5_error_code ret;    krb5_kcmcache *k = KCMCACHE(id);    krb5_storage *request;    ret = kcm_storage_request(context, KCM_OP_CHOWN, &request);    if (ret)	return ret;    ret = krb5_store_stringz(request, k->name);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = krb5_store_int32(request, uid);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = krb5_store_int32(request, gid);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = kcm_call(context, k, request, NULL, NULL);    krb5_storage_free(request);    return ret;}/* * Request: *      NameZ *      ServerPrincipalPresent *      ServerPrincipal OPTIONAL *      Key * * Repsonse: * */krb5_error_code_krb5_kcm_get_initial_ticket(krb5_context context,			     krb5_ccache id,			     krb5_principal server,			     krb5_keyblock *key){    krb5_error_code ret;    krb5_kcmcache *k = KCMCACHE(id);    krb5_storage *request;    ret = kcm_storage_request(context, KCM_OP_GET_INITIAL_TICKET, &request);    if (ret)	return ret;    ret = krb5_store_stringz(request, k->name);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = krb5_store_int8(request, (server == NULL) ? 0 : 1);    if (ret) {	krb5_storage_free(request);	return ret;    }    if (server != NULL) {	ret = krb5_store_principal(request, server);	if (ret) {	    krb5_storage_free(request);	    return ret;	}    }    ret = krb5_store_keyblock(request, *key);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = kcm_call(context, k, request, NULL, NULL);    krb5_storage_free(request);    return ret;}/* * Request: *      NameZ *      KDCFlags *      EncryptionType *      ServerPrincipal * * Repsonse: * */krb5_error_code_krb5_kcm_get_ticket(krb5_context context,		     krb5_ccache id,		     krb5_kdc_flags flags,		     krb5_enctype enctype,		     krb5_principal server){    krb5_error_code ret;    krb5_kcmcache *k = KCMCACHE(id);    krb5_storage *request;    ret = kcm_storage_request(context, KCM_OP_GET_TICKET, &request);    if (ret)	return ret;    ret = krb5_store_stringz(request, k->name);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = krb5_store_int32(request, flags.i);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = krb5_store_int32(request, enctype);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = krb5_store_principal(request, server);    if (ret) {	krb5_storage_free(request);	return ret;    }    ret = kcm_call(context, k, request, NULL, NULL);    krb5_storage_free(request);    return ret;}#endif /* HAVE_KCM */

⌨️ 快捷键说明

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