aha jeszcze obsluga:

wpisujac haslo do komputera uaktywniasz pppoe (kopiuje do bazy radius wszystkie niezbedne dane), wtedy bierze nazwe komputera do malych liter i dodaje czlon "@ flynet.com.pl" - to oczywisciem ozesz zmienic, do bazy przesyla rowniez adres ip. wszelkie zmiany jak nazwa komputera ip czy hasla dziala (trazeba niestety przeladowywac), aby usunac konto zwyczajnie kasujesz haslo z pola. jak juz skompilujesz sobie ten programik to oczywisice musisz go dodac do reload_lms.sh aby sie uruchamial po nacisnieciu Przeladowanie. System od prawie roku,

05-12-07, Michał Gacek <michal.gacek@gmail.com> napisał(a):
Witam o to kod glownego programu:



program pppoe_ng;

uses
  mysql4,mysqloi,crt,sysutils,strings,Variants,Classes,strutils;

const
dbhost : PChar='localhost';
dbuser : PChar='user';
dbpass : PChar='pass';
var
  query_main,query_radcheck,query_radreply,modify : tsqlz;
  t,y,x:integer;
  name_lms,ip_lms,passwd_lms : string;
  name_radius, passwd_radius, ip_radius : string;
//  row : TMYSQL_ROW;
  conn1 : PMYSQL;
  conn2 : PMYSQL;
begin
clrscr;
conn1:=mysql_connect(dbhost,dbuser,dbpass);
mysql_query(conn1, 'set NAMES utf8');
query_main.sql:= 'Select id, LCASE(name), INET_NTOA(ipaddr), passwd from lms.nodes where ownerid!=0';
query_main.sqlexec(conn1);
Writeln ('Przeładowanie modułu PPPoE:');
Writeln (' Zatwierdzanie zmian w ustawieniach PPPoE:');
x:=0;
    for t:=1 to mysql_num_rows (query_main.dataset) do
      begin
       query_main.row := mysql_fetch_row(query_main.dataset);


       name_lms:=string(query_main.row[1]);
       ip_lms:=string(query_main.row[2]);
       passwd_lms:=string(query_main.row[3]);
       query_radcheck.sql:='select username, value from radius.radcheck where username=:username;';
       query_radcheck.parasstring(':username', name_lms+'@flynet.com.pl ');
       query_radcheck.sqlexec(conn1);
       query_radcheck.row:=mysql_fetch_row(query_radcheck.dataset);

       if (mysql_num_rows(query_radcheck.dataset) <> 0) then
        begin
         query_radreply.sql:='select value from radius.radreply where attribute=:attribute AND username=:username;';
         query_radreply.parasstring(':attribute', 'Framed-IP-Address');
         query_radreply.parasstring(':username', name_lms+'@flynet.com.pl');
         query_radreply.sqlexec(conn1);
         query_radreply.row:=mysql_fetch_row(query_radreply.dataset);
         ip_radius:=string(query_radreply.row[0]);
         name_radius:=string(query_radcheck.row[0]);
         passwd_radius:=string(query_radcheck.row[1]);
//             writeln('haslo1 '+passwd_lms+' haslo2 '+passwd_radius+' ip_radius: '+ip_radius);

         if (passwd_lms = '') then
          begin
           x:=x+1;

           modify.sql:='DELETE radius.radcheck, radius.5radreply FROM radius.radcheck, radius.radreply WHERE radius.radcheck.username=radius.radreply.username AND radius.radcheck.username=:username;';
           modify.parasstring(':username', name_lms+'@flynet.com.pl ');
           modify.sqlexec(conn1);

           writeln(' *Wyłączam PPPoE dla urządzenia: '+name_lms);
          end
         else
          begin
           if (passwd_radius <> passwd_lms) then
            begin
             x:=x+1;

             modify.sql:='UPDATE radius.radcheck SET value=:value WHERE attribute=:attribute AND username=:username;';
             modify.parasstring(':value', passwd_lms);
             modify.parasstring (':attribute', 'Password');
             modify.parasstring(':username', name_lms+'@flynet.com.pl ');
             modify.sqlexec(conn1);

             writeln(' *Aktualizuję hasło dla urządzenia: '+name_lms);
            end;
           if (ip_lms <> ip_radius) then
            begin
             x:=x+1;

             modify.sql:='UPDATE radius.radreply SET value=:value WHERE attribute=:attribute AND username=:username;';
             modify.parasstring(':value', ip_lms);
             modify.parasstring(':attribute', 'Framed-IP-Address');
             modify.parasstring(':username', name_lms+'@flynet.com.pl');
             modify.sqlexec(conn1);

             writeln(' *Aktualizuję adres ip dla urządzenia: '+name_lms);
            end;
          end;


        end


       else if (passwd_lms <> '') then
             begin
              modify.sql:='INSERT INTO radius.radcheck (username, attribute, value) VALUES (:username, :attribute, :value);';
              modify.parasstring(':username', name_lms+'@flynet.com.pl');
              modify.parasstring(':attribute','Password');
              modify.parasstring(':value', passwd_lms);
              modify.sqlexec(conn1);

              modify.sql:='INSERT INTO radius.radreply (username, attribute, value) VALUES (:username, :attribute, :value);';
              modify.parasstring(':username', name_lms+'@flynet.com.pl');
              modify.parasstring(':attribute','Framed-IP-Address');
              modify.parasstring(':value', ip_lms);
              modify.sqlexec(conn1);

              writeln(' *Włączam PPPoE dla urządzenia: '+name_lms);
              x:=x+1
             end;
      end;
   if (x = 0) then writeln(' Nie było żadnych zmian do zatwierdzenia!')
    else
     begin
      write('Dokonano ');
      write(x);
      writeln(' zmian(y) w ustawieniach PPPoE');
     end;
   query_main.free;
   query_radcheck.free;
   query_radreply.free;

   query_main.sql:='select username from radius.radcheck;';
   query_main.sqlexec(conn1);
   writeln(' Czyszczę PPPoE ze starych nazw:');
   x:=0;
   for t:=1 to mysql_num_rows(query_main.dataset) do
    begin
     query_main.row:=mysql_fetch_row(query_main.dataset);
     name_radius:=string(query_main.row[0]);
     delete(name_radius,length(name_radius)-13,14);

     query_radcheck.sql:='select name from lms.nodes where name=:username;';
     query_radcheck.parasstring(':username', name_radius);
     query_radcheck.sqlexec(conn1);
     if (mysql_num_rows(query_radcheck.dataset) = 0) then
      begin

       modify.sql:='DELETE radius.radcheck, radius.radreply FROM radius.radcheck, radius.radreply WHERE radius.radcheck.username=radius.radreply.username AND radius.radcheck.username=:username;';
       modify.parasstring(':username', name_radius+'@flynet.com.pl');
       modify.sqlexec(conn1);

       writeln(' *'+name_radius+'@ flynet.com.pl');
       x:=x+1;
      end;



    end;
    if (x = 0) then writeln(' Nie było nic do czyszczenia!')
    else
     begin
      write('Wyczyszczono ');
      write(x);
      writeln(' rekord(ów)');
     end;



  mysql_close(conn1);
  writeln ('Przeładowanie modułu PPPoE zakończone sukcesem!');
  halt(0);
end.

-----------------------------------------------------------------------------------------------------------------

o to kod unitu mysqloi:



UNIT MYSQLOI;

INTERFACE
USES
  MYSQL4,CRT,SYSUTILS,STRINGS,VARIANTS,CLASSES,STRUTILS;

TYPE

  TSQLZ = OBJECT
        SQL:ANSISTRING;
        PSQL:PCHAR;
        ROW:TMYSQL_ROW;
        DATASET : PMYSQL_RES;
        PROCEDURE PARASSTRING(PAR:STRING;VALUE:VARIANT);
        PROCEDURE PARASNUMERIC(PAR:STRING;VALUE:VARIANT);
        PROCEDURE PARASDATE(PAR:STRING;VALUE:VARIANT);
        PROCEDURE SQLEXEC(CONN:PMYSQL);
        PROCEDURE UPDATE;
        PROCEDURE FREE;
  END;

FUNCTION MYSQL_CONNECT(HOST:PCHAR;USER:PCHAR;PASS:PCHAR):PMYSQL;


VAR
//  SOCK : PMYSQL;
//  ROW : TMYSQL_ROW;
//  Y : INTEGER;
  QMYSQL : TMYSQL;
IMPLEMENTATION

PROCEDURE TSQLZ.FREE;
BEGIN
       MYSQL_FREE_RESULT(DATASET);
END;

PROCEDURE TSQLZ.SQLEXEC(CONN:PMYSQL);
BEGIN
UPDATE;

IF (MYSQL_QUERY(CONN,PSQL) < 0) THEN
 BEGIN
  WRITELN (STDERR,'QUERY FAILED ');
  WRITELN (STDERR,MYSQL_ERROR(CONN));
 HALT(1);
END;
DATASET := MYSQL_STORE_RESULT(CONN);
// IF (DATASET = NIL) THEN
//  BEGIN
//   WRITELN (STDERR,'QUERY FAILED ');
//   WRITELN (STDERR,MYSQL_ERROR(CONN));
//   MYSQL_CLOSE(CONN);
//   HALT (1);
//  END;

//IF (SWITCH = 1) THEN
//BEGIN
// DATASET:=MYSQL_STORE_RESULT(BAZA);
//END;
//IF (SWITCH = 2) THEN
//BEGIN
// DATASET:=MYSQL_STORE_RESULT(BAZA);
// IF (MYSQL_NUM_ROWS(DATASET) > 0) THEN
//  BEGIN
//   FOR Y:=1 TO MYSQL_NUM_ROWS(DATASET) DO
//    BEGIN
//     ROW:=MYSQL_FETCH_ROW(DATASET);
//     WRITELN(ROW[1]);
//    END;
// END;
//END;
//MYSQL_QUERY(BAZA,PSQL);

END;


PROCEDURE TSQLZ.UPDATE;
BEGIN
psql:=stralloc(length(sql)+1);
psql:=strpcopy(psql,sql);
end;

procedure tsqlz.parasstring(par:string;value:variant);
begin
 sql:=ansireplacetext(sql,par,#39+value+#39);
 update;
end;

procedure tsqlz.parasnumeric(par:string;value:variant);
begin
sql:=ansireplacetext(sql,par,value);
update;
end;

procedure tsqlz.parasdate(par:string;value:variant);
begin
sql:=ansireplacetext(sql,par,value);
update;
end;
function mysql_connect(host:PChar;user:PChar;pass:PChar):PMYSQL;
var
 sock, sock_back : PMYSQL;
 back_host, back_user, back_pass : PChar;
// qmysql : TMYSQL;
begin
 back_host:='localhost';
 back_user:='root';
 back_pass:='abimbu6';
 mysql_init(PMySQL(@qmysql));
 sock:=mysql_real_connect(PMysql(@qmysql),host,user,pass,nil,0,nil,0);
 if (sock = Nil) then
  begin
   Writeln (stderr,'Couldn''t connect to MySQL.');
   Writeln (stderr,mysql_error(@qmysql));
   //   sock_back:=mysql_real_connect(PMysql(@qmysql),back_host,back_user,back_pass,nil,0,nil,0);
  end;
  mysql_connect:=sock;
end;
end.

Pamiętaj o z linkowaniu libmysqlclient. Wiem ze program moze troche przerazac ale ja nie pisze w pascalu zawodowo musialem przepisac po prostu skrypt do jakioegos normalnego jezyka co sie bedzie normalnie wykonywal,bo to samo w bashu hmmm wykonywalo sie jakies 4 sekundy... Mam gotowe binarki ale jak widac haslo i user do bazy sa zapisane w kodzie zrodlowym wiec lepiej abys sam opanowal kompilacje :). sorry za caloksztalt ale nie pisalem tego z mysla zeby to komu kolwiek udostępnić.

Pozdrawiam





05-12-07, malpi < malpi@o2.pl> napisał(a):

Dnia 5 grudnia 2007 9:47 Rafał Suliga <r.suliga@fast-net.pl> napisał(a):

> OK, to jak możesz to podeślij będę bardzo wdzięczny :).
>
> Pozdrawiam, i dzięki za pomoc.
>

sql.conf nic Ci nie da, bo nie jest zmieniony. Ja u siebie realizuję to przez funkcję plpsql (mam bazę postgresa)

Generalnie nie daje gotowych rozwiązań, bo to już wdrożenie (czytaj usługa płatna).

Pozdrawiam


_______________________________________________
lms mailing list
lms@lists.lms.org.pl
http://lists.lms.org.pl/mailman/listinfo/lms