X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fmountd%2Fmountd.c;h=0facf89e9266328df9c15ce9b46d92193f0d7d6c;hp=4a5058821ecf620e044a8d8544a36be4375348a2;hb=124b74413e943ab9c02cdff2832d1d81dc9fda87;hpb=7a042b78ba064a36d1c7de797d2af796212fca2e diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c index 4a50588..0facf89 100644 --- a/utils/mountd/mountd.c +++ b/utils/mountd/mountd.c @@ -203,9 +203,8 @@ mount_dump_1_svc(struct svc_req *rqstp, void *argp, mountlist *res) struct sockaddr_in *addr = (struct sockaddr_in *) svc_getcaller(rqstp->rq_xprt); - if ((*res = mountlist_list()) == NULL) - xlog(L_WARNING, "dump request from %s failed.", - inet_ntoa(addr->sin_addr)); + xlog(D_CALL, "dump request from %s.", inet_ntoa(addr->sin_addr)); + *res = mountlist_list(); return 1; } @@ -231,9 +230,6 @@ mount_umnt_1_svc(struct svc_req *rqstp, dirpath *argp, void *resp) return 1; } - if (!new_cache) - export_reset (exp); - mountlist_del(inet_ntoa(sin->sin_addr), p); return 1; } @@ -254,9 +250,8 @@ mount_export_1_svc(struct svc_req *rqstp, void *argp, exports *resp) struct sockaddr_in *addr = (struct sockaddr_in *) svc_getcaller(rqstp->rq_xprt); - if ((*resp = get_exportlist()) == NULL) - xlog(L_WARNING, "export request from %s failed.", - inet_ntoa(addr->sin_addr)); + xlog(D_CALL, "export request from %s.", inet_ntoa(addr->sin_addr)); + *resp = get_exportlist(); return 1; } @@ -267,9 +262,9 @@ mount_exportall_1_svc(struct svc_req *rqstp, void *argp, exports *resp) struct sockaddr_in *addr = (struct sockaddr_in *) svc_getcaller(rqstp->rq_xprt); - if ((*resp = get_exportlist()) == NULL) - xlog(L_WARNING, "exportall request from %s failed.", - inet_ntoa(addr->sin_addr)); + xlog(D_CALL, "exportall request from %s.", inet_ntoa(addr->sin_addr)); + *resp = get_exportlist(); + return 1; } @@ -314,7 +309,6 @@ mount_pathconf_2_svc(struct svc_req *rqstp, dirpath *path, ppathcnf *res) } else if (stat(p, &stb) < 0) { xlog(L_WARNING, "can't stat exported dir %s: %s", p, strerror(errno)); - export_reset (exp); return 1; } @@ -330,8 +324,6 @@ mount_pathconf_2_svc(struct svc_req *rqstp, dirpath *path, ppathcnf *res) res->pc_mask[0] = 0; res->pc_mask[1] = 0; - export_reset (exp); - return 1; } @@ -344,7 +336,14 @@ mount_mnt_3_svc(struct svc_req *rqstp, dirpath *path, mountres3 *res) #define AUTH_GSS_KRB5 390003 #define AUTH_GSS_KRB5I 390004 #define AUTH_GSS_KRB5P 390005 - static int flavors[] = { AUTH_NULL, AUTH_UNIX, AUTH_GSS_KRB5, AUTH_GSS_KRB5I, AUTH_GSS_KRB5P}; + static int flavors[] = { AUTH_UNIX, AUTH_GSS_KRB5, AUTH_GSS_KRB5I, AUTH_GSS_KRB5P}; + /* + * We should advertise the preferred flavours first. (See RFC 2623 + * section 2.7.) AUTH_UNIX is arbitrarily ranked over the GSS's. + * AUTH_NULL is dropped from the list to avoid backward compatibility + * issue with older Linux clients, who inspect the list in reversed + * order. + */ struct nfs_fh_len *fh; xlog(D_CALL, "MNT3(%s) called", *path); @@ -452,13 +451,11 @@ get_rootfh(struct svc_req *rqstp, dirpath *path, mountstat3 *error, int v3) if (fh != NULL) { mountlist_add(inet_ntoa(sin->sin_addr), p); *error = NFS_OK; - export_reset (exp); return fh; } xlog(L_WARNING, "getfh failed: %s", strerror(errno)); *error = NFSERR_ACCES; } - export_reset (exp); return NULL; } @@ -494,14 +491,14 @@ get_exportlist(void) for (i = 0; i < MCL_MAXTYPES; i++) { for (exp = exportlist[i]; exp; exp = exp->m_next) { for (e = elist; e != NULL; e = e->ex_next) { - if (!strcmp(exp->m_export.m_path, e->ex_dir)) + if (!strcmp(exp->m_export.e_path, e->ex_dir)) break; } if (!e) { e = (struct exportnode *) xmalloc(sizeof(*e)); e->ex_next = elist; e->ex_groups = NULL; - e->ex_dir = xstrdup(exp->m_export.m_path); + e->ex_dir = xstrdup(exp->m_export.e_path); elist = e; }