diff options
Diffstat (limited to 'source/utils/net_status.c')
-rw-r--r-- | source/utils/net_status.c | 86 |
1 files changed, 60 insertions, 26 deletions
diff --git a/source/utils/net_status.c b/source/utils/net_status.c index 80fba51b37a..354111f6092 100644 --- a/source/utils/net_status.c +++ b/source/utils/net_status.c @@ -31,18 +31,18 @@ static int show_session(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, memcpy(&sessionid, dbuf.dptr, sizeof(sessionid)); - if (!process_exists(sessionid.pid)) { + if (!process_exists_by_pid(sessionid.pid)) { return 0; } if (*parseable) { - d_printf("%s\\%s\\%s\\%s\\%s\n", - procid_str_static(&sessionid.pid), uidtoname(sessionid.uid), + d_printf("%d\\%s\\%s\\%s\\%s\n", + (int)sessionid.pid, uidtoname(sessionid.uid), gidtoname(sessionid.gid), sessionid.remote_machine, sessionid.hostname); } else { - d_printf("%7s %-12s %-12s %-12s (%s)\n", - procid_str_static(&sessionid.pid), uidtoname(sessionid.uid), + d_printf("%5d %-12s %-12s %-12s (%s)\n", + (int)sessionid.pid, uidtoname(sessionid.uid), gidtoname(sessionid.gid), sessionid.remote_machine, sessionid.hostname); } @@ -84,22 +84,27 @@ static int net_status_sessions(int argc, const char **argv) return 0; } -static int show_share(struct db_record *rec, - const struct connections_key *key, - const struct connections_data *crec, +static int show_share(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state) { - if (crec->cnum == -1) + struct connections_data crec; + + if (dbuf.dsize != sizeof(crec)) return 0; - if (!process_exists(crec->pid)) { + memcpy(&crec, dbuf.dptr, sizeof(crec)); + + if (crec.cnum == -1) + return 0; + + if (!process_exists(crec.pid)) { return 0; } d_printf("%-10.10s %s %-12s %s", - crec->servicename, procid_str_static(&crec->pid), - crec->machine, - time_to_asc(crec->start)); + crec.servicename,procid_str_static(&crec.pid), + crec.machine, + time_to_asc(crec.start)); return 0; } @@ -120,7 +125,7 @@ static int collect_pid(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, memcpy(&sessionid, dbuf.dptr, sizeof(sessionid)); - if (!process_exists(sessionid.pid)) + if (!process_exists_by_pid(sessionid.pid)) return 0; ids->num_entries += 1; @@ -134,37 +139,41 @@ static int collect_pid(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, return 0; } -static int show_share_parseable(struct db_record *rec, - const struct connections_key *key, - const struct connections_data *crec, +static int show_share_parseable(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state) { struct sessionids *ids = (struct sessionids *)state; + struct connections_data crec; int i; BOOL guest = True; - if (crec->cnum == -1) + if (dbuf.dsize != sizeof(crec)) + return 0; + + memcpy(&crec, dbuf.dptr, sizeof(crec)); + + if (crec.cnum == -1) return 0; - if (!process_exists(crec->pid)) { + if (!process_exists(crec.pid)) { return 0; } for (i=0; i<ids->num_entries; i++) { - struct server_id id = ids->entries[i].pid; - if (procid_equal(&id, &crec->pid)) { + struct process_id id = pid_to_procid(ids->entries[i].pid); + if (procid_equal(&id, &crec.pid)) { guest = False; break; } } d_printf("%s\\%s\\%s\\%s\\%s\\%s\\%s", - crec->servicename,procid_str_static(&crec->pid), + crec.servicename,procid_str_static(&crec.pid), guest ? "" : uidtoname(ids->entries[i].uid), guest ? "" : gidtoname(ids->entries[i].gid), - crec->machine, + crec.machine, guest ? "" : ids->entries[i].hostname, - time_to_asc(crec->start)); + time_to_asc(crec.start)); return 0; } @@ -188,7 +197,18 @@ static int net_status_shares_parseable(int argc, const char **argv) tdb_traverse(tdb, collect_pid, &ids); tdb_close(tdb); - connections_forall(show_share_parseable, &ids); + tdb = tdb_open_log(lock_path("connections.tdb"), 0, + TDB_DEFAULT, O_RDONLY, 0); + + if (tdb == NULL) { + d_fprintf(stderr, "%s not initialised\n", lock_path("connections.tdb")); + d_fprintf(stderr, "This is normal if no SMB client has ever " + "connected to your server.\n"); + return -1; + } + + tdb_traverse(tdb, show_share_parseable, &ids); + tdb_close(tdb); SAFE_FREE(ids.entries); @@ -197,6 +217,8 @@ static int net_status_shares_parseable(int argc, const char **argv) static int net_status_shares(int argc, const char **argv) { + TDB_CONTEXT *tdb; + if (argc == 0) { d_printf("\nService pid machine " @@ -204,7 +226,19 @@ static int net_status_shares(int argc, const char **argv) d_printf("-------------------------------------" "------------------\n"); - connections_forall(show_share, NULL); + tdb = tdb_open_log(lock_path("connections.tdb"), 0, + TDB_DEFAULT, O_RDONLY, 0); + + if (tdb == NULL) { + d_fprintf(stderr, "%s not initialised\n", + lock_path("connections.tdb")); + d_fprintf(stderr, "This is normal if no SMB client has " + "ever connected to your server.\n"); + return -1; + } + + tdb_traverse(tdb, show_share, NULL); + tdb_close(tdb); return 0; } |