@@ -2650,21 +2650,19 @@ static ec_error_t message_forward_message(const rulexec_in &rp,
26502650 uint32_t action_flavor, std::vector<std::string> &&rcpt_list) try
26512651{
26522652 int offset;
2653- char tmp_path[256 ];
26542653 struct tm time_buff;
2655- char mid_string[128 ];
26562654 struct stat node_stat;
26572655 char tmp_buff[64 *1024 ];
26582656 MESSAGE_CONTENT *pmsgctnt;
26592657
26602658 std::unique_ptr<char [], stdlib_delete> pbuff;
26612659 MAIL imail;
26622660 if (rp.digest .has_value ()) {
2663- if (!get_digest (*rp.digest , " file" , mid_string, std::size (mid_string)))
2661+ std::string mid_string;
2662+ if (!get_digest (*rp.digest , " file" , mid_string))
26642663 return ecError;
2665- snprintf (tmp_path, std::size (tmp_path), " %s/eml/%s" ,
2666- exmdb_server::get_dir (), mid_string);
2667- wrapfd fd = open (tmp_path, O_RDONLY);
2664+ auto eml_path = exmdb_server::get_dir () + " /eml/" s + mid_string;
2665+ wrapfd fd = open (eml_path.c_str (), O_RDONLY);
26682666 if (fd.get () < 0 || fstat (fd.get (), &node_stat) != 0 )
26692667 return ecNotFound;
26702668 if (!S_ISREG (node_stat.st_mode )) {
@@ -3102,18 +3100,17 @@ static ec_error_t op_delegate(const rulexec_in &rp, seen_list &seen,
31023100 std::vector<std::string> rcpt_list;
31033101 if (!msg_rcpt_blocks_to_list (*pfwddlgt, rcpt_list))
31043102 return ecError;
3105- char mid_string1[128 ], tmp_path1[256 ];
3106- get_digest (*rp.digest , " file" , mid_string1, std::size (mid_string1));
3107- snprintf (tmp_path1, std::size (tmp_path1), " %s/eml/%s" ,
3108- exmdb_server::get_dir (), mid_string1);
3103+ std::string mid_string_src;
3104+ get_digest (*rp.digest , " file" , mid_string_src);
3105+ auto eml_path_src = exmdb_server::get_dir () + " /eml/" s + mid_string_src;
31093106 for (const auto &eaddr : rcpt_list) {
31103107 sql_meta_result mres;
31113108 if (mysql_adaptor_meta (eaddr.c_str (), WANTPRIV_METAONLY, mres) != 0 )
31123109 continue ;
31133110 auto maildir = mres.maildir .c_str ();
31143111 if (*maildir == ' \0 ' ) {
31153112 mlog (LV_ERR, " E-1740: copy from %s to delegate %s not possible: no homedir" ,
3116- tmp_path1 , eaddr.c_str ());
3113+ eml_path_src. c_str () , eaddr.c_str ());
31173114 continue ;
31183115 }
31193116 char guidtxt[GUIDSTR_SIZE]{};
@@ -3125,10 +3122,10 @@ static ec_error_t op_delegate(const rulexec_in &rp, seen_list &seen,
31253122 mlog (LV_ERR, " E-1492: mkbasedir for %s: %s" , eml_path.c_str (), strerror (-ret));
31263123 continue ;
31273124 }
3128- ret = HX_copy_file (tmp_path1 , eml_path.c_str (), 0 );
3125+ ret = HX_copy_file (eml_path_src. c_str () , eml_path.c_str (), 0 );
31293126 if (ret < 0 ) {
31303127 mlog (LV_ERR, " E-1606: HX_copy_file %s -> %s: %s" ,
3131- tmp_path1 , eml_path.c_str (), strerror (-ret));
3128+ eml_path_src. c_str () , eml_path.c_str (), strerror (-ret));
31323129 continue ;
31333130 }
31343131 Json::Value newdigest = *rp.digest ;
@@ -3420,10 +3417,9 @@ static ec_error_t opx_delegate(const rulexec_in &rp, const rule_node &rule,
34203417 std::vector<std::string> rcpt_list;
34213418 if (!msg_rcpt_blocks_to_list (*pextfwddlgt, rcpt_list))
34223419 return ecError;
3423- char mid_string1[128 ], tmp_path1[256 ];
3424- get_digest (*rp.digest , " file" , mid_string1, std::size (mid_string1));
3425- snprintf (tmp_path1, std::size (tmp_path1), " %s/eml/%s" ,
3426- exmdb_server::get_dir (), mid_string1);
3420+ std::string mid_string_src;
3421+ get_digest (*rp.digest , " file" , mid_string_src);
3422+ auto eml_path_src = exmdb_server::get_dir () + " /eml/" s + mid_string_src;
34273423 for (const auto &eaddr : rcpt_list) {
34283424 sql_meta_result mres;
34293425 if (mysql_adaptor_meta (eaddr.c_str (), WANTPRIV_METAONLY, mres) != 0 )
@@ -3438,10 +3434,10 @@ static ec_error_t opx_delegate(const rulexec_in &rp, const rule_node &rule,
34383434 mlog (LV_ERR, " E-1493: mkbasedir for %s: %s" , eml_path.c_str (), strerror (-ret));
34393435 continue ;
34403436 }
3441- ret = HX_copy_file (tmp_path1 , eml_path.c_str (), 0 );
3437+ ret = HX_copy_file (eml_path_src. c_str () , eml_path.c_str (), 0 );
34423438 if (ret < 0 ) {
34433439 mlog (LV_ERR, " E-1607: HX_copy_file %s -> %s: %s" ,
3444- tmp_path1 , eml_path.c_str (), strerror (-ret));
3440+ eml_path_src. c_str () , eml_path.c_str (), strerror (-ret));
34453441 continue ;
34463442 }
34473443 Json::Value newdigest = *rp.digest ;
@@ -3613,12 +3609,11 @@ static ec_error_t message_rule_new_message(const rulexec_in &rp, seen_list &seen
36133609 return ecError;
36143610 if (!rp.digest .has_value ())
36153611 return ecSuccess;
3616- char mid_string1[128 ], tmp_path1[256 ];
3617- get_digest (*rp.digest , " file" , mid_string1, std::size (mid_string1));
3618- snprintf (tmp_path1, std::size (tmp_path1), " %s/eml/%s" ,
3619- exmdb_server::get_dir (), mid_string1);
3620- if (::remove (tmp_path1) != 0 && errno != ENOENT)
3621- mlog (LV_WARN, " W-1345: remove %s: %s" , tmp_path1, strerror (errno));
3612+ std::string mid_string_src;
3613+ get_digest (*rp.digest , " file" , mid_string_src);
3614+ auto eml_path_src = exmdb_server::get_dir () + " /eml/" s + mid_string_src;
3615+ if (::remove (eml_path_src.c_str ()) != 0 && errno != ENOENT)
3616+ mlog (LV_WARN, " W-1345: remove %s: %s" , eml_path_src.c_str (), strerror (errno));
36223617 return ecSuccess;
36233618}
36243619
@@ -3653,7 +3648,6 @@ BOOL exmdb_server::deliver_message(const char *dir, const char *from_address,
36533648{
36543649 bool b_oof;
36553650 uint64_t fid_val;
3656- char tmp_path[256 ];
36573651 BINARY searchkey_bin;
36583652 char mid_string[128 ];
36593653 std::string account, display_name;
@@ -3791,23 +3785,22 @@ BOOL exmdb_server::deliver_message(const char *dir, const char *from_address,
37913785 get_digest (*digest, " file" , mid_string, std::size (mid_string))) {
37923786 Json::Value newdigest = *digest;
37933787 newdigest[" file" ] = " " ;
3794- snprintf (tmp_path, std::size (tmp_path), " %s/ext/%s" ,
3795- exmdb_server::get_dir (), mid_string);
3788+ auto ext_path = exmdb_server::get_dir () + " /ext/" s + mid_string;
37963789 auto djson = json_to_str (std::move (newdigest));
3797- auto ret = gx_mkbasedir (tmp_path , FMODE_PRIVATE | S_IXUSR | S_IXGRP);
3790+ auto ret = gx_mkbasedir (ext_path. c_str () , FMODE_PRIVATE | S_IXUSR | S_IXGRP);
37983791 if (ret < 0 ) {
3799- mlog (LV_ERR, " E-1942: mkbasedir for %s: %s" , tmp_path , strerror (-ret));
3792+ mlog (LV_ERR, " E-1942: mkbasedir for %s: %s" , ext_path. c_str () , strerror (-ret));
38003793 return false ;
38013794 }
3802- wrapfd fd = open (tmp_path , O_CREAT | O_TRUNC | O_WRONLY, FMODE_PRIVATE);
3795+ wrapfd fd = open (ext_path. c_str () , O_CREAT | O_TRUNC | O_WRONLY, FMODE_PRIVATE);
38033796 if (fd.get () >= 0 ) {
38043797 if (HXio_fullwrite (fd.get (), djson.c_str (), djson.size ()) < 0 ) {
3805- mlog (LV_ERR, " E-1319: write %s: %s" , tmp_path , strerror (errno));
3798+ mlog (LV_ERR, " E-1319: write %s: %s" , ext_path. c_str () , strerror (errno));
38063799 return false ;
38073800 }
38083801 auto err = fd.close_wr ();
38093802 if (err != 0 ) {
3810- mlog (LV_ERR, " E-1319: close %s: %s" , tmp_path , strerror (err));
3803+ mlog (LV_ERR, " E-1319: close %s: %s" , ext_path. c_str () , strerror (err));
38113804 return false ;
38123805 }
38133806 if (!common_util_set_mid_string (pdb->psqlite ,
@@ -4009,7 +4002,7 @@ BOOL exmdb_server::read_message(const char *dir, const char *username,
40094002BOOL exmdb_server::rule_new_message (const char *dir, const char *username,
40104003 cpid_t cpid, uint64_t folder_id, uint64_t message_id) try
40114004{
4012- char *pmid_string = nullptr , tmp_path[ 256 ] ;
4005+ char *pmid_string = nullptr ;
40134006
40144007 auto pdb = db_engine_get_db (dir);
40154008 if (!pdb)
@@ -4027,10 +4020,9 @@ BOOL exmdb_server::rule_new_message(const char *dir, const char *username,
40274020 return FALSE ;
40284021 std::optional<Json::Value> digest;
40294022 if (NULL != pmid_string) {
4030- snprintf (tmp_path, std::size (tmp_path), " %s/ext/%s" ,
4031- exmdb_server::get_dir (), pmid_string);
4023+ auto ext_path = exmdb_server::get_dir () + " /ext/" s + pmid_string;
40324024 size_t slurp_size = 0 ;
4033- std::unique_ptr<char [], stdlib_delete> slurp_data (HX_slurp_file (tmp_path , &slurp_size));
4025+ std::unique_ptr<char [], stdlib_delete> slurp_data (HX_slurp_file (ext_path. c_str () , &slurp_size));
40344026 if (slurp_data != nullptr ) {
40354027 digest.emplace ();
40364028 if (!json_from_str ({slurp_data.get (), slurp_size}, *digest))
0 commit comments