diff options
| author | Marc Horowitz <marc@mit.edu> | 1998-10-30 02:56:35 +0000 |
|---|---|---|
| committer | Marc Horowitz <marc@mit.edu> | 1998-10-30 02:56:35 +0000 |
| commit | 1440ab035ba04550ddbbfbff1ee9b5571e3d95db (patch) | |
| tree | 9d5e8d2e151a930e044c7d0f7c64053d244577a0 /src/appl/gss-sample | |
| parent | 61ddbf948ba6ee70c1bc049268c3dfa73bc9983e (diff) | |
pull up 3des implementation from the marc-3des branch
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@11001 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/appl/gss-sample')
| -rw-r--r-- | src/appl/gss-sample/ChangeLog | 12 | ||||
| -rw-r--r-- | src/appl/gss-sample/gss-client.c | 35 | ||||
| -rw-r--r-- | src/appl/gss-sample/gss-server.c | 22 |
3 files changed, 43 insertions, 26 deletions
diff --git a/src/appl/gss-sample/ChangeLog b/src/appl/gss-sample/ChangeLog index 476fb5bce..bdf6e8d71 100644 --- a/src/appl/gss-sample/ChangeLog +++ b/src/appl/gss-sample/ChangeLog @@ -1,3 +1,15 @@ +1998-10-24 Marc Horowitz <marc@mit.edu> + + * gss-server.c (sign_server): fix the text heuristic to recognize + whitespace as text. + (main): clean up file descriptors properly after each + connection. + + * gss-client.c (read_file): properly handle empty files + + * gss-client.c: (call_server): NUL-terminate the contents + of non-empty files on the wire. + Wed Feb 18 15:27:32 1998 Tom Yu <tlyu@mit.edu> * Makefile.in: Remove trailing slash from BUILDTOP. Fix up diff --git a/src/appl/gss-sample/gss-client.c b/src/appl/gss-sample/gss-client.c index e0bca99c4..33a7e963a 100644 --- a/src/appl/gss-sample/gss-client.c +++ b/src/appl/gss-sample/gss-client.c @@ -239,25 +239,29 @@ void read_file(file_name, in_buf) exit(1); } in_buf->length = stat_buf.st_size; - in_buf->value = malloc(in_buf->length); - if (in_buf->value == 0) { + + if (in_buf->length == 0) { + in_buf->value = NULL; + return; + } + + if ((in_buf->value = malloc(in_buf->length)) == 0) { fprintf(stderr, "Couldn't allocate %d byte buffer for reading file\n", in_buf->length); exit(1); } - memset(in_buf->value, 0, in_buf->length); - for (bytes_in = 0; bytes_in < in_buf->length; bytes_in += count) { - count = read(fd, in_buf->value, in_buf->length); - if (count < 0) { - perror("read"); - exit(1); - } - if (count == 0) - break; + + /* this code used to check for incomplete reads, but you can't get + an incomplete read on any file for which fstat() is meaningful */ + + count = read(fd, in_buf->value, in_buf->length); + if (count < 0) { + perror("read"); + exit(1); } - if (bytes_in != count) + if (count < in_buf->length) fprintf(stderr, "Warning, only read in %d bytes, expected %d\n", - bytes_in, count); + count, in_buf->length); } /* @@ -281,8 +285,7 @@ void read_file(file_name, in_buf) * seals msg in a GSS-API token with gss_seal, sends it to the server, * reads back a GSS-API signature block for msg from the server, and * verifies it with gss_verify. -1 is returned if any step fails, - * otherwise 0 is returned. - */ + * otherwise 0 is returned. */ int call_server(host, port, oid, service_name, deleg_flag, msg, use_file) char *host; u_short port; @@ -410,7 +413,7 @@ int call_server(host, port, oid, service_name, deleg_flag, msg, use_file) } else { /* Seal the message */ in_buf.value = msg; - in_buf.length = strlen(msg) + 1; + in_buf.length = strlen(msg); } maj_stat = gss_wrap(&min_stat, context, 1, GSS_C_QOP_DEFAULT, diff --git a/src/appl/gss-sample/gss-server.c b/src/appl/gss-sample/gss-server.c index ef9d49582..3e9ff0959 100644 --- a/src/appl/gss-sample/gss-server.c +++ b/src/appl/gss-sample/gss-server.c @@ -393,9 +393,10 @@ int sign_server(s, server_creds) fprintf(log, "Received message: "); cp = msg_buf.value; - if (isprint(cp[0]) && isprint(cp[1])) - fprintf(log, "\"%s\"\n", cp); - else { + if ((isprint(cp[0]) || isspace(cp[0])) && + (isprint(cp[1]) || isspace(cp[1]))) { + fprintf(log, "\"%.*s\"\n", msg_buf.length, msg_buf.value); + } else { printf("\n"); print_token(&msg_buf); } @@ -488,20 +489,21 @@ main(argc, argv) } else { int stmp; - if ((stmp = create_socket(port))) { + if ((stmp = create_socket(port)) >= 0) { do { /* Accept a TCP connection */ if ((s = accept(stmp, NULL, 0)) < 0) { perror("accepting connection"); - } else { - /* this return value is not checked, because there's - not really anything to do if it fails */ - sign_server(s, server_creds); + continue; } + /* this return value is not checked, because there's + not really anything to do if it fails */ + sign_server(s, server_creds); + close(s); } while (!once); - } - close(stmp); + close(stmp); + } } (void) gss_release_cred(&min_stat, &server_creds); |
