ot Todor Lazarov(20-02-2002)

reiting (1)   [ dobre ]  [ zle ]

Printer Friendly Variant za otpechatvane

Eto vi edno reshenie kak da ograzhichim Dial-up po trafik kato izpolzvame ICRadius

IC-RADIUS 0.18.1 ne razpolaga sus sredstva za da mozhem da ogranichavame Dial-up po trafik.
Po ne az ne mozhash da otkriia.

Za tova eto edno reshenie za tova.

Hubavoto e che Linux e otvorena sistema (t.e. vseki mozhe da promenia koda)

Eto i kakvo sam dobavil:

----------------------------------------------------------------------------------
1. files.c

sled red 429: case PW_WEEKLY_TIME_LIMIT:
se dobavia: case PW_MAX_MEGABYTES:

Promenliva koiato se proveriava v faila auth.c
----------------------------------------------------------------------------------

2. radius.h
sled red 156: #define PW_WEEKLY_TIME_LIMIT 2006
se dobavia: #define PW_MAX_MEGABYTES 2010

Deklarirane na tazi promenliva

----------------------------------------------------------------------------------
3. auth.c

Postavete go naprimer sled proverkata za WEEKLY_TIME_LIMIT za Realm

/* New attribute in Mb format */
if (result >=0 && (check_item = pairfind(authreq->check_pairs, PW_MAX_MEGABYTES)) != NULL) {

  SQL_ROW row;
  char querystr[256];
  unsigned long allowed;
  unsigned long used = 0;

  allowed = check_item->lvalue * 1048576;

  /* Proverka dali Realm e nadhvurlil trafika
       tuka mozhem i da proveriavame i za mesets, den i t.n */
  sprintf(querystr, "SELECT SUM(AcctInputOctets+AcctOutputOctets) FROM radacct WHERE Realm ='%s'", authreq->realm);

  sql_select_query(socket, querystr);
  row = sql_fetch_row(socket);

  if (row[0] == NULL)
     used = 0;
  else
      used = atol(row[0]);
  sql_finish_select_query(socket);

  if (used >= allowed) {
     sprintf(umsg, "\r\nYour realm has reached it's limit of %d Mb\r\n\n",(int)check_item->lvalue);
     user_msg = umsg;
     result = -1;

     /* Vrushta se rezultat za greshka pri indifikatsiiata
        s koeto napraktika se vodi do prekusvane na sesiiata*/
     rad_send_reply(PW_AUTHENTICATION_REJECT, authreq, authreq->reply_pairs, user_msg, activefd);
     log(L_ERR, "ERR - Realm usage limit of %d Mb reached: [%s] (%s)", (int)check_item->lvalue, authreq->realm, auth_name(authreq, 1));
  }
}



Postavete go naprimer sled proverkata za MAX_HOURS za Username


/* New attribute in Mb format */
 if (result >=0 && (check_item = pairfind(authreq->check_pairs, PW_MAX_MEGABYTES)) != NULL) {

    SQL_ROW row;
    char querystr[256];
    unsigned long allowed;
    unsigned long used = 0;

    allowed = check_item->lvalue * 1048576;

    /* Proverka dali potrebitelia e nadhvurlil trafika
       tuka mozhem i da proveriavame i za mesets, den i t.n */

    sprintf(querystr, "SELECT SUM(AcctInputOctets+AcctOutputOctets) FROM radacct WHERE UserName ='%s'", authreq->realm);

    sql_select_query(socket, querystr);
    row = sql_fetch_row(socket);

    if (row[0] == NULL)
       used = 0;
    else
        used = atol(row[0]);
    sql_finish_select_query(socket);

    if (used >= allowed) {
       sprintf(umsg, "\r\nYour account has reached its limit of %d Mb\r\n\n", (int)check_item->lvalue);
       user_msg = umsg;
       result = -1;

       /* Vrushta se rezultat za greshka pri indifikatsiiata
        s koeto napraktika se vodi do prekusvane na sesiiata*/

       rad_send_reply(PW_AUTHENTICATION_REJECT, authreq, authreq->reply_pairs, user_msg, activefd);
       log(L_ERR, "ERR - Usage limit of %d Mb reached: [%s] (%s)", (int)check_item->lvalue, namepair->strvalue, auth_name(authreq, 1));
   }
}


4. Dobavete red v tablitsa dictionnary:

INSERT INTO dictionnary (Type, Attribute, Value, Format) VALUES ('ATTRIBUTE', 'MAX_MEGABYTES', '2010', 'integer');


sled koeto si prekompiliraite ICRadius-a i go startiraite otnovo


Samoto zadavane go izvurshvam ot modula radius.cgi
Tova e pokazano v prikrepeniia fail:


Edna zabelezhka:

Ima samo edno slabo mesto !!!
Kakto vizhdate ot source dannite se chetat ot tablitsata radacct
A tam se zapisvat dannite sled kato sesiiata svurshi.

t.e. Dial-up nozhe da previshi dadeniia mu trafik ako go nadhvurli v dadena sesiia.
No pri sledvashto logvane mashinata shte go izhvurli.

Koeto razbira se e niakukuv rezultat. !!!


<< KAK DA SE BULGARIZIRAME - nov tertip | Devet preporuki za pisane na siguren php kod >>