Bug 41097 - [Connection] Support for SSPI & gserver CVSNT protocols
Summary: [Connection] Support for SSPI & gserver CVSNT protocols
Status: RESOLVED WONTFIX
Alias: None
Product: Platform
Classification: Eclipse Project
Component: CVS (show other bugs)
Version: 3.4   Edit
Hardware: All All
: P3 enhancement with 11 votes (vote)
Target Milestone: ---   Edit
Assignee: platform-cvs-inbox CLA
QA Contact:
URL:
Whiteboard: hasPatch
Keywords: faq
: 37414 51120 184114 (view as bug list)
Depends on:
Blocks:
 
Reported: 2003-08-04 09:49 EDT by Jon Rabone CLA
Modified: 2019-09-25 14:27 EDT (History)
21 users (show)

See Also:


Attachments
Modified version of Jacob Barret. It now compiles in VC++6 and does not require VC++ 7 (86.71 KB, application/octet-stream)
2004-09-22 15:20 EDT, ian CLA
no flags Details
100% Java plugin that allows GSSAPI access via GServer for any OS with Java 1.4 (18.07 KB, application/octet-stream)
2006-02-05 20:05 EST, Alex Blewitt CLA
no flags Details
SSPIConnectionMethod class (849 bytes, application/octet-stream)
2008-06-07 18:31 EDT, Jene Jasper CLA
no flags Details
plugin.xml SSPIConnectionMethod extension (972 bytes, patch)
2008-06-07 18:35 EDT, Jene Jasper CLA
no flags Details | Diff
CVSRepositoryLocation promptForUserInfo when the sspi password is null (1.25 KB, patch)
2008-06-07 18:38 EDT, Jene Jasper CLA
no flags Details | Diff
SSPIConnectionMethod implementation (1.40 KB, patch)
2008-06-07 18:43 EDT, Jene Jasper CLA
no flags Details | Diff
Single patch file for SSPI support (3.46 KB, patch)
2008-06-14 09:45 EDT, Jene Jasper CLA
no flags Details | Diff
Patched CVS plug-in jar based on R3_3_maintenance (542.47 KB, application/octet-stream)
2008-06-14 10:20 EDT, Jene Jasper CLA
no flags Details
Single patch file for SSPI support and EXT support connect problem (4.86 KB, patch)
2008-06-15 09:46 EDT, Jene Jasper CLA
no flags Details | Diff
Patched CVS plug-in jar based on R3_3_maintenance (542.66 KB, application/x-jar)
2008-06-15 09:50 EDT, Jene Jasper CLA
no flags Details
Single patch file for SSPI support and EXT support connect problem (6.43 KB, patch)
2009-06-03 18:33 EDT, Jene Jasper CLA
no flags Details | Diff
GSS example client (6.10 KB, text/x-java)
2010-08-06 10:05 EDT, Severin Gehwolf CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Jon Rabone CLA 2003-08-04 09:49:11 EDT
Please can support for SSPI (Windows-specific) and gserver (UNIX + Kerberos 
equivalent) protocols be added, to facilitate integration with CVSNT? NetBeans 
handles this by allowing the user to specify a different CVS binary and talking 
to that, rather than using the built-in CVS client; maybe this is easier.

Jon.
Comment 1 Michael Valenta CLA 2004-01-13 11:25:03 EST
From mailing list posting by Rolf Wilms.....

There is an implementation of the sserver protocol for both CVS and CVSNT 
available here:

http://home.arcor.de/rolf_wilms/cvsssl/cvsssl_help.html

Like sspi, sserver supports encrypted connections but uses SSL rather than 
sspi. The benefit is that it also works with non-Windows clients. The 
drawback is that it does not support single sign-on. Please note that the 
current implementation of that plugin does not work with M6. M5 has been 
reported to work.

Regards,
Rolf
Comment 2 Michael Valenta CLA 2004-02-04 09:56:12 EST
*** Bug 51120 has been marked as a duplicate of this bug. ***
Comment 3 Jean-Michel Lemieux CLA 2004-03-22 10:45:31 EST
I got bored and frustrated enough one day to write a SSPI plug-in for Eclipse 
CVS.  The company I work for decide to use CVSNT with SSPI authentication, 
and are still having meetings on whether or not to enable PServer so that 
non-windows clients and IDEs that don't support SSPI can use the archive.  
Anyway, to make a long story short, here is the source.  I don't want to 
maintain it so I am giving it up to the masses.  It uses code from the CVSNT 
code base so it has to be GPL (I know, I don't like GPL either).  It wouldn't 
be too hard to re-write the whole thing from scratch to lose the GPL virus, I 
just don't have time.

http://www.pogozone.net/projects/sspi-plugin-source.zip

-- 
Jacob S. Barrett
jbarrett@amduat.net
www.amduat.net
Comment 4 ian CLA 2004-04-16 16:22:15 EDT
has anyone successfully compiled the sample code from Jacob Barrett under vc++ 
6? 
Comment 5 ian CLA 2004-09-22 15:20:18 EDT
Created attachment 14718 [details]
Modified version of Jacob Barret. It now compiles in VC++6 and does not require VC++ 7 

This is modified copy of Sspi plugin from 
Jacob S. Barrett
jbarrett@amduat.net
www.amduat.net
found at http://www.pogozone.net/projects/sspi-plugin-source.zip
This version will compile under VC++6.	More details are in the readme.txt
inside the zip file.
Comment 6 Joelle Tegwen CLA 2005-09-07 17:03:57 EDT
The last plug in did not work for me at all. However, this
http://www.cvsnt.org/pipermail/cvsnt/2005-September/020966.html post to the
CVSNT list was extremely helpful to me. I encountered a few problems, but did
figure them out and I posted them as a reply to the above message.

I hope this helps other people.
Joelle
Comment 7 Alex Blewitt CLA 2006-02-05 20:05:17 EST
Created attachment 34168 [details]
100% Java plugin that allows GSSAPI access via GServer for any OS with Java 1.4

I've written a fragment to the existng 3.1 CVS server that uses GSSAPI to authenticate against the remote CVS server using the :gserver: protocol. This should be adaptable to any GSSAPI protocol, but at present, it assumes the use of kerberos to perform the authentication.

This has been tested on Mac OS X 10.4 as client, and 10.4 Server as the server. I'll report as I find out it works on other combinations.

You need to ensure that you run 'kinit' to obtain a Kerberos Ticket Granting Ticket (TGT) before you try to run the CVS :gserver: operations. Otherwise, it hangs (actually, it's asking for your userid/password from the console, but that doesn't work for obvious reasons).

This will only work on systems that meet:
Eclipse 3.1
Kerberos V5 KDC already configured for the OS you're using
Java 1.4

There's a README.TXT file in the plugin (which can be dropped straight in; it also contains the source as well if you want to investigate/extend/play around with it

I plan to make updates to this to make it production ready; at present, it's alpha stage. That is, I've checked stuff in and out with it already, but it's not as foolproof as it could be.

Note that there are some setup required on the KDC:
cvs/my.host.name needs to be created as a principal (and exported to the keytab where the CVS server can find it)
There may be some encryption methods needed to be set up on the server (documented in README.TXT)

In short, don't try this unless you already have a working CVS server that supports :gserver:, and you're able to run a cvs -d :gserver:some.host.name/some/root/name checkout someproject. 

Please Cc feedback/reports to this bug, or to my mail address. I'll improve this and put a new version up at a later stage. Given that it's only really 2 files, I don't see an issue in uploading the plugin that you can just drop into the plugins directory, but if anyone objects I'll stop doing that.

Alex.
Comment 8 Alex Blewitt CLA 2006-02-05 20:08:24 EST
I've created a new attachment which has a plugin for :gserver: support. It's written in pure Java, and uses libraries in Java 1.4 to perform authentication against system credentials. There's a readme file (and source) in the plugin itself, but you should just be able to drop it into a plugins/ directory to get it to work.

Note that you must run kinit to obtain credentials first; it ignores whatever userid/password you put in. 

This has only been tested on Mac OS X, so I'd be interested if anyone can get it to work on other systems. There are some known issues in the README.TXT file in the jar with some debugging steps if it doesn't work. Please leave feedback on this bug and I'll pick it up and try to improve the next version.

Hopefully if it works well enough and I can tidy it up, it can be adopted in the 3.2 stream; there's some refactoring that could be done with the existing PServer classes, and I'm happy to volunteer to do that; but I want to ensure that we iron out all the bugs before doing the refactoring step :-)

Alex.
Comment 9 Thomas Singer CLA 2006-02-11 03:49:03 EST
Do you think it is possible to write the sspi authentication in pure Java?
Comment 10 Alex Blewitt CLA 2006-02-11 03:57:46 EST
The plugin that I've written (in 2006) is pure Java, if you're asking me. The plugin of 2004 isn't.

If you're asking whether it could be re-implmented to do the authentication outside of the JAAS/GSSAPI framework built in to Java, I don't see why not, but I don't see the point either.
Comment 11 Thomas Singer CLA 2006-02-11 04:07:50 EST
Alex, I was asking for sspi authentication, not gserver. Or could gserver be used also on Windows as a sspi alternative? Sorry, I'm not that familiar with these OS-specific authentication methods.
Comment 12 Alex Blewitt CLA 2006-02-11 05:54:39 EST
GSSAPI authentication is a generic form of authentication. It so happens that it can use Kerberos authentication, but it can handle other forms. SSPI is Microsoft's specific extensions to GSSAPI that are probably incompatible. However, if you're using an Active Directory setup to perform authentication, then essentially GSSAPI and SSPI are equivalent.

Since SSPI is a native protocol to windows, it's got to have a native hook to call the Windows methods. However, the GSSAPI libraries on each platform integrate with credentials, so you might find that you can use the gserver mechanism instead of the SSPI one.
Comment 13 Alex Blewitt CLA 2006-03-03 08:32:39 EST
FYI I've tested this on a windows system, and it didn't find krb5.ini so gave up. It should be getting the info from the windows system rather than expecting to see a file, so I'll do some more digging and see if I can find out what's going wrong.
Comment 14 Mark Diggory CLA 2006-04-21 21:09:23 EDT
Trying on OSX 10.4 against a known gserver with kinit and got the following error any tips would be appreciated:


!ENTRY org.eclipse.core.jobs 4 2 2006-04-21 20:49:38.804
!MESSAGE An internal error occurred during: "Fetching children of HEAD".
!STACK 0
java.lang.SecurityException: Unable to locate a login configuration
        at com.sun.security.auth.login.ConfigFile.<init>(ConfigFile.java:97)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
        at java.lang.Class.newInstance0(Class.java:350)
        at java.lang.Class.newInstance(Class.java:303)
        at javax.security.auth.login.Configuration$3.run(Configuration.java:216)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.login.Configuration.getConfiguration(Configuration.java:210)
        at javax.security.auth.login.LoginContext$1.run(LoginContext.java:237)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.login.LoginContext.init(LoginContext.java:234)
        at javax.security.auth.login.LoginContext.<init>(LoginContext.java:403)
        at sun.security.jgss.LoginUtility.login(LoginUtility.java:72)
        at sun.security.jgss.krb5.Krb5Util.getTicketFromSubject(Krb5Util.java:137)
        at sun.security.jgss.krb5.Krb5InitCredential$1.run(Krb5InitCredential.java:331)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.security.jgss.krb5.Krb5InitCredential.getTgtFromSubject(Krb5InitCredential.java:328)
        at sun.security.jgss.krb5.Krb5InitCredential.getInstance(Krb5InitCredential.java:131)
        at sun.security.jgss.krb5.Krb5MechFactory.getCredentialElement(Krb5MechFactory.java:72)
        at sun.security.jgss.GSSManagerImpl.getCredentialElement(GSSManagerImpl.java:149)
        at sun.security.jgss.GSSCredentialImpl.add(GSSCredentialImpl.java:389)
        at sun.security.jgss.GSSCredentialImpl.<init>(GSSCredentialImpl.java:60)
        at sun.security.jgss.GSSCredentialImpl.<init>(GSSCredentialImpl.java:37)
        at sun.security.jgss.GSSManagerImpl.createCredential(GSSManagerImpl.java:96)
        at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:178)
        at sun.security.jgss.GSSContextImpl.initSecContext(GSSContextImpl.java:158)
        at org.eclipse.team.internal.ccvs.core.connection.GServerConnection.gssapiAuthenticate(GServerConnection.java:213)
        at org.eclipse.team.internal.ccvs.core.connection.GServerConnection.authenticate(GServerConnection.java:136)
        at org.eclipse.team.internal.ccvs.core.connection.GServerConnection.open(GServerConnection.java:99)
        at org.eclipse.team.internal.ccvs.core.connection.Connection.open(Connection.java:128)
        at org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.createConnection(CVSRepositoryLocation.java:537)
        at org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.openConnection(CVSRepositoryLocation.java:778)
        at org.eclipse.team.internal.ccvs.core.client.Session.open(Session.java:159)
        at org.eclipse.team.internal.ccvs.core.resources.RemoteFolderMemberFetcher.performUpdate(RemoteFolderMemberFetcher.java:97)
        at org.eclipse.team.internal.ccvs.ui.operations.FetchMembersOperation$InternalRemoteFolderMemberFetcher.performUpdate(FetchMembersOperation.java:69)
        at org.eclipse.team.internal.ccvs.core.resources.RemoteFolderMemberFetcher.fetchMembers(RemoteFolderMemberFetcher.java:64)
        at org.eclipse.team.internal.ccvs.core.resources.RemoteFolderMemberFetcher.fetchMembers(RemoteFolderMemberFetcher.java:55)
        at org.eclipse.team.internal.ccvs.ui.operations.FetchMembersOperation.execute(FetchMembersOperation.java:107)
        at org.eclipse.team.internal.ccvs.ui.operations.CVSOperation.run(CVSOperation.java:81)
        at org.eclipse.team.internal.ccvs.ui.model.CVSTagElement.fetchDeferredChildren(CVSTagElement.java:136)
        at org.eclipse.ui.progress.DeferredTreeContentManager$1.run(DeferredTreeContentManager.java:207)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:58)
Caused by: java.io.IOException: Unable to locate a login configuration
        at com.sun.security.auth.login.ConfigFile.init(ConfigFile.java:206)
        at com.sun.security.auth.login.ConfigFile.<init>(ConfigFile.java:95)
        ... 43 more


Comment 15 Michael Valenta CLA 2006-05-10 07:19:01 EDT
*** Bug 37414 has been marked as a duplicate of this bug. ***
Comment 16 Michael Valenta CLA 2006-06-14 14:14:13 EDT
I've updated the FAQ and CVS links page to point to the attachment. Moving to Later as there is no plan to address this further.
Comment 17 Michael Valenta CLA 2007-04-26 09:34:43 EDT
*** Bug 184114 has been marked as a duplicate of this bug. ***
Comment 18 ben_o_it CLA 2008-04-01 10:53:42 EDT
I encountered some problems with this cvs sspi client.
While trying to get some modules from a repository which path contains special characters ("é" in my case) on a cvs server running under windows (I don't know the version).

Message got:
> Could not connect to 
> :sspi:xxxx@xxxx:path\with\word_containing_é: 
> I/O exception occurred: Connection refused: 
> path\with\word_containing_&#65533;: no such repository
> Connection refused: path\with\word_containing_&#65533;: no such repository


I solved the problem by changing one line:
in SSPIConnection.java:
  in method:
  private void authenticate() throws IOException, CVSAuthenticationException
    code:
    if (authenticateSSPI(in, out, line, user, password, domain, cvsroot.getHost()))
    {
      request = new StringBuffer();
      request.append(cvsroot.getRootDirectory());
      request.append(NEWLINE);
//    out.write(request.toString().getBytes("ASCII"));
//    replaced by the following line:
      out.write(request.toString().getBytes("ISO-8859-1"));
      out.flush();

      line = readLine(in);
    }

Maybe this can helps someone else...
Comment 19 Alex Blewitt CLA 2008-04-01 11:45:25 EDT
Sadly, despite the patch being available for over two years, there's zero interest in the Team owners as actually addressing this bug (seeing as it's marked RESOLVED LATER, which is deprecated).

As for accessing the data, the CVS protocol uses ASCII to do its resolution. It might be possible to default to the system charset, but I don't know whether that would work for all systems. Charsets outside of ASCII aren't really well treated in CVS.
Comment 20 Michael Valenta CLA 2008-04-01 12:21:24 EDT
Reopening.
Comment 21 Michael Valenta CLA 2008-04-01 12:54:57 EDT
I agree that this should not be RESOLVED LATER. I also agree that ideally this would be part of the Eclipse CVS plug-in. When I was an active committer on the CVS component, I didn't pursue getting this code in the repository because, based on the comments, it appeared to be incomplete (i.e. required running a separate utility to work and was only tested on Mac OS) and I was not convinced that there was a large enough demand for the feature to justify the amount of work it would take to make it real.

If we want to move forward on this, it would be helpful to know what the current status of the plug-in is (i.e. does it work on Windows or Linux? Is it possible to get it to work without running an external utility?).

The other issue is simply one of manpower. There has never really been more than one or two people on the Team/CVS/Compare component and there is currently only 1. It is difficult to justify the amount of work it would take to get this into the repository without knowing that it will have a significant impact. That is, if there are only a handful of users, it's not worth it but if there were 100s perhaps it could be justified. 

Given that this is a separate plug-in, one option would be to host the development of the plug-in elsewhere. This has the added advantage of giving those that have the necessary knowledge the ability to commit to the project. This would at least help contributions such as those from comment 18 to get included in the code base. This has been done in the past for extensions to the CVS plug-ins. I know this isn't ideal but it is better than the current state. And, if there was a large enough demand for the plug-in, the current CVS committer may consider accepting the contribution (but I'll let him comment on that). 
Comment 22 Alex Blewitt CLA 2008-04-01 13:24:31 EDT
Michael,

Thanks very much for re-opening. In fact, work has gone on this plugin elsewhere and has been made to work under Eclipse 3.3 as well; the same could be done for 3.4. I have to touch base with those who made the changes, but it should be possible.

The biggest problem with the CVS API is that it's pretty tightly coupled to itself. In the above patch (I think -- it's been a while since I wrote it), I separated out the superclass implementation of a generic CVS protocol with an abstract class, and provided an extension point by which CVS providers could be added. If I can supply this trivial refactoring as a standalone patch, it will make it much easier to develop the implementation separately and then add it as (e.g.) a fragment to the CVS bundle at a later stage. Right now, there's just a single CVS provider which makes it difficult to add new CVS authentication types at a later stage.

Given that 3.4M6 has been and gone, isn't it too late for this in the 3.4 timeframe anyway?

(Can we also bump the version up from 3.0 to 3.4 in the header?)

Alex
Comment 23 Michael Valenta CLA 2008-04-01 13:42:42 EDT
Your comment is confusing to me. The CVS plug-in already has an extension point for connection methods. Are you talking about this or something else? If you mean somehting else and you have a patch, I'm happy to look at it.
Comment 24 Alex Blewitt CLA 2008-04-01 16:25:41 EDT
It's been a while since I was in the details of this patch. However, I seem to recall that the UI is populated based on a list which was only known at bundle start, and thus adding other providers was nigh on impossible because a fragment couldn't add any plugin.xml entries, and you couldn't add a dependent bundle because the startup wouldn't notice. However, things may have changed or my recollection could be incorrect, so rather than hypothesising at this point I'll go back to the code and post an updated set of patches here and we can work from there. 

PS Thanks for updating for 3.4
Comment 25 Jene Jasper CLA 2008-06-07 18:28:53 EDT
A simple implementation of sspi support based on ext settings found here http://dev.eclipse.org/mhonarc/lists/platform-cvs-dev/msg00384.html

Make sure that the command line cvsnt is working correctly with a cvsroot string like ":sspi:192.168.0.26:/cvs".

On the client using Eclipse add the following to "C:\dev\vcs\cvsnt-2.5.03.2382\extnt.ini":

[192.168.0.26]
protocol=sspi
hostname=192.168.0.26
directory=/cvs

You are now ready to configure Eclipse: Windows => Preferences => Team => CVS => Ext Connection Method

select "Use an external program to connect"
CVS_RSH: C:\dev\vcs\cvsnt-2.5.03.2382\extnt.exe
Parameters: {host} -l {user} -P {password}
CVS_SERVER: cvsnt

The sspi support is then possible with: public class SSPIConnectionMethod extends ExtConnectionMethod of which only the name is changed to sppi.

Add this SSPIConnectionMethod to the plugin.xml and you're ready to go.

Because I do not want to store my password I had to make a patch to CVSRepositoryLocation to promptForUserInfo when the password was null.
Comment 26 Jene Jasper CLA 2008-06-07 18:31:35 EDT
Created attachment 104094 [details]
SSPIConnectionMethod class
Comment 27 Jene Jasper CLA 2008-06-07 18:35:09 EDT
Created attachment 104095 [details]
plugin.xml SSPIConnectionMethod extension
Comment 28 Jene Jasper CLA 2008-06-07 18:38:50 EDT
Created attachment 104096 [details]
CVSRepositoryLocation promptForUserInfo when the sspi password is null
Comment 29 Jene Jasper CLA 2008-06-07 18:43:32 EDT
Created attachment 104097 [details]
SSPIConnectionMethod implementation
Comment 30 sun_certified CLA 2008-06-09 16:50:26 EDT
(In reply to comment #29)
> Created an attachment (id=104097) [details]
> SSPIConnectionMethod implementation
> 

thanks for posting the attachments. 

excuse me for asking silly questions; but i'm not a plugin developer (just an eclipse user/java application programmer who would like to connect to an sspi authenticated cvsnt server; the alternative is to use the god-awful jDeveloper. bleah!). so it's not obvious to me what i need to do with the attachments you've posted (again, thanks for those). i think i've worked out what to do with the plugin.xml. but please, can you fill me in on what exactly to do with the SSPIConnectionMethod implementation (obviously it needs to be compiled; but then what?) and the "patch to CVSRepositoryLocation to promptForUserInfo"?   for example: where do they go?  my first guess is in the plugns directory. but can you confirm that? do i just put the bare SSPIConnectionMethod class file directly into the plugins directory? or do i add it to "org.eclipse.team.cvs.core_3.x.x.x.x..jar" where the ExtConnectionMethod class lives? 

your CVSRepositoryLocation looks like a copy & paste job. am i right? if so, i'm assuming i would need the source for CVSRepositoryLocation, then paste your patch into CVSRepositoryLocation and recompile? if that's the case, where do i get the source? please, fill me in? 

thanks in advance for your reply. and thanks again for posting the attachments.
Comment 31 Jene Jasper CLA 2008-06-14 09:45:04 EDT
Created attachment 104964 [details]
Single patch file for SSPI support

Forgot to change plugin.xml setting trace back to false.

Will also be adding an instruction how to apply this patch in which one file is easier.
Comment 32 Jene Jasper CLA 2008-06-14 10:17:27 EDT
To roll your own patched plug-in jar read the following.

Alternative if you're using the org.eclipse.team.cvs.core_3.3.2.r33x_....jar you could try the attached plug-in jar I created this way.

I'm currently using eclipse-jee-europa-winter-win32.zip Version: 3.3.2 Build id: M20080221-1800

To apply patch the https://bugs.eclipse.org/bugs/attachment.cgi?id=104964 download it to for example D:\download

Next open Eclipse and select File => Import => CVS => Projects from CVS => Next

Create a new repository location (if it isn't already there) with:
Host: dev.eclipse.org
Repository path: /cvsroot/eclipse
User: anonymous
Connection type: pserver 
Click Next

Select Use an existing module: org.eclipse.team.cvs.core and click Next

Checkout as a project in the workspace
Checkout subfolders 
Click Next

Refresh Tags
Select Branches +> R3_3_maintenance and click Finish

After the import select Window => Open perspective => Java
On org.eclipse.team.cvs.core right-click and select Team => Apply Patch...
Find the downloaded File: D:\download\patch.txt and click Next and Finish



Testing the patch is optional and can be done as follows: 
Just select Window => Open perspective => Java
And open org.eclipse.team.cvs.core +> plugin.xml
Open the Overview tab of the plugin.xml and click Launch an Eclipse application to start an new Eclipse test instance that uses this patch version of the plugin.
In this new instance check the sspi connection by selecting File => Import => CVS => Projects from CVS => Next

Create a new repository location with (Note apply the settings from comment #25 https://bugs.eclipse.org/bugs/show_bug.cgi?id=41097#c25 first):
Host: <cvs host IP>
Repository path: <cvsroot>
User: <username>
Connection type: sspi 
Click Next

Select Use an existing module to browse the CVS repository.
Close the Eclipse test instance.



To rebuild this plug-in select File => Export => Plug-in Development => Deployable plug-ins and fragments and click Next.
In the Available Plug-ins and Fragments check org.eclipse.team.cvs.core
Set Destination Directory for example D:\download and click Finish.
Close Eclipse.
Move or copy D:\download\plugins\org.eclipse.team.cvs.core_3.3.2.200806141524.jar to your C:\java\eclipse\plugins directory.
Don't forget to rename the original jar to something like org.eclipse.team.cvs.core_3.3.2.r33x_20080128.jar.old.


Comment 33 Jene Jasper CLA 2008-06-14 10:20:46 EDT
Created attachment 104965 [details]
Patched CVS plug-in jar based on R3_3_maintenance
Comment 34 Thomas Singer CLA 2008-06-14 14:09:04 EDT
Just curious: where is the code that does the SSPI authentication itself?
Comment 35 Jene Jasper CLA 2008-06-14 15:13:58 EDT
That is done with CVSNT's own client C:\dev\vcs\cvsnt-2.5.03.2382\extnt.exe which should be configured in Eclipse (see comment #25).

The code is just there to recognize :sspi:user@host:/cvs and handle it as if it was :ext:user@host:/cvs by extending the ExtConnectionMethod.

And by using the mapping in extnt.ini:

[<host>]
protocol=sspi
hostname=<host>

extnt.exe knows it must handle SSPI authentication.
Comment 36 Michael Valenta CLA 2008-06-14 22:17:35 EDT
Unless I am missing something, given what is described in comment 25, there is no reason to even have an sspi connection method since you could just use ext and configure it as you've indicated in comment 25. The patch that is in comment 31 looks mostly to be a no-op except for the prompting code. Why do you need the prompting code (i.e. the patch to CVSRepositoryLocation)? In comment 25, you indicated that it was because you didn't like to store your password but that should be handled properly (i.e. if the password is null, the user should be prompted). Were you seeing different behaviour when using the ext connection method?
Comment 37 Jene Jasper CLA 2008-06-15 05:40:38 EDT
That is correct (that's why the solution was easy). It is just a convenience method because I have been working with a GUI client WinCVS and checkout using sspi. Thus all my CVS\Root files are infested with :sspi:jjasper@192.168.0.26:/cvs entries.

About the prompting code. When I run CVS Repository Exploring with this patch in place I have the following results:

- :sspi:jjasper@192.168.0.26:/cvs I'm prompted for a password
- :ext:jjasper@192.168.0.26:/cvs I get 'Error fetching resource list from repository Reason: The server reported an error: 0 [extnt] connect aborted: server 192.168.0.26 rejeced access to /cvs'

I will take another look at the code that created this message. Because the current solution requires you to enter the correct password the first time otherwise you need to restart Eclipse.
Comment 38 Michael Valenta CLA 2008-06-15 09:00:23 EDT
OK, there seem to be two issues here:

1) It is convenient to have an sspi connection method for interop purposes. In my opinion, this should be a separate plug-in even though it only contains one class (just as ssh is a separate plug-in)

2) When using the ext ssh connection method (and potentially others), there are prompting issues when no password is available. In my opinion, this should be logged as a separate bug since the issue is not just applicable to sspi.
Comment 39 Jene Jasper CLA 2008-06-15 09:46:39 EDT
Created attachment 104980 [details]
Single patch file for SSPI support and EXT support connect problem

Single patch file for SSPI support and EXT support connect problem

See comment #25 and comment #32 for additional information
Comment 40 Jene Jasper CLA 2008-06-15 09:50:58 EDT
Created attachment 104981 [details]
Patched CVS plug-in jar based on R3_3_maintenance
Comment 41 Oyvind Harboe CLA 2008-08-08 06:07:37 EDT
Is there any SSPI support for Eclipse that mere mortals will be able to configure at this point?

I don't really know or want to know what SSPI is, but I need to connect to an SSPI server via Cisco Vpn Client using CVSNT & WinCVS. Pretty awful mix of tools there that I was hoping to replace w/Eclipse bliss :-)
Comment 43 Andre Ambrosio CLA 2010-03-10 01:21:27 EST
Hi, the version for this plugin that I've got installed is 3.3.200.I20090430-04-08.
The company I'm working on is using the sspi protocol, so I can't access the repository from eclipse. This seems to be a good alternative, but I'm afraid to blow things up by applying the patch to a more recent version than the one mentioned. Is there any workaround for me?

Thanks in advance.
Comment 44 Barrie Treloar CLA 2010-03-10 01:34:11 EST
We have CVSNT working with SSPI by using Eclipse's Ext Connection.

You need a version of CVSNT installed locally.

Edit "extnt.ini" in "C:\Program Files\CVSNT" and add the following section:

[your-cvs-id]
protocol=sspi
hostname=your.cvs.host.name
directory=/path/to/CVSROOT

where
    * [your-cvs-id] is any identifier you want to use for this connection
    * hostname = the same host as your CVS connection string
    * directory = the same as the CVS Repository location in your CVS connection string. 

In eclipse Windows > Preference browse to Team > CVS > Ext Connection

    * CVS_RSH=C:\Program Files\CVSNT\extnt.exe
    * Parameters={host}
    * CVS_Server=cvsnt 

Now open the CVS Repository Exploring perspective and create a new Repository Location. 

Your CVS connection string will look like this:
  :ext:.@your-cvs-id:/path/to/CVSROOT 
Notes:
* adjust to match the values from ext.ini
* Leave the user name as . since SSPI uses your windows login details.

Paste the CVS connection string from into the host field (Eclipse will automatically parse this and populate the correct fields).
Click Finish and you should have working CVS access. 

You will need to re-checkout your project using this new connection, so make sure you have committed changes from the non-ext checkout (e.g. by using TortoiseCVS)
Comment 45 Andre Ambrosio CLA 2010-03-10 18:20:10 EST
Thanks for your reply. 

I must be doing something wrong about this.

Our connection string is

:sspi:aambrosio@EIPBRSDESK:2401/cvs/repositories/matrix

I followed your instructions in the extnt.ini file without mentioning the port (don't know if I should)

My final extnt.ini file looks like:

[cvs.cvsnt.org]
protocol=sserver
hostname=cvs.cvsnt.org
directory=/usr/local/cvs

[aambrosio]
protocol=sspi
hostname=EIPBRSDESK
directory=/cvs/repositories/matrix

then, in eclipse, in the Ext Connection Method, I put

C:\Program Files\cvsnt\extnt.exe
{host}
cvsnt


finally, when creating a new repository, I pasted the connection string into the "use custom label field" it looks like this:

:ext:.@aambrosio/cvs/repositories/matrix

And it populated the fields accordingly

Unfortunately, I keep receiving a message from eclipse that reads:

Unknown response received from cvs server.

No details available.

I tried the same configuration with and extra line in the .ini file :

Port=2401

I also tried specifying the port in eclipse. Same results.

I apologize for bothering you further. Is there anything I'm doing wrong?

Thanks in advance.
Comment 46 Barrie Treloar CLA 2010-03-10 19:14:29 EST
I will email you directly so this bug doesn't turn into support.
Comment 47 Severin Gehwolf CLA 2010-08-06 10:03:27 EDT
Hi,

I was working on gserver support in Eclipse's CVS plug-in. Unfortunately I'm stuck at credential verification. I'm attaching a small test case which should illustrate basic GSSAPI authentication (the plan is to get a pure Java implementation working). IMO once that works, I think integrating it into the CVS plug-in code should be alright (since I'll move forward with Alex Blewitt's work). Anybody having an idea what's wrong with the attached code? I get a GSSException when I request mutual authentication. I'm able to establish a security context when set to false, but verifying MIC's fails then.

The content of csLogin.conf is as follows:

Client {
  com.sun.security.auth.module.Krb5LoginModule required;
};

Login {
  com.sun.security.auth.module.Krb5LoginModule
  required
  refreshKrb5Config=true;
};

Command to run:

$ java \
-Djava.security.krb5.config=/etc/krb5.conf \
-Djava.security.auth.login.config=csLogin.conf -Dsun.security.krb5.debug=true \
Client cvs.server.com 2401

I'd very much appreciate pointers in any direction. Thanks!
Comment 48 Severin Gehwolf CLA 2010-08-06 10:05:05 EDT
Created attachment 176036 [details]
GSS example client
Comment 49 jack CLA 2010-09-13 23:49:32 EDT
(In reply to comment #46)
> I will email you directly so this bug doesn't turn into support.

Hi Barrie Treloar,

I'm encountering the same issue as <Andre Ambrosio> mentioned above, could you please kindly supply some advice in terms of the issue to me? 

Mine connection string is something like :ext:.@riskIntegrator:/ri
and i've configured the extnt.ini as well by adding the following

[riskIntegrator]
protocol=sspi
hostname=CNSHAERSRI05
directory=/ri

Thanks a lot in advance
Jack
Comment 50 Barrie Treloar CLA 2010-09-28 00:55:05 EDT
Jack, Andre had an incorrect CVS string, it was missing a colon between the host name and cvsroot.

Here are some trouble shooting tips.

Check that cvsnt works on the command line. This should give you a better error message by using cvsnt instead of via eclipse.

Make sure you set the CVS_RSH environment variable in the windows command:
CVS_RSH=C:\Program Files\CVSNT\extnt.exe

If you forget to do this, you will see an error like below:
' from cvs servering: unrecognized response `'ssh' is not recognized as an internal or external command,
' from cvs servering: unrecognized response `operable program or batch file.
cvs [version aborted]: end of file from server (consult above messages if any)

Now try running the "version" command, this will contact the server and report both the client and server versions.

cvs -d :ext:.@riskIntegrator:/ri version

If all works well you will see output like:
Client: Concurrent Versions System (CVSNT) 2.5.03 (Scorpio) Build 2382 (client/server)
Server: Concurrent Versions System (CVSNT) 2.5.03 (Scorpio) Build 2260 (client/server)

Also I wonder if there is a typo in your hostname.
hostname=CNSHAERSRI05

Could it be 
CNSHARESRI05
?

Once you have the command line working it should be simple to fix the Eclipse setings.
Comment 51 jack CLA 2011-01-18 07:04:54 EST
Hi Barrie,

Sorry I just saw the mail and it's several months ago :-)

I followed the steps you've given and unfortunately it doesn't work for me. I use cvsnt
Client: Concurrent Versions System (CVSNT) 2.0.51d (client/server)
Server: Concurrent Versions System (CVSNT) 2.0.51d (client/server)

I saw your version is 2.5, so i bet maybe it does not support the version 2.0

Anyway, i gave up using eclipse though it facilitates syncronization with development. Now i'm using TortoiseCVS alternatively

Cheers
Jack

(In reply to comment #50)
> Jack, Andre had an incorrect CVS string, it was missing a colon between the
> host name and cvsroot.
> Here are some trouble shooting tips.
> Check that cvsnt works on the command line. This should give you a better error
> message by using cvsnt instead of via eclipse.
> Make sure you set the CVS_RSH environment variable in the windows command:
> CVS_RSH=C:\Program Files\CVSNT\extnt.exe
> If you forget to do this, you will see an error like below:
> ' from cvs servering: unrecognized response `'ssh' is not recognized as an
> internal or external command,
> ' from cvs servering: unrecognized response `operable program or batch file.
> cvs [version aborted]: end of file from server (consult above messages if any)
> Now try running the "version" command, this will contact the server and report
> both the client and server versions.
> cvs -d :ext:.@riskIntegrator:/ri version
> If all works well you will see output like:
> Client: Concurrent Versions System (CVSNT) 2.5.03 (Scorpio) Build 2382
> (client/server)
> Server: Concurrent Versions System (CVSNT) 2.5.03 (Scorpio) Build 2260
> (client/server)
> Also I wonder if there is a typo in your hostname.
> hostname=CNSHAERSRI05
> Could it be 
> CNSHARESRI05
> ?
> Once you have the command line working it should be simple to fix the Eclipse
> setings.
Comment 52 Arthur Barrett CLA 2011-02-08 00:45:11 EST
March Hare Software are the authors of CVSNT.

Our own guide to connecting Eclipse and CVSNT can be downloaded from here:
http://www.march-hare.com/cvspro/?pdf=k

CVSNT 2.0.51 and CVSNT 2.5.03.2382 have serious known security issues as listed here:
http://www.march-hare.com/cvspro/security.htm

If you are using CVSNT 2.0.51, CVSNT 2.0.58, CVSNT 2.5.01, CVSNT 2.5.02 or CVSNT 2.5.03.2382 we strongly recommend you upgrade immediately to CVSNT 2.8.01 (CVS Suite 2009).

We've been interested in developing a CVSNT eclipse plugin for a while - or significantly 'improving' the existing CVS plugin to support CVSNT specific features.  I'll take note of this Eclipse bug number for future reference.
Comment 53 toadie643 CLA 2011-07-24 11:47:07 EDT
We have been using the original/modified version (vc++6) above with CVSNT 2.5.xx (Scorpio release) and WinXP 32 bit client.  It has worked flawlessly.

We have recently upgrade to Win7x64 with Eclipse Indigo (3.7) and JDK 6X64 and both the native DLL as well as the plug-in broke.  It took a few hours but we now have a version that runs on Win7 X64, Eclipse Indico build 20110615-060

THe CVSNT Server is 2.5.x on Win2K3 32 bit.

Looks like this thread has migrated away from the original native DLL route.  IF there are still interests in the native DLL, reply to this thread and I can make the code/binaries available.
Comment 54 Arthur Barrett CLA 2011-07-25 03:58:09 EDT
(In reply to comment #53)

> We have been using the original/modified version (vc++6) above with CVSNT
> 2.5.xx (Scorpio release) and WinXP 32 bit client.  It has worked flawlessly.

That release is over 6 years old!  As advised (above) CVSNT 2.5.03.2382 (Scorpio) has serious known security issues as listed here:
http://www.march-hare.com/cvspro/security.htm

> We have recently upgrade to Win7x64 with Eclipse Indigo (3.7) and JDK 6x64 and
> both the native DLL as well as the plug-in broke.  

Note: Eclipse recommends JDK 5R11 for use with Eclipse 3.7 on windows 7:
http://www.eclipse.org/downloads/moreinfo/jre.php

I just now today tested CVSNT 2.8.01 on Windows 7 SP1 x64 with Eclipse Indigo (3.7) Build id: 20110615-0604 and Sun JDK 6u26.  I loaded the org.eclipse.swt.examples following the documentation that comes with CVSNT 2.8.01.  All worked OK.  If you experience any problems, please e-mail the technical support team as described in the CVSNT Eclipse eBook that comes with 2.8.01.
http://www.march-hare.com/cvspro/?pdf=k

There is no need to modify or custom build either CVSNT or Eclipse to use it.  To resolve incompatibility you should follow the vendors advice and upgrade to a recent release like CVSNT Soolin 2.8.01 (CVS Suite 2009).
Comment 55 toadie643 CLA 2011-07-25 13:10:28 EDT
(In reply to comment #54)
> (In reply to comment #53)
> 
> > We have been using the original/modified version (vc++6) above with CVSNT
> > 2.5.xx (Scorpio release) and WinXP 32 bit client.  It has worked flawlessly.
> 
> That release is over 6 years old!  As advised (above) CVSNT 2.5.03.2382
> (Scorpio) has serious known security issues as listed here:
> http://www.march-hare.com/cvspro/security.htm

Thkx. Will pass this info on to the folks who manage the CVSNT Server.

> 
> > We have recently upgrade to Win7x64 with Eclipse Indigo (3.7) and JDK 6x64 and
> > both the native DLL as well as the plug-in broke.  
> 
> Note: Eclipse recommends JDK 5R11 for use with Eclipse 3.7 on windows 7:
> http://www.eclipse.org/downloads/moreinfo/jre.php
> 
> I just now today tested CVSNT 2.8.01 on Windows 7 SP1 x64 with Eclipse Indigo
> (3.7) Build id: 20110615-0604 and Sun JDK 6u26.  I loaded the
> org.eclipse.swt.examples following the documentation that comes with CVSNT
> 2.8.01.  All worked OK.  If you experience any problems, please e-mail the
> technical support team as described in the CVSNT Eclipse eBook that comes with
> 2.8.01.
> http://www.march-hare.com/cvspro/?pdf=k
> 
> There is no need to modify or custom build either CVSNT or Eclipse to use it. 
> To resolve incompatibility you should follow the vendors advice and upgrade to
> a recent release like CVSNT Soolin 2.8.01 (CVS Suite 2009).


The issue that I encountered wasn't related to JDK version.  While Eclipse.org tested with JDK 5R11, we have always had no issue running JDK 6 even with Eclipse 3.4+.  JDK 5 itself has its share of GC problem. 

The real issue was that the plug-in (java code) didn't properly register itself as a plugin so SSPI protocol didn't appear in the Add CVS Repository dialog.

So i am curious here as to whether or not march-hare has plan to support a true SSPI plugin rather than using EXT protocol to execute and EXE which then reads some *.INI file to perform the real SSPI protocol underneath?   While it works, it's just a lot more setup needed than what the original author by Jacob S Barret from amduat.net (? any relation here? :)  ) had done.

I didn't look into all the details of the March-hare link, but, as a side question, with the *.INI approach, is it able to support multiple CVSNT Servers concurrently ? 

Anyway - I will also pass the info on to the team.  Thanks for your reply.
Comment 56 Alexander Kurtakov CLA 2019-09-25 14:27:46 EDT
CVS plugin is in deep maintenance mode and pretty much everyone moved away from it. Thus it's fair to say we are not going to do anything here.