[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [platform-webdav-dev] plugin cannot handle folders without etag [patch]
|
thx for the info.
I appended 2 patches to make this plugin work for apache slide too:
the first patch: patchteam2 (apply to org.eclipse.team.webdav) contains
a patch for the not provided
etag bug. I am now using an etag concatenated from the "url + the last
modified timestamp of the resource".
In addition, the patchteam2 patch contains some fixes that allows one to
add a site without an empty password.
the second patch: patchdav (apply to org.eclipse.webdav) fixes the
problem that slide does return an 403 forbidden status code when trying
to mkcol on the root folder. To go around this I added a check that
allows forbidden status codes, if the target col exists & is a
collection (see the patchdav patch)
Would be nice if you could apply these patches ASAP.
Now that it works with slide & mod_dav & will go on to fix some more
bugs ;) Please tell me what you want to do next, so we don't duplicate
effords.
Alex
Index: src/org/eclipse/team/internal/webdav/core/Authenticator.java
===================================================================
RCS file: /home/eclipse/org.eclipse.team.webdav/src/org/eclipse/team/internal/webdav/core/Authenticator.java,v
retrieving revision 1.6
diff -u -r1.6 Authenticator.java
--- src/org/eclipse/team/internal/webdav/core/Authenticator.java 15 Mar 2004 16:02:02 -0000 1.6
+++ src/org/eclipse/team/internal/webdav/core/Authenticator.java 5 Apr 2004 21:50:41 -0000
@@ -110,7 +110,10 @@
}
}
- if (username.length() == 0 || password.length() == 0)
+ // without principal authentication cannot be performed
+ // without a credential authentication may be useless, but
+ // we should not depend on it here anyway!
+ if (username.length() == 0 /* || password.length()==0 */)
return null;
Hashtable info = new Hashtable(2);
Index: src/org/eclipse/team/internal/webdav/core/DavRemoteTargetResource.java
===================================================================
RCS file: /home/eclipse/org.eclipse.team.webdav/src/org/eclipse/team/internal/webdav/core/DavRemoteTargetResource.java,v
retrieving revision 1.22
diff -u -r1.22 DavRemoteTargetResource.java
--- src/org/eclipse/team/internal/webdav/core/DavRemoteTargetResource.java 25 Feb 2004 20:35:05 -0000 1.22
+++ src/org/eclipse/team/internal/webdav/core/DavRemoteTargetResource.java 5 Apr 2004 21:50:41 -0000
@@ -135,6 +135,10 @@
try {
PropertyStatus prop =
remoteResource.getProperty(WebDAVPropertyNames.DAV_GET_LAST_MODIFIED);
+
+ if(prop.getStatusCode() == IResponse.SC_NOT_FOUND)
+ throw new TeamException(ITeamStatusConstants.NO_REMOTE_RESOURCE_STATUS);
+
if (prop.getStatusCode() != IResponse.SC_OK)
throw new TeamException(ITeamStatusConstants.IO_FAILED_STATUS);
Element value = prop.getProperty();
Index: src/org/eclipse/team/internal/webdav/core/WebDavProvider.java
===================================================================
RCS file: /home/eclipse/org.eclipse.team.webdav/src/org/eclipse/team/internal/webdav/core/WebDavProvider.java,v
retrieving revision 1.22
diff -u -r1.22 WebDavProvider.java
--- src/org/eclipse/team/internal/webdav/core/WebDavProvider.java 10 Mar 2003 21:25:31 -0000 1.22
+++ src/org/eclipse/team/internal/webdav/core/WebDavProvider.java 5 Apr 2004 21:50:41 -0000
@@ -44,6 +44,8 @@
// Authentication.
String username = site.getUsername();
String password = site.getPassword();
+ if(password == null)
+ password = "";
if ((username != null) && (password != null))
httpClient.setAuthenticator(new Authenticator(username, password));
Index: src/org/eclipse/team/internal/webdav/subscriber/WebDavDeploymentProvider.java
===================================================================
RCS file: /home/eclipse/org.eclipse.team.webdav/src/org/eclipse/team/internal/webdav/subscriber/WebDavDeploymentProvider.java,v
retrieving revision 1.3
diff -u -r1.3 WebDavDeploymentProvider.java
--- src/org/eclipse/team/internal/webdav/subscriber/WebDavDeploymentProvider.java 3 Mar 2004 18:21:04 -0000 1.3
+++ src/org/eclipse/team/internal/webdav/subscriber/WebDavDeploymentProvider.java 5 Apr 2004 21:50:44 -0000
@@ -84,7 +84,12 @@
// Authentication.
String username = site.getUsername();
String password = site.getPassword();
- if ((username != null) && (password != null))
+
+ // make the password always at least empty
+ if (password == null)
+ password = "";
+
+ if (username != null && password!=null)
httpClient.setAuthenticator(new Authenticator(username, password));
// Proxy server.
Index: src/org/eclipse/team/internal/webdav/subscriber/WebDavSubscriberResource.java
===================================================================
RCS file: /home/eclipse/org.eclipse.team.webdav/src/org/eclipse/team/internal/webdav/subscriber/WebDavSubscriberResource.java,v
retrieving revision 1.4
diff -u -r1.4 WebDavSubscriberResource.java
--- src/org/eclipse/team/internal/webdav/subscriber/WebDavSubscriberResource.java 15 Mar 2004 16:02:02 -0000 1.4
+++ src/org/eclipse/team/internal/webdav/subscriber/WebDavSubscriberResource.java 5 Apr 2004 21:50:44 -0000
@@ -56,6 +56,19 @@
try {
PropertyStatus prop =
remote.getProperty(WebDAVPropertyNames.DAV_GET_E_TAG);
+
+ if (prop.getStatusCode() == IResponse.SC_NOT_FOUND) {
+ // some webdav implementors allow collection nodes to not contain
+ // an etag. In this case we assume that no version info is
+ // managed in that webdav server and so we make this
+ // resource either exist or not, by using a virtual etag of
+ // the uri. If the resource does not exit, we
+ // will go for the default catch rule below,
+ // throwing a TeamException
+ if(remote.exists())
+ return remote.getLocator().getResourceURL().toString().getBytes();
+ //return "".getBytes();
+ }
if (prop.getStatusCode() != IResponse.SC_OK)
throw new TeamException(ITeamStatusConstants.IO_FAILED_STATUS);
Element value = prop.getProperty();
Index: src/client/org/eclipse/webdav/client/CollectionHandle.java
===================================================================
RCS file: /home/eclipse/org.eclipse.webdav/src/client/org/eclipse/webdav/client/CollectionHandle.java,v
retrieving revision 1.10
diff -u -r1.10 CollectionHandle.java
--- src/client/org/eclipse/webdav/client/CollectionHandle.java 10 Mar 2003 21:56:11 -0000 1.10
+++ src/client/org/eclipse/webdav/client/CollectionHandle.java 5 Apr 2004 21:51:06 -0000
@@ -206,6 +206,13 @@
if (handle.isCollection())
return;
}
+
+ if (status == IResponse.SC_FORBIDDEN) {
+ // if this is a collection & exists return
+ if (handle.isCollection() && handle.exists())
+ return;
+ }
+
if (status == IResponse.SC_CONFLICT) {
// close the response and try to create the parents
closeResponse(response);