main() はプログラムのエントリポイントです。次に、コマンド行構文を示します。
gss-client [-port port] [-d] [-mech mech] host service msg |
コマンド行を解析した後、main() は (指定されていれば) 該当するセキュリティ機構名を OID に変換し、安全な接続を確立し、そして、必要であれば、機構の OID を破棄します。
main() は標準ではない関数 gss_release_oid() を使用します。この関数は GSS-API のすべての実装でサポートされているわけではないため、可能な限り使用するべきではありません。アプリケーションは独自の機構を割り当てるのではなく、デフォルトの機構を使用するため (GSS_C_NULL_OID で指定)、gss_release_oid() 関数はあまり使用するべきではありません。ここで使用している理由は下位互換性のためと、この GSS-API 実装の全体を示すためです。
int main(argc, argv) int argc; char **argv; { /* char *service_name, *hostname, *msg; */ 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; /* 引数を解析する */ 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]; if (mechanism) parse_oid(mechanism, &g_mechOid); if (call_server(hostname, port, g_mechOid, service_name, deleg_flag, msg, use_file) < 0) exit(1); if (g_mechOid != GSS_C_NULL_OID) (void) gss_release_oid(&min_stat, &gmechOid); return 0; } |