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  *
23  * ident	"%Z%%M%	%I%	%E% SMI"
24  *
25  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
26  * Use is subject to license terms.
27  *
28  * pmAuthOptions.java
29  * Prompt for root password from printmgr.
30  * This a helper for printmgr which echoes YES, NO, or CANCEL to stdout.
31  */
32 
33 package com.sun.admin.pm.client;
34 
35 import java.awt.*;
36 import java.awt.event.*;
37 import java.util.*;
38 import javax.swing.*;
39 import com.sun.admin.pm.server.*;
40 
41 
42 public class pmAuthOptions {
43 
main(String[] args)44     public static void main(String[] args) {
45 
46 	boolean done = false;
47 	String rv = "CANCEL";
48 
49 	    pmAuthMessage o = new pmAuthMessage(null,
50 		pmUtility.getResource("Authentication.required"),
51 		pmUtility.getResource("Root.access.is.required"));
52 	    o.setVisible(true);
53 	    switch (o.getValue()) {
54 		case JOptionPane.YES_OPTION:
55 			break;
56 
57 		case JOptionPane.NO_OPTION:
58 			System.out.println("NO");
59 			System.exit(0);
60 			break;
61 
62 		case JOptionPane.CANCEL_OPTION:
63 		default:
64 			System.out.println("CANCEL");
65 			System.exit(0);
66 			break;
67 	    }
68 
69 	while (!done) {
70 	    pmAuthLogin d = new pmAuthLogin(null,
71 			    pmUtility.getResource("Root.authentication"),
72 			    pmUtility.getResource("Enter.root.password"));
73 	    d.setVisible(true);
74 	    if (d.getValue() != JOptionPane.OK_OPTION)
75 		done = true;
76 	    else {
77 		boolean ok = false;
78 		String pw = new String(d.getPassword());
79 		try {
80 		    PrinterUtil.checkRootPasswd(pw);
81 		    ok = true;
82 		} catch (Exception x) {
83 
84 		}
85 		if (!ok) {
86 		    pmOKCancelDialog m = new pmOKCancelDialog(null,
87 				    pmUtility.getResource("Error"),
88 				    pmUtility.getResource("Invalid.password"));
89 		    m.setVisible(true);
90 		    if (m.getValue() != JOptionPane.OK_OPTION)
91 			done = true;
92 		} else {
93 		    done = true;
94 		    rv = "YES";
95 		}
96 	    }
97 	}
98 
99 	System.out.println(rv);
100 	System.exit(0);
101     }
102 
103 
104 }
105 
106 
107 /*
108  */
109 
110 class pmAuthLogin extends pmDialog {
111     private String theTag = null;
112 
113     protected pmButton okButton = null;
114     protected pmButton cancelButton = null;
115 
pmAuthLogin(JFrame f, String title, String msg)116     public pmAuthLogin(JFrame f, String title, String msg) {
117 
118 	super(f, title, true);		// modal
119 
120         JLabel l;
121         JPanel p;
122 
123         // initialize constraints
124         GridBagConstraints c = new GridBagConstraints();
125         c.gridx = 0;
126         c.gridy = GridBagConstraints.RELATIVE;
127         c.gridwidth = 1;
128         c.gridheight = 1;
129         c.insets = new Insets(10, 10, 10, 10);
130         c.anchor = GridBagConstraints.EAST;
131 
132         // top panel contains the desired message
133         p = new JPanel();
134         p.setLayout(new GridBagLayout());
135 
136         l = new JLabel(msg, SwingConstants.CENTER);
137         p.add(l, c);
138         this.getContentPane().add(p, "North");
139 
140 
141         // middle panel contains username and password
142         p = new JPanel();
143         p.setLayout(new GridBagLayout());
144 
145         l = new JLabel(pmUtility.getResource("Hostname:"),
146                         SwingConstants.RIGHT);
147         p.add(l, c);
148 
149         l = new JLabel(pmUtility.getResource("Password:"),
150                         SwingConstants.RIGHT);
151         p.add(l, c);
152 
153         passwordField = new JPasswordField(12);
154         passwordField.addActionListener(new ActionListener() {
155             public void actionPerformed(ActionEvent e) {
156                 okPressed();
157             }
158         });
159         l.setLabelFor(passwordField);
160 
161         // for consistency, don't implement this until all are...
162         // l.setDisplayedMnemonic(
163 	// 	pmUtility.getIntResource("Password.mnemonic"));
164 
165         c.gridx = 1;
166         c.weightx = 1.0;
167 
168         c.anchor = GridBagConstraints.WEST;
169 
170 	String hostname = null;
171 	try {
172 		hostname = (java.net.InetAddress.getLocalHost()).getHostName();
173 	} catch (java.net.UnknownHostException uhx) {
174 		System.out.println(uhx);
175 	}
176 
177         l = new JLabel(hostname, SwingConstants.LEFT);
178         p.add(l, c);
179 
180 
181         c.fill = GridBagConstraints.HORIZONTAL;
182         c.anchor = GridBagConstraints.CENTER;
183         c.gridy = GridBagConstraints.RELATIVE;
184 
185         p.add(passwordField, c);
186         passwordField.setEchoChar('*');
187 
188         this.getContentPane().add(p, "Center");
189 
190         // bottom panel contains buttons
191         c.gridx = 0;
192         c.weightx = 1.0;
193         c.weighty = 0.0;
194         c.gridwidth = GridBagConstraints.REMAINDER;
195         c.fill = GridBagConstraints.HORIZONTAL;
196         c.anchor = GridBagConstraints.CENTER;
197 
198         JPanel thePanel = new JPanel();
199 
200         okButton = new pmButton(
201             pmUtility.getResource("OK"));
202         okButton.setMnemonic(
203             pmUtility.getIntResource("OK.mnemonic"));
204         okButton.addActionListener(new ActionListener() {
205             public void actionPerformed(ActionEvent evt) {
206                 okPressed();
207             }
208         });
209         thePanel.add(okButton, c);
210 
211         cancelButton = new pmButton(
212             pmUtility.getResource("Cancel"));
213         cancelButton.setMnemonic(
214             pmUtility.getIntResource("Cancel.mnemonic"));
215         cancelButton.addActionListener(new ActionListener() {
216             public void actionPerformed(ActionEvent evt) {
217                 cancelPressed();
218             }
219         });
220         thePanel.add(cancelButton, c);
221 
222         this.getContentPane().add(thePanel, "South");
223 
224         addWindowListener(new WindowAdapter() {
225             public void windowClosing(WindowEvent e) {
226                 returnValue = JOptionPane.CANCEL_OPTION;
227                 setVisible(false);
228             }
229         });
230 
231         // handle Esc as cancel in any case
232         this.getRootPane().registerKeyboardAction(new ActionListener() {
233             public void actionPerformed(ActionEvent e) {
234                 Debug.message("CLNT:  default cancel action");
235                 cancelPressed();
236             }},
237             KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false),
238             JComponent.WHEN_IN_FOCUSED_WINDOW);
239 
240         // lay out the dialog
241         this.pack();
242 
243         // set focus and defaults after packing...
244         // this.getRootPane().setDefaultButton(okButton);
245         okButton.setAsDefaultButton();
246 
247         passwordField.requestFocus();
248     }
249 
getValue()250     public int getValue() {
251         return returnValue;
252     }
253 
254 
okPressed()255     public void okPressed() {
256         returnValue = JOptionPane.OK_OPTION;
257         setVisible(false);
258     }
259 
cancelPressed()260     public void cancelPressed() {
261        	returnValue = JOptionPane.CANCEL_OPTION;
262        	setVisible(false);
263     }
264 
265 
clearPressed()266     public void clearPressed() {
267         passwordField.setText("");
268     }
269 
getPassword()270     public char[] getPassword() {
271 	return passwordField.getPassword();
272     }
273 
274 
275     public JPasswordField passwordField = null;
276 
277     protected int returnValue = JOptionPane.CANCEL_OPTION;
278 
279 }
280 
281 
282 class pmAuthMessage extends pmDialog {
283     private String theTag = null;
284 
285     protected pmButton authButton = null;
286     protected pmButton cancelButton = null;
287     protected pmButton contButton = null;
288 
pmAuthMessage(JFrame f, String title, String msg)289     public pmAuthMessage(JFrame f, String title, String msg) {
290 
291 	super(f, title, true);		// modal
292 
293         JPanel p;
294 
295         // initialize constraints
296         GridBagConstraints c = new GridBagConstraints();
297         c.gridx = 0;
298         c.gridy = GridBagConstraints.RELATIVE;
299         c.gridwidth = 1;
300         c.gridheight = 1;
301         c.insets = new Insets(10, 10, 10, 10);
302         c.anchor = GridBagConstraints.EAST;
303 
304         // top panel contains the desired message
305         p = new JPanel();
306         p.setLayout(new GridBagLayout());
307 
308 
309         JList l = new JList() {
310             public boolean isFocusable() {
311                 return false;
312             }
313         };
314 	// pathetic hacks to make the list look the same as a label
315 	JLabel tmp = new JLabel();
316         l.setBackground(tmp.getBackground());
317         l.setForeground(tmp.getForeground());
318 	l.setFont(tmp.getFont());
319 	tmp = null;
320 	Vector v = new Vector();
321         if (msg != null) {
322             StringTokenizer st = new StringTokenizer(msg, "\n", false);
323             try {
324                 while (st.hasMoreTokens())
325                     v.addElement(st.nextToken());
326             } catch (Exception x) {
327             }
328             l.setListData(v);
329         }
330 
331 
332         p.add(l, c);
333         this.getContentPane().add(p, "North");
334 
335 
336         // bottom panel contains buttons
337         c.gridx = 0;
338         c.weightx = 1.0;
339         c.weighty = 0.0;
340         c.gridwidth = GridBagConstraints.REMAINDER;
341         c.fill = GridBagConstraints.HORIZONTAL;
342         c.anchor = GridBagConstraints.CENTER;
343 
344         JPanel thePanel = new JPanel();
345 
346         authButton = new pmButton(pmUtility.getResource("Authenticate"));
347         authButton.setMnemonic(
348 			pmUtility.getIntResource("Authenticate.mnemonic"));
349         authButton.addActionListener(new ActionListener() {
350             public void actionPerformed(ActionEvent evt) {
351                 authPressed();
352             }
353         });
354         thePanel.add(authButton, c);
355 
356         contButton = new pmButton(pmUtility.getResource("Continue"));
357         contButton.setMnemonic(pmUtility.getIntResource("Continue.mnemonic"));
358         contButton.addActionListener(new ActionListener() {
359             public void actionPerformed(ActionEvent evt) {
360                 contPressed();
361             }
362         });
363         thePanel.add(contButton, c);
364 
365         cancelButton = new pmButton(pmUtility.getResource("Cancel"));
366         cancelButton.setMnemonic(pmUtility.getIntResource("Cancel.mnemonic"));
367         cancelButton.addActionListener(new ActionListener() {
368             public void actionPerformed(ActionEvent evt) {
369                 cancelPressed();
370             }
371         });
372         thePanel.add(cancelButton, c);
373 
374         this.getContentPane().add(thePanel, "South");
375 
376         addWindowListener(new WindowAdapter() {
377             public void windowClosing(WindowEvent e) {
378                 returnValue = JOptionPane.CANCEL_OPTION;
379                 setVisible(false);
380             }
381         });
382 
383         // handle Esc as cancel in any case
384         this.getRootPane().registerKeyboardAction(new ActionListener() {
385             public void actionPerformed(ActionEvent e) {
386                 Debug.message("CLNT:  default cancel action");
387                 cancelPressed();
388             }},
389             KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false),
390             JComponent.WHEN_IN_FOCUSED_WINDOW);
391 
392         // lay out the dialog
393         this.pack();
394 
395         // set focus and defaults after packing...
396         authButton.setAsDefaultButton();
397 
398     }
399 
getValue()400     public int getValue() {
401         return returnValue;
402     }
403 
404 
authPressed()405     public void authPressed() {
406         returnValue = JOptionPane.YES_OPTION;
407         setVisible(false);
408     }
409 
cancelPressed()410     public void cancelPressed() {
411        	returnValue = JOptionPane.CANCEL_OPTION;
412        	setVisible(false);
413     }
414 
415 
contPressed()416     public void contPressed() {
417        	returnValue = JOptionPane.NO_OPTION;
418        	setVisible(false);
419     }
420 
421     protected int returnValue = JOptionPane.CANCEL_OPTION;
422 
423 }
424