[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