summaryrefslogtreecommitdiff
path: root/source3/smbd/trans2.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>1998-10-21 16:58:34 +0000
committerJeremy Allison <jra@samba.org>1998-10-21 16:58:34 +0000
commit6e3af45afe237790f1d7cd94ab2b22e1ca772157 (patch)
treec0870e0739564cff7c19e2a900d3c701e1ebb33a /source3/smbd/trans2.c
parentac9be4ddca99c5efae518a985b97fb1fb6374289 (diff)
downloadsamba-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.c36
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 */