⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 postpone.c

📁 mutt-1.5.12 源代码。linux 下邮件接受的工具。
💻 C
📖 第 1 页 / 共 2 页
字号:
      hdr->security |= APPLICATION_SMIME;             /* remove the smime field */      next = tmp->next;      if (last)	last->next = tmp->next;      else	hdr->env->userhdrs = tmp->next;      tmp->next = NULL;      mutt_free_list (&tmp);      tmp = next;    }#ifdef MIXMASTER    else if (mutt_strncmp ("X-Mutt-Mix:", tmp->data, 11) == 0)    {      char *t;      mutt_free_list (&hdr->chain);            t = strtok (tmp->data + 11, " \t\n");      while (t)      {	hdr->chain = mutt_add_list (hdr->chain, t);	t = strtok (NULL, " \t\n");      }            next = tmp->next;      if (last) 	last->next = tmp->next;      else	hdr->env->userhdrs = tmp->next;      tmp->next = NULL;      mutt_free_list (&tmp);      tmp = next;    }#endif    else    {      last = tmp;      tmp = tmp->next;    }  }  return (code);}int mutt_parse_crypt_hdr (char *p, int set_signas, int crypt_app){  char smime_cryptalg[LONG_STRING] = "\0";  char sign_as[LONG_STRING] = "\0", *q;  int flags = 0;  if (!WithCrypto)    return 0;     SKIPWS (p);  for (; *p; p++)  {             switch (*p)    {      case 'e':      case 'E':        flags |= ENCRYPT;        break;      case 's':          case 'S':        flags |= SIGN;        q = sign_as;              if (*(p+1) == '<')        {          for (p += 2; 	       *p && *p != '>' && q < sign_as + sizeof (sign_as) - 1;               *q++ = *p++)	    ;          if (*p!='>')          {            mutt_error _("Illegal crypto header");            return 0;          }        }               *q = '\0';        break;      /* This used to be the micalg parameter.       *        * It's no longer needed, so we just skip the parameter in order       * to be able to recall old messages.       */      case 'm':      case 'M':        if(*(p+1) == '<')        {	  for (p += 2; *p && *p != '>'; p++)	    ;	  if(*p != '>')	  {	    mutt_error _("Illegal crypto header");	    return 0;	  }	}	break;	  	        case 'c':      case 'C':   	q = smime_cryptalg;	        if(*(p+1) == '<')	{	  for(p += 2; *p && *p != '>' && q < smime_cryptalg + sizeof(smime_cryptalg) - 1;	      *q++ = *p++)	    ;	  	  if(*p != '>')	  {	    mutt_error _("Illegal S/MIME header");	    return 0;	  }	}	*q = '\0';	break;      case 'i':      case 'I':	flags |= INLINE;	break;      default:        mutt_error _("Illegal crypto header");        return 0;    }       }  /* the cryptalg field must not be empty */  if ((WithCrypto & APPLICATION_SMIME) && *smime_cryptalg)    mutt_str_replace (&SmimeCryptAlg, smime_cryptalg);  /* Set {Smime,Pgp}SignAs, if desired. */  if ((WithCrypto & APPLICATION_PGP) && (crypt_app == APPLICATION_PGP)      && (set_signas || *sign_as))    mutt_str_replace (&PgpSignAs, sign_as);  if ((WithCrypto & APPLICATION_SMIME) && (crypt_app == APPLICATION_SMIME)      && (set_signas || *sign_as))    mutt_str_replace (&SmimeDefaultKey, sign_as);  return flags;}int mutt_prepare_template (FILE *fp, CONTEXT *ctx, HEADER *newhdr, HEADER *hdr,			       short weed){  MESSAGE *msg = NULL;  char file[_POSIX_PATH_MAX];  BODY *b;  FILE *bfp;    int rv = -1;  STATE s;    memset (&s, 0, sizeof (s));    if (!fp && (msg = mx_open_message (ctx, hdr->msgno)) == NULL)    return (-1);  if (!fp) fp = msg->fp;  bfp = fp;  /* parse the message header and MIME structure */  fseeko (fp, hdr->offset, 0);  newhdr->offset = hdr->offset;  newhdr->env = mutt_read_rfc822_header (fp, newhdr, 1, weed);  newhdr->content->length = hdr->content->length;  mutt_parse_part (fp, newhdr->content);  FREE (&newhdr->env->message_id);  FREE (&newhdr->env->mail_followup_to); /* really? */  /* decrypt pgp/mime encoded messages */  if ((WithCrypto & (APPLICATION_PGP|APPLICATION_SMIME) & hdr->security)      && mutt_is_multipart_encrypted (newhdr->content))  {    int ccap = WithCrypto & (APPLICATION_PGP|APPLICATION_SMIME) & hdr->security;    newhdr->security |= ENCRYPT | ccap;    if (!crypt_valid_passphrase (ccap))      goto err;    mutt_message _("Decrypting message...");    if (((ccap & APPLICATION_PGP) && crypt_pgp_decrypt_mime (fp, &bfp, newhdr->content, &b) == -1) 	|| ((ccap & APPLICATION_SMIME) && crypt_smime_decrypt_mime (fp, &bfp, newhdr->content, &b) == -1) 	|| b == NULL)    { err:      mx_close_message (&msg);      mutt_free_envelope (&newhdr->env);      mutt_free_body (&newhdr->content);      mutt_error _("Decryption failed.");      return -1;    }    mutt_free_body (&newhdr->content);    newhdr->content = b;    mutt_clear_error ();  }  /*    * remove a potential multipart/signed layer - useful when   * resending messages    */    if (WithCrypto && mutt_is_multipart_signed (newhdr->content))  {    newhdr->security |= SIGN;    if ((WithCrypto & APPLICATION_PGP)        && ascii_strcasecmp (mutt_get_parameter ("protocol", newhdr->content->parameter), "application/pgp-signature") == 0)      newhdr->security |= APPLICATION_PGP;    else if ((WithCrypto & APPLICATION_SMIME))      newhdr->security |= APPLICATION_SMIME;        /* destroy the signature */    mutt_free_body (&newhdr->content->parts->next);    newhdr->content = mutt_remove_multipart (newhdr->content);  }  /*    * We don't need no primary multipart.   * Note: We _do_ preserve messages!   *    * XXX - we don't handle multipart/alternative in any    * smart way when sending messages.  However, one may   * consider this a feature.   *    */  if (newhdr->content->type == TYPEMULTIPART)    newhdr->content = mutt_remove_multipart (newhdr->content);  s.fpin = bfp;    /* create temporary files for all attachments */  for (b = newhdr->content; b; b = b->next)  {        /* what follows is roughly a receive-mode variant of     * mutt_get_tmp_attachment () from muttlib.c     */    file[0] = '\0';    if (b->filename)    {      strfcpy (file, b->filename, sizeof (file));      b->d_filename = safe_strdup (b->filename);    }    else    {      /* avoid Content-Disposition: header with temporary filename */      b->use_disp = 0;    }    /* set up state flags */    s.flags = 0;    if (b->type == TYPETEXT)    {      if (!ascii_strcasecmp ("yes", mutt_get_parameter ("x-mutt-noconv", b->parameter)))	b->noconv = 1;      else      {	s.flags |= M_CHARCONV;	b->noconv = 0;      }      mutt_delete_parameter ("x-mutt-noconv", &b->parameter);    }    mutt_adv_mktemp (file, sizeof(file));    if ((s.fpout = safe_fopen (file, "w")) == NULL)      goto bail;        if ((WithCrypto & APPLICATION_PGP) 	&& (mutt_is_application_pgp (b) & (ENCRYPT|SIGN)))    {            mutt_body_handler (b, &s);      newhdr->security |= mutt_is_application_pgp (newhdr->content);      b->type = TYPETEXT;      mutt_str_replace (&b->subtype, "plain");      mutt_delete_parameter ("x-action", &b->parameter);    }    else      mutt_decode_attachment (b, &s);    if (safe_fclose (&s.fpout) != 0)      goto bail;    mutt_str_replace (&b->filename, file);    b->unlink = 1;    mutt_stamp_attachment (b);    mutt_free_body (&b->parts);    if (b->hdr) b->hdr->content = NULL; /* avoid dangling pointer */  }  /* Fix encryption flags. */    /* No inline if multipart. */  if (WithCrypto && (newhdr->security & INLINE) && newhdr->content->next)    newhdr->security &= ~INLINE;    /* Do we even support multiple mechanisms? */  newhdr->security &= WithCrypto | ~(APPLICATION_PGP|APPLICATION_SMIME);    /* Theoretically, both could be set. Take the one the user wants to set by default. */  if ((newhdr->security & APPLICATION_PGP) && (newhdr->security & APPLICATION_SMIME))  {    if (option (OPTSMIMEISDEFAULT))      newhdr->security &= ~APPLICATION_PGP;    else      newhdr->security &= ~APPLICATION_SMIME;  }  rv = 0;    bail:    /* that's it. */  if (bfp != fp) fclose (bfp);  if (msg) mx_close_message (&msg);    if (rv == -1)  {    mutt_free_envelope (&newhdr->env);    mutt_free_body (&newhdr->content);  }    return rv;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -