| /* |
| * @file support/junction/junction-internal.h |
| * @brief Internal declarations for libjunction.a |
| */ |
| |
| /* |
| * Copyright 2011, 2018 Oracle. All rights reserved. |
| * |
| * This file is part of nfs-utils. |
| * |
| * nfs-utils is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2.0 as |
| * published by the Free Software Foundation. |
| * |
| * nfs-utils is distributed in the hope that it will be useful, but |
| * WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License version 2.0 for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * version 2.0 along with nfs-utils. If not, see: |
| * |
| * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt |
| */ |
| |
| #ifndef _FEDFS_JUNCTION_INTERNAL_H_ |
| #define _FEDFS_JUNCTION_INTERNAL_H_ |
| |
| #include <libxml/tree.h> |
| #include <libxml/xpath.h> |
| |
| /** |
| ** Names of extended attributes that store junction data |
| **/ |
| |
| /** |
| * Name of extended attribute containing saved mode bits |
| */ |
| #define JUNCTION_XATTR_NAME_MODE "trusted.junction.mode" |
| |
| /** |
| * Name of extended attribute containing NFS-related junction data |
| */ |
| #define JUNCTION_XATTR_NAME_NFS "trusted.junction.nfs" |
| |
| |
| /** |
| ** Names of XML elements and attributes that represent junction data |
| **/ |
| |
| /** |
| * Tag name of root element of a junction XML document |
| */ |
| #define JUNCTION_XML_ROOT_TAG (const xmlChar *)"junction" |
| |
| /** |
| * Tag name of fileset element of a junction XML document |
| */ |
| #define JUNCTION_XML_FILESET_TAG (const xmlChar *)"fileset" |
| |
| /** |
| * Tag name of savedmode element of a junction XML document |
| */ |
| #define JUNCTION_XML_SAVEDMODE_TAG (const xmlChar *)"savedmode" |
| |
| /** |
| * Name of mode bits attribute on a savedmode element |
| */ |
| #define JUNCTION_XML_MODEBITS_ATTR (const xmlChar *)"bits" |
| |
| /** |
| ** Junction helper functions |
| **/ |
| |
| FedFsStatus junction_open_path(const char *pathname, int *fd); |
| FedFsStatus junction_is_directory(int fd, const char *path); |
| FedFsStatus junction_is_sticky_bit_set(int fd, const char *path); |
| FedFsStatus junction_set_sticky_bit(int fd, const char *path); |
| FedFsStatus junction_is_xattr_present(int fd, const char *path, |
| const char *name); |
| FedFsStatus junction_read_xattr(int fd, const char *path, const char *name, |
| char **contents); |
| FedFsStatus junction_get_xattr(int fd, const char *path, const char *name, |
| void **contents, size_t *contentlen); |
| FedFsStatus junction_set_xattr(int fd, const char *path, const char *name, |
| const void *contents, const size_t contentlen); |
| FedFsStatus junction_remove_xattr(int fd, const char *pathname, |
| const char *name); |
| FedFsStatus junction_get_mode(const char *pathname, mode_t *mode); |
| FedFsStatus junction_save_mode(const char *pathname); |
| FedFsStatus junction_restore_mode(const char *pathname); |
| |
| |
| /** |
| ** XML helper functions |
| **/ |
| |
| _Bool junction_xml_is_empty(const xmlChar *content); |
| _Bool junction_xml_match_node_name(xmlNodePtr node, |
| const xmlChar *name); |
| xmlNodePtr junction_xml_find_child_by_name(xmlNodePtr parent, |
| const xmlChar *name); |
| _Bool junction_xml_get_bool_attribute(xmlNodePtr node, |
| const xmlChar *attrname, _Bool *value); |
| void junction_xml_set_bool_attribute(xmlNodePtr node, |
| const xmlChar *attrname, _Bool value); |
| _Bool junction_xml_get_u8_attribute(xmlNodePtr node, |
| const xmlChar *attrname, uint8_t *value); |
| _Bool junction_xml_get_int_attribute(xmlNodePtr node, |
| const xmlChar *attrname, int *value); |
| void junction_xml_set_int_attribute(xmlNodePtr node, |
| const xmlChar *attrname, int value); |
| _Bool junction_xml_get_int_content(xmlNodePtr node, int *value); |
| xmlNodePtr junction_xml_set_int_content(xmlNodePtr parent, |
| const xmlChar *name, int value); |
| FedFsStatus junction_xml_parse(const char *pathname, const char *name, |
| xmlDocPtr *doc); |
| FedFsStatus junction_xml_write(const char *pathname, const char *name, |
| xmlDocPtr doc); |
| |
| #endif /* !_FEDFS_JUNCTION_INTERNAL_H_ */ |