diff --git a/gck-rpc-dispatch.c b/gck-rpc-dispatch.c index 1f17d2c03f13739bbe302bde58a6e6a8301487cb..a3b1b85da47212e2bf50b366080a59ab45876893 100644 --- a/gck-rpc-dispatch.c +++ b/gck-rpc-dispatch.c @@ -68,6 +68,8 @@ typedef struct _CallState { int sock; int (*read)(int, unsigned char *,size_t); int (*write)(int, unsigned char *,size_t); + struct sockaddr_storage addr; + socklen_t addrlen; } CallState; typedef struct _DispatchState { @@ -2139,17 +2141,27 @@ static int write_all(int sock, unsigned char *data, size_t len) static void run_dispatch_loop(CallState *cs) { unsigned char buf[4]; - uint32_t len; + uint32_t len, res; + char hoststr[NI_MAXHOST], portstr[NI_MAXSERV]; assert(cs->sock != -1); + if ((res = getnameinfo((struct sockaddr *) & cs->addr, cs->addrlen, + hoststr, sizeof(hoststr), portstr, sizeof(portstr), + NI_NUMERICHOST | NI_NUMERICSERV)) != 0) { + gck_rpc_warn("couldn't call getnameinfo on client addr: %.100s", + gai_strerror(res)); + hoststr[0] = portstr[0] = '\0'; + } + /* The client application */ if (!cs->read(cs->sock, (unsigned char *)&cs->appid, sizeof (cs->appid))) { gck_rpc_warn("Can't read appid\n"); return ; } - gck_rpc_log("New session %d-%d\n", (uint32_t) (cs->appid >> 32), - (uint32_t) cs->appid); + + gck_rpc_log("New session %d-%d (client %s, port %s)\n", (uint32_t) (cs->appid >> 32), + (uint32_t) cs->appid, hoststr, portstr); /* Setup our buffers */ if (!call_init(cs)) { @@ -2231,7 +2243,7 @@ static char pkcs11_socket_path[MAXPATHLEN] = { 0, }; void gck_rpc_layer_accept(void) { - struct sockaddr_un addr; + struct sockaddr_storage addr; DispatchState *ds, **here; int error; socklen_t addrlen; @@ -2270,6 +2282,8 @@ void gck_rpc_layer_accept(void) ds->cs.sock = new_fd; ds->cs.read = &read_all; ds->cs.write = &write_all; + ds->cs.addr = addr; + ds->cs.addrlen = addrlen; error = pthread_create(&ds->thread, NULL, run_dispatch_thread, &(ds->cs));