Solaris 开发者安全性指南 6

weixin_38065111 2008-04-14 09:59:27

GSSAPI 服务器示例:main() 函数 第6 章• GSS-API 服务器示例129 示例6–1 gss-server 示例:main() (续) } else if (strcmp(*argv, "-once") == 0) { once = 1; } else if (strcmp(*argv, "-inetd") == 0) { do_inetd = 1; } else if (strcmp(*argv, "-logfile") == 0) { argc--; argv++; if (!argc) usage(); log = fopen(*argv, "a"); display_file = log; if (!log) { perror(*argv); exit(1); } } else break; argc--; argv++; } if (argc != 1) usage(); if ((*argv)[0] == ’-’) usage(); GSSAPI 服务器示例:main() 函数 130 Solaris 开发者安全性指南• 2006 年11 月 示例6–1 gss-server 示例:main() (续) service_name = *argv; /* Acquire service credentials. */ if (server_acquire_creds(service_name, &server_creds) = 0) { do { /* Accept a TCP connection */ if ((s = accept(stmp, NULL, 0)) string", maj_stat, min_stat); return -1; } fprintf(log, "Accepted connection using mechanism OID %.*s.\n", (int) oid_name.length, (char *) oid_name.value); (void) gss_release_buffer(&min_stat, &oid_name); } maj_stat = gss_display_name(&min_stat, client, client_name, &doid); if (maj_stat != GSS_S_COMPLETE) { display_status("displaying name", maj_stat, min_stat); return -1; } maj_stat = gss_release_name(&min_stat, &client); if (maj_stat != GSS_S_COMPLETE) { 从客户机接收数据 146 Solaris 开发者安全性指南• 2006 年11 月 示例6–4 server_establish_context() 函数(续) display_status("releasing name", maj_stat, min_stat); return -1; } return 0; } sign_server() 函数使用以下源代码,通过调用server_establish_context() 来接受上下 文。 /* Establish a context with the client */ if (server_establish_context(s, server_creds, &context, &client_name, &ret_flags) 1 -支持验证、完整性和保密性。数字表示加密密钥长度。 保密性和完整性操作是通过安全机制执行的。libsasl 可以协调这些请求。 注– 在协商过程中,SASL客户机会选择具有最大SSF 的机制。但是,实际所选的SASL机制 可能随后会协商较小的SSF。 SASL 中的通信 应用程序通过libsasl API 与libsasl 进行通信。libsasl 可通过应用程序注册的回调方式请 求其他信息。应用程序不会直接调用插件,而只是通过libsasl 进行调用。一般情况下,插 件会调用libsasl 框架的插件,随后这些插件调用应用程序的回调。SASL 插件还可以直接 调用应用程序,不过应用程序不知道调用来自插件还是来自libsasl。 回调在以下几个方面非常有用。 libsasl 可以使用回调获取完成验证所需的信息。 libsasl 消费方应用程序可以使用回调更改插件和配置数据的搜索路径、验证文件以及 更改各种缺省行为。 服务器可以使用回调来更改授权策略、提供不同的口令验证方法以及获取口令更改信 息。 客户机和服务器可以使用回调来指定错误消息的语言。 应用程序可以注册两种回调:全局回调和会话回调。此外,libsasl 定义了大量用于为不同 种类的回调注册的回调标识符。如果未注册给定类型的回调,则libsasl 将执行缺省操作。 会话回调将覆盖全局回调。如果为给定ID 指定了会话回调,则不会为该会话调用全局回 调。某些回调必须是全局的,因为这些回调发生在会话之外。以下实例要求使用全局回调 : 确定要装入的插件的搜索路径 验证插件 配置数据的位置 记录错误消息 对libsasl 或其插件的其他全局配置 可以使用给定SASL 回调ID 的NULL回调函数来注册SASL 回调。NULL回调函数指示装配 客户机的目的是为了提供所需的数据。所有的SASL 回调ID 都以前缀SASL_CB_ 开头。 SASL 提供以下可供客户机或服务器使用的回调: SASL_CB_GETOPT 获取SASL 选项。选项用于修改libsasl (3LIB) 和相关插件的行 为。可由客户机或服务器使用。 SASL_CB_LOG 设置libsasl 及其插件的日志记录函数。缺省行为是使用 syslog。 以上文章转自于 : http://developers.sun.com.cn/ 本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/2710/showart_530366.html
...全文
11 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧