void same_system(oh_big_textbuffer *bigbuf) { int size = strcspn((char *)bigbuf->Data, EPATHSTRING_END_DELIMITER); int old_size = strcspn(previous_system, EPATHSTRING_END_DELIMITER); if ( (old_size != size) || (strncmp((char *)bigbuf->Data, previous_system, size+1) != 0)) { if (previous_system[0] == '{') show_trailer(previous_system); memset (previous_system, 0, SAHPI_MAX_TEXT_BUFFER_LENGTH); strncpy (previous_system, (char *)(bigbuf->Data), size+1); previous_system[size+2] = '\0'; printf("\n\n%s\n", previous_system); } }
static void rpc_detail_call(int flags, int xid, int rpcvers, int prog, int vers, int proc, char *data, int len) { char *nameof_flavor(); char *nameof_prog(); (void) sprintf(get_line(pos, getxdr_pos()), "RPC version = %d", rpcvers); (void) sprintf(get_line(pos, getxdr_pos()), "Program = %d (%s), version = %d, procedure = %d", prog, nameof_prog(prog), vers, proc); print_creds(xid); print_verif(CALL); show_trailer(); protoprint(flags, CALL, xid, prog, vers, proc, data, len); }
/* * This is called by snoop_netbios.c. * This is the external entry point. */ void interpret_smb(int flags, uchar_t *data, int len) { struct smb *smb; struct decode *decoder; char xtra[MAXLINE]; ushort_t smb_flags2; void (*func)(int, uchar_t *, int, char *, int); if (len < sizeof (struct smb)) return; smb = (struct smb *)data; decoder = &SMBtable[smb->com & 255]; smb_flags2 = get2(smb->flags2); xtra[0] = '\0'; /* * SMB Header description * [X/Open-SMB, Sec. 5.1] */ if (flags & F_DTAIL) { show_header("SMB: ", "SMB Header", len); show_space(); if (smb->flags & SERVER_RESPONSE) show_line("SERVER RESPONSE"); else show_line("CLIENT REQUEST"); if (decoder->name) show_printf("Command code = 0x%x (SMB%s)", smb->com, decoder->name); else show_printf("Command code = 0x%x", smb->com); /* * NT status or error class/code * [X/Open-SMB, Sec. 5.6] */ if (smb_flags2 & FLAGS2_NT_STATUS) { show_printf("NT Status = %x", get4(smb->err)); } else { /* Error classes [X/Open-SMB, Sec. 5.6] */ show_printf("Error class/code = %d/%d", smb->err[0], get2(&smb->err[2])); } show_printf("Flags summary = 0x%.2x", smb->flags); show_printf("Flags2 summary = 0x%.4x", smb_flags2); show_printf("Tree ID (TID) = 0x%.4x", get2(smb->tid)); show_printf("Proc. ID (PID) = 0x%.4x", get2(smb->pid)); show_printf("User ID (UID) = 0x%.4x", get2(smb->uid)); show_printf("Mux. ID (MID) = 0x%.4x", get2(smb->mid)); show_space(); } if ((func = decoder->func) == NULL) func = interpret_default; (*func)(flags, (uchar_t *)data, len, xtra, sizeof (xtra)); if (flags & F_SUM) { char *p; int sz, tl; /* Will advance p and decr. sz */ p = get_sum_line(); sz = MAXLINE; /* Call or Reply */ if (smb->flags & SERVER_RESPONSE) tl = snprintf(p, sz, "SMB R"); else tl = snprintf(p, sz, "SMB C"); p += tl; sz -= tl; /* The name, if known, else the cmd code */ if (decoder->name) { tl = snprintf(p, sz, " Cmd=SMB%s", decoder->name); } else { tl = snprintf(p, sz, " Cmd=0x%02X", smb->com); } p += tl; sz -= tl; /* * The "extra" (cmd-specific summary). * If non-null, has leading blank. */ if (xtra[0] != '\0') { tl = snprintf(p, sz, "%s", xtra); p += tl; sz -= tl; } /* * NT status or error class/code * [X/Open-SMB, Sec. 5.6] * * Only show for response, not call. */ if (smb->flags & SERVER_RESPONSE) { if (smb_flags2 & FLAGS2_NT_STATUS) { uint_t status = get4(smb->err); snprintf(p, sz, " Status=0x%x", status); } else { uchar_t errcl = smb->err[0]; ushort_t code = get2(&smb->err[2]); snprintf(p, sz, " Error=%d/%d", errcl, code); } } } if (flags & F_DTAIL) show_trailer(); }
static int interpret_slp_v2(int flags, struct slpv2_hdr *slp, int fraglen) { extern int src_port, dst_port, curr_proto; char msgbuf_real[256]; int totallen = 0; msgbuf = msgbuf_real; /* * Somewhat of a hack to decode traffic from a server that does * not send udp replies from its SLP src port. */ if (curr_proto == IPPROTO_UDP && dst_port == 427 && src_port != 427) { add_transient(src_port, (int (*)())interpret_slp); } /* parse the header */ if (v2_header(flags, slp, &totallen, fraglen)) { if (slp->function <= V2_MAX_FUNCTION && slp->function > 0) { /* Parse the message body */ if ((v2_functions[slp->function])(flags)) { /* finish any remaining tasks */ v2_finish(slp, flags); } } } /* summary error check */ if (flags & F_SUM) { if (retlength < 0) { if (curr_proto == IPPROTO_TCP) sprintf(get_sum_line(), "%s [partial TCP message]", msgbuf); else if (overflow) sprintf(get_sum_line(), "%s [OVERFLOW]", msgbuf); else sprintf(get_sum_line(), "%s [CORRUPTED MESSAGE]", msgbuf); } #ifdef VERIFYSLP else if (msglength > 0) sprintf(get_sum_line(), "%s +%d", msgbuf, msglength); #endif else sprintf(get_sum_line(), "%s", msgbuf); } else if (flags & F_DTAIL) { /* detailed error check */ if (msglength > 0) { if (tcp_continuation) { sprintf(get_line(0, 0), "[TCP Continuation, %d bytes remaining]", totallen - fraglen); } else sprintf(get_line(0, 0), "[%d extra bytes at end of SLP message]", msglength); } show_trailer(); if (tcp_continuation && msglength == 0) remove_tcp_cont(dst_port); } return (0); }
static int interpret_slp_v1(int flags, struct slpv1_hdr *slp, int fraglen) { char msgbuf_real[256]; extern int src_port, dst_port, curr_proto; boolean_t overflow = B_FALSE; msgbuf = msgbuf_real; if (msglength >= sizeof (*slp)) { if ((slp->flags & V1_URL_AUTH) == V1_URL_AUTH) url_auth = B_TRUE; if ((slp->flags & V1_ATTR_AUTH) == V1_ATTR_AUTH) attr_auth = B_TRUE; if ((slp->flags & V1_FRESH_REG) == V1_FRESH_REG) fresh = B_TRUE; if ((slp->flags & V1_OVERFLOW) == V1_OVERFLOW) overflow = B_TRUE; } /* * Somewhat of a hack to decode traffic from a server that does * not send udp replies from its SLP src port. */ if (curr_proto == IPPROTO_UDP && dst_port == 427 && src_port != 427) add_transient(src_port, (int (*)())interpret_slp); /* parse the header */ if (v1_header(flags, slp, fraglen)) { if (slp->function <= V1_MAX_FUNCTION && slp->function > 0) { /* Parse the message body */ (v1_functions[slp->function])(flags); } } /* summary error check */ if (flags & F_SUM) { if (retlength < 0) { if (curr_proto == IPPROTO_TCP) sprintf(get_sum_line(), "%s [partial TCP message]", msgbuf); else if (overflow) sprintf(get_sum_line(), "%s [OVERFLOW]", msgbuf); else sprintf(get_sum_line(), "%s [CORRUPTED MESSAGE]", msgbuf); } #ifdef VERIFYSLP else if (msglength > 0) sprintf(get_sum_line(), "%s +%d", msgbuf, msglength); #endif else sprintf(get_sum_line(), "%s", msgbuf); } else if (flags & F_DTAIL) { /* detail error check */ if (msglength > 0) { sprintf(get_line(0, 0), "[%d extra bytes at end of SLP message]", msglength); } show_trailer(); } v1_charset = 0; return (0); }
static SaErrorT list_resources(SaHpiSessionIdT sessionid,SaHpiResourceIdT resourceid) { SaErrorT rv = SA_OK, rvRdrGet = SA_OK, rvRptGet = SA_OK; SaHpiRptEntryT rptentry; SaHpiEntryIdT rptentryid; SaHpiEntryIdT nextrptentryid; SaHpiEntryIdT entryid; SaHpiEntryIdT nextentryid; SaHpiRdrT rdr; SaHpiResourceIdT l_resourceid; SaHpiTextBufferT working; oh_init_textbuffer(&working); /* walk the RPT list */ rptentryid = SAHPI_FIRST_ENTRY; do { if (fdebug) printf("saHpiRptEntryGet\n"); rvRptGet = saHpiRptEntryGet(sessionid,rptentryid,&nextrptentryid,&rptentry); if ((rvRptGet != SA_OK) || fdebug) printf("RptEntryGet returns %s\n",oh_lookup_error(rvRptGet)); rv = show_rpt(&rptentry, resourceid); if (rvRptGet == SA_OK && (rptentry.ResourceCapabilities & SAHPI_CAPABILITY_RDR) && ((f_allres) || (resourceid == rptentry.ResourceId))) { l_resourceid = rptentry.ResourceId; if (!f_allres) nextrptentryid = SAHPI_LAST_ENTRY; /* walk the RDR list for this RPT entry */ entryid = SAHPI_FIRST_ENTRY; if (fdebug) printf("rptentry[%u] resourceid=%u\n", entryid,resourceid); do { rvRdrGet = saHpiRdrGet(sessionid,l_resourceid, entryid,&nextentryid, &rdr); if (fdebug) printf("saHpiRdrGet[%u] rv = %s\n",entryid,oh_lookup_error(rvRdrGet)); if (rvRdrGet == SA_OK) { // Add zero terminator to RDR Id String SaHpiUint32T last = rdr.IdString.DataLength; if ( last >= SAHPI_MAX_TEXT_BUFFER_LENGTH ) { last = SAHPI_MAX_TEXT_BUFFER_LENGTH - 1; } rdr.IdString.Data[last] = '\0'; if (f_overview) list_rdr(sessionid, &rptentry, &rdr, l_resourceid); if (f_inv) show_inv(sessionid, &rptentry, &rdr, l_resourceid); if (f_sensor) show_sens(sessionid, &rptentry, &rdr, l_resourceid); if (f_ctrl) show_ctrl(sessionid, &rptentry, &rdr, l_resourceid); if (f_wdog) show_wdog(sessionid, &rptentry, &rdr, l_resourceid); if (f_fumi) show_fumi(sessionid, &rptentry, &rdr, l_resourceid); if (f_dimi) show_dimi(sessionid, &rptentry, &rdr, l_resourceid); if (f_ann) show_ann(sessionid, &rptentry, &rdr, l_resourceid); } entryid = nextentryid; } while ((rvRdrGet == SA_OK) && (entryid != SAHPI_LAST_ENTRY)) ; } rptentryid = nextrptentryid; } while ((rvRptGet == SA_OK) && (rptentryid != SAHPI_LAST_ENTRY)); show_trailer(previous_system); return(rv); }
static SaErrorT list_resources(SaHpiSessionIdT sessionid,SaHpiResourceIdT resourceid) { SaErrorT rv = SA_OK, rvRdrGet = SA_OK, rvRptGet = SA_OK; SaHpiRptEntryT rptentry; SaHpiEntryIdT rptentryid; SaHpiEntryIdT nextrptentryid; SaHpiEntryIdT entryid; SaHpiEntryIdT nextentryid; SaHpiRdrT rdr; SaHpiResourceIdT l_resourceid; SaHpiTextBufferT working; oh_init_textbuffer(&working); /* walk the RPT list */ rptentryid = SAHPI_FIRST_ENTRY; do { if (fdebug) printf("saHpiRptEntryGet\n"); rvRptGet = saHpiRptEntryGet(sessionid,rptentryid,&nextrptentryid,&rptentry); if ((rvRptGet != SA_OK) || fdebug) printf("RptEntryGet returns %s\n",oh_lookup_error(rvRptGet)); rv = show_rpt(&rptentry, resourceid); if (rvRptGet == SA_OK && (rptentry.ResourceCapabilities & SAHPI_CAPABILITY_RDR) && ((resourceid == 0xFF) || (resourceid == rptentry.ResourceId))) { l_resourceid = rptentry.ResourceId; if (resourceid != 0xFF) nextrptentryid = SAHPI_LAST_ENTRY; /* walk the RDR list for this RPT entry */ entryid = SAHPI_FIRST_ENTRY; if (fdebug) printf("rptentry[%d] resourceid=%d\n", entryid,resourceid); do { rvRdrGet = saHpiRdrGet(sessionid,l_resourceid, entryid,&nextentryid, &rdr); if (fdebug) printf("saHpiRdrGet[%d] rv = %s\n",entryid,oh_lookup_error(rvRdrGet)); if (rvRdrGet == SA_OK) { if (f_overview) list_rdr(sessionid, &rptentry, &rdr, l_resourceid); if (f_inv) show_inv(sessionid, &rptentry, &rdr, l_resourceid); if (f_sensor) show_sens(sessionid, &rptentry, &rdr, l_resourceid); if (f_ctrl) show_ctrl(sessionid, &rptentry, &rdr, l_resourceid); if (f_wdog) show_wdog(sessionid, &rptentry, &rdr, l_resourceid); if (f_ann) show_ann(sessionid, &rptentry, &rdr, l_resourceid); } entryid = nextentryid; } while ((rvRdrGet == SA_OK) && (entryid != SAHPI_LAST_ENTRY)) ; } rptentryid = nextrptentryid; } while ((rvRptGet == SA_OK) && (rptentryid != SAHPI_LAST_ENTRY)); show_trailer(previous_system); return(rv); }