Esempio n. 1
0
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);
    }

}
Esempio n. 2
0
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);
}
Esempio n. 3
0
/*
 * 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();
}
Esempio n. 4
0
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);
}
Esempio n. 5
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);
}
Esempio n. 6
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);
}
Esempio n. 7
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) 
			&& ((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);
}