mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 12:28:09 +01:00
lib/config: set defaults for user full name
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.
This commit is contained in:
parent
863b243185
commit
e81dc2072f
3 changed files with 63 additions and 5 deletions
|
@ -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 {
|
||||
|
@ -451,6 +453,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)
|
||||
{
|
||||
|
@ -486,6 +523,7 @@ 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:
|
||||
|
@ -505,10 +543,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;
|
||||
|
|
|
@ -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)"
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue