From a572f4b9676bf55854fe31314c601062fdeaab3e Mon Sep 17 00:00:00 2001 From: Jani Salonen Date: Sat, 23 Jun 2012 05:45:14 -0700 Subject: [PATCH] ITS#7305 add slapi_[get|free]_client_ip() --- include/slapi-plugin.h | 2 ++ servers/slapd/slapi/slapi_utils.c | 37 +++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/include/slapi-plugin.h b/include/slapi-plugin.h index 4eda66ebab..888bae847c 100644 --- a/include/slapi-plugin.h +++ b/include/slapi-plugin.h @@ -399,6 +399,8 @@ void slapi_seq_internal_set_pb( Slapi_PBlock *pb, char *ibase, int type, /* connection related routines */ int slapi_is_connection_ssl(Slapi_PBlock *pPB, int *isSSL); int slapi_get_client_port(Slapi_PBlock *pPB, int *fromPort); +int slapi_get_client_ip(Slapi_PBlock *pb, char **clientIP); +void slapi_free_client_ip(char **clientIP); /* computed attributes */ typedef struct _computed_attr_context computed_attr_context; diff --git a/servers/slapd/slapi/slapi_utils.c b/servers/slapd/slapi/slapi_utils.c index 3b913e1521..5811f54601 100644 --- a/servers/slapd/slapi/slapi_utils.c +++ b/servers/slapd/slapi/slapi_utils.c @@ -1843,6 +1843,43 @@ slapi_pw_find( return 1; } +// Get connected client IP address. +// +// The user must free the returned client IP after its use. +// Compatible with IBM Tivoli call. +// +// Errors: +// * LDAP_PARAM_ERROR - If the pb parameter is null. +// * LDAP_OPERATIONS_ERROR - If the API encounters error processing the request. +// * LDAP_NO_MEMORY - Failed to allocate required memory. + +int +slapi_get_client_ip(Slapi_PBlock *pb, char **clientIP) +{ + char *s = NULL; + + if(pb == NULL || pb->pb_conn == NULL) return(LDAP_PARAM_ERROR); + if((s = (char *) slapi_ch_malloc(pb->pb_conn->c_peer_name.bv_len + 1)) == NULL) { + return(LDAP_NO_MEMORY); + } + + memcpy(s, pb->pb_conn->c_peer_name.bv_val, pb->pb_conn->c_peer_name.bv_len); + + s[pb->pb_conn->c_peer_name.bv_len] = 0; + + *clientIP = s; + + return(LDAP_SUCCESS); +} + +// Free previously allocated client IP address. + +void +slapi_free_client_ip(char **clientIP) +{ + slapi_ch_free((void **) clientIP); +} + #define MAX_HOSTNAME 512 char * -- 2.39.5