windows-afs-execute-only-20080309
[openafs.git] / src / WINNT / afsd / cm_vnodeops.h
index 7824a3d..61105a5 100644 (file)
@@ -14,6 +14,8 @@ extern unsigned int cm_mountRootGen;
 
 extern int cm_enableServerLocks;
 
+extern int cm_followBackupPath;
+
 /* parms for attribute setting call */
 typedef struct cm_attr {
        int mask;
@@ -45,6 +47,17 @@ typedef struct cm_lookupSearch {
 typedef int (*cm_DirFuncp_t)(struct cm_scache *, struct cm_dirEntry *, void *,
        osi_hyper_t *entryOffsetp);
 
+/* Special path syntax for direct references to volumes
+
+   The syntax: @vol:<cellname>{%,#}<volume> can be used to refer to a
+   specific volume in a specific cell, where:
+
+   <cellname> : name of the cell
+   <volume>   : volume name or ID
+ */
+#define CM_PREFIX_VOL "@vol:"
+#define CM_PREFIX_VOL_CCH 5
+
 /* arrays */
 
 extern unsigned char cm_foldUpper[];
@@ -62,8 +75,17 @@ extern int cm_stricmp(const char *, const char *);
 extern void cm_Gen8Dot3Name(struct cm_dirEntry *dep, char *shortName,
        char **shortNameEndp);
 
+#define cm_Gen8Dot3Name(dep,shortName,shortNameEndp) \
+cm_Gen8Dot3NameInt((dep)->name, &(dep)->fid, shortName, shortNameEndp)
+
+extern void cm_Gen8Dot3NameInt(const char * longname, cm_dirFid_t * pfid,
+                               char *shortName, char **shortNameEndp);
+
 extern long cm_ReadMountPoint(cm_scache_t *scp, cm_user_t *userp,
-       cm_req_t *reqp);
+                              cm_req_t *reqp);
+
+extern long cm_EvaluateVolumeReference(char * namep, long flags, cm_user_t * userp,
+                                       cm_req_t *reqp, cm_scache_t ** outpScpp);
 
 #ifdef DEBUG_REFCOUNT
 extern long cm_NameIDbg(cm_scache_t *rootSCachep, char *pathp, long flags,
@@ -148,6 +170,7 @@ extern long cm_CheckOpen(cm_scache_t *scp, int openMode, int trunc,
 #define AFS_ACCESS_READ (FILE_GENERIC_READ & ~SYNCHRONIZE)
 #define AFS_ACCESS_WRITE ((FILE_GENERIC_WRITE & ~(READ_CONTROL | SYNCHRONIZE)) \
                                & ~FILE_WRITE_ATTRIBUTES)
+#define AFS_ACCESS_EXECUTE (FILE_GENERIC_EXECUTE & ~SYNCHRONIZE)
 
 typedef struct cm_lock_data {
     cm_key_t key;
@@ -167,6 +190,10 @@ extern long cm_CheckNTDelete(cm_scache_t *dscp, cm_scache_t *scp,
 extern long cm_EvaluateSymLink(cm_scache_t *dscp, cm_scache_t *linkScp,
        cm_scache_t **outScpp, cm_user_t *userp, cm_req_t *reqp);
 
+extern long cm_FollowMountPoint(cm_scache_t *scp, cm_scache_t *dscp, cm_user_t *userp,
+                                cm_req_t *reqp, cm_scache_t **outScpp);
+
+
 extern long cm_Lock(cm_scache_t *scp, unsigned char sLockType,
         LARGE_INTEGER LOffset, LARGE_INTEGER LLength, cm_key_t key,
        int allowWait, cm_user_t *userp, cm_req_t *reqp,
@@ -198,6 +225,8 @@ extern void cm_CheckLocks(void);
 
 extern void cm_ReleaseAllLocks(void);
 
+extern void cm_LockMarkSCacheLost(cm_scache_t * scp);
+
 extern long cm_RetryLock(cm_file_lock_t *oldFileLock, int client_is_dead);
 
 #define CM_SESSION_SMB      0xffff