X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fsasl.c;h=ef52c7c31db0fd6c80d1e52d699a5b0f27a5e570;hb=671ca37a89bd48331316cb98c3f54ce1bca7ef88;hp=d77532de5cfcd5225241b98951647c2271b28417;hpb=26c65ac524f21cd73a79f3caf45cdb76c9a41bc0;p=m6w6%2Flibmemcached diff --git a/libmemcached/sasl.c b/libmemcached/sasl.c index d77532de..ef52c7c3 100644 --- a/libmemcached/sasl.c +++ b/libmemcached/sasl.c @@ -141,12 +141,12 @@ memcached_return_t memcached_sasl_authenticate_connection(memcached_server_st *s do { /* send the packet */ - struct __write_vector_st vector[]= - { - { .length= sizeof(request.bytes), .buffer= request.bytes }, - { .length= keylen, .buffer= chosenmech }, - { .length= len, .buffer= data } - }; + struct libmemcached_io_vector_st vector[]= + { + { .length= sizeof(request.bytes), .buffer= request.bytes }, + { .length= keylen, .buffer= chosenmech }, + { .length= len, .buffer= data } + }; if (memcached_io_writev(server, vector, 3, true) == -1) { @@ -277,6 +277,12 @@ memcached_return_t memcached_destroy_sasl_auth_data(memcached_st *ptr) memcached_return_t memcached_clone_sasl(memcached_st *clone, const memcached_st *source) { + + if (source->sasl.callbacks == NULL) + { + return MEMCACHED_SUCCESS; + } + /* Hopefully we are using our own callback mechanisms.. */ if (source->sasl.callbacks[0].id == SASL_CB_USER && source->sasl.callbacks[0].proc == get_username && @@ -299,7 +305,8 @@ memcached_return_t memcached_clone_sasl(memcached_st *clone, const memcached_st */ size_t total= 0; - while (source->sasl.callbacks[total].id != SASL_CB_LIST_END) { + while (source->sasl.callbacks[total].id != SASL_CB_LIST_END) + { switch (source->sasl.callbacks[total].id) { case SASL_CB_USER: @@ -314,8 +321,7 @@ memcached_return_t memcached_clone_sasl(memcached_st *clone, const memcached_st ++total; } - sasl_callback_t *cb= libmemcached_calloc(clone, total + 1, - sizeof(sasl_callback_t)); + sasl_callback_t *cb= libmemcached_calloc(clone, total + 1, sizeof(sasl_callback_t)); if (cb == NULL) { return MEMCACHED_MEMORY_ALLOCATION_FAILURE; @@ -328,6 +334,7 @@ memcached_return_t memcached_clone_sasl(memcached_st *clone, const memcached_st if (cb[x].id == SASL_CB_USER || cb[x].id == SASL_CB_AUTHNAME) { cb[x].context= libmemcached_malloc(clone, strlen(source->sasl.callbacks[x].context)); + if (cb[x].context == NULL) { /* Failed to allocate memory, clean up previously allocated memory */