main() はプログラムのエントリポイントです。次に、コマンド行構文を示します。
gss-server [-port port] [-d] [-mech mech] host service msg |
コマンド行を解析した後、main() は (指定されていれば) 希望のセキュリティ機構名を OID に変換し、資格を獲得し、コンテキストを確立し、データを受信し、そして、必要であれば機構 OID を破棄します。
通常、アプリケーションは機構を設定せずに、GSS-API が提供するデフォルトを使用するべきです。
int
main(argc, argv)
int argc;
char **argv;
{
char *service_name, *mechType = NULL;
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;
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, "-mech") == 0) {
argc--; argv++;
if (!argc) usage();
mechType = *argv;
} 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;
if (mechType != NULL) {
if ((g_mechOid = createMechOid(mechType)) == NULL) {
usage();
exit(-1);
}
}
if (server_acquire_creds(service_name, g_mechOid, &server_creds) < 0)
return -1;
if (do_inetd) {
close(1);
close(2);
sign_server(0, server_creds);
close(0);
} else {
int stmp;
if ((stmp = create_socket(port))) {
do {
/* TCP 接続を受け入れる */
if ((s = accept(stmp, NULL, 0)) < 0) {
perror("accepting connection");
} else {
/* 失敗したとしても有効な対処はここではできないため、
この戻り値は検査されない */
sign_server(s, server_creds);
}
} while (!once);
}
close(stmp);
}
(void) gss_release_cred(&min_stat, &server_creds);
if (g_mechOid != GSS_C_NULL_OID)
gss_release_oid(&min_stat, &g_mechOid);
/*NOTREACHED*/
(void) close(s);
return 0;
}
|