1 autofs-5.0.4 - use percent hack for master map keys
3 From: Ian Kent <raven@themaw.net>
5 The percent hack translation has been done for map keys but it
6 isn't used for master map keys.
10 modules/lookup_ldap.c | 66 +++++++++++++++++++++++++++++++++++++++++++------
11 2 files changed, 59 insertions(+), 8 deletions(-)
14 diff --git a/CHANGELOG b/CHANGELOG
15 index 4ed80e0..8258e00 100644
19 - fix st_remove_tasks() locking.
20 - reset flex scanner when setting buffer.
21 - zero s_magic is valid.
22 +- use percent hack for master map keys.
24 4/11/2008 autofs-5.0.4
25 -----------------------
26 diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c
27 index 9b1180c..8c6a8f2 100644
28 --- a/modules/lookup_ldap.c
29 +++ b/modules/lookup_ldap.c
30 @@ -60,6 +60,7 @@ struct ldap_search_params {
33 static LDAP *auth_init(unsigned logopt, const char *, struct lookup_context *);
34 +static int decode_percent_hack(const char *, char **);
36 #ifndef HAVE_LDAP_CREATE_PAGE_CONTROL
37 int ldap_create_page_control(LDAP *ldap, ber_int_t pagesize,
38 @@ -1508,6 +1509,9 @@ int lookup_read_master(struct master *master, time_t age, void *context)
39 debug(logopt, MODPREFIX "examining entries");
45 keyValue = ldap_get_values(ldap, e, entry);
47 if (!keyValue || !*keyValue) {
48 @@ -1519,19 +1523,63 @@ int lookup_read_master(struct master *master, time_t age, void *context)
49 * By definition keys must be unique within
52 - if (ldap_count_values(keyValue) > 1) {
55 - "key %s has duplicate entries - ignoring",
58 + count = ldap_count_values(keyValue);
59 + if (strcasecmp(class, "nisObject")) {
61 + error(logopt, MODPREFIX
62 + "key %s has duplicates - ignoring",
66 + key = strdup(keyValue[0]);
68 + error(logopt, MODPREFIX
69 + "failed to dup map key %s - ignoring",
73 + } else if (count == 1) {
74 + dec_len = decode_percent_hack(keyValue[0], &key);
76 + error(logopt, MODPREFIX
77 + "invalid map key %s - ignoring",
82 + dec_len = decode_percent_hack(keyValue[0], &key);
84 + error(logopt, MODPREFIX
85 + "invalid map key %s - ignoring",
90 + for (i = 1; i < count; i++) {
92 + dec_len = decode_percent_hack(keyValue[i], &k);
94 + error(logopt, MODPREFIX
95 + "invalid map key %s - ignoring",
99 + if (strcmp(key, k)) {
100 + error(logopt, MODPREFIX
101 + "key entry mismatch %s - ignoring",
111 * Ignore keys beginning with '+' as plus map
112 * inclusion is only valid in file maps.
114 - if (**keyValue == '+') {
118 "ignoreing '+' map entry - not in file map");
119 @@ -1558,7 +1606,7 @@ int lookup_read_master(struct master *master, time_t age, void *context)
122 if (snprintf(parse_buf, sizeof(parse_buf), "%s %s",
123 - *keyValue, *values) >= sizeof(parse_buf)) {
124 + key, *values) >= sizeof(parse_buf)) {
125 error(logopt, MODPREFIX "map entry too long");
126 ldap_value_free(values);
128 @@ -1568,6 +1616,8 @@ int lookup_read_master(struct master *master, time_t age, void *context)
129 master_parse_entry(parse_buf, timeout, logging, age);
131 ldap_value_free(keyValue);
134 e = ldap_next_entry(ldap, e);