mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 12:28:09 +01:00
lib/config: set default for primary user email
This is mainly copying code from the CLI into the lib. The CLI copy will be deleted in a later commit.
This commit is contained in:
parent
e81dc2072f
commit
2e9ee47072
3 changed files with 73 additions and 10 deletions
|
@ -23,6 +23,7 @@
|
|||
#include "database-private.h"
|
||||
|
||||
#include <pwd.h>
|
||||
#include <netdb.h>
|
||||
|
||||
static const std::string CONFIG_PREFIX = "C";
|
||||
|
||||
|
@ -488,6 +489,63 @@ _get_name_from_passwd_file (void *ctx)
|
|||
return name;
|
||||
}
|
||||
|
||||
static char *
|
||||
_get_username_from_passwd_file (void *ctx)
|
||||
{
|
||||
long pw_buf_size;
|
||||
char *pw_buf;
|
||||
struct passwd passwd, *ignored;
|
||||
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_zero_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)
|
||||
name = talloc_strdup (ctx, passwd.pw_name);
|
||||
else
|
||||
name = talloc_strdup (ctx, "");
|
||||
|
||||
talloc_free (pw_buf);
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
static const char *
|
||||
_get_email_from_passwd_file (void *ctx)
|
||||
{
|
||||
|
||||
char hostname[256];
|
||||
struct hostent *hostent;
|
||||
const char *domainname;
|
||||
char *email;
|
||||
|
||||
char *username = _get_username_from_passwd_file (ctx);
|
||||
|
||||
gethostname (hostname, 256);
|
||||
hostname[255] = '\0';
|
||||
|
||||
hostent = gethostbyname (hostname);
|
||||
if (hostent && (domainname = strchr (hostent->h_name, '.')))
|
||||
domainname += 1;
|
||||
else
|
||||
domainname = "(none)";
|
||||
|
||||
email = talloc_asprintf (ctx, "%s@%s.%s",
|
||||
username, hostname, domainname);
|
||||
|
||||
talloc_free (username);
|
||||
talloc_free (email);
|
||||
return email;
|
||||
}
|
||||
|
||||
static const char *
|
||||
_notmuch_config_key_to_string (notmuch_config_key_t key)
|
||||
{
|
||||
|
@ -523,7 +581,7 @@ static const char *
|
|||
_notmuch_config_default (notmuch_database_t *notmuch, notmuch_config_key_t key)
|
||||
{
|
||||
char *path;
|
||||
const char *name;
|
||||
const char *name, *email;
|
||||
|
||||
switch (key) {
|
||||
case NOTMUCH_CONFIG_DATABASE_PATH:
|
||||
|
@ -549,13 +607,17 @@ _notmuch_config_default (notmuch_database_t *notmuch, notmuch_config_key_t key)
|
|||
name = talloc_strdup (notmuch, name);
|
||||
else
|
||||
name = _get_name_from_passwd_file (notmuch);
|
||||
|
||||
return name;
|
||||
break;
|
||||
case NOTMUCH_CONFIG_PRIMARY_EMAIL:
|
||||
email = getenv ("EMAIL");
|
||||
if (email)
|
||||
email = talloc_strdup (notmuch, email);
|
||||
else
|
||||
email = _get_email_from_passwd_file (notmuch);
|
||||
return email;
|
||||
case NOTMUCH_CONFIG_HOOK_DIR:
|
||||
case NOTMUCH_CONFIG_BACKUP_DIR:
|
||||
case NOTMUCH_CONFIG_NEW_IGNORE:
|
||||
case NOTMUCH_CONFIG_PRIMARY_EMAIL:
|
||||
case NOTMUCH_CONFIG_OTHER_EMAIL:
|
||||
return NULL;
|
||||
default:
|
||||
|
|
|
@ -397,7 +397,7 @@ MAIL_DIR/.notmuch/backups
|
|||
inbox;unread
|
||||
NULL
|
||||
true
|
||||
NULL
|
||||
USERNAME@FQDN
|
||||
NULL
|
||||
USER_FULL_NAME
|
||||
== stderr ==
|
||||
|
@ -626,9 +626,6 @@ EOF
|
|||
|
||||
|
||||
test_begin_subtest "notmuch_database_get_config (ndlc)"
|
||||
echo NOTMUCH_CONFIG=$NOTMUCH_CONFIG
|
||||
echo NOTMUCH_PROFILE=$NOTMUCH_PROFILE
|
||||
echo HOME=$HOME
|
||||
cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} %NULL% %NULL%
|
||||
{
|
||||
EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
|
||||
|
@ -742,7 +739,7 @@ MAIL_DIR/.notmuch/backups
|
|||
inbox;unread
|
||||
NULL
|
||||
true
|
||||
NULL
|
||||
USERNAME@FQDN
|
||||
NULL
|
||||
USER_FULL_NAME
|
||||
== stderr ==
|
||||
|
|
|
@ -107,6 +107,9 @@ unset GREP_OPTIONS
|
|||
# For emacsclient
|
||||
unset ALTERNATE_EDITOR
|
||||
|
||||
# for reproducibility
|
||||
unset EMAIL
|
||||
|
||||
add_gnupg_home ()
|
||||
{
|
||||
[ -e "${GNUPGHOME}/gpg.conf" ] && return
|
||||
|
@ -697,8 +700,9 @@ notmuch_built_with_sanitize ()
|
|||
notmuch_passwd_sanitize ()
|
||||
{
|
||||
local user=$(id -un)
|
||||
local fqdn=$(hostname -f)
|
||||
local full_name=$(getent passwd $user | cut -d: -f 5 | cut -d, -f1)
|
||||
sed "s/$full_name/USER_FULL_NAME/"
|
||||
sed -e "s/$user/USERNAME/" -e "s/$fqdn/FQDN/" -e "s/$full_name/USER_FULL_NAME/"
|
||||
}
|
||||
|
||||
notmuch_config_sanitize ()
|
||||
|
|
Loading…
Reference in a new issue