データ構造 | |
struct | sessionids |
関数 | |
static int | show_session (TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state) |
static int | net_status_sessions (int argc, const char **argv) |
static int | show_share (TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state) |
static int | collect_pid (TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state) |
static int | show_share_parseable (TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state) |
static int | net_status_shares_parseable (int argc, const char **argv) |
static int | net_status_shares (int argc, const char **argv) |
int | net_status (int argc, const char **argv) |
static int show_session | ( | TDB_CONTEXT * | tdb, | |
TDB_DATA | kbuf, | |||
TDB_DATA | dbuf, | |||
void * | state | |||
) | [static] |
net_status.c の 23 行で定義されています。
参照先 d_printf()・TDB_DATA::dptr・TDB_DATA::dsize・gidtoname()・process_exists_by_pid()・uidtoname().
00025 { 00026 BOOL *parseable = (BOOL *)state; 00027 struct sessionid sessionid; 00028 00029 if (dbuf.dsize != sizeof(sessionid)) 00030 return 0; 00031 00032 memcpy(&sessionid, dbuf.dptr, sizeof(sessionid)); 00033 00034 if (!process_exists_by_pid(sessionid.pid)) { 00035 return 0; 00036 } 00037 00038 if (*parseable) { 00039 d_printf("%d\\%s\\%s\\%s\\%s\n", 00040 (int)sessionid.pid, uidtoname(sessionid.uid), 00041 gidtoname(sessionid.gid), 00042 sessionid.remote_machine, sessionid.hostname); 00043 } else { 00044 d_printf("%5d %-12s %-12s %-12s (%s)\n", 00045 (int)sessionid.pid, uidtoname(sessionid.uid), 00046 gidtoname(sessionid.gid), 00047 sessionid.remote_machine, sessionid.hostname); 00048 } 00049 00050 return 0; 00051 }
static int net_status_sessions | ( | int | argc, | |
const char ** | argv | |||
) | [static] |
net_status.c の 53 行で定義されています。
参照先 d_fprintf()・d_printf()・lock_path()・net_help_status()・show_session()・strequal()・tdb・tdb_close()・tdb_open_log()・tdb_traverse().
参照元 net_status().
00054 { 00055 TDB_CONTEXT *tdb; 00056 BOOL parseable; 00057 00058 if (argc == 0) { 00059 parseable = False; 00060 } else if ((argc == 1) && strequal(argv[0], "parseable")) { 00061 parseable = True; 00062 } else { 00063 return net_help_status(argc, argv); 00064 } 00065 00066 if (!parseable) { 00067 d_printf("PID Username Group Machine" 00068 " \n"); 00069 d_printf("-------------------------------------------" 00070 "------------------------\n"); 00071 } 00072 00073 tdb = tdb_open_log(lock_path("sessionid.tdb"), 0, 00074 TDB_DEFAULT, O_RDONLY, 0); 00075 00076 if (tdb == NULL) { 00077 d_fprintf(stderr, "%s not initialised\n", lock_path("sessionid.tdb")); 00078 return -1; 00079 } 00080 00081 tdb_traverse(tdb, show_session, &parseable); 00082 tdb_close(tdb); 00083 00084 return 0; 00085 }
static int show_share | ( | TDB_CONTEXT * | tdb, | |
TDB_DATA | kbuf, | |||
TDB_DATA | dbuf, | |||
void * | state | |||
) | [static] |
net_status.c の 87 行で定義されています。
参照先 d_printf()・TDB_DATA::dptr・TDB_DATA::dsize・process_exists()・procid_str_static()・time_to_asc().
参照元 net_status_shares().
00089 { 00090 struct connections_data crec; 00091 00092 if (dbuf.dsize != sizeof(crec)) 00093 return 0; 00094 00095 memcpy(&crec, dbuf.dptr, sizeof(crec)); 00096 00097 if (crec.cnum == -1) 00098 return 0; 00099 00100 if (!process_exists(crec.pid)) { 00101 return 0; 00102 } 00103 00104 d_printf("%-10.10s %s %-12s %s", 00105 crec.servicename,procid_str_static(&crec.pid), 00106 crec.machine, 00107 time_to_asc(crec.start)); 00108 00109 return 0; 00110 }
static int collect_pid | ( | TDB_CONTEXT * | tdb, | |
TDB_DATA | kbuf, | |||
TDB_DATA | dbuf, | |||
void * | state | |||
) | [static] |
net_status.c の 117 行で定義されています。
参照先 TDB_DATA::dptr・TDB_DATA::dsize・sessionids::entries・sessionids::num_entries・process_exists_by_pid().
参照元 net_status_shares_parseable().
00119 { 00120 struct sessionids *ids = (struct sessionids *)state; 00121 struct sessionid sessionid; 00122 00123 if (dbuf.dsize != sizeof(sessionid)) 00124 return 0; 00125 00126 memcpy(&sessionid, dbuf.dptr, sizeof(sessionid)); 00127 00128 if (!process_exists_by_pid(sessionid.pid)) 00129 return 0; 00130 00131 ids->num_entries += 1; 00132 ids->entries = SMB_REALLOC_ARRAY(ids->entries, struct sessionid, ids->num_entries); 00133 if (!ids->entries) { 00134 ids->num_entries = 0; 00135 return 0; 00136 } 00137 ids->entries[ids->num_entries-1] = sessionid; 00138 00139 return 0; 00140 }
static int show_share_parseable | ( | TDB_CONTEXT * | tdb, | |
TDB_DATA | kbuf, | |||
TDB_DATA | dbuf, | |||
void * | state | |||
) | [static] |
net_status.c の 142 行で定義されています。
参照先 TDB_DATA::dptr・TDB_DATA::dsize・sessionids::entries・sessionids::num_entries・sessionid::pid・pid_to_procid()・process_exists()・procid_equal().
参照元 net_status_shares_parseable().
00144 { 00145 struct sessionids *ids = (struct sessionids *)state; 00146 struct connections_data crec; 00147 int i; 00148 BOOL guest = True; 00149 00150 if (dbuf.dsize != sizeof(crec)) 00151 return 0; 00152 00153 memcpy(&crec, dbuf.dptr, sizeof(crec)); 00154 00155 if (crec.cnum == -1) 00156 return 0; 00157 00158 if (!process_exists(crec.pid)) { 00159 return 0; 00160 } 00161 00162 for (i=0; i<ids->num_entries; i++) { 00163 struct process_id id = pid_to_procid(ids->entries[i].pid); 00164 if (procid_equal(&id, &crec.pid)) { 00165 guest = False; 00166 break; 00167 } 00168 } 00169 00170 d_printf("%s\\%s\\%s\\%s\\%s\\%s\\%s", 00171 crec.servicename,procid_str_static(&crec.pid), 00172 guest ? "" : uidtoname(ids->entries[i].uid), 00173 guest ? "" : gidtoname(ids->entries[i].gid), 00174 crec.machine, 00175 guest ? "" : ids->entries[i].hostname, 00176 time_to_asc(crec.start)); 00177 00178 return 0; 00179 }
static int net_status_shares_parseable | ( | int | argc, | |
const char ** | argv | |||
) | [static] |
net_status.c の 181 行で定義されています。
参照先 collect_pid()・d_fprintf()・sessionids::entries・lock_path()・sessionids::num_entries・show_share_parseable()・tdb・tdb_close()・tdb_open_log()・tdb_traverse().
参照元 net_status_shares().
00182 { 00183 struct sessionids ids; 00184 TDB_CONTEXT *tdb; 00185 00186 ids.num_entries = 0; 00187 ids.entries = NULL; 00188 00189 tdb = tdb_open_log(lock_path("sessionid.tdb"), 0, 00190 TDB_DEFAULT, O_RDONLY, 0); 00191 00192 if (tdb == NULL) { 00193 d_fprintf(stderr, "%s not initialised\n", lock_path("sessionid.tdb")); 00194 return -1; 00195 } 00196 00197 tdb_traverse(tdb, collect_pid, &ids); 00198 tdb_close(tdb); 00199 00200 tdb = tdb_open_log(lock_path("connections.tdb"), 0, 00201 TDB_DEFAULT, O_RDONLY, 0); 00202 00203 if (tdb == NULL) { 00204 d_fprintf(stderr, "%s not initialised\n", lock_path("connections.tdb")); 00205 d_fprintf(stderr, "This is normal if no SMB client has ever " 00206 "connected to your server.\n"); 00207 return -1; 00208 } 00209 00210 tdb_traverse(tdb, show_share_parseable, &ids); 00211 tdb_close(tdb); 00212 00213 SAFE_FREE(ids.entries); 00214 00215 return 0; 00216 }
static int net_status_shares | ( | int | argc, | |
const char ** | argv | |||
) | [static] |
net_status.c の 218 行で定義されています。
参照先 d_fprintf()・d_printf()・lock_path()・net_help_status()・net_status_shares_parseable()・show_share()・strequal()・tdb・tdb_close()・tdb_open_log()・tdb_traverse().
参照元 net_status().
00219 { 00220 TDB_CONTEXT *tdb; 00221 00222 if (argc == 0) { 00223 00224 d_printf("\nService pid machine " 00225 "Connected at\n"); 00226 d_printf("-------------------------------------" 00227 "------------------\n"); 00228 00229 tdb = tdb_open_log(lock_path("connections.tdb"), 0, 00230 TDB_DEFAULT, O_RDONLY, 0); 00231 00232 if (tdb == NULL) { 00233 d_fprintf(stderr, "%s not initialised\n", 00234 lock_path("connections.tdb")); 00235 d_fprintf(stderr, "This is normal if no SMB client has " 00236 "ever connected to your server.\n"); 00237 return -1; 00238 } 00239 00240 tdb_traverse(tdb, show_share, NULL); 00241 tdb_close(tdb); 00242 00243 return 0; 00244 } 00245 00246 if ((argc != 1) || !strequal(argv[0], "parseable")) { 00247 return net_help_status(argc, argv); 00248 } 00249 00250 return net_status_shares_parseable(argc, argv); 00251 }
int net_status | ( | int | argc, | |
const char ** | argv | |||
) |
net_status.c の 253 行で定義されています。
参照先 net_help_status()・net_run_function()・net_status_sessions()・net_status_shares().
00254 { 00255 struct functable func[] = { 00256 {"sessions", net_status_sessions}, 00257 {"shares", net_status_shares}, 00258 {NULL, NULL} 00259 }; 00260 return net_run_function(argc, argv, func, net_help_status); 00261 }