From 6f5f301982a800560e364669b0ab8ef8d7d24056 Mon Sep 17 00:00:00 2001 From: hartwick Date: Wed, 18 Oct 2000 14:24:10 +0000 Subject: [PATCH] - Add some additional date expansions (%Y, %y, %m, %d) - Sorted the comment and code for the expansions into alphabetical order. --- src/main/xlat.c | 125 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 77 insertions(+), 48 deletions(-) diff --git a/src/main/xlat.c b/src/main/xlat.c index a0c47f0..678b520 100644 --- a/src/main/xlat.c +++ b/src/main/xlat.c @@ -72,24 +72,29 @@ static int valuebyname(char * out,int outlen,VALUE_PAIR * request, char * attrna * * Replace % in a string. * - * %p Port number - * %n NAS IP address - * %f Framed IP address - * %u User name - * %c Callback-Number - * %t MTU * %a Protocol (SLIP/PPP) - * %s Speed (PW_CONNECT_INFO) + * %c Callback-Number + * %d request day (DD) + * %f Framed IP address * %i Calling Station ID - * %V Request-Authenticator (Verified/None) - * %C clientname - * %R radius_dir - * %A radacct_dir - * %L radlog_dir * %l request timestamp - * %T request timestamp in database format + * %m request month (MM) + * %n NAS IP address + * %p Port number + * %s Speed (PW_CONNECT_INFO) + * %t MTU + * %u User name + * %y request year (YY) + * %A radacct_dir + * %C clientname * %D request date (YYYYMMDD) * %I request in ctime format + * %L radlog_dir + * %R radius_dir + * %T request timestamp in database format + * %U Stripped User name + * %V Request-Authenticator (Verified/None) + * %Y request year (YYYY) * %Z All request attributes except password (must have big buffer) * ${AttributeName} Corresponding value for AttributeName in request * ${request:AttributeName} Corresponding value for AttributeName in request @@ -157,63 +162,80 @@ int radius_xlat2(char * out,int outlen, char *str, REQUEST * request, VALUE_PAIR case '%': *q++ = *p; break; + case 'a': /* Protocol: */ + q += valuepair2str(q,freespace,pairfind(reply,PW_FRAMED_PROTOCOL),PW_TYPE_INTEGER); + break; + case 'c': /* Callback-Number */ + q += valuepair2str(q,freespace,pairfind(reply,PW_CALLBACK_NUMBER),PW_TYPE_STRING); + break; + case 'd': /* request year */ + TM = localtime(&request->timestamp); + strftime(tmpdt,sizeof(tmpdt),"%d",TM); + strncpy(q,tmpdt,freespace); + i = strlen(q); q[i] = '\0'; q += i; + break; case 'f': /* Framed IP address */ q += valuepair2str(q,freespace,pairfind(reply,PW_FRAMED_IP_ADDRESS),PW_TYPE_IPADDR); break; + case 'i': /* Calling station ID */ + q += valuepair2str(q,freespace,pairfind(request->packet->vps,PW_CALLING_STATION_ID),PW_TYPE_STRING); + break; + case 'l': /* request timestamp */ + sprintf(tmpdt,"%ld",request->timestamp); + strncpy(q,tmpdt,freespace); + i = strlen(q); q[i] = '\0'; q += i; + break; + case 'm': /* request month */ + TM = localtime(&request->timestamp); + strftime(tmpdt,sizeof(tmpdt),"%m",TM); + strncpy(q,tmpdt,freespace); + i = strlen(q); q[i] = '\0'; q += i; + break; case 'n': /* NAS IP address */ q += valuepair2str(q,freespace,pairfind(request->packet->vps,PW_NAS_IP_ADDRESS),PW_TYPE_IPADDR); break; - case 't': /* MTU */ - q += valuepair2str(q,freespace,pairfind(reply,PW_FRAMED_MTU),PW_TYPE_INTEGER); - break; case 'p': /* Port number */ q += valuepair2str(q,freespace,pairfind(request->packet->vps,PW_NAS_PORT_ID),PW_TYPE_INTEGER); break; - case 'u': /* User name */ - q += valuepair2str(q,freespace,pairfind(request->packet->vps,PW_USER_NAME),PW_TYPE_STRING); - break; - case 'U': /* Stripped User name */ - q += valuepair2str(q,freespace,pairfind(request->packet->vps,PW_STRIPPED_USER_NAME),PW_TYPE_STRING); + case 's': /* Speed */ + q += valuepair2str(q,freespace,pairfind(request->packet->vps,PW_CONNECT_INFO),PW_TYPE_STRING); break; - case 'i': /* Calling station ID */ - q += valuepair2str(q,freespace,pairfind(request->packet->vps,PW_CALLING_STATION_ID),PW_TYPE_STRING); + case 't': /* MTU */ + q += valuepair2str(q,freespace,pairfind(reply,PW_FRAMED_MTU),PW_TYPE_INTEGER); break; - case 'c': /* Callback-Number */ - q += valuepair2str(q,freespace,pairfind(reply,PW_CALLBACK_NUMBER),PW_TYPE_STRING); + case 'u': /* User name */ + q += valuepair2str(q,freespace,pairfind(request->packet->vps,PW_USER_NAME),PW_TYPE_STRING); break; - case 'a': /* Protocol: */ - q += valuepair2str(q,freespace,pairfind(reply,PW_FRAMED_PROTOCOL),PW_TYPE_INTEGER); + case 'y': /* request year */ + TM = localtime(&request->timestamp); + strftime(tmpdt,sizeof(tmpdt),"%y",TM); + strncpy(q,tmpdt,freespace); + i = strlen(q); q[i] = '\0'; q += i; break; - case 's': /* Speed */ - q += valuepair2str(q,freespace,pairfind(request->packet->vps,PW_CONNECT_INFO),PW_TYPE_STRING); + case 'A': /* radacct_dir */ + strncpy(q,radacct_dir,freespace-1); + i = strlen(q); q[i] = '\0'; q += i; break; case 'C': /* ClientName */ strncpy(q,client_name(request->packet->src_ipaddr),freespace-1); i = strlen(q); q[i] = '\0'; q += i; break; - case 'R': /* radius_dir */ - strncpy(q,radius_dir,freespace-1); + case 'D': /* request date */ + TM = localtime(&request->timestamp); + strftime(tmpdt,sizeof(tmpdt),"%Y%m%d",TM); + strncpy(q,tmpdt,freespace); i = strlen(q); q[i] = '\0'; q += i; break; - case 'A': /* radacct_dir */ - strncpy(q,radacct_dir,freespace-1); + case 'I': /* request timestamp */ + strncpy(q,ctime(&request->timestamp),freespace); i = strlen(q); q[i] = '\0'; q += i; break; case 'L': /* radlog_dir */ strncpy(q,radlog_dir,freespace-1); i = strlen(q); q[i] = '\0'; q += i; break; - case 'V': /* Request-Authenticator */ - if (request->packet->verified) - strncpy(q,"Verified",freespace-1); - else - strncpy(q,"None",freespace-1); - i = strlen(q); q[i] = '\0'; q += i; - break; - case 'D': /* request date */ - TM = localtime(&request->timestamp); - strftime(tmpdt,sizeof(tmpdt),"%Y%m%d",TM); - strncpy(q,tmpdt,freespace); + case 'R': /* radius_dir */ + strncpy(q,radius_dir,freespace-1); i = strlen(q); q[i] = '\0'; q += i; break; case 'T': /* request timestamp */ @@ -222,12 +244,19 @@ int radius_xlat2(char * out,int outlen, char *str, REQUEST * request, VALUE_PAIR strncpy(q,tmpdt,freespace); i = strlen(q); q[i] = '\0'; q += i; break; - case 'I': /* request timestamp */ - strncpy(q,ctime(&request->timestamp),freespace); + case 'U': /* Stripped User name */ + q += valuepair2str(q,freespace,pairfind(request->packet->vps,PW_STRIPPED_USER_NAME),PW_TYPE_STRING); + break; + case 'V': /* Request-Authenticator */ + if (request->packet->verified) + strncpy(q,"Verified",freespace-1); + else + strncpy(q,"None",freespace-1); i = strlen(q); q[i] = '\0'; q += i; break; - case 'l': /* request timestamp */ - sprintf(tmpdt,"%ld",request->timestamp); + case 'Y': /* request year */ + TM = localtime(&request->timestamp); + strftime(tmpdt,sizeof(tmpdt),"%Y",TM); strncpy(q,tmpdt,freespace); i = strlen(q); q[i] = '\0'; q += i; break; -- 2.1.4