From: David Bremner <david@tethera.net>
To: notmuch@notmuchmail.org
Cc: David Bremner <david@tethera.net>
Subject: [PATCH 07/27] lib/config: set defaults for user full name
Date: Thu, 4 Mar 2021 09:01:19 -0400 [thread overview]
Message-ID: <20210304130139.4046183-8-david@tethera.net> (raw)
In-Reply-To: <20210304130139.4046183-1-david@tethera.net>
This just copies code from from the CLI into the library. New test
infrastructure is needed because apparently we have never tested this
code path.
---
lib/config.cc | 48 +++++++++++++++++++++++++++++++++++++++++-
test/T590-libconfig.sh | 13 ++++++++----
test/test-lib.sh | 7 ++++++
3 files changed, 63 insertions(+), 5 deletions(-)
diff --git a/lib/config.cc b/lib/config.cc
index de919b87..1741bf99 100644
--- a/lib/config.cc
+++ b/lib/config.cc
@@ -22,6 +22,8 @@
#include "notmuch-private.h"
#include "database-private.h"
+#include <pwd.h>
+
static const std::string CONFIG_PREFIX = "C";
struct _notmuch_config_list {
@@ -430,6 +432,41 @@ notmuch_config_get_bool (notmuch_database_t *notmuch, notmuch_config_key_t key,
return NOTMUCH_STATUS_SUCCESS;
}
+static const char *
+_get_name_from_passwd_file (void *ctx)
+{
+ long pw_buf_size;
+ char *pw_buf;
+ struct passwd passwd, *ignored;
+ const char *name;
+ int e;
+
+ pw_buf_size = sysconf (_SC_GETPW_R_SIZE_MAX);
+ if (pw_buf_size == -1) pw_buf_size = 64;
+ pw_buf = (char *) talloc_size (ctx, pw_buf_size);
+
+ while ((e = getpwuid_r (getuid (), &passwd, pw_buf,
+ pw_buf_size, &ignored)) == ERANGE) {
+ pw_buf_size = pw_buf_size * 2;
+ pw_buf = (char *) talloc_zero_size (ctx, pw_buf_size);
+ }
+
+ if (e == 0) {
+ char *comma = strchr (passwd.pw_gecos, ',');
+ if (comma)
+ name = talloc_strndup (ctx, passwd.pw_gecos,
+ comma - passwd.pw_gecos);
+ else
+ name = talloc_strdup (ctx, passwd.pw_gecos);
+ } else {
+ name = talloc_strdup (ctx, "");
+ }
+
+ talloc_free (pw_buf);
+
+ return name;
+}
+
static const char *
_notmuch_config_key_to_string (notmuch_config_key_t key) {
switch (key) {
@@ -463,6 +500,7 @@ _notmuch_config_key_to_string (notmuch_config_key_t key) {
static const char *
_notmuch_config_default (notmuch_database_t *notmuch, notmuch_config_key_t key) {
char *path;
+ const char* name;
switch (key) {
case NOTMUCH_CONFIG_DATABASE_PATH:
@@ -482,10 +520,18 @@ _notmuch_config_default (notmuch_database_t *notmuch, notmuch_config_key_t key)
return "inbox;unread";
case NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS:
return "true";
+ case NOTMUCH_CONFIG_USER_NAME:
+ name = getenv ("NAME");
+ if (name)
+ name = talloc_strdup (notmuch, name);
+ else
+ name = _get_name_from_passwd_file (notmuch);
+
+ return name;
+ break;
case NOTMUCH_CONFIG_HOOK_DIR:
case NOTMUCH_CONFIG_BACKUP_DIR:
case NOTMUCH_CONFIG_NEW_IGNORE:
- case NOTMUCH_CONFIG_USER_NAME:
case NOTMUCH_CONFIG_PRIMARY_EMAIL:
case NOTMUCH_CONFIG_OTHER_EMAIL:
return NULL;
diff --git a/test/T590-libconfig.sh b/test/T590-libconfig.sh
index 49cc382a..2c6e726c 100755
--- a/test/T590-libconfig.sh
+++ b/test/T590-libconfig.sh
@@ -384,6 +384,9 @@ cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} '' %NULL%
}
}
EOF
+
+notmuch_passwd_sanitize < OUTPUT > OUTPUT.clean
+
cat <<'EOF' >EXPECTED
== stdout ==
MAIL_DIR
@@ -396,11 +399,11 @@ NULL
true
NULL
NULL
-NULL
+USER_FULL_NAME
== stderr ==
EOF
unset MAILDIR
-test_expect_equal_file EXPECTED OUTPUT
+test_expect_equal_file EXPECTED OUTPUT.clean
backup_database
test_begin_subtest "override config from \${NOTMUCH_CONFIG}"
@@ -727,6 +730,8 @@ cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} /nonexistent %NULL%
}
}
EOF
+
+notmuch_passwd_sanitize < OUTPUT > OUTPUT.clean
cat <<'EOF' >EXPECTED
== stdout ==
MAIL_DIR
@@ -739,10 +744,10 @@ NULL
true
NULL
NULL
-NULL
+USER_FULL_NAME
== stderr ==
EOF
-test_expect_equal_file EXPECTED OUTPUT
+test_expect_equal_file EXPECTED OUTPUT.clean
backup_database
test_begin_subtest "override config from \${HOME}/.notmuch-config (ndlc)"
diff --git a/test/test-lib.sh b/test/test-lib.sh
index 29baa0c1..e881dc40 100644
--- a/test/test-lib.sh
+++ b/test/test-lib.sh
@@ -694,6 +694,13 @@ notmuch_built_with_sanitize ()
sed 's/^built_with[.]\(.*\)=.*$/built_with.\1=something/'
}
+notmuch_passwd_sanitize ()
+{
+ local user=$(id -un)
+ local full_name=$(getent passwd $user | cut -d: -f 5 | cut -d, -f1)
+ sed "s/$full_name/USER_FULL_NAME/"
+}
+
notmuch_config_sanitize ()
{
notmuch_dir_sanitize | notmuch_built_with_sanitize
--
2.30.1
next prev parent reply other threads:[~2021-03-04 13:04 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-04 13:01 v1: convert remaining CLI to new configuration David Bremner
2021-03-04 13:01 ` [PATCH 01/27] lib: add missing status strings David Bremner
2021-03-04 13:01 ` [PATCH 02/27] test: convert random-corpus to use n_d_open_with_config David Bremner
2021-03-04 13:01 ` [PATCH 03/27] lib/open: pull _load_key_file out of _choose_database_path David Bremner
2021-03-04 13:01 ` [PATCH 04/27] lib: provide notmuch_database_load_config David Bremner
2021-03-04 13:01 ` [PATCH 05/27] lib/config: add notmuch_config_get_values_string David Bremner
2021-03-04 13:01 ` [PATCH 06/27] lib/config: add config_pairs iterators David Bremner
2021-03-04 13:01 ` David Bremner [this message]
2021-03-04 13:01 ` [PATCH 08/27] lib/config: set default for primary user email David Bremner
2021-03-04 13:01 ` [PATCH 09/27] lib/open: canonicalize relative path read from config file David Bremner
2021-03-04 13:01 ` [PATCH 10/27] CLI: load merged config at top level David Bremner
2021-03-04 13:01 ` [PATCH 11/27] CLI/config: use merged config for "config get" David Bremner
2021-03-04 13:01 ` [PATCH 12/27] test/setup: check file output instead of notmuch config list David Bremner
2021-03-04 13:01 ` [PATCH 13/27] CLI/setup: switch to new configuration framework David Bremner
2021-03-04 13:01 ` [PATCH 14/27] CLI/config: switch "notmuch config list" to merged config David Bremner
2021-03-04 13:01 ` [PATCH 15/27] CLI/config: migrate notmuch_config_open to new config David Bremner
2021-03-04 13:01 ` [PATCH 16/27] CLI/config: use notmuch_database_reopen David Bremner
2021-03-04 13:01 ` [PATCH 17/27] CLI/notmuch: switch notmuch_command to notmuch_config_get David Bremner
2021-03-04 13:01 ` [PATCH 18/27] CLI/config: drop obsolete notmuch_config_get_* David Bremner
2021-03-04 13:01 ` [PATCH 19/27] CLI/config: drop cached data from notmuch_config_t David Bremner
2021-03-04 13:01 ` [PATCH 20/27] CLI/config: default to storing all config in external files David Bremner
2021-03-04 13:01 ` [PATCH 21/27] lib: add NOTMUCH_STATUS_NO_DATABASE David Bremner
2021-03-04 13:01 ` [PATCH 22/27] CLI+lib: detect missing database in split configurations David Bremner
2021-03-04 13:01 ` [PATCH 23/27] lib: provide notmuch_config_path David Bremner
2021-03-04 13:01 ` [PATCH 24/27] CLI/config: support set/get with split configuration David Bremner
2021-03-04 13:01 ` [PATCH 25/27] CLI/config: remove calls to notmuch_config_open from top level David Bremner
2021-03-04 13:01 ` [PATCH 26/27] CLI: drop notmuch_config_t from subcommand interface David Bremner
2021-03-04 13:01 ` [PATCH 27/27] CLI: rename notmuch_config_t to notmuch_conffile_t David Bremner
2021-03-04 13:50 ` v1: convert remaining CLI to new configuration David Bremner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://notmuchmail.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210304130139.4046183-8-david@tethera.net \
--to=david@tethera.net \
--cc=notmuch@notmuchmail.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://yhetil.org/notmuch.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).