From fc13489c91e790ff8952aff1e7db1e6189894e30 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 8 Jun 2013 15:48:40 +1000 Subject: build: Build with system md5.h on OpenIndiana This changes (again...) our system md5 detection to cope with how OpenIndiana does md5. I'm becoming increasingly convinced this isn't worth our while (we should have just done samba_md5...), but for now this change seems to work on FreeBSD, OpenIndiana and Linux with libbsd. This needs us to rename struct MD5Context -> MD5_CTX, but we provide a config.h define to rename the type bad if MD5_CTX does not exist (it does however exist in the md5.h from libbsd). Andrew Bartlett Signed-off-by: Andrew Bartlett Reviewed-by: Jeremy Allison Autobuild-User(master): Jeremy Allison Autobuild-Date(master): Wed Jun 19 21:32:36 CEST 2013 on sn-devel-104 --- auth/credentials/credentials_ntlm.c | 2 +- auth/ntlmssp/ntlmssp_server.c | 2 +- auth/ntlmssp/ntlmssp_sign.c | 2 +- lib/crypto/hmacmd5.c | 4 ++-- lib/crypto/hmacmd5.h | 2 +- lib/crypto/md5.c | 6 +++--- lib/crypto/md5test.c | 2 +- lib/crypto/wscript_build | 2 +- lib/crypto/wscript_configure | 1 + libcli/auth/credentials.c | 2 +- libcli/auth/schannel_sign.c | 2 +- libcli/auth/smbencrypt.c | 8 ++++---- libcli/drsuapi/repl_decrypt.c | 4 ++-- libcli/smb/smb_signing.c | 2 +- source3/libsmb/ntlmssp.c | 2 +- source3/modules/vfs_streams_xattr.c | 2 +- source3/rpc_client/init_samr.c | 2 +- source4/dsdb/samdb/ldb_modules/password_hash.c | 2 +- source4/libcli/raw/smb_signing.c | 4 ++-- source4/libnet/libnet_passwd.c | 4 ++-- source4/ntp_signd/ntp_signd.c | 2 +- source4/rpc_server/samr/samr_password.c | 2 +- source4/torture/ntp/ntp_signd.c | 2 +- source4/torture/rpc/samba3rpc.c | 2 +- source4/torture/rpc/samlogon.c | 2 +- source4/torture/rpc/samr.c | 8 ++++---- 26 files changed, 38 insertions(+), 37 deletions(-) diff --git a/auth/credentials/credentials_ntlm.c b/auth/credentials/credentials_ntlm.c index 2d6d6f6c55..8f143bf3c0 100644 --- a/auth/credentials/credentials_ntlm.c +++ b/auth/credentials/credentials_ntlm.c @@ -110,7 +110,7 @@ _PUBLIC_ NTSTATUS cli_credentials_get_ntlm_response(struct cli_credentials *cred /* LM Key is incompatible... */ *flags &= ~CLI_CRED_LANMAN_AUTH; } else if (*flags & CLI_CRED_NTLM2) { - struct MD5Context md5_session_nonce_ctx; + MD5_CTX md5_session_nonce_ctx; uint8_t session_nonce[16]; uint8_t session_nonce_hash[16]; uint8_t user_session_key[16]; diff --git a/auth/ntlmssp/ntlmssp_server.c b/auth/ntlmssp/ntlmssp_server.c index 442bd5db49..57179e1dca 100644 --- a/auth/ntlmssp/ntlmssp_server.c +++ b/auth/ntlmssp/ntlmssp_server.c @@ -369,7 +369,7 @@ static NTSTATUS ntlmssp_server_preauth(struct gensec_security *gensec_security, */ if (ntlmssp_state->neg_flags & NTLMSSP_NEGOTIATE_NTLM2) { if (ntlmssp_state->nt_resp.length == 24 && ntlmssp_state->lm_resp.length == 24) { - struct MD5Context md5_session_nonce_ctx; + MD5_CTX md5_session_nonce_ctx; state->doing_ntlm2 = true; memcpy(state->session_nonce, ntlmssp_state->internal_chal.data, 8); diff --git a/auth/ntlmssp/ntlmssp_sign.c b/auth/ntlmssp/ntlmssp_sign.c index 4d07a81e44..c0be91465b 100644 --- a/auth/ntlmssp/ntlmssp_sign.c +++ b/auth/ntlmssp/ntlmssp_sign.c @@ -51,7 +51,7 @@ static void calc_ntlmv2_key(uint8_t subkey[16], DATA_BLOB session_key, const char *constant) { - struct MD5Context ctx3; + MD5_CTX ctx3; MD5Init(&ctx3); MD5Update(&ctx3, session_key.data, session_key.length); MD5Update(&ctx3, (const uint8_t *)constant, strlen(constant)+1); diff --git a/lib/crypto/hmacmd5.c b/lib/crypto/hmacmd5.c index cfbd428014..882788cd2d 100644 --- a/lib/crypto/hmacmd5.c +++ b/lib/crypto/hmacmd5.c @@ -36,7 +36,7 @@ _PUBLIC_ void hmac_md5_init_rfc2104(const uint8_t *key, int key_len, HMACMD5Cont /* if key is longer than 64 bytes reset it to key=MD5(key) */ if (key_len > 64) { - struct MD5Context tctx; + MD5_CTX tctx; MD5Init(&tctx); MD5Update(&tctx, key, key_len); @@ -91,7 +91,7 @@ _PUBLIC_ void hmac_md5_update(const uint8_t *text, int text_len, HMACMD5Context ***********************************************************************/ _PUBLIC_ void hmac_md5_final(uint8_t *digest, HMACMD5Context *ctx) { - struct MD5Context ctx_o; + MD5_CTX ctx_o; MD5Final(digest, &ctx->ctx); diff --git a/lib/crypto/hmacmd5.h b/lib/crypto/hmacmd5.h index 91b8ca586c..aa43d24ff3 100644 --- a/lib/crypto/hmacmd5.h +++ b/lib/crypto/hmacmd5.h @@ -25,7 +25,7 @@ typedef struct { - struct MD5Context ctx; + MD5_CTX ctx; uint8_t k_ipad[65]; uint8_t k_opad[65]; diff --git a/lib/crypto/md5.c b/lib/crypto/md5.c index 032474478e..b834c912df 100644 --- a/lib/crypto/md5.c +++ b/lib/crypto/md5.c @@ -43,7 +43,7 @@ static void byteReverse(uint8_t *buf, unsigned int longs) * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious * initialization constants. */ -_PUBLIC_ void MD5Init(struct MD5Context *ctx) +_PUBLIC_ void MD5Init(MD5_CTX *ctx) { ctx->buf[0] = 0x67452301; ctx->buf[1] = 0xefcdab89; @@ -58,7 +58,7 @@ _PUBLIC_ void MD5Init(struct MD5Context *ctx) * Update context to reflect the concatenation of another buffer full * of bytes. */ -_PUBLIC_ void MD5Update(struct MD5Context *ctx, const uint8_t *buf, size_t len) +_PUBLIC_ void MD5Update(MD5_CTX *ctx, const uint8_t *buf, size_t len) { register uint32_t t; @@ -106,7 +106,7 @@ _PUBLIC_ void MD5Update(struct MD5Context *ctx, const uint8_t *buf, size_t len) * Final wrapup - pad to 64-byte boundary with the bit pattern * 1 0* (64-bit count of bits processed, MSB-first) */ -_PUBLIC_ void MD5Final(uint8_t digest[16], struct MD5Context *ctx) +_PUBLIC_ void MD5Final(uint8_t digest[16], MD5_CTX *ctx) { unsigned int count; uint8_t *p; diff --git a/lib/crypto/md5test.c b/lib/crypto/md5test.c index 38626c39bc..f58e131b02 100644 --- a/lib/crypto/md5test.c +++ b/lib/crypto/md5test.c @@ -65,7 +65,7 @@ bool torture_local_crypto_md5(struct torture_context *torture) }; for (i=0; i < ARRAY_SIZE(testarray); i++) { - struct MD5Context ctx; + MD5_CTX ctx; uint8_t md5[16]; int e; diff --git a/lib/crypto/wscript_build b/lib/crypto/wscript_build index e056f653fb..a1f29aed5d 100644 --- a/lib/crypto/wscript_build +++ b/lib/crypto/wscript_build @@ -8,7 +8,7 @@ elif bld.CONFIG_SET('HAVE_SYS_MD5_H') and bld.CONFIG_SET('HAVE_LIBMD5'): extra_deps += ' md5' elif bld.CONFIG_SET('HAVE_SYS_MD5_H') and bld.CONFIG_SET('HAVE_LIBMD'): extra_deps += ' md' -elif not bld.CONFIG_SET('HAVE_COMMONCRYPTO_COMMONDIGEST_H'): +elif not bld.CONFIG_SET('HAVE_SYS_MD5_H') and not bld.CONFIG_SET('HAVE_COMMONCRYPTO_COMMONDIGEST_H'): extra_source += ' md5.c' bld.SAMBA_SUBSYSTEM('LIBCRYPTO', diff --git a/lib/crypto/wscript_configure b/lib/crypto/wscript_configure index 21ec566b6b..b7a012f6cf 100644 --- a/lib/crypto/wscript_configure +++ b/lib/crypto/wscript_configure @@ -4,5 +4,6 @@ if not conf.CHECK_FUNCS_IN('MD5Init', 'bsd', headers='bsd/md5.h', checklibc=True) conf.CHECK_FUNCS_IN('MD5Init', 'md', headers='sys/md5.h', checklibc=True) + conf.CHECK_TYPE('MD5_CTX', 'struct MD5Context', headers='sys/md5.h') conf.CHECK_FUNCS_IN('CC_MD5_Init', '', headers='CommonCrypto/CommonDigest.h', checklibc=True) diff --git a/libcli/auth/credentials.c b/libcli/auth/credentials.c index 2f143745e8..7c8d53cf8d 100644 --- a/libcli/auth/credentials.c +++ b/libcli/auth/credentials.c @@ -79,7 +79,7 @@ static void netlogon_creds_init_128bit(struct netlogon_creds_CredentialState *cr { unsigned char zero[4], tmp[16]; HMACMD5Context ctx; - struct MD5Context md5; + MD5_CTX md5; ZERO_STRUCT(creds->session_key); diff --git a/libcli/auth/schannel_sign.c b/libcli/auth/schannel_sign.c index ebd8f1c268..1871da256b 100644 --- a/libcli/auth/schannel_sign.c +++ b/libcli/auth/schannel_sign.c @@ -193,7 +193,7 @@ static void netsec_do_sign(struct schannel_state *state, } else { uint8_t packet_digest[16]; static const uint8_t zeros[4]; - struct MD5Context ctx; + MD5_CTX ctx; MD5Init(&ctx); MD5Update(&ctx, zeros, 4); diff --git a/libcli/auth/smbencrypt.c b/libcli/auth/smbencrypt.c index 372ef013b2..ec819cd4db 100644 --- a/libcli/auth/smbencrypt.c +++ b/libcli/auth/smbencrypt.c @@ -99,7 +99,7 @@ bool E_md4hash(const char *passwd, uint8_t p16[16]) void E_md5hash(const uint8_t salt[16], const uint8_t nthash[16], uint8_t hash_out[16]) { - struct MD5Context tctx; + MD5_CTX tctx; MD5Init(&tctx); MD5Update(&tctx, salt, 16); MD5Update(&tctx, nthash, 16); @@ -637,7 +637,7 @@ bool decode_pw_buffer(TALLOC_CTX *ctx, void encode_or_decode_arc4_passwd_buffer(unsigned char pw_buf[532], const DATA_BLOB *psession_key) { - struct MD5Context tctx; + MD5_CTX tctx; unsigned char key_out[16]; /* Confounder is last 16 bytes. */ @@ -717,7 +717,7 @@ void encode_wkssvc_join_password_buffer(TALLOC_CTX *mem_ctx, struct wkssvc_PasswordBuffer **pwd_buf) { uint8_t buffer[516]; - struct MD5Context ctx; + MD5_CTX ctx; struct wkssvc_PasswordBuffer *my_pwd_buf = NULL; DATA_BLOB confounded_session_key; int confounder_len = 8; @@ -755,7 +755,7 @@ WERROR decode_wkssvc_join_password_buffer(TALLOC_CTX *mem_ctx, char **pwd) { uint8_t buffer[516]; - struct MD5Context ctx; + MD5_CTX ctx; size_t pwd_len; DATA_BLOB confounded_session_key; diff --git a/libcli/drsuapi/repl_decrypt.c b/libcli/drsuapi/repl_decrypt.c index 6fff2fe5b1..00b8db8abc 100644 --- a/libcli/drsuapi/repl_decrypt.c +++ b/libcli/drsuapi/repl_decrypt.c @@ -39,7 +39,7 @@ WERROR drsuapi_decrypt_attribute_value(TALLOC_CTX *mem_ctx, DATA_BLOB confounder; DATA_BLOB enc_buffer; - struct MD5Context md5; + MD5_CTX md5; uint8_t _enc_key[16]; DATA_BLOB enc_key; @@ -198,7 +198,7 @@ static WERROR drsuapi_encrypt_attribute_value(TALLOC_CTX *mem_ctx, DATA_BLOB rid_crypt_out = data_blob(NULL, 0); DATA_BLOB confounder; - struct MD5Context md5; + MD5_CTX md5; uint8_t _enc_key[16]; DATA_BLOB enc_key; diff --git a/libcli/smb/smb_signing.c b/libcli/smb/smb_signing.c index 95c9c27c72..fa61aa88a0 100644 --- a/libcli/smb/smb_signing.c +++ b/libcli/smb/smb_signing.c @@ -146,7 +146,7 @@ static void smb_signing_md5(const DATA_BLOB *mac_key, { const size_t offset_end_of_sig = (HDR_SS_FIELD + 8); uint8_t sequence_buf[8]; - struct MD5Context md5_ctx; + MD5_CTX md5_ctx; /* * Firstly put the sequence number into the first 4 bytes. diff --git a/source3/libsmb/ntlmssp.c b/source3/libsmb/ntlmssp.c index 3fe1515483..e8c9ebfe72 100644 --- a/source3/libsmb/ntlmssp.c +++ b/source3/libsmb/ntlmssp.c @@ -537,7 +537,7 @@ noccache: return NT_STATUS_NO_MEMORY; } } else if (ntlmssp_state->neg_flags & NTLMSSP_NEGOTIATE_NTLM2) { - struct MD5Context md5_session_nonce_ctx; + MD5_CTX md5_session_nonce_ctx; uint8_t session_nonce[16]; uint8_t session_nonce_hash[16]; uint8_t user_session_key[16]; diff --git a/source3/modules/vfs_streams_xattr.c b/source3/modules/vfs_streams_xattr.c index 11a3cc63e8..355c47c07f 100644 --- a/source3/modules/vfs_streams_xattr.c +++ b/source3/modules/vfs_streams_xattr.c @@ -39,7 +39,7 @@ struct stream_io { static SMB_INO_T stream_inode(const SMB_STRUCT_STAT *sbuf, const char *sname) { - struct MD5Context ctx; + MD5_CTX ctx; unsigned char hash[16]; SMB_INO_T result; char *upper_sname; diff --git a/source3/rpc_client/init_samr.c b/source3/rpc_client/init_samr.c index e3bb3015c2..7f1a22908b 100644 --- a/source3/rpc_client/init_samr.c +++ b/source3/rpc_client/init_samr.c @@ -34,7 +34,7 @@ void init_samr_CryptPasswordEx(const char *pwd, /* samr_CryptPasswordEx */ uchar pwbuf[532]; - struct MD5Context md5_ctx; + MD5_CTX md5_ctx; uint8_t confounder[16]; DATA_BLOB confounded_session_key = data_blob(NULL, 16); diff --git a/source4/dsdb/samdb/ldb_modules/password_hash.c b/source4/dsdb/samdb/ldb_modules/password_hash.c index e9c2bca2dc..7974169499 100644 --- a/source4/dsdb/samdb/ldb_modules/password_hash.c +++ b/source4/dsdb/samdb/ldb_modules/password_hash.c @@ -1368,7 +1368,7 @@ static int setup_primary_wdigest(struct setup_password_fields_io *io, } for (i=0; i < ARRAY_SIZE(wdigest); i++) { - struct MD5Context md5; + MD5_CTX md5; MD5Init(&md5); if (wdigest[i].nt4dom) { MD5Update(&md5, wdigest[i].nt4dom->data, wdigest[i].nt4dom->length); diff --git a/source4/libcli/raw/smb_signing.c b/source4/libcli/raw/smb_signing.c index 5d2f928747..405efab618 100644 --- a/source4/libcli/raw/smb_signing.c +++ b/source4/libcli/raw/smb_signing.c @@ -81,7 +81,7 @@ bool signing_good(struct smb_signing_context *sign_info, void sign_outgoing_message(struct smb_request_buffer *out, DATA_BLOB *mac_key, unsigned int seq_num) { uint8_t calc_md5_mac[16]; - struct MD5Context md5_ctx; + MD5_CTX md5_ctx; /* * Firstly put the sequence number into the first 4 bytes. @@ -116,7 +116,7 @@ bool check_signed_incoming_message(struct smb_request_buffer *in, DATA_BLOB *mac uint8_t calc_md5_mac[16]; uint8_t *server_sent_mac; uint8_t sequence_buf[8]; - struct MD5Context md5_ctx; + MD5_CTX md5_ctx; const size_t offset_end_of_sig = (HDR_SS_FIELD + 8); int i; const int sign_range = 0; diff --git a/source4/libnet/libnet_passwd.c b/source4/libnet/libnet_passwd.c index e1094f2057..861d746fd1 100644 --- a/source4/libnet/libnet_passwd.c +++ b/source4/libnet/libnet_passwd.c @@ -274,7 +274,7 @@ static NTSTATUS libnet_SetPassword_samr_handle_26(struct libnet_context *ctx, TA DATA_BLOB session_key; DATA_BLOB confounded_session_key = data_blob_talloc(mem_ctx, NULL, 16); uint8_t confounder[16]; - struct MD5Context md5; + MD5_CTX md5; if (r->samr_handle.in.info21) { return NT_STATUS_INVALID_PARAMETER_MIX; @@ -330,7 +330,7 @@ static NTSTATUS libnet_SetPassword_samr_handle_25(struct libnet_context *ctx, TA DATA_BLOB session_key; DATA_BLOB confounded_session_key = data_blob_talloc(mem_ctx, NULL, 16); uint8_t confounder[16]; - struct MD5Context md5; + MD5_CTX md5; if (!r->samr_handle.in.info21) { return NT_STATUS_INVALID_PARAMETER_MIX; diff --git a/source4/ntp_signd/ntp_signd.c b/source4/ntp_signd/ntp_signd.c index d1d8483ad7..53c34edab7 100644 --- a/source4/ntp_signd/ntp_signd.c +++ b/source4/ntp_signd/ntp_signd.c @@ -109,7 +109,7 @@ static NTSTATUS ntp_signd_process(struct ntp_signd_connection *ntp_signd_conn, enum ndr_err_code ndr_err; struct ldb_result *res; const char *attrs[] = { "unicodePwd", "userAccountControl", "cn", NULL }; - struct MD5Context ctx; + MD5_CTX ctx; struct samr_Password *nt_hash; uint32_t user_account_control; int ret; diff --git a/source4/rpc_server/samr/samr_password.c b/source4/rpc_server/samr/samr_password.c index 5caf4b9e97..2d9c48abd7 100644 --- a/source4/rpc_server/samr/samr_password.c +++ b/source4/rpc_server/samr/samr_password.c @@ -566,7 +566,7 @@ NTSTATUS samr_set_password_ex(struct dcesrv_call_state *dce_call, DATA_BLOB new_password; DATA_BLOB co_session_key; DATA_BLOB session_key = data_blob(NULL, 0); - struct MD5Context ctx; + MD5_CTX ctx; nt_status = dcesrv_fetch_session_key(dce_call->conn, &session_key); if (!NT_STATUS_IS_OK(nt_status)) { diff --git a/source4/torture/ntp/ntp_signd.c b/source4/torture/ntp/ntp_signd.c index ce49d4fb85..89eb1a0022 100644 --- a/source4/torture/ntp/ntp_signd.c +++ b/source4/torture/ntp/ntp_signd.c @@ -78,7 +78,7 @@ static bool test_ntp_signd(struct torture_context *tctx, char *unix_address; int sys_errno; - struct MD5Context ctx; + MD5_CTX ctx; uint8_t sig[16]; enum ndr_err_code ndr_err; bool ok; diff --git a/source4/torture/rpc/samba3rpc.c b/source4/torture/rpc/samba3rpc.c index f7c76743aa..9443d5e848 100644 --- a/source4/torture/rpc/samba3rpc.c +++ b/source4/torture/rpc/samba3rpc.c @@ -780,7 +780,7 @@ static bool join3(struct torture_context *tctx, DATA_BLOB session_key; DATA_BLOB confounded_session_key = data_blob_talloc( mem_ctx, NULL, 16); - struct MD5Context ctx; + MD5_CTX ctx; uint8_t confounder[16]; ZERO_STRUCT(u_info); diff --git a/source4/torture/rpc/samlogon.c b/source4/torture/rpc/samlogon.c index bd85c229ac..4861038305 100644 --- a/source4/torture/rpc/samlogon.c +++ b/source4/torture/rpc/samlogon.c @@ -1083,7 +1083,7 @@ static bool test_ntlm2(struct samlogon_state *samlogon_state, char **error_strin uint8_t session_nonce_hash[16]; uint8_t client_chall[8]; - struct MD5Context md5_session_nonce_ctx; + MD5_CTX md5_session_nonce_ctx; HMACMD5Context hmac_ctx; ZERO_STRUCT(user_session_key); diff --git a/source4/torture/rpc/samr.c b/source4/torture/rpc/samr.c index 6a4f653f2c..a0a5f1a686 100644 --- a/source4/torture/rpc/samr.c +++ b/source4/torture/rpc/samr.c @@ -781,7 +781,7 @@ static bool test_SetUserPassEx(struct dcerpc_pipe *p, struct torture_context *tc uint8_t confounder[16]; char *newpass; struct dcerpc_binding_handle *b = p->binding_handle; - struct MD5Context ctx; + MD5_CTX ctx; struct samr_GetUserPwInfo pwp; struct samr_PwInfo info; int policy_min_pw_len = 0; @@ -872,7 +872,7 @@ static bool test_SetUserPass_25(struct dcerpc_pipe *p, struct torture_context *t bool ret = true; DATA_BLOB session_key; DATA_BLOB confounded_session_key = data_blob_talloc(tctx, NULL, 16); - struct MD5Context ctx; + MD5_CTX ctx; uint8_t confounder[16]; char *newpass; struct dcerpc_binding_handle *b = p->binding_handle; @@ -1162,7 +1162,7 @@ static bool test_SetUserPass_level_ex(struct dcerpc_pipe *p, bool ret = true; DATA_BLOB session_key; DATA_BLOB confounded_session_key = data_blob_talloc(tctx, NULL, 16); - struct MD5Context ctx; + MD5_CTX ctx; uint8_t confounder[16]; char *newpass; struct dcerpc_binding_handle *b = p->binding_handle; @@ -2563,7 +2563,7 @@ bool test_ChangePasswordRandomBytes(struct dcerpc_pipe *p, struct torture_contex DATA_BLOB session_key; DATA_BLOB confounded_session_key = data_blob_talloc(tctx, NULL, 16); uint8_t confounder[16]; - struct MD5Context ctx; + MD5_CTX ctx; bool ret = true; struct lsa_String server, account; -- cgit