-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathCHANGELOG
193 lines (183 loc) · 12.6 KB
/
CHANGELOG
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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
3.3 (20231013)
- Makefile - Place env CFLAGS after explicit flags so they can override the explicit flags
- configure - Fix --prefix= buglet (only worked if it was the first argument)
- Makefile - Include env CPPFLAGS (just in case)
- configure - Add --macports-prefix for macports with non-default prefix
- configure - Add missing --etcdir and fix --destdir and --mandir
- tests - Adapt to identify new adduser/addgroup help message
- Add body pattern modifiers: .body .ibody .rebody .reibody
- .reuse/dep5 - Make more accurate (strlcpy/strlcat not exactly BSD-3-Clause)
- pcre2 - Stop using the PCRE2_NEVER_BACKSLASH_C option
- configure - Remove 'when present' from pcre2 message for consistency
- configure/tests - Replace `which` with `command -v` (more consistent)
- tests - Make RAWHIDE_TEST_MULTIBYTE_USER_GROUP message shorter
- tests - On FreeBSD chflags uappnd fails on zfs so test with sappnd
- Add -j option (same as -L "%j\n")
- configure - Add --enable-ubsan --enable-asan (undefined behaviour/address sanitizers)
- doc - Show explicit -f- (as distinct from: -f fname) in --help output and SYNOPSIS
- doc - Add rhs/rht/rhz etc. shell functions (rh/-r/-l/-v sorted (via jq) by path/mtime/size)
- doc - Make rawhide.conf(5) manual entry fit in 80 columns again
- doc - Update grammar to include recently added pattern modifiers
- Fix -L %j access_control_list_verbose on FreeBSD/Solaris (wasn't verbose)
- Revoke any setuid/setgid privileges at the start
3.2 (20230609)
- Add support for attr (flags) on FreeBSD, OpenBSD, NetBSD, and macOS
- Add ./configure --default (to avoid needing the details in Makefile)
- Change --help pattern modifiers layout to improve readability
- Remove explicit PCRE2 JIT compilation (had introduced uninitialized reads)
- Add file type pattern modifiers: .what .iwhat .rewhat .reiwhat
- Add MIME type pattern modifiers: .mime .imime .remime .reimime
- Add -L %w (file type description) %W (MIME type)
- Add to -L %j (JSON) output fields: filetype mimetype
3.1 (20221011)
- Add built-in symbols for Linux ext2-style file attributes: attr proj gen
- Add real /etc/rawhide.conf.d/attributes (for Linux with libe2p installed)
- Add reference file fields: attr proj gen attribute project generation
- Add -L %e %J %I conversions (Linux ext2-style file attributes project generation)
- Add to -L %j (JSON) output, Linux ext2-style file attributes project generation
- Add replacing "/".i "/".re "/".rei with implicit "/".ipath "/".repath "/".reipath
- Add identifying pattern modifiers by unique prefixes (e.g., "/".p for "/".path)
- Add "make default" target (extracted from make dist, to undo ./configure)
- Fix -l column width buglet when user/group names contain multi-byte characters
- Fix max path length buglet when crossing filesystem boundaries during traversal
- Allow multiple -f options (but not multiple -f- because stdin can't be read twice)
- Allow -f option argument to be a directory or to have a corresponding .d directory
- Cache test-related getenv values that were being checked many times in normal use
- Add a few more tests to maximize coverage within reason (97.04% on my Debian dev VM)
- Add explicit PCRE2 JIT compilation (not noticeably faster - maybe default behaviour)
3.0 (20220330)
- Update (after 32 years!) to compile and work again (ISO/IEC C, POSIX)
- Remove internal getopt/glob_match, replacing with standard getopt/fnmatch
- Remove MANIFEST (empty)
- Remove META (only relevant for the original comp.source.unix release)
- Add LICENSE COPYING CHANGELOG CODE_OF_CONDUCT.md
- Change -h option so it terminates (was documented behaviour but still wrong)
- Fix insecure multiple potential buffer overruns
- Fix insecure -x shell command injection
- Improve syntax error messages (more informative)
- Increase static code/data/stack space by three orders of magnitude
- Increase identifier length limit to 200
- Add @groupname and @@ expression notation
- Add support for underscore in function/parameter names
- Add support for dot, dash, and underscore in user/group names
- Add support for ~/.rhrc.d/*, /etc/rawhide.conf, and /etc/rawhide.conf.d/*
- Add -N and -n options to suppress system-wide config and user-specific config
- Add // and # single-line comment styles
- Add built-in stat field symbols: blksize blocks
- Change built-in symbols: hours/days/weeks to hour/day/week
- Add built-in number symbols: second minute month year
- Change to default "-e 1" expression to match everything (rather than stdin)
- Add "-f -" convention to read from stdin (now that it's no longer the default)
- Add error reporting during directory traversal (stderr and exit status)
- Interpret two-digit years as being in the current century
- Add built-in number symbols: IRWXU IRUSR IWUSR IXUSR
- Add built-in number symbols: IRWXG IRGRP IWGRP IXGRP
- Add built-in number symbols: IRWXO IROTH IWOTH IXOTH
- Add /etc/rawhide.conf "standard" library (nice names for things, handy functions)
- Remove example rhrc (subsumed by /etc/rawhide.conf)
- Change built-in symbol NOW to now (not backwards compatible!) NOW { now }
- Make "return" and ";" optional in functions (always redundant, more compact)
- Make rh exit with failure status if any -x command exits with failure status
- Add many ruthless tests
- Add -V (version) option
- Add --help and --version options
- Add -0 option (nul-separated output) for use with xargs -0
- Make "-e" optional for lean flexible cmdline (expr can appear among dir args)
- Fix built-in prune over-pruning (wasn't reset until after siblings done)
- Add built-in symbol: exit (terminate immediately - usage: 'expr ? exit : 0')
- Make "return" a keyword token rather than a built-in symbol
- Fix "glob" string tokeniser to handle "\""
- Fix inaccurate [yyyy/mm/dd] to time_t conversion (use standard mktime)
- Add support for datetimes: [yyyy/mm/dd hh:mm:ss] (ss and mm:ss are optional)
- Make "*" match leading dot (POSIX/GNU find compatible, but not Solaris find)
- Test on Debian, Ubuntu, Fedora, FreeBSD, OpenBSD, NetBSD, macOS, Solaris, Cygwin
- Move some functions from rh.c/rhparse.c to more appropriate modules
- Fix crash on attempt to divide by zero (and modulo)
- Add support for doors (IFDOOR) on Solaris
- Add hexadecimal number literals (0xff)
- Add options -m # (minimum depth) and -M # (maximum depth)
- Fix/Add short-circuit semantics for || and && operators (for "expr && exit")
- Add built-in symbols: nouser nogroup
- Minimize the number of race conditions during traversal (fstatat/openat/fdopendir)
- Add built-in symbols: readable writable executable (faccessat/access)
- Add -X 'cmd' option (like -x with safe cd for minimal race conditions)
- Automatically remove cwd and other non-absolute dirs from $PATH when -X is used
- Add configure script to adjust binary/config/manpage installation locations
- Gzip manual entries when installing on systems that prefer it
- Add -? 'spec' option (debug: cmdline parser traversal exec all extra)
- Add "/path".mtime syntax for comparison against reference files
- Add -D option (depth-first traversal)
- Add -U option (unlink)
- Add heuristic to better identify expr/path when no -e and path doesn't exist
- Make -l (without -v) more like ls -l (add nlink username groupname mtime)
- Add output column options: -d -i -B -s -g -o -a -u -c (mostly ls-compatible)
- Make -v option include all the output columns
- Add other output format options: -H -I -T -#
- Add name output format options: -Q -E -b -q -p -t -F (mostly ls-compatible)
- Change -H and -I to round up (ls-compatible output)
- Add -HH and -II to round half up (more accurate)
- Remove rh.man (troff) in favour of POD format (for html and troff output)
- Re-document everything: README.md rh.1.pod rawhide.conf.5.pod
- Add built-in symbol: today (last midnight local time)
- Add "pattern".modifier syntax for glob modifiers: .i .path .ipath .link .ilink
- Add -1 option (single filesystem - don't cross filesystem boundaries)
- Add built-ins for symlink targets: texists tdev tino tmode tnlink tuid tgid ...
- Add -y option (follow symlinks on the cmdline and in reference files)
- Add -Y option (follow symlinks encountered while searching as well)
- Add $RAWHIDE_REPORT_BROKEN_SYMLINKS to treat broken symlinks as an error
- Add -S option (space column: blocks * 512)
- Add -L 'format' option (output details in user-supplied printf-like format)
- Add defense against terminal escape injection for stdout/stderr (but not debug)
- Add pcre2 pattern modifiers: .re .repath .relink .rei .reipath .reilink
- Add access control list (ACL) pattern modifiers: .acl .iacl .reacl .reiacl
- Add -L %z format (access control list)
- Add extended attribute (EA) pattern modifiers: .ea .iea .reea .reiea
- Add -L %x format (extended attributes)
- Add -L %Z format (selinux context - via ea (not via libselinux))
- Add "cmd".sh "pattern" modifier syntax to execute shell commands via system()
- Add empty string "".mtime syntax to concisely refer to the last reference file path
- Change size of (readable) directories to num of entries (excluding . and ..) (so empty() works)
- Add decimal token size/scale units suffixes: K M G T P E k m g t p e
- Replace "long" with "long long" everywhere (sorry 1990s!) to get 64-bit numbers on 32-bit systems
- Add memory/file descriptor checking (valgrind): make test with VALGRIND=1 or vg=1 (30s -> 40m)
- Change size of readable directories for -l and -L %s to the number of entries (excluding . and ..)
- Add ACL/EA indicator to -l type/perm column: acl='+' ea='@' both='*' neither=' '
- Change prune to return 1 not 0 (but make expr 0 overall) so (bad && prune || good) is now possible
- "Fix" %S (for -x/-X/"cmd".sh) so it's "/" for / (was empty)
- Add configure --enable-ndebug --disable-ndebug (stripped binary 10% (12K) smaller with NDEBUG)
- Add RAWHIDE_COLUMN_WIDTH_* env vars for people who don't like columns that widen on demand
- Add configure --static=SIZE ("large" is default, "small" is 10%, "tiny" is 1%, all fine choices)
- Add -L %X format (ACL/EA indicator like in rh -l)
- Add built-in field symbols: major minor rmajor rminor tmajor tminor trmajor trminor
- Add reference file fields: .major .minor .rmajor .rminor
- Add -L %B (blksize) %E (rdev) %r (rdev minor) %R (rdev major) %v (dev minor) %V (dev major)
- Add configure --disable-major (just for preparing the source distribution)
- Add $RAWHIDE_CONFIG and $RAWHIDE_RC (not just for testing, and/but not for root)
- Add configure --enable-mangz --disable-mangz (just so distribution can default to non-gzipped)
- Add to ACL/EA indicator '.' for selinux (if nothing more interesting) (-l and -L %X)
- Add LICENSES/* and .reuse/dep5 (REUSE 3.0 compliant)
- Add built-in symbol: trim (like prune but doesn't prevent the current candidate from matching)
- Change -r to mean -m1 -M1 (was originally just -M1, this is much better)
- Fix -U combined with -y/-Y and symlinks to directories (was attempting rmdir for symlink)
- Add $RAWHIDE_DONT_REPORT_CYCLES to suppress reporting filesystem cycles
- Add gcov test coverage measurement (96.20% overall - remainder manually scrutinized)
- Add configure --enable-gcov --disable-gcov
- Add gcov_summary
- Fix defense against terminal escape injection for stderr when stdout piped to a non-terminal
- Treat "" that contains / as implicit "".path (so that "/" just works)
- Add support for non-ASCII characters (UTF-8/ISO-8859-*) in function/parameter/user/group names
- Don't \ quote non-ASCII characters (UTF-8/ISO-8859-*) in shell command %s %S interpolation
- Add -L %j format (JSON)
- Fix handling of SIGINT/SIGQUIT in -x/-X/"cmd".sh sub-processes (didn't terminate rh as well)
- Add configure --disable-cc-other (just for preparing the source distribution)
- Add make help
- Add make gcov
- Add samples/{README,.rh.sh,brevity.rh,rawhide.conf-tiny}
- Add /etc/rawhide.conf.d/attributes to reserve some identifiers for the next version
2.0 (19900218)
- Initial commit (from comp.sources.unix by Ken Stauffer)
CREDITS
Ken Stauffer - Original author.
Guy Harris - Corrected many portability problems.
David MacKenzie - Manual revisions. Added getopt and glob matching.
Norm Hutchinson - Fixed ungetit().