mirror of
https://github.com/samba-team/samba.git
synced 2025-01-13 13:18:06 +03:00
make sure that apps can't close one of the internal smbw file
descriptors by catching close attempts on those fds and returning
EBADF.
(This used to be commit 9d863fb168
)
This commit is contained in:
parent
f9881e8e74
commit
4140f2bfc1
@ -2407,11 +2407,13 @@ void smbw_setup_shared(void);
|
||||
char *smbw_getshared(const char *name);
|
||||
void smbw_setshared(const char *name, const char *val);
|
||||
int smbw_setenv(const char *name, const char *value);
|
||||
int smbw_shared_fd(int fd);
|
||||
|
||||
/*The following definitions come from smbwrapper/smbw.c */
|
||||
|
||||
void smbw_init(void);
|
||||
int smbw_fd(int fd);
|
||||
int smbw_local_fd(int fd);
|
||||
ino_t smbw_inode(const char *name);
|
||||
void clean_fname(char *name);
|
||||
char *smbw_parse_path(const char *fname, char *server, char *share, char *path);
|
||||
|
@ -212,3 +212,10 @@ int smbw_setenv(const char *name, const char *value)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*****************************************************************
|
||||
return true if the passed fd is the SMBW_HANDLE
|
||||
*****************************************************************/
|
||||
int smbw_shared_fd(int fd)
|
||||
{
|
||||
return (shared_fd && shared_fd == fd);
|
||||
}
|
||||
|
@ -125,6 +125,25 @@ int smbw_fd(int fd)
|
||||
return smbw_file_bmap && bitmap_query(smbw_file_bmap, fd);
|
||||
}
|
||||
|
||||
/*****************************************************
|
||||
determine if a file descriptor is an internal smbw fd
|
||||
*******************************************************/
|
||||
int smbw_local_fd(int fd)
|
||||
{
|
||||
struct smbw_server *srv;
|
||||
|
||||
smbw_init();
|
||||
|
||||
if (smbw_busy) return 0;
|
||||
if (smbw_shared_fd(fd)) return 1;
|
||||
|
||||
for (srv=smbw_srvs;srv;srv=srv->next) {
|
||||
if (srv->cli.fd == fd) return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************
|
||||
a crude inode number generator
|
||||
*******************************************************/
|
||||
@ -736,7 +755,6 @@ ssize_t smbw_write(int fd, void *buf, size_t count)
|
||||
|
||||
file = smbw_file(fd);
|
||||
if (!file) {
|
||||
DEBUG(3,("bad fd in read\n"));
|
||||
errno = EBADF;
|
||||
smbw_busy--;
|
||||
return -1;
|
||||
@ -768,7 +786,6 @@ ssize_t smbw_pwrite(int fd, void *buf, size_t count, off_t ofs)
|
||||
|
||||
file = smbw_file(fd);
|
||||
if (!file) {
|
||||
DEBUG(3,("bad fd in read\n"));
|
||||
errno = EBADF;
|
||||
smbw_busy--;
|
||||
return -1;
|
||||
|
@ -145,6 +145,10 @@
|
||||
if (smbw_fd(fd)) {
|
||||
return smbw_close(fd);
|
||||
}
|
||||
if (smbw_local_fd(fd)) {
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return real_close(fd);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user