As with all C programs, the outer shell of the program is containedin the entry-point function,main().main() performsfour functions:
Parses command-line arguments and assigns the arguments tovariables.
Callsparse_oid() to create a GSS-API OID,object identifier, if a mechanism other than the default is to be used. Theobject identifier comes from the name of the security mechanism, providedthat a mechanism name has been supplied.
Callscall_server(), which does the actualwork of creating a context and sending data.
Releases the storage space for the OID if necessary, afterthe data is sent.
The source code for themain() routine is shownin the following example.
Example 12 GSSAPI Clientmain() Functionint 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;}