OpenPKG CVS Repository
http://cvs.openpkg.org/
____________________________________________________________________________
Server: cvs.openpkg.org Name: Ralf S. Engelschall
Root: /e/openpkg/cvs Email: [EMAIL PROTECTED]
Module: openpkg-re Date: 09-Jul-2003 16:05:17
Branch: HEAD Handle: 2003070915051600
Modified files:
openpkg-re rpmlint.pl
Log:
add one more experimental check
Summary:
Revision Changes Path
1.7 +48 -0 openpkg-re/rpmlint.pl
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: openpkg-re/rpmlint.pl
============================================================================
$ cvs diff -u -r1.6 -r1.7 rpmlint.pl
--- openpkg-re/rpmlint.pl 8 Jul 2003 12:58:07 -0000 1.6
+++ openpkg-re/rpmlint.pl 9 Jul 2003 14:05:16 -0000 1.7
@@ -313,6 +313,50 @@
}
}
}
+
+ # check for symbolic link targets (absolute, dangling)
+ foreach my $path (keys(%{$info->{ls}})) {
+ my $symlink = $info->{ls}->{$path}->{'symlink'};
+ if ($symlink ne '') {
+ # check 1: absolute target
+ if ($symlink =~ m|^/.*|) {
+ &lint_warning($rpm, "symbolic link \"$path\" points to absolute
path \"$symlink\" (expected relative path)");
+ }
+ # check 2: dangling target
+ my $resolved = &resolve($info, $path);
+ sub resolve {
+ my ($info, $path) = @_;
+ if (not defined($info->{ls}->{$path})) {
+ return $path;
+ }
+ my $symlink = $info->{ls}->{$path}->{'symlink'};
+ if ($symlink eq '') {
+ return $path;
+ }
+ else {
+ my $resolved;
+ if ($symlink =~ m|^/|) {
+ $resolved = $symlink;
+ }
+ else {
+ $resolved = $path;
+ $resolved =~ s|/[^/]+$||s;
+ $resolved .= "/" . $symlink;
+ $resolved =~ s|/{2,}|/|sg;
+ $resolved =~ s|/\.(?=/)||sg;
+ $resolved =~ s|/\.$||sg;
+ 1 while ($resolved =~ s|/[^/]+/\.\./|/|s);
+ $resolved =~ s|/[^/]+/\.\.$||s;
+ $resolved =~ s|(.)/$|$1|s;
+ }
+ return &resolve($info, $resolved);
+ }
+ }
+ if (not defined($info->{ls}->{$resolved})) {
+ &lint_error($rpm, "symbolic link \"$path\" points to not existing
target path \"$resolved\" (expected existing target path)");
+ }
+ }
+ }
}
## _________________________________________________________________
@@ -341,5 +385,9 @@
# stripped (file)
# syslibs (ldd)
+ # hard-coded paths pointing outside instance
+ # sanity check for shebang-lines
+ # contained temporary path
+ # bad-files: .po
}
@@ .
______________________________________________________________________
The OpenPKG Project www.openpkg.org
CVS Repository Commit List [EMAIL PROTECTED]