diff options
author | Andrew Tridgell <tridge@samba.org> | 2004-05-25 13:57:39 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:56:14 -0500 |
commit | 579c13da43d5b40ac6d6c1436399fbc1d8dfd054 (patch) | |
tree | 42299570746f2d7f80356b689cb15e3db6c53d3c /source4 | |
parent | 81e8de9ca85fe9a6658beb1dab0d231c13cda063 (diff) | |
download | samba-579c13da43d5b40ac6d6c1436399fbc1d8dfd054.tar.gz samba-579c13da43d5b40ac6d6c1436399fbc1d8dfd054.tar.bz2 samba-579c13da43d5b40ac6d6c1436399fbc1d8dfd054.zip |
r873: converted samba4 to use real 64 bit integers instead of
structures. This was suggested by metze recently.
I checked on the build farm and all the machines we have support 64
bit ints, and support the LL suffix for 64 bit constants. I suspect
some won't support strtoll() and related functions, so we will
probably need replacements for those.
(This used to be commit 9a9244a1c66654c12abe4379661cba83a73c4c21)
Diffstat (limited to 'source4')
50 files changed, 707 insertions, 556 deletions
diff --git a/source4/auth/auth_sam.c b/source4/auth/auth_sam.c index 1c33b26528..549b5ab362 100644 --- a/source4/auth/auth_sam.c +++ b/source4/auth/auth_sam.c @@ -91,28 +91,28 @@ static NTSTATUS sam_account_ok(TALLOC_CTX *mem_ctx, /* Test account expire time */ - if (!nt_time_is_zero(acct_expiry) && time(NULL) > nt_time_to_unix(acct_expiry)) { + if ((*acct_expiry) != 0 && time(NULL) > nt_time_to_unix(*acct_expiry)) { DEBUG(1,("sam_account_ok: Account for user '%s' has expired.\n", username)); DEBUG(3,("sam_account_ok: Account expired at '%s'.\n", - nt_time_string(mem_ctx, acct_expiry))); + nt_time_string(mem_ctx, *acct_expiry))); return NT_STATUS_ACCOUNT_EXPIRED; } if (!(acct_flags & ACB_PWNOEXP)) { /* check for immediate expiry "must change at next logon" */ - if (nt_time_is_zero(must_change_time) && !nt_time_is_zero(last_set_time)) { + if (*must_change_time == 0 && *last_set_time != 0) { DEBUG(1,("sam_account_ok: Account for user '%s' password must change!.\n", username)); return NT_STATUS_PASSWORD_MUST_CHANGE; } /* check for expired password */ - if (!nt_time_is_zero(must_change_time) && nt_time_to_unix(must_change_time) < time(NULL)) { + if ((*must_change_time) != 0 && nt_time_to_unix(*must_change_time) < time(NULL)) { DEBUG(1,("sam_account_ok: Account for user '%s' password expired!.\n", username)); DEBUG(1,("sam_account_ok: Password expired at '%s' unix time.\n", - nt_time_string(mem_ctx, must_change_time))); + nt_time_string(mem_ctx, *must_change_time))); return NT_STATUS_PASSWORD_EXPIRED; } } diff --git a/source4/build/m4/rewrite.m4 b/source4/build/m4/rewrite.m4 index 0df2b7b65c..8ea87e9fa4 100644 --- a/source4/build/m4/rewrite.m4 +++ b/source4/build/m4/rewrite.m4 @@ -364,6 +364,8 @@ AC_CHECK_TYPE(offset_t,loff_t) AC_CHECK_TYPE(ssize_t, int) AC_CHECK_TYPE(wchar_t, unsigned short) AC_CHECK_TYPE(uint_t, unsigned int) +AC_CHECK_TYPE(int64_t, long long) +AC_CHECK_TYPE(uint64_t, unsigned long long) ############################################ # we need dlopen/dlclose/dlsym/dlerror for PAM, the password database plugins and the plugin loading code diff --git a/source4/build/pidl/util.pm b/source4/build/pidl/util.pm index d09347f22d..f822222b45 100644 --- a/source4/build/pidl/util.pm +++ b/source4/build/pidl/util.pm @@ -172,7 +172,7 @@ sub is_scalar_type($) { my($type) = shift; - if ($type =~ /uint\d+/) { + if ($type =~ /^u?int\d+/) { return 1; } if ($type =~ /char|short|long|NTTIME| diff --git a/source4/client/client.c b/source4/client/client.c index dcb1c7c418..77d4b4b497 100644 --- a/source4/client/client.c +++ b/source4/client/client.c @@ -83,9 +83,9 @@ static BOOL abort_mget = True; static pstring fileselection = ""; /* timing globals */ -SMB_BIG_UINT get_total_size = 0; +uint64_t get_total_size = 0; unsigned int get_total_time_ms = 0; -static SMB_BIG_UINT put_total_size = 0; +static uint64_t put_total_size = 0; static unsigned int put_total_time_ms = 0; /* totals globals */ @@ -1663,10 +1663,10 @@ static int cmd_allinfo(void) goto done; } - d_printf("\tcreate_time: %s\n", nt_time_string(mem_ctx, &finfo.all_info.out.create_time)); - d_printf("\taccess_time: %s\n", nt_time_string(mem_ctx, &finfo.all_info.out.access_time)); - d_printf("\twrite_time: %s\n", nt_time_string(mem_ctx, &finfo.all_info.out.write_time)); - d_printf("\tchange_time: %s\n", nt_time_string(mem_ctx, &finfo.all_info.out.change_time)); + d_printf("\tcreate_time: %s\n", nt_time_string(mem_ctx, finfo.all_info.out.create_time)); + d_printf("\taccess_time: %s\n", nt_time_string(mem_ctx, finfo.all_info.out.access_time)); + d_printf("\twrite_time: %s\n", nt_time_string(mem_ctx, finfo.all_info.out.write_time)); + d_printf("\tchange_time: %s\n", nt_time_string(mem_ctx, finfo.all_info.out.change_time)); d_printf("\tattrib: 0x%x\n", finfo.all_info.out.attrib); d_printf("\talloc_size: %lu\n", (unsigned long)finfo.all_info.out.alloc_size); d_printf("\tsize: %lu\n", (unsigned long)finfo.all_info.out.size); diff --git a/source4/client/clitar.c b/source4/client/clitar.c index cd3c9f2310..09f10edee7 100644 --- a/source4/client/clitar.c +++ b/source4/client/clitar.c @@ -45,7 +45,7 @@ typedef struct file_info_struct file_info2; struct file_info_struct { - SMB_BIG_UINT size; + uint64_t size; uint16 mode; uid_t uid; gid_t gid; @@ -120,11 +120,11 @@ extern int get_total_size; static int blocksize=20; static int tarhandle; -static void writetarheader(int f, const char *aname, SMB_BIG_UINT size, time_t mtime, +static void writetarheader(int f, const char *aname, uint64_t size, time_t mtime, const char *amode, unsigned char ftype); static void do_atar(char *rname,char *lname,file_info *finfo1); static void do_tar(file_info *finfo); -static void oct_it(SMB_BIG_UINT value, int ndgs, char *p); +static void oct_it(uint64_t value, int ndgs, char *p); static void fixtarname(char *tptr, const char *fp, int l); static int dotarbuf(int f, char *b, int n); static void dozerobuf(int f, int n); @@ -163,7 +163,7 @@ static char *string_create_s(int size) /**************************************************************************** Write a tar header to buffer ****************************************************************************/ -static void writetarheader(int f, const char *aname, SMB_BIG_UINT size, time_t mtime, +static void writetarheader(int f, const char *aname, uint64_t size, time_t mtime, const char *amode, unsigned char ftype) { union hblock hb; @@ -202,17 +202,17 @@ static void writetarheader(int f, const char *aname, SMB_BIG_UINT size, time_t m hb.dbuf.name[NAMSIZ-1]='\0'; safe_strcpy(hb.dbuf.mode, amode, strlen(amode)); - oct_it((SMB_BIG_UINT)0, 8, hb.dbuf.uid); - oct_it((SMB_BIG_UINT)0, 8, hb.dbuf.gid); - oct_it((SMB_BIG_UINT) size, 13, hb.dbuf.size); - oct_it((SMB_BIG_UINT) mtime, 13, hb.dbuf.mtime); + oct_it((uint64_t)0, 8, hb.dbuf.uid); + oct_it((uint64_t)0, 8, hb.dbuf.gid); + oct_it((uint64_t) size, 13, hb.dbuf.size); + oct_it((uint64_t) mtime, 13, hb.dbuf.mtime); memcpy(hb.dbuf.chksum, " ", sizeof(hb.dbuf.chksum)); memset(hb.dbuf.linkname, 0, NAMSIZ); hb.dbuf.linkflag=ftype; for (chk=0, i=sizeof(hb.dummy), jp=hb.dummy; --i>=0;) chk+=(0xFF & *jp++); - oct_it((SMB_BIG_UINT) chk, 8, hb.dbuf.chksum); + oct_it((uint64_t) chk, 8, hb.dbuf.chksum); hb.dbuf.chksum[6] = '\0'; (void) dotarbuf(f, hb.dummy, sizeof(hb.dummy)); @@ -426,7 +426,7 @@ static void fixtarname(char *tptr, const char *fp, int l) /**************************************************************************** Convert from decimal to octal string ****************************************************************************/ -static void oct_it (SMB_BIG_UINT value, int ndgs, char *p) +static void oct_it (uint64_t value, int ndgs, char *p) { /* Converts long to octal string, pads with leading zeros */ @@ -598,7 +598,7 @@ append one remote file to the tar file static void do_atar(char *rname,char *lname,file_info *finfo1) { int fnum; - SMB_BIG_UINT nread=0; + uint64_t nread=0; char ftype; file_info2 finfo; BOOL close_done = False; diff --git a/source4/include/byteorder.h b/source4/include/byteorder.h index 94a346f89d..48b4cb8127 100644 --- a/source4/include/byteorder.h +++ b/source4/include/byteorder.h @@ -172,4 +172,8 @@ it also defines lots of intermediate macros, just ignore those :-) /* macros for accessing SMB protocol elements */ #define VWV(vwv) ((vwv)*2) +/* 64 bit macros */ +#define SBVAL(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32)) +#define BVAL(p, ofs) (IVAL(p,ofs) | (((uint64_t)IVAL(p,(ofs)+4)) << 32)) + #endif /* _BYTEORDER_H */ diff --git a/source4/include/client.h b/source4/include/client.h index 8b0aedd48c..0750ff4363 100644 --- a/source4/include/client.h +++ b/source4/include/client.h @@ -40,7 +40,7 @@ typedef struct file_info { - SMB_BIG_UINT size; + uint64_t size; uint16 mode; uid_t uid; gid_t gid; diff --git a/source4/include/context.h b/source4/include/context.h index e533c6d243..188f567e00 100644 --- a/source4/include/context.h +++ b/source4/include/context.h @@ -115,7 +115,7 @@ struct request_context { unsigned chain_count; /* the sequence number for signing */ - large_t seq_num; + uint64_t seq_num; /* the async structure allows backend functions to delay replying to requests. To use this, the front end must set @@ -335,7 +335,7 @@ struct timers_context { struct signing_context { DATA_BLOB mac_key; - large_t next_seq_num; + uint64_t next_seq_num; enum smb_signing_state signing_state; }; diff --git a/source4/include/includes.h b/source4/include/includes.h index 1037d54c4e..b6be02155e 100644 --- a/source4/include/includes.h +++ b/source4/include/includes.h @@ -499,6 +499,14 @@ typedef int socklen_t; #endif #endif +#if !defined(uint64) +#define uint64 uint64_t +#endif + +#if !defined(int64) +#define int64 int64_t +#endif + /* * Types for devices, inodes and offsets. */ @@ -543,11 +551,6 @@ typedef int socklen_t; # endif #endif -/* this should really be a 64 bit type if possible */ -#define br_off SMB_BIG_UINT - -#define SMB_OFF_T_BITS (sizeof(SMB_OFF_T)*8) - /* * Set the define that tells us if we can do 64 bit * NT SMB calls. @@ -559,20 +562,6 @@ typedef int socklen_t; # endif #endif -#ifdef LARGE_SMB_OFF_T -#define SOFF_T(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32)) -#define SOFF_T_R(p, ofs, v) (SIVAL(p,(ofs)+4,(v)&0xFFFFFFFF), SIVAL(p,ofs,(v)>>32)) -#define IVAL_TO_SMB_OFF_T(buf,off) ((SMB_OFF_T)(( ((SMB_BIG_UINT)(IVAL((buf),(off)))) & ((SMB_BIG_UINT)0xFFFFFFFF) ))) -#define IVAL2_TO_SMB_BIG_UINT(buf,off) ( (((SMB_BIG_UINT)(IVAL((buf),(off)))) & ((SMB_BIG_UINT)0xFFFFFFFF)) | \ - (( ((SMB_BIG_UINT)(IVAL((buf),(off+4)))) & ((SMB_BIG_UINT)0xFFFFFFFF) ) << 32 ) ) -#else -#define SOFF_T(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0)) -#define SOFF_T_R(p, ofs, v) (SIVAL(p,(ofs)+4,v),SIVAL(p,ofs,0)) -#define IVAL_TO_SMB_OFF_T(buf,off) ((SMB_OFF_T)(( ((uint32)(IVAL((buf),(off)))) & 0xFFFFFFFF ))) -#define IVAL2_TO_SMB_BIG_UINT(buf,off) ( (((SMB_BIG_UINT)(IVAL((buf),(off)))) & ((SMB_BIG_UINT)0xFFFFFFFF)) | \ - (( ((SMB_BIG_UINT)(IVAL((buf),(off+4)))) & ((SMB_BIG_UINT)0xFFFFFFFF) ) << 32 ) ) -#endif - /* * Type for stat structure. */ @@ -633,20 +622,6 @@ typedef int socklen_t; # endif #endif -#if defined(HAVE_LONGLONG) -#define SMB_BIG_UINT unsigned long long -#define SMB_BIG_INT long long -#define SBVAL(p, ofs, v) (SIVAL(p,ofs,(v)&0xFFFFFFFF), SIVAL(p,(ofs)+4,(v)>>32)) -#define BVAL(p, ofs) (IVAL(p,ofs) | (((SMB_BIG_UINT)IVAL(p,(ofs)+4)) << 32)) -#else -#define SMB_BIG_UINT unsigned long -#define SMB_BIG_INT long -#define SBVAL(p, ofs, v) (SIVAL(p,ofs,v),SIVAL(p,(ofs)+4,0)) -#define BVAL(p, ofs) IVAL(p,ofs) -#endif - -#define SMB_BIG_UINT_BITS (sizeof(SMB_BIG_UINT)*8) - #ifndef MIN #define MIN(a,b) ((a)<(b)?(a):(b)) #endif diff --git a/source4/include/nameserv.h b/source4/include/nameserv.h index 7611fdfb8d..9098477445 100644 --- a/source4/include/nameserv.h +++ b/source4/include/nameserv.h @@ -213,7 +213,7 @@ struct nmb_data time_t death_time; /* The time the record must be removed (do not remove if 0). */ time_t refresh_time; /* The time the record should be refreshed. */ - SMB_BIG_UINT id; /* unique id */ + uint64_t id; /* unique id */ struct in_addr wins_ip; /* the adress of the wins server this record comes from */ int wins_flags; /* similar to the netbios flags but different ! */ @@ -633,7 +633,7 @@ typedef struct _WINS_RECORD { char type; int nb_flags; int wins_flags; - SMB_BIG_UINT id; + uint64_t id; int num_ips; struct in_addr ip[25]; struct in_addr wins_ip; diff --git a/source4/include/smb_interfaces.h b/source4/include/smb_interfaces.h index 1f6208cdb5..73ee9e2e22 100644 --- a/source4/include/smb_interfaces.h +++ b/source4/include/smb_interfaces.h @@ -20,24 +20,14 @@ */ -typedef SMB_BIG_UINT large_t; - /* Globally Unique ID */ #define GUID_SIZE 16 /* 64 bit time (100 nanosec) 1601 - cifs6.txt, section 3.5, page 30 */ -typedef struct nttime_info -{ - uint32 low; - uint32 high; -} NTTIME; +typedef uint64_t NTTIME; /* 8 byte aligned 'hyper' type from MS IDL */ -typedef struct -{ - uint32 low; - uint32 high; -} HYPER_T; +typedef uint64_t HYPER_T; @@ -376,28 +366,28 @@ union smb_fileinfo { NTTIME write_time; NTTIME change_time; uint32 ex_attrib; - large_t alloc_size; - large_t size; + uint64_t alloc_size; + uint64_t size; uint32 nlink; WIRE_STRING fname; WIRE_STRING alt_fname; uint8 delete_pending; uint8 directory; - large_t compressed_size; + uint64_t compressed_size; uint16 format; uint8 unit_shift; uint8 chunk_shift; uint8 cluster_shift; - large_t file_id; + uint64_t file_id; uint32 access_flags; /* seen 0x001f01ff from w2k3 */ - large_t position; + uint64_t position; uint32 mode; uint32 alignment_requirement; uint32 reparse_tag; uint_t num_streams; struct stream_struct { - large_t size; - large_t alloc_size; + uint64_t size; + uint64_t alloc_size; WIRE_STRING stream_name; } *streams; } out; @@ -503,8 +493,8 @@ union smb_fileinfo { union smb_fileinfo_in in; struct { - large_t alloc_size; - large_t size; + uint64_t alloc_size; + uint64_t size; uint32 nlink; BOOL delete_pending; BOOL directory; @@ -542,8 +532,8 @@ union smb_fileinfo { NTTIME write_time; NTTIME change_time; uint32 attrib; - large_t alloc_size; - large_t size; + uint64_t alloc_size; + uint64_t size; uint32 nlink; uint8 delete_pending; uint8 directory; @@ -579,7 +569,7 @@ union smb_fileinfo { union smb_fileinfo_in in; struct { - large_t compressed_size; + uint64_t compressed_size; uint16 format; uint8 unit_shift; uint8 chunk_shift; @@ -593,19 +583,19 @@ union smb_fileinfo { union smb_fileinfo_in in; struct { - large_t end_of_file; - large_t num_bytes; + uint64_t end_of_file; + uint64_t num_bytes; NTTIME status_change_time; NTTIME access_time; NTTIME change_time; - large_t uid; - large_t gid; + uint64_t uid; + uint64_t gid; uint32 file_type; - large_t dev_major; - large_t dev_minor; - large_t unique_id; - large_t permissions; - large_t nlink; + uint64_t dev_major; + uint64_t dev_minor; + uint64_t unique_id; + uint64_t permissions; + uint64_t nlink; } out; } unix_basic_info; @@ -625,7 +615,7 @@ union smb_fileinfo { union smb_fileinfo_in in; struct { - large_t file_id; + uint64_t file_id; } out; } internal_information; @@ -645,7 +635,7 @@ union smb_fileinfo { union smb_fileinfo_in in; struct { - large_t position; + uint64_t position; } out; } position_information; @@ -679,8 +669,8 @@ union smb_fileinfo { NTTIME access_time; NTTIME write_time; NTTIME change_time; - large_t alloc_size; - large_t size; + uint64_t alloc_size; + uint64_t size; uint32 attrib; } out; } network_open_information; @@ -820,7 +810,7 @@ union smb_setfileinfo { struct { /* w2k3 rounds this up to nearest 4096 */ - large_t alloc_size; + uint64_t alloc_size; } in; } allocation_info; @@ -831,7 +821,7 @@ union smb_setfileinfo { union setfileinfo_file file; struct { - large_t size; + uint64_t size; } in; } end_of_file_info; @@ -853,7 +843,7 @@ union smb_setfileinfo { union setfileinfo_file file; struct { - large_t position; + uint64_t position; } in; } position_information; @@ -876,19 +866,19 @@ union smb_setfileinfo { union setfileinfo_file file; struct { uint32 mode; /* yuck - this field remains to fix compile of libcli/clifile.c */ - large_t end_of_file; - large_t num_bytes; + uint64_t end_of_file; + uint64_t num_bytes; NTTIME status_change_time; NTTIME access_time; NTTIME change_time; - large_t uid; - large_t gid; + uint64_t uid; + uint64_t gid; uint32 file_type; - large_t dev_major; - large_t dev_minor; - large_t unique_id; - large_t permissions; - large_t nlink; + uint64_t dev_major; + uint64_t dev_minor; + uint64_t unique_id; + uint64_t permissions; + uint64_t nlink; } in; } unix_basic; @@ -930,8 +920,8 @@ union smb_fsinfo { struct { uint32 block_size; - large_t blocks_total; - large_t blocks_free; + uint64_t blocks_total; + uint64_t blocks_free; uint32 fs_id; NTTIME create_time; uint32 serial_number; @@ -939,9 +929,9 @@ union smb_fsinfo { uint32 max_file_component_length; uint32 device_type; uint32 device_characteristics; - large_t quota_soft; - large_t quota_hard; - large_t quota_flags; + uint64_t quota_soft; + uint64_t quota_hard; + uint64_t quota_flags; struct GUID guid; char *volume_name; char *fs_type; @@ -999,8 +989,8 @@ union smb_fsinfo { enum fsinfo_level level; struct { - large_t total_alloc_units; - large_t avail_alloc_units; /* maps to call_avail_alloc_units */ + uint64_t total_alloc_units; + uint64_t avail_alloc_units; /* maps to call_avail_alloc_units */ uint32 sectors_per_unit; uint32 bytes_per_sector; } out; @@ -1036,7 +1026,7 @@ union smb_fsinfo { struct { uint16 major_version; uint16 minor_version; - large_t capability; + uint64_t capability; } out; } unix_info; @@ -1045,10 +1035,10 @@ union smb_fsinfo { enum fsinfo_level level; struct { - large_t unknown[3]; - large_t quota_soft; - large_t quota_hard; - large_t quota_flags; + uint64_t unknown[3]; + uint64_t quota_soft; + uint64_t quota_hard; + uint64_t quota_flags; } out; } quota_information; @@ -1057,9 +1047,9 @@ union smb_fsinfo { enum fsinfo_level level; struct { - large_t total_alloc_units; - large_t call_avail_alloc_units; - large_t actual_avail_alloc_units; + uint64_t total_alloc_units; + uint64_t call_avail_alloc_units; + uint64_t actual_avail_alloc_units; uint32 sectors_per_unit; uint32 bytes_per_sector; } out; @@ -1071,7 +1061,7 @@ union smb_fsinfo { struct { struct GUID guid; - large_t unknown[6]; + uint64_t unknown[6]; } out; } objectid_information; }; @@ -1096,7 +1086,7 @@ union smb_open { uint32 flags; uint32 root_fid; uint32 access_mask; - large_t alloc_size; + uint64_t alloc_size; uint32 file_attr; uint32 share_access; uint32 open_disposition; @@ -1115,8 +1105,8 @@ union smb_open { NTTIME write_time; NTTIME change_time; uint32 attrib; - large_t alloc_size; - large_t size; + uint64_t alloc_size; + uint64_t size; uint16 file_type; uint16 ipc_state; uint8 is_directory; @@ -1264,7 +1254,7 @@ union smb_read { struct { uint16 fnum; - SMB_BIG_UINT offset; + uint64_t offset; uint32 size; } in; struct { @@ -1280,7 +1270,7 @@ union smb_read { struct { uint16 fnum; - SMB_BIG_UINT offset; + uint64_t offset; uint16 maxcnt; uint16 mincnt; uint32 timeout; @@ -1330,7 +1320,7 @@ union smb_read { struct { uint16 fnum; - SMB_BIG_UINT offset; + uint64_t offset; uint16 mincnt; uint16 maxcnt; uint16 remaining; @@ -1357,7 +1347,7 @@ union smb_write { struct { uint16 fnum; - SMB_BIG_UINT offset; + uint64_t offset; uint32 count; const char *data; } in; @@ -1405,7 +1395,7 @@ union smb_write { struct { uint16 fnum; - SMB_BIG_UINT offset; + uint64_t offset; uint16 wmode; uint16 remaining; uint32 count; @@ -1491,8 +1481,8 @@ union smb_lock { uint16 lock_cnt; struct smb_lock_entry { uint16 pid; - SMB_BIG_UINT offset; - SMB_BIG_UINT count; + uint64_t offset; + uint64_t count; } *locks; /* unlocks are first in the arrray */ } in; } lockx; @@ -1831,8 +1821,8 @@ union smb_search_data { NTTIME access_time; NTTIME write_time; NTTIME change_time; - large_t size; - large_t alloc_size; + uint64_t size; + uint64_t alloc_size; uint32 attrib; WIRE_STRING name; } directory_info; @@ -1844,8 +1834,8 @@ union smb_search_data { NTTIME access_time; NTTIME write_time; NTTIME change_time; - large_t size; - large_t alloc_size; + uint64_t size; + uint64_t alloc_size; uint32 attrib; uint32 ea_size; WIRE_STRING name; @@ -1864,8 +1854,8 @@ union smb_search_data { NTTIME access_time; NTTIME write_time; NTTIME change_time; - large_t size; - large_t alloc_size; + uint64_t size; + uint64_t alloc_size; uint32 attrib; uint32 ea_size; WIRE_STRING short_name; @@ -1879,11 +1869,11 @@ union smb_search_data { NTTIME access_time; NTTIME write_time; NTTIME change_time; - large_t size; - large_t alloc_size; + uint64_t size; + uint64_t alloc_size; uint32 attrib; uint32 ea_size; - large_t file_id; + uint64_t file_id; WIRE_STRING name; } id_full_directory_info; @@ -1894,11 +1884,11 @@ union smb_search_data { NTTIME access_time; NTTIME write_time; NTTIME change_time; - large_t size; - large_t alloc_size; + uint64_t size; + uint64_t alloc_size; uint32 attrib; uint32 ea_size; - large_t file_id; + uint64_t file_id; WIRE_STRING short_name; WIRE_STRING name; } id_both_directory_info; @@ -1906,19 +1896,19 @@ union smb_search_data { /* RAW_SEARCH_UNIX_INFO interface */ struct { uint32 file_index; - large_t size; - large_t alloc_size; + uint64_t size; + uint64_t alloc_size; NTTIME status_change_time; NTTIME access_time; NTTIME change_time; - large_t uid; - large_t gid; + uint64_t uid; + uint64_t gid; uint32 file_type; - large_t dev_major; - large_t dev_minor; - large_t unique_id; - large_t permissions; - large_t nlink; + uint64_t dev_major; + uint64_t dev_minor; + uint64_t unique_id; + uint64_t permissions; + uint64_t nlink; const char *name; } unix_info; }; diff --git a/source4/lib/fsusage.c b/source4/lib/fsusage.c index bb7cff0645..bff6fdda03 100644 --- a/source4/lib/fsusage.c +++ b/source4/lib/fsusage.c @@ -24,7 +24,7 @@ /* Return the number of TOSIZE-byte blocks used by BLOCKS FROMSIZE-byte blocks, rounding away from zero. */ -static SMB_BIG_UINT adjust_blocks(SMB_BIG_UINT blocks, SMB_BIG_UINT fromsize, SMB_BIG_UINT tosize) +static uint64_t adjust_blocks(uint64_t blocks, uint64_t fromsize, uint64_t tosize) { if (fromsize == tosize) /* e.g., from 512 to 512 */ return blocks; @@ -40,10 +40,10 @@ static SMB_BIG_UINT adjust_blocks(SMB_BIG_UINT blocks, SMB_BIG_UINT fromsize, SM results are returned in *dfree and *dsize, in 512 byte units */ -int sys_fsusage(const char *path, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize) +int sys_fsusage(const char *path, uint64_t *dfree, uint64_t *dsize) { #ifdef STAT_STATFS3_OSF1 -#define CONVERT_BLOCKS(B) adjust_blocks ((SMB_BIG_UINT)(B), (SMB_BIG_UINT)fsd.f_fsize, (SMB_BIG_UINT)512) +#define CONVERT_BLOCKS(B) adjust_blocks ((uint64_t)(B), (uint64_t)fsd.f_fsize, (uint64_t)512) struct statfs fsd; if (statfs (path, &fsd, sizeof (struct statfs)) != 0) @@ -51,7 +51,7 @@ int sys_fsusage(const char *path, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize) #endif /* STAT_STATFS3_OSF1 */ #ifdef STAT_STATFS2_FS_DATA /* Ultrix */ -#define CONVERT_BLOCKS(B) adjust_blocks ((SMB_BIG_UINT)(B), (SMB_BIG_UINT)1024, (SMB_BIG_UINT)512) +#define CONVERT_BLOCKS(B) adjust_blocks ((uint64_t)(B), (uint64_t)1024, (uint64_t)512) struct fs_data fsd; if (statfs (path, &fsd) != 1) @@ -62,7 +62,7 @@ int sys_fsusage(const char *path, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize) #endif /* STAT_STATFS2_FS_DATA */ #ifdef STAT_STATFS2_BSIZE /* 4.3BSD, SunOS 4, HP-UX, AIX */ -#define CONVERT_BLOCKS(B) adjust_blocks ((SMB_BIG_UINT)(B), (SMB_BIG_UINT)fsd.f_bsize, (SMB_BIG_UINT)512) +#define CONVERT_BLOCKS(B) adjust_blocks ((uint64_t)(B), (uint64_t)fsd.f_bsize, (uint64_t)512) struct statfs fsd; if (statfs (path, &fsd) < 0) @@ -84,7 +84,7 @@ int sys_fsusage(const char *path, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize) #ifdef STAT_STATFS2_FSIZE /* 4.4BSD */ -#define CONVERT_BLOCKS(B) adjust_blocks ((SMB_BIG_UINT)(B), (SMB_BIG_UINT)fsd.f_fsize, (SMB_BIG_UINT)512) +#define CONVERT_BLOCKS(B) adjust_blocks ((uint64_t)(B), (uint64_t)fsd.f_fsize, (uint64_t)512) struct statfs fsd; @@ -94,12 +94,12 @@ int sys_fsusage(const char *path, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize) #ifdef STAT_STATFS4 /* SVR3, Dynix, Irix, AIX */ # if _AIX || defined(_CRAY) -# define CONVERT_BLOCKS(B) adjust_blocks ((SMB_BIG_UINT)(B), (SMB_BIG_UINT)fsd.f_bsize, (SMB_BIG_UINT)512) +# define CONVERT_BLOCKS(B) adjust_blocks ((uint64_t)(B), (uint64_t)fsd.f_bsize, (uint64_t)512) # ifdef _CRAY # define f_bavail f_bfree # endif # else -# define CONVERT_BLOCKS(B) ((SMB_BIG_UINT)B) +# define CONVERT_BLOCKS(B) ((uint64_t)B) # ifndef _SEQUENT_ /* _SEQUENT_ is DYNIX/ptx */ # ifndef DOLPHIN /* DOLPHIN 3.8.alfa/7.18 has f_bavail */ # define f_bavail f_bfree @@ -119,7 +119,7 @@ int sys_fsusage(const char *path, SMB_BIG_UINT *dfree, SMB_BIG_UINT *dsize) #if defined(STAT_STATVFS) || defined(STAT_STATVFS64) /* SVR4 */ # define CONVERT_BLOCKS(B) \ - adjust_blocks ((SMB_BIG_UINT)(B), fsd.f_frsize ? (SMB_BIG_UINT)fsd.f_frsize : (SMB_BIG_UINT)fsd.f_bsize, (SMB_BIG_UINT)512) + adjust_blocks ((uint64_t)(B), fsd.f_frsize ? (uint64_t)fsd.f_frsize : (uint64_t)fsd.f_bsize, (uint64_t)512) #ifdef STAT_STATVFS64 struct statvfs64 fsd; diff --git a/source4/lib/ldb/common/ldb_msg.c b/source4/lib/ldb/common/ldb_msg.c index 59d480a33a..055569b0ee 100644 --- a/source4/lib/ldb/common/ldb_msg.c +++ b/source4/lib/ldb/common/ldb_msg.c @@ -235,6 +235,28 @@ unsigned int ldb_msg_find_uint(const struct ldb_message *msg, return strtoul(v->data, NULL, 0); } +int64_t ldb_msg_find_int64(const struct ldb_message *msg, + const char *attr_name, + int64_t default_value) +{ + const struct ldb_val *v = ldb_msg_find_ldb_val(msg, attr_name); + if (!v || !v->data) { + return default_value; + } + return strtoll(v->data, NULL, 0); +} + +uint64_t ldb_msg_find_uint64(const struct ldb_message *msg, + const char *attr_name, + uint64_t default_value) +{ + const struct ldb_val *v = ldb_msg_find_ldb_val(msg, attr_name); + if (!v || !v->data) { + return default_value; + } + return strtoull(v->data, NULL, 0); +} + double ldb_msg_find_double(const struct ldb_message *msg, const char *attr_name, double default_value) diff --git a/source4/lib/registry/reg_backend_nt4/reg_backend_nt4.c b/source4/lib/registry/reg_backend_nt4/reg_backend_nt4.c index e4f9447488..415f764f61 100644 --- a/source4/lib/registry/reg_backend_nt4/reg_backend_nt4.c +++ b/source4/lib/registry/reg_backend_nt4/reg_backend_nt4.c @@ -608,8 +608,7 @@ static KEY_SEC_DESC *nt_create_init_sec(REG_HANDLE *h) #define REG_HANDLE_REGTYPE_NT 1 #define REG_HANDLE_REGTYPE_W9X 2 -#define TTTONTTIME(r, t1, t2) (r)->last_mod_time.low = (t1); \ - (r)->last_mod_time.high = (t2); +#define TTTONTTIME(r, t1, t2) (r)->last_mod_time = (t1) | (((uint64_t)(t2)) << 32) #define REGF_HDR_BLKSIZ 0x1000 diff --git a/source4/lib/system.c b/source4/lib/system.c index 98d975aa50..8c9627eb26 100644 --- a/source4/lib/system.c +++ b/source4/lib/system.c @@ -248,36 +248,6 @@ SMB_OFF_T sys_lseek(int fd, SMB_OFF_T offset, int whence) } /******************************************************************* - An fseek() wrapper that will deal with 64 bit filesizes. -********************************************************************/ - -int sys_fseek(FILE *fp, SMB_OFF_T offset, int whence) -{ -#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(LARGE_SMB_OFF_T) && defined(HAVE_FSEEK64) - return fseek64(fp, offset, whence); -#elif defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(LARGE_SMB_OFF_T) && defined(HAVE_FSEEKO64) - return fseeko64(fp, offset, whence); -#else - return fseek(fp, offset, whence); -#endif -} - -/******************************************************************* - An ftell() wrapper that will deal with 64 bit filesizes. -********************************************************************/ - -SMB_OFF_T sys_ftell(FILE *fp) -{ -#if defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(LARGE_SMB_OFF_T) && defined(HAVE_FTELL64) - return (SMB_OFF_T)ftell64(fp); -#elif defined(HAVE_EXPLICIT_LARGEFILE_SUPPORT) && defined(LARGE_SMB_OFF_T) && defined(HAVE_FTELLO64) - return (SMB_OFF_T)ftello64(fp); -#else - return (SMB_OFF_T)ftell(fp); -#endif -} - -/******************************************************************* A creat() wrapper that will deal with 64 bit filesizes. ********************************************************************/ diff --git a/source4/lib/time.c b/source4/lib/time.c index ba650668c5..e3811c884e 100644 --- a/source4/lib/time.c +++ b/source4/lib/time.c @@ -23,11 +23,10 @@ #include "includes.h" #ifndef TIME_T_MIN -#define TIME_T_MIN ((time_t)0 < (time_t) -1 ? (time_t) 0 \ - : ~ (time_t) 0 << (sizeof (time_t) * 8 - 1)) +#define TIME_T_MIN 0 #endif #ifndef TIME_T_MAX -#define TIME_T_MAX (~ (time_t) 0 - TIME_T_MIN) +#define TIME_T_MAX (~(time_t)0) #endif /******************************************************************* @@ -84,35 +83,23 @@ int get_time_zone(time_t t) return tm_diff(&tm_utc,tm); } -#define TIME_FIXUP_CONSTANT (369.0*365.25*24*60*60-(3.0*24*60*60+6.0*60*60)) +#define TIME_FIXUP_CONSTANT 11644473600LL /**************************************************************************** interpret an 8 byte "filetime" structure to a time_t It's originally in "100ns units since jan 1st 1601" ****************************************************************************/ -time_t nt_time_to_unix(const NTTIME *nt) +time_t nt_time_to_unix(NTTIME nt) { - double d; - time_t ret; + nt += 1000*1000*10/2; + nt /= 1000*1000*10; + nt -= TIME_FIXUP_CONSTANT; - if (nt->high == 0) { + if (TIME_T_MIN >= nt || nt >= TIME_T_MAX) { return 0; } - d = ((double)nt->high)*4.0*(double)(1<<30); - d += (nt->low&0xFFF00000); - d *= 1.0e-7; - - /* now adjust by 369 years to make the secs since 1970 */ - d -= TIME_FIXUP_CONSTANT; - - if (TIME_T_MIN >= d || d >= TIME_T_MAX) { - return 0; - } - - ret = (time_t)(d+0.5); - - return ret; + return (time_t)nt; } @@ -122,30 +109,22 @@ This takes GMT as input ****************************************************************************/ void unix_to_nt_time(NTTIME *nt, time_t t) { - double d; + uint64_t t2; - if (t==0) { - nt->low = 0; - nt->high = 0; - return; - } - if (t == TIME_T_MAX) { - nt->low = 0xffffffff; - nt->high = 0x7fffffff; + if (t == (time_t)-1) { + *nt = (NTTIME)-1LL; return; } - if (t == -1) { - nt->low = 0xffffffff; - nt->high = 0xffffffff; + if (t == 0) { + *nt = 0; return; } - d = (double)(t); - d += TIME_FIXUP_CONSTANT; - d *= 1.0e7; + t2 = t; + t2 += TIME_FIXUP_CONSTANT; + t2 *= 1000*1000*10; - nt->high = (uint32)(d * (1.0/(4.0*(double)(1<<30)))); - nt->low = (uint32)(d - ((double)nt->high)*4.0*(double)(1<<30)); + *nt = t2; } @@ -390,18 +369,10 @@ char *timestring(TALLOC_CTX *mem_ctx, time_t t) return TimeBuf; } -/**************************************************************************** -check if NTTIME is 0 -****************************************************************************/ -BOOL nt_time_is_zero(NTTIME *nt) -{ - return (nt->high==0); -} - /* return a talloced string representing a NTTIME for human consumption */ -const char *nt_time_string(TALLOC_CTX *mem_ctx, const NTTIME *nt) +const char *nt_time_string(TALLOC_CTX *mem_ctx, NTTIME nt) { time_t t = nt_time_to_unix(nt); return talloc_strdup(mem_ctx, timestring(mem_ctx, t)); @@ -411,10 +382,9 @@ const char *nt_time_string(TALLOC_CTX *mem_ctx, const NTTIME *nt) /* put a NTTIME into a packet */ -void push_nttime(void *base, uint16 offset, NTTIME *t) +void push_nttime(void *base, uint16 offset, NTTIME t) { - SIVAL(base, offset, t->low); - SIVAL(base, offset+4, t->high); + SBVAL(base, offset, t); } /* @@ -422,30 +392,7 @@ void push_nttime(void *base, uint16 offset, NTTIME *t) */ NTTIME pull_nttime(void *base, uint16 offset) { - NTTIME ret; - ret.low = IVAL(base, offset); - ret.high = IVAL(base, offset+4); - return ret; -} - -/* - convert a NTTIME to a double in 100-nano-seconds since 1601 -*/ -double nttime_to_double_nt(NTTIME t) -{ - const double t32 = 4294967296.0; - return t.high*t32 + t.low; -} - -/* - convert a double in 100-nano-seconds since 1601 to a NTTIME -*/ -NTTIME nttime_from_double_nt(double t) -{ - const double t32 = 4294967296.0; - NTTIME ret; - ret.high = t / t32; - ret.low = t - (ret.high*t32); + NTTIME ret = BVAL(base, offset); return ret; } @@ -454,5 +401,5 @@ NTTIME nttime_from_double_nt(double t) */ NTTIME nttime_from_string(const char *s) { - return nttime_from_double_nt(strtod(s, NULL)); + return strtoull(s, NULL, 0); } diff --git a/source4/libcli/clilist.c b/source4/libcli/clilist.c index ee0357579c..ca4b6acdc7 100644 --- a/source4/libcli/clilist.c +++ b/source4/libcli/clilist.c @@ -45,9 +45,9 @@ static BOOL interpret_long_filename(int level, ZERO_STRUCTP(finfo); finfo->size = info->both_directory_info.size; - finfo->ctime = nt_time_to_unix(&info->both_directory_info.create_time); - finfo->atime = nt_time_to_unix(&info->both_directory_info.access_time); - finfo->mtime = nt_time_to_unix(&info->both_directory_info.write_time); + finfo->ctime = nt_time_to_unix(info->both_directory_info.create_time); + finfo->atime = nt_time_to_unix(info->both_directory_info.access_time); + finfo->mtime = nt_time_to_unix(info->both_directory_info.write_time); finfo->mode = info->both_directory_info.attrib; /* 32 bit->16 bit attrib */ if (info->both_directory_info.short_name.s) { strncpy(finfo->short_name, info->both_directory_info.short_name.s, diff --git a/source4/libcli/clitrans2.c b/source4/libcli/clitrans2.c index 777150a257..dc8c2cdfec 100644 --- a/source4/libcli/clitrans2.c +++ b/source4/libcli/clitrans2.c @@ -85,16 +85,16 @@ NTSTATUS cli_qpathinfo2(struct cli_tree *tree, const char *fname, return status; if (c_time) { - *c_time = nt_time_to_unix(&parms.all_info.out.create_time); + *c_time = nt_time_to_unix(parms.all_info.out.create_time); } if (a_time) { - *a_time = nt_time_to_unix(&parms.all_info.out.access_time); + *a_time = nt_time_to_unix(parms.all_info.out.access_time); } if (m_time) { - *m_time = nt_time_to_unix(&parms.all_info.out.change_time); + *m_time = nt_time_to_unix(parms.all_info.out.change_time); } if (w_time) { - *w_time = nt_time_to_unix(&parms.all_info.out.write_time); + *w_time = nt_time_to_unix(parms.all_info.out.write_time); } if (size) { *size = parms.all_info.out.size; @@ -163,16 +163,16 @@ NTSTATUS cli_qfileinfo(struct cli_tree *tree, int fnum, } if (c_time) { - *c_time = nt_time_to_unix(&parms.all_info.out.create_time); + *c_time = nt_time_to_unix(parms.all_info.out.create_time); } if (a_time) { - *a_time = nt_time_to_unix(&parms.all_info.out.access_time); + *a_time = nt_time_to_unix(parms.all_info.out.access_time); } if (m_time) { - *m_time = nt_time_to_unix(&parms.all_info.out.change_time); + *m_time = nt_time_to_unix(parms.all_info.out.change_time); } if (w_time) { - *w_time = nt_time_to_unix(&parms.all_info.out.write_time); + *w_time = nt_time_to_unix(parms.all_info.out.write_time); } if (mode) { *mode = parms.all_info.out.attrib; diff --git a/source4/libcli/raw/clispnego.c b/source4/libcli/raw/clispnego.c index e6cadc466c..7ad6be1006 100644 --- a/source4/libcli/raw/clispnego.c +++ b/source4/libcli/raw/clispnego.c @@ -141,9 +141,9 @@ BOOL spnego_parse_negTokenInit(DATA_BLOB blob, asn1_start_tag(&data,ASN1_CONTEXT(0)); asn1_start_tag(&data,ASN1_SEQUENCE(0)); for (i=0; asn1_tag_remaining(&data) > 0 && i < ASN1_MAX_OIDS; i++) { - char *oid = NULL; - asn1_read_OID(&data,&oid); - OIDs[i] = oid; + char *aoid = NULL; + asn1_read_OID(&data,&aoid); + OIDs[i] = aoid; } OIDs[i] = NULL; asn1_end_tag(&data); @@ -230,9 +230,9 @@ BOOL parse_negTokenTarg(DATA_BLOB blob, char *OIDs[ASN1_MAX_OIDS], DATA_BLOB *se asn1_start_tag(&data, ASN1_CONTEXT(0)); asn1_start_tag(&data, ASN1_SEQUENCE(0)); for (i=0; asn1_tag_remaining(&data) > 0 && i < ASN1_MAX_OIDS; i++) { - char *oid = NULL; - asn1_read_OID(&data,&oid); - OIDs[i] = oid; + char *aoid = NULL; + asn1_read_OID(&data,&aoid); + OIDs[i] = aoid; } OIDs[i] = NULL; asn1_end_tag(&data); diff --git a/source4/libcli/raw/rawnegotiate.c b/source4/libcli/raw/rawnegotiate.c index 587050bef8..5b94ef63d8 100644 --- a/source4/libcli/raw/rawnegotiate.c +++ b/source4/libcli/raw/rawnegotiate.c @@ -106,7 +106,7 @@ NTSTATUS smb_raw_negotiate(struct cli_transport *transport) /* this time arrives in real GMT */ ntt = cli_pull_nttime(req->in.vwv, VWV(11)+1); - transport->negotiate.server_time = nt_time_to_unix(&ntt); + transport->negotiate.server_time = nt_time_to_unix(ntt); transport->negotiate.capabilities = IVAL(req->in.vwv,VWV(9)+1); transport->negotiate.secblob = cli_req_pull_blob(req, transport->mem_ctx, req->in.data, req->in.data_size); diff --git a/source4/libcli/raw/rawrequest.c b/source4/libcli/raw/rawrequest.c index 35a2d363df..085b445fba 100644 --- a/source4/libcli/raw/rawrequest.c +++ b/source4/libcli/raw/rawrequest.c @@ -831,11 +831,9 @@ BOOL cli_raw_pull_data(struct cli_request *req, const char *src, int len, char * /* put a NTTIME into a packet */ - -void cli_push_nttime(void *base, uint16 offset, NTTIME *t) +void cli_push_nttime(void *base, uint16 offset, NTTIME t) { - SIVAL(base, offset, t->low); - SIVAL(base, offset+4, t->high); + SBVAL(base, offset, t); } /* @@ -843,9 +841,7 @@ void cli_push_nttime(void *base, uint16 offset, NTTIME *t) */ NTTIME cli_pull_nttime(void *base, uint16 offset) { - NTTIME ret; - ret.low = IVAL(base, offset); - ret.high = IVAL(base, offset+4); + NTTIME ret = BVAL(base, offset); return ret; } diff --git a/source4/libcli/raw/rawsetfileinfo.c b/source4/libcli/raw/rawsetfileinfo.c index 9da94f161c..d8fc78972d 100644 --- a/source4/libcli/raw/rawsetfileinfo.c +++ b/source4/libcli/raw/rawsetfileinfo.c @@ -61,10 +61,10 @@ static BOOL smb_raw_setinfo_backend(struct cli_tree *tree, case RAW_SFILEINFO_BASIC_INFO: case RAW_SFILEINFO_BASIC_INFORMATION: NEED_BLOB(40); - cli_push_nttime(blob->data, 0, &parms->basic_info.in.create_time); - cli_push_nttime(blob->data, 8, &parms->basic_info.in.access_time); - cli_push_nttime(blob->data, 16, &parms->basic_info.in.write_time); - cli_push_nttime(blob->data, 24, &parms->basic_info.in.change_time); + cli_push_nttime(blob->data, 0, parms->basic_info.in.create_time); + cli_push_nttime(blob->data, 8, parms->basic_info.in.access_time); + cli_push_nttime(blob->data, 16, parms->basic_info.in.write_time); + cli_push_nttime(blob->data, 24, parms->basic_info.in.change_time); SIVAL(blob->data, 32, parms->basic_info.in.attrib); SIVAL(blob->data, 36, 0); /* padding */ return True; @@ -73,9 +73,9 @@ static BOOL smb_raw_setinfo_backend(struct cli_tree *tree, NEED_BLOB(92); SBVAL(blob->data, 0, parms->unix_basic.in.end_of_file); SBVAL(blob->data, 8, parms->unix_basic.in.num_bytes); - cli_push_nttime(blob->data, 16, &parms->unix_basic.in.status_change_time); - cli_push_nttime(blob->data, 24, &parms->unix_basic.in.access_time); - cli_push_nttime(blob->data, 32, &parms->unix_basic.in.change_time); + cli_push_nttime(blob->data, 16, parms->unix_basic.in.status_change_time); + cli_push_nttime(blob->data, 24, parms->unix_basic.in.access_time); + cli_push_nttime(blob->data, 32, parms->unix_basic.in.change_time); SBVAL(blob->data, 40, parms->unix_basic.in.uid); SBVAL(blob->data, 48, parms->unix_basic.in.gid); SIVAL(blob->data, 56, parms->unix_basic.in.file_type); diff --git a/source4/libcli/util/asn1.c b/source4/libcli/util/asn1.c index 09d4fbb6c9..07c692f700 100644 --- a/source4/libcli/util/asn1.c +++ b/source4/libcli/util/asn1.c @@ -315,17 +315,17 @@ int asn1_tag_remaining(ASN1_DATA *data) BOOL asn1_read_OID(ASN1_DATA *data, char **OID) { uint8 b; - pstring oid; + pstring aoid; fstring el; if (!asn1_start_tag(data, ASN1_OID)) return False; asn1_read_uint8(data, &b); - oid[0] = 0; + aoid[0] = 0; snprintf(el, sizeof(el), "%u", b/40); - pstrcat(oid, el); + pstrcat(aoid, el); snprintf(el, sizeof(el), " %u", b%40); - pstrcat(oid, el); + pstrcat(aoid, el); while (asn1_tag_remaining(data) > 0) { unsigned v = 0; @@ -334,12 +334,12 @@ BOOL asn1_read_OID(ASN1_DATA *data, char **OID) v = (v<<7) | (b&0x7f); } while (!data->has_error && b & 0x80); snprintf(el, sizeof(el), " %u", v); - pstrcat(oid, el); + pstrcat(aoid, el); } asn1_end_tag(data); - *OID = strdup(oid); + *OID = strdup(aoid); return !data->has_error; } diff --git a/source4/libcli/util/smbencrypt.c b/source4/libcli/util/smbencrypt.c index 5468bdbebe..013f00d5fa 100644 --- a/source4/libcli/util/smbencrypt.c +++ b/source4/libcli/util/smbencrypt.c @@ -314,7 +314,7 @@ static DATA_BLOB NTLMv2_generate_client_data(const DATA_BLOB *names_blob) generate_random_buffer(client_chal, sizeof(client_chal), False); - push_nttime(long_date, 0, &nttime); + push_nttime(long_date, 0, nttime); /* See http://www.ubiqx.org/cifs/SMB.html#SMB.8.5 */ diff --git a/source4/librpc/idl/misc.idl b/source4/librpc/idl/misc.idl index fca8fe876e..551803fa8e 100644 --- a/source4/librpc/idl/misc.idl +++ b/source4/librpc/idl/misc.idl @@ -65,12 +65,6 @@ interface misc GUID uuid; } policy_handle; - /* a 4 byte aligned 64-bit integer */ - typedef [public] struct { - uint32 low; - uint32 high; - } ULONG8; - /* this is also used in samr and netlogon */ typedef [public, flag(NDR_PAHEX)] struct { uint16 units_per_week; diff --git a/source4/librpc/idl/netlogon.idl b/source4/librpc/idl/netlogon.idl index 693e7bf57c..f3c2b1ff26 100644 --- a/source4/librpc/idl/netlogon.idl +++ b/source4/librpc/idl/netlogon.idl @@ -77,8 +77,8 @@ interface netlogon /* in netr_AcctLockStr size seems to be be 24, and rrenard thinks that the structure of the bindata looks like this: - ULONG8 lockout_duration; - ULONG8 reset_count; + uint64 lockout_duration; + uint64 reset_count; uint32 bad_attempt_lockout; uint32 dummy; @@ -371,9 +371,9 @@ interface netlogon NTTIME forcedlogoff; uint16 minpasswdlen; uint16 passwdhistorylen; - ULONG8 pwd_must_change_time; - ULONG8 pwd_can_change_time; - ULONG8 sequence_num; + uint64 pwd_must_change_time; + uint64 pwd_can_change_time; + uint64 sequence_num; NTTIME domain_create_time; uint32 SecurityInformation; sec_desc_buf sdbuf; @@ -597,7 +597,7 @@ interface netlogon [case(NETR_DELTA_DELETE_SECRET)] netr_DELTA_DELETE_SECRET delete_secret; [case(NETR_DELTA_DELETE_GROUP2)] netr_DELTA_DELETE_USER *delete_group; [case(NETR_DELTA_DELETE_USER2)] netr_DELTA_DELETE_USER *delete_user; - [case(NETR_DELTA_MODIFY_COUNT)] ULONG8 *modified_count; + [case(NETR_DELTA_MODIFY_COUNT)] uint64 *modified_count; } netr_DELTA_UNION; typedef union { @@ -643,7 +643,7 @@ interface netlogon [in] netr_Authenticator credential, [in,out] netr_Authenticator return_authenticator, [in] uint32 database_id, - [in,out] ULONG8 sequence_num, + [in,out] uint64 sequence_num, [in] uint32 preferredmaximumlength, [out] netr_DELTA_ENUM_ARRAY *delta_enum_array ); diff --git a/source4/librpc/idl/samr.idl b/source4/librpc/idl/samr.idl index 2ff4e86cd1..3c9005a1f3 100644 --- a/source4/librpc/idl/samr.idl +++ b/source4/librpc/idl/samr.idl @@ -129,12 +129,13 @@ uint16 min_pwd_len; uint16 password_history; uint32 password_properties; - ULONG8 max_password_age; - ULONG8 min_password_age; + /* yes, these are signed. They are in negative 100ns */ + int64 max_password_age; + int64 min_password_age; } samr_DomInfo1; typedef struct { - ULONG8 force_logoff_time; + uint64 force_logoff_time; samr_Name comment; samr_Name domain; /* domain name */ samr_Name primary; /* PDC name if this is a BDC */ @@ -148,7 +149,7 @@ } samr_DomInfo2; typedef struct { - ULONG8 force_logoff_time; + uint64 force_logoff_time; } samr_DomInfo3; typedef struct { @@ -180,7 +181,7 @@ } samr_DomInfo9; typedef struct { - ULONG8 force_logoff_time; + uint64 force_logoff_time; samr_Name comment; samr_Name domain; samr_Name primary; @@ -1162,10 +1163,14 @@ /************************/ /* Function 0x3f */ + const int SAMR_REJECT_OTHER = 0; + const int SAMR_REJECT_TOO_SHORT = 1; + const int SAMR_REJECT_COMPLEXITY = 2; + typedef struct { + uint32 reason; uint32 unknown1; uint32 unknown2; - uint32 unknown3; } samr_ChangeReject; NTSTATUS samr_ChangePasswordUser3( diff --git a/source4/librpc/ndr/ndr_basic.c b/source4/librpc/ndr/ndr_basic.c index 33176ec9c0..f4cdf44dc0 100644 --- a/source4/librpc/ndr/ndr_basic.c +++ b/source4/librpc/ndr/ndr_basic.c @@ -66,19 +66,36 @@ NTSTATUS ndr_pull_uint32(struct ndr_pull *ndr, uint32 *v) } /* - parse a HYPER_T + parse a uint64 */ -NTSTATUS ndr_pull_HYPER_T(struct ndr_pull *ndr, HYPER_T *v) +NTSTATUS ndr_pull_uint64(struct ndr_pull *ndr, uint64_t *v) { - NDR_PULL_ALIGN(ndr, 8); + NDR_PULL_ALIGN(ndr, 4); NDR_PULL_NEED_BYTES(ndr, 8); - v->low = NDR_IVAL(ndr, ndr->offset); - v->high = NDR_IVAL(ndr, ndr->offset+4); + *v = NDR_IVAL(ndr, ndr->offset); + *v |= (uint64_t)(NDR_IVAL(ndr, ndr->offset+4)) << 32; ndr->offset += 8; return NT_STATUS_OK; } /* + parse a int64 +*/ +NTSTATUS ndr_pull_int64(struct ndr_pull *ndr, int64_t *v) +{ + return ndr_pull_uint64(ndr, (uint64_t *)v); +} + +/* + parse a HYPER_T +*/ +NTSTATUS ndr_pull_HYPER_T(struct ndr_pull *ndr, HYPER_T *v) +{ + NDR_PULL_ALIGN(ndr, 8); + return ndr_pull_uint64(ndr, v); +} + +/* pull a NTSTATUS */ NTSTATUS ndr_pull_NTSTATUS(struct ndr_pull *ndr, NTSTATUS *status) @@ -215,18 +232,35 @@ NTSTATUS ndr_push_uint32(struct ndr_push *ndr, uint32 v) } /* - push a HYPER_T + push a uint64 */ -NTSTATUS ndr_push_HYPER_T(struct ndr_push *ndr, HYPER_T v) +NTSTATUS ndr_push_uint64(struct ndr_push *ndr, uint64 v) { - NDR_PUSH_ALIGN(ndr, 8); + NDR_PUSH_ALIGN(ndr, 4); NDR_PUSH_NEED_BYTES(ndr, 8); - NDR_SIVAL(ndr, ndr->offset, v.low); - NDR_SIVAL(ndr, ndr->offset+4, v.high); + NDR_SIVAL(ndr, ndr->offset, (v & 0xFFFFFFFF)); + NDR_SIVAL(ndr, ndr->offset+4, (v>>32)); ndr->offset += 8; return NT_STATUS_OK; } +/* + push a int64 +*/ +NTSTATUS ndr_push_int64(struct ndr_push *ndr, int64 v) +{ + return ndr_push_uint64(ndr, (uint64_t)v); +} + +/* + push a HYPER_T +*/ +NTSTATUS ndr_push_HYPER_T(struct ndr_push *ndr, HYPER_T v) +{ + NDR_PUSH_ALIGN(ndr, 8); + return ndr_push_uint64(ndr, v); +} + NTSTATUS ndr_push_align(struct ndr_push *ndr, size_t size) { NDR_PUSH_ALIGN(ndr, size); @@ -606,8 +640,7 @@ NTSTATUS ndr_push_string(struct ndr_push *ndr, int ndr_flags, const char *s) */ NTSTATUS ndr_push_NTTIME(struct ndr_push *ndr, NTTIME t) { - NDR_CHECK(ndr_push_uint32(ndr, t.low)); - NDR_CHECK(ndr_push_uint32(ndr, t.high)); + NDR_CHECK(ndr_push_uint64(ndr, t)); return NT_STATUS_OK; } @@ -616,8 +649,7 @@ NTSTATUS ndr_push_NTTIME(struct ndr_push *ndr, NTTIME t) */ NTSTATUS ndr_pull_NTTIME(struct ndr_pull *ndr, NTTIME *t) { - NDR_CHECK(ndr_pull_uint32(ndr, &t->low)); - NDR_CHECK(ndr_pull_uint32(ndr, &t->high)); + NDR_CHECK(ndr_pull_uint64(ndr, t)); return NT_STATUS_OK; } @@ -661,9 +693,22 @@ void ndr_print_uint32(struct ndr_print *ndr, const char *name, uint32 v) ndr->print(ndr, "%-25s: 0x%08x (%u)", name, v, v); } +void ndr_print_uint64(struct ndr_print *ndr, const char *name, uint64 v) +{ + ndr->print(ndr, "%-25s: 0x%08x%08x", name, (uint32)(v >> 32), (uint32)(v & 0xFFFFFFFF)); +} + +void ndr_print_int64(struct ndr_print *ndr, const char *name, int64 v) +{ + ndr->print(ndr, "%-25s: 0x%08x%08x (%lld)", name, + (uint32)(v >> 32), + (uint32)(v & 0xFFFFFFFF), + v); +} + void ndr_print_HYPER_T(struct ndr_print *ndr, const char *name, HYPER_T v) { - ndr->print(ndr, "%-25s: 0x%08x%08x", name, v.high, v.low); + ndr->print(ndr, "%-25s: 0x%08x%08x", name, (uint32)(v >> 32), (uint32)(v & 0xFFFFFFFF)); } void ndr_print_ptr(struct ndr_print *ndr, const char *name, const void *p) @@ -686,7 +731,7 @@ void ndr_print_string(struct ndr_print *ndr, const char *name, const char *s) void ndr_print_NTTIME(struct ndr_print *ndr, const char *name, NTTIME t) { - ndr->print(ndr, "%-25s: %s", name, nt_time_string(ndr->mem_ctx, &t)); + ndr->print(ndr, "%-25s: %s", name, nt_time_string(ndr->mem_ctx, t)); } void ndr_print_time_t(struct ndr_print *ndr, const char *name, time_t t) diff --git a/source4/ntvfs/ntvfs_generic.c b/source4/ntvfs/ntvfs_generic.c index ea62f8c9a6..116b716474 100644 --- a/source4/ntvfs/ntvfs_generic.c +++ b/source4/ntvfs/ntvfs_generic.c @@ -153,7 +153,7 @@ NTSTATUS ntvfs_map_open(struct request_context *req, union smb_open *io) ZERO_STRUCT(io->openx.out); io->openx.out.fnum = io2.generic.out.fnum; io->openx.out.attrib = io2.generic.out.attrib; - io->openx.out.write_time = nt_time_to_unix(&io2.generic.out.write_time); + io->openx.out.write_time = nt_time_to_unix(io2.generic.out.write_time); io->openx.out.size = io2.generic.out.size; return NT_STATUS_OK; @@ -235,7 +235,7 @@ NTSTATUS ntvfs_map_open(struct request_context *req, union smb_open *io) ZERO_STRUCT(io->openx.out); io->open.out.fnum = io2.generic.out.fnum; io->open.out.attrib = io2.generic.out.attrib; - io->open.out.write_time = nt_time_to_unix(&io2.generic.out.write_time); + io->open.out.write_time = nt_time_to_unix(io2.generic.out.write_time); io->open.out.size = io2.generic.out.size; io->open.out.rmode = DOS_OPEN_RDWR; @@ -378,15 +378,15 @@ NTSTATUS ntvfs_map_fileinfo(struct request_context *req, union smb_fileinfo *inf case RAW_FILEINFO_GETATTR: info->getattr.out.attrib = info2->generic.out.attrib & 0xff; info->getattr.out.size = info2->generic.out.size; - info->getattr.out.write_time = nt_time_to_unix(&info2->generic.out.write_time); + info->getattr.out.write_time = nt_time_to_unix(info2->generic.out.write_time); return NT_STATUS_OK; case RAW_FILEINFO_GETATTRE: info->getattre.out.attrib = info2->generic.out.attrib; info->getattre.out.size = info2->generic.out.size; - info->getattre.out.write_time = nt_time_to_unix(&info2->generic.out.write_time); - info->getattre.out.create_time = nt_time_to_unix(&info2->generic.out.create_time); - info->getattre.out.access_time = nt_time_to_unix(&info2->generic.out.access_time); + info->getattre.out.write_time = nt_time_to_unix(info2->generic.out.write_time); + info->getattre.out.create_time = nt_time_to_unix(info2->generic.out.create_time); + info->getattre.out.access_time = nt_time_to_unix(info2->generic.out.access_time); info->getattre.out.alloc_size = info2->generic.out.alloc_size; return NT_STATUS_OK; @@ -427,18 +427,18 @@ NTSTATUS ntvfs_map_fileinfo(struct request_context *req, union smb_fileinfo *inf return NT_STATUS_OK; case RAW_FILEINFO_STANDARD: - info->standard.out.create_time = nt_time_to_unix(&info2->generic.out.create_time); - info->standard.out.access_time = nt_time_to_unix(&info2->generic.out.access_time); - info->standard.out.write_time = nt_time_to_unix(&info2->generic.out.write_time); + info->standard.out.create_time = nt_time_to_unix(info2->generic.out.create_time); + info->standard.out.access_time = nt_time_to_unix(info2->generic.out.access_time); + info->standard.out.write_time = nt_time_to_unix(info2->generic.out.write_time); info->standard.out.size = info2->generic.out.size; info->standard.out.alloc_size = info2->generic.out.alloc_size; info->standard.out.attrib = info2->generic.out.attrib; return NT_STATUS_OK; case RAW_FILEINFO_EA_SIZE: - info->ea_size.out.create_time = nt_time_to_unix(&info2->generic.out.create_time); - info->ea_size.out.access_time = nt_time_to_unix(&info2->generic.out.access_time); - info->ea_size.out.write_time = nt_time_to_unix(&info2->generic.out.write_time); + info->ea_size.out.create_time = nt_time_to_unix(info2->generic.out.create_time); + info->ea_size.out.access_time = nt_time_to_unix(info2->generic.out.access_time); + info->ea_size.out.write_time = nt_time_to_unix(info2->generic.out.write_time); info->ea_size.out.size = info2->generic.out.size; info->ea_size.out.alloc_size = info2->generic.out.alloc_size; info->ea_size.out.attrib = info2->generic.out.attrib; diff --git a/source4/ntvfs/simple/svfs_util.c b/source4/ntvfs/simple/svfs_util.c index 598b85f1ad..11e70d72c2 100644 --- a/source4/ntvfs/simple/svfs_util.c +++ b/source4/ntvfs/simple/svfs_util.c @@ -180,9 +180,9 @@ uint16 svfs_unix_to_dos_attrib(mode_t mode) /* build a file_id from a stat struct */ -large_t svfs_file_id(struct stat *st) +uint64_t svfs_file_id(struct stat *st) { - large_t ret = st->st_ino; + uint64_t ret = st->st_ino; ret <<= 32; ret |= st->st_dev; return ret; diff --git a/source4/rpc_server/echo/rpc_echo.c b/source4/rpc_server/echo/rpc_echo.c index 25ac28a664..c4e1256841 100644 --- a/source4/rpc_server/echo/rpc_echo.c +++ b/source4/rpc_server/echo/rpc_echo.c @@ -84,13 +84,11 @@ static NTSTATUS echo_TestCall2(struct dcesrv_call_state *dce_call, TALLOC_CTX *m r->out.info->info3.v = 30; break; case 4: - r->out.info->info4.v.low = 40; - r->out.info->info4.v.high = 0; + r->out.info->info4.v = 40; break; case 5: r->out.info->info5.v1 = 50; - r->out.info->info5.v2.low = 60; - r->out.info->info5.v2.high = 0; + r->out.info->info5.v2 = 60; break; case 6: r->out.info->info6.v1 = 70; @@ -98,8 +96,7 @@ static NTSTATUS echo_TestCall2(struct dcesrv_call_state *dce_call, TALLOC_CTX *m break; case 7: r->out.info->info7.v1 = 80; - r->out.info->info7.info4.v.low = 90; - r->out.info->info7.info4.v.high = 0; + r->out.info->info7.info4.v = 90; break; default: return NT_STATUS_INVALID_LEVEL; diff --git a/source4/rpc_server/netlogon/dcerpc_netlogon.c b/source4/rpc_server/netlogon/dcerpc_netlogon.c index 1dab39ebc1..d4e60771ba 100644 --- a/source4/rpc_server/netlogon/dcerpc_netlogon.c +++ b/source4/rpc_server/netlogon/dcerpc_netlogon.c @@ -423,7 +423,8 @@ static NTSTATUS netr_ServerPasswordSet(struct dcesrv_call_state *dce_call, TALLO msg_set_pw, NULL, /* Don't have plaintext */ NULL, &newNtHash, - False /* This is not considered a password change */); + False /* This is not considered a password change */, + NULL); if (!NT_STATUS_IS_OK(nt_status)) { samdb_close(sam_ctx); diff --git a/source4/rpc_server/samr/dcesrv_samr.c b/source4/rpc_server/samr/dcesrv_samr.c index 0db3a4ff6a..7592c479fa 100644 --- a/source4/rpc_server/samr/dcesrv_samr.c +++ b/source4/rpc_server/samr/dcesrv_samr.c @@ -1715,8 +1715,8 @@ static NTSTATUS samr_SetUserInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX /* the set password levels are handled separately */ case 24: - status = samr_set_password(a_state->sam_ctx, - dce_call, + status = samr_set_password(dce_call, + a_state->sam_ctx, a_state->account_dn, a_state->domain_state->domain_dn, mem_ctx, msg, diff --git a/source4/rpc_server/samr/samdb.c b/source4/rpc_server/samr/samdb.c index c7a2f770c0..1d5b90a22d 100644 --- a/source4/rpc_server/samr/samdb.c +++ b/source4/rpc_server/samr/samdb.c @@ -233,6 +233,32 @@ uint_t samdb_search_uint(void *ctx, } /* + search the sam for a single signed 64 bit integer attribute in exactly 1 record +*/ +int64_t samdb_search_int64(void *ctx, + TALLOC_CTX *mem_ctx, + int64_t default_value, + const char *basedn, + const char *attr_name, + const char *format, ...) +{ + va_list ap; + int count; + struct ldb_message **res; + const char * const attrs[2] = { attr_name, NULL }; + + va_start(ap, format); + count = samdb_search_v(ctx, mem_ctx, basedn, &res, attrs, format, ap); + va_end(ap); + + if (count != 1) { + return default_value; + } + + return samdb_result_int64(res[0], attr_name, default_value); +} + +/* search the sam for multipe records each giving a single string attribute return the number of matches, or -1 on error */ @@ -289,6 +315,14 @@ uint_t samdb_result_uint(struct ldb_message *msg, const char *attr, uint_t defau } /* + pull a (signed) int64 from a result set. +*/ +int64_t samdb_result_int64(struct ldb_message *msg, const char *attr, int64_t default_value) +{ + return ldb_msg_find_int64(msg, attr, default_value); +} + +/* pull a string from a result set. */ const char *samdb_result_string(struct ldb_message *msg, const char *attr, @@ -350,11 +384,11 @@ NTTIME samdb_result_nttime(struct ldb_message *msg, const char *attr, const char } /* - pull a double (really a large integer) from a result set. + pull a uint64_t from a result set. */ -double samdb_result_double(struct ldb_message *msg, const char *attr, double default_value) +uint64_t samdb_result_uint64(struct ldb_message *msg, const char *attr, uint64_t default_value) { - return ldb_msg_find_double(msg, attr, default_value); + return ldb_msg_find_uint64(msg, attr, default_value); } @@ -365,17 +399,20 @@ double samdb_result_double(struct ldb_message *msg, const char *attr, double def NTTIME samdb_result_allow_pwd_change(void *ctx, TALLOC_CTX *mem_ctx, const char *domain_dn, struct ldb_message *msg, const char *attr) { - double attr_time = samdb_result_double(msg, attr, 0); - if (attr_time > 0) { - const char *minPwdAge = samdb_search_string(ctx, mem_ctx, NULL, "minPwdAge", - "dn=%s", domain_dn); - if (minPwdAge) { - /* yes, this is a -= not a += as minPwdAge is stored as the negative - of the number of 100-nano-seconds */ - attr_time -= strtod(minPwdAge, NULL); - } + uint64_t attr_time = samdb_result_uint64(msg, attr, 0); + int64_t minPwdAge; + + if (attr_time == 0) { + return 0; } - return nttime_from_double_nt(attr_time); + + minPwdAge = samdb_search_int64(ctx, mem_ctx, 0, "minPwdAge", "dn=%s", domain_dn); + + /* yes, this is a -= not a += as minPwdAge is stored as the negative + of the number of 100-nano-seconds */ + attr_time -= minPwdAge; + + return attr_time; } /* @@ -385,17 +422,21 @@ NTTIME samdb_result_allow_pwd_change(void *ctx, TALLOC_CTX *mem_ctx, NTTIME samdb_result_force_pwd_change(void *ctx, TALLOC_CTX *mem_ctx, const char *domain_dn, struct ldb_message *msg, const char *attr) { - double attr_time = samdb_result_double(msg, attr, 0); - if (attr_time > 0) { - const char *maxPwdAge = samdb_search_string(ctx, mem_ctx, NULL, "maxPwdAge", - "dn=%s", domain_dn); - if (!maxPwdAge || strcmp(maxPwdAge, "0") == 0) { - attr_time = 0; - } else { - attr_time -= strtod(maxPwdAge, NULL); - } + uint64_t attr_time = samdb_result_uint64(msg, attr, 0); + int64_t maxPwdAge; + + if (attr_time == 0) { + return 0; } - return nttime_from_double_nt(attr_time); + + maxPwdAge = samdb_search_int64(ctx, mem_ctx, 0, "maxPwdAge", "dn=%s", domain_dn); + if (maxPwdAge == 0) { + attr_time = 0; + } else { + attr_time -= maxPwdAge; + } + + return attr_time; } /* @@ -721,12 +762,22 @@ int samdb_msg_add_uint(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg, } /* - add a double element to a message (actually a large integer) + add a (signed) int64_t element to a message +*/ +int samdb_msg_add_int64(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg, + const char *attr_name, int64_t v) +{ + const char *s = talloc_asprintf(mem_ctx, "%lld", v); + return samdb_msg_add_string(ctx, mem_ctx, msg, attr_name, s); +} + +/* + add a uint64_t element to a message */ -int samdb_msg_add_double(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg, - const char *attr_name, double v) +int samdb_msg_add_uint64(void *ctx, TALLOC_CTX *mem_ctx, struct ldb_message *msg, + const char *attr_name, uint64_t v) { - const char *s = talloc_asprintf(mem_ctx, "%.0f", v); + const char *s = talloc_asprintf(mem_ctx, "%llu", v); return samdb_msg_add_string(ctx, mem_ctx, msg, attr_name, s); } diff --git a/source4/rpc_server/samr/samr_password.c b/source4/rpc_server/samr/samr_password.c index 5b99e04fab..812e0c69b9 100644 --- a/source4/rpc_server/samr/samr_password.c +++ b/source4/rpc_server/samr/samr_password.c @@ -109,7 +109,8 @@ NTSTATUS samr_ChangePasswordUser(struct dcesrv_call_state *dce_call, TALLOC_CTX status = samdb_set_password(a_state->sam_ctx, mem_ctx, a_state->account_dn, a_state->domain_state->domain_dn, - &mod, NULL, &new_lmPwdHash, &new_ntPwdHash, True); + &mod, NULL, &new_lmPwdHash, &new_ntPwdHash, + True, NULL); if (!NT_STATUS_IS_OK(status)) { return status; } @@ -210,7 +211,7 @@ NTSTATUS samr_OemChangePasswordUser2(struct dcesrv_call_state *dce_call, TALLOC_ user_dn, domain_dn, &mod, new_pass, NULL, NULL, - True); + True, NULL); if (!NT_STATUS_IS_OK(status)) { samdb_close(sam_ctx); return status; @@ -241,10 +242,158 @@ NTSTATUS samr_ChangePasswordUser2(struct dcesrv_call_state *dce_call, TALLOC_CTX /* samr_ChangePasswordUser3 */ -NTSTATUS samr_ChangePasswordUser3(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +NTSTATUS samr_ChangePasswordUser3(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, struct samr_ChangePasswordUser3 *r) -{ - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); +{ + NTSTATUS status; + char new_pass[512]; + uint32 new_pass_len; + void *sam_ctx = NULL; + const char *user_dn, *domain_dn = NULL; + int ret; + struct ldb_message **res, mod; + const char * const attrs[] = { "objectSid", "ntPwdHash", NULL }; + const char * const dom_attrs[] = { "minPwdLength", "pwdHistoryLength", + "pwdProperties", "minPwdAge", "maxPwdAge", + NULL }; + const char *domain_sid; + struct samr_Hash *ntPwdHash; + struct samr_DomInfo1 *dominfo; + struct samr_ChangeReject *reject; + uint32 reason = 0; + + ZERO_STRUCT(r->out); + + if (r->in.nt_password == NULL || + r->in.nt_verifier == NULL) { + status = NT_STATUS_INVALID_PARAMETER; + goto failed; + } + + /* this call doesn't take a policy handle, so we need to open + the sam db from scratch */ + sam_ctx = samdb_connect(); + if (sam_ctx == NULL) { + status = NT_STATUS_INVALID_SYSTEM_SERVICE; + goto failed; + } + + /* we need the users dn and the domain dn (derived from the + user SID). We also need the current lm and nt password hashes + in order to decrypt the incoming passwords */ + ret = samdb_search(sam_ctx, + mem_ctx, NULL, &res, attrs, + "(&(sAMAccountName=%s)(objectclass=user))", + r->in.account->name); + if (ret != 1) { + status = NT_STATUS_NO_SUCH_USER; + goto failed; + } + + user_dn = res[0]->dn; + + ret = samdb_result_hashes(mem_ctx, res[0], "ntPwdHash", &ntPwdHash); + if (ret != 1) { + status = NT_STATUS_WRONG_PASSWORD; + goto failed; + } + + /* decrypt the password we have been given */ + SamOEMhash(r->in.nt_password->data, ntPwdHash->hash, 516); + + if (!decode_pw_buffer(r->in.nt_password->data, new_pass, sizeof(new_pass), + &new_pass_len, STR_UNICODE)) { + DEBUG(3,("samr: failed to decode password buffer\n")); + status = NT_STATUS_WRONG_PASSWORD; + goto failed; + } + + /* work out the domain dn */ + domain_sid = samdb_result_sid_prefix(mem_ctx, res[0], "objectSid"); + if (domain_sid == NULL) { + status = NT_STATUS_NO_SUCH_DOMAIN; + goto failed; + } + + domain_dn = samdb_search_string(sam_ctx, mem_ctx, NULL, "dn", + "(objectSid=%s)", domain_sid); + if (!domain_dn) { + status = NT_STATUS_INTERNAL_DB_CORRUPTION; + goto failed; + } + + + ZERO_STRUCT(mod); + mod.dn = talloc_strdup(mem_ctx, user_dn); + if (!mod.dn) { + status = NT_STATUS_NO_MEMORY; + goto failed; + } + + /* set the password - samdb needs to know both the domain and user DNs, + so the domain password policy can be used */ + status = samdb_set_password(sam_ctx, mem_ctx, + user_dn, domain_dn, + &mod, new_pass, + NULL, NULL, + True, &reason); + if (!NT_STATUS_IS_OK(status)) { + goto failed; + } + + /* modify the samdb record */ + ret = samdb_replace(sam_ctx, mem_ctx, &mod); + if (ret != 0) { + status = NT_STATUS_UNSUCCESSFUL; + goto failed; + } + + samdb_close(sam_ctx); + return NT_STATUS_OK; + +failed: + if (sam_ctx) { + samdb_close(sam_ctx); + } + + /* on failure we need to fill in the reject reasons */ + dominfo = talloc_p(mem_ctx, struct samr_DomInfo1); + if (dominfo == NULL) { + return NT_STATUS_NO_MEMORY; + } + reject = talloc_p(mem_ctx, struct samr_ChangeReject); + if (reject == NULL) { + return NT_STATUS_NO_MEMORY; + } + + ZERO_STRUCTP(dominfo); + ZERO_STRUCTP(reject); + + reject->reason = reason; + + r->out.dominfo = dominfo; + r->out.reject = reject; + + if (!domain_dn) { + return status; + } + + ret = samdb_search(sam_ctx, + mem_ctx, NULL, &res, dom_attrs, + "dn=%s", domain_dn); + if (ret != 1) { + status = NT_STATUS_NO_SUCH_USER; + goto failed; + } + + dominfo->min_pwd_len = samdb_result_uint(res[0], "minPwdLength", 0); + dominfo->password_properties = samdb_result_uint(res[0], "pwdProperties", 0); + dominfo->password_history = samdb_result_uint(res[0], "pwdHistoryLength", 0); + dominfo->max_password_age = samdb_result_int64(res[0], "maxPwdAge", 0); + dominfo->min_password_age = samdb_result_int64(res[0], "minPwdAge", 0); + + return status; } @@ -269,12 +418,13 @@ BOOL samdb_password_complexity_ok(const char *pass) changes (as is needed by some of the set user info levels) */ NTSTATUS samdb_set_password(void *ctx, TALLOC_CTX *mem_ctx, - const char *user_dn, const char *domain_dn, - struct ldb_message *mod, - const char *new_pass, - struct samr_Hash *lmNewHash, - struct samr_Hash *ntNewHash, - BOOL user_change) + const char *user_dn, const char *domain_dn, + struct ldb_message *mod, + const char *new_pass, + struct samr_Hash *lmNewHash, + struct samr_Hash *ntNewHash, + BOOL user_change, + uint32 *reject_reason) { const char * const user_attrs[] = { "userAccountControl", "lmPwdHistory", "ntPwdHistory", "unicodePwd", @@ -284,7 +434,8 @@ NTSTATUS samdb_set_password(void *ctx, TALLOC_CTX *mem_ctx, "maxPwdAge", "minPwdAge", "minPwdLength", "pwdLastSet", NULL }; const char *unicodePwd; - double minPwdAge, pwdLastSet; + NTTIME pwdLastSet; + int64_t minPwdAge; uint_t minPwdLength, pwdProperties, pwdHistoryLength; uint_t userAccountControl, badPwdCount; struct samr_Hash *lmPwdHistory, *ntPwdHistory, lmPwdHash, ntPwdHash; @@ -295,12 +446,10 @@ NTSTATUS samdb_set_password(void *ctx, TALLOC_CTX *mem_ctx, int count; time_t now = time(NULL); NTTIME now_nt; - double now_double; int i; /* we need to know the time to compute password age */ unix_to_nt_time(&now_nt, now); - now_double = nttime_to_double_nt(now_nt); /* pull all the user parameters */ count = samdb_search(ctx, mem_ctx, NULL, &res, user_attrs, "dn=%s", user_dn); @@ -316,7 +465,7 @@ NTSTATUS samdb_set_password(void *ctx, TALLOC_CTX *mem_ctx, "ntPwdHistory", &ntPwdHistory); lmPwdHash = samdb_result_hash(res[0], "lmPwdHash"); ntPwdHash = samdb_result_hash(res[0], "ntPwdHash"); - pwdLastSet = samdb_result_double(res[0], "pwdLastSet", 0); + pwdLastSet = samdb_result_uint64(res[0], "pwdLastSet", 0); /* pull the domain parameters */ count = samdb_search(ctx, mem_ctx, NULL, &res, domain_attrs, "dn=%s", domain_dn); @@ -326,17 +475,23 @@ NTSTATUS samdb_set_password(void *ctx, TALLOC_CTX *mem_ctx, pwdProperties = samdb_result_uint(res[0], "pwdProperties", 0); pwdHistoryLength = samdb_result_uint(res[0], "pwdHistoryLength", 0); minPwdLength = samdb_result_uint(res[0], "minPwdLength", 0); - minPwdAge = samdb_result_double(res[0], "minPwdAge", 0); + minPwdAge = samdb_result_int64(res[0], "minPwdAge", 0); if (new_pass) { /* check the various password restrictions */ if (minPwdLength > str_charnum(new_pass)) { + if (reject_reason) { + *reject_reason = SAMR_REJECT_TOO_SHORT; + } return NT_STATUS_PASSWORD_RESTRICTION; } /* possibly check password complexity */ if (pwdProperties & DOMAIN_PASSWORD_COMPLEX && !samdb_password_complexity_ok(new_pass)) { + if (reject_reason) { + *reject_reason = SAMR_REJECT_COMPLEXITY; + } return NT_STATUS_PASSWORD_RESTRICTION; } @@ -351,25 +506,40 @@ NTSTATUS samdb_set_password(void *ctx, TALLOC_CTX *mem_ctx, if (user_change) { /* are all password changes disallowed? */ if (pwdProperties & DOMAIN_REFUSE_PASSWORD_CHANGE) { + if (reject_reason) { + *reject_reason = SAMR_REJECT_OTHER; + } return NT_STATUS_PASSWORD_RESTRICTION; } /* can this user change password? */ if (userAccountControl & UF_PASSWD_CANT_CHANGE) { + if (reject_reason) { + *reject_reason = SAMR_REJECT_OTHER; + } return NT_STATUS_PASSWORD_RESTRICTION; } /* yes, this is a minus. The ages are in negative 100nsec units! */ - if (pwdLastSet - minPwdAge > now_double) { + if (pwdLastSet - minPwdAge > now_nt) { + if (reject_reason) { + *reject_reason = SAMR_REJECT_OTHER; + } return NT_STATUS_PASSWORD_RESTRICTION; } /* check the immediately past password */ if (pwdHistoryLength > 0) { if (lmNewHash && memcmp(lmNewHash->hash, lmPwdHash.hash, 16) == 0) { + if (reject_reason) { + *reject_reason = SAMR_REJECT_COMPLEXITY; + } return NT_STATUS_PASSWORD_RESTRICTION; } if (ntNewHash && memcmp(ntNewHash->hash, ntPwdHash.hash, 16) == 0) { + if (reject_reason) { + *reject_reason = SAMR_REJECT_COMPLEXITY; + } return NT_STATUS_PASSWORD_RESTRICTION; } } @@ -380,23 +550,38 @@ NTSTATUS samdb_set_password(void *ctx, TALLOC_CTX *mem_ctx, if (pwdHistoryLength > 0) { if (unicodePwd && new_pass && strcmp(unicodePwd, new_pass) == 0) { + if (reject_reason) { + *reject_reason = SAMR_REJECT_COMPLEXITY; + } return NT_STATUS_PASSWORD_RESTRICTION; } if (lmNewHash && memcmp(lmNewHash->hash, lmPwdHash.hash, 16) == 0) { + if (reject_reason) { + *reject_reason = SAMR_REJECT_COMPLEXITY; + } return NT_STATUS_PASSWORD_RESTRICTION; } if (ntNewHash && memcmp(ntNewHash->hash, ntPwdHash.hash, 16) == 0) { + if (reject_reason) { + *reject_reason = SAMR_REJECT_COMPLEXITY; + } return NT_STATUS_PASSWORD_RESTRICTION; } } for (i=0; lmNewHash && i<lmPwdHistory_len;i++) { if (memcmp(lmNewHash->hash, lmPwdHistory[i].hash, 16) == 0) { + if (reject_reason) { + *reject_reason = SAMR_REJECT_COMPLEXITY; + } return NT_STATUS_PASSWORD_RESTRICTION; } } for (i=0; ntNewHash && i<ntPwdHistory_len;i++) { if (memcmp(ntNewHash->hash, ntPwdHistory[i].hash, 16) == 0) { + if (reject_reason) { + *reject_reason = SAMR_REJECT_COMPLEXITY; + } return NT_STATUS_PASSWORD_RESTRICTION; } } @@ -425,7 +610,7 @@ NTSTATUS samdb_set_password(void *ctx, TALLOC_CTX *mem_ctx, CHECK_RET(samdb_msg_add_delete(ctx, mem_ctx, mod, "unicodePwd")); } - CHECK_RET(samdb_msg_add_double(ctx, mem_ctx, mod, "pwdLastSet", now_double)); + CHECK_RET(samdb_msg_add_uint64(ctx, mem_ctx, mod, "pwdLastSet", now_nt)); if (pwdHistoryLength == 0) { CHECK_RET(samdb_msg_add_delete(ctx, mem_ctx, mod, "lmPwdHistory")); @@ -509,6 +694,7 @@ NTSTATUS samr_set_password(struct dcesrv_call_state *dce_call, account_dn, domain_dn, msg, new_pass, NULL, NULL, - False /* This is a password set, not change */); + False /* This is a password set, not change */, + NULL); } diff --git a/source4/smb_server/negprot.c b/source4/smb_server/negprot.c index 253dc1d7a4..43dc5094df 100644 --- a/source4/smb_server/negprot.c +++ b/source4/smb_server/negprot.c @@ -256,13 +256,11 @@ static void reply_nt1(struct request_context *req, uint16 choice) capabilities |= CAP_UNIX; } - if (lp_large_readwrite() && (SMB_OFF_T_BITS == 64)) { + if (lp_large_readwrite()) { capabilities |= CAP_LARGE_READX | CAP_LARGE_WRITEX | CAP_W2K_SMBS; } - if (SMB_OFF_T_BITS >= 64) { - capabilities |= CAP_LARGE_FILES; - } + capabilities |= CAP_LARGE_FILES; if (lp_readraw() && lp_writeraw()) { capabilities |= CAP_RAW_MODE; @@ -320,7 +318,7 @@ static void reply_nt1(struct request_context *req, uint16 choice) SIVAL(req->out.vwv+1, VWV(5), 0x10000); /* raw size. full 64k */ SIVAL(req->out.vwv+1, VWV(7), req->smb->pid); /* session key */ SIVAL(req->out.vwv+1, VWV(9), capabilities); - push_nttime(req->out.vwv+1, VWV(11), &nttime); + push_nttime(req->out.vwv+1, VWV(11), nttime); SSVALS(req->out.vwv+1,VWV(15), req->smb->negotiate.zone_offset/60); if (!negotiate_spnego) { diff --git a/source4/smb_server/reply.c b/source4/smb_server/reply.c index 073ee956ca..eab71c519c 100644 --- a/source4/smb_server/reply.c +++ b/source4/smb_server/reply.c @@ -672,13 +672,7 @@ void reply_readbraw(struct request_context *req) /* the 64 bit varient */ if (req->in.wct == 10) { uint32 offset_high = IVAL(req->in.vwv, VWV(8)); -#ifdef LARGE_SMB_OFF_T io.readbraw.in.offset |= (((SMB_OFF_T)offset_high) << 32); -#else - if (offset_high != 0) { - goto failed; - } -#endif } /* before calling the backend we setup the raw buffer. This @@ -884,14 +878,7 @@ void reply_read_and_X(struct request_context *req) /* the 64 bit varient */ if (req->in.wct == 12) { uint32 offset_high = IVAL(req->in.vwv, VWV(10)); -#ifdef LARGE_SMB_OFF_T - io->readx.in.offset |= (((SMB_OFF_T)offset_high) << 32); -#else - if (offset_high != 0) { - req_reply_error(req, NT_STATUS_FOOBAR); - return; - } -#endif + io->readx.in.offset |= (((uint64_t)offset_high) << 32); } /* setup the reply packet assuming the maximum possible read */ @@ -1079,14 +1066,7 @@ void reply_write_and_X(struct request_context *req) if (req->in.wct == 14) { uint32 offset_high = IVAL(req->in.vwv, VWV(12)); uint16 count_high = SVAL(req->in.vwv, VWV(9)); -#ifdef LARGE_SMB_OFF_T - io->writex.in.offset |= (((SMB_OFF_T)offset_high) << 32); -#else - if (offset_high != 0) { - req_reply_error(req, NT_STATUS_FOOBAR); - return; - } -#endif + io->writex.in.offset |= (((uint64_t)offset_high) << 32); io->writex.in.count |= ((uint32)count_high) << 16; } @@ -1788,13 +1768,8 @@ void reply_lockingX(struct request_context *req) lck->lockx.in.locks[i].count = IVAL(p, 6); } if (ofs_high != 0 || count_high != 0) { -#ifdef LARGE_SMB_OFF_T - lck->lockx.in.locks[i].count |= ((SMB_OFF_T)count_high) << 32; - lck->lockx.in.locks[i].offset |= ((SMB_OFF_T)ofs_high) << 32; -#else - req_reply_error(req, NT_STATUS_FOOBAR); - return; -#endif + lck->lockx.in.locks[i].count |= ((uint64_t)count_high) << 32; + lck->lockx.in.locks[i].offset |= ((uint64_t)ofs_high) << 32; } p += lck_size; } @@ -2204,10 +2179,10 @@ static void reply_ntcreate_and_X_send(struct request_context *req) /* the rest of the parameters are not aligned! */ SSVAL(req->out.vwv, 5, io->ntcreatex.out.fnum); SIVAL(req->out.vwv, 7, io->ntcreatex.out.create_action); - push_nttime(req->out.vwv, 11, &io->ntcreatex.out.create_time); - push_nttime(req->out.vwv, 19, &io->ntcreatex.out.access_time); - push_nttime(req->out.vwv, 27, &io->ntcreatex.out.write_time); - push_nttime(req->out.vwv, 35, &io->ntcreatex.out.change_time); + push_nttime(req->out.vwv, 11, io->ntcreatex.out.create_time); + push_nttime(req->out.vwv, 19, io->ntcreatex.out.access_time); + push_nttime(req->out.vwv, 27, io->ntcreatex.out.write_time); + push_nttime(req->out.vwv, 35, io->ntcreatex.out.change_time); SIVAL(req->out.vwv, 43, io->ntcreatex.out.attrib); SBVAL(req->out.vwv, 47, io->ntcreatex.out.alloc_size); SBVAL(req->out.vwv, 55, io->ntcreatex.out.size); diff --git a/source4/smb_server/trans2.c b/source4/smb_server/trans2.c index 3a8124bb3b..4ea8bdf55c 100644 --- a/source4/smb_server/trans2.c +++ b/source4/smb_server/trans2.c @@ -260,7 +260,7 @@ static NTSTATUS trans2_qfsinfo(struct request_context *req, struct smb_trans2 *t trans2_setup_reply(req, trans, 0, 18, 0); - push_nttime(trans->out.data.data, 0, &fsinfo.volume_info.out.create_time); + push_nttime(trans->out.data.data, 0, fsinfo.volume_info.out.create_time); SIVAL(trans->out.data.data, 8, fsinfo.volume_info.out.serial_number); trans2_append_data_string(req, trans, &fsinfo.volume_info.out.volume_name, @@ -408,10 +408,10 @@ static NTSTATUS trans2_fileinfo_fill(struct request_context *req, struct smb_tra trans2_setup_reply(req, trans, 2, 40, 0); SSVAL(trans->out.params.data, 0, 0); - push_nttime(trans->out.data.data, 0, &st->basic_info.out.create_time); - push_nttime(trans->out.data.data, 8, &st->basic_info.out.access_time); - push_nttime(trans->out.data.data, 16, &st->basic_info.out.write_time); - push_nttime(trans->out.data.data, 24, &st->basic_info.out.change_time); + push_nttime(trans->out.data.data, 0, st->basic_info.out.create_time); + push_nttime(trans->out.data.data, 8, st->basic_info.out.access_time); + push_nttime(trans->out.data.data, 16, st->basic_info.out.write_time); + push_nttime(trans->out.data.data, 24, st->basic_info.out.change_time); SIVAL(trans->out.data.data, 32, st->basic_info.out.attrib); SIVAL(trans->out.data.data, 36, 0); /* padding */ return NT_STATUS_OK; @@ -445,10 +445,10 @@ static NTSTATUS trans2_fileinfo_fill(struct request_context *req, struct smb_tra trans2_setup_reply(req, trans, 2, 56, 0); SSVAL(trans->out.params.data, 0, 0); - push_nttime(trans->out.data.data, 0, &st->network_open_information.out.create_time); - push_nttime(trans->out.data.data, 8, &st->network_open_information.out.access_time); - push_nttime(trans->out.data.data, 16, &st->network_open_information.out.write_time); - push_nttime(trans->out.data.data, 24, &st->network_open_information.out.change_time); + push_nttime(trans->out.data.data, 0, st->network_open_information.out.create_time); + push_nttime(trans->out.data.data, 8, st->network_open_information.out.access_time); + push_nttime(trans->out.data.data, 16, st->network_open_information.out.write_time); + push_nttime(trans->out.data.data, 24, st->network_open_information.out.change_time); SBVAL(trans->out.data.data, 32, st->network_open_information.out.alloc_size); SBVAL(trans->out.data.data, 40, st->network_open_information.out.size); SIVAL(trans->out.data.data, 48, st->network_open_information.out.attrib); @@ -550,10 +550,10 @@ static NTSTATUS trans2_fileinfo_fill(struct request_context *req, struct smb_tra trans2_setup_reply(req, trans, 2, 72, 0); SSVAL(trans->out.params.data, 0, 0); - push_nttime(trans->out.data.data, 0, &st->all_info.out.create_time); - push_nttime(trans->out.data.data, 8, &st->all_info.out.access_time); - push_nttime(trans->out.data.data, 16, &st->all_info.out.write_time); - push_nttime(trans->out.data.data, 24, &st->all_info.out.change_time); + push_nttime(trans->out.data.data, 0, st->all_info.out.create_time); + push_nttime(trans->out.data.data, 8, st->all_info.out.access_time); + push_nttime(trans->out.data.data, 16, st->all_info.out.write_time); + push_nttime(trans->out.data.data, 24, st->all_info.out.change_time); SIVAL(trans->out.data.data, 32, st->all_info.out.attrib); SBVAL(trans->out.data.data, 40, st->all_info.out.alloc_size); SBVAL(trans->out.data.data, 48, st->all_info.out.size); @@ -930,10 +930,10 @@ static void find_fill_info(struct request_context *req, trans2_grow_data(req, trans, ofs + 64); data = trans->out.data.data + ofs; SIVAL(data, 4, file->directory_info.file_index); - push_nttime(data, 8, &file->directory_info.create_time); - push_nttime(data, 16, &file->directory_info.access_time); - push_nttime(data, 24, &file->directory_info.write_time); - push_nttime(data, 32, &file->directory_info.change_time); + push_nttime(data, 8, file->directory_info.create_time); + push_nttime(data, 16, file->directory_info.access_time); + push_nttime(data, 24, file->directory_info.write_time); + push_nttime(data, 32, file->directory_info.change_time); SBVAL(data, 40, file->directory_info.size); SBVAL(data, 48, file->directory_info.alloc_size); SIVAL(data, 56, file->directory_info.attrib); @@ -947,10 +947,10 @@ static void find_fill_info(struct request_context *req, trans2_grow_data(req, trans, ofs + 68); data = trans->out.data.data + ofs; SIVAL(data, 4, file->full_directory_info.file_index); - push_nttime(data, 8, &file->full_directory_info.create_time); - push_nttime(data, 16, &file->full_directory_info.access_time); - push_nttime(data, 24, &file->full_directory_info.write_time); - push_nttime(data, 32, &file->full_directory_info.change_time); + push_nttime(data, 8, file->full_directory_info.create_time); + push_nttime(data, 16, file->full_directory_info.access_time); + push_nttime(data, 24, file->full_directory_info.write_time); + push_nttime(data, 32, file->full_directory_info.change_time); SBVAL(data, 40, file->full_directory_info.size); SBVAL(data, 48, file->full_directory_info.alloc_size); SIVAL(data, 56, file->full_directory_info.attrib); @@ -975,10 +975,10 @@ static void find_fill_info(struct request_context *req, trans2_grow_data(req, trans, ofs + 94); data = trans->out.data.data + ofs; SIVAL(data, 4, file->both_directory_info.file_index); - push_nttime(data, 8, &file->both_directory_info.create_time); - push_nttime(data, 16, &file->both_directory_info.access_time); - push_nttime(data, 24, &file->both_directory_info.write_time); - push_nttime(data, 32, &file->both_directory_info.change_time); + push_nttime(data, 8, file->both_directory_info.create_time); + push_nttime(data, 16, file->both_directory_info.access_time); + push_nttime(data, 24, file->both_directory_info.write_time); + push_nttime(data, 32, file->both_directory_info.change_time); SBVAL(data, 40, file->both_directory_info.size); SBVAL(data, 48, file->both_directory_info.alloc_size); SIVAL(data, 56, file->both_directory_info.attrib); @@ -999,10 +999,10 @@ static void find_fill_info(struct request_context *req, trans2_grow_data(req, trans, ofs + 80); data = trans->out.data.data + ofs; SIVAL(data, 4, file->id_full_directory_info.file_index); - push_nttime(data, 8, &file->id_full_directory_info.create_time); - push_nttime(data, 16, &file->id_full_directory_info.access_time); - push_nttime(data, 24, &file->id_full_directory_info.write_time); - push_nttime(data, 32, &file->id_full_directory_info.change_time); + push_nttime(data, 8, file->id_full_directory_info.create_time); + push_nttime(data, 16, file->id_full_directory_info.access_time); + push_nttime(data, 24, file->id_full_directory_info.write_time); + push_nttime(data, 32, file->id_full_directory_info.change_time); SBVAL(data, 40, file->id_full_directory_info.size); SBVAL(data, 48, file->id_full_directory_info.alloc_size); SIVAL(data, 56, file->id_full_directory_info.attrib); @@ -1019,10 +1019,10 @@ static void find_fill_info(struct request_context *req, trans2_grow_data(req, trans, ofs + 104); data = trans->out.data.data + ofs; SIVAL(data, 4, file->id_both_directory_info.file_index); - push_nttime(data, 8, &file->id_both_directory_info.create_time); - push_nttime(data, 16, &file->id_both_directory_info.access_time); - push_nttime(data, 24, &file->id_both_directory_info.write_time); - push_nttime(data, 32, &file->id_both_directory_info.change_time); + push_nttime(data, 8, file->id_both_directory_info.create_time); + push_nttime(data, 16, file->id_both_directory_info.access_time); + push_nttime(data, 24, file->id_both_directory_info.write_time); + push_nttime(data, 32, file->id_both_directory_info.change_time); SBVAL(data, 40, file->id_both_directory_info.size); SBVAL(data, 48, file->id_both_directory_info.alloc_size); SIVAL(data, 56, file->id_both_directory_info.attrib); diff --git a/source4/torture/gentest.c b/source4/torture/gentest.c index 32dd763b26..5c5bdf5955 100644 --- a/source4/torture/gentest.c +++ b/source4/torture/gentest.c @@ -1031,12 +1031,12 @@ again: } while(0) #define CHECK_NTTIMES_EQUAL(field) do { \ - if (ABS(nt_time_to_unix(&parm[0].field) - \ - nt_time_to_unix(&parm[1].field)) > time_skew() && \ + if (ABS(nt_time_to_unix(parm[0].field) - \ + nt_time_to_unix(parm[1].field)) > time_skew() && \ !ignore_pattern(#field)) { \ printf("Mismatch in %s - 0x%x 0x%x\n", #field, \ - (int)nt_time_to_unix(&parm[0].field), \ - (int)nt_time_to_unix(&parm[1].field)); \ + (int)nt_time_to_unix(parm[0].field), \ + (int)nt_time_to_unix(parm[1].field)); \ return False; \ } \ } while(0) diff --git a/source4/torture/locktest.c b/source4/torture/locktest.c index cfc3d95cde..99dcf9fd47 100644 --- a/source4/torture/locktest.c +++ b/source4/torture/locktest.c @@ -55,7 +55,7 @@ struct record { enum lock_op lock_op; enum brl_type lock_type; char conn, f; - SMB_BIG_UINT start, len; + uint64_t start, len; char needed; }; @@ -166,8 +166,8 @@ static BOOL test_one(struct cli_state *cli[NSERVERS][NCONNECTIONS], { unsigned conn = rec->conn; unsigned f = rec->f; - SMB_BIG_UINT start = rec->start; - SMB_BIG_UINT len = rec->len; + uint64_t start = rec->start; + uint64_t len = rec->len; enum brl_type op = rec->lock_type; int server; BOOL ret[NSERVERS]; diff --git a/source4/torture/raw/close.c b/source4/torture/raw/close.c index 0180f43dd2..e2221946a0 100644 --- a/source4/torture/raw/close.c +++ b/source4/torture/raw/close.c @@ -77,10 +77,10 @@ BOOL torture_raw_close(int dummy) status = smb_raw_pathinfo(cli->tree, mem_ctx, &finfo); CHECK_STATUS(status, NT_STATUS_OK); - if (basetime != nt_time_to_unix(&finfo.all_info.out.write_time)) { + if (basetime != nt_time_to_unix(finfo.all_info.out.write_time)) { printf("Incorrect write time on file - %s - %s\n", timestring(mem_ctx, basetime), - nt_time_string(mem_ctx, &finfo.all_info.out.write_time)); + nt_time_string(mem_ctx, finfo.all_info.out.write_time)); dump_all_info(mem_ctx, &finfo); ret = False; } diff --git a/source4/torture/raw/open.c b/source4/torture/raw/open.c index f559632f23..6b85b243d5 100644 --- a/source4/torture/raw/open.c +++ b/source4/torture/raw/open.c @@ -84,7 +84,7 @@ static const char *rdwr_string(enum rdwr_mode m) status = smb_raw_pathinfo(cli->tree, mem_ctx, &finfo); \ CHECK_STATUS(status, NT_STATUS_OK); \ t1 = t & ~1; \ - t2 = nt_time_to_unix(&finfo.all_info.out.field) & ~1; \ + t2 = nt_time_to_unix(finfo.all_info.out.field) & ~1; \ if (ABS(t1-t2) > 2) { \ printf("(%d) wrong time for field %s %s - %s\n", \ __LINE__, #field, \ @@ -101,11 +101,11 @@ static const char *rdwr_string(enum rdwr_mode m) status = smb_raw_pathinfo(cli->tree, mem_ctx, &finfo); \ CHECK_STATUS(status, NT_STATUS_OK); \ t2 = finfo.all_info.out.field; \ - if (!nt_time_equal(&t, &t2)) { \ + if (t != t2) { \ printf("(%d) wrong time for field %s %s - %s\n", \ __LINE__, #field, \ - nt_time_string(mem_ctx, &t), \ - nt_time_string(mem_ctx, &t2)); \ + nt_time_string(mem_ctx, t), \ + nt_time_string(mem_ctx, t2)); \ dump_all_info(mem_ctx, &finfo); \ ret = False; \ }} while (0) diff --git a/source4/torture/raw/qfileinfo.c b/source4/torture/raw/qfileinfo.c index 9c1c3a9e5c..14f30db97f 100644 --- a/source4/torture/raw/qfileinfo.c +++ b/source4/torture/raw/qfileinfo.c @@ -66,7 +66,7 @@ static struct { /* compare a dos time (2 second resolution) to a nt time */ -static int dos_nt_time_cmp(time_t t, const NTTIME *nt) +static int dos_nt_time_cmp(time_t t, NTTIME nt) { time_t t2 = nt_time_to_unix(nt); if (ABS(t2 - t) <= 2) return 0; @@ -158,7 +158,7 @@ BOOL torture_raw_qfileinfo(int dummy) int fnum; const char *fname = "\\torture_qfileinfo.txt"; NTTIME correct_time; - large_t correct_size; + uint64_t correct_size; uint32 correct_attrib; const char *correct_name; BOOL skip_streams = False; @@ -320,54 +320,54 @@ BOOL torture_raw_qfileinfo(int dummy) s1 = fnum_find(sname); \ if (s1 && memcmp(&s1->stype.out.tfield, &correct_time, sizeof(correct_time)) != 0) { \ printf("(%d) handle %s/%s incorrect - %s should be %s\n", __LINE__, #stype, #tfield, \ - nt_time_string(mem_ctx, &s1->stype.out.tfield), \ - nt_time_string(mem_ctx, &correct_time)); \ + nt_time_string(mem_ctx, s1->stype.out.tfield), \ + nt_time_string(mem_ctx, correct_time)); \ ret = False; \ } \ s1 = fname_find(sname); \ if (s1 && memcmp(&s1->stype.out.tfield, &correct_time, sizeof(correct_time)) != 0) { \ printf("(%d) path %s/%s incorrect - %s should be %s\n", __LINE__, #stype, #tfield, \ - nt_time_string(mem_ctx, &s1->stype.out.tfield), \ - nt_time_string(mem_ctx, &correct_time)); \ + nt_time_string(mem_ctx, s1->stype.out.tfield), \ + nt_time_string(mem_ctx, correct_time)); \ ret = False; \ }} while (0) #define TIME_CHECK_DOS(sname, stype, tfield) do { \ s1 = fnum_find(sname); \ - if (s1 && dos_nt_time_cmp(s1->stype.out.tfield, &correct_time) != 0) { \ + if (s1 && dos_nt_time_cmp(s1->stype.out.tfield, correct_time) != 0) { \ printf("(%d) handle %s/%s incorrect - %s should be %s\n", __LINE__, #stype, #tfield, \ timestring(mem_ctx, s1->stype.out.tfield), \ - nt_time_string(mem_ctx, &correct_time)); \ + nt_time_string(mem_ctx, correct_time)); \ ret = False; \ } \ s1 = fname_find(sname); \ - if (s1 && dos_nt_time_cmp(s1->stype.out.tfield, &correct_time) != 0) { \ + if (s1 && dos_nt_time_cmp(s1->stype.out.tfield, correct_time) != 0) { \ printf("(%d) path %s/%s incorrect - %s should be %s\n", __LINE__, #stype, #tfield, \ timestring(mem_ctx, s1->stype.out.tfield), \ - nt_time_string(mem_ctx, &correct_time)); \ + nt_time_string(mem_ctx, correct_time)); \ ret = False; \ }} while (0) #define TIME_CHECK_UNX(sname, stype, tfield) do { \ s1 = fnum_find(sname); \ - if (s1 && unx_nt_time_cmp(s1->stype.out.tfield, &correct_time) != 0) { \ + if (s1 && unx_nt_time_cmp(s1->stype.out.tfield, correct_time) != 0) { \ printf("(%d) handle %s/%s incorrect - %s should be %s\n", __LINE__, #stype, #tfield, \ timestring(mem_ctx, s1->stype.out.tfield), \ - nt_time_string(mem_ctx, &correct_time)); \ + nt_time_string(mem_ctx, correct_time)); \ ret = False; \ } \ s1 = fname_find(sname); \ - if (s1 && unx_nt_time_cmp(s1->stype.out.tfield, &correct_time) != 0) { \ + if (s1 && unx_nt_time_cmp(s1->stype.out.tfield, correct_time) != 0) { \ printf("(%d) path %s/%s incorrect - %s should be %s\n", __LINE__, #stype, #tfield, \ timestring(mem_ctx, s1->stype.out.tfield), \ - nt_time_string(mem_ctx, &correct_time)); \ + nt_time_string(mem_ctx, correct_time)); \ ret = False; \ }} while (0) /* now check that all the times that are supposed to be equal are correct */ s1 = fnum_find("BASIC_INFO"); correct_time = s1->basic_info.out.create_time; - printf("create_time: %s\n", nt_time_string(mem_ctx, &correct_time)); + printf("create_time: %s\n", nt_time_string(mem_ctx, correct_time)); TIME_CHECK_NT ("BASIC_INFO", basic_info, create_time); TIME_CHECK_NT ("BASIC_INFORMATION", basic_info, create_time); @@ -379,7 +379,7 @@ BOOL torture_raw_qfileinfo(int dummy) s1 = fnum_find("BASIC_INFO"); correct_time = s1->basic_info.out.access_time; - printf("access_time: %s\n", nt_time_string(mem_ctx, &correct_time)); + printf("access_time: %s\n", nt_time_string(mem_ctx, correct_time)); TIME_CHECK_NT ("BASIC_INFO", basic_info, access_time); TIME_CHECK_NT ("BASIC_INFORMATION", basic_info, access_time); @@ -391,7 +391,7 @@ BOOL torture_raw_qfileinfo(int dummy) s1 = fnum_find("BASIC_INFO"); correct_time = s1->basic_info.out.write_time; - printf("write_time : %s\n", nt_time_string(mem_ctx, &correct_time)); + printf("write_time : %s\n", nt_time_string(mem_ctx, correct_time)); TIME_CHECK_NT ("BASIC_INFO", basic_info, write_time); TIME_CHECK_NT ("BASIC_INFORMATION", basic_info, write_time); @@ -404,7 +404,7 @@ BOOL torture_raw_qfileinfo(int dummy) s1 = fnum_find("BASIC_INFO"); correct_time = s1->basic_info.out.change_time; - printf("change_time: %s\n", nt_time_string(mem_ctx, &correct_time)); + printf("change_time: %s\n", nt_time_string(mem_ctx, correct_time)); TIME_CHECK_NT ("BASIC_INFO", basic_info, change_time); TIME_CHECK_NT ("BASIC_INFORMATION", basic_info, change_time); diff --git a/source4/torture/raw/read.c b/source4/torture/raw/read.c index 3e9547856c..5e1d055e22 100644 --- a/source4/torture/raw/read.c +++ b/source4/torture/raw/read.c @@ -502,9 +502,8 @@ static BOOL test_readx(struct cli_state *cli, TALLOC_CTX *mem_ctx) status = smb_raw_read(cli->tree, &io); CHECK_STATUS(status, NT_STATUS_FILE_LOCK_CONFLICT); -#ifdef LARGE_SMB_OFF_T printf("Trying large offset read\n"); - io.readx.in.offset = ((SMB_BIG_UINT)0x2) << 32; + io.readx.in.offset = ((uint64_t)0x2) << 32; io.readx.in.mincnt = 10; io.readx.in.maxcnt = 10; status = smb_raw_read(cli->tree, &io); @@ -520,7 +519,6 @@ static BOOL test_readx(struct cli_state *cli, TALLOC_CTX *mem_ctx) status = smb_raw_read(cli->tree, &io); CHECK_STATUS(status, NT_STATUS_OK); CHECK_VALUE(io.readx.out.nread, 0); -#endif done: cli_close(cli->tree, fnum); @@ -684,16 +682,14 @@ static BOOL test_readbraw(struct cli_state *cli, TALLOC_CTX *mem_ctx) CHECK_STATUS(status, NT_STATUS_OK); CHECK_VALUE(io.readbraw.out.nread, 0); -#ifdef LARGE_SMB_OFF_T printf("Trying large offset read\n"); - io.readbraw.in.offset = ((SMB_BIG_UINT)0x2) << 32; + io.readbraw.in.offset = ((uint64_t)0x2) << 32; io.readbraw.in.mincnt = 10; io.readbraw.in.maxcnt = 10; io.readbraw.in.timeout = 0; status = smb_raw_read(cli->tree, &io); CHECK_STATUS(status, NT_STATUS_OK); CHECK_VALUE(io.readbraw.out.nread, 0); -#endif done: cli_close(cli->tree, fnum); diff --git a/source4/torture/raw/search.c b/source4/torture/raw/search.c index 57c6eb2bb9..ae5d8c34a8 100644 --- a/source4/torture/raw/search.c +++ b/source4/torture/raw/search.c @@ -197,11 +197,11 @@ static BOOL test_one_file(struct cli_state *cli, TALLOC_CTX *mem_ctx) #define CHECK_TIME(name, sname1, field1, v, sname2, field2) do { \ s = find(name); \ if (s) { \ - if (s->sname1.field1 != (~1 & nt_time_to_unix(&v.sname2.out.field2))) { \ + if (s->sname1.field1 != (~1 & nt_time_to_unix(v.sname2.out.field2))) { \ printf("(%d) %s/%s [%s] != %s/%s [%s]\n", \ __LINE__, \ #sname1, #field1, timestring(mem_ctx, s->sname1.field1), \ - #sname2, #field2, nt_time_string(mem_ctx, &v.sname2.out.field2)); \ + #sname2, #field2, nt_time_string(mem_ctx, v.sname2.out.field2)); \ ret = False; \ } \ }} while (0) @@ -209,11 +209,11 @@ static BOOL test_one_file(struct cli_state *cli, TALLOC_CTX *mem_ctx) #define CHECK_NTTIME(name, sname1, field1, v, sname2, field2) do { \ s = find(name); \ if (s) { \ - if (memcmp(&s->sname1.field1, &v.sname2.out.field2, sizeof(NTTIME))) { \ + if (s->sname1.field1 != v.sname2.out.field2) { \ printf("(%d) %s/%s [%s] != %s/%s [%s]\n", \ __LINE__, \ - #sname1, #field1, nt_time_string(mem_ctx, &s->sname1.field1), \ - #sname2, #field2, nt_time_string(mem_ctx, &v.sname2.out.field2)); \ + #sname1, #field1, nt_time_string(mem_ctx, s->sname1.field1), \ + #sname2, #field2, nt_time_string(mem_ctx, v.sname2.out.field2)); \ ret = False; \ } \ }} while (0) diff --git a/source4/torture/raw/setfileinfo.c b/source4/torture/raw/setfileinfo.c index 3a49c8baff..fb2e0633e8 100644 --- a/source4/torture/raw/setfileinfo.c +++ b/source4/torture/raw/setfileinfo.c @@ -152,13 +152,13 @@ BOOL torture_raw_sfileinfo(int dummy) #define CHECK_TIME(call, stype, field, value) do { \ CHECK1(call); \ - if (NT_STATUS_IS_OK(status) && NT_STATUS_IS_OK(status2) && nt_time_to_unix(&finfo2.stype.out.field) != value) { \ + if (NT_STATUS_IS_OK(status) && NT_STATUS_IS_OK(status2) && nt_time_to_unix(finfo2.stype.out.field) != value) { \ printf("(%d) %s - %s/%s should be 0x%x - 0x%x\n", __LINE__, \ call_name, #stype, #field, \ (uint_t)value, \ - (uint_t)nt_time_to_unix(&finfo2.stype.out.field)); \ + (uint_t)nt_time_to_unix(finfo2.stype.out.field)); \ printf("\t%s", timestring(mem_ctx, value)); \ - printf("\t%s\n", nt_time_string(mem_ctx, &finfo2.stype.out.field)); \ + printf("\t%s\n", nt_time_string(mem_ctx, finfo2.stype.out.field)); \ dump_all_info(mem_ctx, &finfo1); \ }} while (0) diff --git a/source4/torture/raw/write.c b/source4/torture/raw/write.c index eb20fe3b84..18c992b8c6 100644 --- a/source4/torture/raw/write.c +++ b/source4/torture/raw/write.c @@ -187,7 +187,7 @@ static BOOL test_write(struct cli_state *cli, TALLOC_CTX *mem_ctx) status = smb_raw_write(cli->tree, &io); CHECK_STATUS(status, NT_STATUS_OK); CHECK_VALUE(io.write.out.nwritten, 4000); - CHECK_ALL_INFO(io.write.in.count + (SMB_BIG_UINT)io.write.in.offset, size); + CHECK_ALL_INFO(io.write.in.count + (uint64_t)io.write.in.offset, size); memset(buf, 0, maxsize); if (cli_read(cli->tree, fnum, buf, io.write.in.offset, 4000) != 4000) { @@ -337,7 +337,7 @@ static BOOL test_writex(struct cli_state *cli, TALLOC_CTX *mem_ctx) status = smb_raw_write(cli->tree, &io); CHECK_STATUS(status, NT_STATUS_OK); CHECK_VALUE(io.writex.out.nwritten, 4000); - CHECK_ALL_INFO(io.writex.in.count + (SMB_BIG_UINT)io.writex.in.offset, size); + CHECK_ALL_INFO(io.writex.in.count + (uint64_t)io.writex.in.offset, size); memset(buf, 0, maxsize); if (cli_read(cli->tree, fnum, buf, io.writex.in.offset, 4000) != 4000) { @@ -352,12 +352,12 @@ static BOOL test_writex(struct cli_state *cli, TALLOC_CTX *mem_ctx) setup_buffer(buf, seed+1, maxsize); io.writex.in.fnum = fnum; io.writex.in.count = 4000; - io.writex.in.offset = ((SMB_BIG_UINT)1) << i; + io.writex.in.offset = ((uint64_t)1) << i; io.writex.in.data = buf; status = smb_raw_write(cli->tree, &io); CHECK_STATUS(status, NT_STATUS_OK); CHECK_VALUE(io.writex.out.nwritten, 4000); - CHECK_ALL_INFO(io.writex.in.count + (SMB_BIG_UINT)io.writex.in.offset, size); + CHECK_ALL_INFO(io.writex.in.count + (uint64_t)io.writex.in.offset, size); memset(buf, 0, maxsize); if (cli_read(cli->tree, fnum, buf, io.writex.in.offset, 4000) != 4000) { @@ -500,7 +500,7 @@ static BOOL test_writeunlock(struct cli_state *cli, TALLOC_CTX *mem_ctx) status = smb_raw_write(cli->tree, &io); CHECK_STATUS(status, NT_STATUS_OK); CHECK_VALUE(io.writeunlock.out.nwritten, 4000); - CHECK_ALL_INFO(io.writeunlock.in.count + (SMB_BIG_UINT)io.writeunlock.in.offset, size); + CHECK_ALL_INFO(io.writeunlock.in.count + (uint64_t)io.writeunlock.in.offset, size); memset(buf, 0, maxsize); if (cli_read(cli->tree, fnum, buf, io.writeunlock.in.offset, 4000) != 4000) { @@ -650,7 +650,7 @@ static BOOL test_writeclose(struct cli_state *cli, TALLOC_CTX *mem_ctx) status = smb_raw_write(cli->tree, &io); CHECK_STATUS(status, NT_STATUS_OK); CHECK_VALUE(io.writeclose.out.nwritten, 4000); - CHECK_ALL_INFO(io.writeclose.in.count + (SMB_BIG_UINT)io.writeclose.in.offset, size); + CHECK_ALL_INFO(io.writeclose.in.count + (uint64_t)io.writeclose.in.offset, size); fnum = cli_open(cli->tree, fname, O_RDWR, DENY_NONE); io.writeclose.in.fnum = fnum; diff --git a/source4/torture/rpc/netlogon.c b/source4/torture/rpc/netlogon.c index 524af42e01..25c0496a00 100644 --- a/source4/torture/rpc/netlogon.c +++ b/source4/torture/rpc/netlogon.c @@ -1081,7 +1081,7 @@ static BOOL test_SetPassword(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx) /* we remember the sequence numbers so we can easily do a DatabaseDelta */ -static struct ULONG8 sequence_nums[3]; +static uint64_t sequence_nums[3]; /* try a netlogon DatabaseSync @@ -1133,10 +1133,9 @@ static BOOL test_DatabaseSync(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx) r.out.delta_enum_array->delta_enum[0].delta_union.domain) { sequence_nums[r.in.database_id] = r.out.delta_enum_array->delta_enum[0].delta_union.domain->sequence_num; - printf("\tsequence_nums[%d]=0x%08x%08x\n", + printf("\tsequence_nums[%d]=%llu\n", r.in.database_id, - sequence_nums[r.in.database_id].high, - sequence_nums[r.in.database_id].low); + sequence_nums[r.in.database_id]); } } while (NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES)); } @@ -1170,13 +1169,13 @@ static BOOL test_DatabaseDeltas(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx) r.in.database_id = database_ids[i]; r.in.sequence_num = sequence_nums[r.in.database_id]; - if (r.in.sequence_num.low == 0) continue; + if (r.in.sequence_num == 0) continue; - r.in.sequence_num.low -= 1; + r.in.sequence_num -= 1; - printf("Testing DatabaseDeltas of id %d at %d\n", - r.in.database_id, r.in.sequence_num.low); + printf("Testing DatabaseDeltas of id %d at %llu\n", + r.in.database_id, r.in.sequence_num); do { creds_client_authenticator(&creds, &r.in.credential); @@ -1193,8 +1192,7 @@ static BOOL test_DatabaseDeltas(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx) printf("Credential chaining failed\n"); } - r.in.sequence_num.low++; - r.in.sequence_num.high = 0; + r.in.sequence_num++; } while (NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES)); } diff --git a/source4/torture/rpc/samr.c b/source4/torture/rpc/samr.c index 14c124af78..73d599209c 100644 --- a/source4/torture/rpc/samr.c +++ b/source4/torture/rpc/samr.c @@ -862,7 +862,7 @@ static BOOL test_ChangePasswordUser3(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct samr_CryptPassword nt_pass, lm_pass; struct samr_Hash nt_verifier, lm_verifier; char *oldpass = *password; - char *newpass = samr_rand_pass(mem_ctx); + char *newpass = samr_rand_pass(mem_ctx); uint8 old_nt_hash[16], new_nt_hash[16]; uint8 old_lm_hash[16], new_lm_hash[16]; @@ -878,7 +878,7 @@ static BOOL test_ChangePasswordUser3(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, E_deshash(newpass, new_lm_hash); encode_pw_buffer(lm_pass.data, newpass, STR_UNICODE); - SamOEMhash(lm_pass.data, old_lm_hash, 516); + SamOEMhash(lm_pass.data, old_nt_hash, 516); E_old_pw_hash(new_lm_hash, old_lm_hash, lm_verifier.hash); encode_pw_buffer(nt_pass.data, newpass, STR_UNICODE); diff --git a/source4/torture/torture_util.c b/source4/torture/torture_util.c index 96579999c3..5b9e36ea71 100644 --- a/source4/torture/torture_util.c +++ b/source4/torture/torture_util.c @@ -217,7 +217,7 @@ BOOL wire_bad_flags(WIRE_STRING *str, int flags) */ BOOL nt_time_equal(NTTIME *t1, NTTIME *t2) { - return t1->low == t2->low && t1->high == t2->high; + return *t1 == *t2; } /* @@ -225,10 +225,10 @@ BOOL nt_time_equal(NTTIME *t1, NTTIME *t2) */ void dump_all_info(TALLOC_CTX *mem_ctx, union smb_fileinfo *finfo) { - d_printf("\tcreate_time: %s\n", nt_time_string(mem_ctx, &finfo->all_info.out.create_time)); - d_printf("\taccess_time: %s\n", nt_time_string(mem_ctx, &finfo->all_info.out.access_time)); - d_printf("\twrite_time: %s\n", nt_time_string(mem_ctx, &finfo->all_info.out.write_time)); - d_printf("\tchange_time: %s\n", nt_time_string(mem_ctx, &finfo->all_info.out.change_time)); + d_printf("\tcreate_time: %s\n", nt_time_string(mem_ctx, finfo->all_info.out.create_time)); + d_printf("\taccess_time: %s\n", nt_time_string(mem_ctx, finfo->all_info.out.access_time)); + d_printf("\twrite_time: %s\n", nt_time_string(mem_ctx, finfo->all_info.out.write_time)); + d_printf("\tchange_time: %s\n", nt_time_string(mem_ctx, finfo->all_info.out.change_time)); d_printf("\tattrib: 0x%x\n", finfo->all_info.out.attrib); d_printf("\talloc_size: %llu\n", (unsigned long long)finfo->all_info.out.alloc_size); d_printf("\tsize: %llu\n", (unsigned long long)finfo->all_info.out.size); |