Apache-AuthenNTLM
view release on metacpan or search on metacpan
smb/smbval/rfcnb-util.c view on Meta::CPAN
struct RFCNB_Pkt *RFCNB_Alloc_Pkt(int n)
{ RFCNB_Pkt *pkt;
if ((pkt = (struct RFCNB_Pkt *)malloc(sizeof(struct RFCNB_Pkt))) == NULL) {
RFCNB_errno = RFCNBE_NoSpace;
RFCNB_saved_errno = errno;
return(NULL);
}
pkt -> next = NULL;
pkt -> len = n;
if (n == 0) return(pkt);
if ((pkt -> data = (char *)malloc(n)) == NULL) {
RFCNB_errno = RFCNBE_NoSpace;
RFCNB_saved_errno = errno;
free(pkt);
return(NULL);
}
return(pkt);
}
/* Free up a packet */
int RFCNB_Free_Pkt(struct RFCNB_Pkt *pkt)
{ struct RFCNB_Pkt *pkt_next; char *data_ptr;
while (pkt != NULL) {
pkt_next = pkt -> next;
data_ptr = pkt -> data;
if (data_ptr != NULL)
free(data_ptr);
free(pkt);
pkt = pkt_next;
}
return 0;
}
/* Print an RFCNB packet */
void RFCNB_Print_Pkt(FILE *fd, char *dirn, struct RFCNB_Pkt *pkt, int len)
{ char lname[17];
/* We assume that the first fragment is the RFCNB Header */
/* We should loop through the fragments printing them out */
fprintf(fd, "RFCNB Pkt %s:", dirn);
switch (RFCNB_Pkt_Type(pkt -> data)) {
case RFCNB_SESSION_MESSAGE:
fprintf(fd, "SESSION MESSAGE: Length = %i\n", RFCNB_Pkt_Len(pkt -> data));
RFCNB_Print_Hex(fd, pkt, RFCNB_Pkt_Hdr_Len,
#ifdef RFCNB_PRINT_DATA
RFCNB_Pkt_Len(pkt -> data) - RFCNB_Pkt_Hdr_Len);
#else
40);
#endif
if (Prot_Print_Routine != 0) { /* Print the rest of the packet */
Prot_Print_Routine(fd, strcmp(dirn, "sent"), pkt, RFCNB_Pkt_Hdr_Len,
RFCNB_Pkt_Len(pkt -> data) - RFCNB_Pkt_Hdr_Len);
}
break;
case RFCNB_SESSION_REQUEST:
fprintf(fd, "SESSION REQUEST: Length = %i\n",
RFCNB_Pkt_Len(pkt -> data));
RFCNB_NBName_To_AName((char *)(pkt -> data + RFCNB_Pkt_Called_Offset), lname);
fprintf(fd, " Called Name: %s\n", lname);
RFCNB_NBName_To_AName((char *)(pkt -> data + RFCNB_Pkt_Calling_Offset), lname);
fprintf(fd, " Calling Name: %s\n", lname);
break;
case RFCNB_SESSION_ACK:
fprintf(fd, "RFCNB SESSION ACK: Length = %i\n",
RFCNB_Pkt_Len(pkt -> data));
break;
case RFCNB_SESSION_REJ:
fprintf(fd, "RFCNB SESSION REJECT: Length = %i\n",
RFCNB_Pkt_Len(pkt -> data));
if (RFCNB_Pkt_Len(pkt -> data) < 1) {
fprintf(fd, " Protocol Error, short Reject packet!\n");
}
else {
fprintf(fd, " Error = %x\n", CVAL(pkt -> data, RFCNB_Pkt_Error_Offset));
}
break;
case RFCNB_SESSION_RETARGET:
fprintf(fd, "RFCNB SESSION RETARGET: Length = %i\n",
RFCNB_Pkt_Len(pkt -> data));
( run in 0.590 second using v1.01-cache-2.11-cpan-b16cb0d3907 )