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 2018 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        max_threads;
  79         uint64_t        id_cache_timeout;
  80         uint64_t        name_cache_timeout;
  81         uint64_t        rediscovery_interval;
  82         char            *machine_uuid;          /* machine uuid */
  83         char            *machine_sid;           /* machine sid */
  84         char            *default_domain;        /* default domain name */
  85         char            *domain_name;           /* AD domain name */
  86         boolean_t       domain_name_auto_disc;
  87         char            *domain_guid;           /* GUID (string) */
  88         boolean_t       domain_guid_auto_disc;
  89         ad_disc_ds_t    *domain_controller;     /* domain controller hosts */
  90         boolean_t       domain_controller_auto_disc;
  91         char            *forest_name;           /* forest name */
  92         boolean_t       forest_name_auto_disc;
  93         char            *site_name;             /* site name */
  94         boolean_t       site_name_auto_disc;
  95         ad_disc_ds_t    *global_catalog;        /* global catalog hosts */
  96         boolean_t       global_catalog_auto_disc;
  97         ad_disc_domainsinforest_t
  98                         *domains_in_forest;
  99         ad_disc_trusteddomains_t
 100                         *trusted_domains;       /* Trusted Domains */
 101         int             num_trusted_forests;
 102         idmap_trustedforest_t
 103                         *trusted_forests;       /* Array of trusted forests */
 104 
 105         ad_disc_ds_t    *preferred_dc;
 106         boolean_t       preferred_dc_auto_disc;
 107 
 108         /*
 109          * Following properties are associated with directory-based
 110          * name-mappings.
 111          */
 112         char            *ad_unixuser_attr;
 113         char            *ad_unixgroup_attr;
 114         char            *nldap_winname_attr;
 115         int             directory_based_mapping;        /* enum */
 116         boolean_t       eph_map_unres_sids;
 117         boolean_t       use_ads;
 118         boolean_t       use_lsa;
 119         boolean_t       disable_cross_forest_trusts;
 120 } idmap_pg_config_t;
 121 
 122 typedef struct idmap_cfg {
 123         idmap_pg_config_t       pgcfg;      /* live AD/ID mapping config */
 124         idmap_cfg_handles_t     handles;
 125         int                     initialized;
 126 } idmap_cfg_t;
 127 
 128 
 129 extern void             idmap_cfg_unload(idmap_pg_config_t *);
 130 extern int              idmap_cfg_load(idmap_cfg_t *, int);
 131 extern idmap_cfg_t      *idmap_cfg_init(void);
 132 extern int              idmap_cfg_fini(idmap_cfg_t *);
 133 extern int              idmap_cfg_upgrade(idmap_cfg_t *);
 134 extern int              idmap_cfg_start_updates(void);
 135 extern void             idmap_cfg_poke_updates(void);
 136 extern void             idmap_cfg_force_rediscovery(void);
 137 extern void             idmap_cfg_hup_handler(int);
 138 
 139 #define CFG_DISCOVER            0x1     /* Run discovery */
 140 #define CFG_FORGET_DC           0x2     /* Forget current DC. */
 141 #define CFG_LOG                 0x4
 142 
 143 #ifdef __cplusplus
 144 }
 145 #endif
 146 
 147 #endif /* _IDMAP_CONFIG_H */