diff -Nru tevent-0.9.34/ABI/tevent-0.9.35.sigs tevent-0.9.36/ABI/tevent-0.9.35.sigs --- tevent-0.9.34/ABI/tevent-0.9.35.sigs 1970-01-01 00:00:00.000000000 +0000 +++ tevent-0.9.36/ABI/tevent-0.9.35.sigs 2018-01-13 07:09:11.000000000 +0000 @@ -0,0 +1,99 @@ +_tevent_add_fd: struct tevent_fd *(struct tevent_context *, TALLOC_CTX *, int, uint16_t, tevent_fd_handler_t, void *, const char *, const char *) +_tevent_add_signal: struct tevent_signal *(struct tevent_context *, TALLOC_CTX *, int, int, tevent_signal_handler_t, void *, const char *, const char *) +_tevent_add_timer: struct tevent_timer *(struct tevent_context *, TALLOC_CTX *, struct timeval, tevent_timer_handler_t, void *, const char *, const char *) +_tevent_create_immediate: struct tevent_immediate *(TALLOC_CTX *, const char *) +_tevent_loop_once: int (struct tevent_context *, const char *) +_tevent_loop_until: int (struct tevent_context *, bool (*)(void *), void *, const char *) +_tevent_loop_wait: int (struct tevent_context *, const char *) +_tevent_queue_create: struct tevent_queue *(TALLOC_CTX *, const char *, const char *) +_tevent_req_callback_data: void *(struct tevent_req *) +_tevent_req_cancel: bool (struct tevent_req *, const char *) +_tevent_req_create: struct tevent_req *(TALLOC_CTX *, void *, size_t, const char *, const char *) +_tevent_req_data: void *(struct tevent_req *) +_tevent_req_done: void (struct tevent_req *, const char *) +_tevent_req_error: bool (struct tevent_req *, uint64_t, const char *) +_tevent_req_nomem: bool (const void *, struct tevent_req *, const char *) +_tevent_req_notify_callback: void (struct tevent_req *, const char *) +_tevent_req_oom: void (struct tevent_req *, const char *) +_tevent_schedule_immediate: void (struct tevent_immediate *, struct tevent_context *, tevent_immediate_handler_t, void *, const char *, const char *) +_tevent_threaded_schedule_immediate: void (struct tevent_threaded_context *, struct tevent_immediate *, tevent_immediate_handler_t, void *, const char *, const char *) +tevent_backend_list: const char **(TALLOC_CTX *) +tevent_cleanup_pending_signal_handlers: void (struct tevent_signal *) +tevent_common_add_fd: struct tevent_fd *(struct tevent_context *, TALLOC_CTX *, int, uint16_t, tevent_fd_handler_t, void *, const char *, const char *) +tevent_common_add_signal: struct tevent_signal *(struct tevent_context *, TALLOC_CTX *, int, int, tevent_signal_handler_t, void *, const char *, const char *) +tevent_common_add_timer: struct tevent_timer *(struct tevent_context *, TALLOC_CTX *, struct timeval, tevent_timer_handler_t, void *, const char *, const char *) +tevent_common_add_timer_v2: struct tevent_timer *(struct tevent_context *, TALLOC_CTX *, struct timeval, tevent_timer_handler_t, void *, const char *, const char *) +tevent_common_check_signal: int (struct tevent_context *) +tevent_common_context_destructor: int (struct tevent_context *) +tevent_common_fd_destructor: int (struct tevent_fd *) +tevent_common_fd_get_flags: uint16_t (struct tevent_fd *) +tevent_common_fd_set_close_fn: void (struct tevent_fd *, tevent_fd_close_fn_t) +tevent_common_fd_set_flags: void (struct tevent_fd *, uint16_t) +tevent_common_have_events: bool (struct tevent_context *) +tevent_common_loop_immediate: bool (struct tevent_context *) +tevent_common_loop_timer_delay: struct timeval (struct tevent_context *) +tevent_common_loop_wait: int (struct tevent_context *, const char *) +tevent_common_schedule_immediate: void (struct tevent_immediate *, struct tevent_context *, tevent_immediate_handler_t, void *, const char *, const char *) +tevent_common_threaded_activate_immediate: void (struct tevent_context *) +tevent_common_wakeup: int (struct tevent_context *) +tevent_common_wakeup_fd: int (int) +tevent_common_wakeup_init: int (struct tevent_context *) +tevent_context_init: struct tevent_context *(TALLOC_CTX *) +tevent_context_init_byname: struct tevent_context *(TALLOC_CTX *, const char *) +tevent_context_init_ops: struct tevent_context *(TALLOC_CTX *, const struct tevent_ops *, void *) +tevent_debug: void (struct tevent_context *, enum tevent_debug_level, const char *, ...) +tevent_fd_get_flags: uint16_t (struct tevent_fd *) +tevent_fd_set_auto_close: void (struct tevent_fd *) +tevent_fd_set_close_fn: void (struct tevent_fd *, tevent_fd_close_fn_t) +tevent_fd_set_flags: void (struct tevent_fd *, uint16_t) +tevent_get_trace_callback: void (struct tevent_context *, tevent_trace_callback_t *, void *) +tevent_loop_allow_nesting: void (struct tevent_context *) +tevent_loop_set_nesting_hook: void (struct tevent_context *, tevent_nesting_hook, void *) +tevent_num_signals: size_t (void) +tevent_queue_add: bool (struct tevent_queue *, struct tevent_context *, struct tevent_req *, tevent_queue_trigger_fn_t, void *) +tevent_queue_add_entry: struct tevent_queue_entry *(struct tevent_queue *, struct tevent_context *, struct tevent_req *, tevent_queue_trigger_fn_t, void *) +tevent_queue_add_optimize_empty: struct tevent_queue_entry *(struct tevent_queue *, struct tevent_context *, struct tevent_req *, tevent_queue_trigger_fn_t, void *) +tevent_queue_length: size_t (struct tevent_queue *) +tevent_queue_running: bool (struct tevent_queue *) +tevent_queue_start: void (struct tevent_queue *) +tevent_queue_stop: void (struct tevent_queue *) +tevent_queue_wait_recv: bool (struct tevent_req *) +tevent_queue_wait_send: struct tevent_req *(TALLOC_CTX *, struct tevent_context *, struct tevent_queue *) +tevent_re_initialise: int (struct tevent_context *) +tevent_register_backend: bool (const char *, const struct tevent_ops *) +tevent_req_default_print: char *(struct tevent_req *, TALLOC_CTX *) +tevent_req_defer_callback: void (struct tevent_req *, struct tevent_context *) +tevent_req_is_error: bool (struct tevent_req *, enum tevent_req_state *, uint64_t *) +tevent_req_is_in_progress: bool (struct tevent_req *) +tevent_req_poll: bool (struct tevent_req *, struct tevent_context *) +tevent_req_post: struct tevent_req *(struct tevent_req *, struct tevent_context *) +tevent_req_print: char *(TALLOC_CTX *, struct tevent_req *) +tevent_req_received: void (struct tevent_req *) +tevent_req_reset_endtime: void (struct tevent_req *) +tevent_req_set_callback: void (struct tevent_req *, tevent_req_fn, void *) +tevent_req_set_cancel_fn: void (struct tevent_req *, tevent_req_cancel_fn) +tevent_req_set_cleanup_fn: void (struct tevent_req *, tevent_req_cleanup_fn) +tevent_req_set_endtime: bool (struct tevent_req *, struct tevent_context *, struct timeval) +tevent_req_set_print_fn: void (struct tevent_req *, tevent_req_print_fn) +tevent_sa_info_queue_count: size_t (void) +tevent_set_abort_fn: void (void (*)(const char *)) +tevent_set_debug: int (struct tevent_context *, void (*)(void *, enum tevent_debug_level, const char *, va_list), void *) +tevent_set_debug_stderr: int (struct tevent_context *) +tevent_set_default_backend: void (const char *) +tevent_set_trace_callback: void (struct tevent_context *, tevent_trace_callback_t, void *) +tevent_signal_support: bool (struct tevent_context *) +tevent_thread_proxy_create: struct tevent_thread_proxy *(struct tevent_context *) +tevent_thread_proxy_schedule: void (struct tevent_thread_proxy *, struct tevent_immediate **, tevent_immediate_handler_t, void *) +tevent_threaded_context_create: struct tevent_threaded_context *(TALLOC_CTX *, struct tevent_context *) +tevent_timeval_add: struct timeval (const struct timeval *, uint32_t, uint32_t) +tevent_timeval_compare: int (const struct timeval *, const struct timeval *) +tevent_timeval_current: struct timeval (void) +tevent_timeval_current_ofs: struct timeval (uint32_t, uint32_t) +tevent_timeval_is_zero: bool (const struct timeval *) +tevent_timeval_set: struct timeval (uint32_t, uint32_t) +tevent_timeval_until: struct timeval (const struct timeval *, const struct timeval *) +tevent_timeval_zero: struct timeval (void) +tevent_trace_point_callback: void (struct tevent_context *, enum tevent_trace_point) +tevent_update_timer: void (struct tevent_timer *, struct timeval) +tevent_wakeup_recv: bool (struct tevent_req *) +tevent_wakeup_send: struct tevent_req *(TALLOC_CTX *, struct tevent_context *, struct timeval) diff -Nru tevent-0.9.34/ABI/tevent-0.9.36.sigs tevent-0.9.36/ABI/tevent-0.9.36.sigs --- tevent-0.9.34/ABI/tevent-0.9.36.sigs 1970-01-01 00:00:00.000000000 +0000 +++ tevent-0.9.36/ABI/tevent-0.9.36.sigs 2018-02-23 10:28:56.000000000 +0000 @@ -0,0 +1,100 @@ +_tevent_add_fd: struct tevent_fd *(struct tevent_context *, TALLOC_CTX *, int, uint16_t, tevent_fd_handler_t, void *, const char *, const char *) +_tevent_add_signal: struct tevent_signal *(struct tevent_context *, TALLOC_CTX *, int, int, tevent_signal_handler_t, void *, const char *, const char *) +_tevent_add_timer: struct tevent_timer *(struct tevent_context *, TALLOC_CTX *, struct timeval, tevent_timer_handler_t, void *, const char *, const char *) +_tevent_create_immediate: struct tevent_immediate *(TALLOC_CTX *, const char *) +_tevent_loop_once: int (struct tevent_context *, const char *) +_tevent_loop_until: int (struct tevent_context *, bool (*)(void *), void *, const char *) +_tevent_loop_wait: int (struct tevent_context *, const char *) +_tevent_queue_create: struct tevent_queue *(TALLOC_CTX *, const char *, const char *) +_tevent_req_callback_data: void *(struct tevent_req *) +_tevent_req_cancel: bool (struct tevent_req *, const char *) +_tevent_req_create: struct tevent_req *(TALLOC_CTX *, void *, size_t, const char *, const char *) +_tevent_req_data: void *(struct tevent_req *) +_tevent_req_done: void (struct tevent_req *, const char *) +_tevent_req_error: bool (struct tevent_req *, uint64_t, const char *) +_tevent_req_nomem: bool (const void *, struct tevent_req *, const char *) +_tevent_req_notify_callback: void (struct tevent_req *, const char *) +_tevent_req_oom: void (struct tevent_req *, const char *) +_tevent_schedule_immediate: void (struct tevent_immediate *, struct tevent_context *, tevent_immediate_handler_t, void *, const char *, const char *) +_tevent_threaded_schedule_immediate: void (struct tevent_threaded_context *, struct tevent_immediate *, tevent_immediate_handler_t, void *, const char *, const char *) +tevent_backend_list: const char **(TALLOC_CTX *) +tevent_cleanup_pending_signal_handlers: void (struct tevent_signal *) +tevent_common_add_fd: struct tevent_fd *(struct tevent_context *, TALLOC_CTX *, int, uint16_t, tevent_fd_handler_t, void *, const char *, const char *) +tevent_common_add_signal: struct tevent_signal *(struct tevent_context *, TALLOC_CTX *, int, int, tevent_signal_handler_t, void *, const char *, const char *) +tevent_common_add_timer: struct tevent_timer *(struct tevent_context *, TALLOC_CTX *, struct timeval, tevent_timer_handler_t, void *, const char *, const char *) +tevent_common_add_timer_v2: struct tevent_timer *(struct tevent_context *, TALLOC_CTX *, struct timeval, tevent_timer_handler_t, void *, const char *, const char *) +tevent_common_check_signal: int (struct tevent_context *) +tevent_common_context_destructor: int (struct tevent_context *) +tevent_common_fd_destructor: int (struct tevent_fd *) +tevent_common_fd_get_flags: uint16_t (struct tevent_fd *) +tevent_common_fd_set_close_fn: void (struct tevent_fd *, tevent_fd_close_fn_t) +tevent_common_fd_set_flags: void (struct tevent_fd *, uint16_t) +tevent_common_have_events: bool (struct tevent_context *) +tevent_common_loop_immediate: bool (struct tevent_context *) +tevent_common_loop_timer_delay: struct timeval (struct tevent_context *) +tevent_common_loop_wait: int (struct tevent_context *, const char *) +tevent_common_schedule_immediate: void (struct tevent_immediate *, struct tevent_context *, tevent_immediate_handler_t, void *, const char *, const char *) +tevent_common_threaded_activate_immediate: void (struct tevent_context *) +tevent_common_wakeup: int (struct tevent_context *) +tevent_common_wakeup_fd: int (int) +tevent_common_wakeup_init: int (struct tevent_context *) +tevent_context_init: struct tevent_context *(TALLOC_CTX *) +tevent_context_init_byname: struct tevent_context *(TALLOC_CTX *, const char *) +tevent_context_init_ops: struct tevent_context *(TALLOC_CTX *, const struct tevent_ops *, void *) +tevent_debug: void (struct tevent_context *, enum tevent_debug_level, const char *, ...) +tevent_fd_get_flags: uint16_t (struct tevent_fd *) +tevent_fd_set_auto_close: void (struct tevent_fd *) +tevent_fd_set_close_fn: void (struct tevent_fd *, tevent_fd_close_fn_t) +tevent_fd_set_flags: void (struct tevent_fd *, uint16_t) +tevent_get_trace_callback: void (struct tevent_context *, tevent_trace_callback_t *, void *) +tevent_loop_allow_nesting: void (struct tevent_context *) +tevent_loop_set_nesting_hook: void (struct tevent_context *, tevent_nesting_hook, void *) +tevent_num_signals: size_t (void) +tevent_queue_add: bool (struct tevent_queue *, struct tevent_context *, struct tevent_req *, tevent_queue_trigger_fn_t, void *) +tevent_queue_add_entry: struct tevent_queue_entry *(struct tevent_queue *, struct tevent_context *, struct tevent_req *, tevent_queue_trigger_fn_t, void *) +tevent_queue_add_optimize_empty: struct tevent_queue_entry *(struct tevent_queue *, struct tevent_context *, struct tevent_req *, tevent_queue_trigger_fn_t, void *) +tevent_queue_entry_untrigger: void (struct tevent_queue_entry *) +tevent_queue_length: size_t (struct tevent_queue *) +tevent_queue_running: bool (struct tevent_queue *) +tevent_queue_start: void (struct tevent_queue *) +tevent_queue_stop: void (struct tevent_queue *) +tevent_queue_wait_recv: bool (struct tevent_req *) +tevent_queue_wait_send: struct tevent_req *(TALLOC_CTX *, struct tevent_context *, struct tevent_queue *) +tevent_re_initialise: int (struct tevent_context *) +tevent_register_backend: bool (const char *, const struct tevent_ops *) +tevent_req_default_print: char *(struct tevent_req *, TALLOC_CTX *) +tevent_req_defer_callback: void (struct tevent_req *, struct tevent_context *) +tevent_req_is_error: bool (struct tevent_req *, enum tevent_req_state *, uint64_t *) +tevent_req_is_in_progress: bool (struct tevent_req *) +tevent_req_poll: bool (struct tevent_req *, struct tevent_context *) +tevent_req_post: struct tevent_req *(struct tevent_req *, struct tevent_context *) +tevent_req_print: char *(TALLOC_CTX *, struct tevent_req *) +tevent_req_received: void (struct tevent_req *) +tevent_req_reset_endtime: void (struct tevent_req *) +tevent_req_set_callback: void (struct tevent_req *, tevent_req_fn, void *) +tevent_req_set_cancel_fn: void (struct tevent_req *, tevent_req_cancel_fn) +tevent_req_set_cleanup_fn: void (struct tevent_req *, tevent_req_cleanup_fn) +tevent_req_set_endtime: bool (struct tevent_req *, struct tevent_context *, struct timeval) +tevent_req_set_print_fn: void (struct tevent_req *, tevent_req_print_fn) +tevent_sa_info_queue_count: size_t (void) +tevent_set_abort_fn: void (void (*)(const char *)) +tevent_set_debug: int (struct tevent_context *, void (*)(void *, enum tevent_debug_level, const char *, va_list), void *) +tevent_set_debug_stderr: int (struct tevent_context *) +tevent_set_default_backend: void (const char *) +tevent_set_trace_callback: void (struct tevent_context *, tevent_trace_callback_t, void *) +tevent_signal_support: bool (struct tevent_context *) +tevent_thread_proxy_create: struct tevent_thread_proxy *(struct tevent_context *) +tevent_thread_proxy_schedule: void (struct tevent_thread_proxy *, struct tevent_immediate **, tevent_immediate_handler_t, void *) +tevent_threaded_context_create: struct tevent_threaded_context *(TALLOC_CTX *, struct tevent_context *) +tevent_timeval_add: struct timeval (const struct timeval *, uint32_t, uint32_t) +tevent_timeval_compare: int (const struct timeval *, const struct timeval *) +tevent_timeval_current: struct timeval (void) +tevent_timeval_current_ofs: struct timeval (uint32_t, uint32_t) +tevent_timeval_is_zero: bool (const struct timeval *) +tevent_timeval_set: struct timeval (uint32_t, uint32_t) +tevent_timeval_until: struct timeval (const struct timeval *, const struct timeval *) +tevent_timeval_zero: struct timeval (void) +tevent_trace_point_callback: void (struct tevent_context *, enum tevent_trace_point) +tevent_update_timer: void (struct tevent_timer *, struct timeval) +tevent_wakeup_recv: bool (struct tevent_req *) +tevent_wakeup_send: struct tevent_req *(TALLOC_CTX *, struct tevent_context *, struct timeval) diff -Nru tevent-0.9.34/buildtools/wafsamba/nothreads.py tevent-0.9.36/buildtools/wafsamba/nothreads.py --- tevent-0.9.34/buildtools/wafsamba/nothreads.py 2015-11-06 13:28:25.000000000 +0000 +++ tevent-0.9.36/buildtools/wafsamba/nothreads.py 2018-02-23 10:28:56.000000000 +0000 @@ -43,7 +43,7 @@ if tsk.__class__.stat: ret = tsk.__class__.stat(tsk) # actual call to task's run() function else: ret = tsk.call_run() - except Exception, e: + except Exception as e: tsk.err_msg = Utils.ex_stack() tsk.hasrun = EXCEPTION @@ -177,7 +177,7 @@ try: st = tsk.runnable_status() - except Exception, e: + except Exception as e: self.processed += 1 if self.stop and not Options.options.keep: tsk.hasrun = SKIPPED diff -Nru tevent-0.9.34/buildtools/wafsamba/samba_autoconf.py tevent-0.9.36/buildtools/wafsamba/samba_autoconf.py --- tevent-0.9.34/buildtools/wafsamba/samba_autoconf.py 2016-10-07 04:45:35.000000000 +0000 +++ tevent-0.9.36/buildtools/wafsamba/samba_autoconf.py 2018-02-23 10:28:56.000000000 +0000 @@ -454,7 +454,8 @@ @conf def CHECK_STRUCTURE_MEMBER(conf, structname, member, - always=False, define=None, headers=None): + always=False, define=None, headers=None, + lib=None): '''check for a structure member''' if define is None: define = 'HAVE_%s' % member.upper() @@ -463,6 +464,7 @@ define, execute=False, link=False, + lib=lib, always=always, headers=headers, local_include=False, @@ -473,10 +475,13 @@ def CHECK_CFLAGS(conf, cflags, fragment='int main(void) { return 0; }\n'): '''check if the given cflags are accepted by the compiler ''' + check_cflags = TO_LIST(cflags) + if 'WERROR_CFLAGS' in conf.env: + check_cflags.extend(conf.env['WERROR_CFLAGS']) return conf.check(fragment=fragment, execute=0, type='nolink', - ccflags=cflags, + ccflags=check_cflags, msg="Checking compiler accepts %s" % cflags) @conf @@ -708,7 +713,9 @@ testflags=True) conf.ADD_CFLAGS('-Wformat=2 -Wno-format-y2k', testflags=True) - conf.ADD_CFLAGS('-Werror=format-security -Wformat-security', testflags=True) + conf.ADD_CFLAGS('-Wno-format-zero-length', testflags=True) + conf.ADD_CFLAGS('-Werror=format-security -Wformat-security', + testflags=True, prereq_flags='-Wformat') # This check is because for ldb_search(), a NULL format string # is not an error, but some compilers complain about that. if CHECK_CFLAGS(conf, ["-Werror=format", "-Wformat=2"], ''' @@ -769,14 +776,15 @@ conf.env[name] = conf.env['PREFIX'] + default @conf -def ADD_NAMED_CFLAGS(conf, name, flags, testflags=False): +def ADD_NAMED_CFLAGS(conf, name, flags, testflags=False, prereq_flags=[]): '''add some CFLAGS to the command line optionally set testflags to ensure all the flags work ''' + prereq_flags = TO_LIST(prereq_flags) if testflags: ok_flags=[] for f in flags.split(): - if CHECK_CFLAGS(conf, f): + if CHECK_CFLAGS(conf, [f] + prereq_flags): ok_flags.append(f) flags = ok_flags if not name in conf.env: @@ -784,11 +792,12 @@ conf.env[name].extend(TO_LIST(flags)) @conf -def ADD_CFLAGS(conf, flags, testflags=False): +def ADD_CFLAGS(conf, flags, testflags=False, prereq_flags=[]): '''add some CFLAGS to the command line optionally set testflags to ensure all the flags work ''' - ADD_NAMED_CFLAGS(conf, 'EXTRA_CFLAGS', flags, testflags=testflags) + ADD_NAMED_CFLAGS(conf, 'EXTRA_CFLAGS', flags, testflags=testflags, + prereq_flags=prereq_flags) @conf def ADD_LDFLAGS(conf, flags, testflags=False): diff -Nru tevent-0.9.34/buildtools/wafsamba/samba_conftests.py tevent-0.9.36/buildtools/wafsamba/samba_conftests.py --- tevent-0.9.34/buildtools/wafsamba/samba_conftests.py 2017-04-28 08:57:26.000000000 +0000 +++ tevent-0.9.36/buildtools/wafsamba/samba_conftests.py 2018-02-23 10:28:56.000000000 +0000 @@ -50,7 +50,7 @@ ret = None try: ret = self.run_c_code(*k, **kw) - except Configure.ConfigurationError, e: + except Configure.ConfigurationError as e: self.check_message_2(kw['errmsg'], 'YELLOW') if 'mandatory' in kw and kw['mandatory']: if Logs.verbose > 1: diff -Nru tevent-0.9.34/buildtools/wafsamba/samba_dist.py tevent-0.9.36/buildtools/wafsamba/samba_dist.py --- tevent-0.9.34/buildtools/wafsamba/samba_dist.py 2017-08-24 11:27:53.000000000 +0000 +++ tevent-0.9.36/buildtools/wafsamba/samba_dist.py 2018-02-23 10:28:56.000000000 +0000 @@ -167,7 +167,7 @@ absdir = os.path.join(srcdir, dir) try: files = vcs_dir_contents(absdir) - except Exception, e: + except Exception as e: Logs.error('unable to get contents of %s: %s' % (absdir, e)) sys.exit(1) add_files_to_tarball(tar, srcdir, dir, dist_base, destdir, blacklist, files) diff -Nru tevent-0.9.34/buildtools/wafsamba/samba_python.py tevent-0.9.36/buildtools/wafsamba/samba_python.py --- tevent-0.9.34/buildtools/wafsamba/samba_python.py 2017-04-28 08:57:26.000000000 +0000 +++ tevent-0.9.36/buildtools/wafsamba/samba_python.py 2018-01-13 07:07:51.000000000 +0000 @@ -109,6 +109,7 @@ public_deps='', realname=None, cflags='', + cflags_end=None, includes='', init_function_sentinel=None, local_include=True, @@ -154,6 +155,7 @@ public_deps=public_deps, includes=includes, cflags=cflags, + cflags_end=cflags_end, local_include=local_include, vars=vars, realname=realname, diff -Nru tevent-0.9.34/buildtools/wafsamba/samba_third_party.py tevent-0.9.36/buildtools/wafsamba/samba_third_party.py --- tevent-0.9.34/buildtools/wafsamba/samba_third_party.py 2017-04-28 08:57:26.000000000 +0000 +++ tevent-0.9.36/buildtools/wafsamba/samba_third_party.py 2018-01-13 07:07:51.000000000 +0000 @@ -39,3 +39,28 @@ return conf.CHECK_BUNDLED_SYSTEM_PKG('cmocka', minversion='1.1.1') Build.BuildContext.CHECK_CMOCKA = CHECK_CMOCKA + +@conf +def CHECK_SOCKET_WRAPPER(conf): + return conf.CHECK_BUNDLED_SYSTEM_PKG('socket_wrapper', minversion='1.1.9') +Build.BuildContext.CHECK_SOCKET_WRAPPER = CHECK_SOCKET_WRAPPER + +@conf +def CHECK_NSS_WRAPPER(conf): + return conf.CHECK_BUNDLED_SYSTEM_PKG('nss_wrapper', minversion='1.1.3') +Build.BuildContext.CHECK_NSS_WRAPPER = CHECK_NSS_WRAPPER + +@conf +def CHECK_RESOLV_WRAPPER(conf): + return conf.CHECK_BUNDLED_SYSTEM_PKG('resolv_wrapper', minversion='1.1.4') +Build.BuildContext.CHECK_RESOLV_WRAPPER = CHECK_RESOLV_WRAPPER + +@conf +def CHECK_UID_WRAPPER(conf): + return conf.CHECK_BUNDLED_SYSTEM_PKG('uid_wrapper', minversion='1.2.4') +Build.BuildContext.CHECK_UID_WRAPPER = CHECK_UID_WRAPPER + +@conf +def CHECK_PAM_WRAPPER(conf): + return conf.CHECK_BUNDLED_SYSTEM_PKG('pam_wrapper', minversion='1.0.4') +Build.BuildContext.CHECK_PAM_WRAPPER = CHECK_PAM_WRAPPER diff -Nru tevent-0.9.34/buildtools/wafsamba/wafsamba.py tevent-0.9.36/buildtools/wafsamba/wafsamba.py --- tevent-0.9.34/buildtools/wafsamba/wafsamba.py 2017-10-10 07:08:20.000000000 +0000 +++ tevent-0.9.36/buildtools/wafsamba/wafsamba.py 2018-02-23 10:28:56.000000000 +0000 @@ -112,6 +112,7 @@ vnum=None, soname=None, cflags='', + cflags_end=None, ldflags='', external_library=False, realname=None, @@ -195,6 +196,7 @@ private_headers= private_headers, header_path = header_path, cflags = cflags, + cflags_end = cflags_end, group = subsystem_group, autoproto = autoproto, autoproto_extra_source=autoproto_extra_source, @@ -898,7 +900,7 @@ try: os.makedirs(destpath) os.chmod(destpath, chmod) - except OSError, e: + except OSError as e: if not os.path.isdir(destpath): raise Utils.WafError("Cannot create the folder '%s' (error: %s)" % (path, e)) Build.BuildContext.INSTALL_DIR = INSTALL_DIR diff -Nru tevent-0.9.34/buildtools/wafsamba/wscript tevent-0.9.36/buildtools/wafsamba/wscript --- tevent-0.9.34/buildtools/wafsamba/wscript 2017-04-28 08:57:26.000000000 +0000 +++ tevent-0.9.36/buildtools/wafsamba/wscript 2018-02-23 10:28:56.000000000 +0000 @@ -313,10 +313,6 @@ conf.env.GIT_LOCAL_CHANGES = Options.options.GIT_LOCAL_CHANGES - conf.CHECK_COMMAND(['uname', '-a'], - msg='Checking build system', - define='BUILD_SYSTEM', - on_target=False) conf.CHECK_UNAME() # see if we can compile and run a simple C program diff -Nru tevent-0.9.34/debian/changelog tevent-0.9.36/debian/changelog --- tevent-0.9.34/debian/changelog 2017-11-23 10:04:22.000000000 +0000 +++ tevent-0.9.36/debian/changelog 2018-05-15 13:42:59.000000000 +0000 @@ -1,3 +1,23 @@ +tevent (0.9.36-2) unstable; urgency=low + + * Upload to unstable + + -- Mathieu Parent Tue, 15 May 2018 15:42:59 +0200 + +tevent (0.9.36-1) experimental; urgency=medium + + * New upstream version 0.9.36 + - Bump build-depend on talloc to 2.1.11 + - Update symbols + * Upload to experimental + * Repository moved to salsa: Update Vcs-* fields + * gbp.conf: Enable sign-tags and pristine-tar + * Fix global-files-wildcard-not-first-paragraph-in-dep5-copyright + * Move to debhelper 11, no expected change + * Standards-Version: 4.1.3, no change + + -- Mathieu Parent Sun, 11 Mar 2018 21:06:02 +0100 + tevent (0.9.34-1) unstable; urgency=high * New upstream version 0.9.34 diff -Nru tevent-0.9.34/debian/compat tevent-0.9.36/debian/compat --- tevent-0.9.34/debian/compat 2017-10-02 11:38:30.000000000 +0000 +++ tevent-0.9.36/debian/compat 2018-03-11 19:53:04.000000000 +0000 @@ -1 +1 @@ -9 +11 diff -Nru tevent-0.9.34/debian/control tevent-0.9.36/debian/control --- tevent-0.9.34/debian/control 2017-10-26 15:33:43.000000000 +0000 +++ tevent-0.9.36/debian/control 2018-03-11 19:53:12.000000000 +0000 @@ -3,17 +3,17 @@ Priority: optional Maintainer: Debian Samba Maintainers Uploaders: Jelmer Vernooij , Mathieu Parent -Build-Depends: debhelper (>= 9), +Build-Depends: debhelper (>= 11), libaio-dev [linux-any], - libtalloc-dev (>= 2.1.10~), + libtalloc-dev (>= 2.1.11~), pkg-config, python, python-all-dev (>= 2.6.6-3), - python-talloc-dev (>= 2.1.10~) -Standards-Version: 4.1.1 + python-talloc-dev (>= 2.1.11~) +Standards-Version: 4.1.3 Homepage: https://tevent.samba.org/ -Vcs-Browser: https://anonscm.debian.org/cgit/pkg-samba/tevent.git -Vcs-Git: https://anonscm.debian.org/git/pkg-samba/tevent.git +Vcs-Browser: https://salsa.debian.org/samba-team/tevent +Vcs-Git: https://salsa.debian.org/samba-team/tevent.git Package: libtevent0 Architecture: any diff -Nru tevent-0.9.34/debian/copyright tevent-0.9.36/debian/copyright --- tevent-0.9.34/debian/copyright 2017-10-02 11:38:30.000000000 +0000 +++ tevent-0.9.36/debian/copyright 2018-03-11 19:52:20.000000000 +0000 @@ -5,10 +5,6 @@ Debianized-By: Jelmer Vernooij Debianized-Date: Tue, 23 Dec 2008 03:50:40 +0100 -License: LGPL-3+ - On Debian systems the full text of the GNU Lesser General Public License can - be found in the `/usr/share/common-licenses/LGPL-3' file. - Files: * Copyright: 2003-2007 Andrew Tridgell @@ -33,6 +29,24 @@ Copyright: 1991-1998, Free Software Foundation, Inc. License: LGPL-3+ +License: LGPL-3+ + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + . + This library 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 + Lesser General Public License for more details. + . + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + . + On Debian GNU/Linux systems, the complete text of the GNU Lesser General + Public License can be found in `/usr/share/common-licenses/LGPL-3'. + Files: lib/replace/timegm.c Copyright: Copyright 1997 Kungliga Tekniska Högskolan License: BSD-3 diff -Nru tevent-0.9.34/debian/gbp.conf tevent-0.9.36/debian/gbp.conf --- tevent-0.9.34/debian/gbp.conf 1970-01-01 00:00:00.000000000 +0000 +++ tevent-0.9.36/debian/gbp.conf 2018-03-11 19:41:47.000000000 +0000 @@ -0,0 +1,3 @@ +[DEFAULT] +sign-tags = True +pristine-tar = True diff -Nru tevent-0.9.34/debian/libtevent0.symbols tevent-0.9.36/debian/libtevent0.symbols --- tevent-0.9.34/debian/libtevent0.symbols 2017-11-21 20:13:05.000000000 +0000 +++ tevent-0.9.36/debian/libtevent0.symbols 2018-03-11 19:52:20.000000000 +0000 @@ -25,6 +25,8 @@ TEVENT_0.9.32@TEVENT_0.9.32 0.9.32 TEVENT_0.9.33@TEVENT_0.9.33 0.9.33 TEVENT_0.9.34@TEVENT_0.9.34 0.9.34 + TEVENT_0.9.35@TEVENT_0.9.35 0.9.35 + TEVENT_0.9.36@TEVENT_0.9.36 0.9.36 _tevent_add_fd@TEVENT_0.9.9 0.9.9 _tevent_add_signal@TEVENT_0.9.9 0.9.9 _tevent_add_timer@TEVENT_0.9.9 0.9.9 @@ -81,6 +83,7 @@ tevent_queue_add_entry@TEVENT_0.9.14 0.9.14 tevent_queue_add_optimize_empty@TEVENT_0.9.14 0.9.14 tevent_queue_length@TEVENT_0.9.9 0.9.9 + tevent_queue_entry_untrigger@TEVENT_0.9.36 0.9.36 tevent_queue_running@TEVENT_0.9.14 0.9.14 tevent_queue_start@TEVENT_0.9.9 0.9.9 tevent_queue_stop@TEVENT_0.9.9 0.9.9 diff -Nru tevent-0.9.34/echo_server.c tevent-0.9.36/echo_server.c --- tevent-0.9.34/echo_server.c 2016-07-28 07:17:50.000000000 +0000 +++ tevent-0.9.36/echo_server.c 2018-01-13 07:07:51.000000000 +0000 @@ -118,6 +118,7 @@ tevent_req_error(req, errno); return; } + smb_set_close_on_exec(ret); state->sock = ret; tevent_req_done(req); } diff -Nru tevent-0.9.34/lib/replace/system/nis.h tevent-0.9.36/lib/replace/system/nis.h --- tevent-0.9.34/lib/replace/system/nis.h 1970-01-01 00:00:00.000000000 +0000 +++ tevent-0.9.36/lib/replace/system/nis.h 2018-02-23 10:28:56.000000000 +0000 @@ -0,0 +1,83 @@ +/* + Unix SMB/CIFS implementation. + + nis system include wrappers + + Copyright (C) Andrew Tridgell 2004 + + ** NOTE! The following LGPL license applies to the replace + ** library. This does NOT imply that all of Samba is released + ** under the LGPL + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, see . +*/ + +#ifndef _nis_passwd_h +#define _nis_passwd_h + +#if defined(HAVE_RPC_RPC_H) +/* + * Check for AUTH_ERROR define conflict with rpc/rpc.h in prot.h. + */ +#if defined(HAVE_SYS_SECURITY_H) && defined(HAVE_RPC_AUTH_ERROR_CONFLICT) +#undef AUTH_ERROR +#endif /* HAVE_SYS_SECURITY_H && HAVE_RPC_AUTH_ERROR_CONFLICT */ +/* + * HP-UX 11.X has TCP_NODELAY and TCP_MAXSEG defined in which + * was included above. However includes which defines + * them again without checking if they already exsist. This generates + * two "Redefinition of macro" warnings for every single .c file that is + * compiled. + */ +#if defined(HPUX) && defined(TCP_NODELAY) +#undef TCP_NODELAY +#endif /* HPUX && TCP_NODELAY */ + +#if defined(HPUX) && defined(TCP_MAXSEG) +#undef TCP_MAXSEG +#endif /* HPUX && TCP_MAXSEG */ + +#include +#endif /* HAVE_RPC_RPC_H */ + + +#if defined (HAVE_NETGROUP) + +#if defined(HAVE_RPCSVC_YP_PROT_H) +/* + * HP-UX 11.X has TCP_NODELAY and TCP_MAXSEG defined in which + * was included above. However includes which defines + * them again without checking if they already exsist. This generates + * two "Redefinition of macro" warnings for every single .c file that is + * compiled. + */ +#if defined(HPUX) && defined(TCP_NODELAY) +#undef TCP_NODELAY +#endif /* HPUX && TCP_MAXSEG */ + +#if defined(HPUX) && defined(TCP_MAXSEG) +#undef TCP_MAXSEG +#endif /* HPUX && TCP_MAXSEG */ + +#include + +#endif /* HAVE_RPCSVC_YP_PROT_H */ + +#if defined(HAVE_RPCSVC_YPCLNT_H) +#include +#endif /* HAVE_RPCSVC_YPCLNT_H */ + +#endif /* HAVE_NETGROUP */ + +#endif /* _nis_passwd_h */ diff -Nru tevent-0.9.34/lib/replace/system/readline.h tevent-0.9.36/lib/replace/system/readline.h --- tevent-0.9.34/lib/replace/system/readline.h 2014-09-16 18:04:31.000000000 +0000 +++ tevent-0.9.36/lib/replace/system/readline.h 2018-01-13 07:07:51.000000000 +0000 @@ -26,6 +26,9 @@ #ifdef HAVE_LIBREADLINE # ifdef HAVE_READLINE_READLINE_H +# ifdef HAVE_READLINE_READLINE_WORKAROUND +# define _FUNCTION_DEF +# endif # include # ifdef HAVE_READLINE_HISTORY_H # include diff -Nru tevent-0.9.34/lib/replace/system/wscript_configure tevent-0.9.36/lib/replace/system/wscript_configure --- tevent-0.9.34/lib/replace/system/wscript_configure 2014-09-16 18:04:31.000000000 +0000 +++ tevent-0.9.36/lib/replace/system/wscript_configure 2018-02-23 10:28:56.000000000 +0000 @@ -1,8 +1,5 @@ #!/usr/bin/env python -conf.CHECK_HEADERS('sys/capability.h') -conf.CHECK_FUNCS('getpwnam_r getpwuid_r getpwent_r') - # solaris varients of getXXent_r conf.CHECK_C_PROTOTYPE('getpwent_r', 'struct passwd *getpwent_r(struct passwd *src, char *buf, int buflen)', @@ -19,8 +16,3 @@ 'struct group *getgrent_r(struct group *src, char *buf, size_t buflen)', define='SOLARIS_GETGRENT_R', headers='grp.h') -conf.CHECK_FUNCS('getgrouplist') -conf.CHECK_HEADERS('ctype.h locale.h langinfo.h') -conf.CHECK_HEADERS('fnmatch.h locale.h langinfo.h') -conf.CHECK_HEADERS('sys/ipc.h sys/mman.h sys/shm.h') -conf.CHECK_HEADERS('termios.h termio.h sys/termio.h') diff -Nru tevent-0.9.34/lib/replace/wscript tevent-0.9.36/lib/replace/wscript --- tevent-0.9.34/lib/replace/wscript 2017-11-13 09:57:29.000000000 +0000 +++ tevent-0.9.36/lib/replace/wscript 2018-02-23 10:28:56.000000000 +0000 @@ -5,7 +5,7 @@ blddir = 'bin' -import sys, os +import Logs, sys, os # find the buildtools directory srcdir = '.' @@ -65,14 +65,42 @@ headers='sys/inotify.h') conf.CHECK_HEADERS('security/pam_appl.h zlib.h asm/unistd.h') - conf.CHECK_HEADERS('aio.h sys/unistd.h rpc/rpc.h rpc/nettype.h alloca.h float.h') + conf.CHECK_HEADERS('aio.h sys/unistd.h alloca.h float.h') - conf.CHECK_HEADERS('rpcsvc/nis.h rpcsvc/ypclnt.h sys/sysctl.h') + conf.SET_TARGET_TYPE('tirpc', 'EMPTY') + conf.CHECK_HEADERS('rpc/rpc.h rpc/nettype.h') + if not conf.CONFIG_SET('HAVE_RPC_RPC_H'): + if conf.CHECK_CFG(package='libtirpc', args='--cflags --libs', + msg='Checking for libtirpc headers', + uselib_store='TIRPC'): + conf.CHECK_HEADERS('rpc/rpc.h rpc/nettype.h', lib='tirpc', together=True) + conf.SET_TARGET_TYPE('tirpc', 'SYSLIB') + if not conf.CONFIG_SET('HAVE_RPC_RPC_H'): + if conf.CHECK_CFG(package='libntirpc', args='--cflags', + msg='Checking for libntirpc headers', + uselib_store='TIRPC'): + conf.CHECK_HEADERS('rpc/rpc.h rpc/nettype.h', lib='tirpc', together=True) + conf.SET_TARGET_TYPE('tirpc', 'SYSLIB') + if not conf.CONFIG_SET('HAVE_RPC_RPC_H'): + Logs.error('ERROR: No rpc/rpc.h header found, tirpc or libntirpc missing?') + sys.exit(1) + + conf.SET_TARGET_TYPE('nsl', 'EMPTY') + conf.CHECK_HEADERS('rpc/rpc.h rpcsvc/yp_prot.h', lib='tirpc') + if not conf.CONFIG_SET('HAVE_RPCSVC_YP_PROT_H'): + if conf.CHECK_CFG(package='libnsl', args='--cflags --libs', + msg='Checking for libnsl', + uselib_store='NSL'): + conf.SET_TARGET_TYPE('nsl', 'SYSLIB') + conf.CHECK_HEADERS('rpc/rpc.h rpcsvc/yp_prot.h', lib='tirpc nsl') + else: + conf.SET_TARGET_TYPE('nsl', 'SYSLIB') + conf.CHECK_HEADERS('rpcsvc/nis.h rpcsvc/ypclnt.h', lib='tirpc nsl') + + conf.CHECK_HEADERS('sys/sysctl.h') conf.CHECK_HEADERS('sys/fileio.h sys/filesys.h sys/dustat.h sys/sysmacros.h') conf.CHECK_HEADERS('xfs/libxfs.h netgroup.h') - conf.CHECK_CODE('', headers='rpc/rpc.h rpcsvc/yp_prot.h', define='HAVE_RPCSVC_YP_PROT_H') - conf.CHECK_HEADERS('valgrind.h valgrind/valgrind.h valgrind/memcheck.h') conf.CHECK_HEADERS('nss_common.h nsswitch.h ns_api.h') conf.CHECK_HEADERS('sys/extattr.h sys/ea.h sys/proplist.h sys/cdefs.h') @@ -84,6 +112,9 @@ if conf.CHECK_CFLAGS('-Wno-format-truncation'): conf.define('HAVE_WNO_FORMAT_TRUNCATION', '1') + if conf.CHECK_CFLAGS('-Wno-unused-function'): + conf.define('HAVE_WNO_UNUSED_FUNCTION', '1') + # Check for process set name support conf.CHECK_CODE(''' #include diff -Nru tevent-0.9.34/lib/talloc/ABI/pytalloc-util-2.1.11.sigs tevent-0.9.36/lib/talloc/ABI/pytalloc-util-2.1.11.sigs --- tevent-0.9.34/lib/talloc/ABI/pytalloc-util-2.1.11.sigs 1970-01-01 00:00:00.000000000 +0000 +++ tevent-0.9.36/lib/talloc/ABI/pytalloc-util-2.1.11.sigs 2018-01-13 07:07:51.000000000 +0000 @@ -0,0 +1,16 @@ +_pytalloc_check_type: int (PyObject *, const char *) +_pytalloc_get_mem_ctx: TALLOC_CTX *(PyObject *) +_pytalloc_get_ptr: void *(PyObject *) +_pytalloc_get_type: void *(PyObject *, const char *) +pytalloc_BaseObject_PyType_Ready: int (PyTypeObject *) +pytalloc_BaseObject_check: int (PyObject *) +pytalloc_BaseObject_size: size_t (void) +pytalloc_CObject_FromTallocPtr: PyObject *(void *) +pytalloc_Check: int (PyObject *) +pytalloc_GenericObject_reference_ex: PyObject *(TALLOC_CTX *, void *) +pytalloc_GenericObject_steal_ex: PyObject *(TALLOC_CTX *, void *) +pytalloc_GetBaseObjectType: PyTypeObject *(void) +pytalloc_GetObjectType: PyTypeObject *(void) +pytalloc_reference_ex: PyObject *(PyTypeObject *, TALLOC_CTX *, void *) +pytalloc_steal: PyObject *(PyTypeObject *, void *) +pytalloc_steal_ex: PyObject *(PyTypeObject *, TALLOC_CTX *, void *) diff -Nru tevent-0.9.34/lib/talloc/ABI/pytalloc-util.py3-2.1.11.sigs tevent-0.9.36/lib/talloc/ABI/pytalloc-util.py3-2.1.11.sigs --- tevent-0.9.34/lib/talloc/ABI/pytalloc-util.py3-2.1.11.sigs 1970-01-01 00:00:00.000000000 +0000 +++ tevent-0.9.36/lib/talloc/ABI/pytalloc-util.py3-2.1.11.sigs 2018-01-13 07:07:51.000000000 +0000 @@ -0,0 +1,15 @@ +_pytalloc_check_type: int (PyObject *, const char *) +_pytalloc_get_mem_ctx: TALLOC_CTX *(PyObject *) +_pytalloc_get_ptr: void *(PyObject *) +_pytalloc_get_type: void *(PyObject *, const char *) +pytalloc_BaseObject_PyType_Ready: int (PyTypeObject *) +pytalloc_BaseObject_check: int (PyObject *) +pytalloc_BaseObject_size: size_t (void) +pytalloc_Check: int (PyObject *) +pytalloc_GenericObject_reference_ex: PyObject *(TALLOC_CTX *, void *) +pytalloc_GenericObject_steal_ex: PyObject *(TALLOC_CTX *, void *) +pytalloc_GetBaseObjectType: PyTypeObject *(void) +pytalloc_GetObjectType: PyTypeObject *(void) +pytalloc_reference_ex: PyObject *(PyTypeObject *, TALLOC_CTX *, void *) +pytalloc_steal: PyObject *(PyTypeObject *, void *) +pytalloc_steal_ex: PyObject *(PyTypeObject *, TALLOC_CTX *, void *) diff -Nru tevent-0.9.34/lib/talloc/ABI/talloc-2.1.11.sigs tevent-0.9.36/lib/talloc/ABI/talloc-2.1.11.sigs --- tevent-0.9.34/lib/talloc/ABI/talloc-2.1.11.sigs 1970-01-01 00:00:00.000000000 +0000 +++ tevent-0.9.36/lib/talloc/ABI/talloc-2.1.11.sigs 2018-01-13 07:07:51.000000000 +0000 @@ -0,0 +1,65 @@ +_talloc: void *(const void *, size_t) +_talloc_array: void *(const void *, size_t, unsigned int, const char *) +_talloc_free: int (void *, const char *) +_talloc_get_type_abort: void *(const void *, const char *, const char *) +_talloc_memdup: void *(const void *, const void *, size_t, const char *) +_talloc_move: void *(const void *, const void *) +_talloc_pooled_object: void *(const void *, size_t, const char *, unsigned int, size_t) +_talloc_realloc: void *(const void *, void *, size_t, const char *) +_talloc_realloc_array: void *(const void *, void *, size_t, unsigned int, const char *) +_talloc_reference_loc: void *(const void *, const void *, const char *) +_talloc_set_destructor: void (const void *, int (*)(void *)) +_talloc_steal_loc: void *(const void *, const void *, const char *) +_talloc_zero: void *(const void *, size_t, const char *) +_talloc_zero_array: void *(const void *, size_t, unsigned int, const char *) +talloc_asprintf: char *(const void *, const char *, ...) +talloc_asprintf_append: char *(char *, const char *, ...) +talloc_asprintf_append_buffer: char *(char *, const char *, ...) +talloc_autofree_context: void *(void) +talloc_check_name: void *(const void *, const char *) +talloc_disable_null_tracking: void (void) +talloc_enable_leak_report: void (void) +talloc_enable_leak_report_full: void (void) +talloc_enable_null_tracking: void (void) +talloc_enable_null_tracking_no_autofree: void (void) +talloc_find_parent_byname: void *(const void *, const char *) +talloc_free_children: void (void *) +talloc_get_name: const char *(const void *) +talloc_get_size: size_t (const void *) +talloc_increase_ref_count: int (const void *) +talloc_init: void *(const char *, ...) +talloc_is_parent: int (const void *, const void *) +talloc_named: void *(const void *, size_t, const char *, ...) +talloc_named_const: void *(const void *, size_t, const char *) +talloc_parent: void *(const void *) +talloc_parent_name: const char *(const void *) +talloc_pool: void *(const void *, size_t) +talloc_realloc_fn: void *(const void *, void *, size_t) +talloc_reference_count: size_t (const void *) +talloc_reparent: void *(const void *, const void *, const void *) +talloc_report: void (const void *, FILE *) +talloc_report_depth_cb: void (const void *, int, int, void (*)(const void *, int, int, int, void *), void *) +talloc_report_depth_file: void (const void *, int, int, FILE *) +talloc_report_full: void (const void *, FILE *) +talloc_set_abort_fn: void (void (*)(const char *)) +talloc_set_log_fn: void (void (*)(const char *)) +talloc_set_log_stderr: void (void) +talloc_set_memlimit: int (const void *, size_t) +talloc_set_name: const char *(const void *, const char *, ...) +talloc_set_name_const: void (const void *, const char *) +talloc_show_parents: void (const void *, FILE *) +talloc_strdup: char *(const void *, const char *) +talloc_strdup_append: char *(char *, const char *) +talloc_strdup_append_buffer: char *(char *, const char *) +talloc_strndup: char *(const void *, const char *, size_t) +talloc_strndup_append: char *(char *, const char *, size_t) +talloc_strndup_append_buffer: char *(char *, const char *, size_t) +talloc_test_get_magic: int (void) +talloc_total_blocks: size_t (const void *) +talloc_total_size: size_t (const void *) +talloc_unlink: int (const void *, void *) +talloc_vasprintf: char *(const void *, const char *, va_list) +talloc_vasprintf_append: char *(char *, const char *, va_list) +talloc_vasprintf_append_buffer: char *(char *, const char *, va_list) +talloc_version_major: int (void) +talloc_version_minor: int (void) diff -Nru tevent-0.9.34/lib/talloc/talloc.c tevent-0.9.36/lib/talloc/talloc.c --- tevent-0.9.34/lib/talloc/talloc.c 2017-02-27 19:23:11.000000000 +0000 +++ tevent-0.9.36/lib/talloc/talloc.c 2018-01-13 07:07:51.000000000 +0000 @@ -75,12 +75,13 @@ #define TALLOC_MAGIC_REFERENCE ((const char *)1) #define TALLOC_MAGIC_BASE 0xe814ec70 -static unsigned int talloc_magic = ( - ~TALLOC_FLAG_MASK & ( - TALLOC_MAGIC_BASE + - (TALLOC_BUILD_VERSION_MAJOR << 24) + - (TALLOC_BUILD_VERSION_MINOR << 16) + - (TALLOC_BUILD_VERSION_RELEASE << 8))); +#define TALLOC_MAGIC_NON_RANDOM ( \ + ~TALLOC_FLAG_MASK & ( \ + TALLOC_MAGIC_BASE + \ + (TALLOC_BUILD_VERSION_MAJOR << 24) + \ + (TALLOC_BUILD_VERSION_MINOR << 16) + \ + (TALLOC_BUILD_VERSION_RELEASE << 8))) +static unsigned int talloc_magic = TALLOC_MAGIC_NON_RANDOM; /* by default we abort when given a bad pointer (such as when talloc_free() is called on a pointer that came from malloc() */ @@ -332,6 +333,48 @@ return talloc_magic; } +static inline void _talloc_chunk_set_free(struct talloc_chunk *tc, + const char *location) +{ + /* + * Mark this memory as free, and also over-stamp the talloc + * magic with the old-style magic. + * + * Why? This tries to avoid a memory read use-after-free from + * disclosing our talloc magic, which would then allow an + * attacker to prepare a valid header and so run a destructor. + * + */ + tc->flags = TALLOC_MAGIC_NON_RANDOM | TALLOC_FLAG_FREE + | (tc->flags & TALLOC_FLAG_MASK); + + /* we mark the freed memory with where we called the free + * from. This means on a double free error we can report where + * the first free came from + */ + if (location) { + tc->name = location; + } +} + +static inline void _talloc_chunk_set_not_free(struct talloc_chunk *tc) +{ + /* + * Mark this memory as not free. + * + * Why? This is memory either in a pool (and so available for + * talloc's re-use or after the realloc(). We need to mark + * the memory as free() before any realloc() call as we can't + * write to the memory after that. + * + * We put back the normal magic instead of the 'not random' + * magic. + */ + + tc->flags = talloc_magic | + ((tc->flags & TALLOC_FLAG_MASK) & ~TALLOC_FLAG_FREE); +} + static void (*talloc_log_fn)(const char *message); _PUBLIC_ void talloc_set_log_fn(void (*log_fn)(const char *message)) @@ -429,11 +472,6 @@ talloc_abort_fn(reason); } -static void talloc_abort_magic(unsigned magic) -{ - talloc_abort("Bad talloc magic value - wrong talloc version used/mixed"); -} - static void talloc_abort_access_after_free(void) { talloc_abort("Bad talloc magic value - access after free"); @@ -450,19 +488,15 @@ const char *pp = (const char *)ptr; struct talloc_chunk *tc = discard_const_p(struct talloc_chunk, pp - TC_HDR_SIZE); if (unlikely((tc->flags & (TALLOC_FLAG_FREE | ~TALLOC_FLAG_MASK)) != talloc_magic)) { - if ((tc->flags & (~TALLOC_FLAG_MASK)) == talloc_magic) { - talloc_abort_magic(tc->flags & (~TALLOC_FLAG_MASK)); - return NULL; - } - - if (tc->flags & TALLOC_FLAG_FREE) { + if ((tc->flags & (TALLOC_FLAG_FREE | ~TALLOC_FLAG_MASK)) + == (TALLOC_MAGIC_NON_RANDOM | TALLOC_FLAG_FREE)) { talloc_log("talloc: access after free error - first free may be at %s\n", tc->name); talloc_abort_access_after_free(); return NULL; - } else { - talloc_abort_unknown_value(); - return NULL; } + + talloc_abort_unknown_value(); + return NULL; } return tc; } @@ -947,13 +981,7 @@ pool_tc = talloc_chunk_from_pool(pool); next_tc = tc_next_chunk(tc); - tc->flags |= TALLOC_FLAG_FREE; - - /* we mark the freed memory with where we called the free - * from. This means on a double free error we can report where - * the first free came from - */ - tc->name = location; + _talloc_chunk_set_free(tc, location); TC_INVALIDATE_FULL_CHUNK(tc); @@ -1103,13 +1131,7 @@ _tc_free_children_internal(tc, ptr, location); - tc->flags |= TALLOC_FLAG_FREE; - - /* we mark the freed memory with where we called the free - * from. This means on a double free error we can report where - * the first free came from - */ - tc->name = location; + _talloc_chunk_set_free(tc, location); if (tc->flags & TALLOC_FLAG_POOL) { struct talloc_pool_hdr *pool; @@ -1806,8 +1828,22 @@ } #endif - /* by resetting magic we catch users of the old memory */ - tc->flags |= TALLOC_FLAG_FREE; + /* + * by resetting magic we catch users of the old memory + * + * We mark this memory as free, and also over-stamp the talloc + * magic with the old-style magic. + * + * Why? This tries to avoid a memory read use-after-free from + * disclosing our talloc magic, which would then allow an + * attacker to prepare a valid header and so run a destructor. + * + * What else? We have to re-stamp back a valid normal magic + * on this memory once realloc() is done, as it will have done + * a memcpy() into the new valid memory. We can't do this in + * reverse as that would be a real use-after-free. + */ + _talloc_chunk_set_free(tc, NULL); #if ALWAYS_REALLOC if (pool_hdr) { @@ -1906,7 +1942,7 @@ if (new_chunk_size == old_chunk_size) { TC_UNDEFINE_GROW_CHUNK(tc, size); - tc->flags &= ~TALLOC_FLAG_FREE; + _talloc_chunk_set_not_free(tc); tc->size = size; return ptr; } @@ -1921,7 +1957,7 @@ if (space_left >= space_needed) { TC_UNDEFINE_GROW_CHUNK(tc, size); - tc->flags &= ~TALLOC_FLAG_FREE; + _talloc_chunk_set_not_free(tc); tc->size = size; pool_hdr->end = tc_next_chunk(tc); return ptr; @@ -1951,12 +1987,24 @@ got_new_ptr: #endif if (unlikely(!new_ptr)) { - tc->flags &= ~TALLOC_FLAG_FREE; + /* + * Ok, this is a strange spot. We have to put back + * the old talloc_magic and any flags, except the + * TALLOC_FLAG_FREE as this was not free'ed by the + * realloc() call after all + */ + _talloc_chunk_set_not_free(tc); return NULL; } + /* + * tc is now the new value from realloc(), the old memory we + * can't access any more and was preemptively marked as + * TALLOC_FLAG_FREE before the call. Now we mark it as not + * free again + */ tc = (struct talloc_chunk *)new_ptr; - tc->flags &= ~TALLOC_FLAG_FREE; + _talloc_chunk_set_not_free(tc); if (malloced) { tc->flags &= ~TALLOC_FLAG_POOLMEM; } diff -Nru tevent-0.9.34/lib/talloc/talloc.h tevent-0.9.36/lib/talloc/talloc.h --- tevent-0.9.34/lib/talloc/talloc.h 2017-04-28 08:57:26.000000000 +0000 +++ tevent-0.9.36/lib/talloc/talloc.h 2018-02-23 10:28:56.000000000 +0000 @@ -1226,7 +1226,7 @@ * * @code * ptr = talloc_array(ctx, type, count); - * if (ptr) memset(ptr, sizeof(type) * count); + * if (ptr) memset(ptr, 0, sizeof(type) * count); * @endcode */ void *talloc_zero_array(const void *ctx, #type, unsigned count); diff -Nru tevent-0.9.34/lib/talloc/testsuite.c tevent-0.9.36/lib/talloc/testsuite.c --- tevent-0.9.34/lib/talloc/testsuite.c 2017-02-27 19:23:11.000000000 +0000 +++ tevent-0.9.36/lib/talloc/testsuite.c 2018-01-13 07:07:51.000000000 +0000 @@ -2006,6 +2006,72 @@ return true; } +static void test_magic_free_protection_abort(const char *reason) +{ + /* exit with errcode 42 to communicate successful test to the parent process */ + if (strcmp(reason, "Bad talloc magic value - access after free") == 0) { + _exit(42); + } + /* not 42 */ + _exit(404); +} + +static bool test_magic_free_protection(void) +{ + void *pool = talloc_pool(NULL, 1024); + int *p1, *p2, *p3; + pid_t pid; + int exit_status; + + printf("test: magic_free_protection\n"); + p1 = talloc(pool, int); + p2 = talloc(pool, int); + + /* To avoid complaints from the compiler assign values to the p1 & p2. */ + *p1 = 6; + *p2 = 9; + + p3 = talloc_realloc(pool, p2, int, 2048); + torture_assert("pool realloc 2048", + p3 != p2, + "failed: pointer not changed"); + + /* + * Now access the memory in the pool after the realloc(). It + * should be marked as free, so use of the old pointer should + * trigger the abort function + */ + pid = fork(); + if (pid == 0) { + talloc_set_abort_fn(test_magic_free_protection_abort); + + talloc_get_name(p2); + + /* Never reached. Make compilers happy */ + return true; + } + + while (wait(&exit_status) != pid); + + if (!WIFEXITED(exit_status)) { + printf("Child exited through unexpected abnormal means\n"); + return false; + } + if (WEXITSTATUS(exit_status) != 42) { + printf("Child exited with wrong exit status\n"); + return false; + } + if (WIFSIGNALED(exit_status)) { + printf("Child recieved unexpected signal\n"); + return false; + } + + talloc_free(pool); + + printf("success: magic_free_protection\n"); + return true; +} + static void test_reset(void) { talloc_set_log_fn(test_log_stdout); @@ -2092,6 +2158,8 @@ ret &= test_autofree(); test_reset(); ret &= test_magic_protection(); + test_reset(); + ret &= test_magic_free_protection(); test_reset(); talloc_disable_null_tracking(); diff -Nru tevent-0.9.34/lib/talloc/wscript tevent-0.9.36/lib/talloc/wscript --- tevent-0.9.34/lib/talloc/wscript 2017-08-24 11:27:53.000000000 +0000 +++ tevent-0.9.36/lib/talloc/wscript 2018-01-13 07:07:51.000000000 +0000 @@ -1,7 +1,7 @@ #!/usr/bin/env python APPNAME = 'talloc' -VERSION = '2.1.10' +VERSION = '2.1.11' blddir = 'bin' diff -Nru tevent-0.9.34/tevent.h tevent-0.9.36/tevent.h --- tevent-0.9.34/tevent.h 2017-06-15 21:19:32.000000000 +0000 +++ tevent-0.9.36/tevent.h 2018-02-23 10:28:56.000000000 +0000 @@ -936,8 +936,8 @@ * * @param[in] req The request to use. * - * @return This function returns true is the request is cancelable, - * othererwise false is returned. + * @return This function returns true if the request is + * cancelable, otherwise false is returned. * * @note Even if the function returns true, the caller need to wait * for the function to complete normally. @@ -1611,6 +1611,9 @@ * already called tevent_req_notify_callback(), tevent_req_error(), * tevent_req_done() or a similar function. * + * The trigger function has no chance to see the returned + * queue_entry in the optimized case. + * * The request can be removed from the queue by calling talloc_free() * (or a similar function) on the returned queue entry. * @@ -1641,6 +1644,28 @@ void *private_data); /** + * @brief Untrigger an already triggered queue entry. + * + * If a trigger function detects that it needs to remain + * in the queue, it needs to call tevent_queue_stop() + * followed by tevent_queue_entry_untrigger(). + * + * @note In order to call tevent_queue_entry_untrigger() + * the queue must be already stopped and the given queue_entry + * must be the first one in the queue! Otherwise it calls abort(). + * + * @note You can't use this together with tevent_queue_add_optimize_empty() + * because the trigger function don't have access to the quene entry + * in the case of an empty queue. + * + * @param[in] queue_entry The queue entry to rearm. + * + * @see tevent_queue_add_entry() + * @see tevent_queue_stop() + */ +void tevent_queue_entry_untrigger(struct tevent_queue_entry *entry); + +/** * @brief Start a tevent queue. * * The queue is started by default. diff -Nru tevent-0.9.34/tevent_internal.h tevent-0.9.36/tevent_internal.h --- tevent-0.9.34/tevent_internal.h 2017-10-10 07:08:20.000000000 +0000 +++ tevent-0.9.36/tevent_internal.h 2018-01-13 07:07:51.000000000 +0000 @@ -235,7 +235,6 @@ pthread_mutex_t event_ctx_mutex; #endif struct tevent_context *event_ctx; - int wakeup_fd; }; struct tevent_debug_ops { diff -Nru tevent-0.9.34/tevent_queue.c tevent-0.9.36/tevent_queue.c --- tevent-0.9.34/tevent_queue.c 2016-08-24 08:42:51.000000000 +0000 +++ tevent-0.9.36/tevent_queue.c 2018-02-23 10:28:56.000000000 +0000 @@ -266,6 +266,19 @@ trigger, private_data, true); } +void tevent_queue_entry_untrigger(struct tevent_queue_entry *entry) +{ + if (entry->queue->running) { + abort(); + } + + if (entry->queue->list != entry) { + abort(); + } + + entry->triggered = false; +} + void tevent_queue_start(struct tevent_queue *queue) { if (queue->running) { diff -Nru tevent-0.9.34/tevent_threads.c tevent-0.9.36/tevent_threads.c --- tevent-0.9.34/tevent_threads.c 2017-11-13 09:57:29.000000000 +0000 +++ tevent-0.9.36/tevent_threads.c 2018-01-13 07:07:51.000000000 +0000 @@ -424,7 +424,6 @@ return NULL; } tctx->event_ctx = ev; - tctx->wakeup_fd = ev->wakeup_fd; ret = pthread_mutex_init(&tctx->event_ctx_mutex, NULL); if (ret != 0) { @@ -489,14 +488,13 @@ } DLIST_ADD_END(ev->scheduled_immediates, im); + wakeup_fd = ev->wakeup_fd; ret = pthread_mutex_unlock(&ev->scheduled_mutex); if (ret != 0) { abort(); } - wakeup_fd = tctx->wakeup_fd; - ret = pthread_mutex_unlock(&tctx->event_ctx_mutex); if (ret != 0) { abort(); diff -Nru tevent-0.9.34/wscript tevent-0.9.36/wscript --- tevent-0.9.34/wscript 2017-11-13 09:57:39.000000000 +0000 +++ tevent-0.9.36/wscript 2018-02-23 10:28:56.000000000 +0000 @@ -1,7 +1,7 @@ #!/usr/bin/env python APPNAME = 'tevent' -VERSION = '0.9.34' +VERSION = '0.9.36' blddir = 'bin'