1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/*
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * CDDL HEADER START
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown *
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * The contents of this file are subject to the terms of the
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * Common Development and Distribution License (the "License").
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * You may not use this file except in compliance with the License.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown *
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * or http://www.opensolaris.org/os/licensing.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * See the License for the specific language governing permissions
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * and limitations under the License.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown *
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * When distributing Covered Code, include this CDDL HEADER in each
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * If applicable, add the following below this CDDL HEADER, with the
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * fields enclosed by brackets "[]" replaced with your own identifying
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * information: Portions Copyright [yyyy] [name of copyright owner]
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown *
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * CDDL HEADER END
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/*
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * Use is subject to license terms.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#ifndef _DIRECTORY_PRIVATE_H
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#define _DIRECTORY_PRIVATE_H
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/*
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * A suite of functions for retrieving information about objects
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * in a directory service.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#ifdef __cplusplus
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brownextern "C" {
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#endif
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#include <sys/types.h>
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#define DIRECTORY_ID_NAME "n"
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#define DIRECTORY_ID_USER "u"
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#define DIRECTORY_ID_GROUP "g"
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#define DIRECTORY_ID_SID "s"
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/*
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * Structure of the returned data.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * Note that this is constructed from the bottom up; what is returned is
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * a directory_entry_list_t.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Browntypedef void *directory_datum_t;
1fcced4c370617db71610fecffd5451a5894ca5eJordan Browntypedef directory_datum_t *directory_attribute_value_t;
1fcced4c370617db71610fecffd5451a5894ca5eJordan Browntypedef struct {
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown directory_attribute_value_t *attrs;
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown directory_error_t err;
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown} directory_entry_t;
1fcced4c370617db71610fecffd5451a5894ca5eJordan Browntypedef directory_entry_t *directory_entry_list_t;
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/*
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * Retrieve information about a user or group. By way of analogy to exec(2),
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * the _v variants accept a list of attributes as an array, while
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * the _l variants accept the attribute list as arguments.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * All variations accept a list of identifiers, and return a
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * directory_entry_list_t in the same order. The length of the list of user
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * identifiers can be specified either explicitly, or by a terminating
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * NULL if the associated count is zero. Attributes are returned in the
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * order they were requested, with missing attributes yielding NULL
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * entries.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Browndirectory_error_t directory_get_v(directory_t d, directory_entry_list_t *ret,
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown char **ids, int nids, char *types, char **attrlist);
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Browndirectory_error_t directory_get_l(directory_t d, directory_entry_list_t *ret,
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown char **ids, int nids, char *types, char *attr1, ...);
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/*
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * Free the data structure returned by directory_get_by*().
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown *
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * Does nothing if list==NULL.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brownvoid directory_free(directory_entry_list_t list);
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/* Return the number of bytes in a directory_datum_t */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brownsize_t directory_datum_len(directory_datum_t d);
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/*
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * Search a list, case-insensitively, for a string
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brownboolean_t is_in_list(char **list, char *value);
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown/*
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * Examine an objectClass list and distill it into a bitmap of "interesting"
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown * classes.
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown */
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brownuint64_t class_bitmap(char **objectClass);
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#ifdef __cplusplus
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown}
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#endif
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown
1fcced4c370617db71610fecffd5451a5894ca5eJordan Brown#endif /* _DIRECTORY_PRIVATE_H */