You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
538 lines
15 KiB
538 lines
15 KiB
autofs-5.0.8 - pass map_source as function paramter where possible |
|
|
|
From: Ian Kent <raven@themaw.net> |
|
|
|
Some unnecessary complexity has been added along the way when passing |
|
the map source to functions in lookup modules. Improve that where |
|
possible. |
|
--- |
|
CHANGELOG | 1 |
|
modules/lookup_file.c | 82 +++++++++++++++-------------------------------- |
|
modules/lookup_ldap.c | 37 ++++++--------------- |
|
modules/lookup_nisplus.c | 36 ++++---------------- |
|
modules/lookup_yp.c | 36 ++++---------------- |
|
5 files changed, 56 insertions(+), 136 deletions(-) |
|
|
|
--- autofs-5.0.7.orig/CHANGELOG |
|
+++ autofs-5.0.7/CHANGELOG |
|
@@ -84,6 +84,7 @@ |
|
- fix cache readlock not taken on lookup. |
|
- fix compilation of lookup_ldap.c without sasl. |
|
- fix undefined authtype_requires_creds err if ldap enabled but without sasl. |
|
+- pass map_source as function paramter where possible. |
|
|
|
25/07/2012 autofs-5.0.7 |
|
======================= |
|
--- autofs-5.0.7.orig/modules/lookup_file.c |
|
+++ autofs-5.0.7/modules/lookup_file.c |
|
@@ -529,21 +529,17 @@ static int check_self_include(const char |
|
|
|
static struct map_source * |
|
prepare_plus_include(struct autofs_point *ap, |
|
+ struct map_source *source, |
|
time_t age, char *key, unsigned int inc, |
|
struct lookup_context *ctxt) |
|
{ |
|
- struct map_source *current; |
|
- struct map_source *source; |
|
+ struct map_source *new; |
|
struct map_type_info *info; |
|
const char *argv[2]; |
|
char **tmp_argv, **tmp_opts; |
|
int argc; |
|
char *buf; |
|
|
|
- current = ap->entry->current; |
|
- ap->entry->current = NULL; |
|
- master_source_current_signal(ap->entry); |
|
- |
|
/* |
|
* TODO: |
|
* Initially just consider the passed in key to be a simple map |
|
@@ -596,21 +592,21 @@ prepare_plus_include(struct autofs_point |
|
} |
|
argc += ctxt->opts_argc; |
|
|
|
- source = master_find_source_instance(current, |
|
- info->type, info->format, |
|
- argc, (const char **) tmp_argv); |
|
- if (source) { |
|
+ new = master_find_source_instance(source, |
|
+ info->type, info->format, |
|
+ argc, (const char **) tmp_argv); |
|
+ if (new) { |
|
/* |
|
* Make sure included map age is in sync with its owner |
|
* or we could incorrectly wipe out its entries. |
|
*/ |
|
- source->age = age; |
|
- source->stale = 1; |
|
+ new->age = age; |
|
+ new->stale = 1; |
|
} else { |
|
- source = master_add_source_instance(current, |
|
- info->type, info->format, age, |
|
- argc, (const char **) tmp_argv); |
|
- if (!source) { |
|
+ new = master_add_source_instance(source, |
|
+ info->type, info->format, age, |
|
+ argc, (const char **) tmp_argv); |
|
+ if (!new) { |
|
free_argv(argc, (const char **) tmp_argv); |
|
free_map_type_info(info); |
|
free(buf); |
|
@@ -620,14 +616,14 @@ prepare_plus_include(struct autofs_point |
|
} |
|
free_argv(argc, (const char **) tmp_argv); |
|
|
|
- source->depth = current->depth + 1; |
|
+ new->depth = source->depth + 1; |
|
if (inc) |
|
- source->recurse = 1; |
|
+ new->recurse = 1; |
|
|
|
free_map_type_info(info); |
|
free(buf); |
|
|
|
- return source; |
|
+ return new; |
|
} |
|
|
|
int lookup_read_map(struct autofs_point *ap, time_t age, void *context) |
|
@@ -689,10 +685,8 @@ int lookup_read_map(struct autofs_point |
|
|
|
inc = check_self_include(key, ctxt); |
|
|
|
- master_source_current_wait(ap->entry); |
|
- ap->entry->current = source; |
|
- |
|
- inc_source = prepare_plus_include(ap, age, key, inc, ctxt); |
|
+ inc_source = prepare_plus_include(ap, source, |
|
+ age, key, inc, ctxt); |
|
if (!inc_source) { |
|
debug(ap->logopt, |
|
"failed to select included map %s", key); |
|
@@ -731,10 +725,10 @@ int lookup_read_map(struct autofs_point |
|
} |
|
|
|
static int lookup_one(struct autofs_point *ap, |
|
+ struct map_source *source, |
|
const char *key, int key_len, |
|
struct lookup_context *ctxt) |
|
{ |
|
- struct map_source *source; |
|
struct mapent_cache *mc; |
|
char mkey[KEY_MAX_LEN + 1]; |
|
char mapent[MAPENT_MAX_LEN + 1]; |
|
@@ -743,10 +737,6 @@ static int lookup_one(struct autofs_poin |
|
unsigned int k_len, m_len; |
|
int entry, ret; |
|
|
|
- source = ap->entry->current; |
|
- ap->entry->current = NULL; |
|
- master_source_current_signal(ap->entry); |
|
- |
|
mc = source->mc; |
|
|
|
f = open_fopen_r(ctxt->mapname); |
|
@@ -773,10 +763,8 @@ static int lookup_one(struct autofs_poin |
|
|
|
inc = check_self_include(mkey, ctxt); |
|
|
|
- master_source_current_wait(ap->entry); |
|
- ap->entry->current = source; |
|
- |
|
- inc_source = prepare_plus_include(ap, age, mkey, inc, ctxt); |
|
+ inc_source = prepare_plus_include(ap, source, |
|
+ age, mkey, inc, ctxt); |
|
if (!inc_source) { |
|
debug(ap->logopt, |
|
MODPREFIX |
|
@@ -837,9 +825,9 @@ static int lookup_one(struct autofs_poin |
|
return CHE_MISSING; |
|
} |
|
|
|
-static int lookup_wild(struct autofs_point *ap, struct lookup_context *ctxt) |
|
+static int lookup_wild(struct autofs_point *ap, |
|
+ struct map_source *source, struct lookup_context *ctxt) |
|
{ |
|
- struct map_source *source; |
|
struct mapent_cache *mc; |
|
char mkey[KEY_MAX_LEN + 1]; |
|
char mapent[MAPENT_MAX_LEN + 1]; |
|
@@ -848,10 +836,6 @@ static int lookup_wild(struct autofs_poi |
|
unsigned int k_len, m_len; |
|
int entry, ret; |
|
|
|
- source = ap->entry->current; |
|
- ap->entry->current = NULL; |
|
- master_source_current_signal(ap->entry); |
|
- |
|
mc = source->mc; |
|
|
|
f = open_fopen_r(ctxt->mapname); |
|
@@ -895,24 +879,17 @@ static int lookup_wild(struct autofs_poi |
|
} |
|
|
|
static int check_map_indirect(struct autofs_point *ap, |
|
+ struct map_source *source, |
|
char *key, int key_len, |
|
struct lookup_context *ctxt) |
|
{ |
|
- struct map_source *source; |
|
struct mapent_cache *mc; |
|
struct mapent *exists; |
|
int ret = CHE_OK; |
|
|
|
- source = ap->entry->current; |
|
- ap->entry->current = NULL; |
|
- master_source_current_signal(ap->entry); |
|
- |
|
mc = source->mc; |
|
|
|
- master_source_current_wait(ap->entry); |
|
- ap->entry->current = source; |
|
- |
|
- ret = lookup_one(ap, key, key_len, ctxt); |
|
+ ret = lookup_one(ap, source, key, key_len, ctxt); |
|
if (ret == CHE_COMPLETED) |
|
return NSS_STATUS_COMPLETED; |
|
|
|
@@ -935,10 +912,7 @@ static int check_map_indirect(struct aut |
|
struct mapent *we; |
|
int wild = CHE_MISSING; |
|
|
|
- master_source_current_wait(ap->entry); |
|
- ap->entry->current = source; |
|
- |
|
- wild = lookup_wild(ap, ctxt); |
|
+ wild = lookup_wild(ap, source, ctxt); |
|
/* |
|
* Check for map change and update as needed for |
|
* following cache lookup. |
|
@@ -1072,10 +1046,8 @@ int lookup_mount(struct autofs_point *ap |
|
if (!lkp_key) |
|
return NSS_STATUS_UNKNOWN; |
|
|
|
- master_source_current_wait(ap->entry); |
|
- ap->entry->current = source; |
|
- |
|
- status = check_map_indirect(ap, lkp_key, strlen(lkp_key), ctxt); |
|
+ status = check_map_indirect(ap, source, |
|
+ lkp_key, strlen(lkp_key), ctxt); |
|
free(lkp_key); |
|
if (status) { |
|
if (status == NSS_STATUS_COMPLETED) |
|
--- autofs-5.0.7.orig/modules/lookup_ldap.c |
|
+++ autofs-5.0.7/modules/lookup_ldap.c |
|
@@ -2321,20 +2321,16 @@ next: |
|
|
|
|
|
static int read_one_map(struct autofs_point *ap, |
|
+ struct map_source *source, |
|
struct lookup_context *ctxt, |
|
time_t age, int *result_ldap) |
|
{ |
|
- struct map_source *source; |
|
struct ldap_search_params sp; |
|
char buf[MAX_ERR_BUF]; |
|
char *class, *info, *entry; |
|
char *attrs[3]; |
|
int rv, l; |
|
|
|
- source = ap->entry->current; |
|
- ap->entry->current = NULL; |
|
- master_source_current_signal(ap->entry); |
|
- |
|
/* |
|
* If we don't need to create directories then there's no use |
|
* reading the map. We always need to read the whole map for |
|
@@ -2453,11 +2449,16 @@ static int read_one_map(struct autofs_po |
|
int lookup_read_map(struct autofs_point *ap, time_t age, void *context) |
|
{ |
|
struct lookup_context *ctxt = (struct lookup_context *) context; |
|
+ struct map_source *source; |
|
int rv = LDAP_SUCCESS; |
|
int ret, cur_state; |
|
|
|
+ source = ap->entry->current; |
|
+ ap->entry->current = NULL; |
|
+ master_source_current_signal(ap->entry); |
|
+ |
|
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cur_state); |
|
- ret = read_one_map(ap, ctxt, age, &rv); |
|
+ ret = read_one_map(ap, source, ctxt, age, &rv); |
|
if (ret != NSS_STATUS_SUCCESS) { |
|
switch (rv) { |
|
case LDAP_SIZELIMIT_EXCEEDED: |
|
@@ -2474,10 +2475,9 @@ int lookup_read_map(struct autofs_point |
|
return ret; |
|
} |
|
|
|
-static int lookup_one(struct autofs_point *ap, |
|
+static int lookup_one(struct autofs_point *ap, struct map_source *source, |
|
char *qKey, int qKey_len, struct lookup_context *ctxt) |
|
{ |
|
- struct map_source *source; |
|
struct mapent_cache *mc; |
|
int rv, i, l, ql, count; |
|
char buf[MAX_ERR_BUF]; |
|
@@ -2496,10 +2496,6 @@ static int lookup_one(struct autofs_poin |
|
unsigned int wild = 0; |
|
int ret = CHE_MISSING; |
|
|
|
- source = ap->entry->current; |
|
- ap->entry->current = NULL; |
|
- master_source_current_signal(ap->entry); |
|
- |
|
mc = source->mc; |
|
|
|
if (ctxt == NULL) { |
|
@@ -2834,27 +2830,20 @@ next: |
|
} |
|
|
|
static int check_map_indirect(struct autofs_point *ap, |
|
+ struct map_source *source, |
|
char *key, int key_len, |
|
struct lookup_context *ctxt) |
|
{ |
|
- struct map_source *source; |
|
struct mapent_cache *mc; |
|
struct mapent *me; |
|
time_t now = time(NULL); |
|
time_t t_last_read; |
|
int ret, cur_state; |
|
|
|
- source = ap->entry->current; |
|
- ap->entry->current = NULL; |
|
- master_source_current_signal(ap->entry); |
|
- |
|
mc = source->mc; |
|
|
|
- master_source_current_wait(ap->entry); |
|
- ap->entry->current = source; |
|
- |
|
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cur_state); |
|
- ret = lookup_one(ap, key, key_len, ctxt); |
|
+ ret = lookup_one(ap, source, key, key_len, ctxt); |
|
if (ret == CHE_FAIL) { |
|
pthread_setcancelstate(cur_state, NULL); |
|
return NSS_STATUS_NOTFOUND; |
|
@@ -2974,10 +2963,8 @@ int lookup_mount(struct autofs_point *ap |
|
if (!lkp_key) |
|
return NSS_STATUS_UNKNOWN; |
|
|
|
- master_source_current_wait(ap->entry); |
|
- ap->entry->current = source; |
|
- |
|
- status = check_map_indirect(ap, lkp_key, strlen(lkp_key), ctxt); |
|
+ status = check_map_indirect(ap, source, |
|
+ lkp_key, strlen(lkp_key), ctxt); |
|
free(lkp_key); |
|
if (status) |
|
return status; |
|
--- autofs-5.0.7.orig/modules/lookup_nisplus.c |
|
+++ autofs-5.0.7/modules/lookup_nisplus.c |
|
@@ -267,10 +267,10 @@ int lookup_read_map(struct autofs_point |
|
} |
|
|
|
static int lookup_one(struct autofs_point *ap, |
|
+ struct map_source *source, |
|
const char *key, int key_len, |
|
struct lookup_context *ctxt) |
|
{ |
|
- struct map_source *source; |
|
struct mapent_cache *mc; |
|
char *tablename; |
|
nis_result *result; |
|
@@ -280,10 +280,6 @@ static int lookup_one(struct autofs_poin |
|
int ret, cur_state; |
|
char buf[MAX_ERR_BUF]; |
|
|
|
- source = ap->entry->current; |
|
- ap->entry->current = NULL; |
|
- master_source_current_signal(ap->entry); |
|
- |
|
mc = source->mc; |
|
|
|
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cur_state); |
|
@@ -326,9 +322,9 @@ static int lookup_one(struct autofs_poin |
|
return ret; |
|
} |
|
|
|
-static int lookup_wild(struct autofs_point *ap, struct lookup_context *ctxt) |
|
+static int lookup_wild(struct autofs_point *ap, |
|
+ struct map_source *source, struct lookup_context *ctxt) |
|
{ |
|
- struct map_source *source; |
|
struct mapent_cache *mc; |
|
char *tablename; |
|
nis_result *result; |
|
@@ -338,10 +334,6 @@ static int lookup_wild(struct autofs_poi |
|
int ret, cur_state; |
|
char buf[MAX_ERR_BUF]; |
|
|
|
- source = ap->entry->current; |
|
- ap->entry->current = NULL; |
|
- master_source_current_signal(ap->entry); |
|
- |
|
mc = source->mc; |
|
|
|
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cur_state); |
|
@@ -383,27 +375,20 @@ static int lookup_wild(struct autofs_poi |
|
} |
|
|
|
static int check_map_indirect(struct autofs_point *ap, |
|
+ struct map_source *source, |
|
char *key, int key_len, |
|
struct lookup_context *ctxt) |
|
{ |
|
- struct map_source *source; |
|
struct mapent_cache *mc; |
|
struct mapent *me, *exists; |
|
time_t now = time(NULL); |
|
time_t t_last_read; |
|
int ret = 0; |
|
|
|
- source = ap->entry->current; |
|
- ap->entry->current = NULL; |
|
- master_source_current_signal(ap->entry); |
|
- |
|
mc = source->mc; |
|
|
|
- master_source_current_wait(ap->entry); |
|
- ap->entry->current = source; |
|
- |
|
/* check map and if change is detected re-read map */ |
|
- ret = lookup_one(ap, key, key_len, ctxt); |
|
+ ret = lookup_one(ap, source, key, key_len, ctxt); |
|
if (ret == CHE_FAIL) |
|
return NSS_STATUS_NOTFOUND; |
|
|
|
@@ -452,10 +437,7 @@ static int check_map_indirect(struct aut |
|
int wild = CHE_MISSING; |
|
struct mapent *we; |
|
|
|
- master_source_current_wait(ap->entry); |
|
- ap->entry->current = source; |
|
- |
|
- wild = lookup_wild(ap, ctxt); |
|
+ wild = lookup_wild(ap, source, ctxt); |
|
/* |
|
* Check for map change and update as needed for |
|
* following cache lookup. |
|
@@ -553,10 +535,8 @@ int lookup_mount(struct autofs_point *ap |
|
if (!lkp_key) |
|
return NSS_STATUS_UNKNOWN; |
|
|
|
- master_source_current_wait(ap->entry); |
|
- ap->entry->current = source; |
|
- |
|
- status = check_map_indirect(ap, lkp_key, strlen(lkp_key), ctxt); |
|
+ status = check_map_indirect(ap, source, |
|
+ lkp_key, strlen(lkp_key), ctxt); |
|
if (status) |
|
return status; |
|
} |
|
--- autofs-5.0.7.orig/modules/lookup_yp.c |
|
+++ autofs-5.0.7/modules/lookup_yp.c |
|
@@ -377,10 +377,10 @@ int lookup_read_map(struct autofs_point |
|
} |
|
|
|
static int lookup_one(struct autofs_point *ap, |
|
+ struct map_source *source, |
|
const char *key, int key_len, |
|
struct lookup_context *ctxt) |
|
{ |
|
- struct map_source *source; |
|
struct mapent_cache *mc; |
|
char *mapname; |
|
char *mapent; |
|
@@ -388,10 +388,6 @@ static int lookup_one(struct autofs_poin |
|
time_t age = time(NULL); |
|
int ret; |
|
|
|
- source = ap->entry->current; |
|
- ap->entry->current = NULL; |
|
- master_source_current_signal(ap->entry); |
|
- |
|
mc = source->mc; |
|
|
|
mapname = alloca(strlen(ctxt->mapname) + 1); |
|
@@ -436,9 +432,9 @@ static int lookup_one(struct autofs_poin |
|
return ret; |
|
} |
|
|
|
-static int lookup_wild(struct autofs_point *ap, struct lookup_context *ctxt) |
|
+static int lookup_wild(struct autofs_point *ap, |
|
+ struct map_source *source, struct lookup_context *ctxt) |
|
{ |
|
- struct map_source *source; |
|
struct mapent_cache *mc; |
|
char *mapname; |
|
char *mapent; |
|
@@ -446,10 +442,6 @@ static int lookup_wild(struct autofs_poi |
|
time_t age = time(NULL); |
|
int ret; |
|
|
|
- source = ap->entry->current; |
|
- ap->entry->current = NULL; |
|
- master_source_current_signal(ap->entry); |
|
- |
|
mc = source->mc; |
|
|
|
mapname = alloca(strlen(ctxt->mapname) + 1); |
|
@@ -489,26 +481,19 @@ static int lookup_wild(struct autofs_poi |
|
} |
|
|
|
static int check_map_indirect(struct autofs_point *ap, |
|
+ struct map_source *source, |
|
char *key, int key_len, |
|
struct lookup_context *ctxt) |
|
{ |
|
- struct map_source *source; |
|
struct mapent_cache *mc; |
|
struct mapent *exists; |
|
unsigned int map_order; |
|
int ret = 0; |
|
|
|
- source = ap->entry->current; |
|
- ap->entry->current = NULL; |
|
- master_source_current_signal(ap->entry); |
|
- |
|
mc = source->mc; |
|
|
|
- master_source_current_wait(ap->entry); |
|
- ap->entry->current = source; |
|
- |
|
/* check map and if change is detected re-read map */ |
|
- ret = lookup_one(ap, key, key_len, ctxt); |
|
+ ret = lookup_one(ap, source, key, key_len, ctxt); |
|
if (ret == CHE_FAIL) |
|
return NSS_STATUS_NOTFOUND; |
|
|
|
@@ -556,10 +541,7 @@ static int check_map_indirect(struct aut |
|
struct mapent *we; |
|
int wild = CHE_MISSING; |
|
|
|
- master_source_current_wait(ap->entry); |
|
- ap->entry->current = source; |
|
- |
|
- wild = lookup_wild(ap, ctxt); |
|
+ wild = lookup_wild(ap, source, ctxt); |
|
/* |
|
* Check for map change and update as needed for |
|
* following cache lookup. |
|
@@ -657,10 +639,8 @@ int lookup_mount(struct autofs_point *ap |
|
if (!lkp_key) |
|
return NSS_STATUS_UNKNOWN; |
|
|
|
- master_source_current_wait(ap->entry); |
|
- ap->entry->current = source; |
|
- |
|
- status = check_map_indirect(ap, lkp_key, strlen(lkp_key), ctxt); |
|
+ status = check_map_indirect(ap, source, |
|
+ lkp_key, strlen(lkp_key), ctxt); |
|
free(lkp_key); |
|
if (status) |
|
return status;
|
|
|