- don't fail on empty master map.
- add support for the "%" hack for case insensitive attribute schemas.
This commit is contained in:
parent
a2032c8fe2
commit
e676fc4cda
13
autofs-5.0.2-dont-fail-on-empty-master.patch
Normal file
13
autofs-5.0.2-dont-fail-on-empty-master.patch
Normal file
@ -0,0 +1,13 @@
|
||||
diff --git a/lib/master.c b/lib/master.c
|
||||
index 4d31959..9f24f7e 100644
|
||||
--- a/lib/master.c
|
||||
+++ b/lib/master.c
|
||||
@@ -803,7 +803,7 @@ int master_read_master(struct master *master, time_t age, int readall)
|
||||
if (list_empty(&master->mounts)) {
|
||||
master_mutex_unlock();
|
||||
error(LOGOPT_ANY, "no mounts in table");
|
||||
- return 0;
|
||||
+ return 1;
|
||||
}
|
||||
|
||||
master_mutex_unlock();
|
178
autofs-5.0.2-ldap-percent-hack.patch
Normal file
178
autofs-5.0.2-ldap-percent-hack.patch
Normal file
@ -0,0 +1,178 @@
|
||||
diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c
|
||||
index de8d515..a412797 100644
|
||||
--- a/modules/lookup_ldap.c
|
||||
+++ b/modules/lookup_ldap.c
|
||||
@@ -1210,50 +1210,68 @@ static int read_one_map(struct autofs_point *ap,
|
||||
}
|
||||
|
||||
/*
|
||||
- * By definition keys must be unique within
|
||||
- * each map entry
|
||||
+ * By definition keys should be unique within each map entry,
|
||||
+ * but as always there are exceptions.
|
||||
*/
|
||||
k_val = NULL;
|
||||
k_len = 0;
|
||||
|
||||
/*
|
||||
- * Keys must be unique so, in general, there shouldn't be
|
||||
+ * Keys should be unique so, in general, there shouldn't be
|
||||
* more than one attribute value. We make an exception for
|
||||
* wildcard entries as people may have values for '*' or
|
||||
* '/' for compaibility reasons. We use the '/' as the
|
||||
* wildcard in LDAP but allow '*' as well to allow for
|
||||
* people using older schemas that allow '*' as a key
|
||||
- * value.
|
||||
+ * value. Another case where there can be multiple key
|
||||
+ * values is when people have used the "%" hack to specify
|
||||
+ * case matching ctriteria in a caase insensitive attribute.
|
||||
*/
|
||||
count = ldap_count_values_len(bvKey);
|
||||
- if (count > 2) {
|
||||
- error(ap->logopt,
|
||||
- MODPREFIX
|
||||
- "key %.*s has duplicate entries - ignoring",
|
||||
- bvKey[0]->bv_len, bvKey[0]->bv_val);
|
||||
- goto next;
|
||||
- } else if (count == 2) {
|
||||
+ if (count > 1) {
|
||||
unsigned int i;
|
||||
|
||||
/* Check for the "/" and "*" and use as "/" if found */
|
||||
for (i = 0; i < count; i++) {
|
||||
- /* check for wildcard */
|
||||
- if (bvKey[i]->bv_len != 1)
|
||||
+ bvKey[i]->bv_val[bvKey[i]->bv_len] = '\0';
|
||||
+
|
||||
+ /*
|
||||
+ * If multiple entries are present they could
|
||||
+ * be the result of people using the "%" hack so
|
||||
+ * ignore them.
|
||||
+ */
|
||||
+ if (strchr(bvKey[i]->bv_val, '%'))
|
||||
continue;
|
||||
- if (*bvKey[i]->bv_val != '/' &&
|
||||
- *bvKey[i]->bv_val != '*')
|
||||
- continue;
|
||||
- /* always use '/' internally */
|
||||
- *bvKey[i]->bv_val = '/';
|
||||
+
|
||||
+ /* check for wildcard */
|
||||
+ if (bvKey[i]->bv_len == 1 &&
|
||||
+ (*bvKey[i]->bv_val == '/' ||
|
||||
+ *bvKey[i]->bv_val == '*')) {
|
||||
+ /* always use '/' internally */
|
||||
+ *bvKey[i]->bv_val = '/';
|
||||
+ k_val = bvKey[i]->bv_val;
|
||||
+ k_len = 1;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * We have a result from LDAP so this is a
|
||||
+ * valid entry. Set the result to the LDAP
|
||||
+ * key that isn't a wildcard and doesn't have
|
||||
+ * any "%" hack values present. This should be
|
||||
+ * the case insensitive match string for the
|
||||
+ * nis schema, the default value.
|
||||
+ */
|
||||
k_val = bvKey[i]->bv_val;
|
||||
- k_len = 1;
|
||||
+ k_len = bvKey[i]->bv_len;
|
||||
+
|
||||
break;
|
||||
}
|
||||
|
||||
if (!k_val) {
|
||||
error(ap->logopt,
|
||||
MODPREFIX
|
||||
- "key %.*s has duplicate entries - ignoring",
|
||||
+ "invalid entry %.*s - ignoring",
|
||||
bvKey[0]->bv_len, bvKey[0]->bv_val);
|
||||
goto next;
|
||||
}
|
||||
@@ -1495,7 +1513,10 @@ static int lookup_one(struct autofs_point *ap,
|
||||
continue;
|
||||
}
|
||||
|
||||
- /* By definition keys must be unique within each map entry */
|
||||
+ /*
|
||||
+ * By definition keys should be unique within each map entry,
|
||||
+ * but as always there are exceptions.
|
||||
+ */
|
||||
k_val = NULL;
|
||||
k_len = 0;
|
||||
|
||||
@@ -1506,37 +1527,53 @@ static int lookup_one(struct autofs_point *ap,
|
||||
* '/' for compaibility reasons. We use the '/' as the
|
||||
* wildcard in LDAP but allow '*' as well to allow for
|
||||
* people using older schemas that allow '*' as a key
|
||||
- * value.
|
||||
+ * value. Another case where there can be multiple key
|
||||
+ * values is when people have used the "%" hack to specify
|
||||
+ * case matching ctriteria in a caase insensitive attribute.
|
||||
*/
|
||||
count = ldap_count_values_len(bvKey);
|
||||
- if (count > 2) {
|
||||
- error(ap->logopt,
|
||||
- MODPREFIX
|
||||
- "key %.*s has duplicate entries - ignoring",
|
||||
- bvKey[0]->bv_len, bvKey[0]->bv_val);
|
||||
- goto next;
|
||||
- } else if (count == 2) {
|
||||
+ if (count > 1) {
|
||||
unsigned int i;
|
||||
|
||||
/* Check for the "/" and "*" and use as "/" if found */
|
||||
for (i = 0; i < count; i++) {
|
||||
- /* check for wildcard */
|
||||
- if (bvKey[i]->bv_len != 1)
|
||||
- continue;
|
||||
- if (*bvKey[i]->bv_val != '/' &&
|
||||
- *bvKey[i]->bv_val != '*')
|
||||
+ bvKey[i]->bv_val[bvKey[i]->bv_len] = '\0';
|
||||
+
|
||||
+ /*
|
||||
+ * If multiple entries are present they could
|
||||
+ * be the result of people using the "%" hack so
|
||||
+ * ignore them.
|
||||
+ */
|
||||
+ if (strchr(bvKey[i]->bv_val, '%'))
|
||||
continue;
|
||||
- /* always use '/' internally */
|
||||
- *bvKey[i]->bv_val = '/';
|
||||
- k_val = bvKey[i]->bv_val;
|
||||
- k_len = 1;
|
||||
+
|
||||
+ /* check for wildcard */
|
||||
+ if (bvKey[i]->bv_len == 1 &&
|
||||
+ (*bvKey[i]->bv_val == '/' ||
|
||||
+ *bvKey[i]->bv_val == '*')) {
|
||||
+ /* always use '/' internally */
|
||||
+ *bvKey[i]->bv_val = '/';
|
||||
+ k_val = bvKey[i]->bv_val;
|
||||
+ k_len = 1;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * The key was matched by LDAP so this is a
|
||||
+ * valid entry. Set the result key to the
|
||||
+ * lookup key to provide the mixed case
|
||||
+ * matching provided by the "%" hack.
|
||||
+ */
|
||||
+ k_val = qKey;
|
||||
+ k_len = strlen(qKey);
|
||||
+
|
||||
break;
|
||||
}
|
||||
|
||||
if (!k_val) {
|
||||
error(ap->logopt,
|
||||
- MODPREFIX "key %.*s has duplicate entries",
|
||||
- bvKey[0]->bv_len, bvKey[0]->bv_val);
|
||||
+ MODPREFIX "no valid key found for %.*s",
|
||||
+ qKey_len, qKey);
|
||||
ret = CHE_FAIL;
|
||||
goto next;
|
||||
}
|
10
autofs.spec
10
autofs.spec
@ -4,7 +4,7 @@
|
||||
Summary: A tool for automatically mounting and unmounting filesystems
|
||||
Name: autofs
|
||||
Version: 5.0.2
|
||||
Release: 10
|
||||
Release: 11
|
||||
Epoch: 1
|
||||
License: GPL
|
||||
Group: System Environment/Daemons
|
||||
@ -22,6 +22,8 @@ Patch8: autofs-5.0.2-fix-dnattr-parse.patch
|
||||
Patch9: autofs-5.0.2-fix-nfs-version-in-get-supported-ver-and-cost.patch
|
||||
Patch10: autofs-5.0.2-fix-largefile-dumbness.patch
|
||||
Patch11: autofs-5.0.2-instance-stale-mark.patch
|
||||
Patch12: autofs-5.0.2-dont-fail-on-empty-master.patch
|
||||
Patch13: autofs-5.0.2-ldap-percent-hack.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
|
||||
@ -75,6 +77,8 @@ echo %{version}-%{release} > .version
|
||||
%patch9 -p1
|
||||
%patch10 -p1
|
||||
%patch11 -p1
|
||||
%patch12 -p1
|
||||
%patch13 -p1
|
||||
|
||||
%build
|
||||
#CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr --libdir=%{_libdir}
|
||||
@ -127,6 +131,10 @@ fi
|
||||
%{_libdir}/autofs/
|
||||
|
||||
%changelog
|
||||
* Mon Aug 21 2007 Ian Kent <ikent@redhat.com> - 5.0.2-11
|
||||
- don't fail on empty master map.
|
||||
- add support for the "%" hack for case insensitive attribute schemas.
|
||||
|
||||
* Mon Jul 30 2007 Ian Kent <ikent@redhat.com> - 5.0.2-10
|
||||
- mark map instances stale so they aren't "cleaned" during updates.
|
||||
- fix large file compile time option.
|
||||
|
Loading…
Reference in New Issue
Block a user