Fix symbol name collision with systems that have their own sha2

implementation.  This can result in PAM using the wrong sha2
implementation on Solaris systems configured to use SHA512 for
passwords.
This commit is contained in:
Todd C. Miller
2015-03-05 12:27:26 -07:00
parent 2dd0540ad6
commit 35dcb05a5f
3 changed files with 47 additions and 23 deletions

2
configure vendored
View File

@@ -19826,7 +19826,7 @@ if test X"$FOUND_SHA2" = X"no"; then
esac esac
for _sym in SHA224Final SHA224Init SHA224Pad SHA224Transform SHA224Update SHA256Final SHA256Init SHA256Pad SHA256Transform SHA256Update SHA384Final SHA384Init SHA384Pad SHA384Transform SHA384Update SHA512Final SHA512Init SHA512Pad SHA512Transform SHA512Update; do for _sym in sudo_SHA224Final sudo_SHA224Init sudo_SHA224Pad sudo_SHA224Transform sudo_SHA224Update sudo_SHA256Final sudo_SHA256Init sudo_SHA256Pad sudo_SHA256Transform sudo_SHA256Update sudo_SHA384Final sudo_SHA384Init sudo_SHA384Pad sudo_SHA384Transform sudo_SHA384Update sudo_SHA512Final sudo_SHA512Init sudo_SHA512Pad sudo_SHA512Transform sudo_SHA512Update; do
COMPAT_EXP="${COMPAT_EXP}${_sym} COMPAT_EXP="${COMPAT_EXP}${_sym}
" "
done done

View File

@@ -2609,7 +2609,7 @@ AC_CHECK_HEADER([sha2.h], [
]) ])
if test X"$FOUND_SHA2" = X"no"; then if test X"$FOUND_SHA2" = X"no"; then
AC_LIBOBJ(sha2) AC_LIBOBJ(sha2)
SUDO_APPEND_COMPAT_EXP(SHA224Final SHA224Init SHA224Pad SHA224Transform SHA224Update SHA256Final SHA256Init SHA256Pad SHA256Transform SHA256Update SHA384Final SHA384Init SHA384Pad SHA384Transform SHA384Update SHA512Final SHA512Init SHA512Pad SHA512Transform SHA512Update) SUDO_APPEND_COMPAT_EXP(sudo_SHA224Final sudo_SHA224Init sudo_SHA224Pad sudo_SHA224Transform sudo_SHA224Update sudo_SHA256Final sudo_SHA256Init sudo_SHA256Pad sudo_SHA256Transform sudo_SHA256Update sudo_SHA384Final sudo_SHA384Init sudo_SHA384Pad sudo_SHA384Transform sudo_SHA384Update sudo_SHA512Final sudo_SHA512Init sudo_SHA512Pad sudo_SHA512Transform sudo_SHA512Update)
fi fi
dnl dnl
dnl Function checks for sudo_noexec dnl Function checks for sudo_noexec

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2013-2014 Todd C. Miller <Todd.Miller@courtesan.com> * Copyright (c) 2013-2015 Todd C. Miller <Todd.Miller@courtesan.com>
* *
* Permission to use, copy, modify, and distribute this software for any * Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * purpose with or without fee is hereby granted, provided that the above
@@ -47,28 +47,52 @@ typedef struct {
uint8_t buffer[SHA512_BLOCK_LENGTH]; uint8_t buffer[SHA512_BLOCK_LENGTH];
} SHA2_CTX; } SHA2_CTX;
__dso_public void SHA224Init(SHA2_CTX *ctx); __dso_public void sudo_SHA224Init(SHA2_CTX *ctx);
__dso_public void SHA224Pad(SHA2_CTX *ctx); __dso_public void sudo_SHA224Pad(SHA2_CTX *ctx);
__dso_public void SHA224Transform(uint32_t state[8], const uint8_t buffer[SHA224_BLOCK_LENGTH]); __dso_public void sudo_SHA224Transform(uint32_t state[8], const uint8_t buffer[SHA224_BLOCK_LENGTH]);
__dso_public void SHA224Update(SHA2_CTX *ctx, const uint8_t *data, size_t len); __dso_public void sudo_SHA224Update(SHA2_CTX *ctx, const uint8_t *data, size_t len);
__dso_public void SHA224Final(uint8_t digest[SHA224_DIGEST_LENGTH], SHA2_CTX *ctx); __dso_public void sudo_SHA224Final(uint8_t digest[SHA224_DIGEST_LENGTH], SHA2_CTX *ctx);
__dso_public void SHA256Init(SHA2_CTX *ctx); #define SHA224Init sudo_SHA224Init
__dso_public void SHA256Pad(SHA2_CTX *ctx); #define SHA224Pad sudo_SHA224Pad
__dso_public void SHA256Transform(uint32_t state[8], const uint8_t buffer[SHA256_BLOCK_LENGTH]); #define SHA224Transform sudo_SHA224Transform
__dso_public void SHA256Update(SHA2_CTX *ctx, const uint8_t *data, size_t len); #define SHA224Update sudo_SHA224Update
__dso_public void SHA256Final(uint8_t digest[SHA256_DIGEST_LENGTH], SHA2_CTX *ctx); #define SHA224Final sudo_SHA224Final
__dso_public void SHA384Init(SHA2_CTX *ctx); __dso_public void sudo_SHA256Init(SHA2_CTX *ctx);
__dso_public void SHA384Pad(SHA2_CTX *ctx); __dso_public void sudo_SHA256Pad(SHA2_CTX *ctx);
__dso_public void SHA384Transform(uint64_t state[8], const uint8_t buffer[SHA384_BLOCK_LENGTH]); __dso_public void sudo_SHA256Transform(uint32_t state[8], const uint8_t buffer[SHA256_BLOCK_LENGTH]);
__dso_public void SHA384Update(SHA2_CTX *ctx, const uint8_t *data, size_t len); __dso_public void sudo_SHA256Update(SHA2_CTX *ctx, const uint8_t *data, size_t len);
__dso_public void SHA384Final(uint8_t digest[SHA384_DIGEST_LENGTH], SHA2_CTX *ctx); __dso_public void sudo_SHA256Final(uint8_t digest[SHA256_DIGEST_LENGTH], SHA2_CTX *ctx);
__dso_public void SHA512Init(SHA2_CTX *ctx); #define SHA256Init sudo_SHA256Init
__dso_public void SHA512Pad(SHA2_CTX *ctx); #define SHA256Pad sudo_SHA256Pad
__dso_public void SHA512Transform(uint64_t state[8], const uint8_t buffer[SHA512_BLOCK_LENGTH]); #define SHA256Transform sudo_SHA256Transform
__dso_public void SHA512Update(SHA2_CTX *ctx, const uint8_t *data, size_t len); #define SHA256Update sudo_SHA256Update
__dso_public void SHA512Final(uint8_t digest[SHA512_DIGEST_LENGTH], SHA2_CTX *ctx); #define SHA256Final sudo_SHA256Final
__dso_public void sudo_SHA384Init(SHA2_CTX *ctx);
__dso_public void sudo_SHA384Pad(SHA2_CTX *ctx);
__dso_public void sudo_SHA384Transform(uint64_t state[8], const uint8_t buffer[SHA384_BLOCK_LENGTH]);
__dso_public void sudo_SHA384Update(SHA2_CTX *ctx, const uint8_t *data, size_t len);
__dso_public void sudo_SHA384Final(uint8_t digest[SHA384_DIGEST_LENGTH], SHA2_CTX *ctx);
#define SHA384Init sudo_SHA384Init
#define SHA384Pad sudo_SHA384Pad
#define SHA384Transform sudo_SHA384Transform
#define SHA384Update sudo_SHA384Update
#define SHA384Final sudo_SHA384Final
__dso_public void sudo_SHA512Init(SHA2_CTX *ctx);
__dso_public void sudo_SHA512Pad(SHA2_CTX *ctx);
__dso_public void sudo_SHA512Transform(uint64_t state[8], const uint8_t buffer[SHA512_BLOCK_LENGTH]);
__dso_public void sudo_SHA512Update(SHA2_CTX *ctx, const uint8_t *data, size_t len);
__dso_public void sudo_SHA512Final(uint8_t digest[SHA512_DIGEST_LENGTH], SHA2_CTX *ctx);
#define SHA512Init sudo_SHA512Init
#define SHA512Pad sudo_SHA512Pad
#define SHA512Transform sudo_SHA512Transform
#define SHA512Update sudo_SHA512Update
#define SHA512Final sudo_SHA512Final
#endif /* _SUDOERS_SHA2_H */ #endif /* _SUDOERS_SHA2_H */