/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
*/
#include <sys/systeminfo.h>
#include "ldap_common.h"
#ifdef DEBUG
/*
* Debugging routine for printing the value of a result
* structure
*/
int
{
int i, j, k;
printf("--------------------------------------\n");
for (i = 0; i < result->entries_count; i++) {
printf("entry %d has attr_count = %d \n",
i, curEntry->attr_count);
for (j = 0; j < curEntry->attr_count; j++) {
printf("entry %d has attr_pair[%d] = %s \n",
for (k = 0;
k++)
printf("entry %d has "
"attr_pair[%d]->attrvalue[%d] = %s \n",
i, j, k,
}
printf("\n--------------------------------------\n");
}
return (1);
}
#endif
/*
*
*/
{
#ifdef DEBUG
#endif /* DEBUG */
} else {
return (NULL);
}
if (result->entries_count == 0) {
return (NULL);
} else {
}
}
/*
* _get_domain_name() passes the dn one level up from cdn, e.g.,
* a pointer pointing to "ou= ..." for the cdn's listed below:
* dn: cn=hostname+ipHostNumber="109.34.54.76", ou= ...
* dn: echo+IpServiceProtocol=udp, ou= ...
* to __ns_ldap_dn2domain() to retrieve the domain name associated
* with cdn.
*/
char *
{
char **rdns;
int nrdns;
int len = 0;
/* break the cdn into its components */
return (NULL);
/* construct parent dn */
if (len == 0)
return (NULL);
}
*pdn = '\0';
if (nrdns == 1)
else {
}
/* remove the last ',' */
}
/* get domain name */
return (domain);
}
/*
* "109.34.54.76" -> 109.34.54.76
*/
const char *
{
/* look for first " */
return ((char *)ipaddress);
ipaddress++;
/* look for last " */
return ((char *)ipaddress);
*cp++ = '\0';
return (ipaddress);
}
/*
* This is a copy of a routine in libnsl/nss/netdir_inet.c. It is
* here because /etc/lib/nss_ldap.so.1 cannot call routines in
* libnsl. Care should be taken to keep the two copies in sync.
*/
int
{
switch (nsstat) {
case NSS_SUCCESS:
return (0);
case NSS_NOTFOUND:
return (HOST_NOT_FOUND);
case NSS_TRYAGAIN:
return (TRY_AGAIN);
case NSS_UNAVAIL:
default: /* keep gcc happy */
return (NO_RECOVERY);
}
/* NOTREACHED */
}
/*
* This is a generic filter call back function for
* merging the filter from service search descriptor with
* an existing search filter. This routine expects userdata
* contain a format string with a single %s in it, and will
* use the format string with sprintf() to insert the SSD filter.
*
* This routine is passed to the __ns_ldap_list() or
* __ns_ldap_firstEntry() APIs as the filter call back
* together with the userdata. For example,
* the gethostbyname processing may call __ns_ldap_list() with
* "(&(objectClass=ipHost)(cn=sys1))" as filter, this function
* as the filter call back, and "(&(%s)(cn=sys1))" as the
* userdata, this routine will in turn gets call to produce
* "(&(department=sds)(cn=sys1))" as the real search
* filter, if the input SSD contains a filter "department=sds".
*/
int
char **realfilter,
const void *userdata)
{
int len;
char *checker;
#ifdef DEBUG
#endif /* DEBUG */
/* sanity check */
if (realfilter == NULL)
return (NS_LDAP_INVALID_PARAM);
*realfilter = NULL;
return (NS_LDAP_INVALID_PARAM);
/* Parameter check. We only want one %s here, otherwise bail. */
len = 0; /* Reuse 'len' as "Number of %s hits"... */
do {
return (NS_LDAP_INVALID_PARAM);
len++; /* Got our %s. */
checker += 2;
} else if (len != 1)
return (NS_LDAP_INVALID_PARAM);
#ifdef DEBUG
#endif /* DEBUG */
if (*realfilter == NULL)
return (NS_LDAP_MEMORY);
#ifdef DEBUG
#endif /* DEBUG */
return (NS_LDAP_SUCCESS);
}
static char
hex_char(int n)
{
return ("0123456789abcdef"[n & 0xf]);
}
int
{
char c;
c = *name;
switch (c) {
case '*':
case '(':
case ')':
case '\\':
return (-1);
*filter_name++ = '\\';
break;
default:
return (-1);
*filter_name++ = c;
break;
}
}
if (end <= filter_name)
return (-1);
*filter_name = '\0';
return (0);
}