initial commit of file from CVS for e-smith-base on Thu 26 Oct 11:24:52 BST 2023
This commit is contained in:
125
root/sbin/e-smith/generate-subjectaltnames
Normal file
125
root/sbin/e-smith/generate-subjectaltnames
Normal file
@@ -0,0 +1,125 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
#
|
||||
# generate-subjectaltnames
|
||||
#
|
||||
# This script returns a list of hostnames and IP addresses that
|
||||
# can be used to construct the list of subjectAltName entries
|
||||
# for a web server certificate.
|
||||
#
|
||||
# Usage: generate-subjectaltnames
|
||||
#
|
||||
# Copyright 1999-2003 Mitel Networks Corporation
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the same terms as Perl itself.
|
||||
#
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
use esmith::ConfigDB;
|
||||
use esmith::HostsDB;
|
||||
|
||||
my $configuration = esmith::ConfigDB->open_ro('configuration')
|
||||
or die "Couldn't open configuration DB\n";
|
||||
my $domains = esmith::ConfigDB->open_ro('domains')
|
||||
or die "Couldn't open domains DB\n";
|
||||
|
||||
my $hosts = esmith::HostsDB->open_ro()
|
||||
or die "Couldn't open domains DB\n";
|
||||
|
||||
my %results_dict = ();
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Add FQDN, system name and the domain name.
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
$SystemName = $configuration->get('SystemName')->value;
|
||||
$DomainName = $configuration->get('DomainName')->value;
|
||||
|
||||
$results_dict{$SystemName . '.' . $DomainName} = 1;
|
||||
$results_dict{$SystemName} = 1;
|
||||
$results_dict{$DomainName} = 1;
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Add a wildcard entry for domain name.
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
$results_dict{'*.' . $DomainName} = 1;
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Add IP addresses for the various interfaces.
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
foreach $Interface ('InternalInterface',
|
||||
'ExternalInterface',
|
||||
'ExternalInterface2')
|
||||
{
|
||||
$Interface_Record = $configuration->get($Interface);
|
||||
if ($Interface_Record)
|
||||
{
|
||||
if (defined $Interface_Record->prop('Configuration') and $Interface_Record->prop('Configuration') eq 'static')
|
||||
{
|
||||
if ($Interface_Record->prop('IPAddress'))
|
||||
{
|
||||
$results_dict{$Interface_Record->prop('IPAddress')} = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Add all domains defined
|
||||
#----------------------------------------------------------------------
|
||||
my $modSSL = $configuration->get('modSSL');
|
||||
my $AddDomains = $modSSL->prop('AddDomains') || "enabled";
|
||||
if ( $AddDomains eq "enabled" )
|
||||
{
|
||||
foreach my $domain ( $domains->get_all_by_prop(type => 'domain') )
|
||||
{
|
||||
$results_dict{$domain->key} = 1;
|
||||
}
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Add all hosts per domains defined
|
||||
#----------------------------------------------------------------------
|
||||
my $AddHosts = $modSSL->prop('AddHosts') || "enabled";
|
||||
if ( $AddHosts eq "enabled" )
|
||||
{
|
||||
foreach my $domain ($domains->get_all_by_prop(type => 'domain')) #ignore domain-remote
|
||||
{
|
||||
foreach my $host ( $hosts->get_hosts_by_domain($domain->key) )
|
||||
{
|
||||
next unless (($host->prop('HostType')||'undef') eq 'Self'); #only define self host
|
||||
$results_dict{$host->key} = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Add any alternate names specified in the modSSL config DB.
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
if ($modSSL)
|
||||
{
|
||||
$AlternateNames = $modSSL->prop('AlternateNames');
|
||||
if ($AlternateNames)
|
||||
{
|
||||
foreach $AlternateName (split(',', $AlternateNames))
|
||||
{
|
||||
$AlternateName =~ s/\s//g;
|
||||
$results_dict{$AlternateName} = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Output the sorted list of entries.
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
foreach (sort keys %results_dict)
|
||||
{
|
||||
print "$_\n";
|
||||
}
|
||||
|
||||
exit(0);
|
Reference in New Issue
Block a user