diff --git a/autofs-5.0.1-bad-cast.patch b/autofs-5.0.1-bad-cast.patch new file mode 100644 index 0000000..4c0cf6e --- /dev/null +++ b/autofs-5.0.1-bad-cast.patch @@ -0,0 +1,13 @@ +diff --git a/daemon/automount.c b/daemon/automount.c +index 938ee1b..37e040b 100644 +--- a/daemon/automount.c ++++ b/daemon/automount.c +@@ -276,7 +276,7 @@ static int walk_tree(const char *base, int (*fn) (const char *file, + + static int rm_unwanted_fn(const char *file, const struct stat *st, int when, void *arg) + { +- dev_t dev = *(int *) arg; ++ dev_t dev = *(dev_t *) arg; + char buf[MAX_ERR_BUF]; + struct stat newst; + diff --git a/autofs-5.0.1-drop-default-prefix-from-config.patch b/autofs-5.0.1-drop-default-prefix-from-config.patch new file mode 100644 index 0000000..e8aa0ef --- /dev/null +++ b/autofs-5.0.1-drop-default-prefix-from-config.patch @@ -0,0 +1,467 @@ +diff --git a/README.v5.release b/README.v5.release +index 3f23b91..3b4e02b 100644 +--- a/README.v5.release ++++ b/README.v5.release +@@ -13,8 +13,7 @@ Differences between version 4 and version 5. + installed "/etc/auto.master" to ensure that those using NIS will + still find their master map. This is in line with other industry + automount implementations. The name of the default master map can +- be overridden by setting the DEFAULT_MASTER_MAP_NAME configuration +- variable. ++ be overridden by setting the MASTER_MAP_NAME configuration variable. + + - The `automount' daemon is now a multi-threaded application and so + appears as a single process (unless a thread process display option +diff --git a/gentoo/net-fs/autofs/files/autofs.conf b/gentoo/net-fs/autofs/files/autofs.conf +index 836a4a1..7b34c20 100644 +--- a/gentoo/net-fs/autofs/files/autofs.conf ++++ b/gentoo/net-fs/autofs/files/autofs.conf +@@ -1,50 +1,50 @@ + # + # Define default options for autofs. + # +-# DEFAULT_MASTER_MAP_NAME - default map name for the master map. ++# MASTER_MAP_NAME - default map name for the master map. + # +-#DEFAULT_MASTER_MAP_NAME="/etc/auto.master" ++#MASTER_MAP_NAME="/etc/auto.master" + # +-# DEFAULT_TIMEOUT - set the default mount timeout (default 600). ++# TIMEOUT - set the default mount timeout (default 600). + # +-DEFAULT_TIMEOUT=300 ++TIMEOUT=300 + # +-# DEFAULT_BROWSE_MODE - maps are browsable by default. ++# BROWSE_MODE - maps are browsable by default. + # +-DEFAULT_BROWSE_MODE="no" ++BROWSE_MODE="no" + # +-# DEFAULT_LOGGING - set default log level "none", "verbode" or "debug" ++# LOGGING - set default log level "none", "verbode" or "debug" + # +-#DEFAULT_LOGGING="none" ++#LOGGING="none" + # + # Define the default LDAP schema to use for lookups + # + # System default + # +-#DEFAULT_MAP_OBJECT_CLASS="nisMap" +-#DEFAULT_ENTRY_OBJECT_CLASS="nisObject" +-#DEFAULT_MAP_ATTRIBUTE="nisMapName" +-#DEFAULT_ENTRY_ATTRIBUTE="cn" +-#DEFAULT_VALUE_ATTRIBUTE="nisMapEntry" ++#MAP_OBJECT_CLASS="nisMap" ++#ENTRY_OBJECT_CLASS="nisObject" ++#MAP_ATTRIBUTE="nisMapName" ++#ENTRY_ATTRIBUTE="cn" ++#VALUE_ATTRIBUTE="nisMapEntry" + # + # Other common LDAP nameing + # +-#DEFAULT_MAP_OBJECT_CLASS="automountMap" +-#DEFAULT_ENTRY_OBJECT_CLASS="automount" +-#DEFAULT_MAP_ATTRIBUTE="ou" +-#DEFAULT_ENTRY_ATTRIBUTE="cn" +-#DEFAULT_VALUE_ATTRIBUTE="automountInformation" ++#MAP_OBJECT_CLASS="automountMap" ++#ENTRY_OBJECT_CLASS="automount" ++#MAP_ATTRIBUTE="ou" ++#ENTRY_ATTRIBUTE="cn" ++#VALUE_ATTRIBUTE="automountInformation" + # +-#DEFAULT_MAP_OBJECT_CLASS="automountMap" +-#DEFAULT_ENTRY_OBJECT_CLASS="automount" +-#DEFAULT_MAP_ATTRIBUTE="automountMapName" +-#DEFAULT_ENTRY_ATTRIBUTE="automountKey" +-#DEFAULT_VALUE_ATTRIBUTE="automountInformation" ++#MAP_OBJECT_CLASS="automountMap" ++#ENTRY_OBJECT_CLASS="automount" ++#MAP_ATTRIBUTE="automountMapName" ++#ENTRY_ATTRIBUTE="automountKey" ++#VALUE_ATTRIBUTE="automountInformation" + # +-# DEFAULT_AUTH_CONF_FILE - set the default location for the SASL +-# authentication configuration file. ++# AUTH_CONF_FILE - set the default location for the SASL ++# authentication configuration file. + # +-#DEFAULT_AUTH_CONF_FILE="/etc/autofs/autofs-auth.conf" ++#AUTH_CONF_FILE="/etc/autofs/autofs-auth.conf" + # + # General global options + # +diff --git a/lib/defaults.c b/lib/defaults.c +index 65dbd8d..f76478e 100644 +--- a/lib/defaults.c ++++ b/lib/defaults.c +@@ -23,21 +23,21 @@ + #define DEFAULTS_CONFIG_FILE AUTOFS_CONF_DIR "/autofs" + #define MAX_LINE_LEN 256 + +-#define ENV_NAME_MASTER_MAP "DEFAULT_MASTER_MAP_NAME" ++#define ENV_NAME_MASTER_MAP "MASTER_MAP_NAME" + +-#define ENV_NAME_TIMEOUT "DEFAULT_TIMEOUT" +-#define ENV_NAME_BROWSE_MODE "DEFAULT_BROWSE_MODE" +-#define ENV_NAME_LOGGING "DEFAULT_LOGGING" ++#define ENV_NAME_TIMEOUT "TIMEOUT" ++#define ENV_NAME_BROWSE_MODE "BROWSE_MODE" ++#define ENV_NAME_LOGGING "LOGGING" + +-#define ENV_LDAP_SERVER "DEFAULT_LDAP_SERVER" ++#define ENV_LDAP_SERVER "LDAP_SERVER" + +-#define ENV_NAME_MAP_OBJ_CLASS "DEFAULT_MAP_OBJECT_CLASS" +-#define ENV_NAME_ENTRY_OBJ_CLASS "DEFAULT_ENTRY_OBJECT_CLASS" +-#define ENV_NAME_MAP_ATTR "DEFAULT_MAP_ATTRIBUTE" +-#define ENV_NAME_ENTRY_ATTR "DEFAULT_ENTRY_ATTRIBUTE" +-#define ENV_NAME_VALUE_ATTR "DEFAULT_VALUE_ATTRIBUTE" ++#define ENV_NAME_MAP_OBJ_CLASS "MAP_OBJECT_CLASS" ++#define ENV_NAME_ENTRY_OBJ_CLASS "ENTRY_OBJECT_CLASS" ++#define ENV_NAME_MAP_ATTR "MAP_ATTRIBUTE" ++#define ENV_NAME_ENTRY_ATTR "ENTRY_ATTRIBUTE" ++#define ENV_NAME_VALUE_ATTR "VALUE_ATTRIBUTE" + +-#define ENV_AUTH_CONF_FILE "DEFAULT_AUTH_CONF_FILE" ++#define ENV_AUTH_CONF_FILE "AUTH_CONF_FILE" + + static const char *default_master_map_name = DEFAULT_MASTER_MAP_NAME; + +@@ -104,6 +104,39 @@ static int get_env_yesno(const char *name) + } + + /* ++ * We've changed the key names so we need to check for the ++ * config key and it's old name for backward conpatibility. ++*/ ++static int check_set_config_value(const char *res, const char *name, const char *value) ++{ ++ char *old_name; ++ int ret; ++ ++ if (!strcasecmp(res, name)) { ++ ret = setenv(name, value, 0); ++ if (ret) ++ fprintf(stderr, ++ "can't set config value for %s, " ++ "error %d", name, ret); ++ return 1; ++ } ++ ++ old_name = alloca(strlen(name) + 9); ++ strcpy(old_name, "DEFAULT_"); ++ strcat(old_name, name); ++ ++ if (!strcasecmp(res, old_name)) { ++ ret = setenv(name, value, 0); ++ if (ret) ++ fprintf(stderr, ++ "can't set config value for %s, " ++ "error %d", name, ret); ++ return 1; ++ } ++ return 0; ++} ++ ++/* + * Read config env variables and check they have been set. + * + * This simple minded routine assumes the config file +@@ -115,7 +148,6 @@ unsigned int defaults_read_config(void) + FILE *f; + char buf[MAX_LINE_LEN]; + char *res, *value; +- unsigned int ret; + + f = fopen(DEFAULTS_CONFIG_FILE, "r"); + if (!f) +@@ -158,23 +190,18 @@ unsigned int defaults_read_config(void) + while (*trailer && (*trailer == '"' || isblank(*trailer))) + *(trailer--) = '\0';; + +- if (!strcasecmp(res, ENV_NAME_MASTER_MAP) || +- !strcasecmp(res, ENV_NAME_TIMEOUT) || +- !strcasecmp(res, ENV_NAME_BROWSE_MODE) || +- !strcasecmp(res, ENV_NAME_LOGGING) || +- !strcasecmp(res, ENV_LDAP_SERVER) || +- !strcasecmp(res, ENV_NAME_MAP_OBJ_CLASS) || +- !strcasecmp(res, ENV_NAME_ENTRY_OBJ_CLASS) || +- !strcasecmp(res, ENV_NAME_MAP_ATTR) || +- !strcasecmp(res, ENV_NAME_ENTRY_ATTR) || +- !strcasecmp(res, ENV_NAME_VALUE_ATTR) || +- !strcasecmp(res, ENV_AUTH_CONF_FILE)) { +- ret = setenv(res, value, 0); +- if (ret) +- fprintf(stderr, +- "can't set config value for %s, " +- "error %d", res, ret); +- } ++ if (check_set_config_value(res, ENV_NAME_MASTER_MAP, value) || ++ check_set_config_value(res, ENV_NAME_TIMEOUT, value) || ++ check_set_config_value(res, ENV_NAME_BROWSE_MODE, value) || ++ check_set_config_value(res, ENV_NAME_LOGGING, value) || ++ check_set_config_value(res, ENV_LDAP_SERVER, value) || ++ check_set_config_value(res, ENV_NAME_MAP_OBJ_CLASS, value) || ++ check_set_config_value(res, ENV_NAME_ENTRY_OBJ_CLASS, value) || ++ check_set_config_value(res, ENV_NAME_MAP_ATTR, value) || ++ check_set_config_value(res, ENV_NAME_ENTRY_ATTR, value) || ++ check_set_config_value(res, ENV_NAME_VALUE_ATTR, value) || ++ check_set_config_value(res, ENV_AUTH_CONF_FILE, value)) ++ ; + } + + if (!feof(f)) { +diff --git a/man/auto.master.5.in b/man/auto.master.5.in +index cb3c1d6..cfeefe7 100644 +--- a/man/auto.master.5.in ++++ b/man/auto.master.5.in +@@ -25,7 +25,7 @@ The default location of the master map is + but an alternate name may be given on the command line when running + the automounter and the default master map may changed by setting the + .nh +-.B "DEFAULT_MASTER_MAP_NAME" ++.B "MASTER_MAP_NAME" + .hy + configuration variable in + .nh +@@ -144,13 +144,13 @@ configuration file + .hy + They are: + .TP +-.B DEFAULT_TIMEOUT ++.B TIMEOUT + sets the default mount timeout (program default 600). + .TP +-.B DEFAULT_BROWSE_MODE ++.B BROWSE_MODE + Maps are browsable by default (program default "yes"). + .TP +-.B DEFAULT_LOGGING ++.B LOGGING + set default log level "none", "verbose" or "debug" (program default "none"). + ======= + .SH GENERAL SYSTEM DEFAULTS CONFIGURATION +@@ -163,13 +163,13 @@ configuration file + .P + They are: + .TP +-.B DEFAULT_TIMEOUT ++.B TIMEOUT + sets the default mount timeout (program default 600). + .TP +-.B DEFAULT_BROWSE_MODE ++.B BROWSE_MODE + Maps are browsable by default (program default "yes"). + .TP +-.B DEFAULT_LOGGING ++.B LOGGING + set default log level "none", "verbose" or "debug" (program default "none"). + .SH BUILTIN MAP -hosts + If "-hosts" is given as the map then accessing a key under the mount point +@@ -215,7 +215,7 @@ located in + .P + The configuration settings available are: + .TP +-\fBDEFAULT_MAP_OBJECT_CLASS\fP ++\fBMAP_OBJECT_CLASS\fP + The map object class. Its Default value is "nisMap". In the + .nh + automountMap +@@ -225,14 +225,14 @@ schema this corresponds to the class + .BR automountMap . + .hy + .TP +-.B DEFAULT_ENTRY_OBJECT_CLASS ++.B ENTRY_OBJECT_CLASS + The map entry object class. Its default value is \fBnisObject\fP. + In the automountMap schema this corresponds to the class + .nh + .BR automount . + .hy + .TP +-.B DEFAULT_MAP_ATTRIBUTE ++.B MAP_ATTRIBUTE + The attribute used to identify the name of the map to which this + entry belongs. Its default value is + .nh +@@ -247,7 +247,7 @@ schema this corresponds to the attributes \fBou\fP or + .BR automountMapName . + .hy + .TP +-.B DEFAULT_ENTRY_ATTRIBUTE ++.B ENTRY_ATTRIBUTE + The attribute used to identify a map key. Its default value is + In the + .nh +@@ -258,7 +258,7 @@ schema this corresponds to the attribute + .BR automountKey . + .hy + .TP +-.B DEFAULT_VALUE_ATTRIBUTE ++.B VALUE_ATTRIBUTE + The attribute used to identify the value of the map entry. Its default + value is + .nh +diff --git a/redhat/autofs.sysconfig.in b/redhat/autofs.sysconfig.in +index 7cbc03f..84d524b 100644 +--- a/redhat/autofs.sysconfig.in ++++ b/redhat/autofs.sysconfig.in +@@ -1,50 +1,50 @@ + # + # Define default options for autofs. + # +-# DEFAULT_MASTER_MAP_NAME - default map name for the master map. ++# MASTER_MAP_NAME - default map name for the master map. + # +-#DEFAULT_MASTER_MAP_NAME="auto.master" ++#MASTER_MAP_NAME="auto.master" + # +-# DEFAULT_TIMEOUT - set the default mount timeout (default 600). ++# TIMEOUT - set the default mount timeout (default 600). + # +-DEFAULT_TIMEOUT=300 ++TIMEOUT=300 + # +-# DEFAULT_BROWSE_MODE - maps are browsable by default. ++# BROWSE_MODE - maps are browsable by default. + # +-DEFAULT_BROWSE_MODE="no" ++BROWSE_MODE="no" + # +-# DEFAULT_LOGGING - set default log level "none", "verbose" or "debug" ++# LOGGING - set default log level "none", "verbose" or "debug" + # +-#DEFAULT_LOGGING="none" ++#LOGGING="none" + # + # Define the default LDAP schema to use for lookups + # + # System default + # +-#DEFAULT_MAP_OBJECT_CLASS="nisMap" +-#DEFAULT_ENTRY_OBJECT_CLASS="nisObject" +-#DEFAULT_MAP_ATTRIBUTE="nisMapName" +-#DEFAULT_ENTRY_ATTRIBUTE="cn" +-#DEFAULT_VALUE_ATTRIBUTE="nisMapEntry" ++#MAP_OBJECT_CLASS="nisMap" ++#ENTRY_OBJECT_CLASS="nisObject" ++#MAP_ATTRIBUTE="nisMapName" ++#ENTRY_ATTRIBUTE="cn" ++#VALUE_ATTRIBUTE="nisMapEntry" + # + # Other common LDAP nameing + # +-#DEFAULT_MAP_OBJECT_CLASS="automountMap" +-#DEFAULT_ENTRY_OBJECT_CLASS="automount" +-#DEFAULT_MAP_ATTRIBUTE="ou" +-#DEFAULT_ENTRY_ATTRIBUTE="cn" +-#DEFAULT_VALUE_ATTRIBUTE="automountInformation" ++#MAP_OBJECT_CLASS="automountMap" ++#ENTRY_OBJECT_CLASS="automount" ++#MAP_ATTRIBUTE="ou" ++#ENTRY_ATTRIBUTE="cn" ++#VALUE_ATTRIBUTE="automountInformation" + # +-#DEFAULT_MAP_OBJECT_CLASS="automountMap" +-#DEFAULT_ENTRY_OBJECT_CLASS="automount" +-#DEFAULT_MAP_ATTRIBUTE="automountMapName" +-#DEFAULT_ENTRY_ATTRIBUTE="automountKey" +-#DEFAULT_VALUE_ATTRIBUTE="automountInformation" ++#MAP_OBJECT_CLASS="automountMap" ++#ENTRY_OBJECT_CLASS="automount" ++#MAP_ATTRIBUTE="automountMapName" ++#ENTRY_ATTRIBUTE="automountKey" ++#VALUE_ATTRIBUTE="automountInformation" + # +-# DEFAULT_AUTH_CONF_FILE - set the default location for the SASL ++# AUTH_CONF_FILE - set the default location for the SASL + # authentication configuration file. + # +-#DEFAULT_AUTH_CONF_FILE="@@autofsmapdir@@/autofs_ldap_auth.conf" ++#AUTH_CONF_FILE="@@autofsmapdir@@/autofs_ldap_auth.conf" + # + # General global options + # +diff --git a/samples/autofs.conf.default.in b/samples/autofs.conf.default.in +index 7cbc03f..84d524b 100644 +--- a/samples/autofs.conf.default.in ++++ b/samples/autofs.conf.default.in +@@ -1,50 +1,50 @@ + # + # Define default options for autofs. + # +-# DEFAULT_MASTER_MAP_NAME - default map name for the master map. ++# MASTER_MAP_NAME - default map name for the master map. + # +-#DEFAULT_MASTER_MAP_NAME="auto.master" ++#MASTER_MAP_NAME="auto.master" + # +-# DEFAULT_TIMEOUT - set the default mount timeout (default 600). ++# TIMEOUT - set the default mount timeout (default 600). + # +-DEFAULT_TIMEOUT=300 ++TIMEOUT=300 + # +-# DEFAULT_BROWSE_MODE - maps are browsable by default. ++# BROWSE_MODE - maps are browsable by default. + # +-DEFAULT_BROWSE_MODE="no" ++BROWSE_MODE="no" + # +-# DEFAULT_LOGGING - set default log level "none", "verbose" or "debug" ++# LOGGING - set default log level "none", "verbose" or "debug" + # +-#DEFAULT_LOGGING="none" ++#LOGGING="none" + # + # Define the default LDAP schema to use for lookups + # + # System default + # +-#DEFAULT_MAP_OBJECT_CLASS="nisMap" +-#DEFAULT_ENTRY_OBJECT_CLASS="nisObject" +-#DEFAULT_MAP_ATTRIBUTE="nisMapName" +-#DEFAULT_ENTRY_ATTRIBUTE="cn" +-#DEFAULT_VALUE_ATTRIBUTE="nisMapEntry" ++#MAP_OBJECT_CLASS="nisMap" ++#ENTRY_OBJECT_CLASS="nisObject" ++#MAP_ATTRIBUTE="nisMapName" ++#ENTRY_ATTRIBUTE="cn" ++#VALUE_ATTRIBUTE="nisMapEntry" + # + # Other common LDAP nameing + # +-#DEFAULT_MAP_OBJECT_CLASS="automountMap" +-#DEFAULT_ENTRY_OBJECT_CLASS="automount" +-#DEFAULT_MAP_ATTRIBUTE="ou" +-#DEFAULT_ENTRY_ATTRIBUTE="cn" +-#DEFAULT_VALUE_ATTRIBUTE="automountInformation" ++#MAP_OBJECT_CLASS="automountMap" ++#ENTRY_OBJECT_CLASS="automount" ++#MAP_ATTRIBUTE="ou" ++#ENTRY_ATTRIBUTE="cn" ++#VALUE_ATTRIBUTE="automountInformation" + # +-#DEFAULT_MAP_OBJECT_CLASS="automountMap" +-#DEFAULT_ENTRY_OBJECT_CLASS="automount" +-#DEFAULT_MAP_ATTRIBUTE="automountMapName" +-#DEFAULT_ENTRY_ATTRIBUTE="automountKey" +-#DEFAULT_VALUE_ATTRIBUTE="automountInformation" ++#MAP_OBJECT_CLASS="automountMap" ++#ENTRY_OBJECT_CLASS="automount" ++#MAP_ATTRIBUTE="automountMapName" ++#ENTRY_ATTRIBUTE="automountKey" ++#VALUE_ATTRIBUTE="automountInformation" + # +-# DEFAULT_AUTH_CONF_FILE - set the default location for the SASL ++# AUTH_CONF_FILE - set the default location for the SASL + # authentication configuration file. + # +-#DEFAULT_AUTH_CONF_FILE="@@autofsmapdir@@/autofs_ldap_auth.conf" ++#AUTH_CONF_FILE="@@autofsmapdir@@/autofs_ldap_auth.conf" + # + # General global options + # diff --git a/autofs-5.0.1-random-selection.patch b/autofs-5.0.1-random-selection.patch new file mode 100644 index 0000000..3f78e65 --- /dev/null +++ b/autofs-5.0.1-random-selection.patch @@ -0,0 +1,183 @@ +diff --git a/daemon/automount.c b/daemon/automount.c +index 5989324..938ee1b 100644 +--- a/daemon/automount.c ++++ b/daemon/automount.c +@@ -48,6 +48,8 @@ const char *mapdir = AUTOFS_MAP_DIR; /* Location of mount maps */ + const char *confdir = AUTOFS_CONF_DIR; /* Location of autofs config file */ + + static char *pid_file = NULL; /* File in which to keep pid */ ++unsigned int random_selection; /* use random policy when selecting ++ * which multi-mount host to mount */ + static int start_pipefd[2]; + static int st_stat = 0; + static int *pst_stat = &st_stat; +@@ -1363,6 +1365,8 @@ static void usage(void) + " -d --debug log debuging info\n" + " -D --define define global macro variable\n" + /*" -f --foreground do not fork into background\n" */ ++ " -r --random-replicated-selection" ++ " use ramdom replicated server selection\n" + " -V --version print version, build config and exit\n" + , program); + } +@@ -1461,6 +1465,7 @@ int main(int argc, char *argv[]) + {"debug", 0, 0, 'd'}, + {"define", 1, 0, 'D'}, + {"foreground", 0, 0, 'f'}, ++ {"random-selection", 0, 0, 'r'}, + {"version", 0, 0, 'V'}, + {0, 0, 0, 0} + }; +@@ -1476,10 +1481,11 @@ int main(int argc, char *argv[]) + timeout = defaults_get_timeout(); + ghost = defaults_get_browse_mode(); + logging = defaults_get_logging(); ++ random_selection = 0; + foreground = 0; + + opterr = 0; +- while ((opt = getopt_long(argc, argv, "+hp:t:vdD:fV", long_options, NULL)) != EOF) { ++ while ((opt = getopt_long(argc, argv, "+hp:t:vdD:fVr", long_options, NULL)) != EOF) { + switch (opt) { + case 'h': + usage(); +@@ -1513,6 +1519,10 @@ int main(int argc, char *argv[]) + show_build_info(); + exit(0); + ++ case 'r': ++ random_selection = 1; ++ break; ++ + case '?': + case ':': + printf("%s: Ambiguous or unknown options\n", program); +diff --git a/include/replicated.h b/include/replicated.h +index 970cd31..c77cda6 100644 +--- a/include/replicated.h ++++ b/include/replicated.h +@@ -60,6 +60,7 @@ struct host { + struct host *next; + }; + ++void seed_random(void); + void free_host_list(struct host **); + int parse_location(struct host **, const char *); + int prune_host_list(struct host **, unsigned int, const char *); +diff --git a/man/automount.8 b/man/automount.8 +index 9da82c4..59f2805 100644 +--- a/man/automount.8 ++++ b/man/automount.8 +@@ -47,6 +47,10 @@ Define a global macro substitution variable. Global definitions + are over-ridden macro definitions of the same name specified in + mount entries. + .TP ++.I "\-r, \-\-random-replicated-selection" ++Enables the use of ramdom selection when choosing a host from a ++list of replicated servers. ++.TP + .I "\-V, \-\-version" + Display the version number, then exit. + .SH ARGUMENTS +diff --git a/modules/mount_nfs.c b/modules/mount_nfs.c +index 4063e9a..25f72b9 100644 +--- a/modules/mount_nfs.c ++++ b/modules/mount_nfs.c +@@ -51,6 +51,8 @@ int mount_init(void **context) + } else + init_ctr++; + ++ seed_random(); ++ + return !mount_bind; + } + +diff --git a/modules/replicated.c b/modules/replicated.c +index cb65d82..de1b40c 100644 +--- a/modules/replicated.c ++++ b/modules/replicated.c +@@ -74,6 +74,29 @@ + #define max(x, y) (x >= y ? x : y) + #define mmax(x, y, z) (max(x, y) == x ? max(x, z) : max(y, z)) + ++extern unsigned int random_selection; ++ ++void seed_random(void) ++{ ++ int fd; ++ unsigned int seed; ++ ++ fd = open("/dev/random", O_RDONLY); ++ if (fd < 0) { ++ srandom(time(NULL)); ++ return; ++ } ++ ++ if (read(fd, &seed, sizeof(seed)) != -1) ++ srandom(seed); ++ else ++ srandom(time(NULL)); ++ ++ close(fd); ++ ++ return; ++} ++ + static unsigned int get_proximity(const char *host_addr, int addr_len) + { + struct sockaddr_in *msk_addr, *if_addr; +@@ -403,7 +426,11 @@ static unsigned int get_nfs_info(struct host *host, + status = rpc_ping_proto(rpc_info); + gettimeofday(&end, &tz); + if (status) { +- taken += elapsed(start, end); ++ if (random_selection) ++ /* Random value between 0 and 1 */ ++ taken += ((float) random())/((float) RAND_MAX+1); ++ else ++ taken += elapsed(start, end);; + count++; + supported = NFS4_SUPPORTED; + } +@@ -440,7 +467,11 @@ v3_ver: + status = rpc_ping_proto(rpc_info); + gettimeofday(&end, &tz); + if (status) { +- taken += elapsed(start, end); ++ if (random_selection) ++ /* Random value between 0 and 1 */ ++ taken += ((float) random())/((float) RAND_MAX+1); ++ else ++ taken += elapsed(start, end);; + count++; + supported |= NFS3_SUPPORTED; + } +@@ -470,7 +501,11 @@ v2_ver: + status = rpc_ping_proto(rpc_info); + gettimeofday(&end, &tz); + if (status) { +- taken += elapsed(start, end); ++ if (random_selection) ++ /* Random value between 0 and 1 */ ++ taken += ((float) random())/((float) RAND_MAX+1); ++ else ++ taken += elapsed(start, end);; + count++; + supported |= NFS2_SUPPORTED; + } +@@ -610,8 +645,13 @@ static int get_supported_ver_and_cost(struct host *host, unsigned int version, c + gettimeofday(&start, &tz); + status = rpc_ping_proto(&rpc_info); + gettimeofday(&end, &tz); +- if (status) +- taken = elapsed(start, end); ++ if (status) { ++ if (random_selection) ++ /* Random value between 0 and 1 */ ++ taken = ((float) random())/((float) RAND_MAX+1); ++ else ++ taken = elapsed(start, end); ++ } + } + done: + if (rpc_info.proto->p_proto == IPPROTO_UDP) { diff --git a/autofs.spec b/autofs.spec index b035424..6bf9429 100644 --- a/autofs.spec +++ b/autofs.spec @@ -4,7 +4,7 @@ Summary: A tool for automatically mounting and unmounting filesystems Name: autofs Version: 5.0.1 -Release: 4 +Release: 5 Epoch: 1 License: GPL Group: System Environment/Daemons @@ -16,6 +16,9 @@ Patch3: autofs-5.0.1-export-check-network-fix-2.patch Patch4: autofs-5.0.1-check-mtab-updated.patch Patch5: autofs-5.0.1-file-map-allow-white-space-only-line.patch Patch6: autofs-5.0.1-network_match-fix.patch +Patch7: autofs-5.0.1-drop-default-prefix-from-config.patch +Patch8: autofs-5.0.1-random-selection.patch +Patch9: autofs-5.0.1-bad-cast.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: autoconf, hesiod-devel, openldap-devel, bison, flex, libxml2-devel, cyrus-sasl-devel, openssl-devel Conflicts: kernel < 2.6.17 @@ -63,6 +66,9 @@ echo %{version}-%{release} > .version %patch4 -p1 %patch5 -p1 %patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 %build #CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr --libdir=%{_libdir} @@ -115,6 +121,14 @@ fi %{_libdir}/autofs/ %changelog +* Fri Mar 16 2007 Ian Kent - 5.0.1-5 +- drop "DEFAULT_" prefix from configuration names. +- add option to select replicated server at random (instead of + ping response time) (bz 227604). +- fix incorrect cast in directory cleanup routines (bz 231864). + +- fixed numeric export match (bz 231188). + * Thu Mar 8 2007 Ian Kent - 5.0.1-4 - fixed numeric export match (bz 231188).