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, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright (c) 2001 by Sun Microsystems, Inc. 24 * All rights reserved. 25 */ 26 package com.sun.dhcpmgr.cli.dhcpconfig; 27 28 import com.sun.dhcpmgr.cli.common.DhcpCliFunction; 29 import com.sun.dhcpmgr.cli.common.Console; 30 import com.sun.dhcpmgr.data.ValidationException; 31 import com.sun.dhcpmgr.data.Network; 32 import com.sun.dhcpmgr.data.Macro; 33 import com.sun.dhcpmgr.data.DhcpdOptions; 34 35 /** 36 * The main class for the "unconfigure DHCP server" functionality of 37 * dhcpconfig. 38 */ 39 public class UnconfigureDhcp extends DhcpCfgFunction { 40 41 /** 42 * The valid options associated with unconfiguring a DHCP server. 43 */ 44 static final int supportedOptions[] = { 45 DhcpCfg.FORCE, 46 DhcpCfg.DELETE_TABLES 47 }; 48 49 /** 50 * Constructs a UnconfigureDhcp object. 51 */ 52 public UnconfigureDhcp() { 53 54 validOptions = supportedOptions; 55 56 } // constructor 57 58 /** 59 * Returns the option flag for this function. 60 * @returns the option flag for this function. 61 */ 62 public int getFunctionFlag() { 63 return (DhcpCfg.UNCONFIGURE_DHCP); 64 } 65 66 /** 67 * Executes the "unconfigure DHCP server" functionality. 68 * @return DhcpCfg.SUCCESS or DhcpCfg.FAILURE 69 */ 70 public int execute() { 71 72 // Confirm? 73 // 74 if (!options.isSet(DhcpCfg.FORCE)) { 75 String confirmationMsg = getString("unconfigure_confirmation"); 76 String affirmative = getString("affirmative"); 77 String negative = getString("negative"); 78 boolean doit = Console.promptUser(confirmationMsg, affirmative, 79 negative, true); 80 if (!doit) { 81 return (DhcpCfg.FAILURE); 82 } 83 } 84 85 // Retrieve the configuration values from the server. 86 // 87 boolean isRelay = false; 88 try { 89 DhcpdOptions opts = getSvcMgr().readDefaults(); 90 isRelay = opts.isRelay(); 91 } catch (Throwable e) { 92 Object [] arguments = new Object[1]; 93 arguments[0] = getMessage(e); 94 printErrMessage(getString("unconfigure_read_conf_error"), 95 arguments); 96 return (DhcpCfg.FAILURE); 97 } 98 99 // Shut down the server if it is running 100 // 101 try { 102 if (getSvcMgr().isServerRunning()) { 103 getSvcMgr().shutdown(); 104 printMessage(getString("unconfigure_shutdown_progress")); 105 } else { 106 printMessage(getString("unconfigure_no_shutdown_progress")); 107 } 108 } catch (Throwable e) { 109 Object [] arguments = new Object[1]; 110 arguments[0] = getMessage(e); 111 printErrMessage(getString("unconfigure_shutdown_error"), 112 arguments); 113 } 114 115 // Should we delete the dhcptab and the network tables? 116 // 117 boolean deleteTables = options.isSet(DhcpCfg.DELETE_TABLES); 118 119 // If this server is just acting as a relay then we don't need to 120 // clean up the dhcptab or the networks. 121 // 122 if (!isRelay) { 123 // Delete the server macro. 124 // 125 try { 126 Macro serverMacro = 127 new Macro(getSvcMgr().getShortServerName()); 128 getDhcptabMgr().deleteRecord(serverMacro, false); 129 printMessage(getString("unconfigure_server_macro_progress")); 130 } catch (Throwable e) { 131 Object [] arguments = new Object[1]; 132 arguments[0] = getMessage(e); 133 printErrMessage(getString("unconfigure_server_macro_error"), 134 arguments); 135 } 136 137 // Delete the dhcptab and the network tables if requested. 138 // 139 if (deleteTables) { 140 // Go get a list of the network tables to delete. 141 // 142 Network[] networks = new Network[0]; 143 try { 144 networks = getNetMgr().getNetworks(); 145 if (networks == null) { 146 networks = new Network[0]; 147 } 148 } catch (Throwable e) { 149 Object [] arguments = new Object[1]; 150 arguments[0] = getMessage(e); 151 printErrMessage(getString("unconfigure_get_nets_error"), 152 arguments); 153 } 154 155 // Delete the network tables 156 // 157 for (int i = 0; i < networks.length; ++i) { 158 String netString = networks[i].toString(); 159 try { 160 getNetMgr().deleteNetwork(netString, false); 161 Object [] arguments = new Object[1]; 162 arguments[0] = netString; 163 printMessage(getString("unconfigure_network_progress"), 164 arguments); 165 } catch (Throwable e) { 166 Object [] arguments = new Object[2]; 167 arguments[0] = netString; 168 arguments[1] = getMessage(e); 169 printErrMessage(getString("unconfigure_network_error"), 170 arguments); 171 } 172 } 173 174 // Delete the dhcptab 175 // 176 try { 177 getDhcptabMgr().deleteDhcptab(); 178 printMessage(getString("unconfigure_dhcptab_progress")); 179 } catch (Throwable e) { 180 Object [] arguments = new Object[1]; 181 arguments[0] = getMessage(e); 182 printErrMessage(getString("unconfigure_dhcptab_error"), 183 arguments); 184 } 185 } 186 } 187 188 // Remove the configuration file 189 // 190 try { 191 getSvcMgr().removeDefaults(); 192 printMessage(getString("unconfigure_remove_conf_progress")); 193 } catch (Throwable e) { 194 Object [] arguments = new Object[1]; 195 arguments[0] = getMessage(e); 196 printErrMessage(getString("unconfigure_remove_conf_error"), 197 arguments); 198 } 199 200 return (DhcpCfg.SUCCESS); 201 202 } // execute 203 204 } // UnconfigureDhcp