static int traverse_sessionid(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state) { struct sessionid sessionid; fstring uid_str, gid_str; if (dbuf.dsize != sizeof(sessionid)) return 0; memcpy(&sessionid, dbuf.dptr, sizeof(sessionid)); if (!process_exists_by_pid(sessionid.pid) || !Ucrit_checkUid(sessionid.uid)) { return 0; } Ucrit_addPid( sessionid.pid ); fstr_sprintf(uid_str, "%d", sessionid.uid); fstr_sprintf(gid_str, "%d", sessionid.gid); d_printf("%5d %-12s %-12s %-12s (%s)\n", (int)sessionid.pid, numeric_only ? uid_str : uidtoname(sessionid.uid), numeric_only ? gid_str : gidtoname(sessionid.gid), sessionid.remote_machine, sessionid.hostname); return 0; }
static int traverse_sessionid(struct db_record *db, void *state) { struct sessionid sessionid; fstring uid_str, gid_str; if (db->value.dsize != sizeof(sessionid)) return 0; memcpy(&sessionid, db->value.dptr, sizeof(sessionid)); if (!process_exists(sessionid.pid) || !Ucrit_checkUid(sessionid.uid)) { return 0; } Ucrit_addPid( sessionid.pid ); fstr_sprintf(uid_str, "%d", sessionid.uid); fstr_sprintf(gid_str, "%d", sessionid.gid); d_printf("%-7s %-12s %-12s %-12s (%s)\n", procid_str_static(&sessionid.pid), numeric_only ? uid_str : uidtoname(sessionid.uid), numeric_only ? gid_str : gidtoname(sessionid.gid), sessionid.remote_machine, sessionid.hostname); return 0; }
static int traverse_fn1(const struct connections_key *key, const struct connections_data *crec, void *state) { if (crec->cnum == -1) return 0; if (!process_exists(crec->pid) || !Ucrit_checkUid(crec->uid)) { return 0; } d_printf("%-10s %s %-12s %s", crec->servicename,procid_str_static(&crec->pid), crec->machine, time_to_asc(crec->start)); return 0; }
static int traverse_sessionid(const char *key, struct sessionid *session, void *private_data) { fstring uid_str, gid_str; if (!process_exists(session->pid) || !Ucrit_checkUid(session->uid)) { return 0; } Ucrit_addPid(session->pid); fstr_sprintf(uid_str, "%u", (unsigned int)session->uid); fstr_sprintf(gid_str, "%u", (unsigned int)session->gid); d_printf("%-7s %-12s %-12s %-12s (%s)\n", procid_str_static(&session->pid), numeric_only ? uid_str : uidtoname(session->uid), numeric_only ? gid_str : gidtoname(session->gid), session->remote_machine, session->hostname); return 0; }
static int traverse_fn1(TDB_CONTEXT *tdb, TDB_DATA kbuf, TDB_DATA dbuf, void *state) { struct connections_data crec; if (dbuf.dsize != sizeof(crec)) return 0; memcpy(&crec, dbuf.dptr, sizeof(crec)); if (crec.cnum == -1) return 0; if (!process_exists(crec.pid) || !Ucrit_checkUid(crec.uid)) { return 0; } d_printf("%-10s %s %-12s %s", crec.servicename,procid_str_static(&crec.pid), crec.machine, time_to_asc(crec.start)); return 0; }
static int traverse_sessionid(const char *key, struct sessionid *session, void *private_data) { TALLOC_CTX *mem_ctx = (TALLOC_CTX *)private_data; fstring uid_str, gid_str; struct server_id_buf tmp; char *machine_hostname = NULL; int result = 0; const char *encryption = "-"; const char *signing = "-"; if (do_checks && (!process_exists(session->pid) || !Ucrit_checkUid(session->uid))) { return 0; } Ucrit_addPid(session->pid); fstrcpy(uid_str, "-1"); if (session->uid != -1) { if (numeric_only) { fstr_sprintf(uid_str, "%u", (unsigned int)session->uid); } else { fstrcpy(uid_str, uidtoname(session->uid)); } } fstrcpy(gid_str, "-1"); if (session->gid != -1) { if (numeric_only) { fstr_sprintf(gid_str, "%u", (unsigned int)session->gid); } else { fstrcpy(gid_str, gidtoname(session->gid)); } } machine_hostname = talloc_asprintf(mem_ctx, "%s (%s)", session->remote_machine, session->hostname); if (machine_hostname == NULL) { return -1; } if (smbXsrv_is_encrypted(session->encryption_flags)) { switch (session->cipher) { case SMB2_ENCRYPTION_AES128_CCM: encryption = "AES-128-CCM"; break; case SMB2_ENCRYPTION_AES128_GCM: encryption = "AES-128-GCM"; break; default: encryption = "???"; result = -1; break; } } else if (smbXsrv_is_partially_encrypted(session->encryption_flags)) { switch (session->cipher) { case SMB_ENCRYPTION_GSSAPI: encryption = "partial(GSSAPI)"; break; case SMB2_ENCRYPTION_AES128_CCM: encryption = "partial(AES-128-CCM)"; break; case SMB2_ENCRYPTION_AES128_GCM: encryption = "partial(AES-128-GCM)"; break; default: encryption = "???"; result = -1; break; } } if (smbXsrv_is_signed(session->signing_flags)) { if (session->connection_dialect >= SMB3_DIALECT_REVISION_302) { signing = "AES-128-CMAC"; } else if (session->connection_dialect >= SMB2_DIALECT_REVISION_202) { signing = "HMAC-SHA256"; } else { signing = "HMAC-MD5"; } } else if (smbXsrv_is_partially_signed(session->signing_flags)) { if (session->connection_dialect >= SMB3_DIALECT_REVISION_302) { signing = "partial(AES-128-CMAC)"; } else if (session->connection_dialect >= SMB2_DIALECT_REVISION_202) { signing = "partial(HMAC-SHA256)"; } else { signing = "partial(HMAC-MD5)"; } } d_printf("%-7s %-12s %-12s %-41s %-17s %-20s %-21s\n", server_id_str_buf(session->pid, &tmp), uid_str, gid_str, machine_hostname, session_dialect_str(session->connection_dialect), encryption, signing); TALLOC_FREE(machine_hostname); return result; }
static int traverse_connections(const struct connections_key *key, const struct connections_data *crec, void *private_data) { TALLOC_CTX *mem_ctx = (TALLOC_CTX *)private_data; struct server_id_buf tmp; char *timestr = NULL; int result = 0; const char *encryption = "-"; const char *signing = "-"; if (crec->cnum == TID_FIELD_INVALID) return 0; if (do_checks && (!process_exists(crec->pid) || !Ucrit_checkUid(crec->uid))) { return 0; } timestr = timestring(mem_ctx, crec->start); if (timestr == NULL) { return -1; } if (smbXsrv_is_encrypted(crec->encryption_flags)) { switch (crec->cipher) { case SMB_ENCRYPTION_GSSAPI: encryption = "GSSAPI"; break; case SMB2_ENCRYPTION_AES128_CCM: encryption = "AES-128-CCM"; break; case SMB2_ENCRYPTION_AES128_GCM: encryption = "AES-128-GCM"; break; default: encryption = "???"; result = -1; break; } } if (smbXsrv_is_signed(crec->signing_flags)) { if (crec->dialect >= SMB3_DIALECT_REVISION_302) { signing = "AES-128-CMAC"; } else if (crec->dialect >= SMB2_DIALECT_REVISION_202) { signing = "HMAC-SHA256"; } else { signing = "HMAC-MD5"; } } d_printf("%-12s %-7s %-13s %-32s %-12s %-12s\n", crec->servicename, server_id_str_buf(crec->pid, &tmp), crec->machine, timestr, encryption, signing); TALLOC_FREE(timestr); return result; }