X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fmountd%2Fcache.c;h=37e71600268eb402c8e79bc4b4f238d32bf1e3a8;hp=dcb5dac1369bc3621290f730fd3b3537d1115cd0;hb=dbfcba5b03481d49f3e78946fe8fd066e2025545;hpb=8fd9fad1ea4b25b8962d70133f476650ef0637b0 diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c index dcb5dac..37e7160 100644 --- a/utils/mountd/cache.c +++ b/utils/mountd/cache.c @@ -236,6 +236,20 @@ void nfsd_fh(FILE *f) return; } +static int dump_to_cache(FILE *f, char *domain, char *path, struct exportent *exp) +{ + qword_print(f, domain); + qword_print(f, path); + qword_printint(f, time(0)+30*60); + if (exp) { + qword_printint(f, exp->e_flags); + qword_printint(f, exp->e_anonuid); + qword_printint(f, exp->e_anongid); + qword_printint(f, exp->e_fsid); + } + return qword_eol(f); +} + void nfsd_export(FILE *f) { /* requests are: @@ -284,16 +298,12 @@ void nfsd_export(FILE *f) } } - qword_print(f, dom); - qword_print(f, path); - qword_printint(f, time(0)+30*60); if (found) { - qword_printint(f, found->m_export.e_flags); - qword_printint(f, found->m_export.e_anonuid); - qword_printint(f, found->m_export.e_anongid); - qword_printint(f, found->m_export.e_fsid); + dump_to_cache(f, dom, path, &found->m_export); + mountlist_add(dom, path); + } else { + dump_to_cache(f, dom, path, NULL); } - qword_eol(f); out: if (dom) free(dom); if (path) free(path); @@ -359,16 +369,9 @@ int cache_export_ent(char *domain, struct exportent *exp) if (!f) return -1; - qword_print(f, domain); - qword_print(f, exp->e_path); - qword_printint(f, time(0)+30*60); - qword_printint(f, exp->e_flags); - qword_printint(f, exp->e_anonuid); - qword_printint(f, exp->e_anongid); - qword_printint(f, exp->e_fsid); - err = qword_eol(f); - + err = dump_to_cache(f, domain, exp->e_path, exp); fclose(f); + mountlist_add(domain, exp->e_path); return err; } @@ -377,6 +380,12 @@ int cache_export(nfs_export *exp) int err; FILE *f; + if (exp->m_export.e_maptype != CLE_MAP_IDENT) { + xlog(L_ERROR, "%s: unsupported mapping; kernel supports only 'identity' (default)", + exp->m_export.m_path); + return; + } + f = fopen("/proc/net/rpc/auth.unix.ip/channel", "w"); if (!f) return -1;