Blame lib/defaults.c

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