+ if (!s)
+ return s; /* XXX */
+
+ for (; ak; ak = ak->ak_next) {
+ if (aleq (s, ak->ak_name)) {
+ return akresult (ak);
+ } else if (strchr (s, ':')) {
+ /*
+ ** The first address in a blind list will contain the
+ ** alias name, so try to match, but just with just the
+ ** address (not including the list name). If there's a
+ ** match, then replace the alias part with its
+ ** expansion.
+ */
+
+ char *name = getname(s);
+ char *cp = NULL;
+
+ if (name) {
+ /*
+ ** s is of the form "Blind list: address". If address
+ ** is an alias, expand it.
+ */
+ struct mailname *mp = getm(name, NULL, 0, AD_NAME, NULL);
+
+ if (mp && mp->m_ingrp) {
+ char *gname = add (mp->m_gname, NULL);
+
+ if (gname && aleq(name, ak->ak_name)) {
+ /* Will leak cp. */
+ cp = concat (gname, akresult (ak), NULL);
+ free(gname);
+ }
+ }
+ mnfree(mp);
+ }
+ /* Need to flush getname after use. */
+ while (getname("")) continue;
+
+ if (cp) {
+ return cp;
+ }
+ }
+ }