Loading lib/ftp.c +9 −5 Original line number Diff line number Diff line Loading @@ -711,6 +711,7 @@ CURLcode _ftp(struct connectdata *conn) int sslen; char hbuf[NI_MAXHOST]; char *localaddr; struct sockaddr *sa=(struct sockaddr *)&ss; #ifdef NI_WITHSCOPEID const int niflags = NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID; #else Loading @@ -737,7 +738,10 @@ CURLcode _ftp(struct connectdata *conn) return CURLE_FTP_PORT_FAILED; memset(&hints, 0, sizeof(hints)); hints.ai_family = ss.ss_family; hints.ai_family = sa->sa_family; /*hints.ai_family = ss.ss_family; this way can be used if sockaddr_storage is properly defined, as glibc 2.1.X doesn't do*/ hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE; if (getaddrinfo(hbuf, "0", &hints, &res)) Loading Loading @@ -770,7 +774,7 @@ CURLcode _ftp(struct connectdata *conn) } sslen = sizeof(ss); if (getsockname(portsock, (struct sockaddr *)&ss, &sslen) < 0) { if (getsockname(portsock, sa, &sslen) < 0) { failf(data, strerror(errno)); freeaddrinfo(res); return CURLE_FTP_PORT_FAILED; Loading @@ -779,7 +783,7 @@ CURLcode _ftp(struct connectdata *conn) for (modep = mode; modep && *modep; modep++) { int lprtaf, eprtaf; switch (ss.ss_family) { switch (sa->sa_family) { case AF_INET: ap = (char *)&((struct sockaddr_in *)&ss)->sin_addr; alen = sizeof(((struct sockaddr_in *)&ss)->sin_addr); Loading Loading @@ -809,7 +813,7 @@ CURLcode _ftp(struct connectdata *conn) portmsgbuf, sizeof(portmsgbuf), tmp, sizeof(tmp), niflags)) continue; /* do not transmit IPv6 scope identifier to the wire */ if (ss.ss_family == AF_INET6) { if (sa->sa_family == AF_INET6) { char *q = strchr(portmsgbuf, '%'); if (q) *q = '\0'; Loading @@ -821,7 +825,7 @@ CURLcode _ftp(struct connectdata *conn) if (strcmp(*modep, "LPRT") == 0 && lprtaf < 0) continue; if (strcmp(*modep, "PORT") == 0 && ss.ss_family != AF_INET) if (strcmp(*modep, "PORT") == 0 && sa->sa_family != AF_INET) continue; portmsgbuf[0] = '\0'; Loading lib/strequal.c +26 −0 Original line number Diff line number Diff line Loading @@ -66,3 +66,29 @@ int Curl_strnequal(const char *first, const char *second, size_t max) #endif } #ifndef HAVE_STRLCAT /* * The strlcat() function appends the NUL-terminated string src to the end * of dst. It will append at most size - strlen(dst) - 1 bytes, NUL-termi- * nating the result. * * The strlcpy() and strlcat() functions return the total length of the * string they tried to create. For strlcpy() that means the length of src. * For strlcat() that means the initial length of dst plus the length of * src. While this may seem somewhat confusing it was done to make trunca- * tion detection simple. */ size_t strlcat(char *dst, const char *src, size_t size) { size_t len = strlen(dst); size_t orglen = len; int index=0; while(src[index] && (len < (size-1)) ) { dst[len++] = src[index++]; } dst[len]=0; return orglen + strlen(src); } #endif Loading
lib/ftp.c +9 −5 Original line number Diff line number Diff line Loading @@ -711,6 +711,7 @@ CURLcode _ftp(struct connectdata *conn) int sslen; char hbuf[NI_MAXHOST]; char *localaddr; struct sockaddr *sa=(struct sockaddr *)&ss; #ifdef NI_WITHSCOPEID const int niflags = NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID; #else Loading @@ -737,7 +738,10 @@ CURLcode _ftp(struct connectdata *conn) return CURLE_FTP_PORT_FAILED; memset(&hints, 0, sizeof(hints)); hints.ai_family = ss.ss_family; hints.ai_family = sa->sa_family; /*hints.ai_family = ss.ss_family; this way can be used if sockaddr_storage is properly defined, as glibc 2.1.X doesn't do*/ hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE; if (getaddrinfo(hbuf, "0", &hints, &res)) Loading Loading @@ -770,7 +774,7 @@ CURLcode _ftp(struct connectdata *conn) } sslen = sizeof(ss); if (getsockname(portsock, (struct sockaddr *)&ss, &sslen) < 0) { if (getsockname(portsock, sa, &sslen) < 0) { failf(data, strerror(errno)); freeaddrinfo(res); return CURLE_FTP_PORT_FAILED; Loading @@ -779,7 +783,7 @@ CURLcode _ftp(struct connectdata *conn) for (modep = mode; modep && *modep; modep++) { int lprtaf, eprtaf; switch (ss.ss_family) { switch (sa->sa_family) { case AF_INET: ap = (char *)&((struct sockaddr_in *)&ss)->sin_addr; alen = sizeof(((struct sockaddr_in *)&ss)->sin_addr); Loading Loading @@ -809,7 +813,7 @@ CURLcode _ftp(struct connectdata *conn) portmsgbuf, sizeof(portmsgbuf), tmp, sizeof(tmp), niflags)) continue; /* do not transmit IPv6 scope identifier to the wire */ if (ss.ss_family == AF_INET6) { if (sa->sa_family == AF_INET6) { char *q = strchr(portmsgbuf, '%'); if (q) *q = '\0'; Loading @@ -821,7 +825,7 @@ CURLcode _ftp(struct connectdata *conn) if (strcmp(*modep, "LPRT") == 0 && lprtaf < 0) continue; if (strcmp(*modep, "PORT") == 0 && ss.ss_family != AF_INET) if (strcmp(*modep, "PORT") == 0 && sa->sa_family != AF_INET) continue; portmsgbuf[0] = '\0'; Loading
lib/strequal.c +26 −0 Original line number Diff line number Diff line Loading @@ -66,3 +66,29 @@ int Curl_strnequal(const char *first, const char *second, size_t max) #endif } #ifndef HAVE_STRLCAT /* * The strlcat() function appends the NUL-terminated string src to the end * of dst. It will append at most size - strlen(dst) - 1 bytes, NUL-termi- * nating the result. * * The strlcpy() and strlcat() functions return the total length of the * string they tried to create. For strlcpy() that means the length of src. * For strlcat() that means the initial length of dst plus the length of * src. While this may seem somewhat confusing it was done to make trunca- * tion detection simple. */ size_t strlcat(char *dst, const char *src, size_t size) { size_t len = strlen(dst); size_t orglen = len; int index=0; while(src[index] && (len < (size-1)) ) { dst[len++] = src[index++]; } dst[len]=0; return orglen + strlen(src); } #endif