The branch, master has been updated
       via  d171d20 ctdb: Fix CID 1125613 Destination buffer too small
       via  8d9bb5c ctdb: Introduce a helper var in ctdb_get_script_list
       via  c1e8bfb ctdb: Fix memleak in ctdb_get_script_list
       via  a8cc495 ctdb: Make for-loop in ctdb_get_script_list more idiomatic
       via  b584bde ctdb: Fix whitespace
      from  07330d2 replace: Remove superfluous check for gcrypt header.

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


- Log -----------------------------------------------------------------
commit d171d2010a256a46446de5328a0897df3838855a
Author: Volker Lendecke <[email protected]>
Date:   Fri Mar 13 14:20:05 2015 +0000

    ctdb: Fix CID 1125613 Destination buffer too small
    
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Michael Adam <[email protected]>
    
    Autobuild-User(master): Michael Adam <[email protected]>
    Autobuild-Date(master): Fri Mar 13 19:14:20 CET 2015 on sn-devel-104

commit 8d9bb5c54aae0099e0dde2d9a904676fcb9340c0
Author: Volker Lendecke <[email protected]>
Date:   Fri Mar 13 14:16:17 2015 +0000

    ctdb: Introduce a helper var in ctdb_get_script_list
    
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Michael Adam <[email protected]>

commit c1e8bfb186c5cbeafbce9f2767db82edb579d5e1
Author: Volker Lendecke <[email protected]>
Date:   Fri Mar 13 14:12:41 2015 +0000

    ctdb: Fix memleak in ctdb_get_script_list
    
    scandir allocates every name individually, see example code in susv4 or man
    scandir
    
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Michael Adam <[email protected]>

commit a8cc495b967935852c5357c3a4ef3d37579fb51b
Author: Volker Lendecke <[email protected]>
Date:   Fri Mar 13 14:11:20 2015 +0000

    ctdb: Make for-loop in ctdb_get_script_list more idiomatic
    
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Michael Adam <[email protected]>

commit b584bdebf9fc83f0b0c69d1dae7c582e8e8d2781
Author: Volker Lendecke <[email protected]>
Date:   Fri Mar 13 14:01:25 2015 +0000

    ctdb: Fix whitespace
    
    Signed-off-by: Volker Lendecke <[email protected]>
    Reviewed-by: Michael Adam <[email protected]>

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

Summary of changes:
 ctdb/server/eventscript.c | 63 ++++++++++++++++++++++++++++-------------------
 1 file changed, 37 insertions(+), 26 deletions(-)


Changeset truncated at 500 lines:

diff --git a/ctdb/server/eventscript.c b/ctdb/server/eventscript.c
index e70db79..4dd4379 100644
--- a/ctdb/server/eventscript.c
+++ b/ctdb/server/eventscript.c
@@ -1,4 +1,4 @@
-/* 
+/*
    event script handling
 
    Copyright (C) Andrew Tridgell  2007
@@ -7,12 +7,12 @@
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program; if not, see <http://www.gnu.org/licenses/>.
 */
@@ -38,7 +38,6 @@ struct event_script_callback {
        void (*fn)(struct ctdb_context *, int, void *);
        void *private_data;
 };
-       
 
 struct ctdb_event_script_state {
        struct ctdb_context *ctdb;
@@ -48,7 +47,7 @@ struct ctdb_event_script_state {
        enum ctdb_eventscript_call call;
        const char *options;
        struct timeval timeout;
-       
+
        unsigned int current;
        struct ctdb_scripts_wire *scripts;
 };
@@ -160,9 +159,9 @@ static struct ctdb_scripts_wire 
*ctdb_get_script_list(struct ctdb_context *ctdb,
 {
        struct dirent **namelist;
        struct ctdb_scripts_wire *scripts;
-       int count;
+       int i, count;
 
-       /* scan all directory entries and insert all valid scripts into the 
+       /* scan all directory entries and insert all valid scripts into the
           tree
        */
        count = scandir(ctdb->event_script_dir, &namelist, script_filter, 
alphasort);
@@ -178,19 +177,30 @@ static struct ctdb_scripts_wire 
*ctdb_get_script_list(struct ctdb_context *ctdb,
                                   + sizeof(scripts->scripts[0]) * count);
        if (scripts == NULL) {
                DEBUG(DEBUG_ERR, (__location__ " Failed to allocate 
scripts\n"));
-               free(namelist);
-               return NULL;
+               goto done;
        }
        scripts->num_scripts = count;
 
-       for (count = 0; count < scripts->num_scripts; count++) {
-               strcpy(scripts->scripts[count].name, namelist[count]->d_name);
-               scripts->scripts[count].status = 0;
-               if (!check_executable(ctdb->event_script_dir, 
namelist[count]->d_name)) {
-                       scripts->scripts[count].status = -errno;
+       for (i = 0; i < count; i++) {
+               struct ctdb_script_wire *s = &scripts->scripts[i];
+
+               if (strlcpy(s->name, namelist[i]->d_name, sizeof(s->name)) >=
+                   sizeof(s->name)) {
+                       s->status = -ENAMETOOLONG;
+                       continue;
+               }
+
+               s->status = 0;
+               if (!check_executable(ctdb->event_script_dir,
+                                     namelist[i]->d_name)) {
+                       s->status = -errno;
                }
        }
 
+done:
+       for (i=0; i<count; i++) {
+               free(namelist[i]);
+       }
        free(namelist);
        return scripts;
 }
@@ -330,6 +340,7 @@ static int script_status(struct ctdb_scripts_wire *scripts)
 
        for (i = 0; i < scripts->num_scripts; i++) {
                switch (scripts->scripts[i].status) {
+               case -ENAMETOOLONG:
                case -ENOENT:
                case -ENOEXEC:
                        /* Disabled or missing; that's OK. */
@@ -347,10 +358,10 @@ static int script_status(struct ctdb_scripts_wire 
*scripts)
 }
 
 /* called when child is finished */
-static void ctdb_event_script_handler(struct event_context *ev, struct 
fd_event *fde, 
+static void ctdb_event_script_handler(struct event_context *ev, struct 
fd_event *fde,
                                      uint16_t flags, void *p)
 {
-       struct ctdb_event_script_state *state = 
+       struct ctdb_event_script_state *state =
                talloc_get_type(p, struct ctdb_event_script_state);
        struct ctdb_script_wire *current = get_current_script(state);
        struct ctdb_context *ctdb = state->ctdb;
@@ -508,7 +519,7 @@ static void ctdb_run_debug_hung_script(struct ctdb_context 
*ctdb, struct debug_h
 }
 
 /* called when child times out */
-static void ctdb_event_script_timeout(struct event_context *ev, struct 
timed_event *te, 
+static void ctdb_event_script_timeout(struct event_context *ev, struct 
timed_event *te,
                                      struct timeval t, void *p)
 {
        struct ctdb_event_script_state *state = talloc_get_type(p, struct 
ctdb_event_script_state);
@@ -610,7 +621,7 @@ static int event_script_destructor(struct 
ctdb_event_script_state *state)
                        break;
                }
        }
-       
+
        state->callback = NULL;
 
        if (callback) {
@@ -670,7 +681,7 @@ static int remove_callback(struct event_script_callback 
*callback)
 }
 
 /*
-  run the event script in the background, calling the callback when 
+  run the event script in the background, calling the callback when
   finished
  */
 static int ctdb_event_script_callback_v(struct ctdb_context *ctdb,
@@ -807,10 +818,10 @@ static int ctdb_event_script_callback_v(struct 
ctdb_context *ctdb,
 
 
 /*
-  run the event script in the background, calling the callback when 
+  run the event script in the background, calling the callback when
   finished.  If mem_ctx is freed, callback will never be called.
  */
-int ctdb_event_script_callback(struct ctdb_context *ctdb, 
+int ctdb_event_script_callback(struct ctdb_context *ctdb,
                               TALLOC_CTX *mem_ctx,
                               void (*callback)(struct ctdb_context *, int, 
void *),
                               void *private_data,
@@ -895,10 +906,10 @@ struct eventscript_callback_state {
 /*
   called when a forced eventscript run has finished
  */
-static void run_eventscripts_callback(struct ctdb_context *ctdb, int status, 
+static void run_eventscripts_callback(struct ctdb_context *ctdb, int status,
                                 void *private_data)
 {
-       struct eventscript_callback_state *state = 
+       struct eventscript_callback_state *state =
                talloc_get_type(private_data, struct 
eventscript_callback_state);
 
        if (status != 0) {
@@ -964,7 +975,7 @@ int32_t ctdb_run_eventscripts(struct ctdb_context *ctdb,
 
        DEBUG(DEBUG_NOTICE,("Running eventscripts with arguments %s\n", 
indata.dptr));
 
-       ret = ctdb_event_script_callback(ctdb, 
+       ret = ctdb_event_script_callback(ctdb,
                         state, run_eventscripts_callback, state,
                         call, "%s", options);
 
@@ -1007,7 +1018,7 @@ int32_t ctdb_control_enable_script(struct ctdb_context 
*ctdb, TDB_DATA indata)
        }
 
 
-       if (stat(ctdb->event_script_dir, &st) != 0 && 
+       if (stat(ctdb->event_script_dir, &st) != 0 &&
            errno == ENOENT) {
                DEBUG(DEBUG_CRIT,("No event script directory found at '%s'\n", 
ctdb->event_script_dir));
                talloc_free(tmp_ctx);
@@ -1063,7 +1074,7 @@ int32_t ctdb_control_disable_script(struct ctdb_context 
*ctdb, TDB_DATA indata)
        }
 
 
-       if (stat(ctdb->event_script_dir, &st) != 0 && 
+       if (stat(ctdb->event_script_dir, &st) != 0 &&
            errno == ENOENT) {
                DEBUG(DEBUG_CRIT,("No event script directory found at '%s'\n", 
ctdb->event_script_dir));
                talloc_free(tmp_ctx);


-- 
Samba Shared Repository

Reply via email to