comparison src/ch/ethz/ssh2/auth/ServerAuthenticationManager.java @ 308:42b15aaa7ac7 ganymed

merge
author Carl Byington <carl@five-ten-sg.com>
date Wed, 30 Jul 2014 14:21:50 -0700
parents 071eccdff8ea
children
comparison
equal deleted inserted replaced
306:90e47d99ea54 308:42b15aaa7ac7
27 this.state = state; 27 this.state = state;
28 state.tm.registerMessageHandler(this, 0, 255); 28 state.tm.registerMessageHandler(this, 0, 255);
29 } 29 }
30 30
31 private void sendresult(AuthenticationResult result) throws IOException { 31 private void sendresult(AuthenticationResult result) throws IOException {
32 if(AuthenticationResult.SUCCESS == result) { 32 if (AuthenticationResult.SUCCESS == result) {
33 PacketUserauthSuccess pus = new PacketUserauthSuccess(); 33 PacketUserauthSuccess pus = new PacketUserauthSuccess();
34 state.tm.sendAsynchronousMessage(pus.getPayload()); 34 state.tm.sendAsynchronousMessage(pus.getPayload());
35
36 state.tm.removeMessageHandler(this); 35 state.tm.removeMessageHandler(this);
37 state.tm.registerMessageHandler(this, 50, 79); 36 state.tm.registerMessageHandler(this, 50, 79);
38
39 state.cm = new ChannelManager(state); 37 state.cm = new ChannelManager(state);
40
41 state.flag_auth_completed = true; 38 state.flag_auth_completed = true;
42
43 } 39 }
44 else { 40 else {
45 Set<String> remaining_methods = new HashSet<String>(); 41 Set<String> remaining_methods = new HashSet<String>();
46 42
47 if(state.cb_auth != null) { 43 if (state.cb_auth != null) {
48 remaining_methods.addAll(Arrays.asList( 44 remaining_methods.addAll(Arrays.asList(
49 state.cb_auth.getRemainingAuthMethods(state.conn))); 45 state.cb_auth.getRemainingAuthMethods(state.conn)));
50 } 46 }
47
51 PacketUserauthFailure puf = new PacketUserauthFailure(remaining_methods, 48 PacketUserauthFailure puf = new PacketUserauthFailure(remaining_methods,
52 AuthenticationResult.PARTIAL_SUCCESS == result); 49 AuthenticationResult.PARTIAL_SUCCESS == result);
53 state.tm.sendAsynchronousMessage(puf.getPayload()); 50 state.tm.sendAsynchronousMessage(puf.getPayload());
54 } 51 }
55 } 52 }
58 // 55 //
59 } 56 }
60 57
61 public void handleMessage(byte[] msg) throws IOException { 58 public void handleMessage(byte[] msg) throws IOException {
62 /* Ignore all authentication messages after successful auth */ 59 /* Ignore all authentication messages after successful auth */
63 60 if (state.flag_auth_completed) {
64 if(state.flag_auth_completed) {
65 return; 61 return;
66 } 62 }
67 63
68 if(!state.flag_auth_serviceRequested) { 64 if (!state.flag_auth_serviceRequested) {
69 /* Must be PacketServiceRequest */ 65 /* Must be PacketServiceRequest */
70
71 PacketServiceRequest psr = new PacketServiceRequest(msg); 66 PacketServiceRequest psr = new PacketServiceRequest(msg);
72 67
73 if(!"ssh-userauth".equals(psr.getServiceName())) { 68 if (!"ssh-userauth".equals(psr.getServiceName())) {
74 throw new IOException("SSH protocol error, expected ssh-userauth service request"); 69 throw new IOException("SSH protocol error, expected ssh-userauth service request");
75 } 70 }
76 71
77 PacketServiceAccept psa = new PacketServiceAccept("ssh-userauth"); 72 PacketServiceAccept psa = new PacketServiceAccept("ssh-userauth");
78 state.tm.sendAsynchronousMessage(psa.getPayload()); 73 state.tm.sendAsynchronousMessage(psa.getPayload());
79
80 String banner = state.cb_auth.initAuthentication(state.conn); 74 String banner = state.cb_auth.initAuthentication(state.conn);
81 75
82 if(banner != null) { 76 if (banner != null) {
83 PacketUserauthBanner pub = new PacketUserauthBanner(banner); 77 PacketUserauthBanner pub = new PacketUserauthBanner(banner);
84 state.tm.sendAsynchronousMessage(pub.getPayload()); 78 state.tm.sendAsynchronousMessage(pub.getPayload());
85 } 79 }
86 80
87 state.flag_auth_serviceRequested = true; 81 state.flag_auth_serviceRequested = true;
88
89 return; 82 return;
90 } 83 }
91 84
92 ServerAuthenticationCallback cb = state.cb_auth; 85 ServerAuthenticationCallback cb = state.cb_auth;
93
94 TypesReader tr = new TypesReader(msg); 86 TypesReader tr = new TypesReader(msg);
95 int packet_type = tr.readByte(); 87 int packet_type = tr.readByte();
96 88
97 if(packet_type == Packets.SSH_MSG_USERAUTH_REQUEST) { 89 if (packet_type == Packets.SSH_MSG_USERAUTH_REQUEST) {
98 String username = tr.readString("UTF-8"); 90 String username = tr.readString("UTF-8");
99 String service = tr.readString(); 91 String service = tr.readString();
100 String method = tr.readString(); 92 String method = tr.readString();
101 93
102 if(!"ssh-connection".equals(service)) { 94 if (!"ssh-connection".equals(service)) {
103 sendresult(AuthenticationResult.FAILURE); 95 sendresult(AuthenticationResult.FAILURE);
104 return; 96 return;
105 } 97 }
106 98
107 if("none".equals(method)) { 99 if ("none".equals(method)) {
108 if(cb != null) { 100 if (cb != null) {
109 sendresult(cb.authenticateWithNone(state.conn, username)); 101 sendresult(cb.authenticateWithNone(state.conn, username));
110 return; 102 return;
111 } 103 }
112 } 104 }
113 105
114 if("password".equals(method)) { 106 if ("password".equals(method)) {
115 boolean flag_change_pass = tr.readBoolean(); 107 boolean flag_change_pass = tr.readBoolean();
116 108
117 if(flag_change_pass) { 109 if (flag_change_pass) {
118 sendresult(AuthenticationResult.FAILURE); 110 sendresult(AuthenticationResult.FAILURE);
119 return; 111 return;
120 } 112 }
121 113
122 String password = tr.readString("UTF-8"); 114 String password = tr.readString("UTF-8");
123 115
124 if(cb != null) { 116 if (cb != null) {
125 sendresult(cb.authenticateWithPassword(state.conn, username, password)); 117 sendresult(cb.authenticateWithPassword(state.conn, username, password));
126 return; 118 return;
127 } 119 }
128 } 120 }
129 121
130 sendresult(AuthenticationResult.FAILURE); 122 sendresult(AuthenticationResult.FAILURE);
131 return; 123 return;
132 } 124 }
125
133 throw new PacketTypeException(packet_type); 126 throw new PacketTypeException(packet_type);
134 } 127 }
135 } 128 }