diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2003-05-26 09:57:45 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2003-05-26 09:57:45 +0000 |
commit | f035d9ce8e917fbd2d9f8b8d2317dbbe868df165 (patch) | |
tree | 377a6df5dbbd34dcd4476c460e1eaef8327b524b | |
parent | 5c39e22731eaca28a2197c7c0526c242feb3370b (diff) | |
download | mailutils-f035d9ce8e917fbd2d9f8b8d2317dbbe868df165.tar.gz mailutils-f035d9ce8e917fbd2d9f8b8d2317dbbe868df165.tar.bz2 |
(auth_gssapi): Check return codes from gss_wrap, gss_unwrap.
-rw-r--r-- | imap4d/auth_gss.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/imap4d/auth_gss.c b/imap4d/auth_gss.c index 109dfc269..545b446a9 100644 --- a/imap4d/auth_gss.c +++ b/imap4d/auth_gss.c @@ -190,8 +190,14 @@ auth_gssapi (struct imap4d_command *command, sec_level = htonl ((SUPPORTED_P_MECH << 24) | server_buffer_size); tokbuf.length = 4; tokbuf.value = &sec_level; - gss_wrap (&min_stat, context, 0, GSS_C_QOP_DEFAULT, - &tokbuf, &cflags, &outbuf); + maj_stat = gss_wrap (&min_stat, context, 0, GSS_C_QOP_DEFAULT, + &tokbuf, &cflags, &outbuf); + if (maj_stat != GSS_S_COMPLETE) + { + display_status ("wrap", maj_stat, min_stat); + return RESP_NO; + } + util_base64_encode (outbuf.value, outbuf.length, &tmp, &size); util_send ("+ %*.*s\r\n", size, size, tmp); free (tmp); @@ -201,9 +207,15 @@ auth_gssapi (struct imap4d_command *command, (unsigned char **) &tokbuf.value, &tokbuf.length); free (token_str); - gss_unwrap (&min_stat, context, &tokbuf, &outbuf, &cflags, &quality); + maj_stat = gss_unwrap (&min_stat, context, &tokbuf, &outbuf, &cflags, + &quality); free (tokbuf.value); - + if (maj_stat != GSS_S_COMPLETE) + { + display_status ("unwrap", maj_stat, min_stat); + return RESP_NO; + } + sec_level = ntohl (*(OM_uint32 *) outbuf.value); /* FIXME: parse sec_level and act accordingly to its settings */ |