103 char *name,
int *statusp)
105 const char *myname =
"deliver_alias";
106 const char *alias_result;
107 char *saved_alias_result;
113 const char *owner_rhs;
118 const char *dsn_orcpt;
145 if (state.
level > 100) {
146 msg_warn(
"alias database loop for %s", name);
148 "alias database loop for %s", name);
173 msg_panic(
"%s: dictionary not found: %s", myname, *cpp);
174 if ((alias_result =
dict_get(dict, name)) != 0) {
176 msg_info(
"%s: %s: %s = %s", myname, *cpp, name, alias_result);
183 "aliased to %s", alias_result);
210 msg_warn(
"%s: no owner UID for alias database %s",
213 "mail system configuration error");
221 "cannot find alias database owner for %s: %m" :
222 "cannot find alias database owner for %s", *cpp);
224 "cannot find alias database owner");
241 #define OWNER_ASSIGN(own) \
242 (own = (var_ownreq_special == 0 ? 0 : \
243 concatenate("owner-", name, (char *) 0)))
245 saved_alias_result =
mystrdup(alias_result);
274 "alias database unavailable");
294 #define DSN_SAVE_UPDATE(saved, old, new) do { \
303 if (canon_owner != 0) {
316 msg_warn(
"mailing list \"%s\" needs an \"owner-%s\" alias",
319 if (alias_count < 1) {
320 msg_warn(
"no recipient in alias lookup result for %s", name);
322 "alias database unavailable");
340 if (canon_owner != 0) {
346 "delivered" :
"expanded",
354 myfree(saved_alias_result);
368 if (alias_result == 0 && dict->
error != 0) {
369 msg_warn(
"%s:%s: lookup of '%s' failed",
372 "alias database unavailable");
378 msg_info(
"%s: %s: %s not found", myname, *cpp, name);
#define BOUNCE_ATTR(attr)
#define SET_OWNER_ATTR(msg_attr, who, level)
int deliver_token_string(LOCAL_STATE, USER_ATTR, char *, int *)
char * mystrdup(const char *str)
#define DSN_SAVE_UPDATE(saved, old, new)
int deliver_alias(LOCAL_STATE state, USER_ATTR usr_attr, char *name, int *statusp)
#define RESET_OWNER_ATTR(msg_attr, level)
NORETURN msg_panic(const char *fmt,...)
DSN_BUF * dsb_update(DSN_BUF *dsb, const char *status, const char *action, const char *mtype, const char *mname, const char *dtype, const char *dtext, const char *format,...)
int mypwuid_err(uid_t uid, struct mypasswd **result)
int trace_append(int flags, const char *id, MSG_STATS *stats, RECIPIENT *rcpt, const char *relay, DSN *dsn)
#define EXPAND_TYPE_ALIAS
VSTRING * canon_addr_internal(VSTRING *result, const char *addr)
#define strcasecmp_utf8(s1, s2)
bool var_reset_owner_attr
DELIVER_REQUEST * request
#define OWNER_ASSIGN(own)
#define BOUNCE_FLAGS(request)
int bounce_append(int flags, const char *id, MSG_STATS *stats, RECIPIENT *rcpt, const char *relay, DSN *dsn)
#define DICT_OWNER_TRUSTED
#define dict_get(dp, key)
#define DICT_OWNER_UNKNOWN
DICT * dict_handle(const char *dict_name)
void msg_warn(const char *fmt,...)
VSTRING * vstring_alloc(ssize_t len)
bool var_frozen_delivered
DSN_BUF * dsb_simple(DSN_BUF *dsb, const char *status, const char *format,...)
void mypwfree(struct mypasswd *mypwd)
#define SET_USER_ATTR(usr_attr, pwd, level)
#define DSN_NOTIFY_SUCCESS
VSTRING * vstring_free(VSTRING *vp)
int defer_append(int flags, const char *id, MSG_STATS *stats, RECIPIENT *rcpt, const char *relay, DSN *dsn)
#define RESET_USER_ATTR(usr_attr, level)
int sent(int flags, const char *id, MSG_STATS *stats, RECIPIENT *recipient, const char *relay, DSN *dsn)
#define MSG_LOG_STATE(m, p)
const char * maps_find(MAPS *maps, const char *name, int flags)
#define DEL_REQ_FLAG_MTA_VRFY
void msg_info(const char *fmt,...)