Trying to accomodate the different db API's by only passing a SQLSOCK and the indivua...
authormmachado <mmachado>
Thu, 9 Sep 1999 18:22:42 +0000 (18:22 +0000)
committermmachado <mmachado>
Thu, 9 Sep 1999 18:22:42 +0000 (18:22 +0000)
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 f211de7..0eaecf8 100644 (file)
@@ -6,7 +6,6 @@
 
 #include "modules.h"
 #include "rlm_sql.h"
-#include "sql_module.h"
 
 
 SQL *sql = NULL;
index 13113a1..f5d4507 100644 (file)
@@ -5,9 +5,9 @@
 */
 
 #include "radiusd.h"
-
 #include "sql_module.h"
 
+
 #define QUERYLOG       "/var/log/radacct/radius.sql"
 #define SQLCONFIGFILE  "radius.conf"
 #define SQLBACKUP      "/var/log/radacct/sqlbackup.dat"
index e35301e..5351507 100644 (file)
@@ -260,13 +260,8 @@ int sql_save_acct(SQLREC *sqlrecord) {
  *************************************************************************/
 int sql_userparse(VALUE_PAIR **first_pair, SQL_ROW row) {
 
-       int x;
-       char            *s;
-       DICT_ATTR       *attr = NULL;
-       DICT_VALUE      *dval;
-       VALUE_PAIR      *pair, *pair2, *check;
-       struct tm       *tm;
-       time_t          timeval;
+       DICT_ATTR       *attr;
+       VALUE_PAIR      *pair, *check;
 
 
        if((attr = dict_attrfind(row[2])) == (DICT_ATTR *)NULL) {
@@ -281,107 +276,7 @@ int sql_userparse(VALUE_PAIR **first_pair, SQL_ROW row) {
        if ((check = pairfind(*first_pair, attr->value)) != NULL)
                return 0;
 
-       if((pair = (VALUE_PAIR *)malloc(sizeof(VALUE_PAIR))) == (VALUE_PAIR *)NULL) {
-               log(L_CONS|L_ERR, "sql_userparse: no memory");
-               exit(1);
-       }
-       strcpy(pair->name, attr->name);
-       pair->attribute = attr->value;
-       pair->type = attr->type;
-       pair->operator = PW_OPERATOR_EQUAL;
-       switch(pair->type) {
-
-               case PW_TYPE_STRING:
-                       strcpy(pair->strvalue, row[3]);
-                       pair->length = strlen(pair->strvalue);
-                       break;
-
-               case PW_TYPE_INTEGER:
-                       /*
-                        *      For PW_NAS_PORT_ID, allow a
-                        *      port range instead of just a port.
-                        */
-                        if (attr->value == PW_NAS_PORT_ID) {
-                              for(s = row[3]; *s; s++)
-                                   if (!isdigit(*s)) break;
-                                   if (*s) {
-                                       pair->type = PW_TYPE_STRING;
-                                       strcpy(pair->strvalue, row[3]);
-                                       pair->length = strlen(pair->strvalue);
-                                       break;
-                                   }
-                        }
-                        if (isdigit(*row[3])) {
-                                   pair->lvalue = atoi(row[3]);
-                                   pair->length = 4;
-                        }
-                        else if((dval = dict_valfind(row[3])) == (DICT_VALUE *)NULL) {
-                                   free(pair);
-                                   log(L_ERR|L_CONS, "unknown value %s", row[3]);
-                                   return(-1);
-                        }
-                        else {
-                                   pair->lvalue = dval->value;
-                                   pair->length = 4;
-                        }
-                        break;
-
-               case PW_TYPE_IPADDR:
-                       if (pair->attribute != PW_FRAMED_IP_ADDRESS) {
-                                   pair->lvalue = get_ipaddr(row[3]);
-                                   break;
-                        }
-
-                       /*
-                        *      We allow a "+" at the end to
-                        *      indicate that we should add the
-                        *      portno. to the IP address.
-                        */
-                        x = 0;
-                        if (row[3][0]) {
-                               for(s = row[3]; s[1]; s++) ;
-                                    if (*s == '+') {
-                                        *s = 0;
-                                        x = 1;
-                                    }
-                        }
-                        pair->lvalue = get_ipaddr(row[3]);
-                        pair->length = 4;
-
-                       /*
-                        *      Add an extra (hidden) attribute.
-                        */
-                        if((pair2 = malloc(sizeof(VALUE_PAIR))) == NULL) {
-                               log(L_CONS|L_ERR, "no memory");
-                               exit(1);
-                        }
-                        strcpy(pair2->name, "Add-Port-To-IP-Address");
-                        pair2->attribute = PW_ADD_PORT_TO_IP_ADDRESS;
-                        pair2->type = PW_TYPE_INTEGER;
-                        pair2->lvalue = x;
-                        pair2->length = 4;
-                        pairadd(first_pair, pair2);
-                        break;
-
-               case PW_TYPE_DATE:
-                        timeval = time(0);
-                        tm = localtime(&timeval);
-                        user_gettime(row[3], tm);
-#ifdef TIMELOCAL
-                        pair->lvalue = (UINT4)timelocal(tm);
-#else
-                        pair->lvalue = (UINT4)mktime(tm);
-#endif
-                        pair->length = 4;
-                        break;
-
-               default:
-                        free(pair);
-#if 1 /* Yeah yeah */
-                        log(L_ERR|L_CONS, "unknown attr. type %d", pair->type);
-#endif
-                        return(-1);
-       }
+       pair = makepair(row[2], row[3], PW_OPERATOR_EQUAL);
        pairadd(first_pair, pair);
 
        return 0;
index d64c0d7..e1edbee 100644 (file)
@@ -22,14 +22,14 @@ int sql_connect(void) {
 
         /* Connect to the database server */
         mysql_init(&MyAuthConn);
-        if (!(sql->AuthSock = mysql_real_connect(&MyAuthConn, sql->config.sql_server, sql->config.sql_login, sql->config.sql_password, sql->config.sql_db, 0, NULL, 0))) {
+        if (!(sql->AuthSock->conn = mysql_real_connect(&MyAuthConn, sql->config.sql_server, sql->config.sql_login, sql->config.sql_password, sql->config.sql_db, 0, NULL, 0))) {
              log(L_ERR, "Init: Couldn't connect authentication socket to MySQL server on %s as %s", sql->config.sql_server, sql->config.sql_login);
-             sql->AuthSock = NULL;
+             sql->AuthSock->conn = NULL;
         }
         mysql_init(&MyAcctConn);
-        if (!(sql->AcctSock = mysql_real_connect(&MyAcctConn, sql->config.sql_server, sql->config.sql_login, sql->config.sql_password, sql->config.sql_db, 0, NULL, 0))) {
+        if (!(sql->AcctSock->conn = mysql_real_connect(&MyAcctConn, sql->config.sql_server, sql->config.sql_login, sql->config.sql_password, sql->config.sql_db, 0, NULL, 0))) {
              log(L_ERR, "Init: Couldn't connect accounting socket to MySQL server on %s as %s", sql->config.sql_server, sql->config.sql_login);
-             sql->AcctSock = NULL;
+             sql->AcctSock->conn = NULL;
         }
            
        return 0;
@@ -47,30 +47,30 @@ int sql_connect(void) {
 int sql_checksocket(const char *facility) {
 
        if ((strncmp(facility, "Auth", 4) == 0)) {
-               if (sql->AuthSock == NULL) {
+               if (sql->AuthSock->conn == NULL) {
 
                        MYSQL MyAuthConn;
                        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(&MyAuthConn);
-                       if (!(sql->AuthSock = mysql_real_connect(&MyAuthConn, sql->config.sql_server, sql->config.sql_login, sql->config.sql_password, sql->config.sql_db, 0, NULL, 0))) {
+                       if (!(sql->AuthSock->conn = mysql_real_connect(&MyAuthConn, sql->config.sql_server, sql->config.sql_login, sql->config.sql_password, sql->config.sql_db, 0, NULL, 0))) {
                                log(L_ERR, "Auth: Couldn't connect authentication socket to MySQL server on %s as %s", sql->config.sql_server, sql->config.sql_login);
-                               sql->AuthSock = NULL;
+                               sql->AuthSock->conn = NULL;
                                return 0;
                        }
                }
 
        } else {
-               if (MyAcctSock == NULL) {
+               if (sql->AcctSock->conn == NULL) {
                        MYSQL MyAcctConn;
                        if (mysql_keepopen)
                                log(L_ERR, "%s: Keepopen set but had to reconnect to MySQL", facility);
                        /* Connect to the database server */
                        mysql_init(&MyAcctConn);
-                       if (!(sql->AcctSock = mysql_real_connect(&MyAcctConn, sql->config.sql_server, sql->config.sql_login, sql->config.sql_password, sql->config.sql_db, 0, NULL, 0))) {
+                       if (!(sql->AcctSock->conn = mysql_real_connect(&MyAcctConn, sql->config.sql_server, sql->config.sql_login, sql->config.sql_password, sql->config.sql_db, 0, NULL, 0))) {
                                log(L_ERR, "Acct: Couldn't connect accounting socket to MySQL server on %s as %s", sql->config.sql_server, sql->config.sql_login);
-                               sql->AcctSock = NULL;
+                               sql->AcctSock->conn = NULL;
                                return 0;
                        }
                }
@@ -93,11 +93,30 @@ void sql_query(SQLSOCK *socket, char *querystr) {
 
  if (sql->config.sqltrace)
        DEBUG(querystr);
- mysql_query(socket, querystr);
+ mysql_query(socket->conn, querystr);
 
 }
 
 
+/*************************************************************************
+ *
+ *     Function: sql_select_query
+ *
+ *     Purpose: Issue a select query to the database
+ *
+ *************************************************************************/
+int sql_select_query(SQLSOCK *socket, char *querystr) {
+
+ if (sql->config.sqltrace)
+       DEBUG(querystr);
+ mysql_query(socket->conn, querystr);
+ if (sql_store_result(socket) && sql_num_fields(socket)) 
+       return 0;
+ else
+       return 1;
+
+}
+
 
 /*************************************************************************
  *
@@ -107,16 +126,15 @@ void sql_query(SQLSOCK *socket, char *querystr) {
  *               set for the query.
  *
  *************************************************************************/
-SQL_RES *sql_store_result(SQLSOCK *socket) {
-
-       SQL_RES *result;
+int sql_store_result(SQLSOCK *socket) {
 
-       if (!(result = mysql_store_result(socket)) {
+       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));
-               sql_close(socket);
+               log(L_ERR,"MYSQL error: %s",mysql_error(socket->conn));
+               sql_close(socket->conn);
+               return 0;
        }
-       return result;
+       return 1;
 
 }
 
@@ -132,10 +150,10 @@ SQL_RES *sql_store_result(SQLSOCK *socket) {
 int sql_num_fields(SQLSOCK *socket) {
 
        int     num = 0;
-       if (!(num = mysql_num_fields(socket)) {
+       if (!(num = mysql_num_fields(socket->conn)) {
                log(L_ERR,"MYSQL Error: Cannot get result");
-               log(L_ERR,"MYSQL error: %s",mysql_error(socket));
-               sql_close(socket);
+               log(L_ERR,"MYSQL error: %s",mysql_error(socket->conn));
+               sql_close(socket->conn);
        }
        return num;
 }
@@ -149,9 +167,9 @@ int sql_num_fields(SQLSOCK *socket) {
  *               query
  *
  *************************************************************************/
-int sql_num_rows(SQL_RES *result) {
+int sql_num_rows(SQLSOCK *socket) {
 
-    return mysql_num_rows(result);
+    return mysql_num_rows(socket->result);
 
 }
 
@@ -164,9 +182,9 @@ int sql_num_rows(SQL_RES *result) {
  *               with all the data for the query
  *
  *************************************************************************/
-SQL_ROW sql_fetch_row(SQL_RES *result) {
+SQL_ROW sql_fetch_row(SQLSOCK *socket) {
 
-   return mysql_fetch_row(result);
+   return mysql_fetch_row(socket->result);
 
 }
 
@@ -180,9 +198,9 @@ SQL_ROW sql_fetch_row(SQL_RES *result) {
  *               for a result set
  *
  *************************************************************************/
-int sql_free_result(SQL_RES *result) {
+int sql_free_result(SQLSOCK *socket) {
 
-   return mysql_free_result(result);
+   return mysql_free_result(socket->result);
 
 }
 
@@ -198,7 +216,7 @@ int sql_free_result(SQL_RES *result) {
  *************************************************************************/
 char *sql_error(SQLSOCK *socket) {
 
-  return (mysql_error(socket));
+  return (mysql_error(socket->conn));
 
 }
 
@@ -213,7 +231,7 @@ char *sql_error(SQLSOCK *socket) {
  *************************************************************************/
 int sql_close(SQLSOCK *socket) {
 
-   return mysql_close(socket);
+   return mysql_close(socket->conn);
 
 }
 
index cbb4680..e791e0a 100644 (file)
@@ -6,6 +6,23 @@
 
 #include       <mysql/mysql.h>
 
-typedef MYSQL          SQLSOCK;
 typedef MYSQL_ROW      SQL_ROW;
-typedef MYSQL_RES         SQL_RES;
+typedef MYSQL_RES      SQL_RES;
+
+typedef struct {
+       MYSQL           *conn;
+       SQL_RES         *result;
+} SQLSOCK;
+
+
+int sql_connect(void);
+int sql_checksocket(const char *facility);
+void 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);
+char *sql_error(SQLSOCK *socket);
+int sql_close(SQLSOCK *socket);