1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-26 10:04:02 +03:00

swrap: Wrap fopen to detect stale file descriptors.

Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
This commit is contained in:
Andreas Schneider 2014-10-02 07:18:48 +02:00 committed by Andreas Schneider
parent f8584abfef
commit 9731516e7f

View File

@ -337,6 +337,7 @@ struct swrap_libc_fns {
socklen_t addrlen);
int (*libc_dup)(int fd);
int (*libc_dup2)(int oldfd, int newfd);
FILE *(*libc_fopen)(const char *name, const char *mode);
#ifdef HAVE_EVENTFD
int (*libc_eventfd)(int count, int flags);
#endif
@ -645,6 +646,13 @@ static int libc_listen(int sockfd, int backlog)
return swrap.fns.libc_listen(sockfd, backlog);
}
static FILE *libc_fopen(const char *name, const char *mode)
{
swrap_load_lib_function(SWRAP_LIBC, fopen);
return swrap.fns.libc_fopen(name, mode);
}
static int libc_vopen(const char *pathname, int flags, va_list ap)
{
long int mode = 0;
@ -3065,6 +3073,29 @@ int listen(int s, int backlog)
return swrap_listen(s, backlog);
}
/****************************************************************************
* FOPEN
***************************************************************************/
static FILE *swrap_fopen(const char *name, const char *mode)
{
FILE *fp;
fp = libc_fopen(name, mode);
if (fp != NULL) {
int fd = fileno(fp);
swrap_remove_stale(fd);
}
return fp;
}
FILE *fopen(const char *name, const char *mode)
{
return swrap_fopen(name, mode);
}
/****************************************************************************
* OPEN
***************************************************************************/