Author: vlendec Date: 2006-07-01 15:25:21 +0000 (Sat, 01 Jul 2006) New Revision: 16745
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16745 Log: Fix all but three type-punned warnings. I can really understand the compiler freaks out about smbd/vfs.c:107, but changing that is bigger... The other two ones are in auth/auth_winbind.c:160 and auth/auth_script.c:135. Need to look more at those. Volker Modified: trunk/source/include/smb_macros.h trunk/source/lib/charcnv.c trunk/source/lib/util.c trunk/source/libads/ldap.c trunk/source/libndr/ndr_string.c trunk/source/locking/brlock.c trunk/source/nsswitch/pam_winbind.c trunk/source/nsswitch/winbindd_async.c trunk/source/utils/net_ads.c trunk/source/utils/net_rpc_samsync.c trunk/source/utils/ntlm_auth_diagnostics.c Changeset: Modified: trunk/source/include/smb_macros.h =================================================================== --- trunk/source/include/smb_macros.h 2006-07-01 15:22:18 UTC (rev 16744) +++ trunk/source/include/smb_macros.h 2006-07-01 15:25:21 UTC (rev 16745) @@ -376,6 +376,6 @@ } while (0) #define ADD_TO_LARGE_ARRAY(mem_ctx, type, elem, array, num, size) \ - add_to_large_array((mem_ctx), sizeof(type), &(elem), (void **)(array), (num), (size)); + add_to_large_array((mem_ctx), sizeof(type), &(elem), (void *)(array), (num), (size)); #endif /* _SMB_MACROS_H */ Modified: trunk/source/lib/charcnv.c =================================================================== --- trunk/source/lib/charcnv.c 2006-07-01 15:22:18 UTC (rev 16744) +++ trunk/source/lib/charcnv.c 2006-07-01 15:25:21 UTC (rev 16745) @@ -704,8 +704,10 @@ * @returns Size in bytes of the converted string; or -1 in case of error. **/ size_t convert_string_talloc(TALLOC_CTX *ctx, charset_t from, charset_t to, - void const *src, size_t srclen, void **dest, BOOL allow_bad_conv) + void const *src, size_t srclen, void *dst, + BOOL allow_bad_conv) { + void **dest = (void **)dst; size_t dest_len; *dest = NULL; @@ -945,9 +947,9 @@ if (flags & STR_TERMINATE) { if (src_len == (size_t)-1) { - src_len = strlen(src) + 1; + src_len = strlen((const char *)src) + 1; } else { - size_t len = strnlen(src, src_len); + size_t len = strnlen((const char *)src, src_len); if (len < src_len) len++; src_len = len; @@ -1035,7 +1037,7 @@ len += ret; if (flags & STR_UPPER) { - smb_ucs2_t *dest_ucs2 = dest; + smb_ucs2_t *dest_ucs2 = (smb_ucs2_t *)dest; size_t i; for (i = 0; i < (dest_len / 2) && dest_ucs2[i]; i++) { smb_ucs2_t v = toupper_w(dest_ucs2[i]); @@ -1179,7 +1181,8 @@ if (flags & STR_TERMINATE) { /* src_len -1 is the default for null terminated strings. */ if (src_len != (size_t)-1) { - size_t len = strnlen_w(src, src_len/2); + size_t len = strnlen_w((const smb_ucs2_t *)src, + src_len/2); if (len < src_len/2) len++; src_len = len*2; Modified: trunk/source/lib/util.c =================================================================== --- trunk/source/lib/util.c 2006-07-01 15:22:18 UTC (rev 16744) +++ trunk/source/lib/util.c 2006-07-01 15:25:21 UTC (rev 16745) @@ -753,7 +753,7 @@ size_t num_to_read_thistime; size_t num_written = 0; - if ((buf = SMB_MALLOC(TRANSFER_BUF_SIZE)) == NULL) + if ((buf = SMB_MALLOC_ARRAY(char, TRANSFER_BUF_SIZE)) == NULL) return -1; while (total < n) { @@ -1052,9 +1052,11 @@ ****************************************************************************/ void add_to_large_array(TALLOC_CTX *mem_ctx, size_t element_size, - void *element, void **array, uint32 *num_elements, + void *element, void *_array, uint32 *num_elements, ssize_t *array_size) { + void **array = (void **)_array; + if (*array_size < 0) { return; } Modified: trunk/source/libads/ldap.c =================================================================== --- trunk/source/libads/ldap.c 2006-07-01 15:22:18 UTC (rev 16744) +++ trunk/source/libads/ldap.c 2006-07-01 15:25:21 UTC (rev 16745) @@ -828,10 +828,11 @@ * @param attrs Attributes to retrieve * @return status of search **/ -ADS_STATUS ads_search_dn(ADS_STRUCT *ads, void **res, +ADS_STATUS ads_search_dn(ADS_STRUCT *ads, void *_res, const char *dn, const char **attrs) { + void **res = (void **)_res; return ads_do_search(ads, dn, LDAP_SCOPE_BASE, "(objectclass=*)", attrs, res); } @@ -970,8 +971,9 @@ */ static ADS_STATUS ads_modlist_add(TALLOC_CTX *ctx, ADS_MODLIST *mods, int mod_op, const char *name, - const void **invals) + const void *_invals) { + const void **invals = (const void **)_invals; int curmod; LDAPMod **modlist = (LDAPMod **) *mods; struct berval **ber_values = NULL; @@ -1034,8 +1036,7 @@ if (!val) return ads_modlist_add(ctx, mods, LDAP_MOD_DELETE, name, NULL); - return ads_modlist_add(ctx, mods, LDAP_MOD_REPLACE, name, - (const void **) values); + return ads_modlist_add(ctx, mods, LDAP_MOD_REPLACE, name, values); } /** Modified: trunk/source/libndr/ndr_string.c =================================================================== --- trunk/source/libndr/ndr_string.c 2006-07-01 15:22:18 UTC (rev 16744) +++ trunk/source/libndr/ndr_string.c 2006-07-01 15:25:21 UTC (rev 16745) @@ -83,7 +83,7 @@ chset, CH_UNIX, ndr->data+ndr->offset, (len2 + c_len_term)*byte_mul, - (void **)&as, True); + &as, True); if (ret == -1) { return ndr_pull_error(ndr, NDR_ERR_CHARCNV, "Bad character conversion"); @@ -120,7 +120,7 @@ chset, CH_UNIX, ndr->data+ndr->offset, (len1 + c_len_term)*byte_mul, - (void **)&as, False); + &as, False); if (ret == -1) { return ndr_pull_error(ndr, NDR_ERR_CHARCNV, "Bad character conversion"); @@ -158,7 +158,7 @@ chset, CH_UNIX, ndr->data+ndr->offset, (len1 + c_len_term)*byte_mul, - (void **)&as, False); + &as, False); if (ret == -1) { return ndr_pull_error(ndr, NDR_ERR_CHARCNV, "Bad character conversion"); @@ -192,7 +192,7 @@ chset, CH_UNIX, ndr->data+ndr->offset, (len3 + c_len_term)*byte_mul, - (void **)&as, False); + &as, False); if (ret == -1) { return ndr_pull_error(ndr, NDR_ERR_CHARCNV, "Bad character conversion"); @@ -223,8 +223,7 @@ ret = convert_string_talloc(ndr->current_mem_ctx, chset, CH_UNIX, ndr->data+ndr->offset, - len3, - (void **)&as, False); + len3, &as, False); if (ret == -1) { return ndr_pull_error(ndr, NDR_ERR_CHARCNV, "Bad character conversion"); @@ -243,8 +242,7 @@ ret = convert_string_talloc(ndr->current_mem_ctx, chset, CH_UNIX, ndr->data+ndr->offset, - len1, - (void **)&as, False); + len1, &as, False); if (ret == -1) { return ndr_pull_error(ndr, NDR_ERR_CHARCNV, "Bad character conversion"); @@ -260,8 +258,7 @@ ret = convert_string_talloc(ndr->current_mem_ctx, chset, CH_UNIX, ndr->data+ndr->offset, - len1*byte_mul, - (void **)&as, False); + len1*byte_mul, &as, False); if (ret == -1) { return ndr_pull_error(ndr, NDR_ERR_CHARCNV, "Bad character conversion"); @@ -318,7 +315,8 @@ LIBNDR_FLAG_STR_FIXLEN32))) { s_len++; } - d_len = convert_string_talloc(ndr, CH_UNIX, chset, s, s_len, (void **)&dest, False); + d_len = convert_string_talloc(ndr, CH_UNIX, chset, s, s_len, &dest, + False); if (d_len == -1) { return ndr_push_error(ndr, NDR_ERR_CHARCNV, "Bad character conversion"); @@ -522,7 +520,7 @@ { uint32_t i; uint8_t zero[4] = {0,0,0,0}; - const char *var = _var; + const char *var = (const char *)_var; for (i = 0; memcmp(var+i*element_size,zero,element_size) != 0; i++); @@ -609,5 +607,5 @@ { /* FIXME: Treat special chars special here, taking chset into account */ /* Also include 0 byte */ - return strlen(var)+1; + return strlen((const char *)var)+1; } Modified: trunk/source/locking/brlock.c =================================================================== --- trunk/source/locking/brlock.c 2006-07-01 15:22:18 UTC (rev 16744) +++ trunk/source/locking/brlock.c 2006-07-01 15:25:21 UTC (rev 16745) @@ -1468,13 +1468,23 @@ /* Go through and ensure all entries exist - remove any that don't. */ /* Makes the lockdb self cleaning at low cost. */ - if (!validate_lock_entries(&br_lck->num_locks, (struct lock_struct **)&br_lck->lock_data)) { + struct lock_struct *locks = + (struct lock_struct *)br_lck->lock_data; + + if (!validate_lock_entries(&br_lck->num_locks, &locks)) { tdb_chainunlock(tdb, key); SAFE_FREE(br_lck->lock_data); TALLOC_FREE(br_lck); return NULL; } + /* + * validate_lock_entries might have changed locks. We can't + * use a direct pointer here because otherwise gcc warnes + * about strict aliasing rules being violated. + */ + br_lck->lock_data = locks; + /* Mark the lockdb as "clean" as seen from this open file. */ fsp->lockdb_clean = True; } Modified: trunk/source/nsswitch/pam_winbind.c =================================================================== --- trunk/source/nsswitch/pam_winbind.c 2006-07-01 15:22:18 UTC (rev 16744) +++ trunk/source/nsswitch/pam_winbind.c 2006-07-01 15:25:21 UTC (rev 16745) @@ -128,6 +128,24 @@ SAFE_FREE(data); } +/* + * Work around the pam API that has functions with void ** as parameters. + * These lead to strict aliasing warnings with gcc. + */ +static int _pam_get_item(const pam_handle_t *pamh, int item_type, + const void *_item) +{ + const void **item = (const void **)_item; + return pam_get_item(pamh, item_type, item); +} +static int _pam_get_data(const pam_handle_t *pamh, + const char *module_data_name, const void *_data) +{ + const void **data = (const void **)_data; + return pam_get_data(pamh, module_data_name, data); +} + + static const struct ntstatus_errors { const char *ntstatus_string; const char *error_string; @@ -173,7 +191,7 @@ int retval; struct pam_conv *conv; - retval = pam_get_item(pamh, PAM_CONV, (const void **) &conv ); + retval = _pam_get_item(pamh, PAM_CONV, &conv ); if (retval == PAM_SUCCESS) { retval = conv->conv(nargs, (const struct pam_message **)message, response, conv->appdata_ptr); @@ -676,7 +694,7 @@ */ if (on(WINBIND_TRY_FIRST_PASS_ARG, ctrl) || on(WINBIND_USE_FIRST_PASS_ARG, ctrl)) { - retval = pam_get_item(pamh, authtok_flag, (const void **) &item); + retval = _pam_get_item(pamh, authtok_flag, &item); if (retval != PAM_SUCCESS) { /* very strange. */ _pam_log(LOG_ALERT, @@ -778,7 +796,7 @@ retval = pam_set_item(pamh, authtok_flag, token); _pam_delete(token); /* clean it up */ if (retval != PAM_SUCCESS || - (retval = pam_get_item(pamh, authtok_flag, (const void **) &item)) != PAM_SUCCESS) { + (retval = _pam_get_item(pamh, authtok_flag, &item)) != PAM_SUCCESS) { _pam_log(LOG_CRIT, "error manipulating password"); return retval; @@ -1251,8 +1269,7 @@ * get the old token back. */ - retval = pam_get_item(pamh, PAM_OLDAUTHTOK, - (const void **) &pass_old); + retval = _pam_get_item(pamh, PAM_OLDAUTHTOK, &pass_old); if (retval != PAM_SUCCESS) { _pam_log(LOG_NOTICE, "user not authenticated"); @@ -1300,7 +1317,8 @@ * By reaching here we have approved the passwords and must now * rebuild the password database file. */ - pam_get_data( pamh, PAM_WINBIND_PWD_LAST_SET, (const void **)&pwdlastset_update); + _pam_get_data( pamh, PAM_WINBIND_PWD_LAST_SET, + &pwdlastset_update); retval = winbind_chauthtok_request(pamh, ctrl, user, pass_old, pass_new, pwdlastset_update); if (retval) { Modified: trunk/source/nsswitch/winbindd_async.c =================================================================== --- trunk/source/nsswitch/winbindd_async.c 2006-07-01 15:22:18 UTC (rev 16744) +++ trunk/source/nsswitch/winbindd_async.c 2006-07-01 15:25:21 UTC (rev 16745) @@ -985,12 +985,15 @@ add_sid_to_array(state->mem_ctx, &sid, &sids, &num_sids); } - if (!print_sidlist(NULL, sids, num_sids, - (char **)&state->response.extra_data.data, &len)) { + + if (!print_sidlist(NULL, sids, num_sids, &sidstr, &len)) { DEBUG(0, ("Could not print_sidlist\n")); + state->response.extra_data.data = NULL; return WINBINDD_ERROR; } + state->response.extra_data.data = sidstr; + if (state->response.extra_data.data != NULL) { DEBUG(10, ("aliases_list: %s\n", (char *)state->response.extra_data.data)); Modified: trunk/source/utils/net_ads.c =================================================================== --- trunk/source/utils/net_ads.c 2006-07-01 15:22:18 UTC (rev 16744) +++ trunk/source/utils/net_ads.c 2006-07-01 15:25:21 UTC (rev 16745) @@ -1011,7 +1011,7 @@ asprintf(&dn, "%s,%s", ou_str, ads->config.bind_path); free(ou_str); - rc = ads_search_dn(ads, (void**)&res, dn, NULL); + rc = ads_search_dn(ads, &res, dn, NULL); ads_msgfree(ads, res); if (ADS_ERR_OK(rc)) { Modified: trunk/source/utils/net_rpc_samsync.c =================================================================== --- trunk/source/utils/net_rpc_samsync.c 2006-07-01 15:22:18 UTC (rev 16744) +++ trunk/source/utils/net_rpc_samsync.c 2006-07-01 15:25:21 UTC (rev 16745) @@ -42,7 +42,7 @@ d_printf("\n"); } -static const char *display_time(NTTIME *nttime) +static const char *display_time(const UINT64_S *nttime) { static fstring string; @@ -123,11 +123,19 @@ pdb_encode_acct_ctrl(a->acb_info, NEW_PW_FORMAT_SPACE_PADDED_LEN)); } +static time_t uint64s_nt_time_to_unix_abs(const UINT64_S *src) +{ + NTTIME nttime; + nttime.high = src->high; + nttime.low = src->low; + return nt_time_to_unix_abs(&nttime); +} + static void display_domain_info(SAM_DOMAIN_INFO *a) { time_t u_logout; - u_logout = nt_time_to_unix_abs((NTTIME *)&a->force_logoff); + u_logout = uint64s_nt_time_to_unix_abs(&a->force_logoff); d_printf("Domain name: %s\n", unistr2_static(&a->uni_dom_name)); @@ -136,11 +144,11 @@ d_printf("Force Logoff: %d\n", (int)u_logout); - d_printf("Max Password Age: %s\n", display_time((NTTIME *)&a->max_pwd_age)); - d_printf("Min Password Age: %s\n", display_time((NTTIME *)&a->min_pwd_age)); + d_printf("Max Password Age: %s\n", display_time(&a->max_pwd_age)); + d_printf("Min Password Age: %s\n", display_time(&a->min_pwd_age)); - d_printf("Lockout Time: %s\n", display_time((NTTIME *)&a->account_lockout.lockout_duration)); - d_printf("Lockout Reset Time: %s\n", display_time((NTTIME *)&a->account_lockout.reset_count)); + d_printf("Lockout Time: %s\n", display_time(&a->account_lockout.lockout_duration)); + d_printf("Lockout Reset Time: %s\n", display_time(&a->account_lockout.reset_count)); d_printf("Bad Attempt Lockout: %d\n", a->account_lockout.bad_attempt_lockout); d_printf("User must logon to change password: %d\n", a->logon_chgpass); @@ -858,11 +866,11 @@ NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; pstring domname; - u_max_age = nt_time_to_unix_abs((NTTIME *)&delta->max_pwd_age); - u_min_age = nt_time_to_unix_abs((NTTIME *)&delta->min_pwd_age); - u_logout = nt_time_to_unix_abs((NTTIME *)&delta->force_logoff); - u_lockoutreset = nt_time_to_unix_abs((NTTIME *)&delta->account_lockout.reset_count); - u_lockouttime = nt_time_to_unix_abs((NTTIME *)&delta->account_lockout.lockout_duration); + u_max_age = uint64s_nt_time_to_unix_abs(&delta->max_pwd_age); + u_min_age = uint64s_nt_time_to_unix_abs(&delta->min_pwd_age); + u_logout = uint64s_nt_time_to_unix_abs(&delta->force_logoff); + u_lockoutreset = uint64s_nt_time_to_unix_abs(&delta->account_lockout.reset_count); + u_lockouttime = uint64s_nt_time_to_unix_abs(&delta->account_lockout.lockout_duration); unistr2_to_ascii(domname, &delta->uni_dom_name, sizeof(domname) - 1); Modified: trunk/source/utils/ntlm_auth_diagnostics.c =================================================================== --- trunk/source/utils/ntlm_auth_diagnostics.c 2006-07-01 15:22:18 UTC (rev 16744) +++ trunk/source/utils/ntlm_auth_diagnostics.c 2006-07-01 15:25:21 UTC (rev 16745) @@ -445,6 +445,7 @@ DATA_BLOB nt_response = data_blob(NULL, 0); DATA_BLOB lm_response = data_blob(NULL, 0); char *password; + smb_ucs2_t *nt_response_ucs2; uchar user_session_key[16]; uchar lm_key[16]; @@ -457,12 +458,13 @@ flags |= WBFLAG_PAM_LMKEY; flags |= WBFLAG_PAM_USER_SESSION_KEY; - if ((push_ucs2_allocate((smb_ucs2_t **)&nt_response.data, opt_password)) == -1) { + if ((push_ucs2_allocate(&nt_response_ucs2, opt_password)) == -1) { DEBUG(0, ("push_ucs2_allocate failed!\n")); exit(1); } - nt_response.length = strlen_w(((void *)nt_response.data))*sizeof(smb_ucs2_t); + nt_response.data = (unsigned char *)nt_response_ucs2; + nt_response.length = strlen_w(nt_response_ucs2)*sizeof(smb_ucs2_t); if ((password = strdup_upper(opt_password)) == NULL) { DEBUG(0, ("strdup_upper failed!\n")); @@ -472,7 +474,7 @@ if ((convert_string_allocate(NULL, CH_UNIX, CH_DOS, password, strlen(password)+1, - (void**)&lm_response.data,True)) == -1) { + &lm_response.data,True)) == -1) { DEBUG(0, ("convert_string_allocate failed!\n")); exit(1); }
