From 9828aade971a152fe8cfb43d8bfeab311de03845 Mon Sep 17 00:00:00 2001
From: Craig Tiller <ctiller@google.com>
Date: Mon, 1 Feb 2016 14:07:34 -0800
Subject: [PATCH] Support falling back on older secure_getenv/getenv versions
 on older glibc

---
 include/grpc/impl/codegen/port_platform.h |  7 +------
 src/core/support/env_linux.c              | 14 +++++++++++++-
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/include/grpc/impl/codegen/port_platform.h b/include/grpc/impl/codegen/port_platform.h
index 30edbc7251..d5294b2efa 100644
--- a/include/grpc/impl/codegen/port_platform.h
+++ b/include/grpc/impl/codegen/port_platform.h
@@ -153,19 +153,14 @@
 #if __GLIBC_PREREQ(2, 10)
 #define GPR_LINUX_SOCKETUTILS 1
 #endif
-#if __GLIBC_PREREQ(2, 17)
-#define GPR_LINUX_ENV 1
-#endif
 #endif
+#define GPR_LINUX_ENV 1
 #ifndef GPR_LINUX_EVENTFD
 #define GPR_POSIX_NO_SPECIAL_WAKEUP_FD 1
 #endif
 #ifndef GPR_LINUX_SOCKETUTILS
 #define GPR_POSIX_SOCKETUTILS
 #endif
-#ifndef GPR_LINUX_ENV
-#define GPR_POSIX_ENV 1
-#endif
 #define GPR_POSIX_FILE 1
 #define GPR_POSIX_STRING 1
 #define GPR_POSIX_SUBPROCESS 1
diff --git a/src/core/support/env_linux.c b/src/core/support/env_linux.c
index 2e03365e33..183bcd2bd0 100644
--- a/src/core/support/env_linux.c
+++ b/src/core/support/env_linux.c
@@ -49,8 +49,20 @@
 
 #include "src/core/support/string.h"
 
+char *__attribute__((weak)) secure_getenv(const char *name);
+char *__attribute__((weak)) __secure_getenv(const char *name);
+
 char *gpr_getenv(const char *name) {
-  char *result = secure_getenv(name);
+  static char *(*getenv_func)(const char *) = secure_getenv;
+  if (getenv_func == NULL) {
+    getenv_func = __secure_getenv;
+    if (getenv_func == NULL) {
+      gpr_log(GPR_DEBUG,
+              "No secure_getenv. Please consider upgrading your libc.");
+      getenv_func = getenv;
+    }
+  }
+  char *result = getenv_func(name);
   return result == NULL ? result : gpr_strdup(result);
 }
 
-- 
GitLab