]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
Fix for CVE-2009-2813.
authorJeremy Allison <jra@samba.org>
Mon, 28 Sep 2009 11:44:12 +0000 (13:44 +0200)
committerKarolin Seeger <kseeger@samba.org>
Thu, 1 Oct 2009 12:26:58 +0000 (14:26 +0200)
===========================================================
== Subject:     Misconfigured /etc/passwd file may share folders unexpectedly
==
== CVE ID#:     CVE-2009-2813
==
== Versions:    All versions of Samba later than 3.0.11
==
== Summary:     If a user in /etc/passwd is misconfigured to have
==              an empty home directory then connecting to the home
==              share of this user will use the root of the filesystem
==              as the home directory.
===========================================================
(cherry picked from commit 8afa10ad7d7e81bcae27b6a913210ef8a1ee4426)

source/param/loadparm.c
source/smbd/service.c

index 3908aef5b0d8299cf50f00c0f7f2fd5df00a4a3d..491264e24534ec50ff45b44388f2c0a99f115c52 100644 (file)
@@ -5875,6 +5875,11 @@ bool lp_add_home(const char *pszHomename, int iDefaultService,
 {
        int i;
 
+       if (pszHomename == NULL || user == NULL || pszHomedir == NULL ||
+                       pszHomedir[0] == '\0') {
+               return false;
+       }
+
        i = add_a_service(ServicePtrs[iDefaultService], pszHomename);
 
        if (i < 0)
@@ -7848,7 +7853,7 @@ static void lp_add_auto_services(char *str)
 
                home = get_user_home_dir(talloc_tos(), p);
 
-               if (home && homes >= 0)
+               if (home && home[0] && homes >= 0)
                        lp_add_home(p, homes, p, home);
 
                TALLOC_FREE(home);
index 4724dd7a59fe90e71e67c3816611a2f212a76f48..2a1ef20174ca2afdca1c8038c35c8561ddd6259b 100644 (file)
@@ -55,6 +55,10 @@ bool set_conn_connectpath(connection_struct *conn, const char *connectpath)
        const char *s = connectpath;
         bool start_of_name_component = true;
 
+       if (connectpath == NULL || connectpath[0] == '\0') {
+               return false;
+       }
+
        destname = SMB_STRDUP(connectpath);
        if (!destname) {
                return false;
@@ -331,7 +335,7 @@ int add_home_service(const char *service, const char *username, const char *home
 {
        int iHomeService;
 
-       if (!service || !homedir)
+       if (!service || !homedir || homedir[0] == '\0')
                return -1;
 
        if ((iHomeService = lp_servicenumber(HOMES_NAME)) < 0) {