The branch, master has been updated
       via  ffeb2ac winbind: Speed up wbinfo -p
       via  fdf0b2a nsswitch: Only connect to the priv socket if required
       via  6120f56 ntlm_auth: PAM_AUTH_CRAP needs a privileged socket
       via  ffe9700 nsswitch: fix memory leak in winbind_open_pipe_sock() when 
the privileged pipe is not accessable.
      from  8e5cc97 s3:messages: improve tevent_create_immediate recycling

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit ffeb2acf65ef0b669f57b3f6f047db03b2f1a6c6
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Apr 18 17:29:51 2018 +0200

    winbind: Speed up wbinfo -p
    
    This was (possibly) used as an example in the early days of the async 
winbind
    code we have today. It's not necessary to send this through a full 
tevent_req
    round.
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Stefan Metzmacher <me...@samba.org>
    
    Autobuild-User(master): Volker Lendecke <v...@samba.org>
    Autobuild-Date(master): Tue Apr 24 17:18:23 CEST 2018 on sn-devel-144

commit fdf0b2a784f83f9fcaa204be7f28f9e7fc47836b
Author: Volker Lendecke <v...@samba.org>
Date:   Mon Apr 23 12:13:40 2018 +0200

    nsswitch: Only connect to the priv socket if required
    
    This should speed up calls like "wbinfo -p"
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Stefan Metzmacher <me...@samba.org>

commit 6120f568017544425071c9ad817faa236fd27058
Author: Volker Lendecke <v...@samba.org>
Date:   Mon Apr 23 14:04:48 2018 +0200

    ntlm_auth: PAM_AUTH_CRAP needs a privileged socket
    
    This only works right now because wb_common always tries privileged
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Stefan Metzmacher <me...@samba.org>

commit ffe970007bf934955f72ec2d73bf8f94a2b796eb
Author: Stefan Metzmacher <me...@samba.org>
Date:   Tue Apr 24 10:59:05 2018 +0200

    nsswitch: fix memory leak in winbind_open_pipe_sock() when the privileged 
pipe is not accessable.
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=13400
    
    Signed-off-by: Stefan Metzmacher <me...@samba.org>
    Reviewed-by: Volker Lendecke <v...@samba.org>

-----------------------------------------------------------------------

Summary of changes:
 nsswitch/wb_common.c              | 10 ++++++---
 source3/utils/ntlm_auth.c         |  6 ++++-
 source3/winbindd/wb_ping.c        | 46 ---------------------------------------
 source3/winbindd/winbindd.c       |  3 +--
 source3/winbindd/winbindd_misc.c  |  6 +++++
 source3/winbindd/winbindd_proto.h |  6 -----
 source3/winbindd/wscript_build    |  1 -
 7 files changed, 19 insertions(+), 59 deletions(-)
 delete mode 100644 source3/winbindd/wb_ping.c


Changeset truncated at 500 lines:

diff --git a/nsswitch/wb_common.c b/nsswitch/wb_common.c
index d6746b4..6768fde 100644
--- a/nsswitch/wb_common.c
+++ b/nsswitch/wb_common.c
@@ -401,6 +401,10 @@ static int winbind_open_pipe_sock(struct winbindd_context 
*ctx,
                return -1;
        }
 
+       if (need_priv == 0) {
+               return ctx->winbindd_fd;
+       }
+
        /* try and get priv pipe */
 
        request.wb_flags = WBFLAG_RECURSE;
@@ -420,14 +424,14 @@ static int winbind_open_pipe_sock(struct winbindd_context 
*ctx,
                        ctx->winbindd_fd = fd;
                        ctx->is_privileged = 1;
                }
+
+               SAFE_FREE(response.extra_data.data);
        }
 
-       if ((need_priv != 0) && (ctx->is_privileged == 0)) {
+       if (ctx->is_privileged == 0) {
                return -1;
        }
 
-       SAFE_FREE(response.extra_data.data);
-
        return ctx->winbindd_fd;
 #else
        return -1;
diff --git a/source3/utils/ntlm_auth.c b/source3/utils/ntlm_auth.c
index 2c8d991..d3146cc 100644
--- a/source3/utils/ntlm_auth.c
+++ b/source3/utils/ntlm_auth.c
@@ -593,7 +593,11 @@ NTSTATUS contact_winbind_auth_crap(const char *username,
                 request.data.auth_crap.nt_resp_len = nt_response->length;
        }
 
-       result = winbindd_request_response(NULL, WINBINDD_PAM_AUTH_CRAP, 
&request, &response);
+       result = winbindd_priv_request_response(
+               NULL,
+               WINBINDD_PAM_AUTH_CRAP,
+               &request,
+               &response);
        SAFE_FREE(request.extra_data.data);
 
        /* Display response */
diff --git a/source3/winbindd/wb_ping.c b/source3/winbindd/wb_ping.c
deleted file mode 100644
index bfba3c1..0000000
--- a/source3/winbindd/wb_ping.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-   async implementation of WINBINDD_PING
-   Copyright (C) Volker Lendecke 2009
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "winbindd.h"
-
-struct wb_ping_state {
-       uint8_t dummy;
-};
-
-struct tevent_req *wb_ping_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                               struct winbindd_cli_state *cli,
-                               struct winbindd_request *request)
-{
-       struct tevent_req *req;
-       struct wb_ping_state *state;
-
-       req = tevent_req_create(mem_ctx, &state, struct wb_ping_state);
-       if (req == NULL) {
-               return NULL;
-       }
-       tevent_req_done(req);
-       tevent_req_post(req, ev);
-       return req;
-}
-
-NTSTATUS wb_ping_recv(struct tevent_req *req, struct winbindd_response *presp)
-{
-       return NT_STATUS_OK;
-}
diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c
index b908d91..76d644b 100644
--- a/source3/winbindd/winbindd.c
+++ b/source3/winbindd/winbindd.c
@@ -535,6 +535,7 @@ static struct winbindd_dispatch_table {
        /* Miscellaneous */
 
        { WINBINDD_INFO, winbindd_info, "INFO" },
+       { WINBINDD_PING, winbindd_ping, "PING" },
        { WINBINDD_INTERFACE_VERSION, winbindd_interface_version,
          "INTERFACE_VERSION" },
        { WINBINDD_DOMAIN_NAME, winbindd_domain_name, "DOMAIN_NAME" },
@@ -565,8 +566,6 @@ struct winbindd_async_dispatch_table {
 };
 
 static struct winbindd_async_dispatch_table async_nonpriv_table[] = {
-       { WINBINDD_PING, "PING",
-         wb_ping_send, wb_ping_recv },
        { WINBINDD_LOOKUPSID, "LOOKUPSID",
          winbindd_lookupsid_send, winbindd_lookupsid_recv },
        { WINBINDD_LOOKUPSIDS, "LOOKUPSIDS",
diff --git a/source3/winbindd/winbindd_misc.c b/source3/winbindd/winbindd_misc.c
index 964190e..c101269 100644
--- a/source3/winbindd/winbindd_misc.c
+++ b/source3/winbindd/winbindd_misc.c
@@ -502,6 +502,12 @@ void winbindd_dc_info(struct winbindd_cli_state *cli)
        request_ok(cli);
 }
 
+void winbindd_ping(struct winbindd_cli_state *state)
+{
+       DEBUG(3, ("[%5lu]: ping\n", (unsigned long)state->pid));
+       request_ok(state);
+}
+
 /* List various tidbits of information */
 
 void winbindd_info(struct winbindd_cli_state *state)
diff --git a/source3/winbindd/winbindd_proto.h 
b/source3/winbindd/winbindd_proto.h
index 6a63b15..bbc6841 100644
--- a/source3/winbindd/winbindd_proto.h
+++ b/source3/winbindd/winbindd_proto.h
@@ -529,12 +529,6 @@ bool parse_xidlist(TALLOC_CTX *mem_ctx, const char *xidstr,
 
 void winbindd_wins_byname(struct winbindd_cli_state *state);
 
-struct tevent_req *wb_ping_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
-                               struct winbindd_cli_state *cli,
-                               struct winbindd_request *request);
-NTSTATUS wb_ping_recv(struct tevent_req *req,
-                     struct winbindd_response *resp);
-
 enum winbindd_result winbindd_dual_ping(struct winbindd_domain *domain,
                                        struct winbindd_cli_state *state);
 
diff --git a/source3/winbindd/wscript_build b/source3/winbindd/wscript_build
index 48250ea..0adbe9c 100644
--- a/source3/winbindd/wscript_build
+++ b/source3/winbindd/wscript_build
@@ -198,7 +198,6 @@ bld.SAMBA3_BINARY('winbindd',
                  winbindd_idmap.c
                  winbindd_locator.c
                  winbindd_ndr.c
-                 wb_ping.c
                  wb_lookupsid.c
                  wb_lookupsids.c
                  wb_lookupname.c


-- 
Samba Shared Repository

Reply via email to