diff mbox

sudo: fix install

Message ID 1340102153-22387-1-git-send-email-spdawson@gmail.com
State Superseded
Headers show

Commit Message

Simon Dawson June 19, 2012, 10:35 a.m. UTC
From: Simon Dawson <spdawson@gmail.com>

Running sudo on the target fails with the following errors.

  sudo: /usr/libexec/sudoers.so: No such file or directory
  sudo: fatal error, unable to load plugins

The problem is that the installation of the sudo package is broken. This patch
replaces the hand-crafted install rule with the default AUTOTARGETS install.

Unfortunately, the default install fails because it includes a step that invokes
the cross-compiled visudo binary. A patch is provided here to disable this
visudo invocation, which is for sanity checking only.

Signed-off-by: Simon Dawson <spdawson@gmail.com>
---
 package/sudo/sudo-fix-sudoers-plugin-install.patch |   19 +++++++++++++++++++
 package/sudo/sudo.mk                               |    8 --------
 2 files changed, 19 insertions(+), 8 deletions(-)
 create mode 100644 package/sudo/sudo-fix-sudoers-plugin-install.patch

Comments

Thomas Petazzoni June 19, 2012, 10:51 a.m. UTC | #1
Hello,

Le Tue, 19 Jun 2012 11:35:53 +0100,
spdawson@gmail.com a écrit :

> diff --git a/package/sudo/sudo-fix-sudoers-plugin-install.patch b/package/sudo/sudo-fix-sudoers-plugin-install.patch
> new file mode 100644
> index 0000000..e85e5d8
> --- /dev/null
> +++ b/package/sudo/sudo-fix-sudoers-plugin-install.patch
> @@ -0,0 +1,19 @@
> +The installation of the sudoers plugin fails when cross compiling, because it
> +tries to run the cross-compiled visudo, rather than that of the host.
> +
> +The visudo invocation is only required in order to sanity check any existing
> +sudoers file in the target directory; this can safely be dispensed with.
> +
> +Signed-off-by: Simon Dawson <spdawson@gmail.com>
> +diff -Nurp a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in
> +--- a/plugins/sudoers/Makefile.in	2012-05-15 17:22:02.000000000 +0100
> ++++ b/plugins/sudoers/Makefile.in	2012-06-19 11:24:00.322449438 +0100
> +@@ -239,7 +239,7 @@ sudoers: $(srcdir)/sudoers.in
> + pre-install:
> + 	@if test -r $(DESTDIR)$(sudoersdir)/sudoers; then \
> + 	    echo "Checking existing sudoers file for syntax errors."; \
> +-	    ./visudo -c -f $(DESTDIR)$(sudoersdir)/sudoers; \
> ++	    (echo "SKIPPED" || ./visudo -c -f $(DESTDIR)$(sudoersdir)/sudoers); \
> + 	fi
> + 
> + install: install-plugin install-binaries install-sudoers install-doc

Do you think you can turn this into a patch that can be submitted
upstream? I.e, if autoconf has detected that we're cross-compiling,
skip this install check?

Thomas
Simon Dawson June 19, 2012, 11:19 a.m. UTC | #2
> Do you think you can turn this into a patch that can be submitted
> upstream? I.e, if autoconf has detected that we're cross-compiling,
> skip this install check?

I've submitted a bug report to the sudo Bugzilla:

  http://www.gratisoft.us/bugzilla/show_bug.cgi?id=560

To be honest, my knowledge of autoconf/automake is not sufficient to
be able to fix this properly; specifically, I don't know how or if the
cross-compile can be detected in the Makefiles. If someone can point
me in the right direction I'm quite happy to send a patch upstream...
Simon Dawson June 21, 2012, 8:44 a.m. UTC | #3
> I've submitted a bug report to the sudo Bugzilla:
>
>  http://www.gratisoft.us/bugzilla/show_bug.cgi?id=560

The bug has now been fixed upstream (not by me) in commit 8209:0c4e3f68b2f5

Unfortunately, the fix will not appear until sudo 1.8.6 is released,
so we've still got a broken sudo package in Buildroot. I'm going to
submit an updated patch that backports the upstream fix, as an interim
solution until the release of sudo 1.8.6.
diff mbox

Patch

diff --git a/package/sudo/sudo-fix-sudoers-plugin-install.patch b/package/sudo/sudo-fix-sudoers-plugin-install.patch
new file mode 100644
index 0000000..e85e5d8
--- /dev/null
+++ b/package/sudo/sudo-fix-sudoers-plugin-install.patch
@@ -0,0 +1,19 @@ 
+The installation of the sudoers plugin fails when cross compiling, because it
+tries to run the cross-compiled visudo, rather than that of the host.
+
+The visudo invocation is only required in order to sanity check any existing
+sudoers file in the target directory; this can safely be dispensed with.
+
+Signed-off-by: Simon Dawson <spdawson@gmail.com>
+diff -Nurp a/plugins/sudoers/Makefile.in b/plugins/sudoers/Makefile.in
+--- a/plugins/sudoers/Makefile.in	2012-05-15 17:22:02.000000000 +0100
++++ b/plugins/sudoers/Makefile.in	2012-06-19 11:24:00.322449438 +0100
+@@ -239,7 +239,7 @@ sudoers: $(srcdir)/sudoers.in
+ pre-install:
+ 	@if test -r $(DESTDIR)$(sudoersdir)/sudoers; then \
+ 	    echo "Checking existing sudoers file for syntax errors."; \
+-	    ./visudo -c -f $(DESTDIR)$(sudoersdir)/sudoers; \
++	    (echo "SKIPPED" || ./visudo -c -f $(DESTDIR)$(sudoersdir)/sudoers); \
+ 	fi
+ 
+ install: install-plugin install-binaries install-sudoers install-doc
diff --git a/package/sudo/sudo.mk b/package/sudo/sudo.mk
index 3629ad1..f1efc54 100644
--- a/package/sudo/sudo.mk
+++ b/package/sudo/sudo.mk
@@ -14,12 +14,4 @@  SUDO_CONF_OPT = \
 		--without-interfaces \
 		--without-pam
 
-define SUDO_INSTALL_TARGET_CMDS
-	install -m 4555 -D $(@D)/src/sudo $(TARGET_DIR)/usr/bin/sudo
-	install -m 0555 -D $(@D)/plugins/sudoers/visudo  \
-		$(TARGET_DIR)/usr/sbin/visudo
-	install -m 0440 -D $(@D)/plugins/sudoers/sudoers \
-		$(TARGET_DIR)/etc/sudoers
-endef
-
 $(eval $(call AUTOTARGETS))