]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
lib: factor out generate_random_str_list_buf()
authorVolker Lendecke <vl@samba.org>
Fri, 27 Dec 2024 17:43:57 +0000 (18:43 +0100)
committerJeremy Allison <jra@samba.org>
Thu, 23 Jan 2025 23:08:38 +0000 (23:08 +0000)
No talloc required

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
lib/util/genrand_util.c
lib/util/samba_util.h

index 43005c5666600cd30bf1db00939c734740629ba3..4e05de553195cfb39ace11ad55af66fdb2839133 100644 (file)
@@ -211,25 +211,42 @@ _PUBLIC_ bool check_password_quality(const char *pwd)
        return false;
 }
 
+_PUBLIC_ char *generate_random_str_list_buf(char *buf,
+                                           size_t buflen,
+                                           const char *list)
+{
+       const size_t list_len = strlen(list);
+       size_t i, len;
+
+       if (buflen == 0) {
+               return buf;
+       }
+       buf[buflen-1] = '\0';
+
+       if (buflen == 1) {
+               return buf;
+       }
+
+       len = buflen-1;
+       generate_secret_buffer((uint8_t *)buf, len);
+
+       for (i=0; i<len; i++) {
+               buf[i] = list[buf[i] % list_len];
+       }
+
+       return buf;
+}
+
 /**
  Use the random number generator to generate a random string.
 **/
 
 _PUBLIC_ char *generate_random_str_list(TALLOC_CTX *mem_ctx, size_t len, const char *list)
 {
-       size_t i;
-       size_t list_len = strlen(list);
-
        char *retstr = talloc_array(mem_ctx, char, len + 1);
        if (!retstr) return NULL;
 
-       generate_secret_buffer((uint8_t *)retstr, len);
-       for (i = 0; i < len; i++) {
-               retstr[i] = list[retstr[i] % list_len];
-       }
-       retstr[i] = '\0';
-
-       return retstr;
+       return generate_random_str_list_buf(retstr, len+1, list);
 }
 
 /**
index 3994f8373c560a8c77aeffea4a3c74f235798c5b..03dee5c61379d3c5980346d236b6b16e19645919 100644 (file)
@@ -170,6 +170,9 @@ _PUBLIC_ char *generate_random_machine_password(TALLOC_CTX *mem_ctx, size_t min,
 /**
  Use the random number generator to generate a random string.
 **/
+_PUBLIC_ char *generate_random_str_list_buf(char *buf,
+                                           size_t buflen,
+                                           const char *list);
 _PUBLIC_ char *generate_random_str_list(TALLOC_CTX *mem_ctx, size_t len, const char *list);
 
 /**