On Thu, 2009-02-12 at 00:48 +0900, Ian Kent wrote:
> Update use of CLOEXEC functionality to cover setmntent(3)
> calls as well.
Pleas ignore this false start.
Oops.
> ---
>
> CHANGELOG | 1 +
> include/automount.h | 20 ++++++++++++++++++++
> lib/mounts.c | 8 ++++----
> 3 files changed, 25 insertions(+), 4 deletions(-)
>
> diff --git a/CHANGELOG b/CHANGELOG
> index af77b55..eb4a189 100644
> --- a/CHANGELOG
> +++ b/CHANGELOG
> @@ -8,6 +8,7 @@
> - make hash table scale to thousands of entries (Paul Wankadia,
> Valerie Aurora Henson).
> - clear the quoted flag after each character from program map input.
> +- use CLOEXEC flag for setmntent also.
>
> 4/11/2008 autofs-5.0.4
> -----------------------
> diff --git a/include/automount.h b/include/automount.h
> index 005d209..46cb6c6 100644
> --- a/include/automount.h
> +++ b/include/automount.h
> @@ -581,5 +581,25 @@ static inline FILE *open_fopen_r(const char *path)
> return f;
> }
>
> +static inline FILE *open_setmntent_r(const char *table)
> +{
> + FILE *tab;
> +
> +#if defined(O_CLOEXEC) && defined(SOCK_CLOEXEC)
> + if (cloexec_works != -1) {
> + tab = setmntent(table, "re");
> + if (tab != NULL) {
> + check_cloexec(fileno(tab));
> + return tab;
> + }
> + }
> +#endif
> + tab = fopen(table, "r");
> + if (tab == NULL)
> + return NULL;
> + check_cloexec(fileno(tab));
> + return tab;
> +}
> +
> #endif
>
> diff --git a/lib/mounts.c b/lib/mounts.c
> index ce4691b..b98e1a4 100644
> --- a/lib/mounts.c
> +++ b/lib/mounts.c
> @@ -218,7 +218,7 @@ struct mnt_list *get_mnt_list(const char *table, const
> char *path, int include)
> if (!path || !pathlen || pathlen > PATH_MAX)
> return NULL;
>
> - tab = setmntent(table, "r");
> + tab = open_setmntent_r(table);
> if (!tab) {
> char *estr = strerror_r(errno, buf, PATH_MAX - 1);
> logerr("setmntent: %s", estr);
> @@ -415,7 +415,7 @@ static int table_is_mounted(const char *table, const char
> *path, unsigned int ty
> if (!path || !pathlen || pathlen >= PATH_MAX)
> return 0;
>
> - tab = setmntent(table, "r");
> + tab = open_setmntent_r(table);
> if (!tab) {
> char *estr = strerror_r(errno, buf, PATH_MAX - 1);
> logerr("setmntent: %s", estr);
> @@ -489,7 +489,7 @@ int has_fstab_option(const char *opt)
> if (!opt)
> return 0;
>
> - tab = setmntent(_PATH_MNTTAB, "r");
> + tab = open_setmntent_r(_PATH_MNTTAB);
> if (!tab) {
> char *estr = strerror_r(errno, buf, PATH_MAX - 1);
> logerr("setmntent: %s", estr);
> @@ -668,7 +668,7 @@ struct mnt_list *tree_make_mnt_tree(const char *table,
> const char *path)
> size_t plen;
> int eq;
>
> - tab = setmntent(table, "r");
> + tab = open_setmntent_r(table);
> if (!tab) {
> char *estr = strerror_r(errno, buf, PATH_MAX - 1);
> logerr("setmntent: %s", estr);
>
> _______________________________________________
> autofs mailing list
> [email protected]
> http://linux.kernel.org/mailman/listinfo/autofs
_______________________________________________
autofs mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/autofs