X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fsasl.cc;h=e473806984875079573db3f519bb7be7d6220bdc;hb=76bf27c007d5015d3dcf2981c942d8afb2e97302;hp=603c5864091a27b143f1d3c1e03b8c214ecc8129;hpb=b5495838fb245aa1068a1198ed549b98a9c3e666;p=awesomized%2Flibmemcached diff --git a/libmemcached/sasl.cc b/libmemcached/sasl.cc index 603c5864..e4738069 100644 --- a/libmemcached/sasl.cc +++ b/libmemcached/sasl.cc @@ -2,7 +2,7 @@ * * Libmemcached library * - * Copyright (C) 2011 Data Differential, http://datadifferential.com/ + * Copyright (C) 2011-2012 Data Differential, http://datadifferential.com/ * Copyright (C) 2006-2009 Brian Aker All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -35,7 +35,7 @@ * */ -#include +#include "libmemcached/common.h" #include #if defined(LIBMEMCACHED_WITH_SASL_SUPPORT) && LIBMEMCACHED_WITH_SASL_SUPPORT @@ -65,21 +65,21 @@ sasl_callback_t *memcached_get_sasl_callbacks(memcached_st *ptr) * @param raddr remote address (out) * @return true on success false otherwise (errno contains more info) */ -static memcached_return_t resolve_names(memcached_server_st& server, char *laddr, size_t laddr_length, char *raddr, size_t raddr_length) +static memcached_return_t resolve_names(org::libmemcached::Instance& server, char *laddr, size_t laddr_length, char *raddr, size_t raddr_length) { - char host[NI_MAXHOST]; - char port[NI_MAXSERV]; + char host[MEMCACHED_NI_MAXHOST]; + char port[MEMCACHED_NI_MAXSERV]; struct sockaddr_storage saddr; socklen_t salen= sizeof(saddr); if (getsockname(server.fd, (struct sockaddr *)&saddr, &salen) < 0) { - return memcached_set_errno(server, MEMCACHED_ERRNO, MEMCACHED_AT); + return memcached_set_error(server, MEMCACHED_HOST_LOOKUP_FAILURE, MEMCACHED_AT); } if (getnameinfo((struct sockaddr *)&saddr, salen, host, sizeof(host), port, sizeof(port), NI_NUMERICHOST | NI_NUMERICSERV) < 0) { - return MEMCACHED_HOST_LOOKUP_FAILURE; + return memcached_set_error(server, MEMCACHED_HOST_LOOKUP_FAILURE, MEMCACHED_AT); } (void)snprintf(laddr, laddr_length, "%s;%s", host, port); @@ -87,7 +87,7 @@ static memcached_return_t resolve_names(memcached_server_st& server, char *laddr if (getpeername(server.fd, (struct sockaddr *)&saddr, &salen) < 0) { - return memcached_set_errno(server, MEMCACHED_ERRNO, MEMCACHED_AT); + return memcached_set_error(server, MEMCACHED_HOST_LOOKUP_FAILURE, MEMCACHED_AT); } if (getnameinfo((struct sockaddr *)&saddr, salen, host, sizeof(host), @@ -123,7 +123,7 @@ static void sasl_startup_function(void) } // extern "C" -memcached_return_t memcached_sasl_authenticate_connection(memcached_server_st *server) +memcached_return_t memcached_sasl_authenticate_connection(org::libmemcached::Instance* server) { if (LIBMEMCACHED_WITH_SASL_SUPPORT == 0) { @@ -148,15 +148,15 @@ memcached_return_t memcached_sasl_authenticate_connection(memcached_server_st *s */ protocol_binary_request_no_extras request= { }; - initialize_binary_request(ptr, request.message.header); + initialize_binary_request(server, request.message.header); request.message.header.request.opcode= PROTOCOL_BINARY_CMD_SASL_LIST_MECHS; - if (memcached_io_write(server, request.bytes, - sizeof(request.bytes), 1) != sizeof(request.bytes)) + if (memcached_io_write(server, request.bytes, sizeof(request.bytes), true) != sizeof(request.bytes)) { return MEMCACHED_WRITE_FAILURE; } + assert_msg(server->fd != INVALID_SOCKET, "Programmer error, invalid socket"); memcached_server_response_increment(server); @@ -177,10 +177,11 @@ memcached_return_t memcached_sasl_authenticate_connection(memcached_server_st *s return rc; } + assert_msg(server->fd != INVALID_SOCKET, "Programmer error, invalid socket"); /* set ip addresses */ - char laddr[NI_MAXHOST + NI_MAXSERV]; - char raddr[NI_MAXHOST + NI_MAXSERV]; + char laddr[MEMCACHED_NI_MAXHOST + MEMCACHED_NI_MAXSERV]; + char raddr[MEMCACHED_NI_MAXHOST + MEMCACHED_NI_MAXSERV]; if (memcached_failed(rc= resolve_names(*server, laddr, sizeof(laddr), raddr, sizeof(raddr)))) { @@ -242,19 +243,23 @@ memcached_return_t memcached_sasl_authenticate_connection(memcached_server_st *s { data, len } }; + assert_msg(server->fd != INVALID_SOCKET, "Programmer error, invalid socket"); if (memcached_io_writev(server, vector, 3, true) == false) { rc= MEMCACHED_WRITE_FAILURE; break; } + assert_msg(server->fd != INVALID_SOCKET, "Programmer error, invalid socket"); memcached_server_response_increment(server); /* read the response */ + assert_msg(server->fd != INVALID_SOCKET, "Programmer error, invalid socket"); rc= memcached_response(server, NULL, 0, NULL); if (rc != MEMCACHED_AUTH_CONTINUE) { break; } + assert_msg(server->fd != INVALID_SOCKET, "Programmer error, invalid socket"); ret= sasl_client_step(conn, memcached_result_value(&server->root->result), (unsigned int)memcached_result_length(&server->root->result),