summaryrefslogtreecommitdiff
path: root/source3/smbd/dosmode.c
diff options
context:
space:
mode:
authorJames Peach <jpeach@samba.org>2006-03-22 23:49:09 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 11:15:42 -0500
commit40d0707827ee154bcb03013abe6f72f1026a70c9 (patch)
treeb465d32e79fc65a682aa55dd96e4a665109bfc15 /source3/smbd/dosmode.c
parente836508704dd964e22e8bfc0f8e9ec520a2c94f2 (diff)
downloadsamba-40d0707827ee154bcb03013abe6f72f1026a70c9.tar.gz
samba-40d0707827ee154bcb03013abe6f72f1026a70c9.tar.bz2
samba-40d0707827ee154bcb03013abe6f72f1026a70c9.zip
r14668: Set the FILE_STATUS_OFFLINE bit by observing the events a DMAPI-based
HSM is interested in. Tested on both IRIX and SLES9. (This used to be commit 514a767c57f8194547e5b708ad2573ab9a0719c6)
Diffstat (limited to 'source3/smbd/dosmode.c')
-rw-r--r--source3/smbd/dosmode.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/source3/smbd/dosmode.c b/source3/smbd/dosmode.c
index 7f3bda582d..f376de1343 100644
--- a/source3/smbd/dosmode.c
+++ b/source3/smbd/dosmode.c
@@ -2,6 +2,7 @@
Unix SMB/CIFS implementation.
dos mode handling functions
Copyright (C) Andrew Tridgell 1992-1998
+ Copyright (C) James Peach 2006
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -31,6 +32,31 @@ static int set_sparse_flag(const SMB_STRUCT_STAT * const sbuf)
}
/****************************************************************************
+ Work out whether this file is offline
+****************************************************************************/
+
+#ifndef ISDOT
+#define ISDOT(p) (*(p) == '.' && *((p) + 1) == '\0')
+#endif /* ISDOT */
+
+#ifndef ISDOTDOT
+#define ISDOTDOT(p) (*(p) == '.' && *((p) + 1) == '.' && *((p) + 2) == '\0')
+#endif /* ISDOTDOT */
+
+static uint32 set_offline_flag(connection_struct *conn, const char *const path)
+{
+ if (ISDOT(path) || ISDOTDOT(path)) {
+ return 0;
+ }
+
+ if (!lp_dmapi_support(SNUM(conn)) || !dmapi_have_session()) {
+ return 0;
+ }
+
+ return dmapi_file_flags(path);
+}
+
+/****************************************************************************
Change a dos mode to a unix mode.
Base permission for files:
if creating file and inheriting
@@ -325,6 +351,10 @@ uint32 dos_mode(connection_struct *conn, const char *path,SMB_STRUCT_STAT *sbuf)
result |= dos_mode_from_sbuf(conn, path, sbuf);
}
+ if (S_ISREG(sbuf->st_mode)) {
+ result |= set_offline_flag(conn, path);
+ }
+
/* Optimization : Only call is_hidden_path if it's not already
hidden. */
if (!(result & aHIDDEN) && IS_HIDDEN_PATH(conn,path)) {