diff options
| author | Volker Lendecke <vl@samba.org> | 2014-08-19 09:20:49 +0000 |
|---|---|---|
| committer | Volker Lendecke <vl@samba.org> | 2014-08-21 12:35:11 +0200 |
| commit | 131437e079ed25be6ea39713bd85898599c2cd2a (patch) | |
| tree | 4708d254423a6ebc2eebcd871917ff569eed6940 /source3/lib | |
| parent | c9169a5e987864473108d041513f1781740401ac (diff) | |
| download | samba-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.c | 10 |
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); |
