* 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).