const struct smb_filename *smb_fname,
mode_t mode)
{
+ struct smb_filename *full_fname = NULL;
int result;
+ full_fname = full_path_from_dirfsp_atname(talloc_tos(),
+ dirfsp,
+ smb_fname);
+ if (full_fname == NULL) {
+ errno = ENOMEM;
+ return -1;
+ }
+
result = SMB_VFS_NEXT_MKDIRAT(handle,
dirfsp,
smb_fname,
if (lp_syslog() > 0) {
syslog(audit_syslog_priority(handle), "mkdirat %s %s%s\n",
- smb_fname->base_name,
+ full_fname->base_name,
(result < 0) ? "failed: " : "",
(result < 0) ? strerror(errno) : "");
}
DEBUG(0, ("vfs_extd_audit: mkdirat %s %s %s\n",
- smb_fname->base_name,
+ full_fname->base_name,
(result < 0) ? "failed: " : "",
(result < 0) ? strerror(errno) : ""));
+ TALLOC_FREE(full_fname);
return result;
}
const struct files_struct *dirfsp,
const struct smb_filename *smb_fname,
files_struct *fsp,
- int flags,
- mode_t mode)
+ const struct vfs_open_how *how)
{
int ret;
- ret = SMB_VFS_NEXT_OPENAT(handle, dirfsp, smb_fname, fsp, flags, mode);
+ ret = SMB_VFS_NEXT_OPENAT(handle, dirfsp, smb_fname, fsp, how);
if (lp_syslog() > 0) {
syslog(audit_syslog_priority(handle),
smb_fname_str_dbg(fsp->fsp_name),
smb_fname->base_name,
ret,
- ((flags & O_WRONLY) || (flags & O_RDWR)) ?
+ ((how->flags & O_WRONLY) || (how->flags & O_RDWR)) ?
"for writing " : "",
(ret < 0) ? "failed: " : "",
(ret < 0) ? strerror(errno) : "");
files_struct *dstfsp,
const struct smb_filename *smb_fname_dst)
{
+ struct smb_filename *full_fname_src = NULL;
+ struct smb_filename *full_fname_dst = NULL;
int result;
+ int saved_errno = 0;
+
+ full_fname_src = full_path_from_dirfsp_atname(talloc_tos(),
+ srcfsp,
+ smb_fname_src);
+ if (full_fname_src == NULL) {
+ errno = ENOMEM;
+ return -1;
+ }
+
+ full_fname_dst = full_path_from_dirfsp_atname(talloc_tos(),
+ dstfsp,
+ smb_fname_dst);
+ if (full_fname_dst == NULL) {
+ TALLOC_FREE(full_fname_src);
+ errno = ENOMEM;
+ return -1;
+ }
result = SMB_VFS_NEXT_RENAMEAT(handle,
srcfsp,
smb_fname_src,
dstfsp,
smb_fname_dst);
-
+ if (result == -1) {
+ saved_errno = errno;
+ }
if (lp_syslog() > 0) {
syslog(audit_syslog_priority(handle), "renameat %s -> %s %s%s\n",
- smb_fname_src->base_name,
- smb_fname_dst->base_name,
+ full_fname_src->base_name,
+ full_fname_dst->base_name,
(result < 0) ? "failed: " : "",
- (result < 0) ? strerror(errno) : "");
+ (result < 0) ? strerror(saved_errno) : "");
}
DEBUG(1, ("vfs_extd_audit: renameat old: %s newname: %s %s %s\n",
- smb_fname_str_dbg(smb_fname_src),
- smb_fname_str_dbg(smb_fname_dst),
+ smb_fname_str_dbg(full_fname_src),
+ smb_fname_str_dbg(full_fname_dst),
(result < 0) ? "failed: " : "",
- (result < 0) ? strerror(errno) : ""));
+ (result < 0) ? strerror(saved_errno) : ""));
+ TALLOC_FREE(full_fname_src);
+ TALLOC_FREE(full_fname_dst);
+
+ if (result == -1) {
+ errno = saved_errno;
+ }
return result;
}
const struct smb_filename *smb_fname,
int flags)
{
+ struct smb_filename *full_fname = NULL;
int result;
+ full_fname = full_path_from_dirfsp_atname(talloc_tos(),
+ dirfsp,
+ smb_fname);
+ if (full_fname == NULL) {
+ return -1;
+ }
+
result = SMB_VFS_NEXT_UNLINKAT(handle,
dirfsp,
smb_fname,
if (lp_syslog() > 0) {
syslog(audit_syslog_priority(handle), "unlinkat %s %s%s\n",
- smb_fname->base_name,
+ full_fname->base_name,
(result < 0) ? "failed: " : "",
(result < 0) ? strerror(errno) : "");
}
DBG_ERR("unlinkat %s %s %s\n",
- smb_fname_str_dbg(smb_fname),
+ smb_fname_str_dbg(full_fname),
(result < 0) ? "failed: " : "",
(result < 0) ? strerror(errno) : "");
- return result;
-}
-
-static int audit_chmod(vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- mode_t mode)
-{
- int result;
-
- result = SMB_VFS_NEXT_CHMOD(handle, smb_fname, mode);
-
- if (lp_syslog() > 0) {
- syslog(audit_syslog_priority(handle), "chmod %s mode 0x%x %s%s\n",
- smb_fname->base_name, mode,
- (result < 0) ? "failed: " : "",
- (result < 0) ? strerror(errno) : "");
- }
- DEBUG(1, ("vfs_extd_audit: chmod %s mode 0x%x %s %s\n",
- smb_fname->base_name, (unsigned int)mode,
- (result < 0) ? "failed: " : "",
- (result < 0) ? strerror(errno) : ""));
-
+ TALLOC_FREE(full_fname);
return result;
}
(result < 0) ? "failed: " : "",
(result < 0) ? strerror(errno) : "");
}
- DEBUG(1, ("vfs_extd_audit: fchmod %s mode 0x%x %s %s",
+ DEBUG(1, ("vfs_extd_audit: fchmod %s mode 0x%x %s %s\n",
fsp_str_dbg(fsp), (unsigned int)mode,
(result < 0) ? "failed: " : "",
(result < 0) ? strerror(errno) : ""));
.close_fn = audit_close,
.renameat_fn = audit_renameat,
.unlinkat_fn = audit_unlinkat,
- .chmod_fn = audit_chmod,
.fchmod_fn = audit_fchmod,
};