89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * CDDL HEADER START
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * The contents of this file are subject to the terms of the
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * Common Development and Distribution License (the "License").
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * You may not use this file except in compliance with the License.
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * See the License for the specific language governing permissions
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * and limitations under the License.
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * When distributing Covered Code, include this CDDL HEADER in each
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * If applicable, add the following below this CDDL HEADER, with the
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * fields enclosed by brackets "[]" replaced with your own identifying
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * information: Portions Copyright [yyyy] [name of copyright owner]
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * CDDL HEADER END
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * Copyright 2015 Nexenta Systems, Inc. All rights reserved.
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * Volume Copy Shadow Services (VSS) provides a way for users to
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * For the server to support VSS for Microsoft clients, there is
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * two basic functions that need to be implemented.
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * The first is to intercept the NT_TRANSACT_IOCTL command with
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * the function code of FSCTL_SRV_ENUMERATE_SNAPSHOTS (0x00144064).
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * This is to report the count or the count and list of snapshots
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * for that share.
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * The second function need to trap commands with the
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * SMB_FLAGS2_REPARSE_PATH bit set in the smb header. This bit
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * means that there is a @GMT token in path that needs to be
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * processed. The @GMT token means to process this command, but
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * in the snapshot.
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States#include <smbsrv/smb_door.h>
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego/* Size of the token on the wire due to encoding */
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego#define SMB_VSS_GMT_NET_SIZE(sr) (smb_ascii_or_unicode_null_len(sr) * \
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statesstatic boolean_t smb_vss_is_gmttoken(const char *);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statesstatic const char *smb_vss_find_gmttoken(const char *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic uint32_t smb_vss_encode_gmttokens(smb_request_t *, smb_fsctl_t *,
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States int32_t, smb_gmttoken_response_t *);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statesstatic void smb_vss_remove_first_token_from_path(char *);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
8622ec4569457733001d4982ef7f5b44427069beGordon Rossstatic uint32_t smb_vss_get_count(smb_tree_t *, char *);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rossstatic void smb_vss_map_gmttoken(smb_tree_t *, char *, char *, time_t, char *);
8622ec4569457733001d4982ef7f5b44427069beGordon Rossstatic void smb_vss_get_snapshots(smb_tree_t *, char *,
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statesstatic void smb_vss_get_snapshots_free(smb_gmttoken_response_t *);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wrightstatic int smb_vss_lookup_node(smb_request_t *sr, smb_node_t *, vnode_t *,
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * This is to respond to the nt_transact_ioctl to either respond with the
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * number of snapshots, or to respond with the list. It needs to be sorted
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * before the reply. If the the max data bytes to return is
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * SMB_VSS_COUNT_SIZE, then all that is requested is the count, otherwise
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * return the count and the list of @GMT tokens (one token for each
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * snapshot).
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb_vss_enum_snapshots(smb_request_t *sr, smb_fsctl_t *fsctl)
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States smb_node_t *tnode;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States ASSERT(sr->tid_tree);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States ASSERT(sr->tid_tree->t_snode);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States tnode = sr->tid_tree->t_snode;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States if (smb_node_getmntpath(tnode, root_path, MAXPATHLEN) != 0)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross if (fsctl->MaxOutputResp == SMB_VSS_COUNT_SIZE) {
8622ec4569457733001d4982ef7f5b44427069beGordon Ross count = smb_vss_get_count(sr->tid_tree, root_path);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross if (smb_mbc_encodef(fsctl->out_mbc, "lllw", count, 0,
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross count = fsctl->MaxOutputResp / SMB_VSS_GMT_NET_SIZE(sr);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross status = smb_vss_encode_gmttokens(sr, fsctl, count, &snaps);
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * sr - the request info, used to find root of dataset,
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * unicode or ascii, where the share is rooted in the
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * root_node - root of the share
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * cur_node - where in the share for the command
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * buf - is the path for the command to be processed
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * returned without @GMT if processed
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * vss_cur_node - returned value for the snapshot version
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * of the cur_node
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * vss_root_node - returned value for the snapshot version
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * of the root_node
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * This routine is the processing for handling the
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * SMB_FLAGS2_REPARSE_PATH bit being set in the smb header.
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * By using the cur_node passed in, a new node is found or
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * created that is the same place in the directory tree, but
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * in the snapshot. We also use root_node to do the same for
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * Once the new smb node is found, the path is modified by
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego * removing the @GMT token from the path in the buf.
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borregosmb_vss_lookup_nodes(smb_request_t *sr, smb_node_t *root_node,
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego smb_node_t *cur_node, char *buf, smb_node_t **vss_cur_node,
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross smb1 = (sr->session->dialect < SMB_VERS_2_BASE);
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross const char *p;
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross /* get gmttoken from buf */
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross /* SMB2 and later */
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright err = smb_node_getmntpath(tnode, path, MAXPATHLEN);
6e3e9d9c7ec812d402e1c911922ec43d4047dec8afshin salek ardakani - Sun Microsystems - Irvine United States if (err != 0)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * Find the corresponding snapshot name. If snapname is
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * empty after the map call, no such snapshot was found.
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross smb_vss_map_gmttoken(sr->tid_tree, path, gmttoken, toktime,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright /* find snapshot nodes */
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright /* find snapshot node corresponding to root_node */
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright err = smb_vss_lookup_node(sr, root_node, fsrootvp,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright /* find snapshot node corresponding to cur_node */
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright err = smb_vss_lookup_node(sr, cur_node, fsrootvp,
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * Find snapshot node corresponding to 'node', and return it in
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * 'vss_node', as follows:
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * - find the path from fsrootvp to node, appending it to the
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * the snapshot path
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright * - lookup the vnode and smb_node (vss_node).
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wrightsmb_vss_lookup_node(smb_request_t *sr, smb_node_t *node, vnode_t *fsrootvp,
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross char *snapname, smb_node_t *dnode, smb_node_t **vss_node)
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright (void) snprintf(path, MAXPATHLEN, ".zfs/snapshot/%s/", snapname);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright err = smb_node_getpath(node, fsrootvp, p, MAXPATHLEN - len);
148c5f43199ca0b43fc8e3b643aab11cd66ea327Alan Wright vp = smb_lookuppathvptovp(sr, path, fsrootvp, fsrootvp);
8622ec4569457733001d4982ef7f5b44427069beGordon Ross *vss_node = smb_node_lookup(sr, NULL, zone_kcred(),
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego char *t = "@GMT-NNNN.NN.NN-NN.NN.NN";
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego /* Make sure it is JUST the @GMT token */
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borregostatic const char *
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego const char *p;
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego while (*p) {
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Rosssmb_vss_encode_gmttokens(smb_request_t *sr, smb_fsctl_t *fsctl,
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States int32_t count, smb_gmttoken_response_t *snap_data)
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States returned_count = snap_data->gtr_count;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States num_gmttokens = snap_data->gtr_gmttokens.gtr_gmttokens_len;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States gmttokens = snap_data->gtr_gmttokens.gtr_gmttokens_val;
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego data_size = returned_count * SMB_VSS_GMT_NET_SIZE(sr) +
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross if (smb_mbc_encodef(fsctl->out_mbc, "lll", returned_count,
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego for (i = 0; i < num_gmttokens; i++) {
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borrego/* This removes the first @GMT from the path */
89dc44ce9705974a8bc4a39f1e878a0491a5be61jose borregosmb_vss_remove_first_token_from_path(char *path)
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States/*
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States * This returns the number of snapshots for the dataset
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States * of the path provided.
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States */
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statesstatic uint32_t
8622ec4569457733001d4982ef7f5b44427069beGordon Rosssmb_vss_get_count(smb_tree_t *tree, char *resource_path)
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States{
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States uint32_t count = 0;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States int rc;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States smb_string_t path;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States path.buf = resource_path;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
8622ec4569457733001d4982ef7f5b44427069beGordon Ross rc = smb_kdoor_upcall(tree->t_server, SMB_DR_VSS_GET_COUNT,
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States &path, smb_string_xdr, &count, xdr_uint32_t);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States if (rc != 0)
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States count = 0;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States return (count);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States}
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States/*
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States * This takes a path for the root of the dataset and gets the counts of
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States * snapshots for that dataset and the list of @GMT tokens (one for each
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States * snapshot) up to the count provided.
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States *
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States * Call smb_vss_get_snapshots_free after to free up the data.
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States */
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statesstatic void
8622ec4569457733001d4982ef7f5b44427069beGordon Rosssmb_vss_get_snapshots(smb_tree_t *tree, char *resource_path,
8622ec4569457733001d4982ef7f5b44427069beGordon Ross uint32_t count, smb_gmttoken_response_t *gmttokens)
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States{
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States smb_gmttoken_query_t request;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States request.gtq_count = count;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States request.gtq_path = resource_path;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States bzero(gmttokens, sizeof (smb_gmttoken_response_t));
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
8622ec4569457733001d4982ef7f5b44427069beGordon Ross (void) smb_kdoor_upcall(tree->t_server, SMB_DR_VSS_GET_SNAPSHOTS,
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States &request, smb_gmttoken_query_xdr,
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States gmttokens, smb_gmttoken_response_xdr);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States}
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statesstatic void
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statessmb_vss_get_snapshots_free(smb_gmttoken_response_t *reply)
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States{
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States xdr_free(smb_gmttoken_response_xdr, (char *)reply);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States}
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States/*
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States * Returns the snapshot name for the @GMT token provided for the dataset
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States * of the path. If the snapshot cannot be found, a string with a NULL
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States * is returned.
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States */
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statesstatic void
8622ec4569457733001d4982ef7f5b44427069beGordon Rosssmb_vss_map_gmttoken(smb_tree_t *tree, char *path, char *gmttoken,
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States{
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States smb_gmttoken_snapname_t request;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States smb_string_t result;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States bzero(&result, sizeof (smb_string_t));
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States result.buf = snapname;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States request.gts_path = path;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States request.gts_gmttoken = gmttoken;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
8622ec4569457733001d4982ef7f5b44427069beGordon Ross (void) smb_kdoor_upcall(tree->t_server, SMB_DR_VSS_MAP_GMTTOKEN,
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States &request, smb_gmttoken_snapname_xdr,
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States &result, smb_string_xdr);