| ナビゲーションリンクをスキップ | |
| 印刷ビューの終了 | |
|
Oracle Solaris セキュリティーサービス開発ガイド Oracle Solaris 10 8/11 Information Library (日本語) |
1. Oracle Solaris の開発者向けセキュリティー機能 (概要)
3. PAM アプリケーションおよび PAM サービスの記述
test_import_export_context() 関数の使用
8. Oracle Solaris 暗号化フレームワークの紹介
gss-server の main() 関数は次の作業を実行します。
コマンド行引数を解析し、それらを変数に代入します
機構に対応するサービスの資格を獲得します
sign_server() 関数を呼び出します。この関数は、メッセージに署名して戻す処理にかかわる作業を実行します
獲得した資格を解放します
機構 OID の名前空間を解放します
接続を閉じます (まだ開いている場合)
注 - このソースコード例は、ダウンロードセンターからダウンロードすることも可能です。https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_SMI-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=Security_code-Dev1.1-G-F@CDS-CDS_SMI を参照してください。
例 6-1 gss-server 例: main()
int
main(argc, argv)
int argc;
char **argv;
{
char *service_name;
gss_cred_id_t server_creds;
OM_uint32 min_stat;
u_short port = 4444;
int s;
int once = 0;
int do_inetd = 0;
log = stdout;
display_file = stdout;
/* Parse command-line arguments. */
argc--; argv++;
while (argc) {
if (strcmp(*argv, "-port") == 0) {
argc--; argv++;
if (!argc) usage();
port = atoi(*argv);
} else if (strcmp(*argv, "-verbose") == 0) {
verbose = 1;
} 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();
service_name = *argv;
/* Acquire service credentials. */
if (server_acquire_creds(service_name, &server_creds) < 0)
return -1;
if (do_inetd) {
close(1);
close(2);
/* Sign and return message. */
sign_server(0, server_creds);
close(0);
} else {
int stmp;
if ((stmp = create_socket(port)) >= 0) {
do {
/* Accept a TCP connection */
if ((s = accept(stmp, NULL, 0)) < 0) {
perror("accepting connection");
continue;
}
/* This return value is not checked, because there is
not really anything to do if it fails. */
sign_server(s, server_creds);
close(s);
} while (!once);
close(stmp);
}
}
/* Close down and clean up. */
(void) gss_release_cred(&min_stat, &server_creds);
/*NOTREACHED*/
(void) close(s);
return 0;
}