int
maildriver_generic_get_envelopes_list(mailsession * session,
    struct mailmessage_list * env_list)
{
  int r;
  unsigned i;

  for(i = 0 ; i < carray_count(env_list->msg_tab) ; i ++) {
    mailmessage * msg;
    
    msg = carray_get(env_list->msg_tab, i);
    
    if (msg->msg_fields == NULL) {
      struct mailimf_fields * fields;

      r = mailmessage_fetch_envelope(msg, &fields);
      if (r != MAIL_NO_ERROR) {
	/* do nothing */
      }
      else {
	msg->msg_fields = fields;
      }
      mailmessage_flush(msg);
    }
  }

  return MAIL_NO_ERROR;
}
Exemple #2
0
int mailprivacy_msg_get_bodystructure(struct mailprivacy * privacy,
    mailmessage * msg_info,
    struct mailmime ** result)
{
  int r;
  struct mailmime * mime;
  
  if (msg_info->msg_mime != NULL)
    return MAIL_NO_ERROR;
  
  if (msg_is_modified(privacy, msg_info))
    return MAIL_NO_ERROR;
  
  r = mailmessage_get_bodystructure(msg_info, &mime);
  if (r != MAIL_NO_ERROR)
    return r;
  
  /* modification on message if necessary */
  r = recursive_check_privacy(privacy, msg_info, msg_info->msg_mime);
  if (r != MAIL_NO_ERROR) {
    * result = msg_info->msg_mime;
    return MAIL_NO_ERROR;
  }
  
  r = register_msg(privacy, msg_info);
  if (r != MAIL_NO_ERROR) {
    recursive_clear_registered_mime(privacy, mime);
    mailmessage_flush(msg_info);
    return MAIL_ERROR_MEMORY;
  }
  
  * result = msg_info->msg_mime;

  return MAIL_NO_ERROR;
}
Exemple #3
0
void mailprivacy_msg_flush(struct mailprivacy * privacy,
    mailmessage * msg_info)
{
  if (msg_is_modified(privacy, msg_info)) {
    /* remove all modified parts */
    if (msg_info->msg_mime != NULL)
      recursive_clear_registered_mime(privacy, msg_info->msg_mime);
    unregister_message(privacy, msg_info);
  }
  
  mailmessage_flush(msg_info);
}
int mailprivacy_get_mime(struct mailprivacy * privacy,
    int check_privacy, int reencode,
    char * content, size_t content_len,
    struct mailmime ** result_mime)
{
  struct mailmime * mime;
  mailmessage * msg;
  int r;
  int res;

#if 0
  int check_privacy;
  
  check_privacy = (privacy != NULL);
#endif
  
  /*
    use message data driver, get bodystructure and
    convert all the data part in MAILMIME_SINGLE to files.
  */
  
  msg = data_message_init(content, content_len);
  if (msg == NULL) {
    res = MAIL_ERROR_MEMORY;
    goto err;
  }
  
#if 0
  if (msg->mime == NULL) {
    if (check_privacy) {
      r = mailprivacy_msg_get_bodystructure(privacy, msg, &mime);
    }
    else {
      /*
        don't use etpan_msg_get_bodystructure because it is not useful
        and to avoid loops due to security part
      */
      r = mailmessage_get_bodystructure(msg, &mime);
    }
  }
  else {
    mime = msg->mime;
  }
#endif

  if (check_privacy)
    r = mailprivacy_msg_get_bodystructure(privacy, msg, &mime);
  else
    r = mailmessage_get_bodystructure(msg, &mime);
  if (r != MAIL_NO_ERROR) {
    res = r;
    goto free_msg;
  }

  /*
    should be done so that the MIME structure need not to be unregistered.
  */
  mailprivacy_recursive_unregister_mime(privacy, mime);

  r = recursive_replace_single_parts(privacy, mime, reencode);
  if (r != MAIL_NO_ERROR) {
    res = r;
    goto clear_mime;
  }
  
  data_message_detach_mime(msg);
#if 0
  if (check_privacy)
    mailprivacy_msg_flush(privacy, msg);
  else
    mailmessage_flush(msg);
#endif
  mailprivacy_msg_flush(privacy, msg);
  mailmessage_free(msg);
  
  * result_mime = mime;
  
  return MAIL_NO_ERROR;
  
 clear_mime:
  mailprivacy_mime_clear(mime);
  mailprivacy_msg_flush(privacy, msg);
 free_msg:
  mailmessage_free(msg);
 err:
  return res;
}