diff options
author | Jeremy Allison <jra@samba.org> | 1998-10-21 16:58:34 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 1998-10-21 16:58:34 +0000 |
commit | 6e3af45afe237790f1d7cd94ab2b22e1ca772157 (patch) | |
tree | c0870e0739564cff7c19e2a900d3c701e1ebb33a /source3/smbd/trans2.c | |
parent | ac9be4ddca99c5efae518a985b97fb1fb6374289 (diff) | |
download | samba-6e3af45afe237790f1d7cd94ab2b22e1ca772157.tar.gz samba-6e3af45afe237790f1d7cd94ab2b22e1ca772157.tar.bz2 samba-6e3af45afe237790f1d7cd94ab2b22e1ca772157.zip |
Fixed mainly signed/unsigned issues found by SGI cc in -fullwarn mode.
smbd/chgpasswd.c: Fixed (my) stupid bug where I was returning stack based variables. Doh !
smbd/trans2.c: Allows SETFILEINFO as well as QFILEINFO on directory handles.
Jeremy.
(This used to be commit 0b44d27d0b5cc3948a6c2d78370ccddf1a84cd80)
Diffstat (limited to 'source3/smbd/trans2.c')
-rw-r--r-- | source3/smbd/trans2.c | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index 35bd10fb13..5b057410ca 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -1500,15 +1500,37 @@ static int call_trans2setfilepathinfo(connection_struct *conn, files_struct *fsp = file_fsp(params,0); info_level = SVAL(params,2); - CHECK_FSP(fsp,conn); - CHECK_ERROR(fsp); + if(fsp && fsp->open && fsp->is_directory) { + /* + * This is actually a SETFILEINFO on a directory + * handle (returned from an NT SMB). NT5.0 seems + * to do this call. JRA. + */ + fname = fsp->fsp_name; + unix_convert(fname,conn,0,&bad_path,&st); + if (!check_name(fname,conn) || (!VALID_STAT(st) && dos_stat(fname,&st))) { + DEBUG(3,("fileinfo of %s failed (%s)\n",fname,strerror(errno))); + if((errno == ENOENT) && bad_path) + { + unix_ERR_class = ERRDOS; + unix_ERR_code = ERRbadpath; + } + return(UNIXERROR(ERRDOS,ERRbadpath)); + } + } else { + /* + * Original code - this is an open file. + */ + CHECK_FSP(fsp,conn); + CHECK_ERROR(fsp); - fname = fsp->fsp_name; - fd = fsp->fd_ptr->fd; + fname = fsp->fsp_name; + fd = fsp->fd_ptr->fd; - if(sys_fstat(fd,&st)!=0) { - DEBUG(3,("fstat of %s failed (%s)\n", fname, strerror(errno))); - return(UNIXERROR(ERRDOS,ERRbadpath)); + if (sys_fstat(fd,&st) != 0) { + DEBUG(3,("fstat of fnum %d failed (%s)\n",fsp->fnum, strerror(errno))); + return(UNIXERROR(ERRDOS,ERRbadfid)); + } } } else { /* set path info */ |