[PATCH] Found in my attic

Volker Lendecke Volker.Lendecke at SerNet.DE
Mon Jul 23 17:06:13 UTC 2018


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 :-)

Volker

-- 
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
-------------- next part --------------
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