Diff Option
--diff
SSD Friendlier
Same as default but only copies files that are different, instead of every thing even though identical.
Verbose Option
--verbose
Display constructed command.
In combination with the --diff option, display the array of different and missing files.
Dry Run Option
--dry-run
Run without syncing files.
Fixes
Files to copy variable state is used to determine whether or not to run the command. Tar options being passed in the files to copy variable causes the command to always run. Even if there are no files to be copied. Separate out tar options from files to copy variable so command only runs if there are files to be copied.
Accommodate providing tar options such as '-C ./src' with the --minimal option.
Resolve function redefinition that prevents running gitsync again in same dev shell session (command recall) (function_exists).
At present, when doing a System Update, there is a message box that says:
"Please wait while the installation of completes.
This may take several minutes."
Between "of" and "completes" is the package name, which is blank in the case of a System Update.
This should fix that issue by defining $pkg_wait_txt appropriately for the $firmwareupdate case.
Note: It was also easy to refactor out a couple of special "if firmwareupdate" tests, as the code "fell out" nicely by defining the other *_txt variables to suitable strings for the $firmwareupdate case.
dpinger stopps with an error when the socketname exceeds over
(around) 100 characters. The dpinger will not start and not deliver
monitoring results to the WebUI.
These long socket names can get created when using link-local addresses
and long gateway names / interface scopes.
See Ticket 6505
Currently underscores are used to seperate gwifip, monitorip, etc, but
underscors are also used in vlan subinterfaces like em0_vlan10 and
therefore can't be used because the interface scope is appended to IPv6
link-local addresses.
The existing regex here is wrong, it matches 0 or more of the hex digits but then there can be other rubbish in the string, in fact anything at all! It matches "az", "z", "qwerty" and so on. So the "return false" inside this "if" never happens.
In most cases the later code catches problems, because it converts the string from hex to decimal (and things like "z" end up as decimal 0), then it does some back-conversion of the answer to hex and realizes something is different and so does not count the entry as one of the needed 8 valid segments of the IPv6 address.
This goes wrong if the user supplies a string with 8 valid IPv6 hex pieces and 1 or more extra invalid ones anywhere in the list. In that case the code finds 8 good chunks and thinks that all is well.
Try using the pfSense is_ipaddrv6() with strings like:
$ipaddr = "1:2:3:4:5:6:7:z:a";
$ret = is_ipaddrv6($ipaddr);
var_dump($ret);
That returns true - which is not good!
You can put the invalid items anywhere you like, as long as you have 8 valid items, such as:
"1:2:3:xy:4:5:6:7:8"
"gh:1:2:3:xy:4:5:6:7:8"
"1:2:3:xy:4:5:6:7:8:qw"
This change makes this initial validity check on the characters actually work, so it avoids the later code having to deal with that at all.
For safety, use include_once() when including various "side" files.
There are a couple of instances of include("guiconfig,inc") that I
changes to use require_once() to be consistent with everywhere else.
The remaining cases of include() are just (hundreds of) head.inc and
footer.inc - those are only at the start/end of the ordinary top-level
interactive PHP files. There is no nested interaction of those to think
about, so that should be fine.