diff options
author | Jeremy Allison <jra@samba.org> | 2001-05-15 18:12:02 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2001-05-15 18:12:02 +0000 |
commit | c6cd42a6791e26174eb795fd08ddbbd797e5a9cf (patch) | |
tree | 5a72544ea32cdca9476db596435c90863ccca1dc /source/web | |
parent | b94cfb6843dc7fc985917395d3e0d953501b9197 (diff) | |
download | samba-c6cd42a6791e26174eb795fd08ddbbd797e5a9cf.tar.gz samba-c6cd42a6791e26174eb795fd08ddbbd797e5a9cf.tar.xz samba-c6cd42a6791e26174eb795fd08ddbbd797e5a9cf.zip |
Check sizes of data entries in connections.tdb before deciding they're crecs...
We will need this when we use finer grained locking for max connections.
Jeremy.
Diffstat (limited to 'source/web')
-rw-r--r-- | source/web/statuspage.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/source/web/statuspage.c b/source/web/statuspage.c index 27a40d16958..51f2e8f00e6 100644 --- a/source/web/statuspage.c +++ b/source/web/statuspage.c @@ -1,6 +1,6 @@ /* Unix SMB/Netbios implementation. - Version 1.9. + Version 2.2. web status page Copyright (C) Andrew Tridgell 1997-1998 @@ -76,6 +76,10 @@ static void print_share_mode(share_mode_entry *e, char *fname) static int traverse_fn1(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void* state) { struct connections_data crec; + + if (dbuf.dsize != sizeof(crec)) + return 0; + memcpy(&crec, dbuf.dptr, sizeof(crec)); if (crec.cnum == -1 && process_exists(crec.pid)) { @@ -92,10 +96,14 @@ static int traverse_fn1(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void* st static int traverse_fn2(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void* state) { struct connections_data crec; + + if (dbuf.dsize != sizeof(crec)) + return 0; + memcpy(&crec, dbuf.dptr, sizeof(crec)); - if (crec.cnum != -1 || !process_exists(crec.pid) || - (crec.pid == smbd_pid)) return 0; + if (crec.cnum != -1 || !process_exists(crec.pid) || (crec.pid == smbd_pid)) + return 0; printf("<tr><td>%d</td><td>%s</td><td>%s</td><td>%s</td>\n", (int)crec.pid, @@ -114,9 +122,14 @@ static int traverse_fn2(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void* st static int traverse_fn3(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void* state) { struct connections_data crec; + + if (dbuf.dsize != sizeof(crec)) + return 0; + memcpy(&crec, dbuf.dptr, sizeof(crec)); - if (crec.cnum == -1 || !process_exists(crec.pid)) return 0; + if (crec.cnum == -1 || !process_exists(crec.pid)) + return 0; printf("<tr><td>%s</td><td>%s</td><td>%s</td><td>%d</td><td>%s</td><td>%s</td></tr>\n", crec.name,uidtoname(crec.uid), @@ -278,4 +291,3 @@ void status_page(void) printf("//-->\n</script>\n"); } } - |