wrap_size_limit.c (krb5_gss_wrap_size_limit): Fix wrap_size limit so
authorTheodore Tso <tytso@mit.edu>
Fri, 23 Apr 1999 04:33:19 +0000 (04:33 +0000)
committerTheodore Tso <tytso@mit.edu>
Fri, 23 Apr 1999 04:33:19 +0000 (04:33 +0000)
that it correctly calculates its results, and underestimates the
correct size instead of overestimating it, and not returning zero all
the time.  (Which it used to do after the March 25 fix.)

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@11380 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/gssapi/krb5/ChangeLog
src/lib/gssapi/krb5/wrap_size_limit.c

index 61b9cb5861c054029407f46f5c52b32fd8839266..dbab40a0c8f7245ae3a8b74065a4c95e1f3eb68c 100644 (file)
@@ -1,3 +1,11 @@
+Fri Apr 23 00:31:17 1999  Theodore Y. Ts'o  <tytso@mit.edu>
+
+       * wrap_size_limit.c (krb5_gss_wrap_size_limit): Fix wrap_size
+               limit so that it correctly calculates its results, and
+               underestimates the correct size instead of overestimating
+               it, and not returning zero all the time.  (Which it used
+               to do after the March 25 fix.)
+
 Sat Apr 17 01:23:57 1999  Theodore Y. Ts'o  <tytso@mit.edu>
 
        * gssapi_krb5.h, copy_ccache.c, get_tkt_flags.c, set_ccache.c:
index 54c29da30664000dbf580285ec1bb7db1f6ba6ad..f7fee73cdf7237a5b2f3f017daf1294af9f34a0a 100644 (file)
@@ -150,21 +150,27 @@ krb5_gss_wrap_size_limit(minor_status, context_handle, conf_req_flag,
            *max_input_size = req_output_size - headerlen;
        }
     } else {
-       OM_uint32               cfsize;
+       OM_uint32               data_size, conflen;
        OM_uint32               ohlen;
+       int                     overhead;
 
        /* Calculate the token size and subtract that from the output size */
-       cfsize = (conf_req_flag) ? kg_confounder_size(context, ctx->enc) : 0;
+       overhead = 7 + ctx->mech_used->length;
+       data_size = req_output_size;
+       if (conf_req_flag) {
+               conflen = kg_confounder_size(context, ctx->enc);
+               data_size = (conflen + data_size + 8) & (~7);
+       }
        ohlen = g_token_size((gss_OID) ctx->mech_used,
-                            (unsigned int) (req_output_size + cfsize +
-                                            ctx->cksum_size + 14));
+                            (unsigned int) (data_size + ctx->cksum_size + 14))
+               - req_output_size;
 
-       if (ohlen < req_output_size)
+       if (ohlen+overhead < req_output_size)
            /*
             * Cannot have trailer length that will cause us to pad over
             * our length
             */
-           *max_input_size = (req_output_size - ohlen - 1) & (~7);
+           *max_input_size = (req_output_size - ohlen - overhead) & (~7);
        else
            *max_input_size = 0;
     }