#!/usr/bin/perl # The LearningOnline Network # CrGenerate - Generate a loncapa certificate request. # # $Id: CrGenerate.pl,v 1.3 2004/06/29 11:32:06 foxr Exp $ # # Copyright Michigan State University Board of Trustees # # This file is part of the LearningOnline Network with CAPA (LON-CAPA). # # LON-CAPA is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # LON-CAPA is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with LON-CAPA; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # /home/httpd/html/adm/gpl.txt # # http://www.lon-capa.org/ # # # This script: # 1. Generates a private host key and certificate request/ # 2. Decodes the private host key # 3. Installs the private host key with appropriate permissions # in the appropriate directory (sorry to be vague about this, but # the installation directory is determined by external configuration # info). # 4. Constructs an email to the loncapa cluster administrator # consisting of a generic heading and the certificate request as a MIME # attachment. # 5. Sends the email and # 6. Cleans up after itself by removing any temp files generated. # # # Import section: use strict; use MIME::Entity; use Mail::Mailer; use LONCAPA::Configuration; # Global variable declarations: my $SSLCommand; # Full path to openssl command. my $CertificateDirectory; # LONCAPA Certificate directory. my $KeyFilename; # Key filename (within CertificateDirectory). my $Passphrase="loncapawhatever"; # Initial passphrase for keyfile my $RequestEmail; # Email address of loncapa cert admin. # Debug/log support: # my $DEBUG = 1; # 1 for on, 0 for off. # Send debugging to stderr. # Parameters: # msg - Message to send to stderr. # Implicit Inputs: # $DEBUG - message is only written if this is true. # sub Debug { my $msg = shift; if($DEBUG) { print STDERR "$msg\n"; } } # # Read the LonCAPA web config files to get the values of the # configuration global variables we need: # Implicit inputs: # loncapa.conf - configuration file to read (user specific). # Implicit outputs (see global variables section): # SSLCommand, # CertificateDirectory # KeyfileName # RequestEmail # Side-Effects: # Exit with error if cannot complete. # sub ReadConfig { Debug("Reading configuration"); my $perlvarref = LONCAPA::Configuration::read_conf('loncapa.conf'); # Name of the SSL Program if($perlvarref->{SSLProgram}) { $SSLCommand = $perlvarref->{SSLProgram}; Debug("SSL Command: $SSLCommand"); } else { die "Unable to read the SSLCommand configuration option\n"; } # Where the certificates, and host key are installed: if($perlvarref->{lonCertificateDirectory}) { $CertificateDirectory = $perlvarref->{lonCertificateDirectory}; Debug("Local certificate Directory: $CertificateDirectory"); } else { die "Unable to read SSLDirectory configuration option\n"; } # The name of the host key file (to be installed in SSLDirectory). # if($perlvarref->{lonnetPrivateKey}) { $KeyFilename = $perlvarref->{lonnetPrivateKey}; Debug("Private key will be installed as $KeyFilename"); } else { die "Unable to read lonnetPrivateKey conrig paraemter\n"; } # The email address to which the certificate request is sent: if($perlvarref->{SSLEmail}) { $RequestEmail = $perlvarref->{SSLEmail}; Debug("Certificate request will be sent to $RequestEmail"); } else { die "Could not read SSLEmail coniguration key"; } } sub GenerateRequest {} sub InstallKey {} sub MailRequest {} sub Cleanup {} # Entry point: Debug("Starting program"); ReadConfig; # Read loncapa apache config file. GenerateRequest; # Generate certificate request. InstallKey; # Install the user's key. MailRequest; # Mail certificate request to loncapa Cleanup; # Cleanup temp files created. Debug("Done");