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; } |