I am working on several issues that prevent me from using the subversion
client (either on Windows or Linux) on a VMS Samba ODS-5 fileshare. I
have two patches and one workaround so far*, but require more assistance
to solve this one.
Samba's [.vms]utime.c seems to use the same ACP interface that Perl's
vms.c does (apparently both derived from the old file.c utility). Can
we just use CRTL utime for 7.3 and later as proposed for VMS Perl?
Also, I didn't see any response in that thread to Craig's suggestion
that they enable DECC$EFS_FILE_TIMESTAMPS by default, and don't
understand the ramifications if we were to do that, too.
Can anyone help? John, I'd be particularly interested in your
insights. A patch, of course, would be ideal, or at least enough info
so that I can make a robust patch of my own.
30-MAY-06, PM&CS&DV&BG&RR, 12=18489=DYADS, Pr:3.0, CSM_C:Samba
Subversion client support
...
- TC5:
- Some files still cannot be renamed due to an "Input/output error"
$ cd /dymc/t
$ svn co svn://ntts/RubyDyLib/trunk RubyDyLib
svn: In directory 'RubyDyLib'
svn: Can't copy 'RubyDyLib/.svn/tmp/text-base/stub.rb.svn-base' to
'RubyDyLib/stub.rb.tmp': Input/output error
- Close examination of the logs showed that Samba is failing to set
the access times on the file. This bug only affects filenames with
an extra dot in them, e.g.
[EMAIL PROTECTED]:/dymc/t/dymax/bg$ touch temp.tmp.tmp
touch: setting times of `temp.tmp.tmp': Permission denied
- The problem seems to be that the [.vms]utime.c module in Samba
has issues with ODS-5 filenames. This thread on the vmsperl@perl.org
mailing list last month may be relevant:
- http://www.mail-archive.com/vmsperl@perl.org/msg07714.html
- John Malmberg>
vms/vms.c - If DECC$_EFS_CHARSET enabled, use built in
utime() function
instead of emulation
- http://www.mail-archive.com/vmsperl@perl.org/msg07748.html
- Craig Berry>
I've committed #27706, which uses the CRTL utime() for 7.3
and later, but the existing ACP interface code for anything
previous. The presence of utime.h does not help, as it
became available before the utime() function did. It looks
to me like the CRTL utime() does the same thing the old code
does on ODS-2 or ODS-5 without access dates. On ODS-5 with
access dates enabled, we'll get the same behavior any other C
program calling utime() will get. I think we may want to
enable DECC$EFS_FILE_TIMESTAMPS by default in Perl, though
that remains to be tested and checked for consistency with
our stat() implementation.
Ben
* Here are the issues to date & patches:
- TC2:
- VMS Samba ODS-5 support issue #1: files in directories
which begin with a dot (the hidden ".svn" directory on
Unix systems) are not visible.
- This is not expected semantics: only the directory itself
should be considered invisible, not the files within the
directory.
- JYC ([EMAIL PROTECTED], VMS Samba maintainer)
provided a patch for this issue 24-May-2006
- The following patch was applied to the source in
DSA1:[DYMAX.MISC.SAMBA.SAMBA-2_2_8-SRC.VMS]VMS_SUPPORT.C
as directed by JYC and rebuilt:
- The fix is quite easy. You just have to make a small change
in the VMS_SUPPORT.C file. Namely, replace the following
lines:
tmp = strstr(wrkfil,"/.");
if (tmp != 0)
*tmp = 0;
by:
if (strcmp(&wrkfil[strlen(wrkfil) - 2], "/.") == 0)
wrkfil[strlen(wrkfil) - 2] = 0;
- Then, as usual, you just have to execute
$ @[.VMS]compile73 nodeb VMS_SUPPORT
$ @[.VMS]link73 nodeb SMBD
$ COPY [.BIN]SMBD.EXE samba_root:[bin]
- As of 30-May-2006, we have confirmed this patch works
on the DYMC test system, but are still working out
additional issues before we deploy the patch on DYMA.
- TC3:
- Read-only files can't be deleted (not specific to ODS-5).
- Here is an excerpt from BG's email to JYC on 29-May-2006
about the issue, describing the problem and our workaround.
- I have found that Samba removes "D" permission (unique to VMS)
when subversion tries to chmod a file to make it read-only
(i.e. removing "W"). This leads to not normal Unix (or Windows
for that matter) file semantics: if you make a file read-only,
you cannot delete it. So non-VMS apps operating on the VMS
samba share break when they try to remove read-only files.
- On non-VMS platforms, whether a file can be deleted or not
depends solely upon whether or not the *directory* in which the
file exists is deletable. I propose, therefore, that VMS Samba
be modified to leave the "D" bit alone, even when "W"
permission is removed from the file. Does that sound
reasonable to you?
- My workaround is to put a DEFAULT ACL on the parent directory
to grant "D" permission to myself. It is grubby, but it gets
subversion working for me until Samba is fixed. Would you
please look into this, perhaps implementing my suggestion
above?
- TC4:
- ODS-5 issue #2: extensionless files do not rename correctly
when they exist within directories containing dots in them.
- Here is an excerpt from BG's email to JYC on 29-May-2006
about the issue, describing the problem and our patch for
it:
- I found I needed this patch:
--- vms_support_jyc_1.c 2006-05-29 13:06:04.000000000 -0300
+++ vms_support.c 2006-05-29 13:12:54.000000000 -0300
@@ -1155,9 +1155,11 @@
buf1 = malloc(strlen(buf2)+10);
pstrcpy(buf1,buf2);
buf2 = vms_encode_filespec(newname,FALSE);
- if (strchr (buf1+1,'.') == 0)
+ tmp = strrchr(buf1,'/');
+ if (strchr (tmp+1,'.') == 0)
pstrcat (buf1,".");
- if (strchr (buf2+1,'.') == 0)
+ tmp = strrchr(buf2,'/');
+ if (strchr (tmp+1,'.') == 0)
pstrcat (buf2,".");
DEBUG(3,("vms_rename: VMS: %s -> %s\n",buf1, buf2));
sts = rename(buf1, buf2);
-
- Without this patch, if you try to rename a file from, e.g.
".hidden/temp.tmp" -> ".hidden/temp" the rename will appear to
succeed (i.e. it will not return an error) but the filename
won't change because vms_rename() doesn't append the necessary
trailing period, so the ".tmp" extension from the source
filename is defaulted for the target filename.
- Please apply this patch along with yours for the next release.
PLEASE READ THIS IMPORTANT ETIQUETTE MESSAGE BEFORE POSTING:
http://www.catb.org/~esr/faqs/smart-questions.html