--- samba-3.0.original/source/utils/status.c.aw 2002-11-28 14:48:23 +0200 +++ samba-3.0.original/source/utils/status.c 2002-11-28 15:31:53 +0200 @@ -42,6 +42,7 @@ static int verbose, brief; static int shares_only = 0; /* Added by RJS */ static int locks_only = 0; /* Added by RJS */ +static int old_style = 0; /* Added by EMI */ static BOOL processes_only=False; static int show_brl; @@ -518,6 +519,29 @@ return 0; } +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) + return 0; + + if (!process_exists(crec.pid) || !Ucrit_checkUsername(uidtoname(crec.uid))) { + return 0; + } + d_printf("%-24.24s :%-15s :%-8s :%5d :%-8s :(%s) :%s", + crec.name,uidtoname(crec.uid),gidtoname(crec.gid),(int)crec.pid, + crec.machine,crec.addr, + asctime(LocalTime(&crec.start))); + + return 0; +} + static int traverse_sessionid(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state) { struct sessionid sessionid; @@ -559,6 +583,7 @@ {"profile", 'P', POPT_ARG_NONE, &profile_only, 'P', "Do profiling" }, #endif /* WITH_PROFILE */ {"byterange", 'B', POPT_ARG_NONE, &show_brl, 'B', "Include byte range locks"}, + {"old-style", 'o', POPT_ARG_NONE, &old_style, 'o', "Display data using old style"}, POPT_COMMON_SAMBA POPT_TABLEEND }; @@ -596,6 +621,7 @@ return profile_dump(); } + if (old_style) goto old; tdb = tdb_open_log(lock_path("sessionid.tdb"), 0, TDB_DEFAULT, O_RDONLY, 0); if (!tdb) { d_printf("sessionid.tdb not initialised\n"); @@ -609,7 +635,7 @@ tdb_traverse(tdb, traverse_sessionid, NULL); tdb_close(tdb); } - + old: tdb = tdb_open_log(lock_path("connections.tdb"), 0, TDB_DEFAULT, O_RDONLY, 0); if (!tdb) { d_printf("%s not initialised\n", lock_path("connections.tdb")); @@ -622,15 +648,23 @@ if (brief) exit(0); - d_printf("\nService pid machine Connected at\n"); - d_printf("-------------------------------------------------------\n"); + if (old_style) { + d_printf("\nService uid gid pid machine\n"); + d_printf("------------------------------------------------------------------------\n"); + + tdb_traverse(tdb, traverse_fn2, NULL); + } else { + d_printf("\nService pid machine Connected at\n"); + d_printf("-------------------------------------------------------\n"); - tdb_traverse(tdb, traverse_fn1, NULL); + tdb_traverse(tdb, traverse_fn1, NULL); + } tdb_close(tdb); } locks: if (processes_only) exit(0); + if (old_style) exit(0); if (!shares_only) { int ret; @@ -659,3 +693,4 @@ return (0); } +