Hi,
Within the last weeks we evaluated several CA's including OpenCA. Three teams
stumbled over the same mistake: They misconfigured the httpd user and group.
The result is that when accessing e.g. the initial ca page you get a white
frame and an error entry in the web server log saying:
... Undefined subroutine &main::configError called at /var/www/cgi-bin/ca/ca
line 86., referer: ...
For those not familiar with OpenCA's source code this was complete Greek. Even
experienced administrators threw the towel...
The reason for the missing error description is a bug in OpenCA's error
handling code. When there was a problem while loading the configuration you
try telling this the user by calling
configError( "Error while loading configuration ($CONFIG)!" );
But at this point the method configError() is still unknown. Only after the
configuration loaded successfully it becomes available. So at this point you
have to use the simple print function to report the error.
I attach a patch for openca-0.9.1.3 which tells the user excactly what the
problem is and what (s)he can do about it.
Comments requested :o)
Ciao!
Ronny
--
Ronny Standtke E-Mail: [EMAIL PROTECTED]
secunet SwissIT AG Mobil: + 41 79 786 81 82
Hauptbahnhofstrasse 12 Tel.: + 41 32 625 80 44
CH - 4501 Solothurn Fax: + 41 32 625 80 41
diff -rU 3 openca-0.9.1.3/src/web-interfaces/ca/ca.in openca-0.9.1.3_patched/src/web-interfaces/ca/ca.in
--- openca-0.9.1.3/src/web-interfaces/ca/ca.in 2002-11-26 11:33:03.000000000 +0100
+++ openca-0.9.1.3_patched/src/web-interfaces/ca/ca.in 2003-11-05 14:35:59.000000000 +0100
@@ -83,7 +83,27 @@
my $CONFIG = '@etc_prefix@/servers/@[EMAIL PROTECTED]';
if( (my $ret = $config->loadCfg( "$CONFIG" )) == undef ) {
print "Content-type: text/html\n\n";
- configError( "Error while loading configuration ($CONFIG)!" );
+ if ( -e $CONFIG ) {
+ if ( -r $CONFIG ) {
+ print "The configuration file <b>$CONFIG<b/> can not be parsed!";
+ } else {
+ print "The configuration file <b>$CONFIG</b> exists but can not be read!<p>
+ You probably misconfigured OpenCA during installation. Make sure that you used
+ the correct user and group for your webserver.<p>
+ <i>HINT:</i><br>
+ Under UNIX-like operating systems you can determine the user and group of your
+ webserver by issuing the following command<br>
+ # ps -eo \"%U %G %a\"<br>
+ and look for the process name of your webserver (in most cases httpd)<p>
+ Use this information when customizing your configure script at the following
+ configuration options:<br>
+ --with-httpd-user=<b>user id of webserver</b><br>
+ --with-httpd-group=apache=<b>group id of webserver</b><br>
+ ";
+ }
+ } else {
+ print "The configuration file <b>$CONFIG</b> does not exist!";
+ }
exit 100;
}
$common_libs = $config->getParam('CgiLibPath')->{VALUES}->[0];
diff -rU 3 openca-0.9.1.3/src/web-interfaces/ldap/ldap.in openca-0.9.1.3_patched/src/web-interfaces/ldap/ldap.in
--- openca-0.9.1.3/src/web-interfaces/ldap/ldap.in 2002-09-25 11:35:56.000000000 +0200
+++ openca-0.9.1.3_patched/src/web-interfaces/ldap/ldap.in 2003-11-05 14:36:15.000000000 +0100
@@ -89,7 +89,27 @@
my $CONFIG = '@etc_prefix@/servers/@[EMAIL PROTECTED]';
if( (my $ret = $config->loadCfg( "$CONFIG" )) == undef ) {
print "Content-type: text/html\n\n";
- configError( "Error while loading configuration ($CONFIG)!" );
+ if ( -e $CONFIG ) {
+ if ( -r $CONFIG ) {
+ print "The configuration file <b>$CONFIG<b/> can not be parsed!";
+ } else {
+ print "The configuration file <b>$CONFIG</b> exists but can not be read!<p>
+ You probably misconfigured OpenCA during installation. Make sure that you used
+ the correct user and group for your webserver.<p>
+ <i>HINT:</i><br>
+ Under UNIX-like operating systems you can determine the user and group of your
+ webserver by issuing the following command<br>
+ # ps -eo \"%U %G %a\"<br>
+ and look for the process name of your webserver (in most cases httpd)<p>
+ Use this information when customizing your configure script at the following
+ configuration options:<br>
+ --with-httpd-user=<b>user id of webserver</b><br>
+ --with-httpd-group=apache=<b>group id of webserver</b><br>
+ ";
+ }
+ } else {
+ print "The configuration file <b>$CONFIG</b> does not exist!";
+ }
exit 100;
}
$common_libs = $config->getParam('CgiLibPath')->{VALUES}->[0];
diff -rU 3 openca-0.9.1.3/src/web-interfaces/node/node.in openca-0.9.1.3_patched/src/web-interfaces/node/node.in
--- openca-0.9.1.3/src/web-interfaces/node/node.in 2002-11-20 15:56:08.000000000 +0100
+++ openca-0.9.1.3_patched/src/web-interfaces/node/node.in 2003-11-05 14:36:27.000000000 +0100
@@ -90,7 +90,27 @@
my $CONFIG = '@etc_prefix@/servers/@[EMAIL PROTECTED]';
if( (my $ret = $config->loadCfg( "$CONFIG" )) == undef ) {
print "Content-type: text/html\n\n";
- configError( "Error while loading configuration ($CONFIG)!" );
+ if ( -e $CONFIG ) {
+ if ( -r $CONFIG ) {
+ print "The configuration file <b>$CONFIG<b/> can not be parsed!";
+ } else {
+ print "The configuration file <b>$CONFIG</b> exists but can not be read!<p>
+ You probably misconfigured OpenCA during installation. Make sure that you used
+ the correct user and group for your webserver.<p>
+ <i>HINT:</i><br>
+ Under UNIX-like operating systems you can determine the user and group of your
+ webserver by issuing the following command<br>
+ # ps -eo \"%U %G %a\"<br>
+ and look for the process name of your webserver (in most cases httpd)<p>
+ Use this information when customizing your configure script at the following
+ configuration options:<br>
+ --with-httpd-user=<b>user id of webserver</b><br>
+ --with-httpd-group=apache=<b>group id of webserver</b><br>
+ ";
+ }
+ } else {
+ print "The configuration file <b>$CONFIG</b> does not exist!";
+ }
exit 100;
}
$common_libs = $config->getParam('CgiLibPath')->{VALUES}->[0];
diff -rU 3 openca-0.9.1.3/src/web-interfaces/pub/pki.in openca-0.9.1.3_patched/src/web-interfaces/pub/pki.in
--- openca-0.9.1.3/src/web-interfaces/pub/pki.in 2002-09-25 11:35:56.000000000 +0200
+++ openca-0.9.1.3_patched/src/web-interfaces/pub/pki.in 2003-11-05 14:36:44.000000000 +0100
@@ -89,7 +89,27 @@
my $CONFIG = '@etc_prefix@/servers/@[EMAIL PROTECTED]';
if( (my $ret = $config->loadCfg( "$CONFIG" )) == undef ) {
print "Content-type: text/html\n\n";
- configError( "Error while loading configuration ($CONFIG)!" );
+ if ( -e $CONFIG ) {
+ if ( -r $CONFIG ) {
+ print "The configuration file <b>$CONFIG<b/> can not be parsed!";
+ } else {
+ print "The configuration file <b>$CONFIG</b> exists but can not be read!<p>
+ You probably misconfigured OpenCA during installation. Make sure that you used
+ the correct user and group for your webserver.<p>
+ <i>HINT:</i><br>
+ Under UNIX-like operating systems you can determine the user and group of your
+ webserver by issuing the following command<br>
+ # ps -eo \"%U %G %a\"<br>
+ and look for the process name of your webserver (in most cases httpd)<p>
+ Use this information when customizing your configure script at the following
+ configuration options:<br>
+ --with-httpd-user=<b>user id of webserver</b><br>
+ --with-httpd-group=apache=<b>group id of webserver</b><br>
+ ";
+ }
+ } else {
+ print "The configuration file <b>$CONFIG</b> does not exist!";
+ }
exit 100;
}
$common_libs = $config->getParam('CgiLibPath')->{VALUES}->[0];
diff -rU 3 openca-0.9.1.3/src/web-interfaces/pub/scepd.in openca-0.9.1.3_patched/src/web-interfaces/pub/scepd.in
--- openca-0.9.1.3/src/web-interfaces/pub/scepd.in 2002-10-20 00:26:18.000000000 +0200
+++ openca-0.9.1.3_patched/src/web-interfaces/pub/scepd.in 2003-11-05 14:36:56.000000000 +0100
@@ -74,7 +74,27 @@
my $CONFIG = '@etc_prefix@/servers/@[EMAIL PROTECTED]';
if( (my $ret = $config->loadCfg( "$CONFIG" )) == undef ) {
print "Content-type: text/html\n\n";
- configError( "Error while loading configuration ($CONFIG)!" );
+ if ( -e $CONFIG ) {
+ if ( -r $CONFIG ) {
+ print "The configuration file <b>$CONFIG<b/> can not be parsed!";
+ } else {
+ print "The configuration file <b>$CONFIG</b> exists but can not be read!<p>
+ You probably misconfigured OpenCA during installation. Make sure that you used
+ the correct user and group for your webserver.<p>
+ <i>HINT:</i><br>
+ Under UNIX-like operating systems you can determine the user and group of your
+ webserver by issuing the following command<br>
+ # ps -eo \"%U %G %a\"<br>
+ and look for the process name of your webserver (in most cases httpd)<p>
+ Use this information when customizing your configure script at the following
+ configuration options:<br>
+ --with-httpd-user=<b>user id of webserver</b><br>
+ --with-httpd-group=apache=<b>group id of webserver</b><br>
+ ";
+ }
+ } else {
+ print "The configuration file <b>$CONFIG</b> does not exist!";
+ }
exit 100;
}
$common_libs = $config->getParam('CgiLibPath')->{VALUES}->[0];
diff -rU 3 openca-0.9.1.3/src/web-interfaces/ra/RAServer.in openca-0.9.1.3_patched/src/web-interfaces/ra/RAServer.in
--- openca-0.9.1.3/src/web-interfaces/ra/RAServer.in 2002-09-25 11:35:56.000000000 +0200
+++ openca-0.9.1.3_patched/src/web-interfaces/ra/RAServer.in 2003-11-05 14:37:12.000000000 +0100
@@ -89,7 +89,27 @@
my $CONFIG = '@etc_prefix@/servers/@[EMAIL PROTECTED]';
if( (my $ret = $config->loadCfg( "$CONFIG" )) == undef ) {
print "Content-type: text/html\n\n";
- configError( "Error while loading configuration ($CONFIG)!" );
+ if ( -e $CONFIG ) {
+ if ( -r $CONFIG ) {
+ print "The configuration file <b>$CONFIG<b/> can not be parsed!";
+ } else {
+ print "The configuration file <b>$CONFIG</b> exists but can not be read!<p>
+ You probably misconfigured OpenCA during installation. Make sure that you used
+ the correct user and group for your webserver.<p>
+ <i>HINT:</i><br>
+ Under UNIX-like operating systems you can determine the user and group of your
+ webserver by issuing the following command<br>
+ # ps -eo \"%U %G %a\"<br>
+ and look for the process name of your webserver (in most cases httpd)<p>
+ Use this information when customizing your configure script at the following
+ configuration options:<br>
+ --with-httpd-user=<b>user id of webserver</b><br>
+ --with-httpd-group=apache=<b>group id of webserver</b><br>
+ ";
+ }
+ } else {
+ print "The configuration file <b>$CONFIG</b> does not exist!";
+ }
exit 100;
}
$common_libs = $config->getParam('CgiLibPath')->{VALUES}->[0];