[PATCH] nsswitch: Simplify winbind_named_pipe_sock()

Volker Lendecke Volker.Lendecke at SerNet.DE
Mon Jun 8 05:02:17 MDT 2015


Hi!

Review&push appreciated!

Thanks,

Volker

-- 
SerNet GmbH, Bahnhofsallee 1b, 37081 Göttingen
phone: +49-551-370000-0, fax: +49-551-370000-9
AG Göttingen, HRB 2816, GF: Dr. Johannes Loxen
http://www.sernet.de, mailto:kontakt at sernet.de
-------------- next part --------------
From 8bd8944a68d1aa95e2e488786320f9b6bce12f80 Mon Sep 17 00:00:00 2001
From: Volker Lendecke <vl at samba.org>
Date: Sun, 1 Mar 2015 11:43:01 +0000
Subject: [PATCH] nsswitch: Simplify winbind_named_pipe_sock()

Signed-off-by: Volker Lendecke <vl at samba.org>
---
 nsswitch/wb_common.c |   18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/nsswitch/wb_common.c b/nsswitch/wb_common.c
index 036557a..3194df1 100644
--- a/nsswitch/wb_common.c
+++ b/nsswitch/wb_common.c
@@ -220,10 +220,10 @@ static int winbind_named_pipe_sock(const char *dir)
 {
 	struct sockaddr_un sunaddr;
 	struct stat st;
-	char *path = NULL;
 	int fd;
 	int wait_time;
 	int slept;
+	int ret;
 
 	/* Check permissions on unix socket directory */
 
@@ -244,25 +244,24 @@ static int winbind_named_pipe_sock(const char *dir)
 
 	/* Connect to socket */
 
-	if (asprintf(&path, "%s/%s", dir, WINBINDD_SOCKET_NAME) < 0) {
+	sunaddr = (struct sockaddr_un) { .sun_family = AF_UNIX };
+
+	ret = snprintf(sunaddr.sun_path, sizeof(sunaddr.sun_path),
+		       "%s/%s", dir, WINBINDD_SOCKET_NAME);
+	if ((ret == -1) || (ret >= sizeof(sunaddr.sun_path))) {
+		errno = ENAMETOOLONG;
 		return -1;
 	}
 
-	ZERO_STRUCT(sunaddr);
-	sunaddr.sun_family = AF_UNIX;
-	strncpy(sunaddr.sun_path, path, sizeof(sunaddr.sun_path) - 1);
-
 	/* If socket file doesn't exist, don't bother trying to connect
 	   with retry.  This is an attempt to make the system usable when
 	   the winbindd daemon is not running. */
 
-	if (lstat(path, &st) == -1) {
+	if (lstat(sunaddr.sun_path, &st) == -1) {
 		errno = ENOENT;
-		SAFE_FREE(path);
 		return -1;
 	}
 
-	SAFE_FREE(path);
 	/* Check permissions on unix socket file */
 
 	/*
@@ -290,7 +289,6 @@ static int winbind_named_pipe_sock(const char *dir)
 	for (wait_time = 0; connect(fd, (struct sockaddr *)&sunaddr, sizeof(sunaddr)) == -1;
 			wait_time += slept) {
 		struct pollfd pfd;
-		int ret;
 		int connect_errno = 0;
 		socklen_t errnosize;
 
-- 
1.7.9.5



More information about the samba-technical mailing list