mirror of
https://github.com/samba-team/samba.git
synced 2024-12-28 07:21:54 +03:00
2639f0b3ab
Guenther Autobuild-User: Günther Deschner <gd@samba.org> Autobuild-Date: Thu Mar 24 00:52:01 CET 2011 on sn-devel-104
255 lines
7.1 KiB
C
255 lines
7.1 KiB
C
/*
|
|
* idmap_centeris: Support for Local IDs and Centeris Cell Structure
|
|
*
|
|
* Copyright (C) Gerald (Jerry) Carter 2006-2008
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program 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 General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*/
|
|
|
|
#ifndef _IDMAP_ADEX_H
|
|
#define _IDMAP_ADEX_H
|
|
|
|
#include "winbindd/winbindd.h"
|
|
|
|
#define ADEX_CELL_RDN "$LikewiseIdentityCell"
|
|
|
|
#define ADEX_OC_USER "centerisLikewiseUser"
|
|
#define ADEX_OC_GROUP "centerisLikewiseGroup"
|
|
|
|
#define AD_USER "User"
|
|
#define AD_GROUP "Group"
|
|
|
|
#define ADEX_OC_POSIX_USER "posixAccount"
|
|
#define ADEX_OC_POSIX_GROUP "posixGroup"
|
|
|
|
#define ADEX_ATTR_UIDNUM "uidNumber"
|
|
#define ADEX_ATTR_GIDNUM "gidNUmber"
|
|
#define ADEX_ATTR_HOMEDIR "unixHomeDirectory"
|
|
#define ADEX_ATTR_USERPW "unixUserPassword"
|
|
#define ADEX_ATTR_GROUPALIAS "groupAlias" /* Not part of RFC2307 */
|
|
#define ADEX_ATTR_SHELL "loginShell"
|
|
#define ADEX_ATTR_GECOS "gecos"
|
|
#define ADEX_ATTR_UID "uid"
|
|
#define ADEX_ATTR_DISPLAYNAME "displayName"
|
|
|
|
#define MIN_ID_VALUE 100
|
|
|
|
#define BAIL_ON_NTSTATUS_ERROR(x) \
|
|
do { \
|
|
if (!NT_STATUS_IS_OK(x)) { \
|
|
DEBUG(10,("Failed! (%s)\n", nt_errstr(x))); \
|
|
goto done; \
|
|
} \
|
|
} \
|
|
while (0); \
|
|
|
|
#define WARN_ON_NTSTATUS_ERROR(x) \
|
|
do { \
|
|
if (!NT_STATUS_IS_OK(x)) { \
|
|
DEBUG(10,("Failure ignored! (%s)\n", nt_errstr(x))); \
|
|
} \
|
|
} \
|
|
while (0); \
|
|
|
|
#define BAIL_ON_ADS_ERROR(x) \
|
|
do { \
|
|
if (!ADS_ERR_OK(x)) { \
|
|
goto done; \
|
|
} \
|
|
} \
|
|
while (0);
|
|
|
|
#define BAIL_ON_PTR_ERROR(p, x) \
|
|
do { \
|
|
if ((p) == NULL ) { \
|
|
DEBUG(10,("NULL pointer!\n")); \
|
|
x = NT_STATUS_NO_MEMORY; \
|
|
goto done; \
|
|
} \
|
|
} while (0);
|
|
|
|
#define PRINT_NTSTATUS_ERROR(x, hdr, level) \
|
|
do { \
|
|
if (!NT_STATUS_IS_OK(x)) { \
|
|
DEBUG(level,("LWI ("hdr"): %s\n", nt_errstr(x))); \
|
|
} \
|
|
} while(0);
|
|
/*
|
|
* Cell Provider API
|
|
*/
|
|
|
|
struct cell_provider_api {
|
|
NTSTATUS(*get_sid_from_id) (struct dom_sid * sid,
|
|
uint32_t id, enum id_type type);
|
|
NTSTATUS(*get_id_from_sid) (uint32_t * id,
|
|
enum id_type * type, const struct dom_sid * sid);
|
|
NTSTATUS(*get_nss_info) (const struct dom_sid * sid,
|
|
TALLOC_CTX * ctx,
|
|
const char **homedir,
|
|
const char **shell,
|
|
const char **gecos, gid_t * p_gid);
|
|
NTSTATUS(*map_to_alias) (TALLOC_CTX * mem_ctx,
|
|
const char *domain,
|
|
const char *name, char **alias);
|
|
NTSTATUS(*map_from_alias) (TALLOC_CTX * mem_ctx,
|
|
const char *domain,
|
|
const char *alias, char **name);
|
|
};
|
|
|
|
/* registered providers */
|
|
|
|
extern struct cell_provider_api ccp_unified;
|
|
extern struct cell_provider_api ccp_local;
|
|
|
|
#define LWCELL_FLAG_USE_RFC2307_ATTRS 0x00000001
|
|
#define LWCELL_FLAG_SEARCH_FOREST 0x00000002
|
|
#define LWCELL_FLAG_GC_CELL 0x00000004
|
|
#define LWCELL_FLAG_LOCAL_MODE 0x00000008
|
|
|
|
struct likewise_cell {
|
|
struct likewise_cell *prev, *next;
|
|
ADS_STRUCT *conn;
|
|
struct likewise_cell *gc_search_cell;
|
|
struct dom_sid domain_sid;
|
|
char *dns_domain;
|
|
char *forest_name;
|
|
char *dn;
|
|
struct GUID *links; /* only held by owning cell */
|
|
size_t num_links;
|
|
uint32_t flags;
|
|
struct cell_provider_api *provider;
|
|
};
|
|
|
|
/* Search flags used for Global Catalog API */
|
|
|
|
#define ADEX_GC_SEARCH_CHECK_UNIQUE 0x00000001
|
|
|
|
struct gc_info {
|
|
struct gc_info *prev, *next;
|
|
char *forest_name;
|
|
char *search_base;
|
|
struct likewise_cell *forest_cell;
|
|
};
|
|
|
|
/* Available functions outside of idmap_lwidentity.c */
|
|
|
|
/* cell_util.c */
|
|
|
|
char *find_attr_string(char **list, size_t num_lines, const char *substr);
|
|
bool is_object_class(char **list, size_t num_lines, const char *substr);
|
|
int min_id_value(void);
|
|
char *cell_dn_to_dns(const char *dn);
|
|
NTSTATUS get_sid_type(ADS_STRUCT *ads,
|
|
LDAPMessage *msg,
|
|
enum lsa_SidType *type);
|
|
|
|
NTSTATUS cell_locate_membership(ADS_STRUCT * ads);
|
|
NTSTATUS cell_lookup_settings(struct likewise_cell * cell);
|
|
|
|
/* likewise_cell.c */
|
|
|
|
struct likewise_cell *cell_new(void);
|
|
struct likewise_cell *cell_list_head(void);
|
|
|
|
bool cell_list_add(struct likewise_cell *cell);
|
|
bool cell_list_remove(struct likewise_cell * cell);
|
|
|
|
void cell_list_destroy(void);
|
|
void cell_destroy(struct likewise_cell *c);
|
|
void cell_set_dns_domain(struct likewise_cell *c,
|
|
const char *dns_domain);
|
|
void cell_set_connection(struct likewise_cell *c,
|
|
ADS_STRUCT *ads);
|
|
void cell_set_dn(struct likewise_cell *c,
|
|
const char *dn);
|
|
void cell_set_domain_sid(struct likewise_cell *c,
|
|
struct dom_sid *sid);
|
|
void cell_set_flags(struct likewise_cell *c, uint32_t flags);
|
|
void cell_clear_flags(struct likewise_cell *c, uint32_t flags);
|
|
|
|
const char* cell_search_base(struct likewise_cell *c);
|
|
const char *cell_dns_domain(struct likewise_cell *c);
|
|
ADS_STRUCT *cell_connection(struct likewise_cell *c);
|
|
bool cell_search_forest(struct likewise_cell *c);
|
|
ADS_STATUS cell_do_search(struct likewise_cell *c,
|
|
const char *search_base,
|
|
int scope,
|
|
const char *expr,
|
|
const char **attrs,
|
|
LDAPMessage ** msg);
|
|
uint32_t cell_flags(struct likewise_cell *c);
|
|
|
|
NTSTATUS cell_connect_dn(struct likewise_cell **c,
|
|
const char *dn);
|
|
NTSTATUS cell_connect(struct likewise_cell *c);
|
|
|
|
|
|
/* gc_util.c */
|
|
|
|
NTSTATUS gc_init_list(void);
|
|
|
|
NTSTATUS gc_find_forest_root(struct gc_info *gc,
|
|
const char *domain);
|
|
|
|
struct gc_info *gc_search_start(void);
|
|
|
|
NTSTATUS gc_search_forest(struct gc_info *gc,
|
|
LDAPMessage **msg,
|
|
const char *filter);
|
|
|
|
NTSTATUS gc_search_all_forests(const char *filter,
|
|
ADS_STRUCT ***ads_list,
|
|
LDAPMessage ***msg_list,
|
|
int *num_resp, uint32_t flags);
|
|
|
|
NTSTATUS gc_search_all_forests_unique(const char *filter,
|
|
ADS_STRUCT **ads,
|
|
LDAPMessage **msg);
|
|
|
|
NTSTATUS gc_name_to_sid(const char *domain,
|
|
const char *name,
|
|
struct dom_sid *sid,
|
|
enum lsa_SidType *sid_type);
|
|
|
|
NTSTATUS gc_sid_to_name(const struct dom_sid *sid,
|
|
char **name,
|
|
enum lsa_SidType *sid_type);
|
|
|
|
NTSTATUS add_ads_result_to_array(ADS_STRUCT *ads,
|
|
LDAPMessage *msg,
|
|
ADS_STRUCT ***ads_list,
|
|
LDAPMessage ***msg_list,
|
|
int *size);
|
|
|
|
void free_result_array(ADS_STRUCT **ads_list,
|
|
LDAPMessage **msg_list,
|
|
int num_resp);
|
|
|
|
NTSTATUS check_result_unique(ADS_STRUCT *ads,
|
|
LDAPMessage *msg);
|
|
|
|
|
|
/* domain_util.c */
|
|
|
|
NTSTATUS domain_init_list(void);
|
|
|
|
NTSTATUS dc_search_domains(struct likewise_cell **cell,
|
|
LDAPMessage **msg,
|
|
const char *dn,
|
|
const struct dom_sid *user_sid);
|
|
|
|
|
|
#endif /* _IDMAP_ADEX_H */
|