]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_stir_shaken: refactor utility function
authorNaveen Albert <asterisk@phreaknet.org>
Thu, 16 Dec 2021 19:41:56 +0000 (19:41 +0000)
committerFriendly Automation <jenkins2@gerrit.asterisk.org>
Wed, 23 Feb 2022 20:32:00 +0000 (14:32 -0600)
Refactors temp file utility function into file.c.

ASTERISK-29809 #close

Change-Id: Ife478708c8f2b127239cb73c1755ef18c0bf431b

include/asterisk/file.h
main/file.c
res/res_stir_shaken/curl.c

index b2da2a2c94f484cdfd518358c5700e5f413960d4..4e7c505d853ca8aaa8a87a2a5ac8f11d700ae23c 100644 (file)
@@ -146,6 +146,23 @@ int ast_filecopy(const char *oldname, const char *newname, const char *fmt);
  */
 FILE *ast_file_mkftemp(char *template, mode_t mode);
 
+/*!
+ * \brief Create a temporary file located at path
+ *
+ * \note The directory containing path will be created if it does not exist
+ * \note This function assumes path does not end with a '/'
+ *
+ * \param path The directory path to create the file in
+ * \param filename Function allocates memory and stores full filename (including path) here
+ * \param template_name mkstemp template to use. Must end with XXXXXX.
+ *
+ * \note filename will need to be freed with ast_free if this function succeeds
+ *
+ * \retval -1 on failure
+ * \return file descriptor on success
+ */
+int ast_file_fdtemp(const char *path, char **filename, const char *template_name);
+
 /*!
  * \brief Callback called for each file found when reading directories
  * \param dir_name the name of the directory
index 0c1fdd4fe473255fde8caceac16d57ea1cf39bba..a6cd3008fa074504fadd2c9b98ff55740e4ec1ce 100644 (file)
@@ -199,6 +199,26 @@ FILE *ast_file_mkftemp(char *template, mode_t mode)
        return p;
 }
 
+int ast_file_fdtemp(const char *path, char **filename, const char *template_name)
+{
+       int fd;
+
+       if (ast_asprintf(filename, "%s/%s", path, template_name) < 0) {
+               ast_log(LOG_ERROR, "Failed to set up temporary file path\n");
+               return -1;
+       }
+
+       ast_mkdir(path, 0644);
+
+       if ((fd = mkstemp(*filename)) < 0) {
+               ast_log(LOG_NOTICE, "Failed to create temporary file\n");
+               ast_free(*filename);
+               return -1;
+       }
+
+       return fd;
+}
+
 int ast_stopstream(struct ast_channel *tmp)
 {
        ast_channel_lock(tmp);
index ad3adbcb79f2f90c55e30b24a8e61b0f393a3c68..97c1098a51ebaa7c84466bc0de811b7f2bc02c94 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "asterisk/utils.h"
 #include "asterisk/logger.h"
+#include "asterisk/file.h"
 #include "curl.h"
 #include "general.h"
 #include "stir_shaken.h"
@@ -151,42 +152,11 @@ static CURL *get_curl_instance(struct curl_cb_data *data)
        return curl;
 }
 
-/*!
- * \brief Create a temporary file located at path
- *
- * \note This function assumes path does not end with a '/'
- *
- * \param path The directory path to create the file in
- * \param filename Function allocates memory and stores full filename (including path) here
- *
- * \retval -1 on failure
- * \return file descriptor on success
- */
-static int create_temp_file(const char *path, char **filename)
-{
-       const char *template_name = "certXXXXXX";
-       int fd;
-
-       if (ast_asprintf(filename, "%s/%s", path, template_name) < 0) {
-               ast_log(LOG_ERROR, "Failed to set up temporary file path for CURL\n");
-               return -1;
-       }
-
-       ast_mkdir(path, 0644);
-
-       if ((fd = mkstemp(*filename)) < 0) {
-               ast_log(LOG_NOTICE, "Failed to create temporary file for CURL\n");
-               ast_free(*filename);
-               return -1;
-       }
-
-       return fd;
-}
-
 char *curl_public_key(const char *public_cert_url, const char *path, struct curl_cb_data *data)
 {
        FILE *public_key_file;
        RAII_VAR(char *, tmp_filename, NULL, ast_free);
+       const char *template_name = "certXXXXXX";
        char *filename;
        char *serial;
        int fd;
@@ -199,9 +169,9 @@ char *curl_public_key(const char *public_cert_url, const char *path, struct curl
        /* For now, it's fine to pass in path as is - it shouldn't end with a '/'. However,
         * if we decide to change how certificates are stored in the future (configurable paths),
         * then we will need to check to see if path ends with '/', copy everything up to the '/',
-        * and use this new variable for create_temp_file as well as for ast_asprintf below.
+        * and use this new variable for ast_create_temp_file as well as for ast_asprintf below.
         */
-       fd = create_temp_file(path, &tmp_filename);
+       fd = ast_file_fdtemp(path, &tmp_filename, template_name);
        if (fd == -1) {
                ast_log(LOG_ERROR, "Failed to get temporary file descriptor for CURL\n");
                return NULL;