# Copyright (c) Stephan Martin # # $Id: TCONFIG.pm,v 1.6 2006/06/28 21:50:42 sm Exp $ # # This program 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. # # This program 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 this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. use strict; package GUI::TCONFIG; use POSIX; # # main screen for configuration # sub show_configbox { my ($main, $name) = @_; my ($box, $vbox, $label, $table, $rows, @options, @options_ca, $entry, $key, $separator, $t, @combostrings, $button_cancel, $button_help, $buttonbox, $combonsCertType, $combosubjectAltName, $combokeyUsage, $comboextendedKeyUsage, $combonsSslServer, $combonsRevocationUrl, $combonsRenewalUrl, $combocnsCertType, $combocsubjectAltName, $combockeyUsage, $combocextendedKeyUsage, $combocnsSslServer, $combocnsRevocationUrl, $combocnsRenewalUrl, $combocansCertType, $combocasubjectAltName, $combocakeyUsage, $combocaextendedKeyUsage, $combocansSslServer, $combocansRevocationUrl, $combocansRenewalUrl); if(not defined($name)) { $name = $main->{'CA'}->{'actca'}; } if(not defined($name)) { GUI::HELPERS::print_warning(_("Can't get CA name")); return; } $main->{'TCONFIG'}->init_config($main, $name); $box = Gtk2::Window->new("toplevel"); $box->set_title("OpenSSL Configuration"); $box->set_resizable(1); $box->set_default_size(800, 600); $box->signal_connect('delete_event' => sub { $box->destroy() }); $box->{'button_ok'} = Gtk2::Button->new_from_stock('gtk-ok'); $box->{'button_ok'}->set_sensitive(0); $box->{'button_ok'}->signal_connect('clicked' => sub { $main->{'TCONFIG'}->write_config($main, $name); $box->destroy() }); $box->{'button_apply'} = Gtk2::Button->new_from_stock('gtk-apply'); $box->{'button_apply'}->set_sensitive(0); $box->{'button_apply'}->signal_connect('clicked' => sub { $main->{'TCONFIG'}->write_config($main, $name) }); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect( 'clicked' => sub { $box->destroy() }); $t = _("All Settings are written unchanged to openssl.conf.\nSo please study the documentation of OpenSSL if you don't know exactly what to do.\nIf you are still unsure - keep the defaults and everything is expected to work fine."); $button_help = Gtk2::Button->new_from_stock('gtk-help'); $button_help->signal_connect('clicked' => sub { GUI::HELPERS::print_info($t) }); $box->{'vbox'} = Gtk2::VBox->new(); $box->{'nb'} = Gtk2::Notebook->new(); $box->{'nb'}->set_tab_pos('top'); $box->{'nb'}->set_show_tabs(1); $box->{'nb'}->set_show_border(1); $box->{'nb'}->set_scrollable(0); $box->add($box->{'vbox'}); $box->{'vbox'}->pack_start($box->{'nb'}, 1, 1, 0); $buttonbox = Gtk2::HButtonBox->new(); $buttonbox->set_layout('end'); $buttonbox->set_spacing(3); $buttonbox->set_border_width(3); $buttonbox->add($button_help); $buttonbox->set_child_secondary($button_help, 1); $buttonbox->add($box->{'button_ok'}); $buttonbox->add($box->{'button_apply'}); $buttonbox->add($button_cancel); $box->{'vbox'}->pack_start($buttonbox, 0, 0, 0); # first page: vbox with warnings :-) $vbox = Gtk2::VBox->new(0, 0); $label = GUI::HELPERS::create_label( _("OpenSSL Configuration"), 'center', 0,0); $box->{'nb'}->append_page($vbox, $label); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("OpenSSL Configuration"), 'center', 0, 1); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $separator = Gtk2::HSeparator->new(); $vbox->pack_start($separator, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("Only change these options, if you really know, what you are doing!!"), 'center', 1, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("You should be aware, that some options may break some crappy software!!"), 'center', 1, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("If you are unsure: leave the defaults untouched"), 'center', 1, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); # second page: server settings @options = qw( nsComment crlDistributionPoints authorityKeyIdentifier issuerAltName nsBaseUrl nsCaPolicyUrl ); my @special_options = qw( nsCertType nsSslServerName nsRevocationUrl nsRenewalUrl subjectAltName keyUsage extendedkeyUsage ); @options_ca = qw( default_days ); $vbox = Gtk2::VBox->new(0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("These Settings are passed to OpenSSL for creating Server Certificates"), 'center', 0, 1); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("Multiple Values can be separated by \",\""), 'center', 1, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $separator = Gtk2::HSeparator->new(); $vbox->pack_start($separator, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $rows = 1; $table = Gtk2::Table->new($rows, 2, 0); $vbox->pack_start($table, 1, 1, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(_("Server Certificate Settings"), 'center', 0, 0); $label = Gtk2::Label->new(_("Server Certificate Settings")); $box->{'nb'}->append_page($vbox, $label); # special option subjectAltName $label = GUI::HELPERS::create_label( _("Subject alternative name (subjectAltName):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $main->{'radiobox'} = Gtk2::HBox->new(0, 0); $main->{'radio1'} = Gtk2::RadioButton->new( undef, _($main->{'words'}{'ip'})); $main->{'radio1'}->signal_connect('toggled' => sub {GUI::CALLBACK::toggle_to_var_pref($main->{'radio1'}, \$main->{'TCONFIG'}->{'server_cert'}->{'subjectAltNameType'}, 'ip', $box)}); $main->{'radiobox'}->add($main->{'radio1'}); $main->{'radio2'} = Gtk2::RadioButton->new( $main->{'radio1'}, _($main->{'words'}{'dns'})); $main->{'radio2'}->signal_connect('toggled' => sub {GUI::CALLBACK::toggle_to_var_pref($main->{'radio2'}, \$main->{'TCONFIG'}->{'server_cert'}->{'subjectAltNameType'}, 'dns', $box)}); $main->{'radiobox'}->add($main->{'radio2'}); $main->{'radio3'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'raw'})); $main->{'radio3'}->signal_connect('toggled' => sub {GUI::CALLBACK::toggle_to_var_pref($main->{'radio3'}, \$main->{'TCONFIG'}->{'server_cert'}->{'subjectAltNameType'}, 'raw', $box)}); $main->{'radiobox'}->add($main->{'radio3'}); if($main->{'TCONFIG'}->{'server_cert'}->{'subjectAltNameType'} eq 'ip') { $main->{'radio1'}->set_active(1) }elsif($main->{'TCONFIG'}->{'server_cert'}->{'subjectAltNameType'} eq 'dns') { $main->{'radio2'}->set_active(1) }elsif($main->{'TCONFIG'}->{'server_cert'}->{'subjectAltNameType'} eq 'raw') { $main->{'radio3'}->set_active(1) } $combosubjectAltName = Gtk2::Combo->new(); @combostrings = ( $main->{'words'}{'none'}, $main->{'words'}{'user'}, $main->{'words'}{'emailcopy'}); $combosubjectAltName->set_popdown_strings(@combostrings); $combosubjectAltName->set_use_arrows(1); $combosubjectAltName->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'server_cert'}->{'subjectAltName'})) { if($main->{'TCONFIG'}->{'server_cert'}->{'subjectAltName'} eq 'user') { $main->{'radio1'}->set_sensitive(1); $main->{'radio2'}->set_sensitive(1); $main->{'radio3'}->set_sensitive(1); $combosubjectAltName->entry->set_text($main->{'words'}{'user'}); }elsif($main->{'TCONFIG'}->{'server_cert'}->{'subjectAltName'} eq 'emailcopy') { $combosubjectAltName->entry->set_text($main->{'words'}{'emailcopy'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); $main->{'radio3'}->set_sensitive(0); }elsif($main->{'TCONFIG'}->{'server_cert'}->{'subjectAltName'} eq 'none') { $combosubjectAltName->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); $main->{'radio3'}->set_sensitive(0); } } else { $combosubjectAltName->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); $main->{'radio3'}->set_sensitive(0); } $combosubjectAltName->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var_san( $combosubjectAltName, $combosubjectAltName->entry, \$main->{'TCONFIG'}->{'server_cert'}->{'subjectAltName'}, $box, $main->{words}, $main->{'radio1'}, $main->{'radio2'}, $main->{'radio3'})}); $table->attach_defaults($combosubjectAltName, 1, 2, $rows-1, $rows); $rows++; $table->attach_defaults($main->{'radiobox'}, 1, 2, $rows-1, $rows); $rows++; # special option keyUsage $label = GUI::HELPERS::create_label( _("Key Usage (keyUsage):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $main->{'radiobox'} = Gtk2::HBox->new(0, 0); $main->{'radio1'} = Gtk2::RadioButton->new(undef, _($main->{'words'}{'critical'})); if($main->{'TCONFIG'}->{'server_cert'}->{'keyUsageType'} eq 'critical') { $main->{'radio1'}->set_active(1) } $main->{'radio1'}->signal_connect('toggled' => sub {GUI::CALLBACK::toggle_to_var_pref($main->{'radio1'}, \$main->{'TCONFIG'}->{'server_cert'}->{'keyUsageType'}, 'critical', $box)}); $main->{'radiobox'}->add($main->{'radio1'}); $main->{'radio2'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'noncritical'})); if($main->{'TCONFIG'}->{'server_cert'}->{'keyUsageType'} eq 'noncritical') { $main->{'radio2'}->set_active(1) } $main->{'radio2'}->signal_connect('toggled' => sub {GUI::CALLBACK::toggle_to_var_pref($main->{'radio2'}, \$main->{'TCONFIG'}->{'server_cert'}->{'keyUsageType'}, 'noncritical', $box)}); $main->{'radiobox'}->add($main->{'radio2'}); $combokeyUsage = Gtk2::Combo->new(); @combostrings = ( $main->{'words'}{'none'}, $main->{'words'}{'sig'}, $main->{'words'}{'key'}, $main->{'words'}{'keysig'}); $combokeyUsage->set_popdown_strings(@combostrings); $combokeyUsage->set_use_arrows(1); $combokeyUsage->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'server_cert'}->{'keyUsage'})) { if($main->{'TCONFIG'}->{'server_cert'}->{'keyUsage'} ne 'none') { $main->{'radio1'}->set_sensitive(1); $main->{'radio2'}->set_sensitive(1); if($main->{'TCONFIG'}->{'server_cert'}->{'keyUsage'} eq 'sig') { $combokeyUsage->entry->set_text($main->{'words'}{'sig'}); }elsif($main->{'TCONFIG'}->{'server_cert'}->{'keyUsage'} eq 'key') { $combokeyUsage->entry->set_text($main->{'words'}{'key'}); }elsif($main->{'TCONFIG'}->{'server_cert'}->{'keyUsage'} eq 'keysig') { $combokeyUsage->entry->set_text($main->{'words'}{'keysig'}); }else { $combokeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } }else { $combokeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } } else { $combokeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } $combokeyUsage->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var_key($combokeyUsage, $combokeyUsage->entry, \$main->{'TCONFIG'}->{'server_cert'}->{'keyUsage'}, $box, $main->{words}, $main->{'radio1'}, $main->{'radio2'})}); $table->attach_defaults($combokeyUsage, 1, 2, $rows-1, $rows); $rows++; $table->attach_defaults($main->{'radiobox'}, 1, 2, $rows-1, $rows); $rows++; # special option extendedKeyUsage $label = GUI::HELPERS::create_label( _("Extended Key Usage (extendedKeyUsage):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $main->{'radiobox'} = Gtk2::HBox->new(0, 0); $main->{'radio1'} = Gtk2::RadioButton->new(undef, _($main->{'words'}{'critical'})); if($main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsageType'} eq 'critical') { $main->{'radio1'}->set_active(1) } $main->{'radio1'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio1'}, \$main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsageType'}, 'critical', $box)}); $main->{'radiobox'}->add($main->{'radio1'}); $main->{'radio2'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'noncritical'})); if($main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsageType'} eq 'noncritical') { $main->{'radio2'}->set_active(1) } $main->{'radio2'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio2'}, \$main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsageType'}, 'noncritical', $box)}); $main->{'radiobox'}->add($main->{'radio2'}); $comboextendedKeyUsage = Gtk2::Combo->new(); @combostrings = ( $main->{'words'}{'none'}, $main->{'words'}{'user'}); if((defined($main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'})) && ($main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'} ne 'none') && ($main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'} ne '')) { push(@combostrings, $main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'}); } $comboextendedKeyUsage->set_popdown_strings(@combostrings); $comboextendedKeyUsage->set_use_arrows(1); $comboextendedKeyUsage->set_value_in_list(0, 0); if(defined($main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'})) { if($main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'} ne 'none') { $main->{'radio1'}->set_sensitive(1); $main->{'radio2'}->set_sensitive(1); if($main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'} eq 'user'){ $comboextendedKeyUsage->entry->set_text($main->{'words'}{'user'}); } else { $comboextendedKeyUsage->entry->set_text($main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'}); } } else { $comboextendedKeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } } else { $comboextendedKeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } $comboextendedKeyUsage->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var_key($comboextendedKeyUsage, $comboextendedKeyUsage->entry, \$main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'}, $box, $main->{words}, $main->{'radio1'}, $main->{'radio2'}) }); $table->attach_defaults($comboextendedKeyUsage, 1, 2, $rows-1, $rows); $rows++; $table->attach_defaults($main->{'radiobox'}, 1, 2, $rows-1, $rows); $rows++; # special option nsCerttype $label = GUI::HELPERS::create_label( _("Netscape Certificate Type (nsCertType):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combonsCertType = Gtk2::Combo->new(); @combostrings = ( $main->{'words'}{'none'}, $main->{'words'}{'server'}, $main->{'words'}{'server, client'}); $combonsCertType->set_popdown_strings(@combostrings); $combonsCertType->set_use_arrows(1); $combonsCertType->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'server_cert'}->{'nsCertType'})) { $combonsCertType->entry->set_text( $main->{'words'}{$main->{'TCONFIG'}->{'server_cert'}->{'nsCertType'}}); } else { $combonsCertType->entry->set_text($main->{'words'}{'none'}); } $combonsCertType->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var($combonsCertType, $combonsCertType->entry, \$main->{'TCONFIG'}->{'server_cert'}->{'nsCertType'}, $box, $main->{words}) }); $table->attach_defaults($combonsCertType, 1, 2, $rows-1, $rows); $rows++; # special option nsSslServer $label = GUI::HELPERS::create_label( _("Netscape SSL Server Name (nsSslServerName):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combonsSslServer = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'user'}); $combonsSslServer->set_popdown_strings(@combostrings); $combonsSslServer->set_use_arrows(1); $combonsSslServer->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'server_cert'}->{'nsSslServerName'}) && $main->{'TCONFIG'}->{'server_cert'}->{'nsSslServerName'} eq 'user') { $combonsSslServer->entry->set_text($main->{'words'}{'user'}); } else { $combonsSslServer->entry->set_text($main->{'words'}{'none'}); } $combonsSslServer->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var($combonsSslServer, $combonsSslServer->entry, \$main->{'TCONFIG'}->{'server_cert'}->{'nsSslServerName'}, $box, $main->{words}) }); $table->attach_defaults($combonsSslServer, 1, 2, $rows-1, $rows); $rows++; # special option nsRevocationUrl $label = GUI::HELPERS::create_label( _("Netscape Revocation URL (nsRevocationUrl):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combonsRevocationUrl = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'user'}); $combonsRevocationUrl->set_popdown_strings(@combostrings); $combonsRevocationUrl->set_use_arrows(1); $combonsRevocationUrl->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'server_cert'}->{'nsRevocationUrl'}) && $main->{'TCONFIG'}->{'server_cert'}->{'nsRevocationUrl'} eq 'user') { $combonsRevocationUrl->entry->set_text($main->{'words'}{'user'}); } else { $combonsRevocationUrl->entry->set_text($main->{'words'}{'none'}); } $combonsRevocationUrl->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var($combonsRevocationUrl, $combonsRevocationUrl->entry, \$main->{'TCONFIG'}->{'server_cert'}->{'nsRevocationUrl'}, $box, $main->{words}) }); $table->attach_defaults($combonsRevocationUrl, 1, 2, $rows-1, $rows); $rows++; # special option nsRenewalUrl $label = GUI::HELPERS::create_label( _("Netscape Renewal URL (nsRenewalUrl):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combonsRenewalUrl = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'user'}); $combonsRenewalUrl->set_popdown_strings(@combostrings); $combonsRenewalUrl->set_use_arrows(1); $combonsRenewalUrl->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'server_cert'}->{'nsRenewalUrl'}) && $main->{'TCONFIG'}->{'server_cert'}->{'nsRenewalUrl'} eq 'user') { $combonsRenewalUrl->entry->set_text($main->{'words'}{'user'}); } else { $combonsRenewalUrl->entry->set_text($main->{'words'}{'none'}); } $combonsRenewalUrl->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var($combonsRenewalUrl, $combonsRenewalUrl->entry, \$main->{'TCONFIG'}->{'server_cert'}->{'nsRenewalUrl'}, $box, $main->{words}) }); $table->attach_defaults($combonsRenewalUrl, 1, 2, $rows-1, $rows); $rows++; # standard options foreach $key (@options) { $entry = GUI::HELPERS::entry_to_table("$key:", \$main->{'TCONFIG'}->{'server_cert'}->{$key}, $table, $rows-1, 1, $box); $rows++; $table->resize($rows, 2); } foreach $key (@options_ca) { $entry = GUI::HELPERS::entry_to_table("$key:", \$main->{'TCONFIG'}->{'server_ca'}->{$key}, $table, $rows-1, 1, $box); $rows++; $table->resize($rows, 2); } # third page: client settings @options = qw( nsComment crlDistributionPoints authorityKeyIdentifier issuerAltName nsBaseUrl nsCaPolicyUrl ); @options_ca = qw( default_days ); $vbox = Gtk2::VBox->new(0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("These Settings are passed to OpenSSL for creating Client Certificates"), 'center', 0, 1); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("Multiple Values can be separated by \",\""), 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $separator = Gtk2::HSeparator->new(); $vbox->pack_start($separator, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $rows = 1; $table = Gtk2::Table->new($rows, 2, 0); $vbox->pack_start($table, 1, 1, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(_("Client Certificate Settings"), 'center', 0, 0); $box->{'nb'}->append_page($vbox, $label); # special option subjectAltName $label = GUI::HELPERS::create_label( _("Subject alternative name (subjectAltName):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $main->{'radiobox'} = Gtk2::HBox->new(0, 0); $main->{'radio1'} = Gtk2::RadioButton->new(undef, _($main->{'words'}{'ip'})); $main->{'radio1'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio1'}, \$main->{'TCONFIG'}->{'client_cert'}->{'subjectAltNameType'}, 'ip', $box) }); $main->{'radiobox'}->add($main->{'radio1'}); $main->{'radio2'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'dns'})); $main->{'radio2'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio2'}, \$main->{'TCONFIG'}->{'client_cert'}->{'subjectAltNameType'}, 'dns', $box) }); $main->{'radiobox'}->add($main->{'radio2'}); $main->{'radio3'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'mail'})); $main->{'radio3'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio3'}, \$main->{'TCONFIG'}->{'client_cert'}->{'subjectAltNameType'}, 'mail', $box) }); $main->{'radiobox'}->add($main->{'radio3'}); $main->{'radio4'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'raw'})); $main->{'radio4'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio4'}, \$main->{'TCONFIG'}->{'client_cert'}->{'subjectAltNameType'}, 'raw', $box) }); $main->{'radiobox'}->add($main->{'radio4'}); if($main->{'TCONFIG'}->{'client_cert'}->{'subjectAltNameType'} eq 'ip') { $main->{'radio1'}->set_active(1) }elsif($main->{'TCONFIG'}->{'client_cert'}->{'subjectAltNameType'} eq 'dns') { $main->{'radio2'}->set_active(1) }elsif($main->{'TCONFIG'}->{'client_cert'}->{'subjectAltNameType'} eq 'mail') { $main->{'radio3'}->set_active(1) }elsif($main->{'TCONFIG'}->{'client_cert'}->{'subjectAltNameType'} eq 'raw') { $main->{'radio4'}->set_active(1) } $combocsubjectAltName = Gtk2::Combo->new(); @combostrings = ( $main->{'words'}{'none'}, $main->{'words'}{'user'}, $main->{'words'}{'emailcopy'}); $combocsubjectAltName->set_popdown_strings(@combostrings); $combocsubjectAltName->set_use_arrows(1); $combocsubjectAltName->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'client_cert'}->{'subjectAltName'})) { if($main->{'TCONFIG'}->{'client_cert'}->{'subjectAltName'} eq 'user') { $main->{'radio1'}->set_sensitive(1); $main->{'radio2'}->set_sensitive(1); $main->{'radio3'}->set_sensitive(1); $main->{'radio4'}->set_sensitive(1); $combocsubjectAltName->entry->set_text($main->{'words'}{'user'}); }elsif($main->{'TCONFIG'}->{'client_cert'}->{'subjectAltName'} eq 'emailcopy') { $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); $main->{'radio3'}->set_sensitive(0); $main->{'radio4'}->set_sensitive(1); $combocsubjectAltName->entry->set_text($main->{'words'}{'emailcopy'}); }elsif($main->{'TCONFIG'}->{'client_cert'}->{'subjectAltName'} eq 'none') { $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); $main->{'radio3'}->set_sensitive(0); $main->{'radio4'}->set_sensitive(1); $combocsubjectAltName->entry->set_text($main->{'words'}{'none'}); } } else { $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); $main->{'radio3'}->set_sensitive(0); $main->{'radio4'}->set_sensitive(1); $combocsubjectAltName->entry->set_text($main->{'words'}{'none'}); } $combocsubjectAltName->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var_san($combocsubjectAltName, $combocsubjectAltName->entry, \$main->{'TCONFIG'}->{'client_cert'}->{'subjectAltName'}, $box, $main->{words}, $main->{'radio1'}, $main->{'radio2'}, $main->{'radio3'}, $main->{'radio4'}) }); $table->attach_defaults($combocsubjectAltName, 1, 2, $rows-1, $rows); $rows++; $table->attach_defaults($main->{'radiobox'}, 1, 2, $rows-1, $rows); $rows++; # special option keyUsage $label = GUI::HELPERS::create_label( _("Key Usage (keyUsage):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $main->{'radiobox'} = Gtk2::HBox->new(0, 0); $main->{'radio1'} = Gtk2::RadioButton->new(undef, _($main->{'words'}{'critical'})); if($main->{'TCONFIG'}->{'client_cert'}->{'keyUsageType'} eq 'critical') { $main->{'radio1'}->set_active(1) } $main->{'radio1'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio1'}, \$main->{'TCONFIG'}->{'client_cert'}->{'keyUsageType'}, 'critical', $box) }); $main->{'radiobox'}->add($main->{'radio1'}); $main->{'radio2'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'noncritical'})); if($main->{'TCONFIG'}->{'client_cert'}->{'keyUsageType'} eq 'noncritical') { $main->{'radio2'}->set_active(1) } $main->{'radio2'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio2'}, \$main->{'TCONFIG'}->{'client_cert'}->{'keyUsageType'}, 'noncritical', $box) }); $main->{'radiobox'}->add($main->{'radio2'}); $combockeyUsage = Gtk2::Combo->new(); @combostrings = ( $main->{'words'}{'none'}, $main->{'words'}{'sig'}, $main->{'words'}{'key'}, $main->{'words'}{'keysig'}); $combockeyUsage->set_popdown_strings(@combostrings); $combockeyUsage->set_use_arrows(1); $combockeyUsage->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'client_cert'}->{'keyUsage'})) { if($main->{'TCONFIG'}->{'client_cert'}->{'keyUsage'} ne 'none') { $main->{'radio1'}->set_sensitive(1); $main->{'radio2'}->set_sensitive(1); if($main->{'TCONFIG'}->{'client_cert'}->{'keyUsage'} eq 'sig') { $combockeyUsage->entry->set_text($main->{'words'}{'sig'}); }elsif($main->{'TCONFIG'}->{'client_cert'}->{'keyUsage'} eq 'key') { $combockeyUsage->entry->set_text($main->{'words'}{'key'}); }elsif($main->{'TCONFIG'}->{'client_cert'}->{'keyUsage'} eq 'keysig') { $combockeyUsage->entry->set_text($main->{'words'}{'keysig'}); }else { $combockeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } }else { $combockeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } } else { $combockeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } $combockeyUsage->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var_key($combockeyUsage, $combockeyUsage->entry, \$main->{'TCONFIG'}->{'client_cert'}->{'keyUsage'}, $box, $main->{words}, $main->{'radio1'}, $main->{'radio2'}) }); $table->attach_defaults($combockeyUsage, 1, 2, $rows-1, $rows); $rows++; $table->attach_defaults($main->{'radiobox'}, 1, 2, $rows-1, $rows); $rows++; # special option extendedKeyUsage $label = GUI::HELPERS::create_label( _("Extended Key Usage (extendedKeyUsage):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $main->{'radiobox'} = Gtk2::HBox->new(0, 0); $main->{'radio1'} = Gtk2::RadioButton->new(undef, _($main->{'words'}{'critical'})); if($main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsageType'} eq 'critical') { $main->{'radio1'}->set_active(1) } $main->{'radio1'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio1'}, \$main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsageType'}, 'critical', $box) }); $main->{'radiobox'}->add($main->{'radio1'}); $main->{'radio2'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'noncritical'})); if($main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsageType'} eq 'noncritical') { $main->{'radio2'}->set_active(1) } $main->{'radio2'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref( $main->{'radio2'}, \$main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsageType'}, 'noncritical', $box) }); $main->{'radiobox'}->add($main->{'radio2'}); $combocextendedKeyUsage = Gtk2::Combo->new(); @combostrings = ( $main->{'words'}{'none'}, $main->{'words'}{'user'}); if((defined($main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'})) && ($main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'} ne 'none') && ($main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'} ne '')) { push(@combostrings, $main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'}); } $combocextendedKeyUsage->set_popdown_strings(@combostrings); $combocextendedKeyUsage->set_use_arrows(1); $combocextendedKeyUsage->set_value_in_list(0, 0); if(defined($main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'})) { if($main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'} ne 'none') { $main->{'radio1'}->set_sensitive(1); $main->{'radio2'}->set_sensitive(1); if($main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'} eq 'user'){ $combocextendedKeyUsage->entry->set_text($main->{'words'}{'user'}); } else { $combocextendedKeyUsage->entry->set_text($main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'}); } } else { $combocextendedKeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } } else { $combocextendedKeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } $combocextendedKeyUsage->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var_key($combocextendedKeyUsage, $combocextendedKeyUsage->entry, \$main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'}, $box, $main->{words}, $main->{'radio1'}, $main->{'radio2'}) }); $table->attach_defaults($combocextendedKeyUsage, 1, 2, $rows-1, $rows); $rows++; $table->attach_defaults($main->{'radiobox'}, 1, 2, $rows-1, $rows); $rows++; # special option nsCerttype $label = GUI::HELPERS::create_label( _("Netscape Certificate Type (nsCertType):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combocnsCertType = Gtk2::Combo->new(); @combostrings = ( $main->{'words'}{'none'}, $main->{'words'}{'objsign'}, $main->{'words'}{'email'}, $main->{'words'}{'client'}, $main->{'words'}{'client, email'}, $main->{'words'}{'client, objsign'}, $main->{'words'}{'client, email, objsign'}); $combocnsCertType->set_popdown_strings(@combostrings); $combocnsCertType->set_use_arrows(1); $combocnsCertType->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'client_cert'}->{'nsCertType'})) { $combocnsCertType->entry->set_text( $main->{'words'}{$main->{'TCONFIG'}->{'client_cert'}->{'nsCertType'}}); } else { $combocnsCertType->entry->set_text($main->{'words'}{'none'}); } $combocnsCertType->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var($combocnsCertType, $combocnsCertType->entry, \$main->{'TCONFIG'}->{'client_cert'}->{'nsCertType'}, $box, $main->{words}) }); $table->attach_defaults($combocnsCertType, 1, 2, $rows-1, $rows); $rows++; # special option nsRevocationUrl $label = GUI::HELPERS::create_label( _("Netscape Revocation URL (nsRevocationUrl):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combocnsRevocationUrl = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'user'}); $combocnsRevocationUrl->set_popdown_strings(@combostrings); $combocnsRevocationUrl->set_use_arrows(1); $combocnsRevocationUrl->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'client_cert'}->{'nsRevocationUrl'}) && $main->{'TCONFIG'}->{'client_cert'}->{'nsRevocationUrl'} eq 'user') { $combocnsRevocationUrl->entry->set_text($main->{'words'}{'user'}); } else { $combocnsRevocationUrl->entry->set_text($main->{'words'}{'none'}); } $combocnsRevocationUrl->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var($combocnsRevocationUrl, $combocnsRevocationUrl->entry, \$main->{'TCONFIG'}->{'client_cert'}->{'nsRevocationUrl'}, $box, $main->{words}) }); $table->attach_defaults($combocnsRevocationUrl, 1, 2, $rows-1, $rows); $rows++; # special option nsRenewalUrl $label = GUI::HELPERS::create_label( _("Netscape Renewal URL (nsRenewalUrl):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combocnsRenewalUrl = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'user'}); $combocnsRenewalUrl->set_popdown_strings(@combostrings); $combocnsRenewalUrl->set_use_arrows(1); $combocnsRenewalUrl->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'client_cert'}->{'nsRenewalUrl'}) && $main->{'TCONFIG'}->{'client_cert'}->{'nsRenewalUrl'} eq 'user') { $combocnsRenewalUrl->entry->set_text($main->{'words'}{'user'}); } else { $combocnsRenewalUrl->entry->set_text($main->{'words'}{'none'}); } $combocnsRenewalUrl->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var($combocnsRenewalUrl, $combocnsRenewalUrl->entry, \$main->{'TCONFIG'}->{'client_cert'}->{'nsRenewalUrl'}, $box, $main->{words}) }); $table->attach_defaults($combocnsRenewalUrl, 1, 2, $rows-1, $rows); $rows++; # standard options foreach $key (@options) { $entry = GUI::HELPERS::entry_to_table("$key:", \$main->{'TCONFIG'}->{'client_cert'}->{$key}, $table, $rows-1, 1, $box); $rows++; $table->resize($rows, 2); } foreach $key (@options_ca) { $entry = GUI::HELPERS::entry_to_table("$key:", \$main->{'TCONFIG'}->{'client_ca'}->{$key}, $table, $rows-1, 1, $box); $rows++; $table->resize($rows, 2); } # fourth page: ca settings @options = qw( nsComment crlDistributionPoints authorityKeyIdentifier issuerAltName nsBaseUrl nsCaPolicyUrl ); @special_options = qw( nsCertType nsRevocationUrl subjectAltName ); @options_ca = qw( default_days ); $vbox = Gtk2::VBox->new(0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("These Settings are passed to OpenSSL for creating CA Certificates"), 'center', 0, 1); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("Multiple Values can be separated by \",\""), 'center', 1, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $separator = Gtk2::HSeparator->new(); $vbox->pack_start($separator, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $rows = 1; $table = Gtk2::Table->new($rows, 2, 0); $vbox->pack_start($table, 1, 1, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(_("CA Certificate Settings"), 'center', 0, 0); $label = Gtk2::Label->new(_("CA Certificate Settings")); $box->{'nb'}->append_page($vbox, $label); # special option subjectAltName $label = GUI::HELPERS::create_label( _("Subject alternative name (subjectAltName):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combocasubjectAltName = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'emailcopy'}); $combocasubjectAltName->set_popdown_strings(@combostrings); $combocasubjectAltName->set_use_arrows(1); $combocasubjectAltName->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'v3_ca'}->{'subjectAltName'})) { if($main->{'TCONFIG'}->{'v3_ca'}->{'subjectAltName'} eq 'emailcopy') { $combocasubjectAltName->entry->set_text($main->{'words'}{'emailcopy'}); }elsif($main->{'TCONFIG'}->{'v3_ca'}->{'subjectAltName'} eq 'none') { $combocasubjectAltName->entry->set_text($main->{'words'}{'none'}); } } else { $combocasubjectAltName->entry->set_text($main->{'words'}{'none'}); } $combocasubjectAltName->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var_san($combocasubjectAltName, $combocasubjectAltName->entry, \$main->{'TCONFIG'}->{'v3_ca'}->{'subjectAltName'}, $box, $main->{words}) }); $table->attach_defaults($combocasubjectAltName, 1, 2, $rows-1, $rows); $rows++; # special option nsCerttype $label = GUI::HELPERS::create_label( _("Netscape Certificate Type (nsCertType):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combocansCertType = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'emailCA'}, $main->{'words'}{'sslCA'}, $main->{'words'}{'objCA'}, $main->{'words'}{'sslCA, emailCA'}, $main->{'words'}{'sslCA, objCA'}, $main->{'words'}{'emailCA, objCA'}, $main->{'words'}{'sslCA, emailCA, objCA'} ); $combocansCertType->set_popdown_strings(@combostrings); $combocansCertType->set_use_arrows(1); $combocansCertType->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'v3_ca'}->{'nsCertType'})) { $combocansCertType->entry->set_text( $main->{'words'}{$main->{'TCONFIG'}->{'v3_ca'}->{'nsCertType'}}); } else { $combocansCertType->entry->set_text($main->{'words'}{'none'}); } $combocansCertType->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var($combocansCertType, $combocansCertType->entry, \$main->{'TCONFIG'}->{'v3_ca'}->{'nsCertType'}, $box, $main->{words}) }); $table->attach_defaults($combocansCertType, 1, 2, $rows-1, $rows); $rows++; # special option keyUsage $label = GUI::HELPERS::create_label( _("Key Usage (keyUsage):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $main->{'radiobox'} = Gtk2::HBox->new(0, 0); $main->{'radio1'} = Gtk2::RadioButton->new(undef, _($main->{'words'}{'critical'})); if($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsageType'} eq 'critical') { $main->{'radio1'}->set_active(1) } $main->{'radio1'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio1'}, \$main->{'TCONFIG'}->{'v3_ca'}->{'keyUsageType'}, 'critical', $box) }); $main->{'radiobox'}->add($main->{'radio1'}); $main->{'radio2'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'noncritical'})); if($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsageType'} eq 'noncritical') { $main->{'radio2'}->set_active(1) } $main->{'radio2'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio2'}, \$main->{'TCONFIG'}->{'v3_ca'}->{'keyUsageType'}, 'noncritical', $box) }); $main->{'radiobox'}->add($main->{'radio2'}); $combocakeyUsage = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'keyCertSign'}, $main->{'words'}{'cRLSign'}, $main->{'words'}{'keyCertSign, cRLSign'}); $combocakeyUsage->set_popdown_strings(@combostrings); $combocakeyUsage->set_use_arrows(1); $combocakeyUsage->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'})) { if($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'} ne 'none') { $main->{'radio1'}->set_sensitive(1); $main->{'radio2'}->set_sensitive(1); if($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'} eq 'keyCertSign') { $combocakeyUsage->entry->set_text($main->{'words'}{'keyCertSign'}); }elsif($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'} eq 'cRLSign') { $combocakeyUsage->entry->set_text($main->{'words'}{'cRLSign'}); }elsif($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'} eq 'keyCertSign, cRLSign') { $combocakeyUsage->entry->set_text($main->{'words'}{'keyCertSign, cRLSign'}); }else { $combocakeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } }else { $combocakeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } } else { $combocakeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } $combocakeyUsage->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var_key($combocakeyUsage, $combocakeyUsage->entry, \$main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'}, $box, $main->{words}, $main->{'radio1'}, $main->{'radio2'}) }); $table->attach_defaults($combocakeyUsage, 1, 2, $rows-1, $rows); $rows++; $table->attach_defaults($main->{'radiobox'}, 1, 2, $rows-1, $rows); $rows++; # special option nsRevocationUrl $label = GUI::HELPERS::create_label( _("Netscape Revocation URL (nsRevocationUrl):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combocansRevocationUrl = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'user'}); $combocansRevocationUrl->set_popdown_strings(@combostrings); $combocansRevocationUrl->set_use_arrows(1); $combocansRevocationUrl->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'v3_ca'}->{'nsRevocationUrl'}) && $main->{'TCONFIG'}->{'v3_ca'}->{'nsRevocationUrl'} eq 'user') { $combocansRevocationUrl->entry->set_text($main->{'words'}{'user'}); } else { $combocansRevocationUrl->entry->set_text($main->{'words'}{'none'}); } $combocansRevocationUrl->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var($combocansRevocationUrl, $combocansRevocationUrl->entry, \$main->{'TCONFIG'}->{'v3_ca'}->{'nsRevocationUrl'}, $box, $main->{words}) }); $table->attach_defaults($combocansRevocationUrl, 1, 2, $rows-1, $rows); $rows++; # standard options foreach $key (@options) { $entry = GUI::HELPERS::entry_to_table("$key:", \$main->{'TCONFIG'}->{'v3_ca'}->{$key}, $table, $rows-1, 1, $box); $rows++; $table->resize($rows, 2); } foreach $key (@options_ca) { $entry = GUI::HELPERS::entry_to_table("$key:", \$main->{'TCONFIG'}->{'ca_ca'}->{$key}, $table, $rows-1, 1, $box); $rows++; $table->resize($rows, 2); } # fifth page: crl settings @options = qw( default_crl_days ); $vbox = Gtk2::VBox->new(0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("These Settings are passed to OpenSSL for creating Certificate Revocation Lists"), 'center', 0, 1); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("Multiple Values can be separated by \",\""), 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $separator = Gtk2::HSeparator->new(); $vbox->pack_start($separator, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $rows = 1; $table = Gtk2::Table->new($rows, 2, 0); $vbox->pack_start($table, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("Revocation List Settings"), 'center', 0, 0); $box->{'nb'}->append_page($vbox, $label); foreach $key (@options) { $entry = GUI::HELPERS::entry_to_table("$key:", \$main->{'TCONFIG'}->{'server_ca'}->{$key}, $table, $rows-1, 1, $box); $rows++; $table->resize($rows, 2); } $box->show_all(); $box->{'button_ok'}->set_sensitive(0); $box->{'button_apply'}->set_sensitive(0); return; } # # configuration for CA # sub show_config_ca { my ($main, $opts, $mode) = @_; my(@options, $key, $box, $button_ok, $button_cancel, $table, $label, $entry, $rows, @combostrings, $combonsCertType, $combosubjectAltName, $combokeyUsage); @options = qw( authorityKeyIdentifier basicConstraints issuerAltName nsComment nsCaRevocationUrl nsCaPolicyUrl nsRevocationUrl nsPolicyUrl ); if(not defined($opts->{'name'})) { GUI::HELPERS::print_warning(_("Can't get CA name")); return; } $main->{'TCONFIG'}->init_config($main, $opts->{'name'}); $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); $button_ok->can_default(1); $button_ok->signal_connect('clicked', sub { $main->{'TCONFIG'}->write_config($main, $opts->{'name'}); $opts->{'configured'} = 1; $main->{'CA'}->create_ca($main, $opts, $box, $mode) }); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect('clicked', sub { $box->destroy() }); $box = GUI::HELPERS::dialog_box( _("CA Configuration"), _("CA Configuration"), $button_ok, $button_cancel); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $box->vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("These Settings are passed to OpenSSL for creating this CA Certificate"), 'center', 0, 1); $box->vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("and the CA Certificates of every SubCA, created with this CA."), 'center', 0, 1); $box->vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("Multiple Values can be separated by \",\""), 'center', 0, 0); $box->vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $box->vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("If you are unsure: leave the defaults untouched"), 'center', 0, 0); $box->vbox->pack_start($label, 0, 0, 0); $rows = 1; $table = Gtk2::Table->new($rows, 2, 0); $box->vbox->add($table); # special option keyUsage $label = GUI::HELPERS::create_label( _("Key Usage (keyUsage):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $main->{'radiobox'} = Gtk2::HBox->new(0, 0); $main->{'radio1'} = Gtk2::RadioButton->new(undef, _($main->{'words'}{'critical'})); if($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsageType'} eq 'critical') { $main->{'radio1'}->set_active(1) } $main->{'radio1'}->signal_connect('toggled' => sub{ GUI::CALLBACK::toggle_to_var_pref( $main->{'radio1'}, \$main->{'TCONFIG'}->{'v3_ca'}->{'keyUsageType'}, 'critical')}); $main->{'radiobox'}->add($main->{'radio1'}); $main->{'radio2'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'noncritical'})); if($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsageType'} eq 'noncritical') { $main->{'radio2'}->set_active(1) } $main->{'radio2'}->signal_connect('toggled' => sub {GUI::CALLBACK::toggle_to_var_pref($main->{'radio2'}, \$main->{'TCONFIG'}->{'v3_ca'}->{'keyUsageType'}, 'noncritical')}); $main->{'radiobox'}->add($main->{'radio2'}); $combokeyUsage = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'keyCertSign'}, $main->{'words'}{'cRLSign'}, $main->{'words'}{'keyCertSign, cRLSign'}); $combokeyUsage->set_popdown_strings(@combostrings); $combokeyUsage->set_use_arrows(1); $combokeyUsage->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'})) { if($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'} ne 'none') { $main->{'radio1'}->set_sensitive(1); $main->{'radio2'}->set_sensitive(1); if($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'} eq 'keyCertSign') { $combokeyUsage->entry->set_text($main->{'words'}{'keyCertSign'}); }elsif($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'} eq 'cRLSign') { $combokeyUsage->entry->set_text($main->{'words'}{'cRLSign'}); }elsif($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'} eq 'keyCertSign, cRLSign') { $combokeyUsage->entry->set_text($main->{'words'}{'keyCertSign, cRLSign'}); }else { $combokeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } }else { $combokeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } } else { $combokeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } $combokeyUsage->entry->signal_connect('changed' => sub{&GUI::CALLBACK::entry_to_var_key($combokeyUsage, $combokeyUsage->entry, \$main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'}, undef, $main->{words}, $main->{'radio1'}, $main->{'radio2'})}); $table->attach_defaults($combokeyUsage, 1, 2, $rows-1, $rows); $rows++; $table->attach_defaults($main->{'radiobox'}, 1, 2, $rows-1, $rows); $rows++; # special option nsCerttype $label = GUI::HELPERS::create_label( _("Netscape Certificate Type (nsCertType):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combonsCertType = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'emailCA'}, $main->{'words'}{'sslCA'}, $main->{'words'}{'objCA'}, $main->{'words'}{'sslCA, emailCA'}, $main->{'words'}{'sslCA, objCA'}, $main->{'words'}{'emailCA, objCA'}, $main->{'words'}{'sslCA, emailCA, objCA'} ); $combonsCertType->set_popdown_strings(@combostrings); $combonsCertType->set_use_arrows(1); $combonsCertType->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'v3_ca'}->{'nsCertType'})) { $combonsCertType->entry->set_text( $main->{'words'}{$main->{'TCONFIG'}->{'v3_ca'}->{'nsCertType'}}); } else { $combonsCertType->entry->set_text($main->{'words'}{'none'}); } $combonsCertType->entry->signal_connect('changed' => sub{GUI::CALLBACK::entry_to_var($combonsCertType, $combonsCertType->entry, \$main->{'TCONFIG'}->{'v3_ca'}->{'nsCertType'}, undef, $main->{words})}); $table->attach_defaults($combonsCertType, 1, 2, $rows-1, $rows); $rows++; # special option subjectAltName $label = GUI::HELPERS::create_label( _("Subject alternative name (subjectAltName):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combosubjectAltName = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'emailcopy'}); $combosubjectAltName->set_popdown_strings(@combostrings); $combosubjectAltName->set_use_arrows(1); $combosubjectAltName->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'v3_ca'}->{'subjectAltName'})) { if($main->{'TCONFIG'}->{'v3_ca'}->{'subjectAltName'} eq 'emailcopy') { $combosubjectAltName->entry->set_text($main->{'words'}{'emailcopy'}); }elsif($main->{'TCONFIG'}->{'v3_ca'}->{'subjectAltName'} eq 'none') { $combosubjectAltName->entry->set_text($main->{'words'}{'none'}); } } else { $combosubjectAltName->entry->set_text($main->{'words'}{'none'}); } $combosubjectAltName->entry->signal_connect('changed' => sub{GUI::CALLBACK::entry_to_var_san($combosubjectAltName, $combosubjectAltName->entry, \$main->{'TCONFIG'}->{'v3_ca'}->{'subjectAltName'}, undef, $main->{words})}); $table->attach_defaults($combosubjectAltName, 1, 2, $rows-1, $rows); $rows++; foreach $key (@options) { $entry = GUI::HELPERS::entry_to_table("$key:", \$main->{'TCONFIG'}->{'v3_ca'}->{$key}, $table, $rows-1, 1); $rows++; $table->resize($rows, 2); } $box->show_all(); return; } 1