summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/smbd/chgpasswd.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/source3/smbd/chgpasswd.c b/source3/smbd/chgpasswd.c
index 4369573fe8..52ca364070 100644
--- a/source3/smbd/chgpasswd.c
+++ b/source3/smbd/chgpasswd.c
@@ -71,6 +71,8 @@ static int findpty(char **slave)
*slave = ptsname(master);
if (*slave == NULL) {
DEBUG(0,("findpty: Unable to create master/slave pty pair.\n"));
+ /* Stop fd leak on error. */
+ close(master);
return -1;
} else {
DEBUG(10, ("findpty: Allocated slave pty %s\n", *slave));
@@ -81,7 +83,8 @@ static int findpty(char **slave)
fstrcpy( line, "/dev/ptyXX" );
dirp = OpenDir(NULL, "/dev", False);
- if (!dirp) return(-1);
+ if (!dirp)
+ return(-1);
while ((dpname = ReadDirName(dirp)) != NULL) {
if (strncmp(dpname, "pty", 3) == 0 && strlen(dpname) == 5) {
DEBUG(3,("pty: try to open %s, line was %s\n", dpname, line ) );
@@ -89,10 +92,10 @@ static int findpty(char **slave)
line[9] = dpname[4];
if ((master = open(line, O_RDWR)) >= 0) {
DEBUG(3,("pty: opened %s\n", line ) );
- line[5] = 't';
- *slave = line;
- CloseDir(dirp);
- return (master);
+ line[5] = 't';
+ *slave = line;
+ CloseDir(dirp);
+ return (master);
}
}
}