summaryrefslogtreecommitdiff
path: root/source/lib/util.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2001-03-26 21:52:43 +0000
committerJeremy Allison <jra@samba.org>2001-03-26 21:52:43 +0000
commit1fe60064bddf29fd778918d3f1a7026002029bd7 (patch)
treed419a147306fef00ea93b16071907141e3ec98bd /source/lib/util.c
parent641ada44ae6429761c1fd0dbcafabc69f897fac7 (diff)
downloadsamba-1fe60064bddf29fd778918d3f1a7026002029bd7.tar.gz
Patch to make automount lookup fallback to get home directory from getpwnam.
From Robert Montjoy <Rob_Montjoy@ECECS.UC.EDU>. Jeremy.
Diffstat (limited to 'source/lib/util.c')
-rw-r--r--source/lib/util.c44
1 files changed, 25 insertions, 19 deletions
diff --git a/source/lib/util.c b/source/lib/util.c
index 3811d81866f..2b7cfabf8e5 100644
--- a/source/lib/util.c
+++ b/source/lib/util.c
@@ -939,39 +939,45 @@ static char *automount_lookup(char *user_name)
char *nis_domain; /* yp_get_default_domain inits this */
char *nis_map = (char *)lp_nis_home_map_name();
- if ((nis_error = yp_get_default_domain(&nis_domain)) != 0)
- {
+ if ((nis_error = yp_get_default_domain(&nis_domain)) != 0) {
DEBUG(3, ("YP Error: %s\n", yperr_string(nis_error)));
return last_value;
}
DEBUG(5, ("NIS Domain: %s\n", nis_domain));
- if (!strcmp(user_name, last_key))
- {
- nis_result = last_value;
+ if (!strcmp(user_name, last_key)) {
+ nis_result = last_value;
nis_result_len = strlen(last_value);
nis_error = 0;
- }
- else
- {
+
+ } else {
+
if ((nis_error = yp_match(nis_domain, nis_map,
user_name, strlen(user_name),
- &nis_result, &nis_result_len)) != 0)
- {
- DEBUG(3, ("YP Error: \"%s\" while looking up \"%s\" in map \"%s\"\n",
+ &nis_result, &nis_result_len)) == 0) {
+ if (!nis_error && nis_result_len >= sizeof(pstring)) {
+ nis_result_len = sizeof(pstring)-1;
+ }
+ fstrcpy(last_key, user_name);
+ strncpy(last_value, nis_result, nis_result_len);
+ last_value[nis_result_len] = '\0';
+ strip_mount_options(&last_value);
+
+ } else if(nis_error == YPERR_KEY) {
+
+ /* If Key lookup fails user home server is not in nis_map
+ use default information for server, and home directory */
+ last_value[0] = 0;
+ DEBUG(3, ("YP Key not found: while looking up \"%s\" in map \"%s\"\n",
+ user_name, nis_map));
+ DEBUG(3, ("using defaults for server and home directory\n"));
+ } else {
+ DEBUG(3, ("YP Error: \"%s\" while looking up \"%s\" in map \"%s\"\n",
yperr_string(nis_error), user_name, nis_map));
}
- if (!nis_error && nis_result_len >= sizeof(pstring))
- {
- nis_result_len = sizeof(pstring)-1;
- }
- fstrcpy(last_key, user_name);
- strncpy(last_value, nis_result, nis_result_len);
- last_value[nis_result_len] = '\0';
}
- strip_mount_options(&last_value);
DEBUG(4, ("YP Lookup: %s resulted in %s\n", user_name, last_value));
return last_value;