[23] in Hesiod
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: