1 21 22 package org.armedbear.j; 23 24 import java.io.InputStream ; 25 import java.io.IOException ; 26 import java.util.Vector ; 27 import java.util.StringTokenizer ; 28 29 public final class Netrc 30 { 31 private static Vector logins; 32 private static long lastModified; 33 34 public static Login getLogin(String host) 35 { 36 if (host == null) 37 return null; 38 parseNetrc(); 39 if (logins == null) 40 return null; 41 final int limit = logins.size(); 42 for (int i = 0; i < limit; i++) { 43 Login login = (Login) logins.get(i); 44 if (host.equals(login.host)) 45 return login; 46 } 47 return null; 48 } 49 50 public static String getPassword(String host, String user) 51 { 52 if (host == null) 53 return null; 54 parseNetrc(); 55 if (logins == null) 56 return null; 57 final int limit = logins.size(); 58 for (int i = 0; i < limit; i++) { 59 Login login = (Login) logins.get(i); 60 if (host.equals(login.host)) { 61 if (user == null || user.equals(login.user)) 62 return login.password; 63 } 64 } 65 return null; 66 } 67 68 private static void parseNetrc() 70 { 71 File file = File.getInstance(Directories.getUserHomeDirectory(), ".netrc"); 72 if (!file.isFile() || !file.canRead()) { 73 logins = null; return; 75 } 76 if (logins != null) { 78 if (file.lastModified() == lastModified) 80 return; logins = null; 83 } 84 try { 85 lastModified = file.lastModified(); 86 int length = (int) file.length(); 87 byte bytes[] = new byte[length]; 88 InputStream in = file.getInputStream(); 89 if (in.read(bytes) != length) 90 return; 91 in.close(); 92 String s = new String (bytes); 93 StringTokenizer st = new StringTokenizer (s); 94 String host = null; 95 String user = null; 96 String password = null; 97 logins = new Vector (); 98 while (st.hasMoreTokens()) { 99 String token = st.nextToken(); 100 if (token.equals("machine")) { 101 if (host != null && user != null && password != null) 103 logins.add(new Login(host, user, password)); 104 host = st.nextToken(); 106 user = null; 107 password = null; 108 } else if (token.equals("login")) { 109 user = st.nextToken(); 110 } else if (token.equals("password")) 111 password = st.nextToken(); 112 } 113 if (host != null && user != null && password != null) 115 logins.add(new Login(host, user, password)); 116 } 117 catch (IOException e) { 118 Log.error(e); 119 } 120 if (logins.size() == 0) 121 logins = null; 122 } 123 } 124 | Popular Tags |