r3869: in the NDR encoded replPropertyMetaData attribute in ADS
authorStefan Metzmacher <metze@samba.org>
Fri, 19 Nov 2004 02:35:48 +0000 (02:35 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:05:59 +0000 (13:05 -0500)
I see a new 64 bit time field which are seconds since 1601,

this will be mapped to NTTIME by th eparsing code

+#define NTTIME_1sec NTTIME

metze
(This used to be commit db35f3b0f99943311ff8b797e8336616dab28220)

source4/build/pidl/util.pm
source4/include/smb.h
source4/librpc/ndr/ndr_basic.c

index bddce577404df069f3be56ec47764729da74f026..4f4a0d8b6e4b54cd55f159bd631076ad354eac9e 100644 (file)
@@ -207,7 +207,7 @@ sub is_scalar_type($)
     if ($type =~ /^u?int\d+/) {
            return 1;
     }
-    if ($type =~ /char|short|long|NTTIME|
+    if ($type =~ /char|short|long|NTTIME|NTTIME_1sec|
        time_t|error_status_t|boolean32|unsigned32|
        HYPER_T|wchar_t|DATA_BLOB|WERROR/x) {
            return 1;
index c70ab81611c2436d8058646b5e08946c4d01f908..1fc43fd2f3954ea70c3f105a4817b51e13ee2d97 100644 (file)
@@ -215,6 +215,8 @@ typedef struct data_blob {
 
 /* 64 bit time (100 nanosec) 1601 - cifs6.txt, section 3.5, page 30 */
 typedef uint64_t NTTIME;
+/* 64 bit time (1 sec) 1601 - in the NDR blob but mapped to NTTIME  */
+#define NTTIME_1sec NTTIME
 
 /* 8 byte aligned 'hyper' type from MS IDL */
 typedef uint64_t HYPER_T;
index 057b162ca97f31fa6c8d368703dc02dc7c748f44..f26c40e7b7c30eb1211d7abd81ce2359c91b57f6 100644 (file)
@@ -950,6 +950,26 @@ NTSTATUS ndr_pull_NTTIME(struct ndr_pull *ndr, NTTIME *t)
        return NT_STATUS_OK;
 }
 
+/*
+  push a NTTIME
+*/
+NTSTATUS ndr_push_NTTIME_1sec(struct ndr_push *ndr, NTTIME t)
+{
+       t /= 10000000;
+       NDR_CHECK(ndr_push_uint64(ndr, t));
+       return NT_STATUS_OK;
+}
+
+/*
+  pull a NTTIME
+*/
+NTSTATUS ndr_pull_NTTIME_1sec(struct ndr_pull *ndr, NTTIME *t)
+{
+       NDR_CHECK(ndr_pull_uint64(ndr, t));
+       (*t) *= 10000000;
+       return NT_STATUS_OK;
+}
+
 /*
   push a time_t
 */
@@ -997,7 +1017,10 @@ void ndr_print_int32(struct ndr_print *ndr, const char *name, int32_t v)
 
 void ndr_print_uint64(struct ndr_print *ndr, const char *name, uint64_t v)
 {
-       ndr->print(ndr, "%-25s: 0x%08x%08x", name, (uint32_t)(v >> 32), (uint32_t)(v & 0xFFFFFFFF));
+       ndr->print(ndr, "%-25s: 0x%08x%08x (%llu)", name,
+                  (uint32_t)(v >> 32),
+                  (uint32_t)(v & 0xFFFFFFFF),
+                  v);
 }
 
 void ndr_print_int64(struct ndr_print *ndr, const char *name, int64_t v)
@@ -1036,6 +1059,11 @@ void ndr_print_NTTIME(struct ndr_print *ndr, const char *name, NTTIME t)
        ndr->print(ndr, "%-25s: %s", name, nt_time_string(ndr, t));
 }
 
+void ndr_print_NTTIME_1sec(struct ndr_print *ndr, const char *name, NTTIME t)
+{
+       ndr_print_NTTIME(ndr, name, t);
+}
+
 void ndr_print_time_t(struct ndr_print *ndr, const char *name, time_t t)
 {
        if (t == (time_t)-1 || t == 0) {