[PATCH] Found in my attic

Jeremy Allison jra at samba.org
Mon Jul 23 20:16:30 UTC 2018


On Mon, Jul 23, 2018 at 07:06:13PM +0200, Volker Lendecke via samba-technical wrote:
> Hi!
> 
> Some smaller ones plus the removal of the IRIX winbind nss plugin. It
> was the last user of winbindd_send_request/get_response which we can
> make static without that module. If Samba on IRIX is still relevant to
> someone, please speak up now :-)

http://support.sgi.com/irix/swupdates/ no longer responds.

I think it's dead, Jim :-).

RB+ from me, but I'll wait a day or so before pushing,
just in case anyone has more info on Irix.

FYI, we should also remove the Irix kernel oplock
code support at some point.

Jeremy.

> -- 
> SerNet GmbH, Bahnhofsallee 1b, 37081 Göttingen
> phone: +49-551-370000-0, fax: +49-551-370000-9
> AG Göttingen, HRB 2816, GF: Dr. Johannes Loxen
> http://www.sernet.de, mailto:kontakt at sernet.de

> From b021489e30a8e94e3158cd3455dd20076876f145 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Wed, 25 Apr 2018 11:51:36 +0200
> Subject: [PATCH 1/8] lib: Remove an #include "includes.h"
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/lib/cbuf.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/source3/lib/cbuf.c b/source3/lib/cbuf.c
> index 426ecdb5a3b..de0518d31d8 100644
> --- a/source3/lib/cbuf.c
> +++ b/source3/lib/cbuf.c
> @@ -27,8 +27,12 @@
>   */
>  
>  
> -#include "includes.h"
> +#include "replace.h"
> +#include "system/locale.h"
>  #include "cbuf.h"
> +#include <talloc.h>
> +#include <assert.h>
> +#include "lib/util/byteorder.h"
>  
>  
>  struct cbuf {
> @@ -307,7 +311,9 @@ int cbuf_print_quoted(cbuf* ost, const char* s, size_t len)
>  			if (isprint(*s) && ((*s == ' ') || !isspace(*s))) {
>  				ret = cbuf_putc(ost, *s);
>  			} else {
> -				ret = cbuf_printf(ost, "\\%02x", (uchar)*s);
> +				ret = cbuf_printf(ost,
> +						  "\\%02x",
> +						  (unsigned char)*s);
>  			}
>  		}
>  		s++;
> -- 
> 2.11.0
> 
> 
> From 9020e3bc6a0b40d927f115eaf2db23dd7efe657f Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Wed, 25 Apr 2018 11:53:00 +0200
> Subject: [PATCH 2/8] lib: Remove an #include "includes.h"
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/lib/srprs.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/source3/lib/srprs.c b/source3/lib/srprs.c
> index db0448c1788..80dbc96c854 100644
> --- a/source3/lib/srprs.c
> +++ b/source3/lib/srprs.c
> @@ -24,9 +24,11 @@
>   * @brief  A simple recursive parser.
>   */
>  
> -#include "includes.h"
> +#include "replace.h"
> +#include "system/locale.h"
>  #include "srprs.h"
>  #include "cbuf.h"
> +#include <assert.h>
>  
>  bool srprs_skipws(const char** ptr) {
>  	while (isspace(**ptr))
> -- 
> 2.11.0
> 
> 
> From 44acec96027a1d307cb03800c873f37b9fa1d451 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Fri, 4 May 2018 22:28:43 +0200
> Subject: [PATCH 3/8] lib: Fix prototype of srprs_str
> 
> Many callers use "-1" as the "len" argument. That's what ssize_t is for.
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/lib/srprs.c | 2 +-
>  source3/lib/srprs.h | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/source3/lib/srprs.c b/source3/lib/srprs.c
> index 80dbc96c854..02f4c80e27b 100644
> --- a/source3/lib/srprs.c
> +++ b/source3/lib/srprs.c
> @@ -44,7 +44,7 @@ bool srprs_char(const char** ptr, char c) {
>  	return false;
>  }
>  
> -bool srprs_str(const char** ptr, const char* str, size_t len)
> +bool srprs_str(const char** ptr, const char* str, ssize_t len)
>  {
>  	if (len == -1)
>  		len = strlen(str);
> diff --git a/source3/lib/srprs.h b/source3/lib/srprs.h
> index c1aec13e4af..1b3d355c1fb 100644
> --- a/source3/lib/srprs.h
> +++ b/source3/lib/srprs.h
> @@ -65,7 +65,7 @@ bool srprs_char(const char** ptr, char c);
>   *
>   * @return true if matched
>   */
> -bool srprs_str(const char** ptr, const char* str, size_t len);
> +bool srprs_str(const char** ptr, const char* str, ssize_t len);
>  
>  /**
>   * Match a single character from a set.
> -- 
> 2.11.0
> 
> 
> From a8d8530b2613dc06ce91f29d480b575da15d87d4 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Fri, 4 May 2018 14:33:55 +0200
> Subject: [PATCH 4/8] nsswitch: Remove IRIX support
> 
> According to wikipedia, IRIX has seen the last patch update in August 2006. As
> of now, www.sgi.com is unreachable. Probably this code has not been built in
> years. If someone wants to revive it, it can be found in the git history.
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  nsswitch/winbind_nss_irix.c | 633 --------------------------------------------
>  nsswitch/winbind_nss_irix.h |  42 ---
>  nsswitch/wscript_build      |   6 -
>  3 files changed, 681 deletions(-)
>  delete mode 100644 nsswitch/winbind_nss_irix.c
>  delete mode 100644 nsswitch/winbind_nss_irix.h
> 
> diff --git a/nsswitch/winbind_nss_irix.c b/nsswitch/winbind_nss_irix.c
> deleted file mode 100644
> index 66fa4b529d6..00000000000
> --- a/nsswitch/winbind_nss_irix.c
> +++ /dev/null
> @@ -1,633 +0,0 @@
> -/*
> -   Unix SMB/CIFS implementation.
> -
> -   Windows NT Domain nsswitch module
> -
> -   Copyright (C) Tim Potter 2000
> -   Copyright (C) James Peach 2006
> -
> -   This library is free software; you can redistribute it and/or
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 3 of the License, or (at your option) any later version.
> -
> -   This library 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
> -   Library General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public License
> -   along with this program.  If not, see <http://www.gnu.org/licenses/>.
> -*/
> -
> -#include "winbind_client.h"
> -
> -#ifndef PRINTF_ATTRIBUTE
> -#define PRINTF_ATTRIBUTE(m, n)
> -#endif
> -
> -#ifndef HAVE_ASPRINTF_DECL
> -/*PRINTFLIKE2 */
> -int asprintf(char **,const char *, ...) PRINTF_ATTRIBUTE(2,3);
> -#endif
> -
> -#ifdef HAVE_NS_API_H
> -#undef STATIC
> -#undef DYNAMIC
> -#include <ns_daemon.h>
> -#endif
> -
> -/* Maximum number of users to pass back over the unix domain socket
> -   per call. This is not a static limit on the total number of users
> -   or groups returned in total. */
> -
> -#define MAX_GETPWENT_USERS 250
> -#define MAX_GETGRENT_USERS 250
> -
> -/* Prototypes from wb_common.c */
> -
> -extern int winbindd_fd;
> -
> -#ifdef HAVE_NS_API_H
> -
> -/* IRIX version */
> -
> -static int send_next_request(nsd_file_t *, struct winbindd_request *);
> -static int do_list(int state, nsd_file_t *rq);
> -
> -static nsd_file_t *current_rq = NULL;
> -static int current_winbind_xid = 0;
> -static int next_winbind_xid = 0;
> -
> -typedef struct winbind_xid {
> -	int			xid;
> -	nsd_file_t		*rq;
> -	struct winbindd_request *request;
> -	struct winbind_xid	*next;
> -} winbind_xid_t;
> -
> -static winbind_xid_t *winbind_xids = (winbind_xid_t *)0;
> -
> -static int
> -winbind_xid_new(int xid, nsd_file_t *rq, struct winbindd_request *request)
> -{
> -	winbind_xid_t *new;
> -
> -	nsd_logprintf(NSD_LOG_LOW,
> -		"entering winbind_xid_new xid = %d rq = 0x%x, request = 0x%x\n",
> -		xid, rq, request);
> -	new = (winbind_xid_t *)nsd_calloc(1,sizeof(winbind_xid_t));
> -	if (!new) {
> -		nsd_logprintf(NSD_LOG_RESOURCE,"winbind_xid_new: failed malloc\n");
> -		return NSD_ERROR;
> -	}
> -
> -	new->xid = xid;
> -	new->rq = rq;
> -	new->request = request;
> -	new->next = winbind_xids;
> -	winbind_xids = new;
> -
> -	return NSD_CONTINUE;
> -}
> -
> -/*
> -** This routine will look down the xid list and return the request
> -** associated with an xid.  We remove the record if it is found.
> -*/
> -nsd_file_t *
> -winbind_xid_lookup(int xid, struct winbindd_request **requestp)
> -{
> -        winbind_xid_t **last, *dx;
> -        nsd_file_t *result=0;
> -
> -        for (last = &winbind_xids, dx = winbind_xids; dx && (dx->xid != xid);
> -            last = &dx->next, dx = dx->next);
> -        if (dx) {
> -                *last = dx->next;
> -                result = dx->rq;
> -		*requestp = dx->request;
> -                SAFE_FREE(dx);
> -        }
> -	nsd_logprintf(NSD_LOG_LOW,
> -		"entering winbind_xid_lookup xid = %d rq = 0x%x, request = 0x%x\n",
> -		xid, result, dx->request);
> -
> -        return result;
> -}
> -
> -static int
> -winbind_startnext_timeout(nsd_file_t **rqp, nsd_times_t *to)
> -{
> -	nsd_file_t *rq;
> -	struct winbindd_request *request;
> -
> -	nsd_logprintf(NSD_LOG_MIN, "timeout (winbind startnext)\n");
> -	rq = to->t_file;
> -	*rqp = rq;
> -	nsd_timeout_remove(rq);
> -	request = to->t_clientdata;
> -	return(send_next_request(rq, request));
> -}
> -
> -static void
> -dequeue_request(void)
> -{
> -	nsd_file_t *rq;
> -	struct winbindd_request *request;
> -
> -	/*
> -	 * Check for queued requests
> -	 */
> -	if (winbind_xids) {
> -	    nsd_logprintf(NSD_LOG_MIN, "timeout (winbind) unqueue xid %d\n",
> -			current_winbind_xid);
> -	    rq = winbind_xid_lookup(current_winbind_xid++, &request);
> -	    /* cause a timeout on the queued request so we can send it */
> -	    nsd_timeout_new(rq,1,winbind_startnext_timeout,request);
> -	}
> -}
> -
> -static int
> -do_request(nsd_file_t *rq, struct winbindd_request *request)
> -{
> -	if (winbind_xids == NULL) {
> -		/*
> -		 * No outstanding requests.
> -		 * Send off the request to winbindd
> -		 */
> -		nsd_logprintf(NSD_LOG_MIN, "lookup (winbind) sending request\n");
> -		return(send_next_request(rq, request));
> -	} else {
> -		/*
> -		 * Just queue it up for now - previous callout or timout
> -		 * will start it up
> -		 */
> -		nsd_logprintf(NSD_LOG_MIN,
> -			"lookup (winbind): queue request xid = %d\n",
> -			next_winbind_xid);
> -		return(winbind_xid_new(next_winbind_xid++, rq, request));
> -	}
> -}
> -
> -static int
> -winbind_callback(nsd_file_t **rqp, int fd)
> -{
> -	struct winbindd_response response;
> -	nsd_file_t *rq;
> -	NSS_STATUS status;
> -	char * result = NULL;
> -	size_t rlen;
> -
> -	dequeue_request();
> -
> -	nsd_logprintf(NSD_LOG_MIN, "entering callback (winbind)\n");
> -
> -	rq = current_rq;
> -	*rqp = rq;
> -
> -	nsd_timeout_remove(rq);
> -	nsd_callback_remove(fd);
> -
> -	ZERO_STRUCT(response);
> -	status = winbindd_get_response(&response);
> -
> -	if (status != NSS_STATUS_SUCCESS) {
> -		/* free any extra data area in response structure */
> -		winbindd_free_response(&response);
> -		nsd_logprintf(NSD_LOG_MIN,
> -			"callback (winbind) returning not found, status = %d\n",
> -			status);
> -
> -		switch (status) {
> -		    case NSS_STATUS_UNAVAIL:
> -			rq->f_status = NS_UNAVAIL;
> -			break;
> -		    case NSS_STATUS_TRYAGAIN:
> -			rq->f_status = NS_TRYAGAIN;
> -			break;
> -		    case NSS_STATUS_NOTFOUND:
> -			/* FALLTHRU */
> -		    default:
> -			rq->f_status = NS_NOTFOUND;
> -		}
> -
> -		return NSD_NEXT;
> -	}
> -
> -	switch ((int)rq->f_cmd_data) {
> -	    case WINBINDD_WINS_BYNAME:
> -	    case WINBINDD_WINS_BYIP:
> -		nsd_logprintf(NSD_LOG_MIN,
> -			"callback (winbind) WINS_BYNAME | WINS_BYIP\n");
> -
> -		rlen = asprintf(&result, "%s\n", response.data.winsresp);
> -		if (rlen == 0 || result == NULL) {
> -			return NSD_ERROR;
> -		}
> -
> -		winbindd_free_response(&response);
> -
> -		nsd_logprintf(NSD_LOG_MIN, "    %s\n", result);
> -		nsd_set_result(rq, NS_SUCCESS, result, rlen, DYNAMIC);
> -		return NSD_OK;
> -
> -	    case WINBINDD_GETPWUID:
> -	    case WINBINDD_GETPWNAM:
> -	    {
> -	        struct winbindd_pw *pw = &response.data.pw;
> -
> -	        nsd_logprintf(NSD_LOG_MIN,
> -			"callback (winbind) GETPWUID | GETPWUID\n");
> -
> -	        rlen = asprintf(&result,"%s:%s:%d:%d:%s:%s:%s\n",
> -	                        pw->pw_name,
> -	                        pw->pw_passwd,
> -	                        pw->pw_uid,
> -	                        pw->pw_gid,
> -	                        pw->pw_gecos,
> -	                        pw->pw_dir,
> -	                        pw->pw_shell);
> -	        if (rlen == 0 || result == NULL)
> -	            return NSD_ERROR;
> -
> -	        winbindd_free_response(&response);
> -
> -	        nsd_logprintf(NSD_LOG_MIN, "    %s\n", result);
> -	        nsd_set_result(rq, NS_SUCCESS, result, rlen, DYNAMIC);
> -	        return NSD_OK;
> -	    }
> -
> -	    case WINBINDD_GETGRNAM:
> -	    case WINBINDD_GETGRGID:
> -	    {
> -	        const struct winbindd_gr *gr = &response.data.gr;
> -	        const char * members;
> -
> -	        nsd_logprintf(NSD_LOG_MIN,
> -			"callback (winbind) GETGRNAM | GETGRGID\n");
> -
> -	        if (gr->num_gr_mem && response.extra_data.data) {
> -	                members = response.extra_data.data;
> -	        } else {
> -	                members = "";
> -	        }
> -
> -	        rlen = asprintf(&result, "%s:%s:%d:%s\n",
> -			    gr->gr_name, gr->gr_passwd, gr->gr_gid, members);
> -	        if (rlen == 0 || result == NULL)
> -	            return NSD_ERROR;
> -
> -	        winbindd_free_response(&response);
> -
> -	        nsd_logprintf(NSD_LOG_MIN, "    %s\n", result);
> -	        nsd_set_result(rq, NS_SUCCESS, result, rlen, DYNAMIC);
> -	        return NSD_OK;
> -	    }
> -
> -	    case WINBINDD_SETGRENT:
> -	    case WINBINDD_SETPWENT:
> -		nsd_logprintf(NSD_LOG_MIN,
> -			"callback (winbind) SETGRENT | SETPWENT\n");
> -		winbindd_free_response(&response);
> -		return(do_list(1,rq));
> -
> -	    case WINBINDD_GETGRENT:
> -	    case WINBINDD_GETGRLST:
> -	    {
> -	        int entries;
> -
> -	        nsd_logprintf(NSD_LOG_MIN,
> -		    "callback (winbind) GETGRENT | GETGRLIST %d responses\n",
> -		    response.data.num_entries);
> -
> -	        if (response.data.num_entries) {
> -	            const struct winbindd_gr *gr = &response.data.gr;
> -	            const char * members;
> -	            fstring grp_name;
> -	            int     i;
> -
> -	            gr = (struct winbindd_gr *)response.extra_data.data;
> -	            if (! gr ) {
> -	                nsd_logprintf(NSD_LOG_MIN, "     no extra_data\n");
> -	                winbindd_free_response(&response);
> -	                return NSD_ERROR;
> -	            }
> -
> -	            members = (char *)response.extra_data.data +
> -			(response.data.num_entries * sizeof(struct winbindd_gr));
> -
> -	            for (i = 0; i < response.data.num_entries; i++) {
> -	                snprintf(grp_name, sizeof(grp_name) - 1, "%s:%s:%d:",
> -	                            gr->gr_name, gr->gr_passwd, gr->gr_gid);
> -
> -	                nsd_append_element(rq, NS_SUCCESS, result, rlen);
> -	                nsd_append_result(rq, NS_SUCCESS,
> -				&members[gr->gr_mem_ofs],
> -	                        strlen(&members[gr->gr_mem_ofs]));
> -
> -	                /* Don't log the whole list, because it might be
> -	                 * _really_ long and we probably don't want to clobber
> -	                 * the log with it.
> -	                 */
> -	                nsd_logprintf(NSD_LOG_MIN, "    %s (...)\n", grp_name);
> -
> -	                gr++;
> -	            }
> -	        }
> -
> -	        entries = response.data.num_entries;
> -	        winbindd_free_response(&response);
> -	        if (entries < MAX_GETPWENT_USERS)
> -	            return(do_list(2,rq));
> -	        else
> -	            return(do_list(1,rq));
> -	    }
> -
> -	    case WINBINDD_GETPWENT:
> -	    {
> -		int entries;
> -
> -		nsd_logprintf(NSD_LOG_MIN,
> -			"callback (winbind) GETPWENT  %d responses\n",
> -			response.data.num_entries);
> -
> -		if (response.data.num_entries) {
> -		    struct winbindd_pw *pw = &response.data.pw;
> -		    int i;
> -
> -		    pw = (struct winbindd_pw *)response.extra_data.data;
> -		    if (! pw ) {
> -			nsd_logprintf(NSD_LOG_MIN, "     no extra_data\n");
> -			winbindd_free_response(&response);
> -			return NSD_ERROR;
> -		    }
> -		    for (i = 0; i < response.data.num_entries; i++) {
> -			result = NULL;
> -			rlen = asprintf(&result, "%s:%s:%d:%d:%s:%s:%s",
> -					pw->pw_name,
> -					pw->pw_passwd,
> -					pw->pw_uid,
> -					pw->pw_gid,
> -					pw->pw_gecos,
> -					pw->pw_dir,
> -					pw->pw_shell);
> -
> -			if (rlen != 0 && result != NULL) {
> -			    nsd_logprintf(NSD_LOG_MIN, "    %s\n",result);
> -			    nsd_append_element(rq, NS_SUCCESS, result, rlen);
> -			    free(result);
> -			}
> -
> -			pw++;
> -		    }
> -		}
> -
> -		entries = response.data.num_entries;
> -		winbindd_free_response(&response);
> -		if (entries < MAX_GETPWENT_USERS)
> -		    return(do_list(2,rq));
> -		else
> -		    return(do_list(1,rq));
> -	    }
> -
> -	    case WINBINDD_ENDGRENT:
> -	    case WINBINDD_ENDPWENT:
> -		nsd_logprintf(NSD_LOG_MIN, "callback (winbind) ENDGRENT | ENDPWENT\n");
> -		nsd_append_element(rq, NS_SUCCESS, "\n", 1);
> -		winbindd_free_response(&response);
> -		return NSD_NEXT;
> -
> -	    default:
> -		winbindd_free_response(&response);
> -		nsd_logprintf(NSD_LOG_MIN, "callback (winbind) invalid command %d\n", (int)rq->f_cmd_data);
> -		return NSD_NEXT;
> -	}
> -}
> -
> -static int
> -winbind_timeout(nsd_file_t **rqp, nsd_times_t *to)
> -{
> -	nsd_file_t *rq;
> -
> -	dequeue_request();
> -
> -	nsd_logprintf(NSD_LOG_MIN, "timeout (winbind)\n");
> -
> -	rq = to->t_file;
> -	*rqp = rq;
> -
> -	/* Remove the callback and timeout */
> -	nsd_callback_remove(winbindd_fd);
> -	nsd_timeout_remove(rq);
> -
> -	rq->f_status = NS_NOTFOUND;
> -	return NSD_NEXT;
> -}
> -
> -static int
> -send_next_request(nsd_file_t *rq, struct winbindd_request *request)
> -{
> -	NSS_STATUS status;
> -	long timeout;
> -
> -        switch (rq->f_index) {
> -                case LOOKUP:
> -                        timeout = nsd_attr_fetch_long(rq->f_attrs,
> -                                        "lookup_timeout", 10, 10);
> -                        break;
> -                case LIST:
> -                        timeout = nsd_attr_fetch_long(rq->f_attrs,
> -                                        "list_timeout", 10, 10);
> -                        break;
> -                default:
> -	                nsd_logprintf(NSD_LOG_OPER,
> -                                "send_next_request (winbind) "
> -                                "invalid request type %d\n", rq->f_index);
> -                        rq->f_status = NS_BADREQ;
> -                        return NSD_NEXT;
> -        }
> -
> -	nsd_logprintf(NSD_LOG_MIN,
> -		"send_next_request (winbind) %d, timeout = %d sec\n",
> -			rq->f_cmd_data, timeout);
> -	status = winbindd_send_request((int)rq->f_cmd_data,0,request);
> -	SAFE_FREE(request);
> -
> -	if (status != NSS_STATUS_SUCCESS) {
> -		nsd_logprintf(NSD_LOG_MIN,
> -			"send_next_request (winbind) error status = %d\n",
> -			status);
> -		rq->f_status = status;
> -		return NSD_NEXT;
> -	}
> -
> -	current_rq = rq;
> -
> -	/*
> -	 * Set up callback and timeouts
> -	 */
> -	nsd_logprintf(NSD_LOG_MIN, "send_next_request (winbind) fd = %d\n",
> -		winbindd_fd);
> -
> -	nsd_callback_new(winbindd_fd, winbind_callback, NSD_READ);
> -	nsd_timeout_new(rq, timeout * 1000, winbind_timeout, NULL);
> -	return NSD_CONTINUE;
> -}
> -
> -int init(void)
> -{
> -	nsd_logprintf(NSD_LOG_MIN, "entering init (winbind)\n");
> -	return(NSD_OK);
> -}
> -
> -int lookup(nsd_file_t *rq)
> -{
> -	char *map;
> -	char *key;
> -	struct winbindd_request *request;
> -
> -	nsd_logprintf(NSD_LOG_MIN, "entering lookup (winbind)\n");
> -	if (! rq)
> -		return NSD_ERROR;
> -
> -	map = nsd_attr_fetch_string(rq->f_attrs, "table", (char*)0);
> -	key = nsd_attr_fetch_string(rq->f_attrs, "key", (char*)0);
> -	if (! map || ! key) {
> -		nsd_logprintf(NSD_LOG_MIN, "lookup (winbind) table or key not defined\n");
> -		rq->f_status = NS_BADREQ;
> -		return NSD_ERROR;
> -	}
> -
> -	nsd_logprintf(NSD_LOG_MIN, "lookup (winbind %s)\n",map);
> -
> -	request = (struct winbindd_request *)nsd_calloc(1,sizeof(struct winbindd_request));
> -	if (! request) {
> -		nsd_logprintf(NSD_LOG_RESOURCE,
> -			"lookup (winbind): failed malloc\n");
> -		return NSD_ERROR;
> -	}
> -
> -	if (strcasecmp(map,"passwd.byuid") == 0) {
> -	    request->data.uid = atoi(key);
> -	    rq->f_cmd_data = (void *)WINBINDD_GETPWUID;
> -	} else if (strcasecmp(map,"passwd.byname") == 0) {
> -	    strncpy(request->data.username, key,
> -		sizeof(request->data.username) - 1);
> -	    request->data.username[sizeof(request->data.username) - 1] = '\0';
> -	    rq->f_cmd_data = (void *)WINBINDD_GETPWNAM;
> -	} else if (strcasecmp(map,"group.byname") == 0) {
> -	    strncpy(request->data.groupname, key,
> -		sizeof(request->data.groupname) - 1);
> -	    request->data.groupname[sizeof(request->data.groupname) - 1] = '\0';
> -	    rq->f_cmd_data = (void *)WINBINDD_GETGRNAM;
> -	} else if (strcasecmp(map,"group.bygid") == 0) {
> -	    request->data.gid = atoi(key);
> -	    rq->f_cmd_data = (void *)WINBINDD_GETGRGID;
> -	} else if (strcasecmp(map,"hosts.byname") == 0) {
> -	    strncpy(request->data.winsreq, key, sizeof(request->data.winsreq) - 1);
> -	    request->data.winsreq[sizeof(request->data.winsreq) - 1] = '\0';
> -	    rq->f_cmd_data = (void *)WINBINDD_WINS_BYNAME;
> -	} else if (strcasecmp(map,"hosts.byaddr") == 0) {
> -	    strncpy(request->data.winsreq, key, sizeof(request->data.winsreq) - 1);
> -	    request->data.winsreq[sizeof(request->data.winsreq) - 1] = '\0';
> -	    rq->f_cmd_data = (void *)WINBINDD_WINS_BYIP;
> -	} else {
> -		/*
> -		 * Don't understand this map - just return not found
> -		 */
> -		nsd_logprintf(NSD_LOG_MIN, "lookup (winbind) unknown table\n");
> -		SAFE_FREE(request);
> -		rq->f_status = NS_NOTFOUND;
> -		return NSD_NEXT;
> -	}
> -
> -	return(do_request(rq, request));
> -}
> -
> -int list(nsd_file_t *rq)
> -{
> -	char *map;
> -
> -	nsd_logprintf(NSD_LOG_MIN, "entering list (winbind)\n");
> -	if (! rq)
> -		return NSD_ERROR;
> -
> -	map = nsd_attr_fetch_string(rq->f_attrs, "table", (char*)0);
> -	if (! map ) {
> -		nsd_logprintf(NSD_LOG_MIN, "list (winbind) table not defined\n");
> -		rq->f_status = NS_BADREQ;
> -		return NSD_ERROR;
> -	}
> -
> -	nsd_logprintf(NSD_LOG_MIN, "list (winbind %s)\n",map);
> -
> -	return (do_list(0,rq));
> -}
> -
> -static int
> -do_list(int state, nsd_file_t *rq)
> -{
> -	char *map;
> -	struct winbindd_request *request;
> -
> -	nsd_logprintf(NSD_LOG_MIN, "entering do_list (winbind) state = %d\n",state);
> -
> -	map = nsd_attr_fetch_string(rq->f_attrs, "table", (char*)0);
> -	request = (struct winbindd_request *)nsd_calloc(1,sizeof(struct winbindd_request));
> -	if (! request) {
> -		nsd_logprintf(NSD_LOG_RESOURCE,
> -			"do_list (winbind): failed malloc\n");
> -		return NSD_ERROR;
> -	}
> -
> -	if (strcasecmp(map,"passwd.byname") == 0) {
> -	    switch (state) {
> -		case 0:
> -		    rq->f_cmd_data = (void *)WINBINDD_SETPWENT;
> -		    break;
> -		case 1:
> -		    request->data.num_entries = MAX_GETPWENT_USERS;
> -		    rq->f_cmd_data = (void *)WINBINDD_GETPWENT;
> -		    break;
> -		case 2:
> -		    rq->f_cmd_data = (void *)WINBINDD_ENDPWENT;
> -		    break;
> -		default:
> -		    nsd_logprintf(NSD_LOG_MIN, "do_list (winbind) unknown state\n");
> -		    SAFE_FREE(request);
> -		    rq->f_status = NS_NOTFOUND;
> -		    return NSD_NEXT;
> -	    }
> -	} else if (strcasecmp(map,"group.byname") == 0) {
> -	    switch (state) {
> -		case 0:
> -		    rq->f_cmd_data = (void *)WINBINDD_SETGRENT;
> -		    break;
> -		case 1:
> -		    request->data.num_entries = MAX_GETGRENT_USERS;
> -		    rq->f_cmd_data = (void *)WINBINDD_GETGRENT;
> -		    break;
> -		case 2:
> -		    rq->f_cmd_data = (void *)WINBINDD_ENDGRENT;
> -		    break;
> -		default:
> -		    nsd_logprintf(NSD_LOG_MIN, "do_list (winbind) unknown state\n");
> -		    SAFE_FREE(request);
> -		    rq->f_status = NS_NOTFOUND;
> -		    return NSD_NEXT;
> -	    }
> -	} else {
> -		/*
> -		 * Don't understand this map - just return not found
> -		 */
> -		nsd_logprintf(NSD_LOG_MIN, "do_list (winbind) unknown table\n");
> -		SAFE_FREE(request);
> -		rq->f_status = NS_NOTFOUND;
> -		return NSD_NEXT;
> -	}
> -
> -	return(do_request(rq, request));
> -}
> -
> -#endif /* HAVE_NS_API_H */
> diff --git a/nsswitch/winbind_nss_irix.h b/nsswitch/winbind_nss_irix.h
> deleted file mode 100644
> index b47d23e204b..00000000000
> --- a/nsswitch/winbind_nss_irix.h
> +++ /dev/null
> @@ -1,42 +0,0 @@
> -/*
> -   Unix SMB/CIFS implementation.
> -
> -   Winbind daemon for ntdom nss module
> -
> -   Copyright (C) Tim Potter 2000
> -
> -   This library is free software; you can redistribute it and/or
> -   modify it under the terms of the GNU Lesser General Public
> -   License as published by the Free Software Foundation; either
> -   version 3 of the License, or (at your option) any later version.
> -
> -   This library 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
> -   Library General Public License for more details.
> -
> -   You should have received a copy of the GNU Lesser General Public License
> -   along with this program.  If not, see <http://www.gnu.org/licenses/>.
> -*/
> -
> -#ifndef _WINBIND_NSS_IRIX_H
> -#define _WINBIND_NSS_IRIX_H
> -
> -/* following required to prevent warnings of double definition
> - * of datum from ns_api.h
> -*/
> -#ifdef DATUM
> -#define _DATUM_DEFINED
> -#endif
> -
> -#include <ns_api.h>
> -
> -typedef enum
> -{
> -  NSS_STATUS_SUCCESS=NS_SUCCESS,
> -  NSS_STATUS_NOTFOUND=NS_NOTFOUND,
> -  NSS_STATUS_UNAVAIL=NS_UNAVAIL,
> -  NSS_STATUS_TRYAGAIN=NS_TRYAGAIN
> -} NSS_STATUS;
> -
> -#endif /* _WINBIND_NSS_IRIX_H */
> diff --git a/nsswitch/wscript_build b/nsswitch/wscript_build
> index dd1952b799b..a87e65833d7 100644
> --- a/nsswitch/wscript_build
> +++ b/nsswitch/wscript_build
> @@ -72,12 +72,6 @@ elif (host_os.rfind('netbsd') > -1):
>  				  source='winbind_nss_linux.c winbind_nss_netbsd.c',
>  				  deps='winbind-client', 
>  				  realname='libnss_winbind.so')
> -elif (host_os.rfind('irix') > -1):
> -	bld.SAMBA_LIBRARY('ns_winbind',
> -			  source='winbind_nss_irix.c',
> -			  deps='winbind-client', 
> -			  realname='libns_winbind.so')
> -
>  elif Utils.unversioned_sys_platform() == 'sunos':
>  	bld.SAMBA_LIBRARY('nss_winbind',
>  			  source='winbind_nss_solaris.c winbind_nss_linux.c',
> -- 
> 2.11.0
> 
> 
> From eb531f5e0eccc022b8208384600a80d7160007e7 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Fri, 4 May 2018 14:40:12 +0200
> Subject: [PATCH 5/8] nsswitch: Make two functions static
> 
> nss_irix was the only external user
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  nsswitch/wb_common.c      | 12 +++++++-----
>  nsswitch/winbind_client.h |  5 -----
>  2 files changed, 7 insertions(+), 10 deletions(-)
> 
> diff --git a/nsswitch/wb_common.c b/nsswitch/wb_common.c
> index 6768fde535b..df32789e177 100644
> --- a/nsswitch/wb_common.c
> +++ b/nsswitch/wb_common.c
> @@ -632,9 +632,11 @@ static int winbindd_read_reply(struct winbindd_context *ctx,
>   * send simple types of requests
>   */
>  
> -NSS_STATUS winbindd_send_request(struct winbindd_context *ctx,
> -				 int req_type, int need_priv,
> -				 struct winbindd_request *request)
> +static NSS_STATUS winbindd_send_request(
> +	struct winbindd_context *ctx,
> +	int req_type,
> +	int need_priv,
> +	struct winbindd_request *request)
>  {
>  	struct winbindd_request lrequest;
>  
> @@ -682,8 +684,8 @@ NSS_STATUS winbindd_send_request(struct winbindd_context *ctx,
>   * Get results from winbindd request
>   */
>  
> -NSS_STATUS winbindd_get_response(struct winbindd_context *ctx,
> -				 struct winbindd_response *response)
> +static NSS_STATUS winbindd_get_response(struct winbindd_context *ctx,
> +					struct winbindd_response *response)
>  {
>  	struct winbindd_response lresponse;
>  
> diff --git a/nsswitch/winbind_client.h b/nsswitch/winbind_client.h
> index d6b46fcc4f0..fd39ea39b4e 100644
> --- a/nsswitch/winbind_client.h
> +++ b/nsswitch/winbind_client.h
> @@ -35,11 +35,6 @@ struct winbindd_context *winbindd_ctx_create(void);
>  void winbindd_ctx_free(struct winbindd_context *ctx);
>  
>  void winbindd_free_response(struct winbindd_response *response);
> -NSS_STATUS winbindd_send_request(struct winbindd_context *ctx,
> -				 int req_type, int need_priv,
> -				 struct winbindd_request *request);
> -NSS_STATUS winbindd_get_response(struct winbindd_context *ctx,
> -				 struct winbindd_response *response);
>  NSS_STATUS winbindd_request_response(struct winbindd_context *ctx,
>  				     int req_type,
>  				     struct winbindd_request *request,
> -- 
> 2.11.0
> 
> 
> From 4d0a6585ca05f13bf9fd0ebf8bebbefeb5ad0599 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Fri, 4 May 2018 15:23:18 +0200
> Subject: [PATCH 6/8] nsswitch: Correct users of "ctx->is_privileged"
> 
> winbindd_context->is_privileged is a bool
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  nsswitch/wb_common.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/nsswitch/wb_common.c b/nsswitch/wb_common.c
> index df32789e177..42b341b8c1c 100644
> --- a/nsswitch/wb_common.c
> +++ b/nsswitch/wb_common.c
> @@ -37,7 +37,7 @@ struct winbindd_context {
>  
>  static struct winbindd_context wb_global_ctx = {
>  	.winbindd_fd = -1,
> -	.is_privileged = 0,
> +	.is_privileged = false,
>  	.our_pid = 0
>  };
>  
> @@ -371,7 +371,7 @@ static int winbind_open_pipe_sock(struct winbindd_context *ctx,
>  		ctx->our_pid = getpid();
>  	}
>  
> -	if ((need_priv != 0) && (ctx->is_privileged == 0)) {
> +	if ((need_priv != 0) && !ctx->is_privileged) {
>  		winbind_close_sock(ctx);
>  	}
>  
> @@ -389,7 +389,7 @@ static int winbind_open_pipe_sock(struct winbindd_context *ctx,
>  		return -1;
>  	}
>  
> -	ctx->is_privileged = 0;
> +	ctx->is_privileged = false;
>  
>  	/* version-check the socket */
>  
> @@ -422,13 +422,13 @@ static int winbind_open_pipe_sock(struct winbindd_context *ctx,
>  		if (fd != -1) {
>  			close(ctx->winbindd_fd);
>  			ctx->winbindd_fd = fd;
> -			ctx->is_privileged = 1;
> +			ctx->is_privileged = true;
>  		}
>  
>  		SAFE_FREE(response.extra_data.data);
>  	}
>  
> -	if (ctx->is_privileged == 0) {
> +	if (!ctx->is_privileged) {
>  		return -1;
>  	}
>  
> -- 
> 2.11.0
> 
> 
> From 48fd6f5662e8183c6a7e9669077509b9fed437a1 Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Fri, 4 May 2018 21:07:35 +0200
> Subject: [PATCH 7/8] winbind: Align integer types
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/winbindd/winbindd_misc.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/source3/winbindd/winbindd_misc.c b/source3/winbindd/winbindd_misc.c
> index 46273a99a1a..99606ca4cf5 100644
> --- a/source3/winbindd/winbindd_misc.c
> +++ b/source3/winbindd/winbindd_misc.c
> @@ -209,7 +209,7 @@ bool winbindd_list_trusted_domains(struct winbindd_cli_state *state)
>  	size_t num_domains = 0;
>  	int extra_data_len = 0;
>  	char *extra_data = NULL;
> -	int i = 0;
> +	size_t i = 0;
>  	bool ret = false;
>  
>  	DEBUG(3, ("[%5lu]: list trusted domains\n",
> @@ -277,7 +277,7 @@ done:
>  enum winbindd_result winbindd_dual_list_trusted_domains(struct winbindd_domain *domain,
>  							struct winbindd_cli_state *state)
>  {
> -	int i;
> +	uint32_t i;
>  	int extra_data_len = 0;
>  	char *extra_data;
>  	NTSTATUS result;
> -- 
> 2.11.0
> 
> 
> From 1e0a2b857cbe499c1516907db670a2264d12b57d Mon Sep 17 00:00:00 2001
> From: Volker Lendecke <vl at samba.org>
> Date: Thu, 3 May 2018 11:48:45 +0200
> Subject: [PATCH 8/8] winbind: Move variable declarations close to their use
> 
> Signed-off-by: Volker Lendecke <vl at samba.org>
> ---
>  source3/winbindd/winbindd.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c
> index 254d93b344d..5e273762ff1 100644
> --- a/source3/winbindd/winbindd.c
> +++ b/source3/winbindd/winbindd.c
> @@ -1084,9 +1084,6 @@ static void winbind_client_processed(struct tevent_req *req)
>  
>  static void remove_client(struct winbindd_cli_state *state)
>  {
> -	char c = 0;
> -	int nwritten;
> -
>  	/* It's a dead client - hold a funeral */
>  
>  	if (state == NULL) {
> @@ -1113,6 +1110,9 @@ static void remove_client(struct winbindd_cli_state *state)
>  	TALLOC_FREE(state->io_req);
>  
>  	if (state->sock != -1) {
> +		char c = 0;
> +		int nwritten;
> +
>  		/* tell client, we are closing ... */
>  		nwritten = write(state->sock, &c, sizeof(c));
>  		if (nwritten == -1) {
> -- 
> 2.11.0
> 




More information about the samba-technical mailing list