[23] in Hesiod

home help back first fref pref prev next nref lref last post

More problems with TXT records in hesiod named

daemon@ATHENA.MIT.EDU (steve@UMIACS.UMD.EDU)
Sat Feb 17 13:48:06 1990

To: hesiod@ATHENA.MIT.EDU
Cc: jb@CS.BROWN.EDU, bbrown@DECVAX.DEC.COM, steve@UMIACS.UMD.EDU
Date: Sat, 17 Feb 90 13:24:05 EST
From: steve@UMIACS.UMD.EDU
   Right now, the Hesiod named reads TXT record data in and breaks it into
255-byte chunks (aka multiple <character-string>s) as needed.  That's fine,
but named-xfer can't deal with such records.  Here's the fix I used.  Your
line numbers and mileage may vary.

   I suspect that the 'real' syntax for specifying multiple <character-string>s
within a single TXT record is somewhat different from what's being used.  I
doubt that's any real surprise to anyone, given that the RFCs seem to be
a bit unclear in this area.  Oh well.

	-Steve

Spoken: Steve Miller    Domain: steve@umiacs.umd.edu    UUCP: uunet!mimsy!steve
Phone: +1-301-454-1808  USPS: UMIACS, Univ. of Maryland, College Park, MD 20742

P.S.:  I'm not sure that I'm on the hesiod@athena.mit.edu list.  Could someone
add me?  Thanks.

*** /tmp/,RCSt1a15281	Sat Feb 17 13:04:35 1990
--- xfer.c	Sat Feb 17 13:03:45 1990
***************
*** 50,56 ****
  char	*savestr();
  
  /* max length of data in RR data field */
! #define MAXDATA		256	/* from db.h */
   
  int	debug = 0; 
  int	quiet = 0;
--- 50,56 ----
  char	*savestr();
  
  /* max length of data in RR data field */
! #define MAXDATA		2048	/* from db_load.c XXX */
   
  int	debug = 0; 
  int	quiet = 0;
***************
*** 1109,1127 ****
  		(void) fprintf(dbfp, "\"%s\"\n", cp);
  		break;
  
! 	case T_TXT:
! 		(void) putc('"', dbfp);
! 		while (cp < (u_char *) cdata + n) {
! 		    if (n = (unsigned char) *cp++) {
! 			for (i = n; i > 0; i--)
! 			  if (*cp == '\n') {
! 			      (void) putc('\\', dbfp);
! 			      (void) putc(*cp++, dbfp);
! 			  } else
! 			    (void) putc(*cp++, dbfp);
! 		    }
  		}
- 		(void) fputs("\"\n", dbfp);
  		break;
  
  	case T_UID:
--- 1109,1130 ----
  		(void) fprintf(dbfp, "\"%s\"\n", cp);
  		break;
  
! 	case T_TXT: {
! 			int strcnt;
! 
! 			(void) putc('"', dbfp);
! 			while (cp < (u_char *) cdata + n) {
! 			    if (strcnt = (unsigned char) *cp++) {
! 				for (i = strcnt; i > 0; i--)
! 				  if (*cp == '\n') {
! 				      (void) putc('\\', dbfp);
! 				      (void) putc(*cp++, dbfp);
! 				  } else
! 				    (void) putc(*cp++, dbfp);
! 			    }
! 			}
! 			(void) fputs("\"\n", dbfp);
  		}
  		break;
  
  	case T_UID:


home help back first fref pref prev next nref lref last post