diff --git a/RELEASE_NOTES b/RELEASE_NOTES index e392c6b..19a18d6 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -1,3 +1,5 @@ +- Introduced the archive_address feature, see etc/example.conf for the details + 1.3.12: ------- diff --git a/contrib/export-attachments/export-attachments.php b/contrib/export-attachments/export-attachments.php old mode 100644 new mode 100755 index 74b2fbd..0d67144 --- a/contrib/export-attachments/export-attachments.php +++ b/contrib/export-attachments/export-attachments.php @@ -1,6 +1,7 @@ +#!/usr/bin/php get_last_attachment_id(); $start_id = $attachment->get_checkpoint(); -syslog(LOG_INFO, "start: $start, limit: $limit"); +syslog(LOG_INFO, "start: $start_id, limit: $last_id"); for($i=$start_id; $i<$last_id; $i++) { diff --git a/etc/example.conf b/etc/example.conf index 1c7f782..54eb264 100644 --- a/etc/example.conf +++ b/etc/example.conf @@ -238,6 +238,15 @@ ; clients via an IP-address list is not feasible. security_header= +; By default the archive accepts any envelope recipient addresses. +; If your archive's port 25 is wide open to the Internet (which it +; shouldn't be, then spammers may find it, and fill it with spam. +; +; By setting this variable you may restrict the envelope address +; to a single email address, eg. some-random-address-12345@archive.yourdomain.com +; Then the archive will reject any other envelope recipients +archive_address= + ; whether to enable (1) or not (0) an smtp access list similar to ; postfix's postscreen. Valid actions in the acl file are "permit" ; and "reject" (without quotes). See smtp.acl.example for more. diff --git a/src/archive.c b/src/archive.c index 8ea7b50..97e5a37 100644 --- a/src/archive.c +++ b/src/archive.c @@ -244,7 +244,7 @@ CLEANUP: - if(fd != -1) close(fd); + if(fd != -1) close(fd); //-V547 if(s) free(s); if(cfg->encrypt_messages == 1) #if OPENSSL_VERSION_NUMBER < 0x10100000L diff --git a/src/cfg.c b/src/cfg.c index 0b508c4..563428e 100644 --- a/src/cfg.c +++ b/src/cfg.c @@ -39,7 +39,7 @@ struct _parse_rule config_parse_rules[] = { - + { "archive_address", "string", (void*) string_parser, offsetof(struct config, archive_address), "", MAXVAL-1}, { "archive_emails_not_having_message_id", "integer", (void*) int_parser, offsetof(struct config, archive_emails_not_having_message_id), "0", sizeof(int)}, { "archive_only_mydomains", "integer", (void*) int_parser, offsetof(struct config, archive_only_mydomains), "0", sizeof(int)}, { "backlog", "integer", (void*) int_parser, offsetof(struct config, backlog), "20", sizeof(int)}, diff --git a/src/cfg.h b/src/cfg.h index e374669..5b03582 100644 --- a/src/cfg.h +++ b/src/cfg.h @@ -67,6 +67,7 @@ int default_retention_days; char security_header[MAXVAL]; + char archive_address[MAXVAL]; // mysql stuff diff --git a/src/digest.c b/src/digest.c index 6899dba..2013473 100644 --- a/src/digest.c +++ b/src/digest.c @@ -81,8 +81,8 @@ SHA256_Final(md2, &context2); for(i=0;ibodydigest + i*2, 2*DIGEST_LENGTH, "%02x", md[i]); - snprintf(sdata->digest + i*2, 2*DIGEST_LENGTH, "%02x", md2[i]); + snprintf(sdata->bodydigest + i*2, 3, "%02x", md[i]); + snprintf(sdata->digest + i*2, 3, "%02x", md2[i]); } return 0; diff --git a/src/imap.c b/src/imap.c index bd5008a..ade8944 100644 --- a/src/imap.c +++ b/src/imap.c @@ -416,7 +416,7 @@ } // trim the "A3 OK LIST completed" trailer off - if(p) *p = '\0'; + if(p) *p = '\0'; //-V547 memset(attrs, 0, sizeof(attrs)); @@ -449,21 +449,27 @@ } else { if(fldrlen) { - ruf = malloc(strlen(q) * 2 + 1); - memset(ruf, 0, strlen(q) * 2 + 1); - memcpy(ruf, q, strlen(q)); - r = ruf; - while(*r != '\0') { - if(*r == '\\') { - memmove(r + 1, r, strlen(r)); + int ruflen = strlen(q) * 2; + ruf = malloc(ruflen + 1); + if(ruf){ + snprintf(ruf, ruflen, "%s", q); + r = ruf; + while(*r != '\0') { + if(*r == '\\') { + memmove(r + 1, r, strlen(r)); + r++; + } r++; } - r++; + + snprintf(folder, sizeof(folder)-1, "%s", ruf); + + free(ruf); + } + else { + printf("error: ruf = malloc()\n"); } - snprintf(folder, sizeof(folder)-1, "%s", ruf); - - free(ruf); fldrlen = 0; } else { snprintf(folder, sizeof(folder)-1, "%s", q); diff --git a/src/misc.c b/src/misc.c index e5fe4c4..703b21d 100644 --- a/src/misc.c +++ b/src/misc.c @@ -230,11 +230,8 @@ */ void make_random_string(unsigned char *buf, int buflen){ - int i, len, fd; - int urandom=0; - static char alphanum[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - - len = strlen(alphanum); + const char alphanum[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + int i, fd, urandom=0, len = sizeof(alphanum)-1; fd = open(RANDOM_POOL, O_RDONLY); if(fd != -1){ @@ -289,7 +286,7 @@ taia_now(&now); taia_pack(nowpack, &now); - memcpy(buf, nowpack, 12); + memcpy(buf, nowpack, 12); //-V512 fd = open(RANDOM_POOL, O_RDONLY); if(fd == -1) return ret; diff --git a/src/parser.c b/src/parser.c index dbaa627..feaae3f 100644 --- a/src/parser.c +++ b/src/parser.c @@ -45,7 +45,7 @@ if(take_into_pieces == 1 && state.writebufpos > 0){ if(write(state.mfd, writebuffer, state.writebufpos) == -1) syslog(LOG_PRIORITY, "ERROR: %s: write(), %s, %d, %s", sdata->ttmpfile, __func__, __LINE__, __FILE__); - memset(writebuffer, 0, sizeof(writebuffer)); + memset(writebuffer, 0, sizeof(writebuffer)); //-V597 state.writebufpos = 0; } @@ -212,7 +212,7 @@ sdata->restored_copy = 1; } - if(cfg->security_header && state->found_security_header == 0 && strstr(buf, cfg->security_header)){ + if(cfg->security_header[0] && state->found_security_header == 0 && strstr(buf, cfg->security_header)){ state->found_security_header = 1; } diff --git a/src/parser.h b/src/parser.h index 5f536fd..c943849 100644 --- a/src/parser.h +++ b/src/parser.h @@ -20,7 +20,7 @@ void fixupSoftBreakInQuotedPritableLine(char *buf, struct parser_state *state); void fixupBase64EncodedLine(char *buf, struct parser_state *state); void markHTML(char *buf, struct parser_state *state); -int appendHTMLTag(char *buf, char *htmlbuf, int pos, struct parser_state *state); +void setStateHTMLStyle(char *htmlbuf, int pos, struct parser_state *state); void translateLine(unsigned char *p, struct parser_state *state); void fix_email_address_for_sphinx(char *s); void split_email_address(char *s); diff --git a/src/parser_utils.c b/src/parser_utils.c index abc63ad..e8c1f2c 100644 --- a/src/parser_utils.c +++ b/src/parser_utils.c @@ -263,6 +263,18 @@ ts += get_local_timezone_offset() - offset; + if(ts < 700000000){ + // If the Date: field contains some garbage, eg. + // "Date: [mail_datw]" or similar, and the date + // is before Sat Mar 7 20:26:40 UTC 1992, then + // return the current timestamp + + time_t now; + time(&now); + + return now; + } + return ts; } @@ -538,7 +550,7 @@ if(isspace(*s)){ if(j > 0){ - k += appendHTMLTag(puf, html, pos, state); + setStateHTMLStyle(html, pos, state); memset(html, 0, SMALLBUFSIZE); j=0; } pos++; @@ -563,7 +575,7 @@ if(j > 0){ strncat(html, " ", SMALLBUFSIZE-1); - k += appendHTMLTag(puf, html, pos, state); + setStateHTMLStyle(html, pos, state); memset(html, 0, SMALLBUFSIZE); j=0; } } @@ -571,47 +583,15 @@ } //printf("append last in line:*%s*, html=+%s+, j=%d\n", puf, html, j); - if(j > 0){ appendHTMLTag(puf, html, pos, state); } + if(j > 0){ setStateHTMLStyle(html, pos, state); } strcpy(buf, puf); } -int appendHTMLTag(char *buf, char *htmlbuf, int pos, struct parser_state *state){ - char html[SMALLBUFSIZE]; - int len; - +void setStateHTMLStyle(char *htmlbuf, int pos, struct parser_state *state){ if(pos == 0 && strncmp(htmlbuf, "style ", 6) == 0) state->style = 1; if(pos == 0 && strncmp(htmlbuf, "/style ", 7) == 0) state->style = 0; - - return 0; - - //printf("appendHTML: pos:%d, +%s+\n", pos, htmlbuf); - - if(state->style == 1) return 0; - - if(strlen(htmlbuf) == 0) return 0; - - snprintf(html, SMALLBUFSIZE-1, "HTML*%s", htmlbuf); - len = strlen(html); - - if(len > 8 && strchr(html, '=')){ - char *p = strstr(html, "cid:"); - if(p){ - *(p+3) = '\0'; - strncat(html, " ", SMALLBUFSIZE-1); - } - - strncat(buf, html, MAXBUFSIZE-1); - return len; - } - - if(strstr(html, "http") ){ - strncat(buf, html+5, MAXBUFSIZE-1); - return len-5; - } - - return 0; } diff --git a/src/piler.c b/src/piler.c index d26016c..cfab882 100644 --- a/src/piler.c +++ b/src/piler.c @@ -103,7 +103,7 @@ int perform_checks(char *filename, struct session_data *sdata, struct data *data, struct parser_state *parser_state, struct config *cfg){ - if(cfg->security_header && parser_state->found_security_header == 0){ + if(cfg->security_header[0] && parser_state->found_security_header == 0){ syslog(LOG_PRIORITY, "%s: discarding: missing security header", filename); return ERR_DISCARDED; } diff --git a/src/pilerexport.c b/src/pilerexport.c index bdf7ba5..5ee47c8 100644 --- a/src/pilerexport.c +++ b/src/pilerexport.c @@ -25,7 +25,6 @@ int dryrun = 0; int exportall = 0; int verification_status = 0; -int rc = 0; int export_to_stdout = 0; char *query=NULL; int verbosity = 0; @@ -33,7 +32,7 @@ char *index_list = "main1,dailydelta1,delta1"; regex_t regexp; char *zipfile = NULL; -struct zip *z = NULL; +struct zip *zip = NULL; uint64 *zip_ids = NULL; int zip_counter = 0; int zip_batch = 2000; @@ -165,6 +164,7 @@ MYSQL_ROW row; uint64 id=0; char s[SMALLBUFSIZE]; + int rc=0; *num = 0; @@ -194,6 +194,7 @@ } if(!rc) export_emails_matching_to_query(sdata, query, cfg); + else printf("error: append_string_to_buffer() in run_query()\n"); free(query); query = NULL; @@ -240,6 +241,7 @@ int build_query_from_args(char *from, char *to, char *fromdomain, char *todomain, int minsize, int maxsize, unsigned long startdate, unsigned long stopdate){ char s[SMALLBUFSIZE]; + int rc=0; if(exportall == 1){ rc = append_string_to_buffer(&query, "SELECT `id`, `piler_id`, `digest`, `bodydigest` FROM "); @@ -328,9 +330,9 @@ #if LIBZIP_VERSION_MAJOR >= 1 void zip_flush(){ - zip_close(z); + zip_close(zip); - z = NULL; + zip = NULL; zip_counter = 0; if(!zip_ids) return; @@ -354,7 +356,7 @@ char digest[SMALLBUFSIZE], bodydigest[SMALLBUFSIZE]; char filename[SMALLBUFSIZE]; struct sql sql; - int errorp; + int errorp, rc=0; if(prepare_sql_statement(sdata, &sql, s) == ERR) return ERR; @@ -410,9 +412,9 @@ if(zipfile){ #if LIBZIP_VERSION_MAJOR >= 1 // Open zip file if handler is NULL - if(!z){ - z = zip_open(zipfile, ZIP_CREATE, &errorp); - if(!z){ + if(!zip){ + zip = zip_open(zipfile, ZIP_CREATE, &errorp); + if(!zip){ printf("error: error creating zip file=%s, error code=%d\n", zipfile, errorp); return ERR; } @@ -425,12 +427,12 @@ return ERR; } - zip_source_t *zs = zip_source_file(z, filename, 0, 0); - if(zs && zip_file_add(z, filename, zs, ZIP_FL_ENC_UTF_8) >= 0){ + zip_source_t *zs = zip_source_file(zip, filename, 0, 0); + if(zs && zip_file_add(zip, filename, zs, ZIP_FL_ENC_UTF_8) >= 0){ *(zip_ids+zip_counter) = id; zip_counter++; } else { - printf("error adding file %s: %s\n", filename, zip_strerror(z)); + printf("error adding file %s: %s\n", filename, zip_strerror(zip)); return ERR; } @@ -539,7 +541,10 @@ break; } - rc = append_email_to_buffer(&from, optarg); + if(append_email_to_buffer(&from, optarg)){ + printf("error: append_email_to_buffer() for from\n"); + return 1; + } break; @@ -550,7 +555,10 @@ break; } - rc = append_email_to_buffer(&to, optarg); + if(append_email_to_buffer(&to, optarg)){ + printf("error: append_email_to_buffer() for to\n"); + return 1; + } break; @@ -561,7 +569,10 @@ break; } - rc = append_email_to_buffer(&fromdomain, optarg); + if(append_email_to_buffer(&fromdomain, optarg)){ + printf("error: append_email_to_buffer() for fromdomain\n"); + return 1; + } break; @@ -572,7 +583,10 @@ break; } - rc = append_email_to_buffer(&todomain, optarg); + if(append_email_to_buffer(&todomain, optarg)){ + printf("error: append_email_to_buffer() for todomain\n"); + return 1; + } break; diff --git a/src/pilerimport.c b/src/pilerimport.c index 51ce727..3be6541 100644 --- a/src/pilerimport.c +++ b/src/pilerimport.c @@ -295,7 +295,7 @@ } - if(!mbox[0] && !data.import->mboxdir && !data.import->filename && !directory && !imapserver && !pop3server) usage(); + if(!mbox[0] && !data.import->mboxdir && !data.import->filename[0] && !directory && !imapserver && !pop3server) usage(); if(data.import->failed_folder && !can_i_write_directory(data.import->failed_folder)){ printf("cannot write failed directory '%s'\n", data.import->failed_folder); diff --git a/src/rules.c b/src/rules.c index 37c8d3c..d2cd7c7 100644 --- a/src/rules.c +++ b/src/rules.c @@ -118,7 +118,6 @@ struct rule *create_rule_item(struct rule_cond *rule_cond){ struct rule *h=NULL; - char empty = '\0'; int len; if(rule_cond == NULL) return NULL; @@ -144,16 +143,16 @@ h->emptyfrom = h->emptyto = h->emptysubject = h->emptyaname = h->emptyatype = 0; - if(rule_cond->from == NULL || strlen(rule_cond->from) < 1){ rule_cond->from[0] = empty; h->emptyfrom = 1; } + if(rule_cond->from[0] == 0){ h->emptyfrom = 1; } if(regcomp(&(h->from), rule_cond->from, REG_ICASE | REG_EXTENDED)) h->compiled = 0; - if(rule_cond->to == NULL || strlen(rule_cond->to) < 1){ rule_cond->to[0] = empty; h->emptyto = 1; } + if(rule_cond->to[0] == 0){ h->emptyto = 1; } if(regcomp(&(h->to), rule_cond->to, REG_ICASE | REG_EXTENDED)) h->compiled = 0; - if(rule_cond->subject == NULL || strlen(rule_cond->subject) < 1){ rule_cond->subject[0] = empty; h->emptysubject = 1; } + if(rule_cond->subject[0] == 0){ h->emptysubject = 1; } if(regcomp(&(h->subject), rule_cond->subject, REG_ICASE | REG_EXTENDED)) h->compiled = 0; - if(rule_cond->body == NULL || strlen(rule_cond->body) < 1){ rule_cond->body[0] = empty; h->emptybody = 1; } + if(rule_cond->body[0] == 0){ h->emptybody = 1; } if(regcomp(&(h->body), rule_cond->body, REG_ICASE | REG_EXTENDED)) h->compiled = 0; h->spam = rule_cond->spam; @@ -161,20 +160,16 @@ h->folder_id = rule_cond->folder_id; h->size = rule_cond->size; - - if(rule_cond->_size == NULL) rule_cond->_size[0] = empty; snprintf(h->_size, 3, "%s", rule_cond->_size); - if(rule_cond->attachment_name == NULL || strlen(rule_cond->attachment_name) < 1){ rule_cond->attachment_name[0] = empty; h->emptyaname = 1; } + if(rule_cond->attachment_name[0] == 0){ h->emptyaname = 1; } if(regcomp(&(h->attachment_name), rule_cond->attachment_name, REG_ICASE | REG_EXTENDED)) h->compiled = 0; - if(rule_cond->attachment_type == NULL || strlen(rule_cond->attachment_type) < 1){ rule_cond->attachment_type[0] = empty; h->emptyatype = 1; } + if(rule_cond->attachment_type[0] == 0){ h->emptyatype = 1; } if(regcomp(&(h->attachment_type), rule_cond->attachment_type, REG_ICASE | REG_EXTENDED)) h->compiled = 0; h->attachment_size = rule_cond->attachment_size; - - if(rule_cond->_attachment_size == NULL) rule_cond->_attachment_size[0] = empty; snprintf(h->_attachment_size, 3, "%s", rule_cond->_attachment_size); len = strlen(rule_cond->domain)+8 + strlen(rule_cond->from)+6 + strlen(rule_cond->to)+4 + strlen(rule_cond->subject)+9 + strlen(rule_cond->body)+6 + strlen(rule_cond->_size)+6 + strlen(rule_cond->attachment_name)+10 + strlen(rule_cond->attachment_type)+10 + strlen(rule_cond->_attachment_size)+10 + 9 + 15 + 15; diff --git a/src/smtp.c b/src/smtp.c index d1eac4c..5cd69fe 100644 --- a/src/smtp.c +++ b/src/smtp.c @@ -42,7 +42,7 @@ } if(strncasecmp(buf, SMTP_CMD_RCPT_TO, strlen(SMTP_CMD_RCPT_TO)) == 0){ - process_command_rcpt_to(session, buf); + process_command_rcpt_to(session, buf, cfg); return; } @@ -239,7 +239,7 @@ } -void process_command_rcpt_to(struct smtp_session *session, char *buf){ +void process_command_rcpt_to(struct smtp_session *session, char *buf, struct config *cfg){ if(session->protocol_state == SMTP_STATE_MAIL_FROM || session->protocol_state == SMTP_STATE_RCPT_TO){ @@ -249,6 +249,14 @@ if(session->num_of_rcpt_to < MAX_RCPT_TO){ extractEmail(buf, session->rcptto[session->num_of_rcpt_to]); + + // Check if we should accept archive_address only + if(cfg->archive_address[0] && !strstr(cfg->archive_address, session->rcptto[session->num_of_rcpt_to])){ + syslog(LOG_PRIORITY, "ERROR: Invalid recipient: *%s*", session->rcptto[session->num_of_rcpt_to]); + send_smtp_response(session, SMTP_RESP_550_ERR_INVALID_RECIPIENT); + return; + } + session->num_of_rcpt_to++; } @@ -306,7 +314,7 @@ session->buflen = 0; session->last_data_char = 0; - memset(session->buf, 0, SMALLBUFSIZE); + memset(session->buf, 0, sizeof(session->buf)); send_smtp_response(session, buf); } diff --git a/src/smtp.h b/src/smtp.h index f4b0cb3..a6858d1 100644 --- a/src/smtp.h +++ b/src/smtp.h @@ -16,7 +16,7 @@ void process_command_quit(struct smtp_session *session, char *buf, int buflen); void process_command_reset(struct smtp_session *session); void process_command_mail_from(struct smtp_session *session, char *buf); -void process_command_rcpt_to(struct smtp_session *session, char *buf); +void process_command_rcpt_to(struct smtp_session *session, char *buf, struct config *cfg); void process_command_data(struct smtp_session *session, struct config *cfg); void process_command_period(struct smtp_session *session); void process_command_starttls(struct smtp_session *session); diff --git a/src/smtpcodes.h b/src/smtpcodes.h index 0cdcec8..01e124e 100644 --- a/src/smtpcodes.h +++ b/src/smtpcodes.h @@ -56,6 +56,7 @@ #define SMTP_RESP_502_ERR "502 Command not implemented\r\n" #define SMTP_RESP_503_ERR "503 Bad command sequence\r\n" +#define SMTP_RESP_550_ERR_INVALID_RECIPIENT "550 Invalid recipient\r\n" #define SMTP_RESP_550_ERR_YOU_ARE_BANNED_BY_LOCAL_POLICY "550 You are banned by local policy\r\n" #define SMTP_RESP_550_ERR "550 Service currently unavailable\r\n" diff --git a/src/store.c b/src/store.c index 31323f5..99abc30 100644 --- a/src/store.c +++ b/src/store.c @@ -228,7 +228,7 @@ ENDE: if(outbuf) free(outbuf); - if(z) free(z); + if(z) free(z); //-V547 return ret; } diff --git a/webui/controller/audit/helper.php b/webui/controller/audit/helper.php index 95c8090..4b53de4 100644 --- a/webui/controller/audit/helper.php +++ b/webui/controller/audit/helper.php @@ -64,10 +64,11 @@ $this->data['actions'][ACTION_DOWNLOAD_ATTACHMENT] = $this->data['text_download_attachment2']; $this->data['actions'][ACTION_UNAUTHORIZED_DOWNLOAD_ATTACHMENT] = $this->data['text_unauthorized_download_attachment']; $this->data['actions'][ACTION_VIEW_JOURNAL] = $this->data['text_view_journal']; + $this->data['actions'][ACTION_MARK_AS_PRIVATE] = $this->data['text_mark_private']; - + /* paging info */ $this->data['prev_page'] = $this->data['page'] - 1; diff --git a/webui/language/cz/messages.php b/webui/language/cz/messages.php index 2d18447..723e0f5 100644 --- a/webui/language/cz/messages.php +++ b/webui/language/cz/messages.php @@ -211,6 +211,7 @@ $_['text_maillog_status'] = "status maillog collectoru"; $_['text_main_title'] = "clapf web UI"; $_['text_mapped_domain'] = "Mapovaná doména"; +$_['text_mark_private'] = "private"; $_['text_marked_for_removal'] = "Zpráva označena k odstranění"; $_['text_memory_usage'] = "Využití paměti"; $_['text_message'] = "zpráva"; diff --git a/webui/language/de/messages.php b/webui/language/de/messages.php index 33d4763..80faf1c 100644 --- a/webui/language/de/messages.php +++ b/webui/language/de/messages.php @@ -197,6 +197,7 @@ $_['text_maillog_status'] = "Sammelstatus Maillogbuch"; $_['text_main_title'] = "Clapf Benutzeroberfläche"; $_['text_mapped_domain'] = "Domänenalias"; +$_['text_mark_private'] = "private"; $_['text_marked_for_removal'] = "Nachricht zum Löschen markiert"; $_['text_memory_usage'] = "Arbeitsspeicher"; $_['text_message'] = "Nachricht"; diff --git a/webui/language/en/messages.php b/webui/language/en/messages.php index 2d6099c..57817ce 100644 --- a/webui/language/en/messages.php +++ b/webui/language/en/messages.php @@ -216,6 +216,7 @@ $_['text_maillog_status'] = "maillog collector status"; $_['text_main_title'] = "clapf web UI"; $_['text_mapped_domain'] = "Mapped domain"; +$_['text_mark_private'] = "private"; $_['text_marked_for_removal'] = "Message marked for removal"; $_['text_memory_usage'] = "Memory usage"; $_['text_message'] = "message"; diff --git a/webui/language/es/messages.php b/webui/language/es/messages.php index 79356d7..fb7b507 100644 --- a/webui/language/es/messages.php +++ b/webui/language/es/messages.php @@ -197,6 +197,7 @@ $_['text_maillog_status'] = "estado del colector de logs de mails"; $_['text_main_title'] = "IU web clapf"; $_['text_mapped_domain'] = "Dominio mapeado"; +$_['text_mark_private'] = "private"; $_['text_marked_for_removal'] = "Mensaje marcado para remover"; $_['text_memory_usage'] = "Uso de memoria"; $_['text_message'] = "mensaje"; diff --git a/webui/language/fr/messages.php b/webui/language/fr/messages.php index d7347b1..739480e 100644 --- a/webui/language/fr/messages.php +++ b/webui/language/fr/messages.php @@ -210,6 +210,7 @@ $_['text_maillog_status'] = "statut du collecteur de logs mails"; $_['text_main_title'] = "clapf web UI"; $_['text_mapped_domain'] = "Domaine mappé"; +$_['text_mark_private'] = "private"; $_['text_marked_for_removal'] = "Message marqué pour suppression"; $_['text_memory_usage'] = "Utilisation mémoire"; $_['text_message'] = "message"; diff --git a/webui/language/hu/messages.php b/webui/language/hu/messages.php index d71c2d3..48d2888 100644 --- a/webui/language/hu/messages.php +++ b/webui/language/hu/messages.php @@ -217,6 +217,7 @@ $_['text_maillog_status'] = "maillog gyűjtő státusz"; $_['text_main_title'] = "clapf web UI"; $_['text_mapped_domain'] = "Hozzárendelt domain"; +$_['text_mark_private'] = "privát"; $_['text_marked_for_removal'] = "Levél törlésre jelölve"; $_['text_memory_usage'] = "Memória használat"; $_['text_message'] = "üzenet"; diff --git a/webui/language/pl/messages.php b/webui/language/pl/messages.php index 7ee868b..47b9a76 100644 --- a/webui/language/pl/messages.php +++ b/webui/language/pl/messages.php @@ -212,6 +212,7 @@ $_['text_maillog_status'] = "program od zbierania wiadomości e-mail"; $_['text_main_title'] = "clapf interfejsu użytkownika strony"; $_['text_mapped_domain'] = "Zmapowana domena"; +$_['text_mark_private'] = "private"; $_['text_marked_for_removal'] = "Wiadomość oznaczona do usunięcia"; $_['text_memory_usage'] = "Użycie pamięci"; $_['text_message'] = "wiadomość"; diff --git a/webui/language/ru/messages.php b/webui/language/ru/messages.php index eb7c2bd..9722578 100644 --- a/webui/language/ru/messages.php +++ b/webui/language/ru/messages.php @@ -210,6 +210,7 @@ $_['text_maillog_status'] = "статус сборщика maillog"; $_['text_main_title'] = "Основной заголовок"; $_['text_mapped_domain'] = "Отображаемый домен"; +$_['text_mark_private'] = "private"; $_['text_marked_for_removal'] = "Помеченные для удаления сообщения"; $_['text_memory_usage'] = "Использование памяти"; $_['text_message'] = "сообщение"; diff --git a/webui/language/tr/messages.php b/webui/language/tr/messages.php index d0f4a0f..1ff8558 100644 --- a/webui/language/tr/messages.php +++ b/webui/language/tr/messages.php @@ -209,6 +209,7 @@ $_['text_maillog_status'] = "e-posta logu toplama durumu"; $_['text_main_title'] = "clapf web arabirimi"; $_['text_mapped_domain'] = "Eşleşmiş alan adı"; +$_['text_mark_private'] = "private"; $_['text_marked_for_removal'] = "Mesaj kaldırılmak üzere işaretlenmiş"; $_['text_memory_usage'] = "Hafıza kullanımı"; $_['text_message'] = "mesaj";