예제 #1
0
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;
}
예제 #2
0
int main(int argc, char ** argv)
{
    char * content;
    size_t length;
    mailmessage * msg;
    int r;
    struct mailprivacy * privacy;
    struct mailmime * mime;
    int col;

    privacy = mailprivacy_new("/Users/hoa/tmp", 1);
    if (privacy == NULL) {
        goto err;
    }

    r = mailprivacy_gnupg_init(privacy);
    if (r != MAIL_NO_ERROR) {
        goto free_privacy;
    }

    r = mailprivacy_smime_init(privacy);
    mailprivacy_smime_set_cert_dir(privacy,
                                   "/Users/hoa/LibEtPan/libetpan/tests/keys/cert");
    mailprivacy_smime_set_CA_dir(privacy,
                                 "/Users/hoa/LibEtPan/libetpan/tests/keys/ca");
    mailprivacy_smime_set_private_keys_dir(privacy,
                                           "/Users/hoa/LibEtPan/libetpan/tests/keys/private");

    mailprivacy_gnupg_set_encryption_id(privacy, "xxxx@xxxx", "coin");
    mailprivacy_smime_set_encryption_id(privacy, "xxxx@xxxx", "coin");

    if (argc < 2) {
        fprintf(stderr, "syntax: decrypt [message]\n");
        goto done_gpg;
    }

    r = get_content_of_file(argv[1], &content, &length);
    if (r < 0) {
        fprintf(stderr, "file not found %s\n", argv[1]);
        goto done_gpg;
    }

    msg = data_message_init(content, length);
    if (msg == NULL) {
        fprintf(stderr, "unexpected error\n");
        goto free_content;
    }

    r = mailprivacy_msg_get_bodystructure(privacy, msg, &mime);
    if (r != MAIL_NO_ERROR) {
        fprintf(stderr, "unexpected error\n");
        goto free_content;
    }

    mailmime_write(stdout, &col, mime);

    {
        clist * id_list;
        clistiter * iter;

        id_list = mailprivacy_gnupg_encryption_id_list(privacy, msg);
        if (id_list != NULL) {
            for(iter = clist_begin(id_list) ; iter != NULL ; iter = clist_next(iter)) {
                char * str;

                str = clist_content(iter);
                fprintf(stderr, "%s\n", str);
            }
        }
    }

    {
        clist * id_list;
        clistiter * iter;

        id_list = mailprivacy_smime_encryption_id_list(privacy, msg);
        if (id_list != NULL) {
            for(iter = clist_begin(id_list) ; iter != NULL ; iter = clist_next(iter)) {
                char * str;

                str = clist_content(iter);
                fprintf(stderr, "%s\n", str);
            }
        }
    }

    mailprivacy_gnupg_encryption_id_list_clear(privacy, msg);

    mailmessage_free(msg);

    free(content);
    mailprivacy_smime_done(privacy);
    mailprivacy_gnupg_done(privacy);
    mailprivacy_free(privacy);

    exit(EXIT_SUCCESS);

free_content:
    free(content);
done_gpg:
    mailprivacy_gnupg_done(privacy);
free_privacy:
    mailprivacy_free(privacy);
err:
    exit(EXIT_FAILURE);
}