usr/src/cmd/samba/Patches/vfs_samfs.c.diff
author Cyril Plisko <cyril.plisko@grigale.com>
Sat, 21 Aug 2010 11:47:07 -0700
changeset 42 b6f829cb6d9e
permissions -rw-r--r--
Import sfw build 147 Bugs Fixed ---------- 4876883 TrueTime Clock driver support in xntpd fails in year 2032 6641606 Samba 3.0.x should support StartTLS or LDAPS for LDAP access. 6647164 net ads keytab add host fails to create keytab entry 6688158 winbindd: Exceeding 200 client connections, no idle connection found (Bugzilla Bug 3204) 6706912 SWAT component of Samba should be a separate package. 6725643 SUNWsmbar seems to include unused i.services 6749477 Samba source code software should include libsunwrap.a file 6770655 Samba: Bugzilla 5655 "Mac OS X 10.5.4 clients fail to authenticate with Kerberos credententials" 6785625 samba module nss_winbind.so.1 is required as 64 bit version 6852659 Update samba to 3.3.5 or later 6891889 Write keytab to file method is missing in krb5_keytab 6892860 Samba needs Directory Server 6 C-SDK 6949937 BIND validating resolver searches very aggressively for a match for its trust anchor. 6951320 NTP Bug320: restrict default ignore not working with ipv6 6952924 dig(1M) and nslookup(1M) crash in libisc:isc_socket_detach() 6954726 Update samba to 3.5.4 6955224 BIND named dns_db_getnsec3parameters() fails to assert dns_db_iszone(db) == ISC_TRUE 6969855 If autokey is set up with two copies of the same key, ntpd segfaults. 6969858 Missing refclock causes ntpd to exit without logging a reason. 6969878 Upgrade NTP to version ntp-dev 4.2.5p200 6971713 BIND 9.6.1 Makefile.sfw issues 6975270 libtspi does not link with correct _init and _fini sections
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
42
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
     1
--- source3/modules/vfs_samfs.c	2010-07-07 10:22:33.756895700 -0700
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
     2
+++ source3/modules/vfs_samfs.c	2010-07-07 07:13:55.603441200 -0700
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
     3
@@ -0,0 +1,172 @@
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
     4
+/*
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
     5
+ * Support for offline files with Sun SAM-QFS
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
     6
+ *
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
     7
+ * Copyright (C) Dirk Nitschke, 2009
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
     8
+ *
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
     9
+ * Modified by Jiri Sasek, 2010
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    10
+ * To conform the samba-vfs api
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    11
+ *
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    12
+ * This program is free software; you can redistribute it and/or modify
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    13
+ * it under the terms of the GNU General Public License as published by
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    14
+ * the Free Software Foundation; either version 3 of the License, or
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    15
+ * (at your option) any later version.
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    16
+ *
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    17
+ * This program is distributed in the hope that it will be useful,
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    18
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    19
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    20
+ * GNU General Public License for more details.
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    21
+ *
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    22
+ * You should have received a copy of the GNU General Public License
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    23
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    24
+ *
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    25
+ */
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    26
+
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    27
+#include "includes.h"
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    28
+/*
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    29
+ * Include files for Sun SAM-QFS
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    30
+ *
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    31
+ */
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    32
+#include "sam-stat.h"
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    33
+#include "sam-lib.h"
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    34
+
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    35
+#undef DBGC_CLASS
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    36
+#define DBGC_CLASS DBGC_VFS
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    37
+
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    38
+#define SAMFS_MODULE_NAME "samfs"
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    39
+
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    40
+NTSTATUS vfs_samfs_init(void);
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    41
+
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    42
+/*
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    43
+ * samfs_is_offline()
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    44
+ * check if the local file is offline in the sense of SAM-QFS
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    45
+ *
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    46
+ * A segmented file is offline if the file's index inode is
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    47
+ * offline or at least one of it's segments is offline.
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    48
+ *
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    49
+ * See sam_stat(3) and sam_segment_stat(3) for details.
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    50
+ *
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    51
+ * If something goes wrong we assume that the file is offline.
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    52
+ */
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    53
+static bool samfs_is_offline(struct vfs_handle_struct *handle, const char *path, SMB_STRUCT_STAT *sbuf)
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    54
+{
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    55
+	struct sam_stat file_info;
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    56
+	struct sam_stat *seg_info_ptr;
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    57
+	bool offline;
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    58
+	int number_of_segments;
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    59
+	int result;
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    60
+	int i;
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    61
+
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    62
+	offline = false;
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    63
+	if (ISDOT(path) || ISDOTDOT(path)) {
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    64
+		return false;
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    65
+	}
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    66
+
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    67
+	/*
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    68
+	 * Initialize file_info to be all zero bits
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    69
+	 */
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    70
+	memset((void *)&file_info, 0, sizeof(struct sam_stat));
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    71
+
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    72
+	/*
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    73
+	 * Stat the file using the regular sam_stat function
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    74
+	 */
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    75
+	result = sam_stat(path, &file_info, sizeof(struct sam_stat));
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    76
+
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    77
+	if (result != 0) {
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    78
+		DEBUG(10,("samfs_is_offline: cannot sam_stat %s, %s\nAssuming file is offline.\n", \
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    79
+				path, strerror(errno)));
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    80
+		return true;
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    81
+	}
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    82
+
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    83
+	/*
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    84
+	 * Check if file is offline
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    85
+	 */
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    86
+	if (SS_ISOFFLINE(file_info.attr)) {
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    87
+		DEBUG(10,("samfs_is_offline: file %s is offline.\n", path));
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    88
+		return true;
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    89
+	}
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    90
+
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    91
+	/*
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    92
+	 * Check for segmented file
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    93
+	 */
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    94
+	if (SS_ISSEGMENT_F(file_info.attr)) {
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    95
+		number_of_segments = NUM_SEGS(&file_info);
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    96
+		seg_info_ptr = (struct sam_stat *)malloc(number_of_segments *
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    97
+						sizeof(struct sam_stat));
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    98
+		if (seg_info_ptr != NULL) {
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
    99
+			/*
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   100
+			 * Initialize seg_info_ptr to be all zero bits
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   101
+			 */
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   102
+			memset((void *)seg_info_ptr, 0, number_of_segments *
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   103
+					sizeof(struct sam_stat));
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   104
+			/*
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   105
+			 * Stat all segments
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   106
+			 */
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   107
+			result = sam_segment_stat(path, seg_info_ptr,
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   108
+					number_of_segments * sizeof(struct sam_stat));
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   109
+			if (result != 0) {
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   110
+				DEBUG(10,("samfs_is_offline: cannot sam_segment_stat %s, %s\nAssuming file is offline.\n", \
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   111
+						path, strerror(errno)));
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   112
+				offline = true;
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   113
+			}
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   114
+			/*
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   115
+			 * Loop over segments until we have checked all segments
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   116
+			 * or found one which is offline.
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   117
+			 */
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   118
+			i = 0;
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   119
+			while (!offline && (i < number_of_segments)) {
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   120
+				if (SS_ISOFFLINE(seg_info_ptr[i].attr)) {
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   121
+					DEBUG(10,("samfs_is_offline: file %s has offline segment %d\n", \
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   122
+							path, i+1));
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   123
+					offline = true;
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   124
+				}
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   125
+				i++;
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   126
+			}
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   127
+			SAFE_FREE(seg_info_ptr);
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   128
+		} else {
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   129
+			DEBUG(10,("samfs_is_offline: cannot malloc for segment stat info %s\nAssuming file is offline.\n", \
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   130
+					path));
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   131
+			offline = true;
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   132
+                }
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   133
+	
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   134
+	}
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   135
+	return offline;
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   136
+}
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   137
+
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   138
+/*
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   139
+ * release a file-command to SAM-stagger
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   140
+ */
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   141
+extern int sam_release(const char *path, const char *command);
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   142
+
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   143
+/*
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   144
+ * samfs_set_offline()
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   145
+ *
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   146
+ * Release the local file in the sense of SAM-QFS.
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   147
+ * See sam_release(3) for details.
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   148
+ *
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   149
+ */
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   150
+static int samfs_set_offline(struct vfs_handle_struct *handle, const char *path)
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   151
+{
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   152
+	int result;
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   153
+
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   154
+	result = sam_release(path, "i");
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   155
+	if (result != 0) {
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   156
+		DEBUG(10,("samfs_set_offline: sam_release %s returned %s\n", \
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   157
+				path, strerror(errno)));
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   158
+		return -1;
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   159
+	}
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   160
+	return 0;
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   161
+}
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   162
+
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   163
+/* VFS operations structure */
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   164
+
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   165
+static struct vfs_fn_pointers samfs_fns = {
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   166
+	.is_offline = samfs_is_offline,
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   167
+	.set_offline = samfs_set_offline
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   168
+};
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   169
+
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   170
+NTSTATUS vfs_samfs_init(void);
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   171
+NTSTATUS vfs_samfs_init(void)
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   172
+{
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   173
+	return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, SAMFS_MODULE_NAME,
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   174
+				&samfs_fns);
b6f829cb6d9e Import sfw build 147
Cyril Plisko <cyril.plisko@grigale.com>
parents:
diff changeset
   175
+}