Login authentication for xCAT-web now works, using Jarrod's code
git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@2383 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
| @@ -10,20 +10,20 @@ | ||||
| <UL> | ||||
|   <LI><A href="man1/xcat.1.html">xCAT 2 Man Pages</A> | ||||
|   <LI><A href="man5/xcatdb.5.html">xCAT 2 Database Table Descriptions</A> | ||||
|   <LI><A href="xCAT2.0.pdf">xCAT 2.0 Linux Cookbook</A> - getting started with <FONT size="+1">installing</FONT> and setting up xCAT on Linux | ||||
|   <LI><A href="xCAT2onAIX.pdf">xCAT 2.0 AIX Cookbook</A> - getting started with installing and setting up xCAT on AIX | ||||
|   <LI><A href="xCAT2.pdf">xCAT 2 Linux Cookbook</A> - getting started with installing and setting up xCAT on Linux | ||||
|   <LI><A href="xCAT2onAIX.pdf">xCAT 2 AIX Cookbook</A> - getting started with installing and setting up xCAT on AIX | ||||
| </UL> | ||||
|  | ||||
| <H2>xCAT 2 on the Internet</H2> | ||||
| <UL> | ||||
|   <LI><A href="http://xcat.sf.net/xCAT2-Install-Guide.pdf">Tutorial for installing xCAT and deploying a stateless node</A> | ||||
|   <LI><A href="http://xcat.sourceforge.net/yum/">Download xCAT 2.0</A> | ||||
|   <LI><A href="http://xcat.sourceforge.net/">xCAT 2 web site</A> | ||||
|   <LI><A href="http://xcat.sourceforge.net/yum/download.html">Download xCAT 2</A> | ||||
|   <LI><A href="https://sourceforge.net/projects/xcat/">The xCAT Project on SourceForge</A> | ||||
|   <LI><A href="http://xcat.svn.sourceforge.net/svnroot/xcat/xcat-core/trunk/">xCAT 2.0 Source in Subversion</A> | ||||
|   <LI><A href="http://xcat.wiki.sourceforge.net/">xCAT 2.0 Wiki</A> | ||||
|   <LI><A href="https://sourceforge.net/tracker/?group_id=208749&atid=1006945">xCAT 2.0 Bugs in Tracker</A> | ||||
|   <LI><A href="http://xcat.wiki.sourceforge.net/">xCAT 2 Wiki</A> | ||||
|   <LI><A href="http://xcat.svn.sourceforge.net/svnroot/xcat/xcat-core/trunk/">xCAT 2 Source in Subversion</A> | ||||
|   <LI><A href="https://sourceforge.net/tracker/?group_id=208749&atid=1006945">xCAT 2 Bugs in Tracker</A> | ||||
|   <LI><A href="http://xcat.org/mailman/listinfo/xcat-user">xCAT Mailing List</A> | ||||
|   <LI>xCAT 2.0 Open Source License: <A href="http://www.opensource.org/licenses/eclipse-1.0.php">Eclipse Public License</A> | ||||
|   <LI>xCAT 2 Open Source License: <A href="http://www.opensource.org/licenses/eclipse-1.0.php">Eclipse Public License</A> | ||||
|   <LI>xCAT 1.3 Links at <A href="http://xcat.org/">xcat.org</A> | ||||
| </UL> | ||||
| </BODY> | ||||
|   | ||||
| @@ -6,7 +6,7 @@ $TOPDIR = '..'; | ||||
| require_once "$TOPDIR/lib/functions.php"; | ||||
|  | ||||
| insertHeader('xCAT Database', array('db.css'), | ||||
| 			array('db.js',"$TOPDIR/jq/jquery.min.js","$TOPDIR/jq/jquery.jeditable.mini.js"), | ||||
| 			array('db.js',"$TOPDIR/jq/jquery.jeditable.mini.js"), | ||||
| 			array('config','db')); | ||||
|  | ||||
| echo "<div id=content align=center>\n"; | ||||
|   | ||||
| @@ -8,7 +8,7 @@ require_once "$TOPDIR/lib/functions.php"; | ||||
|  | ||||
| insertHeader('Preferences', NULL, NULL, array('config','prefs')); | ||||
|  | ||||
| echo "<FORM NAME=prefs onsubmit='return false'><TABLE class=inner_table cellspacing=0 cellpadding=5><TBODY>\n"; | ||||
| echo "<FORM NAME=prefs onsubmit='return false'><TABLE cellspacing=0 cellpadding=5><TBODY>\n"; | ||||
|  | ||||
| //foreach ($_COOKIE as $key => $value) { echo "<p>$key: {$_COOKIE[$key]}</p>\n"; } | ||||
|  | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/images/throbber.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.8 KiB | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/222222_11x11_icon_arrows_leftright.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 58 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/222222_11x11_icon_arrows_updown.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 56 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/222222_11x11_icon_close.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 62 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/222222_11x11_icon_doc.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 64 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/222222_11x11_icon_folder_closed.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 61 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/222222_11x11_icon_folder_open.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 61 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/222222_11x11_icon_minus.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 56 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/222222_11x11_icon_plus.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 61 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/222222_11x11_icon_resize_se.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 61 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/222222_7x7_arrow_down.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 52 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/222222_7x7_arrow_left.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 53 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/222222_7x7_arrow_right.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 53 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/222222_7x7_arrow_up.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 52 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/888888_11x11_icon_arrows_leftright.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 58 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/888888_11x11_icon_arrows_updown.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 56 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/888888_11x11_icon_close.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 62 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/888888_11x11_icon_doc.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 64 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/888888_11x11_icon_folder_closed.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 61 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/888888_11x11_icon_folder_open.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 61 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/888888_11x11_icon_minus.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 56 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/888888_11x11_icon_plus.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 61 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/888888_7x7_arrow_down.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 52 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/888888_7x7_arrow_left.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 53 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/888888_7x7_arrow_right.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 53 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/888888_7x7_arrow_up.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 52 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/8ab9ff_40x100_textures_02_glass_50.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 219 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/d8d8d8_40x100_textures_02_glass_90.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 221 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/e0e0e0_40x100_textures_02_glass_80.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 214 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/f3f3f3_40x100_textures_01_flat_0.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 180 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/ffffff_11x11_icon_arrows_leftright.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 58 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/ffffff_11x11_icon_arrows_updown.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 56 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/ffffff_11x11_icon_close.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 62 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/ffffff_11x11_icon_doc.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 64 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/ffffff_11x11_icon_folder_closed.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 61 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/ffffff_11x11_icon_folder_open.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 61 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/ffffff_11x11_icon_minus.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 56 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/ffffff_11x11_icon_plus.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 61 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/ffffff_7x7_arrow_down.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 52 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/ffffff_7x7_arrow_left.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 53 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/ffffff_7x7_arrow_right.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 53 B | 
							
								
								
									
										
											BIN
										
									
								
								xCAT-web/jq/theme/images/ffffff_7x7_arrow_up.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 52 B | 
							
								
								
									
										832
									
								
								xCAT-web/jq/theme/jquery-ui-theme.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,832 @@ | ||||
| /* | ||||
|  * jQuery UI screen structure and presentation | ||||
|  * This CSS file was generated by ThemeRoller, a Filament Group Project for jQuery UI | ||||
|  * Author: Scott Jehl, scott@filamentgroup.com, http://www.filamentgroup.com | ||||
|  * Visit ThemeRoller.com | ||||
| */ | ||||
|  | ||||
| /* | ||||
|  * Note: If your ThemeRoller settings have a font size set in ems, your components will scale according to their parent element's font size. | ||||
|  * As a rule of thumb, set your body's font size to 62.5% to make 1em = 10px. | ||||
|  * body {font-size: 62.5%;} | ||||
| */ | ||||
|  | ||||
|  | ||||
|  | ||||
| /*UI accordion*/ | ||||
| .ui-accordion { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; | ||||
| 	font-size: 1.2em; | ||||
| 	border-bottom: 1px solid #cccccc; | ||||
| } | ||||
| .ui-accordion-group { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	border: 1px solid #cccccc; | ||||
| 	border-bottom: none; | ||||
| } | ||||
| .ui-accordion-header { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	cursor: pointer; | ||||
| 	background: #e0e0e0 url(images/e0e0e0_40x100_textures_02_glass_80.png) 0 50% repeat-x; | ||||
| } | ||||
| .ui-accordion-header a { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	display: block; | ||||
| 	font-size: 1em; | ||||
| 	font-weight: normal; | ||||
| 	text-decoration: none; | ||||
| 	padding: .5em .5em .5em 1.7em; | ||||
| 	color: #444444; | ||||
| 	background: url(images/888888_7x7_arrow_right.gif) .5em 50% no-repeat; | ||||
| } | ||||
| .ui-accordion-header a:hover { | ||||
| 	background: url(images/222222_7x7_arrow_right.gif) .5em 50% no-repeat; | ||||
| 	color: #111111; | ||||
| } | ||||
| .ui-accordion-header:hover { | ||||
| 	background: #d8d8d8 url(images/d8d8d8_40x100_textures_02_glass_90.png) 0 50% repeat-x; | ||||
| 	color: #111111; | ||||
| } | ||||
| .selected .ui-accordion-header, .selected .ui-accordion-header:hover { | ||||
| 	background: #8ab9ff url(images/8ab9ff_40x100_textures_02_glass_50.png) 0 50% repeat-x; | ||||
| } | ||||
| .selected .ui-accordion-header a, .selected .ui-accordion-header a:hover { | ||||
| 	color: #000000; | ||||
| 	background: url(images/ffffff_7x7_arrow_down.gif) .5em 50% no-repeat; | ||||
| } | ||||
| .ui-accordion-content { | ||||
| 	padding: 1.5em 1.7em;	 | ||||
| 	background: #f3f3f3 url(images/f3f3f3_40x100_textures_01_flat_0.png) 0 0 repeat-x; | ||||
| 	color: #362b36; | ||||
| 	font-size: 1em; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| /*UI tabs*/ | ||||
| .ui-tabs-nav { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; | ||||
| 	font-size: 1.2em; | ||||
| 	float: left; | ||||
| 	position: relative; | ||||
| 	z-index: 1; | ||||
| 	border-right: 1px solid #cccccc; | ||||
| 	bottom: -1px; | ||||
| } | ||||
| .ui-tabs-nav-item { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	float: left; | ||||
| 	border: 1px solid #cccccc; | ||||
| 	border-right: none; | ||||
| } | ||||
| .ui-tabs-nav-item a { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	float: left; | ||||
| 	font-size: 1em; | ||||
| 	font-weight: normal; | ||||
| 	text-decoration: none; | ||||
| 	padding: .5em 1.7em; | ||||
| 	color: #444444; | ||||
| 	background: #e0e0e0 url(images/e0e0e0_40x100_textures_02_glass_80.png) 0 50% repeat-x; | ||||
| } | ||||
| .ui-tabs-nav-item a:hover { | ||||
| 	background: #d8d8d8 url(images/d8d8d8_40x100_textures_02_glass_90.png) 0 50% repeat-x; | ||||
| 	color: #111111; | ||||
| } | ||||
| .ui-tabs-selected { | ||||
| 	border-bottom-color: #8ab9ff; | ||||
| } | ||||
| .ui-tabs-selected a, .ui-tabs-selected a:hover { | ||||
| 	background: #8ab9ff url(images/8ab9ff_40x100_textures_02_glass_50.png) 0 50% repeat-x; | ||||
| 	color: #000000; | ||||
| } | ||||
| .ui-tabs-panel { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; | ||||
| 	clear:left; | ||||
| 	border: 1px solid #cccccc; | ||||
| 	background: #f3f3f3 url(images/f3f3f3_40x100_textures_01_flat_0.png) 0 0 repeat-x; | ||||
| 	color: #362b36; | ||||
| 	padding: 1.5em 1.7em;	 | ||||
| 	font-size: 1.2em; | ||||
| } | ||||
| .ui-tabs-hide { | ||||
| 	display: none;/* for accessible hiding: position: absolute; left: -99999999px*/; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| /*slider*/ | ||||
| .ui-slider { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; | ||||
| 	font-size: 1.2em; | ||||
| 	background: #f3f3f3 url(images/f3f3f3_40x100_textures_01_flat_0.png) 0 0 repeat-x; | ||||
| 	border: 1px solid #dddddd; | ||||
| 	height: .8em; | ||||
| 	position: relative; | ||||
| } | ||||
| .ui-slider-handle { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	position: absolute; | ||||
| 	z-index: 2; | ||||
| 	top: -3px; | ||||
| 	width: 1.2em; | ||||
| 	height: 1.2em; | ||||
| 	background: #e0e0e0 url(images/e0e0e0_40x100_textures_02_glass_80.png) 0 50% repeat-x; | ||||
| 	border: 1px solid #cccccc; | ||||
| } | ||||
| .ui-slider-handle:hover { | ||||
| 	background: #d8d8d8 url(images/d8d8d8_40x100_textures_02_glass_90.png) 0 50% repeat-x; | ||||
| 	border: 1px solid #888888; | ||||
| } | ||||
| .ui-slider-handle-active, .ui-slider-handle-active:hover { | ||||
| 	background: #8ab9ff url(images/8ab9ff_40x100_textures_02_glass_50.png) 0 50% repeat-x; | ||||
| 	border: 1px solid #2694e8; | ||||
| } | ||||
| .ui-slider-range { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	height: .8em; | ||||
| 	background: #d8d8d8 url(images/d8d8d8_40x100_textures_02_glass_90.png) 0 50% repeat-x; | ||||
| 	position: absolute; | ||||
| 	border: 1px solid #cccccc; | ||||
| 	border-left: 0; | ||||
| 	border-right: 0; | ||||
| 	top: -1px; | ||||
| 	z-index: 1; | ||||
| 	opacity:.7; | ||||
| 	filter:Alpha(Opacity=70); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| /*dialog*/ | ||||
| .ui-dialog { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; | ||||
| 	font-size: 1.2em; | ||||
| 	background: #f3f3f3 url(images/f3f3f3_40x100_textures_01_flat_0.png) 0 0 repeat-x; | ||||
| 	color: #362b36; | ||||
| 	border: 4px solid #dddddd; | ||||
| 	position: relative; | ||||
| } | ||||
| .ui-resizable-handle { | ||||
| 	position: absolute; | ||||
| 	font-size: 0.1px; | ||||
| 	z-index: 99999; | ||||
| } | ||||
| .ui-resizable .ui-resizable-handle { | ||||
| 	display: block;  | ||||
| } | ||||
| body .ui-resizable-disabled .ui-resizable-handle { display: none; } /* use 'body' to make it more specific (css order) */ | ||||
| body .ui-resizable-autohide .ui-resizable-handle { display: none; } /* use 'body' to make it more specific (css order) */ | ||||
| .ui-resizable-n {  | ||||
| 	cursor: n-resize;  | ||||
| 	height: 7px;  | ||||
| 	width: 100%;  | ||||
| 	top: -5px;  | ||||
| 	left: 0px;   | ||||
| } | ||||
| .ui-resizable-s {  | ||||
| 	cursor: s-resize;  | ||||
| 	height: 7px;  | ||||
| 	width: 100%;  | ||||
| 	bottom: -5px;  | ||||
| 	left: 0px;  | ||||
| } | ||||
| .ui-resizable-e {  | ||||
| 	cursor: e-resize;  | ||||
| 	width: 7px;  | ||||
| 	right: -5px;  | ||||
| 	top: 0px;  | ||||
| 	height: 100%;  | ||||
| } | ||||
| .ui-resizable-w {  | ||||
| 	cursor: w-resize;  | ||||
| 	width: 7px;  | ||||
| 	left: -5px;  | ||||
| 	top: 0px;  | ||||
| 	height: 100%; | ||||
| } | ||||
| .ui-resizable-se {  | ||||
| 	cursor: se-resize;  | ||||
| 	width: 13px;  | ||||
| 	height: 13px;  | ||||
| 	right: 0px;  | ||||
| 	bottom: 0px;  | ||||
| 	background: url(images/222222_11x11_icon_resize_se.gif) no-repeat 0 0; | ||||
| } | ||||
| .ui-resizable-sw {  | ||||
| 	cursor: sw-resize;  | ||||
| 	width: 9px;  | ||||
| 	height: 9px;  | ||||
| 	left: 0px;  | ||||
| 	bottom: 0px;   | ||||
| } | ||||
| .ui-resizable-nw {  | ||||
| 	cursor: nw-resize;  | ||||
| 	width: 9px;  | ||||
| 	height: 9px;  | ||||
| 	left: 0px;  | ||||
| 	top: 0px;  | ||||
| } | ||||
| .ui-resizable-ne {  | ||||
| 	cursor: ne-resize;  | ||||
| 	width: 9px;  | ||||
| 	height: 9px;  | ||||
| 	right: 0px;  | ||||
| 	top: 0px;  | ||||
| } | ||||
| .ui-dialog-titlebar { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	padding: .5em 1.5em .5em 1em; | ||||
| 	color: #444444; | ||||
| 	background: #e0e0e0 url(images/e0e0e0_40x100_textures_02_glass_80.png) 0 50% repeat-x; | ||||
| 	border-bottom: 1px solid #cccccc; | ||||
| 	font-size: 1em; | ||||
| 	font-weight: normal; | ||||
| 	position: relative; | ||||
| } | ||||
| .ui-dialog-title {} | ||||
| .ui-dialog-titlebar-close { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	background: url(images/888888_11x11_icon_close.gif) 0 0 no-repeat; | ||||
| 	position: absolute; | ||||
| 	right: 8px; | ||||
| 	top: .7em; | ||||
| 	width: 11px; | ||||
| 	height: 11px; | ||||
| 	z-index: 100; | ||||
| } | ||||
| .ui-dialog-titlebar-close-hover, .ui-dialog-titlebar-close:hover { | ||||
| 	background: url(images/222222_11x11_icon_close.gif) 0 0 no-repeat; | ||||
| } | ||||
| .ui-dialog-titlebar-close:active { | ||||
| 	background: url(images/ffffff_11x11_icon_close.gif) 0 0 no-repeat; | ||||
| } | ||||
| .ui-dialog-titlebar-close span { | ||||
| 	display: none; | ||||
| } | ||||
| .ui-dialog-content { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	color: #362b36; | ||||
| 	padding: 1.5em 1.7em;	 | ||||
| } | ||||
| .ui-dialog-buttonpane { | ||||
| 	position: absolute; | ||||
| 	bottom: 0; | ||||
| 	width: 100%; | ||||
| 	text-align: left; | ||||
| 	border-top: 1px solid #dddddd; | ||||
| 	background: #f3f3f3; | ||||
| } | ||||
| .ui-dialog-buttonpane button { | ||||
| 	margin: .5em 0 .5em 8px; | ||||
| 	color: #444444; | ||||
| 	background: #e0e0e0 url(images/e0e0e0_40x100_textures_02_glass_80.png) 0 50% repeat-x; | ||||
| 	font-size: 1em; | ||||
| 	border: 1px solid #cccccc; | ||||
| 	cursor: pointer; | ||||
| 	padding: .2em .6em .3em .6em; | ||||
| 	line-height: 1.4em; | ||||
| } | ||||
| .ui-dialog-buttonpane button:hover { | ||||
| 	color: #111111; | ||||
| 	background: #d8d8d8 url(images/d8d8d8_40x100_textures_02_glass_90.png) 0 50% repeat-x; | ||||
| 	border: 1px solid #888888; | ||||
| } | ||||
| .ui-dialog-buttonpane button:active { | ||||
| 	color: #000000; | ||||
| 	background: #8ab9ff url(images/8ab9ff_40x100_textures_02_glass_50.png) 0 50% repeat-x; | ||||
| 	border: 1px solid #2694e8; | ||||
| } | ||||
| /* This file skins dialog */ | ||||
| .ui-dialog.ui-draggable .ui-dialog-titlebar, | ||||
| .ui-dialog.ui-draggable .ui-dialog-titlebar { | ||||
| 	cursor: move; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| /*datepicker*/ | ||||
| /* Main Style Sheet for jQuery UI date picker */ | ||||
| .ui-datepicker-div, .ui-datepicker-inline, #ui-datepicker-div { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; | ||||
| 	background: #f3f3f3 url(images/f3f3f3_40x100_textures_01_flat_0.png) 0 0 repeat-x; | ||||
| 	font-size: 1.2em; | ||||
| 	border: 4px solid #dddddd; | ||||
| 	width: 15.5em; | ||||
| 	padding: 2.5em .5em .5em .5em; | ||||
| 	position: relative; | ||||
| } | ||||
| .ui-datepicker-div, #ui-datepicker-div { | ||||
| 	z-index: 9999; /*must have*/ | ||||
| 	display: none; | ||||
| } | ||||
| .ui-datepicker-inline { | ||||
| 	float: left; | ||||
| 	display: block; | ||||
| } | ||||
| .ui-datepicker-control { | ||||
| 	display: none; | ||||
| } | ||||
| .ui-datepicker-current { | ||||
| 	display: none; | ||||
| } | ||||
| .ui-datepicker-next, .ui-datepicker-prev { | ||||
| 	position: absolute; | ||||
| 	left: .5em; | ||||
| 	top: .5em; | ||||
| 	background: #e0e0e0 url(images/e0e0e0_40x100_textures_02_glass_80.png) 0 50% repeat-x; | ||||
| } | ||||
| .ui-datepicker-next { | ||||
| 	left: 14.6em; | ||||
| } | ||||
| .ui-datepicker-next:hover, .ui-datepicker-prev:hover { | ||||
| 	background: #d8d8d8 url(images/d8d8d8_40x100_textures_02_glass_90.png) 0 50% repeat-x; | ||||
| } | ||||
| .ui-datepicker-next a, .ui-datepicker-prev a { | ||||
| 	text-indent: -999999px; | ||||
| 	width: 1.3em; | ||||
| 	height: 1.4em; | ||||
| 	display: block; | ||||
| 	font-size: 1em; | ||||
| 	background: url(images/888888_7x7_arrow_left.gif) 50% 50% no-repeat; | ||||
| 	border: 1px solid #cccccc; | ||||
| 	cursor: pointer; | ||||
| } | ||||
| .ui-datepicker-next a { | ||||
| 	background: url(images/888888_7x7_arrow_right.gif) 50% 50% no-repeat; | ||||
| } | ||||
| .ui-datepicker-prev a:hover { | ||||
| 	background: url(images/222222_7x7_arrow_left.gif) 50% 50% no-repeat; | ||||
| } | ||||
| .ui-datepicker-next a:hover { | ||||
| 	background: url(images/222222_7x7_arrow_right.gif) 50% 50% no-repeat; | ||||
| } | ||||
| .ui-datepicker-prev a:active { | ||||
| 	background: url(images/ffffff_7x7_arrow_left.gif) 50% 50% no-repeat; | ||||
| } | ||||
| .ui-datepicker-next a:active { | ||||
| 	background: url(images/ffffff_7x7_arrow_right.gif) 50% 50% no-repeat; | ||||
| } | ||||
| .ui-datepicker-header select { | ||||
| 	border: 1px solid #cccccc; | ||||
| 	color: #444444; | ||||
| 	background: #e0e0e0; | ||||
| 	font-size: 1em; | ||||
| 	line-height: 1.4em; | ||||
| 	position: absolute; | ||||
| 	top: .5em; | ||||
| 	margin: 0 !important; | ||||
| } | ||||
| .ui-datepicker-header option:focus, .ui-datepicker-header option:hover { | ||||
| 	background: #d8d8d8; | ||||
| } | ||||
| .ui-datepicker-header select.ui-datepicker-new-month { | ||||
| 	width: 7em; | ||||
| 	left: 2.2em; | ||||
| } | ||||
| .ui-datepicker-header select.ui-datepicker-new-year { | ||||
| 	width: 5em; | ||||
| 	left: 9.4em; | ||||
| } | ||||
| table.ui-datepicker { | ||||
| 	width: 15.5em; | ||||
| 	text-align: right; | ||||
| } | ||||
| table.ui-datepicker td a { | ||||
| 	padding: .1em .3em .1em 0; | ||||
| 	display: block; | ||||
| 	color: #444444; | ||||
| 	background: #e0e0e0 url(images/e0e0e0_40x100_textures_02_glass_80.png) 0 50% repeat-x; | ||||
| 	cursor: pointer; | ||||
| 	border: 1px solid #f3f3f3; | ||||
| } | ||||
| table.ui-datepicker td a:hover { | ||||
| 	border: 1px solid #888888; | ||||
| 	color: #111111; | ||||
| 	background: #d8d8d8 url(images/d8d8d8_40x100_textures_02_glass_90.png) 0 50% repeat-x; | ||||
| } | ||||
| table.ui-datepicker td a:active { | ||||
| 	border: 1px solid #2694e8; | ||||
| 	color: #000000; | ||||
| 	background: #8ab9ff url(images/8ab9ff_40x100_textures_02_glass_50.png) 0 50% repeat-x; | ||||
| } | ||||
| table.ui-datepicker .ui-datepicker-title-row td { | ||||
| 	padding: .3em 0; | ||||
| 	text-align: center; | ||||
| 	font-size: .9em; | ||||
| 	color: #362b36; | ||||
| 	text-transform: uppercase; | ||||
| } | ||||
| table.ui-datepicker .ui-datepicker-title-row td a { | ||||
| 	color: #362b36; | ||||
| } | ||||
| .ui-datepicker-cover { | ||||
| 	display: none; | ||||
| 	display/**/: block; | ||||
| 	position: absolute; | ||||
| 	z-index: -1; | ||||
| 	filter: mask(); | ||||
| 	top: -4px; | ||||
| 	left: -4px; | ||||
| 	width: 193px; | ||||
| 	height: 200px; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| /* ui-autocomplete */ | ||||
| .ui-autocomplete-results { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; | ||||
| 	font-size: 1.2em; | ||||
| 	z-index: 9999;	 | ||||
| } | ||||
| .ui-autocomplete-results ul, .ui-autocomplete-results li { | ||||
| 	margin: 0;  | ||||
| 	padding: 0;  | ||||
| 	list-style: none; | ||||
| } | ||||
| .ui-autocomplete-results ul { | ||||
| 	border: 1px solid #cccccc; | ||||
| 	background: #f3f3f3 url(images/f3f3f3_40x100_textures_01_flat_0.png) 0 0 repeat-x; | ||||
| 	color: #362b36; | ||||
| 	margin-bottom: -1px; | ||||
| } | ||||
| .ui-autocomplete-results li { | ||||
| 	padding: .4em .5em; | ||||
| 	color: #444444; | ||||
| 	font-size: 1em; | ||||
| 	font-weight: normal; | ||||
| 	position: relative; | ||||
| 	border-left: 0; | ||||
| 	border-right: 0; | ||||
| 	margin: 1px 0; | ||||
| } | ||||
| .ui-autocomplete-results li.ui-hover-state, .ui-autocomplete-results li.ui-active-state { | ||||
| 	margin: 0; | ||||
| } | ||||
| /*Paul - you could add classes for these first last states instead for ie6... */ | ||||
| .ui-autocomplete-results li:first-child { | ||||
| 	border-top: 0; | ||||
| } | ||||
| .ui-autocomplete-results li:last-child { | ||||
| 	border-bottom: 0; | ||||
| } | ||||
| .ui-autocomplete-results li.ui-autocomplete-over { | ||||
| 	border: 1px solid #888888; | ||||
| 	background: #d8d8d8 url(images/d8d8d8_40x100_textures_02_glass_90.png) 0 50% repeat-x; | ||||
| 	color: #111111 !important; | ||||
| } | ||||
| .ui-autocomplete-results li.ui-autocomplete-active { | ||||
| 	border: 1px solid #2694e8; | ||||
| 	background: #8ab9ff url(images/8ab9ff_40x100_textures_02_glass_50.png) 0 50% repeat-x; | ||||
| 	color: #000000 !important; | ||||
| 	outline: none; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| /*UI ProgressBar */ | ||||
| .ui-progressbar { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; | ||||
| 	font-size: 1.2em; | ||||
| 	background: #f3f3f3 url(images/f3f3f3_40x100_textures_01_flat_0.png) 0 0 repeat-x; | ||||
| 	border: 1px solid #dddddd; | ||||
| 	position: relative; | ||||
| } | ||||
| .ui-progressbar-bar { | ||||
| 	background: #e0e0e0 url(images/e0e0e0_40x100_textures_02_glass_80.png) 0 50% repeat-x; | ||||
| 	overflow: visible; | ||||
| 	position: relative; | ||||
| 	border: 1px solid #cccccc; | ||||
| 	margin-top: -1px; | ||||
| 	margin-left: -1px; | ||||
| 	margin-bottom: -1px; | ||||
| } | ||||
| .ui-progressbar-text { | ||||
| 	color: #444444; | ||||
| 	padding: .2em .5em; | ||||
| 	font-weight: normal; | ||||
| } | ||||
| .ui-progressbar-text-back { | ||||
| 	display: none; | ||||
| /*	position: absolute; | ||||
| 	top: 1px; | ||||
| 	left: 0px; | ||||
| 	font-weight: normal; | ||||
| 	color:#000; | ||||
| 	padding-top: 1px; | ||||
| 	padding-bottom: 1px; | ||||
| 	padding-right: 1px; | ||||
| */ | ||||
| } | ||||
| .ui-progressbar-disabled { | ||||
| 	opacity:.5; | ||||
| 	filter:Alpha(Opacity=50); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| /*UI Colorpicker */ | ||||
| .ui-colorpicker { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; | ||||
| 	font-size: 1.2em; | ||||
| 	background: #f3f3f3 url(images/f3f3f3_40x100_textures_01_flat_0.png) 0 0 repeat-x; | ||||
| 	border: 4px solid #dddddd; | ||||
| 	padding: 5px; | ||||
| 	width: 360px; | ||||
| 	position: relative; | ||||
| } | ||||
| .ui-colorpicker-color { | ||||
| 	float: left; | ||||
| 	width: 150px; | ||||
| 	height: 150px; | ||||
| 	margin-right: 15px; | ||||
| } | ||||
| .ui-colorpicker-color div { /* is this extra div needed? why not just .ui-colorpicker-color ? */ | ||||
| 	border: 1px solid #cccccc; | ||||
| 	height: 150px; | ||||
| 	background: url(images/_x_.); | ||||
| 	position: relative; | ||||
| } | ||||
| .ui-colorpicker-color div div {/* shouldn't this have a class like ui-colorpicker-selector ? */ | ||||
| 	width: 11px; | ||||
| 	height: 11px; | ||||
| 	background: url(images/_x_.); | ||||
| 	position: absolute; | ||||
| 	border: 0; | ||||
| 	margin: -5px 0 0 -5px; | ||||
| 	float: none; | ||||
| } | ||||
| .ui-colorpicker-hue { | ||||
| 	border: 1px solid #cccccc; | ||||
| 	float: left; | ||||
| 	width: 17px; | ||||
| 	height: 150px; | ||||
| 	background: url(images/_x_.); | ||||
| 	position: relative; | ||||
| 	margin-right: 15px; | ||||
| } | ||||
| .ui-colorpicker-hue div { | ||||
| 	background:transparent url(images/_x_.); /*this image should be themerollable*/ | ||||
| 	height:9px; | ||||
| 	left:-9px; | ||||
| 	margin:-4px 0 0; | ||||
| 	position:absolute; | ||||
| 	width:35px; | ||||
| 	cursor: ns-resize; | ||||
| } | ||||
| .ui-colorpicker-new-color, .ui-colorpicker-current-color { | ||||
| 	float: left; | ||||
| 	width: 6.5em; | ||||
| 	height: 30px; | ||||
| 	border: 1px solid #cccccc; | ||||
| 	margin-right: 5px; | ||||
| } | ||||
| .ui-colorpicker-current-color { | ||||
| 	margin-right: 0; | ||||
| } | ||||
|  | ||||
| .ui-colorpicker-field, .ui-colorpicker-hex { | ||||
| 	position: absolute; | ||||
| 	width: 6em; | ||||
| } | ||||
| .ui-colorpicker-field label, .ui-colorpicker-field input, | ||||
| .ui-colorpicker-hex label, .ui-colorpicker-hex input { | ||||
| 	font-size: 1em; | ||||
| 	color: #ffffff; | ||||
| } | ||||
| .ui-colorpicker-field label, .ui-colorpicker-hex label { | ||||
| 	width: 1em; | ||||
| 	margin-right: .3em; | ||||
| } | ||||
| .ui-colorpicker-field input, .ui-colorpicker-hex input { | ||||
| 	border: 1px solid #cccccc; | ||||
| 	width: 4.6em; | ||||
| } | ||||
| .ui-colorpicker-hex { | ||||
| 	left: 205px; | ||||
| 	top: 134px; | ||||
| } | ||||
| .ui-colorpicker-rgb-r { | ||||
| 	top: 52px; | ||||
| 	left: 205px; | ||||
| } | ||||
| .ui-colorpicker-rgb-g { | ||||
| 	top: 78px; | ||||
| 	left: 205px; | ||||
| } | ||||
| .ui-colorpicker-rgb-b { | ||||
| 	top: 105px; | ||||
| 	left: 205px; | ||||
| } | ||||
| .ui-colorpicker-hsb-h { | ||||
| 	top: 52px; | ||||
| 	left: 290px; | ||||
| } | ||||
| .ui-colorpicker-hsb-s { | ||||
| 	top: 78px; | ||||
| 	left: 290px; | ||||
| } | ||||
| .ui-colorpicker-hsb-b { | ||||
| 	top: 105px; | ||||
| 	left: 290px; | ||||
| } | ||||
|  | ||||
| .ui-colorpicker-field label { | ||||
| 	font-weight: normal; | ||||
| } | ||||
| .ui-colorpicker-field span { | ||||
| 	width: 7px; | ||||
| 	background: url(images/888888_11x11_icon_arrows_updown.gif) 50% 50% no-repeat; | ||||
| 	right: 5px; | ||||
| 	top: 0; | ||||
| 	height: 20px; | ||||
| 	position: absolute; | ||||
| } | ||||
| .ui-colorpicker-field span:hover { | ||||
| 	background: url(images/222222_11x11_icon_arrows_updown.gif) 50% 50% no-repeat; | ||||
| } | ||||
|  | ||||
| .ui-colorpicker-submit { | ||||
| 	right: 14px; | ||||
| 	top: 134px; | ||||
| 	position: absolute; | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| /* | ||||
| Generic ThemeRoller Classes | ||||
| >> Make your jQuery Components ThemeRoller-Compatible! | ||||
| */ | ||||
|  | ||||
| /*component global class*/ | ||||
| .ui-component { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| 	font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; | ||||
| 	font-size: 1.2em; | ||||
| } | ||||
| /*component content styles*/ | ||||
| .ui-component-content { | ||||
| 	border: 1px solid #dddddd; | ||||
| 	background: #f3f3f3 url(images/f3f3f3_40x100_textures_01_flat_0.png) 0 0 repeat-x; | ||||
| 	color: #362b36; | ||||
| } | ||||
| .ui-component-content a { | ||||
| 	color: #362b36; | ||||
| 	text-decoration: underline; | ||||
| } | ||||
| /*component states*/ | ||||
| .ui-default-state { | ||||
| 	border: 1px solid #cccccc; | ||||
| 	background: #e0e0e0 url(images/e0e0e0_40x100_textures_02_glass_80.png) 0 50% repeat-x; | ||||
| 	font-weight: normal; | ||||
| 	color: #444444 !important; | ||||
| } | ||||
| .ui-default-state a { | ||||
| 	color: #444444; | ||||
| } | ||||
| .ui-default-state:hover, .ui-hover-state { | ||||
| 	border: 1px solid #888888; | ||||
| 	background: #d8d8d8 url(images/d8d8d8_40x100_textures_02_glass_90.png) 0 50% repeat-x; | ||||
| 	font-weight: normal; | ||||
| 	color: #111111 !important; | ||||
| } | ||||
| .ui-hover-state a { | ||||
| 	color: #111111; | ||||
| } | ||||
| .ui-default-state:active, .ui-active-state { | ||||
| 	border: 1px solid #2694e8; | ||||
| 	background: #8ab9ff url(images/8ab9ff_40x100_textures_02_glass_50.png) 0 50% repeat-x; | ||||
| 	font-weight: normal; | ||||
| 	color: #000000 !important; | ||||
| 	outline: none; | ||||
| } | ||||
| .ui-active-state a { | ||||
| 	color: #000000; | ||||
| 	outline: none; | ||||
| } | ||||
| /*icons*/ | ||||
| .ui-arrow-right-default {background: url(images/888888_7x7_arrow_right.gif) no-repeat 50% 50%;} | ||||
| .ui-arrow-right-default:hover, .ui-arrow-right-hover {background: url(images/222222_7x7_arrow_right.gif) no-repeat 50% 50%;} | ||||
| .ui-arrow-right-default:active, .ui-arrow-right-active {background: url(images/ffffff_7x7_arrow_right.gif) no-repeat 50% 50%;} | ||||
| .ui-arrow-right-content {background: url(images/222222_7x7_arrow_right.gif) no-repeat 50% 50%;} | ||||
|  | ||||
| .ui-arrow-left-default {background: url(images/888888_7x7_arrow_left.gif) no-repeat 50% 50%;} | ||||
| .ui-arrow-left-default:hover, .ui-arrow-left-hover {background: url(images/222222_7x7_arrow_left.gif) no-repeat 50% 50%;} | ||||
| .ui-arrow-left-default:active, .ui-arrow-left-active {background: url(images/ffffff_7x7_arrow_left.gif) no-repeat 50% 50%;} | ||||
| .ui-arrow-left-content {background: url(images/222222_7x7_arrow_left.gif) no-repeat 50% 50%;} | ||||
|  | ||||
| .ui-arrow-down-default {background: url(images/888888_7x7_arrow_down.gif) no-repeat 50% 50%;} | ||||
| .ui-arrow-down-default:hover, .ui-arrow-down-hover {background: url(images/222222_7x7_arrow_down.gif) no-repeat 50% 50%;} | ||||
| .ui-arrow-down-default:active, .ui-arrow-down-active {background: url(images/ffffff_7x7_arrow_down.gif) no-repeat 50% 50%;} | ||||
| .ui-arrow-down-content {background: url(images/222222_7x7_arrow_down.gif) no-repeat 50% 50%;} | ||||
|  | ||||
| .ui-arrow-up-default {background: url(images/888888_7x7_arrow_up.gif) no-repeat 50% 50%;} | ||||
| .ui-arrow-up-default:hover, .ui-arrow-up-hover {background: url(images/222222_7x7_arrow_up.gif) no-repeat 50% 50%;} | ||||
| .ui-arrow-up-default:active, .ui-arrow-up-active {background: url(images/ffffff_7x7_arrow_up.gif) no-repeat 50% 50%;} | ||||
| .ui-arrow-up-content {background: url(images/222222_7x7_arrow_up.gif) no-repeat 50% 50%;} | ||||
|  | ||||
| .ui-close-default {background: url(images/888888_11x11_icon_close.gif) no-repeat 50% 50%;} | ||||
| .ui-close-default:hover, .ui-close-hover {background: url(images/222222_11x11_icon_close.gif) no-repeat 50% 50%;} | ||||
| .ui-close-default:active, .ui-close-active {background: url(images/ffffff_11x11_icon_close.gif) no-repeat 50% 50%;} | ||||
| .ui-close-content {background: url(images/ffffff_11x11_icon_close.gif) no-repeat 50% 50%;} | ||||
|  | ||||
| .ui-folder-closed-default {background: url(images/888888_11x11_icon_folder_closed.gif) no-repeat 50% 50%;} | ||||
| .ui-folder-closed-default:hover, .ui-folder-closed-hover {background: url(images/222222_11x11_icon_folder_closed.gif) no-repeat 50% 50%;} | ||||
| .ui-folder-closed-default:active, .ui-folder-closed-active {background: url(images/ffffff_11x11_icon_folder_closed.gif) no-repeat 50% 50%;} | ||||
| .ui-folder-closed-content {background: url(images/888888_11x11_icon_folder_closed.gif) no-repeat 50% 50%;} | ||||
|  | ||||
| .ui-folder-open-default {background: url(images/888888_11x11_icon_folder_open.gif) no-repeat 50% 50%;} | ||||
| .ui-folder-open-default:hover, .ui-folder-open-hover {background: url(images/222222_11x11_icon_folder_open.gif) no-repeat 50% 50%;} | ||||
| .ui-folder-open-default:active, .ui-folder-open-active {background: url(images/ffffff_11x11_icon_folder_open.gif) no-repeat 50% 50%;} | ||||
| .ui-folder-open-content {background: url(images/ffffff_11x11_icon_folder_open.gif) no-repeat 50% 50%;} | ||||
|  | ||||
| .ui-doc-default {background: url(images/888888_11x11_icon_doc.gif) no-repeat 50% 50%;} | ||||
| .ui-doc-default:hover, .ui-doc-hover {background: url(images/222222_11x11_icon_doc.gif) no-repeat 50% 50%;} | ||||
| .ui-doc-default:active, .ui-doc-active {background: url(images/ffffff_11x11_icon_doc.gif) no-repeat 50% 50%;} | ||||
| .ui-doc-content {background: url(images/222222_11x11_icon_doc.gif) no-repeat 50% 50%;} | ||||
|  | ||||
| .ui-arrows-leftright-default {background: url(images/888888_11x11_icon_arrows_leftright.gif) no-repeat 50% 50%;} | ||||
| .ui-arrows-leftright-default:hover, .ui-arrows-leftright-hover {background: url(images/222222_11x11_icon_arrows_leftright.gif) no-repeat 50% 50%;} | ||||
| .ui-arrows-leftright-default:active, .ui-arrows-leftright-active {background: url(images/ffffff_11x11_icon_arrows_leftright.gif) no-repeat 50% 50%;} | ||||
| .ui-arrows-leftright-content {background: url(images/222222_11x11_icon_arrows_leftright.gif) no-repeat 50% 50%;} | ||||
|  | ||||
| .ui-arrows-updown-default {background: url(images/888888_11x11_icon_arrows_updown.gif) no-repeat 50% 50%;} | ||||
| .ui-arrows-updown-default:hover, .ui-arrows-updown-hover {background: url(images/222222_11x11_icon_arrows_updown.gif) no-repeat 50% 50%;} | ||||
| .ui-arrows-updown-default:active, .ui-arrows-updown-active {background: url(images/ffffff_11x11_icon_arrows_updown.gif) no-repeat 50% 50%;} | ||||
| .ui-arrows-updown-content {background: url(images/222222_11x11_icon_arrows_updown.gif) no-repeat 50% 50%;} | ||||
|  | ||||
| .ui-minus-default {background: url(images/888888_11x11_icon_minus.gif) no-repeat 50% 50%;} | ||||
| .ui-minus-default:hover, .ui-minus-hover {background: url(images/222222_11x11_icon_minus.gif) no-repeat 50% 50%;} | ||||
| .ui-minus-default:active, .ui-minus-active {background: url(images/ffffff_11x11_icon_minus.gif) no-repeat 50% 50%;} | ||||
| .ui-minus-content {background: url(images/222222_11x11_icon_minus.gif) no-repeat 50% 50%;} | ||||
|  | ||||
| .ui-plus-default {background: url(images/888888_11x11_icon_plus.gif) no-repeat 50% 50%;} | ||||
| .ui-plus-default:hover, .ui-plus-hover {background: url(images/222222_11x11_icon_plus.gif) no-repeat 50% 50%;} | ||||
| .ui-plus-default:active, .ui-plus-active {background: url(images/ffffff_11x11_icon_plus.gif) no-repeat 50% 50%;} | ||||
| .ui-plus-content {background: url(images/222222_11x11_icon_plus.gif) no-repeat 50% 50%;} | ||||
|  | ||||
| /*hidden elements*/ | ||||
| .ui-hidden { | ||||
| 	display: none;/* for accessible hiding: position: absolute; left: -99999999px*/; | ||||
| } | ||||
| .ui-accessible-hidden { | ||||
| 	 position: absolute; left: -99999999px; | ||||
| } | ||||
| /*reset styles*/ | ||||
| .ui-reset { | ||||
| 	/*resets*/margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; | ||||
| } | ||||
| /*clearfix class*/ | ||||
| .ui-clearfix:after { | ||||
|     content: ".";  | ||||
|     display: block;  | ||||
|     height: 0;  | ||||
|     clear: both;  | ||||
|     visibility: hidden; | ||||
| } | ||||
| .ui-clearfix {display: inline-block;} | ||||
| /* Hides from IE-mac \*/ | ||||
| * html .ui-clearfix {height: 1%;} | ||||
| .ui-clearfix {display: block;} | ||||
| /* End hide from IE-mac */ | ||||
|  | ||||
| /* Note: for resizable styles, use the styles listed above in the dialog section */ | ||||
|  | ||||
|  | ||||
| @@ -1,56 +0,0 @@ | ||||
| var CommandWindow = {}; | ||||
|  | ||||
| CommandWindow.updateCommandResult = function() { | ||||
| 	//todo:  add commandQueryObj.value to the history select box | ||||
|  | ||||
| 	var commandQueryObj = $('commandQuery'); | ||||
| 	var copyChkBoxObj = $('copyChkBox'); | ||||
| 	var nodelistTxtObj = $('nodeList'); | ||||
| 	var nodegrpsCboBoxObj = $('nodegrpsCboBox'); | ||||
| 	var pshChkBoxObj = $('pshChkBox'); | ||||
|  | ||||
| 	var serialChkBoxObj = $('serialChkBox'); | ||||
| 	var verifyChkBoxObj = $('verifyChkBox'); | ||||
| 	var fanoutTxtBoxObj = $('fanoutTxtBox'); | ||||
| 	var userIDTxtBoxObj = $('userIDTxtBox'); | ||||
| 	var rshellTxtBoxObj = $('rshellTxtBox'); | ||||
| 	var monitorChkBoxObj = $('monitorChkBox'); | ||||
| 	var ret_codeChkBoxObj = $('ret_codeChkBox'); | ||||
|  | ||||
| 	// Do AJAX call and get HTML here. | ||||
| 	var url = "dsh_action.php"; | ||||
| 	var postPara = "command=" + encodeURIComponent(commandQueryObj.value); | ||||
| 	if (nodelistTxtObj) { postPara += "&node=" + encodeURIComponent(nodelistTxtObj.value); } | ||||
| 	if (nodegrpsCboBoxObj) { postPara += "&nodegrps=" + encodeURIComponent(nodegrpsCboBoxObj.options[nodegrpsCboBoxObj.selectedIndex].value); } | ||||
| 	if (copyChkBoxObj.checked == true)	postPara += "©=on";	else postPara += "©=off"; | ||||
| 	if (pshChkBoxObj.checked == true)	postPara += "&psh=on";	else postPara += "&psh=off"; | ||||
| 	if (serialChkBoxObj.checked == true)	postPara += "&serial=on"; else postPara += "&serial=off"; | ||||
| 	if (verifyChkBoxObj.checked == true)	postPara += "&verify=on"; else postPara += "&verify=off"; | ||||
| 	postPara += "&fanout=" + encodeURIComponent(fanoutTxtBoxObj.value); | ||||
| 	postPara += "&userID=" + encodeURIComponent(userIDTxtBoxObj.value); | ||||
| 	postPara += "&rshell=" + encodeURIComponent(rshellTxtBoxObj.value); | ||||
| 	if (monitorChkBoxObj.checked == true)	postPara += "&monitor=on"; else postPara += "&monitor=off"; | ||||
| 	if (ret_codeChkBoxObj.checked == true)	postPara += "&ret_code=on"; else postPara += "&ret_code=off"; | ||||
|  | ||||
| 	new Ajax.Request(url, { | ||||
| 	  method: 'post', postBody: postPara, | ||||
| 	  onSuccess: function(transport) { | ||||
|     	var htmlContent = transport.responseText; | ||||
|  | ||||
| 		 var win = new Window({className: "dialog", | ||||
| 		 			width: 350, | ||||
| 		 			height: 400, | ||||
| 		 			zIndex: 100, | ||||
| 		 			resizable: true, | ||||
| 		 			title: "Running commands", | ||||
| 		 			showEffect: Effect.BlindDown, | ||||
| 		 			hideEffect: Effect.SwitchOff, | ||||
| 		 			draggable: true, | ||||
| 		 			wiredDrag: true}); | ||||
|  | ||||
| 		 win.getContent().innerHTML = htmlContent; | ||||
| 		 //win.setStatusBar("Status bar info"); | ||||
| 		 win.showCenter(); | ||||
| 	  } | ||||
| 	}); | ||||
| }; | ||||
| @@ -18,70 +18,16 @@ for (i in cookies) { var pair = cookies[i].split('='); cookret[pair[0]] = unesca | ||||
| return cookret; | ||||
| } | ||||
|  | ||||
| function selectAll(element, objectName) | ||||
| // Check or uncheck all checkboxes that start with objectName | ||||
| function selectAllCheckBoxes(element, objectName) | ||||
| { | ||||
|  //todo: use jQuery to accomplish this | ||||
|  var sel = element.checked; | ||||
|  var form = element.form; | ||||
|  var searchstr = '^' + objectName + '\\d'; | ||||
|  var searchstr = '^' + objectName + '\d'; | ||||
|  for(var i = 0; i < form.length; i++) | ||||
|   { | ||||
|    var e = form.elements[i]; | ||||
|    if (e.type == "checkbox" && e.name.search(searchstr) > -1) { e.checked = sel; } | ||||
|   } | ||||
| } | ||||
|  | ||||
| function isSelected(form, objectName) | ||||
| { | ||||
| var searchstr = '^' + objectName + '\\d'; | ||||
| for(var i = 0; i < form.length; i++) | ||||
|  { | ||||
|   var e = form.elements[i]; | ||||
|   if (e.type == "checkbox" && e.name.search(searchstr) > -1 && e.checked) { return true; } | ||||
|  } | ||||
| return false; | ||||
| } | ||||
|  | ||||
| function numSelected(form, objectName) | ||||
| { | ||||
| var searchstr = '^' + objectName + '\\d'; | ||||
| var j = 0; | ||||
| for(var i = 0; i < form.length; i++) | ||||
|  { | ||||
|   var e = form.elements[i]; | ||||
|   if (e.type == "checkbox" && e.name.search(searchstr) > -1 && e.checked) | ||||
|    { | ||||
|     if (++j == 2) { return j; } | ||||
|    } | ||||
|  } | ||||
| return j; | ||||
| } | ||||
|  | ||||
| function toggleSection(para, tableId) | ||||
| { | ||||
|  var t;  var i; | ||||
|  var imageId = tableId + '-im'; | ||||
|  if (document.all) { t = document.all[tableId]; i = document.all[imageId]; }      // IE 4+ | ||||
|  else if (document.getElementById) { t = document.getElementById(tableId); i = document.getElementById(imageId); }    // Netscape 6 | ||||
|  else { alert('Cannot expand or collapse sections in this version of your browser.'); return false; } | ||||
|  if (!t) { alert('Error: section ' + tableId + ' not found.'); return false; } | ||||
|  | ||||
|  if (!t.style.display || t.style.display == 'inline')   // the inner table is currently visible | ||||
|   { | ||||
|   t.style.display = 'none'; | ||||
|   para.title = 'Click to expand section'; | ||||
|   //if (txt) { txt = txt.replace(/^-/i, '+'); } | ||||
|   i.src = 'images/plus-sign.gif'; | ||||
|   //i.alt = '+'; | ||||
|   } | ||||
|  else   // the inner table is currently invisible | ||||
|   { | ||||
|   t.style.display = 'inline'; | ||||
|   para.title = 'Click to collapse section'; | ||||
|   //if (txt) { txt = txt.replace(/^\+/i, '-'); } | ||||
|   i.src = 'images/minus-sign.gif'; | ||||
|   //i.alt = '-'; | ||||
|   } | ||||
|  | ||||
|  return true; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -26,19 +26,24 @@ function insertHeader($title, $stylesheets, $javascripts, $currents) { | ||||
| global $TOPDIR; | ||||
|  | ||||
| // Remember the current page so we can open it again the next time they come to the web interface | ||||
| $expire_time = gmmktime(0, 0, 0, 1, 1, 2038); | ||||
| foreach ($currents as $key => $value) { setcookie("currentpage[$key]", $value, $expire_time, '/'); } | ||||
| if ($currents[0] != 'logout') { | ||||
| 	$expire_time = gmmktime(0, 0, 0, 1, 1, 2038); | ||||
| 	foreach ($currents as $key => $value) { setcookie("currentpage[$key]", $value, $expire_time, '/'); } | ||||
| 	} | ||||
|  | ||||
| echo <<<EOS | ||||
| echo <<<EOS1 | ||||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Strict//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11-strict.dtd"> | ||||
| <html xmlns="http://www.w3.org/1999/xhtml"> | ||||
| <head> | ||||
| <title>$title</title> | ||||
| <meta http-equiv="Content-Type" content="application/xhtml+xml;  charset=iso-8859-1"> | ||||
| <link href="$TOPDIR/lib/style.css" rel="stylesheet"> | ||||
| <link href="$TOPDIR/lib/style.css" rel=stylesheet type='text/css'> | ||||
| <link href="$TOPDIR/jq/theme/jquery-ui-theme.css" rel=stylesheet type='text/css'> | ||||
| <script src="$TOPDIR/jq/jquery.min.js" type="text/javascript"></script> | ||||
| <script src="$TOPDIR/jq/jquery-ui-all.min.js" type="text/javascript"></script> | ||||
| <script src="$TOPDIR/lib/functions.js" type="text/javascript"></script> | ||||
|  | ||||
| EOS; | ||||
| EOS1; | ||||
|  | ||||
|  | ||||
| if ($stylesheets) { | ||||
| @@ -52,23 +57,52 @@ if ($javascripts) { | ||||
| 		} | ||||
| 	} | ||||
| echo "</head><body>\n"; | ||||
| echo <<<EOS | ||||
| echo <<<EOS3 | ||||
| <table id=headingTable border=0 cellspacing=0 cellpadding=0> | ||||
| <tr valign=top> | ||||
|     <td><img class=ImgTop src='$TOPDIR/images/topl2.jpg'></td> | ||||
|     <td class=TopMiddle><img id=xcatImage src='$TOPDIR/images/xCAT_icon-l.gif'></td> | ||||
|     <td class=TopMiddle width='100%'> | ||||
|  | ||||
| EOS; | ||||
| EOS3; | ||||
| //echo "<div id=top><img id=xcatImage src='$TOPDIR/images/xCAT_icon.gif'><div id=menuDiv>\n"; | ||||
|  | ||||
| insertMenus($currents); | ||||
|  | ||||
| echo "</td><td><img class=ImgTop src='$TOPDIR/images/topr2.jpg'></td></tr></table>\n"; | ||||
| //echo "</div></div>\n";     // end the top div | ||||
|  | ||||
| if (!isAuthenticated()) { | ||||
| 	insertLogin();		// display the login dialog and page footer | ||||
| 	exit;		// Do not want to continue with the rest of the page | ||||
| 	// If the login dialog is successful, it will load index.php which will remember what | ||||
| 	// page they were trying to go to. | ||||
| } | ||||
| }  // end insertHeader | ||||
|  | ||||
|  | ||||
| //----------------------------------------------------------------------------- | ||||
| // If they are not authenticated yet, display the login dialog | ||||
| function insertLogin() { | ||||
| global $TOPDIR; | ||||
| // The javascript in xcatauth.js will add the Login button and display the dialog | ||||
| echo <<<EOS2 | ||||
| <script src="$TOPDIR/lib/xcatauth.js" type="text/javascript"></script> | ||||
| <div id=logdialog> | ||||
| <p id=logdialogNote>Note: The username and password used must be in the passwd table in the xCAT database.</p> | ||||
| <form id=loginform><table cellspacing=3> | ||||
| <tr><td align=right><label for=username>Username:</label></td><td align=left><input id=username type=text name=username></td></tr> | ||||
| <tr><td align=right><label for=password>Password:</label></td><td align=left><input id=password type=password name=password></td></tr> | ||||
| </table></form> | ||||
| <p><span id=logstatus><br/></span></p> | ||||
| </div> | ||||
|  | ||||
| EOS2; | ||||
|  | ||||
| insertFooter(); | ||||
| } | ||||
|  | ||||
|  | ||||
| // This is the data structure that represents the menu for each page. | ||||
| $MENU = array( | ||||
| 	'machines' => array( | ||||
| @@ -135,6 +169,13 @@ $MENU = array( | ||||
| 			'about' => array('label' => 'About', 'url' => "$TOPDIR/support/about.php"), | ||||
| 			) | ||||
| 		), | ||||
| 	'logout' => array( | ||||
| 		'label' => 'Logout', | ||||
| 		'default' => 'logout', | ||||
| 		'list' => array( | ||||
| 			'logout' => array('label' => 'Logout/Login', 'url' => "$TOPDIR/lib/logout.php"), | ||||
| 			) | ||||
| 		), | ||||
| 	); | ||||
|  | ||||
|  | ||||
| @@ -208,10 +249,18 @@ echo '<div class=PageFooter><p id=disclaimer>This interface is still under const | ||||
| // args is an array of arguments to the cmd | ||||
| // Returns a tree of SimpleXML objects.  See perl-xCAT/xCAT/Client.pm for the format. | ||||
| function docmd($cmd, $nr, $args){ | ||||
| 	// If for some reason we are not logged in yet, do not even try to communicate w/xcatd | ||||
| 	if (!is_logged()) { | ||||
| 		echo "<p>Docmd: not logged in yet - can not run command.</p>\n"; | ||||
| 		return simplexml_load_string('<xcat></xcat>','SimpleXMLElement', LIBXML_NOCDATA); | ||||
|     } | ||||
| 	$request = simplexml_load_string('<xcatrequest></xcatrequest>'); | ||||
| 	$request->addChild('command',$cmd); | ||||
| 	if(!empty($nr)) { $request->addChild('noderange',$nr); } | ||||
| 	if (!empty($args)) { foreach ($args as $a) { $request->addChild('arg',$a); } } | ||||
|     $usernode=$request->addChild('becomeuser'); | ||||
|     $usernode->addChild('username',$_SESSION["username"]); | ||||
|     $usernode->addChild('password',getpassword()); | ||||
| 	#echo $request->asXML(); | ||||
| 	$xml = submit_request($request,0); | ||||
| 	return $xml; | ||||
| @@ -224,8 +273,8 @@ function docmd($cmd, $nr, $args){ | ||||
| // Returns a tree of SimpleXML objects.  See perl-xCAT/xCAT/Client.pm for the format. | ||||
| function submit_request($req, $skipVerify){ | ||||
| 	#global $cert,$port,$xcathost; | ||||
| 	$apachehome = '/var/www';		#todo:  for sles this should be /var/lib/wwwrun | ||||
| 	$cert = "$apachehome/.xcat/client-cred.pem"; | ||||
| 	//$apachehome = '/var/www';		# for sles this should be /var/lib/wwwrun | ||||
| 	//$cert = "$apachehome/.xcat/client-cred.pem"; | ||||
| 	$xcathost = "localhost"; | ||||
| 	$port = "3001"; | ||||
| 	$rsp = 0; | ||||
| @@ -233,21 +282,28 @@ function submit_request($req, $skipVerify){ | ||||
| 	$cleanexit=0; | ||||
|  | ||||
| 	// Open a socket to xcatd | ||||
| 	$context = stream_context_create(array('ssl'=>array('local_cert' => $cert))); | ||||
| 	if($fp = stream_socket_client('ssl://'.$xcathost.':'.$port,$errno,$errstr,30, | ||||
|                 STREAM_CLIENT_CONNECT,$context)){ | ||||
| 	$context = stream_context_create();		// do not need certificate anymore:  array('ssl'=>array('local_cert' => $cert)) | ||||
| 	if($fp = stream_socket_client('ssl://'.$xcathost.':'.$port,$errno,$errstr,30,STREAM_CLIENT_CONNECT,$context)){ | ||||
| 		fwrite($fp,$req->asXML());		// send the xml to xcatd | ||||
| 		while(!feof($fp)){				// and then read until there is no more | ||||
| 			$response .= preg_replace('/\n/','', stream_get_contents($fp));		// remove newlines and add it to the response | ||||
| 			$response .= preg_replace('/\n/','', fgets($fp));		// remove newlines and add it to the response | ||||
|  | ||||
| 			// Look for the serverdone response | ||||
| 			$pattern = '/<xcatresponse>\s*<serverdone>\s*<\/serverdone>\s*<\/xcatresponse>\s*$/'; | ||||
| 			if(preg_match($pattern,$response)) {		// transaction is done, pkg up the xml and return it | ||||
| 				#echo htmlentities($response); | ||||
| 				$response = '<xcat>' . preg_replace($pattern,'', $response) . '</xcat>';		// remove the serverdone response and put an xcat tag around the rest | ||||
| 			$fullpattern = '/<xcatresponse>\s*<serverdone>\s*<\/serverdone>\s*<\/xcatresponse>/'; | ||||
| 			$mixedpattern = '/<serverdone>\s*<\/serverdone>.*<\/xcatresponse>/'; | ||||
| 			//$shortpattern = '/<serverdone>\s*<\/serverdone>/'; | ||||
| 			if(preg_match($mixedpattern,$response)) {		// transaction is done, pkg up the xml and return it | ||||
| 				//echo "<p>", htmlentities($response), "</p>\n"; | ||||
| 				// remove the serverdone response and put an xcat tag around the rest | ||||
| 				$count = 0; | ||||
| 				$response = preg_replace($fullpattern,'', $response, -1, $count);		// 1st try to remove the long pattern | ||||
| 				if (!$count) { $response = preg_replace($mixedpattern,'', $response) . '</xcatresponse>/'; }		// if its not there, then remove the short pattern | ||||
| 				$response = "<xcat>$response</xcat>"; | ||||
| 				//echo "<p>", htmlentities($response), "</p>\n"; | ||||
| 				$rsp = simplexml_load_string($response,'SimpleXMLElement', LIBXML_NOCDATA); | ||||
| 				//echo '<p>'; print_r($rsp); echo "</p>\n"; | ||||
| 				$cleanexit = 1; | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		fclose($fp); | ||||
| @@ -256,7 +312,7 @@ function submit_request($req, $skipVerify){ | ||||
| 	} | ||||
| 	if(! $cleanexit){ | ||||
| 		if(!$skipVerify){ | ||||
| 			echo "<p>Error: xCAT response ended prematurely.</p>"; | ||||
| 			echo "<p>Error: xCAT response ended prematurely: ", htmlentities($response), "</p>"; | ||||
| 			$rsp = 0; | ||||
| 		} | ||||
| 	} | ||||
| @@ -344,17 +400,22 @@ function runcmd ($cmd, $mode, &$output, $options=NULL){ | ||||
| //----------------------------------------------------------------------------- | ||||
| // Send the keys and values in the primary global arrays | ||||
| function dumpGlobals() { | ||||
| 	trace('$_SERVER:'); | ||||
| 	foreach ($_SERVER as $key => $val) { trace("$key = $val"); } | ||||
| 	trace('<br>$_ENV:'); | ||||
| 	foreach ($_ENV as $key => $val) { trace("$key = $val"); } | ||||
| 	trace('<br>$_REQUEST:'); | ||||
| 	foreach ($_REQUEST as $key => $val) { trace("$key = $val"); } | ||||
| 	//trace('<b>$_SERVER:</b>'); | ||||
| 	//foreach ($_SERVER as $key => $val) { trace("$key=$val."); } | ||||
| 	//trace('<b>$_ENV:</b>'); | ||||
| 	//foreach ($_ENV as $key => $val) { trace("$key=$val."); } | ||||
| 	trace('<b>$_GET:</b>'); | ||||
| 	foreach ($_GET as $key => $val) { trace("$key=$val."); } | ||||
| 	trace('<b>$_POST:</b>'); | ||||
| 	foreach ($_POST as $key => $val) { trace("$key=$val."); } | ||||
| 	trace('<b>$_COOKIE:</b>'); | ||||
| 	foreach ($_COOKIE as $key => $val) { trace("$key=$val."); } | ||||
| 	if (isset($_SESSION)) { | ||||
|  | ||||
| 		trace('<br>$_SESSION:'); | ||||
| 		foreach ($_SESSION as $key => $val) { trace("$key = $val"); } | ||||
| 		trace('<b>$_SESSION:</b>'); | ||||
| 		foreach ($_SESSION as $key => $val) { trace("$key=$val."); } | ||||
| 	} | ||||
| 	trace('<b>$GLOBALS:</b>'); | ||||
| 	foreach ($GLOBALS as $key => $val) { trace("$key=$val."); } | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -792,18 +853,19 @@ function insertTabs ($tablist, $currentTabIndex) { | ||||
| //----------------------------------------------------------------------------- | ||||
| // Create the Action buttons in a table.  Each argument passed in is a button, which is an array of attribute strings. | ||||
| // If your onclick attribute contains javascript code that uses quotes, use double quotes instead of single quotes. | ||||
| // Note:  if only 1 button is passed in, the button is not put in a table. | ||||
| function insertButtons () { | ||||
| 	$num = func_num_args(); | ||||
| 	if ($num > 1) echo "<TABLE cellpadding=0 cellspacing=2><TR>"; | ||||
| 	/* if ($num > 1) */ echo "<TABLE cellpadding=0 cellspacing=2><TR>"; | ||||
| 	foreach (func_get_args() as $button) { | ||||
| 		//echo "<td><INPUT type=submit class=but $button ></td>"; | ||||
| 		$otherattrs = @$button['otherattrs']; | ||||
| 		if ($num > 1) echo "<td>"; | ||||
| 		echo "<a class=button href='' onclick='{$button['onclick']};return false' $otherattrs><span>{$button['label']}</span></a>"; | ||||
| 		if ($num > 1) echo "</td>"; | ||||
| 		$id = @$button['id']; | ||||
| 		if (!empty($id)) { $id = "id=$id"; } | ||||
| 		/* if ($num > 1) */ echo "<td>"; | ||||
| 		echo "<a class=button $id href='' onclick='{$button['onclick']};return false' $otherattrs><span>{$button['label']}</span></a>"; | ||||
| 		/* if ($num > 1) */ echo "</td>"; | ||||
| 		} | ||||
| 	if ($num > 1) echo "</TR></TABLE>\n"; | ||||
| 	/* if ($num > 1) */ echo "</TR></TABLE>\n"; | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -839,4 +901,102 @@ function splitTableFields($line){ | ||||
| 	return $fields; | ||||
| } | ||||
|  | ||||
| #function to enable password storage to split between cookie and session variable | ||||
| function xorcrypt($data,$key) { | ||||
|     $datalen=strlen($data); | ||||
|     $keylen=strlen($key); | ||||
|     for ($i=0;$i<$datalen;$i++) { | ||||
|         $data[$i]=chr(ord($data[$i])^ord($key[$i])); | ||||
|     } | ||||
|     return $data; | ||||
| } | ||||
|  | ||||
| function getpassword() { | ||||
|     if (isset($GLOBALS['xcatauthsecret'])) { | ||||
|         $cryptext=$GLOBALS['xcatauthsecret']; | ||||
|     } else if (isset($_COOKIE["xcatauthsecret"])) { | ||||
|         $cryptext = $_COOKIE["xcatauthsecret"]; | ||||
|     } else { | ||||
|         return false; | ||||
|     } | ||||
|     return xorcrypt($_SESSION["secretkey"],base64_decode($cryptext)); | ||||
| } | ||||
|  | ||||
| #remembers the password, splitting knowledge between server and client side | ||||
| #persistant storage | ||||
| #Caller should regenerate session id when contemplating a new user/password, | ||||
| #to preclude session fixation, though fixation is limited without the secret. | ||||
| function setpassword($password) { | ||||
|     $randlen=strlen($password); | ||||
|     $key=getrandchars($randlen); | ||||
|     $cryptext=xorcrypt($password,$key); | ||||
|     $cryptext=base64_encode($cryptext); #non-ascii chars, base64 it | ||||
| #Not bothering with explicit expiration, as time sync would be too hairy | ||||
| #should go away when browser closes.  Any timeout will be handled server | ||||
| #side.  If the session id invalidates and the one-time key discarded, | ||||
| #the cookie contents are worthless anyway | ||||
| #nevertheless, when logout happens, cookie should be reaped | ||||
|     setcookie("xcatauthsecret",$cryptext,0,'/'); | ||||
|     $GLOBALS["xcatauthsecret"]=$cryptext; #May need it sooner, prefer globals | ||||
|     $_SESSION["secretkey"]=$key; | ||||
| } | ||||
|  | ||||
| function getrandchars($length) { | ||||
|     $charset='0123456789abcdefghijklmnopqrstuvwxyz!@#$%^&*'; | ||||
|     $charsize=strlen($charset); | ||||
|     srand(); | ||||
|     $chars=''; | ||||
|     for ($i=0;$i<$length;$i++) { | ||||
|         $num=rand()%$charsize; | ||||
|         $chars=$chars.substr($charset,$num,1); | ||||
|     } | ||||
|     return $chars; | ||||
| } | ||||
|  | ||||
| // Determine if they at least have a user/pw that they have entered (that may or may not be valid) | ||||
| function is_logged() { | ||||
|     if (isset($_SESSION["username"]) and !is_bool(getpassword())) { | ||||
|         return true; | ||||
|     } else { | ||||
|         return false; | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| // Determine if they are currently logged in successfully | ||||
| function isAuthenticated() { | ||||
|     if (is_logged()) { | ||||
|         if ($_SESSION["xcatpassvalid"] != 1) { | ||||
|             $testcred=docmd("authcheck","",NULL); | ||||
|             if (isset($testcred->{'xcatresponse'}->{'data'})) { | ||||
|                 $result="".$testcred->{'xcatresponse'}->{'data'}; | ||||
|                 if (is_numeric(strpos("Authenticated",$result))) { | ||||
|                     $_SESSION["xcatpassvalid"]=1; #proven good | ||||
|                 } else { | ||||
|                     $_SESSION["xcatpassvalid"]=0; #proven bad | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     if (isset($_SESSION["xcatpassvalid"]) and $_SESSION["xcatpassvalid"]==1) { return true; } | ||||
|     else { return false; } | ||||
| } | ||||
|  | ||||
| function logout() { | ||||
|     #clear the secret cookie from browser. | ||||
|     #expire cookie a week ago, server time, may not work if client clock way off, but the value will be cleared at least. | ||||
|     if (isset($_COOKIE["xcatauthsecret"])) { | ||||
|         setcookie("xcatauthsecret",'',time()-86400*7,'/'); #NOTE: though firefox doesn't seem to zap it dynamically from cookie store in | ||||
|     #the client side dialog, firefox does stop submitting the value.  The sensitivity of the 'stale' cookie even if compromised | ||||
|     #is negligible, as the session id will be invalidated and the one-time-key needed to decrypt the password is destroyed on the server | ||||
|     } | ||||
|     #expire the sesion cookie | ||||
|     if (isset($_COOKIE[session_name()])) { | ||||
|         setcookie(session_name(),"",time()-86400*7,"/"); | ||||
|     } | ||||
|     #clear server store of data | ||||
|     $_SESSION=array(); | ||||
|     session_destroy(); | ||||
| } | ||||
|  | ||||
| ?> | ||||
|   | ||||
							
								
								
									
										6
									
								
								xCAT-web/lib/jsonwrapper.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,6 @@ | ||||
| <?php | ||||
| # In PHP 5.2 or higher we don't need to bring this in | ||||
| if (!function_exists('json_encode')) { | ||||
| 	require_once 'jsonwrapper_inner.php'; | ||||
| }  | ||||
| ?> | ||||
							
								
								
									
										23
									
								
								xCAT-web/lib/jsonwrapper_inner.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,23 @@ | ||||
| <?php | ||||
|  | ||||
| require_once 'JSON/JSON.php'; | ||||
|  | ||||
| function json_encode($arg) | ||||
| { | ||||
| 	global $services_json; | ||||
| 	if (!isset($services_json)) { | ||||
| 		$services_json = new Services_JSON(); | ||||
| 	} | ||||
| 	return $services_json->encode($arg); | ||||
| } | ||||
|  | ||||
| function json_decode($arg) | ||||
| { | ||||
| 	global $services_json; | ||||
| 	if (!isset($services_json)) { | ||||
| 		$services_json = new Services_JSON(); | ||||
| 	} | ||||
| 	return $services_json->decode($arg); | ||||
| } | ||||
|  | ||||
| ?> | ||||
							
								
								
									
										30
									
								
								xCAT-web/lib/log.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,30 @@ | ||||
| <?php | ||||
|  | ||||
| // ??? | ||||
|  | ||||
| $TOPDIR = '..'; | ||||
| require_once "$TOPDIR/lib/functions.php"; | ||||
| require_once "$TOPDIR/lib/jsonwrapper.php"; | ||||
|     header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); | ||||
|     header("Cache-Control: no-store, no-cache, must-revalidate"); | ||||
|     header("Cache-Control: post-check=0, pre-check=0", false); | ||||
|     header("Pragma: no-cache"); | ||||
|  | ||||
|     if (isset($_REQUEST["password"])) { | ||||
|         $_SESSION=array(); #Clear data from session. prevent session data from migrating in a hijacking? | ||||
|         session_regenerate_id(true);#Zap existing session entirely.. | ||||
|         setpassword($_REQUEST["password"]); | ||||
|         $_SESSION["xcatpassvalid"]=-1; #unproven password | ||||
|     } | ||||
|     if (isset($_REQUEST["username"])) { | ||||
|         $_SESSION["username"]=$_REQUEST["username"]; | ||||
|         $_SESSION["xcatpassvalid"]=-1; #unproven password | ||||
|     } | ||||
|  | ||||
|     $jdata=array(); | ||||
|     if (isAuthenticated()) { $jdata["authenticated"]="yes"; } | ||||
|     else { $jdata["authenticated"]="no"; } | ||||
|  | ||||
|     echo json_encode($jdata); | ||||
| ?> | ||||
|  | ||||
							
								
								
									
										28
									
								
								xCAT-web/lib/logout.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,28 @@ | ||||
| <?php | ||||
|  | ||||
| // Allow the user to log out and log back in | ||||
|  | ||||
| $TOPDIR = '..'; | ||||
| require_once "$TOPDIR/lib/functions.php"; | ||||
|  | ||||
| logout(); | ||||
|  | ||||
| insertHeader('Logout/Login', NULL, NULL, array('logout','logout')); | ||||
|  | ||||
| /* | ||||
| dumpGlobals(); | ||||
|  | ||||
| $xml = docmd("authcheck","",NULL); | ||||
| echo "<p>authcheck:<br>\n"; | ||||
| foreach ($xml->children() as $response) foreach ($response->children() as $t) { echo (string) $t, "<br>\n"; } | ||||
| echo "</p>\n"; | ||||
|  | ||||
| $xml = docmd('tabdump','',NULL); | ||||
| echo "<p>tabdump:<br>\n"; | ||||
| foreach ($xml->children() as $response) foreach ($response->children() as $t) { echo (string) $t, "<br>\n"; } | ||||
| echo "</p>\n"; | ||||
| */ | ||||
|  | ||||
| //insertNotDoneYet(); | ||||
| insertFooter(); | ||||
| ?> | ||||
| @@ -1,13 +1,53 @@ | ||||
| <?php | ||||
| //setcookie("history", "", time() - 3600);  //to delete a cookie, but did not seem to work | ||||
| $TOPDIR = '..'; | ||||
| require_once "../lib/functions.php"; | ||||
|  | ||||
| echo "<p>\n"; | ||||
| runcmd('echo $PATH', 1, $junk); | ||||
| runcmd('whoami', 1, $junk); | ||||
| echo <<<EOS1 | ||||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Strict//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11-strict.dtd"> | ||||
| <html xmlns="http://www.w3.org/1999/xhtml"> | ||||
| <head> | ||||
| <title>phpinfo</title> | ||||
| <meta http-equiv="Content-Type" content="application/xhtml+xml;  charset=iso-8859-1"> | ||||
| <link href="$TOPDIR/lib/style.css" rel=stylesheet type='text/css'> | ||||
|  | ||||
| <link href="$TOPDIR/jq/theme/jquery-ui-theme.css" rel=stylesheet type='text/css'> | ||||
| <script src="$TOPDIR/jq/jquery.min.js" type="text/javascript"></script> | ||||
| <script src="$TOPDIR/jq/jquery-ui-all.min.js" type="text/javascript"></script> | ||||
| <script src="$TOPDIR/lib/functions.js" type="text/javascript"></script> | ||||
|  | ||||
| </head> | ||||
| <body> | ||||
|  | ||||
| EOS1; | ||||
|  | ||||
| //insertLogin(); | ||||
| echo <<<EOS2 | ||||
| <script src="$TOPDIR/lib/xcatauth.js" type="text/javascript"></script> | ||||
| <div id=logdialog> | ||||
| <form id=loginform> | ||||
| <label for=username>Username:</label><input id=username type=text name=username><br/> | ||||
| <label for=password>Password:</label><input id=password type=password name=password></form> | ||||
| <span class=logstatus id=logstatus><br/></span> | ||||
| </div> | ||||
|  | ||||
| EOS2; | ||||
|  | ||||
| /* | ||||
| dumpGlobals(); | ||||
|  | ||||
| $xml = docmd("authcheck","",NULL); | ||||
| echo "<p>authcheck:<br>\n"; | ||||
| foreach ($xml->children() as $response) foreach ($response->children() as $t) { echo (string) $t, "<br>\n"; } | ||||
| echo "</p>\n"; | ||||
|  | ||||
| /* $output = array(); runcmd("listattr", 2, $output); foreach ($output as $line) { echo "<p>line=$line</p>"; } */ | ||||
| $xml = docmd('tabdump','',NULL); | ||||
| echo "<p>tabdump:<br>\n"; | ||||
| foreach ($xml->children() as $response) foreach ($response->children() as $t) { echo (string) $t, "<br>\n"; } | ||||
| echo "</p>\n"; | ||||
|  | ||||
| phpinfo() | ||||
| phpinfo(); | ||||
| */ | ||||
|  | ||||
| echo "</body></html>\n"; | ||||
| ?> | ||||
| @@ -177,7 +177,6 @@ TEXTAREA {vertical-align : middle; font-size : 8pt; font-family : sans-serif; fo | ||||
|  | ||||
| .TableHeader { color: black; background-color : #fffdb0; font-weight : bold; font-size : 9pt; white-space: nowrap; } | ||||
| .TableRow { color: black; background-color : #b3c2d9; font-size : 9pt; white-space: nowrap; } /* #d8dff1 */ | ||||
| .FormTable { color: black; background-color : #CCCCCC; } | ||||
| .Info {color : blue;} | ||||
| .Error {font-weight : bold; color : red;} | ||||
| .Trace {color: gray;  padding: 0px; margin: 0px;} | ||||
| @@ -250,3 +249,21 @@ a.button:active span { | ||||
|     background-position: bottom left; | ||||
|     padding: 6px 0 4px 18px; /* push text down 1px */ | ||||
| } | ||||
|  | ||||
| /* For the Login dialog */ | ||||
|  | ||||
| .LogDialog { | ||||
|  background-color: white; | ||||
| } | ||||
|  | ||||
| #logdialog {	/* the div inside the dialog */ | ||||
|  margin: 0px 10px 20px 10px;	/* for some reason the containing dialog cuts off the right 30px */ | ||||
|  padding: 0px; | ||||
|  /* background-color: white; | ||||
|  font-family: Sans-Serif; | ||||
|  font-size: 7pt; */ | ||||
| } | ||||
|  | ||||
| #logdialogNote { | ||||
|  margin-top: 3px; | ||||
| } | ||||
|   | ||||
							
								
								
									
										66
									
								
								xCAT-web/lib/xcatauth.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,66 @@ | ||||
| /* xCAT WebUI authentication handling functions/setup */ | ||||
| /* IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html */ | ||||
|  | ||||
| function onlogin (data, textstatus) { | ||||
|     $("#password").val(""); //clear the password field regardless of what happens | ||||
|     if (data.authenticated == "yes") { | ||||
|         $("#logstatus").text("Logged in successfully"); | ||||
|         //todo: nrtree.refresh(); // Fix tree potentiall broken through attempts to operate without auth | ||||
|         $("#logdialog").dialog("close"); | ||||
|         window.location = '../index.php';	// it has remembered what page they were trying to go to | ||||
|     } else { | ||||
|         $("#logstatus").text("Authentication failure"); | ||||
|         $("#logstatus").css("color","#ff0000"); | ||||
|     } | ||||
| } | ||||
|  | ||||
| function authenticate() { | ||||
|     $("#logstatus").css("color","#000000"); | ||||
|     $("#logstatus").html('Authenticating...<img src="../images/throbber.gif"/>'); | ||||
|     var passwd=$("#password").val(); | ||||
|     $.post("../lib/log.php",{ | ||||
|             username: $("#username").val(), | ||||
|             password: passwd | ||||
|         },onlogin,"json"); | ||||
| } | ||||
|  | ||||
| $(document).ready(function() { | ||||
|     $("#logdialog").dialog({ | ||||
|         modal: true, | ||||
|         closeOnEscape: false, | ||||
|         closebutton: false, | ||||
|         /* dialogClass: 'LogDialog', */ | ||||
|         overlay: { | ||||
|             backgroundColor: "#CCCCCC", | ||||
|             opacity: 0.3 | ||||
|         }, | ||||
|         height: 270, | ||||
|         width: 350, | ||||
|         autoOpen: true, | ||||
|         buttons: { | ||||
|             "Log In": authenticate | ||||
|             }, | ||||
|         open: function(type, dialog) { | ||||
|             if (document.location.protocol == "http:") { | ||||
|                 $("#logstatus").html("Unencrypted Session!"); | ||||
|                 $("#logstatus").css("color","#ff0000"); | ||||
|             } | ||||
|             if ($("#username").val() == "") { | ||||
|                 $("#username").focus(); | ||||
|             } else { | ||||
|                 $("#password").focus(); | ||||
|             } | ||||
|         } | ||||
|     }); | ||||
|  | ||||
|     $("#username").keydown(function(event) { //When 'enter' is hit while in username, advance to password | ||||
|         if (event.keyCode==13) { | ||||
|             $("#password").focus(); | ||||
|         } | ||||
|     }); | ||||
|     $("#password").keydown(function(event) { //Submit authentication if enter is pressed in password field | ||||
|         if (event.keyCode==13) { | ||||
|             authenticate(); | ||||
|         } | ||||
|     }); | ||||
| }); | ||||
| @@ -24,7 +24,7 @@ $pages = array('intro' => 'Discover Hardware', | ||||
| if (isset($_REQUEST['page'])) {	displayWizard($pages); } | ||||
|  | ||||
| else {		// initial display of the wizard, show the whole page | ||||
| insertHeader('Discover New Nodes', array('discover.css',"$TOPDIR/lib/wizard.css"), array("$TOPDIR/jq/jquery.min.js"), array('machines','discover')); | ||||
| insertHeader('Discover New Nodes', array('discover.css',"$TOPDIR/lib/wizard.css"), NULL, array('machines','discover')); | ||||
| echo "<div id=content align=center>\n"; | ||||
| displayWizard($pages); | ||||
| echo "</div>\n";	// end the content div | ||||
|   | ||||
							
								
								
									
										51
									
								
								xCAT-web/machines/noderangesource.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,51 @@ | ||||
| <?php | ||||
|  | ||||
| // Gets the nodes and groups for group/node js widget | ||||
|  | ||||
| $TOPDIR = '..'; | ||||
| require_once "$TOPDIR/lib/functions.php"; | ||||
| require_once "$TOPDIR/lib/jsonwrapper.php"; | ||||
|     if (isset($_GET['id'])) { | ||||
|         $id = $_GET['id']; | ||||
|     } | ||||
|     if ($id == "0") { | ||||
|         $id = '/.*'; | ||||
|     } else { | ||||
|         $id=preg_replace('/^,/','',$id); | ||||
|     } | ||||
|     $rvals=docmd('extnoderange',$id,array('subgroups')); | ||||
|     $parents=array(); | ||||
|     $root=1; | ||||
|     if ($id == '/.*') { | ||||
|         $id=','; | ||||
|     } else { | ||||
|         $parents=split("@",$id); | ||||
|         $id=",$id@"; | ||||
|         $root=0; | ||||
|     } | ||||
|     //unset($rvals->xcatresponse->serverdone[0]); | ||||
|     $numsubgroups=count($rvals->xcatresponse->intersectinggroups); | ||||
|     $numnodes=count($rvals->xcatresponse->node); | ||||
|     $jdata=array(); | ||||
|     if ($numnodes >= $numsubgroups) { #If there are few enough subgroups to be helpful filters, add them in | ||||
|         foreach ($rvals->xcatresponse->intersectinggroups as $group) { | ||||
|             if (! in_array("$group",$parents)) { | ||||
|             $jdata[]= array("data"=>"$group", | ||||
|                             "attributes"=>array("id"=>"$id$group", | ||||
|                                                 "rel"=>'group'), | ||||
|                             "state"=>'closed'); | ||||
|                             } | ||||
|  | ||||
|         } | ||||
|     } #If there were more groups than nodes, leave the signal to noise ratio down | ||||
|     if ($root==0) { | ||||
|     foreach ($rvals->xcatresponse->node as $node) { | ||||
|         $jdata[] = array("data"=>"$node", | ||||
|                          "attributes"=>array("id"=>",$node", | ||||
|                                              "rel"=>'node')); | ||||
|     } | ||||
|     } | ||||
| #    header('Content-type: text/html'); | ||||
|     echo json_encode($jdata); | ||||
| ?> | ||||
|  | ||||
							
								
								
									
										14
									
								
								xCAT-web/manage/dsh.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,14 @@ | ||||
|  | ||||
| .FormTable { color: black; background-color : #CCCCCC; } | ||||
|  | ||||
| #inner_table { | ||||
|  margin-left: 5px; | ||||
|  margin-right: 10px; | ||||
| } | ||||
|  | ||||
| #cmdDialog { | ||||
|  margin: 0px 10px 20px 10px;	/* for some reason the containing dialog cuts off the right 30px */ | ||||
|  padding: 0px; | ||||
|  font-family: Sans-Serif; | ||||
|  font-size: 7pt; | ||||
| } | ||||
							
								
								
									
										60
									
								
								xCAT-web/manage/dsh.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,60 @@ | ||||
| // Create and show the dialog that shows the dsh output | ||||
|  | ||||
| $(document).ready(function() { | ||||
| 	var cmddialog = $('<div id=cmdDialog title=Title></div>'); | ||||
|     cmddialog.dialog({ height: 500, width: 400, autoOpen: false}); | ||||
|  | ||||
|     $("input[type='text']").keypress(function(e) { if (isEnterKey(e.which)) {opencmddialog();} }); | ||||
| }); | ||||
|  | ||||
|  | ||||
| // Determine if the key pressed was the enter key. | ||||
| // According to http://unixpapa.com/js/key.html, this is key code 13 in all browsers. | ||||
| function isEnterKey(keycode) { if (keycode == 13) { return true; } else { return false; } } | ||||
|  | ||||
|  | ||||
| // Called by the select combobox to put its value into the command field | ||||
| function _setvars(){ | ||||
| 	var form = window.document.dshForm; | ||||
| 	form.command.value = form.history.value; | ||||
| } | ||||
|  | ||||
|  | ||||
| // Pop open the dialog and fill it with the dsh output | ||||
| function opencmddialog() { | ||||
| 	// Build the property list that will get POSTed | ||||
| 	var props = {}; | ||||
| 	props.command = $('#command').val(); | ||||
| 	props.nodegrps = $('#nodegrps option:selected').val(); | ||||
|  | ||||
| 	// If required fields were not filled in, bail | ||||
| 	if (props.command.length == 0 || props.nodegrps.length == 0) { | ||||
| 	    alert('Select a node group and enter a command before pressing the Run Cmd button.'); | ||||
| 	    return; | ||||
| 	  } | ||||
|  | ||||
| 	if ($('#nodeList')) { props.nodeList = $('#nodeList').val(); } | ||||
|  | ||||
| 	if ($('#copy_script').attr('checked')) { props.copy_script = 1; } | ||||
| 	if ($('#run_psh').attr('checked')) { props.run_psh = 1; } | ||||
| 	if ($('#serial').attr('checked')) { props.serial = 1; } | ||||
| 	if ($('#monitor').attr('checked')) { props.monitor = 1; } | ||||
| 	if ($('#verify').attr('checked')) { props.verify = 1; } | ||||
| 	if ($('#collapse').attr('checked')) { props.collapse = 1; } | ||||
|  | ||||
| 	var tmp = $('#fanout').val(); | ||||
| 	if (tmp.length) { props.fanout = tmp; } | ||||
| 	var tmp = $('#userID').val(); | ||||
| 	if (tmp.length) { props.userID = tmp; } | ||||
| 	var tmp = $('#rshell').val(); | ||||
| 	if (tmp.length) { props.rshell = tmp; } | ||||
| 	var tmp = $('#shell_opt').val(); | ||||
| 	if (tmp.length) { props.shell_opt = tmp; } | ||||
|  | ||||
| 	if ($('#ret_code').attr('checked')) { props.ret_code = 1; } | ||||
|  | ||||
| 	// Open the dialog and get the output sent to it | ||||
|     $('#cmdDialog').children().remove();	// get rid of previous content | ||||
|     $('#cmdDialog').dialog("open"); | ||||
|     $('#cmdDialog').load('dsh_action.php', props); | ||||
| } | ||||
| @@ -8,14 +8,14 @@ $expire_time = gmmktime(0, 0, 0, 1, 1, 2038); | ||||
|  | ||||
| require_once "$TOPDIR/lib/functions.php"; | ||||
|  | ||||
| insertHeader('Run Commands on Nodes', array("$TOPDIR/themes/default.css"), | ||||
| 			array("$TOPDIR/lib/CommandWindow.js", "$TOPDIR/js/prototype.js", "$TOPDIR/js/scriptaculous.js?load=effects", "$TOPDIR/js/window.js"), | ||||
| insertHeader('Run Commands on Nodes', array('dsh.css'), | ||||
| 			array('dsh.js'), | ||||
| 			array('manage','dsh')); | ||||
|  | ||||
| echo <<<EOS | ||||
| <div id=content> | ||||
| <FORM NAME="dsh_options" onsubmit="checkEmpty();"> | ||||
| <TABLE class="inner_table" cellspacing=0 cellpadding=5> | ||||
| <FORM NAME=dshForm> | ||||
| <TABLE id=inner_table cellspacing=0 cellpadding=5> | ||||
|   <TBODY> | ||||
|   	<TR><TD colspan=3> | ||||
| EOS; | ||||
| @@ -23,9 +23,9 @@ EOS; | ||||
| if (isset($_REQUEST['noderange'])) { | ||||
| 	echo "<B><FONT size='+1'>Run Command on: </FONT></B>"; | ||||
| 	if (strlen($_REQUEST['noderange']) > 70) { | ||||
| 		echo "<TEXTAREA rows=1 cols=70 readonly name=nodeList class=middle>" . $_REQUEST['noderange'] . "</TEXTAREA>\n"; | ||||
| 		echo "<TEXTAREA rows=1 cols=70 readonly name=nodeList id=nodeList>" . $_REQUEST['noderange'] . "</TEXTAREA>\n"; | ||||
| 	} else { | ||||
| 		echo "<INPUT size=70 type=text name=nodeList id=nodeList class=middle value='" . $_REQUEST['noderange'] . "'>\n"; | ||||
| 		echo "<INPUT size=70 type=text name=nodeList id=nodeList value='" . $_REQUEST['noderange'] . "'>\n"; | ||||
| 	} | ||||
| } else { echo "<B><FONT size='+1'>Run Command on a Group of Nodes</FONT></B>\n"; } | ||||
|  | ||||
| @@ -36,12 +36,11 @@ echo <<<EOS2 | ||||
| 	</TD></TR> | ||||
|     <TR><TD colspan=3> | ||||
| EOS2; | ||||
| //		<INPUT type="button" id="runCmdButton" name="runCmdButton" value="Run Cmd" class=middle onclick="CommandWindow.updateCommandResult()"> | ||||
| insertButtons(array('label' => 'Run Cmd', 'onclick' => 'CommandWindow.updateCommandResult()')); | ||||
| insertButtons(array('label' => 'Run Cmd', 'id' => 'runcmdButton', 'onclick' => 'opencmddialog()')); | ||||
| echo "</TD></TR>\n"; | ||||
|  | ||||
| if (!isset($_REQUEST['noderange'])) { | ||||
| 	echo "<TR class=FormTable><TD colspan=3>Run Command on Group:<SELECT name=nodegrps id=nodegrpsCboBox class=middle><OPTION value=''>Choose ...</OPTION>\n"; | ||||
| 	echo "<TR class=FormTable><TD colspan=3>Run Command on Group:<SELECT name=nodegrps id=nodegrps><OPTION value=''>Choose ...</OPTION>\n"; | ||||
|   	$nodegroups = getGroups(); | ||||
| 	foreach ($nodegroups as $group) { | ||||
| 		//if($group == $currentGroup) { $selected = 'selected'; } else { $selected = ''; } | ||||
| @@ -53,9 +52,9 @@ if (!isset($_REQUEST['noderange'])) { | ||||
| ?> | ||||
|     <TR class=FormTable> | ||||
|       <TD colspan=3>Command:  | ||||
|        <INPUT size=80 type=text name=command id=commandQuery class=middle> <!-- onchange='CommandWindow.updateCommandResult()' --> | ||||
|        <INPUT size=80 type=text name=command id=command> | ||||
|        History: | ||||
|       <SELECT name=history onChange="_setvars();" class=middle> | ||||
|       <SELECT name=history onChange="_setvars();"> | ||||
|       <OPTION value="">Choose ...</OPTION> | ||||
|       <?php | ||||
| 		if (isset($_COOKIE['history'])) { | ||||
| @@ -66,64 +65,64 @@ if (!isset($_REQUEST['noderange'])) { | ||||
|       </TD> | ||||
|     </TR> | ||||
|     <TR class=FormTable> | ||||
|       <TD colspan="3" nowrap><INPUT type="checkbox" name="copy_script" id="copyChkBox"> | ||||
| 		Copy command to nodes  (The command specified above will 1st be copied | ||||
|       <TD colspan=3><INPUT type=checkbox name=copy_script id=copy_script> | ||||
| 		Copy command to nodes (The command specified above will 1st be copied | ||||
|       	to /tmp on the nodes and executed from there.)</TD> | ||||
|     </TR> | ||||
|     <TR class=FormTable> | ||||
|       <TD colspan="3" nowrap><INPUT type="checkbox" name="run_psh" id="pshChkBox" disabled> | ||||
| 		Use parallel shell (psh) command instead of xdsh.  Currently this option must be used, and the options below (associated with xdsh) are disabled.</TD> | ||||
|       <TD colspan=3><INPUT type=checkbox name=run_psh id=run_psh disabled> | ||||
| 		Use parallel shell (psh) command instead of xdsh.  When this option is chosen, some of the options below (associated with xdsh) are disabled.</TD> | ||||
|     </TR> | ||||
|     <TR class=FormTable> | ||||
|       <TD colspan="3"><B>Options:</TD> | ||||
|       <TD colspan=3><B>Options:</TD> | ||||
|     </TR> | ||||
|     <TR class=FormTable> | ||||
|       <TD width="37"></TD> | ||||
|       <TD width="210" valign="top" nowrap><INPUT type="checkbox" name="serial" id="serialChkBox">Streaming mode</TD> | ||||
|       <TD width="500">Specifies that output is returned as it becomes available from each target, instead of waiting for the command to be completed on a target before returning output from that target.</TD> | ||||
|       <TD width=37></TD> | ||||
|       <TD valign=top nowrap><INPUT type=checkbox name=serial id=serial>Streaming mode</TD> | ||||
|       <TD>Specifies that output is returned as it becomes available from each target, instead of waiting for the command to be completed on a target before returning output from that target.</TD> | ||||
|     </TR> | ||||
|     <TR class=FormTable> | ||||
|       <TD></TD> | ||||
|       <TD valign="top" nowrap><INPUT type="checkbox" name="monitor" id="monitorChkBox">Monitor</TD> | ||||
|       <TD valign=top nowrap><INPUT type=checkbox name=monitor id=monitor>Monitor</TD> | ||||
|       <TD>Prints starting and completion messages for each node.  Useful with Streaming mode.</TD> | ||||
|     </TR> | ||||
|     <TR class=FormTable> | ||||
|       <TD></TD> | ||||
|       <TD valign="top" nowrap><INPUT type="checkbox" name="verify" id="verifyChkBox">Verify</TD> | ||||
|       <TD valign=top nowrap><INPUT type=checkbox name=verify id=verify>Verify</TD> | ||||
|       <TD>Verifies that nodes are responding before sending the command to them.</TD> | ||||
|     </TR> | ||||
|     <TR class=FormTable> | ||||
|       <TD></TD> | ||||
|       <TD valign="top" nowrap><INPUT type="checkbox" name="collapse" id="collapseChkBox" disabled>Collaspe Identical Output</TD> | ||||
|       <TD valign=top nowrap><INPUT type=checkbox name=collapse id=collapse disabled>Collaspe Identical Output</TD> | ||||
|       <TD>Automatically pipe the xdsh output into xdshbak which will only display output once for all the nodes that display identical output.  See the xdshbak man page for more info.</TD> | ||||
|     </TR> | ||||
|     <TR class=FormTable> | ||||
|       <TD></TD> | ||||
|       <TD valign="top" nowrap>Fanout: <INPUT type="text" name="fanout" id="fanoutTxtBox"></TD> | ||||
|       <TD valign=top nowrap>Fanout: <INPUT type=text name=fanout id=fanout></TD> | ||||
|       <TD>The maximum number of nodes the command should be run on concurrently. When the command finishes on 1 of the nodes, it will be started on an additional node (the default is 64).</TD> | ||||
|     </TR> | ||||
|     <TR class=FormTable> | ||||
|       <TD></TD> | ||||
|       <TD valign="top" nowrap>UserID: <INPUT type="text" name="userID" id="userIDTxtBox"></TD> | ||||
|       <TD valign=top nowrap>UserID: <INPUT type=text name=userID id=userID></TD> | ||||
|       <TD>The user id to use to run the command on the nodes.</TD> | ||||
|     </TR> | ||||
|     <TR class=FormTable> | ||||
|       <TD></TD> | ||||
|       <TD valign="top" nowrap>Remote Shell: <INPUT type="text" name="rshell" id="rshellTxtBox" disabled></TD> | ||||
|       <TD valign=top nowrap>Remote Shell: <INPUT type=text name=rshell id=rshell></TD> | ||||
|       <TD>The remote shell program to use to run the command on the nodes. The default is /usr/bin/ssh.</TD> | ||||
|     </TR> | ||||
|     <TR class=FormTable> | ||||
|       <TD></TD> | ||||
|       <TD valign="top" nowrap>Shell Options: <INPUT type="txt" name="shell_opt" id="shell_optTxtBox" disabled></TD> | ||||
|       <TD valign=top nowrap>Shell Options: <INPUT type=text name=shell_opt id=shell_opt></TD> | ||||
|       <TD>Options to pass to the remote shell being used.</TD> | ||||
|     </TR> | ||||
|     <TR class=FormTable> | ||||
|       <TD></TD> | ||||
|       <TD valign="top" nowrap><INPUT type="checkbox" name="ret_code" id="ret_codeChkBox">Return Code</TD> | ||||
|       <TD valign=top nowrap><INPUT type=checkbox name=ret_code id=ret_code>Return Code</TD> | ||||
|       <TD>Prints the return code of the (last) command that was run remotely on each node. The return code is appended at the end of the output for each node.</TD> | ||||
|     </TR> | ||||
|     <TR><TD colspan="3"> | ||||
| 		<font class="BlueBack">Tips:</font> | ||||
|     <TR><TD colspan=3> | ||||
| 		<font class=BlueBack>Tips:</font> | ||||
| 		<UL> | ||||
| 		  <LI>See the <A href="<?php echo getDocURL('manpage','xdsh.1'); ?>">xdsh man page</A> for more information about this command.</LI> | ||||
| 		</UL> | ||||
| @@ -132,27 +131,5 @@ if (!isset($_REQUEST['noderange'])) { | ||||
| </TABLE> | ||||
| </FORM> | ||||
| <div> | ||||
| <SCRIPT language="JavaScript"> | ||||
| <!-- | ||||
| // in CSM perl script this portion used to be javascript to get | ||||
| // and set cookies, now php has handled it | ||||
|  | ||||
| //window.onload = function(){window.document.dsh_options.runCmdButton.focus()}; | ||||
| function _setvars(){ | ||||
| 	var form = window.document.dsh_options; | ||||
| 	form.command.value = form.history.value; | ||||
| } | ||||
| function checkEmpty(){ | ||||
| 	var form = window.document.dsh_options; | ||||
| 	var cmd = form.command.value; | ||||
| 	if (cmd.length == 0) | ||||
| 	  { | ||||
| 	    alert('Enter a command before pressing the Run Cmd button.'); | ||||
| 	    return false; | ||||
| 	  } | ||||
| 	else { return true; } | ||||
| } | ||||
| --> | ||||
| </SCRIPT> | ||||
| </BODY> | ||||
| </HTML> | ||||
| @@ -30,66 +30,52 @@ if (isset($_COOKIE['history']) && array_search($_REQUEST['command'], $_COOKIE['h | ||||
|  | ||||
| 	//get the command and the options | ||||
| 	$cmd = @$_REQUEST["command"]; | ||||
| 	$copy = @$_REQUEST["copy"]; | ||||
| 	$node = @$_REQUEST["node"]; | ||||
| 	$group = @$_REQUEST["nodegrps"]; | ||||
| 	$psh = @$_REQUEST["psh"]; | ||||
|  | ||||
| 	$copy = @$_REQUEST["copy_script"]; | ||||
| 	$psh = @$_REQUEST["run_psh"]; | ||||
|  | ||||
| 	$serial = @$_REQUEST["serial"]; | ||||
| 	$monitor = @$_REQUEST["monitor"]; | ||||
| 	$verify = @$_REQUEST["verify"]; | ||||
| 	$collapse = @$_REQUEST["collapse"]; | ||||
|  | ||||
| 	$fanout = @$_REQUEST["fanout"]; | ||||
| 	$userID = @$_REQUEST["userID"]; | ||||
| 	$rshell = @$_REQUEST["rshell"]; | ||||
| 	$shell_opt = @$_REQUEST["shell_opt"]; | ||||
| 	$monitor = @$_REQUEST["monitor"]; | ||||
|  | ||||
| 	$ret_code = @$_REQUEST["ret_code"]; | ||||
|  | ||||
|  | ||||
| 	// Set the cmd arguments | ||||
| 	if (!empty($group)) $noderange = $group; | ||||
| 	else $noderange = $node; | ||||
|  | ||||
| 	if ($serial == "on") $args[] = "-s";	//streaming mode | ||||
| 	if ($copy)  $args[] = "-e"; | ||||
|  | ||||
| 	if ($serial) $args[] = "-s";	//streaming mode | ||||
| 	if ($monitor)  $args[] = "-m"; | ||||
| 	if ($verify)  $args[] = "-v"; | ||||
|  | ||||
| 	if (!empty($fanout)) { $args[] = "-f"; $args[] = $fanout; } | ||||
| 	if (!empty($userID)) { $args[] = "-l"; $args[] = $userID; } | ||||
| 	if ($verify == "on")  $args[] = "-v"; | ||||
| 	if ($monitor == "on")  $args[] = "-m"; | ||||
| 	if ($copy == "on")  $args[] = "-e"; | ||||
| 	if ($ret_code == "on") $args[] = "-z"; | ||||
| 	if (!empty($rshell)) { $args[] = "-r"; $args[] = $rshell; } | ||||
| 	if (!empty($shell_opt)) { $args[] = "-o"; $args[] = $shell_opt; } | ||||
|  | ||||
| 	//$exp_cmd = "export DSH_CONTEXT=XCAT XCATROOT=/opt/xcat; "; | ||||
| 	if ($ret_code) $args[] = "-z"; | ||||
|  | ||||
| /* | ||||
| 	if ($copy == "on"){		//using dcp/prcp | ||||
|  | ||||
| 		//extract the script name from the command | ||||
| 		$script = strtok($cmd,' '); | ||||
|  | ||||
| 		//copy the command to the remote node | ||||
| 		$source = $script; | ||||
| 		$target = "/tmp"; | ||||
| 		if (empty($psh) || $psh!="on"){ | ||||
| 			$xml = docmd('xdcp',$noderange,array($source, $target)); | ||||
| 			//todo: check if copy succeeded | ||||
| 		}else{ | ||||
| 			runcmd("pscp $source $noderange:$target",1,$outp); | ||||
| 		} | ||||
| 		$cmd = "/tmp/$cmd"; | ||||
| 	} | ||||
| */ | ||||
|  | ||||
| 	if (empty($psh) || $psh!="on") $command = "xdsh"; | ||||
| 	if (!$psh) $command = "xdsh"; | ||||
| 	else $command = "psh"; | ||||
|  | ||||
| 	//if ($collapse == "on")  $command_string .= " | dshbak -c"; | ||||
| 	//todo:  if ($collapse == "on")  $command_string .= " | dshbak -c"; | ||||
|  | ||||
| 	// Run the script | ||||
| 	$args[] = $cmd; | ||||
| 	echo "<p><b>Command:  $command $noderange " . implode(' ',$args) . "</b></p>"; | ||||
| 	//echo "<p><b>Command Ouput:</b></br></p>"; //output will be returned from the runcmd function call | ||||
| 	//$rc = runcmd($command_string,1, $outp);	//streaming mode - DOES NOT WORK YET | ||||
| 	$xml = docmd($command, $noderange, $args); | ||||
| 	echo "<p>Command:  <b>$command $noderange " . implode(' ',$args) . "</b></p><p>"; | ||||
| 	$xml = docmd($command, $noderange, $args);		//todo: do streaming output | ||||
| 	foreach ($xml->children() as $response) foreach ($response->children() as $line) { echo "$line<br>"; } | ||||
| 	echo "</p>\n"; | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -6,6 +6,20 @@ $TOPDIR = '..'; | ||||
| require_once "$TOPDIR/lib/functions.php"; | ||||
|  | ||||
| insertHeader('Diagnose', NULL, NULL, array('support','diagnose')); | ||||
|  | ||||
| dumpGlobals(); | ||||
|  | ||||
| $xml = docmd("authcheck","",NULL); | ||||
| echo "<p>authcheck:<br>\n"; | ||||
| foreach ($xml->children() as $response) foreach ($response->children() as $t) { echo (string) $t, "<br>\n"; } | ||||
| echo "</p>\n"; | ||||
|  | ||||
| $xml = docmd('tabdump','',NULL); | ||||
| echo "<p>tabdump:<br>\n"; | ||||
| foreach ($xml->children() as $response) foreach ($response->children() as $t) { echo (string) $t, "<br>\n"; } | ||||
| echo "</p>\n"; | ||||
|  | ||||
|  | ||||
| insertNotDoneYet(); | ||||
| insertFooter(); | ||||
| ?> | ||||
|   | ||||
| @@ -79,8 +79,8 @@ then | ||||
|   #fi | ||||
|  | ||||
|   # Authorize the apacheuser to xcatd | ||||
|   echo -e "y\ny\ny" | %{prefix}/share/xcat/scripts/setup-local-client.sh $apacheuser | ||||
|   XCATROOT=%{prefix} %{prefix}/sbin/chtab priority=5 policy.name=$apacheuser policy.rule=allow | ||||
|   #echo -e "y\ny\ny" | %{prefix}/share/xcat/scripts/setup-local-client.sh $apacheuser | ||||
|   #XCATROOT=%{prefix} %{prefix}/sbin/chtab priority=5 policy.name=$apacheuser policy.rule=allow | ||||
|  | ||||
| fi | ||||
|  | ||||
|   | ||||