summaryrefslogtreecommitdiff
path: root/mh/mh_whom.c
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2003-08-22 14:03:35 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2003-08-22 14:03:35 +0000
commiteec08a292c5db2d27665e063e19128cdaf0dc000 (patch)
tree5ef4a6d5efe6fc9049fe84a6e08c3009059f532e /mh/mh_whom.c
parenta371783ed09d9e476182f917220fe9f9e6bad56f (diff)
downloadmailutils-eec08a292c5db2d27665e063e19128cdaf0dc000.tar.gz
mailutils-eec08a292c5db2d27665e063e19128cdaf0dc000.tar.bz2
(mh_alias_expand): New function
(scan_addrs): Expand aliases
Diffstat (limited to 'mh/mh_whom.c')
-rw-r--r--mh/mh_whom.c43
1 files changed, 28 insertions, 15 deletions
diff --git a/mh/mh_whom.c b/mh/mh_whom.c
index b25b00605..28dc98d4e 100644
--- a/mh/mh_whom.c
+++ b/mh/mh_whom.c
@@ -43,31 +43,28 @@ addrcp (list_t *list, char *addr, int isbcc)
static int
ismydomain (char *p)
{
- char *domain;
+ const char *domain;
if (!p)
return 1;
mu_get_user_email_domain (&domain);
return strcasecmp (domain, p + 1) == 0;
}
-static void
-scan_addrs (char *str, int isbcc)
+int
+mh_alias_expand (char *str, address_t *paddr, int *incl)
{
- address_t addr = NULL, exaddr = NULL;
- size_t i, count;
size_t argc;
char **argv;
+ size_t i;
char *buf;
- int rc;
-
- if (!str)
- return;
+ address_t exaddr = NULL;
+
argcv_get (str, ",", NULL, &argc, &argv);
for (i = 0; i < argc;)
{
if (i + 1 == argc)
{
- if (mh_alias_get_address (argv[i], &exaddr) == 0)
+ if (mh_alias_get_address (argv[i], &exaddr, incl) == 0)
{
free (argv[i]);
memcpy (&argv[i], &argv[i+1],
@@ -79,7 +76,7 @@ scan_addrs (char *str, int isbcc)
}
else if (argv[i + 1][0] == ',')
{
- if (mh_alias_get_address (argv[i], &exaddr) == 0)
+ if (mh_alias_get_address (argv[i], &exaddr, incl) == 0)
{
free (argv[i]);
free (argv[i+1]);
@@ -105,16 +102,32 @@ scan_addrs (char *str, int isbcc)
{
int status;
argcv_string (argc, argv, &buf);
- if (status = address_create (&addr, buf))
+ if (status = address_create (paddr, buf))
mh_error (_("Bad address `%s': %s"), buf, mu_strerror (status));
free (buf);
}
argcv_free (argc, argv);
- address_union (&addr, exaddr);
+ address_union (paddr, exaddr);
address_destroy (&exaddr);
-
+ return 0;
+}
+
+
+static void
+scan_addrs (char *str, int isbcc)
+{
+ address_t addr = NULL;
+ size_t i, count;
+ char *buf;
+ int rc;
+
+ if (!str)
+ return;
+
+ mh_alias_expand (str, &addr, NULL);
+
if (addr == NULL || address_get_count (addr, &count))
return;
@@ -130,7 +143,7 @@ scan_addrs (char *str, int isbcc)
}
p = strchr (buf, '@');
-
+
if (ismydomain (p))
addrcp (&local_rcp, buf, isbcc);
else

Return to:

Send suggestions and report system problems to the System administrator.