unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: master 7f97cf31dc3: Create blessmail at build time instead of install time
       [not found] ` <20240823115720.C4A92C1FB72@vcs2.savannah.gnu.org>
@ 2024-08-23 12:17   ` Pip Cet
  2024-08-23 12:35     ` : " Robert Pluim
  0 siblings, 1 reply; 8+ messages in thread
From: Pip Cet @ 2024-08-23 12:17 UTC (permalink / raw)
  To: emacs-devel; +Cc: Robert Pluim

"Robert Pluim" <rpluim@gmail.com> writes:

> branch: master
> commit 7f97cf31dc3eb483f84598f61e9f45805f901067
> Author: Robert Pluim <rpluim@gmail.com>
> Commit: Robert Pluim <rpluim@gmail.com>
>
>     Create blessmail at build time instead of install time
>
>     blessmail is built via the install target, which means it ends up owned
>     by the user doing the install.  It's not installed, so build it at build
>     time instead.
>
>     Reported by Michael Heerdegen <michael_heerdegen@web.de> in
>     <https://lists.gnu.org/archive/html/help-gnu-emacs/2024-08/msg00270.html>
>
>     * Makefile.in (install): Move blessmail target from install to actual-all.

All the patch appears to do is to remove blessmail from 'install', so
it's no longer run at all.  Maybe there's a second part to it that
wasn't committed?  Or am I missing something?

Pip




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: : master 7f97cf31dc3: Create blessmail at build time instead of install time
  2024-08-23 12:17   ` master 7f97cf31dc3: Create blessmail at build time instead of install time Pip Cet
@ 2024-08-23 12:35     ` Robert Pluim
  2024-08-23 13:03       ` Pip Cet
  0 siblings, 1 reply; 8+ messages in thread
From: Robert Pluim @ 2024-08-23 12:35 UTC (permalink / raw)
  To: Pip Cet; +Cc: emacs-devel

>>>>> On Fri, 23 Aug 2024 12:17:26 +0000, Pip Cet <pipcet@protonmail.com> said:

    Pip> "Robert Pluim" <rpluim@gmail.com> writes:
    >> branch: master
    >> commit 7f97cf31dc3eb483f84598f61e9f45805f901067
    >> Author: Robert Pluim <rpluim@gmail.com>
    >> Commit: Robert Pluim <rpluim@gmail.com>
    >> 
    >> Create blessmail at build time instead of install time
    >> 
    >> blessmail is built via the install target, which means it ends up owned
    >> by the user doing the install.  It's not installed, so build it at build
    >> time instead.
    >> 
    >> Reported by Michael Heerdegen <michael_heerdegen@web.de> in
    >> <https://lists.gnu.org/archive/html/help-gnu-emacs/2024-08/msg00270.html>
    >> 
    >> * Makefile.in (install): Move blessmail target from install to actual-all.

    Pip> All the patch appears to do is to remove blessmail from 'install', so
    Pip> it's no longer run at all.  Maybe there's a second part to it that
    Pip> wasn't committed?  Or am I missing something?

Oops. I just pushed the 2nd half of the patch.

Robert
-- 



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: : master 7f97cf31dc3: Create blessmail at build time instead of install time
  2024-08-23 12:35     ` : " Robert Pluim
@ 2024-08-23 13:03       ` Pip Cet
  2024-08-23 16:07         ` : " Robert Pluim
  0 siblings, 1 reply; 8+ messages in thread
From: Pip Cet @ 2024-08-23 13:03 UTC (permalink / raw)
  To: Robert Pluim; +Cc: emacs-devel

"Robert Pluim" <rpluim@gmail.com> writes:

>>>>>> On Fri, 23 Aug 2024 12:17:26 +0000, Pip Cet <pipcet@protonmail.com> said:
>
>     Pip> "Robert Pluim" <rpluim@gmail.com> writes:
>     >> branch: master
>     >> commit 7f97cf31dc3eb483f84598f61e9f45805f901067
>     >> Author: Robert Pluim <rpluim@gmail.com>
>     >> Commit: Robert Pluim <rpluim@gmail.com>
>     >>
>     >> Create blessmail at build time instead of install time
>     >>
>     >> blessmail is built via the install target, which means it ends up owned
>     >> by the user doing the install.  It's not installed, so build it at build
>     >> time instead.
>     >>
>     >> Reported by Michael Heerdegen <michael_heerdegen@web.de> in
>     >> <https://lists.gnu.org/archive/html/help-gnu-emacs/2024-08/msg00270.html>
>     >>
>     >> * Makefile.in (install): Move blessmail target from install to actual-all.
>
>     Pip> All the patch appears to do is to remove blessmail from 'install', so
>     Pip> it's no longer run at all.  Maybe there's a second part to it that
>     Pip> wasn't committed?  Or am I missing something?
>
> Oops. I just pushed the 2nd half of the patch.

I still don't understand this change, I'm afraid.  IIUC, the idea is
that this message is printed at install time, not at build time:

Assuming /usr/spool/mail is really the mail spool directory, you should
run  lib-src/blessmail /usr/local/libexec/emacs/31.0.50/x86_64-pc-linux-gnu/movemail
as root, to give  movemail  appropriate permissions.
Do that after running  make install.


It's not clear to me that building lib-src/blessmail at build time is
always safe: the user building Emacs might well be in a chroot jail or
restricted so they're unable to access 'rmail-spool-directory'.

As this is really a post-install dependency, I think we need to find a
better way of dealing with it.  Maybe we can do without "blessmail"
entirely, and have "blessmail.el" print the full instructions when run,
rather than putting them into "blessmail"?

Pip




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: : : master 7f97cf31dc3: Create blessmail at build time instead of install time
  2024-08-23 13:03       ` Pip Cet
@ 2024-08-23 16:07         ` Robert Pluim
  2024-08-24 13:21           ` Pip Cet
  0 siblings, 1 reply; 8+ messages in thread
From: Robert Pluim @ 2024-08-23 16:07 UTC (permalink / raw)
  To: Pip Cet; +Cc: emacs-devel

>>>>> On Fri, 23 Aug 2024 13:03:00 +0000, Pip Cet <pipcet@protonmail.com> said:
    Pip> I still don't understand this change, I'm afraid.  IIUC, the idea is
    Pip> that this message is printed at install time, not at build time:

    Pip> Assuming /usr/spool/mail is really the mail spool directory, you should
    Pip> run  lib-src/blessmail /usr/local/libexec/emacs/31.0.50/x86_64-pc-linux-gnu/movemail
    Pip> as root, to give  movemail  appropriate permissions.
    Pip> Do that after running  make install.


    Pip> It's not clear to me that building lib-src/blessmail at build time is
    Pip> always safe: the user building Emacs might well be in a chroot jail or
    Pip> restricted so they're unable to access 'rmail-spool-directory'.

Building it at install time isnʼt safe either, since blessmail can end
up owned by 'root'.

    Pip> As this is really a post-install dependency, I think we need to find a
    Pip> better way of dealing with it.  Maybe we can do without "blessmail"
    Pip> entirely, and have "blessmail.el" print the full instructions when run,
    Pip> rather than putting them into "blessmail"?

That could be done. If we had a 'chown' subr it could even be elisp.

Robert
-- 



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: : : master 7f97cf31dc3: Create blessmail at build time instead of install time
  2024-08-23 16:07         ` : " Robert Pluim
@ 2024-08-24 13:21           ` Pip Cet
  2024-08-25  2:50             ` Michael Heerdegen via Emacs development discussions.
  0 siblings, 1 reply; 8+ messages in thread
From: Pip Cet @ 2024-08-24 13:21 UTC (permalink / raw)
  To: Robert Pluim; +Cc: emacs-devel

"Robert Pluim" <rpluim@gmail.com> writes:

>>>>>> On Fri, 23 Aug 2024 13:03:00 +0000, Pip Cet <pipcet@protonmail.com> said:
>     Pip> I still don't understand this change, I'm afraid.  IIUC, the idea is
>     Pip> that this message is printed at install time, not at build time:
>
>     Pip> Assuming /usr/spool/mail is really the mail spool directory, you should
>     Pip> run  lib-src/blessmail /usr/local/libexec/emacs/31.0.50/x86_64-pc-linux-gnu/movemail
>     Pip> as root, to give  movemail  appropriate permissions.
>     Pip> Do that after running  make install.
>
>
>     Pip> It's not clear to me that building lib-src/blessmail at build time is
>     Pip> always safe: the user building Emacs might well be in a chroot jail or
>     Pip> restricted so they're unable to access 'rmail-spool-directory'.
>
> Building it at install time isnʼt safe either, since blessmail can end
> up owned by 'root'.

You're right, of course.

I wonder whether any popular distributors rely on 'blessmail' to do its
thing, in which case we'd probably need to continue having a
lib-src/blessmail executable, or whether it's exclusively end users, in
which case a simple message might be enough.

>     Pip> As this is really a post-install dependency, I think we need to find a
>     Pip> better way of dealing with it.  Maybe we can do without "blessmail"
>     Pip> entirely, and have "blessmail.el" print the full instructions when run,
>     Pip> rather than putting them into "blessmail"?
>
> That could be done. If we had a 'chown' subr it could even be elisp.

Well, we could call 'shell-command'.

My proposal would be something like this patch plus a new make target
"postinstall-blessmail", which would make blessmail.el run rather than
print the commands needed to bless movemail.  If that's even needed at
this point.

From a9d431584075f1d35f84004c995e42f3ea9ac149 Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@protonmail.com>
Date: Sat, 24 Aug 2024 13:15:02 +0000
Subject: [PATCH] Don't create a blessmail executable

Instead, modify blessmail.el so it prints the instructions directly.

* Makefile.in (actual-all): Remove 'blessmail'
(install): Add 'blessmail'.
* lib-src/Makefile.in (blessmail): Remove target.
(need-blessmail): Call blessmail.el to print instructions.
* lisp/mail/blessmail.el: Print commands rather than writing them to
'blessmail'.
---
 Makefile.in            |  4 ++--
 lib-src/Makefile.in    | 16 ++------------
 lisp/mail/blessmail.el | 47 ++++++++++++++++++++++--------------------
 3 files changed, 29 insertions(+), 38 deletions(-)

diff --git a/Makefile.in b/Makefile.in
index 30a762ed03b..1b6c7eb05dc 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -381,7 +381,7 @@ bootstrap-all:
 
 .PHONY: bootstrap-all actual-all advice-on-failure sanity-check
 
-actual-all: ${SUBDIR} info $(gsettings_SCHEMAS:.xml=.valid) src-depending-on-lisp blessmail
+actual-all: ${SUBDIR} info $(gsettings_SCHEMAS:.xml=.valid) src-depending-on-lisp
 
 # ADVICE-ON-FAILURE-BEGIN:all
 # You could try to:
@@ -602,7 +602,7 @@ .PHONY:
 ## don't have to duplicate the list of utilities to install in
 ## this Makefile as well.
 
-install: actual-all install-arch-indep install-etcdoc install-arch-dep install-$(NTDIR) install-eln install-gsettings-schemas
+install: actual-all install-arch-indep install-etcdoc install-arch-dep install-$(NTDIR) blessmail install-eln install-gsettings-schemas
 	@true
 
 ## Ensure that $subdir contains a subdirs.el file.
diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in
index 3cdf1620781..dd827b8df69 100644
--- a/lib-src/Makefile.in
+++ b/lib-src/Makefile.in
@@ -294,22 +294,10 @@ .PHONY:
 LOADLIBES = ../lib/libgnu.a $(LIBS_SYSTEM)
 $(EXE_FILES): ../lib/libgnu.a
 
-## Only used if we need blessmail, but no harm in always defining.
-## This makes the actual blessmail executable.
-blessmail: $(srcdir)/../lisp/mail/blessmail.el
-	$(AM_V_GEN)$(EMACS) $(EMACSOPT) -l $<
-	$(AM_V_at)chmod +x $@
-
 ## This checks if we need to run blessmail.
 ## Do not charge ahead and do it!  Let the installer decide.
-need-blessmail: blessmail
-	@if [ `wc -l <blessmail` != 2 ] ; then \
-	  dir=`sed -n -e 's/echo mail directory = \(.*\)/\1/p' blessmail`; \
-	  echo "Assuming $$dir is really the mail spool directory, you should"; \
-	  echo "run  lib-src/blessmail $(DESTDIR)${archlibdir}/movemail${EXEEXT}"; \
-	  echo "as root, to give  movemail${EXEEXT}  appropriate permissions."; \
-	  echo "Do that after running  make install."; \
-	fi
+need-blessmail: $(srcdir)/../lisp/mail/blessmail.el
+	@${EMACS} --batch --eval '(setq movemail-path "$(DESTDIR)${archlibdir}/movemail${EXEEXT}")' --load $<
 
 ## This is the target invoked by the top-level Makefile.
 maybe-blessmail: $(BLESSMAIL_TARGET)
diff --git a/lisp/mail/blessmail.el b/lisp/mail/blessmail.el
index 47e9bb58e06..6c3836f0c2f 100644
--- a/lisp/mail/blessmail.el
+++ b/lisp/mail/blessmail.el
@@ -23,8 +23,7 @@
 
 ;;; Commentary:
 
-;; This is loaded into a bare Emacs to create the blessmail script,
-;; which (on systems that need it) is used during installation
+;; This is loaded into Emacs to print instructions
 ;; to give appropriate permissions to movemail.
 ;;
 ;; It has to be done from Lisp in order to be sure of getting the
@@ -32,11 +31,11 @@
 
 ;;; Code:
 
-;; These are no longer needed because we run this in emacs instead of temacs.
-;; (message "Using load-path %s" load-path)
-;; (load "paths.el")
-;; It is not safe to load site-init.el here, because it might have things in it
-;; that won't load properly unless all the rest of Emacs is loaded.
+(defun blessmail-command (string)
+  (if (and (boundp 'blessmail-doit)
+           blessmail-doit)
+      (shell-command string)
+    (message (concat "  " string))))
 
 (let ((dirname (directory-file-name rmail-spool-directory))
       linkname attr modes)
@@ -45,24 +44,28 @@
     (setq dirname (if (file-name-absolute-p linkname)
 		      linkname
 		    (concat (file-name-directory dirname) linkname))))
-  (insert "#!/bin/sh\n")
   (setq attr (file-attributes dirname))
   (if (not (eq t (car attr)))
-      (insert (format "echo %s is not a directory\n" rmail-spool-directory))
+      (message (format "%s is not a directory\n" rmail-spool-directory))
     (setq modes (file-attribute-modes attr))
-    (cond ((= ?w (aref modes 8))
-	   ;; Nothing needs to be done.
-	   )
-	  ((= ?w (aref modes 5))
-	   (insert "chgrp " (number-to-string (file-attribute-group-id attr))
-		   " $* && chmod g+s $*\n"))
-	  ((= ?w (aref modes 2))
-	   (insert "chown " (number-to-string (file-attribute-user-id attr))
-		   " $* && chmod u+s $*\n"))
-	  (t
-	   (insert "chown root $* && chmod u+s $*\n"))))
-  (insert "echo mail directory = " dirname "\n"))
-(write-region (point-min) (point-max) "blessmail")
+    (unless (= ?w (aref modes 8))
+      (message (concat "Assuming %s is really the mail spool directory, you should\n"
+                       "run the following commands as root, to give  %s\n"
+                       "appropriate permissions:\n")
+               dirname (file-name-nondirectory movemail-path))
+      (cond
+       ((= ?w (aref modes 5))
+	(blessmail-command
+         (concat "chgrp " (number-to-string (file-attribute-group-id attr))
+		 " " movemail-path " && chmod g+s " movemail-path)))
+       ((= ?w (aref modes 2))
+        (blessmail-command
+         (concat "chown " (number-to-string (file-attribute-user-id attr))
+		 " " movemail-path " && chmod u+s " movemail-path)))
+       (t
+        (blessmail-command
+         (concat "chown root " movemail-path " && chmod u+s " movemail-path)))))
+    (message "\nDo that after running  make install.")))
 (kill-emacs)
 
 ;;; blessmail.el ends here
-- 
2.45.2





^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: : : master 7f97cf31dc3: Create blessmail at build time instead of install time
  2024-08-24 13:21           ` Pip Cet
@ 2024-08-25  2:50             ` Michael Heerdegen via Emacs development discussions.
  2024-08-25  5:10               ` Pip Cet
  0 siblings, 1 reply; 8+ messages in thread
From: Michael Heerdegen via Emacs development discussions. @ 2024-08-25  2:50 UTC (permalink / raw)
  To: emacs-devel

Pip Cet <pipcet@protonmail.com> writes:

> +(defun blessmail-command (string)
> +  (if (and (boundp 'blessmail-doit)
> +           blessmail-doit)
> +      (shell-command string)
> +    (message (concat "  " string))))

Better (message "%s" ...) maybe?  But my main point is:

> +    (unless (= ?w (aref modes 8))
> +      (message (concat "Assuming %s is really the mail spool directory, you should\n"
> +                       "run the following commands as root, to give  %s\n"
> +                       "appropriate permissions:\n")
> +               dirname (file-name-nondirectory movemail-path))
> +      (cond
> +       ((= ?w (aref modes 5))
> +	(blessmail-command
> +         (concat "chgrp " (number-to-string (file-attribute-group-id attr))
> +		 " " movemail-path " && chmod g+s " movemail-path)))
> +       ((= ?w (aref modes 2))
> +        (blessmail-command
> +         (concat "chown " (number-to-string (file-attribute-user-id attr))
> +		 " " movemail-path " && chmod u+s " movemail-path)))
> +       (t
> +        (blessmail-command
> +         (concat "chown root " movemail-path " && chmod u+s " movemail-path)))))
> +    (message "\nDo that after running  make install.")))
>  (kill-emacs)

Not an expert for shell stuff, but: wouldn't this cause trouble for
people using a non-posix compliant shell, like the popular fish shell?

AFAIU this will be called before the user can even set `shell-file-name'.


Michael.




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: : : master 7f97cf31dc3: Create blessmail at build time instead of install time
  2024-08-25  2:50             ` Michael Heerdegen via Emacs development discussions.
@ 2024-08-25  5:10               ` Pip Cet
  2024-08-25  5:54                 ` Michael Heerdegen
  0 siblings, 1 reply; 8+ messages in thread
From: Pip Cet @ 2024-08-25  5:10 UTC (permalink / raw)
  To: Michael Heerdegen via "Emacs development discussions."
  Cc: Michael Heerdegen

"Michael Heerdegen via \"Emacs development discussions.\"" <emacs-devel@gnu.org> writes:
> Pip Cet <pipcet@protonmail.com> writes:
>
>> +(defun blessmail-command (string)
>> +  (if (and (boundp 'blessmail-doit)
>> +           blessmail-doit)
>> +      (shell-command string)
>> +    (message (concat "  " string))))
>
> Better (message "%s" ...) maybe?  But my main point is:

Yes, you're right.

>> +    (unless (= ?w (aref modes 8))
>> +      (message (concat "Assuming %s is really the mail spool directory, you should\n"
>> +                       "run the following commands as root, to give  %s\n"
>> +                       "appropriate permissions:\n")
>> +               dirname (file-name-nondirectory movemail-path))
>> +      (cond
>> +       ((= ?w (aref modes 5))
>> +	(blessmail-command
>> +         (concat "chgrp " (number-to-string (file-attribute-group-id attr))
>> +		 " " movemail-path " && chmod g+s " movemail-path)))
>> +       ((= ?w (aref modes 2))
>> +        (blessmail-command
>> +         (concat "chown " (number-to-string (file-attribute-user-id attr))
>> +		 " " movemail-path " && chmod u+s " movemail-path)))
>> +       (t
>> +        (blessmail-command
>> +         (concat "chown root " movemail-path " && chmod u+s " movemail-path)))))
>> +    (message "\nDo that after running  make install.")))
>>  (kill-emacs)
>
> Not an expert for shell stuff, but: wouldn't this cause trouble for
> people using a non-posix compliant shell, like the popular fish shell?

You mean because of the "&&"?  That appears to work with a recent fish
shell version, but I'm not sure about other shells people might use as
their root shell.

> AFAIU this will be called before the user can even set `shell-file-name'.

I believe that's correct, but as the commands are only printed, so far,
it's maybe less of a problem.  With non-POSIX root shells, pretty much
all bets are off, though, aren't they?  It's not even clear sh -c
'chrgrp ... && chmod ...' would work?

Pip




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: : : master 7f97cf31dc3: Create blessmail at build time instead of install time
  2024-08-25  5:10               ` Pip Cet
@ 2024-08-25  5:54                 ` Michael Heerdegen
  0 siblings, 0 replies; 8+ messages in thread
From: Michael Heerdegen @ 2024-08-25  5:54 UTC (permalink / raw)
  To: Pip Cet; +Cc: Michael Heerdegen via "Emacs development discussions."

Pip Cet <pipcet@protonmail.com> writes:

> I believe that's correct, but as the commands are only printed, so far,
> it's maybe less of a problem.  With non-POSIX root shells, pretty much
> all bets are off, though, aren't they?  It's not even clear sh -c
> 'chrgrp ... && chmod ...' would work?

They are only printed?  Then I don't see a problem.  Else I would have
suggested to try to avoid using a shell.

Michael.



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2024-08-25  5:54 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <172441424046.32730.1198862680597856819@vcs2.savannah.gnu.org>
     [not found] ` <20240823115720.C4A92C1FB72@vcs2.savannah.gnu.org>
2024-08-23 12:17   ` master 7f97cf31dc3: Create blessmail at build time instead of install time Pip Cet
2024-08-23 12:35     ` : " Robert Pluim
2024-08-23 13:03       ` Pip Cet
2024-08-23 16:07         ` : " Robert Pluim
2024-08-24 13:21           ` Pip Cet
2024-08-25  2:50             ` Michael Heerdegen via Emacs development discussions.
2024-08-25  5:10               ` Pip Cet
2024-08-25  5:54                 ` Michael Heerdegen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).