build: Build with system md5.h on OpenIndiana
authorAndrew Bartlett <abartlet@samba.org>
Sat, 8 Jun 2013 05:48:40 +0000 (15:48 +1000)
committerJeremy Allison <jra@samba.org>
Wed, 19 Jun 2013 19:32:36 +0000 (21:32 +0200)
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 <abartlet@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Wed Jun 19 21:32:36 CEST 2013 on sn-devel-104

26 files changed:
auth/credentials/credentials_ntlm.c
auth/ntlmssp/ntlmssp_server.c
auth/ntlmssp/ntlmssp_sign.c
lib/crypto/hmacmd5.c
lib/crypto/hmacmd5.h
lib/crypto/md5.c
lib/crypto/md5test.c
lib/crypto/wscript_build
lib/crypto/wscript_configure
libcli/auth/credentials.c
libcli/auth/schannel_sign.c
libcli/auth/smbencrypt.c
libcli/drsuapi/repl_decrypt.c
libcli/smb/smb_signing.c
source3/libsmb/ntlmssp.c
source3/modules/vfs_streams_xattr.c
source3/rpc_client/init_samr.c
source4/dsdb/samdb/ldb_modules/password_hash.c
source4/libcli/raw/smb_signing.c
source4/libnet/libnet_passwd.c
source4/ntp_signd/ntp_signd.c
source4/rpc_server/samr/samr_password.c
source4/torture/ntp/ntp_signd.c
source4/torture/rpc/samba3rpc.c
source4/torture/rpc/samlogon.c
source4/torture/rpc/samr.c

index 2d6d6f6c55e6800019662d6e7fd1a00ce648a5d1..8f143bf3c0d178027449f4fd816cbbe7aeaf5674 100644 (file)
@@ -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];
index 442bd5db494caf639f1a3c04081d934eed395320..57179e1dcae4679e594947b1735bd8049a1ddc6a 100644 (file)
@@ -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);
index 4d07a81e44b3733b4fed8c81dd993d7cc0ae273c..c0be91465b32a43e7c8021a2a88b8ca01876459c 100644 (file)
@@ -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);
index cfbd428014baa8ae791e49517570dae077ab1045..882788cd2dd40ec4b5e3b216b5d1f8572edc4db8 100644 (file)
@@ -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);          
 
index 91b8ca586c840cd3a07dc8f311b0c1ef845de4eb..aa43d24ff38514a5df0ca3052a64a02df07a891b 100644 (file)
@@ -25,7 +25,7 @@
 
 typedef struct 
 {
-        struct MD5Context ctx;
+        MD5_CTX ctx;
         uint8_t k_ipad[65];    
         uint8_t k_opad[65];
 
index 032474478ecc976a465d1ff776a5e43e3646179d..b834c912dfb97a931be31675e3fa604397f284a9 100644 (file)
@@ -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;
index 38626c39bce6ea2f2163c922f45261b038a60f2b..f58e131b02dc10a135be1e32c94fa7fb14dc6c9d 100644 (file)
@@ -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;
 
index e056f653fb9ae731317c3ac6378863bf5a36e8e6..a1f29aed5da5f3894ffa515cc1b60a334645658f 100644 (file)
@@ -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',
index 21ec566b6ba966544915b374c42fa2c6d40494fe..b7a012f6cf4db3b0d5f4204611bcf165d819f803 100644 (file)
@@ -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)
index 2f143745e8d064189d8051e9f7535ea7fbf74fa8..7c8d53cf8d494ae9401cb4d71ed2c347ff9ed38c 100644 (file)
@@ -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);
 
index ebd8f1c2688d85fc34d2b4407585a1f27205c6b9..1871da256b91a2426acfec95f58326062cd11697 100644 (file)
@@ -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);
index 372ef013b289d7e3f351944dc4b318b5c68c545d..ec819cd4db3694e81e1b0089187901efe6407f02 100644 (file)
@@ -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;
index 6fff2fe5b1b2fadc88ee7e4a2cae47c5d2641f4b..00b8db8abc00c4fe15a5aa2b69cc3ff841da60a2 100644 (file)
@@ -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;
 
index 95c9c27c72cd5e90769a4dcd39249471bee6082d..fa61aa88a0640fd4bfec992c43803b2457ea491e 100644 (file)
@@ -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.
index 3fe1515483d1ad2fedf108ad942ef41211bf6225..e8c9ebfe7202de22560c49762d7c20d9f404def8 100644 (file)
@@ -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];
index 11a3cc63e89b3077aa3782b83ef3ea9114ee6f1a..355c47c07f941a95dd8fd936315631f271753a01 100644 (file)
@@ -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;
index e3bb3015c26194176a0a3b847ca9c61ad11b090e..7f1a22908baac403eaa25691d866b6d43d29fafe 100644 (file)
@@ -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);
 
index e9c2bca2dc9a7f0ce43b152fc690d11e406b0b2c..7974169499073f7cf250c9e4b04cdf21bc5cfc93 100644 (file)
@@ -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);
index 5d2f92874797539f26a5d4aa4f8d41d4863de195..405efab6186ef450665f330979c0018d09b17e43 100644 (file)
@@ -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;
index e1094f20571c3a9a8c57a9793db5158105472b79..861d746fd118c8db2ce1a2be6f4285c765856c2d 100644 (file)
@@ -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;
index d1d8483ad7abe9e34ad5d18402a69c753e6fbdc5..53c34edab7e36c57adab63d42abb5706712c3650 100644 (file)
@@ -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;
index 5caf4b9e97e0d2c68af53feb8f73645472de229c..2d9c48abd74bdaae84c490c76cda0bd55e23e5e1 100644 (file)
@@ -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)) {
index ce49d4fb852857a1f478358d3697e8c922ba4499..89eb1a0022a643075057a06800c1e734a301e65c 100644 (file)
@@ -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;
index f7c76743aacde9f63d95c329951ebb3fed4ad249..9443d5e848069400e54024ce077e74802fe0af6b 100644 (file)
@@ -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);
index bd85c229ac8e66b4d830076f8694b8577620b525..48610383050de906f51f5ab38492956b12d3e556 100644 (file)
@@ -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);
index 6a4f653f2c031a1acfe1e41df21a36d9fa396920..a0a5f1a6863af013bb301f256a1434783af18da8 100644 (file)
@@ -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;