First successful build! Now need to get rid of warnings and add the sql_finish_query... first-build
authormmachado <mmachado>
Tue, 21 Sep 1999 02:02:57 +0000 (02:02 +0000)
committermmachado <mmachado>
Tue, 21 Sep 1999 02:02:57 +0000 (02:02 +0000)
src/modules/rlm_sql/Makefile
src/modules/rlm_sql/rlm_sql.c
src/modules/rlm_sql/rlm_sql.h
src/modules/rlm_sql/sql.c
src/modules/rlm_sql/sql_module.c
src/modules/rlm_sql/sql_module.h

index eb24cb5..539772f 100644 (file)
@@ -2,10 +2,10 @@
 include config.mak
 
 TARGET         = rlm_sql
-SRCS           = rlm_sql.c sql.c
-HEADERS                = rlm_sql.h
+SRCS           = rlm_sql.c sql.c sql_module.c
+HEADERS                = rlm_sql.h sql_module.h
 RLM_CFLAGS     =
-LIBS           = -lmysqlclient
+LIBS           =-L/usr/local/lib/mysql -lmysqlclient
 
 $(STATIC_OBJS): $(HEADERS)
 
index 5b720fc..45d1470 100644 (file)
@@ -9,9 +9,6 @@
 #include "rlm_sql.h"
 
 
-SQL *sql = NULL;
-
-
 /***********************************************************************
  * start of main routines
  ***********************************************************************/
index f92333a..33e33f9 100644 (file)
@@ -6,17 +6,20 @@
 
 #include "sql_module.h"
 
-#define QUERYLOG       "/var/log/radacct/radius.sql"
-#define SQLCONFIGFILE  "radius.conf"
-#define SQLBACKUP      "/var/log/radacct/sqlbackup.dat"
+#define QUERYLOG               "/var/log/radacct/radius.sql"
+#define SQLCONFIGFILE          "rlm_sql.conf"
+#define SQLBACKUP              "/var/log/radacct/sqlbackup.dat"
+#define CHECKRAD1              "/usr/sbin/checkrad"
+#define CHECKRAD2              "/usr/local/sbin/checkrad"
 
-#define        SQLBIGREC       32
-#define        SQLLILREC       16
-#define PW_VP_USERDATA 1
-#define PW_VP_GROUPDATA        2
+#define        SQLBIGREC               32
+#define        SQLLILREC               16
+#define PW_VP_USERDATA         1
+#define PW_VP_GROUPDATA                2
+#define PW_VP_REALMDATA                3
 
-#define MAX_TABLE_LEN 20
-#define MAX_AUTH_QUERY_LEN 256
+#define MAX_TABLE_LEN          20
+#define MAX_AUTH_QUERY_LEN     256
 
 typedef struct sqlrec {
        char            AcctSessionId[SQLBIGREC];
@@ -79,3 +82,7 @@ int           sql_userparse(VALUE_PAIR **first_pair, SQL_ROW row);
 int            sql_checksocket(const char *facility);
 int            sql_getvpdata(char *table, VALUE_PAIR **vp, char *user, int mode);
 int            sql_check_multi(char *name, VALUE_PAIR *request, int maxsimul);
+
+
+SQL *sql;
+
index 304fd99..cdd1f87 100644 (file)
@@ -79,7 +79,7 @@ int sql_save_acct(SQLREC *sqlrecord) {
 
          sprintf(querystr, "UPDATE %s SET AcctStopTime='%s', AcctSessionTime=unix_timestamp('%s') - unix_timestamp(AcctStartTime), AcctTerminateCause='%s' WHERE AcctSessionTime=0 AND AcctStopTime=0 AND NASIPAddress= '%s' AND AcctStartTime <= '%s'", sql->config.sql_acct_table, sqlrecord->AcctTimeStamp, sqlrecord->AcctTimeStamp, sqlrecord->AcctTerminateCause, sqlrecord->NASIPAddress, sqlrecord->AcctTimeStamp);
 
-                if (sql_query(sql->AcctSock, (const char *) querystr) < 0)
+                if (sql_query(sql->AcctSock, querystr) < 0)
              log(L_ERR, "Acct: Couldn't update SQL accounting after NAS reboot - %s", sql_error(sql->AcctSock));
 
          if (sqlfile) {
@@ -92,8 +92,8 @@ int sql_save_acct(SQLREC *sqlrecord) {
 
        if (sqlrecord->AcctStatusTypeId == PW_STATUS_ALIVE) {
                sprintf(querystr, "UPDATE %s SET Framed-IP-Address = '%s' WHERE AcctSessionId = '%s' AND UserName = '%s' AND NASIPAddress= '%s'", sql->config.sql_acct_table, sqlrecord->FramedIPAddress, sqlrecord->AcctSessionId, sqlrecord->UserName, sqlrecord->NASIPAddress);
-               if (sql_query(sql->AcctSock, (const char *) querystr) < 0)
-               log(L_ERR, "Acct: Couldn't update SQL accounting after NAS reboot - %s", sql_error(sql->AcctSock));
+               if (sql_query(sql->AcctSock, querystr) < 0)
+                       log(L_ERR, "Acct: Couldn't update SQL accounting after NAS reboot - %s", sql_error(sql->AcctSock));
 
                if (sqlfile) {
                        fputs(querystr, sqlfile);
@@ -115,7 +115,7 @@ int sql_save_acct(SQLREC *sqlrecord) {
              sqlrecord->UserName,
              sqlrecord->NASIPAddress
              );
-                    if (sql_query(sql->AcctSock, (const char *) querystr) < 0)
+                    if (sql_query(sql->AcctSock, querystr) < 0)
                log(L_ERR, "Acct: Couldn't update SQL accounting START record - %s", sql_error(sql->AcctSock));
 
              num = sql_affected_rows(sql->AcctSock);
@@ -141,74 +141,65 @@ int sql_save_acct(SQLREC *sqlrecord) {
                 sqlrecord->AcctDelayTime
                 );                  
 
-                       if (sql_query(sql->AcctSock, (const char *) querystr) < 0)
+                       if (sql_query(sql->AcctSock, querystr) < 0)
                  log(L_ERR, "Acct: Couldn't insert SQL accounting START record - %s", sql_error(sql->AcctSock));
              }
 
            /* Got stop record */
            } else {
 
-             sprintf(querystr, "SELECT RadAcctId FROM %s WHERE AcctSessionId='%s' AND NASIPAddress='%s' AND UserName='%s'", sql->config.sql_acct_table, sqlrecord->AcctSessionId, sqlrecord->NASIPAddress, sqlrecord->UserName);
-              sql_query(sql->AcctSock, querystr);
-              if (!(result = sql_store_result(sql->AcctSock)) && sql_num_fields(sql->AcctSock)) {
-                   log(L_ERR,"SQL Error: Cannot get result");
-                   log(L_ERR,"SQL error: %s",sql_error(sql->AcctSock));
-                    sql_close(sql->AcctSock);
-                    sql->AcctSock = NULL;
-              } else {
-                    num = sql_num_rows(result);
-                   sql_free_result(result);
-              }
+               sprintf(querystr, "SELECT RadAcctId FROM %s WHERE AcctSessionId='%s' AND NASIPAddress='%s' AND UserName='%s'", sql->config.sql_acct_table, sqlrecord->AcctSessionId, sqlrecord->NASIPAddress, sqlrecord->UserName);
+               sql_select_query(sql->AcctSock, querystr);
+               num = sql_num_rows(sql->AcctSock);
+               sql_finish_select_query(sql->AcctSock);
 
-             if (num > 0) {
+               if (num > 0) {
 
-                /* Set stop time on matching record with start time */
-               snprintf(querystr, 2048, "UPDATE %s SET AcctStopTime = '%s', AcctSessionTime = '%lu', AcctInputOctets = '%u', AcctOutputOctets = '%u', AcctTerminateCause = '%s' WHERE AcctSessionId = '%s' AND UserName = '%s' AND NASIPAddress = '%s'", 
-               sql->config.sql_acct_table,
-                sqlrecord->AcctTimeStamp,
-                sqlrecord->AcctSessionTime,
-                sqlrecord->AcctInputOctets,
-                sqlrecord->AcctOutputOctets,
-                sqlrecord->AcctTerminateCause,
-                sqlrecord->AcctSessionId,
-                sqlrecord->UserName,
-                sqlrecord->NASIPAddress
-                );
+                       /* Set stop time on matching record with start time */
+                       snprintf(querystr, 2048, "UPDATE %s SET AcctStopTime = '%s', AcctSessionTime = '%lu', AcctInputOctets = '%u', AcctOutputOctets = '%u', AcctTerminateCause = '%s' WHERE AcctSessionId = '%s' AND UserName = '%s' AND NASIPAddress = '%s'", 
+                       sql->config.sql_acct_table,
+                       sqlrecord->AcctTimeStamp,
+                       sqlrecord->AcctSessionTime,
+                       sqlrecord->AcctInputOctets,
+                       sqlrecord->AcctOutputOctets,
+                       sqlrecord->AcctTerminateCause,
+                       sqlrecord->AcctSessionId,
+                       sqlrecord->UserName,
+                       sqlrecord->NASIPAddress);
 
 
-                       if (sql_query(sql->config.AcctSock, (const char *) querystr) < 0)
-                  log(L_ERR, "Acct: Couldn't update SQL accounting STOP record - %s", sql_error(sql->AcctSock));
+                       if (sql_query(sql->AcctSock, querystr) < 0)
+                               log(L_ERR, "Acct: Couldn't update SQL accounting STOP record - %s", sql_error(sql->AcctSock));
 
-             } else if (num == 0) {
+               } else if (num == 0) {
 
             
-                /* Insert record with no start time until matching start record comes */
-                snprintf(querystr, 2048, "INSERT INTO %s VALUES (0, '%s', '%s', '%s', '%s', %ld, '%s', 0, '%s', '%lu', '%s', '%s', '%u', '%u', '%s', '%s', '%s', '%s', '%s', '%s', %ld)",
-                sql->config.sql_acct_table,
-                sqlrecord->AcctSessionId,
-                sqlrecord->UserName,
-                sqlrecord->Realm,
-                sqlrecord->NASIPAddress,
-                sqlrecord->NASPortId,
-                sqlrecord->NASPortType,
-               sqlrecord->AcctTimeStamp,
-               sqlrecord->AcctSessionTime,
-                sqlrecord->AcctAuthentic,
-                sqlrecord->ConnectInfo,
-               sqlrecord->AcctInputOctets,
-               sqlrecord->AcctOutputOctets,
-                sqlrecord->CalledStationId,
-                sqlrecord->CallingStationId,
-               sqlrecord->AcctTerminateCause,
-                sqlrecord->ServiceType,
-                sqlrecord->FramedProtocol,
-                sqlrecord->FramedIPAddress,
-                sqlrecord->AcctDelayTime
-                );                  
-
-                       if (sql->config.sql_query(sql->AcctSock, (const char *) querystr) < 0)
-                  log(L_ERR, "Acct: Couldn't insert SQL accounting STOP record - %s", sql_error(sql->AcctSock));
-             }
+                       /* Insert record with no start time until matching start record comes */
+                       snprintf(querystr, 2048, "INSERT INTO %s VALUES (0, '%s', '%s', '%s', '%s', %ld, '%s', 0, '%s', '%lu', '%s', '%s', '%u', '%u', '%s', '%s', '%s', '%s', '%s', '%s', %ld)",
+                       sql->config.sql_acct_table,
+                       sqlrecord->AcctSessionId,
+                       sqlrecord->UserName,
+                       sqlrecord->Realm,
+                       sqlrecord->NASIPAddress,
+                       sqlrecord->NASPortId,
+                       sqlrecord->NASPortType,
+                       sqlrecord->AcctTimeStamp,
+                       sqlrecord->AcctSessionTime,
+                       sqlrecord->AcctAuthentic,
+                       sqlrecord->ConnectInfo,
+                       sqlrecord->AcctInputOctets,
+                       sqlrecord->AcctOutputOctets,
+                       sqlrecord->CalledStationId,
+                       sqlrecord->CallingStationId,
+                       sqlrecord->AcctTerminateCause,
+                       sqlrecord->ServiceType,
+                       sqlrecord->FramedProtocol,
+                       sqlrecord->FramedIPAddress,
+                       sqlrecord->AcctDelayTime);                  
+
+                       if (sql_query(sql->AcctSock, querystr) < 0)
+                               log(L_ERR, "Acct: Couldn't insert SQL accounting STOP record - %s", sql_error(sql->AcctSock));
+               }
 
           }
           if (sqlfile) {
@@ -263,7 +254,7 @@ int sql_userparse(VALUE_PAIR **first_pair, SQL_ROW row) {
        VALUE_PAIR      *pair, *check;
 
 
-       if((attr = dict_attrfind(row[2])) == (DICT_ATTR *)NULL) {
+       if((attr = dict_attrbyvalue((int)row[2])) == (DICT_ATTR *)NULL) {
 #if 1 /* Be quiet. */
                log(L_ERR|L_CONS, "unknown attribute %s", row[2]);
 #endif 
@@ -272,10 +263,10 @@ int sql_userparse(VALUE_PAIR **first_pair, SQL_ROW row) {
 
        /* If attribute is already there, skip it because we checked usercheck first 
           and we want user settings to over ride group settings */
-       if ((check = pairfind(*first_pair, attr->value)) != NULL)
+       if ((check = pairfind(*first_pair, attr->attr)) != NULL)
                return 0;
 
-       pair = makepair(row[2], row[3], PW_OPERATOR_EQUAL);
+       pair = pairmake(row[2], row[3], T_OP_EQ);
        pairadd(first_pair, pair);
 
        return 0;
index e1edbee..9ca6aa8 100644 (file)
@@ -4,8 +4,12 @@
  * Mike Machado <mike@innercite.com>
  */
 
+#include <stdio.h>
+#include <sys/stat.h>
+#include <stdlib.h>
+
+#include       "radiusd.h"
 #include       "rlm_sql.h"
-#include       "sql_module.h"
 
 
 /*************************************************************************
@@ -64,7 +68,7 @@ int sql_checksocket(const char *facility) {
        } else {
                if (sql->AcctSock->conn == NULL) {
                        MYSQL MyAcctConn;
-                       if (mysql_keepopen)
+                       if (sql->config.sql_keepopen)
                                log(L_ERR, "%s: Keepopen set but had to reconnect to MySQL", facility);
                        /* Connect to the database server */
                        mysql_init(&MyAcctConn);
@@ -89,11 +93,11 @@ int sql_checksocket(const char *facility) {
  *     Purpose: Issue a query to the database
  *
  *************************************************************************/
-void sql_query(SQLSOCK *socket, char *querystr) {
+int sql_query(SQLSOCK *socket, char *querystr) {
 
  if (sql->config.sqltrace)
        DEBUG(querystr);
- mysql_query(socket->conn, querystr);
return mysql_query(socket->conn, querystr);
 
 }
 
@@ -128,10 +132,10 @@ int sql_select_query(SQLSOCK *socket, char *querystr) {
  *************************************************************************/
 int sql_store_result(SQLSOCK *socket) {
 
-       if (!(socket->result = mysql_store_result(socket->conn)) {
+       if (!(socket->result = mysql_store_result(socket->conn))) {
                log(L_ERR,"MYSQL Error: Cannot get result");
                log(L_ERR,"MYSQL error: %s",mysql_error(socket->conn));
-               sql_close(socket->conn);
+               sql_close(socket);
                return 0;
        }
        return 1;
@@ -150,10 +154,10 @@ int sql_store_result(SQLSOCK *socket) {
 int sql_num_fields(SQLSOCK *socket) {
 
        int     num = 0;
-       if (!(num = mysql_num_fields(socket->conn)) {
+       if (!(num = mysql_num_fields(socket->conn))) {
                log(L_ERR,"MYSQL Error: Cannot get result");
                log(L_ERR,"MYSQL error: %s",mysql_error(socket->conn));
-               sql_close(socket->conn);
+               sql_close(socket);
        }
        return num;
 }
@@ -198,9 +202,9 @@ SQL_ROW sql_fetch_row(SQLSOCK *socket) {
  *               for a result set
  *
  *************************************************************************/
-int sql_free_result(SQLSOCK *socket) {
+void sql_free_result(SQLSOCK *socket) {
 
-   return mysql_free_result(socket->result);
+   mysql_free_result(socket->result);
 
 }
 
@@ -229,10 +233,49 @@ char *sql_error(SQLSOCK *socket) {
  *               connection
  *
  *************************************************************************/
-int sql_close(SQLSOCK *socket) {
+void sql_close(SQLSOCK *socket) {
 
-   return mysql_close(socket->conn);
+   mysql_close(socket->conn);
 
 }
 
 
+/*************************************************************************
+ *
+ *     Function: sql_finish_query
+ *
+ *     Purpose: End the query, such as freeing memory
+ *
+ *************************************************************************/
+void sql_finish_query(SQLSOCK *socket) {
+
+}
+
+
+
+/*************************************************************************
+ *
+ *     Function: sql_finish_select_query
+ *
+ *     Purpose: End the select query, such as freeing memory or result
+ *
+ *************************************************************************/
+void sql_finish_select_query(SQLSOCK *socket) {
+
+   sql_free_result(socket);
+}
+
+
+/*************************************************************************
+ *
+ *     Function: sql_affected_rows
+ *
+ *     Purpose: End the select quh as freeing memory or result
+ *
+ *************************************************************************/
+int sql_affected_rows(SQLSOCK *socket) {
+   int rows;
+
+   rows = mysql_affected_rows(socket->conn);
+   return rows;
+}
index 1fbbb23..fc1f657 100644 (file)
@@ -17,12 +17,15 @@ typedef struct {
 
 int sql_connect(void);
 int sql_checksocket(const char *facility);
-void sql_query(SQLSOCK *socket, char *querystr);
+int sql_query(SQLSOCK *socket, char *querystr);
 int sql_select_query(SQLSOCK *socket, char *querystr);
 int sql_store_result(SQLSOCK *socket);
 int sql_num_fields(SQLSOCK *socket);
 int sql_num_rows(SQLSOCK *socket);
 SQL_ROW sql_fetch_row(SQLSOCK *socket);
-int sql_free_result(SQLSOCK *socket);
+void sql_free_result(SQLSOCK *socket);
 char *sql_error(SQLSOCK *socket);
-int sql_close(SQLSOCK *socket);
+void sql_close(SQLSOCK *socket);
+void sql_finish_query(SQLSOCK *socket);
+void sql_finish_select_query(SQLSOCK *socket);
+int sql_affected_rows(SQLSOCK *socket);