unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#59701] [PATCH] gnu: mailutils: Inform correct path of sendmail.
@ 2022-11-29 21:55 EuAndreh via Guix-patches via
  2022-11-29 21:57 ` [bug#59701] [PATCH v2] " EuAndreh via Guix-patches via
  2022-11-29 22:11 ` [bug#59701] [PATCH] " Tobias Geerinckx-Rice via Guix-patches via
  0 siblings, 2 replies; 12+ messages in thread
From: EuAndreh via Guix-patches via @ 2022-11-29 21:55 UTC (permalink / raw)
  To: 59701; +Cc: EuAndreh

* gnu/packages/mail.scm (mailutils)[arguments]: Add -DPATH_SENDMAIL
  to CFLAGS pointing to /run/setuid-programs.
---

Notes:
    The current compilation options of GNU Mailutils don't specify a value
    for the "PATH_SENDMAIL" C macro.  The build system of the package looks
    for a definition of this variable in the "paths.h" header file from the
    glibc package, and falls back to what is defined as the default in its
    "paths" file, /usr/sbin/sendmail.
    
    As this binary doesn't exist, "mail" fails to execute:
    
      $ cat mail.txt
      From: root
      To: root
      Subject: This fails
    
      The body
      $ mail -t < mail.txt
      mail: Cannot open mailer: No such file or directory
      mail: cannot send message: No such file or directory
      $ echo $?
      1
    
    I've confirmed this by looking at the file called "paths" in the source
    code of mailutils, and at the strace output of calling mailutils.  I
    do have a working sendmail binary under /run/setuid-programs, and it
    now it is correctly called by the "mail" command, from mailutils.
    
    Given that this was the default, probably most Guix users do have a
    /root/dead.letter, with emails from the system, mainly rottlog
    notifications of log rotations, as it does use GNU Mailutils directly in
    its /etc/rottlog/rc configuration.

 gnu/packages/mail.scm | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index cef5fe2916..2c42cdfaca 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -347,6 +347,9 @@ (define-public mailutils
            #~(list "--sysconfdir=/etc"
                    "--disable-static"
 
+                   ;; Specify path to sendmail setuid binary, which otherwise
+                   ;; defaults to /usr/sbin/sendmail
+                   "CFLAGS=-DPATH_SENDMAIL=\\\"/run/setuid-programs\\\""
                    ;; Add "/X.Y" to the installation directory.
                    (string-append "--with-guile-site-dir="
                                   (assoc-ref %outputs "out")
-- 
2.38.1





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

* [bug#59701] [PATCH v2] gnu: mailutils: Inform correct path of sendmail.
  2022-11-29 21:55 [bug#59701] [PATCH] gnu: mailutils: Inform correct path of sendmail EuAndreh via Guix-patches via
@ 2022-11-29 21:57 ` EuAndreh via Guix-patches via
  2022-11-29 22:11 ` [bug#59701] [PATCH] " Tobias Geerinckx-Rice via Guix-patches via
  1 sibling, 0 replies; 12+ messages in thread
From: EuAndreh via Guix-patches via @ 2022-11-29 21:57 UTC (permalink / raw)
  To: 59701; +Cc: EuAndreh

* gnu/packages/mail.scm (mailutils)[arguments]: Add -DPATH_SENDMAIL
  to CFLAGS pointing to /run/setuid-programs.
---
Oops, now with the correct path.

 gnu/packages/mail.scm | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index cef5fe2916..754c9bc6de 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -347,6 +347,9 @@ (define-public mailutils
            #~(list "--sysconfdir=/etc"
                    "--disable-static"
 
+                   ;; Specify path to sendmail setuid binary, which otherwise
+                   ;; defaults to /usr/sbin/sendmail
+                   "CFLAGS=-DPATH_SENDMAIL=\\\"/run/setuid-programs/sendmail\\\""
                    ;; Add "/X.Y" to the installation directory.
                    (string-append "--with-guile-site-dir="
                                   (assoc-ref %outputs "out")
-- 
2.38.1





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

* [bug#59701] [PATCH] gnu: mailutils: Inform correct path of sendmail.
  2022-11-29 21:55 [bug#59701] [PATCH] gnu: mailutils: Inform correct path of sendmail EuAndreh via Guix-patches via
  2022-11-29 21:57 ` [bug#59701] [PATCH v2] " EuAndreh via Guix-patches via
@ 2022-11-29 22:11 ` Tobias Geerinckx-Rice via Guix-patches via
  2022-11-29 22:31   ` EuAndreh via Guix-patches via
  1 sibling, 1 reply; 12+ messages in thread
From: Tobias Geerinckx-Rice via Guix-patches via @ 2022-11-29 22:11 UTC (permalink / raw)
  To: EuAndreh; +Cc: 59701

[-- Attachment #1: Type: text/plain, Size: 406 bytes --]

EuAndreh via Guix-patches via 写道:
> * gnu/packages/mail.scm (mailutils)[arguments]: Add 
> -DPATH_SENDMAIL
>   to CFLAGS pointing to /run/setuid-programs.

Thanks!

Did you try making mailutils simply respect $PATH instead?  Do you 
know why it doesn't?  Can't?

Hard-coding a distribution-specific location is something we often 
bemoan other packages doing…

Kind regards,

T G-R

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 247 bytes --]

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

* [bug#59701] [PATCH] gnu: mailutils: Inform correct path of sendmail.
  2022-11-29 22:11 ` [bug#59701] [PATCH] " Tobias Geerinckx-Rice via Guix-patches via
@ 2022-11-29 22:31   ` EuAndreh via Guix-patches via
  2022-11-29 22:33     ` EuAndreh via Guix-patches via
                       ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: EuAndreh via Guix-patches via @ 2022-11-29 22:31 UTC (permalink / raw)
  To: Tobias Geerinckx-Rice; +Cc: 59701

I did try it, but it was mailutils that I feel forced my hand.  It uses 
a pre-defined list of paths to search, instead of $PATH, namely:

   /usr/sbin:/usr/lib:/etc

So I feel the opposite ocurred: I wanted it to just rely on $PATH, but 
mailutils used a specific search path, but it at least gives us a way in 
to put a custom value.




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

* [bug#59701] [PATCH] gnu: mailutils: Inform correct path of sendmail.
  2022-11-29 22:31   ` EuAndreh via Guix-patches via
@ 2022-11-29 22:33     ` EuAndreh via Guix-patches via
  2022-12-01  8:26     ` Efraim Flashner
  2022-12-01 14:19     ` Tobias Geerinckx-Rice via Guix-patches via
  2 siblings, 0 replies; 12+ messages in thread
From: EuAndreh via Guix-patches via @ 2022-11-29 22:33 UTC (permalink / raw)
  To: Tobias Geerinckx-Rice; +Cc: 59701

This is the *compile-time* search path used by the build system, no the 
runtime one.




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

* [bug#59701] [PATCH] gnu: mailutils: Inform correct path of sendmail.
  2022-11-29 22:31   ` EuAndreh via Guix-patches via
  2022-11-29 22:33     ` EuAndreh via Guix-patches via
@ 2022-12-01  8:26     ` Efraim Flashner
  2022-12-01  9:40       ` EuAndreh via Guix-patches via
  2022-12-01 10:30       ` EuAndreh via Guix-patches via
  2022-12-01 14:19     ` Tobias Geerinckx-Rice via Guix-patches via
  2 siblings, 2 replies; 12+ messages in thread
From: Efraim Flashner @ 2022-12-01  8:26 UTC (permalink / raw)
  To: EuAndreh; +Cc: Tobias Geerinckx-Rice, 59701

[-- Attachment #1: Type: text/plain, Size: 855 bytes --]

On Tue, Nov 29, 2022 at 10:31:33PM +0000, EuAndreh via Guix-patches via wrote:
> I did try it, but it was mailutils that I feel forced my hand.  It uses a
> pre-defined list of paths to search, instead of $PATH, namely:
> 
>   /usr/sbin:/usr/lib:/etc
> 
> So I feel the opposite ocurred: I wanted it to just rely on $PATH, but
> mailutils used a specific search path, but it at least gives us a way in to
> put a custom value.

Can we change that value to $PATH? I checked and I don't have sendmail
in /run/setuid-programs, and I know I'd use my msmtp setup for sendmail
*for myself* but not for the system if it were available.

-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* [bug#59701] [PATCH] gnu: mailutils: Inform correct path of sendmail.
  2022-12-01  8:26     ` Efraim Flashner
@ 2022-12-01  9:40       ` EuAndreh via Guix-patches via
  2022-12-01 10:15         ` EuAndreh via Guix-patches via
  2022-12-01 10:30       ` EuAndreh via Guix-patches via
  1 sibling, 1 reply; 12+ messages in thread
From: EuAndreh via Guix-patches via @ 2022-12-01  9:40 UTC (permalink / raw)
  To: Efraim Flashner, Tobias Geerinckx-Rice, 59701

That's a good idea.  Let me try it.




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

* [bug#59701] [PATCH] gnu: mailutils: Inform correct path of sendmail.
  2022-12-01  9:40       ` EuAndreh via Guix-patches via
@ 2022-12-01 10:15         ` EuAndreh via Guix-patches via
  0 siblings, 0 replies; 12+ messages in thread
From: EuAndreh via Guix-patches via @ 2022-12-01 10:15 UTC (permalink / raw)
  To: Efraim Flashner, Tobias Geerinckx-Rice, 59701

Come to think of it, I did try it.  It required a significant amount of 
patches to the source code itself, to the point where one should prepare 
a patchset and send upstream, after refactoring some of the code.

The problem is that the aforementioned search path used is searched at 
compile-time, and if no sendmail binary is found, the absolute fallback 
path is used instead.  So instead of a run-time $PATH lookup, it has a 
compile-time /usr/sbin:/usr/lib:/etc lookup, with a /usr/sbin/sendmail 
fallback.

Ideally we would like to have:

1. not looking for sendmail binaries at compile-time, and relying on 
$PATH instead;
2. not having a fallback absolute path to a fallback binary, and just 
get a ENOENT at runtime instead, plus a few more diagnostic messages to 
STDERR.

As I progressed in achieving that, I had modification on top of 
modification to the build system and the source code, and at some point 
I found myself questioning the approach, as it was becoming too fragile 
and too custom.

There is no bug registered in GNU Mailutils' bug database, but there is 
a thread [0] in its list with people talking about when the exact same 
problem was encountered when our friends at Nix packaged mailutils [1].

The suggestion [2] from the maintainer is actually to put a symlink to 
the setuid sendmail binary where mailutils expects to find it:

 > There's no way to do this currently, except for symlinking the actual
 > sendmail-compatible binary (whatever it is in your distro) to the
 > predefined path (preferably, to the place defined by _PATH_SENDMAIL
 > in your /usr/include/paths.h). In fact, that's what all distros that
 > I've ever seen do.

The difference for Guix (and Nix) is that /usr/sbin/ doesn't even exist, 
so we use the PATH_SENDMAIL macro to tell mailutils where to find 
sendmail, as upstream seems happy with the state of affairs.


[0]: https://lists.gnu.org/archive/html/bug-mailutils/2017-10/msg00004.html
[1]: https://github.com/NixOS/nixpkgs/issues/21008
[2]: https://lists.gnu.org/archive/html/bug-mailutils/2017-10/msg00001.html




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

* [bug#59701] [PATCH] gnu: mailutils: Inform correct path of sendmail.
  2022-12-01  8:26     ` Efraim Flashner
  2022-12-01  9:40       ` EuAndreh via Guix-patches via
@ 2022-12-01 10:30       ` EuAndreh via Guix-patches via
  2022-12-13  6:33         ` 宋文武 via Guix-patches via
  1 sibling, 1 reply; 12+ messages in thread
From: EuAndreh via Guix-patches via @ 2022-12-01 10:30 UTC (permalink / raw)
  To: 59701

> Can we change that value to $PATH? I checked and I don't have sendmail
> in /run/setuid-programs, and I know I'd use my msmtp setup for sendmail
> *for myself* but not for the system if it were available.

With mailutils, I'm afraid this can't be done.

What our Nix friends do is have a module (which is equivalent to a Guix 
service) that accepts a "setSendmail" option [0] which, when true, adds 
the a setuid msmtp binary wrapper [1].

That mixes up user-level and system-level configuration, and the only 
way around is add a user-level alias wrapper for mailutils wrapper that
specifies where to find sendmail at runtime:

     alias mail="mail -E'set 
sendmail=\"$HOME/.guix-home/profile/bin/msmtp\"'"

Doing this to the mailutils package definition would require juggling 
some options around and knowing very well how mailutils handles options, 
so that the dynamic lookup of the sendmail binary doesn't break anything 
else.

[0]: 
https://github.com/NixOS/nixpkgs/blob/353a64f7bac4230a46dfa47a6212902c622b98a2/nixos/modules/programs/msmtp.nix#L15
[1]: 
https://github.com/NixOS/nixpkgs/blob/353a64f7bac4230a46dfa47a6212902c622b98a2/nixos/modules/programs/msmtp.nix#L76




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

* [bug#59701] [PATCH] gnu: mailutils: Inform correct path of sendmail.
  2022-11-29 22:31   ` EuAndreh via Guix-patches via
  2022-11-29 22:33     ` EuAndreh via Guix-patches via
  2022-12-01  8:26     ` Efraim Flashner
@ 2022-12-01 14:19     ` Tobias Geerinckx-Rice via Guix-patches via
  2022-12-01 15:25       ` EuAndreh via Guix-patches via
  2 siblings, 1 reply; 12+ messages in thread
From: Tobias Geerinckx-Rice via Guix-patches via @ 2022-12-01 14:19 UTC (permalink / raw)
  To: EuAndreh; +Cc: 59701

[-- Attachment #1: Type: text/plain, Size: 282 bytes --]

EuAndreh 写道:
> I did try it, but it was mailutils that I feel forced my hand. 
> It
> uses a pre-defined list of paths to search, instead of $PATH, 
> namely:

Thanks, but I think you missed my point.  I suggested *making* it 
respect $PATH.

Kind regards,

T G-R

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 247 bytes --]

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

* [bug#59701] [PATCH] gnu: mailutils: Inform correct path of sendmail.
  2022-12-01 14:19     ` Tobias Geerinckx-Rice via Guix-patches via
@ 2022-12-01 15:25       ` EuAndreh via Guix-patches via
  0 siblings, 0 replies; 12+ messages in thread
From: EuAndreh via Guix-patches via @ 2022-12-01 15:25 UTC (permalink / raw)
  To: Tobias Geerinckx-Rice; +Cc: 59701

 From what I could read and debug from the mailutils source code, this 
would require a non-trivial amount of refactoring, not a couple of 
(substitute* ...) calls some a few files.

This should be done by submitting changes upstream, so that the 
maintainer can properly review and apply them.  I'd say this is how this 
software is written to work right now, and tweaking it would be 
thwarting its core purpose.




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

* [bug#59701] [PATCH] gnu: mailutils: Inform correct path of sendmail.
  2022-12-01 10:30       ` EuAndreh via Guix-patches via
@ 2022-12-13  6:33         ` 宋文武 via Guix-patches via
  0 siblings, 0 replies; 12+ messages in thread
From: 宋文武 via Guix-patches via @ 2022-12-13  6:33 UTC (permalink / raw)
  To: EuAndreh; +Cc: 59701

EuAndreh <eu@euandre.org> writes:

>> Can we change that value to $PATH? I checked and I don't have sendmail
>> in /run/setuid-programs, and I know I'd use my msmtp setup for sendmail
>> *for myself* but not for the system if it were available.
>
> With mailutils, I'm afraid this can't be done.

For the `mail` command, it can be customized in a `~/.mailrc` file, maybe:
```
set sendmail=sendmail:/run/setuid-programs/sendmail
# or set sendmail=smtp://127.0.0.1 
```




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

end of thread, other threads:[~2022-12-13  6:34 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-11-29 21:55 [bug#59701] [PATCH] gnu: mailutils: Inform correct path of sendmail EuAndreh via Guix-patches via
2022-11-29 21:57 ` [bug#59701] [PATCH v2] " EuAndreh via Guix-patches via
2022-11-29 22:11 ` [bug#59701] [PATCH] " Tobias Geerinckx-Rice via Guix-patches via
2022-11-29 22:31   ` EuAndreh via Guix-patches via
2022-11-29 22:33     ` EuAndreh via Guix-patches via
2022-12-01  8:26     ` Efraim Flashner
2022-12-01  9:40       ` EuAndreh via Guix-patches via
2022-12-01 10:15         ` EuAndreh via Guix-patches via
2022-12-01 10:30       ` EuAndreh via Guix-patches via
2022-12-13  6:33         ` 宋文武 via Guix-patches via
2022-12-01 14:19     ` Tobias Geerinckx-Rice via Guix-patches via
2022-12-01 15:25       ` EuAndreh via Guix-patches via

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

	https://git.savannah.gnu.org/cgit/guix.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).