r16443: add push code for SMB2 levels
authorStefan Metzmacher <metze@samba.org>
Wed, 21 Jun 2006 18:26:17 +0000 (18:26 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:09:14 +0000 (14:09 -0500)
metze

source/smb_server/smb/trans2.c

index 4a39cad69a3abfd64c1f7298ceeeb8c6a48e162f..ae2887341ae1c0b05c06cf6bdca8c2b3049cdcb3 100644 (file)
@@ -583,6 +583,7 @@ static NTSTATUS trans2_push_passthru_fileinfo(TALLOC_CTX *mem_ctx,
                                              int default_str_flags)
 {
        uint_t i;
+       size_t list_size;
 
        switch (level) {
        case RAW_FILEINFO_BASIC_INFORMATION:
@@ -739,6 +740,41 @@ static NTSTATUS trans2_push_passthru_fileinfo(TALLOC_CTX *mem_ctx,
                }
                return NT_STATUS_OK;
 
+       case RAW_FILEINFO_SMB2_ALL_EAS:
+               list_size = ea_list_size_chained(st->all_eas.out.num_eas,
+                                                st->all_eas.out.eas);
+               TRANS2_CHECK(trans2_grow_data(mem_ctx, blob, list_size));
+
+               ea_put_list_chained(blob->data,
+                                   st->all_eas.out.num_eas,
+                                   st->all_eas.out.eas);
+               return NT_STATUS_OK;
+
+       case RAW_FILEINFO_SMB2_ALL_INFORMATION:
+               TRANS2_CHECK(trans2_grow_data(mem_ctx, blob, 0x64));
+
+               push_nttime(blob->data, 0x00, st->all_info2.out.create_time);
+               push_nttime(blob->data, 0x08, st->all_info2.out.access_time);
+               push_nttime(blob->data, 0x10, st->all_info2.out.write_time);
+               push_nttime(blob->data, 0x18, st->all_info2.out.change_time);
+               SIVAL(blob->data,       0x20, st->all_info2.out.attrib);
+               SIVAL(blob->data,       0x24, st->all_info2.out.unknown1);
+               SBVAL(blob->data,       0x28, st->all_info2.out.alloc_size);
+               SBVAL(blob->data,       0x30, st->all_info2.out.size);
+               SIVAL(blob->data,       0x38, st->all_info2.out.nlink);
+               SCVAL(blob->data,       0x3C, st->all_info2.out.delete_pending);
+               SCVAL(blob->data,       0x3D, st->all_info2.out.directory);
+               SBVAL(blob->data,       0x40, st->all_info2.out.file_id);
+               SIVAL(blob->data,       0x48, st->all_info2.out.ea_size);
+               SIVAL(blob->data,       0x4C, st->all_info2.out.access_mask);
+               SBVAL(blob->data,       0x50, st->all_info2.out.position);
+               SBVAL(blob->data,       0x58, st->all_info2.out.mode);
+               TRANS2_CHECK(trans2_append_data_string(mem_ctx, blob,
+                                                      st->all_info.out.fname.s,
+                                                      0x60, default_str_flags,
+                                                      STR_UNICODE));
+               return NT_STATUS_OK;
+
        default:
                return NT_STATUS_INVALID_LEVEL;
        }