-/* Copyright (C) 2002, 2003 Mads Martin Joergensen <mmj at mmj.dk>
- *
- * $Id$
+/*
+ * Copyright (C) 2002, 2003 Mads Martin Joergensen <mmj at mmj.dk>
+ * Copyright (C) 2023 Baptiste Daroussin <bapt@FreeBSd.org>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* IN THE SOFTWARE.
*/
-#ifndef MMJML_PROCESS_H
-#define MMJML_PROCESS_H
-
+#pragma once
-#endif /* MMJML_PROCESS_H */
+char *get_recipextra_from_env(int ctrlfd);
-/* Copyright (C) 2003, 2003, 2004 Mads Martin Joergensen <mmj at mmj.dk>
- *
- * $Id$
+/*
+ * Copyright (C) 2003, 2003, 2004 Mads Martin Joergensen <mmj at mmj.dk>
+ * Copyright (C) 2023 Baptiste Daroussin <bapt@FreeBSD.org>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
find_email_adr(readhdrs[4].values[i], &dtemails);
}
- /* address extension (the "foo" part of "user+foo@domain.tld") */
- if((envstr = getenv("DEFAULT")) != NULL) {
- /* qmail */
- recipextra = xstrdup(envstr);
- } else if((envstr = getenv("EXTENSION")) != NULL) {
- /* postfix */
- recipextra = xstrdup(envstr);
- } else if((envstr = getenv("LOCAL_PART_SUFFIX")) != NULL) {
- /* exim */
- listdelim = getlistdelim(ctrlfd);
- if (strncmp(envstr, listdelim, strlen(listdelim)) == 0) {
- recipextra = xstrdup(envstr + strlen(listdelim));
- } else {
- recipextra = xstrdup(envstr);
- }
- free(listdelim);
- listdelim = NULL;
- } else {
- findaddress = 1;
- }
-
+ recipextra = get_recipextra_from_env(ctrlfd);
+ if (recipextra == NULL)
+ findaddress = true;
addrtocc = !statctrl(ctrlfd, "tocc");
if (findaddress) {
#include "xmalloc.h"
#include "utils.h"
+#include "getlistdelim.h"
extern char **environ;
}
return (true);
}
+
+char *
+get_recipextra_from_env(int ctrlfd)
+{
+ const char *envstr;
+ char *listdelim, *recipextra;
+
+ /* address extension (the "foo" part of "user+foo@domain.tld") */
+ /* qmail */
+ if((envstr = getenv("DEFAULT")) != NULL)
+ return (xstrdup(envstr));
+ /* postfix */
+ if((envstr = getenv("EXTENSION")) != NULL)
+ return (xstrdup(envstr));
+ /* exim */
+ if ((envstr = getenv("LOCAL_PART_SUFFIX")) != NULL) {
+ listdelim = getlistdelim(ctrlfd);
+ if (strncmp(envstr, listdelim, strlen(listdelim)) == 0)
+ recipextra = xstrdup(envstr + strlen(listdelim));
+ else
+ recipextra = xstrdup(envstr);
+ return (recipextra);
+ }
+ return (NULL);
+}
#include "incindexfile.h"
#include "log_oper.h"
#include "listcontrol.h"
+#include "mlmmj-process.h"
ATF_TC_WITHOUT_HEAD(random_int);
ATF_TC_WITHOUT_HEAD(chomp);
ATF_TC_WITHOUT_HEAD(get_prepped_mailbody_from_map);
ATF_TC_WITHOUT_HEAD(get_prepped_mailbody_from_map_1);
ATF_TC_WITHOUT_HEAD(get_ctrl_command);
+ATF_TC_WITHOUT_HEAD(get_recipextra_from_env_none);
+ATF_TC_WITHOUT_HEAD(get_recipextra_from_env_qmail);
+ATF_TC_WITHOUT_HEAD(get_recipextra_from_env_postfix);
+ATF_TC_WITHOUT_HEAD(get_recipextra_from_env_exim);
#ifndef NELEM
#define NELEM(array) (sizeof(array) / sizeof((array)[0]))
ATF_REQUIRE(ctrl == NULL);
}
+ATF_TC_BODY(get_recipextra_from_env_none, tc)
+{
+ ATF_REQUIRE(get_recipextra_from_env(-1) == NULL);
+}
+
+ATF_TC_BODY(get_recipextra_from_env_qmail, tc)
+{
+ char *str;
+ setenv("DEFAULT", "value", 1);
+
+ str = get_recipextra_from_env(-1);
+ ATF_REQUIRE_STREQ(str, "value");
+ free(str);
+}
+
+ATF_TC_BODY(get_recipextra_from_env_postfix, tc)
+{
+ char *str;
+
+ setenv("EXTENSION", "value", 1);
+ str = get_recipextra_from_env(-1);
+ ATF_REQUIRE_STREQ(str, "value");
+ free(str);
+}
+
+ATF_TC_BODY(get_recipextra_from_env_exim, tc)
+{
+ char *str;
+
+ setenv("LOCAL_PART_SUFFIX", "+value", 1);
+ str = get_recipextra_from_env(-1);
+ ATF_REQUIRE_STREQ(str, "value");
+ free(str);
+
+ /* no valid delimiter */
+ setenv("LOCAL_PART_SUFFIX", "=value", 1);
+ str = get_recipextra_from_env(-1);
+ ATF_REQUIRE_STREQ(str, "=value");
+ free(str);
+}
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, random_int);
ATF_TP_ADD_TC(tp, get_prepped_mailbody_from_map);
ATF_TP_ADD_TC(tp, get_prepped_mailbody_from_map_1);
ATF_TP_ADD_TC(tp, get_ctrl_command);
+ ATF_TP_ADD_TC(tp, get_recipextra_from_env_none);
+ ATF_TP_ADD_TC(tp, get_recipextra_from_env_qmail);
+ ATF_TP_ADD_TC(tp, get_recipextra_from_env_postfix);
+ ATF_TP_ADD_TC(tp, get_recipextra_from_env_exim);
return (atf_no_error());
}