summaryrefslogtreecommitdiff
path: root/source/utils/net_status.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/utils/net_status.c')
-rw-r--r--source/utils/net_status.c86
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;
}