r2784: - fixed alignment of ascii directory listings
authorAndrew Tridgell <tridge@samba.org>
Sat, 2 Oct 2004 12:16:46 +0000 (12:16 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:59:32 +0000 (12:59 -0500)
- fixed minimum parameter size for ascii qpathinfo call
(This used to be commit ee065ae7f92e60600966cb1d44cd0e30498b93dd)

source4/smb_server/trans2.c

index b8b303528607c855d20fb661e6f6452131356bc8..7954673a6411047e5a2043f37674d1c1fa330e87 100644 (file)
@@ -192,6 +192,18 @@ static void trans2_append_data_string(struct smbsrv_request *req,
        trans2_grow_data(req, trans, offset + ret);
 }
 
+/*
+  align the end of the data section of a trans reply on an even boundary
+*/
+static void trans2_align_data(struct smbsrv_request *req, struct smb_trans2 *trans)
+{
+       if ((trans->out.data.length & 1) == 0) {
+               return;
+       }
+       trans2_grow_data(req, trans, trans->out.data.length+1);
+       SCVAL(trans->out.data.data, trans->out.data.length-1, 0);
+}
+
 
 /*
   trans2 qfsinfo implementation
@@ -623,7 +635,7 @@ static NTSTATUS trans2_qpathinfo(struct smbsrv_request *req, struct smb_trans2 *
        uint16_t level;
 
        /* make sure we got enough parameters */
-       if (trans->in.params.length < 8) {
+       if (trans->in.params.length < 2) {
                return NT_STATUS_FOOBAR;
        }
 
@@ -997,6 +1009,7 @@ static void find_fill_info(struct smbsrv_request *req,
                                        24, STR_UNICODE | STR_LEN8BIT);
                trans2_append_data_string(req, trans, &file->both_directory_info.name, 
                                          ofs + 60, STR_TERMINATE_ASCII);
+               trans2_align_data(req, trans);
                data = trans->out.data.data + ofs;
                SIVAL(data,          0, trans->out.data.length - ofs);
                break;