Print this page
6771 end-of-loop code not reached in common/dnssd_clientstub.c

*** 592,602 **** *ref = sdr; return kDNSServiceErr_NoError; } #define deliver_request_bailout(MSG) \ ! do { syslog(LOG_WARNING, "dnssd_clientstub deliver_request: %s failed %d (%s)", (MSG), dnssd_errno, dnssd_strerror(dnssd_errno)); goto cleanup; } while(0) static DNSServiceErrorType deliver_request(ipc_msg_hdr *hdr, DNSServiceOp *sdr) { uint32_t datalen = hdr->datalen; // We take a copy here because we're going to convert hdr->datalen to network byte order #if defined(USE_TCP_LOOPBACK) || defined(USE_NAMED_ERROR_RETURN_SOCKET) --- 592,602 ---- *ref = sdr; return kDNSServiceErr_NoError; } #define deliver_request_bailout(MSG) \ ! syslog(LOG_WARNING, "dnssd_clientstub deliver_request: %s failed %d (%s)", (MSG), dnssd_errno, dnssd_strerror(dnssd_errno)); goto cleanup static DNSServiceErrorType deliver_request(ipc_msg_hdr *hdr, DNSServiceOp *sdr) { uint32_t datalen = hdr->datalen; // We take a copy here because we're going to convert hdr->datalen to network byte order #if defined(USE_TCP_LOOPBACK) || defined(USE_NAMED_ERROR_RETURN_SOCKET)
*** 634,651 **** { union { uint16_t s; u_char b[2]; } port; dnssd_sockaddr_t caddr; dnssd_socklen_t len = (dnssd_socklen_t) sizeof(caddr); listenfd = socket(AF_DNSSD, SOCK_STREAM, 0); ! if (!dnssd_SocketValid(listenfd)) deliver_request_bailout("TCP socket"); caddr.sin_family = AF_INET; caddr.sin_port = 0; caddr.sin_addr.s_addr = inet_addr(MDNS_TCP_SERVERADDR); ! if (bind(listenfd, (struct sockaddr*) &caddr, sizeof(caddr)) < 0) deliver_request_bailout("TCP bind"); ! if (getsockname(listenfd, (struct sockaddr*) &caddr, &len) < 0) deliver_request_bailout("TCP getsockname"); ! if (listen(listenfd, 1) < 0) deliver_request_bailout("TCP listen"); port.s = caddr.sin_port; data[0] = port.b[0]; // don't switch the byte order, as the data[1] = port.b[1]; // daemon expects it in network byte order } #elif defined(USE_NAMED_ERROR_RETURN_SOCKET) --- 634,659 ---- { union { uint16_t s; u_char b[2]; } port; dnssd_sockaddr_t caddr; dnssd_socklen_t len = (dnssd_socklen_t) sizeof(caddr); listenfd = socket(AF_DNSSD, SOCK_STREAM, 0); ! if (!dnssd_SocketValid(listenfd)) { ! deliver_request_bailout("TCP socket"); ! } caddr.sin_family = AF_INET; caddr.sin_port = 0; caddr.sin_addr.s_addr = inet_addr(MDNS_TCP_SERVERADDR); ! if (bind(listenfd, (struct sockaddr*) &caddr, sizeof(caddr)) < 0) { ! deliver_request_bailout("TCP bind"); ! } ! if (getsockname(listenfd, (struct sockaddr*) &caddr, &len) < 0) { ! deliver_request_bailout("TCP getsockname"); ! } ! if (listen(listenfd, 1) < 0) { ! deliver_request_bailout("TCP listen"); ! } port.s = caddr.sin_port; data[0] = port.b[0]; // don't switch the byte order, as the data[1] = port.b[1]; // daemon expects it in network byte order } #elif defined(USE_NAMED_ERROR_RETURN_SOCKET)
*** 652,662 **** { mode_t mask; int bindresult; dnssd_sockaddr_t caddr; listenfd = socket(AF_DNSSD, SOCK_STREAM, 0); ! if (!dnssd_SocketValid(listenfd)) deliver_request_bailout("USE_NAMED_ERROR_RETURN_SOCKET socket"); caddr.sun_family = AF_LOCAL; // According to Stevens (section 3.2), there is no portable way to // determine whether sa_len is defined on a particular platform. #ifndef NOT_HAVE_SA_LEN --- 660,672 ---- { mode_t mask; int bindresult; dnssd_sockaddr_t caddr; listenfd = socket(AF_DNSSD, SOCK_STREAM, 0); ! if (!dnssd_SocketValid(listenfd)) { ! deliver_request_bailout("USE_NAMED_ERROR_RETURN_SOCKET socket"); ! } caddr.sun_family = AF_LOCAL; // According to Stevens (section 3.2), there is no portable way to // determine whether sa_len is defined on a particular platform. #ifndef NOT_HAVE_SA_LEN
*** 664,680 **** #endif strcpy(caddr.sun_path, data); mask = umask(0); bindresult = bind(listenfd, (struct sockaddr *)&caddr, sizeof(caddr)); umask(mask); ! if (bindresult < 0) deliver_request_bailout("USE_NAMED_ERROR_RETURN_SOCKET bind"); ! if (listen(listenfd, 1) < 0) deliver_request_bailout("USE_NAMED_ERROR_RETURN_SOCKET listen"); } #else { dnssd_sock_t sp[2]; ! if (socketpair(AF_DNSSD, SOCK_STREAM, 0, sp) < 0) deliver_request_bailout("socketpair"); else { errsd = sp[0]; // We'll read our four-byte error code from sp[0] listenfd = sp[1]; // We'll send sp[1] to the daemon #if !defined(__ppc__) && defined(SO_DEFUNCTOK) --- 674,696 ---- #endif strcpy(caddr.sun_path, data); mask = umask(0); bindresult = bind(listenfd, (struct sockaddr *)&caddr, sizeof(caddr)); umask(mask); ! if (bindresult < 0) { ! deliver_request_bailout("USE_NAMED_ERROR_RETURN_SOCKET bind"); } + if (listen(listenfd, 1) < 0) { + deliver_request_bailout("USE_NAMED_ERROR_RETURN_SOCKET listen"); + } + } #else { dnssd_sock_t sp[2]; ! if (socketpair(AF_DNSSD, SOCK_STREAM, 0, sp) < 0) { ! deliver_request_bailout("socketpair"); ! } else { errsd = sp[0]; // We'll read our four-byte error code from sp[0] listenfd = sp[1]; // We'll send sp[1] to the daemon #if !defined(__ppc__) && defined(SO_DEFUNCTOK)
*** 736,747 **** dnssd_sockaddr_t daddr; dnssd_socklen_t len = sizeof(daddr); if ((err = set_waitlimit(listenfd, DNSSD_CLIENT_TIMEOUT)) != kDNSServiceErr_NoError) goto cleanup; errsd = accept(listenfd, (struct sockaddr *)&daddr, &len); ! if (!dnssd_SocketValid(errsd)) deliver_request_bailout("accept"); #else struct iovec vec = { ((char *)hdr) + sizeof(ipc_msg_hdr) + datalen, 1 }; // Send the last byte along with the SCM_RIGHTS struct msghdr msg; struct cmsghdr *cmsg; --- 752,764 ---- dnssd_sockaddr_t daddr; dnssd_socklen_t len = sizeof(daddr); if ((err = set_waitlimit(listenfd, DNSSD_CLIENT_TIMEOUT)) != kDNSServiceErr_NoError) goto cleanup; errsd = accept(listenfd, (struct sockaddr *)&daddr, &len); ! if (!dnssd_SocketValid(errsd)) { deliver_request_bailout("accept"); + } #else struct iovec vec = { ((char *)hdr) + sizeof(ipc_msg_hdr) + datalen, 1 }; // Send the last byte along with the SCM_RIGHTS struct msghdr msg; struct cmsghdr *cmsg;