Ignore:
Timestamp:
Nov 27, 2012, 4:43:17 PM (13 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: updated trunk to 3.6.0

Location:
trunk/server
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/server

  • trunk/server/lib/tsocket/tsocket_bsd.c

    r480 r745  
    264264
    265265        bsda->sa_socklen = sa_socklen;
     266#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
     267        bsda->u.sa.sa_len = bsda->sa_socklen;
     268#endif
    266269
    267270        *_addr = addr;
     
    292295
    293296        memcpy(sa, &bsda->u.ss, sa_socklen);
     297#ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
     298        sa->sa_len = sa_socklen;
     299#endif
    294300        return sa_socklen;
     301}
     302
     303bool 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;
    295338}
    296339
     
    465508
    466509        return 0;
     510}
     511
     512bool 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;
    467527}
    468528
     
    847907        ZERO_STRUCTP(bsda);
    848908        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
    849912
    850913        ret = recvfrom(bsds->fd, state->buf, state->len, 0,
     
    10541117        }
    10551118
     1119        TALLOC_FREE(bsds->fde);
    10561120        ret = close(bsds->fd);
    10571121        bsds->fd = -1;
     
    11841248        fd = socket(sa_fam, SOCK_DGRAM, 0);
    11851249        if (fd < 0) {
    1186                 return fd;
     1250                return -1;
    11871251        }
    11881252
    11891253        fd = tsocket_bsd_common_prepare_fd(fd, true);
    11901254        if (fd < 0) {
    1191                 return fd;
     1255                return -1;
    11921256        }
    11931257
     
    12171281                        talloc_free(dgram);
    12181282                        errno = saved_errno;
    1219                         return ret;
     1283                        return -1;
    12201284                }
    12211285        }
     
    12311295                        talloc_free(dgram);
    12321296                        errno = saved_errno;
    1233                         return ret;
     1297                        return -1;
    12341298                }
    12351299        }
     
    12441308                        talloc_free(dgram);
    12451309                        errno = saved_errno;
    1246                         return ret;
     1310                        return -1;
    12471311                }
    12481312        }
     
    12541318                        talloc_free(dgram);
    12551319                        errno = saved_errno;
    1256                         return ret;
     1320                        return -1;
    12571321                }
    12581322        }
     
    12701334                        talloc_free(dgram);
    12711335                        errno = saved_errno;
    1272                         return ret;
     1336                        return -1;
    12731337                }
    12741338        }
     
    16101674                        base = (uint8_t *)state->vector[0].iov_base;
    16111675                        base += ret;
    1612                         state->vector[0].iov_base = base;
     1676                        state->vector[0].iov_base = (void *)base;
    16131677                        state->vector[0].iov_len -= ret;
    16141678                        break;
     
    17701834                        base = (uint8_t *)state->vector[0].iov_base;
    17711835                        base += ret;
    1772                         state->vector[0].iov_base = base;
     1836                        state->vector[0].iov_base = (void *)base;
    17731837                        state->vector[0].iov_len -= ret;
    17741838                        break;
     
    18411905        }
    18421906
     1907        TALLOC_FREE(bsds->fde);
    18431908        ret = close(bsds->fd);
    18441909        bsds->fd = -1;
     
    19181983        struct tevent_fd *fde;
    19191984        struct tstream_conext *stream;
     1985        struct tsocket_address *local;
    19201986};
    19211987
     
    19362002                                            void *private_data);
    19372003
    1938 static struct tevent_req * tstream_bsd_connect_send(TALLOC_CTX *mem_ctx,
     2004static struct tevent_req *tstream_bsd_connect_send(TALLOC_CTX *mem_ctx,
    19392005                                        struct tevent_context *ev,
    19402006                                        int sys_errno,
     
    19472013                talloc_get_type_abort(local->private_data,
    19482014                struct tsocket_address_bsd);
     2015        struct tsocket_address_bsd *lrbsda = NULL;
    19492016        struct tsocket_address_bsd *rbsda =
    19502017                talloc_get_type_abort(remote->private_data,
     
    20262093        }
    20272094
     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
    20282112        state->fd = socket(sa_fam, SOCK_STREAM, 0);
    20292113        if (state->fd == -1) {
     
    20822166        }
    20832167        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);
    20842179                goto post;
    20852180        }
     
    21142209        struct tstream_bsd_connect_state *state = tevent_req_data(req,
    21152210                                        struct tstream_bsd_connect_state);
     2211        struct tsocket_address_bsd *lrbsda = NULL;
    21162212        int ret;
    21172213        int error=0;
     
    21362232        }
    21372233
     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
    21382248        tevent_req_done(req);
    21392249}
     
    21432253                                    TALLOC_CTX *mem_ctx,
    21442254                                    struct tstream_context **stream,
     2255                                    struct tsocket_address **local,
    21452256                                    const char *location)
    21462257{
     
    21612272                TALLOC_FREE(state->fde);
    21622273                state->fd = -1;
     2274
     2275                if (local) {
     2276                        *local = talloc_move(mem_ctx, &state->local);
     2277                }
    21632278        }
    21642279
     
    22002315                                   TALLOC_CTX *mem_ctx,
    22012316                                   struct tstream_context **stream,
     2317                                   struct tsocket_address **local,
    22022318                                   const char *location)
    22032319{
    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);
    22052323}
    22062324
     
    22352353                                      const char *location)
    22362354{
    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);
    22382358}
    22392359
Note: See TracChangeset for help on using the changeset viewer.