[LDAPsh-cvs] ldapsh ldapsh,1.55,1.56
Status: Beta
Brought to you by:
rcorvalan
From: <j-d...@us...> - 2004-03-19 12:33:59
|
Update of /cvsroot/ldapsh/ldapsh In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13670 Modified Files: ldapsh Log Message: * Escape special LDAP characters when completing RDNs. * Enable tab-completion for RDNs with whitespace. Notes: only works when a user has psh installed; this feature does not yet extend to the task of filter completion. Index: ldapsh =================================================================== RCS file: /cvsroot/ldapsh/ldapsh/ldapsh,v retrieving revision 1.55 retrieving revision 1.56 diff -C2 -d -r1.55 -r1.56 *** ldapsh 19 Mar 2004 12:18:18 -0000 1.55 --- ldapsh 19 Mar 2004 12:24:10 -0000 1.56 *************** *** 837,853 **** $TermAttribs->{completion_append_character} = ','; ! #my @parts1 = split(/\s*,\s*/, $text, -1); ! my @parts1 = _splitdn($text, -1); ! my $partToComplete = pop @parts1 || ''; ! my $prefix = join(',', @parts1); my @parts2 = reverse(@parts1); - my $BaseDN = join(',', @parts2, $Globals->{CWD}{VALUE}); #$TermAttribs->{completion_append_character} = "\0"; if ($partToComplete =~ m/=/) { ! return _RDNCompletion($prefix, $partToComplete, $BaseDN); } else { --- 837,875 ---- $TermAttribs->{completion_append_character} = ','; ! # if $text is preceded by '\ ', then prepend ' ' and search back to the ! # previous space. Note 1: perhaps there are more delimiters that should be ! # recognised. Note 2: the following is only known to work with ASCII. ! my ($newstart, $newtext) = ($start, $text); ! while (substr($line, 0, $newstart) =~ /^(.* )([^ ]*\\ )$/) { ! $newtext = $2.$newtext; ! $newstart = length($1); ! } ! if ($PSH_SUPPORT) { ! $newtext = _unescape($newtext); ! } ! # figure out our proper BaseDN (may extend beyond what readline has told us) ! my @parts1 = _splitdn($newtext, -1); ! my $partToComplete = pop @parts1 || ''; my @parts2 = reverse(@parts1); my $BaseDN = join(',', @parts2, $Globals->{CWD}{VALUE}); + # now figure out which part of the BaseDN is actually being completed + my @parts3 = _splitdn($text, -1); + pop @parts3; + my $prefix = join(',', @parts3); + #$TermAttribs->{completion_append_character} = "\0"; if ($partToComplete =~ m/=/) { ! my @result = _RDNCompletion($prefix, $partToComplete, $BaseDN); ! if (scalar(@result) && $PSH_SUPPORT && length($prefix) == 0 && $text ne $newtext) { ! my ($common, @possible_entries) = @result; ! my $trimlen = length(_escape($newtext)) - length(_escape($text)); ! map {$_ = substr($_, $trimlen)} @possible_entries; ! $common = substr($common, $trimlen); ! return ($common, @possible_entries); ! } ! return @result; } else { *************** *** 868,872 **** #return Psh::OS::_escape(shift); my $text = shift; ! $text =~ s/(?<!\\)([ ])/\\$1/g; return $text; } --- 890,894 ---- #return Psh::OS::_escape(shift); my $text = shift; ! $text =~ s/(?<!\\)([ ()])/\\$1/g; return $text; } *************** *** 875,879 **** #return Psh::Parser::remove_backslash(shift); my $text = shift; ! $text =~ s/\\([ ])/$1/g; return $text; } --- 897,901 ---- #return Psh::Parser::remove_backslash(shift); my $text = shift; ! $text =~ s/\\([ ()])/$1/g; return $text; } *************** *** 911,914 **** --- 933,939 ---- } if ($prefix) { + if ($PSH_SUPPORT) { + $prefix = _escape($prefix); + } map {$_ = "${prefix},$_"} @possible_entries; $common = "${prefix},${common}"; *************** *** 925,929 **** scope => 'one', attrs => [], ! filter => "$partToComplete*" ); return undef unless defined($result); --- 950,955 ---- scope => 'one', attrs => [], ! filter => _escape_filter( $partToComplete )."*" ! ); return undef unless defined($result); *************** *** 938,942 **** } else { my @entries = $result->entries; ! my @possible_entries = map {rdn($_->dn)} @entries; @possible_entries = grep {/^$partToComplete/i} @possible_entries; return undef unless scalar(@possible_entries); --- 964,969 ---- } else { my @entries = $result->entries; ! my @possible_entries = map {my $it = rdn($_->dn); $it =~ s/\\/\\\\/g; $it} @entries; ! # the following line in known to fail if $partToComplete contains regex characters! @possible_entries = grep {/^$partToComplete/i} @possible_entries; return undef unless scalar(@possible_entries); *************** *** 946,951 **** $common = "${prefix},${common}"; } ! if ($PSH_SUPPORT && scalar(@possible_entries) == 1) { ! $possible_entries[0] = _escape($possible_entries[0]); } return $common, @possible_entries; --- 973,979 ---- $common = "${prefix},${common}"; } ! if ($PSH_SUPPORT) { ! map {$_ = _escape($_)} @possible_entries; ! $common = _escape($common); } return $common, @possible_entries; |