DragonFly BSD
DragonFly submit List (threaded) for 2005-09
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: [PATCH] setenv|putenv rc checking (usr.bin)


From: "Simon 'corecode' Schubert" <corecode@xxxxxxxxxxxx>
Date: Thu, 29 Sep 2005 14:21:51 +0200

Alexey Slynko wrote:

------------------------------------------------------------------------


Index: du/du.c
===================================================================
RCS file: /mnt/share/dragonfly-cvs/src/usr.bin/du/du.c,v
retrieving revision 1.8
diff -u -r1.8 du.c
--- du/du.c	1 Sep 2005 22:19:26 -0000	1.8
+++ du/du.c	29 Sep 2005 02:12:28 -0000
@@ -155,13 +155,15 @@
 				cflag = 1;
 				break;
 			case 'h':
-				putenv("BLOCKSIZE=512");
+				if (putenv("BLOCKSIZE=512") == ENOMEM)
+					err(1, "putenv: cannot set BLOCKSIZE=512");
 				hflag = 1;
 				valp = vals_base2;
 				break;
 			case 'k':
 				hflag = 0;
-				putenv("BLOCKSIZE=1024");
+				if (putenv("BLOCKSIZE=1024") == ENOMEM)
+					err(1, "putenv: cannot set BLOCKSIZE=1024");
 				break;
 			case 'r':		 /* Compatibility. */
 				break;

maybe just warn?


Index: env/env.c
===================================================================
RCS file: /mnt/share/dragonfly-cvs/src/usr.bin/env/env.c,v
retrieving revision 1.4
diff -u -r1.4 env.c
--- env/env.c 8 Dec 2004 20:17:12 -0000 1.4
+++ env/env.c 29 Sep 2005 01:46:45 -0000
@@ -65,8 +65,8 @@
usage();
}
for (argv += optind; *argv && (p = strchr(*argv, '=')); ++argv) {
- if (setenv(*argv, ++p, 1) == -1)
- err(1, "%s", *argv);
+ if (setenv(*argv, ++p, 1) == ENOMEM)
+ err(1, "setenv: cannot set %s=%s", *argv, p);
}
if (*argv) {

not sure here.


Index: fetch/fetch.c
===================================================================
RCS file: /mnt/share/dragonfly-cvs/src/usr.bin/fetch/fetch.c,v
retrieving revision 1.5
diff -u -r1.5 fetch.c
--- fetch/fetch.c 4 Jan 2005 23:08:13 -0000 1.5
+++ fetch/fetch.c 29 Sep 2005 01:45:25 -0000
@@ -905,8 +905,10 @@
/* authentication */
if (v_tty)
fetchAuthMethod = query_auth;
- if (N_filename != NULL)
- setenv("NETRC", N_filename, 1);
+ if (N_filename != NULL) {
+ if (setenv("NETRC", N_filename, 1) == ENOMEM)
+ err(1, "setenv: cannot set NETRC=%s", N_filename);
+ }
while (argc) {
if ((p = strrchr(*argv, '/')) == NULL)

okay


Index: ldd/ldd.c
===================================================================
RCS file: /mnt/share/dragonfly-cvs/src/usr.bin/ldd/ldd.c,v
retrieving revision 1.5
diff -u -r1.5 ldd.c
--- ldd/ldd.c 24 Jul 2005 15:04:56 -0000 1.5
+++ ldd/ldd.c 29 Sep 2005 01:50:48 -0000
@@ -37,6 +37,7 @@
#include <a.out.h>
#include <dlfcn.h>
#include <err.h>
+#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
@@ -98,11 +99,16 @@
#endif
/* ld.so magic */
- setenv("LD_TRACE_LOADED_OBJECTS", "1", 1);
- if (fmt1)
- setenv("LD_TRACE_LOADED_OBJECTS_FMT1", fmt1, 1);
- if (fmt2)
- setenv("LD_TRACE_LOADED_OBJECTS_FMT2", fmt2, 1);
+ if (setenv("LD_TRACE_LOADED_OBJECTS", "1", 1) == ENOMEM)
+ err(1, "setenv: cannot set LD_TRACE_LOADED_OBJECTS=1");
+ if (fmt1) {
+ if (setenv("LD_TRACE_LOADED_OBJECTS_FMT1", fmt1, 1) == ENOMEM)
+ err(1, "setenv: cannot set LD_TRACE_LOADED_OBJECTS_FMT1=%s", fmt1);
+ }
+ if (fmt2) {
+ if (setenv("LD_TRACE_LOADED_OBJECTS_FMT2", fmt2, 1) == ENOMEM)
+ err(1, "setenv: cannot set LD_TRACE_LOADED_OBJECTS_FMT2=%s", fmt2);
+ }
rval = 0;
for ( ; argc > 0; argc--, argv++) {
@@ -180,7 +186,8 @@
continue;
}
- setenv("LD_TRACE_LOADED_OBJECTS_PROGNAME", *argv, 1);
+ if (setenv("LD_TRACE_LOADED_OBJECTS_PROGNAME", *argv, 1) == ENOMEM)
+ err(1, "setenv: cannot set LD_TRACE_LOADED_OBJECTS_PROGNAME=%s", *argv);
if (fmt1 == NULL && fmt2 == NULL)
/* Default formats */
printf("%s:\n", *argv);

okay


Index: ldd/sods.c
===================================================================
RCS file: /mnt/share/dragonfly-cvs/src/usr.bin/ldd/sods.c,v
retrieving revision 1.5
diff -u -r1.5 sods.c
--- ldd/sods.c 19 Aug 2004 23:40:15 -0000 1.5
+++ ldd/sods.c 29 Sep 2005 01:51:57 -0000
@@ -190,7 +190,7 @@
ex = (const struct exec *) file_base;
printf("%s: a_midmag = 0x%lx\n", fname, ex->a_midmag);
- printf(" magic = 0x%lx = 0%lo, netmagic = 0x%lx = 0%lo\n",
+ printf(" magic = 0x%lx = 0%lo, netmagic = 0x%ux = 0%uo\n",
N_GETMAGIC(*ex), N_GETMAGIC(*ex),
N_GETMAGIC_NET(*ex), N_GETMAGIC_NET(*ex));
Index: limits/limits.c
===================================================================
RCS file: /mnt/share/dragonfly-cvs/src/usr.bin/limits/limits.c,v
retrieving revision 1.4
diff -u -r1.4 limits.c
--- limits/limits.c 12 Jan 2005 01:20:26 -0000 1.4
+++ limits/limits.c 29 Sep 2005 01:53:36 -0000
@@ -433,8 +433,10 @@
login_close(lc);
/* set leading environment variables, like eval(1) */
- while (*argv && (p = strchr(*argv, '=')))
- (void)setenv(*argv++, ++p, 1);
+ while (*argv && (p = strchr(*argv, '='))) {
+ if (setenv(*argv++, ++p, 1) == ENOMEM)
+ err(1, "setenv: cannot set %s=%s", *argv, p);
+ }
/* Set limits */
for (rcswhich = 0; rcswhich < RLIM_NLIMITS; rcswhich++) {

same like env(1)


Index: login/login.c
===================================================================
RCS file: /mnt/share/dragonfly-cvs/src/usr.bin/login/login.c,v
retrieving revision 1.5
diff -u -r1.5 login.c
--- login/login.c 13 Jul 2005 12:34:22 -0000 1.5
+++ login/login.c 29 Sep 2005 02:13:21 -0000
@@ -656,16 +656,24 @@
exit(1);
}
- (void)setenv("SHELL", pwd->pw_shell, 1);
- (void)setenv("HOME", pwd->pw_dir, 1);
- if (term != NULL && *term != '\0')
- (void)setenv("TERM", term, 1); /* Preset overrides */
+ if (setenv("SHELL", pwd->pw_shell, 1) == ENOMEM)
+ err(1, "setenv: cannot set SHELL=%s", pwd->pw_shell);
+ if (setenv("HOME", pwd->pw_dir, 1) == ENOMEM)
+ err(1, "setenv: cannot set HOME=%s", pwd->pw_dir);
+ if (term != NULL && *term != '\0') {
+ if (setenv("TERM", term, 1) == ENOMEM) /* Preset overrides */
+ err(1, "setenv: cannot set TERM=%s", term);
+ }
else {
- (void)setenv("TERM", stypeof(tty), 0); /* Fallback doesn't */
+ if (setenv("TERM", stypeof(tty), 0) == ENOMEM) /* Fallback doesn't */
+ err(1, "setenv: cannot set TERM=%s", stypeof(tty));
}
- (void)setenv("LOGNAME", username, 1);
- (void)setenv("USER", username, 1);
- (void)setenv("PATH", rootlogin ? _PATH_STDPATH : _PATH_DEFPATH, 0);
+ if (setenv("LOGNAME", username, 1) == ENOMEM)
+ err(1, "setenv: cannot set LOGNAME=%s", username);
+ if (setenv("USER", username, 1) == ENOMEM)
+ err(1, "setenv: cannot set USER=%s", username);
+ if (setenv("PATH", rootlogin ? _PATH_STDPATH : _PATH_DEFPATH, 0) == ENOMEM)
+ err(1, "setenv: cannot set PATH=%s", rootlogin ? _PATH_STDPATH : _PATH_DEFPATH);
if (!quietlog) {
char *cw;
@@ -857,8 +865,10 @@
char **pp;
for (pp = environ_pam; *pp != NULL; pp++) {
- if (ok_to_export(*pp))
- (void) putenv(*pp);
+ if (ok_to_export(*pp)) {
+ if (putenv(*pp) == ENOMEM)
+ err(1, "putenv: cannot set %s", *pp);
+ }
free(*pp);
}
return PAM_SUCCESS;

same like login stuff before, i.e. just warn?


Index: objformat/objformat.c
===================================================================
RCS file: /mnt/share/dragonfly-cvs/src/usr.bin/objformat/objformat.c,v
retrieving revision 1.17
diff -u -r1.17 objformat.c
--- objformat/objformat.c 20 Apr 2005 21:39:00 -0000 1.17
+++ objformat/objformat.c 29 Sep 2005 02:00:47 -0000
@@ -29,6 +29,7 @@
*/
#include <err.h>
+#include <errno.h>
#include <objformat.h>
#include <stdio.h>
#include <stdlib.h>
@@ -169,7 +170,8 @@
path = strdup(objformat_path);
- setenv("OBJFORMAT", objformat, 1);
+ if (setenv("OBJFORMAT", objformat, 1) == ENOMEM)
+ err(1, "setenv: cannot set OBJFORMAT=%s", objformat);
/*
* objformat_path could be sequence of colon-separated paths.

okay


Index: su/su.c
===================================================================
RCS file: /mnt/share/dragonfly-cvs/src/usr.bin/su/su.c,v
retrieving revision 1.8
diff -u -r1.8 su.c
--- su/su.c	14 Mar 2005 11:55:33 -0000	1.8
+++ su/su.c	29 Sep 2005 02:04:18 -0000
@@ -396,21 +396,30 @@
 			/* set the su'd user's environment & umask */
 			setusercontext(lc, pwd, pwd->pw_uid, LOGIN_SETPATH|LOGIN_SETUMASK|LOGIN_SETENV);
 #else
-			setenv("PATH", _PATH_DEFPATH, 1);
+			if (setenv("PATH", _PATH_DEFPATH, 1) == ENOMEM)
+				err(1, "setenv: cannot set PATH=%s", _PATH_DEFPATH);
 #endif

okay


-			if (p)
-				setenv("TERM", p, 1);
+			if (p) {
+				if (setenv("TERM", p, 1) == ENOMEM)
+					err(1, "setenv: cannot set TERM=%s", p);
+			}

maybe just warn?


 #ifdef KERBEROS5
-			if (ccname)
-				setenv("KRB5CCNAME", ccname, 1);
+			if (ccname) {
+				if (setenv("KRB5CCNAME", ccname, 1) == ENOMEM)
+					err(1, "setenv: cannot set KRB5CCNAME=%s", ccname);
+			}
 #endif

okay


 			if (chdir(pwd->pw_dir) < 0)
 				errx(1, "no directory");
 		}
-		if (asthem || pwd->pw_uid)
-			setenv("USER", pwd->pw_name, 1);
-		setenv("HOME", pwd->pw_dir, 1);
-		setenv("SHELL", shell, 1);
+		if (asthem || pwd->pw_uid) {
+			if (setenv("USER", pwd->pw_name, 1) == ENOMEM)
+				err(1, "setenv: cannot set USER=%s", pwd->pw_name);
+		}
+		if (setenv("HOME", pwd->pw_dir, 1) == ENOMEM)
+			err(1, "setenv: cannot set HOME=%s", pwd->pw_dir);
+		if (setenv("SHELL", shell, 1) == ENOMEM)
+			err(1, "setenv: cannot set SHELL=%s", shell);
 	}
 	if (iscsh == YES) {
 		if (fastlogin)

not sure if we should fail there


Index: tabs/tabs.c
===================================================================
RCS file: /mnt/share/dragonfly-cvs/src/usr.bin/tabs/tabs.c,v
retrieving revision 1.1
diff -u -r1.1 tabs.c
--- tabs/tabs.c	19 Jun 2004 22:03:08 -0000	1.1
+++ tabs/tabs.c	29 Sep 2005 02:05:34 -0000
@@ -108,12 +108,15 @@
 				errx(1, "%s: invalid increment", arg + 1);
 		} else if (arg[1] == 'T') {
 			/* -Ttype or -T type */
-			if (arg[2] != '\0')
-				setenv("TERM", arg + 2, 1);
+			if (arg[2] != '\0') {
+				if (setenv("TERM", arg + 2, 1) == ENOMEM)
+					err(1, "setenv: cannot set TERM=%s", arg + 2);
+			}
 			else {
 				if ((arg = *++argv) == NULL)
 					usage();
-				setenv("TERM", arg, 1);
+				if (setenv("TERM", arg, 1) == ENOMEM)
+					err(1, "setenv: cannot set TERM=%s", arg);
 			}
 		} else if (arg[1] == '-') {
 			arg = *++argv;

okay i think


Index: whereis/whereis.c
===================================================================
RCS file: /mnt/share/dragonfly-cvs/src/usr.bin/whereis/whereis.c,v
retrieving revision 1.3
diff -u -r1.3 whereis.c
--- whereis/whereis.c 31 Aug 2005 16:45:51 -0000 1.3
+++ whereis/whereis.c 29 Sep 2005 02:06:40 -0000
@@ -383,7 +383,8 @@
errx(EX_DATAERR, "no directories to search");
if (opt_m) {
- setenv("MANPATH", colonify(mandirs), 1);
+ if (setenv("MANPATH", colonify(mandirs), 1) == ENOMEM)
+ err(1, "setenv: cannot set MANPATH=%s", colonify(mandirs));
if ((i = regcomp(&re, MANWHEREISMATCH, REG_EXTENDED)) != 0) {
regerror(i, &re, buf, BUFSIZ - 1);
errx(EX_UNAVAILABLE, "regcomp(%s) failed: %s",

okay i think


Index: window/wwenviron.c
===================================================================
RCS file: /mnt/share/dragonfly-cvs/src/usr.bin/window/wwenviron.c,v
retrieving revision 1.2
diff -u -r1.2 wwenviron.c
--- window/wwenviron.c 17 Jun 2003 04:29:34 -0000 1.2
+++ window/wwenviron.c 29 Sep 2005 02:10:24 -0000
@@ -42,6 +42,7 @@
#if !defined(OLD_TTY) && !defined(TIOCSCTTY) && !defined(TIOCNOTTY)
#include <sys/ioctl.h>
#endif
+#include <errno.h>
#include <signal.h>
/*
@@ -92,9 +93,11 @@
*/
(void) sprintf(buf, "%sco#%d:li#%d:%s",
WWT_TERMCAP, wp->ww_w.nc, wp->ww_w.nr, wwwintermcap);
- (void) setenv("TERMCAP", buf, 1);
+ if (setenv("TERMCAP", buf, 1) == ENOMEM)
+ err(1, "setenv: cannot set TERMCAP=%s", buf);
(void) sprintf(buf, "%d", wp->ww_id + 1);
- (void) setenv("WINDOW_ID", buf, 1);
+ if (setenv("WINDOW_ID", buf, 1) == ENOMEM)
+ err(1, "setenv: cannot set WINDOW_ID=%s", buf);
return 0;
bad:
wwerrno = WWE_SYS;
Index: window/wwinit.c
===================================================================
RCS file: /mnt/share/dragonfly-cvs/src/usr.bin/window/wwinit.c,v
retrieving revision 1.2
diff -u -r1.2 wwinit.c
--- window/wwinit.c 17 Jun 2003 04:29:34 -0000 1.2
+++ window/wwinit.c 29 Sep 2005 02:10:50 -0000
@@ -41,6 +41,7 @@
#include "ww.h"
#include "tt.h"
#include <signal.h>
+#include <errno.h>
#include <fcntl.h>
#include <termcap.h>
#include "char.h"
@@ -303,7 +304,8 @@
* since tt_init() has already made its own copy of it and
* wwterm now points to the copy.
*/
- (void) setenv("TERM", WWT_TERM, 1);
+ if (setenv("TERM", WWT_TERM, 1) == ENOMEM)
+ err(1, "setenv: cannot set TERM=%s", WWT_TERM);
#ifdef TERMINFO
if (wwterminfoinit() < 0)
goto bad;
Index: window/wwterminfo.c
===================================================================
RCS file: /mnt/share/dragonfly-cvs/src/usr.bin/window/wwterminfo.c,v
retrieving revision 1.2
diff -u -r1.2 wwterminfo.c
--- window/wwterminfo.c 17 Jun 2003 04:29:34 -0000 1.2
+++ window/wwterminfo.c 29 Sep 2005 02:09:47 -0000
@@ -68,7 +68,8 @@
wwerrno = WWE_SYS;
return -1;
}
- (void) setenv("TERMINFO", wwterminfopath, 1);
+ if (setenv("TERMINFO", wwterminfopath, 1) == ENOMEM)
+ err(1, "setenv: cannot set TERMINFO=%s", wwterminfopath);
/* make a termcap entry and turn it into terminfo */
(void) sprintf(buf, "%s/cap", wwterminfopath);
if ((fp = fopen(buf, "w")) == NULL) {

maybe just warn here?


--
Serve - BSD     +++  RENT this banner advert  +++    ASCII Ribbon   /"\
Work - Mac      +++  space for low $$$ NOW!1  +++      Campaign     \ /
Party Enjoy Relax   |   http://dragonflybsd.org      Against  HTML   \
Dude 2c 2 the max   !   http://golden-apple.biz       Mail + News   / \



[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]