/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. * * Host class * Methods associated with a host. */ package com.sun.admin.pm.server; import java.io.*; public class Host { public static void main(String[] args) { try { System.out.println(getLocalHostName()); System.out.println(getDomainName()); System.out.println(getNisHost("master")); } catch (Exception e) { System.out.println(e); } System.exit(0); } // // Get the local hostname // Return an empty string if we don't find one. // public synchronized static String getLocalHostName() throws Exception { Debug.message("SVR: Host.getLocalHostName()"); String cmd = "/usr/bin/hostname"; SysCommand syscmd = new SysCommand(); syscmd.exec(cmd); if (syscmd.getExitValue() != 0) { String err = syscmd.getError(); syscmd = null; throw new pmCmdFailedException(err); } String o = syscmd.getOutput(); syscmd = null; if (o == null) return (new String("")); return (new String(o)); } // // Get the domainname // Return an empty string if we don't find one. // public synchronized static String getDomainName() throws Exception { Debug.message("SVR: Host.getDomainName()"); String cmd = "/usr/bin/domainname"; SysCommand syscmd = new SysCommand(); syscmd.exec(cmd); if (syscmd.getExitValue() != 0) { String err = syscmd.getError(); syscmd = null; throw new pmCmdFailedException(err); } String o = syscmd.getOutput(); syscmd = null; if (o == null) return (new String("")); return (new String(o)); } public synchronized static void pingHost(String host) throws Exception { int exitvalue; Debug.message("SVR: Host.pingHost()"); SysCommand syscmd = new SysCommand(); syscmd.exec("/usr/sbin/ping " + host); exitvalue = syscmd.getExitValue(); syscmd = null; if (exitvalue != 0) { String err = syscmd.getError(); throw new pmHostNotPingableException(err); } } public synchronized static String getNisMaster() throws Exception { return (getNisHost("master")); } // // Look for the nis server. // If we are looking for the master server first try // the printers.conf.byname map. If that fails // look for passwd. // public synchronized static String getNisHost(String type) throws Exception { Debug.message("SVR: Host.getNisHost() " + type); SysCommand syscmd = null; String cmd = null; int exitvalue = 0; if (type.equals("master")) { cmd = "/usr/bin/ypwhich -m printers.conf.byname"; } else { cmd = "/usr/bin/ypwhich"; } syscmd = new SysCommand(); syscmd.exec(cmd); exitvalue = syscmd.getExitValue(); if ((exitvalue != 0) && (type.equals("master"))) { Debug.message("SVR: printers.conf NIS host not found."); Debug.message("SVR: Looking for NIS passwd host."); cmd = "/usr/bin/ypwhich -m passwd"; syscmd = new SysCommand(); syscmd.exec(cmd); exitvalue = syscmd.getExitValue(); } if (exitvalue != 0) { Debug.error("SVR: NIS server could not be found"); String err = syscmd.getError(); syscmd = null; throw new pmNSNotConfiguredException(err); } String o = syscmd.getOutput(); syscmd = null; if (o == null) { throw new pmCmdFailedException(syscmd.getError()); } o = o.trim(); return (new String(o)); } /* * Return the name of the first server listed by ldapclient */ public synchronized static String getLDAPMaster() throws Exception { SysCommand syscmd = null; String cmd = null; int exitvalue = 0; /* ldapclient will hang if we are not root. */ if (!DoPrinterNS.isRoot()) { Debug.error("SVR: Not root. Can't determine LDAP master."); return null; } cmd = "/usr/sbin/ldapclient list"; syscmd = new SysCommand(); syscmd.exec(cmd); exitvalue = syscmd.getExitValue(); if (exitvalue != 0) { Debug.error("SVR: ldapclient failed."); Debug.error("SVR: " + syscmd.getError()); syscmd = null; return null; } String o = syscmd.getOutput(); syscmd = null; String master = DoPrinterView.getToken(o + "\n", "NS_LDAP_SERVERS="); if (master == null) { Debug.error("SVR: ldapclient did not return NS_LDAP_SERVERS."); syscmd = null; return null; } /* Extract the first address from the NS_LDAP_SERVERS list */ for (int i = 0; i < master.length(); i++) { if ((master.charAt(i) == ',') || (master.charAt(i) == ' ') || (master.charAt(i) == '\t')) { master = master.substring(0, i); break; } } master = master.trim(); return (new String(master)); } /* * Get a default admin DN. */ public synchronized static String getDefaultAdminDN() throws Exception { SysCommand syscmd = null; String cmd = null; int exitvalue = 0; try { String master = getLDAPMaster(); cmd = "/usr/bin/ldapsearch -h " + master + " -b o=NetScapeRoot o=NetscapeRoot"; syscmd = new SysCommand(); syscmd.exec(cmd); exitvalue = syscmd.getExitValue(); if (exitvalue == 0) { String on = syscmd.getOutput(); syscmd = null; if (on != null) { if (on.indexOf("NetscapeRoot") != -1) { return ("cn=Directory Manager"); } } } syscmd = null; } catch (Exception e) { Debug.message("SVR: ldapsearch for NSDS failed. Continuing"); } cmd = "/usr/bin/ldaplist -d printers"; syscmd = new SysCommand(); syscmd.exec(cmd); exitvalue = syscmd.getExitValue(); if (exitvalue != 0) { Debug.error("SVR: ldaplist printers failed."); Debug.error("SVR: " + syscmd.getError()); syscmd = null; return null; } String o = syscmd.getOutput(); syscmd = null; if (o == null) { return null; } String dn = DoPrinterView.getToken(o + "\n", "ou=printers,"); if (dn == null) { return null; } dn = "cn=admin," + dn; dn = dn.trim(); return (new String(dn)); } // // Check to see if a name service is configured // public synchronized static void isNSConfigured(String ns) throws Exception { Debug.message("SVR: Host.isNSConfigured() " + ns); int exitvalue; String cmd = null; String err = null; SysCommand syscmd = null; if (ns.equals("system")) { return; } else if (ns.equals("nis")) { cmd = "/usr/bin/ypwhich"; syscmd = new SysCommand(); syscmd.exec(cmd); exitvalue = syscmd.getExitValue(); err = syscmd.getError(); syscmd = null; if (exitvalue != 0) { throw new pmNSNotConfiguredException(err); } cmd = "/usr/bin/ypcat cred"; syscmd = new SysCommand(); syscmd.exec(cmd); exitvalue = syscmd.getExitValue(); syscmd = null; if (exitvalue == 0) { Debug.warning( "SVR: Unable to update this configuration."); throw new pmNSNotConfiguredException(); } } else if (ns.equals("ldap")) { /* * Check if the ldap-client is configured by first checking * if the config file exists and then invoking ldaplist * Note: we need to check if the config file exists before * invoking ldaplist so that we don't get its error message */ File ldapConfig = new File("/var/ldap/ldap_client_file"); if (ldapConfig.isFile()) { // Config file exists cmd = "/usr/bin/ldaplist -d printers"; syscmd = new SysCommand(); syscmd.exec(cmd); exitvalue = syscmd.getExitValue(); syscmd = null; if (exitvalue != 0) { throw new pmNSNotConfiguredException(); } } else { throw new pmNSNotConfiguredException(); } } else { throw new pmInternalErrorException( "Unkown name service " + ns); } } }