Exemplo n.º 1
0
/*
 * See if the entry already exists.  If not,
 * this was an instantiated wild card, and we
 * must add it.
 */
static void
rmtab_read_wildcard(struct rmtabent *rep)
{
	nfs_export *exp, *exp2;
	struct addrinfo *ai;

	ai = host_addrinfo(rep->r_client);
	if (ai == NULL)
		return;

	exp = export_allowed(ai, rep->r_path);
	freeaddrinfo(ai);
	if (exp == NULL)
		return;

	exp2 = export_lookup(rep->r_client, exp->m_export.e_path, 0);
	if (exp2 == NULL) {
		struct exportent ee;

		memset(&ee, 0, sizeof(ee));
		dupexportent(&ee, &exp->m_export);

		ee.e_hostname = rep->r_client;
		exp2 = export_create(&ee, 0);
		exp2->m_changed = exp->m_changed;
	}
	exp2->m_mayexport = 1;
}
Exemplo n.º 2
0
/**
 * export_read - read entries from /etc/exports
 * @fname: name of file to read from
 *
 */
void
export_read(char *fname)
{
    struct exportent	*eep;
    nfs_export		*exp;

    setexportent(fname, "r");
    while ((eep = getexportent(0,1)) != NULL) {
        exp = export_lookup(eep->e_hostname, eep->e_path, 0);
        if (!exp)
            export_create(eep, 0);
        else
            warn_duplicated_exports(exp, eep);
    }
    endexportent();
}
Exemplo n.º 3
0
static int
xtab_read(char *xtab, char *lockfn, int is_export)
{
    /* is_export == 0  => reading /proc/fs/nfs/exports - we know these things are exported to kernel
     * is_export == 1  => reading /var/lib/nfs/etab - these things are allowed to be exported
     * is_export == 2  => reading /var/lib/nfs/xtab - these things might be known to kernel
     */
	struct exportent	*xp;
	nfs_export		*exp;
	int			lockid;

	if ((lockid = xflock(lockfn, "r")) < 0)
		return 0;
	setexportent(xtab, "r");
	if (is_export == 1)
		v4root_needed = 1;
	while ((xp = getexportent(is_export==0, 0)) != NULL) {
		if (!(exp = export_lookup(xp->e_hostname, xp->e_path, is_export != 1)) &&
		    !(exp = export_create(xp, is_export!=1))) {
			continue;
		}
		switch (is_export) {
		case 0:
			exp->m_exported = 1;
			break;
		case 1:
			exp->m_xtabent = 1;
			exp->m_mayexport = 1;
			if ((xp->e_flags & NFSEXP_FSID) && xp->e_fsid == 0)
				v4root_needed = 0;
			break;
		case 2:
			exp->m_exported = -1;/* may be exported */
			break;
		}
	}
	endexportent();
	xfunlock(lockid);

	return 0;
}
Exemplo n.º 4
0
static void
exportfs_parsed(char *hname, char *path, char *options, int verbose)
{
	struct exportent *eep;
	nfs_export	*exp = NULL;
	struct addrinfo	*ai = NULL;
	int		htype;

	if ((htype = client_gettype(hname)) == MCL_FQDN) {
		ai = host_addrinfo(hname);
		if (ai != NULL) {
			exp = export_find(ai, path);
			hname = ai->ai_canonname;
		}
	} else
		exp = export_lookup(hname, path, 0);

	if (!exp) {
		if (!(eep = mkexportent(hname, path, options)) ||
		    !(exp = export_create(eep, 0)))
			goto out;
	} else if (!updateexportent(&exp->m_export, options))
		goto out;

	if (verbose)
		printf("exporting %s:%s\n", exp->m_client->m_hostname,
			exp->m_export.e_path);
	exp->m_xtabent = 1;
	exp->m_mayexport = 1;
	exp->m_changed = 1;
	exp->m_warned = 0;
	validate_export(exp);

out:
	freeaddrinfo(ai);
}