mirror of
https://github.com/git/git.git
synced 2026-01-22 23:07:18 +09:00
The main objection against sanitizing the sideband that was raised during the review of the sideband sanitizing patches, first on the git-security mailing list, then on the public mailing list, was that there are some setups where server-side `pre-receive` hooks want to error out, giving colorful messages to the users on the client side (if they are not redirecting the output into a file, that is). To avoid breaking such setups, the default chosen by the sideband sanitizing patches is to pass through ANSI color sequences. Still, there might be some use case out there where that is not enough. Therefore the `sideband.allowControlCharacters` config setting allows for configuring levels of sanitizing. As Junio Hamano pointed out, to keep users safe by default, we need to be able to scope this to some servers because while a user may trust their company's Git server, the same might not apply to other Git servers. To allow for this, let's imitate the way `http.<url>.*` offers to scope config settings to certain URLs, by letting users override the `sideband.allowControlCharacters` setting via `sideband.<url>.allowControlCharacters`. Suggested-by: Junio Hamano <gitster@pobox.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
48 lines
1.6 KiB
C
48 lines
1.6 KiB
C
#ifndef SIDEBAND_H
|
|
#define SIDEBAND_H
|
|
|
|
enum sideband_type {
|
|
SIDEBAND_PROTOCOL_ERROR = -2,
|
|
SIDEBAND_REMOTE_ERROR = -1,
|
|
SIDEBAND_FLUSH = 0,
|
|
SIDEBAND_PRIMARY = 1
|
|
};
|
|
|
|
/*
|
|
* Inspects a multiplexed packet read from the remote. If this packet is a
|
|
* progress packet and thus should not be processed by the caller, returns 0.
|
|
* Otherwise, returns 1, releases scratch, and sets sideband_type.
|
|
*
|
|
* If this packet is SIDEBAND_PROTOCOL_ERROR, SIDEBAND_REMOTE_ERROR, or a
|
|
* progress packet, also prints a message to stderr.
|
|
*
|
|
* scratch must be a struct strbuf allocated by the caller. It is used to store
|
|
* progress messages split across multiple packets.
|
|
*
|
|
* The "status" parameter is a pkt-line response as returned by
|
|
* packet_read_with_status() (e.g., PACKET_READ_NORMAL).
|
|
*/
|
|
int demultiplex_sideband(const char *me, int status,
|
|
char *buf, int len,
|
|
int die_on_error,
|
|
struct strbuf *scratch,
|
|
enum sideband_type *sideband_type);
|
|
|
|
void send_sideband(int fd, int band, const char *data, ssize_t sz, int packet_max);
|
|
|
|
/*
|
|
* Apply sideband configuration for the given URL. This should be called
|
|
* when a transport is created to allow URL-specific configuration of
|
|
* sideband behavior (e.g., sideband.<url>.allowControlCharacters).
|
|
*/
|
|
void sideband_apply_url_config(const char *url);
|
|
|
|
/*
|
|
* Parse and set the sideband allow control characters configuration.
|
|
* The var parameter should be the key name (without section prefix).
|
|
* Returns 0 if the variable was recognized and handled, non-zero otherwise.
|
|
*/
|
|
int sideband_allow_control_characters_config(const char *var, const char *value);
|
|
|
|
#endif
|