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