Ignore:
Timestamp:
May 24, 2009, 7:17:10 AM (16 years ago)
Author:
Herwig Bauernfeind
Message:

Update Samba 3.3 to 3.3.1

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/samba-3.3.x/source/lib/ctdbd_conn.c

    r206 r221  
    11711171
    11721172/*
     1173   This is used to canonicalize a ctdb_sock_addr structure.
     1174*/
     1175static void smbd_ctdb_canonicalize_ip(const struct sockaddr_storage *in,
     1176                                      struct sockaddr_storage *out)
     1177{
     1178        memcpy(out, in, sizeof (*out));
     1179
     1180#ifdef HAVE_IPV6
     1181        if (in->ss_family == AF_INET6) {
     1182                const char prefix[12] = { 0,0,0,0,0,0,0,0,0,0,0xff,0xff };
     1183                const struct sockaddr_in6 *in6 = (struct sockaddr_in6 *)in;
     1184                struct sockaddr_in *out4 = (struct sockaddr_in *)out;
     1185                if (memcmp(&in6->sin6_addr, prefix, 12) == 0) {
     1186                        memset(out, 0, sizeof(*out));
     1187#ifdef HAVE_SOCK_SIN_LEN
     1188                        out4->sin_len = sizeof(*out);
     1189#endif
     1190                        out4->sin_family = AF_INET;
     1191                        out4->sin_port   = in6->sin6_port;
     1192                        memcpy(&out4->sin_addr, &in6->sin6_addr.s6_addr32[3], 4);
     1193                }
     1194        }
     1195#endif
     1196}
     1197
     1198/*
    11731199 * Register us as a server for a particular tcp connection
    11741200 */
    11751201
    11761202NTSTATUS ctdbd_register_ips(struct ctdbd_connection *conn,
    1177                             const struct sockaddr_storage *server,
    1178                             const struct sockaddr_storage *client,
     1203                            const struct sockaddr_storage *_server,
     1204                            const struct sockaddr_storage *_client,
    11791205                            void (*release_ip_handler)(const char *ip_addr,
    11801206                                                       void *private_data),
    11811207                            void *private_data)
    11821208{
    1183         struct sockaddr *sock = (struct sockaddr *)client;
    11841209        /*
    11851210         * we still use ctdb_control_tcp for ipv4
     
    11881213         */
    11891214        struct ctdb_control_tcp p4;
    1190 #ifdef HAVE_IPV6
     1215#ifdef HAVE_STRUCT_CTDB_CONTROL_TCP_ADDR
    11911216        struct ctdb_control_tcp_addr p;
    11921217#endif
    11931218        TDB_DATA data;
    11941219        NTSTATUS status;
     1220        struct sockaddr_storage client;
     1221        struct sockaddr_storage server;
    11951222
    11961223        /*
     
    11991226        SMB_ASSERT(conn->release_ip_handler == NULL);
    12001227
    1201         switch (sock->sa_family) {
     1228        smbd_ctdb_canonicalize_ip(_client, &client);
     1229        smbd_ctdb_canonicalize_ip(_server, &server);
     1230
     1231        switch (client.ss_family) {
    12021232        case AF_INET:
    1203                 p4.dest = *(struct sockaddr_in *)server;
    1204                 p4.src = *(struct sockaddr_in *)client;
     1233                p4.dest = *(struct sockaddr_in *)&server;
     1234                p4.src = *(struct sockaddr_in *)&client;
    12051235                data.dptr = (uint8_t *)&p4;
    12061236                data.dsize = sizeof(p4);
    12071237                break;
    1208 #ifdef HAVE_IPV6
     1238#ifdef HAVE_STRUCT_CTDB_CONTROL_TCP_ADDR
    12091239        case AF_INET6:
    1210                 p.dest.ip6 = *(struct sockaddr_in6 *)server;
    1211                 p.src.ip6 = *(struct sockaddr_in6 *)client;
     1240                p.dest.ip6 = *(struct sockaddr_in6 *)&server;
     1241                p.src.ip6 = *(struct sockaddr_in6 *)&client;
    12121242                data.dptr = (uint8_t *)&p;
    12131243                data.dsize = sizeof(p);
Note: See TracChangeset for help on using the changeset viewer.