Movatterモバイル変換
[0]ホーム
This is the mail archive of thelibc-alpha@sourceware.orgmailing list for theglibc project.
Re: [PATCH] resolv/resolv.h: allow alternative resolv.conf files
> _PATH_RESCONF really has to be a string literal, and you can't use a GNU> C extension in such a way in an installed header file.> > The environment variable would have to be ignored in AT_SECURE mode, so> you have to use __libc_secure_getenv or put it into unsecvars.h.Here is a different implementation:* it does not use any gcc extension* use __libc_secure_getenv instead of getenv* do not change installed header files.Thank you.renzo2017-08-17 Renzo Davoli <renzo@cs.unibo.it>diff --git a/resolv/res_init.c b/resolv/res_init.cindex fa46ce7813..bca60568ad 100644--- a/resolv/res_init.c+++ b/resolv/res_init.c@@ -545,7 +545,7 @@ __resolv_conf_load (struct __res_state *preinit) /* Ensure that /etc/hosts.conf has been loaded (once). */ _res_hconf_init (); - FILE *fp = fopen (_PATH_RESCONF, "rce");+ FILE *fp = fopen (__resolv_path_resconf(), "rce"); if (fp == NULL) switch (errno) {diff --git a/resolv/resolv-internal.h b/resolv/resolv-internal.hindex 32dc44777e..aa52497550 100644--- a/resolv/resolv-internal.h+++ b/resolv/resolv-internal.h@@ -97,4 +97,8 @@ int __res_nopt (struct resolv_context *, int n0, int __inet_pton_length (int af, const char *src, size_t srclen, void *); libc_hidden_proto (__inet_pton_length) +/* Return the current fileto use as resolv.conf + __PATH_RESCONF o the value of the env var PATH_RESCONF if it exists*/+const char *__resolv_path_resconf(void);+ #endif /* _RESOLV_INTERNAL_H */diff --git a/resolv/resolv_conf.c b/resolv/resolv_conf.cindex f391d30c27..9896e64cdc 100644--- a/resolv/resolv_conf.c+++ b/resolv/resolv_conf.c@@ -119,11 +119,19 @@ conf_decrement (struct resolv_conf *conf) free (conf); } +const char *__resolv_path_resconf(void) {+char *path_resconf = __libc_secure_getenv("PATH_RESCONF");+if (path_resconf)+return path_resconf;+else+return _PATH_RESCONF;+}+ struct resolv_conf * __resolv_conf_get_current (void) { struct stat64 st;- if (stat64 (_PATH_RESCONF, &st) != 0)+ if (stat64 (__resolv_path_resconf(), &st) != 0) { switch (errno) {
[8]ページ先頭