summaryrefslogtreecommitdiffstats
path: root/source3/lib
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2014-08-19 09:20:49 +0000
committerVolker Lendecke <vl@samba.org>2014-08-21 12:35:11 +0200
commit131437e079ed25be6ea39713bd85898599c2cd2a (patch)
tree4708d254423a6ebc2eebcd871917ff569eed6940 /source3/lib
parentc9169a5e987864473108d041513f1781740401ac (diff)
downloadsamba-131437e079ed25be6ea39713bd85898599c2cd2a.tar.gz
samba-131437e079ed25be6ea39713bd85898599c2cd2a.tar.xz
samba-131437e079ed25be6ea39713bd85898599c2cd2a.zip
lib: Check socket length in ctdbd_connect
Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Ronnie sahlberg <ronniesahlberg@gmail.com>
Diffstat (limited to 'source3/lib')
-rw-r--r--source3/lib/ctdbd_conn.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/source3/lib/ctdbd_conn.c b/source3/lib/ctdbd_conn.c
index 3e5e838bd6..3ba8385ada 100644
--- a/source3/lib/ctdbd_conn.c
+++ b/source3/lib/ctdbd_conn.c
@@ -214,6 +214,7 @@ static int ctdbd_connect(int *pfd)
struct sockaddr_un addr = { 0, };
int fd;
socklen_t salen;
+ size_t namelen;
fd = socket(AF_UNIX, SOCK_STREAM, 0);
if (fd == -1) {
@@ -223,7 +224,14 @@ static int ctdbd_connect(int *pfd)
}
addr.sun_family = AF_UNIX;
- snprintf(addr.sun_path, sizeof(addr.sun_path), "%s", sockname);
+
+ namelen = strlcpy(addr.sun_path, sockname, sizeof(addr.sun_path));
+ if (namelen >= sizeof(addr.sun_path)) {
+ DEBUG(3, ("%s: Socket name too long: %s\n", __func__,
+ sockname));
+ close(fd);
+ return ENAMETOOLONG;
+ }
salen = sizeof(struct sockaddr_un);