summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog1
-rw-r--r--configure.in2
-rw-r--r--helper.c21
-rw-r--r--helper.h4
4 files changed, 27 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index d7ea7b761..0f069dfd1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -13,6 +13,7 @@
13 - Fix EGD problems (Thanks to Ben Taylor <bent@clark.net>) 13 - Fix EGD problems (Thanks to Ben Taylor <bent@clark.net>)
14 - Retry /dev/urandom reads interrupted by signal (report from 14 - Retry /dev/urandom reads interrupted by signal (report from
15 Robert Hardy <rhardy@webcon.net>) 15 Robert Hardy <rhardy@webcon.net>)
16 - Added a setenv replacement for systems which lack it
16 17
1719991121 1819991121
18 - OpenBSD CVS Changes: 19 - OpenBSD CVS Changes:
diff --git a/configure.in b/configure.in
index 0678fa4c8..a831b9210 100644
--- a/configure.in
+++ b/configure.in
@@ -58,7 +58,7 @@ dnl Checks for header files.
58AC_CHECK_HEADERS(pty.h endian.h paths.h lastlog.h shadow.h netgroup.h maillock.h sys/select.h sys/time.h) 58AC_CHECK_HEADERS(pty.h endian.h paths.h lastlog.h shadow.h netgroup.h maillock.h sys/select.h sys/time.h)
59 59
60dnl Checks for library functions. 60dnl Checks for library functions.
61AC_CHECK_FUNCS(openpty strlcpy strlcat mkdtemp arc4random setproctitle setlogin) 61AC_CHECK_FUNCS(openpty strlcpy strlcat mkdtemp arc4random setproctitle setlogin setenv)
62 62
63AC_CHECK_FUNC(login, 63AC_CHECK_FUNC(login,
64 [AC_DEFINE(HAVE_LOGIN)], 64 [AC_DEFINE(HAVE_LOGIN)],
diff --git a/helper.c b/helper.c
index 47e797b6c..91a78b577 100644
--- a/helper.c
+++ b/helper.c
@@ -149,3 +149,24 @@ void setproctitle(const char *fmt, ...)
149 /* FIXME */ 149 /* FIXME */
150} 150}
151#endif /* !HAVE_SETPROCTITLE */ 151#endif /* !HAVE_SETPROCTITLE */
152
153#ifndef HAVE_SETENV
154int setenv(const char *name, const char *value, int overwrite)
155{
156 char *env_string;
157 int result;
158
159 /* Don't overwrite existing env. var if overwrite is 0 */
160 if (!overwrite && (getenv(name) != NULL))
161 return(0);
162
163 env_string = xmalloc(strlen(name) + strlen(value) + 2);
164 sprintf(env_string, "%s=%s", name, value);
165
166 result = putenv(env_string);
167
168 xfree(env_string);
169
170 return(result);
171}
172#endif /* !HAVE_SETENV */
diff --git a/helper.h b/helper.h
index 0e53fac43..68e0a8530 100644
--- a/helper.h
+++ b/helper.h
@@ -47,4 +47,8 @@ void arc4random_stir(void);
47void setproctitle(const char *fmt, ...); 47void setproctitle(const char *fmt, ...);
48#endif /* !HAVE_SETPROCTITLE */ 48#endif /* !HAVE_SETPROCTITLE */
49 49
50#ifndef HAVE_SETENV
51int setenv(const char *name, const char *value, int overwrite);
52#endif /* !HAVE_SETENV */
53
50#endif /* _HELPER_H */ 54#endif /* _HELPER_H */