X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=support%2Fexport%2Fxtab.c;h=510765a3f0d59b5517e06b0542f1eb8d0d702f03;hp=0ddb2516a8d5e8327441555ca668788f6c1850e6;hb=4cacc965afc4fb03a465ffcc6cb3078aeadc3818;hpb=ac5b03be829b4c9369ebfb07a688308721103228 diff --git a/support/export/xtab.c b/support/export/xtab.c index 0ddb251..510765a 100644 --- a/support/export/xtab.c +++ b/support/export/xtab.c @@ -80,6 +80,12 @@ xtab_export_read(void) return xtab_read(_PATH_ETAB, 1); } +/* + * mountd now keeps an open fd for the etab at all times to make sure that the + * inode number changes when the xtab_export_write is done. If you change the + * routine below such that the files are edited in place, then you'll need to + * fix the auth_reload logic as well... + */ static int xtab_write(char *xtab, char *xtabtmp, int is_export) { @@ -94,7 +100,7 @@ xtab_write(char *xtab, char *xtabtmp, int is_export) setexportent(xtabtmp, "w"); for (i = 0; i < MCL_MAXTYPES; i++) { - for (exp = exportlist[i]; exp; exp = exp->m_next) { + for (exp = exportlist[i].p_head; exp; exp = exp->m_next) { if (is_export && !exp->m_xtabent) continue; if (!is_export && ! exp->m_exported) @@ -102,10 +108,7 @@ xtab_write(char *xtab, char *xtabtmp, int is_export) /* write out the export entry using the FQDN */ xe = exp->m_export; - strncpy(xe.e_hostname, - exp->m_client->m_hostname, - sizeof (xe.e_hostname) - 1); - xe.e_hostname[sizeof (xe.e_hostname) - 1] = '\0'; + xe.e_hostname = exp->m_client->m_hostname; putexportent(&xe); } } @@ -140,9 +143,7 @@ xtab_append(nfs_export *exp) return; setexportent(_PATH_XTAB, "a"); xe = exp->m_export; - strncpy(xe.e_hostname, exp->m_client->m_hostname, - sizeof (xe.e_hostname) - 1); - xe.e_hostname[sizeof (xe.e_hostname) - 1] = '\0'; + xe.e_hostname = exp->m_client->m_hostname; putexportent(&xe); endexportent(); xfunlock(lockid);