|
Packit |
8480eb |
/* ----------------------------------------------------------------------- *
|
|
Packit |
8480eb |
*
|
|
Packit |
8480eb |
* defaults.h - system initialization defaults.
|
|
Packit |
8480eb |
*
|
|
Packit |
8480eb |
* Copyright 2013 Red Hat, Inc.
|
|
Packit |
8480eb |
* Copyright 2006, 2013 Ian Kent <raven@themaw.net>
|
|
Packit |
8480eb |
* All rights reserved.
|
|
Packit |
8480eb |
*
|
|
Packit |
8480eb |
* This program is free software; you can redistribute it and/or modify
|
|
Packit |
8480eb |
* it under the terms of the GNU General Public License as published by
|
|
Packit |
8480eb |
* the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA 02139,
|
|
Packit |
8480eb |
* USA; either version 2 of the License, or (at your option) any later
|
|
Packit |
8480eb |
* version; incorporated herein by reference.
|
|
Packit |
8480eb |
*
|
|
Packit |
8480eb |
* ----------------------------------------------------------------------- */
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#include <stdlib.h>
|
|
Packit |
8480eb |
#include <stdio.h>
|
|
Packit |
8480eb |
#include <ctype.h>
|
|
Packit |
8480eb |
#include <string.h>
|
|
Packit |
8480eb |
#include <sys/utsname.h>
|
|
Packit |
8480eb |
#include <sys/stat.h>
|
|
Packit |
8480eb |
#include <stdarg.h>
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#include "config.h"
|
|
Packit |
8480eb |
#include "list.h"
|
|
Packit |
8480eb |
#include "defaults.h"
|
|
Packit |
8480eb |
#ifdef WITH_LDAP
|
|
Packit |
8480eb |
#include "lookup_ldap.h"
|
|
Packit |
8480eb |
#endif
|
|
Packit |
8480eb |
#include "log.h"
|
|
Packit |
8480eb |
#include "automount.h"
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#define AUTOFS_GLOBAL_SECTION "autofs"
|
|
Packit |
8480eb |
#define AMD_GLOBAL_SECTION "amd"
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
/*
|
|
Packit |
8480eb |
* The configuration location has changed.
|
|
Packit |
8480eb |
* The name of the configuration is now autofs.conf and it is
|
|
Packit |
8480eb |
* located in the same directory as the maps. AUTOFS_CONF_DIR
|
|
Packit |
8480eb |
* remains pointed at the init system configuration.
|
|
Packit |
8480eb |
*/
|
|
Packit |
8480eb |
#define DEFAULT_CONFIG_FILE AUTOFS_MAP_DIR "/autofs.conf"
|
|
Packit |
8480eb |
#define OLD_CONFIG_FILE AUTOFS_CONF_DIR "/autofs"
|
|
Packit |
8480eb |
#define MAX_LINE_LEN 256
|
|
Packit |
8480eb |
#define MAX_SECTION_NAME MAX_LINE_LEN
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#define NAME_MASTER_MAP "master_map_name"
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#define NAME_TIMEOUT "timeout"
|
|
Packit |
8480eb |
#define NAME_MASTER_WAIT "master_wait"
|
|
Packit |
8480eb |
#define NAME_NEGATIVE_TIMEOUT "negative_timeout"
|
|
Packit |
8480eb |
#define NAME_BROWSE_MODE "browse_mode"
|
|
Packit |
8480eb |
#define NAME_LOGGING "logging"
|
|
Packit |
8480eb |
#define NAME_FORCE_STD_PROG_MAP_ENV "force_standard_program_map_env"
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#define NAME_LDAP_URI "ldap_uri"
|
|
Packit |
8480eb |
#define NAME_LDAP_TIMEOUT "ldap_timeout"
|
|
Packit |
8480eb |
#define NAME_LDAP_NETWORK_TIMEOUT "ldap_network_timeout"
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#define NAME_SEARCH_BASE "search_base"
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#define NAME_MAP_OBJ_CLASS "map_object_class"
|
|
Packit |
8480eb |
#define NAME_ENTRY_OBJ_CLASS "entry_object_class"
|
|
Packit |
8480eb |
#define NAME_MAP_ATTR "map_attribute"
|
|
Packit |
8480eb |
#define NAME_ENTRY_ATTR "entry_attribute"
|
|
Packit |
8480eb |
#define NAME_VALUE_ATTR "value_attribute"
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#define NAME_MOUNT_NFS_DEFAULT_PROTOCOL "mount_nfs_default_protocol"
|
|
Packit |
8480eb |
#define NAME_APPEND_OPTIONS "append_options"
|
|
Packit Service |
8741f6 |
#define NAME_MOUNT_VERBOSE "mount_verbose"
|
|
Packit |
8480eb |
#define NAME_MOUNT_WAIT "mount_wait"
|
|
Packit |
8480eb |
#define NAME_UMOUNT_WAIT "umount_wait"
|
|
Packit |
8480eb |
#define NAME_AUTH_CONF_FILE "auth_conf_file"
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#define NAME_MAP_HASH_TABLE_SIZE "map_hash_table_size"
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#define NAME_USE_HOSTNAME_FOR_MOUNTS "use_hostname_for_mounts"
|
|
Packit |
8480eb |
#define NAME_DISABLE_NOT_FOUND_MESSAGE "disable_not_found_message"
|
|
Packit Service |
bf9999 |
#define NAME_USE_IGNORE_MOUNT_OPTION "use_ignore_mount_option"
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#define NAME_SSS_MASTER_MAP_WAIT "sss_master_map_wait"
|
|
Packit |
8480eb |
#define NAME_USE_MOUNT_REQUEST_LOG_ID "use_mount_request_log_id"
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#define NAME_AMD_ARCH "arch"
|
|
Packit |
8480eb |
#define NAME_AMD_AUTO_ATTRCACHE "auto_attrcache"
|
|
Packit |
8480eb |
#define NAME_AMD_AUTO_DIR "auto_dir"
|
|
Packit |
8480eb |
#define NAME_AMD_AUTOFS_USE_LOFS "autofs_use_lofs"
|
|
Packit |
8480eb |
#define NAME_AMD_BROWSABLE_DIRS "browsable_dirs"
|
|
Packit |
8480eb |
#define NAME_AMD_CACHE_DURATION "cache_duration"
|
|
Packit |
8480eb |
#define NAME_AMD_CLUSTER "cluster"
|
|
Packit |
8480eb |
#define NAME_AMD_DEBUG_MTAB_FILE "debug_mtab_file"
|
|
Packit |
8480eb |
#define NAME_AMD_DEBUG_OPTIONS "debug_options"
|
|
Packit |
8480eb |
#define NAME_AMD_DISMOUNT_INTERVAL "dismount_interval"
|
|
Packit |
8480eb |
#define NAME_AMD_DOMAIN_STRIP "domain_strip"
|
|
Packit |
8480eb |
#define NAME_AMD_EXEC_MAP_TIMEOUT "exec_map_timeout"
|
|
Packit |
8480eb |
#define NAME_AMD_FORCED_UMOUNTS "forced_unmounts"
|
|
Packit |
8480eb |
#define NAME_AMD_FULLY_QUALIFIED_HOSTS "fully_qualified_hosts"
|
|
Packit |
8480eb |
#define NAME_AMD_FULL_OS "full_os"
|
|
Packit |
8480eb |
#define NAME_AMD_HESIOD_BASE "hesiod_base"
|
|
Packit |
8480eb |
#define NAME_AMD_KARCH "karch"
|
|
Packit |
8480eb |
#define NAME_AMD_LDAP_BASE "ldap_base"
|
|
Packit |
8480eb |
#define NAME_AMD_LDAP_CACHE_MAXMEM "ldap_cache_maxmem"
|
|
Packit |
8480eb |
#define NAME_AMD_LDAP_CACHE_SECONDS "ldap_cache_seconds"
|
|
Packit |
8480eb |
#define NAME_AMD_LDAP_HOSTPORTS "ldap_hostports"
|
|
Packit |
8480eb |
#define NAME_AMD_LDAP_PROTO_VERSION "ldap_proto_version"
|
|
Packit |
8480eb |
#define NAME_AMD_SUB_DOMAIN "local_domain"
|
|
Packit |
8480eb |
#define NAME_AMD_LOCALHOST_ADDRESS "localhost_address"
|
|
Packit |
8480eb |
#define NAME_AMD_LOG_FILE "log_file"
|
|
Packit |
8480eb |
#define NAME_AMD_LOG_OPTIONS "log_options"
|
|
Packit |
8480eb |
#define NAME_AMD_MAP_DEFAULTS "map_defaults"
|
|
Packit |
8480eb |
#define NAME_AMD_MAP_OPTIONS "map_options"
|
|
Packit |
8480eb |
#define NAME_AMD_MAP_RELOAD_INTERVAL "map_reload_interval"
|
|
Packit |
8480eb |
#define NAME_AMD_MAP_NAME "map_name"
|
|
Packit |
8480eb |
#define NAME_AMD_MAP_TYPE "map_type"
|
|
Packit |
8480eb |
#define NAME_AMD_MOUNT_TYPE "mount_type"
|
|
Packit |
8480eb |
#define NAME_AMD_PID_FILE "pid_file"
|
|
Packit |
8480eb |
#define NAME_AMD_PORTMAP_PROGRAM "portmap_program"
|
|
Packit |
8480eb |
#define NAME_AMD_PREFERRED_AMQ_PORT "preferred_amq_port"
|
|
Packit |
8480eb |
#define NAME_AMD_NFS_ALLOW_ANY_INTERFACE "nfs_allow_any_interface"
|
|
Packit |
8480eb |
#define NAME_AMD_NFS_ALLOW_INSECURE_PORT "nfs_allow_insecure_port"
|
|
Packit |
8480eb |
#define NAME_AMD_NFS_PROTO "nfs_proto"
|
|
Packit |
8480eb |
#define NAME_AMD_NFS_RETRANSMIT_COUNTER "nfs_retransmit_counter"
|
|
Packit |
8480eb |
#define NAME_AMD_NFS_RETRANSMIT_COUNTER_UDP "nfs_retransmit_counter_udp"
|
|
Packit |
8480eb |
#define NAME_AMD_NFS_RETRANSMIT_COUNTER_TCP "nfs_retransmit_counter_tcp"
|
|
Packit |
8480eb |
#define NAME_AMD_NFS_RETRANSMIT_COUNTER_TOPLVL "nfs_retransmit_counter_toplvl"
|
|
Packit |
8480eb |
#define NAME_AMD_NFS_RETRY_INTERVAL "nfs_retry_interval"
|
|
Packit |
8480eb |
#define NAME_AMD_NFS_RETRY_INTERVAL_UDP "nfs_retry_interval_udp"
|
|
Packit |
8480eb |
#define NAME_AMD_NFS_RETRY_INTERVAL_TCP "nfs_retry_interval_tcp"
|
|
Packit |
8480eb |
#define NAME_AMD_NFS_RETRY_INTERVAL_TOPLVL "nfs_retry_interval_toplvl"
|
|
Packit |
8480eb |
#define NAME_AMD_NFS_VERS "nfs_vers"
|
|
Packit |
8480eb |
#define NAME_AMD_NFS_VERS_PING "nfs_vers_ping"
|
|
Packit |
8480eb |
#define NAME_AMD_NIS_DOMAIN "nis_domain"
|
|
Packit |
8480eb |
#define NAME_AMD_NORMALIZE_HOSTNAMES "normalize_hostnames"
|
|
Packit |
8480eb |
#define NAME_AMD_NORMALIZE_SLASHES "normalize_slashes"
|
|
Packit |
8480eb |
#define NAME_AMD_OS "os"
|
|
Packit |
8480eb |
#define NAME_AMD_OSVER "osver"
|
|
Packit |
8480eb |
#define NAME_AMD_PLOCK "plock"
|
|
Packit |
8480eb |
#define NAME_AMD_PRINT_PID "print_pid"
|
|
Packit |
8480eb |
#define NAME_AMD_PRINT_VERSION "print_version"
|
|
Packit |
8480eb |
#define NAME_AMD_RESTART_MOUNTS "restart_mounts"
|
|
Packit |
8480eb |
#define NAME_AMD_SEARCH_PATH "search_path"
|
|
Packit |
8480eb |
#define NAME_AMD_SELECTORS_ON_DEFAULT "selectors_on_default"
|
|
Packit |
8480eb |
#define NAME_AMD_SELECTORS_IN_DEFAULTS "selectors_in_defaults"
|
|
Packit |
8480eb |
#define NAME_AMD_SHOW_STATFS_ENTRIES "show_statfs_entries"
|
|
Packit |
8480eb |
#define NAME_AMD_SUN_MAP_SYNTAX "sun_map_syntax"
|
|
Packit |
8480eb |
#define NAME_AMD_TRUNCATE_LOG "truncate_log"
|
|
Packit |
8480eb |
#define NAME_AMD_UMOUNT_ON_EXIT "unmount_on_exit"
|
|
Packit |
8480eb |
#define NAME_AMD_USE_TCPWRAPPERS "use_tcpwrappers"
|
|
Packit |
8480eb |
#define NAME_AMD_VENDOR "vendor"
|
|
Packit |
8480eb |
#define NAME_AMD_LINUX_UFS_MOUNT_TYPE "linux_ufs_mount_type"
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
/* Status returns */
|
|
Packit |
8480eb |
#define CFG_OK 0x0000
|
|
Packit |
8480eb |
#define CFG_FAIL 0x0001
|
|
Packit |
8480eb |
#define CFG_EXISTS 0x0002
|
|
Packit |
8480eb |
#define CFG_NOTFOUND 0x0004
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#define CFG_TABLE_SIZE 128
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static const char *default_master_map_name = DEFAULT_MASTER_MAP_NAME;
|
|
Packit |
8480eb |
static const char *default_auth_conf_file = DEFAULT_AUTH_CONF_FILE;
|
|
Packit |
8480eb |
static const char *autofs_gbl_sec = AUTOFS_GLOBAL_SECTION;
|
|
Packit |
8480eb |
static const char *amd_gbl_sec = AMD_GLOBAL_SECTION;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
struct conf_option {
|
|
Packit |
8480eb |
char *section;
|
|
Packit |
8480eb |
char *name;
|
|
Packit |
8480eb |
char *value;
|
|
Packit |
8480eb |
unsigned long flags;
|
|
Packit |
8480eb |
struct conf_option *next;
|
|
Packit |
8480eb |
};
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
struct conf_cache {
|
|
Packit |
8480eb |
struct conf_option **hash;
|
|
Packit |
8480eb |
time_t modified;
|
|
Packit |
8480eb |
};
|
|
Packit |
8480eb |
static pthread_mutex_t conf_mutex = PTHREAD_MUTEX_INITIALIZER;
|
|
Packit |
8480eb |
static struct conf_cache *config = NULL;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static int conf_load_autofs_defaults(void);
|
|
Packit |
8480eb |
static int conf_update(const char *, const char *, const char *, unsigned long);
|
|
Packit |
8480eb |
static void conf_delete(const char *, const char *);
|
|
Packit |
8480eb |
static struct conf_option *conf_lookup(const char *, const char *);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static void defaults_mutex_lock(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
int status = pthread_mutex_lock(&conf_mutex);
|
|
Packit |
8480eb |
if (status)
|
|
Packit |
8480eb |
fatal(status);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static void defaults_mutex_unlock(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
int status = pthread_mutex_unlock(&conf_mutex);
|
|
Packit |
8480eb |
if (status)
|
|
Packit |
8480eb |
fatal(status);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static void message(unsigned int to_syslog, const char *msg, ...)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
va_list ap;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
va_start(ap, msg);
|
|
Packit |
8480eb |
if (to_syslog)
|
|
Packit |
8480eb |
vsyslog(LOG_CRIT, msg, ap);
|
|
Packit |
8480eb |
else {
|
|
Packit |
8480eb |
vfprintf(stderr, msg, ap);
|
|
Packit |
8480eb |
fputc('\n', stderr);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
va_end(ap);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static int conf_init(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct conf_cache *cc;
|
|
Packit |
8480eb |
unsigned int size = CFG_TABLE_SIZE;
|
|
Packit |
8480eb |
unsigned int i;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
cc = malloc(sizeof(struct conf_cache));
|
|
Packit |
8480eb |
if (!cc)
|
|
Packit |
8480eb |
return CFG_FAIL;
|
|
Packit |
8480eb |
cc->modified = 0;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
cc->hash = malloc(size * sizeof(struct conf_option *));
|
|
Packit |
8480eb |
if (!cc->hash) {
|
|
Packit |
8480eb |
free(cc);
|
|
Packit |
8480eb |
return CFG_FAIL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
for (i = 0; i < size; i++) {
|
|
Packit |
8480eb |
cc->hash[i] = NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
config = cc;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return CFG_OK;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static void __conf_release(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct conf_cache *cc = config;
|
|
Packit |
8480eb |
unsigned int size = CFG_TABLE_SIZE;
|
|
Packit |
8480eb |
struct conf_option *co, *next;
|
|
Packit |
8480eb |
unsigned int i;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
for (i = 0; i < size; i++) {
|
|
Packit |
8480eb |
co = cc->hash[i];
|
|
Packit |
8480eb |
if (co == NULL)
|
|
Packit |
8480eb |
continue;
|
|
Packit |
8480eb |
next = co->next;
|
|
Packit |
8480eb |
free(co->section);
|
|
Packit |
8480eb |
free(co->name);
|
|
Packit |
8480eb |
if (co->value)
|
|
Packit |
8480eb |
free(co->value);
|
|
Packit |
8480eb |
free(co);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
while (next) {
|
|
Packit |
8480eb |
co = next;
|
|
Packit |
8480eb |
next = co->next;
|
|
Packit |
8480eb |
free(co->section);
|
|
Packit |
8480eb |
free(co->name);
|
|
Packit |
8480eb |
if (co->value)
|
|
Packit |
8480eb |
free(co->value);
|
|
Packit |
8480eb |
free(co);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
cc->hash[i] = NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
free(cc->hash);
|
|
Packit |
8480eb |
free(cc);
|
|
Packit |
8480eb |
config = NULL;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
void defaults_conf_release(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
defaults_mutex_lock();
|
|
Packit |
8480eb |
__conf_release();
|
|
Packit |
8480eb |
defaults_mutex_unlock();
|
|
Packit |
8480eb |
return;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static int conf_load_autofs_defaults(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct conf_option *co;
|
|
Packit |
8480eb |
const char *sec = autofs_gbl_sec;
|
|
Packit |
8480eb |
int ret;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_TIMEOUT,
|
|
Packit |
8480eb |
DEFAULT_TIMEOUT, CONF_ENV);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_MASTER_WAIT,
|
|
Packit |
8480eb |
DEFAULT_MASTER_WAIT, CONF_ENV);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_NEGATIVE_TIMEOUT,
|
|
Packit |
8480eb |
DEFAULT_NEGATIVE_TIMEOUT, CONF_ENV);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_BROWSE_MODE,
|
|
Packit |
8480eb |
DEFAULT_BROWSE_MODE, CONF_ENV);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_LOGGING,
|
|
Packit |
8480eb |
DEFAULT_LOGGING, CONF_ENV);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_LDAP_TIMEOUT,
|
|
Packit |
8480eb |
DEFAULT_LDAP_TIMEOUT, CONF_ENV);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_LDAP_NETWORK_TIMEOUT,
|
|
Packit |
8480eb |
DEFAULT_LDAP_NETWORK_TIMEOUT, CONF_ENV);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_APPEND_OPTIONS,
|
|
Packit |
8480eb |
DEFAULT_APPEND_OPTIONS, CONF_ENV);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit Service |
8741f6 |
ret = conf_update(sec, NAME_MOUNT_VERBOSE,
|
|
Packit Service |
8741f6 |
DEFAULT_MOUNT_VERBOSE, CONF_ENV);
|
|
Packit Service |
8741f6 |
if (ret == CFG_FAIL)
|
|
Packit Service |
8741f6 |
goto error;
|
|
Packit Service |
8741f6 |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_MOUNT_WAIT,
|
|
Packit |
8480eb |
DEFAULT_MOUNT_WAIT, CONF_ENV);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_UMOUNT_WAIT,
|
|
Packit |
8480eb |
DEFAULT_UMOUNT_WAIT, CONF_ENV);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AUTH_CONF_FILE,
|
|
Packit |
8480eb |
DEFAULT_AUTH_CONF_FILE, CONF_ENV);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_MOUNT_NFS_DEFAULT_PROTOCOL,
|
|
Packit |
8480eb |
DEFAULT_MOUNT_NFS_DEFAULT_PROTOCOL, CONF_ENV);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_USE_HOSTNAME_FOR_MOUNTS,
|
|
Packit |
8480eb |
DEFAULT_USE_HOSTNAME_FOR_MOUNTS, CONF_ENV);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_DISABLE_NOT_FOUND_MESSAGE,
|
|
Packit |
8480eb |
DEFAULT_DISABLE_NOT_FOUND_MESSAGE, CONF_ENV);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit Service |
bf9999 |
ret = conf_update(sec, NAME_USE_IGNORE_MOUNT_OPTION,
|
|
Packit Service |
bf9999 |
DEFAULT_USE_IGNORE_MOUNT_OPTION, CONF_ENV);
|
|
Packit Service |
bf9999 |
if (ret == CFG_FAIL)
|
|
Packit Service |
bf9999 |
goto error;
|
|
Packit Service |
bf9999 |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_SSS_MASTER_MAP_WAIT,
|
|
Packit |
8480eb |
DEFAULT_SSS_MASTER_MAP_WAIT, CONF_ENV);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_USE_MOUNT_REQUEST_LOG_ID,
|
|
Packit |
8480eb |
DEFAULT_USE_MOUNT_REQUEST_LOG_ID, CONF_ENV);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
/* LDAP_URI and SEARCH_BASE can occur multiple times */
|
|
Packit |
8480eb |
while ((co = conf_lookup(sec, NAME_LDAP_URI)))
|
|
Packit |
8480eb |
conf_delete(co->section, co->name);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
while ((co = conf_lookup(sec, NAME_SEARCH_BASE)))
|
|
Packit |
8480eb |
conf_delete(co->section, co->name);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return 1;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
error:
|
|
Packit |
8480eb |
return 0;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static int conf_load_amd_defaults(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct utsname uts;
|
|
Packit |
8480eb |
const char *sec = amd_gbl_sec;
|
|
Packit |
8480eb |
char *host_os_name, *host_os_version, *host_arch;
|
|
Packit |
8480eb |
int ret;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (uname(&uts)) {
|
|
Packit |
8480eb |
host_os_name = uts.sysname;
|
|
Packit |
8480eb |
host_os_version = uts.release;
|
|
Packit |
8480eb |
host_arch = uts.machine;
|
|
Packit |
8480eb |
} else {
|
|
Packit |
8480eb |
host_os_name = NULL;
|
|
Packit |
8480eb |
host_os_version = NULL;
|
|
Packit |
8480eb |
host_arch = NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_ARCH, host_arch, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_KARCH, host_arch, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_OS, host_os_name, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_OSVER, host_os_version, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_AUTO_DIR,
|
|
Packit |
8480eb |
DEFAULT_AMD_AUTO_DIR, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_AUTOFS_USE_LOFS,
|
|
Packit |
8480eb |
DEFAULT_AMD_AUTO_DIR, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_BROWSABLE_DIRS,
|
|
Packit |
8480eb |
DEFAULT_AMD_BROWSABLE_DIRS, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_CLUSTER,
|
|
Packit |
8480eb |
DEFAULT_AMD_CLUSTER, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
/*
|
|
Packit |
8480eb |
* DISMOUNT_INTERVAL defers to the autofs default so we
|
|
Packit |
8480eb |
* don't set an amd default in the configuration.
|
|
Packit |
8480eb |
*/
|
|
Packit |
8480eb |
/*ret = conf_update(sec, NAME_AMD_DISMOUNT_INTERVAL,
|
|
Packit |
8480eb |
DEFAULT_AMD_DISMOUNT_INTERVAL, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;*/
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_DOMAIN_STRIP,
|
|
Packit |
8480eb |
DEFAULT_AMD_DOMAIN_STRIP, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_EXEC_MAP_TIMEOUT,
|
|
Packit |
8480eb |
DEFAULT_AMD_EXEC_MAP_TIMEOUT, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_FORCED_UMOUNTS,
|
|
Packit |
8480eb |
DEFAULT_AMD_FORCED_UMOUNTS, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_FULLY_QUALIFIED_HOSTS,
|
|
Packit |
8480eb |
DEFAULT_AMD_FULLY_QUALIFIED_HOSTS, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_FULL_OS,
|
|
Packit |
8480eb |
DEFAULT_AMD_FULL_OS, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_HESIOD_BASE,
|
|
Packit |
8480eb |
DEFAULT_AMD_HESIOD_BASE, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_KARCH, host_arch, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_LDAP_BASE,
|
|
Packit |
8480eb |
DEFAULT_AMD_LDAP_BASE, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_LDAP_HOSTPORTS,
|
|
Packit |
8480eb |
DEFAULT_AMD_LDAP_HOSTPORTS, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_SUB_DOMAIN,
|
|
Packit |
8480eb |
DEFAULT_AMD_SUB_DOMAIN, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_LOCALHOST_ADDRESS,
|
|
Packit |
8480eb |
DEFAULT_AMD_LOCALHOST_ADDRESS, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_LOG_OPTIONS,
|
|
Packit |
8480eb |
DEFAULT_AMD_LOG_OPTIONS, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_MAP_DEFAULTS,
|
|
Packit |
8480eb |
DEFAULT_AMD_MAP_DEFAULTS, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_MAP_OPTIONS,
|
|
Packit |
8480eb |
DEFAULT_AMD_MAP_OPTIONS, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_MAP_TYPE,
|
|
Packit |
8480eb |
DEFAULT_AMD_MAP_TYPE, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_NIS_DOMAIN,
|
|
Packit |
8480eb |
DEFAULT_AMD_NIS_DOMAIN, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_NORMALIZE_HOSTNAMES,
|
|
Packit |
8480eb |
DEFAULT_AMD_NORMALIZE_HOSTNAMES, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_NORMALIZE_SLASHES,
|
|
Packit |
8480eb |
DEFAULT_AMD_NORMALIZE_SLASHES, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_OS, host_os_name, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_RESTART_MOUNTS,
|
|
Packit |
8480eb |
DEFAULT_AMD_RESTART_MOUNTS, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_SEARCH_PATH,
|
|
Packit |
8480eb |
DEFAULT_AMD_SEARCH_PATH, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
/* selectors_on_default is depricated, use selectors_in_defaults */
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_SELECTORS_ON_DEFAULT,
|
|
Packit |
8480eb |
DEFAULT_AMD_SELECTORS_IN_DEFAULTS, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_SELECTORS_IN_DEFAULTS,
|
|
Packit |
8480eb |
DEFAULT_AMD_SELECTORS_IN_DEFAULTS, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_UMOUNT_ON_EXIT,
|
|
Packit |
8480eb |
DEFAULT_AMD_UMOUNT_ON_EXIT, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_VENDOR,
|
|
Packit |
8480eb |
DEFAULT_AMD_VENDOR, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_update(sec, NAME_AMD_LINUX_UFS_MOUNT_TYPE,
|
|
Packit |
8480eb |
DEFAULT_AMD_LINUX_UFS_MOUNT_TYPE, CONF_NONE);
|
|
Packit |
8480eb |
if (ret == CFG_FAIL)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
return 1;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
error:
|
|
Packit |
8480eb |
return 0;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static u_int32_t get_hash(const char *key, unsigned int size)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
const char *pkey = key;
|
|
Packit |
8480eb |
char lkey[PATH_MAX + 1];
|
|
Packit |
8480eb |
char *plkey = &lkey[0];
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
while (*pkey)
|
|
Packit |
8480eb |
*plkey++ = tolower(*pkey++);
|
|
Packit |
8480eb |
*plkey = '\0';
|
|
Packit |
8480eb |
return hash(lkey, size);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static int conf_add(const char *section, const char *key, const char *value, unsigned long flags)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct conf_option *co;
|
|
Packit |
8480eb |
char *sec, *name, *val, *tmp;
|
|
Packit |
8480eb |
unsigned int size = CFG_TABLE_SIZE;
|
|
Packit |
8480eb |
u_int32_t key_hash;
|
|
Packit |
8480eb |
int ret = CFG_FAIL;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
sec = name = val = tmp = NULL;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
/* Environment overrides file value */
|
|
Packit |
8480eb |
if (((flags & CONF_ENV) && (tmp = getenv(key))) || value) {
|
|
Packit |
8480eb |
if (tmp)
|
|
Packit |
8480eb |
val = strdup(tmp);
|
|
Packit |
8480eb |
else {
|
|
Packit |
8480eb |
if (value)
|
|
Packit |
8480eb |
val = strdup(value);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
if (!val)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
name = strdup(key);
|
|
Packit |
8480eb |
if (!key)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
sec = strdup(section);
|
|
Packit |
8480eb |
if (!sec)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
co = malloc(sizeof(struct conf_option));
|
|
Packit |
8480eb |
if (!co)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
co->section = sec;
|
|
Packit |
8480eb |
co->name = name;
|
|
Packit |
8480eb |
co->value = val;
|
|
Packit |
8480eb |
co->flags = flags;
|
|
Packit |
8480eb |
co->next = NULL;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
/* Don't change user set values in the environment */
|
|
Packit |
8480eb |
if (flags & CONF_ENV && value)
|
|
Packit |
8480eb |
setenv(name, value, 0);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
key_hash = get_hash(key, size);
|
|
Packit |
8480eb |
if (!config->hash[key_hash])
|
|
Packit |
8480eb |
config->hash[key_hash] = co;
|
|
Packit |
8480eb |
else {
|
|
Packit |
8480eb |
struct conf_option *last = NULL, *next;
|
|
Packit |
8480eb |
next = config->hash[key_hash];
|
|
Packit |
8480eb |
while (next) {
|
|
Packit |
8480eb |
last = next;
|
|
Packit |
8480eb |
next = last->next;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
last->next = co;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return CFG_OK;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
error:
|
|
Packit |
8480eb |
if (name)
|
|
Packit |
8480eb |
free(name);
|
|
Packit |
8480eb |
if (val)
|
|
Packit |
8480eb |
free(val);
|
|
Packit |
8480eb |
if (sec)
|
|
Packit |
8480eb |
free(sec);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return ret;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static void conf_delete(const char *section, const char *key)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct conf_option *co, *last;
|
|
Packit |
8480eb |
unsigned int size = CFG_TABLE_SIZE;
|
|
Packit |
8480eb |
u_int32_t key_hash;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
last = NULL;
|
|
Packit |
8480eb |
key_hash = get_hash(key, size);
|
|
Packit |
8480eb |
for (co = config->hash[key_hash]; co != NULL; co = co->next) {
|
|
Packit |
8480eb |
if (strcasecmp(section, co->section))
|
|
Packit |
8480eb |
continue;
|
|
Packit |
8480eb |
if (!strcasecmp(key, co->name))
|
|
Packit |
8480eb |
break;
|
|
Packit |
8480eb |
last = co;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!co)
|
|
Packit |
8480eb |
return;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (last)
|
|
Packit |
8480eb |
last->next = co->next;
|
|
Packit |
8480eb |
else
|
|
Packit |
8480eb |
config->hash[key_hash] = co->next;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
free(co->section);
|
|
Packit |
8480eb |
free(co->name);
|
|
Packit |
8480eb |
if (co->value)
|
|
Packit |
8480eb |
free(co->value);
|
|
Packit |
8480eb |
free(co);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static int conf_update(const char *section,
|
|
Packit |
8480eb |
const char *key, const char *value,
|
|
Packit |
8480eb |
unsigned long flags)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct conf_option *co = NULL;
|
|
Packit |
8480eb |
int ret;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = CFG_FAIL;
|
|
Packit |
8480eb |
co = conf_lookup(section, key);
|
|
Packit |
8480eb |
if (!co)
|
|
Packit |
8480eb |
return conf_add(section, key, value, flags);
|
|
Packit |
8480eb |
else {
|
|
Packit |
8480eb |
char *val = NULL, *tmp = NULL;
|
|
Packit |
8480eb |
/* Environment overrides file value */
|
|
Packit |
8480eb |
if (((flags & CONF_ENV) && (tmp = getenv(key))) || value) {
|
|
Packit |
8480eb |
if (tmp)
|
|
Packit |
8480eb |
val = strdup(tmp);
|
|
Packit |
8480eb |
else {
|
|
Packit |
8480eb |
if (value)
|
|
Packit |
8480eb |
val = strdup(value);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
if (!val)
|
|
Packit |
8480eb |
goto error;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
if (co->value)
|
|
Packit |
8480eb |
free(co->value);
|
|
Packit |
8480eb |
co->value = val;
|
|
Packit |
8480eb |
if (flags)
|
|
Packit |
8480eb |
co->flags = flags;
|
|
Packit |
8480eb |
/* Don't change user set values in the environment */
|
|
Packit |
8480eb |
if (flags & CONF_ENV && value)
|
|
Packit |
8480eb |
setenv(key, value, 0);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return CFG_OK;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
error:
|
|
Packit |
8480eb |
return ret;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static struct conf_option *conf_lookup_key(const char *section, const char *key)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct conf_option *co;
|
|
Packit |
8480eb |
u_int32_t key_hash;
|
|
Packit |
8480eb |
unsigned int size = CFG_TABLE_SIZE;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
key_hash = get_hash(key, size);
|
|
Packit |
8480eb |
for (co = config->hash[key_hash]; co != NULL; co = co->next) {
|
|
Packit |
8480eb |
if (strcasecmp(section, co->section))
|
|
Packit |
8480eb |
continue;
|
|
Packit |
8480eb |
if (!strcasecmp(key, co->name))
|
|
Packit |
8480eb |
break;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return co;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static struct conf_option *conf_lookup(const char *section, const char *key)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct conf_option *co;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!key || !section)
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (strlen(key) > PATH_MAX)
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
co = conf_lookup_key(section, key);
|
|
Packit |
8480eb |
if (!co) {
|
|
Packit |
8480eb |
/*
|
|
Packit |
8480eb |
* Strip "DEFAULT_" and look for config entry for
|
|
Packit |
8480eb |
* backward compatibility with old style config names.
|
|
Packit |
8480eb |
* Perhaps this should be a case sensitive compare?
|
|
Packit |
8480eb |
*/
|
|
Packit |
8480eb |
if (strlen(key) > 8 && !strncasecmp("DEFAULT_", key, 8))
|
|
Packit |
8480eb |
co = conf_lookup_key(section, key + 8);
|
|
Packit |
8480eb |
else {
|
|
Packit |
8480eb |
/* A new key name has been given but the value
|
|
Packit |
8480eb |
* we seek is stored under an old key name (which
|
|
Packit |
8480eb |
* includes the "DEFAULT_" prefix or doesn't exist.
|
|
Packit |
8480eb |
*/
|
|
Packit |
8480eb |
char old_key[PATH_MAX + 1];
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
strcpy(old_key, "DEFAULT_");
|
|
Packit |
8480eb |
strcat(old_key, key);
|
|
Packit |
8480eb |
co = conf_lookup_key(section, old_key);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return co;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static char **conf_enumerate_amd_mount_sections(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct conf_option *this;
|
|
Packit |
8480eb |
unsigned int count;
|
|
Packit |
8480eb |
char **paths;
|
|
Packit |
8480eb |
char *last;
|
|
Packit |
8480eb |
int i, j;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
last = NULL;
|
|
Packit |
8480eb |
count = 0;
|
|
Packit |
8480eb |
for (i = 0; i < CFG_TABLE_SIZE; i++) {
|
|
Packit |
8480eb |
if (!config->hash[i])
|
|
Packit |
8480eb |
continue;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
this = config->hash[i];
|
|
Packit |
8480eb |
while (this) {
|
|
Packit |
8480eb |
/* Only amd mount section names begin with '/' */
|
|
Packit |
8480eb |
if (*this->section != '/') {
|
|
Packit |
8480eb |
this = this->next;
|
|
Packit |
8480eb |
continue;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!last ||
|
|
Packit |
8480eb |
strcmp(this->section, last))
|
|
Packit |
8480eb |
count ++;
|
|
Packit |
8480eb |
last = this->section;
|
|
Packit |
8480eb |
this = this->next;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!count)
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
paths = (char **) malloc(((count + 1) * sizeof(char *)));
|
|
Packit |
8480eb |
if (!paths)
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
memset(paths, 0, ((count + 1) * sizeof(char *)));
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
last = NULL;
|
|
Packit |
8480eb |
j = 0;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
for (i = 0; i < CFG_TABLE_SIZE; i++) {
|
|
Packit |
8480eb |
if (!config->hash[i])
|
|
Packit |
8480eb |
continue;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
this = config->hash[i];
|
|
Packit |
8480eb |
while (this) {
|
|
Packit |
8480eb |
/* Only amd mount section names begin with '/' */
|
|
Packit |
8480eb |
if (*this->section != '/') {
|
|
Packit |
8480eb |
this = this->next;
|
|
Packit |
8480eb |
continue;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!last ||
|
|
Packit |
8480eb |
strcmp(this->section, last)) {
|
|
Packit |
8480eb |
char *path = strdup(this->section);
|
|
Packit |
8480eb |
if (!path)
|
|
Packit |
8480eb |
goto fail;
|
|
Packit |
8480eb |
paths[j++] = path;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
last = this->section;
|
|
Packit |
8480eb |
this = this->next;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return paths;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
fail:
|
|
Packit |
8480eb |
i = 0;
|
|
Packit |
8480eb |
while (paths[i])
|
|
Packit |
8480eb |
free(paths[i++]);
|
|
Packit |
8480eb |
free(paths);
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static unsigned int conf_section_exists(const char *section)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct conf_option *co;
|
|
Packit |
8480eb |
int ret;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!section)
|
|
Packit |
8480eb |
return 0;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = 0;
|
|
Packit |
8480eb |
defaults_mutex_lock();
|
|
Packit |
8480eb |
co = conf_lookup(section, section);
|
|
Packit |
8480eb |
if (co)
|
|
Packit |
8480eb |
ret = 1;
|
|
Packit |
8480eb |
defaults_mutex_unlock();
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return ret;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
/*
|
|
Packit |
8480eb |
* We've changed the key names so we need to check for the
|
|
Packit |
8480eb |
* config key and it's old name for backward conpatibility.
|
|
Packit |
8480eb |
*/
|
|
Packit |
8480eb |
static int check_set_config_value(const char *section,
|
|
Packit |
8480eb |
const char *res, const char *value)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
const char *sec;
|
|
Packit |
8480eb |
int ret;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (section)
|
|
Packit |
8480eb |
sec = section;
|
|
Packit |
8480eb |
else
|
|
Packit |
8480eb |
sec = autofs_gbl_sec;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!strcasecmp(res, NAME_LDAP_URI))
|
|
Packit |
8480eb |
ret = conf_add(sec, res, value, 0);
|
|
Packit |
8480eb |
else if (!strcasecmp(res, NAME_SEARCH_BASE))
|
|
Packit |
8480eb |
ret = conf_add(sec, res, value, 0);
|
|
Packit |
8480eb |
else
|
|
Packit |
8480eb |
ret = conf_update(sec, res, value, 0);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return ret;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static int parse_line(char *line, char **sec, char **res, char **value)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
char *key, *val, *trailer;
|
|
Packit |
8480eb |
char *tmp;
|
|
Packit |
8480eb |
int len;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
key = line;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (*key == '#' || (*key != '[' && !isalpha(*key)))
|
|
Packit |
8480eb |
return 0;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
while (*key && isblank(*key))
|
|
Packit |
8480eb |
key++;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!*key)
|
|
Packit |
8480eb |
return 0;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (*key == '[') {
|
|
Packit |
8480eb |
char *tmp;
|
|
Packit |
8480eb |
while (*key && (*key == '[' || isblank(*key)))
|
|
Packit |
8480eb |
key++;
|
|
Packit |
8480eb |
tmp = strchr(key, ']');
|
|
Packit |
8480eb |
if (!tmp)
|
|
Packit |
8480eb |
return 0;
|
|
Packit |
8480eb |
*tmp = ' ';
|
|
Packit |
8480eb |
while (*tmp && isblank(*tmp)) {
|
|
Packit |
8480eb |
*tmp = '\0';
|
|
Packit |
8480eb |
tmp--;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
*sec = key;
|
|
Packit |
8480eb |
*res = NULL;
|
|
Packit |
8480eb |
*value = NULL;
|
|
Packit |
8480eb |
return 1;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!(val = strchr(key, '=')))
|
|
Packit |
8480eb |
return 0;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
tmp = val;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
*val++ = '\0';
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
while (isblank(*(--tmp)))
|
|
Packit |
8480eb |
*tmp = '\0';
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
while (*val && (*val == '"' || isblank(*val)))
|
|
Packit |
8480eb |
val++;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
len = strlen(val);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (val[len - 1] == '\n') {
|
|
Packit |
8480eb |
val[len - 1] = '\0';
|
|
Packit |
8480eb |
len--;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
trailer = strchr(val, '#');
|
|
Packit |
8480eb |
if (!trailer)
|
|
Packit |
8480eb |
trailer = val + len - 1;
|
|
Packit |
8480eb |
else
|
|
Packit |
8480eb |
trailer--;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
while (*trailer && (*trailer == '"' || isblank(*trailer)))
|
|
Packit |
8480eb |
*(trailer--) = '\0';;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
*sec = NULL;
|
|
Packit |
8480eb |
*res = key;
|
|
Packit |
8480eb |
*value = val;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return 1;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static int read_config(unsigned int to_syslog, FILE *f, const char *name)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
char buf[MAX_LINE_LEN + 2];
|
|
Packit |
8480eb |
char secbuf[MAX_SECTION_NAME];
|
|
Packit |
8480eb |
char *new_sec;
|
|
Packit |
8480eb |
char *res;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
new_sec = NULL;
|
|
Packit |
8480eb |
while ((res = fgets(buf, MAX_LINE_LEN + 1, f))) {
|
|
Packit |
8480eb |
char *sec, *key, *value;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (strlen(res) > MAX_LINE_LEN) {
|
|
Packit |
8480eb |
message(to_syslog, "%s was truncated, ignored", res);
|
|
Packit |
8480eb |
continue;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
sec = key = value = NULL;
|
|
Packit |
8480eb |
if (!parse_line(res, &sec, &key, &value))
|
|
Packit |
8480eb |
continue;
|
|
Packit |
8480eb |
if (sec) {
|
|
Packit |
8480eb |
strcpy(secbuf, sec);
|
|
Packit |
8480eb |
new_sec = &secbuf[0];
|
|
Packit |
8480eb |
conf_update(sec, sec, NULL, 0);
|
|
Packit |
8480eb |
continue;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
if (!strcasecmp(res, NAME_AMD_MOUNT_TYPE)) {
|
|
Packit |
8480eb |
message(to_syslog,
|
|
Packit |
8480eb |
"%s is always autofs, ignored", res);
|
|
Packit |
8480eb |
continue;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
if (!strcasecmp(res, NAME_AMD_PID_FILE)) {
|
|
Packit |
8480eb |
message(to_syslog,
|
|
Packit |
8480eb |
"%s must be specified as a command line"
|
|
Packit |
8480eb |
" option, ignored", res);
|
|
Packit |
8480eb |
continue;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
if (!strcasecmp(res, NAME_AMD_RESTART_MOUNTS)) {
|
|
Packit |
8480eb |
message(to_syslog,
|
|
Packit |
8480eb |
"%s is always done by autofs, ignored", res);
|
|
Packit |
8480eb |
continue;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
if (!strcasecmp(res, NAME_AMD_USE_TCPWRAPPERS) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_AUTO_ATTRCACHE) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_PRINT_PID) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_PRINT_VERSION) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_LOG_FILE) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_PREFERRED_AMQ_PORT) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_TRUNCATE_LOG) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_DEBUG_MTAB_FILE) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_DEBUG_OPTIONS) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_SUN_MAP_SYNTAX) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_PORTMAP_PROGRAM) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_NFS_VERS) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_NFS_VERS_PING) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_NFS_PROTO) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_NFS_ALLOW_ANY_INTERFACE) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_NFS_ALLOW_INSECURE_PORT) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_NFS_RETRANSMIT_COUNTER) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_NFS_RETRANSMIT_COUNTER_UDP) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_NFS_RETRANSMIT_COUNTER_TCP) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_NFS_RETRANSMIT_COUNTER_TOPLVL) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_NFS_RETRY_INTERVAL) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_NFS_RETRY_INTERVAL_UDP) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_NFS_RETRY_INTERVAL_TCP) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_NFS_RETRY_INTERVAL_TOPLVL) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_LDAP_CACHE_MAXMEM) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_LDAP_CACHE_SECONDS) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_LDAP_PROTO_VERSION) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_SHOW_STATFS_ENTRIES) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_CACHE_DURATION) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_MAP_RELOAD_INTERVAL) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_MAP_OPTIONS) ||
|
|
Packit |
8480eb |
!strcasecmp(res, NAME_AMD_PLOCK)) {
|
|
Packit |
8480eb |
message(to_syslog,
|
|
Packit |
8480eb |
"%s is not used by autofs, ignored", res);
|
|
Packit |
8480eb |
continue;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
check_set_config_value(new_sec, key, value);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!feof(f) || ferror(f)) {
|
|
Packit |
8480eb |
message(to_syslog,
|
|
Packit |
8480eb |
"fgets returned error %d while reading config %s",
|
|
Packit |
8480eb |
ferror(f), name);
|
|
Packit |
8480eb |
return 0;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return 0;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
struct conf_option *save_ldap_option_list(const char *key)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct conf_option *co, *head, *this, *last;
|
|
Packit |
8480eb |
unsigned int size = CFG_TABLE_SIZE;
|
|
Packit |
8480eb |
u_int32_t key_hash;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
key_hash = get_hash(key, size);
|
|
Packit |
8480eb |
co = config->hash[key_hash];
|
|
Packit |
8480eb |
if (!co)
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
last = co;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
head = this = NULL;
|
|
Packit |
8480eb |
while (co) {
|
|
Packit |
8480eb |
if (strcasecmp(autofs_gbl_sec, co->section)) {
|
|
Packit |
8480eb |
last = co;
|
|
Packit |
8480eb |
goto next;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!strcasecmp(co->name, key)) {
|
|
Packit |
8480eb |
/* Unlink from old */
|
|
Packit |
8480eb |
if (co == config->hash[key_hash])
|
|
Packit |
8480eb |
config->hash[key_hash] = co->next;
|
|
Packit |
8480eb |
else
|
|
Packit |
8480eb |
last->next = co->next;
|
|
Packit |
8480eb |
last = co->next;
|
|
Packit |
8480eb |
co->next = NULL;
|
|
Packit |
8480eb |
/* Add to new */
|
|
Packit |
8480eb |
if (this)
|
|
Packit |
8480eb |
this->next = co;
|
|
Packit |
8480eb |
this = co;
|
|
Packit |
8480eb |
/* If none have been found yet */
|
|
Packit |
8480eb |
if (!head)
|
|
Packit |
8480eb |
head = co;
|
|
Packit |
8480eb |
co = last;
|
|
Packit |
8480eb |
continue;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
next:
|
|
Packit |
8480eb |
co = co->next;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return head;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
void restore_ldap_option_list(struct conf_option *list)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct conf_option *co, *this, *last;
|
|
Packit |
8480eb |
unsigned int size = CFG_TABLE_SIZE;
|
|
Packit |
8480eb |
u_int32_t key_hash;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!list)
|
|
Packit |
8480eb |
return;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
this = list;
|
|
Packit |
8480eb |
while (this) {
|
|
Packit |
8480eb |
last = this;
|
|
Packit |
8480eb |
this = this->next;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
key_hash = get_hash(list->name, size);
|
|
Packit |
8480eb |
co = config->hash[key_hash];
|
|
Packit |
8480eb |
config->hash[key_hash] = list;
|
|
Packit |
8480eb |
if (co)
|
|
Packit |
8480eb |
last->next = co;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
void free_ldap_option_list(struct conf_option *list)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct conf_option *next, *this;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!list)
|
|
Packit |
8480eb |
return;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
this = list;
|
|
Packit |
8480eb |
while (this) {
|
|
Packit |
8480eb |
next = this->next;
|
|
Packit |
8480eb |
free(this->section);
|
|
Packit |
8480eb |
free(this->name);
|
|
Packit |
8480eb |
free(this->value);
|
|
Packit |
8480eb |
free(this);
|
|
Packit |
8480eb |
this = next;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static void clean_ldap_multi_option(const char *key)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
const char *sec = autofs_gbl_sec;
|
|
Packit |
8480eb |
struct conf_option *co;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
while ((co = conf_lookup(sec, key)))
|
|
Packit |
8480eb |
conf_delete(co->section, co->name);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static int reset_defaults(unsigned int to_syslog)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
int ret;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_load_autofs_defaults();
|
|
Packit |
8480eb |
if (!ret) {
|
|
Packit |
8480eb |
message(to_syslog, "failed to reset autofs default config");
|
|
Packit |
8480eb |
return 0;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = conf_load_amd_defaults();
|
|
Packit |
8480eb |
if (!ret) {
|
|
Packit |
8480eb |
message(to_syslog, "failed to reset amd default config");
|
|
Packit |
8480eb |
return 0;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return 1;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
/*
|
|
Packit |
8480eb |
* Read config env variables and check they have been set.
|
|
Packit |
8480eb |
*
|
|
Packit |
8480eb |
* This simple minded routine assumes the config file
|
|
Packit |
8480eb |
* is valid bourne shell script without spaces around "="
|
|
Packit |
8480eb |
* and that it has valid values.
|
|
Packit |
8480eb |
*/
|
|
Packit |
8480eb |
unsigned int defaults_read_config(unsigned int to_syslog)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
FILE *conf, *oldconf;
|
|
Packit |
8480eb |
struct stat stb, oldstb;
|
|
Packit |
8480eb |
int ret, stat, oldstat;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ret = 1;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
conf = oldconf = NULL;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
defaults_mutex_lock();
|
|
Packit |
8480eb |
if (!config) {
|
|
Packit |
8480eb |
if (conf_init()) {
|
|
Packit |
8480eb |
message(to_syslog, "failed to init config");
|
|
Packit |
8480eb |
ret = 0;
|
|
Packit |
8480eb |
goto out;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
conf = open_fopen_r(DEFAULT_CONFIG_FILE);
|
|
Packit |
8480eb |
if (!conf)
|
|
Packit Service |
2c88d9 |
message(to_syslog, "failed to open config %s",
|
|
Packit |
8480eb |
DEFAULT_CONFIG_FILE);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
oldconf = open_fopen_r(OLD_CONFIG_FILE);
|
|
Packit Service |
2c88d9 |
if (!oldconf && !conf)
|
|
Packit Service |
2c88d9 |
message(to_syslog, "failed to open old config %s",
|
|
Packit |
8480eb |
OLD_CONFIG_FILE);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
/* Neither config has been updated */
|
|
Packit |
8480eb |
stat = oldstat = -1;
|
|
Packit |
8480eb |
if (conf && oldconf &&
|
|
Packit |
8480eb |
(stat = fstat(fileno(conf), &stb) != -1) &&
|
|
Packit |
8480eb |
stb.st_mtime <= config->modified &&
|
|
Packit |
8480eb |
(oldstat = fstat(fileno(oldconf), &oldstb) == -1) &&
|
|
Packit |
8480eb |
oldstb.st_mtime <= config->modified) {
|
|
Packit |
8480eb |
goto out;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (conf || oldconf) {
|
|
Packit |
8480eb |
if (!reset_defaults(to_syslog)) {
|
|
Packit |
8480eb |
ret = 0;
|
|
Packit |
8480eb |
goto out;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
/* Update last modified */
|
|
Packit |
8480eb |
if (stat != -1) {
|
|
Packit |
8480eb |
if (oldstat == -1)
|
|
Packit |
8480eb |
config->modified = stb.st_mtime;
|
|
Packit |
8480eb |
else {
|
|
Packit |
8480eb |
if (oldstb.st_mtime < stb.st_mtime)
|
|
Packit |
8480eb |
config->modified = oldstb.st_mtime;
|
|
Packit |
8480eb |
else
|
|
Packit |
8480eb |
config->modified = stb.st_mtime;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (conf)
|
|
Packit |
8480eb |
read_config(to_syslog, conf, DEFAULT_CONFIG_FILE);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
/*
|
|
Packit |
8480eb |
* Read the old config file and override the installed
|
|
Packit |
8480eb |
* defaults in case user has a stale config following
|
|
Packit |
8480eb |
* updating to the new config file location.
|
|
Packit |
8480eb |
*/
|
|
Packit |
8480eb |
if (oldconf) {
|
|
Packit |
8480eb |
struct conf_option *ldap_search_base, *ldap_uris;
|
|
Packit |
8480eb |
const char *sec = amd_gbl_sec;
|
|
Packit |
8480eb |
struct conf_option *co;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ldap_search_base = save_ldap_option_list(NAME_SEARCH_BASE);
|
|
Packit |
8480eb |
if (ldap_search_base)
|
|
Packit |
8480eb |
clean_ldap_multi_option(NAME_SEARCH_BASE);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ldap_uris = save_ldap_option_list(NAME_LDAP_URI);
|
|
Packit |
8480eb |
if (ldap_uris)
|
|
Packit |
8480eb |
clean_ldap_multi_option(NAME_LDAP_URI);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
read_config(to_syslog, oldconf, OLD_CONFIG_FILE);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (ldap_search_base) {
|
|
Packit |
8480eb |
co = conf_lookup(sec, NAME_SEARCH_BASE);
|
|
Packit |
8480eb |
if (co)
|
|
Packit |
8480eb |
free_ldap_option_list(ldap_search_base);
|
|
Packit |
8480eb |
else
|
|
Packit |
8480eb |
restore_ldap_option_list(ldap_search_base);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (ldap_uris) {
|
|
Packit |
8480eb |
co = conf_lookup(sec, NAME_LDAP_URI);
|
|
Packit |
8480eb |
if (co)
|
|
Packit |
8480eb |
free_ldap_option_list(ldap_uris);
|
|
Packit |
8480eb |
else
|
|
Packit |
8480eb |
restore_ldap_option_list(ldap_uris);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
out:
|
|
Packit |
8480eb |
if (conf)
|
|
Packit |
8480eb |
fclose(conf);
|
|
Packit |
8480eb |
if (oldconf)
|
|
Packit |
8480eb |
fclose(oldconf);
|
|
Packit |
8480eb |
defaults_mutex_unlock();
|
|
Packit |
8480eb |
return ret;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static char *conf_get_string(const char *section, const char *name)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct conf_option *co;
|
|
Packit |
8480eb |
char *val = NULL;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
defaults_mutex_lock();
|
|
Packit |
8480eb |
co = conf_lookup(section, name);
|
|
Packit |
8480eb |
if (co && co->value)
|
|
Packit |
8480eb |
val = strdup(co->value);
|
|
Packit |
8480eb |
defaults_mutex_unlock();
|
|
Packit |
8480eb |
return val;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static long conf_get_number(const char *section, const char *name)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct conf_option *co;
|
|
Packit |
8480eb |
long val = -1;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
defaults_mutex_lock();
|
|
Packit |
8480eb |
co = conf_lookup(section, name);
|
|
Packit |
8480eb |
if (co && co->value)
|
|
Packit |
8480eb |
val = atol(co->value);
|
|
Packit |
8480eb |
defaults_mutex_unlock();
|
|
Packit |
8480eb |
return val;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static int conf_get_yesno(const char *section, const char *name)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct conf_option *co;
|
|
Packit |
8480eb |
int val = -1;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
defaults_mutex_lock();
|
|
Packit |
8480eb |
co = conf_lookup(section, name);
|
|
Packit |
8480eb |
if (co && co->value) {
|
|
Packit |
8480eb |
if (isdigit(*co->value))
|
|
Packit |
8480eb |
val = atoi(co->value);
|
|
Packit |
8480eb |
else if (!strcasecmp(co->value, "yes"))
|
|
Packit |
8480eb |
val = 1;
|
|
Packit |
8480eb |
else if (!strcasecmp(co->value, "no"))
|
|
Packit |
8480eb |
val = 0;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
defaults_mutex_unlock();
|
|
Packit |
8480eb |
return val;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
#ifdef WITH_LDAP
|
|
Packit |
8480eb |
void defaults_free_uris(struct list_head *list)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct list_head *next;
|
|
Packit |
8480eb |
struct ldap_uri *uri;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (list_empty(list)) {
|
|
Packit |
8480eb |
free(list);
|
|
Packit |
8480eb |
return;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
next = list->next;
|
|
Packit |
8480eb |
while (next != list) {
|
|
Packit |
8480eb |
uri = list_entry(next, struct ldap_uri, list);
|
|
Packit |
8480eb |
next = next->next;
|
|
Packit |
8480eb |
list_del(&uri->list);
|
|
Packit |
8480eb |
free(uri->uri);
|
|
Packit |
8480eb |
free(uri);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
free(list);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static unsigned int add_uris(char *value, struct list_head *list)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
char *str, *tok, *ptr = NULL;
|
|
Packit |
8480eb |
size_t len = strlen(value) + 1;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
str = malloc(len);
|
|
Packit |
8480eb |
if (!str)
|
|
Packit |
8480eb |
return 0;
|
|
Packit |
8480eb |
strcpy(str, value);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
tok = strtok_r(str, " ", &ptr);
|
|
Packit |
8480eb |
while (tok) {
|
|
Packit |
8480eb |
struct ldap_uri *new;
|
|
Packit |
8480eb |
char *uri;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
new = malloc(sizeof(struct ldap_uri));
|
|
Packit |
8480eb |
if (!new)
|
|
Packit |
8480eb |
continue;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
uri = strdup(tok);
|
|
Packit |
8480eb |
if (!uri)
|
|
Packit |
8480eb |
free(new);
|
|
Packit |
8480eb |
else {
|
|
Packit |
8480eb |
new->uri = uri;
|
|
Packit |
8480eb |
list_add_tail(&new->list, list);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
tok = strtok_r(NULL, " ", &ptr);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
free(str);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return 1;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
struct list_head *defaults_get_uris(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct conf_option *co;
|
|
Packit |
8480eb |
struct list_head *list;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
list = malloc(sizeof(struct list_head));
|
|
Packit |
8480eb |
if (!list)
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
INIT_LIST_HEAD(list);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!defaults_read_config(0)) {
|
|
Packit |
8480eb |
free(list);
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
defaults_mutex_lock();
|
|
Packit |
8480eb |
co = conf_lookup(autofs_gbl_sec, NAME_LDAP_URI);
|
|
Packit |
8480eb |
if (!co) {
|
|
Packit |
8480eb |
defaults_mutex_unlock();
|
|
Packit |
8480eb |
free(list);
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
while (co) {
|
|
Packit |
8480eb |
if (!strcasecmp(co->name, NAME_LDAP_URI))
|
|
Packit |
8480eb |
if (co->value)
|
|
Packit |
8480eb |
add_uris(co->value, list);
|
|
Packit |
8480eb |
co = co->next;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
defaults_mutex_unlock();
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (list_empty(list)) {
|
|
Packit |
8480eb |
free(list);
|
|
Packit |
8480eb |
list = NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return list;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
struct ldap_schema *defaults_get_default_schema(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct ldap_schema *schema;
|
|
Packit |
8480eb |
char *mc, *ma, *ec, *ea, *va;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
mc = strdup(DEFAULT_MAP_OBJ_CLASS);
|
|
Packit |
8480eb |
if (!mc)
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ma = strdup(DEFAULT_MAP_ATTR);
|
|
Packit |
8480eb |
if (!ma) {
|
|
Packit |
8480eb |
free(mc);
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ec = strdup(DEFAULT_ENTRY_OBJ_CLASS);
|
|
Packit |
8480eb |
if (!ec) {
|
|
Packit |
8480eb |
free(mc);
|
|
Packit |
8480eb |
free(ma);
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ea = strdup(DEFAULT_ENTRY_ATTR);
|
|
Packit |
8480eb |
if (!ea) {
|
|
Packit |
8480eb |
free(mc);
|
|
Packit |
8480eb |
free(ma);
|
|
Packit |
8480eb |
free(ec);
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
va = strdup(DEFAULT_VALUE_ATTR);
|
|
Packit |
8480eb |
if (!va) {
|
|
Packit |
8480eb |
free(mc);
|
|
Packit |
8480eb |
free(ma);
|
|
Packit |
8480eb |
free(ec);
|
|
Packit |
8480eb |
free(ea);
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
schema = malloc(sizeof(struct ldap_schema));
|
|
Packit |
8480eb |
if (!schema) {
|
|
Packit |
8480eb |
free(mc);
|
|
Packit |
8480eb |
free(ma);
|
|
Packit |
8480eb |
free(ec);
|
|
Packit |
8480eb |
free(ea);
|
|
Packit |
8480eb |
free(va);
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
schema->map_class = mc;
|
|
Packit |
8480eb |
schema->map_attr = ma;
|
|
Packit |
8480eb |
schema->entry_class = ec;
|
|
Packit |
8480eb |
schema->entry_attr = ea;
|
|
Packit |
8480eb |
schema->value_attr = va;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return schema;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
static struct ldap_searchdn *alloc_searchdn(const char *value)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct ldap_searchdn *sdn;
|
|
Packit |
8480eb |
char *val;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
sdn = malloc(sizeof(struct ldap_searchdn));
|
|
Packit |
8480eb |
if (!sdn)
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
val = strdup(value);
|
|
Packit |
8480eb |
if (!val) {
|
|
Packit |
8480eb |
free(sdn);
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
sdn->basedn = val;
|
|
Packit |
8480eb |
sdn->next = NULL;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return sdn;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
void defaults_free_searchdns(struct ldap_searchdn *sdn)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct ldap_searchdn *this = sdn;
|
|
Packit |
8480eb |
struct ldap_searchdn *next;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
while (this) {
|
|
Packit |
8480eb |
next = this->next;
|
|
Packit |
8480eb |
free(this->basedn);
|
|
Packit |
8480eb |
free(this);
|
|
Packit |
8480eb |
this = next;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
struct ldap_searchdn *defaults_get_searchdns(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct conf_option *co;
|
|
Packit |
8480eb |
struct ldap_searchdn *sdn, *last;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!defaults_read_config(0))
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
defaults_mutex_lock();
|
|
Packit |
8480eb |
co = conf_lookup(autofs_gbl_sec, NAME_SEARCH_BASE);
|
|
Packit |
8480eb |
if (!co) {
|
|
Packit |
8480eb |
defaults_mutex_unlock();
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
sdn = last = NULL;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
while (co) {
|
|
Packit |
8480eb |
struct ldap_searchdn *new;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!co->value || strcasecmp(co->name, NAME_SEARCH_BASE) ) {
|
|
Packit |
8480eb |
co = co->next;
|
|
Packit |
8480eb |
continue;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
new = alloc_searchdn(co->value);
|
|
Packit |
8480eb |
if (!new) {
|
|
Packit |
8480eb |
defaults_mutex_unlock();
|
|
Packit |
8480eb |
defaults_free_searchdns(sdn);
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!last)
|
|
Packit |
8480eb |
last = new;
|
|
Packit |
8480eb |
else {
|
|
Packit |
8480eb |
last->next = new;
|
|
Packit |
8480eb |
last = new;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!sdn)
|
|
Packit |
8480eb |
sdn = new;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
co = co->next;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
defaults_mutex_unlock();
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return sdn;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
struct ldap_schema *defaults_get_schema(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct ldap_schema *schema;
|
|
Packit |
8480eb |
char *mc, *ma, *ec, *ea, *va;
|
|
Packit |
8480eb |
const char *sec = autofs_gbl_sec;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
mc = conf_get_string(sec, NAME_MAP_OBJ_CLASS);
|
|
Packit |
8480eb |
if (!mc)
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ma = conf_get_string(sec, NAME_MAP_ATTR);
|
|
Packit |
8480eb |
if (!ma) {
|
|
Packit |
8480eb |
free(mc);
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ec = conf_get_string(sec, NAME_ENTRY_OBJ_CLASS);
|
|
Packit |
8480eb |
if (!ec) {
|
|
Packit |
8480eb |
free(mc);
|
|
Packit |
8480eb |
free(ma);
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
ea = conf_get_string(sec, NAME_ENTRY_ATTR);
|
|
Packit |
8480eb |
if (!ea) {
|
|
Packit |
8480eb |
free(mc);
|
|
Packit |
8480eb |
free(ma);
|
|
Packit |
8480eb |
free(ec);
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
va = conf_get_string(sec, NAME_VALUE_ATTR);
|
|
Packit |
8480eb |
if (!va) {
|
|
Packit |
8480eb |
free(mc);
|
|
Packit |
8480eb |
free(ma);
|
|
Packit |
8480eb |
free(ec);
|
|
Packit |
8480eb |
free(ea);
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
schema = malloc(sizeof(struct ldap_schema));
|
|
Packit |
8480eb |
if (!schema) {
|
|
Packit |
8480eb |
free(mc);
|
|
Packit |
8480eb |
free(ma);
|
|
Packit |
8480eb |
free(ec);
|
|
Packit |
8480eb |
free(ea);
|
|
Packit |
8480eb |
free(va);
|
|
Packit |
8480eb |
return NULL;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
schema->map_class = mc;
|
|
Packit |
8480eb |
schema->map_attr = ma;
|
|
Packit |
8480eb |
schema->entry_class = ec;
|
|
Packit |
8480eb |
schema->entry_attr = ea;
|
|
Packit |
8480eb |
schema->value_attr = va;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return schema;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
#endif
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
const char *defaults_get_master_map(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
char *master = conf_get_string(autofs_gbl_sec, NAME_MASTER_MAP);
|
|
Packit |
8480eb |
if (!master)
|
|
Packit |
8480eb |
return strdup(default_master_map_name);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return (const char *) master;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
int defaults_master_set(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
struct conf_option *co;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
defaults_mutex_lock();
|
|
Packit |
8480eb |
co = conf_lookup(autofs_gbl_sec, NAME_MASTER_MAP);
|
|
Packit |
8480eb |
defaults_mutex_unlock();
|
|
Packit |
8480eb |
if (co)
|
|
Packit |
8480eb |
return 1;
|
|
Packit |
8480eb |
return 0;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int defaults_get_timeout(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
long timeout;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
timeout = conf_get_number(autofs_gbl_sec, NAME_TIMEOUT);
|
|
Packit |
8480eb |
if (timeout < 0)
|
|
Packit |
8480eb |
timeout = atol(DEFAULT_TIMEOUT);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return (unsigned int) timeout;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
int defaults_get_master_wait(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
long wait;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
wait = conf_get_number(autofs_gbl_sec, NAME_MASTER_WAIT);
|
|
Packit |
8480eb |
if (wait < 0)
|
|
Packit |
8480eb |
wait = atol(DEFAULT_MASTER_WAIT);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return (int) wait;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int defaults_get_negative_timeout(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
long n_timeout;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
n_timeout = conf_get_number(autofs_gbl_sec, NAME_NEGATIVE_TIMEOUT);
|
|
Packit |
8480eb |
if (n_timeout <= 0)
|
|
Packit |
8480eb |
n_timeout = atol(DEFAULT_NEGATIVE_TIMEOUT);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return (unsigned int) n_timeout;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int defaults_get_browse_mode(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
int res;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
res = conf_get_yesno(autofs_gbl_sec, NAME_BROWSE_MODE);
|
|
Packit |
8480eb |
if (res < 0)
|
|
Packit |
8480eb |
res = atoi(DEFAULT_BROWSE_MODE);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return res;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int defaults_get_logging(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
char *res;
|
|
Packit |
8480eb |
unsigned int logging = LOGOPT_NONE;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
res = conf_get_string(autofs_gbl_sec, NAME_LOGGING);
|
|
Packit |
8480eb |
if (!res)
|
|
Packit |
8480eb |
return logging;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!strcasecmp(res, "none"))
|
|
Packit |
8480eb |
logging = LOGOPT_NONE;
|
|
Packit |
8480eb |
else {
|
|
Packit |
8480eb |
if (!strcasecmp(res, "verbose"))
|
|
Packit |
8480eb |
logging |= LOGOPT_VERBOSE;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (!strcasecmp(res, "debug"))
|
|
Packit |
8480eb |
logging |= LOGOPT_DEBUG;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
free(res);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return logging;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int defaults_force_std_prog_map_env(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
int res;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
res = conf_get_yesno(autofs_gbl_sec, NAME_FORCE_STD_PROG_MAP_ENV);
|
|
Packit |
8480eb |
if (res < 0)
|
|
Packit |
8480eb |
res = atoi(DEFAULT_FORCE_STD_PROG_MAP_ENV);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return res;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int defaults_get_ldap_timeout(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
int res;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
res = conf_get_number(autofs_gbl_sec, NAME_LDAP_TIMEOUT);
|
|
Packit |
8480eb |
if (res < 0)
|
|
Packit |
8480eb |
res = atoi(DEFAULT_LDAP_TIMEOUT);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return res;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int defaults_get_ldap_network_timeout(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
int res;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
res = conf_get_number(autofs_gbl_sec, NAME_LDAP_NETWORK_TIMEOUT);
|
|
Packit |
8480eb |
if (res < 0)
|
|
Packit |
8480eb |
res = atoi(DEFAULT_LDAP_NETWORK_TIMEOUT);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return res;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int defaults_get_mount_nfs_default_proto(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
int proto;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
proto = conf_get_number(autofs_gbl_sec, NAME_MOUNT_NFS_DEFAULT_PROTOCOL);
|
|
Packit |
8480eb |
if (proto < 2 || proto > 4)
|
|
Packit |
8480eb |
proto = atoi(DEFAULT_MOUNT_NFS_DEFAULT_PROTOCOL);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return (unsigned int) proto;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int defaults_get_append_options(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
int res;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
res = conf_get_yesno(autofs_gbl_sec, NAME_APPEND_OPTIONS);
|
|
Packit |
8480eb |
if (res < 0)
|
|
Packit |
8480eb |
res = atoi(DEFAULT_APPEND_OPTIONS);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return res;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit Service |
8741f6 |
unsigned int defaults_get_mount_verbose(void)
|
|
Packit Service |
8741f6 |
{
|
|
Packit Service |
8741f6 |
long res;
|
|
Packit Service |
8741f6 |
|
|
Packit Service |
8741f6 |
res = conf_get_yesno(autofs_gbl_sec, NAME_MOUNT_VERBOSE);
|
|
Packit Service |
8741f6 |
if (res < 0)
|
|
Packit Service |
8741f6 |
res = atoi(DEFAULT_MOUNT_VERBOSE);
|
|
Packit Service |
8741f6 |
|
|
Packit Service |
8741f6 |
return res;
|
|
Packit Service |
8741f6 |
}
|
|
Packit Service |
8741f6 |
|
|
Packit |
8480eb |
unsigned int defaults_get_mount_wait(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
long wait;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
wait = conf_get_number(autofs_gbl_sec, NAME_MOUNT_WAIT);
|
|
Packit |
8480eb |
if (wait < 0)
|
|
Packit |
8480eb |
wait = atoi(DEFAULT_MOUNT_WAIT);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return (unsigned int) wait;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int defaults_get_umount_wait(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
long wait;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
wait = conf_get_number(autofs_gbl_sec, NAME_UMOUNT_WAIT);
|
|
Packit |
8480eb |
if (wait < 0)
|
|
Packit |
8480eb |
wait = atoi(DEFAULT_UMOUNT_WAIT);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return (unsigned int) wait;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
const char *defaults_get_auth_conf_file(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
char *cf;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
cf = conf_get_string(autofs_gbl_sec, NAME_AUTH_CONF_FILE);
|
|
Packit |
8480eb |
if (!cf)
|
|
Packit |
8480eb |
return strdup(default_auth_conf_file);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return (const char *) cf;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int defaults_get_map_hash_table_size(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
long size;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
size = conf_get_number(autofs_gbl_sec, NAME_MAP_HASH_TABLE_SIZE);
|
|
Packit |
8480eb |
if (size < 0)
|
|
Packit |
8480eb |
size = atoi(DEFAULT_MAP_HASH_TABLE_SIZE);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return (unsigned int) size;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int defaults_use_hostname_for_mounts(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
int res;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
res = conf_get_yesno(autofs_gbl_sec, NAME_USE_HOSTNAME_FOR_MOUNTS);
|
|
Packit |
8480eb |
if (res < 0)
|
|
Packit |
8480eb |
res = atoi(DEFAULT_USE_HOSTNAME_FOR_MOUNTS);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return res;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int defaults_disable_not_found_message(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
int res;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
res = conf_get_yesno(autofs_gbl_sec, NAME_DISABLE_NOT_FOUND_MESSAGE);
|
|
Packit |
8480eb |
if (res < 0)
|
|
Packit |
8480eb |
res = atoi(DEFAULT_DISABLE_NOT_FOUND_MESSAGE);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return res;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit Service |
bf9999 |
unsigned int defaults_get_use_ignore_mount_option(void)
|
|
Packit Service |
bf9999 |
{
|
|
Packit Service |
bf9999 |
int res;
|
|
Packit Service |
bf9999 |
|
|
Packit Service |
bf9999 |
res = conf_get_yesno(autofs_gbl_sec, NAME_USE_IGNORE_MOUNT_OPTION);
|
|
Packit Service |
bf9999 |
if (res < 0)
|
|
Packit Service |
bf9999 |
res = atoi(DEFAULT_USE_IGNORE_MOUNT_OPTION);
|
|
Packit Service |
bf9999 |
|
|
Packit Service |
bf9999 |
return res;
|
|
Packit Service |
bf9999 |
}
|
|
Packit Service |
bf9999 |
|
|
Packit |
8480eb |
unsigned int defaults_get_sss_master_map_wait(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
int res;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
res = conf_get_yesno(autofs_gbl_sec, NAME_SSS_MASTER_MAP_WAIT);
|
|
Packit |
8480eb |
if (res < 0)
|
|
Packit |
8480eb |
res = atoi(DEFAULT_SSS_MASTER_MAP_WAIT);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return res;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int defaults_get_use_mount_request_log_id(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
int res;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
res = conf_get_yesno(autofs_gbl_sec, NAME_USE_MOUNT_REQUEST_LOG_ID);
|
|
Packit |
8480eb |
if (res < 0)
|
|
Packit |
8480eb |
res = atoi(DEFAULT_USE_MOUNT_REQUEST_LOG_ID);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return res;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int conf_amd_mount_section_exists(const char *section)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
return conf_section_exists(section);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char **conf_amd_get_mount_paths(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
return conf_enumerate_amd_mount_sections();
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_arch(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
return conf_get_string(amd_gbl_sec, NAME_AMD_ARCH);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_karch(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
char *tmp = conf_get_string(amd_gbl_sec, NAME_AMD_KARCH);
|
|
Packit |
8480eb |
if (!tmp)
|
|
Packit |
8480eb |
tmp = conf_amd_get_arch();
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return tmp;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_os(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
return conf_get_string(amd_gbl_sec, NAME_AMD_OS);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_os_ver(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
return conf_get_string(amd_gbl_sec, NAME_AMD_OSVER);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_vendor(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
return conf_get_string(amd_gbl_sec, NAME_AMD_VENDOR);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_full_os(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
return conf_get_string(amd_gbl_sec, NAME_AMD_FULL_OS);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_auto_dir(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
char *tmp = conf_get_string(amd_gbl_sec, NAME_AMD_AUTO_DIR);
|
|
Packit |
8480eb |
if (!tmp)
|
|
Packit |
8480eb |
return strdup(DEFAULT_AMD_AUTO_DIR);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return tmp;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_cluster(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
return conf_get_string(amd_gbl_sec, NAME_AMD_CLUSTER);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int conf_amd_get_exec_map_timeout(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
long tmp = conf_get_number(amd_gbl_sec, NAME_AMD_EXEC_MAP_TIMEOUT);
|
|
Packit |
8480eb |
if (tmp == -1)
|
|
Packit |
8480eb |
tmp = atoi(DEFAULT_AMD_EXEC_MAP_TIMEOUT);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return (unsigned int) tmp;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_hesiod_base(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
return conf_get_string(amd_gbl_sec, NAME_AMD_HESIOD_BASE);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_ldap_base(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
return conf_get_string(amd_gbl_sec, NAME_AMD_LDAP_BASE);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_ldap_hostports(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
return conf_get_string(amd_gbl_sec, NAME_AMD_LDAP_HOSTPORTS);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int conf_amd_get_ldap_proto_version(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
long tmp = conf_get_number(amd_gbl_sec, NAME_AMD_LDAP_PROTO_VERSION);
|
|
Packit |
8480eb |
if (tmp == -1)
|
|
Packit |
8480eb |
tmp = atoi(DEFAULT_AMD_LDAP_PROTO_VERSION);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return (unsigned int) tmp;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_sub_domain(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
return conf_get_string(amd_gbl_sec, NAME_AMD_SUB_DOMAIN);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_localhost_address(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
return conf_get_string(amd_gbl_sec, NAME_AMD_LOCALHOST_ADDRESS);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int conf_amd_get_log_options(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
int log_level = -1;
|
|
Packit |
8480eb |
char *tmp = conf_get_string(amd_gbl_sec, NAME_AMD_LOG_OPTIONS);
|
|
Packit |
8480eb |
if (tmp) {
|
|
Packit |
8480eb |
if (strstr(tmp, "debug") || strstr(tmp, "all")) {
|
|
Packit |
8480eb |
if (log_level < LOG_DEBUG)
|
|
Packit |
8480eb |
log_level = LOG_DEBUG;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
if (strstr(tmp, "info") ||
|
|
Packit |
8480eb |
strstr(tmp, "user") ||
|
|
Packit |
8480eb |
strcmp(tmp, "defaults")) {
|
|
Packit |
8480eb |
if (log_level < LOG_INFO)
|
|
Packit |
8480eb |
log_level = LOG_INFO;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
if (strstr(tmp, "notice")) {
|
|
Packit |
8480eb |
if (log_level < LOG_NOTICE)
|
|
Packit |
8480eb |
log_level = LOG_NOTICE;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
if (strstr(tmp, "warn") ||
|
|
Packit |
8480eb |
strstr(tmp, "map") ||
|
|
Packit |
8480eb |
strstr(tmp, "stats") ||
|
|
Packit |
8480eb |
strstr(tmp, "warning")) {
|
|
Packit |
8480eb |
if (log_level < LOG_WARNING)
|
|
Packit |
8480eb |
log_level = LOG_WARNING;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
if (strstr(tmp, "error")) {
|
|
Packit |
8480eb |
if (log_level < LOG_ERR)
|
|
Packit |
8480eb |
log_level = LOG_ERR;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
if (strstr(tmp, "fatal")) {
|
|
Packit |
8480eb |
if (log_level < LOG_CRIT)
|
|
Packit |
8480eb |
log_level = LOG_CRIT;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
free(tmp);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
if (log_level == -1)
|
|
Packit |
8480eb |
log_level = LOG_ERR;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return (unsigned int) log_level;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_nis_domain(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
return conf_get_string(amd_gbl_sec, NAME_AMD_NIS_DOMAIN);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int conf_amd_set_nis_domain(const char *domain)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
int ret;
|
|
Packit |
8480eb |
ret = conf_update(amd_gbl_sec, NAME_AMD_NIS_DOMAIN, domain, CONF_NONE);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return (unsigned int) ret;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_map_defaults(const char *section)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
char *tmp = NULL;
|
|
Packit |
8480eb |
if (section)
|
|
Packit |
8480eb |
tmp = conf_get_string(section, NAME_AMD_MAP_DEFAULTS);
|
|
Packit |
8480eb |
if (!tmp)
|
|
Packit |
8480eb |
tmp = conf_get_string(amd_gbl_sec, NAME_AMD_MAP_DEFAULTS);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return tmp;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_map_name(const char *section)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
char *tmp = NULL;
|
|
Packit |
8480eb |
if (section)
|
|
Packit |
8480eb |
tmp = conf_get_string(section, NAME_AMD_MAP_NAME);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return tmp;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_map_options(const char *section)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
char *tmp = NULL;
|
|
Packit |
8480eb |
if (section)
|
|
Packit |
8480eb |
tmp = conf_get_string(section, NAME_AMD_MAP_OPTIONS);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return tmp;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_map_type(const char *section)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
char *tmp = NULL;
|
|
Packit |
8480eb |
if (section)
|
|
Packit |
8480eb |
tmp = conf_get_string(section, NAME_AMD_MAP_TYPE);
|
|
Packit |
8480eb |
if (!tmp)
|
|
Packit |
8480eb |
tmp = conf_get_string(amd_gbl_sec, NAME_AMD_MAP_TYPE);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return tmp;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_search_path(const char *section)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
char *tmp = NULL;
|
|
Packit |
8480eb |
if (section)
|
|
Packit |
8480eb |
tmp = conf_get_string(section, NAME_AMD_SEARCH_PATH);
|
|
Packit |
8480eb |
if (!tmp)
|
|
Packit |
8480eb |
tmp = conf_get_string(amd_gbl_sec, NAME_AMD_SEARCH_PATH);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return tmp;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned int conf_amd_get_dismount_interval(const char *section)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
long tmp = -1;
|
|
Packit |
8480eb |
if (section)
|
|
Packit |
8480eb |
tmp = conf_get_number(section, NAME_AMD_DISMOUNT_INTERVAL);
|
|
Packit |
8480eb |
if (tmp == -1)
|
|
Packit |
8480eb |
tmp = conf_get_number(amd_gbl_sec, NAME_AMD_DISMOUNT_INTERVAL);
|
|
Packit |
8480eb |
if (tmp == -1)
|
|
Packit |
8480eb |
tmp = defaults_get_timeout();
|
|
Packit |
8480eb |
/*
|
|
Packit |
8480eb |
* This won't happen as defaults_get_timeout() will return
|
|
Packit |
8480eb |
* the autofs setting which is used if no other setting is
|
|
Packit |
8480eb |
* found.
|
|
Packit |
8480eb |
*/
|
|
Packit |
8480eb |
if (tmp == -1)
|
|
Packit |
8480eb |
tmp = atoi(DEFAULT_TIMEOUT);
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return (unsigned int) tmp;
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
char *conf_amd_get_linux_ufs_mount_type(void)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
return conf_get_string(amd_gbl_sec, NAME_AMD_LINUX_UFS_MOUNT_TYPE);
|
|
Packit |
8480eb |
}
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
unsigned long conf_amd_get_flags(const char *section)
|
|
Packit |
8480eb |
{
|
|
Packit |
8480eb |
const char *amd = amd_gbl_sec;
|
|
Packit |
8480eb |
unsigned long flags, tmp;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
/* Always true for us */
|
|
Packit |
8480eb |
flags = CONF_MOUNT_TYPE_AUTOFS;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
tmp = -1;
|
|
Packit |
8480eb |
if (section)
|
|
Packit |
8480eb |
tmp = conf_get_yesno(section, NAME_AMD_BROWSABLE_DIRS);
|
|
Packit |
8480eb |
if (tmp == -1)
|
|
Packit |
8480eb |
tmp = conf_get_yesno(amd, NAME_AMD_BROWSABLE_DIRS);
|
|
Packit |
8480eb |
if (tmp)
|
|
Packit |
8480eb |
flags |= CONF_BROWSABLE_DIRS;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
tmp = -1;
|
|
Packit |
8480eb |
if (section)
|
|
Packit |
8480eb |
tmp = conf_get_yesno(section, NAME_AMD_SELECTORS_IN_DEFAULTS);
|
|
Packit |
8480eb |
if (tmp == -1)
|
|
Packit |
8480eb |
tmp = conf_get_yesno(amd, NAME_AMD_SELECTORS_IN_DEFAULTS);
|
|
Packit |
8480eb |
if (tmp)
|
|
Packit |
8480eb |
flags |= CONF_SELECTORS_IN_DEFAULTS;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
tmp = conf_get_yesno(amd, NAME_AMD_NORMALIZE_HOSTNAMES);
|
|
Packit |
8480eb |
if (tmp)
|
|
Packit |
8480eb |
flags |= CONF_NORMALIZE_HOSTNAMES;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
tmp = conf_get_yesno(amd, NAME_AMD_RESTART_MOUNTS);
|
|
Packit |
8480eb |
if (tmp)
|
|
Packit |
8480eb |
flags |= CONF_RESTART_EXISTING_MOUNTS;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
tmp = conf_get_yesno(amd, NAME_AMD_FULLY_QUALIFIED_HOSTS);
|
|
Packit |
8480eb |
if (tmp)
|
|
Packit |
8480eb |
flags |= CONF_FULLY_QUALIFIED_HOSTS;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
tmp = conf_get_yesno(amd, NAME_AMD_UMOUNT_ON_EXIT);
|
|
Packit |
8480eb |
if (tmp)
|
|
Packit |
8480eb |
flags |= CONF_UNMOUNT_ON_EXIT;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
tmp = -1;
|
|
Packit |
8480eb |
if (section)
|
|
Packit |
8480eb |
tmp = conf_get_yesno(section, NAME_AMD_AUTOFS_USE_LOFS);
|
|
Packit |
8480eb |
if (tmp == -1)
|
|
Packit |
8480eb |
tmp = conf_get_yesno(amd, NAME_AMD_AUTOFS_USE_LOFS);
|
|
Packit |
8480eb |
if (tmp)
|
|
Packit |
8480eb |
flags |= CONF_AUTOFS_USE_LOFS;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
tmp = conf_get_yesno(amd, NAME_AMD_DOMAIN_STRIP);
|
|
Packit |
8480eb |
if (tmp)
|
|
Packit |
8480eb |
flags |= CONF_DOMAIN_STRIP;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
tmp = conf_get_yesno(amd, NAME_AMD_NORMALIZE_SLASHES);
|
|
Packit |
8480eb |
if (tmp)
|
|
Packit |
8480eb |
flags |= CONF_NORMALIZE_SLASHES;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
tmp = conf_get_yesno(amd, NAME_AMD_FORCED_UMOUNTS);
|
|
Packit |
8480eb |
if (tmp)
|
|
Packit |
8480eb |
flags |= CONF_FORCED_UNMOUNTS;
|
|
Packit |
8480eb |
|
|
Packit |
8480eb |
return flags;
|
|
Packit |
8480eb |
}
|