]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
DOC: config: fix alphabetical ordering of converter keywords
authorWilly Tarreau <w@1wt.eu>
Thu, 30 Nov 2023 10:55:22 +0000 (11:55 +0100)
committerWilly Tarreau <w@1wt.eu>
Thu, 30 Nov 2023 15:28:56 +0000 (16:28 +0100)
- rfc7239_* were misplaced and incorrectly ordered
- table_gpt was placed before some table_gpc*
- capture-req/res were misplaced
- htonl was misplaced
- upper/url_* were misplaced
- x509_v_err_str was misplaced

Let's fix these since poor ordering complicates their finding.

doc/configuration.txt

index 4b627947bd32c5c67471353d34fd0c0db022d5bc..cc85b5694ccab2c742dc56e2d0564617d95bcc89 100644 (file)
@@ -17400,76 +17400,6 @@ The currently available list of transformation keywords include :
       http-request set-header X-51D-DeviceTypeMobileTablet \
         %[req.fhdr(User-Agent),51d.single(DeviceType,IsMobile,IsTablet)]
 
-rfc7239_is_valid
-  Returns true if input header is RFC 7239 compliant header value and false
-  otherwise.
-
-  Example:
-    acl valid req.hdr(forwarded),rfc7239_is_valid
-    #input: "for=127.0.0.1;proto=http"
-    #  output: TRUE
-    #input: "proto=custom"
-    #  output: FALSE
-
-rfc7239_field(<field>)
-  Extracts a single field/parameter from RFC 7239 compliant header value input.
-
-  Supported fields are:
-    - proto: either 'http' or 'https'
-    - host: http compliant host
-    - for: RFC7239 node
-    - by: RFC7239 node
-
-  More info here:
-    https://www.rfc-editor.org/rfc/rfc7239.html#section-6
-
-  Example:
-    # extract host field from forwarded header and store it in req.fhost var
-    http-request set-var(req.fhost) req.hdr(forwarded),rfc7239_field(host)
-    #input: "proto=https;host=\"haproxy.org:80\""
-    #  output: "haproxy.org:80"
-
-    # extract for field from forwarded header and store it in req.ffor var
-    http-request set-var(req.ffor) req.hdr(forwarded),rfc7239_field(for)
-    #input: "proto=https;host=\"haproxy.org:80\";for=\"127.0.0.1:9999\""
-    #  output: "127.0.0.1:9999"
-
-rfc7239_n2nn
-  Converts RFC7239 node (provided by 'for' or 'by' 7239 header fields)
-  into its corresponding nodename final form:
-    - ipv4 address
-    - ipv6 address
-    - 'unknown'
-    - '_obfs' identifier
-
-  Example:
-    # extract 'for' field from forwarded header, extract nodename from
-    # resulting node identifier and store the result in req.fnn
-    http-request set-var(req.fnn) req.hdr(forwarded),rfc7239_field(for),rfc7239_n2nn
-    #input: "127.0.0.1:9999"
-    #  output: 127.0.0.1 (ipv4)
-    #input: "[ab:cd:ff:ff:ff:ff:ff:ff]:9998"
-    #  output: ab:cd:ff:ff:ff:ff:ff:ff (ipv6)
-    #input: "_name:_port"
-    #  output: "_name" (string)
-
-rfc7239_n2np
-  Converts RFC7239 node (provided by 'for' or 'by' 7239 header fields)
-  into its corresponding nodeport final form:
-    - unsigned integer
-    - '_obfs' identifier
-
-  Example:
-    # extract 'by' field from forwarded header, extract node port from
-    # resulting node identifier and store the result in req.fnp
-    http-request set-var(req.fnp) req.hdr(forwarded),rfc7239_field(by),rfc7239_n2np
-    #input: "127.0.0.1:9999"
-    #  output: 9999 (integer)
-    #input: "[ab:cd:ff:ff:ff:ff:ff:ff]:9998"
-    #  output: 9998 (integer)
-    #input: "_name:_port"
-    #  output: "_port" (string)
-
 add(<value>)
   Adds <value> to the input value of type signed integer, and returns the
   result as a signed integer. <value> can be a numeric value or a variable
@@ -17602,6 +17532,22 @@ bytes(<offset>[,<length>])
       http-response set-var(txn.var_length) int(3)
       http-response set-header bytes_var1_var3    "%[var(txn.input),bytes(txn.var_start,txn.var_length)]"  # outputs "123"
 
+capture-req(<id>)
+  Capture the string entry in the request slot <id> and returns the entry as
+  is. If the slot doesn't exist, the capture fails silently.
+
+  See also: "declare capture", "http-request capture",
+            "http-response capture", "capture.req.hdr" and
+            "capture.res.hdr" (sample fetches).
+
+capture-res(<id>)
+  Capture the string entry in the response slot <id> and returns the entry as
+  is. If the slot doesn't exist, the capture fails silently.
+
+  See also: "declare capture", "http-request capture",
+            "http-response capture", "capture.req.hdr" and
+            "capture.res.hdr" (sample fetches).
+
 concat([<start>],[<var>],[<end>])
   Concatenates up to 3 fields after the current sample which is then turned to
   a string. The first one, <start>, is a constant string, that will be appended
@@ -17796,12 +17742,6 @@ hex2i
   Converts a hex string containing two hex digits per input byte to an
   integer. If the input value cannot be converted, then zero is returned.
 
-htonl
-  Converts the input integer value to its 32-bit binary representation in the
-  network byte order. Because sample fetches own signed 64-bit integer, when
-  this converter is used, the input integer value is first casted to an
-  unsigned 32-bit integer.
-
 hmac(<algorithm>,<key>)
   Converts a binary input sample to a message authentication code with the given
   key. The result is a binary sample. The <algorithm> must be one of the
@@ -17821,6 +17761,12 @@ host_only
 
   See also: "port_only" converter which will return the port.
 
+htonl
+  Converts the input integer value to its 32-bit binary representation in the
+  network byte order. Because sample fetches own signed 64-bit integer, when
+  this converter is used, the input integer value is first casted to an
+  unsigned 32-bit integer.
+
 http_date([<offset],[<unit>])
   Converts an integer supposed to contain a date since epoch to a string
   representing this date in a format suitable for use in HTTP header fields. If
@@ -18406,21 +18352,75 @@ regsub(<regex>,<subst>[,<flags>])
      http-request redirect location %[url,'regsub("(foo|bar)([0-9]+)?","\2\1",i)']
      http-request redirect location %[url,regsub(\"(foo|bar)([0-9]+)?\",\"\2\1\",i)]
 
-capture-req(<id>)
-  Capture the string entry in the request slot <id> and returns the entry as
-  is. If the slot doesn't exist, the capture fails silently.
+rfc7239_field(<field>)
+  Extracts a single field/parameter from RFC 7239 compliant header value input.
 
-  See also: "declare capture", "http-request capture",
-            "http-response capture", "capture.req.hdr" and
-            "capture.res.hdr" (sample fetches).
+  Supported fields are:
+    - proto: either 'http' or 'https'
+    - host: http compliant host
+    - for: RFC7239 node
+    - by: RFC7239 node
 
-capture-res(<id>)
-  Capture the string entry in the response slot <id> and returns the entry as
-  is. If the slot doesn't exist, the capture fails silently.
+  More info here:
+    https://www.rfc-editor.org/rfc/rfc7239.html#section-6
 
-  See also: "declare capture", "http-request capture",
-            "http-response capture", "capture.req.hdr" and
-            "capture.res.hdr" (sample fetches).
+  Example:
+    # extract host field from forwarded header and store it in req.fhost var
+    http-request set-var(req.fhost) req.hdr(forwarded),rfc7239_field(host)
+    #input: "proto=https;host=\"haproxy.org:80\""
+    #  output: "haproxy.org:80"
+
+    # extract for field from forwarded header and store it in req.ffor var
+    http-request set-var(req.ffor) req.hdr(forwarded),rfc7239_field(for)
+    #input: "proto=https;host=\"haproxy.org:80\";for=\"127.0.0.1:9999\""
+    #  output: "127.0.0.1:9999"
+
+rfc7239_is_valid
+  Returns true if input header is RFC 7239 compliant header value and false
+  otherwise.
+
+  Example:
+    acl valid req.hdr(forwarded),rfc7239_is_valid
+    #input: "for=127.0.0.1;proto=http"
+    #  output: TRUE
+    #input: "proto=custom"
+    #  output: FALSE
+
+rfc7239_n2nn
+  Converts RFC7239 node (provided by 'for' or 'by' 7239 header fields)
+  into its corresponding nodename final form:
+    - ipv4 address
+    - ipv6 address
+    - 'unknown'
+    - '_obfs' identifier
+
+  Example:
+    # extract 'for' field from forwarded header, extract nodename from
+    # resulting node identifier and store the result in req.fnn
+    http-request set-var(req.fnn) req.hdr(forwarded),rfc7239_field(for),rfc7239_n2nn
+    #input: "127.0.0.1:9999"
+    #  output: 127.0.0.1 (ipv4)
+    #input: "[ab:cd:ff:ff:ff:ff:ff:ff]:9998"
+    #  output: ab:cd:ff:ff:ff:ff:ff:ff (ipv6)
+    #input: "_name:_port"
+    #  output: "_name" (string)
+
+rfc7239_n2np
+  Converts RFC7239 node (provided by 'for' or 'by' 7239 header fields)
+  into its corresponding nodeport final form:
+    - unsigned integer
+    - '_obfs' identifier
+
+  Example:
+    # extract 'by' field from forwarded header, extract node port from
+    # resulting node identifier and store the result in req.fnp
+    http-request set-var(req.fnp) req.hdr(forwarded),rfc7239_field(by),rfc7239_n2np
+    #input: "127.0.0.1:9999"
+    #  output: 9999 (integer)
+    #input: "[ab:cd:ff:ff:ff:ff:ff:ff]:9998"
+    #  output: 9998 (integer)
+    #input: "_name:_port"
+    #  output: "_port" (string)
 
 rtrim(<chars>)
   Skips any characters from <chars> from the end of the string representation
@@ -18593,24 +18593,6 @@ table_expire(<table>[,<default_value>])
   input sample in the designated table.
   See also the table_idle sample fetch keyword.
 
-table_gpt(<idx>,<table>)
-  Uses the string representation of the input sample to perform a lookup in
-  the specified table. If the key is not found in the table, boolean value zero
-  is returned. Otherwise the converter returns the current value of the general
-  purpose tag at the index <idx> of the array associated to the input sample
-  in the designated <table>. <idx> is an integer between 0 and 99.
-  If there is no GPT stored at this index, it also returns the boolean value 0.
-  This applies only to the 'gpt' array data_type (and not on the legacy 'gpt0'
-  data-type).
-  See also the sc_get_gpt sample fetch keyword.
-
-table_gpt0(<table>)
-  Uses the string representation of the input sample to perform a look up in
-  the specified table. If the key is not found in the table, boolean value zero
-  is returned. Otherwise the converter returns the current value of the first
-  general purpose tag associated with the input sample in the designated table.
-  See also the sc_get_gpt0 sample fetch keyword.
-
 table_gpc(<idx>,<table>)
   Uses the string representation of the input sample to perform a lookup in
   the specified table. If the key is not found in the table, integer value zero
@@ -18623,19 +18605,6 @@ table_gpc(<idx>,<table>)
   'gpc0' nor 'gpc1' data_types).
   See also the sc_get_gpc sample fetch keyword.
 
-table_gpc_rate(<idx>,<table>)
-  Uses the string representation of the input sample to perform a lookup in
-  the specified table. If the key is not found in the table, integer value zero
-  is returned. Otherwise the converter returns the frequency which the Global
-  Purpose Counter at index <idx> of the array (associated to the input sample
-  in the designated stick-table <table>) was incremented over the
-  configured period. <idx> is an integer between 0 and 99.
-  If there is no gpc_rate stored at this index, it also returns the boolean
-  value 0.
-  This applies only to the 'gpc_rate' array data_type (and not to the
-  legacy 'gpc0_rate' nor 'gpc1_rate' data_types).
-  See also the sc_gpc_rate sample fetch keyword.
-
 table_gpc0(<table>)
   Uses the string representation of the input sample to perform a look up in
   the specified table. If the key is not found in the table, integer value zero
@@ -18666,6 +18635,37 @@ table_gpc1_rate(<table>)
   with the input sample in the designated table. See also the sc_get_gpc1_rate
   sample fetch keyword.
 
+table_gpc_rate(<idx>,<table>)
+  Uses the string representation of the input sample to perform a lookup in
+  the specified table. If the key is not found in the table, integer value zero
+  is returned. Otherwise the converter returns the frequency which the Global
+  Purpose Counter at index <idx> of the array (associated to the input sample
+  in the designated stick-table <table>) was incremented over the
+  configured period. <idx> is an integer between 0 and 99.
+  If there is no gpc_rate stored at this index, it also returns the boolean
+  value 0.
+  This applies only to the 'gpc_rate' array data_type (and not to the
+  legacy 'gpc0_rate' nor 'gpc1_rate' data_types).
+  See also the sc_gpc_rate sample fetch keyword.
+
+table_gpt(<idx>,<table>)
+  Uses the string representation of the input sample to perform a lookup in
+  the specified table. If the key is not found in the table, boolean value zero
+  is returned. Otherwise the converter returns the current value of the general
+  purpose tag at the index <idx> of the array associated to the input sample
+  in the designated <table>. <idx> is an integer between 0 and 99.
+  If there is no GPT stored at this index, it also returns the boolean value 0.
+  This applies only to the 'gpt' array data_type (and not on the legacy 'gpt0'
+  data-type).
+  See also the sc_get_gpt sample fetch keyword.
+
+table_gpt0(<table>)
+  Uses the string representation of the input sample to perform a look up in
+  the specified table. If the key is not found in the table, boolean value zero
+  is returned. Otherwise the converter returns the current value of the first
+  general purpose tag associated with the input sample in the designated table.
+  See also the sc_get_gpt0 sample fetch keyword.
+
 table_http_err_cnt(<table>)
   Uses the string representation of the input sample to perform a look up in
   the specified table. If the key is not found in the table, integer value zero
@@ -18788,25 +18788,6 @@ ub64dec
 ub64enc
   This converter is the base64url variant of base64 converter.
 
-upper
-  Convert a string sample to upper case. This can only be placed after a string
-  sample fetch function or after a transformation keyword returning a string
-  type. The result is of type string.
-
-url_dec([<in_form>])
-  Takes an url-encoded string provided as input and returns the decoded version
-  as output. The input and the output are of type string. If the <in_form>
-  argument is set to a non-zero integer value, the input string is assumed to
-  be part of a form or query string and the '+' character will be turned into a
-  space (' '). Otherwise this will only happen after a question mark indicating
-  a query string ('?').
-
-url_enc([<enc_type>])
-  Takes a string provided as input and returns the encoded version as output.
-  The input and the output are of type string. By default the type of encoding
-  is meant for `query` type. There is no other type supported for now but the
-  optional argument is here for future changes.
-
 ungrpc(<field_number>,[<field_type>])
   This extracts the protocol buffers message field in raw mode of an input binary
   sample representation of a gRPC message with <field_number> as field number
@@ -18878,6 +18859,25 @@ unset-var(<var>)
   This prefix is followed by a name. The separator is a '.'. The name may only
   contain characters 'a-z', 'A-Z', '0-9', '.' and '_'.
 
+upper
+  Convert a string sample to upper case. This can only be placed after a string
+  sample fetch function or after a transformation keyword returning a string
+  type. The result is of type string.
+
+url_dec([<in_form>])
+  Takes an url-encoded string provided as input and returns the decoded version
+  as output. The input and the output are of type string. If the <in_form>
+  argument is set to a non-zero integer value, the input string is assumed to
+  be part of a form or query string and the '+' character will be turned into a
+  space (' '). Otherwise this will only happen after a question mark indicating
+  a query string ('?').
+
+url_enc([<enc_type>])
+  Takes a string provided as input and returns the encoded version as output.
+  The input and the output are of type string. By default the type of encoding
+  is meant for `query` type. There is no other type supported for now but the
+  optional argument is here for future changes.
+
 us_ltime(<format>[,<offset>])
   This works like "ltime" but takes an input in microseconds. It also supports
   the %N conversion specifier inspired by date(1).
@@ -18970,6 +18970,33 @@ wt6([<avalanche>])
   32-bit hash is trivial to break. See also "crc32", "djb2", "sdbm", "crc32c",
   and the "hash-type" directive.
 
+
+x509_v_err_str
+  Convert a numerical value to its corresponding X509_V_ERR constant name. It
+  is useful in ACL in order to have a configuration which works with multiple
+  version of OpenSSL since some codes might change when changing version.
+
+  When the corresponding constant name was not found, outputs the numerical
+  value as a string.
+
+  The list of constant provided by OpenSSL can be found at
+  https://www.openssl.org/docs/manmaster/man3/X509_STORE_CTX_get_error.html#ERROR-CODES
+  Be careful to read the page for the right version of OpenSSL.
+
+  Example:
+
+    bind :443 ssl crt common.pem ca-file ca-auth.crt verify optional crt-ignore-err X509_V_ERR_CERT_REVOKED,X509_V_ERR_CERT_HAS_EXPIRED
+
+    acl cert_expired ssl_c_verify,x509_v_err_str -m str X509_V_ERR_CERT_HAS_EXPIRED
+    acl cert_revoked ssl_c_verify,x509_v_err_str -m str X509_V_ERR_CERT_REVOKED
+    acl cert_ok      ssl_c_verify,x509_v_err_str -m str X509_V_OK
+
+    http-response add-header X-SSL Ok if cert_ok
+    http-response add-header X-SSL Expired if cert_expired
+    http-response add-header X-SSL Revoked if cert_revoked
+
+    http-response add-header X-SSL-verify %[ssl_c_verify,x509_v_err_str]
+
 xor(<value>)
   Performs a bitwise "XOR" (exclusive OR) between <value> and the input value
   of type signed integer, and returns the result as an signed integer.
@@ -19011,32 +19038,6 @@ xxh64([<seed>])
   collision rate, though care must be taken as the algorithm is not considered
   as cryptographically secure.
 
-x509_v_err_str
-  Convert a numerical value to its corresponding X509_V_ERR constant name. It
-  is useful in ACL in order to have a configuration which works with multiple
-  version of OpenSSL since some codes might change when changing version.
-
-  When the corresponding constant name was not found, outputs the numerical
-  value as a string.
-
-  The list of constant provided by OpenSSL can be found at
-  https://www.openssl.org/docs/manmaster/man3/X509_STORE_CTX_get_error.html#ERROR-CODES
-  Be careful to read the page for the right version of OpenSSL.
-
-  Example:
-
-    bind :443 ssl crt common.pem ca-file ca-auth.crt verify optional crt-ignore-err X509_V_ERR_CERT_REVOKED,X509_V_ERR_CERT_HAS_EXPIRED
-
-    acl cert_expired ssl_c_verify,x509_v_err_str -m str X509_V_ERR_CERT_HAS_EXPIRED
-    acl cert_revoked ssl_c_verify,x509_v_err_str -m str X509_V_ERR_CERT_REVOKED
-    acl cert_ok      ssl_c_verify,x509_v_err_str -m str X509_V_OK
-
-    http-response add-header X-SSL Ok if cert_ok
-    http-response add-header X-SSL Expired if cert_expired
-    http-response add-header X-SSL Revoked if cert_revoked
-
-    http-response add-header X-SSL-verify %[ssl_c_verify,x509_v_err_str]
-
 
 7.3.2. Fetching samples from internal states
 --------------------------------------------