extern afs_int32 cryptall;
extern int cm_enableServerLocks;
+extern int cm_deleteReadOnly;
osi_log_t *afsd_logp;
afsi_log("EnableServerLocks: server requested");
break;
}
+
+ dummyLen = sizeof(DWORD);
+ code = RegQueryValueEx(parmKey, "DeleteReadOnly", NULL, NULL,
+ (BYTE *) &dwValue, &dummyLen);
+ if (code == ERROR_SUCCESS) {
+ cm_deleteReadOnly = (unsigned short) dwValue;
+ }
+ afsi_log("CM DeleteReadOnly is %u", cm_deleteReadOnly);
+
RegCloseKey (parmKey);
/* Call lanahelper to get Netbios name, lan adapter number and gateway flag */
#include "afsd.h"
+int cm_deleteReadOnly = 0;
+
/* called with scp write-locked, check to see if we have the ACL info we need
* and can get it w/o blocking for any locks.
*
/* check mode bits */
if (!(scp->unixModeBits & 0400))
*outRightsp &= ~PRSFS_READ;
- if (!(scp->unixModeBits & 0200))
- *outRightsp &= ~(PRSFS_WRITE|PRSFS_DELETE);
+ if (!(scp->unixModeBits & 0200) && !(rights == (PRSFS_WRITE | PRSFS_LOCK)))
+ *outRightsp &= ~PRSFS_WRITE;
+ if (!(scp->unixModeBits & 0200) && !cm_deleteReadOnly)
+ *outRightsp &= ~PRSFS_DELETE;
+
+ /* if the user can obtain a write-lock, read-locks are implied */
+ if (*outRightsp & PRSFS_WRITE)
+ *outRightsp |= PRSFS_LOCK;
code = 1;
/* fall through */
int vnode = ntohl(pfid->vnode);
char *lastDot;
int validExtension = 0;
- char tc, *temp, *name;
+ char tc, *temp;
+ const char *name;
/* Unparse the file's vnode number to get a "uniquifier" */
do {
long code;
rights = 0;
- if (openMode != 1) rights |= PRSFS_READ;
- if (openMode == 1 || openMode == 2 || trunc) rights |= PRSFS_WRITE;
+ if (openMode != 1)
+ rights |= PRSFS_READ;
+ if (openMode == 1 || openMode == 2 || trunc)
+ rights |= PRSFS_WRITE;
lock_ObtainMutex(&scp->mx);
if (lock_type == LockRead)
rights |= PRSFS_LOCK;
else if (lock_type == LockWrite)
- rights |= PRSFS_WRITE;
+ rights |= PRSFS_WRITE | PRSFS_LOCK;
else {
/* hmmkay */
osi_assert(FALSE);