summaryrefslogtreecommitdiff
path: root/source/utils
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2001-08-22 19:11:55 +0000
committerAndrew Bartlett <abartlet@samba.org>2001-08-22 19:11:55 +0000
commitb068ad300527c44673bbee0aede7849199c89de7 (patch)
tree3af1d65b08beefd14392f5f5a66e004e6c4578e0 /source/utils
parent3e60636f2b7003ea1e915bc7c2d2e8dec5667bbd (diff)
downloadsamba-b068ad300527c44673bbee0aede7849199c89de7.tar.gz
A few changes:
drop paramaters: status utmp hostname change session code to always record each vuid current on the server. The sessionid struct is no longer packed, as I couldn't get that to work ;-) change smbstatus to show this info and less of the connections.tdb info (its not actualy that accurate). I'll get swat doing some of this shortly.
Diffstat (limited to 'source/utils')
-rw-r--r--source/utils/status.c104
1 files changed, 44 insertions, 60 deletions
diff --git a/source/utils/status.c b/source/utils/status.c
index e5beb6403c8..36de6858f10 100644
--- a/source/utils/status.c
+++ b/source/utils/status.c
@@ -198,41 +198,33 @@ static int traverse_fn1(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *st
return 0;
}
- if (brief) {
- ptr=srecs;
- while (ptr!=NULL) {
- if ((ptr->pid==crec.pid)&&(strncmp(ptr->machine,crec.machine,30)==0)) {
- if (ptr->start > crec.start)
- ptr->start=crec.start;
- break;
- }
- ptr=ptr->next;
- }
- if (ptr==NULL) {
- ptr=(struct session_record *) malloc(sizeof(struct session_record));
- ptr->uid=crec.uid;
- ptr->pid=crec.pid;
- ptr->start=crec.start;
- strncpy(ptr->machine,crec.machine,30);
- ptr->machine[30]='\0';
- ptr->next=srecs;
- srecs=ptr;
- }
- } else {
- Ucrit_addPid(crec.pid);
- if (processes_only) {
- if (last_pid != crec.pid)
- printf("%d\n",(int)crec.pid);
- last_pid = crec.pid; /* XXXX we can still get repeats, have to
- add a sort at some time */
- } else {
- printf("%-10.10s %-8s %-8s %5d %-8s (%s) %s",
- crec.name,uidtoname(crec.uid),gidtoname(crec.gid),(int)crec.pid,
- crec.machine,crec.addr,
- asctime(LocalTime(&crec.start)));
- }
+ printf("%-10.10s %5d %-12s %s",
+ crec.name,(int)crec.pid,
+ crec.machine,
+ asctime(LocalTime(&crec.start)));
+
+ return 0;
+}
+
+static int traverse_sessionid(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state)
+{
+ static pid_t last_pid;
+ struct session_record *ptr;
+ struct sessionid sessionid;
+
+ if (dbuf.dsize != sizeof(sessionid))
+ return 0;
+
+ memcpy(&sessionid, dbuf.dptr, sizeof(sessionid));
+
+ if (!process_exists(sessionid.pid) || !Ucrit_checkUsername(uidtoname(sessionid.uid))) {
+ return 0;
}
+ printf("%5d %-12s %-12s %-12s (%s)\n",
+ (int)sessionid.pid, uidtoname(sessionid.uid), gidtoname(sessionid.gid),
+ sessionid.remote_machine, sessionid.hostname);
+
return 0;
}
@@ -316,46 +308,38 @@ static int traverse_fn1(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *st
return profile_dump();
}
+ tdb = tdb_open_log(lock_path("sessionid.tdb"), 0, USE_TDB_MMAP_FLAG, O_RDONLY, 0);
+ if (!tdb) {
+ printf("sessionid.tdb not initialised\n");
+ }
+
+ if (locks_only) goto locks;
+
+ printf("\nSamba version %s\n",VERSION);
+ printf("PID Username Group Machine \n");
+ printf("-------------------------------------------------------------------\n");
+
+ tdb_traverse(tdb, traverse_sessionid, NULL);
+ tdb_close(tdb);
+
tdb = tdb_open_log(lock_path("connections.tdb"), 0, USE_TDB_MMAP_FLAG, O_RDONLY, 0);
if (!tdb) {
printf("connections.tdb not initialised\n");
- if (!lp_status(-1))
- printf("You need to have status=yes in your smb config file\n");
- return(0);
} else if (verbose) {
printf("Opened status file %s\n", fname);
}
- if (locks_only) goto locks;
+ if (brief)
+ exit(0);
+
+ printf("\nService pid machine Connected at\n");
+ printf("-------------------------------------------------------\n");
- printf("\nSamba version %s\n",VERSION);
- if (brief) {
- printf("PID Username Machine Time logged in\n");
- printf("-------------------------------------------------------------------\n");
- } else {
- printf("Service uid gid pid machine\n");
- printf("----------------------------------------------\n");
- }
tdb_traverse(tdb, traverse_fn1, NULL);
tdb_close(tdb);
locks:
if (processes_only) exit(0);
-
- if (brief) {
- ptr=srecs;
- while (ptr!=NULL) {
- printf("%-8d%-10.10s%-30.30s%s",
- (int)ptr->pid,uidtoname(ptr->uid),
- ptr->machine,
- asctime(LocalTime(&(ptr->start))));
- ptr=ptr->next;
- }
- printf("\n");
- exit(0);
- }
-
- printf("\n");
if (!shares_only) {
int ret;