Hi, included is a patch for samba-2.2.1a/source/web/statuspage.c, in the table "Open Files" the Client-name is shown rather than the PID. -------------- next part -------------- --- samba-2.2.1a/source/web/statuspage.c.org Sat Sep 29 17:05:32 2001 +++ samba-2.2.1a/source/web/statuspage.c Sat Sep 29 17:28:15 2001 @@ -21,8 +21,79 @@ #include "includes.h" +#define PIDMAP struct PidMap + +PIDMAP { + PIDMAP *next; + pid_t pid; + char *machine; +}; + +static PIDMAP *pidmap, *pidmap_current; + static pid_t smbd_pid; +/* from 2nd call on, remove old list */ +static void initPid2Machine (void) +{ + PIDMAP *p, *q; + + for (p = pidmap; p != NULL; ) { + q = p->next; + + if (p->machine) + free (p->machine); + + free (p); + p = q; + } + + pidmap = pidmap_current = NULL; +} + +/* add new PID <-> Machine name mapping */ +static void addPid2Machine (pid_t pid, char *machine) +{ + PIDMAP *newmap; + + if ((newmap = (PIDMAP *) malloc (sizeof (PIDMAP))) == NULL) { + /* need error message? */ + return; + } + + newmap->next = NULL; + newmap->pid = pid; + newmap->machine = strdup (machine); + + if (pidmap == NULL) { + pidmap = pidmap_current = newmap; + } + else { + pidmap_current->next = newmap; + pidmap_current = newmap; + } +} + +/* lookup PID <-> Machine name mapping */ +static char *mapPid2Machine (pid_t pid) +{ + static char pidbuf [64]; + PIDMAP *map; + + for (map = pidmap; map != NULL; map = map->next) { + if (pid == map->pid) { + if (map->machine == NULL) /* no machine name */ + break; /* show PID */ + + return map->machine; + } + } + + /* PID not in list or machine name NULL? return pid as string */ + snprintf (pidbuf, sizeof (pidbuf) - 1, "%d", pid); + return pidbuf; +} + static char *tstring(time_t t) { static pstring buf; @@ -33,7 +104,7 @@ static void print_share_mode(share_mode_entry *e, char *fname) { - printf("<tr><td>%d</td>",(int)e->pid); + printf("<tr><td>%s</td>", mapPid2Machine (e->pid)); printf("<td>"); switch ((e->share_mode>>4)&0xF) { case DENY_NONE: printf("DENY_NONE"); break; @@ -105,6 +176,8 @@ if (crec.cnum != -1 || !process_exists(crec.pid) || (crec.pid == smbd_pid)) return 0; + addPid2Machine (crec.pid, crec.machine); + printf("<tr><td>%d</td><td>%s</td><td>%s</td><td>%s</td>\n", (int)crec.pid, crec.machine,crec.addr, @@ -190,6 +263,8 @@ tdb = tdb_open_log(lock_path("connections.tdb"), 0, 0, O_RDONLY, 0); if (tdb) tdb_traverse(tdb, traverse_fn1, NULL); + initPid2Machine (); + printf("<H2>Server Status</H2>\n"); printf("<FORM method=post>\n"); @@ -268,7 +343,7 @@ printf("<h3>Open Files</h3>\n"); printf("<table border=1>\n"); - printf("<tr><th>PID</th><th>Sharing</th><th>R/W</th><th>Oplock</th><th>File</th><th>Date</th></tr>\n"); + printf("<tr><th>Client</th><th>Sharing</th><th>R/W</th><th>Oplock</th><th>File</th><th>Date</th></tr>\n"); locking_init(1); share_mode_forall(print_share_mode);
Gerald (Jerry) Carter
2001-Sep-30 09:40 UTC
patch for samba-2.2.1a/source/web/statuspage.c
On Sat, 29 Sep 2001, Joachim Ott wrote:> Hi, > > included is a patch for samba-2.2.1a/source/web/statuspage.c, in the > table "Open Files" the Client-name is shown rather than the PID.Thanks, but I don't think we will include this. When you have files locked it is more helpful to be able to view the smbd process id that has the lock. Althought I understand why you would want this. If you could make it into a command line option that defaulted to off, I would probably stick it in. cheers, jerry --------------------------------------------------------------------- www.samba.org SAMBA Team jerry_at_samba.org www.plainjoe.org jerry_at_plainjoe.org --"I never saved anything for the swim back." Ethan Hawk in Gattaca--