1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 * 25 * Host class 26 * Methods associated with a host. 27 */ 28 29 package com.sun.admin.pm.server; 30 31 import java.io.*; 32 33 public class Host 34 { 35 public static void main(String[] args) 36 { 37 try { 38 System.out.println(getLocalHostName()); 39 System.out.println(getDomainName()); 40 System.out.println(getNisHost("master")); 41 } 42 catch (Exception e) { 43 System.out.println(e); 44 } 45 System.exit(0); 46 } 47 48 // 49 // Get the local hostname 50 // Return an empty string if we don't find one. 51 // 52 public synchronized static String getLocalHostName() 53 throws Exception 54 { 55 Debug.message("SVR: Host.getLocalHostName()"); 56 57 String cmd = "/usr/bin/hostname"; 58 SysCommand syscmd = new SysCommand(); 59 syscmd.exec(cmd); 60 61 if (syscmd.getExitValue() != 0) { 62 String err = syscmd.getError(); 63 syscmd = null; 64 throw new pmCmdFailedException(err); 65 } 66 String o = syscmd.getOutput(); 67 syscmd = null; 68 69 if (o == null) 70 return (new String("")); 71 return (new String(o)); 72 } 73 74 // 75 // Get the domainname 76 // Return an empty string if we don't find one. 77 // 78 public synchronized static String getDomainName() 79 throws Exception 80 { 81 Debug.message("SVR: Host.getDomainName()"); 82 83 String cmd = "/usr/bin/domainname"; 84 SysCommand syscmd = new SysCommand(); 85 syscmd.exec(cmd); 86 if (syscmd.getExitValue() != 0) { 87 String err = syscmd.getError(); 88 syscmd = null; 89 throw new pmCmdFailedException(err); 90 } 91 92 String o = syscmd.getOutput(); 93 syscmd = null; 94 95 if (o == null) 96 return (new String("")); 97 return (new String(o)); 98 } 99 100 public synchronized static void pingHost(String host) 101 throws Exception 102 { 103 int exitvalue; 104 105 Debug.message("SVR: Host.pingHost()"); 106 107 SysCommand syscmd = new SysCommand(); 108 syscmd.exec("/usr/sbin/ping " + host); 109 exitvalue = syscmd.getExitValue(); 110 syscmd = null; 111 112 if (exitvalue != 0) { 113 String err = syscmd.getError(); 114 throw new pmHostNotPingableException(err); 115 } 116 } 117 118 public synchronized static String getNisMaster() 119 throws Exception 120 { 121 return (getNisHost("master")); 122 } 123 124 // 125 // Look for the nis server. 126 // If we are looking for the master server first try 127 // the printers.conf.byname map. If that fails 128 // look for passwd. 129 // 130 public synchronized static String getNisHost(String type) 131 throws Exception 132 { 133 Debug.message("SVR: Host.getNisHost() " + type); 134 135 SysCommand syscmd = null; 136 String cmd = null; 137 int exitvalue = 0; 138 139 if (type.equals("master")) { 140 cmd = "/usr/bin/ypwhich -m printers.conf.byname"; 141 } else { 142 cmd = "/usr/bin/ypwhich"; 143 } 144 syscmd = new SysCommand(); 145 syscmd.exec(cmd); 146 exitvalue = syscmd.getExitValue(); 147 if ((exitvalue != 0) && (type.equals("master"))) { 148 Debug.message("SVR: printers.conf NIS host not found."); 149 Debug.message("SVR: Looking for NIS passwd host."); 150 cmd = "/usr/bin/ypwhich -m passwd"; 151 152 syscmd = new SysCommand(); 153 syscmd.exec(cmd); 154 exitvalue = syscmd.getExitValue(); 155 } 156 if (exitvalue != 0) { 157 Debug.error("SVR: NIS server could not be found"); 158 String err = syscmd.getError(); 159 syscmd = null; 160 throw new pmNSNotConfiguredException(err); 161 } 162 163 String o = syscmd.getOutput(); 164 syscmd = null; 165 166 if (o == null) { 167 throw new pmCmdFailedException(syscmd.getError()); 168 } 169 o = o.trim(); 170 return (new String(o)); 171 } 172 173 /* 174 * Return the name of the first server listed by ldapclient 175 */ 176 public synchronized static String getLDAPMaster() 177 throws Exception 178 { 179 SysCommand syscmd = null; 180 String cmd = null; 181 int exitvalue = 0; 182 183 /* ldapclient will hang if we are not root. */ 184 if (!DoPrinterNS.isRoot()) { 185 Debug.error("SVR: Not root. Can't determine LDAP master."); 186 return null; 187 } 188 189 cmd = "/usr/sbin/ldapclient list"; 190 syscmd = new SysCommand(); 191 syscmd.exec(cmd); 192 exitvalue = syscmd.getExitValue(); 193 194 if (exitvalue != 0) { 195 Debug.error("SVR: ldapclient failed."); 196 Debug.error("SVR: " + syscmd.getError()); 197 syscmd = null; 198 return null; 199 } 200 String o = syscmd.getOutput(); 201 syscmd = null; 202 203 String master = DoPrinterView.getToken(o + "\n", "NS_LDAP_SERVERS="); 204 if (master == null) { 205 Debug.error("SVR: ldapclient did not return NS_LDAP_SERVERS."); 206 syscmd = null; 207 return null; 208 } 209 210 /* Extract the first address from the NS_LDAP_SERVERS list */ 211 212 for (int i = 0; i < master.length(); i++) { 213 if ((master.charAt(i) == ',') || 214 (master.charAt(i) == ' ') || 215 (master.charAt(i) == '\t')) { 216 master = master.substring(0, i); 217 break; 218 } 219 } 220 master = master.trim(); 221 222 return (new String(master)); 223 } 224 225 /* 226 * Get a default admin DN. 227 */ 228 public synchronized static String getDefaultAdminDN() 229 throws Exception 230 { 231 SysCommand syscmd = null; 232 String cmd = null; 233 int exitvalue = 0; 234 235 try { 236 String master = getLDAPMaster(); 237 cmd = "/usr/bin/ldapsearch -h " + master + 238 " -b o=NetScapeRoot o=NetscapeRoot"; 239 syscmd = new SysCommand(); 240 syscmd.exec(cmd); 241 exitvalue = syscmd.getExitValue(); 242 if (exitvalue == 0) { 243 String on = syscmd.getOutput(); 244 syscmd = null; 245 if (on != null) { 246 if (on.indexOf("NetscapeRoot") != -1) { 247 return ("cn=Directory Manager"); 248 } 249 } 250 } 251 syscmd = null; 252 } 253 catch (Exception e) { 254 Debug.message("SVR: ldapsearch for NSDS failed. Continuing"); 255 } 256 257 cmd = "/usr/bin/ldaplist -d printers"; 258 syscmd = new SysCommand(); 259 syscmd.exec(cmd); 260 exitvalue = syscmd.getExitValue(); 261 262 if (exitvalue != 0) { 263 Debug.error("SVR: ldaplist printers failed."); 264 Debug.error("SVR: " + syscmd.getError()); 265 syscmd = null; 266 return null; 267 } 268 String o = syscmd.getOutput(); 269 syscmd = null; 270 271 if (o == null) { 272 return null; 273 } 274 275 String dn = DoPrinterView.getToken(o + "\n", "ou=printers,"); 276 if (dn == null) { 277 return null; 278 } 279 dn = "cn=admin," + dn; 280 dn = dn.trim(); 281 282 return (new String(dn)); 283 } 284 285 // 286 // Check to see if a name service is configured 287 // 288 public synchronized static void isNSConfigured(String ns) 289 throws Exception 290 { 291 Debug.message("SVR: Host.isNSConfigured() " + ns); 292 293 int exitvalue; 294 String cmd = null; 295 String err = null; 296 SysCommand syscmd = null; 297 298 if (ns.equals("system")) { 299 return; 300 } else if (ns.equals("nis")) { 301 cmd = "/usr/bin/ypwhich"; 302 syscmd = new SysCommand(); 303 syscmd.exec(cmd); 304 exitvalue = syscmd.getExitValue(); 305 err = syscmd.getError(); 306 syscmd = null; 307 308 if (exitvalue != 0) { 309 throw new pmNSNotConfiguredException(err); 310 } 311 312 cmd = "/usr/bin/ypcat cred"; 313 syscmd = new SysCommand(); 314 syscmd.exec(cmd); 315 exitvalue = syscmd.getExitValue(); 316 syscmd = null; 317 if (exitvalue == 0) { 318 Debug.warning( 319 "SVR: Unable to update this configuration."); 320 throw new pmNSNotConfiguredException(); 321 } 322 } else if (ns.equals("ldap")) { 323 /* 324 * Check if the ldap-client is configured by first checking 325 * if the config file exists and then invoking ldaplist 326 * Note: we need to check if the config file exists before 327 * invoking ldaplist so that we don't get its error message 328 */ 329 330 File ldapConfig = new File("/var/ldap/ldap_client_file"); 331 if (ldapConfig.isFile()) { 332 // Config file exists 333 334 cmd = "/usr/bin/ldaplist -d printers"; 335 syscmd = new SysCommand(); 336 syscmd.exec(cmd); 337 exitvalue = syscmd.getExitValue(); 338 syscmd = null; 339 340 if (exitvalue != 0) { 341 throw new pmNSNotConfiguredException(); 342 } 343 } else { 344 throw new pmNSNotConfiguredException(); 345 } 346 } else { 347 throw new pmInternalErrorException( 348 "Unkown name service " + ns); 349 } 350 } 351 } 352