[SCM] Samba Shared Repository - branch master updated
Jeremy Allison
jra at samba.org
Thu Oct 22 00:15:04 UTC 2015
The branch, master has been updated
via f1c49d7 messaging: Fix creating the dgm lockfile
via 3e705ad lib/tsocket: fix non-blockging connect() error handling
via 41fe3cf README.Coding: Update section about debug macros
via b041a58 Remove function name from callers of DBG_*
via 1d3df7e debug: Prefix messages from DBG_* with function name
from 38d547b dcerpc.idl: accept invalid dcerpc_bind_nak pdus
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit f1c49d7656b29b2e77e9373ccb863f07e19e5299
Author: Volker Lendecke <vl at samba.org>
Date: Wed Oct 21 15:15:51 2015 +0200
messaging: Fix creating the dgm lockfile
There might be situations where the lock directory moves to a
location where a previous installation left the datagram sockets
(Yes, I just came across this). We can't really deal with it except
by just removing the socket without properly checking.
Signed-off-by: Volker Lendecke <vl at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
Autobuild-User(master): Jeremy Allison <jra at samba.org>
Autobuild-Date(master): Thu Oct 22 02:14:29 CEST 2015 on sn-devel-104
commit 3e705adcab8404ee6e5f71a38e98eeaca29a5b61
Author: Ralph Boehme <slow at samba.org>
Date: Wed Oct 21 16:08:00 2015 +0200
lib/tsocket: fix non-blockging connect() error handling
Non-blockging connect() either returns immediate success, or -1 with
errno EINPROGESS as indication that the connection is pending. All other
errnos indicate immediate failure.
Signed-off-by: Ralph Boehme <slow at samba.org>
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 41fe3cfcb5fa2441da9180e57255a3b7fa23da12
Author: Christof Schmitt <cs at samba.org>
Date: Wed Oct 21 11:12:22 2015 -0700
README.Coding: Update section about debug macros
Signed-off-by: Christof Schmitt <cs at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit b041a589ae680de38f4e9c8c4979c3972a4e7b07
Author: Christof Schmitt <cs at samba.org>
Date: Wed Oct 21 11:07:57 2015 -0700
Remove function name from callers of DBG_*
It is now added automatically.
Signed-off-by: Christof Schmitt <cs at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
commit 1d3df7e18def05c4552f4647b3644f7b7952fc66
Author: Christof Schmitt <cs at samba.org>
Date: Wed Oct 21 11:07:35 2015 -0700
debug: Prefix messages from DBG_* with function name
Signed-off-by: Christof Schmitt <cs at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
-----------------------------------------------------------------------
Summary of changes:
README.Coding | 24 +++++++++++++++---------
lib/tsocket/tsocket_bsd.c | 13 +++++--------
lib/util/charset/util_str.c | 4 ++--
lib/util/debug.h | 18 +++++++++++++-----
source3/lib/ctdbd_conn.c | 2 +-
source3/lib/dbwrap/dbwrap_ctdb.c | 2 +-
source3/lib/dbwrap/dbwrap_watch.c | 11 +++++------
source3/lib/messages_dgm.c | 20 ++++++++++++++++++++
source3/lib/messages_dgm_ref.c | 11 +++++------
source3/lib/util.c | 4 ++--
10 files changed, 69 insertions(+), 40 deletions(-)
Changeset truncated at 500 lines:
diff --git a/README.Coding b/README.Coding
index 9073b77..29bad1b 100644
--- a/README.Coding
+++ b/README.Coding
@@ -417,15 +417,21 @@ The only exception is the test code that depends repeated use of calls
like CHECK_STATUS, CHECK_VAL and others.
-Function names in DEBUG statements
-----------------------------------
+DEBUG statements
+----------------
-Many DEBUG statements contain the name of the function they appear in. This is
-not a good idea, as this is prone to bitrot. Function names change, code
-moves, but the DEBUG statements are not adapted. Use %s and __func__ for this:
+Use these following macros instead of DEBUG:
-Bad Example:
- DEBUG(0, ("strstr_m: src malloc fail\n"));
+DBG_ERR log level 0 error conditions
+DBG_WARNING log level 1 warning conditions
+DBG_NOTICE log level 3 normal, but significant, condition
+DBG_INFO log level 5 informational message
+DBG_DEBUG log level 10 debug-level message
-Good Example:
- DEBUG(0, ("%s: src malloc fail\n", __func__));
+Example usage:
+
+DBG_ERR("Memory allocation failed\n");
+DBG_DEBUG("Received %d bytes\n", count);
+
+The messages from these macros are automatically prefixed with the
+function name.
diff --git a/lib/tsocket/tsocket_bsd.c b/lib/tsocket/tsocket_bsd.c
index 8203755..ac0617d 100644
--- a/lib/tsocket/tsocket_bsd.c
+++ b/lib/tsocket/tsocket_bsd.c
@@ -2114,8 +2114,6 @@ static struct tevent_req *tstream_bsd_connect_send(TALLOC_CTX *mem_ctx,
talloc_get_type_abort(remote->private_data,
struct tsocket_address_bsd);
int ret;
- int err;
- bool retry;
bool do_bind = false;
bool do_reuseaddr = false;
bool do_ipv6only = false;
@@ -2256,12 +2254,11 @@ static struct tevent_req *tstream_bsd_connect_send(TALLOC_CTX *mem_ctx,
}
ret = connect(state->fd, &rbsda->u.sa, rbsda->sa_socklen);
- err = tsocket_bsd_error_from_errno(ret, errno, &retry);
- if (retry) {
- /* retry later */
- goto async;
- }
- if (tevent_req_error(req, err)) {
+ if (ret == -1) {
+ if (errno == EINPROGRESS) {
+ goto async;
+ }
+ tevent_req_error(req, errno);
goto post;
}
diff --git a/lib/util/charset/util_str.c b/lib/util/charset/util_str.c
index c1b81f1..ef8a82a 100644
--- a/lib/util/charset/util_str.c
+++ b/lib/util/charset/util_str.c
@@ -545,13 +545,13 @@ char *strstr_m(const char *src, const char *findstr)
frame = talloc_stackframe();
if (!push_ucs2_talloc(frame, &src_w, src, &converted_size)) {
- DBG_WARNING("strstr_m: src malloc fail\n");
+ DBG_WARNING("src malloc fail\n");
TALLOC_FREE(frame);
return NULL;
}
if (!push_ucs2_talloc(frame, &find_w, findstr, &converted_size)) {
- DBG_WARNING("strstr_m: find malloc fail\n");
+ DBG_WARNING("find malloc fail\n");
TALLOC_FREE(frame);
return NULL;
}
diff --git a/lib/util/debug.h b/lib/util/debug.h
index e399379..2a0a05c 100644
--- a/lib/util/debug.h
+++ b/lib/util/debug.h
@@ -204,6 +204,14 @@ extern int *DEBUGLEVEL_CLASS;
#define DEBUGSEP(level)\
DEBUG((level),("===============================================================\n"))
+/* Prefix messages with the function name */
+#define DBG_PREFIX(level, body ) \
+ (void)( ((level) <= MAX_DEBUG_LEVEL) && \
+ unlikely(DEBUGLEVEL_CLASS[ DBGC_CLASS ] >= (level)) \
+ && (dbghdrclass(level, DBGC_CLASS, __location__, __func__ )) \
+ && (dbgtext("%s: ", __func__)) \
+ && (dbgtext body) )
+
/*
* Debug levels matching RFC 3164
*/
@@ -213,11 +221,11 @@ extern int *DEBUGLEVEL_CLASS;
#define DBGLVL_INFO 5 /* informational message */
#define DBGLVL_DEBUG 10 /* debug-level message */
-#define DBG_ERR(...) DEBUG(DBGLVL_ERR, (__VA_ARGS__))
-#define DBG_WARNING(...) DEBUG(DBGLVL_WARNING, (__VA_ARGS__))
-#define DBG_NOTICE(...) DEBUG(DBGLVL_NOTICE, (__VA_ARGS__))
-#define DBG_INFO(...) DEBUG(DBGLVL_INFO, (__VA_ARGS__))
-#define DBG_DEBUG(...) DEBUG(DBGLVL_DEBUG, (__VA_ARGS__))
+#define DBG_ERR(...) DBG_PREFIX(DBGLVL_ERR, (__VA_ARGS__))
+#define DBG_WARNING(...) DBG_PREFIX(DBGLVL_WARNING, (__VA_ARGS__))
+#define DBG_NOTICE(...) DBG_PREFIX(DBGLVL_NOTICE, (__VA_ARGS__))
+#define DBG_INFO(...) DBG_PREFIX(DBGLVL_INFO, (__VA_ARGS__))
+#define DBG_DEBUG(...) DBG_PREFIX(DBGLVL_DEBUG, (__VA_ARGS__))
/* The following definitions come from lib/debug.c */
diff --git a/source3/lib/ctdbd_conn.c b/source3/lib/ctdbd_conn.c
index c7c6356..9187ee7 100644
--- a/source3/lib/ctdbd_conn.c
+++ b/source3/lib/ctdbd_conn.c
@@ -431,7 +431,7 @@ static int ctdbd_init_connection(TALLOC_CTX *mem_ctx,
conn->sockname = talloc_strdup(conn, sockname);
if (conn->sockname == NULL) {
- DBG_ERR("%s: talloc failed\n", __func__);
+ DBG_ERR("talloc failed\n");
ret = ENOMEM;
goto fail;
}
diff --git a/source3/lib/dbwrap/dbwrap_ctdb.c b/source3/lib/dbwrap/dbwrap_ctdb.c
index 9066beb..457f427 100644
--- a/source3/lib/dbwrap/dbwrap_ctdb.c
+++ b/source3/lib/dbwrap/dbwrap_ctdb.c
@@ -1664,7 +1664,7 @@ struct db_context *db_open_ctdb(TALLOC_CTX *mem_ctx,
fd = tdb_fd(db_ctdb->wtdb->tdb);
ret = fchmod(fd, mode);
if (ret == -1) {
- DBG_WARNING("%s: fchmod failed: %s\n", __func__,
+ DBG_WARNING("fchmod failed: %s\n",
strerror(errno));
TALLOC_FREE(result);
return NULL;
diff --git a/source3/lib/dbwrap/dbwrap_watch.c b/source3/lib/dbwrap/dbwrap_watch.c
index 426fe77..09e67fb 100644
--- a/source3/lib/dbwrap/dbwrap_watch.c
+++ b/source3/lib/dbwrap/dbwrap_watch.c
@@ -295,8 +295,7 @@ static void dbwrap_watch_record_stored_fn(TDB_DATA key, TDB_DATA data,
size_t i, num_ids;
if ((data.dsize % sizeof(struct server_id)) != 0) {
- DBG_WARNING("%s: Invalid data size: %zu\n", __func__,
- data.dsize);
+ DBG_WARNING("Invalid data size: %zu\n", data.dsize);
return;
}
num_ids = data.dsize / sizeof(struct server_id);
@@ -312,8 +311,8 @@ static void dbwrap_watch_record_stored_fn(TDB_DATA key, TDB_DATA data,
key.dptr, key.dsize);
if (!NT_STATUS_IS_OK(status)) {
struct server_id_buf tmp;
- DBG_WARNING("%s: messaging_send to %s failed: %s\n",
- __func__, server_id_str_buf(dst, &tmp),
+ DBG_WARNING("messaging_send to %s failed: %s\n",
+ server_id_str_buf(dst, &tmp),
nt_errstr(status));
}
}
@@ -346,8 +345,8 @@ static void dbwrap_watch_record_stored(struct db_context *db,
return;
}
if (!NT_STATUS_IS_OK(status)) {
- DBG_WARNING("%s: dbwrap_parse_record failed: %s\n",
- __func__, nt_errstr(status));
+ DBG_WARNING("dbwrap_parse_record failed: %s\n",
+ nt_errstr(status));
}
}
diff --git a/source3/lib/messages_dgm.c b/source3/lib/messages_dgm.c
index 006e917..a802882 100644
--- a/source3/lib/messages_dgm.c
+++ b/source3/lib/messages_dgm.c
@@ -88,6 +88,26 @@ static int messaging_dgm_lockfile_create(struct messaging_dgm_context *ctx,
lockfile_fd = open(lockfile_name.buf, O_NONBLOCK|O_CREAT|O_RDWR,
0644);
+
+ if ((lockfile_fd == -1) &&
+ ((errno == ENXIO) /* Linux */ ||
+ (errno == ENODEV) /* Linux kernel bug */ ||
+ (errno == EOPNOTSUPP) /* FreeBSD */)) {
+ /*
+ * Huh -- a socket? This might be a stale socket from
+ * an upgrade of Samba. Just unlink and retry, nobody
+ * else is supposed to be here at this time.
+ *
+ * Yes, this is racy, but I don't see a way to deal
+ * with this properly.
+ */
+ unlink(lockfile_name.buf);
+
+ lockfile_fd = open(lockfile_name.buf,
+ O_NONBLOCK|O_CREAT|O_WRONLY,
+ 0644);
+ }
+
if (lockfile_fd == -1) {
ret = errno;
DEBUG(1, ("%s: open failed: %s\n", __func__, strerror(errno)));
diff --git a/source3/lib/messages_dgm_ref.c b/source3/lib/messages_dgm_ref.c
index e3b2d88..3ea8b9d 100644
--- a/source3/lib/messages_dgm_ref.c
+++ b/source3/lib/messages_dgm_ref.c
@@ -73,8 +73,7 @@ void *messaging_dgm_ref(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
ret = messaging_dgm_init(ev, unique, socket_dir, lockfile_dir,
msg_dgm_ref_recv, NULL);
- DBG_DEBUG("%s: messaging_dgm_init returned %s\n", __func__,
- strerror(ret));
+ DBG_DEBUG("messaging_dgm_init returned %s\n", strerror(ret));
if (ret != 0) {
DEBUG(10, ("messaging_dgm_init failed: %s\n",
strerror(ret)));
@@ -86,8 +85,8 @@ void *messaging_dgm_ref(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
} else {
int ret;
ret = messaging_dgm_get_unique(getpid(), unique);
- DBG_DEBUG("%s: messaging_dgm_get_unique returned %s\n",
- __func__, strerror(ret));
+ DBG_DEBUG("messaging_dgm_get_unique returned %s\n",
+ strerror(ret));
if (ret != 0) {
TALLOC_FREE(result);
*err = ret;
@@ -103,7 +102,7 @@ void *messaging_dgm_ref(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
}
}
- DBG_DEBUG("%s: unique = %"PRIu64"\n", __func__, *unique);
+ DBG_DEBUG("unique = %"PRIu64"\n", *unique);
refs = tmp_refs;
@@ -140,7 +139,7 @@ static int msg_dgm_ref_destructor(struct msg_dgm_ref *r)
TALLOC_FREE(r->tevent_handle);
- DBG_DEBUG("%s: refs=%p\n", __func__, refs);
+ DBG_DEBUG("refs=%p\n", refs);
if (refs == NULL) {
messaging_dgm_destroy();
diff --git a/source3/lib/util.c b/source3/lib/util.c
index 7c24f8a..3a8bc67 100644
--- a/source3/lib/util.c
+++ b/source3/lib/util.c
@@ -1967,8 +1967,8 @@ struct server_id pid_to_procid(pid_t pid)
ret = messaging_dgm_get_unique(pid, &unique);
if (ret != 0) {
- DBG_WARNING("%s: messaging_dgm_get_unique failed: %s\n",
- __func__, strerror(ret));
+ DBG_WARNING("messaging_dgm_get_unique failed: %s\n",
+ strerror(ret));
}
return (struct server_id) {
--
Samba Shared Repository
More information about the samba-cvs
mailing list