summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjeremy <>2012-09-23 16:08:04 +0000
committerjeremy <>2012-09-23 16:08:04 +0000
commit0b4a0e4e11684e4650c59945fb75c66fb9b1b5ac (patch)
tree5fc6f13012f9a99328860106c8e96f6183e97233 /src
parent64dd23ac75bf38a89754b9ffbc87748f35f0ce44 (diff)
downloadopenbsd-0b4a0e4e11684e4650c59945fb75c66fb9b1b5ac.tar.gz
openbsd-0b4a0e4e11684e4650c59945fb75c66fb9b1b5ac.tar.bz2
openbsd-0b4a0e4e11684e4650c59945fb75c66fb9b1b5ac.zip
Make setenv(3) consistent with unsetenv(3), giving EINVAL if passed
an empty name, NULL pointer, or a name containing an '=' character. OK millert@, guenther@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libc/stdlib/getenv.322
-rw-r--r--src/lib/libc/stdlib/setenv.c8
2 files changed, 10 insertions, 20 deletions
diff --git a/src/lib/libc/stdlib/getenv.3 b/src/lib/libc/stdlib/getenv.3
index 8c2b633f25..f987eb13a1 100644
--- a/src/lib/libc/stdlib/getenv.3
+++ b/src/lib/libc/stdlib/getenv.3
@@ -29,9 +29,9 @@
29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30.\" SUCH DAMAGE. 30.\" SUCH DAMAGE.
31.\" 31.\"
32.\" $OpenBSD: getenv.3,v 1.17 2012/06/02 00:14:16 guenther Exp $ 32.\" $OpenBSD: getenv.3,v 1.18 2012/09/23 16:08:04 jeremy Exp $
33.\" 33.\"
34.Dd $Mdocdate: June 2 2012 $ 34.Dd $Mdocdate: September 23 2012 $
35.Dt GETENV 3 35.Dt GETENV 3
36.Os 36.Os
37.Sh NAME 37.Sh NAME
@@ -53,14 +53,6 @@
53.Sh DESCRIPTION 53.Sh DESCRIPTION
54These functions set, unset, and fetch environment variables from the host 54These functions set, unset, and fetch environment variables from the host
55.Em environment list . 55.Em environment list .
56For compatibility with differing environment conventions, the given argument
57.Fa name
58may be appended with an equal sign
59.Dq Li \&=
60followed by zero or more characters,
61and
62.Fa value
63may be prepended with an equal sign.
64.Pp 56.Pp
65The 57The
66.Fn getenv 58.Fn getenv
@@ -125,19 +117,15 @@ The
125.Fn setenv 117.Fn setenv
126or 118or
127.Fn unsetenv 119.Fn unsetenv
128function was passed a 120function was passed an empty
121.Ar name
122or a NULL pointer, or was passed a
129.Ar name 123.Ar name
130containing an 124containing an
131.Sq = 125.Sq =
132character. 126character.
133.Pp 127.Pp
134The 128The
135.Fn unsetenv
136function was passed an empty
137.Ar name
138or a NULL pointer.
139.Pp
140The
141.Fn putenv 129.Fn putenv
142function was passed a 130function was passed a
143.Ar string 131.Ar string
diff --git a/src/lib/libc/stdlib/setenv.c b/src/lib/libc/stdlib/setenv.c
index 089ab92d38..9060fdba88 100644
--- a/src/lib/libc/stdlib/setenv.c
+++ b/src/lib/libc/stdlib/setenv.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: setenv.c,v 1.13 2010/08/23 22:31:50 millert Exp $ */ 1/* $OpenBSD: setenv.c,v 1.14 2012/09/23 16:08:04 jeremy Exp $ */
2/* 2/*
3 * Copyright (c) 1987 Regents of the University of California. 3 * Copyright (c) 1987 Regents of the University of California.
4 * All rights reserved. 4 * All rights reserved.
@@ -94,14 +94,16 @@ setenv(const char *name, const char *value, int rewrite)
94 const char *np; 94 const char *np;
95 int l_value, offset = 0; 95 int l_value, offset = 0;
96 96
97 if (!name || !*name) {
98 errno = EINVAL;
99 return (-1);
100 }
97 for (np = name; *np && *np != '='; ++np) 101 for (np = name; *np && *np != '='; ++np)
98 ; 102 ;
99#ifdef notyet
100 if (*np) { 103 if (*np) {
101 errno = EINVAL; 104 errno = EINVAL;
102 return (-1); /* has `=' in name */ 105 return (-1); /* has `=' in name */
103 } 106 }
104#endif
105 107
106 l_value = strlen(value); 108 l_value = strlen(value);
107 if ((C = __findenv(name, (int)(np - name), &offset)) != NULL) { 109 if ((C = __findenv(name, (int)(np - name), &offset)) != NULL) {