The branch, master has been updated
       via  d7e620ff41d lib/util: Replace buggy string_sub_talloc() with 
talloc_string_sub() in lib/util
       via  5cdc065211e lib/param: Remove lpcfg_volume_label() and only caller 
in NTVFS file server
       via  202d4d6da6a lib/param: Remove unused functions in 
lib/param/loadparm.c
      from  26bc731212b winbindd: Apply some const to normalize_name_map()

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit d7e620ff41d6583b5554c03abaac6c4c183d5146
Author: Andrew Bartlett <abart...@samba.org>
Date:   Wed Mar 10 16:16:42 2021 +1300

    lib/util: Replace buggy string_sub_talloc() with talloc_string_sub() in 
lib/util
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14658
    
    Signed-off-by: Andrew Bartlett <abart...@samba.org>
    Reviewed-by: Volker Lendecke <v...@samba.org>
    
    Autobuild-User(master): Volker Lendecke <v...@samba.org>
    Autobuild-Date(master): Wed Mar 10 08:06:25 UTC 2021 on sn-devel-184

commit 5cdc065211ef26f0c262751f17c3511a2dcca950
Author: Andrew Bartlett <abart...@samba.org>
Date:   Wed Mar 10 15:59:10 2021 +1300

    lib/param: Remove lpcfg_volume_label() and only caller in NTVFS file server
    
    Signed-off-by: Andrew Bartlett <abart...@samba.org>
    Reviewed-by: Volker Lendecke <v...@samba.org>

commit 202d4d6da6a1923e768799b576acf5057473a7f7
Author: Andrew Bartlett <abart...@samba.org>
Date:   Wed Mar 10 15:31:05 2021 +1300

    lib/param: Remove unused functions in lib/param/loadparm.c
    
    The lib/param code does not service smbd, no home directories nor printers 
are handled
    in this codebase and these functions are uncalled.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14658
    
    Signed-off-by: Andrew Bartlett <abart...@samba.org>
    Reviewed-by: Volker Lendecke <v...@samba.org>

-----------------------------------------------------------------------

Summary of changes:
 lib/param/loadparm.c          | 169 ------------------------------------------
 lib/param/param.h             |  29 --------
 lib/util/substitute.c         | 166 +++++++++++++++++++++++++++++------------
 lib/util/substitute.h         |  20 +++--
 lib/util/tests/str.c          |  14 ++--
 source3/include/proto.h       |  14 ----
 source3/lib/util_str.c        | 117 -----------------------------
 source4/param/share.h         |   1 -
 source4/param/share_classic.c |   4 -
 9 files changed, 138 insertions(+), 396 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c
index 3548c47d857..0c4c3d0f555 100644
--- a/lib/param/loadparm.c
+++ b/lib/param/loadparm.c
@@ -728,76 +728,6 @@ struct loadparm_service *lpcfg_add_service(struct 
loadparm_context *lp_ctx,
        return lp_ctx->services[i];
 }
 
-/**
- * Add a new home service, with the specified home directory, defaults coming
- * from service ifrom.
- */
-
-bool lpcfg_add_home(struct loadparm_context *lp_ctx,
-                const char *pszHomename,
-                struct loadparm_service *default_service,
-                const char *user, const char *pszHomedir)
-{
-       struct loadparm_service *service;
-
-       service = lpcfg_add_service(lp_ctx, default_service, pszHomename);
-
-       if (service == NULL)
-               return false;
-
-       if (!(*(default_service->path))
-           || strequal(default_service->path, lp_ctx->sDefault->path)) {
-               service->path = talloc_strdup(service, pszHomedir);
-       } else {
-               service->path = string_sub_talloc(service, 
lpcfg_path(default_service, lp_ctx->sDefault, service), "%H", pszHomedir);
-       }
-
-       if (!(*(service->comment))) {
-               service->comment = talloc_asprintf(service, "Home directory of 
%s", user);
-       }
-       service->available = default_service->available;
-       service->browseable = default_service->browseable;
-
-       DEBUG(3, ("adding home's share [%s] for user '%s' at '%s'\n",
-                 pszHomename, user, service->path));
-
-       return true;
-}
-
-/**
- * Add a new printer service, with defaults coming from service iFrom.
- */
-
-bool lpcfg_add_printer(struct loadparm_context *lp_ctx,
-                      const char *pszPrintername,
-                      struct loadparm_service *default_service)
-{
-       const char *comment = "From Printcap";
-       struct loadparm_service *service;
-       service = lpcfg_add_service(lp_ctx, default_service, pszPrintername);
-
-       if (service == NULL)
-               return false;
-
-       /* note that we do NOT default the availability flag to True - */
-       /* we take it from the default service passed. This allows all */
-       /* dynamic printers to be disabled by disabling the [printers] */
-       /* entry (if/when the 'available' keyword is implemented!).    */
-
-       /* the printer name is set to the service name. */
-       lpcfg_string_set(service, &service->_printername, pszPrintername);
-       lpcfg_string_set(service, &service->comment, comment);
-       service->browseable = default_service->browseable;
-       /* Printers cannot be read_only. */
-       service->read_only = false;
-       /* Printer services must be printable. */
-       service->printable = true;
-
-       DEBUG(3, ("adding printer service %s\n", pszPrintername));
-
-       return true;
-}
-
 /**
  * Map a parameter's string representation to something we can use.
  * Returns False if the parameter string is not recognised, else TRUE.
@@ -1102,39 +1032,6 @@ fail:
 
 }
 
-/*******************************************************************
- Check if a config file has changed date.
-********************************************************************/
-bool lpcfg_file_list_changed(struct loadparm_context *lp_ctx)
-{
-       struct file_lists *f;
-       DEBUG(6, ("lpcfg_file_list_changed()\n"));
-
-       for (f = lp_ctx->file_lists; f != NULL; f = f->next) {
-               char *n2;
-               time_t mod_time;
-
-               n2 = standard_sub_basic(lp_ctx, f->name);
-
-               DEBUGADD(6, ("file %s -> %s  last mod_time: %s\n",
-                            f->name, n2, ctime(&f->modtime)));
-
-               mod_time = file_modtime(n2);
-
-               if (mod_time && ((f->modtime != mod_time) || (f->subfname == 
NULL) || (strcmp(n2, f->subfname) != 0))) {
-                       DEBUGADD(6, ("file %s modified: %s\n", n2,
-                                 ctime(&mod_time)));
-                       f->modtime = mod_time;
-                       talloc_free(f->subfname);
-                       f->subfname = talloc_strdup(f, n2);
-                       TALLOC_FREE(n2);
-                       return true;
-               }
-               TALLOC_FREE(n2);
-       }
-       return false;
-}
-
 /*
  * set the value for a P_ENUM
  */
@@ -2565,31 +2462,6 @@ void init_printer_values(struct loadparm_context 
*lp_ctx, TALLOC_CTX *ctx,
        }
 }
 
-/**
- * Unload unused services.
- */
-
-void lpcfg_killunused(struct loadparm_context *lp_ctx,
-                  struct smbsrv_connection *smb,
-                  bool (*snumused) (struct smbsrv_connection *, int))
-{
-       int i;
-
-       if (lp_ctx->s3_fns != NULL) {
-               smb_panic("Cannot be used from an s3 loadparm ctx");
-       }
-
-       for (i = 0; i < lp_ctx->iNumServices; i++) {
-               if (lp_ctx->services[i] == NULL)
-                       continue;
-
-               if (!snumused || !snumused(smb, i)) {
-                       talloc_free(lp_ctx->services[i]);
-                       lp_ctx->services[i] = NULL;
-               }
-       }
-}
-
 
 static int lpcfg_destructor(struct loadparm_context *lp_ctx)
 {
@@ -3408,47 +3280,6 @@ const char *lpcfg_servicename(const struct 
loadparm_service *service)
        return service ? lpcfg_string((const char *)service->szService) : NULL;
 }
 
-/**
- * A useful volume label function.
- */
-const char *lpcfg_volume_label(struct loadparm_service *service, struct 
loadparm_service *sDefault)
-{
-       const char *ret;
-       ret = lpcfg_string((const char *)((service != NULL && service->volume 
!= NULL) ?
-                                      service->volume : sDefault->volume));
-       if (!*ret)
-               return lpcfg_servicename(service);
-       return ret;
-}
-
-/**
- * Return the correct printer name.
- */
-const char *lpcfg_printername(struct loadparm_service *service, struct 
loadparm_service *sDefault)
-{
-       const char *ret;
-       ret = lpcfg_string((const char *)((service != NULL && 
service->_printername != NULL) ?
-                                      service->_printername : 
sDefault->_printername));
-       if (ret == NULL || (ret != NULL && *ret == '\0'))
-               ret = lpcfg_servicename(service);
-
-       return ret;
-}
-
-
-/**
- * Return the max print jobs per queue.
- */
-int lpcfg_maxprintjobs(struct loadparm_service *service, struct 
loadparm_service *sDefault)
-{
-       int maxjobs = lpcfg_max_print_jobs(service, sDefault);
-
-       if (maxjobs <= 0 || maxjobs >= PRINT_MAX_JOBID)
-               maxjobs = PRINT_MAX_JOBID - 1;
-
-       return maxjobs;
-}
-
 struct smb_iconv_handle *lpcfg_iconv_handle(struct loadparm_context *lp_ctx)
 {
        if (lp_ctx == NULL) {
diff --git a/lib/param/param.h b/lib/param/param.h
index f7204c5702d..07b387a8108 100644
--- a/lib/param/param.h
+++ b/lib/param/param.h
@@ -116,18 +116,10 @@ bool lpcfg_parm_bool(struct loadparm_context *lp_ctx,
 struct loadparm_service *lpcfg_add_service(struct loadparm_context *lp_ctx,
                                     const struct loadparm_service *pservice,
                                     const char *name);
-bool lpcfg_add_home(struct loadparm_context *lp_ctx,
-                const char *pszHomename,
-                struct loadparm_service *default_service,
-                const char *user, const char *pszHomedir);
-bool lpcfg_add_printer(struct loadparm_context *lp_ctx,
-                   const char *pszPrintername,
-                   struct loadparm_service *default_service);
 struct parm_struct *lpcfg_parm_struct(struct loadparm_context *lp_ctx, const 
char *name);
 void *lpcfg_parm_ptr(struct loadparm_context *lp_ctx,
                  struct loadparm_service *service, struct parm_struct *parm);
 bool lpcfg_parm_is_cmdline(struct loadparm_context *lp_ctx, const char *name);
-bool lpcfg_file_list_changed(struct loadparm_context *lp_ctx);
 
 bool lpcfg_do_global_parameter(struct loadparm_context *lp_ctx,
                            const char *pszParmName, const char *pszParmValue);
@@ -151,13 +143,6 @@ bool lpcfg_dump_a_parameter(struct loadparm_context 
*lp_ctx,
                         struct loadparm_service *service,
                         const char *parm_name, FILE * f);
 
-/**
- * Unload unused services.
- */
-void lpcfg_killunused(struct loadparm_context *lp_ctx,
-                  struct smbsrv_connection *smb,
-                  bool (*snumused) (struct smbsrv_connection *, int));
-
 /**
  * Initialise the global parameter structure.
  */
@@ -194,20 +179,6 @@ struct loadparm_service *lpcfg_servicebynum(struct 
loadparm_context *lp_ctx,
 struct loadparm_service *lpcfg_service(struct loadparm_context *lp_ctx,
                                    const char *service_name);
 
-/**
- * A useful volume label function.
- */
-const char *lp_cfg_volume_label(struct loadparm_service *service, struct 
loadparm_service *sDefault);
-
-/**
- * If we are PDC then prefer us as DMB
- */
-const char *lpcfg_printername(struct loadparm_service *service, struct 
loadparm_service *sDefault);
-
-/**
- * Return the max print jobs per queue.
- */
-int lpcfg_maxprintjobs(struct loadparm_service *service, struct 
loadparm_service *sDefault);
 struct smb_iconv_handle *lpcfg_iconv_handle(struct loadparm_context *lp_ctx);
 void lpcfg_smbcli_options(struct loadparm_context *lp_ctx,
                         struct smbcli_options *options);
diff --git a/lib/util/substitute.c b/lib/util/substitute.c
index 2d88e97fd19..3ca53d912c4 100644
--- a/lib/util/substitute.c
+++ b/lib/util/substitute.c
@@ -113,60 +113,11 @@ static void string_sub2(char *s,const char *pattern, 
const char *insert, size_t
        }
 }
 
-void string_sub_once(char *s, const char *pattern,
-               const char *insert, size_t len)
-{
-       string_sub2( s, pattern, insert, len, true, true, false );
-}
-
 void string_sub(char *s,const char *pattern, const char *insert, size_t len)
 {
        string_sub2( s, pattern, insert, len, true, false, false );
 }
 
-/**
- * Talloc'ed version of string_sub
- */
-_PUBLIC_ char *string_sub_talloc(TALLOC_CTX *mem_ctx, const char *s, 
-                               const char *pattern, const char *insert)
-{
-       const char *p;
-       char *ret;
-       size_t len, alloc_len;
-
-       if (insert == NULL || pattern == NULL || !*pattern || s == NULL)
-               return NULL;
-
-       /* determine length needed */
-       len = strlen(s);
-       
-       for (p = strstr(s, pattern); p != NULL; 
-            p = strstr(p+strlen(pattern), pattern)) {
-               len += strlen(insert) - strlen(pattern);
-       }
-
-       alloc_len = MAX(len, strlen(s))+1;
-       ret = talloc_array(mem_ctx, char, alloc_len);
-       if (ret == NULL)
-               return NULL;
-       strncpy(ret, s, alloc_len);
-       string_sub(ret, pattern, insert, alloc_len);
-
-       ret = talloc_realloc(mem_ctx, ret, char, len+1);
-       if (ret == NULL)
-               return NULL;
-
-       if (ret[len] != '\0') {
-               DEBUG(0,("Internal error at %s(%d): string not terminated\n",
-                        __FILE__, __LINE__));
-               abort();
-       }
-
-       talloc_set_name_const(ret, ret);
-
-       return ret;
-}
-
 /**
  Similar to string_sub() but allows for any character to be substituted. 
  Use with caution!
@@ -209,3 +160,120 @@ _PUBLIC_ void all_string_sub(char *s,const char 
*pattern,const char *insert, siz
                ls = ls + li - lp;
        }
 }
+
+/*
+ * Internal guts of talloc_string_sub and talloc_all_string_sub.
+ * talloc version of string_sub2.
+ */
+
+char *talloc_string_sub2(TALLOC_CTX *mem_ctx, const char *src,
+                       const char *pattern,
+                       const char *insert,
+                       bool remove_unsafe_characters,
+                       bool replace_once,
+                       bool allow_trailing_dollar)
+{
+       char *p, *in;
+       char *s;
+       char *string;
+       ssize_t ls,lp,li,ld, i;
+
+       if (!insert || !pattern || !*pattern || !src) {
+               return NULL;
+       }
+
+       string = talloc_strdup(mem_ctx, src);
+       if (string == NULL) {
+               DEBUG(0, ("talloc_string_sub2: "
+                       "talloc_strdup failed\n"));
+               return NULL;
+       }
+
+       s = string;
+
+       in = talloc_strdup(mem_ctx, insert);
+       if (!in) {
+               DEBUG(0, ("talloc_string_sub2: ENOMEM\n"));
+               return NULL;
+       }
+       ls = (ssize_t)strlen(s);
+       lp = (ssize_t)strlen(pattern);
+       li = (ssize_t)strlen(insert);
+       ld = li - lp;
+
+       for (i=0;i<li;i++) {
+               switch (in[i]) {
+                       case '$':
+                               /* allow a trailing $
+                                * (as in machine accounts) */
+                               if (allow_trailing_dollar && (i == li - 1 )) {
+                                       break;
+                               }
+
+                               FALL_THROUGH;
+                       case '`':
+                       case '"':
+                       case '\'':
+                       case ';':
+                       case '%':
+                       case '\r':
+                       case '\n':
+                               if (remove_unsafe_characters) {
+                                       in[i] = '_';
+                                       break;
+                               }
+
+                               FALL_THROUGH;
+                       default:
+                               /* ok */
+                               break;
+               }
+       }
+
+       while ((p = strstr_m(s,pattern))) {
+               if (ld > 0) {
+                       int offset = PTR_DIFF(s,string);
+                       string = (char *)talloc_realloc_size(mem_ctx, string,
+                                                       ls + ld + 1);
+                       if (!string) {
+                               DEBUG(0, ("talloc_string_sub: out of "
+                                         "memory!\n"));
+                               TALLOC_FREE(in);
+                               return NULL;
+                       }
+                       p = string + offset + (p - s);
+               }
+               if (li != lp) {
+                       memmove(p+li,p+lp,strlen(p+lp)+1);
+               }
+               memcpy(p, in, li);
+               s = p + li;
+               ls += ld;
+
+               if (replace_once) {
+                       break;
+               }
+       }
+       TALLOC_FREE(in);
+       return string;
+}
+
+/* Same as string_sub, but returns a talloc'ed string */
+
+char *talloc_string_sub(TALLOC_CTX *mem_ctx,
+                       const char *src,
+                       const char *pattern,
+                       const char *insert)
+{
+       return talloc_string_sub2(mem_ctx, src, pattern, insert,
+                       true, false, false);
+}
+
+char *talloc_all_string_sub(TALLOC_CTX *ctx,
+                               const char *src,
+                               const char *pattern,
+                               const char *insert)
+{
+       return talloc_string_sub2(ctx, src, pattern, insert,
+                       false, false, false);
+}
diff --git a/lib/util/substitute.h b/lib/util/substitute.h
index 5ba469c52ba..3134cfcdea5 100644
--- a/lib/util/substitute.h
+++ b/lib/util/substitute.h
@@ -39,12 +39,6 @@
 **/
 void string_sub(char *s,const char *pattern, const char *insert, size_t len);
 
-void string_sub_once(char *s, const char *pattern,
-                    const char *insert, size_t len);
-
-char *string_sub_talloc(TALLOC_CTX *mem_ctx, const char *s,
-                       const char *pattern, const char *insert);
-
 /**
  Similar to string_sub() but allows for any character to be substituted.
  Use with caution!
@@ -53,4 +47,18 @@ char *string_sub_talloc(TALLOC_CTX *mem_ctx, const char *s,
 **/
 void all_string_sub(char *s,const char *pattern,const char *insert, size_t 
len);
 
+char *talloc_string_sub2(TALLOC_CTX *mem_ctx, const char *src,
+                       const char *pattern,
+                       const char *insert,
+                       bool remove_unsafe_characters,
+                       bool replace_once,
+                       bool allow_trailing_dollar);
+char *talloc_string_sub(TALLOC_CTX *mem_ctx,
+                       const char *src,
+                       const char *pattern,
+                       const char *insert);
+char *talloc_all_string_sub(TALLOC_CTX *ctx,
+                               const char *src,
+                               const char *pattern,
+                               const char *insert);
 #endif /* _SAMBA_SUBSTITUTE_H_ */
diff --git a/lib/util/tests/str.c b/lib/util/tests/str.c
index 6c234738ead..93bf809f385 100644
--- a/lib/util/tests/str.c
+++ b/lib/util/tests/str.c
@@ -68,22 +68,22 @@ static bool test_string_sub_special_char(struct 
torture_context *tctx)
        return true;
 }
 
-static bool test_string_sub_talloc_simple(struct torture_context *tctx)
+static bool test_talloc_string_sub_simple(struct torture_context *tctx)
 {
        char *t;
        
-       t = string_sub_talloc(tctx, "foobla", "foo", "bl");
+       t = talloc_string_sub(tctx, "foobla", "foo", "bl");
 
        torture_assert_str_equal(tctx, t, "blbla", "invalid sub");
 
        return true;


-- 
Samba Shared Repository

Reply via email to