[GLUE] Rsync SAMBA_3_2_0 SVN r25598 in order to create the v3-2-test branch.
[samba.git] / source / libsmb / clifsinfo.c
index 2874ee6ca1cba99dfd0e7a60fcf24612f7d308d6..d2f759b1929f51091b0b9cf54e3dcb36fb677f79 100644 (file)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,8 +14,7 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
@@ -65,7 +64,7 @@ BOOL cli_unix_extensions_version(struct cli_state *cli, uint16 *pmajor, uint16 *
 
        *pmajor = SVAL(rdata,0);
        *pminor = SVAL(rdata,2);
-       *pcaplow = IVAL(rdata,4);
+       cli->posix_capabilities = *pcaplow = IVAL(rdata,4);
        *pcaphigh = IVAL(rdata,8);
 
        /* todo: but not yet needed 
@@ -79,6 +78,59 @@ cleanup:
        return ret;     
 }
 
+/****************************************************************************
+ Set UNIX extensions capabilities.
+****************************************************************************/
+                                                                                                                   
+BOOL cli_set_unix_extensions_capabilities(struct cli_state *cli, uint16 major, uint16 minor,
+                                        uint32 caplow, uint32 caphigh)
+{
+       BOOL ret = False;
+       uint16 setup;
+       char param[4];
+       char data[12];
+       char *rparam=NULL, *rdata=NULL;
+       unsigned int rparam_count=0, rdata_count=0;
+
+       setup = TRANSACT2_SETFSINFO;
+       
+       SSVAL(param,0,0);
+       SSVAL(param,2,SMB_SET_CIFS_UNIX_INFO);
+
+       SSVAL(data,0,major);
+       SSVAL(data,2,minor);
+       SIVAL(data,4,caplow);
+       SIVAL(data,8,caphigh);
+
+       if (!cli_send_trans(cli, SMBtrans2, 
+                   NULL, 
+                   0, 0,
+                   &setup, 1, 0,
+                   param, 4, 0,
+                   data, 12, 560)) {
+               goto cleanup;
+       }
+       
+       if (!cli_receive_trans(cli, SMBtrans2,
+                              &rparam, &rparam_count,
+                              &rdata, &rdata_count)) {
+               goto cleanup;
+       }
+
+       if (cli_is_error(cli)) {
+               ret = False;
+               goto cleanup;
+       } else {
+               ret = True;
+       }
+
+cleanup:
+       SAFE_FREE(rparam);
+       SAFE_FREE(rdata);
+
+       return ret;     
+}
+
 BOOL cli_get_fs_attr_info(struct cli_state *cli, uint32 *fs_attr)
 {
        BOOL ret = False;
@@ -229,7 +281,9 @@ BOOL cli_get_fs_volume_info(struct cli_state *cli, fstring volume_name, uint32 *
        }
 
        if (pdate) {
-               *pdate = interpret_long_date(rdata);
+               struct timespec ts;
+               ts = interpret_long_date(rdata);
+               *pdate = ts.tv_sec;
        }
        if (pserial_number) {
                *pserial_number = IVAL(rdata,8);