Patches para o PGP 2.6.3ia

Os consertos (patches) abaixo corrigem alguns problemas menores do PGP versão 2.6.3(i). As mudanças mais importantes são:

  1. Melhor discernimento entre arquivos de texto ou binários. Nenhum limite no tamanho das linhas, permitindo agora assinaturas limpas (clear signs) de mensagens sem indicadores de fim-de-linha. (comuns no Mac e no Windows). Note porém que não é uma boa idéia enviar esse tipo de mensagem através de email, já que as chances de arquivos desse tipo passarem intactos é baixa.

  2. Compilação mais limpa em algumas plataformas:

  3. O charset padrão para o OS/2 foi trocado para cp850, que é o correto.
Nota: Se você obteve o PGP 2.6.3i neste site, então não vai precisar desses patches, uma vez que eles já foram incluídos. Os patches foram produzidos com o utilitário 'diff' do Unix. Para aplicá-los, você precisará do código fonte do PGP 2.6.3i, que deverá ser modificado (manualmente ou usando o utilitário 'patch' do Unix), e depois recompilado.


*** $(SRC)/pgp263i.orig/src/charset.c	Wed Jan 10 15:18:41 1996
--- charset.c	Sun Feb  4 16:32:01 1996
***************
*** 259,265 ****
  /* End of Russian section */
  
  #ifndef	DEFAULT_CSET
! #if defined(MSDOS)
  #define DEFAULT_CSET    "cp850"
  #elif defined(NEXT)
  #define	DEFAULT_CSET	"next"
--- 259,265 ----
  /* End of Russian section */
  
  #ifndef	DEFAULT_CSET
! #if defined(MSDOS) || defined(OS2)
  #define DEFAULT_CSET    "cp850"
  #elif defined(NEXT)
  #define	DEFAULT_CSET	"next"


*** $(SRC)/pgp263i.orig/src/fileio.c	Sat Jan  6 20:45:50 1996
--- fileio.c	Mon Mar  4 11:14:45 1996
***************
*** 590,605 ****
  
  char *buildsysfilename(char *result, char *fname)
  {
-     buildfilename(result, fname);
  #ifdef PGP_SYSTEM_DIR
-     if (file_exists(result))
- 	return result;
      strcpy(result, PGP_SYSTEM_DIR);
      strcat(result, fname);
      if (file_exists(result))
  	return result;
-     buildfilename(result, fname);	/* Put name back for error */
  #endif
      return result;
  }
  
--- 590,602 ----
  
  char *buildsysfilename(char *result, char *fname)
  {
  #ifdef PGP_SYSTEM_DIR
      strcpy(result, PGP_SYSTEM_DIR);
      strcat(result, fname);
      if (file_exists(result))
  	return result;
  #endif
+     buildfilename(result, fname);	/* Put name back for error */
      return result;
  }
  
***************
*** 1044,1059 ****
          c = *bufptr++;
          if (c == '\n' || c == '\r')
              lfctr=0;
!         else /* allow BEL BS HT LF VT FF CR EOF control characters */
          {
  #ifdef EBCDIC
! 	    if (iscntrl(c) && c!=BEL && c!=BS && c!=HT && c!=LF && c!=VT && c!=FF && c!=CR && c!=EOF)
  #else
!             if (c < '\007' || (c > '\r' && c < ' ' && c != '\032'))
  #endif
                  return FALSE;  /* not a text file */
              lfctr++;
!             if (lfctr>132) return FALSE; /* line too long. Not a text file*/
          }
      }
      return TRUE;
--- 1041,1056 ----
          c = *bufptr++;
          if (c == '\n' || c == '\r')
              lfctr=0;
!         else /* allow BEL BS HT LF VT FF CR EOF ESC control characters */
          {
  #ifdef EBCDIC
! 	    if (iscntrl(c) && c!=BEL && c!=BS && c!=HT && c!=LF && c!=VT && c!=FF && c!=CR && c!=EOF && c!=ESC)
  #else
!             if (c < '\007' || (c > '\r' && c < ' ' && c != '\032' && c != '\033'))
  #endif
                  return FALSE;  /* not a text file */
              lfctr++;
! /*          if (lfctr>132) return FALSE; /* line too long. Not a text file */
          }
      }
      return TRUE;


*** $(SRC)/pgp263i.orig/src/keymaint.c	Tue Jan  2 15:12:59 1996
--- keymaint.c	Sat Feb 17 15:04:52 1996
***************
*** 118,124 ****
  static void maint_init_mem(void);
  static void maint_release_mem(void);
  static VOID *allocn(int size);
- static char *store_str(char *str);
  static VOID *allocbuf(int size);
  static void freebufpool(void);
  static void compute_legit(struct userid *id);
--- 118,123 ----
***************
*** 1400,1406 ****
  
  #define	HASH_ALLOC	(ALLOC_UNIT / sizeof(struct hashent))
  
- static char *store_str(char *str);
  static VOID *allocbuf(int size);
  static void freebufpool();
  
--- 1399,1404 ----
***************
*** 1574,1580 ****
  /*
   * store_str does the same as strdup(), but allocates memory with allocbuf()
   */
! static char *
   store_str(char *str)
  {
      int size = strlen(str) + 1;
--- 1572,1578 ----
  /*
   * store_str does the same as strdup(), but allocates memory with allocbuf()
   */
! char *
   store_str(char *str)
  {
      int size = strlen(str) + 1;


*** $(SRC)/pgp263i.orig/src/keymaint.h	Sun Oct 22 15:55:01 1995
--- keymaint.h	Sat Feb 17 14:34:02 1996
***************
*** 46,51 ****
--- 46,52 ----
  void endkrent(void);
  int init_userhash(void);
  
+ char *store_str(char *str);
  
  extern char trust_lst[8][16];


*** $(SRC)/pgp263i.orig/src/keymgmt.c	Mon Jan  8 13:05:09 1996
--- keymgmt.c	Sat Feb 17 15:40:33 1996
***************
*** 1096,1102 ****
  	if (++guesses > 3)
  	    hidekey = 0;
  	else
! 	    hidekey = (GetHashedPassPhrase(ideakey, 1) > 0);
  	/*
  	 * We've already tried the null password - interpret
  	 * a null string as "I dunno".
--- 1096,1102 ----
  	if (++guesses > 3)
  	    hidekey = 0;
  	else
! 	    hidekey = (GetHashedPassPhrase((char *)ideakey, 1) > 0);
  	/*
  	 * We've already tried the null password - interpret
  	 * a null string as "I dunno".
***************
*** 2538,2544 ****
  
      fprintf(pgpout, LANG("\nDo you want to change your pass phrase (y/N)? "));
      if (getyesno('n')) {	/* user said yes */
! 	hidekey = (GetHashedPassPhrase((byte *) ideakey, 2) > 0);
  	changed = TRUE;
      }
      if (!changed) {
--- 2538,2544 ----
  
      fprintf(pgpout, LANG("\nDo you want to change your pass phrase (y/N)? "));
      if (getyesno('n')) {	/* user said yes */
! 	hidekey = (GetHashedPassPhrase((char *)ideakey, 2) > 0);
  	changed = TRUE;
      }
      if (!changed) {
***************
*** 2805,2811 ****
      fputs(LANG("\nYou need a pass phrase to protect your RSA secret key.\n\
  Your pass phrase can be any sentence or phrase and may have many\n\
  words, spaces, punctuation, or any other printable characters.\n"), pgpout);
!     hidekey = (GetHashedPassPhrase(ideakey, 2) > 0);
      /* init CFB IDEA key */
  #ifdef MACTC5
      if (Abort)
--- 2805,2811 ----
      fputs(LANG("\nYou need a pass phrase to protect your RSA secret key.\n\
  Your pass phrase can be any sentence or phrase and may have many\n\
  words, spaces, punctuation, or any other printable characters.\n"), pgpout);
!     hidekey = (GetHashedPassPhrase((char *)ideakey, 2) > 0);
      /* init CFB IDEA key */
  #ifdef MACTC5
      if (Abort)


*** $(SRC)/pgp263i.orig/src/passwd.c	Tue Jan  2 15:14:34 1996
--- passwd.c	Sun Feb  4 15:04:01 1996
***************
*** 76,81 ****
--- 76,82 ----
  		noecho = 0;
  	for (;;) {
  		fprintf(pgpout,LANG("\nEnter pass phrase: "));
+                 fflush(pgpout);
  #ifdef AMIGA
                  requesterdesc=LANG("\nEnter pass phrase: ");
  #endif


*** $(SRC)/pgp263i.orig/src/pgp.c	Thu Jan 18 18:06:45 1996
--- pgp.c	Mon Mar  4 11:25:03 1996
***************
*** 100,105 ****
--- 100,106 ----
     Version 2.6.2 - 11 Oct 94
     Version 2.6.2i - 7 May 95
     Version 2.6.3(i) - 18 Jan 96
+    Version 2.6.3(i)a - 4 Mar 96
  
   */
  
***************
*** 112,131 ****
  #include 
  #include 
  
- /* Hack to get strncasecmp to work */
- #if defined(WIN32)
- #define strncasecmp _strnicmp
- #elif defined(AMIGA) || defined(OS2) || defined(__PUREC__)
- #define strncasecmp strnicmp
- #elif defined(MSDOS)
- #  if defined(__TURBOC__)
- #  define strncasecmp strncmpi
- #  else /* MSC */
- #  define strncasecmp strnicmp
- #  endif
- #endif
- 
  #ifdef UNIX
  #include 
  #endif
  
--- 113,120 ----
  #include 
  #include 
  
  #ifdef UNIX
+ #include 
  #include 
  #endif
  
***************
*** 168,174 ****
  char *Outputfile = NULL;
  void check_expiration_date(void);
  #define BEST -1
- #define strncasecmp strncmpi
  #define exit Exit
  void Exit(int x);
  #endif
--- 157,162 ----
***************
*** 198,204 ****
    * compiler flags.
    */
  #ifdef USA
! static const char __DOSVer[] = "$VER: PGP 2.6.3 (18.01.96)"
  #  ifdef _M68020
          " Amiga 68020 version by Rob Knop ";
  #  else
--- 186,192 ----
    * compiler flags.
    */
  #ifdef USA
! static const char __DOSVer[] = "$VER: PGP 2.6.3a (04.03.96)"
  #  ifdef _M68020
          " Amiga 68020 version by Rob Knop ";
  #  else
***************
*** 205,211 ****
          " Amiga 68000 version by Rob Knop ";
  #  endif
  #else
! static const char __DOSVer[] = "$VER: PGP 2.6.3i (18.01.96)"
  #  ifdef _M68020
          " Amiga 68020 version by Peter Simons ";
  #  else
--- 193,199 ----
          " Amiga 68000 version by Rob Knop ";
  #  endif
  #else
! static const char __DOSVer[] = "$VER: PGP 2.6.3ia (04.03.96)"
  #  ifdef _M68020
          " Amiga 68020 version by Peter Simons ";
  #  else
***************
*** 216,226 ****
  
  /* Global filenames and system-wide file extensions... */
  #ifdef USA
! char rel_version[] = _LANG("2.6.3");	/* release version */
  #else
! char rel_version[] = _LANG("2.6.3i");	/* release version */
  #endif
! char rel_date[] = "1996-01-18";		/* release date */
  char PGP_EXTENSION[] = ".pgp";
  char ASC_EXTENSION[] = ".asc";
  char SIG_EXTENSION[] = ".sig";
--- 204,214 ----
  
  /* Global filenames and system-wide file extensions... */
  #ifdef USA
! char rel_version[] = _LANG("2.6.3a");	/* release version */
  #else
! char rel_version[] = _LANG("2.6.3ia");	/* release version */
  #endif
! char rel_date[] = "1996-03-04";		/* release date */
  char PGP_EXTENSION[] = ".pgp";
  char ASC_EXTENSION[] = ".asc";
  char SIG_EXTENSION[] = ".sig";
***************
*** 260,279 ****
  
     27-Jun-95 simons@peti.rhein.de (Peter Simons)
     Added support for lh5 archive as generated by Lha. Unfortunately,
!    Lha requires special treatment also. I inserted the check right
     _before_ lharc, because lh5/lha is a special type of an lharc
     archive.
   */
  static char *compressSig[] =
! {"PK\03\04", "ZOO ", "GIF8", "\352\140",
   "HPAK", "\037\213", "\037\235", "\032\013", "\032HP%"
  	/* lharc is special, must be last */ };
  static char *compressName[] =
! {"PKZIP", "Zoo", "GIF", "Arj",
   "Hpack", "gzip", "compressed", "PAK", "Hyper",
   "Lha", "Lharc"};
  static char *compressExt[] =
! {".zip", ".zoo", ".gif", ".arj",
   ".hpk", ".gz", ".Z", ".pak", ".hyp",
   ".lha", ".lzh"};
  
--- 248,267 ----
  
     27-Jun-95 simons@peti.rhein.de (Peter Simons)
     Added support for lh5 archive as generated by Lha. Unfortunately,
!    lh5 requires special treatment also. I inserted the check right
     _before_ lharc, because lh5/lha is a special type of an lharc
     archive.
   */
  static char *compressSig[] =
! {"PK\03\04", "ZOO ", "GIF8", "\352\140", "Rar!",
   "HPAK", "\037\213", "\037\235", "\032\013", "\032HP%"
  	/* lharc is special, must be last */ };
  static char *compressName[] =
! {"PKZIP", "Zoo", "GIF", "Arj", "RAR",
   "Hpack", "gzip", "compressed", "PAK", "Hyper",
   "Lha", "Lharc"};
  static char *compressExt[] =
! {".zip", ".zoo", ".gif", ".arj", ".rar",
   ".hpk", ".gz", ".Z", ".pak", ".hyp",
   ".lha", ".lzh"};
  
***************
*** 723,730 ****
       */
      opt = 0;			/* Number of config files read */
  #ifdef PGP_SYSTEM_DIR
!     strcpy(mcguffin, PGP_SYSTEM_DIR);
!     strcat(mcguffin, "config.txt");
      if (access(mcguffin, 0) == 0) {
  	opt++;
  	/*
--- 711,721 ----
       */
      opt = 0;			/* Number of config files read */
  #ifdef PGP_SYSTEM_DIR
! #ifdef UNIX
!     buildsysfilename(mcguffin, ".pgprc");
!     if (access(mcguffin, 0) != 0)
! #endif
!     buildsysfilename(mcguffin, "config.txt");
      if (access(mcguffin, 0) == 0) {
  	opt++;
  	/*
***************
*** 800,806 ****
  	 * NOTE: this does not work with GNU getopt, use getopt.c from
  	 * the PGP distribution.
  	 */
! 	if ((!strncasecmp(argv[optind], INCLUDE_MARK, INCLUDE_MARK_LEN)) ||
             ((opt = pgp_getopt(argc, argv, OPTIONS)) == EOF)) {
  	    if (optind == argc)	/* -- at end */
  		break;
--- 791,797 ----
  	 * NOTE: this does not work with GNU getopt, use getopt.c from
  	 * the PGP distribution.
  	 */
! 	if ((!strncmp(argv[optind], INCLUDE_MARK, INCLUDE_MARK_LEN)) ||
             ((opt = pgp_getopt(argc, argv, OPTIONS)) == EOF)) {
  	    if (optind == argc)	/* -- at end */
  		break;
***************
*** 908,914 ****
  	    /* '+' special option: does not require - */
  	case '+':
  	    if (processConfigLine(optarg) == 0) {
!                 if (!strncasecmp(optarg,"charset",7))
                      init_charset();
  		break;
  	    }
--- 899,905 ----
  	    /* '+' special option: does not require - */
  	case '+':
  	    if (processConfigLine(optarg) == 0) {
!                 if (!strncmp(optarg,"CH",2)) /* CHARSET */
                      init_charset();
  		break;
  	    }
***************
*** 2866,2872 ****
  
   	/* Check whether we need to do something or not. */
   	while(*recipients) {
!  		if (!strncasecmp(*recipients, INCLUDE_MARK, INCLUDE_MARK_LEN))
   		    break;
   		recipients++;
   	}
--- 2857,2863 ----
  
   	/* Check whether we need to do something or not. */
   	while(*recipients) {
!  		if (!strncmp(*recipients, INCLUDE_MARK, INCLUDE_MARK_LEN))
   		    break;
   		recipients++;
   	}
***************
*** 2879,2885 ****
   	entrynum = 0;
  
   	while(*recipients) {
!  		if (strncasecmp(*recipients, INCLUDE_MARK, INCLUDE_MARK_LEN))
                  {
   			new[entrynum++] = *recipients++;
   			if (entrynum == MAX_RECIPIENTS) {
--- 2870,2876 ----
   	entrynum = 0;
  
   	while(*recipients) {
!  		if (strncmp(*recipients, INCLUDE_MARK, INCLUDE_MARK_LEN))
                  {
   			new[entrynum++] = *recipients++;
   			if (entrynum == MAX_RECIPIENTS) {
***************
*** 2919,2925 ****
   				tempbuf[i] = '\0';
  
   				/* Copy new entry to new */
!  				if (!(new[entrynum++] = strdup(tempbuf)))
   				  exitPGP(OUT_OF_MEM);
   				if (entrynum == MAX_RECIPIENTS) {
   					/* Current buffer is too small.
--- 2910,2916 ----
   				tempbuf[i] = '\0';
  
   				/* Copy new entry to new */
!  				if (!(new[entrynum++] = store_str(tempbuf)))
   				  exitPGP(OUT_OF_MEM);
   				if (entrynum == MAX_RECIPIENTS) {
   					/* Current buffer is too small.


*** $(SRC)/pgp263i.orig/src/zdeflate.c	Wed Sep 27 20:17:40 1995
--- zdeflate.c	Sat Feb 17 14:48:47 1996
***************
*** 467,473 ****
              start, match, length);
          error("invalid match");
      }
!     if (verbose > 1) {
          fprintf(stderr,"\\[%d,%d]", start-match, length);
          /* putc a macro, not safe to modify args!! */
          do { putc(slide[start], stderr); start++; } while (--length!=0);
--- 467,473 ----
              start, match, length);
          error("invalid match");
      }
!     if (verbose) {
          fprintf(stderr,"\\[%d,%d]", start-match, length);
          /* putc a macro, not safe to modify args!! */
          do { putc(slide[start], stderr); start++; } while (--length!=0);


*** $(SRC)/pgp263i.orig/src/zip.h	Wed Sep 27 20:18:52 1995
--- zip.h	Sat Feb 17 15:05:31 1996
***************
*** 83,89 ****
  
  /* Diagnostic functions */
  #ifdef DEBUG
!   extern char verbose;	/* PGP -l flag */
  # ifdef MSDOS
  #  undef  stderr
  #  define stderr stdout
--- 83,89 ----
  
  /* Diagnostic functions */
  #ifdef DEBUG
!   extern unsigned char verbose;	/* PGP -l flag */
  # ifdef MSDOS
  #  undef  stderr
  #  define stderr stdout
***************
*** 92,100 ****
  #  define Assert(cond,msg) {if(!(cond)) error(msg);}
  #  define Trace(x) fprintf x
  #  define Tracev(x) {if (verbose) fprintf x ;}
! #  define Tracevv(x) {if (verbose>1) fprintf x ;}
  #  define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
! #  define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
  #else
  #  define diag(where)
  #  define Assert(cond,msg)
--- 92,100 ----
  #  define Assert(cond,msg) {if(!(cond)) error(msg);}
  #  define Trace(x) fprintf x
  #  define Tracev(x) {if (verbose) fprintf x ;}
! #  define Tracevv(x) {if (verbose) fprintf x ;}
  #  define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
! #  define Tracecv(c,x) {if (verbose && (c)) fprintf x ;}
  #else
  #  define diag(where)
  #  define Assert(cond,msg)


*** $(SRC)/pgp263i.orig/src/ztrees.c	Mon Jun 26 20:43:46 1995
--- ztrees.c	Sat Feb 17 14:49:00 1996
***************
*** 312,318 ****
  
  #else /* DEBUG */
  #  define send_code(c, tree) \
!      { if (verbose>1) fprintf(stderr,"\ncd %3d ",(c)); \
         send_bits(tree[c].Code, tree[c].Len); }
  #endif
  
--- 312,318 ----
  
  #else /* DEBUG */
  #  define send_code(c, tree) \
!      { if (verbose) fprintf(stderr,"\ncd %3d ",(c)); \
         send_bits(tree[c].Code, tree[c].Len); }
  #endif


Última atualização em 10/06/1997 07:50:06 -03 por Henrique Holschuh, <henriqmh@dca.fee.Unicamp.br>