]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
Move the claim_connection stuff till a little later in the process.
authorAndrew Bartlett <abartlet@samba.org>
Fri, 17 Aug 2001 08:44:04 +0000 (08:44 +0000)
committerAndrew Bartlett <abartlet@samba.org>
Fri, 17 Aug 2001 08:44:04 +0000 (08:44 +0000)
(You don't have to clean up somthing you haven't done yet...)

source/smbd/service.c

index 3e29c8cf58cf287e8f74a7994a2fe058081c0aab..524b647b5e210286b88c24eba977c2ea4c1717cb 100644 (file)
@@ -527,17 +527,6 @@ connection_struct *make_connection(char *service,char *user,char *password, int
        initialise_groups(conn->user, conn->uid, conn->gid); 
        get_current_groups(&conn->ngroups,&conn->groups);
                
-       /* check number of connections */
-       if (!claim_connection(conn,
-                             lp_servicename(SNUM(conn)),
-                             lp_max_connections(SNUM(conn)),
-                             False)) {
-               DEBUG(1,("too many connections - rejected\n"));
-               *ecode = ERRnoresource;
-               conn_free(conn);
-               return NULL;
-       }  
-               
        conn->nt_user_token = create_nt_token(conn->uid, conn->gid, 
                                              conn->ngroups, conn->groups,
                                              guest);
@@ -557,8 +546,6 @@ connection_struct *make_connection(char *service,char *user,char *password, int
                                *ecode = ERRaccess;
                                DEBUG(0,( "make_connection: connection to %s denied due to security descriptor.\n",
                                        service ));
-                               yield_connection(conn, lp_servicename(SNUM(conn)), lp_max_connections(SNUM(conn)));
-                               conn_free(conn);
                                return NULL;
                        } else {
                                conn->read_only = True;
@@ -569,11 +556,20 @@ connection_struct *make_connection(char *service,char *user,char *password, int
 
        if (!vfs_init(conn)) {
                DEBUG(0, ("vfs_init failed for service %s\n", lp_servicename(SNUM(conn))));
-               yield_connection(conn, lp_servicename(SNUM(conn)), lp_max_connections(SNUM(conn)));
-               conn_free(conn);
                return NULL;
        }
 
+       /* check number of connections */
+       if (!claim_connection(conn,
+                             lp_servicename(SNUM(conn)),
+                             lp_max_connections(SNUM(conn)),
+                             False)) {
+               DEBUG(1,("too many connections - rejected\n"));
+               *ecode = ERRnoresource;
+               conn_free(conn);
+               return NULL;
+       }  
+               
        /* execute any "root preexec = " line */
        if (*lp_rootpreexec(SNUM(conn))) {
                pstring cmd;
@@ -583,7 +579,9 @@ connection_struct *make_connection(char *service,char *user,char *password, int
                ret = smbrun(cmd,NULL);
                if (ret != 0 && lp_rootpreexec_close(SNUM(conn))) {
                        DEBUG(1,("preexec gave %d - failing connection\n", ret));
-                       yield_connection(conn, lp_servicename(SNUM(conn)), lp_max_connections(SNUM(conn)));
+                       yield_connection(conn,
+                                        lp_servicename(SNUM(conn)),
+                                        lp_max_connections(SNUM(conn)));
                        conn_free(conn);
                        *ecode = ERRsrverror;
                        return NULL;