summaryrefslogtreecommitdiffstats
path: root/support/include/exportfs.h
diff options
context:
space:
mode:
Diffstat (limited to 'support/include/exportfs.h')
-rw-r--r--support/include/exportfs.h179
1 files changed, 179 insertions, 0 deletions
diff --git a/support/include/exportfs.h b/support/include/exportfs.h
new file mode 100644
index 0000000..9edf0d0
--- /dev/null
+++ b/support/include/exportfs.h
@@ -0,0 +1,179 @@
+/*
+ * support/include/exportfs.h
+ *
+ * Declarations for exportfs and mountd
+ *
+ * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
+ */
+
+#ifndef EXPORTFS_H
+#define EXPORTFS_H
+
+#include <netdb.h>
+#include <string.h>
+
+#include "sockaddr.h"
+#include "nfslib.h"
+
+enum {
+ MCL_FQDN = 0,
+ MCL_SUBNETWORK,
+ MCL_IPADDR = MCL_SUBNETWORK,
+ MCL_WILDCARD,
+ MCL_NETGROUP,
+ MCL_ANONYMOUS,
+ MCL_GSS,
+ MCL_MAXTYPES
+};
+
+enum {
+ FSLOC_NONE = 0,
+ FSLOC_REFER,
+ FSLOC_REPLICA,
+ FSLOC_STUB
+};
+
+#ifndef EXP_LOCKFILE
+#define EXP_LOCKFILE "/var/lib/nfs/export-lock"
+#endif
+
+typedef struct mclient {
+ struct mclient * m_next;
+ char * m_hostname;
+ int m_type;
+ int m_naddr;
+ union nfs_sockaddr m_addrlist[NFSCLNT_ADDRMAX];
+ int m_exported; /* exported to nfsd */
+ int m_count;
+} nfs_client;
+
+static inline const struct sockaddr *
+get_addrlist(const nfs_client *clp, const int i)
+{
+ return &clp->m_addrlist[i].sa;
+}
+
+static inline const struct sockaddr_in *
+get_addrlist_in(const nfs_client *clp, const int i)
+{
+ return &clp->m_addrlist[i].s4;
+}
+
+static inline const struct sockaddr_in6 *
+get_addrlist_in6(const nfs_client *clp, const int i)
+{
+ return &clp->m_addrlist[i].s6;
+}
+
+static inline void
+set_addrlist_in(nfs_client *clp, const int i, const struct sockaddr_in *sin)
+{
+ memcpy(&clp->m_addrlist[i].s4, sin, sizeof(*sin));
+}
+
+static inline void
+set_addrlist_in6(nfs_client *clp, const int i, const struct sockaddr_in6 *sin6)
+{
+ memcpy(&clp->m_addrlist[i].s6, sin6, sizeof(*sin6));
+}
+
+static inline void
+set_addrlist(nfs_client *clp, const int i, const struct sockaddr *sap)
+{
+ switch (sap->sa_family) {
+ case AF_INET:
+ memcpy(&clp->m_addrlist[i].s4, sap, sizeof(struct sockaddr_in));
+ break;
+#ifdef IPV6_SUPPORTED
+ case AF_INET6:
+ memcpy(&clp->m_addrlist[i].s6, sap, sizeof(struct sockaddr_in6));
+ break;
+#endif
+ }
+}
+
+typedef struct mexport {
+ struct mexport * m_next;
+ struct mclient * m_client;
+ struct exportent m_export;
+ int m_exported; /* known to knfsd. */
+ unsigned int m_xtabent : 1, /* xtab entry exists */
+ m_mayexport: 1, /* derived from xtabbed */
+ m_changed : 1, /* options (may) have changed */
+ m_warned : 1; /* warned about multiple exports
+ * matching one client */
+} nfs_export;
+
+#define HASH_TABLE_SIZE 1021
+
+extern int default_ttl;
+
+typedef struct _exp_hash_entry {
+ nfs_export * p_first;
+ nfs_export * p_last;
+} exp_hash_entry;
+
+typedef struct _exp_hash_table {
+ nfs_export * p_head;
+ exp_hash_entry entries[HASH_TABLE_SIZE];
+} exp_hash_table;
+
+extern exp_hash_table exportlist[MCL_MAXTYPES];
+
+extern nfs_client * clientlist[MCL_MAXTYPES];
+
+nfs_client * client_lookup(char *hname, int canonical);
+nfs_client * client_dup(const nfs_client *clp,
+ const struct addrinfo *ai);
+int client_gettype(char *hname);
+int client_check(const nfs_client *clp,
+ const struct addrinfo *ai);
+void client_release(nfs_client *);
+void client_freeall(void);
+char * client_compose(const struct addrinfo *ai);
+struct addrinfo * client_resolve(const struct sockaddr *sap);
+int client_member(const char *client,
+ const char *name);
+
+int export_read(char *fname, int ignore_hosts);
+int export_d_read(const char *dname, int ignore_hosts);
+void export_reset(nfs_export *);
+nfs_export * export_lookup(char *hname, char *path, int caconical);
+nfs_export * export_find(const struct addrinfo *ai,
+ const char *path);
+nfs_export * export_create(struct exportent *, int canonical);
+void exportent_release(struct exportent *);
+void export_freeall(void);
+
+extern struct state_paths etab;
+int xtab_export_read(void);
+int xtab_export_write(void);
+
+int secinfo_addflavor(struct flav_info *, struct exportent *);
+
+char * host_ntop(const struct sockaddr *sap,
+ char *buf, const size_t buflen);
+__attribute__((__malloc__))
+struct addrinfo * host_pton(const char *paddr);
+__attribute__((__malloc__))
+struct addrinfo * host_addrinfo(const char *hostname);
+__attribute__((__malloc__))
+char * host_canonname(const struct sockaddr *sap);
+__attribute__((__malloc__))
+struct addrinfo * host_reliable_addrinfo(const struct sockaddr *sap);
+__attribute__((__malloc__))
+struct addrinfo * host_numeric_addrinfo(const struct sockaddr *sap);
+
+struct nfskey * key_lookup(char *hname);
+
+struct export_features {
+ unsigned int flags;
+ unsigned int secinfo_flags;
+};
+
+struct export_features *get_export_features(void);
+void fix_pseudoflavor_flags(struct exportent *ep);
+char *exportent_realpath(struct exportent *eep);
+int export_test(struct exportent *eep, int with_fsid);
+
+#endif /* EXPORTFS_H */