Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 262515 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/jsch/internal/core/IConstants.java (-1 / +2 lines)
Lines 47-51 Link Here
47
  public final String PREF_PROXY_AUTH="proxyAuth"; //$NON-NLS-1$
47
  public final String PREF_PROXY_AUTH="proxyAuth"; //$NON-NLS-1$
48
48
49
  public final String PREF_HAS_MIGRATED_SSH2_PREFS="org.eclipse.jsch.core.hasMigratedSsh2Preferences"; //$NON-NLS-1$
49
  public final String PREF_HAS_MIGRATED_SSH2_PREFS="org.eclipse.jsch.core.hasMigratedSsh2Preferences"; //$NON-NLS-1$
50
50
  
51
  public final String PREF_PREFERRED_AUTHENTICATION_METHODS="CVSSSH2PreferencePage.PREF_AUTH_METHODS"; //$NON-NLS-1$
51
}
52
}
(-)src/org/eclipse/jsch/internal/core/Utils.java (-1 / +24 lines)
Lines 15-21 Link Here
15
import org.eclipse.core.net.proxy.IProxyData;
15
import org.eclipse.core.net.proxy.IProxyData;
16
import org.eclipse.core.net.proxy.IProxyService;
16
import org.eclipse.core.net.proxy.IProxyService;
17
import org.eclipse.core.runtime.IStatus;
17
import org.eclipse.core.runtime.IStatus;
18
import org.eclipse.core.runtime.Platform;
18
import org.eclipse.core.runtime.Preferences;
19
import org.eclipse.core.runtime.Preferences;
20
import org.eclipse.core.runtime.preferences.IPreferencesService;
19
import org.eclipse.core.runtime.preferences.InstanceScope;
21
import org.eclipse.core.runtime.preferences.InstanceScope;
20
22
21
import com.jcraft.jsch.*;
23
import com.jcraft.jsch.*;
Lines 25-30 Link Here
25
 * @since 1.0
27
 * @since 1.0
26
 */
28
 */
27
public class Utils{
29
public class Utils{
30
  
31
  /* should have at least one element */
32
  public static final String[] PREFERRED_AUTH_METHODS=new String[] {
33
      "gssapi-with-mic", "publickey", "password", "keyboard-interactive"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
28
34
29
  public static String loadPrivateKeys(JSch jsch, String current_pkeys){
35
  public static String loadPrivateKeys(JSch jsch, String current_pkeys){
30
    Preferences preferences=JSchCorePlugin.getPlugin().getPluginPreferences();
36
    Preferences preferences=JSchCorePlugin.getPlugin().getPluginPreferences();
Lines 78-84 Link Here
78
    setProxy(session);
84
    setProxy(session);
79
    Hashtable config=new Hashtable();
85
    Hashtable config=new Hashtable();
80
    config.put("PreferredAuthentications", //$NON-NLS-1$ 
86
    config.put("PreferredAuthentications", //$NON-NLS-1$ 
81
        "gssapi-with-mic,publickey,password,keyboard-interactive"); //$NON-NLS-1$ 
87
        getEnabledPreferredAuthMethods()); 
82
    session.setConfig(config);
88
    session.setConfig(config);
83
    return session;
89
    return session;
84
  }
90
  }
Lines 187-191 Link Here
187
      ssh2Prefs.remove(IConstants.KEY_OLD_PRIVATEKEY);
193
      ssh2Prefs.remove(IConstants.KEY_OLD_PRIVATEKEY);
188
    }
194
    }
189
  }
195
  }
196
  
197
  public static String getEnabledPreferredAuthMethods(){
198
    IPreferencesService service = Platform.getPreferencesService();
199
 
200
    String defaultValue = PREFERRED_AUTH_METHODS[0];
201
    for(int i = 1; i < PREFERRED_AUTH_METHODS.length; i++){
202
      defaultValue += "," + PREFERRED_AUTH_METHODS[i]; //$NON-NLS-1$
203
    }
204
    return service.getString(JSchCorePlugin.ID,
205
        IConstants.PREF_PREFERRED_AUTHENTICATION_METHODS, defaultValue, null);
206
  }
207
  
208
  public static void setEnabledPreferredAuthMethods(String methods){
209
    IPreferencesService service=Platform.getPreferencesService();
210
    service.getRootNode().node(InstanceScope.SCOPE).node(JSchCorePlugin.ID).put(
211
        IConstants.PREF_PREFERRED_AUTHENTICATION_METHODS, methods);
212
  }
190
213
191
}
214
}
(-)src/org/eclipse/jsch/internal/ui/Messages.java (+1 lines)
Lines 81-86 Link Here
81
  public static String CVSSSH2PreferencePage_134;
81
  public static String CVSSSH2PreferencePage_134;
82
  public static String CVSSSH2PreferencePage_135;
82
  public static String CVSSSH2PreferencePage_135;
83
  public static String CVSSSH2PreferencePage_136;
83
  public static String CVSSSH2PreferencePage_136;
84
  public static String CVSSSH2PreferencePage_137;
84
  public static String CVSSSH2PreferencePage_138;
85
  public static String CVSSSH2PreferencePage_138;
85
  public static String CVSSSH2PreferencePage_139;
86
  public static String CVSSSH2PreferencePage_139;
86
  public static String KeyboardInteractiveDialog_0;
87
  public static String KeyboardInteractiveDialog_0;
(-)src/org/eclipse/jsch/internal/ui/messages.properties (+1 lines)
Lines 71-76 Link Here
71
CVSSSH2PreferencePage_134=Hostname
71
CVSSSH2PreferencePage_134=Hostname
72
CVSSSH2PreferencePage_135=Type
72
CVSSSH2PreferencePage_135=Type
73
CVSSSH2PreferencePage_136=Fingerprint
73
CVSSSH2PreferencePage_136=Fingerprint
74
CVSSSH2PreferencePage_137=&Authentication Methods
74
CVSSSH2PreferencePage_138=&Remove
75
CVSSSH2PreferencePage_138=&Remove
75
CVSSSH2PreferencePage_139=Keys of known hosts:
76
CVSSSH2PreferencePage_139=Keys of known hosts:
76
UserInfoPrompter_0=SSH2 Message
77
UserInfoPrompter_0=SSH2 Message
(-)src/org/eclipse/jsch/internal/ui/preference/PreferencePage.java (-10 / +127 lines)
Lines 12-41 Link Here
12
 *******************************************************************************/
12
 *******************************************************************************/
13
package org.eclipse.jsch.internal.ui.preference;
13
package org.eclipse.jsch.internal.ui.preference;
14
14
15
import java.io.*;
15
import java.io.ByteArrayInputStream;
16
import java.io.ByteArrayOutputStream;
17
import java.io.File;
18
import java.io.IOException;
19
import java.util.Arrays;
20
import java.util.HashSet;
16
import java.util.Iterator;
21
import java.util.Iterator;
22
import java.util.Set;
17
23
18
import org.eclipse.core.runtime.*;
24
import org.eclipse.core.runtime.NullProgressMonitor;
19
import org.eclipse.jface.dialogs.*;
25
import org.eclipse.core.runtime.Preferences;
20
import org.eclipse.jface.dialogs.Dialog;
26
import org.eclipse.jface.dialogs.Dialog;
21
import org.eclipse.jface.viewers.*;
27
import org.eclipse.jface.dialogs.IDialogConstants;
28
import org.eclipse.jface.dialogs.MessageDialog;
29
import org.eclipse.jface.viewers.ColumnWeightData;
30
import org.eclipse.jface.viewers.IStructuredContentProvider;
31
import org.eclipse.jface.viewers.IStructuredSelection;
32
import org.eclipse.jface.viewers.ITableLabelProvider;
33
import org.eclipse.jface.viewers.LabelProvider;
34
import org.eclipse.jface.viewers.TableLayout;
35
import org.eclipse.jface.viewers.TableViewer;
36
import org.eclipse.jface.viewers.Viewer;
22
import org.eclipse.jsch.core.IJSchLocation;
37
import org.eclipse.jsch.core.IJSchLocation;
23
import org.eclipse.jsch.core.IJSchService;
38
import org.eclipse.jsch.core.IJSchService;
24
import org.eclipse.jsch.internal.core.*;
39
import org.eclipse.jsch.internal.core.IConstants;
40
import org.eclipse.jsch.internal.core.JSchCorePlugin;
41
import org.eclipse.jsch.internal.core.Utils;
25
import org.eclipse.jsch.internal.ui.JSchUIPlugin;
42
import org.eclipse.jsch.internal.ui.JSchUIPlugin;
26
import org.eclipse.jsch.internal.ui.Messages;
43
import org.eclipse.jsch.internal.ui.Messages;
27
import org.eclipse.osgi.util.NLS;
44
import org.eclipse.osgi.util.NLS;
28
import org.eclipse.swt.SWT;
45
import org.eclipse.swt.SWT;
29
import org.eclipse.swt.custom.BusyIndicator;
46
import org.eclipse.swt.custom.BusyIndicator;
30
import org.eclipse.swt.custom.TableEditor;
47
import org.eclipse.swt.custom.TableEditor;
31
import org.eclipse.swt.events.*;
48
import org.eclipse.swt.events.FocusEvent;
49
import org.eclipse.swt.events.FocusListener;
50
import org.eclipse.swt.events.ModifyEvent;
51
import org.eclipse.swt.events.ModifyListener;
52
import org.eclipse.swt.events.SelectionAdapter;
53
import org.eclipse.swt.events.SelectionEvent;
32
import org.eclipse.swt.graphics.Image;
54
import org.eclipse.swt.graphics.Image;
33
import org.eclipse.swt.layout.GridData;
55
import org.eclipse.swt.layout.GridData;
34
import org.eclipse.swt.layout.GridLayout;
56
import org.eclipse.swt.layout.GridLayout;
35
import org.eclipse.swt.widgets.*;
57
import org.eclipse.swt.widgets.Button;
36
import org.eclipse.ui.*;
58
import org.eclipse.swt.widgets.Composite;
37
59
import org.eclipse.swt.widgets.Control;
38
import com.jcraft.jsch.*;
60
import org.eclipse.swt.widgets.DirectoryDialog;
61
import org.eclipse.swt.widgets.Display;
62
import org.eclipse.swt.widgets.Event;
63
import org.eclipse.swt.widgets.FileDialog;
64
import org.eclipse.swt.widgets.Label;
65
import org.eclipse.swt.widgets.Listener;
66
import org.eclipse.swt.widgets.Shell;
67
import org.eclipse.swt.widgets.TabFolder;
68
import org.eclipse.swt.widgets.TabItem;
69
import org.eclipse.swt.widgets.Table;
70
import org.eclipse.swt.widgets.TableColumn;
71
import org.eclipse.swt.widgets.TableItem;
72
import org.eclipse.swt.widgets.Text;
73
import org.eclipse.ui.IWorkbench;
74
import org.eclipse.ui.IWorkbenchPreferencePage;
75
import org.eclipse.ui.PlatformUI;
76
77
import com.jcraft.jsch.Channel;
78
import com.jcraft.jsch.ChannelSftp;
79
import com.jcraft.jsch.HostKey;
80
import com.jcraft.jsch.HostKeyRepository;
81
import com.jcraft.jsch.JSch;
82
import com.jcraft.jsch.JSchException;
83
import com.jcraft.jsch.KeyPair;
84
import com.jcraft.jsch.Session;
85
import com.jcraft.jsch.SftpATTRS;
86
import com.jcraft.jsch.SftpException;
39
87
40
public class PreferencePage extends org.eclipse.jface.preference.PreferencePage
88
public class PreferencePage extends org.eclipse.jface.preference.PreferencePage
41
    implements IWorkbenchPreferencePage{
89
    implements IWorkbenchPreferencePage{
Lines 93-98 Link Here
93
    tabItem=new TabItem(tabFolder, SWT.NONE);
141
    tabItem=new TabItem(tabFolder, SWT.NONE);
94
    tabItem.setText(Messages.CVSSSH2PreferencePage_133);
142
    tabItem.setText(Messages.CVSSSH2PreferencePage_133);
95
    tabItem.setControl(createHostKeyManagementPage(tabFolder));
143
    tabItem.setControl(createHostKeyManagementPage(tabFolder));
144
    
145
    tabItem=new TabItem(tabFolder, SWT.NONE);
146
    tabItem.setText(Messages.CVSSSH2PreferencePage_137);
147
    tabItem.setControl(createPreferredAuthenticationPage(tabFolder));
96
148
97
    initControls();
149
    initControls();
98
150
Lines 715-720 Link Here
715
  private TableViewer viewer;
767
  private TableViewer viewer;
716
  private Button removeHostKeyButton;
768
  private Button removeHostKeyButton;
717
769
770
  private Table preferedAuthMethodTable;
771
718
  class TableLabelProvider extends LabelProvider implements ITableLabelProvider{
772
  class TableLabelProvider extends LabelProvider implements ITableLabelProvider{
719
    public String getColumnText(Object element, int columnIndex){
773
    public String getColumnText(Object element, int columnIndex){
720
      HostKey entry=(HostKey)element;
774
      HostKey entry=(HostKey)element;
Lines 840-845 Link Here
840
894
841
    return group;
895
    return group;
842
  }
896
  }
897
  
898
  private Control createPreferredAuthenticationPage(Composite parent){
899
    Composite root = new Composite(parent, SWT.NONE);
900
    GridLayout layout=new GridLayout();
901
    layout.marginHeight=convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
902
    layout.marginWidth=convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
903
    layout.verticalSpacing=convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
904
    layout.horizontalSpacing=convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
905
    root.setLayout(layout);
906
    
907
    Label label=new Label(root, SWT.NONE);
908
    label.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false));
909
    label.setText("Select preferred authentication methods"); //$NON-NLS-1$
910
    
911
    preferedAuthMethodTable=new Table(root, SWT.CHECK | SWT.BORDER);
912
    GridData layoutData=new GridData(SWT.BEGINNING, SWT.BEGINNING, true, false);
913
    preferedAuthMethodTable.setLayoutData(layoutData);
914
    layoutData.minimumHeight = 150;
915
    layoutData.minimumWidth = 200;
916
    String[] methods = Utils.getEnabledPreferredAuthMethods().split(","); //$NON-NLS-1$
917
    Set smethods  = new HashSet(Arrays.asList(methods));
918
    
919
    for(int i=0; i<Utils.PREFERRED_AUTH_METHODS.length; i++){
920
      TableItem tableItem= new TableItem(preferedAuthMethodTable, SWT.NONE);
921
      tableItem.setText(0, Utils.PREFERRED_AUTH_METHODS[i]);
922
      if(smethods.contains(Utils.PREFERRED_AUTH_METHODS[i])){
923
        tableItem.setChecked(true);
924
      }
925
    }
926
    preferedAuthMethodTable.addSelectionListener(new SelectionAdapter(){
927
928
      public void widgetSelected(SelectionEvent e){
929
        boolean anySelected = false;
930
        for(int i = 0; i < preferedAuthMethodTable.getItemCount(); i++){
931
          anySelected |= preferedAuthMethodTable.getItem(i).getChecked();
932
        }
933
        
934
        if(anySelected){
935
          setErrorMessage(null);
936
          setValid(true);
937
        }
938
        else{
939
          setErrorMessage("You must select at least one authentication method."); //$NON-NLS-1$
940
          setValid(false);
941
        }
942
      }
943
    });
944
    
945
    return root;
946
  }
843
947
844
  void handleSelection(){
948
  void handleSelection(){
845
    boolean empty=viewer.getSelection().isEmpty();
949
    boolean empty=viewer.getSelection().isEmpty();
Lines 975-980 Link Here
975
1079
976
  public boolean performOk(){
1080
  public boolean performOk(){
977
    boolean result=super.performOk();
1081
    boolean result=super.performOk();
1082
    String selected = null;
1083
    for(int i = 0; i < preferedAuthMethodTable.getItemCount(); i++){
1084
      TableItem item=preferedAuthMethodTable.getItem(i);
1085
      if(item.getChecked()){
1086
        if(selected==null){
1087
          selected=item.getText();
1088
        }
1089
        else{
1090
          selected+=","+item.getText(); //$NON-NLS-1$
1091
        }
1092
      }
1093
    }
1094
    Utils.setEnabledPreferredAuthMethods(selected);
978
    if(result){
1095
    if(result){
979
      setErrorMessage(null);
1096
      setErrorMessage(null);
980
      String home=ssh2HomeText.getText();
1097
      String home=ssh2HomeText.getText();

Return to bug 262515