]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: Use buffer_truncate_rshift_bits
authorAki Tuomi <aki.tuomi@dovecot.fi>
Tue, 1 Nov 2016 19:50:29 +0000 (21:50 +0200)
committerGitLab <gitlab@git.dovecot.net>
Wed, 2 Nov 2016 21:19:23 +0000 (23:19 +0200)
src/auth/auth-policy.c

index c79aba93954d9b056f7877dcbd12f9ca2cbd54ca..27cedbabd08a88123168da56861ae7a21282167e 100755 (executable)
@@ -449,18 +449,7 @@ void auth_policy_create_json(struct policy_lookup_ctx *context,
        digest->result(ctx, ptr);
        str_truncate(buffer, digest->digest_size);
        if (context->set->policy_hash_truncate > 0) {
-               /* truncate it to closest byte boundary */
-               int bytes = ((context->set->policy_hash_truncate + 7) & -8)/8;
-               /* remainding bits */
-               int bits = bytes*8 - context->set->policy_hash_truncate;
-               str_truncate(buffer, bytes);
-               ptr = buffer_get_modifiable_data(buffer, NULL);
-               /* right shift everything and left-pad with 0 */
-               if (bits > 0) {
-                       for(size_t i=bytes-1;i>0;i--)
-                               ptr[i] = (ptr[i]>>(8-bits)) + ((ptr[i-1]&(0xff>>(8-bits)))<<bits);
-                       ptr[0] = ptr[0]>>(8-bits);
-               }
+               buffer_truncate_rshift_bits(buffer, context->set->policy_hash_truncate);
        }
        const char *hashed_password = binary_to_hex(str_data(buffer), str_len(buffer));
        str_append_c(context->json, '{');