changeset 4953:0afa9b3bf89e

6514060 nscd consumes all the memory that it can 6591680 users failed to log in at the first attempt but could log in at the second attempt
author michen
date Mon, 27 Aug 2007 16:34:51 -0700
parents a610b3d5cfbb
children a7443d15b828
files usr/src/cmd/nscd/nscd_nswstate.c usr/src/lib/libsldap/common/ns_reads.c usr/src/lib/nsswitch/ldap/common/getnetgrent.c usr/src/lib/nsswitch/ldap/common/ldap_common.c usr/src/lib/nsswitch/ldap/common/ldap_common.h
diffstat 5 files changed, 233 insertions(+), 187 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/nscd/nscd_nswstate.c	Mon Aug 27 16:26:46 2007 -0700
+++ b/usr/src/cmd/nscd/nscd_nswstate.c	Mon Aug 27 16:34:51 2007 -0700
@@ -63,7 +63,7 @@
 		if ((*s->nsw_cfg_p)->nobase != 1)
 			_nscd_release((nscd_acc_data_t *)s->nsw_cfg_p);
 		else
-			_nscd_free_nsw_config(*s->nsw_cfg_p);
+			(void) _nscd_set((nscd_acc_data_t *)s->nsw_cfg_p, NULL);
 
 	if (s->be_db_pp != NULL) {
 		for (i = 0; i < s->max_src; i++) {
--- a/usr/src/lib/libsldap/common/ns_reads.c	Mon Aug 27 16:26:46 2007 -0700
+++ b/usr/src/lib/libsldap/common/ns_reads.c	Mon Aug 27 16:34:51 2007 -0700
@@ -1624,8 +1624,10 @@
 	int		rc;
 	int		fail_if_new_pwd_reqd = 1;
 
-	if (cookie->connectionId > -1)
+	if (cookie->connectionId > -1) {
 		DropConnection(cookie->connectionId, cookie->i_flags);
+		cookie->connectionId = -1;
+	}
 
 	rc = __s_api_getConnection(NULL, cookie->i_flags,
 	    cookie->i_auth, &connectionId, &conp,
@@ -1663,8 +1665,10 @@
 	int		rc;
 	int		fail_if_new_pwd_reqd = 1;
 
-	if (cookie->connectionId > -1)
+	if (cookie->connectionId > -1) {
 		DropConnection(cookie->connectionId, cookie->i_flags);
+		cookie->connectionId = -1;
+	}
 
 	rc = __s_api_getConnection(cookie->refpos->refHost, 0,
 	    cookie->i_auth, &connectionId, &conp,
@@ -2066,15 +2070,18 @@
 	ns_ldap_error_t **errorp;
 
 	errorp = &error;
-	cookie->err_rc = 0;
 	cookie->state = state;
 	errstr[0] = '\0';
 
 	for (;;) {
 		switch (cookie->state) {
 		case CLEAR_RESULTS:
-			(void) ldap_abandon_ext(cookie->conn->ld,
-			    cookie->msgId, NULL, NULL);
+			if (cookie->conn != NULL && cookie->conn->ld != NULL &&
+			    cookie->connectionId != -1 && cookie->msgId != 0) {
+				(void) ldap_abandon_ext(cookie->conn->ld,
+				    cookie->msgId, NULL, NULL);
+				cookie->msgId = 0;
+			}
 			cookie->new_state = EXIT;
 			break;
 		case GET_ACCT_MGMT_INFO:
@@ -2967,8 +2974,12 @@
 			cookie->result = NULL;
 			*vcookie = (void *)cookie;
 			return (NS_LDAP_SUCCESS);
+		case LDAP_ERROR:
+			state = search_state_machine(cookie, state, ONE_STEP);
+			state = search_state_machine(cookie, CLEAR_RESULTS,
+			    ONE_STEP);
+			/* FALLTHROUGH */
 		case ERROR:
-		case LDAP_ERROR:
 			rc = cookie->err_rc;
 			*errorp = cookie->errorp;
 			cookie->errorp = NULL;
@@ -3026,8 +3037,12 @@
 			*result = cookie->result;
 			cookie->result = NULL;
 			return (NS_LDAP_SUCCESS);
+		case LDAP_ERROR:
+			state = search_state_machine(cookie, state, ONE_STEP);
+			state = search_state_machine(cookie, CLEAR_RESULTS,
+			    ONE_STEP);
+			/* FALLTHROUGH */
 		case ERROR:
-		case LDAP_ERROR:
 			rc = cookie->err_rc;
 			*errorp = cookie->errorp;
 			cookie->errorp = NULL;
--- a/usr/src/lib/nsswitch/ldap/common/getnetgrent.c	Mon Aug 27 16:26:46 2007 -0700
+++ b/usr/src/lib/nsswitch/ldap/common/getnetgrent.c	Mon Aug 27 16:34:51 2007 -0700
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -123,7 +123,7 @@
 
 	if (ng == NULL) {
 		ng_new = (netgroup_name_t *)
-			calloc(1, sizeof (netgroup_name_t));
+		    calloc(1, sizeof (netgroup_name_t));
 		if (ng_new == NULL)
 			return (-1);
 		ng_new->name = strdup(name);
@@ -424,7 +424,7 @@
 	} else {
 		for (; *attr; attr++) {
 			if (strlcpy(triple, *attr,
-					sizeof (triple)) >= sizeof (triple))
+			    sizeof (triple)) >= sizeof (triple))
 				continue;
 			if (split_triple(triple, &thost, &tuser, &tdomain) != 0)
 				continue;
@@ -433,7 +433,7 @@
 					if (strcasecmp(thost, phost[i]) == 0)
 						break;
 				if (i == nhost)
-				    continue;
+					continue;
 			}
 			if (tuser != NULL && *tuser != '\0' && nusers != 0) {
 				for (i = 0; i < nusers; i++)
@@ -443,7 +443,7 @@
 					continue;
 			}
 			if (tdomain != NULL && *tdomain != '\0' &&
-					ndomains != 0) {
+			    ndomains != 0) {
 				for (i = 0; i < ndomains; i++)
 					if (domcmp(tdomain, pdomains[i]) == 0)
 						break;
@@ -463,8 +463,8 @@
 	ns_ldap_entry_t	*entry;
 
 	for (entry = result->entry; entry != NULL; entry = entry->next)
-	    if (match_triple_entry(ia, entry) == 1)
-		return (1);
+		if (match_triple_entry(ia, entry) == 1)
+			return (1);
 
 	return (0);
 }
@@ -496,9 +496,9 @@
 	int		ret = 0;
 
 	for (entry = result->entry; entry != NULL; entry = entry->next) {
-	    ret = add_netgroup_member_entry(entry, tab);
-	    if (ret != 0)
-		break;
+		ret = add_netgroup_member_entry(entry, tab);
+		if (ret != 0)
+			break;
 	}
 	return (ret);
 }
@@ -517,6 +517,7 @@
 	int			rc;
 	void			*cookie = NULL;
 	nss_status_t		status = NSS_NOTFOUND;
+	nss_status_t		status1;
 	netgroup_table_t	tab;
 	netgroup_name_t		*ng;
 	int			ret;
@@ -524,47 +525,68 @@
 	(void) memset(&tab, 0, sizeof (tab));
 
 	if (add_netgroup_name(netgrname, &tab) != 0)
-	    return ((nss_status_t)NSS_NOTFOUND);
+		return ((nss_status_t)NSS_NOTFOUND);
 
 	while ((ng = get_next_netgroup(&tab)) != NULL) {
-	    if (_ldap_filter_name(name, ng->name, sizeof (name)) != 0)
-		break;
-	    ret = snprintf(searchfilter, sizeof (searchfilter), _F_SETMEMBER,
+		if (_ldap_filter_name(name, ng->name, sizeof (name)) != 0)
+			break;
+		ret = snprintf(searchfilter, sizeof (searchfilter),
+		    _F_SETMEMBER, name);
+		if (ret >= sizeof (searchfilter) || ret < 0)
+			break;
+
+		ret = snprintf(userdata, sizeof (userdata), _F_SETMEMBER_SSD,
 		    name);
-	    if (ret >= sizeof (searchfilter) || ret < 0)
-		break;
-
-	    ret = snprintf(userdata, sizeof (userdata), _F_SETMEMBER_SSD, name);
-	    if (ret >= sizeof (userdata) || ret < 0)
-		break;
+		if (ret >= sizeof (userdata) || ret < 0)
+			break;
 
-	    rc = __ns_ldap_firstEntry(_NETGROUP, searchfilter,
-		_merge_SSD_filter, netgrent_attrs, NULL, 0, &cookie, &result,
-		&error, userdata);
+		rc = __ns_ldap_firstEntry(_NETGROUP, searchfilter,
+		    _merge_SSD_filter, netgrent_attrs, NULL, 0, &cookie,
+		    &result, &error, userdata);
 
-	    (void) __ns_ldap_freeError(&error);
-	    while (rc == NS_LDAP_SUCCESS && result != NULL) {
-		if (match_triple(ia, result) == 1) {
-		    /* We found a match */
-		    ia->status = NSS_NETGR_FOUND;
-		    status = NSS_SUCCESS;
-		    break;
+		if (error != NULL) {
+			status1 = switch_err(rc, error);
+			if (status1 == NSS_TRYAGAIN) {
+				(void) __ns_ldap_freeError(&error);
+				free_netgroup_table(&tab);
+				return (status1);
+			}
 		}
 
-		rc = add_netgroup_member(result, &tab);
-		(void) __ns_ldap_freeResult(&result);
-
-		if (rc != NS_LDAP_SUCCESS)
-			break;
-		rc = __ns_ldap_nextEntry(cookie, &result, &error);
 		(void) __ns_ldap_freeError(&error);
-	    }
-	    (void) __ns_ldap_freeResult(&result);
-	    (void) __ns_ldap_endEntry(&cookie, &error);
-	    (void) __ns_ldap_freeError(&error);
+		while (rc == NS_LDAP_SUCCESS && result != NULL) {
+			if (match_triple(ia, result) == 1) {
+				/* We found a match */
+				ia->status = NSS_NETGR_FOUND;
+				status = NSS_SUCCESS;
+				break;
+			}
+
+			rc = add_netgroup_member(result, &tab);
+			(void) __ns_ldap_freeResult(&result);
 
-	    if (status == NSS_SUCCESS ||
-			(rc != NS_LDAP_SUCCESS && rc != NS_LDAP_NOTFOUND))
+			if (rc != NS_LDAP_SUCCESS)
+				break;
+			rc = __ns_ldap_nextEntry(cookie, &result, &error);
+			if (error != NULL) {
+				status1 = switch_err(rc, error);
+				if (status1 == NSS_TRYAGAIN) {
+					free_netgroup_table(&tab);
+					(void) __ns_ldap_freeError(&error);
+					(void) __ns_ldap_endEntry(&cookie,
+					    &error);
+					(void) __ns_ldap_freeError(&error);
+					return (status1);
+				}
+			}
+			(void) __ns_ldap_freeError(&error);
+		}
+		(void) __ns_ldap_freeResult(&result);
+		(void) __ns_ldap_endEntry(&cookie, &error);
+		(void) __ns_ldap_freeError(&error);
+
+		if (status == NSS_SUCCESS ||
+		    (rc != NS_LDAP_SUCCESS && rc != NS_LDAP_NOTFOUND))
 		break;
 	}
 
@@ -587,16 +609,16 @@
 #ifdef DEBUG
 	(void) fprintf(stdout, "\n[getnetgrent.c: netgr_in]\n");
 	(void) fprintf(stdout, "\tmachine: argc[%d]='%s' user: "
-			    "argc[%d]='%s',\n\tdomain:argc[%d]='%s' "
-			    "netgroup: argc[%d]='%s'\n",
-			    NSS_NETGR_MACHINE,
-			    PRINT_VAL(ia->arg[NSS_NETGR_MACHINE]),
-			    NSS_NETGR_USER,
-			    PRINT_VAL(ia->arg[NSS_NETGR_USER]),
-			    NSS_NETGR_DOMAIN,
-			    PRINT_VAL(ia->arg[NSS_NETGR_DOMAIN]),
-			    NSS_NETGR_N,
-			    PRINT_VAL(ia->arg[NSS_NETGR_N]));
+	    "argc[%d]='%s',\n\tdomain:argc[%d]='%s' "
+	    "netgroup: argc[%d]='%s'\n",
+	    NSS_NETGR_MACHINE,
+	    PRINT_VAL(ia->arg[NSS_NETGR_MACHINE]),
+	    NSS_NETGR_USER,
+	    PRINT_VAL(ia->arg[NSS_NETGR_USER]),
+	    NSS_NETGR_DOMAIN,
+	    PRINT_VAL(ia->arg[NSS_NETGR_DOMAIN]),
+	    NSS_NETGR_N,
+	    PRINT_VAL(ia->arg[NSS_NETGR_N]));
 	(void) fprintf(stdout, "\tgroups='%s'\n", netgrname);
 #endif	/* DEBUG */
 
@@ -734,107 +756,115 @@
 		return ((nss_status_t)NSS_SUCCESS);
 
 	for (;;) {
-	    while (p->cookie == NULL) {
-		ng = get_next_netgroup(&p->tab);
-		if (ng == NULL)	 /* no more */
-		    break;
+		while (p->cookie == NULL) {
+			ng = get_next_netgroup(&p->tab);
+			if (ng == NULL)	 /* no more */
+				break;
 
-		if (_ldap_filter_name(name, ng->name, sizeof (name)) != 0)
-			break;
+			if (_ldap_filter_name(name, ng->name,
+			    sizeof (name)) != 0)
+				break;
 
-		ret = snprintf(searchfilter, sizeof (searchfilter),
-			_F_SETMEMBER, name);
-		if (ret >= sizeof (searchfilter) || ret < 0)
-			break;
+			ret = snprintf(searchfilter,
+			    sizeof (searchfilter),
+			    _F_SETMEMBER, name);
+			if (ret >= sizeof (searchfilter) || ret < 0)
+				break;
 
-		ret = snprintf(userdata, sizeof (userdata), _F_SETMEMBER_SSD,
-			name);
-		if (ret >= sizeof (userdata) || ret < 0)
-			break;
+			ret = snprintf(userdata, sizeof (userdata),
+			    _F_SETMEMBER_SSD, name);
+			if (ret >= sizeof (userdata) || ret < 0)
+				break;
 
-		result = NULL;
-		rc = __ns_ldap_firstEntry(_NETGROUP, searchfilter,
-			_merge_SSD_filter, netgrent_attrs, NULL, 0, &cookie,
-			&result, &error, userdata);
-		(void) __ns_ldap_freeError(&error);
+			result = NULL;
+			rc = __ns_ldap_firstEntry(_NETGROUP,
+			    searchfilter,
+			    _merge_SSD_filter, netgrent_attrs,
+			    NULL, 0, &cookie,
+			    &result, &error, userdata);
+			(void) __ns_ldap_freeError(&error);
 
-		if (rc == NS_LDAP_SUCCESS && result != NULL) {
-			p->cookie = cookie;
-			p->results = result;
-			break;
+			if (rc == NS_LDAP_SUCCESS && result != NULL) {
+				p->cookie = cookie;
+				p->results = result;
+				break;
+			}
+			(void) __ns_ldap_freeResult(&result);
+			(void) __ns_ldap_endEntry(&cookie, &error);
+			(void) __ns_ldap_freeError(&error);
 		}
-		(void) __ns_ldap_freeResult(&result);
-		(void) __ns_ldap_endEntry(&cookie, &error);
-		(void) __ns_ldap_freeError(&error);
-	    }
-	    if (p->cookie == NULL)
-		break;
-	    if (p->results == NULL) {
-		result = NULL;
-		rc = __ns_ldap_nextEntry(p->cookie, &result, &error);
-		(void) __ns_ldap_freeError(&error);
-		if (rc == NS_LDAP_SUCCESS && result != NULL)
-			p->results = result;
-		else {
-		    (void) __ns_ldap_freeResult(&result);
-		    (void) __ns_ldap_endEntry(&p->cookie, &error);
-		    (void) __ns_ldap_freeError(&error);
-		    p->cookie = NULL;
+		if (p->cookie == NULL)
+			break;
+		if (p->results == NULL) {
+			result = NULL;
+			rc = __ns_ldap_nextEntry(p->cookie, &result,
+			    &error);
+			(void) __ns_ldap_freeError(&error);
+			if (rc == NS_LDAP_SUCCESS && result != NULL)
+				p->results = result;
+			else {
+				(void) __ns_ldap_freeResult(&result);
+				(void) __ns_ldap_endEntry(&p->cookie,
+				    &error);
+				(void) __ns_ldap_freeError(&error);
+				p->cookie = NULL;
+			}
 		}
-	    }
-	    if (p->results == NULL)
-		continue;
+		if (p->results == NULL)
+			continue;
 
-	    if (p->entry == NULL)
-		p->entry = p->results->entry;
-
-	    if (p->entry == NULL)
-		continue;
+		if (p->entry == NULL)
+			p->entry = p->results->entry;
 
-	    if (p->attrs == NULL) {
-		attrs = __ns_ldap_getAttr(p->entry, _N_TRIPLE);
-		if (attrs != NULL && *attrs != NULL)
-		    p->attrs = attrs;
-	    }
+		if (p->entry == NULL)
+			continue;
 
-	    if (p->attrs != NULL) {
-		attrs = p->attrs;
-		buffer = args->buffer;
-
-		if (strlcpy(buffer, *attrs, args->buflen) >= args->buflen) {
-		    status = NSS_STR_PARSE_ERANGE;
-		    break;
+		if (p->attrs == NULL) {
+			attrs = __ns_ldap_getAttr(p->entry, _N_TRIPLE);
+			if (attrs != NULL && *attrs != NULL)
+				p->attrs = attrs;
 		}
 
-		rc = split_triple(buffer, &hostname, &username, &domain);
-		attrs++;
-		if (attrs != NULL && *attrs != NULL)
-		    p->attrs = attrs;
-		else
-		    p->attrs = NULL;
-		if (rc == 0) {
-		    args->retp[NSS_NETGR_MACHINE] = hostname;
-		    args->retp[NSS_NETGR_USER] = username;
-		    args->retp[NSS_NETGR_DOMAIN] = domain;
-		    args->status = NSS_NETGR_FOUND;
-		    if (p->attrs != NULL)
-			break;
-		}
-	    }
+		if (p->attrs != NULL) {
+			attrs = p->attrs;
+			buffer = args->buffer;
+
+			if (strlcpy(buffer, *attrs, args->buflen) >=
+			    args->buflen) {
+				status = NSS_STR_PARSE_ERANGE;
+				break;
+			}
 
-	    if (p->attrs == NULL) {
-		rc = add_netgroup_member_entry(p->entry, &p->tab);
-		if (rc != 0) {
-		    args->status = NSS_NETGR_NO;
-		    break;
+			rc = split_triple(buffer, &hostname, &username,
+			    &domain);
+			attrs++;
+			if (attrs != NULL && *attrs != NULL)
+				p->attrs = attrs;
+			else
+				p->attrs = NULL;
+			if (rc == 0) {
+				args->retp[NSS_NETGR_MACHINE] = hostname;
+				args->retp[NSS_NETGR_USER] = username;
+				args->retp[NSS_NETGR_DOMAIN] = domain;
+				args->status = NSS_NETGR_FOUND;
+				if (p->attrs != NULL)
+					break;
+			}
 		}
 
-		p->entry = p->entry->next;
-		if (p->entry == NULL)
-		    (void) __ns_ldap_freeResult(&p->results);
-		if (args->status == NSS_NETGR_FOUND)
-		    break;
-	    }
+		if (p->attrs == NULL) {
+			rc = add_netgroup_member_entry(p->entry, &p->tab);
+			if (rc != 0) {
+				args->status = NSS_NETGR_NO;
+				break;
+			}
+
+			p->entry = p->entry->next;
+			if (p->entry == NULL)
+				(void) __ns_ldap_freeResult(&p->results);
+			if (args->status == NSS_NETGR_FOUND)
+				break;
+		}
 	}
 
 	return (status);
@@ -855,14 +885,14 @@
 netgr_set(ldap_backend_ptr be, void *a)
 {
 	struct nss_setnetgrent_args	*args =
-				(struct nss_setnetgrent_args *)a;
+	    (struct nss_setnetgrent_args *)a;
 	ldap_backend_ptr		get_be;
 	getnetgrent_cookie_t		*p;
 
 #ifdef DEBUG
 	(void) fprintf(stdout, "\n[getnetgrent.c: netgr_set]\n");
 	(void) fprintf(stdout,
-		"\targs->netgroup: %s\n", ISNULL(args->netgroup));
+	    "\targs->netgroup: %s\n", ISNULL(args->netgroup));
 #endif /* DEBUG */
 
 	if (args->netgroup == NULL)
@@ -945,10 +975,10 @@
 
 #ifdef	DEBUG
 	(void) fprintf(stdout,
-		    "\n[getnetgrent.c: _nss_ldap_netgroup_constr]\n");
+	    "\n[getnetgrent.c: _nss_ldap_netgroup_constr]\n");
 #endif	/* DEBUG */
 
 	return ((nss_backend_t *)_nss_ldap_constr(netgroup_ops,
-		sizeof (netgroup_ops)/sizeof (netgroup_ops[0]), _NETGROUP,
-		netgrent_attrs, NULL));
+	    sizeof (netgroup_ops)/sizeof (netgroup_ops[0]), _NETGROUP,
+	    netgrent_attrs, NULL));
 }
--- a/usr/src/lib/nsswitch/ldap/common/ldap_common.c	Mon Aug 27 16:26:46 2007 -0700
+++ b/usr/src/lib/nsswitch/ldap/common/ldap_common.c	Mon Aug 27 16:34:51 2007 -0700
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -86,27 +86,27 @@
 };
 
 
-static nss_status_t
+nss_status_t
 switch_err(int rc, ns_ldap_error_t *error)
 {
 	switch (rc) {
-	    case NS_LDAP_SUCCESS:
+	case NS_LDAP_SUCCESS:
 		return (NSS_SUCCESS);
 
-	    case NS_LDAP_NOTFOUND:
+	case NS_LDAP_NOTFOUND:
 		return (NSS_NOTFOUND);
 
-	    case NS_LDAP_PARTIAL:
+	case NS_LDAP_PARTIAL:
 		return (NSS_TRYAGAIN);
 
-	    case NS_LDAP_INTERNAL:
-		    if (error && (error->status == LDAP_SERVER_DOWN ||
-				error->status == LDAP_TIMEOUT))
-			    return (NSS_TRYAGAIN);
-		    else
-			    return (NSS_UNAVAIL);
+	case NS_LDAP_INTERNAL:
+		if (error && (error->status == LDAP_SERVER_DOWN ||
+		    error->status == LDAP_TIMEOUT))
+			return (NSS_TRYAGAIN);
+		else
+			return (NSS_UNAVAIL);
 
-	    default:
+	default:
 		return (NSS_UNAVAIL);
 	}
 }
@@ -126,15 +126,15 @@
 	(void) fprintf(stdout, "\n[ldap_common.c: _nss_ldap_lookup]\n");
 	(void) fprintf(stdout, "\tsearchfilter: %s\n", searchfilter);
 	(void) fprintf(stdout,
-		"\tuserdata: %s\n", userdata ? userdata : "NULL");
+	    "\tuserdata: %s\n", userdata ? userdata : "NULL");
 	(void) fprintf(stdout, "\tdatabase: %s\n", database);
 #endif	/* DEBUG */
 
 	(void) __ns_ldap_freeResult(&be->result);
 
 	if ((rc = __ns_ldap_list(database, searchfilter, init_filter_cb,
-		be->attrs, NULL, 0, &be->result, &error, NULL,
-		userdata)) != NS_LDAP_SUCCESS) {
+	    be->attrs, NULL, 0, &be->result, &error, NULL,
+	    userdata)) != NS_LDAP_SUCCESS) {
 		argp->returnval = 0;
 		rc = switch_err(rc, error);
 		(void) __ns_ldap_freeError(&error);
@@ -144,7 +144,7 @@
 		(void) __ns_ldap_freeError(&error);
 	/* callback function */
 	if ((callbackstat =
-		    be->ldapobj2str(be, argp)) != NSS_STR_PARSE_SUCCESS) {
+	    be->ldapobj2str(be, argp)) != NSS_STR_PARSE_SUCCESS) {
 		goto error_out;
 	}
 
@@ -168,7 +168,7 @@
 	 *  for different purpose so ethers has to be treated differently.
 	 */
 	if (argp->buf.result != NULL ||
-			be->db_type == NSS_LDAP_DB_ETHERS) {
+	    be->db_type == NSS_LDAP_DB_ETHERS) {
 		/* file format -> struct */
 		if (argp->str2ent == NULL) {
 			callbackstat = NSS_STR_PARSE_PARSE;
@@ -176,13 +176,13 @@
 		}
 
 		callbackstat = (*argp->str2ent)(be->buffer,
-					be->buflen,
-					argp->buf.result,
-					argp->buf.buffer,
-					argp->buf.buflen);
+		    be->buflen,
+		    argp->buf.result,
+		    argp->buf.buffer,
+		    argp->buf.buflen);
 		if (callbackstat == NSS_STR_PARSE_SUCCESS) {
 			if (be->db_type == NSS_LDAP_DB_ETHERS &&
-					argp->buf.buffer != NULL) {
+			    argp->buf.buffer != NULL) {
 				argp->returnval = argp->buf.buffer;
 				argp->returnlen = strlen(argp->buf.buffer);
 			} else {
@@ -249,14 +249,14 @@
 	(void) fprintf(stdout, "\tsearchfilter: %s\n", searchfilter);
 	(void) fprintf(stdout, "\tdatabase: %s\n", database);
 	(void) fprintf(stdout,
-		"\tuserdata: %s\n", userdata ? userdata : "NULL");
+	    "\tuserdata: %s\n", userdata ? userdata : "NULL");
 #endif	/* DEBUG */
 
 	(void) __ns_ldap_freeResult(&be->result);
 
 	if ((rc = __ns_ldap_list(database, searchfilter, init_filter_cb,
-		be->attrs, NULL, 0, &be->result, &error, NULL,
-		userdata)) != NS_LDAP_SUCCESS) {
+	    be->attrs, NULL, 0, &be->result, &error, NULL,
+	    userdata)) != NS_LDAP_SUCCESS) {
 		argp->returnval = 0;
 		rc = switch_err(rc, error);
 		(void) __ns_ldap_freeError(&error);
@@ -412,13 +412,13 @@
 next_entry:
 	if (be->enumcookie == NULL) {
 		retcode = __ns_ldap_firstEntry(be->tablename,
-		be->filter, _merge_SSD_filter, be->attrs, NULL,
-		0, &be->enumcookie,
-		&be->result, &error, _F_GETENT_SSD);
+		    be->filter, _merge_SSD_filter, be->attrs, NULL,
+		    0, &be->enumcookie,
+		    &be->result, &error, _F_GETENT_SSD);
 	} else {
 		if (be->services_cookie == NULL) {
 			retcode = __ns_ldap_nextEntry(be->enumcookie,
-				&be->result, &error);
+			    &be->result, &error);
 		}
 	}
 	if (retcode != NS_LDAP_SUCCESS) {
@@ -429,7 +429,7 @@
 	} else {
 		/* ns_ldap_entry_t -> file format */
 		if ((parsestat = be->ldapobj2str(be, argp))
-			== NSS_STR_PARSE_SUCCESS) {
+		    == NSS_STR_PARSE_SUCCESS) {
 			if (argp->buf.result != NULL) {
 				/* file format -> struct */
 				if (argp->str2ent == NULL) {
@@ -437,10 +437,10 @@
 					goto error_out;
 				}
 				parsestat = (*argp->str2ent)(be->buffer,
-						be->buflen,
-						argp->buf.result,
-						argp->buf.buffer,
-						argp->buf.buflen);
+				    be->buflen,
+				    argp->buf.result,
+				    argp->buf.buffer,
+				    argp->buf.buflen);
 				if (parsestat == NSS_STR_PARSE_SUCCESS) {
 					if (be->buffer != NULL) {
 						free(be->buffer);
@@ -460,7 +460,7 @@
 				 */
 				argp->returnval = argp->buf.buffer;
 				argp->returnlen =
-					strlen(argp->buf.buffer) + 1;
+				    strlen(argp->buf.buffer) + 1;
 			}
 		}
 error_out:
--- a/usr/src/lib/nsswitch/ldap/common/ldap_common.h	Mon Aug 27 16:26:46 2007 -0700
+++ b/usr/src/lib/nsswitch/ldap/common/ldap_common.h	Mon Aug 27 16:34:51 2007 -0700
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -156,6 +156,7 @@
 	int filter_name_size);
 
 extern void _nss_services_cookie_free(void **cookieP);
+extern nss_status_t switch_err(int rc, ns_ldap_error_t *error);
 
 #ifdef DEBUG
 extern int printresult(ns_ldap_result_t *result);