diff options
author | Paul Park <pjpark@mit.edu> | 1995-08-31 17:35:06 +0000 |
---|---|---|
committer | Paul Park <pjpark@mit.edu> | 1995-08-31 17:35:06 +0000 |
commit | 89afcd6836025be84eefa1a55fc24c57c6dbe05d (patch) | |
tree | cd8a1ba097e0907e4d57c0e7d4d2ecba3174f1b9 /src/appl/gss-sample/gss-server.c | |
parent | a631ed069736a1dce90636b63a46dca6763d59b1 (diff) | |
download | krb5-89afcd6836025be84eefa1a55fc24c57c6dbe05d.zip krb5-89afcd6836025be84eefa1a55fc24c57c6dbe05d.tar.gz krb5-89afcd6836025be84eefa1a55fc24c57c6dbe05d.tar.bz2 |
Update for GSSAPI-V2. Add -v2 switch to use some of these features
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@6639 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/appl/gss-sample/gss-server.c')
-rw-r--r-- | src/appl/gss-sample/gss-server.c | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/src/appl/gss-sample/gss-server.c b/src/appl/gss-sample/gss-server.c index e401445..46fcdf0 100644 --- a/src/appl/gss-sample/gss-server.c +++ b/src/appl/gss-sample/gss-server.c @@ -50,7 +50,7 @@ FILE *log; usage() { - fprintf(stderr, "Usage: gss-server [-port port] [-inetd] [-logfile file] service_name\n"); + fprintf(stderr, "Usage: gss-server [-port port] [-v2] [-inetd] [-logfile file] service_name\n"); exit(1); } @@ -62,6 +62,7 @@ main(argc, argv) u_short port = 4444; int s; int do_inetd = 0; + int dov2 = 0; log = stdout; argc--; argv++; @@ -72,6 +73,8 @@ main(argc, argv) port = atoi(*argv); } else if (strcmp(*argv, "-inetd") == 0) { do_inetd = 1; + } else if (strcmp(*argv, "-v2") == 0) { + dov2 = 1; } else if (strcmp(*argv, "-logfile") == 0) { argc--; argv++; if (!argc) usage(); @@ -99,7 +102,7 @@ main(argc, argv) close(2); } - if (sign_server(s, service_name) < 0) + if (sign_server(s, service_name, dov2) < 0) exit(1); /*NOTREACHED*/ @@ -159,6 +162,8 @@ int create_socket(port) * inetd and use file descriptor 0. * service_name (r) the ASCII name of the GSS-API service to * establish a context as + * dov2 (r) a boolean indicating whether we should use GSSAPI + * V2 interfaces, if available. * * Returns: -1 on error * @@ -175,9 +180,10 @@ int create_socket(port) * * If any error occurs, -1 is returned. */ -int sign_server(s, service_name) +int sign_server(s, service_name, dov2) int s; char *service_name; + int dov2; { gss_cred_id_t server_creds; gss_buffer_desc client_name, xmit_buf, msg_buf, context_token; @@ -232,6 +238,12 @@ int sign_server(s, service_name) if (recv_token(s2, &xmit_buf) < 0) break; +#ifdef GSSAPI_V2 + if (dov2) + maj_stat = gss_unwrap(&min_stat, context, &xmit_buf, &msg_buf, + (int *) NULL, (gss_qop_t *) NULL); + else +#endif /* GSSAPI_V2 */ /* Unseal the message token */ maj_stat = gss_unseal(&min_stat, context, &xmit_buf, &msg_buf, NULL, NULL); @@ -245,6 +257,12 @@ int sign_server(s, service_name) fprintf(log, "Received message: \"%s\"\n", msg_buf.value); /* Produce a signature block for the message */ +#ifdef GSSAPI_V2 + if (dov2) + maj_stat = gss_get_mic(&min_stat, context, GSS_C_QOP_DEFAULT, + &msg_buf, &xmit_buf); + else +#endif /* GSSAPI_V2 */ maj_stat = gss_sign(&min_stat, context, GSS_C_QOP_DEFAULT, &msg_buf, &xmit_buf); if (maj_stat != GSS_S_COMPLETE) { @@ -312,8 +330,8 @@ int server_acquire_creds(service_name, server_creds) name_buf.value = service_name; name_buf.length = strlen(name_buf.value) + 1; - maj_stat = gss_import_name(&min_stat, &name_buf, gss_nt_service_name, - &server_name); + maj_stat = gss_import_name(&min_stat, &name_buf, + (gss_OID) gss_nt_service_name, &server_name); if (maj_stat != GSS_S_COMPLETE) { display_status("importing name", maj_stat, min_stat); return -1; @@ -365,7 +383,7 @@ int server_establish_context(s, server_creds, context, client_name) gss_name_t client; gss_OID doid; OM_uint32 maj_stat, min_stat; - int ret_flags; + OM_uint32 ret_flags; *context = GSS_C_NO_CONTEXT; |