/* Samba share mode database library. Copyright (C) Jeremy Allison 2005. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, see <http://www.gnu.org/licenses/>. */ #ifndef _SMB_SHARE_MODES_H_ #define _SMB_STATE_MODES_H_ #ifdef __cplusplus extern "C" { #endif #if HAVE_INTTYPES_H # include <inttypes.h> #else # if HAVE_STDINT_H # include <stdint.h> # endif #endif /* Opaque database context handle. */ struct smbdb_ctx; /* Share mode entry. */ /* We use 64 bit types for device and inode as we don't know what size mode Samba has been compiled in - dev/ino may be 32, may be 64 bits. This interface copes with either. */ struct smb_share_mode_entry { uint64_t dev; uint64_t ino; uint64_t extid; uint32_t share_access; uint32_t access_mask; struct timeval open_time; uint32_t file_id; struct server_id pid; }; /* * open/close sharemode database. */ struct smbdb_ctx *smb_share_mode_db_open(const char *db_path); int smb_share_mode_db_close(struct smbdb_ctx *db_ctx); /* * lock/unlock entry in sharemode database. */ int smb_lock_share_mode_entry(struct smbdb_ctx *db_ctx, uint64_t dev, uint64_t ino, uint64_t extid); int smb_unlock_share_mode_entry(struct smbdb_ctx *db_ctx, uint64_t dev, uint64_t ino, uint64_t extid); /* * Share mode database accessor functions. */ int smb_get_share_mode_entries(struct smbdb_ctx *db_ctx, uint64_t dev, uint64_t ino, uint64_t extid, struct smb_share_mode_entry **pp_list, unsigned char *p_delete_on_close); int smb_create_share_mode_entry(struct smbdb_ctx *db_ctx, uint64_t dev, uint64_t ino, uint64_t extid, const struct smb_share_mode_entry *set_entry, const char *path); int smb_delete_share_mode_entry(struct smbdb_ctx *db_ctx, uint64_t dev, uint64_t ino, uint64_t extid, const struct smb_share_mode_entry *set_entry); int smb_change_share_mode_entry(struct smbdb_ctx *db_ctx, uint64_t dev, uint64_t ino, uint64_t extid, const struct smb_share_mode_entry *set_entry, const struct smb_share_mode_entry *new_entry); #ifdef __cplusplus } #endif #endif