From 744716780c18d6f02284094a7de0950a10ca831a Mon Sep 17 00:00:00 2001 From: Chaskiel Grundman Date: Tue, 12 Jun 2012 16:45:44 -0400 Subject: 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. --- lib/Zinternal.c | 122 +------------------------------------------------------- 1 file changed, 1 insertion(+), 121 deletions(-) (limited to 'lib') 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 *)¬ice->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 *)¬ice->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 *)¬ice->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 *)¬ice->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;iz_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 -- cgit v1.2.3