This file is indexed.

/usr/lib/gnu-smalltalk/vfs/ulha is in gnu-smalltalk 3.2.5-1+b3.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#! /bin/sh

#
# LHa Virtual filesystem executive v0.1
# Copyright (C) 1996, 1997 Joseph M. Hinkle
# May be distributed under the terms of the GNU Public License
# <jhinkle@rockisland.com>
#

# Code for mc_lha_fs_run() suggested by:
# Jan 97	Zdenek Kabelac <kabi@informatics.muni.cz>

# Tested with mc 3.5.18 and gawk 3.0.0 on Linux 2.0.0
# Tested with lha v1.01 and lharc v1.02
# Information and sources for other forms of lha/lzh appreciated

# Nota bene:
# There are several compression utilities which produce *.lha files.
# LHArc and LHa in exist several versions, and their listing output varies.
# Another variable is the architecture on which the compressed file was made.
# This program attempts to sort out the variables known to me, but it is likely
# to display an empty panel if it encounters a mystery. 
# In that case it will be useful to execute this file from the command line:
# ./lha list Mystery.lha
# to examine the output directly on the console.  The output string must be
# precisely in the format described in the README in this directory.
# Another helpful thing is to temporarily remove the redirection of error
# output of awk (The '2> /dev/null' instruction near the end of mcfs_list())
# The screen will get ugly if there's an error, but some useful text shows
# at the bottom of the screen.  
# Caveat emptor.
# Learn Latin.

# Define your awk
AWK=gawk

if ls -de . > /dev/null 2>&1;
then
    LS_COMMAND="ls -le"
else
    LS_COMMAND="ls -l --full-time"
fi

# Define which archiver you are using with appropriate options
LHA_LIST="lha l"
LHA_GET="lha pq"
LHA_PUT="lha aq"

# Define a directory to create a temporary file for when
# running a command to be run from the archive
TMPDIR=/tmp/mc-cmd.$$
# Temporary file within the directory
TMPCMD=$TMPDIR/run

# The 'list' command executive

mc_lha_fs_list()
{
   # Get the year of the file timestamp in case we need to replace 'hh:mm'
   YEAR=$($LS_COMMAND $1 | $AWK '{ print $10 }')
   # List the contents of the archive and sort it out    
   $LHA_LIST $1 | $AWK -v uid=$(id -nu) -v gid=$(id -ng) -v year=$YEAR '
      # Ignore the annotations, quit on the last one
      /^\ PERMSSN/ { next }
      /^-----/ { next }
      /^\ Total/ { exit 0 }
      # Strip a leading '/' if present in a filepath
      $(NF) ~ /^\// { $(NF) = substr($NF,2) }
      # Replace the year stamp if it is expressed as 'hh:mm'
      $(NF-1) ~ /\:/ { $(NF-1) = year }
      # Print the line this way if there is no permission string
      $1 ~ /^\[generic\]/ {
         # Invent a generic permission
         $1 = ($10 ~ /\/$/) ? "drwxr-xr-x":"-rwxr--r--";
         # Print it
         printf "%s   1 %-8s %-8s %-8d %3s %2d %4d %s\n",
                 $1,     uid, gid,  $2, $4, $5, $6, $7;
         # Get the next line of the list
         next;
      }
      # Do it this way for a defined permission
      $1 !~ /^\[generic\]/ {
         # If the permissions and UID run together
         if ($1 ~ /\//) {
            $8 = $7;
            $7 = $6;
            $6 = $5;
            $5 = $4;
            $3 = $2;
            $2 = substr($1,10);
            $1 = substr($1,1,9);
         }
         # If the permission string is missing a type
         if (length($1) == 9) {
            if ($NF ~ /\/$/)
               $1 = ("d" $1);
            else
               $1 = ("-" $1);
         }
         # UID:GID might not be the same as on your system so print numbers
         # Well, that is the intent.  At the moment mc is translating them.
         split($2, id, "/");
         printf "%s   1 %-8d %-8d %-8d %3s %2d %4d %s\n",
                 $1,     id[1], id[2],  $3, $5, $6, $7, $8;
         # Get the next line of the list
         next;
      }

   ' 2> /dev/null
}

# The 'copyout' command executive to copy displayed files to a destination

mc_lha_fs_copyout()
{
   $LHA_GET $1 $2 > $3  2> /dev/null
}

# The 'copyin' command executive to add something to the archive

mc_lha_fs_copyin ()
{
   NAME2=`basename $2`; DIR2=${2%$NAME2}
   NAME3=`basename $3`; DIR3=${3%$NAME3}

   cd ${DIR3}

   ONE2=${2%%/*}
   [ -n ${ONE2} ] || exit
   [ -e ${ONE2} ] && exit

   [ -e ${DIR2} ] || mkdir -p ${DIR2}
   ln $3 $2       || exit

   $LHA_PUT $1 $2  2> /dev/null
   rm -r ${ONE2}
}

# The 'run' command executive to run a command from within an archive

mc_lha_fs_run()
{
   trap "rm $TMPCMD; rmdir $TMPDIR; exit 0" 1 2 3 4 15
# FIXME: Try harder to generate a unique directory if this fails
   mkdir -m 0700 $TMPDIR || exit 1
   $LHA_GET $1 $2 > $TMPCMD  2> /dev/null
   chmod a+x $TMPCMD  2> /dev/null
   $TMPCMD 2> /dev/null
   rm $TMPCMD
   rmdir $TMPDIR
}


# The main routine
umask 077

case "$1" in
   list) mc_lha_fs_list $2; exit $?;;
   copyout) mc_lha_fs_copyout $2 $3 $4; exit $?;;
   copyin)  mc_lha_fs_copyin  $2 $3 $4; exit $?;;
   run)     mc_lha_fs_run     $2 $3 $4; exit $?;;
esac
exit 1