[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2023-01-28 Thread Sam James
commit: 5dd019205cba747802b98c5283b8accf0ff47eda
Author: Sam James  gentoo  org>
AuthorDate: Sun Jan 29 03:57:14 2023 +
Commit: Sam James  gentoo  org>
CommitDate: Sun Jan 29 03:57:14 2023 +
URL:https://gitweb.gentoo.org/proj/elfix.git/commit/?id=5dd01920

install-xattr: IWYU fixes

Signed-off-by: Sam James  gentoo.org>

 misc/install-xattr/install-xattr.c | 12 ++--
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index 33b9fe1..1f53273 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -20,19 +20,19 @@
  * along with this program.  If not, see .
  */
 
-#include 
-#include 
-#include 
+#include 
 #include 
 #include 
-#include 
 #include 
 #include 
-#include 
+#include 
+#include 
+#include 
 #include 
 #include 
 #include 
 #include 
+#include 
 
 static char *
 xstrdup(const char *s)
@@ -301,7 +301,7 @@ main(int argc, char* argv[])
while (1) {
int option_index;
int c = getopt_long(argc, argv_copy, "dt:g:m:o:S:Zb", 
long_options, _index);
- 
+
if (c == -1)
break;
 



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2023-01-23 Thread Sam James
commit: 09f9b61bdfa488d78bdba4562eb208bd1f062eaf
Author: Sam James  gentoo  org>
AuthorDate: Tue Jan 24 02:45:11 2023 +
Commit: Sam James  gentoo  org>
CommitDate: Tue Jan 24 03:03:23 2023 +
URL:https://gitweb.gentoo.org/proj/elfix.git/commit/?id=09f9b61b

install-xattr: fix chdir arg when OLDPWD is nulL

Fix core.NonNullParamChecker with chdir().

Clang's scan-build says:
```
install-xattr.c:331:9: warning: Null pointer passed to 1st parameter expecting 
'nonnull' [core.NonNullParamChecker]
if (chdir(oldpwd) != 0)
^
```

It's right - oldpwd could easily have been null:
```
$ env -u OLDPWD __PORTAGE_HELPER_PATH=foo ./install-xattr --version
```

Signed-off-by: Sam James  gentoo.org>

 misc/install-xattr/install-xattr.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index 2966af4..33b9fe1 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -345,7 +345,7 @@ main(int argc, char* argv[])
char *portage_helper_path = getenv("__PORTAGE_HELPER_PATH");
char *portage_helper_canpath = NULL;
if (portage_helper_path)
-   if (chdir(oldpwd) != 0)
+   if (!oldpwd || chdir(oldpwd) != 0)
err(1, "failed to chdir %s", oldpwd);
 
switch (fork()) {



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2023-01-23 Thread Sam James
commit: cbe23e2638435ddeced39979099fceb77fbb98fb
Author: Sam James  gentoo  org>
AuthorDate: Tue Jan 24 03:04:39 2023 +
Commit: Sam James  gentoo  org>
CommitDate: Tue Jan 24 03:05:32 2023 +
URL:https://gitweb.gentoo.org/proj/elfix.git/commit/?id=cbe23e26

install-xattr: minor test fixups

- Add set -x like we did for fix-gnustack 
(87ca5c5bbe63ea3c9227fdd4a01ccdc1ce723323)
  for easier debugging when something fails.

- Use Bash tests everywhere given we're already using Bash.

- Use portable Bash shebang.

- Fix shellcheck nits.

Signed-off-by: Sam James  gentoo.org>

 misc/install-xattr/checkcopyattrs.sh | 52 ++--
 1 file changed, 26 insertions(+), 26 deletions(-)

diff --git a/misc/install-xattr/checkcopyattrs.sh 
b/misc/install-xattr/checkcopyattrs.sh
index a9149d7..9d5dc13 100755
--- a/misc/install-xattr/checkcopyattrs.sh
+++ b/misc/install-xattr/checkcopyattrs.sh
@@ -1,5 +1,5 @@
-#!/bin/bash
-set -e
+#!/usr/bin/env bash
+set -ex
 
 touch a b c
 mkdir -p d e h
@@ -13,41 +13,41 @@ setfattr -n user.pax.flags -v "r" c
 ./install-xattr b y
 ./install-xattr c z
 
-[ "$(getfattr --only-values -n user.foo x)" == "bar" ]
-[ "$(getfattr --only-values -n user.bas x)" == "x" ]
-[ "$(getfattr --only-values -n user.pax.flags x)" == "mr" ]
-[ "$(getfattr --only-values -n user.pax.flags y)" == "p" ]
-[ "$(getfattr --only-values -n user.pax.flags z)" == "r" ]
+[[ "$(getfattr --only-values -n user.foo x)" == "bar" ]]
+[[ "$(getfattr --only-values -n user.bas x)" == "x" ]]
+[[ "$(getfattr --only-values -n user.pax.flags x)" == "mr" ]]
+[[ "$(getfattr --only-values -n user.pax.flags y)" == "p" ]]
+[[ "$(getfattr --only-values -n user.pax.flags z)" == "r" ]]
 
 ./install-xattr a b c d
 
-[ "$(getfattr --only-values -n user.foo d/a)" == "bar" ]
-[ "$(getfattr --only-values -n user.bas d/a)" == "x" ]
-[ "$(getfattr --only-values -n user.pax.flags d/a)" == "mr" ]
-[ "$(getfattr --only-values -n user.pax.flags d/b)" == "p" ]
-[ "$(getfattr --only-values -n user.pax.flags d/c)" == "r" ]
+[[ "$(getfattr --only-values -n user.foo d/a)" == "bar" ]]
+[[ "$(getfattr --only-values -n user.bas d/a)" == "x" ]]
+[[ "$(getfattr --only-values -n user.pax.flags d/a)" == "mr" ]]
+[[ "$(getfattr --only-values -n user.pax.flags d/b)" == "p" ]]
+[[ "$(getfattr --only-values -n user.pax.flags d/c)" == "r" ]]
 
 # This tests if the src file was inside a directory
 # the correct dst location should be f/a. NOT f/d/a.
 ./install-xattr d/a h
 
-[ -x h/a ]
-[ ! -x h/d/a ]
-[ "$(getfattr --only-values -n user.foo h/a)" == "bar" ]
-[ "$(getfattr --only-values -n user.bas h/a)" == "x" ]
+[[ -x h/a ]]
+[[ ! -x h/d/a ]]
+[[ "$(getfattr --only-values -n user.foo h/a)" == "bar" ]]
+[[ "$(getfattr --only-values -n user.bas h/a)" == "x" ]]
 
 ./install-xattr -t e a b c
 
-[ "$(getfattr --only-values -n user.foo e/a)" == "bar" ]
-[ "$(getfattr --only-values -n user.bas e/a)" == "x" ]
-[ "$(getfattr --only-values -n user.pax.flags e/a)" == "mr" ]
-[ "$(getfattr --only-values -n user.pax.flags e/b)" == "p" ]
-[ "$(getfattr --only-values -n user.pax.flags e/c)" == "r" ]
+[[ "$(getfattr --only-values -n user.foo e/a)" == "bar" ]]
+[[ "$(getfattr --only-values -n user.bas e/a)" == "x" ]]
+[[ "$(getfattr --only-values -n user.pax.flags e/a)" == "mr" ]]
+[[ "$(getfattr --only-values -n user.pax.flags e/b)" == "p" ]]
+[[ "$(getfattr --only-values -n user.pax.flags e/c)" == "r" ]]
 
 ./install-xattr a -D f/a
-[ "$(getfattr --only-values -n user.foo f/a)" == "bar" ]
-[ "$(getfattr --only-values -n user.bas f/a)" == "x" ]
-[ "$(getfattr --only-values -n user.pax.flags f/a)" == "mr" ]
+[[ "$(getfattr --only-values -n user.foo f/a)" == "bar" ]]
+[[ "$(getfattr --only-values -n user.bas f/a)" == "x" ]]
+[[ "$(getfattr --only-values -n user.pax.flags f/a)" == "mr" ]]
 
 # Check that we can copy large files
 truncate -s2G a
@@ -68,8 +68,8 @@ truncate -s2G a
 ./install-xattr -p a backup-a
 ./install-xattr -d g/g/g
 
-./install-xattr -o $(id -u) a mode-a
-./install-xattr -g $(id -g) a mode-a
+./install-xattr -o "$(id -u)" a mode-a
+./install-xattr -g "$(id -g)" a mode-a
 ./install-xattr -m 666 a mode-a
 
 # Let's abuse ourselves



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2023-01-10 Thread Sam James
commit: 844b96fc02e9edcf57ab493ae7da286daaa1c8cd
Author: Sam James  gentoo  org>
AuthorDate: Wed Jan 11 06:53:26 2023 +
Commit: Sam James  gentoo  org>
CommitDate: Wed Jan 11 06:53:32 2023 +
URL:https://gitweb.gentoo.org/proj/elfix.git/commit/?id=844b96fc

install-xattr: update copyright year, fix typo

Signed-off-by: Sam James  gentoo.org>

 misc/install-xattr/install-xattr.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index 23b6af3..2966af4 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -1,7 +1,7 @@
-/* Copyright 2014 Gentoo Foundation
+/* Copyright 2014-2023 Gentoo Foundation
  * Distributed under the terms of the GNU General Public License v2
  *
- * Wrapper for coreutil's install to preserve extended attributes.
+ * Wrapper for coreutils install to preserve extended attributes.
  *
  * Copyright 2014 Anthony G. Basile - 
  * Copyright 2014 Mike Frysinger- 



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2023-01-09 Thread Sam James
commit: 2a0dffbf0080dc74f82910a74f051d835cfd653f
Author: Sam James  gentoo  org>
AuthorDate: Fri Jan  6 03:06:50 2023 +
Commit: Sam James  gentoo  org>
CommitDate: Tue Jan 10 05:21:39 2023 +
URL:https://gitweb.gentoo.org/proj/elfix.git/commit/?id=2a0dffbf

install-xattr: avoid accessing empty storage

UBSAN reports:
```
install-xattr.c:124:16: runtime error: load of address 0x5556d440 with 
insufficient space for an object of type 'char'
0x5556d440: note: pointer points here
 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 
00 00 00  61 00 00 00
  ^
#0 0x7a27 in copyxattr 
/home/sam/git/elfix/misc/install-xattr/install-xattr.c:124
#1 0x6a4d in main 
/home/sam/git/elfix/misc/install-xattr/install-xattr.c:410
#2 0x777c864f  (/usr/lib64/libc.so.6+0x2364f)
#3 0x777c8708 in __libc_start_main (/usr/lib64/libc.so.6+0x23708)
#4 0x7114 in _start 
(/home/sam/git/elfix/misc/install-xattr/install-xattr+0x3114)
```

Triggered with:
```
mkdir /tmp/a
touch /tmp/foo
./install-xattr -c /tmp/foo /tmp/foo2 /tmp/a
```

I don't see this with Clang or < GCC 12, but I do with GCC 13 
(13.0.0_pre20230101 p5);
I suspect it's because of object-size improvements.

Signed-off-by: Sam James  gentoo.org>

 misc/install-xattr/install-xattr.c | 4 
 1 file changed, 4 insertions(+)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index 66530f9..db6dabd 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -119,6 +119,10 @@ copyxattr(const char *source, const char *target)
lxattr = xmalloc(lsize);
xlistxattr(source, lxattr, lsize);
 
+   /* There's no xattrs at all. */
+   if (lsize == 0)
+   return;
+
i = 0;
while (1) {
while (lxattr[i++] == 0)



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2023-01-09 Thread Sam James
commit: 776afeae92d2afd3340cd753abc58ccd8daba48f
Author: Sam James  gentoo  org>
AuthorDate: Fri Jan  6 06:39:30 2023 +
Commit: Sam James  gentoo  org>
CommitDate: Tue Jan 10 05:21:39 2023 +
URL:https://gitweb.gentoo.org/proj/elfix.git/commit/?id=776afeae

install-xattr: fix small memory leak

There's another with strdup/malloc but it gets a bit messier
to fix so let's leave that for now (this is mostly about correctness
anyway, as the runtime of install-xattr is very small):
```
Direct leak of 4097 byte(s) in 1 object(s) allocated from:
#0 0x7f4a2c22e257 in __interceptor_malloc 
/usr/src/debug/sys-devel/gcc-13.0.0_pre20230101/gcc-13-20230101/libsanitizer/asan/asan_malloc_linux.cpp:69
#1 0x7f4a2c1d2b40 in __interceptor_realpath 
/usr/src/debug/sys-devel/gcc-13.0.0_pre20230101/gcc-13-20230101/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:3904
#2 0x55da3adf5629 in realpath /usr/include/bits/stdlib.h:42
#3 0x55da3adf5629 in main 
/home/sam/git/elfix/misc/install-xattr/install-xattr.c:252
```

Signed-off-by: Sam James  gentoo.org>

 misc/install-xattr/install-xattr.c | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index db6dabd..23b6af3 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -248,7 +248,6 @@ main(int argc, char* argv[])
char *target = NULL;   /* the target file or directory  
   */
char *path;/* path to the target file   
   */
 
-   char *mypath = realpath("/proc/self/exe", NULL); /* path to argv[0] 
   */
char *install;   /* path to the system 
install */
 
struct stat s; /* test if a file is a regular file or a 
directory  */
@@ -353,7 +352,9 @@ main(int argc, char* argv[])
case -1:
err(1, "fork() failed");
 
-   case 0:
+   case 0: {
+   char *mypath = realpath("/proc/self/exe", NULL); /* 
path to argv[0] */
+
/* find system install avoiding mypath and 
portage_helper_path! */
if (portage_helper_path)
portage_helper_canpath = 
realpath(portage_helper_path, NULL);
@@ -363,6 +364,7 @@ main(int argc, char* argv[])
argv[0] = install;/* so coreutils' 
lib/program.c behaves  */
execv(install, argv); /* The kernel will 
free(install).   */
err(1, "execv() failed");
+   }
 
default:
wait();



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2019-11-10 Thread Anthony G. Basile
commit: 2786e5e5c7a2f4a9ae2bf05322fa40cbb58afea0
Author: Anthony G. Basile  gentoo  org>
AuthorDate: Sun Nov 10 00:52:31 2019 +
Commit: Anthony G. Basile  gentoo  org>
CommitDate: Sun Nov 10 00:58:26 2019 +
URL:https://gitweb.gentoo.org/proj/elfix.git/commit/?id=2786e5e5

install-xattr: fix mangling of parameter order by getopt_long()

See: https://bugs.gentoo.org/699550

Signed-off-by: Anthony G. Basile  gentoo.org>

 misc/install-xattr/install-xattr.c | 53 +++---
 1 file changed, 32 insertions(+), 21 deletions(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index 1c39e69..66530f9 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -234,6 +234,8 @@ main(int argc, char* argv[])
int i;
int status;/* exit status of child "install" 
process   */
 
+   char** argv_copy;  /* copy argv to avoid mangling by 
getopt_long() */
+
int opts_directory = 0;/* if -d was given, then all arguments 
are directories  */
int opts_target_directory = 0; /* if -t was given, then we're 
installing to a target directory */
int target_is_directory = 0;   /* is the target a directory?
   */
@@ -270,23 +272,32 @@ main(int argc, char* argv[])
 
opterr = 0; /* we skip many legitimate flags, so silence any warning */
 
-   while (1) {
-   static struct option long_options[] = {
-   {   "directory",   no_argument, 0, 'd'},
-   {"target-directory", required_argument, 0, 't'},
-   {   "group", required_argument, 0, 'g'},
-   {"mode", required_argument, 0, 'm'},
-   {   "owner", required_argument, 0, 'o'},
-   {  "suffix", required_argument, 0, 'S'},
-   { "context", optional_argument, 0, 'Z'},
-   {  "backup", optional_argument, 0, 'b'},
-   {"help",   no_argument, 0,  0 },
-   { 0, 0, 0,  0 }
-   };
+   static struct option long_options[] = {
+   {   "directory",   no_argument, 0, 'd'},
+   {"target-directory", required_argument, 0, 't'},
+   {   "group", required_argument, 0, 'g'},
+   {"mode", required_argument, 0, 'm'},
+   {   "owner", required_argument, 0, 'o'},
+   {  "suffix", required_argument, 0, 'S'},
+   { "context", optional_argument, 0, 'Z'},
+   {  "backup", optional_argument, 0, 'b'},
+   {"help",   no_argument, 0,  0 },
+   { 0, 0, 0,  0 }
+   };
+
+   /* We copy argv[] because getopts_long() mangles the order of the 
arguments.
+* We pass the original argv[] to install in the fork() while we use
+* argv_copy[] for the copying of the xattrs since optind assumes a 
reorder
+* parameter list.
+*/
+   argv_copy = (char **)malloc(argc*sizeof(char *));
 
-   int option_index;
-   int c = getopt_long(argc, argv, "dt:g:m:o:S:Zb", long_options, 
_index);
+   for (i = 0; i < argc; i++)
+   argv_copy[i] = strdup(argv[i]);
 
+   while (1) {
+   int option_index;
+   int c = getopt_long(argc, argv_copy, "dt:g:m:o:S:Zb", 
long_options, _index);
  
if (c == -1)
break;
@@ -365,7 +376,7 @@ main(int argc, char* argv[])
goto done;
 
if (!opts_target_directory) {
-   target = argv[last];
+   target = argv_copy[last];
if (stat(target, ) != 0) {
err(1, "failed to stat %s", target);
return EXIT_FAILURE;
@@ -384,8 +395,8 @@ main(int argc, char* argv[])
last++;
 
for (i = first; i < last; i++) {
-   if (stat(argv[i], ) != 0) {
-   err(1, "failed to stat %s", 
argv[i]);
+   if (stat(argv_copy[i], ) != 0) {
+   err(1, "failed to stat %s", 
argv_copy[i]);
return EXIT_FAILURE;
}
/* We 

[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2019-11-10 Thread Anthony G. Basile
commit: 1715286f9665488334e6c7e5154523648f383d61
Author: Raimonds Cicans  apollo  lv>
AuthorDate: Sat Nov  9 18:16:11 2019 +
Commit: Anthony G. Basile  gentoo  org>
CommitDate: Sat Nov  9 18:23:50 2019 +
URL:https://gitweb.gentoo.org/proj/elfix.git/commit/?id=1715286f

install-xattr: correct -Z flag, bug #699550

Signed-off-by: Anthony G. Basile  gentoo.org>

 misc/install-xattr/install-xattr.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index 5c8a978..ab3d041 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -278,14 +278,14 @@ main(int argc, char* argv[])
{"mode", required_argument, 0, 'm'},
{   "owner", required_argument, 0, 'o'},
{  "suffix", required_argument, 0, 'S'},
-   { "context", optional_argument, 0, 'Z'},
+   { "context", optional_argument, 0,  0 },
{  "backup", optional_argument, 0, 'b'},
{"help",   no_argument, 0,  0 },
{ 0, 0, 0,  0 }
};
 
int option_index;
-   int c = getopt_long(argc, argv, "dt:g:m:o:S:Z:", long_options, 
_index);
+   int c = getopt_long(argc, argv, "dt:g:m:o:S:Z", long_options, 
_index);
 
  
if (c == -1)



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2019-11-10 Thread Anthony G. Basile
commit: 0439f0adc98cc088e997e92f4d4a335bd4d8dcbc
Author: Anthony G. Basile  gentoo  org>
AuthorDate: Sat Nov  9 18:19:31 2019 +
Commit: Anthony G. Basile  gentoo  org>
CommitDate: Sat Nov  9 18:23:57 2019 +
URL:https://gitweb.gentoo.org/proj/elfix.git/commit/?id=0439f0ad

install-xattr: correct -b flag

Signed-off-by: Anthony G. Basile  gentoo.org>

 misc/install-xattr/install-xattr.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index ab3d041..cc52b2c 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -279,13 +279,13 @@ main(int argc, char* argv[])
{   "owner", required_argument, 0, 'o'},
{  "suffix", required_argument, 0, 'S'},
{ "context", optional_argument, 0,  0 },
-   {  "backup", optional_argument, 0, 'b'},
+   {  "backup", optional_argument, 0,  0 },
{"help",   no_argument, 0,  0 },
{ 0, 0, 0,  0 }
};
 
int option_index;
-   int c = getopt_long(argc, argv, "dt:g:m:o:S:Z", long_options, 
_index);
+   int c = getopt_long(argc, argv, "dt:g:m:o:S:Zb", long_options, 
_index);
 
  
if (c == -1)



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2019-11-10 Thread Anthony G. Basile
commit: 2e6303d7f1cac6d8eceb64fd3bc747b61e5f5f84
Author: Anthony G. Basile  gentoo  org>
AuthorDate: Sun Nov 10 00:52:01 2019 +
Commit: Anthony G. Basile  gentoo  org>
CommitDate: Sun Nov 10 00:54:36 2019 +
URL:https://gitweb.gentoo.org/proj/elfix.git/commit/?id=2e6303d7

install-xattr: -Z and -b flags do not accept arguments

Signed-off-by: Anthony G. Basile  gentoo.org>

 misc/install-xattr/install-xattr.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index 5c8a978..1c39e69 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -285,7 +285,7 @@ main(int argc, char* argv[])
};
 
int option_index;
-   int c = getopt_long(argc, argv, "dt:g:m:o:S:Z:", long_options, 
_index);
+   int c = getopt_long(argc, argv, "dt:g:m:o:S:Zb", long_options, 
_index);
 
  
if (c == -1)



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2019-11-10 Thread Anthony G. Basile
commit: 4806e70b0659cae50e13435bf167999380e109f9
Author: Anthony G. Basile  gentoo  org>
AuthorDate: Sun Nov 10 00:52:31 2019 +
Commit: Anthony G. Basile  gentoo  org>
CommitDate: Sun Nov 10 00:54:43 2019 +
URL:https://gitweb.gentoo.org/proj/elfix.git/commit/?id=4806e70b

install-xattr: fix mangling of byte order

See: https://bugs.gentoo.org/699550

Signed-off-by: Anthony G. Basile  gentoo.org>

 misc/install-xattr/install-xattr.c | 53 +++---
 1 file changed, 32 insertions(+), 21 deletions(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index 1c39e69..66530f9 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -234,6 +234,8 @@ main(int argc, char* argv[])
int i;
int status;/* exit status of child "install" 
process   */
 
+   char** argv_copy;  /* copy argv to avoid mangling by 
getopt_long() */
+
int opts_directory = 0;/* if -d was given, then all arguments 
are directories  */
int opts_target_directory = 0; /* if -t was given, then we're 
installing to a target directory */
int target_is_directory = 0;   /* is the target a directory?
   */
@@ -270,23 +272,32 @@ main(int argc, char* argv[])
 
opterr = 0; /* we skip many legitimate flags, so silence any warning */
 
-   while (1) {
-   static struct option long_options[] = {
-   {   "directory",   no_argument, 0, 'd'},
-   {"target-directory", required_argument, 0, 't'},
-   {   "group", required_argument, 0, 'g'},
-   {"mode", required_argument, 0, 'm'},
-   {   "owner", required_argument, 0, 'o'},
-   {  "suffix", required_argument, 0, 'S'},
-   { "context", optional_argument, 0, 'Z'},
-   {  "backup", optional_argument, 0, 'b'},
-   {"help",   no_argument, 0,  0 },
-   { 0, 0, 0,  0 }
-   };
+   static struct option long_options[] = {
+   {   "directory",   no_argument, 0, 'd'},
+   {"target-directory", required_argument, 0, 't'},
+   {   "group", required_argument, 0, 'g'},
+   {"mode", required_argument, 0, 'm'},
+   {   "owner", required_argument, 0, 'o'},
+   {  "suffix", required_argument, 0, 'S'},
+   { "context", optional_argument, 0, 'Z'},
+   {  "backup", optional_argument, 0, 'b'},
+   {"help",   no_argument, 0,  0 },
+   { 0, 0, 0,  0 }
+   };
+
+   /* We copy argv[] because getopts_long() mangles the order of the 
arguments.
+* We pass the original argv[] to install in the fork() while we use
+* argv_copy[] for the copying of the xattrs since optind assumes a 
reorder
+* parameter list.
+*/
+   argv_copy = (char **)malloc(argc*sizeof(char *));
 
-   int option_index;
-   int c = getopt_long(argc, argv, "dt:g:m:o:S:Zb", long_options, 
_index);
+   for (i = 0; i < argc; i++)
+   argv_copy[i] = strdup(argv[i]);
 
+   while (1) {
+   int option_index;
+   int c = getopt_long(argc, argv_copy, "dt:g:m:o:S:Zb", 
long_options, _index);
  
if (c == -1)
break;
@@ -365,7 +376,7 @@ main(int argc, char* argv[])
goto done;
 
if (!opts_target_directory) {
-   target = argv[last];
+   target = argv_copy[last];
if (stat(target, ) != 0) {
err(1, "failed to stat %s", target);
return EXIT_FAILURE;
@@ -384,8 +395,8 @@ main(int argc, char* argv[])
last++;
 
for (i = first; i < last; i++) {
-   if (stat(argv[i], ) != 0) {
-   err(1, "failed to stat %s", 
argv[i]);
+   if (stat(argv_copy[i], ) != 0) {
+   err(1, "failed to stat %s", 
argv_copy[i]);
return EXIT_FAILURE;
}
/* We reproduce install's 

[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2019-04-14 Thread Anthony G. Basile
commit: 920955039276dba6059cd281b1f0c17c8218c60e
Author: Anthony G. Basile  gentoo  org>
AuthorDate: Sun Apr 14 18:39:44 2019 +
Commit: Anthony G. Basile  gentoo  org>
CommitDate: Sun Apr 14 18:40:01 2019 +
URL:https://gitweb.gentoo.org/proj/elfix.git/commit/?id=92095503

install-xattr: address compiler warnings, bug #682110

Signed-off-by: Anthony G. Basile  gentoo.org>

 misc/install-xattr/install-xattr.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index 3e20b63..5c8a978 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -239,7 +239,7 @@ main(int argc, char* argv[])
int target_is_directory = 0;   /* is the target a directory?
   */
 
int first, last;   /* argv indices of the first 
file/directory and last*/
-   char *target;  /* the target file or directory  
   */
+   char *target = NULL;   /* the target file or directory  
   */
char *path;/* path to the target file   
   */
 
char *mypath = realpath("/proc/self/exe", NULL); /* path to argv[0] 
   */
@@ -331,7 +331,8 @@ main(int argc, char* argv[])
char *portage_helper_path = getenv("__PORTAGE_HELPER_PATH");
char *portage_helper_canpath = NULL;
if (portage_helper_path)
-   chdir(oldpwd);
+   if (chdir(oldpwd) != 0)
+   err(1, "failed to chdir %s", oldpwd);
 
switch (fork()) {
case -1:



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2019-03-30 Thread Anthony G. Basile
commit: dac123cefa79db06f25b64f8f863b85aa2456342
Author: Nick Bowler  draconx  ca>
AuthorDate: Sat Mar 30 10:10:31 2019 +
Commit: Anthony G. Basile  gentoo  org>
CommitDate: Sat Mar 30 10:11:55 2019 +
URL:https://gitweb.gentoo.org/proj/elfix.git/commit/?id=dac123ce

install-xattr: report any errors by "stat"

Signed-off-by: Anthony G. Basile  gentoo.org>

 misc/install-xattr/checkcopyattrs.sh | 3 +++
 misc/install-xattr/install-xattr.c   | 8 ++--
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/misc/install-xattr/checkcopyattrs.sh 
b/misc/install-xattr/checkcopyattrs.sh
index 9196795..a9149d7 100755
--- a/misc/install-xattr/checkcopyattrs.sh
+++ b/misc/install-xattr/checkcopyattrs.sh
@@ -49,6 +49,9 @@ setfattr -n user.pax.flags -v "r" c
 [ "$(getfattr --only-values -n user.bas f/a)" == "x" ]
 [ "$(getfattr --only-values -n user.pax.flags f/a)" == "mr" ]
 
+# Check that we can copy large files
+truncate -s2G a
+./install-xattr a x
 
 # The following are just tests to make sure the raw install
 # options don't get lost in our optargs parsing.

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index 0b5eb25..3e20b63 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -365,8 +365,10 @@ main(int argc, char* argv[])
 
if (!opts_target_directory) {
target = argv[last];
-   if (stat(target, ) != 0)
+   if (stat(target, ) != 0) {
+   err(1, "failed to stat %s", target);
return EXIT_FAILURE;
+   }
target_is_directory = S_ISDIR(s.st_mode);
} else {
/* target was set above with the -t option */
@@ -381,8 +383,10 @@ main(int argc, char* argv[])
last++;
 
for (i = first; i < last; i++) {
-   if (stat(argv[i], ) != 0)
+   if (stat(argv[i], ) != 0) {
+   err(1, "failed to stat %s", 
argv[i]);
return EXIT_FAILURE;
+   }
/* We reproduce install's behavior and 
skip
 * all extra directories on the command 
line
 * that are not the final target 
directory.



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2015-06-08 Thread Anthony G. Basile
commit: 21244127487826a78472c7699a9dbdbc8db52ac0
Author: Anthony G. Basile blueness AT gentoo DOT org
AuthorDate: Mon Jun  8 13:07:22 2015 +
Commit: Anthony G. Basile blueness AT gentoo DOT org
CommitDate: Mon Jun  8 13:07:22 2015 +
URL:https://gitweb.gentoo.org/proj/elfix.git/commit/?id=21244127

misc/install-xattr: update ChangeLog

 misc/install-xattr/ChangeLog | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/misc/install-xattr/ChangeLog b/misc/install-xattr/ChangeLog
index b8c947d..1d25ca5 100644
--- a/misc/install-xattr/ChangeLog
+++ b/misc/install-xattr/ChangeLog
@@ -1,6 +1,12 @@
 Okay we'll document changes here.  This is a small project, so we don't
 have to be very formal.  
 
+2015-06-08
+
+   * Release 0.5
+   * Correct whitespace in PORTAGE_XATTR_EXCLUDE.
+   https://bugs.gentoo.org/show_bug.cgi?id=550654.
+
 2014-10-12
 
* Release 0.4



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2015-05-29 Thread Anthony G. Basile
commit: d4b136d91ba101673e79836229f3155f502eb056
Author: Jason Zaman jason AT perfinion DOT com
AuthorDate: Thu May 28 14:31:00 2015 +
Commit: Anthony G. Basile blueness AT gentoo DOT org
CommitDate: Fri May 29 11:31:46 2015 +
URL:https://gitweb.gentoo.org/proj/elfix.git/commit/?id=d4b136d9

misc/install-xattr: ignore all whitespace in PORTAGE_XATTR_EXCLUDE

if the PORTAGE_XATTR_EXCLUDE variable contains whitespace other
than just ' ', the matching fails to exclude what comes after it.

This replaces all whitespace instead of only just space.

Signed-off-by: Jason Zaman perfinion AT gentoo.org

 misc/install-xattr/install-xattr.c | 8 ++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index b650c67..0b5eb25 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -261,8 +261,12 @@ main(int argc, char* argv[])
 * strings.  Also, no need to free(exclude) before we exit().
 */
char *p = exclude;
-   while ((p = strchr(p, ' ')))
-   *p++ = '\0';
+   char *pend = p + len_exclude;
+   while (p != pend) {
+   if (isspace(*p))
+   *p = '\0';
+   p++;
+   }
 
opterr = 0; /* we skip many legitimate flags, so silence any warning */
 



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2014-10-12 Thread Anthony G. Basile
commit: 1fe072a94e105b9132f9d65cea8a3439249855a4
Author: Anthony G. Basile blueness AT gentoo DOT org
AuthorDate: Mon Oct 13 02:21:16 2014 +
Commit: Anthony G. Basile blueness AT gentoo DOT org
CommitDate: Mon Oct 13 02:21:16 2014 +
URL:
http://sources.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=1fe072a9

misc/install-xattr: update ChangeLog

---
 misc/install-xattr/ChangeLog | 5 +
 1 file changed, 5 insertions(+)

diff --git a/misc/install-xattr/ChangeLog b/misc/install-xattr/ChangeLog
index 91b31c9..e998592 100644
--- a/misc/install-xattr/ChangeLog
+++ b/misc/install-xattr/ChangeLog
@@ -1,6 +1,10 @@
 Okay we'll document changes here.  This is a small project, so we don't
 have to be very formal.  
 
+2014-10-12
+   * Release 0.4
+   * Correct a fork bomb.  See 
https://bugs.gentoo.org/show_bug.cgi?id=523994.
+
 2014-07-21
 
* Release 0.3
@@ -23,3 +27,4 @@ THANKS
* Mike Frysinger vap...@gentoo.org for your relentless attention.
* Greg Turner gmturner...@ameritech.net for testing and fixing bugs.
* Jason Zaman ja...@perfinion.com for testing and fixing bugs.
+   * Zac Medico zmed...@gentoo.org for fixing a fork bomb.



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2014-10-12 Thread Anthony G. Basile
commit: 5540ed149f49361c35b57c1f06bb346b80263b3a
Author: Anthony G. Basile blueness AT gentoo DOT org
AuthorDate: Mon Oct 13 02:29:44 2014 +
Commit: Anthony G. Basile blueness AT gentoo DOT org
CommitDate: Mon Oct 13 02:29:44 2014 +
URL:
http://sources.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=5540ed14

misc/install-xattr: fix whitespace in ChangeLog

---
 misc/install-xattr/ChangeLog | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/misc/install-xattr/ChangeLog b/misc/install-xattr/ChangeLog
index e998592..b8c947d 100644
--- a/misc/install-xattr/ChangeLog
+++ b/misc/install-xattr/ChangeLog
@@ -2,6 +2,7 @@ Okay we'll document changes here.  This is a small project, so 
we don't
 have to be very formal.  
 
 2014-10-12
+
* Release 0.4
* Correct a fork bomb.  See 
https://bugs.gentoo.org/show_bug.cgi?id=523994.
 
@@ -24,6 +25,7 @@ have to be very formal.
see https://bugs.gentoo.org/show_bug.cgi?id=465000.
 
 THANKS
+
* Mike Frysinger vap...@gentoo.org for your relentless attention.
* Greg Turner gmturner...@ameritech.net for testing and fixing bugs.
* Jason Zaman ja...@perfinion.com for testing and fixing bugs.



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2014-10-08 Thread Anthony G. Basile
commit: 24d22f45656fb88c63763ca319a2275b8f642d9e
Author: Zac Medico zmedico AT gentoo DOT org
AuthorDate: Thu Oct  9 02:38:51 2014 +
Commit: Anthony G. Basile blueness AT gentoo DOT org
CommitDate: Thu Oct  9 02:38:51 2014 +
URL:
http://sources.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=24d22f45

misc/install-xattr: correct potential fork bomb

The which() function compares portage_helper_path, to canpath
and skips it when appropriate:

if (portage_helper_path)
if (!strcmp(portage_helper_path, canpath))
goto skip;

However, portage_helper_path has not been canonicalized with
the realpath function, so strcmp can return false even though
the paths are equivalent.  This may occurs when /usr/lib is a
symlink to /usr/lib64.

X-Gentoo-Bug: 523994
X-Gentoo-Bug-URL: https://bugs.gentoo.org/523994

---
 misc/install-xattr/install-xattr.c | 6 +-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index 805c0a4..2f349df 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -325,6 +325,7 @@ main(int argc, char* argv[])
 */
char *oldpwd = getenv(OLDPWD);
char *portage_helper_path = getenv(__PORTAGE_HELPER_PATH);
+   char *portage_helper_canpath = NULL;
if (portage_helper_path)
chdir(oldpwd);
 
@@ -334,8 +335,11 @@ main(int argc, char* argv[])
 
case 0:
/* find system install avoiding mypath and 
portage_helper_path! */
-   install = which(mypath, portage_helper_path);
+   if (portage_helper_path)
+   portage_helper_canpath = 
realpath(portage_helper_path, NULL);
+   install = which(mypath, portage_helper_canpath);
free(mypath);
+   free(portage_helper_canpath);
argv[0] = install;/* so coreutils' 
lib/program.c behaves  */
execv(install, argv); /* The kernel will 
free(install).   */
err(1, execv() failed);



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2014-07-21 Thread Anthony G. Basile
commit: d8932d7ee8fd1a3bd00af100717546f39e271f05
Author: Anthony G. Basile blueness AT gentoo DOT org
AuthorDate: Mon Jul 21 21:06:13 2014 +
Commit: Anthony G. Basile blueness AT gentoo DOT org
CommitDate: Mon Jul 21 21:26:31 2014 +
URL:
http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=d8932d7e

misc/install-xattr/ChangeLog: updated

---
 misc/install-xattr/ChangeLog | 14 ++
 1 file changed, 14 insertions(+)

diff --git a/misc/install-xattr/ChangeLog b/misc/install-xattr/ChangeLog
index 13752a3..91b31c9 100644
--- a/misc/install-xattr/ChangeLog
+++ b/misc/install-xattr/ChangeLog
@@ -1,6 +1,19 @@
 Okay we'll document changes here.  This is a small project, so we don't
 have to be very formal.  
 
+2014-07-21
+
+   * Release 0.3
+   * Correctly determine dst path if src is in a dir.
+   * Exclude trusted.* extended attribute namespace.
+
+2014-06-15
+
+   * Release 0.2
+   * Correct the behavior of install-xattr for when it is executed in a 
portage
+   environment.  We must chdir to OLDPWD rather than using PWD else we 
wind up
+   installing into /usr/lib/portage.
+
 2014-02-13
 
* Release version 0.1.  For discussion leading up to this release,
@@ -9,3 +22,4 @@ have to be very formal.
 THANKS
* Mike Frysinger vap...@gentoo.org for your relentless attention.
* Greg Turner gmturner...@ameritech.net for testing and fixing bugs.
+   * Jason Zaman ja...@perfinion.com for testing and fixing bugs.



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2014-06-27 Thread Anthony G. Basile
commit: be6c34290f1c5a0c4e52b03dc5f668046409a84a
Author: Jason Zaman jason AT perfinion DOT com
AuthorDate: Fri Jun 27 12:07:03 2014 +
Commit: Anthony G. Basile blueness AT gentoo DOT org
CommitDate: Fri Jun 27 12:26:28 2014 +
URL:
http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=be6c3429

misc/install-xattr: exclude trusted.* by default

trusted.* xattrs require the sys_admin capability
and should be excluded by default

Signed-off-by: Jason Zaman jason AT perfinion.com

---
 misc/install-xattr/install-xattr.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index f2157fd..805c0a4 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -251,7 +251,7 @@ main(int argc, char* argv[])
 
portage_xattr_exclude = getenv(PORTAGE_XATTR_EXCLUDE);
if (portage_xattr_exclude == NULL)
-   exclude = xstrdup(security.* system.nfs4_acl);
+   exclude = xstrdup(security.* trusted.* system.nfs4_acl);
else
exclude = xstrdup(portage_xattr_exclude);
 



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2014-06-27 Thread Anthony G. Basile
commit: 275ca5400dfe6266a948da802aa19358b3475f95
Author: Jason Zaman jason AT perfinion DOT com
AuthorDate: Fri Jun 27 12:07:04 2014 +
Commit: Anthony G. Basile blueness AT gentoo DOT org
CommitDate: Fri Jun 27 12:26:20 2014 +
URL:
http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=275ca540

misc/install-xattr: test used a dir that already existed

'f' was used by another test, do the test in a new dir instead
so that there is no chance for a conflict

Signed-off-by: Jason Zaman jason AT perfinion.com

---
 misc/install-xattr/Makefile  |  2 +-
 misc/install-xattr/checkcopyattrs.sh | 14 +++---
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/misc/install-xattr/Makefile b/misc/install-xattr/Makefile
index 7143f3f..0474569 100644
--- a/misc/install-xattr/Makefile
+++ b/misc/install-xattr/Makefile
@@ -14,7 +14,7 @@ install: install-xattr
 
 check: checkcopyattrs.sh install-xattr
$(PWD)/checkcopyattrs.sh
-   rm -rf a b c d e f g x y z backup-a* mode-a target-a 
target-install-xattr
+   rm -rf a b c d e f g h x y z backup-a* mode-a target-a 
target-install-xattr
 
 clean:
rm -f *.o *~ install-xattr

diff --git a/misc/install-xattr/checkcopyattrs.sh 
b/misc/install-xattr/checkcopyattrs.sh
index 0249013..9196795 100755
--- a/misc/install-xattr/checkcopyattrs.sh
+++ b/misc/install-xattr/checkcopyattrs.sh
@@ -2,7 +2,7 @@
 set -e
 
 touch a b c
-mkdir -p d e f
+mkdir -p d e h
 setfattr -n user.foo -v bar a
 setfattr -n user.bas -v x a
 setfattr -n user.pax.flags -v mr a
@@ -29,12 +29,12 @@ setfattr -n user.pax.flags -v r c
 
 # This tests if the src file was inside a directory
 # the correct dst location should be f/a. NOT f/d/a.
-./install-xattr d/a f
+./install-xattr d/a h
 
-[ -x f/a ]
-[ ! -x f/d/a ]
-[ $(getfattr --only-values -n user.foo f/a) == bar ]
-[ $(getfattr --only-values -n user.bas f/a) == x ]
+[ -x h/a ]
+[ ! -x h/d/a ]
+[ $(getfattr --only-values -n user.foo h/a) == bar ]
+[ $(getfattr --only-values -n user.bas h/a) == x ]
 
 ./install-xattr -t e a b c
 
@@ -87,4 +87,4 @@ setfattr -n user.pax.flags -v r c
 #  set SELinux security context of files and directories
 
 # Okay, let's clean up after ourselves
-rm -rf a b c d e f g x y z backup-a* mode-a target-a target-install-xattr
+rm -rf a b c d e f g h x y z backup-a* mode-a target-a target-install-xattr



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2014-06-24 Thread Anthony G. Basile
commit: 18586b8eef2dee0f432d7f57b642fa177aebc788
Author: Jason Zaman jason AT perfinion DOT com
AuthorDate: Tue Jun 24 19:07:08 2014 +
Commit: Anthony G. Basile blueness AT gentoo DOT org
CommitDate: Tue Jun 24 21:50:07 2014 +
URL:
http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=18586b8e

Correctly determine dst path if src is in a dir

There is a mismatch between how install and install-xattr determines
the destination path.

When running `install src/a dst/' the correct output is `dst/a'.

install-xattr was incorrectly joining the paths so thought the output
was `dst/src/a' which did not exist.

A test case has been added to the test script too.

Signed-off-by: Jason Zaman jason AT perfinion.com
Signed-off-by: Anthony G. Basile blueness AT gentoo.org

---
 misc/install-xattr/checkcopyattrs.sh | 11 ++-
 misc/install-xattr/install-xattr.c   |  2 +-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/misc/install-xattr/checkcopyattrs.sh 
b/misc/install-xattr/checkcopyattrs.sh
index 2e8f30f..0249013 100755
--- a/misc/install-xattr/checkcopyattrs.sh
+++ b/misc/install-xattr/checkcopyattrs.sh
@@ -2,7 +2,7 @@
 set -e
 
 touch a b c
-mkdir -p d e
+mkdir -p d e f
 setfattr -n user.foo -v bar a
 setfattr -n user.bas -v x a
 setfattr -n user.pax.flags -v mr a
@@ -27,6 +27,15 @@ setfattr -n user.pax.flags -v r c
 [ $(getfattr --only-values -n user.pax.flags d/b) == p ]
 [ $(getfattr --only-values -n user.pax.flags d/c) == r ]
 
+# This tests if the src file was inside a directory
+# the correct dst location should be f/a. NOT f/d/a.
+./install-xattr d/a f
+
+[ -x f/a ]
+[ ! -x f/d/a ]
+[ $(getfattr --only-values -n user.foo f/a) == bar ]
+[ $(getfattr --only-values -n user.bas f/a) == x ]
+
 ./install-xattr -t e a b c
 
 [ $(getfattr --only-values -n user.foo e/a) == bar ]

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index 3d70b5e..f2157fd 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -382,7 +382,7 @@ main(int argc, char* argv[])
if (S_ISDIR(s.st_mode))
continue;
 
-   path = path_join(target, argv[i]);
+   path = path_join(target, 
basename(argv[i]));
copyxattr(argv[i], path);
free(path);
}



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2014-06-15 Thread Anthony G. Basile
commit: 8fe175f9c0c592a49eff7941f60d28afc7e02308
Author: Anthony G. Basile blueness AT gentoo DOT org
AuthorDate: Sun Jun 15 22:09:42 2014 +
Commit: Anthony G. Basile blueness AT gentoo DOT org
CommitDate: Sun Jun 15 22:09:42 2014 +
URL:
http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=8fe175f9

misc/install-xattr: chdir to OLDPWD if we are wrapped by __PORTAGE_HELPER_PATH

---
 misc/install-xattr/install-xattr.c | 47 +++---
 1 file changed, 19 insertions(+), 28 deletions(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index 126ffb9..3d70b5e 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -162,7 +162,7 @@ copyxattr(const char *source, const char *target)
 
 
 static char *
-which(char *mypath)
+which(char *mypath, char *portage_helper_path)
 {
/* $PATH for system install */
char *path = NULL, *env_path = getenv(PATH);
@@ -175,35 +175,16 @@ which(char *mypath)
} else
path = xstrdup(env_path);
 
-   /* $PORTAGE_BIN_PATH for portage install */
-   char *portpath = NULL, *portage_bin_path = getenv(PORTAGE_BIN_PATH);
-
-   /* If we have a $PORTAGE_BIN_PATH, then assume portage's install is at
-* $PORTAGE_BIN_PATH/install.  Check if this file exists, and if it does
-* set portpath = $PORTAGE_BIN_PATH/install.  If it doesn't then set
-* portpath = NULL.
-*/
-   if (portage_bin_path != NULL) {
-   struct stat s;
-
-   portpath = path_join(portage_bin_path, install);
-   portpath = realpath(portpath, NULL);
-
-   if (stat(portpath, s) == 0)  /* If the path exsist but 
isn't a file/sym link, portpath = NULL */
-   if (!S_ISREG(s.st_mode))
-   portpath = NULL;
-   }
-
char *dir;   /* one directory in the colon delimited $PATH string */
-   char *canfile;   /* candidate install's path = dir + /install   */
char *canpath;   /* candidate install's canonical path*/
char *savedptr;  /* reentrant context for strtok_r()  */
 
dir = strtok_r(path, :, savedptr);
 
while (dir) {
-   canfile = path_join(dir, install);
+   char *canfile = path_join(dir, install);
canpath = realpath(canfile, NULL);
+   free(canfile);
 
/* ignore invalid paths that cannot be canonicalized */
if (!canpath)
@@ -218,8 +199,8 @@ which(char *mypath)
/* If portage install's canonical path == candidate install's 
canonical path,
 * then we skip this path otheriwise we get into an infinite 
self-invocation.
 */
-   if (portpath)
-   if (!strcmp(portpath, canpath))
+   if (portage_helper_path)
+   if (!strcmp(portage_helper_path, canpath))
goto skip;
 
/* If the canpath exists and is either a regular file or sym 
link,
@@ -230,7 +211,6 @@ which(char *mypath)
if (stat(canpath, s) == 0)
if (S_ISREG(s.st_mode)) {
free(path);
-   free(portpath);
return canpath;
}
 
@@ -240,8 +220,6 @@ which(char *mypath)
dir = strtok_r(NULL, :, savedptr);
}
 
-   free(portpath);
-
if (env_path == NULL)
err(1, failed to find 'install' in standard utilities path);
else
@@ -338,12 +316,25 @@ main(int argc, char* argv[])
first = optind;
last = argc - 1;
 
+   /* Do we need to chdir to OLDPWD?  This is required when we are called 
my a
+* wrapper like ${__PORTAGE_HELPER_PATH} which then passes its 
directory as
+* $PWD and the source directory from which it was called as $OLDPWD.  
But
+* we want the system install to run in the source directory, ie 
$OLDPWD,
+* so we chdir to it.  Currently we assume that if __PORTAGE_HELPER_PATH
+* is set, then we chdir to oldpwd.
+*/
+   char *oldpwd = getenv(OLDPWD);
+   char *portage_helper_path = getenv(__PORTAGE_HELPER_PATH);
+   if (portage_helper_path)
+   chdir(oldpwd);
+
switch (fork()) {
case -1:
err(1, fork() failed);
 
case 0:
-   install = which(mypath);  /* find system install 
avoiding mypath! */
+   /* find system install avoiding mypath and 
portage_helper_path! */
+   install = which(mypath, portage_helper_path);
free(mypath);
argv[0] = install;/* so coreutils' 
lib/program.c 

[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2014-06-11 Thread Anthony G. Basile
commit: 22bb503d1f3cb9b7251f43fd8ea7936bdf7e2654
Author: Anthony G. Basile blueness AT gentoo DOT org
AuthorDate: Wed Jun 11 11:22:11 2014 +
Commit: Anthony G. Basile blueness AT gentoo DOT org
CommitDate: Wed Jun 11 11:24:10 2014 +
URL:
http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=22bb503d

misc/install-xattr: fix pointer issues in which()

This fixes the following two issues:
1. free(canfile) was called before we had finished using canfile.
2. strcmp(portpath, canpath) was segfaulting if portpath == NULL.

---
 misc/install-xattr/install-xattr.c | 28 ++--
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index 4a165d0..126ffb9 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -164,8 +164,8 @@ copyxattr(const char *source, const char *target)
 static char *
 which(char *mypath)
 {
-   char *path, *env_path = getenv(PATH); /* 
$PATH to search for system install */
-   char *portpath, *portage_bin_path = getenv(PORTAGE_BIN_PATH); /* We 
skip $PORTAGE_BIN_PATH/install  */
+   /* $PATH for system install */
+   char *path = NULL, *env_path = getenv(PATH);
 
/* If we don't have $PATH in our environment, then pick a sane path. */
if (env_path == NULL) {
@@ -175,24 +175,22 @@ which(char *mypath)
} else
path = xstrdup(env_path);
 
+   /* $PORTAGE_BIN_PATH for portage install */
+   char *portpath = NULL, *portage_bin_path = getenv(PORTAGE_BIN_PATH);
+
/* If we have a $PORTAGE_BIN_PATH, then assume portage's install is at
-* $PORTAGE_BIN_PATH/install.  See if this file exists, and if it does
+* $PORTAGE_BIN_PATH/install.  Check if this file exists, and if it does
 * set portpath = $PORTAGE_BIN_PATH/install.  If it doesn't then set
 * portpath = NULL.
 */
-
-   if (portage_bin_path == NULL)
-   portpath = NULL;
-   else {
+   if (portage_bin_path != NULL) {
struct stat s;
 
portpath = path_join(portage_bin_path, install);
portpath = realpath(portpath, NULL);
 
-   if (stat(portpath, s) != 0)  /* If the path doesn't 
exsist, then portpath = NULL*/
-   portpath = NULL;
-   else
-   if (!S_ISREG(s.st_mode))  /* If it exists and isn't a 
file/sym link, portpath = NULL */
+   if (stat(portpath, s) == 0)  /* If the path exsist but 
isn't a file/sym link, portpath = NULL */
+   if (!S_ISREG(s.st_mode))
portpath = NULL;
}
 
@@ -206,7 +204,6 @@ which(char *mypath)
while (dir) {
canfile = path_join(dir, install);
canpath = realpath(canfile, NULL);
-   free(canfile);
 
/* ignore invalid paths that cannot be canonicalized */
if (!canpath)
@@ -221,8 +218,9 @@ which(char *mypath)
/* If portage install's canonical path == candidate install's 
canonical path,
 * then we skip this path otheriwise we get into an infinite 
self-invocation.
 */
-   if (!strcmp(portpath, canpath))
-   goto skip;
+   if (portpath)
+   if (!strcmp(portpath, canpath))
+   goto skip;
 
/* If the canpath exists and is either a regular file or sym 
link,
 * assume we found the system's install.
@@ -242,6 +240,8 @@ which(char *mypath)
dir = strtok_r(NULL, :, savedptr);
}
 
+   free(portpath);
+
if (env_path == NULL)
err(1, failed to find 'install' in standard utilities path);
else



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2014-06-10 Thread Anthony G. Basile
commit: 522ab491f4e677baaa508cd43603861f7b0108fe
Author: Anthony G. Basile blueness AT gentoo DOT org
AuthorDate: Tue Jun 10 21:02:19 2014 +
Commit: Anthony G. Basile blueness AT gentoo DOT org
CommitDate: Tue Jun 10 21:02:19 2014 +
URL:
http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=522ab491

misc/install-xattr: skip portage's install when searching for system install

---
 misc/install-xattr/install-xattr.c | 39 --
 1 file changed, 33 insertions(+), 6 deletions(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index 7b73cc3..4a165d0 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -164,8 +164,8 @@ copyxattr(const char *source, const char *target)
 static char *
 which(char *mypath)
 {
-   char *path, *env_path = getenv(PATH);  /* full $PATH 
string  */
-   char *portage_bin_path = getenv(PORTAGE_BIN_PATH); /* PORTAGE BIN 
$PATHs to skip */
+   char *path, *env_path = getenv(PATH); /* 
$PATH to search for system install */
+   char *portpath, *portage_bin_path = getenv(PORTAGE_BIN_PATH); /* We 
skip $PORTAGE_BIN_PATH/install  */
 
/* If we don't have $PATH in our environment, then pick a sane path. */
if (env_path == NULL) {
@@ -175,14 +175,32 @@ which(char *mypath)
} else
path = xstrdup(env_path);
 
+   /* If we have a $PORTAGE_BIN_PATH, then assume portage's install is at
+* $PORTAGE_BIN_PATH/install.  See if this file exists, and if it does
+* set portpath = $PORTAGE_BIN_PATH/install.  If it doesn't then set
+* portpath = NULL.
+*/
+
+   if (portage_bin_path == NULL)
+   portpath = NULL;
+   else {
+   struct stat s;
+
+   portpath = path_join(portage_bin_path, install);
+   portpath = realpath(portpath, NULL);
+
+   if (stat(portpath, s) != 0)  /* If the path doesn't 
exsist, then portpath = NULL*/
+   portpath = NULL;
+   else
+   if (!S_ISREG(s.st_mode))  /* If it exists and isn't a 
file/sym link, portpath = NULL */
+   portpath = NULL;
+   }
+
char *dir;   /* one directory in the colon delimited $PATH string */
char *canfile;   /* candidate install's path = dir + /install   */
char *canpath;   /* candidate install's canonical path*/
-   char *sdir;  /* one directory in the $INSTALL_EXCLUDE_PATH string */
char *savedptr;  /* reentrant context for strtok_r()  */
 
-   struct stat s;
-
dir = strtok_r(path, :, savedptr);
 
while (dir) {
@@ -194,18 +212,27 @@ which(char *mypath)
if (!canpath)
goto skip;
 
-   /* If argv[0]'s canonical path == candidates install's 
canonical path,
+   /* If argv[0]'s canonical path == candidate install's canonical 
path,
 * then we skip this path otheriwise we get into an infinite 
self-invocation.
 */
if (!strcmp(mypath, canpath))
goto skip;
 
+   /* If portage install's canonical path == candidate install's 
canonical path,
+* then we skip this path otheriwise we get into an infinite 
self-invocation.
+*/
+   if (!strcmp(portpath, canpath))
+   goto skip;
+
/* If the canpath exists and is either a regular file or sym 
link,
 * assume we found the system's install.
  */
+   struct stat s;
+
if (stat(canpath, s) == 0)
if (S_ISREG(s.st_mode)) {
free(path);
+   free(portpath);
return canpath;
}
 



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2014-06-09 Thread Anthony G. Basile
commit: 84ca9ab04c49503ff2ef4346c45da63597ac204a
Author: Anthony G. Basile blueness AT gentoo DOT org
AuthorDate: Tue Jun 10 01:44:33 2014 +
Commit: Anthony G. Basile blueness AT gentoo DOT org
CommitDate: Tue Jun 10 01:49:08 2014 +
URL:
http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=84ca9ab0

misc/install-xattr: /proc/self/exe for canonical path to self

Evaluating realpath(argv[0], NULL) when argv[0] is in the $PATH just
returns argv[0] and not the full canonical path.  Using /proc/self/exe
is more reliable.

---
 misc/install-xattr/install-xattr.c | 17 +
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index 7dc248b..7b73cc3 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -162,9 +162,8 @@ copyxattr(const char *source, const char *target)
 
 
 static char *
-which(const char *myfile)
+which(char *mypath)
 {
-   char *mypath = realpath(myfile, NULL);   /* argv[0]'s 
canonical path   */
char *path, *env_path = getenv(PATH);  /* full $PATH 
string  */
char *portage_bin_path = getenv(PORTAGE_BIN_PATH); /* PORTAGE BIN 
$PATHs to skip */
 
@@ -206,7 +205,6 @@ which(const char *myfile)
  */
if (stat(canpath, s) == 0)
if (S_ISREG(s.st_mode)) {
-   free(mypath);
free(path);
return canpath;
}
@@ -238,11 +236,13 @@ main(int argc, char* argv[])
int first, last;   /* argv indices of the first 
file/directory and last*/
char *target;  /* the target file or directory  
   */
char *path;/* path to the target file   
   */
-   char *install; /* path to the system install
   */
+
+   char *mypath = realpath(/proc/self/exe, NULL); /* path to argv[0] 
   */
+   char *install;   /* path to the system 
install */
 
struct stat s; /* test if a file is a regular file or a 
directory  */
 
-   char *portage_xattr_exclude;  /* strings of excluded xattr names from 
$PORTAGE_XATTR_EXCLUDE   */
+   char *portage_xattr_exclude;   /* strings of excluded xattr names from 
$PORTAGE_XATTR_EXCLUDE  */
 
portage_xattr_exclude = getenv(PORTAGE_XATTR_EXCLUDE);
if (portage_xattr_exclude == NULL)
@@ -316,9 +316,10 @@ main(int argc, char* argv[])
err(1, fork() failed);
 
case 0:
-   install = which(argv[0]);
-   argv[0] = install;/* so coreutils' lib/program.c 
behaves */
-   execv(install, argv); /* The kernel will free(install). 
 */
+   install = which(mypath);  /* find system install 
avoiding mypath! */
+   free(mypath);
+   argv[0] = install;/* so coreutils' 
lib/program.c behaves  */
+   execv(install, argv); /* The kernel will 
free(install).   */
err(1, execv() failed);
 
default:



[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2014-06-09 Thread Anthony G. Basile
commit: ba08589f95e4ec77b5e7f73f97278730dc426bcd
Author: Anthony G. Basile blueness AT gentoo DOT org
AuthorDate: Sun Jun  8 20:15:06 2014 +
Commit: Anthony G. Basile blueness AT gentoo DOT org
CommitDate: Tue Jun 10 01:49:02 2014 +
URL:
http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=ba08589f

misc/install-xattr: refine the behavior of which()

The wrapper must avoid invoking itself in its attempt to find the
system `install` path.  The old behavior was to avoid looking in
the same directory as the wrapper, but this is too crude since we
might have the wrapper in /usr/bin (say), and the system `install`
in the same directory, in which case we'll wind up skipping it.
The new behavior of which() is to accept argv[0], find its canonical
path and skip if it is equal to the canditate system `install` we
are checking.

We also add PORTAGE_BIN_PATH which will be used in a future commit
to avoid this wrapper from finding portage's wrapper.  We can then
get into a situation where the portage wrapper, usually at
${PORTAGE_BIN_PATH}/ebuild-helpers/xattr/install calls this wrapper,
usually at /usr/bin/install-xattr, which in turn calls the portage
wrapper in an infinite self-invocation (fork bomb).

---
 misc/install-xattr/install-xattr.c | 42 ++
 1 file changed, 24 insertions(+), 18 deletions(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index c0c68f9..7dc248b 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -162,10 +162,11 @@ copyxattr(const char *source, const char *target)
 
 
 static char *
-which(const char *mydir)
+which(const char *myfile)
 {
-   char *mycandir = realpath(mydir, NULL);  /* canonical value of 
argv[0]'s dirname */
-   char *path, *env_path = getenv(PATH);  /* full $PATH string   
 */
+   char *mypath = realpath(myfile, NULL);   /* argv[0]'s 
canonical path   */
+   char *path, *env_path = getenv(PATH);  /* full $PATH 
string  */
+   char *portage_bin_path = getenv(PORTAGE_BIN_PATH); /* PORTAGE BIN 
$PATHs to skip */
 
/* If we don't have $PATH in our environment, then pick a sane path. */
if (env_path == NULL) {
@@ -175,39 +176,44 @@ which(const char *mydir)
} else
path = xstrdup(env_path);
 
-   char *dir;   /* one directory in the $PATH string */
-   char *candir;/* canonical value of that directory */
-   char *file;  /* file name = path + /install */
-   char *savedptr;  /* reentrant context for strtok_r()  */
+   char *dir;   /* one directory in the colon delimited $PATH string */
+   char *canfile;   /* candidate install's path = dir + /install   */
+   char *canpath;   /* candidate install's canonical path*/
+   char *sdir;  /* one directory in the $INSTALL_EXCLUDE_PATH string */
+   char *savedptr;  /* reentrant context for strtok_r()  */
 
struct stat s;
 
dir = strtok_r(path, :, savedptr);
 
while (dir) {
-   candir = realpath(dir, NULL);
+   canfile = path_join(dir, install);
+   canpath = realpath(canfile, NULL);
+   free(canfile);
 
/* ignore invalid paths that cannot be canonicalized */
-   if (!candir)
+   if (!canpath)
goto skip;
 
-   file = path_join(candir, install);
+   /* If argv[0]'s canonical path == candidates install's 
canonical path,
+* then we skip this path otheriwise we get into an infinite 
self-invocation.
+*/
+   if (!strcmp(mypath, canpath))
+   goto skip;
 
-   /* If the file exists and is either a regular file or sym link,
+   /* If the canpath exists and is either a regular file or sym 
link,
 * assume we found the system's install.
  */
-   if (stat(file, s) == 0)
+   if (stat(canpath, s) == 0)
if (S_ISREG(s.st_mode)) {
-   free(candir);
-   free(mycandir);
+   free(mypath);
free(path);
-   return file;
+   return canpath;
}
 
-   free(file);
 
  skip:
-   free(candir);
+   free(canpath);
dir = strtok_r(NULL, :, savedptr);
}
 
@@ -310,7 +316,7 @@ main(int argc, char* argv[])
err(1, fork() failed);
 
case 0:
-   install = which(dirname(argv[0]));
+   install = which(argv[0]);
argv[0] = install;/* so coreutils' 

[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2014-06-08 Thread Anthony G. Basile
commit: 03c8c49c168246e6941d1344bcb4605955de0a26
Author: Anthony G. Basile blueness AT gentoo DOT org
AuthorDate: Sun Jun  8 20:15:06 2014 +
Commit: Anthony G. Basile blueness AT gentoo DOT org
CommitDate: Sun Jun  8 20:15:06 2014 +
URL:
http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=03c8c49c

misc/install: refine the behavior of which()

The wrapper must avoid invoking itself in its attempt to find the
system `install` path.  The old behavior was to avoid looking in
the same directory as the wrapper, but this is too crude since we
might have the wrapper in /usr/bin (say), and the system `install`
in the same directory, in which case we'll wind up skipping it.
The new behavior of which() is to accept argv[0], find its canonical
path and skip if it is equal to the canditate system `install` we
are checking.

We also add PORTAGE_BIN_PATH which will be used in a future commit
to avoid this wrapper from finding portage's wrapper.  We can then
get into a situation where the portage wrapper, usually at
${PORTAGE_BIN_PATH}/ebuild-helpers/xattr/install calls this wrapper,
usually at /usr/bin/install-xattr, which in turn calls the portage
wrapper in an infinite self-invocation (fork bomb).

---
 misc/install-xattr/install-xattr.c | 42 ++
 1 file changed, 24 insertions(+), 18 deletions(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index c0c68f9..7dc248b 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -162,10 +162,11 @@ copyxattr(const char *source, const char *target)
 
 
 static char *
-which(const char *mydir)
+which(const char *myfile)
 {
-   char *mycandir = realpath(mydir, NULL);  /* canonical value of 
argv[0]'s dirname */
-   char *path, *env_path = getenv(PATH);  /* full $PATH string   
 */
+   char *mypath = realpath(myfile, NULL);   /* argv[0]'s 
canonical path   */
+   char *path, *env_path = getenv(PATH);  /* full $PATH 
string  */
+   char *portage_bin_path = getenv(PORTAGE_BIN_PATH); /* PORTAGE BIN 
$PATHs to skip */
 
/* If we don't have $PATH in our environment, then pick a sane path. */
if (env_path == NULL) {
@@ -175,39 +176,44 @@ which(const char *mydir)
} else
path = xstrdup(env_path);
 
-   char *dir;   /* one directory in the $PATH string */
-   char *candir;/* canonical value of that directory */
-   char *file;  /* file name = path + /install */
-   char *savedptr;  /* reentrant context for strtok_r()  */
+   char *dir;   /* one directory in the colon delimited $PATH string */
+   char *canfile;   /* candidate install's path = dir + /install   */
+   char *canpath;   /* candidate install's canonical path*/
+   char *sdir;  /* one directory in the $INSTALL_EXCLUDE_PATH string */
+   char *savedptr;  /* reentrant context for strtok_r()  */
 
struct stat s;
 
dir = strtok_r(path, :, savedptr);
 
while (dir) {
-   candir = realpath(dir, NULL);
+   canfile = path_join(dir, install);
+   canpath = realpath(canfile, NULL);
+   free(canfile);
 
/* ignore invalid paths that cannot be canonicalized */
-   if (!candir)
+   if (!canpath)
goto skip;
 
-   file = path_join(candir, install);
+   /* If argv[0]'s canonical path == candidates install's 
canonical path,
+* then we skip this path otheriwise we get into an infinite 
self-invocation.
+*/
+   if (!strcmp(mypath, canpath))
+   goto skip;
 
-   /* If the file exists and is either a regular file or sym link,
+   /* If the canpath exists and is either a regular file or sym 
link,
 * assume we found the system's install.
  */
-   if (stat(file, s) == 0)
+   if (stat(canpath, s) == 0)
if (S_ISREG(s.st_mode)) {
-   free(candir);
-   free(mycandir);
+   free(mypath);
free(path);
-   return file;
+   return canpath;
}
 
-   free(file);
 
  skip:
-   free(candir);
+   free(canpath);
dir = strtok_r(NULL, :, savedptr);
}
 
@@ -310,7 +316,7 @@ main(int argc, char* argv[])
err(1, fork() failed);
 
case 0:
-   install = which(dirname(argv[0]));
+   install = which(argv[0]);
argv[0] = install;/* so coreutils' 

[gentoo-commits] proj/elfix:master commit in: misc/install-xattr/

2014-05-31 Thread Anthony G. Basile
commit: 53a5c9cababc4a681c026b7ce445e29da4666d6c
Author: Anthony G. Basile blueness AT gentoo DOT org
AuthorDate: Sun Jun  1 00:27:08 2014 +
Commit: Anthony G. Basile blueness AT gentoo DOT org
CommitDate: Sun Jun  1 00:27:18 2014 +
URL:
http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=53a5c9ca

misc/install-xattr: remove argv[0]'s dirname check

We should not skip argv[0]'s canonical dirname == the path's canonical dirname
because both install and install-xattr are usually installed in /usr/bin.  We
won't get into an infinite self-invocation because the basename is different.

---
 misc/install-xattr/install-xattr.c | 6 --
 1 file changed, 6 deletions(-)

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index 8de76db..c0c68f9 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/misc/install-xattr/install-xattr.c
@@ -191,12 +191,6 @@ which(const char *mydir)
if (!candir)
goto skip;
 
-   /* If argv[0]'s canonical dirname == the path's canonical 
dirname, then we
-* skip this path otheriwise we get into an infinite 
self-invocation.
-*/
-   if (!strcmp(mycandir, candir))
-   goto skip;
-
file = path_join(candir, install);
 
/* If the file exists and is either a regular file or sym link,