summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGravatar Chaskiel Grundman <cg2v@andrew.cmu.edu>2012-06-12 16:45:44 -0400
committerGravatar Karl Ramm <kcr@1ts.org>2012-07-16 10:33:33 -0400
commit744716780c18d6f02284094a7de0950a10ca831a (patch)
tree76db7c0f6fbc7bb82f31df54582acb3840db3433 /lib
parent40d764fab55e93004afae70efa03294890b4f564 (diff)
Mostly factor out Z_FormatRawHeader
Have Z_FormatRawHeader call Z_ZcodeFormatRawHeader to reduce duplication and error. Z_FormatRawHeader was previously adding headers 17 and 18 unconditionally, which was not proper for a server forwarding an unauth message.
Diffstat (limited to 'lib')
-rw-r--r--lib/Zinternal.c122
1 files changed, 1 insertions, 121 deletions
diff --git a/lib/Zinternal.c b/lib/Zinternal.c
index 00502a8..9ad6bda 100644
--- a/lib/Zinternal.c
+++ b/lib/Zinternal.c
@@ -976,132 +976,12 @@ Z_FormatRawHeader(ZNotice_t *notice,
char **cstart,
char **cend)
{
- char newrecip[BUFSIZ];
- char *ptr, *end;
- int i;
- int addrlen = 0;
- unsigned char *addraddr = NULL;
if (!(notice->z_sender_sockaddr.sa.sa_family == AF_INET ||
notice->z_sender_sockaddr.sa.sa_family == AF_INET6))
notice->z_sender_sockaddr.sa.sa_family = AF_INET; /* \/\/hatever *//*XXX*/
- if (!notice->z_class)
- notice->z_class = "";
-
- if (!notice->z_class_inst)
- notice->z_class_inst = "";
-
- if (!notice->z_opcode)
- notice->z_opcode = "";
-
- if (!notice->z_recipient)
- notice->z_recipient = "";
-
- if (!notice->z_default_format)
- notice->z_default_format = "";
-
- ptr = buffer;
- end = buffer+buffer_len;
-
- if (buffer_len < strlen(notice->z_version)+1)
- return (ZERR_HEADERLEN);
-
- (void) strcpy(ptr, notice->z_version);
- ptr += strlen(ptr)+1;
-
- if (ZMakeAscii32(ptr, end-ptr, Z_NUMFIELDS + notice->z_num_other_fields)
- == ZERR_FIELDLEN)
- return (ZERR_HEADERLEN);
- ptr += strlen(ptr)+1;
-
- if (ZMakeAscii32(ptr, end-ptr, notice->z_kind) == ZERR_FIELDLEN)
- return (ZERR_HEADERLEN);
- ptr += strlen(ptr)+1;
-
- if (ZMakeAscii(ptr, end-ptr, (unsigned char *)&notice->z_uid,
- sizeof(ZUnique_Id_t)) == ZERR_FIELDLEN)
- return (ZERR_HEADERLEN);
- ptr += strlen(ptr)+1;
-
- if (ZMakeAscii16(ptr, end-ptr, ntohs(notice->z_port)) == ZERR_FIELDLEN)
- return (ZERR_HEADERLEN);
- ptr += strlen(ptr)+1;
-
- if (ZMakeAscii32(ptr, end-ptr, notice->z_auth) == ZERR_FIELDLEN)
- return (ZERR_HEADERLEN);
- ptr += strlen(ptr)+1;
-
- if (ZMakeAscii32(ptr, end-ptr, notice->z_authent_len) == ZERR_FIELDLEN)
- return (ZERR_HEADERLEN);
- ptr += strlen(ptr)+1;
-
- if (Z_AddField(&ptr, notice->z_ascii_authent, end))
- return (ZERR_HEADERLEN);
- if (Z_AddField(&ptr, notice->z_class, end))
- return (ZERR_HEADERLEN);
- if (Z_AddField(&ptr, notice->z_class_inst, end))
- return (ZERR_HEADERLEN);
- if (Z_AddField(&ptr, notice->z_opcode, end))
- return (ZERR_HEADERLEN);
- if (Z_AddField(&ptr, notice->z_sender, end))
- return (ZERR_HEADERLEN);
- if (strchr(notice->z_recipient, '@') || !*notice->z_recipient) {
- if (Z_AddField(&ptr, notice->z_recipient, end))
- return (ZERR_HEADERLEN);
- }
- else {
- if (strlen(notice->z_recipient) + strlen(__Zephyr_realm) + 2 >
- sizeof(newrecip))
- return (ZERR_HEADERLEN);
- (void) sprintf(newrecip, "%s@%s", notice->z_recipient, __Zephyr_realm);
- if (Z_AddField(&ptr, newrecip, end))
- return (ZERR_HEADERLEN);
- }
- if (Z_AddField(&ptr, notice->z_default_format, end))
- return (ZERR_HEADERLEN);
-
- /* copy back the end pointer location for crypto checksum */
- if (cstart)
- *cstart = ptr;
- if (ZMakeAscii32(ptr, end-ptr, notice->z_checksum) == ZERR_FIELDLEN)
- return (ZERR_HEADERLEN);
- ptr += strlen(ptr)+1;
- if (cend)
- *cend = ptr;
-
- if (Z_AddField(&ptr, notice->z_multinotice, end))
- return (ZERR_HEADERLEN);
-
- if (ZMakeAscii(ptr, end-ptr, (unsigned char *)&notice->z_multiuid,
- sizeof(ZUnique_Id_t)) == ZERR_FIELDLEN)
- return (ZERR_HEADERLEN);
- ptr += strlen(ptr)+1;
-
- if (notice->z_sender_sockaddr.sa.sa_family == AF_INET) {
- addrlen = sizeof(notice->z_sender_sockaddr.ip4.sin_addr);
- addraddr = (unsigned char *)&notice->z_sender_sockaddr.ip4.sin_addr;
- if (ZMakeAscii(ptr, end - ptr, addraddr, addrlen) == ZERR_FIELDLEN)
- return ZERR_HEADERLEN;
- } else if (notice->z_sender_sockaddr.sa.sa_family == AF_INET6) {
- addrlen = sizeof(notice->z_sender_sockaddr.ip6.sin6_addr);
- addraddr = (unsigned char *)&notice->z_sender_sockaddr.ip6.sin6_addr;
- if (ZMakeZcode(ptr, end - ptr, addraddr, addrlen) == ZERR_FIELDLEN)
- return ZERR_HEADERLEN;
- }
- ptr += strlen(ptr) + 1;
-
- if (ZMakeAscii16(ptr, end-ptr, ntohs(notice->z_charset)) == ZERR_FIELDLEN)
- return ZERR_HEADERLEN;
- ptr += strlen(ptr) + 1;
-
- for (i=0;i<notice->z_num_other_fields;i++)
- if (Z_AddField(&ptr, notice->z_other_fields[i], end))
- return (ZERR_HEADERLEN);
-
- *len = ptr-buffer;
-
- return (ZERR_NONE);
+ return Z_NewFormatRawHeader(notice, buffer, buffer_len, len, NULL, NULL, cstart, cend);
}
static int