#include #include #include #include #include #include #include struct ascic_ { char len; char * ptr; }; struct ascic_ user = {6,"CC_RRL"}, account = {3,"MIS"}, node = {5,"\0DTV5"}, proto = {6,"TELNET"}, qname = {15,"TSrv11(Async,1)"}, job = {11,"Framed-User"}; struct FAB afab; struct RAB arab; char rad_acc [] = "acc.dat"; $DESCRIPTOR(login_dsc,"02-Dec-1965 12:30:00"); $DESCRIPTOR(delta_dsc,"0 00:00:00.95"); void main (void) { long status; long *systime; struct acrdef *head; struct acrdef2 *id; struct acrdef3 *res; short len; char acr_buf [2048],*acr_bufp = acr_buf; /* ** */ afab = cc$rms_fab; afab.fab$b_fac = FAB$M_PUT; afab.fab$b_shr = FAB$M_SHRGET | FAB$M_SHRPUT | FAB$M_SHRDEL; afab.fab$l_fna = rad_acc; afab.fab$b_fns = sizeof(rad_acc)-1; afab.fab$b_rat = 0; /* afab.fab$l_fop = FAB$M_CIF; */ arab = cc$rms_rab; arab.rab$l_fab = &afab; arab.rab$v_eof = 1; status = sys$create(&afab); if (!$VMS_STATUS_SUCCESS(status)) lib$signal(status); status = sys$connect(&arab); if (!$VMS_STATUS_SUCCESS(status)) lib$signal(status); /* ** */ memset(acr_buf,0,sizeof(acr_buf)); /* ** Build accounting RECORD HEADER */ head = (struct acrdef *) acr_buf; head->acr$v_packet = 0; head->acr$v_type = ACR$K_LOGFAIL; head->acr$v_subtype = ACR$K_NETWORK; head->acr$v_version = ACR$K_CURVER; head->acr$v_customer = 0; head->acr$w_length = ACR$K_HDRLEN; systime = (long *) (acr_buf + sizeof (struct acrdef)); status = sys$gettim(systime); if (!$VMS_STATUS_SUCCESS(status)) lib$signal(status); status = sys$gettim(systime); if (!$VMS_STATUS_SUCCESS(status)) lib$signal(status); /* ** Build accounting ID packet */ acr_bufp= acr_buf + ACR$K_HDRLEN; head = (struct acrdef *) acr_bufp; id = (struct acrdef2 *) acr_bufp; head->acr$v_packet = 1; head->acr$v_type = ACR$K_ID; head->acr$v_version = ACR$K_CURVER; head->acr$v_customer = 0; acr_bufp = acr_bufp + sizeof (struct acrdef2); id->acr$w_username = acr_bufp - ((char *)id); memcpy(acr_bufp+1,user.ptr,user.len); *acr_bufp = user.len; acr_bufp += user.len + 1; id->acr$w_account = acr_bufp - ((char *)id); memcpy(acr_bufp+1,account.ptr,account.len); *acr_bufp = account.len; acr_bufp += account.len+1; id->acr$w_jobname = acr_bufp - ((char *)id); memcpy(acr_bufp+1,job.ptr,job.len); *acr_bufp = job.len; acr_bufp += job.len+1; id->acr$v_fullname = 1; id->acr$w_fullname = acr_bufp - ((char *)id); memcpy(acr_bufp+1,node.ptr,node.len); *acr_bufp = node.len; acr_bufp += node.len+1; id->acr$w_queue = acr_bufp - ((char *)id); memcpy(acr_bufp+1,qname.ptr,qname.len); *acr_bufp = qname.len; acr_bufp += qname.len+1; id->acr$w_terminal = acr_bufp - ((char *)id); memcpy(acr_bufp+1,proto.ptr,proto.len); *acr_bufp = proto.len; acr_bufp += proto.len+1; head->acr$w_length = acr_bufp - ((char *)id); len = head->acr$w_length; /* ** Build accounting RESOURCE packet */ head = (struct acrdef *) acr_bufp; res = (struct acrdef3 *) acr_bufp; head->acr$v_packet = 1; head->acr$v_type = ACR$K_RESOURCE; head->acr$v_version = ACR$K_CURVER; head->acr$v_customer = 0; head->acr$w_length = sizeof (struct acrdef3); len += head->acr$w_length; status = sys$bintim(&delta_dsc,res->acr$q_login); if (!$VMS_STATUS_SUCCESS(status)) lib$signal(status); status = lib$sub_times(systime,res->acr$q_login,res->acr$q_login); if (!$VMS_STATUS_SUCCESS(status)) lib$signal(status); /* ** */ head = (struct acrdef *) acr_buf; head->acr$w_length += len; arab.rab$l_rbf = arab.rab$l_ubf = acr_buf; arab.rab$w_rsz = arab.rab$w_usz = head->acr$w_length; status = sys$put(&arab); if (!$VMS_STATUS_SUCCESS(status)) lib$signal(status); }