1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 /*
  22  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
  23  * Copyright 2014 Nexenta Systems, Inc.  All rights reserved.
  24  */
  25 
  26 #ifndef _IDMAP_CONFIG_H
  27 #define _IDMAP_CONFIG_H
  28 
  29 
  30 #include "idmap.h"
  31 #include "addisc.h"
  32 #include <libscf.h>
  33 #include <synch.h>
  34 #include <sys/uuid.h>
  35 
  36 #ifdef __cplusplus
  37 extern "C" {
  38 #endif
  39 
  40 #define MAX_POLICY_SIZE 1023
  41 
  42 #define DIRECTORY_MAPPING_NONE  0
  43 #define DIRECTORY_MAPPING_NAME  1
  44 #define DIRECTORY_MAPPING_IDMU  2
  45 
  46 struct enum_lookup_map {
  47         int value;
  48         char *string;
  49 };
  50 
  51 extern struct enum_lookup_map directory_mapping_map[];
  52 extern const char *enum_lookup(int value, struct enum_lookup_map *map);
  53 
  54 /* SMF and auto-discovery context handles */
  55 typedef struct idmap_cfg_handles {
  56         pthread_mutex_t         mutex;
  57         scf_handle_t            *main;
  58         scf_instance_t          *instance;
  59         scf_service_t           *service;
  60         scf_propertygroup_t     *config_pg;
  61         scf_propertygroup_t     *debug_pg;
  62         ad_disc_t               ad_ctx;
  63 } idmap_cfg_handles_t;
  64 
  65 /*
  66  * This structure stores AD and AD-related configuration
  67  */
  68 typedef struct idmap_trustedforest {
  69         char            *forest_name;
  70         ad_disc_ds_t    *global_catalog;        /* global catalog hosts */
  71         ad_disc_domainsinforest_t
  72                         *domains_in_forest;
  73 } idmap_trustedforest_t;
  74 
  75 
  76 typedef struct idmap_pg_config {
  77         uint64_t        list_size_limit;
  78         uint64_t        id_cache_timeout;
  79         uint64_t        name_cache_timeout;
  80         uint64_t        rediscovery_interval;
  81         char            *machine_uuid;          /* machine uuid */
  82         char            *machine_sid;           /* machine sid */
  83         char            *default_domain;        /* default domain name */
  84         char            *domain_name;           /* AD domain name */
  85         boolean_t       domain_name_auto_disc;
  86         char            *domain_guid;           /* GUID (string) */
  87         boolean_t       domain_guid_auto_disc;
  88         ad_disc_ds_t    *domain_controller;     /* domain controller hosts */
  89         boolean_t       domain_controller_auto_disc;
  90         char            *forest_name;           /* forest name */
  91         boolean_t       forest_name_auto_disc;
  92         char            *site_name;             /* site name */
  93         boolean_t       site_name_auto_disc;
  94         ad_disc_ds_t    *global_catalog;        /* global catalog hosts */
  95         boolean_t       global_catalog_auto_disc;
  96         ad_disc_domainsinforest_t
  97                         *domains_in_forest;
  98         ad_disc_trusteddomains_t
  99                         *trusted_domains;       /* Trusted Domains */
 100         int             num_trusted_forests;
 101         idmap_trustedforest_t
 102                         *trusted_forests;       /* Array of trusted forests */
 103 
 104         ad_disc_ds_t    *preferred_dc;
 105         boolean_t       preferred_dc_auto_disc;
 106 
 107         /*
 108          * Following properties are associated with directory-based
 109          * name-mappings.
 110          */
 111         char            *ad_unixuser_attr;
 112         char            *ad_unixgroup_attr;
 113         char            *nldap_winname_attr;
 114         int             directory_based_mapping;        /* enum */
 115         boolean_t       eph_map_unres_sids;
 116         boolean_t       use_ads;
 117         boolean_t       use_lsa;
 118         boolean_t       disable_cross_forest_trusts;
 119 } idmap_pg_config_t;
 120 
 121 typedef struct idmap_cfg {
 122         idmap_pg_config_t       pgcfg;      /* live AD/ID mapping config */
 123         idmap_cfg_handles_t     handles;
 124         int                     initialized;
 125 } idmap_cfg_t;
 126 
 127 
 128 extern void             idmap_cfg_unload(idmap_pg_config_t *);
 129 extern int              idmap_cfg_load(idmap_cfg_t *, int);
 130 extern idmap_cfg_t      *idmap_cfg_init(void);
 131 extern int              idmap_cfg_fini(idmap_cfg_t *);
 132 extern int              idmap_cfg_upgrade(idmap_cfg_t *);
 133 extern int              idmap_cfg_start_updates(void);
 134 extern void             idmap_cfg_poke_updates(void);
 135 extern void             idmap_cfg_force_rediscovery(void);
 136 extern void             idmap_cfg_hup_handler(int);
 137 
 138 #define CFG_DISCOVER            0x1     /* Run discovery */
 139 #define CFG_FORGET_DC           0x2     /* Forget current DC. */
 140 #define CFG_LOG                 0x4
 141 
 142 #ifdef __cplusplus
 143 }
 144 #endif
 145 
 146 #endif /* _IDMAP_CONFIG_H */