X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fmountd%2Fcache.c;h=3a50c2647edd63a282e170957e3a1eb11315fb5f;hp=02454ac62655043b2c6d4d4da93211760465278e;hb=7a817c45eaeb6aa93fdb5ca4d81c363b4e4218f0;hpb=ec637de16210c1c6fcb3a0df34d7889592f577dc diff --git a/utils/mountd/cache.c b/utils/mountd/cache.c index 02454ac..3a50c26 100644 --- a/utils/mountd/cache.c +++ b/utils/mountd/cache.c @@ -111,7 +111,7 @@ void auth_unix_ip(FILE *f) else if (client) qword_print(f, *client?client:"DEFAULT"); qword_eol(f); - xlog(D_CALL, "auth_unix_ip: client %p '%s'", client, *client?client: "DEFAULT"); + xlog(D_CALL, "auth_unix_ip: client %p '%s'", client, client?client: "DEFAULT"); if (client) free(client); free(he); @@ -516,8 +516,10 @@ void nfsd_fh(FILE *f) qword_print(f, found_path); qword_eol(f); out: - free(found_path); - free(he); + if (found_path) + free(found_path); + if (he) + free(he); free(dom); xlog(D_CALL, "nfsd_fh: found %p path %s", found, found ? found->e_path : NULL); return; @@ -571,20 +573,25 @@ static int dump_to_cache(FILE *f, char *domain, char *path, struct exportent *ex qword_print(f, path); qword_printint(f, time(0)+30*60); if (exp) { - qword_printint(f, exp->e_flags); + int different_fs = strcmp(path, exp->e_path) != 0; + + if (different_fs) + qword_printint(f, exp->e_flags & ~NFSEXP_FSID); + else + qword_printint(f, exp->e_flags); qword_printint(f, exp->e_anonuid); qword_printint(f, exp->e_anongid); qword_printint(f, exp->e_fsid); write_fsloc(f, exp, path); write_secinfo(f, exp); #if USE_BLKID - if (exp->e_uuid == NULL) { + if (exp->e_uuid == NULL || different_fs) { char u[16]; if (get_uuid(path, NULL, 16, u)) { qword_print(f, "uuid"); qword_printhex(f, u, 16); } - } else if (exp->e_uuid) { + } else { qword_print(f, "uuid"); qword_printhex(f, exp->e_uuid, 16); } @@ -662,9 +669,9 @@ void nfsd_export(FILE *f) } /* If one is a CROSSMOUNT, then prefer the longest path */ if (((found->m_export.e_flags & NFSEXP_CROSSMOUNT) || - (found->m_export.e_flags & NFSEXP_CROSSMOUNT)) && + (exp->m_export.e_flags & NFSEXP_CROSSMOUNT)) && strlen(found->m_export.e_path) != - strlen(found->m_export.e_path)) { + strlen(exp->m_export.e_path)) { if (strlen(exp->m_export.e_path) > strlen(found->m_export.e_path)) {