Changeset 595116
- Timestamp:
- 09/20/09 17:41:24 (3 years ago)
- Branches:
- master
- Children:
- 8f2c21
- Parents:
- d4d88d
- git-author:
- Erik Ekman <yarrick@…> (09/20/09 17:41:24)
- git-committer:
- Erik Ekman <erik@…> (02/04/12 20:34:04)
- Files:
-
- 2 edited
-
src/dns.c (modified) (2 diffs)
-
tests/dns.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/dns.c
r90e25e r595116 91 91 putlong(&p, 0); /* TTL */ 92 92 93 if (q->type == T_CNAME || q->type == T_A || q->type == T_MX) 94 { 95 /* data is expected to be like "Hblabla.host.name.com\0" */ 96 97 char *startp = p; 98 int namelen; 99 100 p += 2; /* skip 2 bytes length */ 101 CHECKLEN(2); 102 if (q->type == T_MX) 103 putshort(&p, 10); /* preference */ 104 putname(&p, buflen - (p - buf), data); 105 CHECKLEN(0); 106 namelen = p - startp; 107 namelen -= 2; 108 putshort(&startp, namelen); 109 } 110 else if (q->type == T_TXT) 111 { 112 /* TXT has binary or base-X data */ 113 char *startp = p; 114 int txtlen; 115 116 p += 2; /* skip 2 bytes length */ 117 puttxtbin(&p, buflen - (p - buf), data, datalen); 118 CHECKLEN(0); 119 txtlen = p - startp; 120 txtlen -= 2; 121 putshort(&startp, txtlen); 122 } 123 else 124 { 125 /* NULL has raw binary data */ 126 datalen = MIN(datalen, buflen - (p - buf)); 127 CHECKLEN(2); 128 putshort(&p, datalen); 129 CHECKLEN(datalen); 130 putdata(&p, data, datalen); 131 CHECKLEN(0); 132 } 133 93 if (q->type == T_CNAME || q->type == T_A || q->type == T_MX) { 94 /* data is expected to be like "Hblabla.host.name.com\0" */ 95 96 char *startp = p; 97 int namelen; 98 99 p += 2; /* skip 2 bytes length */ 100 CHECKLEN(2); 101 if (q->type == T_MX) 102 putshort(&p, 10); /* preference */ 103 putname(&p, buflen - (p - buf), data); 104 CHECKLEN(0); 105 namelen = p - startp; 106 namelen -= 2; 107 putshort(&startp, namelen); 108 } else if (q->type == T_TXT) { 109 /* TXT has binary or base-X data */ 110 char *startp = p; 111 int txtlen; 112 113 p += 2; /* skip 2 bytes length */ 114 puttxtbin(&p, buflen - (p - buf), data, datalen); 115 CHECKLEN(0); 116 txtlen = p - startp; 117 txtlen -= 2; 118 putshort(&startp, txtlen); 119 } else { 120 /* NULL has raw binary data */ 121 datalen = MIN(datalen, buflen - (p - buf)); 122 CHECKLEN(2); 123 putshort(&p, datalen); 124 CHECKLEN(datalen); 125 putdata(&p, data, datalen); 126 CHECKLEN(0); 127 } 134 128 break; 135 129 case QR_QUERY: … … 139 133 header->arcount = htons(1); 140 134 141 putname(&p, buflen - (p - buf), data); 135 datalen = MIN(datalen, buflen - (p - buf)); 136 putname(&p, datalen, data); 142 137 143 138 CHECKLEN(4); -
tests/dns.c
rb6fc3f r595116 70 70 size_t len; 71 71 int ret; 72 73 len = sizeof(buf); 72 int enclen; 73 74 enclen = sizeof(resolv); 74 75 memset(&buf, 0, sizeof(buf)); 75 76 memset(&resolv, 0, sizeof(resolv)); … … 81 82 82 83 *d++ = 'A'; 83 enc->encode(d, & len, innerData, strlen(innerData));84 enc->encode(d, &enclen, innerData, strlen(innerData)); 84 85 d = resolv + strlen(resolv); 85 86 if (*d != '.') { … … 87 88 } 88 89 strcpy(d, topdomain); 90 len = sizeof(buf); 89 91 ret = dns_encode(buf, len, &q, QR_QUERY, resolv, strlen(resolv)); 90 92 len = sizeof(query_packet) - 1; /* Skip extra null character */
Note: See TracChangeset
for help on using the changeset viewer.
