@@ -55,13 +55,13 @@ my %Tree = ();
$Global{'jpeg'} = 1;
eval 'require Tk::JPEG';
$Global{'jpeg'} = 0 if ( $@ );
-
+
$Global{'splash'} = 1;
eval { require Tk::Splashscreen;
require Tie::Watch;
};
$Global{'splash'} = 0 if ( $@ );
-
+
#
# Window roots
#
@@ -70,9 +70,9 @@ $Global{'schemaWindow'} = undef();
$Global{'histWindow'} = undef();
$Global{'portWindow'} = undef();
$Global{'bindWindow'} = undef();
-
+
my %schemaHash = ();
-
+
&init_schemaHash;
$Global{'LDAP_SERVER'} = "";
@@ -118,13 +118,13 @@ my $sepChar = "\f"; # formfeed separator
#--------------------------------------------------------
# Handle the command line parameter(s)
#--------------------------------------------------------
-
+
getopts( 'hnrd:i:' );
-
+
Usage() if ( $opt_h );
my $debug = $opt_n ? 1 : 0;
-
+
# Fork this process on start up.
#
# If not in debug mode;
@@ -134,9 +134,9 @@ my $debug = $opt_n ? 1 : 0;
if ( !$debug && $Global{'platform'} eq 'unix' ) {
-
+
FORK: {
-
+
if ( $pid = fork ) {
# this is parent process, so DIE
#
@@ -146,12 +146,12 @@ if ( !$debug && $Global{'platform'} eq 'unix' ) {
# this is the child process, so keep on running
#
&MAIN_PROCESS();
-
+
} # End of elsif in FORK.
-
+
} # End of FORK block.
-
-
+
+
} # End of if.
else {
#
@@ -159,9 +159,9 @@ else {
#
&MAIN_PROCESS();
} # End of else
-
-
-sub MAIN_PROCESS {
+
+
+sub MAIN_PROCESS {
$Global{'mainWindow'} = MainWindow->new;
$splash = $Global{'mainWindow'}->Splashscreen(-milliseconds => 0)
@@ -169,7 +169,7 @@ $splash = $Global{'mainWindow'}->Splashscreen(-milliseconds => 0)
$splframe = $splash->LabFrame(-label => "TKLKUP SPLASH SCREEN",
-labelside => "acrosstop")
->pack() if ( $Global{splash} );
-
+
$splashList = $splframe->Listbox( -height => 2, -width => 40 )
if ( $Global{splash} );
$splashList->pack()
@@ -196,22 +196,22 @@ $splashList->insert("0", "Setting tklkup GUI.")
if ( $Global{splash} );
$splash->update()
if ( $Global{splash} );
-
+
$Global{'mainWindow'}->title("TKLKUP");
#
# Create the Menubar
#
-
+
$Global{'mainWindow'}->configure(-menu => $Global{'menubar'} = $Global{'mainWindow'}->Menu);
-
+
$Global{'menubar'}->cascade(-label => "Directory ~OPS",
-menuitems => ops_items);
$Global{'menubar'}->command(-label => "Set ~Bind Credentials",
-command => \&BIND );
$Global{'menubar'}->command(-label => "Set DSA ~Port",
- -command => \&PORT );
+ -command => \&PORT );
$Global{'menubar'}->command(-label => "E~XIT PROGRAM",
- -command => sub{exit;} );
+ -command => sub{exit;} );
#
# Create process Exit button
@@ -220,17 +220,17 @@ $mwf = $Global{'mainWindow'} -> Frame() -> pack(-side => "top");
$mwf ->Label( -text => "DIRECTORY SERVER") ->pack (-side =>"left");
$Global{'slist'} = $mwf ->Listbox( -height => 1 );
-
+
$Global{'slist'}->pack( -side => "left", -padx => 2, -pady => 5 );
-
+
$Global{'slist'}->insert("end", $Global{'LDAP_SERVER'});
-
+
#
# Create directory server selection button
# This is where the user will select the directory server to
# query.
#
-
+
$smenu = $mwf -> Menubutton(-text => "SELECT SERVER",
-relief => "raised", -font => $Global{'Font'},
-borderwidth => 3 )
@@ -239,7 +239,7 @@ $smenu = $mwf -> Menubutton(-text => "SELECT SERVER",
#
# Create a LDAP version status label
#
-
+
$Versionstatus = $mwf -> Label -> pack(-side => "left", -anchor => "center" );
if ( $Global{setVersion} == 3 )
@@ -250,7 +250,7 @@ else
{
$Versionstatus->configure( -text => "LDAP V2", -font => $Global{Font});
}
-
+
#
# Create a SSL status label
#
@@ -259,7 +259,7 @@ $SSLstatus = $mwf -> Label -> pack(-side => "left", -anchor => "center" );
if ( $Global{setSSL} )
{
$SSLstatus->configure( -text => "SSL", -font => $Global{Font});
-}
+}
else
{
$SSLstatus->configure( -text => "NON-SSL", -font => $Global{Font});
@@ -269,11 +269,11 @@ else
# Create a REF status label
#
$FRstatus = $mwf -> Label -> pack(-side => "left", -anchor => "center" );
-
+
if ( $Global{fref} )
{
$FRstatus->configure( -text => "REF", -font => $Global{Font});
-}
+}
else
{
$FRstatus->configure( -text => " ", -font => $Global{Font});
@@ -310,13 +310,13 @@ $Global{p1} = $Global{nb}->add('INFO',-label => 'INFO');
&initializeP1;
$splash->Destroy() if ( $Global{splash} );
-
+
$splash = undef();
$Global{schema_timer} = $Global{mainWindow}->repeat(1000, \&update_schema);
#
# Run the Main loop looking for events.
-#
+#
MainLoop;
@@ -324,9 +324,9 @@ MainLoop;
sub ops_items
{
-
+
[
-
+
[ 'command', 'Explore ~Root DSE', -accelerator => "Ctrl-r", -command => \&rootDse ],
"",
[ 'command', 'Set ~SSL', -accelerator => "Ctrl-s", -command => \&setSSL ],
@@ -338,9 +338,9 @@ sub ops_items
[ 'command', 'Toggle ~Follow Referral', -accelerator => "Ctrl-f", -command => \&toggleRef ],
"",
[ 'command', 'E~xit', -accelerator => "Ctrl-x", -command => sub { exit;} ],
-
+
];
-
+
}# End of subroutine ops_items
sub update_schema
@@ -350,12 +350,12 @@ if ( $Global{schemaServer} ne $Global{CORE_SERVER} )
{
$Global{mainWindow} -> Busy(-recurse => 1); # window is busy
$Global{schema_timer}->cancel;
-if ( $Global{schemaServer} ne $Global{CORE_SERVER} )
+if ( $Global{schemaServer} ne $Global{CORE_SERVER} )
{
$currentPanel = $Global{nb} -> raised();
$Global{nb} -> raise('INFO');
-&schema;
+&schema;
$Global{nb} -> raise($currentPanel);
}
@@ -363,16 +363,16 @@ $Global{schemaServer} = $Global{LDAP_SERVER};
$Global{schema_timer} = $Global{mainWindow}->repeat(1000, \&update_schema);
$Global{mainWindow} -> Unbusy; # window is not busy
}
-
+
} # End of subroutine update_schema
sub init_schemaHash
{
-
+
$schemaHash{ 'schema' } = undef();
$schemaHash{ 'obj' } = {};
$schemaHash{ 'tree' } = {};
-
+
$schemaHash{ 'atts' } = [];
$schemaHash{ 'ocs' } = [];
$schemaHash{ 'mrs' } = [];
@@ -381,7 +381,7 @@ sub init_schemaHash
$schemaHash{ 'dits' } = [];
$schemaHash{ 'ditc' } = [];
$schemaHash{ 'mru' } = [];
-
+
} # End of subroutine init_schemaHash
sub setSSL
@@ -400,7 +400,7 @@ sub nonSSL
sub toggleVersion
{
-
+
if ( $Global{setVersion} == 2 )
{
$Global{setVersion} = 3;
@@ -416,7 +416,7 @@ else
sub toggleRef
{
-
+
if ( $Global{fref} == 0 )
{
$Global{fref} = 1;
@@ -427,7 +427,7 @@ else
$Global{fref} = 0;
$FRstatus->configure( -text => " ", -font => $Global{Font});
}
-
+
} # End of subroutine toggleRef
sub saveLdif
@@ -447,7 +447,7 @@ sub initializeProgram
#
# Check for dot file, use it to configure program.
#
-
+
if ( $Global{'platform'} eq 'unix' )
{
$ENV{'TMP'} = "/tmp";
@@ -457,24 +457,24 @@ else
$ENV{'TMP'} = "./";
}
-@dotfile = ();
+@dotfile = ();
push(@dotfile,$opt_i) if $opt_i;
#
# Active State Perl does not always set ENV HOME.
#
-
+
if ( !$ENV{HOME} )
{
$ENV{"HOME"} = ".";
}
-
+
if ( !$ENV{PWD} )
{
$ENV{PWD} = ".";
}
-
+
push( @dotfile, "$ENV{HOME}/.tklkup");
push( @dotfile, "$ENV{PWD}/.tklkup");
@@ -492,34 +492,34 @@ foreach (@dotfile)
if ( -e $dotfile && -r $dotfile )
{
-
+
open(DOT, "<$dotfile");
-
+
@Input = <DOT>;
-
+
foreach (@Input)
{
-
+
my @data = ();
-
+
if ( /^#/ || /^\s+$/ ) { next; }
-
+
chomp();
@data = split(/:/);
-
+
$data[1] =~ s/^\s*//;
$data[1] =~ s/\s+$//;
$data[2] =~ s/^\s*// if ( defined($data[2]) );
$data[2] =~ s/\s+$// if ( defined($data[2]) );
-
-$_ = $data[0];
+
+$_ = $data[0];
TYPE: {
/^followref/i && do {
$Global{fref} = 1;
last TYPE; };
-
+
/^binddn/i && do {
$Global{binddn} = $data[1];
last TYPE; };
@@ -527,16 +527,16 @@ TYPE: {
/^hand/i && do {
$Global{'hand'} = $data[1];
last TYPE; };
-
+
/^port/i && do {
$Global{port} = $data[1];
$Global{nsslport} = $data[1];
last TYPE; };
-
+
/^sslport/i && do {
$Global{sslport} = $data[1];
last TYPE; };
-
+
/^limit/i && do {
if (defined($data[1]) )
{
@@ -547,23 +547,23 @@ TYPE: {
$Global{'limit'} = 100;
}
last TYPE; };
-
+
/^attribute/i && do {
push(@attribute, $data[1]);
last TYPE; };
-
+
/^server/i && do {
push(@server, $data[1]);
if ( defined($data[2]) )
{
$server{$data[1]} = $data[2];
}
- last TYPE; };
+ last TYPE; };
/^font/i && do {
$Global{'Font'} = $data[1];
last TYPE; };
-
+
/^nismapname/i && do {
$Global{'nismapname'} = 1;
last TYPE; };
@@ -575,32 +575,32 @@ TYPE: {
/^mwwidth/i && do {
$Global{'mwwidth'} = $data[1];
last TYPE; };
-
+
/^mwheight/i && do {
$Global{'mwheight'} = $data[1];
last TYPE; };
-
+
my $error = "Parsing configuration file found an undefined type: $_";
ERROR(\$error);
-
+
} # End of case TYPE
-
+
}
-
+
close(DOT);
-
-}
+
+}
#
# Default is for left hand people!
# Over ride the dot file if the -r command line
# option is used.
#
-
+
if ( defined($opt_r) ) {
-
+
$Global{'hand'} = $opt_r ? 'right' : 'left';
# my $Global{'hand'} = $opt_r ? 'left' : 'right'; # uncomment this for right hand def.
-
+
}
#
@@ -633,16 +633,16 @@ $Global{'CORE_SERVER'} = $Global{'LDAP_SERVER'};
# Default directory search base.
#
$error = &dirConn(); # connect and bind to the directory.
-
+
if ( !$error )
{
#
# Find the branches of the directory.
#
-
+
if ( !$error || $Global{setVersion} )
{
-
+
if ( defined($server{$server[0]}) )
{
# user defined base
@@ -658,7 +658,7 @@ if ( !$error || $Global{setVersion} )
my $entry;
my $mesg;
# use root_dse to find the bases
-
+
@base = ();
$entry = $Global{ldap}->root_dse();
if ( defined($entry) )
@@ -680,7 +680,7 @@ if ( !$error || $Global{setVersion} )
}
}
}
-
+
}
}
@@ -697,10 +697,10 @@ else
{
ERROR($error);
}
-
+
}
- @NcKeys = sort(keys(%Tree));
+ @NcKeys = sort(keys(%Tree));
if ( @NcKeys )
{
$LDAP_SEARCH_BASE = $NcKeys[0];
@@ -722,16 +722,16 @@ sub initializeP1
{
$dsaframe = $Global{p1}->Frame()
->pack( -fill => "both", -side => "top" );
-
+
#
# Set up the select directory server radio buttons.
#
-
+
foreach (@server)
{
$smenu->radiobutton( -label => $_, -variable => \$Global{'LDAP_SERVER'},
-value => $_, -command => \&server, -font => $Global{'Font'} );
-
+
}
$dsads = $dsaframe ->LabFrame( -labelside => "acrosstop",
@@ -754,20 +754,20 @@ $Global{dsaptls}->insert("end", $Global{port});
$attframe = $Global{p1}->Frame()
->pack( -fill => "both", -side => "bottom");
-
+
$msgframe = $attframe->LabFrame(-label => "Process Messages",
-labelside => "acrosstop" )
->pack( -fill => "both", -side => "top", -padx => 1, -pady => 1 );
-
-
+
+
$splashList->insert("0", "Creating root dse and attribute buttons.")
if ( $Global{splash} );
$splash->update()
if ( $Global{splash} );
-
+
$msgbox = $msgframe ->Scrolled('Listbox', -scrollbars => 's',
-width => 50, -height => 10 );
-
+
$msgbox->pack( -side => "left" );
#
@@ -792,7 +792,7 @@ $hlframe = $tpframe ->Frame(-borderwidth => 2,-relief => "raised") ->pack( -side
#
# Create search base list box.
#
-
+
$sbbframe = $hlframe->LabFrame(-label => "DIRECTORY SEARCH BASE",
-labelside => "acrosstop")
->pack( -side => "top", -anchor => "e");
@@ -801,7 +801,7 @@ $sbbframe = $hlframe->LabFrame(-label => "DIRECTORY SEARCH BASE",
# Create the Attributes and Save to frame
#
-$ltframe = $tpframe ->Frame()
+$ltframe = $tpframe ->Frame()
->pack( -side => "left", -fill => "both");
#
@@ -810,7 +810,7 @@ $ltframe = $tpframe ->Frame()
$aframe = $ltframe ->LabFrame(-label => "FILTER\nATTRIBUTES",
-labelside => "acrosstop",
- -relief => "raised")
+ -relief => "raised")
->pack( -side => "top", -fill => "both");
#
@@ -819,14 +819,14 @@ $aframe = $ltframe ->LabFrame(-label => "FILTER\nATTRIBUTES",
$fmtframe = $ltframe ->LabFrame( -label => "SAVE FORMAT",
-labelside => "acrosstop",
- -relief => "raised")
+ -relief => "raised")
->pack( -side => "top", -fill => "both");
#
# Create a ldif Checkbutton that will set up a ldif variable
-#
#
-
+#
+
$Global{saveLdifck} = $fmtframe -> Checkbutton(
-text => "LDIF", -command => \&saveLdif,
-variable => \$Global{ldif}, -onvalue => 1,
@@ -837,9 +837,9 @@ $Global{saveLdifck}->select();
#
# Create a ldif Checkbutton that will set up a ldif variable
-#
#
-
+#
+
$Global{saveXmlck} = $fmtframe -> Checkbutton(
-text => "XML", -command => \&saveXml,
-variable => \$Global{xml}, -onvalue => 1,
@@ -849,7 +849,7 @@ $Global{saveXmlck} = $fmtframe -> Checkbutton(
$Global{saveXmlck} -> deselect;
$btframe = $tpframe ->Frame(-borderwidth => 2,
- -relief => "raised")
+ -relief => "raised")
->pack( -side => "left", -fill => "both");
#
@@ -858,9 +858,9 @@ $btframe = $tpframe ->Frame(-borderwidth => 2,
$sbblist = $sbbframe ->Listbox( -width => 40, -font => $Global{'Font'},
-height => 1 );
-
+
$sbblist->pack(-side => $Global{hand});
-
+
$sbblist->insert("end", $LDAP_SEARCH_BASE);
$Global{dsasbls}->insert(0, $LDAP_SEARCH_BASE)
if ( $Global{dsasbls} );
@@ -870,7 +870,7 @@ $Global{dsasbls}->insert(0, $LDAP_SEARCH_BASE)
# This is the point from which the search operation
# will start from.
#
-
+
$sbmenu = $sbbframe->Button( -text => " SELECT\nBASE",
-command => \&sbHlist, -font => $Global{'Font'},
-borderwidth => 3 )
@@ -883,10 +883,10 @@ $sbmenu = $sbbframe->Button( -text => " SELECT\nBASE",
# tree will be displayed.
#
-$Global{'searchHList'} = $hlframe ->Scrolled('HList',
+$Global{'searchHList'} = $hlframe ->Scrolled('HList',
-font => $Global{'Font'},
-scrollbars => 'se',
- -width => 50,
+ -width => 50,
-height => 13,
-itemtype => 'text',
-separator => $sepChar,
@@ -901,7 +901,7 @@ $Global{'searchHList'} = $hlframe ->Scrolled('HList',
); # End of Scrolled HList.
-#$Global{'searchHList'}->add($LDAP_SEARCH_BASE, -text=>$LDAP_SEARCH_BASE);
+#$Global{'searchHList'}->add($LDAP_SEARCH_BASE, -text=>$LDAP_SEARCH_BASE);
$Global{'searchHList'}->pack(-side => "right");
@@ -910,12 +910,12 @@ $Global{'searchHList'}->pack(-side => "right");
# This is where the user will select any special attribute to
# search on.
#
-
+
$amenu = $aframe -> Menubutton(-text => " SELECT\n ADDITIONAL\n ATTRIBUTES",
-relief => "raised", -font => $Global{'Font'},
-borderwidth => 3 )
-> pack( -side => "top", -anchor => "w" );
-
+
#
# First set up the 4 main attribute Radio buttons.
#
@@ -930,14 +930,14 @@ my $sptr = 0;
while ( $sptr <= 3 )
{
$_ = shift(@attribute);
-
+
$rbsn = $aframe -> Radiobutton(-text => "$_", -variable => \$Global{'info'}, -value => "$_", -font => $Global{'Font'} )
-> pack( -side => "top", -anchor => 'w');
-
-if ( !$sptr ) { $rbsn->select(); } # select first attribute
+
+if ( !$sptr ) { $rbsn->select(); } # select first attribute
++$sptr;
}
-
+
} # End of if ( $#attribute > 4 )
else
{
@@ -949,92 +949,92 @@ my $sptr = 0;
while ( @attribute )
{
$_ = shift(@attribute);
-
+
$rbsn = $aframe -> Radiobutton(-text => "$_",
-variable => \$Global{'info'},
-value => "$_", -font => $Global{'Font'} )
-> pack( -side => "top", -anchor => "w");
-
+
if ( !$sptr ) { $rbsn->select(); } # select first attribute
-
+
++$sptr;
}
-
+
}
-
+
#
# Create radio buttons in attributes selection box.
#
#
-
+
foreach (@attribute)
{
$amenu->radiobutton( -label => $_, -variable => \$Global{'info'},
-value => $_, -font => $Global{'Font'});
} # End of foreach (@attribute)
-
+
#
# Create ldap display button
#
-$Global{actionDisplay} = $btframe->Button( -text => "DISPLAY",
- -command => \&ldapActionDisplay,
+$Global{actionDisplay} = $btframe->Button( -text => "DISPLAY",
+ -command => \&ldapActionDisplay,
-font => $Global{'Font'}, -borderwidth => 3 )
- -> pack(-side => "top", -anchor => "w", -padx => 1, -pady => 1 )
+ -> pack(-side => "top", -anchor => "w", -padx => 1, -pady => 1 )
if ( !Exists($Global{actionDisplay}));
-
+
#
# Create save to ldif button
#
-$Global{actionLdif} = $btframe->Button(-text => "SAVE TO",
+$Global{actionLdif} = $btframe->Button(-text => "SAVE TO",
-command => \&ldapActionSaveToLdif,
-font => $Global{'Font'}, -borderwidth => 3)
- -> pack(-side => "top", -anchor => "w", -padx => 1 )
+ -> pack(-side => "top", -anchor => "w", -padx => 1 )
if ( !Exists($Global{actionLdif}));
-
+
#
# Create ldap rename button
#
-$Global{actionRename} = $btframe->Button( -text => "RENAME ",
- -command => \&getRenameData,
+$Global{actionRename} = $btframe->Button( -text => "RENAME ",
+ -command => \&getRenameData,
-font => $Global{'Font'}, -borderwidth => 3 )
- -> pack(-side => "top", -anchor => "w", -padx => 1, -pady => 1 )
+ -> pack(-side => "top", -anchor => "w", -padx => 1, -pady => 1 )
if ( !Exists($Global{actionRename}));
-
+
#
# Create ldap edit button
#
-$Global{actionEdit} = $btframe->Button(-text => " EDIT ",
+$Global{actionEdit} = $btframe->Button(-text => " EDIT ",
-command => \&ldapActionEdit,
-font => $Global{'Font'}, -borderwidth => 3)
- -> pack(-side => "top", -anchor => "w", -padx => 1 )
+ -> pack(-side => "top", -anchor => "w", -padx => 1 )
if ( !Exists($Global{actionEdit}));
-
+
#
# Create ldap delete button
#
-$Global{actionDelete} = $btframe->Button(-text => "DELETE ",
+$Global{actionDelete} = $btframe->Button(-text => "DELETE ",
-command => \&questionAction,
-font => $Global{'Font'}, -borderwidth => 3,
-activeforeground => 'red')
- -> pack(-side => "top", -anchor => "w", -padx => 1, -pady => 1 )
+ -> pack(-side => "top", -anchor => "w", -padx => 1, -pady => 1 )
if ( !Exists($Global{actionDelete}));
-
+
#
# Create process cancel button
#
-$Global{actionCancel} = $btframe->Button(-text => "CANCEL ",
+$Global{actionCancel} = $btframe->Button(-text => "CANCEL ",
-command => \&ldapActionCancel,
-font => $Global{'Font'}, -borderwidth => 3)
- -> pack(-side => "top", -anchor => "w", -padx => 1 )
+ -> pack(-side => "top", -anchor => "w", -padx => 1 )
if ( !Exists($Global{actionCancel}));
#
# Create save all to ldif button
#
-$Global{actionLdifAll} = $btframe->Button( -text => "SAVE ALL\nTO",
- -command => \&ldapActionMultiSaveToLdif,
+$Global{actionLdifAll} = $btframe->Button( -text => "SAVE ALL\nTO",
+ -command => \&ldapActionMultiSaveToLdif,
-font => $Global{'Font'}, -borderwidth => 3 )
- -> pack(-side => "left", -anchor => "w", -padx => 1 )
+ -> pack(-side => "left", -anchor => "w", -padx => 1 )
if ( !Exists($Global{actionLdifAll}));
$bmlframe = $bmframe ->LabFrame(-label => "File Name",
@@ -1044,73 +1044,73 @@ $bmlframe = $bmframe ->LabFrame(-label => "File Name",
# Create Text Entry list box.
#
-$bmlframe->Entry(-textvariable => \$Global{'ldifFile'},
- -width => 40 )
+$bmlframe->Entry(-textvariable => \$Global{'ldifFile'},
+ -width => 40 )
-> pack(-side => "left", -anchor => "w", -fill => 'x');
$splashList->insert("0", "Creating cascading search base menus.")
if ( $Global{splash} );
$splash->update()
if ( $Global{splash} );
-
+
#
# Create Bottom Attribute frame.
# This is where the user will enter data to be
# searched for.
#
-
+
$tframe = $bmframe->LabFrame(-label => "FILTER DATA",
-labelside => "acrosstop")
->pack( -fill => "both", -side => "bottom" , -anchor => "w");
-
+
#
# Create Text Entry list box.
#
-
+
$tframe_text = $tframe->Entry(-textvariable => \$Global{'adata'}, -width => 27 )
-> pack(-side => "left",-anchor => "w", );
$tframe_text->bind('<Key-Return>' => \&search );
-
+
#
# Create Clear Attribute Data and Search Directory buttons
#
$tframe -> Button(-text => "CLEAR FILTER DATA", -command => \&AClear,
-font => $Global{'Font'}, -borderwidth => 5 )
-> pack( -side => "left", -anchor => "w", -pady => 2, -padx => 2 );
-
+
#
# Create get Filter selection menu button.
#
-
+
$sfcmenu = $tframe -> Menubutton(-text => "SET FILTER\nCONDITON",
-relief => "raised", -font => $Global{'Font'},
-borderwidth => 5 )
- -> pack(-side => "left", -anchor => "w",
+ -> pack(-side => "left", -anchor => "w",
-pady => 2, -padx => 2 );
-
+
$flclist = $tframe ->Listbox( -width => 11, -height => 1 );
-
+
$flclist->pack(-side => 'top', -anchor => "w" );
-
+
$flclist->insert(0, $Global{'infoFilter'});
#
# Set up the filter type radio buttons.
#
-
+
$rbsf = $sfcmenu -> radiobutton(-label => "equal",
-variable => \$Global{'infoFilter'},
-value => "equal", -command => \&setFilter );
-
+
$rbsf = $sfcmenu -> radiobutton(-label => "begins with",
-variable => \$Global{'infoFilter'},
-value => "begins with", -command => \&setFilter );
-
-
+
+
$rbsf = $sfcmenu -> radiobutton(-label => "ends with",
-variable => \$Global{'infoFilter'},
-value => "ends with", -command => \&setFilter );
-
+
$rbsf = $sfcmenu -> radiobutton(-label => "contains",
-variable => \$Global{'infoFilter'},
-value => "contains", -command => \&setFilter );
@@ -1118,13 +1118,13 @@ $rbsf = $sfcmenu -> radiobutton(-label => "ends with",
#
# Create Search Directory button
#
-
+
$bmframe -> Button(-text => "SEARCH THE DIRECTORY",
-command => \&search,
-font => $Global{'Font'}, -borderwidth => 5 )
-> pack( -side => "bottom", -fill => "both");
-
-#$Global{'searchHList'}->delete('all');
+
+#$Global{'searchHList'}->delete('all');
$Global{actionDelete}->configure( -state => 'disable');
$Global{actionDisplay}->configure( -state => 'disable');
$Global{actionEdit}->configure( -state => 'disable');
@@ -1161,9 +1161,9 @@ $cframe = $Global{p3}->Frame()
# Create Clear Data
#
-$cframe -> Button(-text => " CLEAR DATA ",
+$cframe -> Button(-text => " CLEAR DATA ",
-command => \&display_clear, -font => $Global{'Font'},
- -borderwidth => 3 )
+ -borderwidth => 3 )
->pack( -fill => 'both' );
#
@@ -1181,19 +1181,19 @@ $lframe = $Global{p3}->LabFrame(-label => "DIRECTORY DATA",
#
$rbclear = $lframe -> Checkbutton(-text => "CLEAR DIRECTORY DATA ON EACH QUERY",
- -variable => \$display_clear, -onvalue => 1, -offvalue => 0,
+ -variable => \$display_clear, -onvalue => 1, -offvalue => 0,
-font => $Global{'Font'} )
-> pack(-anchor => 'sw' );
$rbclear->select();
#
-# Create a ROText Box that will actually contain the
+# Create a ROText Box that will actually contain the
# returned directory data.
#
$list = $lframe ->Scrolled('ROText', -scrollbars => 'se',
- -width => 80, -height => 20, -wrap => 'none',
+ -width => 80, -height => 20, -wrap => 'none',
-font => $Global{'Font'} );
$list->pack(-fill => "both", -expand => 1 );
@@ -1231,16 +1231,16 @@ my $sbframe;
# Create bottom Search Directory frame
#
-$sbframe = $Global{'p4'}->Frame( -borderwidth => 2,
+$sbframe = $Global{'p4'}->Frame( -borderwidth => 2,
-relief => "raised")->pack(
- -fill => "both", -side => "bottom",
+ -fill => "both", -side => "bottom",
-padx => 2);
#
# Create Search Directory button
#
-$sbframe -> Button(-text => "RETRIEVE DIRECTORY SCHEMA",
+$sbframe -> Button(-text => "RETRIEVE DIRECTORY SCHEMA",
-command => \&schema, -font => $Global{'Font'}, -borderwidth => 3 )
-> pack( -fill => "both");
@@ -1248,13 +1248,13 @@ $srbfilelabel = $Global{'p4'}->LabFrame(-label => "SCHEMA DUMP TO FILE",
-labelside => "acrosstop")
->pack( -fill => "both", -anchor => "w", -padx => 2);
-$srbfile = $srbfilelabel -> Checkbutton(
+$srbfile = $srbfilelabel -> Checkbutton(
-text => "Write schema data to file, enter file name in text box below this line. ",
-variable => \$Global{'sfile'}, -onvalue => 1, -offvalue => 0,
-font => $Global{'Font'} )
-> pack(-anchor => "w" );
-$srbfilelabel -> Checkbutton(
+$srbfilelabel -> Checkbutton(
-text => "Write schema data to file in DSML XML format.",
-variable => \$Global{'xml'}, -onvalue => 1, -offvalue => 0,
-font => $Global{'Font'} )
@@ -1264,7 +1264,7 @@ $srbfilelabel -> Checkbutton(
# Create Text Entry list box.
#
-$srbfilelabel->Entry(-textvariable => \$Global{'fdata'}, -width => 25 )
+$srbfilelabel->Entry(-textvariable => \$Global{'fdata'}, -width => 25 )
-> pack(-fill => 'x');
#
@@ -1283,58 +1283,58 @@ $slframe = $Global{'p4'}->LabFrame(-label => "DIRECTORY SCHEMA DATA",
$selframe = $slframe -> LabFrame(-label => "DISPLAY SELECTED OBJECTS",
-labelside => "acrosstop" )
- ->pack( -side => $Global{'hand'},
+ ->pack( -side => $Global{'hand'},
-expand => 1, -fill => "both" );
-$sellframe = $selframe->Frame( -borderwidth => 0,
+$sellframe = $selframe->Frame( -borderwidth => 0,
-relief => "raised")->pack(
- -fill => "both", -side => "top",
+ -fill => "both", -side => "top",
-padx => 0, -pady => 0);
$sellAll = $sellframe -> Checkbutton(-text => "ALL",
- -variable => \$selectAll, -onvalue => 1, -offvalue => 0,
+ -variable => \$selectAll, -onvalue => 1, -offvalue => 0,
-font => $Global{'Font'} )
-> pack(-side => "top", -anchor => 'w' );
$sellAll->select();
$sellObj = $sellframe -> Checkbutton(-text => "objectClasses",
- -variable => \$selectObj, -onvalue => 1, -offvalue => 0,
+ -variable => \$selectObj, -onvalue => 1, -offvalue => 0,
-font => $Global{'Font'} )
-> pack(-side => "top", -anchor => 'w' );
$sellMatch = $sellframe -> Checkbutton(-text => "matchingRules",
- -variable => \$selectMatch, -onvalue => 1, -offvalue => 0,
+ -variable => \$selectMatch, -onvalue => 1, -offvalue => 0,
-font => $Global{'Font'} )
-> pack(-side => "top", -anchor => 'w' );
$sellAtt = $sellframe -> Checkbutton(-text => "attributeType",
- -variable => \$selectAtt, -onvalue => 1, -offvalue => 0,
+ -variable => \$selectAtt, -onvalue => 1, -offvalue => 0,
-font => $Global{'Font'} )
-> pack(-side => "top", -anchor => 'w' );
$sellsyn = $sellframe -> Checkbutton(-text => "ldapsyntaxes",
- -variable => \$selectSyn, -onvalue => 1, -offvalue => 0,
+ -variable => \$selectSyn, -onvalue => 1, -offvalue => 0,
-font => $Global{'Font'} )
-> pack(-side => "top", -anchor => 'w' );
$sellnf = $sellframe -> Checkbutton(-text => "nameforms",
- -variable => \$selectNf, -onvalue => 1, -offvalue => 0,
+ -variable => \$selectNf, -onvalue => 1, -offvalue => 0,
-font => $Global{'Font'} )
-> pack(-side => "top", -anchor => 'w' );
$selldsr = $sellframe -> Checkbutton(-text => "ditstructurerules",
- -variable => \$selectDsr, -onvalue => 1, -offvalue => 0,
+ -variable => \$selectDsr, -onvalue => 1, -offvalue => 0,
-font => $Global{'Font'} )
-> pack(-side => "top", -anchor => 'w' );
$selldcr = $sellframe -> Checkbutton(-text => "ditcontentrules",
- -variable => \$selectDcr, -onvalue => 1, -offvalue => 0,
+ -variable => \$selectDcr, -onvalue => 1, -offvalue => 0,
-font => $Global{'Font'} )
-> pack(-side => "top", -anchor => 'w' );
$sellmru = $sellframe -> Checkbutton(-text => "matchingruleuse",
- -variable => \$selectMru, -onvalue => 1, -offvalue => 0,
+ -variable => \$selectMru, -onvalue => 1, -offvalue => 0,
-font => $Global{'Font'} )
-> pack(-side => "top", -anchor => 'w' );
@@ -1349,15 +1349,15 @@ $sellmru = $sellframe -> Checkbutton(-text => "matchingruleuse",
$slframe ->Button(-text => " CLEAR DATA ",
-command => \&schema_clear, -font => $Global{'Font'},
- -borderwidth => 3 )
+ -borderwidth => 3 )
-> pack(-side => "bottom", -fill => "both", -padx => 5 );
#
-# Create a ROText Box that will actually contain the
+# Create a ROText Box that will actually contain the
# returned directory data.
#
$schema_list = $slframe ->Scrolled('ROText', -scrollbars => 'se',
- -width => 50, -height => 20, -wrap => 'none',
+ -width => 50, -height => 20, -wrap => 'none',
-font => $Global{'Font'} );
$schema_list->pack( -side => "bottom" );
@@ -1376,32 +1376,32 @@ $Global{'mainWindow'}->update;
sub initializeP5
{
-
-$ldifframe = $Global{p5} ->LabFrame(-label => "LDIF FILE NAME")
+
+$ldifframe = $Global{p5} ->LabFrame(-label => "LDIF FILE NAME")
->pack(-side => "top", -fill => "x");
#
# Create Text Entry list box.
#
-$ldifframe->Entry(-textvariable => \$Global{'createLdifFile'},
- -width => 25 )
+$ldifframe->Entry(-textvariable => \$Global{'createLdifFile'},
+ -width => 25 )
-> pack(-fill => 'x');
#
# Create Create Ldif Entry button
#
-$Global{createLdifEntry} = $ldifframe->Button(
- -text => "CREATE/MODIFY ENTRY FROM LDIF FILE",
- -command => \&ldapActionCreateLdifEntry,
+$Global{createLdifEntry} = $ldifframe->Button(
+ -text => "CREATE/MODIFY ENTRY FROM LDIF FILE",
+ -command => \&ldapActionCreateLdifEntry,
-font => $Global{'Font'}, -borderwidth => 3 )
- -> pack(-side => "top", -anchor => "w", -padx => 5, -pady => 5 )
+ -> pack(-side => "top", -anchor => "w", -padx => 5, -pady => 5 )
if ( !Exists($Global{createLdifEntry}));
-$eframe = $Global{p5} ->Frame(-borderwidth => 2,-relief => "raised")
+$eframe = $Global{p5} ->Frame(-borderwidth => 2,-relief => "raised")
->pack(-side => "top", -anchor => 'e');
-$cteframe = $eframe ->LabFrame(-label => "MANUALLY CREATE ENTRY")
+$cteframe = $eframe ->LabFrame(-label => "MANUALLY CREATE ENTRY")
->pack(-side => "top", -anchor => 'e');
#
@@ -1420,9 +1420,9 @@ $dnmenu = $cteframe->Button( -text => " SELECT\nDN BASE",
$dnblist = $cteframe ->Listbox( -width => 40, -font => $Global{'Font'},
-height => 1 );
-
+
$dnblist->pack(-side => "right", -anchor => 'e', -padx => 5, -pady => 5 );
-
+
$dnblist->insert("end", $DN_BASE);
#
@@ -1458,10 +1458,10 @@ my $optr = 0;
# tree will be displayed.
#
-$Global{'olist'} = $eframe->Scrolled('HList',
+$Global{'olist'} = $eframe->Scrolled('HList',
-font => $Global{'Font'},
-scrollbars => 'se',
- -width => $Global{'max'},
+ -width => $Global{'max'},
-height => 20,
-itemtype => 'text',
-separator => $sepChar,
@@ -1487,7 +1487,7 @@ $Global{'olist'} = $eframe->Scrolled('HList',
my $var = $$objectclasses[-1];
# foreach my $var (@var)
-# {
+# {
if ( !(exists($Global{ceObject}->{$var})) )
{
@@ -1504,14 +1504,14 @@ $Global{'olist'} = $eframe->Scrolled('HList',
$Global{ceObject}->{$var}->[1] = $objects;
$colist->windowCreate("end", -window => $ab );
-
+
$ab->configure( -command => [ \&deleteObjectclass, \$ab, $var ] );
-
+
# position to the next row.
$colist->insert("end", "\n");
}
# }
-
+
} # End of subroutine browsecmd
) -> pack( -side => "top", -anchor => 'e')
@@ -1521,10 +1521,10 @@ $Global{'olist'} = $eframe->Scrolled('HList',
# Create a ROText Box that will contain the selected objectclass(s)
# for the new entry.
#
-
+
$Global{'colist'} = $eframe ->Scrolled('Text', -scrollbars => 'se',
-width => $Global{'max'}, -height => 20, -wrap => 'none',
- -font => $Global{'Font'} )
+ -font => $Global{'Font'} )
->pack( -side => "top", -anchor => 'e' )
if ( !Tk::Exists($Global{'colist'}) ) ; # End of Scrolled HList.
@@ -1533,7 +1533,7 @@ $Global{'colist'} = $eframe ->Scrolled('Text', -scrollbars => 'se',
# tree will be displayed.
#
#
-#$Global{'colist'} = $eframe ->Listbox( -width => $Global{'max'},
+#$Global{'colist'} = $eframe ->Listbox( -width => $Global{'max'},
# -height => 20 )
# -> pack( -side => "top", -anchor => 'e')
# if ( !Tk::Exists($Global{'colist'}) ) ; # End of Scrolled HList.
@@ -1543,20 +1543,20 @@ my $base;
$base = "";
#
-# Create Hierarchial list box data tree,
+# Create Hierarchial list box data tree,
# and display data.
#
eval{
- foreach ( @tmpKeys )
+ foreach ( @tmpKeys )
{
- if ( $$tree{$_} ->[0] == 0 )
+ if ( $$tree{$_} ->[0] == 0 )
{
$$tree{$_} ->[0] = 1;
$Global{'olist'}->add($_, -text=>$_); # do the base.
}
- $base = $_;
+ $base = $_;
$array = $$tree{$_};
$ptr = 0;
foreach my $var ( @$array )
@@ -1566,12 +1566,12 @@ eval{
$ptr = 1;
next;
}
- $_ = $base . $sepChar . $var;
+ $_ = $base . $sepChar . $var;
$Global{'olist'}->add($_, -text => $var);
if ( defined($$tree{$_}) )
{
$$tree{$_}->[0] = 1;
- }
+ }
}
}
@@ -1585,12 +1585,12 @@ print "$@" if ( defined($@));
# Reset objectClass array.
#
-foreach ( @tmpKeys )
+foreach ( @tmpKeys )
{
if ( defined($$tree{$_}) )
{
$$tree{$_}->[0] = 0;
- }
+ }
}
} # End of subroutine initializeP5a
@@ -1604,7 +1604,7 @@ sub histSearch_clear {
$Global{'searchList'}->delete("1.0", "end");
} # End of clear subroutine
-
+
sub histSearch_cancel{
$Global{'searchList'}->destroy if Tk::Exists($Global{'searchList'});
@@ -1620,7 +1620,7 @@ $ab = $Global{ceObject}->{$var}->[0];
$ab->destroy;
delete($Global{ceObject}->{$var});
#
-# if no objects, clear the ROTEXT box.
+# if no objects, clear the ROTEXT box.
#
$Global{colist}->delete("1.0","end")
if ( !(keys(%{$Global{ceObject}})) );
@@ -1633,18 +1633,18 @@ $Global{colist}->delete("1.0","end")
sub createSearchBaseWindow
{
&globalPos();
-
+
my $x = $Global{'horz'} + 150;
my $y = $Global{'vert'} + 150;
-
+
#
# Create Main Bind Window
#
-
+
$Global{'sbWindow'} = MainWindow->new;
-
+
$Global{'sbWindow'}->title("Select Search Base");
-
+
$Global{'sbWindow'}->geometry("+$x+$y");
#
# Create process accept button
@@ -1652,7 +1652,7 @@ $Global{'sbWindow'}->geometry("+$x+$y");
$Global{'sbWindow'}->Button( -text => "ACCEPT SELECTED DN", -command => \&sbaccept,
-font => $Global{'Font'}, -borderwidth => 3 )
-> pack(-side => "bottom", -padx => 5, -pady => 5 ) ;
-
+
#
# Create process cancel button
#
@@ -1660,7 +1660,7 @@ $Global{'sbWindow'}->Button(-text => "CANCEL BASE CHANGE",
-command => \&sbcancel,
-font => $Global{'Font'}, -borderwidth => 3)
-> pack(-side => "top", -padx => 5, -pady => 5 ) ;
-
+
my $sbdnframe = $Global{'sbWindow'}->Frame()
->pack( -fill => "both", -side => "top", -padx => 5, -pady => 5 );
@@ -1682,7 +1682,7 @@ sub sbcancel
{
$Global{'sbWindow'}->withdraw if Tk::Exists($Global{'sbWindow'});
} # End of cancel subroutine
-
+
sub sbaccept
{
if ( exists($Global{SelectedDN}) )
@@ -1738,7 +1738,7 @@ foreach $nvar (@keys)
$onvar = $nvar;
$t1v = $Tree{$nvar};
# print "t1 : " ,Dumper($t1v), "\n";
-
+
$Global{sbtree}->add($nvar, -text => $nvar);
foreach $bvar (@$t1v)
{
@@ -1781,13 +1781,13 @@ foreach $nvar (@keys)
$path .= $text;
# print "path == $path\n";
# print "text == $text\n";
-
+
$path = $text if ( !length($path)) ;
$BASEDN{$path} = $adn;
-
+
$Global{sbtree}->add($path, -text => $text);
}
-
+
$Global{sbtree}->setmode($onvar,'close');
$Global{sbtree}->close($onvar);
}
@@ -1803,7 +1803,7 @@ sub destroyTree
#
# Get the attributes of the selected objectClasses
-#
+#
sub getObjectAttributes
{
@@ -1818,9 +1818,9 @@ sub getObjectAttributes
foreach my $hvar ( @hashKeys)
{
-
+
@tmp = split(/$sepChar/,$Global{ceObject}->{$hvar}->[1]);
-
+
foreach my $nvar (@tmp)
{
if ( !(grep(/$nvar/,@objectclasses)) )
@@ -1832,7 +1832,7 @@ sub getObjectAttributes
}
- return if (!@objectclasses); # can not create an entry with no objectclass.
+ return if (!@objectclasses); # can not create an entry with no objectclass.
#
# If this is a posixAccount or shadowAccount, automatically put
@@ -1840,16 +1840,16 @@ sub getObjectAttributes
# the new entry.
#
- push(@objectclasses, "posixAccount")
- if ( grep(/shadowAccount/,@objectclasses) &&
+ push(@objectclasses, "posixAccount")
+ if ( grep(/shadowAccount/,@objectclasses) &&
!( grep(/posixAccount/,@objectclasses) ) );
- push(@objectclasses, "shadowAccount")
+ push(@objectclasses, "shadowAccount")
if ( grep(/posixAccount/,@objectclasses) &&
!( grep(/shadowAccount/,@objectclasses) ) );
- push(@objectclasses, "account")
- if ( grep(/shadowAccount/,@objectclasses) &&
+ push(@objectclasses, "account")
+ if ( grep(/shadowAccount/,@objectclasses) &&
grep(/posixAccount/,@objectclasses) &&
!( grep(/account/,@objectclasses) ) );
@@ -1861,7 +1861,7 @@ sub getObjectAttributes
$Global{entryData}->{must} = [];
foreach my $var (@objectclasses)
- {
+ {
$Global{mainWindow}->update;
$oid = $$obj{$var}->[0];
#
@@ -1890,7 +1890,7 @@ sub getObjectAttributes
}
else
{
- push(@{$Global{entryData}->{must}}, $alArray )
+ push(@{$Global{entryData}->{must}}, $alArray )
if ( !(grep(/$alArray/,@{$Global{entryData}})) );
}
}
@@ -1911,7 +1911,7 @@ sub getObjectAttributes
}
else
{
- push(@{$Global{entryData}->{may}}, $alArray )
+ push(@{$Global{entryData}->{may}}, $alArray )
if ( !(grep(/$alArray/,@{$Global{entryData}})) );
}
}
@@ -1926,7 +1926,7 @@ sub getObjectAttributes
# Search the directory for data
#
-sub search
+sub search
{
my $mesg;
my $error;
@@ -1939,7 +1939,7 @@ $Global{mainWindow} -> Busy(-recurse => 1); # window is busy
# Destroy the dn history list if it exists.
#
$Global{'searchHList'}->delete('all') if Tk::Exists($Global{'searchHList'});
-
+
#
# Parameter(s) to return
#
@@ -1949,7 +1949,7 @@ if ( $Global{'setVersion'} == 3 )
#
# Default to return everything.
#
-$Global{att_wanted} = [ "*",
+$Global{att_wanted} = [ "*",
"aci",
"createTimeStamp",
"modifyTimeStamp",
@@ -1960,7 +1960,7 @@ else
{
#
#
-# If you have only version 2 ldap servers you will need to
+# If you have only version 2 ldap servers you will need to
# to add the attributes that you want data returned for to
# this list.
#
@@ -1975,7 +1975,7 @@ $Global{att_wanted} = [ "cn" ,
#
# Set Filter options.
-#
+#
if ( $Global{'info'} eq "Filter" )
{
$match = $Global{'adata'};
@@ -2024,7 +2024,7 @@ $error = dirConn();
if ( $error == 1 )
{
- if ( defined($Global{dirConnError}) )
+ if ( defined($Global{dirConnError}) )
{
$error = "search $Global{dirConnError}";
ERROR(\$error);
@@ -2053,15 +2053,15 @@ $mesg = $Global{ldap}->search(
filter => $Global{filter},
attrs => $Global{att_wanted},
callback => \&print_entry,
-);
-
-if ( $mesg->code && $mesg->code != 48 )
+);
+
+if ( $mesg->code && $mesg->code != 48 )
{
ERROR($mesg->code);
}
#
-# Create Hierarchial DN list box data tree,
+# Create Hierarchial DN list box data tree,
# and display data.
#
@@ -2070,7 +2070,7 @@ eval
#
# Create the base point.
#
-$Global{'searchHList'}->add($LDAP_SEARCH_BASE, -text=>$LDAP_SEARCH_BASE);
+$Global{'searchHList'}->add($LDAP_SEARCH_BASE, -text=>$LDAP_SEARCH_BASE);
$results = $Global{'searchResults'};
@@ -2079,7 +2079,7 @@ $results = $Global{'searchResults'};
#
# build the hierachical list using the DN
#
-foreach my $dnvar ( @dnKeys )
+foreach my $dnvar ( @dnKeys )
{
$var = $$results{$dnvar}; # get entry data array
$shbase = $LDAP_SEARCH_BASE . $sepChar . $$var[0]; # create new leaf
@@ -2103,16 +2103,16 @@ sub print_entry {
my $information = {};
if ( !defined($entry) )
- {
+ {
return;
}
-
+
$dn = $entry->dn; # store the entry dn
++$Global{'records'};
- $msgbox->delete("0.0", "end")
+ $msgbox->delete("0.0", "end")
if ( !($Global{'records'} % 10 ));
$msgbox->update if ( !($Global{'records'} % 10 ));
- $msgbox->insert("0.0", "Entries found: $Global{'records'}")
+ $msgbox->insert("0.0", "Entries found: $Global{'records'}")
if ( !($Global{'records'} % 10 ));
$msgbox->update if ( !($Global{'records'} % 10 ));
#
@@ -2133,21 +2133,21 @@ sub print_entry {
#
# Get a list of record attributes
#
-
+
my @attrs = sort $entry->attributes;
$max = 0;
#
# Calculate each attribute`s text length.
- # We use this to create a pretty print out in the
+ # We use this to create a pretty print out in the
# List Box
#
-
+
foreach (@attrs) { $max = length($_) if length($_) > $max }
#
# Get attribute`s data
#
-
+
foreach (@attrs) {
# my $attr = $entry->get_value($_, asref => 1);
my $attr = [];
@@ -2167,7 +2167,7 @@ sub print_entry {
$$information{$_} = $attr; # record ldap data
next;
-
+
}
}
push(@$data, $dn); # dn of entry
@@ -2180,20 +2180,20 @@ $Global{mainWindow} -> Unbusy; # window is not busy
} # End of search subroutine
sub AClear {
-
+
#
# Clear out text in Attribute Box
#
-
+
$Global{'adata'} = "";
-
+
} # End of AClear subroutine
#
# Change to a new directory server.
#
-sub server
+sub server
{
my $widget;
my $ptr;
@@ -2281,7 +2281,7 @@ elsif ( $Global{setVersion} == 3 )
}
else
{
- if ( defined($Global{dirConnError}) )
+ if ( defined($Global{dirConnError}) )
{
ERROR(\$Global{dirConnError});
$msgbox->insert("1", "$Global{dirConnError}");
@@ -2340,18 +2340,18 @@ $flclist->insert(0 , $Global{'infoFilter'});
#
# Make the correction and bind to the directory server.
#
-
+
sub dirConn
{
my $error;
$error = 0;
-
+
$Global{dirConnError} = undef();
-
+
#
# Make the connection to the directory server
#
-
+
if ( $Global{port} == 636 || $Global{'setSSL'} )
{
@@ -2377,7 +2377,7 @@ if ( !($Global{ldap}->isa('Net::LDAPS') ) )
$Global{dirConnError} = "LDAPS connection error to $Global{'LDAP_SERVER'}.";
return -1;
}
-
+
}
else
{
@@ -2391,29 +2391,29 @@ if ( $error )
$Global{dirConnError} = "LDAP connection error to $Global{'LDAP_SERVER'}.";
return 1;
}
-
+
}
-
+
$mesg = $Global{ldap}->bind( password => "$Global{'bindpw'}",
dn => "$Global{'binddn'}",
version => $Global{'setVersion'},
);
-
+
if ( $mesg->code && $mesg->code != 48 )
{
# $errstr = $mesg->code;
# ERROR($errstr);
return $mesg->code;
}
-
+
return 0;
-
+
} # End of subroutine dirConn
#
# Connect and bind to the referral directory server
#
-
+
sub dirRConn
{
my ($url) = @_;
@@ -2425,10 +2425,10 @@ $Global{dirConnError} = undef();
#
# Make the connection to the directory server
#
-
+
if ( $Global{port} == 636 || $Global{'setSSL'} )
{
-
+
$bindcommand = 'require Net::LDAPS; new Net::LDAPS( $url, timeout => 1, debug => $opt{d} ) ';
@@ -2438,20 +2438,20 @@ $error = "This program currently does not support SSL on Microsoft Windows syste
ERROR(\$error);
return 1;
}
-
+
$Global{rldap} = eval $bindcommand;
if ($@)
{
$msgbox->insert("0.0", $@) if ($@ && Tk::Exists($msgbox)) ;
return -1;
}
-
+
if ( !($Global{rldap}->isa('Net::LDAPS') ) )
{
$Global{dirConnError} = "LDAPS connection error to $url.";
return -1;
}
-
+
}
else
{
@@ -2464,23 +2464,23 @@ if ( $error )
$Global{dirConnError} = "LDAP connection error to $url.";
return 1;
}
-
+
}
-
+
$mesg = $Global{rldap}->bind( password => "$Global{'bindpw'}",
dn => "$Global{'binddn'}",
version => $Global{'setVersion'},
);
-
+
if ( $mesg->code && $mesg->code != 48 )
{
# $errstr = $mesg->code;
# ERROR($errstr);
return $mesg->code;
}
-
+
return 0;
-
+
} # End of subroutine dirRConn
#
@@ -2488,15 +2488,15 @@ return 0;
#
sub dirRUConn
{
-$Global{rldap}->disconnect;
+$Global{rldap}->disconnect;
delete($Global{rldap});
return 0;
} # End of subroutine dirRUConn
-
+
#
# Detect and record the sub-bases, or branches, of the directory.
#
-
+
sub getBases()
{
my $mesg;
@@ -2505,7 +2505,7 @@ my @base = ();
my $ptr;
my $match;
my $error = 0; # initialize error flag.
-
+
if ( $Global{'nismapname'} )
{
#
@@ -2520,7 +2520,7 @@ else
}
my $f = Net::LDAP::Filter->new($match) or $error = 1;
-
+
if ( $error )
{
$error = "getBases subroutine Bad filter $match";
@@ -2528,9 +2528,9 @@ ERROR(\$error);
return @base;
}
-$base[0] = $base;
+$base[0] = $base;
$ptr = 0;
-
+
while ( $ptr < @base )
{
if ( @base < $Global{'limit'} )
@@ -2550,9 +2550,9 @@ while ( $ptr < @base )
}
shift(@base); # get rid of the namingContext entry
return @base;
-
+
} # End of subroutine getBases()
-
+
sub calBase()
{
my ( $base, $f ) = @_;
@@ -2561,19 +2561,19 @@ my $entry;
my $errstr;
my $error = 0;
my @new_base = ();
-
+
$mesg = $Global{ldap}->search(
base => $base,
filter => $f,
attrs => [ "cn","nismapname","automountMapName" ],
scope => "one",
);
-
+
#
# Check for an error on search
# Search call work, but there was an ldap error.
#
-
+
if ( $mesg->code && $mesg->code != 11 )
{
$errstr = $mesg->code;
@@ -2582,21 +2582,21 @@ if ( $mesg->code && $mesg->code != 11 )
}
else
{
-
+
$entry = $mesg->entry;
-
+
return @new_base unless defined($entry);
$count = $mesg->count();
-
+
for($i = 0 ; $i < $count ; $i++)
{
my $entry = $mesg->entry($i);
-
+
$dn = $entry->dn;
$dn = canonical_dn($dn,casefold => "lower");
$dn =~ tr/[A-Z]/[a-z]/;
$_ = $dn;
-
+
#
# Record only dn that start with ou=, or in some cases nismapname.
# Normal entrys can be mixed in with these objects.
@@ -2609,10 +2609,10 @@ else
{
push(@new_base, $dn); # record only dn that start with ou=
}
-
+
}
return @new_base;
-
+
}
} # End of subroutine calBase()
@@ -2621,12 +2621,12 @@ return @new_base;
#
sub globalPos
{
-
+
my @pos;
@pos = split(/\+/,$Global{'mainWindow'}->geometry());
$Global{'horz'} = $pos[1];
$Global{'vert'} = $pos[2];
-
+
} # End of subrountine globalPos
sub root_cancel
@@ -2646,17 +2646,17 @@ my $jpegFile = $ENV{'TMP'} ."/jpegfile.$$";
#
open(TMP, "+>$jpegFile");
$| = 1;
-
+
print TMP $picture;
close(TMP);
-
+
if ( !-e "$jpegFile" )
{
my $str = "Could not create temporary jpeg file $jpegFile";
ERROR( \$str );
return;
}
-
+
#
# Create a TK window to display the jpeg picture.
#
@@ -2667,28 +2667,28 @@ $list->pack( -side => "top" );
$list->insert("end", $dn);
my $image = $mw->Photo(-file => $jpegFile, -format => "jpeg" );
-
+
$mw->Label(-image => $image)->pack(-expand => 1, -fill => 'both');
$mw->Button(-text => 'CLOSE WINDOW', -command => [destroy => $mw])->pack;
MainLoop;
-
+
unlink $jpegFile;
-
-} # End of displayPhoto
+
+} # End of displayPhoto
#
# Create Main Error Window
#
-
+
sub ERROR {
my ($errcode ) = @_;
my $errmsg;
-
+
return if ($errcode == 48 && $Global{'setVersion'} == 3 ); # Anonymous bind error, not really an error.
-
+
my $x = $Global{'horz'} + 150;
my $y = $Global{'vert'} + 150;
-
+
if ( ref($errcode) )
{
$errmsg = $$errcode;
@@ -2696,18 +2696,18 @@ $errmsg = $$errcode;
else {
$errmsg = ldap_error_text($errcode);
}
-
+
my @errmsg = split(/\n/,$errmsg);
-
+
#
# Create Main Error Window
#
if ( ! Exists($Global{'errorWindow'} ) )
{
$Global{'errorWindow'} = MainWindow->new;
-
+
$Global{'errorWindow'}->title("ERROR MESSAGES");
-
+
$Global{'errorWindow'}->geometry("+$x+$y");
#
# Create process dismiss button
@@ -2715,13 +2715,13 @@ $Global{'errorWindow'}->geometry("+$x+$y");
$Global{'errorWindow'}->Button( -text => "DISMISS", -command => \&dismiss,
-font => $Global{'Font'}, -borderwidth => 3 )
-> pack(-side => "bottom", -padx => 5, -pady => 5 ) ;
-
+
$errlist = $Global{'errorWindow'} ->Scrolled(Listbox, -scrollbars => 'se',
-width => 70, -height => 10 );
-
+
$errlist->pack(-fill => "both", -expand => 1 );
}
-
+
$errlist->insert("end", "Error Code: $errcode") if ( !ref($errcode) );
$errlist->insert("end", "") if ( !ref($errcode) );
@@ -2729,33 +2729,33 @@ foreach my $msg ( @errmsg )
{
$errlist->insert("end", $msg);
}
-
+
sub dismiss{
-
+
$Global{'errorWindow'}->destroy() if Tk::Exists($Global{'errorWindow'});
$errlist = undef();
-
+
} # End of dismiss subroutine
-
+
} # End of ERROR subroutine
-
+
#
# LDAP Error check, some return codes are not really errors.
# You can retry the ldap action after waiting a while.
#
-
+
sub CheckError {
-
+
my ( $error ) = @_;
-
+
#
# Check for DSA busy or internal error
#
-
+
if ( $Global{loopCount} > 61 ) {
return 0; # return an error condition.
}
-
+
++$Global{loopCount}; # Increment the loop counter.
if ( $error =~ /too busy/ ||
@@ -2772,17 +2772,17 @@ else {
# DSA did not return "DSA busy" message
#
return 0; # error
-
+
}
-
+
} # End of subrountine CheckError
#
# Create Main Bind Window
#
-
+
sub BIND {
-
+
$dn_data = "";
$pw_data = "";
&globalPos();
@@ -2791,78 +2791,78 @@ my $x = $Global{'horz'} + 150;
my $y = $Global{'vert'} + 150;
if ( !Tk::Exists( $Global{'bindWindow'} ) )
-{
+{
#
# Create Main Bind Window
#
-
+
$Global{'bindWindow'} = MainWindow->new;
-
+
$Global{'bindWindow'}->title("SET BIND CREDENTIALS");
-
+
$Global{'bindWindow'}->geometry("+$x+$y");
#
# Create process accept button
#
-$Global{'bindWindow'}->Button( -text => "ACCEPT", -command => \&accept,
+$Global{'bindWindow'}->Button( -text => "ACCEPT", -command => \&accept,
-font => $Global{'Font'}, -borderwidth => 3 )
-> pack(-side => "bottom", -padx => 5, -pady => 5 ) ;
-
+
#
# Create process cancel button
#
-$Global{'bindWindow'}->Button(-text => "CANCEL", -command => \&cancel,
+$Global{'bindWindow'}->Button(-text => "CANCEL", -command => \&cancel,
-font => $Global{'Font'}, -borderwidth => 3)
-> pack(-side => "top", -padx => 5, -pady => 5 ) ;
-
+
my $binddnframe = $Global{'bindWindow'}->LabFrame(-label => "DN",
-labelside => "acrosstop")
->pack( -fill => "both", -side => "top", -padx => 5, -pady => 5 );
-
+
#
# Create DN Entry text box.
#
$dn_data = $Global{binddn} if ( length($Global{binddn}) );
-
+
$binddnframe->Entry(-textvariable => \$dn_data, -width => 25 )
-> pack(-fill => 'x');
-
+
my $bindpwframe = $Global{'bindWindow'}->LabFrame(-label => "PASSWORD",
-labelside => "acrosstop")
->pack( -fill => "both", -side => "top", -padx => 5, -pady => 5 );
-
+
#
# Create Password Entry text box.
#
-
-$bindpwdata = $bindpwframe->Entry(-show => '*', -textvariable => \$pw_data,
+
+$bindpwdata = $bindpwframe->Entry(-show => '*', -textvariable => \$pw_data,
-width => 25, -font => $Global{'Font'} )
-> pack(-fill => 'x');
$bindpwdata->bind('<Key-Return>' => \&accept );
sub cancel{
-
+
$Global{'bindWindow'}->destroy() if Tk::Exists($Global{'bindWindow'});
-$Global{'bindWindow'} = undef();
+$Global{'bindWindow'} = undef();
} # End of cancel subroutine
-
-sub accept{
+
+sub accept{
my $mesg;
-
-
+
+
if (defined($Global{ldap}) )
{
#
# Connect to directory server
-#
+#
-$mesg = $Global{ldap}->bind( password => "$pw_data",
- dn => "$dn_data",
+$mesg = $Global{ldap}->bind( password => "$pw_data",
+ dn => "$dn_data",
version => $Global{'setVersion'},
);
-
-if ( $mesg->code && $mesg->code != 48 )
+
+if ( $mesg->code && $mesg->code != 48 )
{
$errstr = $mesg->code;
ERROR($errstr);
@@ -2876,53 +2876,53 @@ $Global{'bindpw'} = $pw_data;
$Global{'bindWindow'}->Unbusy;
}
-}
+}
$Global{'bindWindow'}->destroy() if Tk::Exists($Global{'bindWindow'});
-$Global{'bindWindow'} = undef();
-
+$Global{'bindWindow'} = undef();
+
} # End of accept subroutine
}
} # End of BIND subroutine
-
+
#
# Create Main Port Window
#
-
+
sub PORT {
-
+
$port_data = $Global{port};
&globalPos();
my $x = $Global{'horz'} + 150;
my $y = $Global{'vert'} + 150;
-
+
#
# Create Main Port Window
#
-
+
$Global{'portWindow'} = MainWindow->new;
-
+
$Global{'portWindow'}->title("DIRECTORY PORT");
-
+
$Global{'portWindow'}->geometry("+$x+$y");
#
# Create process accept button
#
-$Global{'portWindow'}->Button( -text => "ACCEPT", -command => \&portAccept,
+$Global{'portWindow'}->Button( -text => "ACCEPT", -command => \&portAccept,
-font => $Global{'Font'}, -borderwidth => 3 )
-> pack(-side => "bottom", -padx => 5, -pady => 5 ) ;
-
+
#
# Create process cancel button
#
-$Global{'portWindow'}->Button(-text => "CANCEL", -command => \&portCancel,
+$Global{'portWindow'}->Button(-text => "CANCEL", -command => \&portCancel,
-font => $Global{'Font'}, -borderwidth => 3)
-> pack(-side => "top", -padx => 5, -pady => 5 ) ;
-
+
$Global{'portWindow'}->Label(-text => "Port 389 default")
->pack( -side => "top", -anchor => 'w', -pady => 1 );
-
+
$Global{'portWindow'}->Label(-text => "Port 636 ssl default")
->pack( -side => "top", -anchor => 'w', -pady => 1 );
@@ -2930,7 +2930,7 @@ $Global{'portWindow'}->Label(-text => "Port 636 ssl default")
# Create a ssl Checkbutton that will set up ssl variable
# to set ssl if not port 636.
#
-
+
#$Global{'portWindow'} -> Checkbutton(
# -text => "SSL connection",
# -variable => \$Global{'setSSL'},
@@ -2951,38 +2951,38 @@ else
my $portframe = $Global{'portWindow'}->LabFrame(-label => "PORT",
-labelside => "acrosstop")
->pack( -fill => "both", -side => "top", -padx => 5, -pady => 5 );
-
+
#
# Create Port Entry text box.
#
-
+
$portframe->Entry(-textvariable => \$port_data, -width => 10 )
-> pack(-fill => 'x');
-
-
+
+
sub portCancel{
-
+
$Global{'portWindow'}->destroy() if Tk::Exists($Global{'portWindow'});
-$Global{'portWindow'} = undef();
-
+$Global{'portWindow'} = undef();
+
} # End of cancel subroutine
-
-sub portAccept{
-
+
+sub portAccept{
+
$Global{port} = $port_data;
if ( $Global{setSSL} ) { $Global{sslport} = $port_data;}
else { $Global{nsslport} = $port_data;}
$Global{dsaptls}->insert(0, $Global{port});
$Global{'portWindow'}->destroy() if Tk::Exists($Global{'portWindow'});
-$Global{'portWindow'} = undef();
-
+$Global{'portWindow'} = undef();
+
} # End of accept subroutine
} # End of PORT subroutine
#
# Create Schema Display Window
#
-
+
sub print_loop()
{
my $list = shift;
@@ -3003,19 +3003,19 @@ foreach $ahash ( @$ocs)
#
my @hkeys = keys(%$ahash);
-
+
foreach $var (@hkeys)
{
# Step through the hash keys
-
+
next if ( $var =~ /type/); # do not care about type
$alArray = $$ahash{$var};
-
+
if ( ref($alArray) eq 'ARRAY' )
{
# it is a n array pointer so there is probably a list.
-
+
my $asize = @$alArray; # get the size of the list.
#
# if the array has size then print the array
@@ -3023,7 +3023,7 @@ foreach $ahash ( @$ocs)
#
if ( $asize )
{
- # Okay, there is something in the array.
+ # Okay, there is something in the array.
$list->insert("end", "\t$var: ");
@@ -3038,7 +3038,7 @@ foreach $ahash ( @$ocs)
{
# There is not an array
if ( $alArray == 1)
- {
+ {
# it is just information attribute for the object
$list->insert("end", "\t$var\n");
}
@@ -3047,7 +3047,7 @@ foreach $ahash ( @$ocs)
$list->insert("end", "\t$var: $alArray\n");
}
}
-
+
}
}
@@ -3063,13 +3063,13 @@ sub schema_clear {
$schema_list->delete("1.0", "end");
} # End of clear subroutine
-
+
#
#
# Get the directory schema
#
-sub schema
+sub schema
{
my $mesg;
my $error = 0;
@@ -3090,12 +3090,12 @@ if ( ! defined($Global{ldap}) )
{
#
# Connect to directory server
-#
+#
$error = dirConn();
if ( $error == 1 )
{
- if ( defined($Global{dirConnError}) )
+ if ( defined($Global{dirConnError}) )
{
$schema_list->insert("end", "$Global{dirConnError}\n");
}
@@ -3106,7 +3106,7 @@ if ( $error == 1 )
return;
}
-}
+}
#
# Get the schema, tries to read rootdse, if unable assumes cn=schema.
@@ -3131,7 +3131,7 @@ if ( $Global{'sfile'} && defined($schemaHash{'schema'}) )
#
# @xml_data = ();
# $dsml = Net::LDAP::DSML->new( output => \@xml_data, pretty_print => 1 );
- open(FXML, ">$Global{'fdata'}");
+ open(FXML, ">$Global{'fdata'}");
$dsml = Net::LDAP::DSML->new( output => *FXML, pretty_print => 1 );
$dsml->write_schema($schemaHash{'schema'});
$dsml->end_dsml;
@@ -3144,7 +3144,7 @@ if ( $Global{'sfile'} && defined($schemaHash{'schema'}) )
#
$schemaHash{'schema'}->dump( $Global{'fdata'} );
}
-
+
$schema_list->insert("end",
"Schema data written to file: $Global{'fdata'}\n");
$Global{'sfile'} = 0;
@@ -3164,16 +3164,16 @@ $ra_atts = [];
#
# Get the attributes
#
-@$ra_atts = $schemaHash{'schema'}->all_attributes();
-$schemaHash{'atts'} = $ra_atts;
+@$ra_atts = $schemaHash{'schema'}->all_attributes();
+$schemaHash{'atts'} = $ra_atts;
#
# Display the attributes
#
-
+
if ( $selectAll || $selectAtt )
{
-&print_loop($schema_list, $schemaHash{'atts'}, "attributeType")
+&print_loop($schema_list, $schemaHash{'atts'}, "attributeType")
if ( defined($schemaHash{'atts'}) );
}
@@ -3181,15 +3181,15 @@ $ra_atts = [];
#
# Get the schema objectclasses
#
-@$ra_atts = $schemaHash{'schema'}->all_objectclasses();
+@$ra_atts = $schemaHash{'schema'}->all_objectclasses();
$schemaHash{'ocs'} = $ra_atts;
#
# Calculate the text length of each objectclass string.
#
-foreach my $var (@$ra_atts)
-{
- $Global{'max'} = length($$var{'name'})
+foreach my $var (@$ra_atts)
+{
+ $Global{'max'} = length($$var{'name'})
if length($$var{'name'}) > $Global{'max'} ;
}
@@ -3203,10 +3203,10 @@ $Global{'max'} += 6;
#
# Display the objectclasses
#
-
+
if ( $selectAll || $selectObj )
{
-&print_loop($schema_list, $schemaHash{'ocs'}, "objectClasses")
+&print_loop($schema_list, $schemaHash{'ocs'}, "objectClasses")
if ( defined($schemaHash{'ocs'}) );
}
@@ -3214,16 +3214,16 @@ if ( $selectAll || $selectObj )
# Get the schema matchingrules
#
$ra_atts = [];
-@$ra_atts = $schemaHash{'schema'}->all_matchingrules();
+@$ra_atts = $schemaHash{'schema'}->all_matchingrules();
$schemaHash{'mrs'} = $ra_atts;
#
# Display the matchingrules
#
-
+
if ( $selectAll || $selectMatch )
{
-&print_loop($schema_list, $schemaHash{'mrs'}, "matchingRules" )
+&print_loop($schema_list, $schemaHash{'mrs'}, "matchingRules" )
if ( defined($schemaHash{'mrs'}) );
}
@@ -3231,16 +3231,16 @@ if ( $selectAll || $selectMatch )
# Get the schema matchingruleuse
#
$ra_atts = [];
-@$ra_atts = $schemaHash{'schema'}->all_matchingruleuses();
+@$ra_atts = $schemaHash{'schema'}->all_matchingruleuses();
$schemaHash{'mru'} = $ra_atts;
#
# Display the matchingruleuse
#
-
+
if ( $selectAll || $selectMru )
{
-&print_loop($schema_list, $schemaHash{'mru'}, "matchingRuleUse" )
+&print_loop($schema_list, $schemaHash{'mru'}, "matchingRuleUse" )
if ( defined($schemaHash{'mru'}) );
}
@@ -3248,16 +3248,16 @@ if ( $selectAll || $selectMru )
# Get the schema ldapsyntaxes
#
$ra_atts = [];
-@$ra_atts = $schemaHash{'schema'}->all_syntaxes();
+@$ra_atts = $schemaHash{'schema'}->all_syntaxes();
$schemaHash{'lsyn'} = $ra_atts;
#
# Display the ldapsyntaxes
#
-
+
if ( $selectAll || $selectSyn )
{
-&print_loop($schema_list, $schemaHash{'lsyn'}, "ldapSyntax" )
+&print_loop($schema_list, $schemaHash{'lsyn'}, "ldapSyntax" )
if ( defined($schemaHash{'lsyn'}) );
}
@@ -3265,16 +3265,16 @@ if ( $selectAll || $selectSyn )
# Get the schema nameForms
#
$ra_atts = [];
-@$ra_atts = $schemaHash{'schema'}->all_nameforms();
+@$ra_atts = $schemaHash{'schema'}->all_nameforms();
$schemaHash{'nfm'} = $ra_atts;
#
# Display the nameForms
#
-
+
if ( $selectAll || $selectNf )
{
-&print_loop($schema_list, $schemaHash{'nfm'}, "nameForms" )
+&print_loop($schema_list, $schemaHash{'nfm'}, "nameForms" )
if ( defined($schemaHash{'nfm'}) );
}
@@ -3282,16 +3282,16 @@ if ( $selectAll || $selectNf )
# Get the schema ditstructurerules
#
$ra_atts = [];
-@$ra_atts = $schemaHash{'schema'}->all_ditstructurerules();
+@$ra_atts = $schemaHash{'schema'}->all_ditstructurerules();
$schemaHash{'dits'} = $ra_atts;
#
# Display the ditstructurerules
#
-
+
if ( $selectAll || $selectDsr )
{
-&print_loop($schema_list, $schemaHash{'dits'}, "ditstructurerules" )
+&print_loop($schema_list, $schemaHash{'dits'}, "ditstructurerules" )
if ( defined($schemaHash{'dits'}) );
}
@@ -3299,27 +3299,27 @@ if ( $selectAll || $selectDsr )
# Get the schema ditcontentrules
#
$ra_atts = [];
-@$ra_atts = $schemaHash{'schema'}->all_ditcontentrules();
+@$ra_atts = $schemaHash{'schema'}->all_ditcontentrules();
$schemaHash{'ditc'} = $ra_atts;
#
# Display the ditcontentrules
#
-
+
if ( $selectAll || $selectDcr )
{
-&print_loop($schema_list, $schemaHash{'ditc'}, "ditcontentrules" )
+&print_loop($schema_list, $schemaHash{'ditc'}, "ditcontentrules" )
if ( defined($schemaHash{'ditc'}) );
}
-$Global{'max'} = 50 if ( $Global{'max'} > 50 );
+$Global{'max'} = 50 if ( $Global{'max'} > 50 );
&objTree(); # Create the objectClass tree
$Global{'olist'}->delete('all') if Tk::Exists($Global{'olist'});
$Global{mainWindow} -> update; # Allow Tk to update
&initializeP5a(); # Finish making panel 5
-} # End of if ( defined($schema) )
-else
+} # End of if ( defined($schema) )
+else
{
$schema_list->insert("end", "The schema object was return undefined.\n");
$schema_list->insert("end", "There are several problems that can cause\n");
@@ -3339,7 +3339,7 @@ else
} # End of schema subroutine
-sub objTree
+sub objTree
{
my $ocs = $schemaHash{'ocs'};
my $obj = $schemaHash{'obj'};
@@ -3356,7 +3356,7 @@ my $name;
my $SUP;
my $array;
-if ( !defined($ocs) || !defined($tree) ||
+if ( !defined($ocs) || !defined($tree) ||
!defined($obj) || !defined($schema) )
{
#
@@ -3377,7 +3377,7 @@ foreach my $aobj ( @$ocs)
#
my $oid;
undef($oid);
- $oid = $$aobj{'oid'};
+ $oid = $$aobj{'oid'};
next if ( !defined($oid) );
@sup = $$aobj{'sup'}[0];
@name = $$aobj{'name'};
@@ -3400,7 +3400,7 @@ foreach (@tmpKeys)
next if ( $_ eq "" || $_ eq "top" );
$done = 0; # initialize done flag
-$Path = ""; # initialize objectclass Path
+$Path = ""; # initialize objectclass Path
$name = $_;
while ( !$done )
@@ -3424,16 +3424,16 @@ $_ = $SUP; # walk back up the chain
if ( defined($$tree{$Path}) )
{
#
-# Path key has already been initialized, add current objectclass
+# Path key has already been initialized, add current objectclass
# to list.
#
$array = $$tree{$Path};
push(@$array,$name);
}
-else
+else
{
#
-# Path key needs to be initialized, add current objectclass
+# Path key needs to be initialized, add current objectclass
# to list.
#
$$tree{$Path} = [0, "$name"];
@@ -3449,7 +3449,7 @@ $Global{'mainWindow'}->update;
}
-sub Hierarchial
+sub Hierarchial
{
&globalPos();
my $x = $Global{'horz'};
@@ -3473,28 +3473,28 @@ my $array;
#
#
-if ( ! Exists($Global{'histWindow'} ) )
+if ( ! Exists($Global{'histWindow'} ) )
{
- eval
- {
- $Global{'histWindow'} = MainWindow->new();
+ eval
+ {
+ $Global{'histWindow'} = MainWindow->new();
$Global{'histWindow'}->title("HIERARCHICAL OBJECTCLASS DISPLAY WINDOW");
};
- ERROR(\$@) if ( $@ );
+ ERROR(\$@) if ( $@ );
}
-else
+else
{
my $wstate = $Global{'histWindow'}->state();
if ( $wstate =~ /iconic/ || $wstate =~ /withdrawn/ )
{
- $Global{'histWindow'}->deiconify()
- if Tk::Exists($Global{'histWindow'});
- $Global{'histWindow'}->raise()
- if Tk::Exists($Global{'histWindow'});
+ $Global{'histWindow'}->deiconify()
+ if Tk::Exists($Global{'histWindow'});
+ $Global{'histWindow'}->raise()
+ if Tk::Exists($Global{'histWindow'});
}
}
-$Global{'histWindow'}->geometry("+$x+$y");
+$Global{'histWindow'}->geometry("+$x+$y");
#
# Create label box
#
@@ -3506,11 +3506,11 @@ $Global{'label'} = $Global{'histWindow'}->Label()->pack;
$hbutton = $Global{'histWindow'}->Button(
- -text => "CLOSE HIERARCHICAL DISPLAY WINDOW",
+ -text => "CLOSE HIERARCHICAL DISPLAY WINDOW",
-command => \&hist_cancel, -font => $Global{'Font'},
-borderwidth => 5 )
- -> pack(-fill => "both", -padx => 2, -pady => 2 )
- if ( Exists($Global{'histWindow'} ) &&
+ -> pack(-fill => "both", -padx => 2, -pady => 2 )
+ if ( Exists($Global{'histWindow'} ) &&
!Exists($hbutton ) );
#
@@ -3522,7 +3522,7 @@ if ( !Exists($Global{'list'}) )
{
$Global{'list'} = $Global{'histWindow'}->Scrolled('ROText',
-scrollbars => 'se', -width=>50, -wrap => "none",
- -font => $Global{'Font'}, -height => 20 )
+ -font => $Global{'Font'}, -height => 20 )
->pack(-side => "left");
}
@@ -3534,10 +3534,10 @@ $Global{'list'} = $Global{'histWindow'}->Scrolled('ROText',
if ( !Exists($Global{'hlist'}) )
{
-$Global{'hlist'} = $Global{'histWindow'}->Scrolled('HList',
+$Global{'hlist'} = $Global{'histWindow'}->Scrolled('HList',
-font => $Global{'Font'},
-scrollbars => 'se',
- -width => $Global{'max'},
+ -width => $Global{'max'},
-height => 20,
-itemtype => 'text',
-separator => $sepChar,
@@ -3553,7 +3553,7 @@ $Global{'hlist'} = $Global{'histWindow'}->Scrolled('HList',
$Global{'list'}->insert("end", " \n");
foreach my $var (@objectclasses)
- {
+ {
$Global{mainWindow}->update;
$oid = $$obj{$var}->[0];
#
@@ -3571,16 +3571,16 @@ $Global{'hlist'} = $Global{'histWindow'}->Scrolled('HList',
foreach $varr (@hkeys)
{
# Step through the hash keys
-
+
next if ( $varr =~ /name/); # already done name.
next if ( $varr =~ /type/); # do not care about type
$alArray = $$ahash{$varr};
-
+
if ( ref($alArray) eq 'ARRAY' )
{
# it is a n array pointer so there is probably a list.
-
+
my $asize = @$alArray; # get the size of the list.
#
# if the array has size then print the array
@@ -3588,10 +3588,10 @@ $Global{'hlist'} = $Global{'histWindow'}->Scrolled('HList',
#
if ( $asize )
{
- # Okay, there is something in the array.
-
+ # Okay, there is something in the array.
+
$Global{'list'}->insert("end", "\t$varr: ");
-
+
foreach $a ( @$alArray )
{
$Global{'list'}->insert("end", "$a ");
@@ -3603,7 +3603,7 @@ $Global{'hlist'} = $Global{'histWindow'}->Scrolled('HList',
{
# It is not an array
if ( $alArray == 1)
- {
+ {
# it is just and information attribute for the object
$Global{'list'}->insert("end", "\t$varr\n");
}
@@ -3612,8 +3612,8 @@ $Global{'hlist'} = $Global{'histWindow'}->Scrolled('HList',
$Global{'list'}->insert("end", "\t$varr: $alArray\n");
}
}
-
- }
+
+ }
$Global{'list'}->insert("end", " \n");
$Global{'list'}->insert("end", "--------------------------------------------------\n");
@@ -3629,20 +3629,20 @@ my $base;
$base = "";
#
-# Create Hierarchial list box data tree,
+# Create Hierarchial list box data tree,
# and display data.
#
eval{
- foreach ( @tmpKeys )
+ foreach ( @tmpKeys )
{
- if ( $$tree{$_} ->[0] == 0 )
+ if ( $$tree{$_} ->[0] == 0 )
{
$$tree{$_} ->[0] = 1;
$Global{'hlist'}->add($_, -text=>$_); # do the base.
}
- $base = $_;
+ $base = $_;
$array = $$tree{$_};
$ptr = 0;
foreach my $var ( @$array )
@@ -3652,12 +3652,12 @@ eval{
$ptr = 1;
next;
}
- $_ = $base . $sepChar . $var;
+ $_ = $base . $sepChar . $var;
$Global{'hlist'}->add($_, -text => $var);
if ( defined($$tree{$_}) )
{
$$tree{$_}->[0] = 1;
- }
+ }
}
}
@@ -3671,12 +3671,12 @@ print "$@" if ( defined($@));
# Reset objectClass array.
#
-foreach ( @tmpKeys )
+foreach ( @tmpKeys )
{
if ( defined($$tree{$_}) )
{
$$tree{$_}->[0] = 0;
- }
+ }
}
}
@@ -3690,87 +3690,87 @@ sub hist_clear {
$Global{'list'}->delete("1.0", "end");
} # End of clear subroutine
-
+
sub hist_cancel{
$Global{'list'}->destroy if Tk::Exists($Global{'list'});
$Global{'hlist'}->destroy if Tk::Exists($Global{'hlist'});
$Global{'histWindow'}->destroy if Tk::Exists($Global{'histWindow'});
} # End of cancel subroutine
-} # End of subroutine Hierarchial
-
+} # End of subroutine Hierarchial
+
#
# Create Accept/Cancel Window
#
-
+
sub questionAction {
&globalPos();
my $x = $Global{'horz'} + 0;
my $y = $Global{'vert'} + 50;
-
+
#
# Create Main Window
#
-
+
$Global{'answerWindow'} = MainWindow->new;
-
+
$Global{'answerWindow'}->title("CONFIRM DECISION");
-
+
$Global{'answerWindow'}->geometry("+$x+$y");
#
# Create process accept button
#
-$Global{'answerWindow'}->Button( -text => "ACCEPT", -command => \&doAction,
+$Global{'answerWindow'}->Button( -text => "ACCEPT", -command => \&doAction,
-font => $Global{'Font'}, -borderwidth => 3 )
-> pack(-side => "bottom", -padx => 5, -pady => 5 ) ;
-
+
#
# Create process cancel button
#
-$Global{'answerWindow'}->Button(-text => "CANCEL", -command => \&cancelAction,
+$Global{'answerWindow'}->Button(-text => "CANCEL", -command => \&cancelAction,
-font => $Global{'Font'}, -borderwidth => 3)
-> pack(-side => "top", -padx => 5, -pady => 5 ) ;
-
+
sub cancelAction{
-
+
$Global{'answerWindow'}->destroy() if Tk::Exists($Global{'answerWindow'});
-delete($Global{'answerWindow'});
+delete($Global{'answerWindow'});
} # End of cancel subroutine
-
-sub doAction{
-
+
+sub doAction{
+
$Global{'answerWindow'}->destroy() if Tk::Exists($Global{'answerWindow'});
-delete($Global{'answerWindow'});
+delete($Global{'answerWindow'});
$Global{'searchHistWindow'}->destroy if Tk::Exists($Global{'searchHistWindow'});
-$Global{'searchHistWindow'} = undef();
+$Global{'searchHistWindow'} = undef();
&ldapActionDelete; # Delete the entry from the directory
-
+
} # End of accept subroutine
} # End of questionAction subroutine
-
+
#
# Create ldapAction Window
#
-
-sub ldapAction
+
+sub ldapAction
{
$Global{'ldapActionDN'} = shift;
$Global{actionDelete}->configure( -state => 'normal');
-$Global{actionDisplay}->configure( -state => 'normal');
+$Global{actionDisplay}->configure( -state => 'normal');
$Global{actionEdit}->configure( -state => 'normal');
$Global{actionRename}->configure( -state => 'normal');
$Global{actionLdif}->configure( -state => 'normal');
$Global{actionCancel}->configure( -state => 'normal');
} # End of ldapAction subroutine
-
+
sub ldapActionCancel{
delete($Global{'ldapActionDN'});
$Global{actionDelete}->configure( -state => 'disable');
-$Global{actionDisplay}->configure( -state => 'disable');
+$Global{actionDisplay}->configure( -state => 'disable');
$Global{actionEdit}->configure( -state => 'disable');
$Global{actionRename}->configure( -state => 'disable');
$Global{actionLdif}->configure( -state => 'disable');
@@ -3781,7 +3781,7 @@ $Global{actionCancel}->configure( -state => 'disable');
sub ldapActionCreateEntry
{
-if ( !Exists($Global{'olist'}) )
+if ( !Exists($Global{'olist'}) )
{
&initializeP5a(); # Finish making panel 5
}
@@ -3802,14 +3802,14 @@ my $y = $Global{'vert'} + 100;
if (! Exists($Global{'createWindow'}) )
{
$Global{'createWindow'} = MainWindow->new;
-
+
$Global{'createWindow'}->title("CREATE DIRECTORY ENTRY");
-
+
$Global{'createWindow'}->geometry("+$x+$y");
#
# Create process Exit button
#
-
+
$createExit = $Global{'createWindow'}->Button(
-text => "CANCEL CREATE ENTRY DISPLAY",
-command => \&create_cancel, -font => $Global{'Font'},
@@ -3825,13 +3825,13 @@ $Global{'createWindow'}->Label( -text => "All attributes in red, or located abov
$Global{'createWindow'}->Label(-text => "entered for the attribute.")
->pack(-side => "top", -anchor => 'w');
#
-# Create a ROText Box that will actually contain the
+# Create a ROText Box that will actually contain the
# returned directory data.
#
-$createlist = $Global{'createWindow'} ->Scrolled('ROText',
+$createlist = $Global{'createWindow'} ->Scrolled('ROText',
-scrollbars => 'se',
- -width => 100, -height => 20, -wrap => 'none',
+ -width => 100, -height => 20, -wrap => 'none',
-font => $Global{'Font'} );
$createlist->pack(-fill => "both", -expand => 1 );
@@ -3864,7 +3864,7 @@ $dnTxt = $createlist->Entry(-width => 65,
-textvariable => \$Creation{dn}->[0] );
$createlist->windowCreate("end", -window => $dnTxt );
-
+
$createlist->insert("end", "\n"); # position to the next row.
#
# create attribute label
@@ -3879,7 +3879,7 @@ $Creation{$_}->[0] = "" if ( !/objectClass/ );
$NamingAttribute = "";
${$_} = $createlist->Radiobutton( -text => "", -anchor => 'w',
- -variable => \$NamingAttribute, -value => "$_" )
+ -variable => \$NamingAttribute, -value => "$_" )
if ( !/objectClass/ );
$createlist->windowCreate("end", -window => ${$_} );
@@ -3890,21 +3890,21 @@ ${$_} = $createlist->Label(-text => "$_",
-foreground => 'red',
-anchor => 'e',
-width => ($max+2) ) if ( !/objectClass/ );
-
+
$createlist->windowCreate("end", -window => ${$_} );
#
# create data entry window
#
${$_} = $createlist->Entry(-width => 65,
- -textvariable => \$Creation{$_}->[0] )
+ -textvariable => \$Creation{$_}->[0] )
if ( !/objectClass/ );
$createlist->windowCreate("end", -window => ${$_} ) if ( !/objectClass/ );
-
+
$createlist->insert("end", "\n") if ( !/objectClass/ );
}
-$ptr = 0;
+$ptr = 0;
$Creation{objectClass} = [];
foreach ( @{$Global{entryData}->{objectClass}} )
@@ -3915,7 +3915,7 @@ ${$_} = $createlist->Label(-text => "objectClass",
-relief => 'groove',
-anchor => 'e',
-width => ($max+7) );
-
+
$createlist->windowCreate("end", -window => ${$_} );
#
# create data entry window
@@ -3924,7 +3924,7 @@ ${$_} = $createlist->Label(-width => 65, -anchor => 'w',
-text => $Creation{objectClass}->[$ptr]);
$createlist->windowCreate("end", -window => ${$_} );
-
+
$createlist->insert("end", "\n"); # position to the next row.
++$ptr;
}
@@ -3938,7 +3938,7 @@ $Creation{$_} = [];
$Creation{$_}->[0] = "";
${$_} = $createlist->Radiobutton( -text => "", -anchor => 'w',
- -variable => \$NamingAttribute, -value => "$_" )
+ -variable => \$NamingAttribute, -value => "$_" )
if ( !/objectClass/ );
$createlist->windowCreate("end", -window => ${$_} );
@@ -3948,7 +3948,7 @@ ${$_} = $createlist->Label(-text => "$_",
-relief => 'groove',
-anchor => 'e',
-width => ($max+2) )if ( !/objectClass/ );
-
+
$createlist->windowCreate("end", -window => ${$_} );
#
# create data entry window
@@ -3956,14 +3956,14 @@ $createlist->windowCreate("end", -window => ${$_} );
${$_} = $createlist->Entry(-width => 65,
-textvariable => \$Creation{$_}->[0] );
$createlist->windowCreate("end", -window => ${$_} );
-
+
$createlist->insert("end", "\n"); # position to the next row.
}
#
# Create the Create button
#
-
+
$createMe = $Global{'createWindow'}->Button(
-text => "CREATE ENTRY",
-command => \&create_entry, -font => $Global{'Font'},
@@ -4007,7 +4007,7 @@ $DN = $Creation{dn}[0];
delete($Creation{dn});
-my @attrs = keys( %Creation );
+my @attrs = keys( %Creation );
foreach $att ( @attrs )
{
@@ -4027,7 +4027,7 @@ $error = dirConn();
if ( $error == 1 )
{
- if ( defined($Global{dirConnError}) )
+ if ( defined($Global{dirConnError}) )
{
$error = "Create Entry $Global{dirConnError}";
ERROR(\$error);
@@ -4045,10 +4045,10 @@ $do_it = 1;
$Global{loopCount} = 0;
while ($do_it == 1 )
-{
- $mesg = $Global{ldap}->add($DN, attrs => \@add );
-
- if ( $mesg->code )
+{
+ $mesg = $Global{ldap}->add($DN, attrs => \@add );
+
+ if ( $mesg->code )
{
if ( $mesg->code == 10 && $Global{fref} )
{
@@ -4067,17 +4067,17 @@ while ($do_it == 1 )
}
else
{
- $rmesg = $Global{rldap}->add($DN, attrs => \@add );
-
+ $rmesg = $Global{rldap}->add($DN, attrs => \@add );
+
if ( !$rmesg->code )
{
&dirRUConn();
$do_it = 0;
last;
}
-
+
}
-
+
} # End of foreach my $rref (@ref )
if ( $do_it )
@@ -4085,7 +4085,7 @@ while ($do_it == 1 )
#
# All referrals have been tried, there is a major error.
#
-
+
&dirRUConn();
$errstr = "There has been a major referral error creating this DN.";
$errstr .= "The following referrals were tried;\n";
@@ -4095,9 +4095,9 @@ while ($do_it == 1 )
}
ERROR($errstr);
return;
-
+
} # End of if ( $do_it )
-
+
}
else
{
@@ -4116,7 +4116,7 @@ while ($do_it == 1 )
$errstr = $mesg->code;
ERROR($errstr);
return;
- }
+ }
}
}
else
@@ -4164,11 +4164,11 @@ my $objects = $Global{'ldapActionDN'};
$Global{nb}->raise("SEARCH DISPLAY");
delete($Global{'ldapActionDN'});
-
+
# clear the entry data display window.
if ( $display_clear ) { &display_clear(); }
#
-# Format and display the data associcated with the dn
+# Format and display the data associcated with the dn
# passed to this subroutine.
#
@DNs = split(/$sepChar/,$objects); # split base from dn.
@@ -4183,7 +4183,7 @@ $text = sprintf "%${max}s: %s\n",'dn',$dn;
$list->insert("end", $text); # insert data
#
# For each attribute display it's data
-#
+#
foreach my $var (@infoKeys)
{
@@ -4193,7 +4193,7 @@ foreach my $var (@infoKeys)
# Display jpegPhoto in separate window if Tk::JPEG is used.
#
my $Value = decode_base64($$info{$var});
- displayPhoto($Value, $dn ) if ( $Global{'jpeg'}) ;
+ displayPhoto($Value, $dn ) if ( $Global{'jpeg'}) ;
$dstring = "JpegPhoto binary data is not being displayed.\n";
#
#
@@ -4209,7 +4209,7 @@ foreach my $var (@infoKeys)
#
# Format data and print data into Entry Box
- #
+ #
if ( $var =~ /;binary$/ )
{
$encoded = encode_base64($Value);
@@ -4225,7 +4225,7 @@ foreach my $var (@infoKeys)
}
}
-# position to the next row.
+# position to the next row.
$list->insert("end", "-----------------------------------------------------------------------------\n");
$list->insert("end", "\n");
@@ -4268,7 +4268,7 @@ return if Tk::Exists($Global{'editWindow'});
# clear the entry data display window.
#
-# Format and display the data associcated with the dn
+# Format and display the data associcated with the dn
# passed to this subroutine.
#
@DNs = split(/$sepChar/,$objects); # split base from dn.
@@ -4285,7 +4285,7 @@ $info = $$data[2]; # get data hash address.
foreach my $attrKey ( @tmp1 )
{
#
- # User can not edit these attributes, remove from the list of
+ # User can not edit these attributes, remove from the list of
# attributes to display.
#
if ( $attrKey =~ /createTimeStamp/i || $attrKey =~ /modifyTimeStamp/i ||
@@ -4299,11 +4299,11 @@ foreach my $attrKey ( @tmp1 )
}
#
-# create attribute label
+# create attribute label
#
$text = sprintf "%${max}s",'DN';
-$lb = $elist->Label(-text => $text,
+$lb = $elist->Label(-text => $text,
-font => $Global{'Font'},
-relief => 'groove',
-anchor => 'e',
@@ -4321,7 +4321,7 @@ $elist->insert("end", "\n"); # position to the next row.
#
# For each attribute display it's data
-#
+#
my $sptr = 0;
foreach my $var (@infoKeys)
{
@@ -4338,9 +4338,9 @@ foreach my $var (@infoKeys)
if ( $var =~ /;binary$/ ) { next; } # We do not do binary data, yet.
#
- # create attribute action button
+ # create attribute action button
#
- $ab = $elist->Button(-text => $text,
+ $ab = $elist->Button(-text => $text,
-font => $Global{'Font'},
-borderwidth => 3,
-relief => 'raised' );
@@ -4349,14 +4349,14 @@ foreach my $var (@infoKeys)
#
# Format data and print data into Entry Box
- #
+ #
$lb = $elist->Listbox(-width => 85, -height => 1 );
- $elist->windowCreate("end", -window => $lb );
+ $elist->windowCreate("end", -window => $lb );
$lb->insert('end', $Value );
$ab->configure( -command => [ \&changeAttribute, \$ab, \$lb, \$Value, \$var, $sptr ] );
- # position to the next row.
+ # position to the next row.
$elist->insert("end", "\n");
}
@@ -4365,8 +4365,8 @@ foreach my $var (@infoKeys)
$lb = $elist->Entry(-width => 85,
-textvariable => \$blank);
-$elist->windowCreate("end", -window => $lb );
-# position to the next row.
+$elist->windowCreate("end", -window => $lb );
+# position to the next row.
$elist->insert("end", "\n");
}
@@ -4391,15 +4391,15 @@ $Global{'tmpDELETE'} = {};
$Global{'tmpREPLACE'} = {};
$Global{'changeWindow'} = MainWindow->new;
-
+
$Global{'changeWindow'}->title("ATTRIBUTE MODIFICATION WINDOW");
-
+
$Global{'changeWindow'}->geometry("+$x+$y");
-
+
#
# Create process Cancel button
#
-
+
$Global{'changeWindow'}->Button(-text => "CANCEL ATTRIBUTE EDIT",
-command => \&change_cancel,
-font => $Global{'Font'}, -borderwidth => 5 )
@@ -4407,82 +4407,82 @@ $Global{'changeWindow'}->Button(-text => "CANCEL ATTRIBUTE EDIT",
#
# Create frame for clear buttons.
#
-
+
$acframe = $Global{'changeWindow'}->Frame()
->pack( -fill => "both", -side => "bottom", -padx => 5, -pady => 2);
-
+
#
# Create Clear Data
#
-
+
$acframe -> Button(-text => " ACCEPT DATA CHANGE ",
-command => \&makeChanges,
-font => $Global{'Font'},
-borderwidth => 3 )
->pack( -fill => 'both' );
-
+
#
# Create list frame.
#
-
+
$outerframe = $Global{'changeWindow'}->Frame()
->pack( -fill => "both", -side => "top", -padx => 5, -pady => 2,
-expand => 1);
-
+
#
# Create data frame.
#
-
+
$alframe = $outerframe->LabFrame(-label => "ATTRIBUTE DATA",
-labelside => "acrosstop" )
->pack( -fill => "both", -side => "top", -padx => 5, -pady => 2,
-expand => 1);
-
+
#
# Create a Text Box that will actually contain the
# returned directory data.
#
-
-$attrlist = $alframe ->Text( -width => 80, -height => 1,
+
+$attrlist = $alframe ->Text( -width => 80, -height => 1,
-wrap => 'none',
-font => $Global{'Font'} );
-
+
$attrlist->pack(-fill => "both", -expand => 1 );
-$attrlist->insert('end', $$Value);
+$attrlist->insert('end', $$Value);
if ( $Global{'add_new_attribute'} )
{
#
# Create data frame.
#
-
+
$Global{'newAttributeFrame'} = $outerframe->LabFrame(
-label => "NEW ATTRBUTE NAME",
-labelside => "acrosstop" )
->pack( -fill => "both", -side => "top", -padx => 5, -pady => 2,
-expand => 1);
-
+
#
# Create a Text Box that will actually contain the
# returned directory data.
#
-
-
-$Global{'newAttribute'} = $Global{'newAttributeFrame'}->Text(
- -width => 80, -height => 1,
+
+
+$Global{'newAttribute'} = $Global{'newAttributeFrame'}->Text(
+ -width => 80, -height => 1,
-wrap => 'none',
-font => $Global{'Font'} );
-
+
$Global{'newAttribute'}->pack(-fill => "both", -expand => 1 );
-
+
$Global{'newAttributeReady'} = 1 ;
}
-
+
#
# Create process Add button
#
-
+
$Global{'changeWindow'}->Button(-text => "ADD",
-command => [\&add_data, $attr, $Value, \$attrlist],
-font => $Global{'Font'}, -borderwidth => 5 )
@@ -4494,7 +4494,7 @@ if ( !defined($Global{'add_new_attribute'}) )
#
# Create process Delete button
#
-
+
$Global{'changeWindow'}->Button(-text => "DELETE",
-command => [\&delete_data, $attr, $Value],
-font => $Global{'Font'}, -borderwidth => 5 )
@@ -4504,7 +4504,7 @@ $Global{'changeWindow'}->Button(-text => "DELETE",
#
# Create process Replace button
#
-
+
$Global{'changeWindow'}->Button(-text => "REPLACE",
-command => [\&replace_data, $attr, $Value,\$attrlist, $mv],
-font => $Global{'Font'}, -borderwidth => 5 )
@@ -4516,22 +4516,22 @@ $Global{'multi'} = [];
}
else { return; }
-
+
sub delete_data {
my ( $attr, $Value ) = @_;
#
-#
+#
#
$Global{'tmpDELETE'}{$$attr} = $$Value;
-
+
} # End of delete_data subroutine
-
-
+
+
sub replace_data {
my ( $attr, $Value, $tbox,$mv ) = @_;
#
# Replace this attributes value.
-# But what if this is a multi-valued attribute.
+# But what if this is a multi-valued attribute.
#
if ( $$Global{'multi'}[$mv] )
{
@@ -4548,14 +4548,14 @@ else
$Global{'tmpREPLACE'}{$$attr} = $$tbox->get('1.0','1.end');
}
-
+
} # End of replace_data subroutine
-
+
sub add_data {
my ( $attr, $Value, $tbox ) = @_;
my $newAttribute;
if ( $Global{'newAttributeReady'} )
-{
+{
#
# add new attribute and it's value
#
@@ -4573,16 +4573,16 @@ else
$Global{'tmpADD'}{$$attr} = $$tbox->get('1.0','1.end');
}
-
+
} # End of add_data subroutine
-
-sub makeChanges
+
+sub makeChanges
{
my $tmp = $Global{'tmpADD'};
my @Keys = sort(keys(%$tmp));
-if ( @Keys )
+if ( @Keys )
{
foreach my $var ( @Keys)
{
@@ -4592,15 +4592,15 @@ $Global{'add'}{$var} = $Global{'tmpADD'}{$var};
$Global{tmpADD} = {};
-$Global{'newAttribute'}->destroy
+$Global{'newAttribute'}->destroy
if Tk::Exists($Global{'newAttribute'});
-$Global{'newAttributeFrame'}->destroy
+$Global{'newAttributeFrame'}->destroy
if Tk::Exists($Global{'newAttributeFrame'});
-delete( $Global{'newAttributeReady'} )
+delete( $Global{'newAttributeReady'} )
if ( defined($Global{'newAttributeReady'} ));
-delete( $Global{'newAttribute'})
+delete( $Global{'newAttribute'})
if ( defined($Global{'newAttribute'} ));
-delete( $Global{'newAttributeFrame'})
+delete( $Global{'newAttributeFrame'})
if ( defined($Global{'newAttributeFrame'} ));
}
@@ -4609,7 +4609,7 @@ $tmp = $Global{'tmpDELETE'};
@Keys = sort(keys(%$tmp));
-if ( @Keys )
+if ( @Keys )
{
foreach my $var ( @Keys)
{
@@ -4625,7 +4625,7 @@ $Global{tmpDELETE} = {};
$tmp = $Global{'tmpREPLACE'};
@Keys = sort(keys(%$tmp));
-if ( @Keys )
+if ( @Keys )
{
foreach my $var ( @Keys)
{
@@ -4639,16 +4639,16 @@ $Global{tmpREPLACE} = {};
$Global{'changeWindow'}->destroy if Tk::Exists($Global{'changeWindow'});
} # End of clear subroutine
-
+
sub change_cancel
{
-
+
$Global{tmpADD} = {};
$Global{tmpDELETE} = {};
$Global{tmpREPLACE} = {};
$Global{'multi'} = [];
$Global{'changeWindow'}->destroy if Tk::Exists($Global{'changeWindow'});
-
+
} # End of cancel subroutine
} # End of subroutine changeAttribute
@@ -4675,7 +4675,7 @@ return;
my $objects = $Global{'ldapActionDN'};
&ldapActionCancel();
-
+
@DNs = split(/$sepChar/,$objects); # split base from dn.
$error = 0;
@@ -4686,7 +4686,7 @@ $error = dirConn();
if ( $error == 1 )
{
- if ( defined($Global{dirConnError}) )
+ if ( defined($Global{dirConnError}) )
{
$error = "ldapActionDelete $Global{dirConnError}";
ERROR(\$error);
@@ -4705,12 +4705,12 @@ $Global{loopCount} = 0;
$okay = 0;
while ($do_it == 1 )
-{
- $mesg = $Global{ldap}->delete($DNs[1]);
-
- if ( $mesg->code )
+{
+ $mesg = $Global{ldap}->delete($DNs[1]);
+
+ if ( $mesg->code )
{
- if ( $mesg->code == 10 && $Global{fref} )
+ if ( $mesg->code == 10 && $Global{fref} )
{
#
# Being refer'ed to another directory server.
@@ -4727,7 +4727,7 @@ while ($do_it == 1 )
}
else
{
- $rmesg = $Global{rldap}->delete($DNs[1]);
+ $rmesg = $Global{rldap}->delete($DNs[1]);
if ( !$rmesg->code )
{
@@ -4735,29 +4735,29 @@ while ($do_it == 1 )
$do_it = 0;
last;
}
-
+
}
-
+
} # End of foreach my $rref (@ref )
- if ( $do_it )
+ if ( $do_it )
{
#
# All referrals have been tried, there is a major error.
#
-
+
&dirRUConn();
$errstr = "There has been a major referral error deleteing this DN.";
$errstr .= "The following referrals were tried;\n";
foreach my $rref (@referral )
- {
+ {
$errstr .= "$rref\n";
}
ERROR($errstr);
return;
-
+
} # End of if ( $do_it )
-
+
} # End of if ( $mesg->code == 10 && $Global{fref} )
else
{
@@ -4778,7 +4778,7 @@ while ($do_it == 1 )
$errstr = $mesg->code;
ERROR($errstr);
return;
- }
+ }
} # End of else for if ( $mesg->code == 10 && $Global{fref} )
} # End of if ( $mesg->code )
else
@@ -4816,14 +4816,14 @@ my $type;
my $task;
my $rresult;
my @referral;
-
+
$error = 0;
if ( !defined($Global{ldap}) )
{
-
+
$error = dirConn();
-
+
if ( $error == 1 )
{
if ( defined($Global{dirConnError}) )
@@ -4838,14 +4838,14 @@ if ( $error == 1 )
return;
}
}
-
+
}
@entry = ();
if ( $Global{createLdifFile} && -f $Global{createLdifFile})
{
- $ldif = Net::LDAP::LDIF->new( "$Global{createLdifFile}", "r",
+ $ldif = Net::LDAP::LDIF->new( "$Global{createLdifFile}", "r",
onerror => 'undef' );
if ( $ldif->error() )
@@ -4858,14 +4858,14 @@ if ( $error == 1 )
while( not $ldif->eof() ) {
$entry = $ldif->read_entry();
- if ( $ldif->error() )
+ if ( $ldif->error() )
{
$mesg = "LDIF create entry error msg: " . $ldif->error() . "\n";
$mesg .= "Error lines:\n" . $ldif->error_lines() . "\n";
ERROR(\$mesg);
}
- else
+ else
{
$op = $$entry{changetype};
@@ -4893,7 +4893,7 @@ if ( $error == 1 )
if ( $mesg->code )
{
-
+
if ( $mesg->code == 10 && $Global{fref} )
{
#
@@ -4901,7 +4901,7 @@ if ( $error == 1 )
#
@referral = $mesg->referrals();
foreach my $rref (@referral )
- {
+ {
print "LDAP Referral: $rref \n" if $debug;
$rresult = &dirRConn($rref);
if ( $rresult != 0 )
@@ -4913,7 +4913,7 @@ if ( $error == 1 )
{
$task = '$entry->update($Global{rldap})';
$rmesg = eval $task;
-
+
if ( !$rmesg->code )
{
&dirRUConn();
@@ -4921,7 +4921,7 @@ if ( $error == 1 )
last;
}
}
-
+
} # End of foreach my $rref (@ref )
if ( $do_it )
@@ -4929,7 +4929,7 @@ if ( $error == 1 )
#
# All referrals have been tried, there is a major error.
#
-
+
&dirRUConn();
$errstr = "There has been a major referral updating this DN.";
$errstr .= "The following referrals were tried;\n";
@@ -4939,13 +4939,13 @@ if ( $error == 1 )
}
ERROR($errstr);
return;
-
+
} # End of if ( $do_it )
} # End of if ( $mesg->code == 10 && $Global{fref} )
else
{
print "Delete check busy now\n" if ( $debug );
-
+
#
# There was an error, check for dsa busy
# error.
@@ -4971,13 +4971,13 @@ if ( $error == 1 )
#
$do_it = 0;
} # End of else for if ( $mesg->code == 10 && $Global{fref} )
-
+
} # End of while ( $do_it )
} # End of else for if ( $ldif->error() )
}
$ldif->done();
-
+
@entry = undef;
}
else
@@ -5006,16 +5006,16 @@ my $f;
my $ldif;
my @entry;
my $do_it;
-
+
&ldapActionCancel();
-
+
$error = 0;
if ( !defined($Global{ldap}) )
{
-
+
$error = dirConn();
-
+
if ( $error == 1 )
{
if ( defined($Global{dirConnError}) )
@@ -5030,7 +5030,7 @@ if ( $error == 1 )
return;
}
}
-
+
}
@entry = ();
@@ -5040,7 +5040,7 @@ $mesg = $Global{ldap}->search(
filter => $Global{filter},
attrs => $Global{att_wanted},
);
-
+
if ( $mesg->code && $mesg->code != 48 )
{
ERROR($mesg->code);
@@ -5051,24 +5051,24 @@ if ( $mesg->count )
if ( $Global{ldifFile} )
{
@entry = $mesg->all_entries;
-
+
if ( $Global{ldif} )
{
- $ldif = Net::LDAP::LDIF->new( "$Global{ldifFile}", "w",
+ $ldif = Net::LDAP::LDIF->new( "$Global{ldifFile}", "w",
onerror => 'undef' );
$ldif->write(@entry, -encode => "base64");
$ldif->done();
}
elsif ( $Global{xml} )
{
- open(FXML, ">$Global{'ldifFile'}");
+ open(FXML, ">$Global{'ldifFile'}");
my $dsml = Net::LDAP::DSML->new(output => *FXML, pretty_print => 1);
$dsml->write_entry(@entry);
- $dsml->end_dsml;
+ $dsml->end_dsml;
close(FXML);
}
- else
+ else
{
print "saveldif ",$Global{ldif}, "\n";
print "saveXml ",$Global{xml}, "\n";
@@ -5079,7 +5079,7 @@ if ( $mesg->count )
if ( defined( $msgbox) );
}
-
+
@entry = undef;
}
else
@@ -5114,7 +5114,7 @@ my $f;
my $ldif;
my @entry;
my $do_it;
-
+
if ( !$Global{'ldapActionDN'} )
{
&ldapActionCancel();
@@ -5123,15 +5123,15 @@ return;
my $objects = $Global{'ldapActionDN'};
&ldapActionCancel();
-
+
@DNs = split(/$sepChar/,$objects); # split base from dn.
$error = 0;
if ( !defined($Global{ldap}) )
{
-
+
$error = dirConn();
-
+
if ( $error == 1 )
{
if ( defined($Global{dirConnError}) )
@@ -5146,7 +5146,7 @@ if ( $error == 1 )
return;
}
}
-
+
}
@entry = ();
@@ -5156,7 +5156,7 @@ $mesg = $Global{ldap}->search(
filter => $Global{filter},
attrs => $Global{att_wanted},
);
-
+
if ( $mesg->code && $mesg->code != 48 )
{
ERROR($mesg->code);
@@ -5167,7 +5167,7 @@ if ( $mesg->count )
if ( $Global{ldifFile} )
{
@entry = $mesg->all_entries;
-
+
foreach $entry (@entry)
{
@@ -5176,21 +5176,21 @@ if ( $mesg->count )
{
if ( $Global{ldif} )
{
- $ldif = Net::LDAP::LDIF->new( "$Global{ldifFile}", "w",
+ $ldif = Net::LDAP::LDIF->new( "$Global{ldifFile}", "w",
onerror => 'undef' );
$ldif->write($entry, -encode => "base64");
$ldif->done();
}
elsif ( $Global{xml} )
{
- open(FXML, ">$Global{'ldifFile'}");
+ open(FXML, ">$Global{'ldifFile'}");
my $dsml = Net::LDAP::DSML->new(output => *FXML, pretty_print => 1);
$dsml->write_entry($entry);
- $dsml->end_dsml;
+ $dsml->end_dsml;
close(FXML);
}
- else
+ else
{
print "saveldif ",$Global{ldif}, "\n";
print "saveXml ",$Global{xml}, "\n";
@@ -5203,7 +5203,7 @@ if ( $mesg->count )
}
}
- else
+ else
{
$entry = undef;
}
@@ -5246,7 +5246,7 @@ my $do_it;
my $rresult;
my @referral;
-if ( $Global{'Rename'} == -1 )
+if ( $Global{'Rename'} == -1 )
{
return;
}
@@ -5258,7 +5258,7 @@ $error = dirConn();
if ( $error == 1 )
{
- if ( defined($Global{dirConnError}) )
+ if ( defined($Global{dirConnError}) )
{
$error = "ldapActionRename $Global{dirConnError}";
ERROR(\$error);
@@ -5270,20 +5270,20 @@ if ( $error == 1 )
}
}
-}
-
+}
+
$do_it = 1;
$Global{loopCount} = 0;
-
+
while ($do_it == 1 )
{
-$mesg = $Global{ldap}->moddn($Global{'RenameDN'},
- newrdn => $Global{'newrdn'},
- deleteoldrdn => $Global{'deleteoldrdn'},
- newsuperior => $Global{'newsuperior'} );
+$mesg = $Global{ldap}->moddn($Global{'RenameDN'},
+ newrdn => $Global{'newrdn'},
+ deleteoldrdn => $Global{'deleteoldrdn'},
+ newsuperior => $Global{'newsuperior'} );
-if ( $mesg->code )
+if ( $mesg->code )
{
if ( $mesg->code == 10 && $Global{fref} )
{
@@ -5302,27 +5302,27 @@ if ( $mesg->code )
}
else
{
-
- $rmesg = $Global{rldap}->moddn($Global{'RenameDN'},
- newrdn => $Global{'newrdn'},
- deleteoldrdn => $Global{'deleteoldrdn'},
- newsuperior => $Global{'newsuperior'} );
-
+
+ $rmesg = $Global{rldap}->moddn($Global{'RenameDN'},
+ newrdn => $Global{'newrdn'},
+ deleteoldrdn => $Global{'deleteoldrdn'},
+ newsuperior => $Global{'newsuperior'} );
+
if ( !$rmesg->code )
{
&dirRUConn();
$do_it = 0;
last;
}
- }
- } # End of foreach my $rref (@ref )
+ }
+ } # End of foreach my $rref (@ref )
if ( $do_it )
{
#
# All referrals have been tried, there is a major error.
#
-
+
&dirRUConn();
$errstr = "There has been a major referral error renaming this DN.";
$errstr .= "The following referrals were tried;\n";
@@ -5332,9 +5332,9 @@ if ( $mesg->code )
}
ERROR($errstr);
return;
-
+
} # End of if ( $do_it )
-
+
} # End of if ( $mesg->code == 10 && $Global{fref} )
else
{
@@ -5355,7 +5355,7 @@ if ( $mesg->code )
return;
}
}
- } # End of if ( $mesg->code )
+ } # End of if ( $mesg->code )
else
{
#
@@ -5373,12 +5373,12 @@ $Global{'searchHList'}->delete('all') if Tk::Exists($Global{'searchHList'});
$Global{nb}->raise('SEARCH');
} # End of subroutine ldapActionRename
-
+
#
# Create Rename DATA Window
#
-
-sub getRenameData
+
+sub getRenameData
{
$Global{'newsuperior'} = "";
$Global{'newrdn'} = "";
@@ -5401,7 +5401,7 @@ return;
my $objects = $Global{'ldapActionDN'};
&ldapActionCancel();
-
+
@DNs = split(/$sepChar/,$objects); # split base from dn.
$Global{'RenameDN'} = $DNs[1];
@@ -5413,44 +5413,44 @@ $rdn = shift(@rdnData);
foreach my $var (@rdnData)
{
$super .= $var . ",";
-}
+}
chop($super); # get rid of trailing comma
#
# Create Data Window
#
-
+
$Global{'renameWindow'} = MainWindow->new;
-
+
$Global{'renameWindow'}->title("MODDN INFORMATION");
-
+
$Global{'renameWindow'}->geometry("+$x+$y");
#
# Create process accept button
#
-$Global{'renameWindow'}->Button( -text => "ACCEPT", -command => \&rdnAccept,
+$Global{'renameWindow'}->Button( -text => "ACCEPT", -command => \&rdnAccept,
-font => $Global{'Font'}, -borderwidth => 3 )
-> pack(-side => "bottom", -padx => 5, -pady => 5 ) ;
-
+
#
# Create process cancel button
#
-$Global{'renameWindow'}->Button(-text => "CANCEL", -command => \&rdnCancel,
+$Global{'renameWindow'}->Button(-text => "CANCEL", -command => \&rdnCancel,
-font => $Global{'Font'}, -borderwidth => 3)
-> pack(-side => "top", -padx => 5, -pady => 5 ) ;
-
+
my $newrdnframe = $Global{'renameWindow'}->LabFrame(-label => "Newrdn",
-labelside => "acrosstop")
->pack( -fill => "both", -side => "top", -padx => 5, -pady => 5 );
-
+
#
# Create newrdn text box.
#
-
+
my $t1 = $newrdnframe->Entry(-textvariable => \$Global{'newrdn'}, -width => 25 )
-> pack(-fill => 'x');
-
+
$t1->insert("end", $rdn);
#
@@ -5459,7 +5459,7 @@ $t1->insert("end", $rdn);
#
$delrdn = $Global{'renameWindow'} -> Checkbutton(-text => "DELETE OLD RDN DATA",
- -variable => \$Global{'deleteoldrdn'}, -onvalue => 1, -offvalue => 0,
+ -variable => \$Global{'deleteoldrdn'}, -onvalue => 1, -offvalue => 0,
-font => $Global{'Font'} )
-> pack(-anchor => 'sw' );
@@ -5468,29 +5468,29 @@ $delrdn->select();
my $newsuperiorframe = $Global{'renameWindow'}->LabFrame(-label => "Newsuperior RDN",
-labelside => "acrosstop")
->pack( -fill => "both", -side => "top", -padx => 5, -pady => 5 );
-
+
#
# Create Password Entry text box.
#
-
-my $t2 = $newsuperiorframe->Entry( -textvariable => \$Global{'newsuperior'},
+
+my $t2 = $newsuperiorframe->Entry( -textvariable => \$Global{'newsuperior'},
-width => 25, -font => $Global{'Font'} )
-> pack(-fill => 'x');
-
+
$t2->insert("end", $super);
sub rdnCancel{
-
+
$Global{'renameWindow'}->destroy() if Tk::Exists($Global{'renameWindow'});
-delete($Global{'renameWindow'});
+delete($Global{'renameWindow'});
delete( $Global{'newsuperior'});
delete( $Global{'newrdn'});
delete( $Global{'deleteoldrdn'} );
delete( $Global{'RenameDN'} );
} # End of cancel subroutine
-
-sub rdnAccept{
-
+
+sub rdnAccept{
+
#
# Clean up data and close windows, forces another search to
# get valid new data.
@@ -5498,11 +5498,11 @@ sub rdnAccept{
$Global{'renameWindow'}->destroy() if Tk::Exists($Global{'renameWindow'});
$Global{'searchHistWindow'}->destroy if Tk::Exists($Global{'searchHistWindow'});
-$Global{'renameWindow'} = undef();
-$Global{'searchHistWindow'} = undef();
+$Global{'renameWindow'} = undef();
+$Global{'searchHistWindow'} = undef();
&ldapActionRename(); # Rename the entry in the directory
-
+
delete( $Global{'newsuperior'});
delete( $Global{'newrdn'});
delete( $Global{'deleteoldrdn'} );
@@ -5514,7 +5514,7 @@ delete($Global{'index'}) if ( defined($Global{'index'}));
} # End of getRenameData subroutine
-sub display_clear
+sub display_clear
{
#
@@ -5524,7 +5524,7 @@ sub display_clear
$list->delete("1.0", "end");
} # End of clear subroutine
-
+
sub displayEdit()
{
@@ -5550,8 +5550,8 @@ $Global{'editWindow'}->geometry("+$x+$y");
# Create process Exit button
#
-$Global{'editWindow'}->Button(-text => "CANCEL ENTRY EDIT",
- -command => \&edit_cancel,
+$Global{'editWindow'}->Button(-text => "CANCEL ENTRY EDIT",
+ -command => \&edit_cancel,
-font => $Global{'Font'}, -borderwidth => 5 )
-> pack(-fill => "both", -padx => 2, -pady => 2 ) ;
@@ -5567,9 +5567,9 @@ $ecframe = $Global{'editWindow'}->Frame()
# Create Clear Data
#
-$ecframe -> Button(-text => " CHANGE DATA ",
+$ecframe -> Button(-text => " CHANGE DATA ",
-command => \&changeEntry, -font => $Global{'Font'},
- -borderwidth => 3 )
+ -borderwidth => 3 )
->pack( -fill => 'both' );
#
@@ -5582,21 +5582,21 @@ $elframe = $Global{'editWindow'}->LabFrame(-label => "ENTRY DATA",
-expand => 1);
#
-# Create a ROText Box that will actually contain the
+# Create a ROText Box that will actually contain the
# returned directory data.
#
$elist = $elframe ->Scrolled('Text', -scrollbars => 'se',
- -width => 80, -height => 20, -wrap => 'none',
+ -width => 80, -height => 20, -wrap => 'none',
-font => $Global{'Font'} );
$elist->pack(-fill => "both", -expand => 1 );
-
+
#
# Create process add new attribute button
#
-
+
$elframe->Button(-text => "ADD\nATTRIBUTE",
-command => \&add_new_attribute,
-font => $Global{'Font'}, -borderwidth => 5 )
@@ -5607,11 +5607,11 @@ $elframe->Button(-text => "ADD\nATTRIBUTE",
sub edit_cancel{
-delete($Global{'add'});
-delete($Global{'delete'});
-delete($Global{'replace'});
+delete($Global{'add'});
+delete($Global{'delete'});
+delete($Global{'replace'});
$Global{'editWindow'}->destroy if Tk::Exists($Global{'editWindow'});
-
+
} # End of cancel subroutine
} # End of subroutine displayEdit
@@ -5629,7 +5629,7 @@ delete($Global{'add_new_attribute'});
#
# Execute any LDAP add, delete, or replace changes.
#
-sub changeEntry
+sub changeEntry
{
my $errstr;
my $mesg;
@@ -5643,10 +5643,10 @@ if ( !defined($Global{ldap}) )
{
$error = dirConn();
-
+
if ( $error == 1 )
{
- if ( defined($Global{dirConnError}) )
+ if ( defined($Global{dirConnError}) )
{
$error = "changeEntry $Global{dirConnError}";
ERROR(\$error);
@@ -5657,7 +5657,7 @@ if ( $error == 1 )
}
return;
}
-
+
}
#
# Execute any LDAP add changes.
@@ -5667,12 +5667,12 @@ if ( defined($Global{'add'}) )
$do_it = 1;
$Global{loopCount} = 0;
-
+
while ($do_it == 1 )
{
$mesg = $Global{ldap}->modify( $Global{'entryDN'}, add => $Global{'add'});
-
+
if ( $mesg->code )
{
@@ -5680,15 +5680,15 @@ if ( $mesg->code )
{
#
# Being refer'ed to another directory server.
- #
- #
+ #
+ #
@referral = $mesg->referrals();
-
+
foreach my $rref (@referral )
{
print "LDAP Referral: $rref \n" if $debug;
$rresult = &dirRConn($rref);
-
+
if ( $rresult != 0 )
{
print "Referral connect error, trying next now\n" if ( $debug );
@@ -5697,16 +5697,16 @@ if ( $mesg->code )
else
{
$rmesg = $Global{rldap}->modify( $Global{'entryDN'}, add => $Global{'add'});
-
+
if ( !$rmesg->code )
{
&dirRUConn();
$do_it = 0;
last;
}
-
+
}
-
+
} # End of foreach my $rref (@ref )
if ( $do_it )
@@ -5714,7 +5714,7 @@ if ( $mesg->code )
#
# All referrals have been tried, there is a major error.
#
-
+
&dirRUConn();
$errstr = "There has been a major referral error adding an attribute to this DN.";
$errstr .= "The following referrals were tried;\n";
@@ -5724,7 +5724,7 @@ if ( $mesg->code )
}
ERROR($errstr);
return;
-
+
} # End of if ( $do_it )
}
@@ -5770,12 +5770,12 @@ if ( defined($Global{'delete'}) )
$do_it = 1;
$Global{loopCount} = 0;
-
+
while ($do_it == 1 )
{
$mesg = $Global{ldap}->modify( $Global{'entryDN'}, delete => $Global{'delete'});
-
+
if ( $mesg->code )
{
@@ -5783,14 +5783,14 @@ if ( $mesg->code )
{
#
# Being refer'ed to another directory server.
- #
- #
+ #
+ #
@referral = $mesg->referrals();
-
+
foreach my $rref (@referral )
{
$rresult = &dirRConn($rref);
-
+
if ( $rresult != 0 )
{
print "Referral connect error, trying next now\n" if ( $debug );
@@ -5799,16 +5799,16 @@ if ( $mesg->code )
else
{
$rmesg = $Global{rldap}->modify( $Global{'entryDN'}, delete => $Global{'delete'});
-
+
if ( !$rmesg->code )
{
&dirRUConn();
$do_it = 0;
last;
}
-
+
}
-
+
} # End of foreach my $rref (@ref )
if ( $do_it )
@@ -5816,7 +5816,7 @@ if ( $mesg->code )
#
# All referrals have been tried, there is a major error.
#
-
+
&dirRUConn();
$errstr = "There has been a major referral error deleteing an attribute on this DN.";
$errstr .= "The following referrals were tried;\n";
@@ -5826,7 +5826,7 @@ if ( $mesg->code )
}
ERROR($errstr);
return;
-
+
} # End of if ( $do_it )
}
@@ -5872,12 +5872,12 @@ if ( defined($Global{'replace'}) )
$do_it = 1;
$Global{loopCount} = 0;
-
+
while ($do_it == 1 )
{
$mesg = $Global{ldap}->modify( $Global{'entryDN'}, replace => $Global{'replace'});
-
+
if ( $mesg->code )
{
@@ -5885,14 +5885,14 @@ if ( $mesg->code )
{
#
# Being refer'ed to another directory server.
- #
- #
+ #
+ #
@referral = $mesg->referrals();
-
+
foreach my $rref (@referral )
{
$rresult = &dirRConn($rref);
-
+
if ( $rresult != 0 )
{
print "Referral connect error, trying next now\n" if ( $debug );
@@ -5901,16 +5901,16 @@ if ( $mesg->code )
else
{
$rmesg = $Global{rldap}->modify( $Global{'entryDN'}, replace => $Global{'replace'});
-
+
if ( !$rmesg->code )
{
&dirRUConn();
$do_it = 0;
last;
}
-
+
}
-
+
} # End of foreach my $rref (@ref )
if ( $do_it )
@@ -5918,7 +5918,7 @@ if ( $mesg->code )
#
# All referrals have been tried, there is a major error.
#
-
+
&dirRUConn();
$errstr = "There has been a major referral error replacing an attribute on this DN.";
$errstr .= "The following referrals were tried;\n";
@@ -5928,12 +5928,12 @@ if ( $mesg->code )
}
ERROR($errstr);
return;
-
+
} # End of if ( $do_it )
-
-
+
+
}
- else
+ else
{
#
# There was an error, check for dsa busy
@@ -6015,7 +6015,7 @@ $error = dirConn();
if ( $error )
{
- if ( defined($Global{dirConnError}) )
+ if ( defined($Global{dirConnError}) )
{
$error = "rootDSE $Global{dirConnError}";
ERROR(\$error);
@@ -6030,7 +6030,7 @@ if ( $error )
}
my $root = $Global{ldap}->root_dse();
-my @Attributes = ( qw(subschemaSubentry namingContexts supportedLDAPVersion
+my @Attributes = ( qw(subschemaSubentry namingContexts supportedLDAPVersion
supportedControl supportedExtension altServer supportedSASLMechanisms) );
if ( !defined($root) )
@@ -6044,27 +6044,27 @@ if ( !defined($root) )
# Set up the Tk windows.
#
#
-
+
if ( ! Exists($Global{'rootWindow'} ) )
{
$Global{'rootWindow'} = MainWindow->new();
$Global{'rootWindow'}->title("ROOT DSE ENTRY");
- $Global{'rootWindow'}->geometry("+$x+$y");
+ $Global{'rootWindow'}->geometry("+$x+$y");
}
#
# Create label box
#
-#
+#
if ( !Exists($Global{'labelDSE'}) )
{
$Global{'labelDSE'} = $Global{'rootWindow'}->Label()->pack;
}
-
+
#
# Create process Exit button
#
-
+
$Global{'ebuttonDSE'} = $Global{'rootWindow'}->Button(
-text => "CLOSE ROOT DSE DISPLAY WINDOW",
-command => \&root_cancel, -font => $Global{'Font'},
@@ -6072,12 +6072,12 @@ $Global{'ebuttonDSE'} = $Global{'rootWindow'}->Button(
-> pack(-fill => "both", -padx => 2, -pady => 2 )
if ( Exists($Global{'rootWindow'} ) &&
!Exists($Global{'ebuttonDSE'} ) );
-
+
#
# Create list box, this is where the selected objectclass data will
# be displayed.
#
-
+
if ( !Exists($Global{'listDSE'}) )
{
$Global{'listDSE'} = $Global{'rootWindow'}->Scrolled('ROText',
@@ -6091,12 +6091,12 @@ else
# clear the list box
#
$Global{'listDSE'}->delete("1.0", "end");
-}
+}
foreach $attr (@Attributes)
{
- $base = $root->get_value( $attr, asref => 1);
+ $base = $root->get_value( $attr, asref => 1);
foreach (@$base)
{
$Global{'listDSE'}->insert("end", "$attr: $_\n");
@@ -6142,27 +6142,27 @@ tklkup - A script to do LDAP directory lookups, edits, and displaying directory
=head1 SYNOPSIS
-This script is used to lookup and edit information from a LDAP
-directory server. It is GUI based with several buttons for
+This script is used to lookup and edit information from a LDAP
+directory server. It is GUI based with several buttons for
selecting directory servers, search bases, attributes and
for enabling the Directory Schema Search window.
-This script has been tested on Solaris, RedHat 7.3 Linux,
-Mandrake 6.5 Linux, ActiveState Perl 628 and 5.8.7, but should work with
-any system that has PERL and the required modules installed in
+This script has been tested on Solaris, RedHat 7.3 Linux,
+Mandrake 6.5 Linux, ActiveState Perl 628 and 5.8.7, but should work with
+any system that has PERL and the required modules installed in
it.
Execute tklkup -h to view the list of input options and their
usage.
The SSL connection has been tested on Solaris, RedHat 7.3, and
-Mandrake 6.5 Linux. The SSL connection from a Microsoft Windows
+Mandrake 6.5 Linux. The SSL connection from a Microsoft Windows
system is not available at this time. If the user has SSL on
the Microsoft Windows system this can easily changed by
modifying the tklkup program, in subroutine dirConn comment out
the 6 lines of code that detects the platform type of MSWin32.
-There are 2 files associated with the tklkup program in this
+There are 2 files associated with the tklkup program in this
tar file; dot.tklkup, and tklkup.
About the files.
@@ -6171,16 +6171,16 @@ About the files.
=item dot.tklkup
-dot.tklkup - This is the initialization file that should be put
-into each users home directory as I<.tklkup>.
+dot.tklkup - This is the initialization file that should be put
+into each users home directory as I<.tklkup>.
-This file will have to be setup properly before the user
+This file will have to be setup properly before the user
can expect the tklkup script to work properly. The odds of this
initialization file being setup correctly for anyone is I<ZERO>.
-However the script can be run with this file to get a feel
+However the script can be run with this file to get a feel
for how the script will look.
-It allows the user to customize how tklkup will look and
+It allows the user to customize how tklkup will look and
work for them.
If the .tklkup files does not exist in a users home
directory the program has a set of built-in defaults
@@ -6191,7 +6191,7 @@ To be used this file must have user read permission.
There are 10 commands that can be used with this file;
binddn -> string value: Bind DN.
-
+
followref -> no value needed. Setting this option will
activate following referrals on entry modification.
@@ -6201,10 +6201,10 @@ There are 10 commands that can be used with this file;
mwheight -> numeric value: Default is 430 main window height in
pixels, user may need to adjust this.
- hand -> values: left or right. Defines where the
+ hand -> values: left or right. Defines where the
attribute label box will be place.
- limit -> value: default is 100. Limits the number of
+ limit -> value: default is 100. Limits the number of
search base(s) detected.
port -> value: default is 389. User should set this
@@ -6221,17 +6221,17 @@ There are 10 commands that can be used with this file;
additional attribute that is always listed without
any action by the user; Filter. This attribute
allows the user to enter the I<COMPLETE> filter
- that will used to search for data.
+ that will used to search for data.
server -> name of the directory server that you wish
- to conduct the data search.
+ to conduct the data search.
One server per line.
Each line can have one of two formats
server: server name
or
- server: server name: base
+ server: server name: base
- The I<server: server name> format will try to use the
+ The I<server: server name> format will try to use the
root_dse function to define the base.
It the root_dse returns the namingContexts attribute,
that information will be use to determine the search
@@ -6241,47 +6241,47 @@ There are 10 commands that can be used with this file;
In this case the user will have to define a search base
in the server command of the .tklkup file.
- The I<server: server name: base> format will
- cause each of the defined servers to have it's
+ The I<server: server name: base> format will
+ cause each of the defined servers to have it's
own special initial search base and use this initial
search base to find all of the other search bases.
This is an attempt to do auto search base detection.
Using this method has one I<draw back>, when changing
to a different directory server there is a possible
- I<delay> on displaying the new server name and
- search base. This is due to the fact that TK and
+ I<delay> on displaying the new server name and
+ search base. This is due to the fact that TK and
it's MainLoop() process are not multi-tasking.
- The new search base has to be acquired and setup before
+ The new search base has to be acquired and setup before
MainLoop() takes control of the process.
Depending on the number of search bases this time period
- can be quite a few seconds.
+ can be quite a few seconds.
- When switching between servers with the same base, the
- search base will I<not> be updated. This too can have
- a I<draw back> if there are new search bases in the
+ When switching between servers with the same base, the
+ search base will I<not> be updated. This too can have
+ a I<draw back> if there are new search bases in the
new server but it saves time.
- None of this is a problem if all of your servers have
- the same DIT layouts. Just define them with the
+ None of this is a problem if all of your servers have
+ the same DIT layouts. Just define them with the
same search base, there should be little or no delay
when switching to the new server.
=back
- Now a word about directory branch, or search base, detection.
+ Now a word about directory branch, or search base, detection.
There are many things that can prevent this function from working
- properly. Several version 2 LDAP servers that this was tested
+ properly. Several version 2 LDAP servers that this was tested
on required that you be bound to the server.
- None of the version 3 LDAP servers required this.
- If this function does not work for you, provide a bind DN and
- password. The normal mode of operation for this function is an
- anonymous bind situation.
- Some of the ldap servers I worked with would never return the
+ None of the version 3 LDAP servers required this.
+ If this function does not work for you, provide a bind DN and
+ password. The normal mode of operation for this function is an
+ anonymous bind situation.
+ Some of the ldap servers I worked with would never return the
information I expected, auto detection never functioned on these
systems.
- There is one college ldap server on the Internet that has so
- many bases that it takes over an hour to figure out all the
- search bases. The only way the operator knows that the
+ There is one college ldap server on the Internet that has so
+ many bases that it takes over an hour to figure out all the
+ search bases. The only way the operator knows that the
script is still working is because search limit exceeded messages
are displayed on the console that initiated the tklkup script.
Who wants to wait a hour while the script figures this out.
@@ -6293,24 +6293,24 @@ There are 10 commands that can be used with this file;
=head1 tklkup
-tklkup - PERL executable file.
+tklkup - PERL executable file.
-You may need to change the first line of the PERL tklkup script
+You may need to change the first line of the PERL tklkup script
to point to your file pathname of perl.
When executed tklkup will display a window on your
-computer. The graphical user interface, GUI, has
-several sections to it.
+computer. The graphical user interface, GUI, has
+several sections to it.
-If tklkup is run on a HPUX, Sun, or Linux system the
+If tklkup is run on a HPUX, Sun, or Linux system the
tklkup process will fork and run in background mode.
If tklkup is run in debug mode or on a system that is not
-listed above it will I<NOT> fork and will run in in
+listed above it will I<NOT> fork and will run in in
foreground mode.
During initial program initialization a "splash" screen will
be displayed telling the user what is going on. It is possible
-that the user will never see the splash screen if tklkup
+that the user will never see the splash screen if tklkup
initializes quickly.
@@ -6319,15 +6319,15 @@ initializes quickly.
=head1 Tklkup Menu Bar
At the top of the GUI is the main menu bar. It has 3 drop down
-menus; "Directory OPS", "Set Bind Credentials", and
+menus; "Directory OPS", "Set Bind Credentials", and
"Set DSA Port".
The I<DIRECTORY OPS> button will activate a drop down menu that
-has 2 menu selections;
+has 2 menu selections;
The I<EXPLORE ROOT DSE> menu will attempt to obtain the
root dse entry for the selected directory server. If the root
-dse entry is obtained a separate window will be displayed that
+dse entry is obtained a separate window will be displayed that
will display the information obtained from the root dse entry.
If the root dse entry can not be obtained then an error message
window will be displayed. This menu has a "Hot" key, Ctrl-r.
@@ -6335,31 +6335,31 @@ window will be displayed. This menu has a "Hot" key, Ctrl-r.
The I<Set SSL> menu will set parameters for a SSL ldap connection.
This menu has a "Hot" key, Ctrl-s.
-The I<Set NON-SSL> menu will set parameters for a non-SSL ldap
+The I<Set NON-SSL> menu will set parameters for a non-SSL ldap
connection. This menu has a "Hot" key, Ctrl-n.
The I<Toggle LDAP Version> menu will toggle the ldap version
between version 2 and 3. This menu has a "Hot" key, Ctrl-l.
The I<Toggle Follow Referral> menu will toggle the flag that
-determines whether a ldap modify follows a referral. This menu
+determines whether a ldap modify follows a referral. This menu
has a "Hot" key, Ctrl-f.
The I<Exit> menu will exit the program. This menu has a
"Hot" key, Ctrl-x.
-The I<SET BIND CREDENTIALS> button will activate a window
-that is separate from the main window. This menu has a
+The I<SET BIND CREDENTIALS> button will activate a window
+that is separate from the main window. This menu has a
"Hot" key, Alt-b.
-The new window contains two buttons and two text boxes.
+The new window contains two buttons and two text boxes.
At the top of the window is a Cancel button, pressing
this button will cancel the operation of setting the
-bind DN and password.
+bind DN and password.
The DN text box is where the user will enter the DN
-to bind with. If the user has the binddn option in the .tklkup
+to bind with. If the user has the binddn option in the .tklkup
file, the binddn will be displayed in the DN text box.
The PASSWORD text box is where the user will enter the password
@@ -6376,12 +6376,12 @@ selected directory server.
Having both the dn and password fields blank and pressing the
accept key will cause an anonymous bind to the directory.
-The I<DIRECTORY PORT> button will activate a window
-that is separate from the main window. This menu has a
+The I<DIRECTORY PORT> button will activate a window
+that is separate from the main window. This menu has a
"Hot" key, Alt-p.
-The new window contains two buttons, and one text box. If the
-user needs to change the TCP connection port, this is where it
+The new window contains two buttons, and one text box. If the
+user needs to change the TCP connection port, this is where it
is done.
At the top of the window is a Cancel button, pressing
@@ -6398,7 +6398,7 @@ port number will I<NOT> cause the program to issue a new
connection to the directory server. The user must re-select or
change to a new directory server.
-I<EXIT PROGRAM> button. Just below the main menu bar is
+I<EXIT PROGRAM> button. Just below the main menu bar is
the "Exit" button. When a mouse click is done on the "EXIT PROGRAM"
button the program will terminate. This menu has a "Hot" key, Alt-e.
@@ -6409,18 +6409,18 @@ the "Exit" button. When a mouse click is done on the "EXIT PROGRAM"
Just below the Menu Bar is a section of the GUI that is displayed
at all time regardless of which panel is displayed.
-The I<SELECT SERVER> button will activate a
-drop down menu. From the menu the user will select the
+The I<SELECT SERVER> button will activate a
+drop down menu. From the menu the user will select the
"RadioButton" that corresponds to the directory server the
user wishes to use. When selected the "RadioButton" diamond
-will turn red in color. This menu is a designed to be a
-"I<tear off>" menu, selecting the "---------------" line will
-cause the pull down menu to become a separate window that
-is still somewhat controlled by the GUI. The
-DIRECTORY SERVER text box will display the directory name
-that is selected. If the GUI is icon-ed or exited, the tear
-off window will follow the actions of the GUI. All other
-actions like moving or closing just the torn off window
+will turn red in color. This menu is a designed to be a
+"I<tear off>" menu, selecting the "---------------" line will
+cause the pull down menu to become a separate window that
+is still somewhat controlled by the GUI. The
+DIRECTORY SERVER text box will display the directory name
+that is selected. If the GUI is icon-ed or exited, the tear
+off window will follow the actions of the GUI. All other
+actions like moving or closing just the torn off window
must be done by the user's window manager.
To the left of the I<SELECT SERVER> button are two text labels;
@@ -6428,8 +6428,8 @@ one for the LDAP version and one for the SSL connection type.
These labels will display information about the selected LDAP
version and SSL connection status.
-At this point the tklkup GUI is made of five display and
-control panels; SEARCH, SEARCH DISPLAY, SCHEMA DATA, CREATE ENTRY,
+At this point the tklkup GUI is made of five display and
+control panels; SEARCH, SEARCH DISPLAY, SCHEMA DATA, CREATE ENTRY,
and INFO;
-------------------------------------------------------------------
@@ -6440,53 +6440,53 @@ The I<SELECT BASE> button will activate a Select Search Base window
contains 2 buttons and a herical tree structure of the directory.
At the top of the Select Search Base window is the CANCEL BASE CHANGE
button. Pressing the button will cancel the search base change and
-will close, or withdraw, the window. At the bottom of the Select Search
-Base window is the ACCEPT BASE CHANGE button. Pressing the button
+will close, or withdraw, the window. At the bottom of the Select Search
+Base window is the ACCEPT BASE CHANGE button. Pressing the button
will change the search base to the highlighted directory branch and
-will close, or withdraw, the window.
+will close, or withdraw, the window.
In the middle of the Select Search Base window is the hierarchical
list box where a tree type display of the directory branch structure
will be displayed. The directory namingContext(s) form the base of the
tree(s), to the left of each branch in the directory will be a small
box with a + or - sign in it, if the box has a + in it, clicking on
-the box will expand the tree structure, if the box has a - in it,
+the box will expand the tree structure, if the box has a - in it,
clicking on the box will collapse the tree structure.
To select a search base, click on a branch, which will highlight the
branch, and press the ACCEPT BASE CHANGE button.
-The I<SELECT ADDITIONAL ATTRIBUTES> button will activate a
-drop down menu. From the menu the user will select the
+The I<SELECT ADDITIONAL ATTRIBUTES> button will activate a
+drop down menu. From the menu the user will select the
"RadioButton" that corresponds to the attribute the
-user wishes to use in the filter of the directory search. When
-selected the "RadioButton" diamond will turn red in color. This
-menu is a designed to be a "I<tear off>" menu, selecting the
-"---------------" line will cause the pull down menu to
-become a separate window that is still somewhat controlled
-by the GUI. If the GUI is icon-ed or exited, the tear off
-window will follow the actions of the GUI. All other
-actions like moving or closing just the torn off window
+user wishes to use in the filter of the directory search. When
+selected the "RadioButton" diamond will turn red in color. This
+menu is a designed to be a "I<tear off>" menu, selecting the
+"---------------" line will cause the pull down menu to
+become a separate window that is still somewhat controlled
+by the GUI. If the GUI is icon-ed or exited, the tear off
+window will follow the actions of the GUI. All other
+actions like moving or closing just the torn off window
must be done by the user's window manager.
-The I<SAVE FORMAT> frame contains to check boxes.
+The I<SAVE FORMAT> frame contains to check boxes.
If checkbox XML is select, the SAVE TO and SAVE ALL TO
-buttons will save the select data in XML format.
+buttons will save the select data in XML format.
If checkbox LDIF is select, the SAVE TO and SAVE ALL TO
-buttons will save the select data in LDIF format.
+buttons will save the select data in LDIF format.
-Just under the I<SELECT BASE> button is the hierarchical text
+Just under the I<SELECT BASE> button is the hierarchical text
box where the DN results of the directory search will be displayed.
-If there were valid results returned from the search a list of DN
-entry(s) will be displayed in the hierarchical list box. Selecting
-a DN will cause the five LDAP Action buttons to the left of the
-hierarchical text box to be put in the active state. It is with
+If there were valid results returned from the search a list of DN
+entry(s) will be displayed in the hierarchical list box. Selecting
+a DN will cause the five LDAP Action buttons to the left of the
+hierarchical text box to be put in the active state. It is with
these 5 buttons that the user can select to view, rename, edit,
-save to a ldif file, or delete the corresponding DSA's directory
+save to a ldif file, or delete the corresponding DSA's directory
data.
=head1 LDAP ACTION BUTTONS
-I<DISPLAY> - Will display the selected DN's information in the
+I<DISPLAY> - Will display the selected DN's information in the
Directory Data text box that is located in the SEARCH DISPLAY
panel. The SEARCH DISPLAY panel will be brought to the foreground
of the GUI.
@@ -6499,48 +6499,48 @@ I<DELETE> - Will cause the selected DN to be deleted from the
directory. When this button has the focus, it's text will turn
red, letting the user know to use caution with this button.
-I<EDIT> - Will cause a Entry Edit Display window with the
-corresponding entry data in it. It is from this window that the
-user can change directory data. This window is described in
+I<EDIT> - Will cause a Entry Edit Display window with the
+corresponding entry data in it. It is from this window that the
+user can change directory data. This window is described in
detail later in this document.
I<SAVE TO> - Will cause the entry that is selected to be written
-to the file specified in the FILE NAME text box. The data
-format of this file will be whatever is selected in the
+to the file specified in the FILE NAME text box. The data
+format of this file will be whatever is selected in the
SAVE FORMAT frame.
I<CANCEL> - Will cancel the action request for the select DN.
-I<SEARCH THE DIRECTORY> button. At the bottom of the GUI is
-the "Search" button. When a mouse click is done on the
+I<SEARCH THE DIRECTORY> button. At the bottom of the GUI is
+the "Search" button. When a mouse click is done on the
"SEARCH THE DIRECTORY" button the program will execute a ldap search
-of the directory.
+of the directory.
-The I<FILTER DATA> text box is where the user will enter
+The I<FILTER DATA> text box is where the user will enter
the data to be searched for. The program will automatically
put the beginning and ending parenthesis around the data.
-If the I<Filter> attribute is selected this is where the
+If the I<Filter> attribute is selected this is where the
I<COMPLETE> filter is entered, the program will not modify this
string in any way.
If the user presses the Enter key while the I<FILTER DATA> text box
has the key board focus, a ldap search for the filter data will be
-executed. This action is the same as pressing the
+executed. This action is the same as pressing the
I<SEARCH THE DIRECTORY> button.
The I<CLEAR FILTER DATA> button will clear out the text
that appears in the Attribute Data text box.
-The I<SET FILTER CONDITION> button will activate a drop down menu.
-From the menu the user will select the "RadioButton" that
-corresponds to the filter conditions the user wishes to use
-in the directory search. When selected the "RadioButton"
-diamond will turn red in color. This menu is a designed
-to be a "I<tear off>" menu, selecting the
-"---------------" line will cause the pull down menu to
-become a separate window that is still somewhat controlled
-by the GUI. If the GUI is icon-ed or exited, the tear off
-window will follow the actions of the GUI. All other
-actions like moving or closing just the torn off window
+The I<SET FILTER CONDITION> button will activate a drop down menu.
+From the menu the user will select the "RadioButton" that
+corresponds to the filter conditions the user wishes to use
+in the directory search. When selected the "RadioButton"
+diamond will turn red in color. This menu is a designed
+to be a "I<tear off>" menu, selecting the
+"---------------" line will cause the pull down menu to
+become a separate window that is still somewhat controlled
+by the GUI. If the GUI is icon-ed or exited, the tear off
+window will follow the actions of the GUI. All other
+actions like moving or closing just the torn off window
must be done by the user's window manager.
The four filter conditions control how the search filter
will be created. Just to the side of the I<SET FILTER CONDITION>
@@ -6549,26 +6549,26 @@ that is selected.
=head1 SAVE ALL TO BUTTON
-At the bottom of the SEARCH RESULTS panel is the SAVE ALL TO
-button, pressing this button will cause the previous search to be
-re-executed and all of the search results will be written to the
-file specified in the FILE NAME text box. The data
-format of this file will be whatever is selected in the
+At the bottom of the SEARCH RESULTS panel is the SAVE ALL TO
+button, pressing this button will cause the previous search to be
+re-executed and all of the search results will be written to the
+file specified in the FILE NAME text box. The data
+format of this file will be whatever is selected in the
SAVE FORMAT frame.
-------------------------------------------------------------------
=head1 SEARCH DISPLAY PANEL
-
+
The I<SEARCH DISPLAY> is the panel where data for the
selected DN is displayed. Data is displayed in the read only
-Directory Data text box. Associated with the Directory Data
+Directory Data text box. Associated with the Directory Data
text box is the "RadioButton" that determines how often the
-data in the directory text box is cleared. If the "CheckButton"
-is selected, colored red, the directory data text box will be
-cleared out before each directory query. If the "CheckButton"
-is not selected the directory data text box will NOT be cleared
-out until the Clear Data button in clicked or the
+data in the directory text box is cleared. If the "CheckButton"
+is selected, colored red, the directory data text box will be
+cleared out before each directory query. If the "CheckButton"
+is not selected the directory data text box will NOT be cleared
+out until the Clear Data button in clicked or the
CLEAR DIRECTORY DATA ON EACH QUERY "RadioButton" is selected.
The Directory Data text box is where the results of the
@@ -6580,16 +6580,16 @@ with 4 additional functions will be displayed inside the
Directory Data text box. These 4 functions are;
File -> This function exits the window. You can not edit
- the Directory Data text box because it is created
+ the Directory Data text box because it is created
as a read only text box.
Edit -> This function gives the user 3 additional functions;
Copy -> I do not know what this function does.
Select All -> Highlights/Selects all of the text in
the Directory Data text box.
- Unselect All -> Unselects all of the text in
+ Unselect All -> Unselects all of the text in
the Directory Data text box.
- Select/Unselect are used in-conjunction with the
+ Select/Unselect are used in-conjunction with the
Copy function.
Search -> This function gives the user 4 additional
@@ -6597,12 +6597,12 @@ Directory Data text box. These 4 functions are;
Find, Find Next, Find Previous -> These functions
find text in the Directory Data text box.
Replace -> This function allows you to replace the
- text that is selected. However this is just
- a fake replacement as you can not edit the
- Directory Data text box because it is created
+ text that is selected. However this is just
+ a fake replacement as you can not edit the
+ Directory Data text box because it is created
as a read only text box.
- View -> This function gives the user 3 additional
+ View -> This function gives the user 3 additional
functions.
Goto Line -> When selected will prompt the
user for a line number, the line number being
@@ -6610,7 +6610,7 @@ Directory Data text box. These 4 functions are;
What Line -> When selected will tell the user
what line number the cursor is on.
Wrap -> When selected will prompt the user
- to choose how to do line wrapping in the
+ to choose how to do line wrapping in the
Directory Data text box.
The CLEAR DATA button will clear out the text that
@@ -6623,18 +6623,18 @@ when a jpegPhoto attribute is read a separate I<JPEG PHOTO DISPLAY>
window will be display. Inside this window will be the jpeg photo,
a list box containing the DN of the entry, and a I<CLOSE WINDOW> button.
-If the Tk::JPEG module is I<NOT> installed in the user's Perl
+If the Tk::JPEG module is I<NOT> installed in the user's Perl
system, nothing will be displayed for the jpegPhoto.
-------------------------------------------------------------------
=head1 MODDN INFORMATION WINDOW
-The I<RENAME> button will activate a window that is separate from
-the main window.
+The I<RENAME> button will activate a window that is separate from
+the main window.
-The new window contains two buttons, two text boxes and one
-checkbutton.
+The new window contains two buttons, two text boxes and one
+checkbutton.
The text boxes are initialized with data that corresponds the
DN that was selected in the Search Results window. It is in
these text boxes that the user will enter the data needed for the
@@ -6655,7 +6655,7 @@ this button will set the new RDN and the superior RDN.
The I<DELETE OLD RDN DATA> check box controls whether the old
entry information is deleted or not deleted. When the check box
is selected, colored red, the old entry information will be deleted.
-This is the default action for this button.
+This is the default action for this button.
Unselecting the check box will cause the entry data to not be deleted.
-------------------------------------------------------------------
@@ -6687,7 +6687,7 @@ Each line in the box is broken up into two parts; the attribute button and
the attribute data list box. There is one attribute and data pair per
line. Multi-valued attributes have one line per attribute value.
-The first line in the I<ENTRY DATA> box will be the DN of the entry.
+The first line in the I<ENTRY DATA> box will be the DN of the entry.
This line can not be edited.
To edit an attribute, press the button that has the attributes name on
@@ -6695,15 +6695,15 @@ it. This will cause a I<ATTRIBUTE MODIFICATION> window to be displayed.
This window is described in detail later in this documentation.
When the user has finished making changes, press the I<CHANGE DATA> button.
-This will start the process of making the change(s) in the LDAP
+This will start the process of making the change(s) in the LDAP
directory. If any errors occur a error window will appear. After the
-error window is dismissed the I<ENTRY EDIT DISPLAY> window will still
+error window is dismissed the I<ENTRY EDIT DISPLAY> window will still
be active. The user can at this point do what ever it takes to correct
the problem.
-If no errors occur the I<ENTRY EDIT DISPLAY> window and the
+If no errors occur the I<ENTRY EDIT DISPLAY> window and the
I<SEARCH RESULTS> windows will be destroyed. This is due to the fact
-that the data in both windows is no longer valid. The user must
+that the data in both windows is no longer valid. The user must
research the LDAP directory to get the new updated information.
@@ -6724,11 +6724,11 @@ the pending data change queue.
In the middle of the window is the attribute data text box. It is in
this text box that the user will find the current data for the attribute
-the user selected. Depending on the operation the user wants to do the
+the user selected. Depending on the operation the user wants to do the
user can change the data or leave the data as is.
Below the attribute data text box are three buttons, ADD, DELETE, and
-REPLACE.
+REPLACE.
=head2 ADD operations.
@@ -6744,7 +6744,7 @@ the I<DELETE> button.
=head2 REPLACE operations.
-The attribute value being replaced is a part of a multi-valued
+The attribute value being replaced is a part of a multi-valued
attribute, the new value will be added to the attribute, then
the old value will be deleted. If the add operation has an error
code, the delete part of this operation will not take place.
@@ -6752,9 +6752,9 @@ code, the delete part of this operation will not take place.
If the attribute value being replace is a single valued attribute
this value will be replaced.
-When the user done with the changes the user should press the
+When the user done with the changes the user should press the
I<ACCEPT DATA CHANGES> button. This will move the data changes onto
-the pending data change queue and close the window.
+the pending data change queue and close the window.
-------------------------------------------------------------------
@@ -6771,8 +6771,8 @@ directory entry to be deleted.
=head1 SCHEMA DATA PANEL
-This panel has schema information from a LDAP directory server.
-This data is retrieved, with in one second, upon connection to the
+This panel has schema information from a LDAP directory server.
+This data is retrieved, with in one second, upon connection to the
selected directory server. This action takes place upon start up
of the program or when a new directory server is selected.
@@ -6781,27 +6781,27 @@ of the program or when a new directory server is selected.
When the SCHEMA DATA panel tab is pressed, the SCHEMA DATA
panel is brought to the foreground of the GUI.
-When the Write Data To File RadioButton is selected the
-LDAP Schema data will be written to the file listed
+When the Write Data To File RadioButton is selected the
+LDAP Schema data will be written to the file listed
in the text box below the RadioButton text. By selecting
the DSML XML RadionButton, the data will be written to the
-file in XML format. Once the data has been written to the file a
-message will be written to the DIRECTORY SCHEMA DATA text box
-stating that the data has been written to a file and will list
-the file name. Upon completion of the schema dump operation
+file in XML format. Once the data has been written to the file a
+message will be written to the DIRECTORY SCHEMA DATA text box
+stating that the data has been written to a file and will list
+the file name. Upon completion of the schema dump operation
the RadioButton and text in the file name text box will be reset.
-At the bottom of the GUI is the "Retrieve Directory Schema" button.
-When a mouse click is done on the "Retrieve Directory Schema"
+At the bottom of the GUI is the "Retrieve Directory Schema" button.
+When a mouse click is done on the "Retrieve Directory Schema"
button the script will query the directory server for schema information
and then write the information to the file.
Associated with the Directory Schema Data text box is a series of
"CheckButtons" that determines what of the schema objects will be
displayed. There are 9 Checkbuttons; ALL, objectClass, matchingRules,
-attributeTypes, ldapsyntaxes, nameforms, ditstructurerules,
-ditcontentrules, and matchingruleuse. If the "CheckButton" is
-selected, colored red, then schema objects of that type will be
-displayed in the Directory Schema Data text box.
+attributeTypes, ldapsyntaxes, nameforms, ditstructurerules,
+ditcontentrules, and matchingruleuse. If the "CheckButton" is
+selected, colored red, then schema objects of that type will be
+displayed in the Directory Schema Data text box.
If the "CheckButton" is not selected, gray in color, then schema
objects of this type will not be displayed in the Directory Schema
Data text box. By default the ALL CheckButton is select.
@@ -6811,20 +6811,20 @@ directory search will be displayed. With the cursor
in the Directory Data text box you have access to additional
functions when you depress the mouse "action" button.
When the "action" mouse button is depressed a small text box
-with 4 additional functions will be displayed inside the
+with 4 additional functions will be displayed inside the
Directory Data text box. These 4 functions are;
File -> This function exits the window. You can not edit
- the Directory Data text box because it is created
+ the Directory Data text box because it is created
as a read only text box.
Edit -> This function gives the user 3 additional functions;
Copy -> I do not know what this function does.
Select All -> Highlights/Selects all of the text in
the Directory Data text box.
- Unselect All -> Unselects all of the text in
+ Unselect All -> Unselects all of the text in
the Directory Data text box.
- Select/Unselect are used in-conjunction with the
+ Select/Unselect are used in-conjunction with the
Copy function.
Search -> This function gives the user 4 additional
@@ -6832,12 +6832,12 @@ Directory Data text box. These 4 functions are;
Find, Find Next, Find Previous -> These functions
find text in the Directory Data text box.
Replace -> This function allows you to replace the
- text that is selected. However this is just
- a fake replacement as you can not edit the
- Directory Data text box because it is created
+ text that is selected. However this is just
+ a fake replacement as you can not edit the
+ Directory Data text box because it is created
as a read only text box.
- View -> This function gives the user 3 additional
+ View -> This function gives the user 3 additional
functions.
Goto Line -> When selected will prompt the
user for a line number, the line number being
@@ -6845,39 +6845,39 @@ Directory Data text box. These 4 functions are;
What Line -> When selected will tell the user
what line number the cursor is on.
Wrap -> When selected will prompt the user
- to choose how to do line wrapping in the
+ to choose how to do line wrapping in the
Directory Data text box.
-The Clear Data button will clear out the text that
+The Clear Data button will clear out the text that
appears in the Directory Schema Data text box.
The I<SHOW HIERARCHICAL OBJECTCLASS TREE> will cause one of two
-windows to be displayed. For information about these windows see
+windows to be displayed. For information about these windows see
the HIERARCHICAL OBJECTCLASS section of the manual.
-At the bottom of the GUI is the "Retrieve Directory Schema" button.
-When a mouse click is done on the "Retrieve Directory Schema"
+At the bottom of the GUI is the "Retrieve Directory Schema" button.
+When a mouse click is done on the "Retrieve Directory Schema"
button the script will query the directory server for schema information.
=head1 HIERARCHICAL OBJECTCLASS Window
-If no directory schema data has been obtained from the selected
+If no directory schema data has been obtained from the selected
directory server a error message window will be displayed stating
that no schema data is available.
If directory schema data has been obtained from the selected
directory server a separate window will be displayed.
-The I<HIERARCHICAL OBJECTCLASS> window has two list boxes and
-a I<CLOSE HIERARCHICAL DISPLAY WINDOW> button. The
-I<CLOSE HIERARCHICAL DISPLAY WINDOW> button will destroy the
+The I<HIERARCHICAL OBJECTCLASS> window has two list boxes and
+a I<CLOSE HIERARCHICAL DISPLAY WINDOW> button. The
+I<CLOSE HIERARCHICAL DISPLAY WINDOW> button will destroy the
I<HIERARCHICAL OBJECTCLASS> window. In one of the list boxes will
be a hierarchical tree of all of the objectclasses obtained from the
-directory server. Doing a mouse button select on one of the
-objects in the tree will cause information about that objectclass
+directory server. Doing a mouse button select on one of the
+objects in the tree will cause information about that objectclass
branch to be displayed in the adjacent list box. The most superior
ojectclass will be at the top of the listing, the leaf objectclass
will be at the bottom of the listing. Each objectclass is separated
-by a dashed line. All information about each objectclass will be
+by a dashed line. All information about each objectclass will be
displayed in that objectclass's section.
-------------------------------------------------------------------
@@ -6888,7 +6888,7 @@ displayed in that objectclass's section.
The user can create and modify an entry from a LDIF file.
-When the user presses the "CREATE/MODIFY ENTRY FROM LDIF FILE"
+When the user presses the "CREATE/MODIFY ENTRY FROM LDIF FILE"
button, the file listed in the "LDIF FILE NAME" text box will be used
to create or modify the entries listed in the ldif formatted file.
@@ -6902,16 +6902,16 @@ the SELECT DN BASE button. This will setup part of the entry's
DN.
After selecting the DN base the user can find and select an objectclass,
-or objectclasses from the list of objectClass(s). When the user selects,
+or objectclasses from the list of objectClass(s). When the user selects,
by clicking the pointer on an objectClass, the objectclass will appear
in the window to the left of the objectclass list. The superior objectclass(s)
-of the selected objectclass will also be displayed.
+of the selected objectclass will also be displayed.
If the user adds a wrong objectclass, the user may remove the objectclass
-by clicking the button with the objectclass name in it. Only that
+by clicking the button with the objectclass name in it. Only that
class will be removed.
-When the user is ready to create the entry, the user must click the
+When the user is ready to create the entry, the user must click the
"Create The Entry" button and a CREATE DIRECTORY ENTRY window
will be displayed. It is from the CREATE DIRECTORY ENTRY window the
the user will finish entering data for the new entry.
@@ -6924,7 +6924,7 @@ include in the objectclasses for the new entry.
=head1 CREATE DIRECTORY ENTRY WINDOW
-At the top of the CREATE DIRECTORY ENTRY window is the
+At the top of the CREATE DIRECTORY ENTRY window is the
CANCEL CREATE ENTRY DISPLAY button. Pressing this button
will cancel the entry creation process.
@@ -6939,20 +6939,20 @@ the Naming Attribute, or sets up a DN.
The data list box is for all practical purposes divided into 4
sections.
-The DN text field is where the user can edit the DN base or
-enter in a complete DN. If the user enters a complete DN the
+The DN text field is where the user can edit the DN base or
+enter in a complete DN. If the user enters a complete DN the
user should B<NOT> select a Naming Attribute radionbutton.
Between the DN text field and the objectClass text fields will
-be all of the B<MUST> attributes. The B<MUST> attribute names
+be all of the B<MUST> attributes. The B<MUST> attribute names
will be colored red. These attributes must have information in
them for the entry to be accepted into the directory.
The objectClass text fields are read only fields that list the
objectClasses that will be used in the creation of the entry.
-All attributes below the objectClass text fields are B<MAY>
-attributes, the user does not have to supply information about
+All attributes below the objectClass text fields are B<MAY>
+attributes, the user does not have to supply information about
these attributes unless the attribute is selected to be the
Naming Attribute. If the attribute is selected to be the Naming
Attribute it B<MUST> have data associated with it.
@@ -6964,16 +6964,16 @@ does not have to use these buttons, but if one is selected,
due to the nature of radiobuttons, one of them must be used
as there is no way to deselect any of the radiobuttons.
-At the bottom of the CREATE DIRECTORY ENTRY window is the
+At the bottom of the CREATE DIRECTORY ENTRY window is the
CREATE ENTRY button. Pressing this button will start the process
of putting the new entry into the directory.
If during the actual creation of the entry there is an error
detected, a error window will be displayed stating the error.
Once the error is acknowledged, the user can correct the error
-and then re-click the CREATE ENTRY button will re-attempt to
-create the entry in the directory. The CREATE DIRECTORY ENTRY
-window will not be destroyed until either the user cancels the
+and then re-click the CREATE ENTRY button will re-attempt to
+create the entry in the directory. The CREATE DIRECTORY ENTRY
+window will not be destroyed until either the user cancels the
action or the entry is created in the directory.
@@ -6985,7 +6985,7 @@ This panel is mainly for information.
The I<Process Messages> text window is where process messages
will be displayed. The messages are indicators of what is
-happening during the execution of the program. By selecting
+happening during the execution of the program. By selecting
a line of text and moving the cursor up or down, the user
can scroll through the messages.
@@ -7023,14 +7023,14 @@ load the following PERL module.
Perl Digest-MD5 module. You can get this from the following URL;
ftp://ftp.duke.edu/pub/CPAN/modules/by-module/MD5/
-Bundled inside each PERL module is instructions on how to install the
+Bundled inside each PERL module is instructions on how to install the
module into your PERL system.
-------------------------------------------------------------------
=head1 INSTALLING THE SCRIPT
-Install the tklkup script anywhere you wish, I suggest
+Install the tklkup script anywhere you wish, I suggest
/usr/local/bin/tklkup.
Install the dot.tklkup file in each users home directory
@@ -7039,7 +7039,7 @@ create a link in the user home directory to the central copy.
-------------------------------------------------------------------
-Since the script is in PERL, feel free to modify it if it does not
+Since the script is in PERL, feel free to modify it if it does not
meet your needs. This is one of the main reasons I did it in PERL.
If you make an addition to the code that you feel other individuals
could use let me know about it. I may incorporate your code