Changeset 745 for trunk/server/lib/tsocket/tsocket_bsd.c
- Timestamp:
- Nov 27, 2012, 4:43:17 PM (13 years ago)
- Location:
- trunk/server
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/server
- Property svn:mergeinfo changed
/vendor/current merged: 581,587,591,594,597,600,615,618,740
- Property svn:mergeinfo changed
-
trunk/server/lib/tsocket/tsocket_bsd.c
r480 r745 264 264 265 265 bsda->sa_socklen = sa_socklen; 266 #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN 267 bsda->u.sa.sa_len = bsda->sa_socklen; 268 #endif 266 269 267 270 *_addr = addr; … … 292 295 293 296 memcpy(sa, &bsda->u.ss, sa_socklen); 297 #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN 298 sa->sa_len = sa_socklen; 299 #endif 294 300 return sa_socklen; 301 } 302 303 bool tsocket_address_is_inet(const struct tsocket_address *addr, const char *fam) 304 { 305 struct tsocket_address_bsd *bsda = talloc_get_type(addr->private_data, 306 struct tsocket_address_bsd); 307 308 if (!bsda) { 309 return false; 310 } 311 312 switch (bsda->u.sa.sa_family) { 313 case AF_INET: 314 if (strcasecmp(fam, "ip") == 0) { 315 return true; 316 } 317 318 if (strcasecmp(fam, "ipv4") == 0) { 319 return true; 320 } 321 322 return false; 323 #ifdef HAVE_IPV6 324 case AF_INET6: 325 if (strcasecmp(fam, "ip") == 0) { 326 return true; 327 } 328 329 if (strcasecmp(fam, "ipv6") == 0) { 330 return true; 331 } 332 333 return false; 334 #endif 335 } 336 337 return false; 295 338 } 296 339 … … 465 508 466 509 return 0; 510 } 511 512 bool tsocket_address_is_unix(const struct tsocket_address *addr) 513 { 514 struct tsocket_address_bsd *bsda = talloc_get_type(addr->private_data, 515 struct tsocket_address_bsd); 516 517 if (!bsda) { 518 return false; 519 } 520 521 switch (bsda->u.sa.sa_family) { 522 case AF_UNIX: 523 return true; 524 } 525 526 return false; 467 527 } 468 528 … … 847 907 ZERO_STRUCTP(bsda); 848 908 bsda->sa_socklen = sizeof(bsda->u.ss); 909 #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN 910 bsda->u.sa.sa_len = bsda->sa_socklen; 911 #endif 849 912 850 913 ret = recvfrom(bsds->fd, state->buf, state->len, 0, … … 1054 1117 } 1055 1118 1119 TALLOC_FREE(bsds->fde); 1056 1120 ret = close(bsds->fd); 1057 1121 bsds->fd = -1; … … 1184 1248 fd = socket(sa_fam, SOCK_DGRAM, 0); 1185 1249 if (fd < 0) { 1186 return fd;1250 return -1; 1187 1251 } 1188 1252 1189 1253 fd = tsocket_bsd_common_prepare_fd(fd, true); 1190 1254 if (fd < 0) { 1191 return fd;1255 return -1; 1192 1256 } 1193 1257 … … 1217 1281 talloc_free(dgram); 1218 1282 errno = saved_errno; 1219 return ret;1283 return -1; 1220 1284 } 1221 1285 } … … 1231 1295 talloc_free(dgram); 1232 1296 errno = saved_errno; 1233 return ret;1297 return -1; 1234 1298 } 1235 1299 } … … 1244 1308 talloc_free(dgram); 1245 1309 errno = saved_errno; 1246 return ret;1310 return -1; 1247 1311 } 1248 1312 } … … 1254 1318 talloc_free(dgram); 1255 1319 errno = saved_errno; 1256 return ret;1320 return -1; 1257 1321 } 1258 1322 } … … 1270 1334 talloc_free(dgram); 1271 1335 errno = saved_errno; 1272 return ret;1336 return -1; 1273 1337 } 1274 1338 } … … 1610 1674 base = (uint8_t *)state->vector[0].iov_base; 1611 1675 base += ret; 1612 state->vector[0].iov_base = base;1676 state->vector[0].iov_base = (void *)base; 1613 1677 state->vector[0].iov_len -= ret; 1614 1678 break; … … 1770 1834 base = (uint8_t *)state->vector[0].iov_base; 1771 1835 base += ret; 1772 state->vector[0].iov_base = base;1836 state->vector[0].iov_base = (void *)base; 1773 1837 state->vector[0].iov_len -= ret; 1774 1838 break; … … 1841 1905 } 1842 1906 1907 TALLOC_FREE(bsds->fde); 1843 1908 ret = close(bsds->fd); 1844 1909 bsds->fd = -1; … … 1918 1983 struct tevent_fd *fde; 1919 1984 struct tstream_conext *stream; 1985 struct tsocket_address *local; 1920 1986 }; 1921 1987 … … 1936 2002 void *private_data); 1937 2003 1938 static struct tevent_req * 2004 static struct tevent_req *tstream_bsd_connect_send(TALLOC_CTX *mem_ctx, 1939 2005 struct tevent_context *ev, 1940 2006 int sys_errno, … … 1947 2013 talloc_get_type_abort(local->private_data, 1948 2014 struct tsocket_address_bsd); 2015 struct tsocket_address_bsd *lrbsda = NULL; 1949 2016 struct tsocket_address_bsd *rbsda = 1950 2017 talloc_get_type_abort(remote->private_data, … … 2026 2093 } 2027 2094 2095 if (is_inet) { 2096 state->local = tsocket_address_create(state, 2097 &tsocket_address_bsd_ops, 2098 &lrbsda, 2099 struct tsocket_address_bsd, 2100 __location__ "bsd_connect"); 2101 if (tevent_req_nomem(state->local, req)) { 2102 goto post; 2103 } 2104 2105 ZERO_STRUCTP(lrbsda); 2106 lrbsda->sa_socklen = sizeof(lrbsda->u.ss); 2107 #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN 2108 lrbsda->u.sa.sa_len = lrbsda->sa_socklen; 2109 #endif 2110 } 2111 2028 2112 state->fd = socket(sa_fam, SOCK_STREAM, 0); 2029 2113 if (state->fd == -1) { … … 2082 2166 } 2083 2167 if (tevent_req_error(req, err)) { 2168 goto post; 2169 } 2170 2171 if (!state->local) { 2172 tevent_req_done(req); 2173 goto post; 2174 } 2175 2176 ret = getsockname(state->fd, &lrbsda->u.sa, &lrbsda->sa_socklen); 2177 if (ret == -1) { 2178 tevent_req_error(req, errno); 2084 2179 goto post; 2085 2180 } … … 2114 2209 struct tstream_bsd_connect_state *state = tevent_req_data(req, 2115 2210 struct tstream_bsd_connect_state); 2211 struct tsocket_address_bsd *lrbsda = NULL; 2116 2212 int ret; 2117 2213 int error=0; … … 2136 2232 } 2137 2233 2234 if (!state->local) { 2235 tevent_req_done(req); 2236 return; 2237 } 2238 2239 lrbsda = talloc_get_type_abort(state->local->private_data, 2240 struct tsocket_address_bsd); 2241 2242 ret = getsockname(state->fd, &lrbsda->u.sa, &lrbsda->sa_socklen); 2243 if (ret == -1) { 2244 tevent_req_error(req, errno); 2245 return; 2246 } 2247 2138 2248 tevent_req_done(req); 2139 2249 } … … 2143 2253 TALLOC_CTX *mem_ctx, 2144 2254 struct tstream_context **stream, 2255 struct tsocket_address **local, 2145 2256 const char *location) 2146 2257 { … … 2161 2272 TALLOC_FREE(state->fde); 2162 2273 state->fd = -1; 2274 2275 if (local) { 2276 *local = talloc_move(mem_ctx, &state->local); 2277 } 2163 2278 } 2164 2279 … … 2200 2315 TALLOC_CTX *mem_ctx, 2201 2316 struct tstream_context **stream, 2317 struct tsocket_address **local, 2202 2318 const char *location) 2203 2319 { 2204 return tstream_bsd_connect_recv(req, perrno, mem_ctx, stream, location); 2320 return tstream_bsd_connect_recv(req, perrno, 2321 mem_ctx, stream, local, 2322 location); 2205 2323 } 2206 2324 … … 2235 2353 const char *location) 2236 2354 { 2237 return tstream_bsd_connect_recv(req, perrno, mem_ctx, stream, location); 2355 return tstream_bsd_connect_recv(req, perrno, 2356 mem_ctx, stream, NULL, 2357 location); 2238 2358 } 2239 2359
Note:
See TracChangeset
for help on using the changeset viewer.