Translations of this page:

Authentifizierung mit My-SQL und i-doit

Eine gängige Methode zur Auhentifizierung bei Versendung vom Apache is mod_auth_mysql. Ohne ein Interface um Benutzer und ggf. Gruppen einzutragen ist dieses Vorgehen aber nicht für jeden geeignet.

Das ServiceManagementtool i-doit ist in der Lage Benutzer und Gruppen in MySQL abzulegen und hat demzufolge auch entsprechende Masken für Benutzer und Gruppen.

Benutzer ja - aber Gruppen? Wozu Gruppen?

Hat man nur Nagios auf seinem Server kommt man auch mit Benutzern aus. Aber spätenstens, wenn man auf dem gleichen Server i-doit fährt hat man 2 Baustellen. Wenn noch mehr Funktionen dazu kommen (Zentraler Zugriff auf Logfiles, zentraler Einstiegspunkt f.d. Bereitschaft, Verwaltung von Steckdosenleisten etc.) ergeben sich sehr schnell Berechtigungskontrukte, die die Verwendung von Gruppen erforderlich machen (zumindest wars bei mir so).

i-doit hat ein komfortables Interface um Benutzer und Gruppen zu erstellen und zu pflegen.

Konfiguration von Apache

Die Beschreibung von mod_auth_mysql ist leider ziemlich rudimentär so dass man sich etwas wie H.Ford auf der Jagd nach den verlorenen Informationen fühlt. Insbesondere wie man gegen mehrere MySQL-Tabellen authentifiziert ist nicht auf Anhieb transparent.

Voraussetzung:

  • Jeder Kontakt, der Zugriff auf das Webinterface von Nagios benötigt muss in i-doit eingetragen sein.
  • Alle Kontakte, die Zugriff auf das Webinterface von Nagios benötigen, müssen Mitglied der berechtigten Gruppe sein.
  • Die Gruppe (im Beispiel unten nagios) wird in der mod_auth_mysql Konfiguration hinterlegt


Die entsprechende Include-Datei für Apache sieht dann so aus:

Für RedHat und CentOS

ScriptAlias /nagios/cgi-bin "/usr/lib64/nagios/cgi"

<Directory "/usr/lib64/nagios/cgi">
   AllowOverride None
   Options ExecCGI
   Order deny,allow
   Allow from all
   AuthName "Nagios Access"
   AuthType Basic
   AuthMySQLEnable on
   AuthMySQLHost "mysqlsrv"
   AuthMySQLDB ops_data
   AuthMySQLPwEncryption md5
   AuthMySQLUserTable isys_person_intern
   AuthMySQLUser nagios
   AuthMySQLPassword deathbird
   AuthMySQLNameField isys_person_intern__title
   AuthMySQLPasswordField isys_person_intern__user_pass
   AuthMySQLGroupTable isys_person_intern,isys_group,isys_group_2_isys_person_intern
   AuthMySQLGroupField isys_group__title
   AuthMySQLGroupCondition "isys_person_intern.isys_person_intern__id=isys_group_2_isys_person_intern.isys_group_2_isys_person_intern_
_isys_person_intern__id and isys_group_2_isys_person_intern.isys_group_2_isys_person_intern__isys_group__id=isys_group.isys_group__id
and isys_group__title='nagios'"
   AuthMySQLAuthoritative On
   AuthMySQLNoPasswd Off
   require group nagios
</Directory>

Alias /nagios "/usr/share/nagios"

<Directory "/usr/share/nagios">
   AllowOverride None
   Options None
   Order deny,allow
   Allow from all
</Directory>



Für Debian und Ubuntu

ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"

<Directory "/usr/local/nagios/sbin">
AllowOverride None
   Options ExecCGI
   Order deny,allow
   Allow from all
   AuthName "Nagios Access"
   AuthType Basic
   AuthUserFile /dev/null
   AuthBasicAuthoritative Off
   AuthMySQL_Authoritative on
   AuthMYSQL on
   AuthMySQL_Host "MYSQLHOST"
   AuthMySQL_User MYSQLUSERNAME
   AuthMySQL_Password MYSQLPASSWORT
   AuthMySQL_DB idoit_data
   AuthMySQL_Encryption_Types PHP_MD5
   AuthMySQL_Password_Table isys_person_intern
   AuthMySQL_Username_Field isys_person_intern__title
   AuthMySQL_Password_Field isys_person_intern__user_pass
   AuthMySQL_Empty_Passwords off
   AuthMySQL_Group_Table isys_person_intern,isys_group,isys_group_2_isys_person_intern
   AuthMySQL_Group_Field isys_group__title
   Auth_MySQL_Group_Clause " AND isys_person_intern.isys_person_intern__id=isys_group_2_isys_person_intern.isys_group_2_isys_person_intern__isys_person_intern__id and isys_group_2_isys_person_intern.isys_group_2_isys_person_intern__isys_group__id=isys_group.isys_group__id and isys_group__title='nagios'"
   require group nagios
</Directory>

Alias /nagios "/usr/local/nagios/share"

<Directory "/usr/local/nagios/share">
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>



Der Inhalt von AuthMySQLGroupCondition ist im Prinzip ein SQL-Statement (select). Gleiches gilt für AuthMySQLGroupTable. Hier ist es ein Join über 3 Tabellen.

Die Statements für andere Sachen (z.B. Logfiles etc.) sind analog aufzubauen.

Passwordänderung für Benutzer ohne i-doit Zugang

Nun hat natürlich nicht jeder Benutzer des Nagios, wie z.B. Fachabteilungen, aber auch das recht, sich an i-doit anzumelden. Dafür habe ich ein kleine Perlprogramm (CGI) geschrieben, mit dem Benutzer ihr passwort selben ändern können:

#!/usr/bin/perl
use strict;
use DBI;
use CGI qw(:cgi-lib);
use vars qw($PASSWORD $USERNAME $DBLOGIN $DBPASS $DATABASE $DBHOST $DBPORT $SQLSTATEMENT $OLD_PASSWORD);
use vars qw($ERRMSG $PASSWORD1 $STH $DBH %in $PASSWORD2 $DSN @ROW);
$DBLOGIN = "changepw";
$DBPASS = "changepw";
$DATABASE = "i-doit_data";
$DBHOST = "mysqlsrv";
$DBPORT = 3306;
$ERRMSG = "";
# Main part ------------------------------------------------------------------------
header();
ReadParse();
# Lesen der Formularfelder auf den Hash '%in'
$PASSWORD  = $in{login_password};
$USERNAME  = $in{login_username};
$PASSWORD1 = $in{login_pass1};
$PASSWORD2 = $in{login_pass2};
# Test if the new password is typed in correctly
if ( $PASSWORD1 ne $PASSWORD2)
   {
   $ERRMSG = "Error! Passwords not equal! Please try it again.";
   error();
   footer();
   exit;
   }
# Connect to the database ----------------------------------------------------------
$DSN = "DBI:mysql:database=$DATABASE;host=$DBHOST;port=$DBPORT";
$DBH = DBI->connect($DSN, $DBLOGIN, $DBPASS, {
       PrintError => 0,   ### Don't report errors via warn(  )
       RaiseError => 1    ### Do report errors via die(  )
       } );
# Constuct a SQL statement ----------------------------------------------------------
# Place the password as MD5 hash into the database for comparing

$SQLSTATEMENT = "insert into tmp_ops_person";
$SQLSTATEMENT =  $SQLSTATEMENT." VALUES ('',\'$USERNAME\', MD5( \'$PASSWORD\' ) )";

# -----  Prepare a SQL statement for execution

$STH = $DBH->prepare( $SQLSTATEMENT ); 

# ----- Execute the statement in the database
$STH->execute();

# Constuct a SQL statement ----------------------------------------------------------
# Now we get the hashed password out of the database and replace the password in the 
# variable with the hashed one
$SQLSTATEMENT = "select tmp_ops_person_intern_user_pass from tmp_ops_person";
$SQLSTATEMENT =  $SQLSTATEMENT." where tmp_ops_person_intern__title = '$USERNAME'";
# -----  Prepare a SQL statement for execution
$STH = $DBH->prepare( $SQLSTATEMENT ); 
# ----- Execute the statement in the database
$STH->execute();
# ----- Retrieve the returned rows of data
while ( @ROW = $STH->fetchrow_array(  ) )
      {
      # Put the hashed password in the var
      $PASSWORD = $ROW[0];
      }
# Constuct a SQL statement ----------------------------------------------------------
$SQLSTATEMENT = "select isys_person_intern__user_pass from isys_person_intern";
$SQLSTATEMENT =  $SQLSTATEMENT." where isys_person_intern__title = '$USERNAME'";
# -----  Prepare a SQL statement for execution
$STH = $DBH->prepare( $SQLSTATEMENT ); 
# ----- Execute the statement in the database
$STH->execute();
# ----- Retrieve the returned rows of data
while ( @ROW = $STH->fetchrow_array(  ) )
      {
      $OLD_PASSWORD = $ROW[0];
      }
# Constuct a SQL statement ----------------------------------------------------------
$SQLSTATEMENT = "DELETE FROM `tmp_ops_person` where tmp_ops_person_intern__title = '$USERNAME'";
# -----  Prepare a SQL statement for execution
$STH = $DBH->prepare( $SQLSTATEMENT ); 
# ----- Execute the statement in the database
$STH->execute();
$DBH->disconnect;
if ( $PASSWORD ne $OLD_PASSWORD)
   {
   $ERRMSG = "Error! This was not your password.<br>Please retype it or ask your guru.";
   error();
   }
else
   {
   # Constuct a SQL statement ----------------------------------------------------------
   $SQLSTATEMENT = "UPDATE `isys_person_intern` set `isys_person_intern__user_pass` = MD5(\'$PASSWORD1\')";
   $SQLSTATEMENT =  $SQLSTATEMENT." where isys_person_intern__title = '$USERNAME'";
   # -----  Prepare a SQL statement for execution
   $STH = $DBH->prepare( $SQLSTATEMENT ); 
   # ----- Execute the statement in the database
   $STH->execute();
   success();
   }
$DBH->disconnect;
exit;

footer();

# Subroutines
sub error
    {
    print "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
    print "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>Change your password</title>\n";
    print "<meta http-equiv=\"content-type\" content=\"text/html; charset=\" iso-8859-15=\"\">\n";
    print "<meta http-equiv=\"content-language\" content=\"de\">\n";
    print "<link rel=\"shortcut icon\" href=\"/i-doit/favicon.ico\" type=\"image/x-icon\">\n";
    print "<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"password.css\">\n";
    print "\n";
    print "<script type=\"text/javascript\">\n";
    print "\n";
    print "function live_clock()\n";
    print " {\n";
    print " var today  = new Date();\n";
    print " var second = today.getSeconds();\n";
    print " var minute = today.getMinutes();\n";
    print " var hour   = today.getHours();\n";
    print " var hour24 = today.getHours();\n";
    print " var ampm   = \"\";\n";
    print " \n";
    print " var day    = today.getDay();\n";
    print " var date   = today.getDate();\n";
    print " var month  = today.getMonth();\n";
    print " var year   = today.getFullYear();\n";
    print " \n";
    print " var days   = new Array();\n";
    print "  days[0]   = \"Sunday\";\n";
    print "  days[1]   = \"Monday\";\n";
    print "  days[2]   = \"Tuesday\";\n";
    print "  days[3]   = \"Wednesday\";\n";
    print "  days[4]   = \"Thursday\";\n";
    print "  days[5]   = \"Friday\";\n";
    print "  days[6]   = \"Saturday\";\n";
    print "  \n";
    print " var mns   = new Array();\n";
    print "  mns[0]   = \"January\";\n";
    print "  mns[1]   = \"February\";\n";
    print "  mns[2]   = \"March\";\n";
    print "  mns[3]   = \"April\";\n";
    print "  mns[4]   = \"May\";\n";
    print "  mns[5]   = \"June\";\n";
    print "  mns[6]   = \"July\";\n";
    print "  mns[7]   = \"August\";\n";
    print "  mns[8]   = \"September\";\n";
    print "  mns[9]   = \"October\";\n";
    print "  mns[10]  = \"November\";\n";
    print "  mns[11]  = \"December\";\n";
    print "   \n";
    print " if(second<10)\n";
    print "  {\n";
    print "   second = \"0\"+second;\n";
    print "  }\n";
    print " if(minute<10)\n";
    print "  {\n";
    print "   minute = \"0\"+minute;\n";
    print "  }\n";
    print " if(hour24<=12)\n";
    print "  {\n";
    print "   ampm = \"AM\";\n";
    print "  }\n";
    print " else\n";
    print "  {\n";
    print "   ampm = \"PM\"\n";
    print "  }\n";
    print " if(hour24>=12)\n";
    print "  {\n";
    print "  hour= hour-12;\n";
    print "  }\n";
    print " if(hour24==0)\n";
    print "  {\n";
    print "  hour=12;\n";
    print "  }\n";
    print "\n";
    print "document.getElementById('live_clock').innerHTML=(hour+\":\"+minute+\":\"+second+\" \"+ampm+' '+days[day]+', '+date+' '+mns[month]+' '+year);\n";
    print "}\n";
    print "\n";
    print "</script>\n";
    print "\n";
    print "</head>\n";
    print "\n";
    print "<body scroll=\"no\" onload=\"setInterval('live_clock()', 1000); fixScroll(); P7_fluidLayers('mydoitArea','5','73','215','auto',5,5,5,5); P7_fluidLayers('menuTreeOn','0','73','215','auto',5,5,5,5); P7_fluidLayers('menuTreeOff','0','73','5','auto',5,5,5,5); P7_fluidLayers('mainAreaNormal','226','73','auto','auto',5,5,5,0); P7_fluidLayers('mainAreaWide','8','73','auto','auto',5,5,5,0); onload_process();\">\n";
    print "\n";
    print "<div id=\"overlay\" style=\"display: none;\"></div>\n";
    print "<div id=\"error\" class=\"login_error\" style=\"display: none;\"><div><span><strong>Notice</strong></span><span class=\"close\"><a onclick=\"new Effect.SwitchOff('error'); $('overlay').style.display='none';\" href=\"javascript:;\">X</a></span></div><p><span id=\"error_message\"></span></p></div>\n";
    print "\n";
    print "\n";
    print "<form action=\"change_password.cgi\" method=\"post\" name=\"change_pass\" id=\"change_pass\" enctype=\"\">\n";
    print "\n";
    print "\n";
    print "<!-- Clock -->\n";
    print "<span id=\"live_clock\"></span>\n";
    print "<!-- Clock end -->\n";
    print "\n";
    print "<!-- Breadcrumb navigation string begin -->\n";
    print "<div id=\"breadCrumbNavi\">\n";
    print "	</div>\n";
    print "<!--  Breadcrumb navigation string end -->\n";
    print "\n";
    print "<!--Banner -->\n";
    print "<div id=\"banner\" style=\"overflow: hidden; height: 50px;\">\n";
    print "	<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">\n";
    print "		<tbody><tr>\n";
    print "			<td style=\"margin: 0px; padding: 0px;\" align=\"left\" height=\"50\" width=\"82\">\n";
    print "					<img src=\"change_password_files/oce_logo.gif\" border=\"0\">\n";
    print "				\n";
    print "			</td>\n";
    print "			<td style=\"margin: 0px; padding: 0px; overflow: hidden;\" align=\"right\" width=\"394\">\n";
    print "			</td>\n";
    print "			<td style=\"margin: 0px; padding: 0px; overflow: hidden;\" align=\"right\" height=\"50\" width=\"100%\">\n";
    print "			</td>\n";
    print "			<td style=\"margin: 0px; padding: 0px; overflow: hidden;\" align=\"right\" width=\"211\">\n";
    print "			</td>\n";
    print "		</tr>\n";
    print "	</tbody></table>\n";
    print "</div>\n";
    print "\n";
    print "\n";
    print "\n";
    print "<div id=\"loginInnerArea\">\n";
    print "	\n";
    print "	<table id=\"loginInnerTable\" cellpadding=\"0\" cellspacing=\"0\">\n";
    print "		<tbody><tr>\n";
    print "			<td>\n";
    print "			<tr>\n";
    print "			<td align=\"center\"><br>$ERRMSG</td>\n";
    print "			</tr>\n";
    print "			</td>\n";
    print "			<td>\n";
    print "			<div id=\"loginContent\">\n";
    print "				<table id=\"loginTable\" align=\"right\" cellpadding=\"2\" cellspacing=\"0\">\n";
    print "					<tbody><tr>\n";
    print "						<td>Username: </td>\n";
    print "						<td>\n";
    print "							<input class=\"inputTextLogin\" name=\"login_username\" id=\"login_username\" value=\"$USERNAME\" onkeyup=\"if(event.keyCode==13)this.form.submit();\" type=\"input\">\n";
    print "						</td>\n";
    print "					</tr>\n";
    print "					<tr>\n";
    print "						<td>Password: </td>\n";
    print "						<td><input class=\"inputTextLogin\" name=\"login_password\" id=\"login_password\" onkeyup=\"if(event.keyCode==13)this.form.submit();\" type=\"password\"></td>\n";
    print "					</tr>\n";
    print "					<tr>\n";
    print "						<td>New Password: </td>\n";
    print "						<td><input class=\"inputTextLogin\" name=\"login_pass1\" id=\"login_pass1\" onkeyup=\"if(event.keyCode==13)this.form.submit();\" type=\"password\"></td>\n";
    print "					</tr>\n";
    print "					<tr>\n";
    print "						<td>Retype New Password: </td>\n";
    print "						<td><input class=\"inputTextLogin\" name=\"login_pass2\" id=\"login_pass2\" onkeyup=\"if(event.keyCode==13)this.form.submit();\" type=\"password\"></td>\n";
    print "					</tr>\n";
    print "					<tr>\n";
    print "						<td colspan=\"2\">\n";
    print "						<div id=\"login_submit\">\n";
    print "						<input name=\"login_submit\" value=\"Change\" class=\"button\" style=\"margin-right: 5px; cursor: pointer;\" onclick=\"this.form.submit();\" onmouseover=\"this.className='buttonActive'; this.style.cursor='pointer';\" onmouseout=\"this.className='button'; \" type=\"button\">\n";
    print "						</div>\n";
    print "							</td>\n";
    print "						</tr>\n";
    print "					</tbody></table>\n";
    print "				</div>\n";
    print "			</td>\n";
    print "		</tr>\n";
    print "	</tbody></table>\n";
    print "	\n";
    print "</div>\n";
    print "	</div>\n";
    print "	<!-- END: TOM GROUP: login| //--> </form>\n";
    print "</body></html>\n";   
    }

sub success
    {
    print "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
    print "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>Change your password</title>\n";
    print "<meta http-equiv=\"content-type\" content=\"text/html; charset=\" iso-8859-15=\"\">\n";
    print "<meta http-equiv=\"content-language\" content=\"de\">\n";
    print "<META Http-equiv=\"refresh\" Content=\"5; URL=/\">\n";
    print "<link rel=\"shortcut icon\" href=\"/i-doit/favicon.ico\" type=\"image/x-icon\">\n";
    print "<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"password.css\">\n";
    print "\n";
    print "<script type=\"text/javascript\">\n";
    print "\n";
    print "function live_clock()\n";
    print " {\n";
    print " var today  = new Date();\n";
    print " var second = today.getSeconds();\n";
    print " var minute = today.getMinutes();\n";
    print " var hour   = today.getHours();\n";
    print " var hour24 = today.getHours();\n";
    print " var ampm   = \"\";\n";
    print " \n";
    print " var day    = today.getDay();\n";
    print " var date   = today.getDate();\n";
    print " var month  = today.getMonth();\n";
    print " var year   = today.getFullYear();\n";
    print " \n";
    print " var days   = new Array();\n";
    print "  days[0]   = \"Sunday\";\n";
    print "  days[1]   = \"Monday\";\n";
    print "  days[2]   = \"Tuesday\";\n";
    print "  days[3]   = \"Wednesday\";\n";
    print "  days[4]   = \"Thursday\";\n";
    print "  days[5]   = \"Friday\";\n";
    print "  days[6]   = \"Saturday\";\n";
    print "  \n";
    print " var mns   = new Array();\n";
    print "  mns[0]   = \"January\";\n";
    print "  mns[1]   = \"February\";\n";
    print "  mns[2]   = \"March\";\n";
    print "  mns[3]   = \"April\";\n";
    print "  mns[4]   = \"May\";\n";
    print "  mns[5]   = \"June\";\n";
    print "  mns[6]   = \"July\";\n";
    print "  mns[7]   = \"August\";\n";
    print "  mns[8]   = \"September\";\n";
    print "  mns[9]   = \"October\";\n";
    print "  mns[10]  = \"November\";\n";
    print "  mns[11]  = \"December\";\n";
    print "   \n";
    print " if(second<10)\n";
    print "  {\n";
    print "   second = \"0\"+second;\n";
    print "  }\n";
    print " if(minute<10)\n";
    print "  {\n";
    print "   minute = \"0\"+minute;\n";
    print "  }\n";
    print " if(hour24<=12)\n";
    print "  {\n";
    print "   ampm = \"AM\";\n";
    print "  }\n";
    print " else\n";
    print "  {\n";
    print "   ampm = \"PM\"\n";
    print "  }\n";
    print " if(hour24>=12)\n";
    print "  {\n";
    print "  hour= hour-12;\n";
    print "  }\n";
    print " if(hour24==0)\n";
    print "  {\n";
    print "  hour=12;\n";
    print "  }\n";
    print "\n";
    print "document.getElementById('live_clock').innerHTML=(hour+\":\"+minute+\":\"+second+\" \"+ampm+' '+days[day]+', '+date+' '+mns[month]+' '+year);\n";
    print "}\n";
    print "\n";
    print "</script>\n";
    print "\n";
    print "</head>\n";
    print "\n";
    print "<body scroll=\"no\" onload=\"setInterval('live_clock()', 1000); fixScroll(); P7_fluidLayers('mydoitArea','5','73','215','auto',5,5,5,5); P7_fluidLayers('menuTreeOn','0','73','215','auto',5,5,5,5); P7_fluidLayers('menuTreeOff','0','73','5','auto',5,5,5,5); P7_fluidLayers('mainAreaNormal','226','73','auto','auto',5,5,5,0); P7_fluidLayers('mainAreaWide','8','73','auto','auto',5,5,5,0); onload_process();\">\n";
    print "\n";
    print "<div id=\"overlay\" style=\"display: none;\"></div>\n";
    print "<div id=\"error\" class=\"login_error\" style=\"display: none;\"><div><span><strong>Notice</strong></span><span class=\"close\"><a onclick=\"new Effect.SwitchOff('error'); $('overlay').style.display='none';\" href=\"javascript:;\">X</a></span></div><p><span id=\"error_message\"></span></p></div>\n";
    print "\n";
    print "\n";
    print "<form action=\"change_password.cgi\" method=\"post\" name=\"change_pass\" id=\"change_pass\" enctype=\"\">\n";
    print "\n";
    print "\n";
    print "<!-- Clock -->\n";
    print "<span id=\"live_clock\"></span>\n";
    print "<!-- Clock end -->\n";
    print "\n";
    print "<!-- Breadcrumb navigation string begin -->\n";
    print "<div id=\"breadCrumbNavi\">\n";
    print "	</div>\n";
    print "<!--  Breadcrumb navigation string end -->\n";
    print "\n";
    print "<!--Banner -->\n";
    print "<div id=\"banner\" style=\"overflow: hidden; height: 50px;\">\n";
    print "	<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">\n";
    print "		<tbody><tr>\n";
    print "			<td style=\"margin: 0px; padding: 0px;\" align=\"left\" height=\"50\" width=\"82\">\n";
    print "					<img src=\"change_password_files/oce_logo.gif\" border=\"0\">\n";
    print "				\n";
    print "			</td>\n";
    print "			<td style=\"margin: 0px; padding: 0px; overflow: hidden;\" align=\"right\" width=\"394\">\n";
    print "			</td>\n";
    print "			<td style=\"margin: 0px; padding: 0px; overflow: hidden;\" align=\"right\" height=\"50\" width=\"100%\">\n";
    print "			</td>\n";
    print "			<td style=\"margin: 0px; padding: 0px; overflow: hidden;\" align=\"right\" width=\"211\">\n";
    print "			</td>\n";
    print "		</tr>\n";
    print "	</tbody></table>\n";
    print "</div>\n";
    print "\n";
    print "\n";
    print "\n";
    print "<div id=\"loginInnerArea\">\n";
    print "	\n";
    print "	<table id=\"loginInnerTable\" cellpadding=\"0\" cellspacing=\"0\">\n";
    print "		<tbody><tr>\n";
    print "			<td>\n";
    print "			<tr>\n";
    print "			<td align=\"center\"><br>Password successfully changed.<br></td>\n";
    print "			</tr>\n";
    print "			<tr>\n";
    print "			<td align=\"center\"><br>You will be redirected to Mission Control.<br><br></td>\n";
    print "			</tr>\n";
    print "			</td>\n";
    print "		</tr>\n";
    print "	</tbody></table>\n";
    print "	\n";
    print "</div>\n";
    print "	</div>\n";
    print "	<!-- END: TOM GROUP: login| //--> </form>\n";
    print "</body></html>\n";   
    }

sub header
    {
    print "Content-type: text/html\n\n";
    print "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
    print "<html>\n";
    print "<head>\n";
    print "<meta content=\"text/html; charset=ISO-8859-1\" http-equiv=\"content-type\">\n";
    print "<title>Change your password</title>\n";
    print "</head>\n";
    print "<body>\n";
    }
    
sub footer
    {
    print "</body>\n";
    print "</html>\n";
    }


Die Variablen

  • $DBLOGIN
  • $DBLOGIN
  • $DBPASS
  • $DATABASE
  • $DBHOST
  • $DBPORT

müssen natürlich angepasst werden. Was fehlt? password.css.

#overlay {
  position: absolute;
  background: #000;
  opacity:  0.4;
  width: 100%;
  text-align: center;
  top: 0px;
  z-index:10;
}
* html #overlay {
  filter:alpha(opacity=40);
  z-index:10;
}
#error {
	position:absolute;
	left:20%;
	top:80px;
	width:60%;
	overflow:auto;
	height:100px;
	z-index:999;
}
#error span a {
	color:#555;
	font-weight:bold;
}
#error span.close {
	position:absolute;
	right:5px;
}
#error {
	position:absolute;
	left:20%;
	top:80px;
	width:60%;
	overflow:auto;
	height:100px;
	z-index:999;
}
#error span a {
	color:#555;
	font-weight:bold;
}
#error span.close {
	position:absolute;
	right:5px;
}
#breadCrumbNavi {
	font-weight:bold;
	font-size:12px;
	/**
	 * @todo NP: Der Workaround hier stinkt.
	 */
	white-space: nowrap;
}
.login_msg {
	margin: 1px 5px 0 5px;
	font-size:10px;
	color: #000000;
}
.login_error {
	text-align:left;
	background-color:#ffdddd;
	border:1px solid #ff4343;
	color: #000000;
	width:400px;
	margin:30px auto;
	z-index:999;
}
.login_error p {
	margin:5px;
}
.login_error div {
	background-color:#ffa1a1;
	border-bottom:1px solid #ff4343;
	padding:5px;
	margin:0;
}
#banner {
		border-bottom:1px solid #000;
	/*background-image:url(/i-doit/images/banner/placeholder.png)*/
	background-color:#C00000;
	background-repeat:repeat-x;
}
#loginInnerArea {
	position:absolute;
	width:100%;
	height:400px;
	text-align:center;
	top:180px;
}

#loginContent {
	height:120px;
	background-image:url("/i-doit/images/banner/logo.gif");
	background-repeat:no-repeat;
	background-position:10px;
	margin:30px 15px;
	text-align:right;
}

#loginContent #login_submit {
	padding:5px 0;
}
.button, .buttonActive {
	border:solid 1px #000000;
		color:#04309d;
	font-weight:bolder;
	font-size:12px;
}

.button {
	background-color:#E5E9FF;
}

.buttonActive {
	background-color:#C1C0EC;
}


Das Stylesheet was ich verwende ist etwas anders, da ich noch mehr damit abdecke. Ich habe hier nur die im Passwort-Skript verwendenten Styles aufgelistet. Ggf. bitte korrigieren und mir ein Feedback schicken.

Martin Fürstenau <mf_at_maerber.de>

nagios/howtos/my-sql_authentifizierung_mit_i-doit.txt · Zuletzt geändert: 2009/06/25 12:48 von jeanluc
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0