Browse Source

configure, cmake, lib: more form api deprecation

Introduce a --enable-form-api configure option to control its inclusion
in builds. The condition name defined for it is CURL_DISABLE_FORM_API.

Form api code is dependent of MIME: configure and CMake handle this
dependency automatically: CMake by making it a dependent option
explicitly, configure by inheriting the MIME value by default and
rejecting explicit incompatible values.

"form-api" is now a new hidden test feature.

Update libcurl modules to respect this option and adjust tests
accordingly.

Closes #9621
Patrick Monnerat 1 year ago
parent
commit
038c46f61f

+ 3 - 0
CMakeLists.txt

@@ -199,6 +199,9 @@ option(CURL_DISABLE_DOH "disables DNS-over-HTTPS" OFF)
 mark_as_advanced(CURL_DISABLE_DOH)
 option(CURL_DISABLE_FILE "disables FILE" OFF)
 mark_as_advanced(CURL_DISABLE_FILE)
+cmake_dependent_option(CURL_DISABLE_FORM_API "disables form api" OFF
+                       "NOT CURL_DISABLE_MIME" ON)
+mark_as_advanced(CURL_DISABLE_FORM_API)
 option(CURL_DISABLE_FTP "disables FTP" OFF)
 mark_as_advanced(CURL_DISABLE_FTP)
 option(CURL_DISABLE_GETOPTIONS "disables curl_easy_options API for existing options to curl_easy_setopt" OFF)

+ 26 - 0
configure.ac

@@ -4126,6 +4126,32 @@ AS_HELP_STRING([--disable-mime],[Disable mime API support]),
        AC_MSG_RESULT(yes)
 )
 
+dnl ************************************************************
+dnl disable form API support
+dnl
+AC_MSG_CHECKING([whether to support the form API])
+AC_ARG_ENABLE(form-api,
+AS_HELP_STRING([--enable-form-api],[Enable form API support])
+AS_HELP_STRING([--disable-form-api],[Disable form API support]),
+[ case "$enableval" in
+  no)  AC_MSG_RESULT(no)
+       AC_DEFINE(CURL_DISABLE_FORM_API, 1, [disable form API])
+       ;;
+  *)   AC_MSG_RESULT(yes)
+       test "$enable_mime" = no &&
+         AC_MSG_ERROR(MIME support needs to be enabled in order to enable form API support)
+       ;;
+  esac ],
+[
+  if test "$enable_mime" = no; then
+    enable_form_api=no
+    AC_MSG_RESULT(no)
+    AC_DEFINE(CURL_DISABLE_FORM_API, 1, [disable form API])
+  else
+    AC_MSG_RESULT(yes)
+  fi ]
+)
+
 dnl ************************************************************
 dnl disable date parsing
 dnl

+ 4 - 0
docs/CURL-DISABLE.md

@@ -24,6 +24,10 @@ Disable DNS-over-HTTPS
 
 Disable the FILE protocol
 
+## `CURL_DISABLE_FORM_API`
+
+Disable the form API
+
 ## `CURL_DISABLE_FTP`
 
 Disable the FTP (and FTPS) protocol

+ 3 - 0
lib/curl_config.h.cmake

@@ -50,6 +50,9 @@
 /* disables FILE */
 #cmakedefine CURL_DISABLE_FILE 1
 
+/* disables form api */
+#cmakedefine CURL_DISABLE_FORM_API 1
+
 /* disables FTP */
 #cmakedefine CURL_DISABLE_FTP 1
 

+ 2 - 2
lib/formdata.c

@@ -27,7 +27,7 @@
 #include <curl/curl.h>
 
 #include "formdata.h"
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_MIME)
+#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_FORM_API)
 
 #if defined(HAVE_LIBGEN_H) && defined(HAVE_BASENAME)
 #include <libgen.h>
@@ -941,7 +941,7 @@ int curl_formget(struct curl_httppost *form, void *arg,
 void curl_formfree(struct curl_httppost *form)
 {
   (void)form;
-  /* does nothing HTTP is disabled */
+  /* Nothing to do. */
 }
 
 #endif  /* if disabled */

+ 2 - 5
lib/formdata.h

@@ -26,7 +26,7 @@
 
 #include "curl_setup.h"
 
-#ifndef CURL_DISABLE_MIME
+#ifndef CURL_DISABLE_FORM_API
 
 /* used by FormAdd for temporary storage */
 struct FormInfo {
@@ -53,10 +53,7 @@ CURLcode Curl_getformdata(struct Curl_easy *data,
                           curl_mimepart *,
                           struct curl_httppost *post,
                           curl_read_callback fread_func);
-#else
-/* disabled */
-#define Curl_getformdata(a,b,c,d) CURLE_NOT_BUILT_IN
-#endif
+#endif /* CURL_DISABLE_FORM_API */
 
 
 #endif /* HEADER_CURL_FORMDATA_H */

+ 2 - 0
lib/http.c

@@ -2372,6 +2372,7 @@ CURLcode Curl_http_body(struct Curl_easy *data, struct connectdata *conn,
   case HTTPREQ_POST_MIME:
     http->sendit = &data->set.mimepost;
     break;
+#ifndef CURL_DISABLE_FORM_API
   case HTTPREQ_POST_FORM:
     /* Convert the form structure into a mime structure. */
     Curl_mime_cleanpart(&http->form);
@@ -2381,6 +2382,7 @@ CURLcode Curl_http_body(struct Curl_easy *data, struct connectdata *conn,
       return result;
     http->sendit = &http->form;
     break;
+#endif
   default:
     http->sendit = NULL;
   }

+ 1 - 1
lib/setopt.c

@@ -666,7 +666,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param)
       data->set.method = HTTPREQ_GET;
     break;
 
-#ifndef CURL_DISABLE_MIME
+#ifndef CURL_DISABLE_FORM_API
   case CURLOPT_HTTPPOST:
     /*
      * Set to make us do HTTP POST

+ 5 - 4
tests/data/test1308

@@ -4,20 +4,21 @@
 unittest
 curl_formadd
 curl_formget
+FORM
 </keywords>
 </info>
 
 #
 # Client-side
 <client>
-<server>
-none
-</server>
 <features>
 unittest
 http
-Mime
+form-api
 </features>
+<server>
+none
+</server>
  <name>
 formpost unit tests
  </name>

+ 2 - 1
tests/data/test516

@@ -3,6 +3,7 @@
 <keywords>
 HTTP
 HTTP POST
+FORM
 </keywords>
 </info>
 
@@ -22,7 +23,7 @@ OK
 # Client-side
 <client>
 <features>
-Mime
+form-api
 </features>
 <server>
 http

+ 2 - 1
tests/data/test554

@@ -3,6 +3,7 @@
 <keywords>
 HTTP
 HTTP POST
+FORM
 </keywords>
 </info>
 
@@ -39,7 +40,7 @@ hello
 # Client-side
 <client>
 <features>
-Mime
+form-api
 </features>
 <server>
 http

+ 2 - 1
tests/data/test587

@@ -3,6 +3,7 @@
 <keywords>
 HTTP
 HTTP POST
+FORM
 flaky
 </keywords>
 </info>
@@ -17,7 +18,7 @@ flaky
 # Client-side
 <client>
 <features>
-Mime
+form-api
 </features>
 <server>
 http

+ 1 - 1
tests/data/test650

@@ -24,7 +24,7 @@ hello
 # Client-side
 <client>
 <features>
-Mime
+form-api
 </features>
 <server>
 http

+ 1 - 1
tests/data/test651

@@ -24,7 +24,7 @@ hello
 # Client-side
 <client>
 <features>
-Mime
+form-api
 </features>
 <server>
 http

+ 1 - 1
tests/data/test672

@@ -33,7 +33,7 @@ hello
 # Client-side
 <client>
 <features>
-Mime
+form-api
 </features>
 <server>
 http

+ 1 - 1
tests/data/test673

@@ -33,7 +33,7 @@ hello
 # Client-side
 <client>
 <features>
-Mime
+form-api
 </features>
 <server>
 http

+ 1 - 0
tests/runtests.pl

@@ -783,6 +783,7 @@ sub checksystemfeatures {
     $feature{"DoH"} = 1;
     $feature{"HTTP-auth"} = 1;
     $feature{"Mime"} = 1;
+    $feature{"form-api"} = 1;
     $feature{"netrc"} = 1;
     $feature{"parsedate"} = 1;
     $feature{"proxy"} = 1;

+ 3 - 0
tests/server/disabled.c

@@ -78,6 +78,9 @@ static const char *disabled[]={
 #endif
 #ifndef USE_XATTR
   "xattr",
+#endif
+#ifdef CURL_DISABLE_FORM_API
+  "form-api",
 #endif
   NULL
 };