ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris 11 セキュリティーサービス開発ガイド Oracle Solaris 11.1 Information Library (日本語) |
1. Oracle Solaris の開発者向けセキュリティー機能 (概要)
3. PAM アプリケーションおよび PAM サービスの記述
クライアント側におけるその他の GSS-API コンテキスト操作
GSS-API クライアントにおける署名ブロックの読み取りと検証
8. Oracle Solaris 暗号化フレームワークの紹介
すべての C プログラムと同様に、プログラムの外部骨格はエントリポイント関数 main() に含まれます。main() は次の 4 つの機能を実行します。
コマンド行引数を解析し、それらを変数に代入します。
デフォルト以外の機構を使用する必要がある場合、parse_oid() を呼び出して GSS-API OID (オブジェクト識別子) を作成します。オブジェクト識別子はセキュリティー機構の名前から生成されます。ただし、それには機構名が指定される必要があります。
call_server() を呼び出します。この関数は、コンテキストの作成とデータの送信を実際に行います。
データの送信後、必要に応じて OID の記憶領域を解放します。
注 - このソースコード例は、Oracle ダウンロードセンターからダウンロードすることも可能です。http://www.oracle.com/technetwork/indexes/downloads/sdlc-decommission-333274.html を参照してください。
例 5-1 gss-client 例: main()
int main(argc, argv) int argc; char **argv; { char *msg; char service_name[128]; char hostname[128]; char *mechanism = 0; u_short port = 4444; int use_file = 0; OM_uint32 deleg_flag = 0, min_stat; 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, "-mech") == 0) { argc--; argv++; if (!argc) usage(); mechanism = *argv; } else if (strcmp(*argv, "-d") == 0) { deleg_flag = GSS_C_DELEG_FLAG; } else if (strcmp(*argv, "-f") == 0) { use_file = 1; } else break; argc--; argv++; } if (argc != 3) usage(); if (argc > 1) { strcpy(hostname, argv[0]); } else if (gethostname(hostname, sizeof(hostname)) == -1) { perror("gethostname"); exit(1); } if (argc > 2) { strcpy(service_name, argv[1]); strcat(service_name, "@"); strcat(service_name, hostname); } msg = argv[2]; /* Create GSSAPI object ID. */ if (mechanism) parse_oid(mechanism, &g_mechOid); /* Call server to create context and send data. */ if (call_server(hostname, port, g_mechOid, service_name, deleg_flag, msg, use_file) < 0) exit(1); /* Release storage space for OID, if still allocated */ if (g_mechOid != GSS_C_NULL_OID) (void) gss_release_oid(&min_stat, &gmechOid); return 0; }