r20097: Ensure found_username is freed correctly when
authorJeremy Allison <jra@samba.org>
Sat, 9 Dec 2006 23:55:20 +0000 (23:55 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:16:24 +0000 (12:16 -0500)
talloced on the null context.
Jeremy.

source/smbd/service.c

index 62d85cfdd97795f375db83691533cd26b5c03f64..08370b1c80014336708fde1015692b7e6997f240 100644 (file)
@@ -643,7 +643,8 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser,
        if (lp_guest_only(snum)) {
                const char *guestname = lp_guestaccount();
                NTSTATUS status2;
-               char *found_username;
+               char *found_username = NULL;
+
                guest = True;
                pass = getpwnam_alloc(NULL, guestname);
                if (!pass) {
@@ -658,6 +659,7 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser,
                                                     &found_username,
                                                     &conn->nt_user_token);
                if (!NT_STATUS_IS_OK(status2)) {
+                       TALLOC_FREE(found_username);
                        conn_free(conn);
                        *status = status2;
                        return NULL;
@@ -665,6 +667,7 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser,
                fstrcpy(user, found_username);
                string_set(&conn->user,user);
                conn->force_user = True;
+               TALLOC_FREE(found_username);
                TALLOC_FREE(pass);
                DEBUG(3,("Guest only user %s\n",user));
        } else if (vuser) {
@@ -697,7 +700,7 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser,
                guest = vuser->guest; 
        } else if (lp_security() == SEC_SHARE) {
                NTSTATUS status2;
-               char *found_username;
+               char *found_username = NULL;
                /* add it as a possible user name if we 
                   are in share mode security */
                add_session_user(lp_servicename(snum));
@@ -715,12 +718,14 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser,
                                                     &found_username,
                                                     &conn->nt_user_token);
                if (!NT_STATUS_IS_OK(status2)) {
+                       TALLOC_FREE(found_username);
                        conn_free(conn);
                        *status = status2;
                        return NULL;
                }
                fstrcpy(user, found_username);
                string_set(&conn->user,user);
+               TALLOC_FREE(found_username);
                conn->force_user = True;
        } else {
                DEBUG(0, ("invalid VUID (vuser) but not in security=share\n"));