From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id SL6EFaTaQGDqagAA0tVLHw (envelope-from ) for ; Thu, 04 Mar 2021 13:03:32 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0 with LMTPS id SEpcEaTaQGC1GgAA1q6Kng (envelope-from ) for ; Thu, 04 Mar 2021 13:03:32 +0000 Received: from mail.notmuchmail.org (nmbug.tethera.net [IPv6:2607:5300:201:3100::1657]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 5BE5315FF0 for ; Thu, 4 Mar 2021 14:03:31 +0100 (CET) Received: from nmbug.tethera.net (localhost [127.0.0.1]) by mail.notmuchmail.org (Postfix) with ESMTP id B032B27590; Thu, 4 Mar 2021 08:02:19 -0500 (EST) Received: from fethera.tethera.net (fethera.tethera.net [198.245.60.197]) by mail.notmuchmail.org (Postfix) with ESMTP id EE2CD27558 for ; Thu, 4 Mar 2021 08:01:58 -0500 (EST) Received: by fethera.tethera.net (Postfix, from userid 1001) id E5BD55FA96; Thu, 4 Mar 2021 08:01:58 -0500 (EST) Received: (nullmailer pid 4047179 invoked by uid 1000); Thu, 04 Mar 2021 13:01:45 -0000 From: David Bremner To: notmuch@notmuchmail.org Cc: David Bremner Subject: [PATCH 08/27] lib/config: set default for primary user email Date: Thu, 4 Mar 2021 09:01:20 -0400 Message-Id: <20210304130139.4046183-9-david@tethera.net> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210304130139.4046183-1-david@tethera.net> References: <20210304130139.4046183-1-david@tethera.net> MIME-Version: 1.0 Message-ID-Hash: XOLDM4TS5AUJL42WH4MRZBGSK3SVKWQR X-Message-ID-Hash: XOLDM4TS5AUJL42WH4MRZBGSK3SVKWQR X-MailFrom: bremner@tethera.net X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-notmuch.notmuchmail.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.1 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Migadu-Flow: FLOW_IN ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1614863011; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=WVlXZoPYUC4KOwBo2GoAAvRaexgkOhjBVLCk7mBbfq4=; b=HiC5Cxv07DvLOxxczdmnfn3x3d/WEk4WCOyW863w1cQhHSqzAv25+2NSMIhvsEmneyUepA YmaUsnkFjDR80x/X3PhsdHv5BrRKXywbE994gPOP5PlRR4nzHKNgvIaOIk60+edBlKYN0o MKgF5F2VyJ6SHiY6R19JNPDWqTYGWf1QEWkiJvZ3xLCDAHZLVXYaxaACUVowhLROeeUqox h+rQSKoy8kv2v8VklpagU5WbzMQIoMWQtqfhZ7VYVk2I7SyuPYDOAIT6Q4A9Hlb9+g/d6/ XT5teNMJi1I4GYtbRYjH6BjhLI8ndepn14fhVvCjhIAk1hQosVp/3BSdD1sXzg== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1614863011; a=rsa-sha256; cv=none; b=B8/aVTYLJxue+rGSa4dO6XrKnP/QSCh03sJjfD3/PSW+IzwkqxBKK9vVe7KCmKczb2OrKH iQV8wvcxcE3OF+zD32St/TVlKetX4rPRPbO3GX0GqnMA5H1dZZpIbQjZpPo/kk1sayJWHI lp6+kA4Yoq18ceGOLGZ/23nHeVHVXeKAwBs6LpTSNyS/OITLJ/x/fnrwNW19iHpYifRMp+ E3mBQXXY7BEbxRIbz6fWSec5L5Ao/VNkPiJoBtTM4POU3LxsD/iiUJBKmPFajcAsgtmsCW sE77+UKWjpeF9P5LjmctohdqlFFRnMObtWQSPkMkNhqqc3Y9Wc9KaFIxk11RcA== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 2607:5300:201:3100::1657 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Spam-Score: -0.80 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 2607:5300:201:3100::1657 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Queue-Id: 5BE5315FF0 X-Spam-Score: -0.80 X-Migadu-Scanner: scn1.migadu.com X-TUID: vK+3foeuBejk This is mainly copying code from the CLI into the lib. The CLI copy will be deleted in a later commit. --- lib/config.cc | 70 +++++++++++++++++++++++++++++++++++++++--- test/T590-libconfig.sh | 7 ++--- test/test-lib.sh | 6 +++- 3 files changed, 73 insertions(+), 10 deletions(-) diff --git a/lib/config.cc b/lib/config.cc index 1741bf99..cfb5bd13 100644 --- a/lib/config.cc +++ b/lib/config.cc @@ -23,6 +23,7 @@ #include "database-private.h" #include +#include static const std::string CONFIG_PREFIX = "C"; @@ -467,6 +468,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) { switch (key) { @@ -500,7 +558,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; + const char *name, *email; switch (key) { case NOTMUCH_CONFIG_DATABASE_PATH: @@ -526,13 +584,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: diff --git a/test/T590-libconfig.sh b/test/T590-libconfig.sh index 2c6e726c..292778d5 100755 --- a/test/T590-libconfig.sh +++ b/test/T590-libconfig.sh @@ -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 == diff --git a/test/test-lib.sh b/test/test-lib.sh index e881dc40..cb27cb78 100644 --- a/test/test-lib.sh +++ b/test/test-lib.sh @@ -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 () -- 2.30.1